aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--changelog.md20
-rw-r--r--demo/dist/demo.js5
-rw-r--r--demo/dist/demo.js.map2
-rw-r--r--demo/dist/demo.min.js2
-rw-r--r--demo/dist/demo.min.js.map2
-rw-r--r--demo/src/js/demo.js5
-rw-r--r--dist/plyr.js9
-rw-r--r--dist/plyr.js.map2
-rw-r--r--dist/plyr.min.js2
-rw-r--r--dist/plyr.min.js.map2
-rw-r--r--dist/plyr.polyfilled.js11
-rw-r--r--dist/plyr.polyfilled.js.map2
-rw-r--r--dist/plyr.polyfilled.min.js2
-rw-r--r--dist/plyr.polyfilled.min.js.map2
-rw-r--r--package.json2
-rw-r--r--readme.md6
-rw-r--r--src/js/defaults.js2
-rw-r--r--src/js/listeners.js5
-rw-r--r--src/js/plyr.js2
-rw-r--r--src/js/plyr.polyfilled.js2
20 files changed, 55 insertions, 32 deletions
diff --git a/changelog.md b/changelog.md
index 1d995c65..bba2bf1c 100644
--- a/changelog.md
+++ b/changelog.md
@@ -1,4 +1,18 @@
-# v3.0.3
+## v3.0.6
+
+* Improved the logic for the custom handlers preventing default handlers
+
+## v3.0.5
+
+* Removed console messages
+
+## v3.0.4
+
+* Fixes for fullscreen not working inside iframes
+* Fixes for custom handlers being able to prevent default
+* Fixes for controls not hiding/showing correctly on Mobile Safari
+
+## v3.0.3
* Vimeo offset tweak (fixes #826)
* Fix for .stop() method (fixes #819)
@@ -9,11 +23,11 @@
* Fix fast-forward control (thanks @saadshahd)
* Fix the options link in the readme (thanks @DanielRuf)
-# v3.0.2
+## v3.0.2
* Fix for Safari not firing error events when trying to load blocked scripts
-# v3.0.1
+## v3.0.1
* Fix for trying to accessing local storage when it's blocked
diff --git a/demo/dist/demo.js b/demo/dist/demo.js
index 775a6c2a..d571df73 100644
--- a/demo/dist/demo.js
+++ b/demo/dist/demo.js
@@ -3843,9 +3843,12 @@ var singleton = Raven;
google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c'
},
ads: {
- // enabled: true,
+ enabled: true,
publisherId: '918848828995742'
}
+ /* listeners: {
+ seek: () => false,
+ }, */
});
// Expose for tinkering in the console
diff --git a/demo/dist/demo.js.map b/demo/dist/demo.js.map
index 7e53999d..90ad0107 100644
--- a/demo/dist/demo.js.map
+++ b/demo/dist/demo.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","demo/src/js/demo.js"],"names":["_window","global","isObject","isError","isErrorEvent","isUndefined","isFunction","isPlainObject","isString","isArray","isEmptyObject","supportsFetch","supportsReferrerPolicy","each","hasKey","objectMerge","objectFrozen","truncate","joinRegExp","urlencode","parseUrl","uuid4","htmlTreeAsString","isSameException","isSameStacktrace","fill","serializeException","stringify","serializeKeysForMessage","require$$0","Raven","TraceKit","md5","RavenConfigError","RavenConstructor","isLive","window","location","host","config","install","addEventListener","context","shr","setup","tabClassName","target","classList","remove","event","keyCode","activeElement","add","player","Plyr","buttons","document","querySelectorAll","types","currentType","hash","replace","historySupport","history","pushState","toggleClass","element","className","state","newSource","type","init","length","video","source","audio","youtube","vimeo","from","forEach","button","parentElement","querySelector","setAttribute","removeAttribute","getAttribute","replaceState","i","s","o","g","r","a","m","GoogleAnalyticsObject","q","push","arguments","l","Date","createElement","getElementsByTagName","async","src","parentNode","insertBefore","ga"],"mappings":"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","file":"demo.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' ? global : typeof self !== 'undefined' ? self : {};\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 ({}.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 supportsErrorEvent() && {}.toString.call(value) === '[object ErrorEvent]';\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 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 return !max || 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 <a/> 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 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 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 var maxLength = 40;\n\n if (typeof value === 'string') {\n return value.length <= maxLength ? value : value.substr(0, maxLength - 1) + '\\u2026';\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\nmodule.exports = {\n isObject: isObject,\n isError: isError,\n isErrorEvent: isErrorEvent,\n isUndefined: isUndefined,\n isFunction: isFunction,\n isPlainObject: isPlainObject,\n isString: isString,\n isArray: isArray,\n isEmptyObject: isEmptyObject,\n supportsErrorEvent: supportsErrorEvent,\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};\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\n return document.location.href;\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.<string, *>} 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.<string, *>} 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|<anonymous>|[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 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.<string, *>} 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.<string, *>} 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 isError = utils.isError;\nvar isObject = utils.isObject;\nvar isPlainObject = utils.isPlainObject;\nvar isErrorEvent = utils.isErrorEvent;\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;\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\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 };\n this._fetchDefaults = {\n method: 'POST',\n keepalive: true,\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.23.3',\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 = undefined;\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} func 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 },\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 (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 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 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 if (this._globalOptions.stacktrace || (options && options.stacktrace)) {\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 = options || {};\n\n var lastEventId = options.eventId || this.lastEventId();\n if (!lastEventId) {\n throw new RavenConfigError('Missing eventId');\n }\n\n var dsn = options.dsn || this._dsn;\n if (!dsn) {\n throw new RavenConfigError('Missing DSN');\n }\n\n var encode = encodeURIComponent;\n var qs = '';\n qs += '?eventId=' + encode(lastEventId);\n qs += '&dsn=' + encode(dsn);\n\n var user = options.user || this._globalContext.user;\n if (user) {\n if (user.name) qs += '&name=' + encode(user.name);\n if (user.email) qs += '&email=' + encode(user.email);\n }\n\n var globalServer = this._getGlobalServer(this._parseDSN(dsn));\n\n var script = _document.createElement('script');\n script.async = true;\n script.src = globalServer + '/api/embed/error-page/' + qs;\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 = '<unknown>';\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(originalCallback);\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(fn.handleEvent);\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(fn, undefined, before),\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(self.wrap(cb));\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(orig);\n }); // intentionally don't track filled methods on XHR instances\n }\n }\n\n if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {\n var xhrproto = 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(orig, undefined, onreadystatechangeHandler);\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.apply(this, args).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 };\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 {\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 history.pushState &&\n 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(history, 'pushState', historyReplacementFunction, wrappedBuiltIns);\n fill(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() {\n // if we are intentionally ignoring errors via onerror, bail out\n if (!this._ignoreOnError) {\n this._handleStackInfo.apply(this, arguments);\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 culprit: fileurl\n },\n options\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.culprit !== last.culprit // 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 // 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 _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 if (this._originalConsoleMethods[level] && this.debug) {\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// Plyr.io demo\n// This code is purely for the https://plyr.io website\n// Please see readme.md in the root or github.com/sampotts/plyr\n// ==========================================================================\n\nimport Raven from 'raven-js';\n\n(() => {\n const isLive = window.location.host === 'plyr.io';\n\n // Raven / Sentry\n // For demo site (https://plyr.io) only\n if (isLive) {\n Raven.config('https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555').install();\n }\n\n document.addEventListener('DOMContentLoaded', () => {\n Raven.context(() => {\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n document.activeElement.classList.add(tabClassName);\n }, 0);\n });\n\n // Setup the player\n const player = new Plyr('#player', {\n debug: true,\n title: 'View From A Blue Moon',\n iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: true,\n },\n /* controls: [\n 'play-large',\n 'restart',\n 'rewind',\n 'play',\n 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ], */\n captions: {\n active: true,\n },\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n ads: {\n // enabled: true,\n publisherId: '918848828995742',\n },\n });\n\n // Expose for tinkering in the console\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [{\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4',\n type: 'video/mp4',\n }],\n poster: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title: 'Kishi Bashi &ndash; &ldquo;It All Began With A Burst&rdquo;',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [{\n src: 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n }],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n }],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button => toggleClass(button.parentElement, 'active', false));\n\n // Set active on parent\n toggleClass(document.querySelector(`[data-source=\"${type}\"]`), 'active', true);\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(cite => {\n cite.setAttribute('hidden', '');\n });\n document.querySelector(`.plyr__cite--${type}`).removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`,\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n });\n });\n\n // Google analytics\n // For demo site (https://plyr.io) only\n /* eslint-disable */\n if (isLive) {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n }\n /* eslint-enable */\n})();\n"]} \ No newline at end of file
+{"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","demo/src/js/demo.js"],"names":["_window","global","isObject","isError","isErrorEvent","isUndefined","isFunction","isPlainObject","isString","isArray","isEmptyObject","supportsFetch","supportsReferrerPolicy","each","hasKey","objectMerge","objectFrozen","truncate","joinRegExp","urlencode","parseUrl","uuid4","htmlTreeAsString","isSameException","isSameStacktrace","fill","serializeException","stringify","serializeKeysForMessage","require$$0","Raven","TraceKit","md5","RavenConfigError","RavenConstructor","isLive","window","location","host","config","install","addEventListener","context","shr","setup","tabClassName","target","classList","remove","event","keyCode","activeElement","add","player","Plyr","buttons","document","querySelectorAll","types","currentType","hash","replace","historySupport","history","pushState","toggleClass","element","className","state","newSource","type","init","length","video","source","audio","youtube","vimeo","from","forEach","button","parentElement","querySelector","setAttribute","removeAttribute","getAttribute","replaceState","i","s","o","g","r","a","m","GoogleAnalyticsObject","q","push","arguments","l","Date","createElement","getElementsByTagName","async","src","parentNode","insertBefore","ga"],"mappings":"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","file":"demo.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' ? global : typeof self !== 'undefined' ? self : {};\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 ({}.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 supportsErrorEvent() && {}.toString.call(value) === '[object ErrorEvent]';\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 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 return !max || 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 <a/> 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 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 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 var maxLength = 40;\n\n if (typeof value === 'string') {\n return value.length <= maxLength ? value : value.substr(0, maxLength - 1) + '\\u2026';\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\nmodule.exports = {\n isObject: isObject,\n isError: isError,\n isErrorEvent: isErrorEvent,\n isUndefined: isUndefined,\n isFunction: isFunction,\n isPlainObject: isPlainObject,\n isString: isString,\n isArray: isArray,\n isEmptyObject: isEmptyObject,\n supportsErrorEvent: supportsErrorEvent,\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};\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\n return document.location.href;\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.<string, *>} 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.<string, *>} 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|<anonymous>|[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 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.<string, *>} 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.<string, *>} 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 isError = utils.isError;\nvar isObject = utils.isObject;\nvar isPlainObject = utils.isPlainObject;\nvar isErrorEvent = utils.isErrorEvent;\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;\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\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 };\n this._fetchDefaults = {\n method: 'POST',\n keepalive: true,\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.23.3',\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 = undefined;\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} func 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 },\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 (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 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 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 if (this._globalOptions.stacktrace || (options && options.stacktrace)) {\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 = options || {};\n\n var lastEventId = options.eventId || this.lastEventId();\n if (!lastEventId) {\n throw new RavenConfigError('Missing eventId');\n }\n\n var dsn = options.dsn || this._dsn;\n if (!dsn) {\n throw new RavenConfigError('Missing DSN');\n }\n\n var encode = encodeURIComponent;\n var qs = '';\n qs += '?eventId=' + encode(lastEventId);\n qs += '&dsn=' + encode(dsn);\n\n var user = options.user || this._globalContext.user;\n if (user) {\n if (user.name) qs += '&name=' + encode(user.name);\n if (user.email) qs += '&email=' + encode(user.email);\n }\n\n var globalServer = this._getGlobalServer(this._parseDSN(dsn));\n\n var script = _document.createElement('script');\n script.async = true;\n script.src = globalServer + '/api/embed/error-page/' + qs;\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 = '<unknown>';\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(originalCallback);\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(fn.handleEvent);\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(fn, undefined, before),\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(self.wrap(cb));\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(orig);\n }); // intentionally don't track filled methods on XHR instances\n }\n }\n\n if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {\n var xhrproto = 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(orig, undefined, onreadystatechangeHandler);\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.apply(this, args).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 };\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 {\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 history.pushState &&\n 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(history, 'pushState', historyReplacementFunction, wrappedBuiltIns);\n fill(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() {\n // if we are intentionally ignoring errors via onerror, bail out\n if (!this._ignoreOnError) {\n this._handleStackInfo.apply(this, arguments);\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 culprit: fileurl\n },\n options\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.culprit !== last.culprit // 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 // 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 _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 if (this._originalConsoleMethods[level] && this.debug) {\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// Plyr.io demo\n// This code is purely for the https://plyr.io website\n// Please see readme.md in the root or github.com/sampotts/plyr\n// ==========================================================================\n\nimport Raven from 'raven-js';\n\n(() => {\n const isLive = window.location.host === 'plyr.io';\n\n // Raven / Sentry\n // For demo site (https://plyr.io) only\n if (isLive) {\n Raven.config('https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555').install();\n }\n\n document.addEventListener('DOMContentLoaded', () => {\n Raven.context(() => {\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n document.activeElement.classList.add(tabClassName);\n }, 0);\n });\n\n // Setup the player\n const player = new Plyr('#player', {\n debug: true,\n title: 'View From A Blue Moon',\n iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: true,\n },\n /* controls: [\n 'play-large',\n 'restart',\n 'rewind',\n 'play',\n 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ], */\n captions: {\n active: true,\n },\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n ads: {\n enabled: true,\n publisherId: '918848828995742',\n },\n /* listeners: {\n seek: () => false,\n }, */\n });\n\n // Expose for tinkering in the console\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [{\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4',\n type: 'video/mp4',\n }],\n poster: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title: 'Kishi Bashi &ndash; &ldquo;It All Began With A Burst&rdquo;',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [{\n src: 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n }],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n }],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button => toggleClass(button.parentElement, 'active', false));\n\n // Set active on parent\n toggleClass(document.querySelector(`[data-source=\"${type}\"]`), 'active', true);\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(cite => {\n cite.setAttribute('hidden', '');\n });\n document.querySelector(`.plyr__cite--${type}`).removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`,\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n });\n });\n\n // Google analytics\n // For demo site (https://plyr.io) only\n /* eslint-disable */\n if (isLive) {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n }\n /* eslint-enable */\n})();\n"]} \ No newline at end of file
diff --git a/demo/dist/demo.min.js b/demo/dist/demo.min.js
index c689f847..84aac34a 100644
--- a/demo/dist/demo.min.js
+++ b/demo/dist/demo.min.js
@@ -1,2 +1,2 @@
-!function(){"use strict";var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};var t,r=(function(e,t){function r(e,t){for(var r=0;r<e.length;++r)if(e[r]===t)return r;return-1}function n(e,t){var n=[],o=[];return null==t&&(t=function(e,t){return n[0]===t?"[Circular ~]":"[Circular ~."+o.slice(0,r(n,t)).join(".")+"]"}),function(i,a){if(n.length>0){var s=r(n,this);~s?n.splice(s+1):n.push(this),~s?o.splice(s,1/0,i):o.push(i),~r(n,a)&&(a=t.call(this,i,a))}else n.push(a);return null==e?a instanceof Error?function(e){var t={stack:e.stack,message:e.message,name:e.name};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t}(a):a:e.call(this,i,a)}}(e.exports=function(e,t,r,o){return JSON.stringify(e,n(t,o),r)}).getSerialize=n}(t={exports:{}},t.exports),t.exports),n="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{};function o(e){return void 0===e}function i(e){return"[object Object]"===Object.prototype.toString.call(e)}function a(e){return"[object String]"===Object.prototype.toString.call(e)}function s(e){return"[object Array]"===Object.prototype.toString.call(e)}function c(){try{return new ErrorEvent(""),!0}catch(e){return!1}}function l(){if(!("fetch"in n))return!1;try{return new Headers,new Request(""),new Response,!0}catch(e){return!1}}function u(e,t){var r,n;if(o(e.length))for(r in e)h(e,r)&&t.call(null,r,e[r]);else if(n=e.length)for(r=0;r<n;r++)t.call(null,r,e[r])}function h(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function f(e){var t,r,n,o,i,s=[];if(!e||!e.tagName)return"";if(s.push(e.tagName.toLowerCase()),e.id&&s.push("#"+e.id),(t=e.className)&&a(t))for(r=t.split(/\s+/),i=0;i<r.length;i++)s.push("."+r[i]);var c=["type","name","title","alt"];for(i=0;i<c.length;i++)n=c[i],(o=e.getAttribute(n))&&s.push("["+n+'="'+o+'"]');return s.join("")}function p(e,t){return!!(!!e^!!t)}function d(e,t){if(p(e,t))return!1;var r,n,o=e.frames,i=t.frames;if(o.length!==i.length)return!1;for(var a=0;a<o.length;a++)if(r=o[a],n=i[a],r.filename!==n.filename||r.lineno!==n.lineno||r.colno!==n.colno||r.function!==n.function)return!1;return!0}var g=3,_=51200,v=40;function m(e){return function(e){return~-encodeURI(e).split(/%..|./).length}(JSON.stringify(e))}function b(e){if("string"==typeof e)return e.length<=40?e:e.substr(0,39)+"…";if("number"==typeof e||"boolean"==typeof e||void 0===e)return e;var t=Object.prototype.toString.call(e);return"[object Object]"===t?"[Object]":"[object Array]"===t?"[Array]":"[object Function]"===t?e.name?"[Function: "+e.name+"]":"[Function]":e}var y={isObject:function(e){return"object"==typeof e&&null!==e},isError:function(e){switch({}.toString.call(e)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return e instanceof Error}},isErrorEvent:function(e){return c()&&"[object ErrorEvent]"==={}.toString.call(e)},isUndefined:o,isFunction:function(e){return"function"==typeof e},isPlainObject:i,isString:a,isArray:s,isEmptyObject:function(e){if(!i(e))return!1;for(var t in e)if(e.hasOwnProperty(t))return!1;return!0},supportsErrorEvent:c,supportsFetch:l,supportsReferrerPolicy:function(){if(!l())return!1;try{return new Request("pickleRick",{referrerPolicy:"origin"}),!0}catch(e){return!1}},supportsPromiseRejectionEvent:function(){return"function"==typeof PromiseRejectionEvent},wrappedCallback:function(e){return function(t,r){var n=e(t)||t;return r&&r(n)||n}},each:u,objectMerge:function(e,t){return t?(u(t,function(t,r){e[t]=r}),e):e},truncate:function(e,t){return!t||e.length<=t?e:e.substr(0,t)+"…"},objectFrozen:function(e){return!!Object.isFrozen&&Object.isFrozen(e)},hasKey:h,joinRegExp:function(e){for(var t,r=[],n=0,o=e.length;n<o;n++)a(t=e[n])?r.push(t.replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1")):t&&t.source&&r.push(t.source);return new RegExp(r.join("|"),"i")},urlencode:function(e){var t=[];return u(e,function(e,r){t.push(encodeURIComponent(e)+"="+encodeURIComponent(r))}),t.join("&")},uuid4:function(){var e=n.crypto||n.msCrypto;if(!o(e)&&e.getRandomValues){var t=new Uint16Array(8);e.getRandomValues(t),t[3]=4095&t[3]|16384,t[4]=16383&t[4]|32768;var r=function(e){for(var t=e.toString(16);t.length<4;)t="0"+t;return t};return r(t[0])+r(t[1])+r(t[2])+r(t[3])+r(t[4])+r(t[5])+r(t[6])+r(t[7])}return"xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})},htmlTreeAsString:function(e){for(var t,r=[],n=0,o=0,i=" > ".length;e&&n++<5&&!("html"===(t=f(e))||n>1&&o+r.length*i+t.length>=80);)r.push(t),o+=t.length,e=e.parentNode;return r.reverse().join(" > ")},htmlElementAsString:f,isSameException:function(e,t){return!p(e,t)&&(e=e.values[0],t=t.values[0],e.type===t.type&&e.value===t.value&&(r=e.stacktrace,n=t.stacktrace,(!o(r)||!o(n))&&d(e.stacktrace,t.stacktrace)));var r,n},isSameStacktrace:d,parseUrl:function(e){if("string"!=typeof e)return{};var t=e.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/),r=t[6]||"",n=t[8]||"";return{protocol:t[2],host:t[4],path:t[5],relative:t[5]+r+n}},fill:function(e,t,r,n){var o=e[t];e[t]=r(o),e[t].__raven__=!0,e[t].__orig__=o,n&&n.push([e,t,o])},safeJoin:function(e,t){if(!s(e))return"";for(var r=[],n=0;n<e.length;n++)try{r.push(String(e[n]))}catch(e){r.push("[value cannot be serialized]")}return r.join(t)},serializeException:function e(t,n,o){if(!i(t))return t;o="number"!=typeof(n="number"!=typeof n?g:n)?_:o;var a=function e(t,r){return 0===r?b(t):i(t)?Object.keys(t).reduce(function(n,o){return n[o]=e(t[o],r-1),n},{}):Array.isArray(t)?t.map(function(t){return e(t,r-1)}):b(t)}(t,n);return m(r(a))>o?e(t,n-1):a},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?v:t,e[0].length>=t)return e[0];for(var r=e.length;r>0;r--){var n=e.slice(0,r).join(", ");if(!(n.length>t))return r===e.length?n:n+"…"}return""}},E={collectWindowErrors:!0,debug:!1},w="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},k=[].slice,x="?",S=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;function O(){return"undefined"==typeof document||null==document.location?"":document.location.href}E.report=function(){var e,t,r=[],n=null,o=null,i=null;function a(e,t){var n=null;if(!t||E.collectWindowErrors){for(var o in r)if(r.hasOwnProperty(o))try{r[o].apply(null,[e].concat(k.call(arguments,2)))}catch(e){n=e}if(n)throw n}}function s(t,r,n,o,s){var l=y.isErrorEvent(s)?s.error:s,u=y.isErrorEvent(t)?t.message:t;if(i)E.computeStackTrace.augmentStackTraceWithInitialElement(i,r,n,u),c();else if(l&&y.isError(l))a(E.computeStackTrace(l),!0);else{var h,f={url:r,line:n,column:o},p=void 0;if("[object String]"==={}.toString.call(u))(h=u.match(S))&&(p=h[1],u=h[2]);f.func=x,a({name:p,message:u,url:O(),stack:[f]},!0)}return!!e&&e.apply(this,arguments)}function c(){var e=i,t=n;n=null,i=null,o=null,a.apply(null,[e,!1].concat(t))}function l(e,t){var r=k.call(arguments,1);if(i){if(o===e)return;c()}var a=E.computeStackTrace(e);if(i=a,o=e,n=r,setTimeout(function(){o===e&&c()},a.incomplete?2e3:0),!1!==t)throw e}return l.subscribe=function(n){t||(e=w.onerror,w.onerror=s,t=!0),r.push(n)},l.unsubscribe=function(e){for(var t=r.length-1;t>=0;--t)r[t]===e&&r.splice(t,1)},l.uninstall=function(){t&&(w.onerror=e,t=!1,e=void 0),r=[]},l}(),E.computeStackTrace=function(){function e(e){if(void 0!==e.stack&&e.stack){for(var t,r,n,o=/^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,i=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,a=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,s=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,c=/\((\S*)(?::(\d+))(?::(\d+))\)/,l=e.stack.split("\n"),u=[],h=(/^(.*) is undefined$/.exec(e.message),0),f=l.length;h<f;++h){if(r=o.exec(l[h])){var p=r[2]&&0===r[2].indexOf("native");r[2]&&0===r[2].indexOf("eval")&&(t=c.exec(r[2]))&&(r[2]=t[1],r[3]=t[2],r[4]=t[3]),n={url:p?null:r[2],func:r[1]||x,args:p?[r[2]]:[],line:r[3]?+r[3]:null,column:r[4]?+r[4]:null}}else if(r=i.exec(l[h]))n={url:r[2],func:r[1]||x,args:[],line:+r[3],column:r[4]?+r[4]:null};else{if(!(r=a.exec(l[h])))continue;r[3]&&r[3].indexOf(" > eval")>-1&&(t=s.exec(r[3]))?(r[3]=t[1],r[4]=t[2],r[5]=null):0!==h||r[5]||void 0===e.columnNumber||(u[0].column=e.columnNumber+1),n={url:r[3],func:r[1]||x,args:r[2]?r[2].split(","):[],line:r[4]?+r[4]:null,column:r[5]?+r[5]:null}}!n.func&&n.line&&(n.func=x),u.push(n)}return u.length?{name:e.name,message:e.message,url:O(),stack:u}:null}}function t(e,t,r,n){var o={url:t,line:r};if(o.url&&o.line){if(e.incomplete=!1,o.func||(o.func=x),e.stack.length>0&&e.stack[0].url===o.url){if(e.stack[0].line===o.line)return!1;if(!e.stack[0].line&&e.stack[0].func===o.func)return e.stack[0].line=o.line,!1}return e.stack.unshift(o),e.partial=!0,!0}return e.incomplete=!0,!1}function r(e,o){for(var i,a,s=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,c=[],l={},u=!1,h=r.caller;h&&!u;h=h.caller)if(h!==n&&h!==E.report){if(a={url:null,func:x,line:null,column:null},h.name?a.func=h.name:(i=s.exec(h.toString()))&&(a.func=i[1]),void 0===a.func)try{a.func=i.input.substring(0,i.input.indexOf("{"))}catch(e){}l[""+h]?u=!0:l[""+h]=!0,c.push(a)}o&&c.splice(0,o);var f={name:e.name,message:e.message,url:O(),stack:c};return t(f,e.sourceURL||e.fileName,e.line||e.lineNumber,e.message||e.description),f}function n(t,n){var o=null;n=null==n?0:+n;try{if(o=e(t))return o}catch(e){if(E.debug)throw e}try{if(o=r(t,n+1))return o}catch(e){if(E.debug)throw e}return{name:t.name,message:t.message,url:O()}}return n.augmentStackTraceWithInitialElement=t,n.computeStackTraceFromStackProp=e,n}();var C=E;function R(e,t){var r=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(r>>16)<<16|65535&r}function j(e,t,r,n,o,i){return R((a=R(R(t,e),R(n,i)))<<(s=o)|a>>>32-s,r);var a,s}function T(e,t,r,n,o,i,a){return j(t&r|~t&n,e,t,o,i,a)}function F(e,t,r,n,o,i,a){return j(t&n|r&~n,e,t,o,i,a)}function A(e,t,r,n,o,i,a){return j(t^r^n,e,t,o,i,a)}function B(e,t,r,n,o,i,a){return j(r^(t|~n),e,t,o,i,a)}function D(e,t){var r,n,o,i,a;e[t>>5]|=128<<t%32,e[14+(t+64>>>9<<4)]=t;var s=1732584193,c=-271733879,l=-1732584194,u=271733878;for(r=0;r<e.length;r+=16)n=s,o=c,i=l,a=u,c=B(c=B(c=B(c=B(c=A(c=A(c=A(c=A(c=F(c=F(c=F(c=F(c=T(c=T(c=T(c=T(c,l=T(l,u=T(u,s=T(s,c,l,u,e[r],7,-680876936),c,l,e[r+1],12,-389564586),s,c,e[r+2],17,606105819),u,s,e[r+3],22,-1044525330),l=T(l,u=T(u,s=T(s,c,l,u,e[r+4],7,-176418897),c,l,e[r+5],12,1200080426),s,c,e[r+6],17,-1473231341),u,s,e[r+7],22,-45705983),l=T(l,u=T(u,s=T(s,c,l,u,e[r+8],7,1770035416),c,l,e[r+9],12,-1958414417),s,c,e[r+10],17,-42063),u,s,e[r+11],22,-1990404162),l=T(l,u=T(u,s=T(s,c,l,u,e[r+12],7,1804603682),c,l,e[r+13],12,-40341101),s,c,e[r+14],17,-1502002290),u,s,e[r+15],22,1236535329),l=F(l,u=F(u,s=F(s,c,l,u,e[r+1],5,-165796510),c,l,e[r+6],9,-1069501632),s,c,e[r+11],14,643717713),u,s,e[r],20,-373897302),l=F(l,u=F(u,s=F(s,c,l,u,e[r+5],5,-701558691),c,l,e[r+10],9,38016083),s,c,e[r+15],14,-660478335),u,s,e[r+4],20,-405537848),l=F(l,u=F(u,s=F(s,c,l,u,e[r+9],5,568446438),c,l,e[r+14],9,-1019803690),s,c,e[r+3],14,-187363961),u,s,e[r+8],20,1163531501),l=F(l,u=F(u,s=F(s,c,l,u,e[r+13],5,-1444681467),c,l,e[r+2],9,-51403784),s,c,e[r+7],14,1735328473),u,s,e[r+12],20,-1926607734),l=A(l,u=A(u,s=A(s,c,l,u,e[r+5],4,-378558),c,l,e[r+8],11,-2022574463),s,c,e[r+11],16,1839030562),u,s,e[r+14],23,-35309556),l=A(l,u=A(u,s=A(s,c,l,u,e[r+1],4,-1530992060),c,l,e[r+4],11,1272893353),s,c,e[r+7],16,-155497632),u,s,e[r+10],23,-1094730640),l=A(l,u=A(u,s=A(s,c,l,u,e[r+13],4,681279174),c,l,e[r],11,-358537222),s,c,e[r+3],16,-722521979),u,s,e[r+6],23,76029189),l=A(l,u=A(u,s=A(s,c,l,u,e[r+9],4,-640364487),c,l,e[r+12],11,-421815835),s,c,e[r+15],16,530742520),u,s,e[r+2],23,-995338651),l=B(l,u=B(u,s=B(s,c,l,u,e[r],6,-198630844),c,l,e[r+7],10,1126891415),s,c,e[r+14],15,-1416354905),u,s,e[r+5],21,-57434055),l=B(l,u=B(u,s=B(s,c,l,u,e[r+12],6,1700485571),c,l,e[r+3],10,-1894986606),s,c,e[r+10],15,-1051523),u,s,e[r+1],21,-2054922799),l=B(l,u=B(u,s=B(s,c,l,u,e[r+8],6,1873313359),c,l,e[r+15],10,-30611744),s,c,e[r+6],15,-1560198380),u,s,e[r+13],21,1309151649),l=B(l,u=B(u,s=B(s,c,l,u,e[r+4],6,-145523070),c,l,e[r+11],10,-1120210379),s,c,e[r+2],15,718787259),u,s,e[r+9],21,-343485551),s=R(s,n),c=R(c,o),l=R(l,i),u=R(u,a);return[s,c,l,u]}function H(e){var t,r="",n=32*e.length;for(t=0;t<n;t+=8)r+=String.fromCharCode(e[t>>5]>>>t%32&255);return r}function L(e){var t,r=[];for(r[(e.length>>2)-1]=void 0,t=0;t<r.length;t+=1)r[t]=0;var n=8*e.length;for(t=0;t<n;t+=8)r[t>>5]|=(255&e.charCodeAt(t/8))<<t%32;return r}function P(e){var t,r,n="";for(r=0;r<e.length;r+=1)t=e.charCodeAt(r),n+="0123456789abcdef".charAt(t>>>4&15)+"0123456789abcdef".charAt(15&t);return n}function I(e){return unescape(encodeURIComponent(e))}function U(e){return function(e){return H(D(L(e),8*e.length))}(I(e))}function N(e,t){return function(e,t){var r,n,o=L(e),i=[],a=[];for(i[15]=a[15]=void 0,o.length>16&&(o=D(o,8*e.length)),r=0;r<16;r+=1)i[r]=909522486^o[r],a[r]=1549556828^o[r];return n=D(i.concat(L(t)),512+8*t.length),H(D(a.concat(n),640))}(I(e),I(t))}var M=function(e,t,r){return t?r?N(t,e):P(N(t,e)):r?U(e):P(U(e))};function q(e){this.name="RavenConfigError",this.message=e}q.prototype=new Error,q.prototype.constructor=q;var z=q,W=function(e,t,r){var n=e[t],o=e;if(t in e){var i="warn"===t?"warning":t;e[t]=function(){var e=[].slice.call(arguments),a=y.safeJoin(e," "),s={level:i,logger:"console",extra:{arguments:e}};"assert"===t?!1===e[0]&&(a="Assertion failed: "+(y.safeJoin(e.slice(1)," ")||"console.assert"),s.extra.arguments=e.slice(1),r&&r(a,s)):r&&r(a,s),n&&Function.prototype.apply.call(n,o,e)}}},K=y.isError,V=y.isObject,$=y.isPlainObject,J=y.isErrorEvent,X=y.isUndefined,G=y.isFunction,Y=y.isString,Z=y.isArray,Q=y.isEmptyObject,ee=y.each,te=y.objectMerge,re=y.truncate,ne=y.objectFrozen,oe=y.hasKey,ie=y.joinRegExp,ae=y.urlencode,se=y.uuid4,ce=y.htmlTreeAsString,le=y.isSameException,ue=y.isSameStacktrace,he=y.parseUrl,fe=y.fill,pe=y.supportsFetch,de=y.supportsReferrerPolicy,ge=y.serializeKeysForMessage,_e=y.serializeException,ve=W,me="source protocol user pass host port path".split(" "),be=/^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/;function ye(){return+new Date}var Ee="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},we=Ee.document,ke=Ee.navigator;function xe(e,t){return G(t)?function(r){return t(r,e)}:t}function Se(){for(var e in this._hasJSON=!("object"!=typeof JSON||!JSON.stringify),this._hasDocument=!X(we),this._hasNavigator=!X(ke),this._lastCapturedException=null,this._lastData=null,this._lastEventId=null,this._globalServer=null,this._globalKey=null,this._globalProject=null,this._globalContext={},this._globalOptions={release:Ee.SENTRY_RELEASE&&Ee.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},this._fetchDefaults={method:"POST",keepalive:!0,referrerPolicy:de()?"origin":""},this._ignoreOnError=0,this._isRavenInstalled=!1,this._originalErrorStackTraceLimit=Error.stackTraceLimit,this._originalConsole=Ee.console||{},this._originalConsoleMethods={},this._plugins=[],this._startTime=ye(),this._wrappedBuiltIns=[],this._breadcrumbs=[],this._lastCapturedEvent=null,this._keypressTimeout,this._location=Ee.location,this._lastHref=this._location&&this._location.href,this._resetBackoff(),this._originalConsole)this._originalConsoleMethods[e]=this._originalConsole[e]}Se.prototype={VERSION:"3.23.3",debug:!1,TraceKit:C,config:function(e,t){var r=this;if(r._globalServer)return this._logDebug("error","Error: Raven has already been configured"),r;if(!e)return r;var n=r._globalOptions;t&&ee(t,function(e,t){"tags"===e||"extra"===e||"user"===e?r._globalContext[e]=t:n[e]=t}),r.setDSN(e),n.ignoreErrors.push(/^Script error\.?$/),n.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/),n.ignoreErrors=ie(n.ignoreErrors),n.ignoreUrls=!!n.ignoreUrls.length&&ie(n.ignoreUrls),n.whitelistUrls=!!n.whitelistUrls.length&&ie(n.whitelistUrls),n.includePaths=ie(n.includePaths),n.maxBreadcrumbs=Math.max(0,Math.min(n.maxBreadcrumbs||100,100));var o={xhr:!0,console:!0,dom:!0,location:!0,sentry:!0},i=n.autoBreadcrumbs;"[object Object]"==={}.toString.call(i)?i=te(o,i):!1!==i&&(i=o),n.autoBreadcrumbs=i;var a={tryCatch:!0},s=n.instrument;return"[object Object]"==={}.toString.call(s)?s=te(a,s):!1!==s&&(s=a),n.instrument=s,C.collectWindowErrors=!!n.collectWindowErrors,r},install:function(){var e=this;return e.isSetup()&&!e._isRavenInstalled&&(C.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),r=t.path.lastIndexOf("/"),n=t.path.substr(1,r);this._dsn=e,this._globalKey=t.user,this._globalSecret=t.pass&&t.pass.substr(1),this._globalProject=t.path.substr(r+1),this._globalServer=this._getGlobalServer(t),this._globalEndpoint=this._globalServer+"/"+n+"api/"+this._globalProject+"/store/",this._resetBackoff()},context:function(e,t,r){return G(e)&&(r=t||[],t=e,e=void 0),this.wrap(e,t).apply(this,r)},wrap:function(e,t,r){var n=this;if(X(t)&&!G(e))return e;if(G(e)&&(t=e,e=void 0),!G(t))return t;try{if(t.__raven__)return t;if(t.__raven_wrapper__)return t.__raven_wrapper__}catch(e){return t}function o(){var o=[],i=arguments.length,a=!e||e&&!1!==e.deep;for(r&&G(r)&&r.apply(this,arguments);i--;)o[i]=a?n.wrap(e,arguments[i]):arguments[i];try{return t.apply(this,o)}catch(t){throw n._ignoreNextOnError(),n.captureException(t,e),t}}for(var i in t)oe(t,i)&&(o[i]=t[i]);return o.prototype=t.prototype,t.__raven_wrapper__=o,o.__raven__=!0,o.__orig__=t,o},uninstall:function(){return C.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)},_attachPromiseRejectionHandler:function(){return this._promiseRejectionHandler=this._promiseRejectionHandler.bind(this),Ee.addEventListener&&Ee.addEventListener("unhandledrejection",this._promiseRejectionHandler),this},_detachPromiseRejectionHandler:function(){return Ee.removeEventListener&&Ee.removeEventListener("unhandledrejection",this._promiseRejectionHandler),this},captureException:function(e,t){if(t=te({trimHeadFrames:0},t||{}),J(e)&&e.error)e=e.error;else if(K(e))e=e;else{if(!$(e))return this.captureMessage(e,te(t,{stacktrace:!0,trimHeadFrames:t.trimHeadFrames+1}));t=this._getCaptureExceptionOptionsFromPlainObject(t,e),e=new Error(t.message)}this._lastCapturedException=e;try{var r=C.computeStackTrace(e);this._handleStackInfo(r,t)}catch(t){if(e!==t)throw t}return this},_getCaptureExceptionOptionsFromPlainObject:function(e,t){var r=Object.keys(t).sort(),n=te(e,{message:"Non-Error exception captured with keys: "+ge(r),fingerprint:[M(r)],extra:e.extra||{}});return n.extra.__serialized__=_e(t),n},captureMessage:function(e,t){if(!this._globalOptions.ignoreErrors.test||!this._globalOptions.ignoreErrors.test(e)){var r,n=te({message:e+=""},t=t||{});try{throw new Error(e)}catch(e){r=e}r.name=null;var o=C.computeStackTrace(r),i=Z(o.stack)&&o.stack[1],a=i&&i.url||"";if((!this._globalOptions.ignoreUrls.test||!this._globalOptions.ignoreUrls.test(a))&&(!this._globalOptions.whitelistUrls.test||this._globalOptions.whitelistUrls.test(a))){if(this._globalOptions.stacktrace||t&&t.stacktrace){n.fingerprint=null==n.fingerprint?e:n.fingerprint,(t=te({trimHeadFrames:0},t)).trimHeadFrames+=1;var s=this._prepareFrames(o,t);n.stacktrace={frames:s.reverse()}}return n.fingerprint&&(n.fingerprint=Z(n.fingerprint)?n.fingerprint:[n.fingerprint]),this._send(n),this}}},captureBreadcrumb:function(e){var t=te({timestamp:ye()/1e3},e);if(G(this._globalOptions.breadcrumbCallback)){var r=this._globalOptions.breadcrumbCallback(t);if(V(r)&&!Q(r))t=r;else if(!1===r)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(r(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=xe(t,e),this},setBreadcrumbCallback:function(e){var t=this._globalOptions.breadcrumbCallback;return this._globalOptions.breadcrumbCallback=xe(t,e),this},setShouldSendCallback:function(e){var t=this._globalOptions.shouldSendCallback;return this._globalOptions.shouldSendCallback=xe(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=Ee.RavenConfig;e&&this.config(e.dsn,e.config).install()},showReportDialog:function(e){if(we){var t=(e=e||{}).eventId||this.lastEventId();if(!t)throw new z("Missing eventId");var r=e.dsn||this._dsn;if(!r)throw new z("Missing DSN");var n=encodeURIComponent,o="";o+="?eventId="+n(t),o+="&dsn="+n(r);var i=e.user||this._globalContext.user;i&&(i.name&&(o+="&name="+n(i.name)),i.email&&(o+="&email="+n(i.email)));var a=this._getGlobalServer(this._parseDSN(r)),s=we.createElement("script");s.async=!0,s.src=a+"/api/embed/error-page/"+o,(we.head||we.body).appendChild(s)}},_ignoreNextOnError:function(){var e=this;this._ignoreOnError+=1,setTimeout(function(){e._ignoreOnError-=1})},_triggerEvent:function(e,t){var r,n;if(this._hasDocument){for(n in t=t||{},e="raven"+e.substr(0,1).toUpperCase()+e.substr(1),we.createEvent?(r=we.createEvent("HTMLEvents")).initEvent(e,!0,!0):(r=we.createEventObject()).eventType=e,t)oe(t,n)&&(r[n]=t[n]);if(we.createEvent)we.dispatchEvent(r);else try{we.fireEvent("on"+r.eventType.toLowerCase(),r)}catch(e){}}},_breadcrumbEventHandler:function(e){var t=this;return function(r){if(t._keypressTimeout=null,t._lastCapturedEvent!==r){var n;t._lastCapturedEvent=r;try{n=ce(r.target)}catch(e){n="<unknown>"}t.captureBreadcrumb({category:"ui."+e,message:n})}}},_keypressEventHandler:function(){var e=this;return function(t){var r;try{r=t.target}catch(e){return}var n=r&&r.tagName;if(n&&("INPUT"===n||"TEXTAREA"===n||r.isContentEditable)){var o=e._keypressTimeout;o||e._breadcrumbEventHandler("input")(t),clearTimeout(o),e._keypressTimeout=setTimeout(function(){e._keypressTimeout=null},1e3)}}},_captureUrlChange:function(e,t){var r=he(this._location.href),n=he(t),o=he(e);this._lastHref=t,r.protocol===n.protocol&&r.host===n.host&&(t=n.relative),r.protocol===o.protocol&&r.host===o.host&&(e=o.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 r(t){return function(r,n){for(var o=new Array(arguments.length),i=0;i<o.length;++i)o[i]=arguments[i];var a=o[0];return G(a)&&(o[0]=e.wrap(a)),t.apply?t.apply(this,o):t(o[0],o[1])}}var n=this._globalOptions.autoBreadcrumbs;function o(r){var o=Ee[r]&&Ee[r].prototype;o&&o.hasOwnProperty&&o.hasOwnProperty("addEventListener")&&(fe(o,"addEventListener",function(t){return function(o,i,a,s){try{i&&i.handleEvent&&(i.handleEvent=e.wrap(i.handleEvent))}catch(e){}var c,l,u;return n&&n.dom&&("EventTarget"===r||"Node"===r)&&(l=e._breadcrumbEventHandler("click"),u=e._keypressEventHandler(),c=function(e){if(e){var t;try{t=e.type}catch(e){return}return"click"===t?l(e):"keypress"===t?u(e):void 0}}),t.call(this,o,e.wrap(i,void 0,c),a,s)}},t),fe(o,"removeEventListener",function(e){return function(t,r,n,o){try{r=r&&(r.__raven_wrapper__?r.__raven_wrapper__:r)}catch(e){}return e.call(this,t,r,n,o)}},t))}fe(Ee,"setTimeout",r,t),fe(Ee,"setInterval",r,t),Ee.requestAnimationFrame&&fe(Ee,"requestAnimationFrame",function(t){return function(r){return t(e.wrap(r))}},t);for(var i=["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"],a=0;a<i.length;a++)o(i[a])},_instrumentBreadcrumbs:function(){var e=this,t=this._globalOptions.autoBreadcrumbs,r=e._wrappedBuiltIns;function n(t,r){t in r&&G(r[t])&&fe(r,t,function(t){return e.wrap(t)})}if(t.xhr&&"XMLHttpRequest"in Ee){var o=XMLHttpRequest.prototype;fe(o,"open",function(t){return function(r,n){return Y(n)&&-1===n.indexOf(e._globalKey)&&(this.__raven_xhr={method:r,url:n,status_code:null}),t.apply(this,arguments)}},r),fe(o,"send",function(t){return function(){var r=this;function o(){if(r.__raven_xhr&&4===r.readyState){try{r.__raven_xhr.status_code=r.status}catch(e){}e.captureBreadcrumb({type:"http",category:"xhr",data:r.__raven_xhr})}}for(var i=["onload","onerror","onprogress"],a=0;a<i.length;a++)n(i[a],r);return"onreadystatechange"in r&&G(r.onreadystatechange)?fe(r,"onreadystatechange",function(t){return e.wrap(t,void 0,o)}):r.onreadystatechange=o,t.apply(this,arguments)}},r)}t.xhr&&pe()&&fe(Ee,"fetch",function(t){return function(){for(var r=new Array(arguments.length),n=0;n<r.length;++n)r[n]=arguments[n];var o,i=r[0],a="GET";if("string"==typeof i?o=i:"Request"in Ee&&i instanceof Ee.Request?(o=i.url,i.method&&(a=i.method)):o=""+i,-1!==o.indexOf(e._globalKey))return t.apply(this,r);r[1]&&r[1].method&&(a=r[1].method);var s={method:a,url:o,status_code:null};return t.apply(this,r).then(function(t){return s.status_code=t.status,e.captureBreadcrumb({type:"http",category:"fetch",data:s}),t})}},r),t.dom&&this._hasDocument&&(we.addEventListener?(we.addEventListener("click",e._breadcrumbEventHandler("click"),!1),we.addEventListener("keypress",e._keypressEventHandler(),!1)):(we.attachEvent("onclick",e._breadcrumbEventHandler("click")),we.attachEvent("onkeypress",e._keypressEventHandler())));var i=Ee.chrome,a=!(i&&i.app&&i.app.runtime)&&Ee.history&&history.pushState&&history.replaceState;if(t.location&&a){var s=Ee.onpopstate;Ee.onpopstate=function(){var t=e._location.href;if(e._captureUrlChange(e._lastHref,t),s)return s.apply(this,arguments)};var c=function(t){return function(){var r=arguments.length>2?arguments[2]:void 0;return r&&e._captureUrlChange(e._lastHref,r+""),t.apply(this,arguments)}};fe(history,"pushState",c,r),fe(history,"replaceState",c,r)}if(t.console&&"console"in Ee&&console.log){var l=function(t,r){e.captureBreadcrumb({message:t,level:r.level,category:"console"})};ee(["debug","info","warn","error","log"],function(e,t){ve(console,t,l)})}},_restoreBuiltIns:function(){for(var e;this._wrappedBuiltIns.length;){var t=(e=this._wrappedBuiltIns.shift())[0],r=e[1],n=e[2];t[r]=n}},_restoreConsole:function(){for(var e in this._originalConsoleMethods)this._originalConsole[e]=this._originalConsoleMethods[e]},_drainPlugins:function(){var e=this;ee(this._plugins,function(t,r){var n=r[0],o=r[1];n.apply(e,[e].concat(o))})},_parseDSN:function(e){var t=be.exec(e),r={},n=7;try{for(;n--;)r[me[n]]=t[n]||""}catch(t){throw new z("Invalid DSN: "+e)}if(r.pass&&!this._globalOptions.allowSecretKey)throw new z("Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key");return r},_getGlobalServer:function(e){var t="//"+e.host+(e.port?":"+e.port:"");return e.protocol&&(t=e.protocol+":"+t),t},_handleOnErrorStackInfo:function(){this._ignoreOnError||this._handleStackInfo.apply(this,arguments)},_handleStackInfo:function(e,t){var r=this._prepareFrames(e,t);this._triggerEvent("handle",{stackInfo:e,options:t}),this._processException(e.name,e.message,e.url,e.lineno,r,t)},_prepareFrames:function(e,t){var r=this,n=[];if(e.stack&&e.stack.length&&(ee(e.stack,function(t,o){var i=r._normalizeFrame(o,e.url);i&&n.push(i)}),t&&t.trimHeadFrames))for(var o=0;o<t.trimHeadFrames&&o<n.length;o++)n[o].in_app=!1;return n=n.slice(0,this._globalOptions.stackTraceLimit)},_normalizeFrame:function(e,t){var r={filename:e.url,lineno:e.line,colno:e.column,function:e.func||"?"};return e.url||(r.filename=t),r.in_app=!(this._globalOptions.includePaths.test&&!this._globalOptions.includePaths.test(r.filename)||/(Raven|TraceKit)\./.test(r.function)||/raven\.(min\.)?js$/.test(r.filename)),r},_processException:function(e,t,r,n,o,i){var a,s=(e?e+": ":"")+(t||"");if((!this._globalOptions.ignoreErrors.test||!this._globalOptions.ignoreErrors.test(t)&&!this._globalOptions.ignoreErrors.test(s))&&(o&&o.length?(r=o[0].filename||r,o.reverse(),a={frames:o}):r&&(a={frames:[{filename:r,lineno:n,in_app:!0}]}),(!this._globalOptions.ignoreUrls.test||!this._globalOptions.ignoreUrls.test(r))&&(!this._globalOptions.whitelistUrls.test||this._globalOptions.whitelistUrls.test(r)))){var c=te({exception:{values:[{type:e,value:t,stacktrace:a}]},culprit:r},i);this._send(c)}},_trimPacket:function(e){var t=this._globalOptions.maxMessageLength;if(e.message&&(e.message=re(e.message,t)),e.exception){var r=e.exception.values[0];r.value=re(r.value,t)}var n=e.request;return n&&(n.url&&(n.url=re(n.url,this._globalOptions.maxUrlLength)),n.Referer&&(n.Referer=re(n.Referer,this._globalOptions.maxUrlLength))),e.breadcrumbs&&e.breadcrumbs.values&&this._trimBreadcrumbs(e.breadcrumbs),e},_trimBreadcrumbs:function(e){for(var t,r,n,o=["to","from","url"],i=0;i<e.values.length;++i)if((r=e.values[i]).hasOwnProperty("data")&&V(r.data)&&!ne(r.data)){n=te({},r.data);for(var a=0;a<o.length;++a)t=o[a],n.hasOwnProperty(t)&&n[t]&&(n[t]=re(n[t],this._globalOptions.maxUrlLength));e.values[i].data=n}},_getHttpData:function(){if(this._hasNavigator||this._hasDocument){var e={};return this._hasNavigator&&ke.userAgent&&(e.headers={"User-Agent":navigator.userAgent}),Ee.location&&Ee.location.href&&(e.url=Ee.location.href),this._hasDocument&&we.referrer&&(e.headers||(e.headers={}),e.headers.Referer=we.referrer),e}},_resetBackoff:function(){this._backoffDuration=0,this._backoffStart=null},_shouldBackoff:function(){return this._backoffDuration&&ye()-this._backoffStart<this._backoffDuration},_isRepeatData:function(e){var t=this._lastData;return!(!t||e.message!==t.message||e.culprit!==t.culprit)&&(e.stacktrace||t.stacktrace?ue(e.stacktrace,t.stacktrace):!e.exception&&!t.exception||le(e.exception,t.exception))},_setBackoffState:function(e){if(!this._shouldBackoff()){var t=e.status;if(400===t||401===t||429===t){var r;try{r=pe()?e.headers.get("Retry-After"):e.getResponseHeader("Retry-After"),r=1e3*parseInt(r,10)}catch(e){}this._backoffDuration=r||(2*this._backoffDuration||1e3),this._backoffStart=ye()}}},_send:function(e){var t=this._globalOptions,r={project:this._globalProject,logger:t.logger,platform:"javascript"},n=this._getHttpData();n&&(r.request=n),e.trimHeadFrames&&delete e.trimHeadFrames,(e=te(r,e)).tags=te(te({},this._globalContext.tags),e.tags),e.extra=te(te({},this._globalContext.extra),e.extra),e.extra["session:duration"]=ye()-this._startTime,this._breadcrumbs&&this._breadcrumbs.length>0&&(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),Object.keys(e).forEach(function(t){(null==e[t]||""===e[t]||Q(e[t]))&&delete e[t]}),G(t.dataCallback)&&(e=t.dataCallback(e)||e),e&&!Q(e)&&(G(t.shouldSendCallback)&&!t.shouldSendCallback(e)||(this._shouldBackoff()?this._logDebug("warn","Raven dropped error due to backoff: ",e):"number"==typeof t.sampleRate?Math.random()<t.sampleRate&&this._sendProcessedPayload(e):this._sendProcessedPayload(e)))},_getUuid:function(){return se()},_sendProcessedPayload:function(e,t){var r=this,n=this._globalOptions;if(this.isSetup())if(e=this._trimPacket(e),this._globalOptions.allowDuplicates||!this._isRepeatData(e)){this._lastEventId=e.event_id||(e.event_id=this._getUuid()),this._lastData=e,this._logDebug("debug","Raven about to send:",e);var o={sentry_version:"7",sentry_client:"raven-js/"+this.VERSION,sentry_key:this._globalKey};this._globalSecret&&(o.sentry_secret=this._globalSecret);var i=e.exception&&e.exception.values[0];this._globalOptions.autoBreadcrumbs&&this._globalOptions.autoBreadcrumbs.sentry&&this.captureBreadcrumb({category:"sentry",message:i?(i.type?i.type+": ":"")+i.value:e.message,event_id:e.event_id,level:e.level||"error"});var a=this._globalEndpoint;(n.transport||this._makeRequest).call(this,{url:a,auth:o,data:e,options:n,onSuccess:function(){r._resetBackoff(),r._triggerEvent("success",{data:e,src:a}),t&&t()},onError:function(n){r._logDebug("error","Raven transport failed to send: ",n),n.request&&r._setBackoffState(n.request),r._triggerEvent("failure",{data:e,src:a}),n=n||new Error("Raven send failed (no additional details provided)"),t&&t(n)}})}else this._logDebug("warn","Raven dropped repeat event: ",e)},_makeRequest:function(e){var t=e.url+"?"+ae(e.auth),n=null,o={};if(e.options.headers&&(n=this._evaluateHash(e.options.headers)),e.options.fetchParameters&&(o=this._evaluateHash(e.options.fetchParameters)),pe()){o.body=r(e.data);var i=te({},this._fetchDefaults),a=te(i,o);return n&&(a.headers=n),Ee.fetch(t,a).then(function(t){if(t.ok)e.onSuccess&&e.onSuccess();else{var r=new Error("Sentry error code: "+t.status);r.request=t,e.onError&&e.onError(r)}}).catch(function(){e.onError&&e.onError(new Error("Sentry error code: network unavailable"))})}var s=Ee.XMLHttpRequest&&new Ee.XMLHttpRequest;s&&(("withCredentials"in s||"undefined"!=typeof XDomainRequest)&&("withCredentials"in s?s.onreadystatechange=function(){if(4===s.readyState)if(200===s.status)e.onSuccess&&e.onSuccess();else if(e.onError){var t=new Error("Sentry error code: "+s.status);t.request=s,e.onError(t)}}:(s=new XDomainRequest,t=t.replace(/^https?:/,""),e.onSuccess&&(s.onload=e.onSuccess),e.onError&&(s.onerror=function(){var t=new Error("Sentry error code: XDomainRequest");t.request=s,e.onError(t)})),s.open("POST",t),n&&ee(n,function(e,t){s.setRequestHeader(e,t)}),s.send(r(e.data))))},_evaluateHash:function(e){var t={};for(var r in e)if(e.hasOwnProperty(r)){var n=e[r];t[r]="function"==typeof n?n():n}return t},_logDebug:function(e){this._originalConsoleMethods[e]&&this.debug&&Function.prototype.apply.call(this._originalConsoleMethods[e],this._originalConsole,[].slice.call(arguments,1))},_mergeContext:function(e,t){X(t)?delete this._globalContext[e]:this._globalContext[e]=te(this._globalContext[e]||{},t)}},Se.prototype.setUser=Se.prototype.setUserContext,Se.prototype.setReleaseContext=Se.prototype.setRelease;var Oe=Se,Ce="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},Re=Ce.Raven,je=new Oe;je.noConflict=function(){return Ce.Raven=Re,je},je.afterLoad();var Te,Fe,Ae,Be,De,He,Le,Pe=je;(Le="plyr.io"===window.location.host)&&Pe.config("https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555").install(),document.addEventListener("DOMContentLoaded",function(){Pe.context(function(){window.shr&&window.shr.setup({count:{classname:"button__count"}}),document.addEventListener("focusout",function(e){e.target.classList.remove("tab-focus")}),document.addEventListener("keydown",function(e){9===e.keyCode&&setTimeout(function(){document.activeElement.classList.add("tab-focus")},0)});var e=new Plyr("#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:{publisherId:"918848828995742"}});window.player=e;var t=document.querySelectorAll("[data-source]"),r={video:"video",audio:"audio",youtube:"youtube",vimeo:"vimeo"},n=window.location.hash.replace("#",""),o=window.history&&window.history.pushState;function i(e,t,r){e&&e.classList[r?"add":"remove"](t)}function a(o,a){if(o in r&&(a||o!==n)&&(n.length||o!==r.video)){switch(o){case r.video:e.source={type:"video",title:"View From A Blue Moon",sources:[{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4",type:"video/mp4"}],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:e.source={type:"audio",title:"Kishi Bashi &ndash; &ldquo;It All Began With A Burst&rdquo;",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:e.source={type:"video",title:"View From A Blue Moon",sources:[{src:"https://youtube.com/watch?v=bTqVqk7FSmY",provider:"youtube"}]};break;case r.vimeo:e.source={type:"video",sources:[{src:"https://vimeo.com/76979871",provider:"vimeo"}]}}n=o,Array.from(t).forEach(function(e){return i(e.parentElement,"active",!1)}),i(document.querySelector('[data-source="'+o+'"]'),"active",!0),Array.from(document.querySelectorAll(".plyr__cite")).forEach(function(e){e.setAttribute("hidden","")}),document.querySelector(".plyr__cite--"+o).removeAttribute("hidden")}}if(Array.from(t).forEach(function(e){e.addEventListener("click",function(){var t=e.getAttribute("data-source");a(t),o&&window.history.pushState({type:t},"","#"+t)})}),window.addEventListener("popstate",function(e){e.state&&"type"in e.state&&a(e.state.type)}),o){var s=!n.length;s&&(n=r.video),n in r&&window.history.replaceState({type:n},"",s?"":"#"+n),n!==r.video&&a(n,!0)}})}),Le&&(Te=window,Fe=document,Ae="script",Be="ga",Te.GoogleAnalyticsObject=Be,Te.ga=Te.ga||function(){(Te.ga.q=Te.ga.q||[]).push(arguments)},Te.ga.l=1*new Date,De=Fe.createElement(Ae),He=Fe.getElementsByTagName(Ae)[0],De.async=1,De.src="https://www.google-analytics.com/analytics.js",He.parentNode.insertBefore(De,He),window.ga("create","UA-40881672-11","auto"),window.ga("send","pageview"))}();
+!function(){"use strict";var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};var t,r=(function(e,t){function r(e,t){for(var r=0;r<e.length;++r)if(e[r]===t)return r;return-1}function n(e,t){var n=[],o=[];return null==t&&(t=function(e,t){return n[0]===t?"[Circular ~]":"[Circular ~."+o.slice(0,r(n,t)).join(".")+"]"}),function(i,a){if(n.length>0){var s=r(n,this);~s?n.splice(s+1):n.push(this),~s?o.splice(s,1/0,i):o.push(i),~r(n,a)&&(a=t.call(this,i,a))}else n.push(a);return null==e?a instanceof Error?function(e){var t={stack:e.stack,message:e.message,name:e.name};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t}(a):a:e.call(this,i,a)}}(e.exports=function(e,t,r,o){return JSON.stringify(e,n(t,o),r)}).getSerialize=n}(t={exports:{}},t.exports),t.exports),n="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{};function o(e){return void 0===e}function i(e){return"[object Object]"===Object.prototype.toString.call(e)}function a(e){return"[object String]"===Object.prototype.toString.call(e)}function s(e){return"[object Array]"===Object.prototype.toString.call(e)}function c(){try{return new ErrorEvent(""),!0}catch(e){return!1}}function l(){if(!("fetch"in n))return!1;try{return new Headers,new Request(""),new Response,!0}catch(e){return!1}}function u(e,t){var r,n;if(o(e.length))for(r in e)h(e,r)&&t.call(null,r,e[r]);else if(n=e.length)for(r=0;r<n;r++)t.call(null,r,e[r])}function h(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function f(e){var t,r,n,o,i,s=[];if(!e||!e.tagName)return"";if(s.push(e.tagName.toLowerCase()),e.id&&s.push("#"+e.id),(t=e.className)&&a(t))for(r=t.split(/\s+/),i=0;i<r.length;i++)s.push("."+r[i]);var c=["type","name","title","alt"];for(i=0;i<c.length;i++)n=c[i],(o=e.getAttribute(n))&&s.push("["+n+'="'+o+'"]');return s.join("")}function p(e,t){return!!(!!e^!!t)}function d(e,t){if(p(e,t))return!1;var r,n,o=e.frames,i=t.frames;if(o.length!==i.length)return!1;for(var a=0;a<o.length;a++)if(r=o[a],n=i[a],r.filename!==n.filename||r.lineno!==n.lineno||r.colno!==n.colno||r.function!==n.function)return!1;return!0}var g=3,_=51200,v=40;function m(e){return function(e){return~-encodeURI(e).split(/%..|./).length}(JSON.stringify(e))}function b(e){if("string"==typeof e)return e.length<=40?e:e.substr(0,39)+"…";if("number"==typeof e||"boolean"==typeof e||void 0===e)return e;var t=Object.prototype.toString.call(e);return"[object Object]"===t?"[Object]":"[object Array]"===t?"[Array]":"[object Function]"===t?e.name?"[Function: "+e.name+"]":"[Function]":e}var y={isObject:function(e){return"object"==typeof e&&null!==e},isError:function(e){switch({}.toString.call(e)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return e instanceof Error}},isErrorEvent:function(e){return c()&&"[object ErrorEvent]"==={}.toString.call(e)},isUndefined:o,isFunction:function(e){return"function"==typeof e},isPlainObject:i,isString:a,isArray:s,isEmptyObject:function(e){if(!i(e))return!1;for(var t in e)if(e.hasOwnProperty(t))return!1;return!0},supportsErrorEvent:c,supportsFetch:l,supportsReferrerPolicy:function(){if(!l())return!1;try{return new Request("pickleRick",{referrerPolicy:"origin"}),!0}catch(e){return!1}},supportsPromiseRejectionEvent:function(){return"function"==typeof PromiseRejectionEvent},wrappedCallback:function(e){return function(t,r){var n=e(t)||t;return r&&r(n)||n}},each:u,objectMerge:function(e,t){return t?(u(t,function(t,r){e[t]=r}),e):e},truncate:function(e,t){return!t||e.length<=t?e:e.substr(0,t)+"…"},objectFrozen:function(e){return!!Object.isFrozen&&Object.isFrozen(e)},hasKey:h,joinRegExp:function(e){for(var t,r=[],n=0,o=e.length;n<o;n++)a(t=e[n])?r.push(t.replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1")):t&&t.source&&r.push(t.source);return new RegExp(r.join("|"),"i")},urlencode:function(e){var t=[];return u(e,function(e,r){t.push(encodeURIComponent(e)+"="+encodeURIComponent(r))}),t.join("&")},uuid4:function(){var e=n.crypto||n.msCrypto;if(!o(e)&&e.getRandomValues){var t=new Uint16Array(8);e.getRandomValues(t),t[3]=4095&t[3]|16384,t[4]=16383&t[4]|32768;var r=function(e){for(var t=e.toString(16);t.length<4;)t="0"+t;return t};return r(t[0])+r(t[1])+r(t[2])+r(t[3])+r(t[4])+r(t[5])+r(t[6])+r(t[7])}return"xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})},htmlTreeAsString:function(e){for(var t,r=[],n=0,o=0,i=" > ".length;e&&n++<5&&!("html"===(t=f(e))||n>1&&o+r.length*i+t.length>=80);)r.push(t),o+=t.length,e=e.parentNode;return r.reverse().join(" > ")},htmlElementAsString:f,isSameException:function(e,t){return!p(e,t)&&(e=e.values[0],t=t.values[0],e.type===t.type&&e.value===t.value&&(r=e.stacktrace,n=t.stacktrace,(!o(r)||!o(n))&&d(e.stacktrace,t.stacktrace)));var r,n},isSameStacktrace:d,parseUrl:function(e){if("string"!=typeof e)return{};var t=e.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/),r=t[6]||"",n=t[8]||"";return{protocol:t[2],host:t[4],path:t[5],relative:t[5]+r+n}},fill:function(e,t,r,n){var o=e[t];e[t]=r(o),e[t].__raven__=!0,e[t].__orig__=o,n&&n.push([e,t,o])},safeJoin:function(e,t){if(!s(e))return"";for(var r=[],n=0;n<e.length;n++)try{r.push(String(e[n]))}catch(e){r.push("[value cannot be serialized]")}return r.join(t)},serializeException:function e(t,n,o){if(!i(t))return t;o="number"!=typeof(n="number"!=typeof n?g:n)?_:o;var a=function e(t,r){return 0===r?b(t):i(t)?Object.keys(t).reduce(function(n,o){return n[o]=e(t[o],r-1),n},{}):Array.isArray(t)?t.map(function(t){return e(t,r-1)}):b(t)}(t,n);return m(r(a))>o?e(t,n-1):a},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?v:t,e[0].length>=t)return e[0];for(var r=e.length;r>0;r--){var n=e.slice(0,r).join(", ");if(!(n.length>t))return r===e.length?n:n+"…"}return""}},E={collectWindowErrors:!0,debug:!1},w="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},k=[].slice,x="?",S=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;function O(){return"undefined"==typeof document||null==document.location?"":document.location.href}E.report=function(){var e,t,r=[],n=null,o=null,i=null;function a(e,t){var n=null;if(!t||E.collectWindowErrors){for(var o in r)if(r.hasOwnProperty(o))try{r[o].apply(null,[e].concat(k.call(arguments,2)))}catch(e){n=e}if(n)throw n}}function s(t,r,n,o,s){var l=y.isErrorEvent(s)?s.error:s,u=y.isErrorEvent(t)?t.message:t;if(i)E.computeStackTrace.augmentStackTraceWithInitialElement(i,r,n,u),c();else if(l&&y.isError(l))a(E.computeStackTrace(l),!0);else{var h,f={url:r,line:n,column:o},p=void 0;if("[object String]"==={}.toString.call(u))(h=u.match(S))&&(p=h[1],u=h[2]);f.func=x,a({name:p,message:u,url:O(),stack:[f]},!0)}return!!e&&e.apply(this,arguments)}function c(){var e=i,t=n;n=null,i=null,o=null,a.apply(null,[e,!1].concat(t))}function l(e,t){var r=k.call(arguments,1);if(i){if(o===e)return;c()}var a=E.computeStackTrace(e);if(i=a,o=e,n=r,setTimeout(function(){o===e&&c()},a.incomplete?2e3:0),!1!==t)throw e}return l.subscribe=function(n){t||(e=w.onerror,w.onerror=s,t=!0),r.push(n)},l.unsubscribe=function(e){for(var t=r.length-1;t>=0;--t)r[t]===e&&r.splice(t,1)},l.uninstall=function(){t&&(w.onerror=e,t=!1,e=void 0),r=[]},l}(),E.computeStackTrace=function(){function e(e){if(void 0!==e.stack&&e.stack){for(var t,r,n,o=/^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,i=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,a=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,s=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,c=/\((\S*)(?::(\d+))(?::(\d+))\)/,l=e.stack.split("\n"),u=[],h=(/^(.*) is undefined$/.exec(e.message),0),f=l.length;h<f;++h){if(r=o.exec(l[h])){var p=r[2]&&0===r[2].indexOf("native");r[2]&&0===r[2].indexOf("eval")&&(t=c.exec(r[2]))&&(r[2]=t[1],r[3]=t[2],r[4]=t[3]),n={url:p?null:r[2],func:r[1]||x,args:p?[r[2]]:[],line:r[3]?+r[3]:null,column:r[4]?+r[4]:null}}else if(r=i.exec(l[h]))n={url:r[2],func:r[1]||x,args:[],line:+r[3],column:r[4]?+r[4]:null};else{if(!(r=a.exec(l[h])))continue;r[3]&&r[3].indexOf(" > eval")>-1&&(t=s.exec(r[3]))?(r[3]=t[1],r[4]=t[2],r[5]=null):0!==h||r[5]||void 0===e.columnNumber||(u[0].column=e.columnNumber+1),n={url:r[3],func:r[1]||x,args:r[2]?r[2].split(","):[],line:r[4]?+r[4]:null,column:r[5]?+r[5]:null}}!n.func&&n.line&&(n.func=x),u.push(n)}return u.length?{name:e.name,message:e.message,url:O(),stack:u}:null}}function t(e,t,r,n){var o={url:t,line:r};if(o.url&&o.line){if(e.incomplete=!1,o.func||(o.func=x),e.stack.length>0&&e.stack[0].url===o.url){if(e.stack[0].line===o.line)return!1;if(!e.stack[0].line&&e.stack[0].func===o.func)return e.stack[0].line=o.line,!1}return e.stack.unshift(o),e.partial=!0,!0}return e.incomplete=!0,!1}function r(e,o){for(var i,a,s=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,c=[],l={},u=!1,h=r.caller;h&&!u;h=h.caller)if(h!==n&&h!==E.report){if(a={url:null,func:x,line:null,column:null},h.name?a.func=h.name:(i=s.exec(h.toString()))&&(a.func=i[1]),void 0===a.func)try{a.func=i.input.substring(0,i.input.indexOf("{"))}catch(e){}l[""+h]?u=!0:l[""+h]=!0,c.push(a)}o&&c.splice(0,o);var f={name:e.name,message:e.message,url:O(),stack:c};return t(f,e.sourceURL||e.fileName,e.line||e.lineNumber,e.message||e.description),f}function n(t,n){var o=null;n=null==n?0:+n;try{if(o=e(t))return o}catch(e){if(E.debug)throw e}try{if(o=r(t,n+1))return o}catch(e){if(E.debug)throw e}return{name:t.name,message:t.message,url:O()}}return n.augmentStackTraceWithInitialElement=t,n.computeStackTraceFromStackProp=e,n}();var C=E;function R(e,t){var r=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(r>>16)<<16|65535&r}function j(e,t,r,n,o,i){return R((a=R(R(t,e),R(n,i)))<<(s=o)|a>>>32-s,r);var a,s}function T(e,t,r,n,o,i,a){return j(t&r|~t&n,e,t,o,i,a)}function F(e,t,r,n,o,i,a){return j(t&n|r&~n,e,t,o,i,a)}function A(e,t,r,n,o,i,a){return j(t^r^n,e,t,o,i,a)}function B(e,t,r,n,o,i,a){return j(r^(t|~n),e,t,o,i,a)}function D(e,t){var r,n,o,i,a;e[t>>5]|=128<<t%32,e[14+(t+64>>>9<<4)]=t;var s=1732584193,c=-271733879,l=-1732584194,u=271733878;for(r=0;r<e.length;r+=16)n=s,o=c,i=l,a=u,c=B(c=B(c=B(c=B(c=A(c=A(c=A(c=A(c=F(c=F(c=F(c=F(c=T(c=T(c=T(c=T(c,l=T(l,u=T(u,s=T(s,c,l,u,e[r],7,-680876936),c,l,e[r+1],12,-389564586),s,c,e[r+2],17,606105819),u,s,e[r+3],22,-1044525330),l=T(l,u=T(u,s=T(s,c,l,u,e[r+4],7,-176418897),c,l,e[r+5],12,1200080426),s,c,e[r+6],17,-1473231341),u,s,e[r+7],22,-45705983),l=T(l,u=T(u,s=T(s,c,l,u,e[r+8],7,1770035416),c,l,e[r+9],12,-1958414417),s,c,e[r+10],17,-42063),u,s,e[r+11],22,-1990404162),l=T(l,u=T(u,s=T(s,c,l,u,e[r+12],7,1804603682),c,l,e[r+13],12,-40341101),s,c,e[r+14],17,-1502002290),u,s,e[r+15],22,1236535329),l=F(l,u=F(u,s=F(s,c,l,u,e[r+1],5,-165796510),c,l,e[r+6],9,-1069501632),s,c,e[r+11],14,643717713),u,s,e[r],20,-373897302),l=F(l,u=F(u,s=F(s,c,l,u,e[r+5],5,-701558691),c,l,e[r+10],9,38016083),s,c,e[r+15],14,-660478335),u,s,e[r+4],20,-405537848),l=F(l,u=F(u,s=F(s,c,l,u,e[r+9],5,568446438),c,l,e[r+14],9,-1019803690),s,c,e[r+3],14,-187363961),u,s,e[r+8],20,1163531501),l=F(l,u=F(u,s=F(s,c,l,u,e[r+13],5,-1444681467),c,l,e[r+2],9,-51403784),s,c,e[r+7],14,1735328473),u,s,e[r+12],20,-1926607734),l=A(l,u=A(u,s=A(s,c,l,u,e[r+5],4,-378558),c,l,e[r+8],11,-2022574463),s,c,e[r+11],16,1839030562),u,s,e[r+14],23,-35309556),l=A(l,u=A(u,s=A(s,c,l,u,e[r+1],4,-1530992060),c,l,e[r+4],11,1272893353),s,c,e[r+7],16,-155497632),u,s,e[r+10],23,-1094730640),l=A(l,u=A(u,s=A(s,c,l,u,e[r+13],4,681279174),c,l,e[r],11,-358537222),s,c,e[r+3],16,-722521979),u,s,e[r+6],23,76029189),l=A(l,u=A(u,s=A(s,c,l,u,e[r+9],4,-640364487),c,l,e[r+12],11,-421815835),s,c,e[r+15],16,530742520),u,s,e[r+2],23,-995338651),l=B(l,u=B(u,s=B(s,c,l,u,e[r],6,-198630844),c,l,e[r+7],10,1126891415),s,c,e[r+14],15,-1416354905),u,s,e[r+5],21,-57434055),l=B(l,u=B(u,s=B(s,c,l,u,e[r+12],6,1700485571),c,l,e[r+3],10,-1894986606),s,c,e[r+10],15,-1051523),u,s,e[r+1],21,-2054922799),l=B(l,u=B(u,s=B(s,c,l,u,e[r+8],6,1873313359),c,l,e[r+15],10,-30611744),s,c,e[r+6],15,-1560198380),u,s,e[r+13],21,1309151649),l=B(l,u=B(u,s=B(s,c,l,u,e[r+4],6,-145523070),c,l,e[r+11],10,-1120210379),s,c,e[r+2],15,718787259),u,s,e[r+9],21,-343485551),s=R(s,n),c=R(c,o),l=R(l,i),u=R(u,a);return[s,c,l,u]}function H(e){var t,r="",n=32*e.length;for(t=0;t<n;t+=8)r+=String.fromCharCode(e[t>>5]>>>t%32&255);return r}function L(e){var t,r=[];for(r[(e.length>>2)-1]=void 0,t=0;t<r.length;t+=1)r[t]=0;var n=8*e.length;for(t=0;t<n;t+=8)r[t>>5]|=(255&e.charCodeAt(t/8))<<t%32;return r}function P(e){var t,r,n="";for(r=0;r<e.length;r+=1)t=e.charCodeAt(r),n+="0123456789abcdef".charAt(t>>>4&15)+"0123456789abcdef".charAt(15&t);return n}function I(e){return unescape(encodeURIComponent(e))}function U(e){return function(e){return H(D(L(e),8*e.length))}(I(e))}function N(e,t){return function(e,t){var r,n,o=L(e),i=[],a=[];for(i[15]=a[15]=void 0,o.length>16&&(o=D(o,8*e.length)),r=0;r<16;r+=1)i[r]=909522486^o[r],a[r]=1549556828^o[r];return n=D(i.concat(L(t)),512+8*t.length),H(D(a.concat(n),640))}(I(e),I(t))}var M=function(e,t,r){return t?r?N(t,e):P(N(t,e)):r?U(e):P(U(e))};function q(e){this.name="RavenConfigError",this.message=e}q.prototype=new Error,q.prototype.constructor=q;var z=q,W=function(e,t,r){var n=e[t],o=e;if(t in e){var i="warn"===t?"warning":t;e[t]=function(){var e=[].slice.call(arguments),a=y.safeJoin(e," "),s={level:i,logger:"console",extra:{arguments:e}};"assert"===t?!1===e[0]&&(a="Assertion failed: "+(y.safeJoin(e.slice(1)," ")||"console.assert"),s.extra.arguments=e.slice(1),r&&r(a,s)):r&&r(a,s),n&&Function.prototype.apply.call(n,o,e)}}},K=y.isError,V=y.isObject,$=y.isPlainObject,J=y.isErrorEvent,X=y.isUndefined,G=y.isFunction,Y=y.isString,Z=y.isArray,Q=y.isEmptyObject,ee=y.each,te=y.objectMerge,re=y.truncate,ne=y.objectFrozen,oe=y.hasKey,ie=y.joinRegExp,ae=y.urlencode,se=y.uuid4,ce=y.htmlTreeAsString,le=y.isSameException,ue=y.isSameStacktrace,he=y.parseUrl,fe=y.fill,pe=y.supportsFetch,de=y.supportsReferrerPolicy,ge=y.serializeKeysForMessage,_e=y.serializeException,ve=W,me="source protocol user pass host port path".split(" "),be=/^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/;function ye(){return+new Date}var Ee="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},we=Ee.document,ke=Ee.navigator;function xe(e,t){return G(t)?function(r){return t(r,e)}:t}function Se(){for(var e in this._hasJSON=!("object"!=typeof JSON||!JSON.stringify),this._hasDocument=!X(we),this._hasNavigator=!X(ke),this._lastCapturedException=null,this._lastData=null,this._lastEventId=null,this._globalServer=null,this._globalKey=null,this._globalProject=null,this._globalContext={},this._globalOptions={release:Ee.SENTRY_RELEASE&&Ee.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},this._fetchDefaults={method:"POST",keepalive:!0,referrerPolicy:de()?"origin":""},this._ignoreOnError=0,this._isRavenInstalled=!1,this._originalErrorStackTraceLimit=Error.stackTraceLimit,this._originalConsole=Ee.console||{},this._originalConsoleMethods={},this._plugins=[],this._startTime=ye(),this._wrappedBuiltIns=[],this._breadcrumbs=[],this._lastCapturedEvent=null,this._keypressTimeout,this._location=Ee.location,this._lastHref=this._location&&this._location.href,this._resetBackoff(),this._originalConsole)this._originalConsoleMethods[e]=this._originalConsole[e]}Se.prototype={VERSION:"3.23.3",debug:!1,TraceKit:C,config:function(e,t){var r=this;if(r._globalServer)return this._logDebug("error","Error: Raven has already been configured"),r;if(!e)return r;var n=r._globalOptions;t&&ee(t,function(e,t){"tags"===e||"extra"===e||"user"===e?r._globalContext[e]=t:n[e]=t}),r.setDSN(e),n.ignoreErrors.push(/^Script error\.?$/),n.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/),n.ignoreErrors=ie(n.ignoreErrors),n.ignoreUrls=!!n.ignoreUrls.length&&ie(n.ignoreUrls),n.whitelistUrls=!!n.whitelistUrls.length&&ie(n.whitelistUrls),n.includePaths=ie(n.includePaths),n.maxBreadcrumbs=Math.max(0,Math.min(n.maxBreadcrumbs||100,100));var o={xhr:!0,console:!0,dom:!0,location:!0,sentry:!0},i=n.autoBreadcrumbs;"[object Object]"==={}.toString.call(i)?i=te(o,i):!1!==i&&(i=o),n.autoBreadcrumbs=i;var a={tryCatch:!0},s=n.instrument;return"[object Object]"==={}.toString.call(s)?s=te(a,s):!1!==s&&(s=a),n.instrument=s,C.collectWindowErrors=!!n.collectWindowErrors,r},install:function(){var e=this;return e.isSetup()&&!e._isRavenInstalled&&(C.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),r=t.path.lastIndexOf("/"),n=t.path.substr(1,r);this._dsn=e,this._globalKey=t.user,this._globalSecret=t.pass&&t.pass.substr(1),this._globalProject=t.path.substr(r+1),this._globalServer=this._getGlobalServer(t),this._globalEndpoint=this._globalServer+"/"+n+"api/"+this._globalProject+"/store/",this._resetBackoff()},context:function(e,t,r){return G(e)&&(r=t||[],t=e,e=void 0),this.wrap(e,t).apply(this,r)},wrap:function(e,t,r){var n=this;if(X(t)&&!G(e))return e;if(G(e)&&(t=e,e=void 0),!G(t))return t;try{if(t.__raven__)return t;if(t.__raven_wrapper__)return t.__raven_wrapper__}catch(e){return t}function o(){var o=[],i=arguments.length,a=!e||e&&!1!==e.deep;for(r&&G(r)&&r.apply(this,arguments);i--;)o[i]=a?n.wrap(e,arguments[i]):arguments[i];try{return t.apply(this,o)}catch(t){throw n._ignoreNextOnError(),n.captureException(t,e),t}}for(var i in t)oe(t,i)&&(o[i]=t[i]);return o.prototype=t.prototype,t.__raven_wrapper__=o,o.__raven__=!0,o.__orig__=t,o},uninstall:function(){return C.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)},_attachPromiseRejectionHandler:function(){return this._promiseRejectionHandler=this._promiseRejectionHandler.bind(this),Ee.addEventListener&&Ee.addEventListener("unhandledrejection",this._promiseRejectionHandler),this},_detachPromiseRejectionHandler:function(){return Ee.removeEventListener&&Ee.removeEventListener("unhandledrejection",this._promiseRejectionHandler),this},captureException:function(e,t){if(t=te({trimHeadFrames:0},t||{}),J(e)&&e.error)e=e.error;else if(K(e))e=e;else{if(!$(e))return this.captureMessage(e,te(t,{stacktrace:!0,trimHeadFrames:t.trimHeadFrames+1}));t=this._getCaptureExceptionOptionsFromPlainObject(t,e),e=new Error(t.message)}this._lastCapturedException=e;try{var r=C.computeStackTrace(e);this._handleStackInfo(r,t)}catch(t){if(e!==t)throw t}return this},_getCaptureExceptionOptionsFromPlainObject:function(e,t){var r=Object.keys(t).sort(),n=te(e,{message:"Non-Error exception captured with keys: "+ge(r),fingerprint:[M(r)],extra:e.extra||{}});return n.extra.__serialized__=_e(t),n},captureMessage:function(e,t){if(!this._globalOptions.ignoreErrors.test||!this._globalOptions.ignoreErrors.test(e)){var r,n=te({message:e+=""},t=t||{});try{throw new Error(e)}catch(e){r=e}r.name=null;var o=C.computeStackTrace(r),i=Z(o.stack)&&o.stack[1],a=i&&i.url||"";if((!this._globalOptions.ignoreUrls.test||!this._globalOptions.ignoreUrls.test(a))&&(!this._globalOptions.whitelistUrls.test||this._globalOptions.whitelistUrls.test(a))){if(this._globalOptions.stacktrace||t&&t.stacktrace){n.fingerprint=null==n.fingerprint?e:n.fingerprint,(t=te({trimHeadFrames:0},t)).trimHeadFrames+=1;var s=this._prepareFrames(o,t);n.stacktrace={frames:s.reverse()}}return n.fingerprint&&(n.fingerprint=Z(n.fingerprint)?n.fingerprint:[n.fingerprint]),this._send(n),this}}},captureBreadcrumb:function(e){var t=te({timestamp:ye()/1e3},e);if(G(this._globalOptions.breadcrumbCallback)){var r=this._globalOptions.breadcrumbCallback(t);if(V(r)&&!Q(r))t=r;else if(!1===r)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(r(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=xe(t,e),this},setBreadcrumbCallback:function(e){var t=this._globalOptions.breadcrumbCallback;return this._globalOptions.breadcrumbCallback=xe(t,e),this},setShouldSendCallback:function(e){var t=this._globalOptions.shouldSendCallback;return this._globalOptions.shouldSendCallback=xe(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=Ee.RavenConfig;e&&this.config(e.dsn,e.config).install()},showReportDialog:function(e){if(we){var t=(e=e||{}).eventId||this.lastEventId();if(!t)throw new z("Missing eventId");var r=e.dsn||this._dsn;if(!r)throw new z("Missing DSN");var n=encodeURIComponent,o="";o+="?eventId="+n(t),o+="&dsn="+n(r);var i=e.user||this._globalContext.user;i&&(i.name&&(o+="&name="+n(i.name)),i.email&&(o+="&email="+n(i.email)));var a=this._getGlobalServer(this._parseDSN(r)),s=we.createElement("script");s.async=!0,s.src=a+"/api/embed/error-page/"+o,(we.head||we.body).appendChild(s)}},_ignoreNextOnError:function(){var e=this;this._ignoreOnError+=1,setTimeout(function(){e._ignoreOnError-=1})},_triggerEvent:function(e,t){var r,n;if(this._hasDocument){for(n in t=t||{},e="raven"+e.substr(0,1).toUpperCase()+e.substr(1),we.createEvent?(r=we.createEvent("HTMLEvents")).initEvent(e,!0,!0):(r=we.createEventObject()).eventType=e,t)oe(t,n)&&(r[n]=t[n]);if(we.createEvent)we.dispatchEvent(r);else try{we.fireEvent("on"+r.eventType.toLowerCase(),r)}catch(e){}}},_breadcrumbEventHandler:function(e){var t=this;return function(r){if(t._keypressTimeout=null,t._lastCapturedEvent!==r){var n;t._lastCapturedEvent=r;try{n=ce(r.target)}catch(e){n="<unknown>"}t.captureBreadcrumb({category:"ui."+e,message:n})}}},_keypressEventHandler:function(){var e=this;return function(t){var r;try{r=t.target}catch(e){return}var n=r&&r.tagName;if(n&&("INPUT"===n||"TEXTAREA"===n||r.isContentEditable)){var o=e._keypressTimeout;o||e._breadcrumbEventHandler("input")(t),clearTimeout(o),e._keypressTimeout=setTimeout(function(){e._keypressTimeout=null},1e3)}}},_captureUrlChange:function(e,t){var r=he(this._location.href),n=he(t),o=he(e);this._lastHref=t,r.protocol===n.protocol&&r.host===n.host&&(t=n.relative),r.protocol===o.protocol&&r.host===o.host&&(e=o.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 r(t){return function(r,n){for(var o=new Array(arguments.length),i=0;i<o.length;++i)o[i]=arguments[i];var a=o[0];return G(a)&&(o[0]=e.wrap(a)),t.apply?t.apply(this,o):t(o[0],o[1])}}var n=this._globalOptions.autoBreadcrumbs;function o(r){var o=Ee[r]&&Ee[r].prototype;o&&o.hasOwnProperty&&o.hasOwnProperty("addEventListener")&&(fe(o,"addEventListener",function(t){return function(o,i,a,s){try{i&&i.handleEvent&&(i.handleEvent=e.wrap(i.handleEvent))}catch(e){}var c,l,u;return n&&n.dom&&("EventTarget"===r||"Node"===r)&&(l=e._breadcrumbEventHandler("click"),u=e._keypressEventHandler(),c=function(e){if(e){var t;try{t=e.type}catch(e){return}return"click"===t?l(e):"keypress"===t?u(e):void 0}}),t.call(this,o,e.wrap(i,void 0,c),a,s)}},t),fe(o,"removeEventListener",function(e){return function(t,r,n,o){try{r=r&&(r.__raven_wrapper__?r.__raven_wrapper__:r)}catch(e){}return e.call(this,t,r,n,o)}},t))}fe(Ee,"setTimeout",r,t),fe(Ee,"setInterval",r,t),Ee.requestAnimationFrame&&fe(Ee,"requestAnimationFrame",function(t){return function(r){return t(e.wrap(r))}},t);for(var i=["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"],a=0;a<i.length;a++)o(i[a])},_instrumentBreadcrumbs:function(){var e=this,t=this._globalOptions.autoBreadcrumbs,r=e._wrappedBuiltIns;function n(t,r){t in r&&G(r[t])&&fe(r,t,function(t){return e.wrap(t)})}if(t.xhr&&"XMLHttpRequest"in Ee){var o=XMLHttpRequest.prototype;fe(o,"open",function(t){return function(r,n){return Y(n)&&-1===n.indexOf(e._globalKey)&&(this.__raven_xhr={method:r,url:n,status_code:null}),t.apply(this,arguments)}},r),fe(o,"send",function(t){return function(){var r=this;function o(){if(r.__raven_xhr&&4===r.readyState){try{r.__raven_xhr.status_code=r.status}catch(e){}e.captureBreadcrumb({type:"http",category:"xhr",data:r.__raven_xhr})}}for(var i=["onload","onerror","onprogress"],a=0;a<i.length;a++)n(i[a],r);return"onreadystatechange"in r&&G(r.onreadystatechange)?fe(r,"onreadystatechange",function(t){return e.wrap(t,void 0,o)}):r.onreadystatechange=o,t.apply(this,arguments)}},r)}t.xhr&&pe()&&fe(Ee,"fetch",function(t){return function(){for(var r=new Array(arguments.length),n=0;n<r.length;++n)r[n]=arguments[n];var o,i=r[0],a="GET";if("string"==typeof i?o=i:"Request"in Ee&&i instanceof Ee.Request?(o=i.url,i.method&&(a=i.method)):o=""+i,-1!==o.indexOf(e._globalKey))return t.apply(this,r);r[1]&&r[1].method&&(a=r[1].method);var s={method:a,url:o,status_code:null};return t.apply(this,r).then(function(t){return s.status_code=t.status,e.captureBreadcrumb({type:"http",category:"fetch",data:s}),t})}},r),t.dom&&this._hasDocument&&(we.addEventListener?(we.addEventListener("click",e._breadcrumbEventHandler("click"),!1),we.addEventListener("keypress",e._keypressEventHandler(),!1)):(we.attachEvent("onclick",e._breadcrumbEventHandler("click")),we.attachEvent("onkeypress",e._keypressEventHandler())));var i=Ee.chrome,a=!(i&&i.app&&i.app.runtime)&&Ee.history&&history.pushState&&history.replaceState;if(t.location&&a){var s=Ee.onpopstate;Ee.onpopstate=function(){var t=e._location.href;if(e._captureUrlChange(e._lastHref,t),s)return s.apply(this,arguments)};var c=function(t){return function(){var r=arguments.length>2?arguments[2]:void 0;return r&&e._captureUrlChange(e._lastHref,r+""),t.apply(this,arguments)}};fe(history,"pushState",c,r),fe(history,"replaceState",c,r)}if(t.console&&"console"in Ee&&console.log){var l=function(t,r){e.captureBreadcrumb({message:t,level:r.level,category:"console"})};ee(["debug","info","warn","error","log"],function(e,t){ve(console,t,l)})}},_restoreBuiltIns:function(){for(var e;this._wrappedBuiltIns.length;){var t=(e=this._wrappedBuiltIns.shift())[0],r=e[1],n=e[2];t[r]=n}},_restoreConsole:function(){for(var e in this._originalConsoleMethods)this._originalConsole[e]=this._originalConsoleMethods[e]},_drainPlugins:function(){var e=this;ee(this._plugins,function(t,r){var n=r[0],o=r[1];n.apply(e,[e].concat(o))})},_parseDSN:function(e){var t=be.exec(e),r={},n=7;try{for(;n--;)r[me[n]]=t[n]||""}catch(t){throw new z("Invalid DSN: "+e)}if(r.pass&&!this._globalOptions.allowSecretKey)throw new z("Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key");return r},_getGlobalServer:function(e){var t="//"+e.host+(e.port?":"+e.port:"");return e.protocol&&(t=e.protocol+":"+t),t},_handleOnErrorStackInfo:function(){this._ignoreOnError||this._handleStackInfo.apply(this,arguments)},_handleStackInfo:function(e,t){var r=this._prepareFrames(e,t);this._triggerEvent("handle",{stackInfo:e,options:t}),this._processException(e.name,e.message,e.url,e.lineno,r,t)},_prepareFrames:function(e,t){var r=this,n=[];if(e.stack&&e.stack.length&&(ee(e.stack,function(t,o){var i=r._normalizeFrame(o,e.url);i&&n.push(i)}),t&&t.trimHeadFrames))for(var o=0;o<t.trimHeadFrames&&o<n.length;o++)n[o].in_app=!1;return n=n.slice(0,this._globalOptions.stackTraceLimit)},_normalizeFrame:function(e,t){var r={filename:e.url,lineno:e.line,colno:e.column,function:e.func||"?"};return e.url||(r.filename=t),r.in_app=!(this._globalOptions.includePaths.test&&!this._globalOptions.includePaths.test(r.filename)||/(Raven|TraceKit)\./.test(r.function)||/raven\.(min\.)?js$/.test(r.filename)),r},_processException:function(e,t,r,n,o,i){var a,s=(e?e+": ":"")+(t||"");if((!this._globalOptions.ignoreErrors.test||!this._globalOptions.ignoreErrors.test(t)&&!this._globalOptions.ignoreErrors.test(s))&&(o&&o.length?(r=o[0].filename||r,o.reverse(),a={frames:o}):r&&(a={frames:[{filename:r,lineno:n,in_app:!0}]}),(!this._globalOptions.ignoreUrls.test||!this._globalOptions.ignoreUrls.test(r))&&(!this._globalOptions.whitelistUrls.test||this._globalOptions.whitelistUrls.test(r)))){var c=te({exception:{values:[{type:e,value:t,stacktrace:a}]},culprit:r},i);this._send(c)}},_trimPacket:function(e){var t=this._globalOptions.maxMessageLength;if(e.message&&(e.message=re(e.message,t)),e.exception){var r=e.exception.values[0];r.value=re(r.value,t)}var n=e.request;return n&&(n.url&&(n.url=re(n.url,this._globalOptions.maxUrlLength)),n.Referer&&(n.Referer=re(n.Referer,this._globalOptions.maxUrlLength))),e.breadcrumbs&&e.breadcrumbs.values&&this._trimBreadcrumbs(e.breadcrumbs),e},_trimBreadcrumbs:function(e){for(var t,r,n,o=["to","from","url"],i=0;i<e.values.length;++i)if((r=e.values[i]).hasOwnProperty("data")&&V(r.data)&&!ne(r.data)){n=te({},r.data);for(var a=0;a<o.length;++a)t=o[a],n.hasOwnProperty(t)&&n[t]&&(n[t]=re(n[t],this._globalOptions.maxUrlLength));e.values[i].data=n}},_getHttpData:function(){if(this._hasNavigator||this._hasDocument){var e={};return this._hasNavigator&&ke.userAgent&&(e.headers={"User-Agent":navigator.userAgent}),Ee.location&&Ee.location.href&&(e.url=Ee.location.href),this._hasDocument&&we.referrer&&(e.headers||(e.headers={}),e.headers.Referer=we.referrer),e}},_resetBackoff:function(){this._backoffDuration=0,this._backoffStart=null},_shouldBackoff:function(){return this._backoffDuration&&ye()-this._backoffStart<this._backoffDuration},_isRepeatData:function(e){var t=this._lastData;return!(!t||e.message!==t.message||e.culprit!==t.culprit)&&(e.stacktrace||t.stacktrace?ue(e.stacktrace,t.stacktrace):!e.exception&&!t.exception||le(e.exception,t.exception))},_setBackoffState:function(e){if(!this._shouldBackoff()){var t=e.status;if(400===t||401===t||429===t){var r;try{r=pe()?e.headers.get("Retry-After"):e.getResponseHeader("Retry-After"),r=1e3*parseInt(r,10)}catch(e){}this._backoffDuration=r||(2*this._backoffDuration||1e3),this._backoffStart=ye()}}},_send:function(e){var t=this._globalOptions,r={project:this._globalProject,logger:t.logger,platform:"javascript"},n=this._getHttpData();n&&(r.request=n),e.trimHeadFrames&&delete e.trimHeadFrames,(e=te(r,e)).tags=te(te({},this._globalContext.tags),e.tags),e.extra=te(te({},this._globalContext.extra),e.extra),e.extra["session:duration"]=ye()-this._startTime,this._breadcrumbs&&this._breadcrumbs.length>0&&(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),Object.keys(e).forEach(function(t){(null==e[t]||""===e[t]||Q(e[t]))&&delete e[t]}),G(t.dataCallback)&&(e=t.dataCallback(e)||e),e&&!Q(e)&&(G(t.shouldSendCallback)&&!t.shouldSendCallback(e)||(this._shouldBackoff()?this._logDebug("warn","Raven dropped error due to backoff: ",e):"number"==typeof t.sampleRate?Math.random()<t.sampleRate&&this._sendProcessedPayload(e):this._sendProcessedPayload(e)))},_getUuid:function(){return se()},_sendProcessedPayload:function(e,t){var r=this,n=this._globalOptions;if(this.isSetup())if(e=this._trimPacket(e),this._globalOptions.allowDuplicates||!this._isRepeatData(e)){this._lastEventId=e.event_id||(e.event_id=this._getUuid()),this._lastData=e,this._logDebug("debug","Raven about to send:",e);var o={sentry_version:"7",sentry_client:"raven-js/"+this.VERSION,sentry_key:this._globalKey};this._globalSecret&&(o.sentry_secret=this._globalSecret);var i=e.exception&&e.exception.values[0];this._globalOptions.autoBreadcrumbs&&this._globalOptions.autoBreadcrumbs.sentry&&this.captureBreadcrumb({category:"sentry",message:i?(i.type?i.type+": ":"")+i.value:e.message,event_id:e.event_id,level:e.level||"error"});var a=this._globalEndpoint;(n.transport||this._makeRequest).call(this,{url:a,auth:o,data:e,options:n,onSuccess:function(){r._resetBackoff(),r._triggerEvent("success",{data:e,src:a}),t&&t()},onError:function(n){r._logDebug("error","Raven transport failed to send: ",n),n.request&&r._setBackoffState(n.request),r._triggerEvent("failure",{data:e,src:a}),n=n||new Error("Raven send failed (no additional details provided)"),t&&t(n)}})}else this._logDebug("warn","Raven dropped repeat event: ",e)},_makeRequest:function(e){var t=e.url+"?"+ae(e.auth),n=null,o={};if(e.options.headers&&(n=this._evaluateHash(e.options.headers)),e.options.fetchParameters&&(o=this._evaluateHash(e.options.fetchParameters)),pe()){o.body=r(e.data);var i=te({},this._fetchDefaults),a=te(i,o);return n&&(a.headers=n),Ee.fetch(t,a).then(function(t){if(t.ok)e.onSuccess&&e.onSuccess();else{var r=new Error("Sentry error code: "+t.status);r.request=t,e.onError&&e.onError(r)}}).catch(function(){e.onError&&e.onError(new Error("Sentry error code: network unavailable"))})}var s=Ee.XMLHttpRequest&&new Ee.XMLHttpRequest;s&&(("withCredentials"in s||"undefined"!=typeof XDomainRequest)&&("withCredentials"in s?s.onreadystatechange=function(){if(4===s.readyState)if(200===s.status)e.onSuccess&&e.onSuccess();else if(e.onError){var t=new Error("Sentry error code: "+s.status);t.request=s,e.onError(t)}}:(s=new XDomainRequest,t=t.replace(/^https?:/,""),e.onSuccess&&(s.onload=e.onSuccess),e.onError&&(s.onerror=function(){var t=new Error("Sentry error code: XDomainRequest");t.request=s,e.onError(t)})),s.open("POST",t),n&&ee(n,function(e,t){s.setRequestHeader(e,t)}),s.send(r(e.data))))},_evaluateHash:function(e){var t={};for(var r in e)if(e.hasOwnProperty(r)){var n=e[r];t[r]="function"==typeof n?n():n}return t},_logDebug:function(e){this._originalConsoleMethods[e]&&this.debug&&Function.prototype.apply.call(this._originalConsoleMethods[e],this._originalConsole,[].slice.call(arguments,1))},_mergeContext:function(e,t){X(t)?delete this._globalContext[e]:this._globalContext[e]=te(this._globalContext[e]||{},t)}},Se.prototype.setUser=Se.prototype.setUserContext,Se.prototype.setReleaseContext=Se.prototype.setRelease;var Oe=Se,Ce="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},Re=Ce.Raven,je=new Oe;je.noConflict=function(){return Ce.Raven=Re,je},je.afterLoad();var Te,Fe,Ae,Be,De,He,Le,Pe=je;(Le="plyr.io"===window.location.host)&&Pe.config("https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555").install(),document.addEventListener("DOMContentLoaded",function(){Pe.context(function(){window.shr&&window.shr.setup({count:{classname:"button__count"}}),document.addEventListener("focusout",function(e){e.target.classList.remove("tab-focus")}),document.addEventListener("keydown",function(e){9===e.keyCode&&setTimeout(function(){document.activeElement.classList.add("tab-focus")},0)});var e=new Plyr("#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,publisherId:"918848828995742"}});window.player=e;var t=document.querySelectorAll("[data-source]"),r={video:"video",audio:"audio",youtube:"youtube",vimeo:"vimeo"},n=window.location.hash.replace("#",""),o=window.history&&window.history.pushState;function i(e,t,r){e&&e.classList[r?"add":"remove"](t)}function a(o,a){if(o in r&&(a||o!==n)&&(n.length||o!==r.video)){switch(o){case r.video:e.source={type:"video",title:"View From A Blue Moon",sources:[{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4",type:"video/mp4"}],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:e.source={type:"audio",title:"Kishi Bashi &ndash; &ldquo;It All Began With A Burst&rdquo;",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:e.source={type:"video",title:"View From A Blue Moon",sources:[{src:"https://youtube.com/watch?v=bTqVqk7FSmY",provider:"youtube"}]};break;case r.vimeo:e.source={type:"video",sources:[{src:"https://vimeo.com/76979871",provider:"vimeo"}]}}n=o,Array.from(t).forEach(function(e){return i(e.parentElement,"active",!1)}),i(document.querySelector('[data-source="'+o+'"]'),"active",!0),Array.from(document.querySelectorAll(".plyr__cite")).forEach(function(e){e.setAttribute("hidden","")}),document.querySelector(".plyr__cite--"+o).removeAttribute("hidden")}}if(Array.from(t).forEach(function(e){e.addEventListener("click",function(){var t=e.getAttribute("data-source");a(t),o&&window.history.pushState({type:t},"","#"+t)})}),window.addEventListener("popstate",function(e){e.state&&"type"in e.state&&a(e.state.type)}),o){var s=!n.length;s&&(n=r.video),n in r&&window.history.replaceState({type:n},"",s?"":"#"+n),n!==r.video&&a(n,!0)}})}),Le&&(Te=window,Fe=document,Ae="script",Be="ga",Te.GoogleAnalyticsObject=Be,Te.ga=Te.ga||function(){(Te.ga.q=Te.ga.q||[]).push(arguments)},Te.ga.l=1*new Date,De=Fe.createElement(Ae),He=Fe.getElementsByTagName(Ae)[0],De.async=1,De.src="https://www.google-analytics.com/analytics.js",He.parentNode.insertBefore(De,He),window.ga("create","UA-40881672-11","auto"),window.ga("send","pageview"))}();
//# sourceMappingURL=demo.min.js.map
diff --git a/demo/dist/demo.min.js.map b/demo/dist/demo.min.js.map
index 8f883f97..a22f230d 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","demo/src/js/demo.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","supportsErrorEvent","ErrorEvent","e","supportsFetch","Headers","Request","Response","each","callback","j","hasKey","object","htmlElementAsString","elem","className","classes","attr","out","tagName","toLowerCase","id","split","attrWhitelist","getAttribute","isOnlyOneTruthy","a","b","isSameStacktrace","stack1","stack2","frames1","frames","frames2","filename","lineno","colno","MAX_SERIALIZE_EXCEPTION_DEPTH","MAX_SERIALIZE_EXCEPTION_SIZE","MAX_SERIALIZE_KEYS_LENGTH","jsonSize","encodeURI","utf8Length","serializeValue","substr","maxLength","type","utils","isObject","isError","isErrorEvent","isFunction","isEmptyObject","_","supportsReferrerPolicy","referrerPolicy","supportsPromiseRejectionEvent","PromiseRejectionEvent","wrappedCallback","data","original","normalizedData","objectMerge","obj1","obj2","truncate","str","max","objectFrozen","isFrozen","joinRegExp","patterns","pattern","sources","len","replace","source","RegExp","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","filter","usedKeys","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","undefined","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","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","charAt","str2rstrUTF8","unescape","rawMD5","rstrMD5","rawHMACMD5","k","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","keepalive","_ignoreOnError","_isRavenInstalled","_originalErrorStackTraceLimit","_originalConsole","_originalConsoleMethods","_plugins","_startTime","_wrappedBuiltIns","_breadcrumbs","_lastCapturedEvent","_keypressTimeout","_location","_lastHref","_resetBackoff","VERSION","config","dsn","options","_logDebug","globalOptions","setDSN","maxBreadcrumbs","min","autoBreadcrumbDefaults","xhr","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","bind","addEventListener","removeEventListener","trimHeadFrames","captureMessage","_getCaptureExceptionOptionsFromPlainObject","_handleStackInfo","currentOptions","exKeys","sort","fingerprint","md5","__serialized__","test","initialCall","fileurl","_prepareFrames","_send","captureBreadcrumb","crumb","timestamp","breadcrumbCallback","shift","addPlugin","plugin","pluginArgs","setUserContext","setExtraContext","_mergeContext","setTagsContext","tags","clearContext","getContext","parse","setEnvironment","environment","setRelease","setDataCallback","dataCallback","setBreadcrumbCallback","setShouldSendCallback","shouldSendCallback","setTransport","transport","lastEventId","ravenNotConfiguredError","afterLoad","RavenConfig","showReportDialog","eventId","encode","qs","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","wrapEventTarget","proto","capture","secure","handleEvent","before","clickHandler","keypressHandler","requestAnimationFrame","cb","eventTargets","wrapProp","prop","xhrproto","XMLHttpRequest","origOpen","__raven_xhr","status_code","origSend","onreadystatechangeHandler","readyState","status","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","port","_processException","frame","_normalizeFrame","in_app","stackInfoUrl","normalized","function","prefixedMessage","culprit","_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","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","open","setRequestHeader","send","evaluated","setUser","setReleaseContext","raven","_Raven","RavenConstructor","noConflict","isLive","singleton","shr","setup","classList","remove","keyCode","activeElement","add","player","Plyr","buttons","querySelectorAll","types","currentType","historySupport","toggleClass","state","newSource","init","video","audio","youtube","vimeo","button","parentElement","querySelector","cite","setAttribute","removeAttribute","GoogleAnalyticsObject","l","getElementsByTagName","insertBefore","ga"],"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' ? global : typeof self !== 'undefined' ? self : {};\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 ({}.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 supportsErrorEvent() && {}.toString.call(value) === '[object ErrorEvent]';\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 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 return !max || 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 <a/> 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 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 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 var maxLength = 40;\n\n if (typeof value === 'string') {\n return value.length <= maxLength ? value : value.substr(0, maxLength - 1) + '\\u2026';\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\nmodule.exports = {\n isObject: isObject,\n isError: isError,\n isErrorEvent: isErrorEvent,\n isUndefined: isUndefined,\n isFunction: isFunction,\n isPlainObject: isPlainObject,\n isString: isString,\n isArray: isArray,\n isEmptyObject: isEmptyObject,\n supportsErrorEvent: supportsErrorEvent,\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};\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\n return document.location.href;\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.<string, *>} 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.<string, *>} 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|<anonymous>|[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 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.<string, *>} 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.<string, *>} 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 isError = utils.isError;\nvar isObject = utils.isObject;\nvar isPlainObject = utils.isPlainObject;\nvar isErrorEvent = utils.isErrorEvent;\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;\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\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 };\n this._fetchDefaults = {\n method: 'POST',\n keepalive: true,\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.23.3',\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 = undefined;\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} func 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 },\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 (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 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 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 if (this._globalOptions.stacktrace || (options && options.stacktrace)) {\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 = options || {};\n\n var lastEventId = options.eventId || this.lastEventId();\n if (!lastEventId) {\n throw new RavenConfigError('Missing eventId');\n }\n\n var dsn = options.dsn || this._dsn;\n if (!dsn) {\n throw new RavenConfigError('Missing DSN');\n }\n\n var encode = encodeURIComponent;\n var qs = '';\n qs += '?eventId=' + encode(lastEventId);\n qs += '&dsn=' + encode(dsn);\n\n var user = options.user || this._globalContext.user;\n if (user) {\n if (user.name) qs += '&name=' + encode(user.name);\n if (user.email) qs += '&email=' + encode(user.email);\n }\n\n var globalServer = this._getGlobalServer(this._parseDSN(dsn));\n\n var script = _document.createElement('script');\n script.async = true;\n script.src = globalServer + '/api/embed/error-page/' + qs;\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 = '<unknown>';\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(originalCallback);\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(fn.handleEvent);\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(fn, undefined, before),\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(self.wrap(cb));\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(orig);\n }); // intentionally don't track filled methods on XHR instances\n }\n }\n\n if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {\n var xhrproto = 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(orig, undefined, onreadystatechangeHandler);\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.apply(this, args).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 };\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 {\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 history.pushState &&\n 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(history, 'pushState', historyReplacementFunction, wrappedBuiltIns);\n fill(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() {\n // if we are intentionally ignoring errors via onerror, bail out\n if (!this._ignoreOnError) {\n this._handleStackInfo.apply(this, arguments);\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 culprit: fileurl\n },\n options\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.culprit !== last.culprit // 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 // 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 _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 if (this._originalConsoleMethods[level] && this.debug) {\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// Plyr.io demo\n// This code is purely for the https://plyr.io website\n// Please see readme.md in the root or github.com/sampotts/plyr\n// ==========================================================================\n\nimport Raven from 'raven-js';\n\n(() => {\n const isLive = window.location.host === 'plyr.io';\n\n // Raven / Sentry\n // For demo site (https://plyr.io) only\n if (isLive) {\n Raven.config('https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555').install();\n }\n\n document.addEventListener('DOMContentLoaded', () => {\n Raven.context(() => {\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n document.activeElement.classList.add(tabClassName);\n }, 0);\n });\n\n // Setup the player\n const player = new Plyr('#player', {\n debug: true,\n title: 'View From A Blue Moon',\n iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: true,\n },\n /* controls: [\n 'play-large',\n 'restart',\n 'rewind',\n 'play',\n 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ], */\n captions: {\n active: true,\n },\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n ads: {\n // enabled: true,\n publisherId: '918848828995742',\n },\n });\n\n // Expose for tinkering in the console\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [{\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4',\n type: 'video/mp4',\n }],\n poster: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title: 'Kishi Bashi &ndash; &ldquo;It All Began With A Burst&rdquo;',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [{\n src: 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n }],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n }],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button => toggleClass(button.parentElement, 'active', false));\n\n // Set active on parent\n toggleClass(document.querySelector(`[data-source=\"${type}\"]`), 'active', true);\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(cite => {\n cite.setAttribute('hidden', '');\n });\n document.querySelector(`.plyr__cite--${type}`).removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`,\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n });\n });\n\n // Google analytics\n // For demo site (https://plyr.io) only\n /* eslint-disable */\n if (isLive) {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n }\n /* eslint-enable */\n})();\n"]} \ No newline at end of file
+{"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","demo/src/js/demo.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","supportsErrorEvent","ErrorEvent","e","supportsFetch","Headers","Request","Response","each","callback","j","hasKey","object","htmlElementAsString","elem","className","classes","attr","out","tagName","toLowerCase","id","split","attrWhitelist","getAttribute","isOnlyOneTruthy","a","b","isSameStacktrace","stack1","stack2","frames1","frames","frames2","filename","lineno","colno","MAX_SERIALIZE_EXCEPTION_DEPTH","MAX_SERIALIZE_EXCEPTION_SIZE","MAX_SERIALIZE_KEYS_LENGTH","jsonSize","encodeURI","utf8Length","serializeValue","substr","maxLength","type","utils","isObject","isError","isErrorEvent","isFunction","isEmptyObject","_","supportsReferrerPolicy","referrerPolicy","supportsPromiseRejectionEvent","PromiseRejectionEvent","wrappedCallback","data","original","normalizedData","objectMerge","obj1","obj2","truncate","str","max","objectFrozen","isFrozen","joinRegExp","patterns","pattern","sources","len","replace","source","RegExp","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","filter","usedKeys","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","undefined","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","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","charAt","str2rstrUTF8","unescape","rawMD5","rstrMD5","rawHMACMD5","k","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","keepalive","_ignoreOnError","_isRavenInstalled","_originalErrorStackTraceLimit","_originalConsole","_originalConsoleMethods","_plugins","_startTime","_wrappedBuiltIns","_breadcrumbs","_lastCapturedEvent","_keypressTimeout","_location","_lastHref","_resetBackoff","VERSION","config","dsn","options","_logDebug","globalOptions","setDSN","maxBreadcrumbs","min","autoBreadcrumbDefaults","xhr","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","bind","addEventListener","removeEventListener","trimHeadFrames","captureMessage","_getCaptureExceptionOptionsFromPlainObject","_handleStackInfo","currentOptions","exKeys","sort","fingerprint","md5","__serialized__","test","initialCall","fileurl","_prepareFrames","_send","captureBreadcrumb","crumb","timestamp","breadcrumbCallback","shift","addPlugin","plugin","pluginArgs","setUserContext","setExtraContext","_mergeContext","setTagsContext","tags","clearContext","getContext","parse","setEnvironment","environment","setRelease","setDataCallback","dataCallback","setBreadcrumbCallback","setShouldSendCallback","shouldSendCallback","setTransport","transport","lastEventId","ravenNotConfiguredError","afterLoad","RavenConfig","showReportDialog","eventId","encode","qs","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","wrapEventTarget","proto","capture","secure","handleEvent","before","clickHandler","keypressHandler","requestAnimationFrame","cb","eventTargets","wrapProp","prop","xhrproto","XMLHttpRequest","origOpen","__raven_xhr","status_code","origSend","onreadystatechangeHandler","readyState","status","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","port","_processException","frame","_normalizeFrame","in_app","stackInfoUrl","normalized","function","prefixedMessage","culprit","_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","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","open","setRequestHeader","send","evaluated","setUser","setReleaseContext","raven","_Raven","RavenConstructor","noConflict","isLive","singleton","shr","setup","classList","remove","keyCode","activeElement","add","player","Plyr","buttons","querySelectorAll","types","currentType","historySupport","toggleClass","state","newSource","init","video","audio","youtube","vimeo","button","parentElement","querySelector","cite","setAttribute","removeAttribute","GoogleAnalyticsObject","l","getElementsByTagName","insertBefore","ga"],"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' ? global : typeof self !== 'undefined' ? self : {};\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 ({}.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 supportsErrorEvent() && {}.toString.call(value) === '[object ErrorEvent]';\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 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 return !max || 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 <a/> 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 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 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 var maxLength = 40;\n\n if (typeof value === 'string') {\n return value.length <= maxLength ? value : value.substr(0, maxLength - 1) + '\\u2026';\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\nmodule.exports = {\n isObject: isObject,\n isError: isError,\n isErrorEvent: isErrorEvent,\n isUndefined: isUndefined,\n isFunction: isFunction,\n isPlainObject: isPlainObject,\n isString: isString,\n isArray: isArray,\n isEmptyObject: isEmptyObject,\n supportsErrorEvent: supportsErrorEvent,\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};\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\n return document.location.href;\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.<string, *>} 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.<string, *>} 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|<anonymous>|[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 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.<string, *>} 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.<string, *>} 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 isError = utils.isError;\nvar isObject = utils.isObject;\nvar isPlainObject = utils.isPlainObject;\nvar isErrorEvent = utils.isErrorEvent;\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;\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\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 };\n this._fetchDefaults = {\n method: 'POST',\n keepalive: true,\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.23.3',\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 = undefined;\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} func 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 },\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 (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 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 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 if (this._globalOptions.stacktrace || (options && options.stacktrace)) {\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 = options || {};\n\n var lastEventId = options.eventId || this.lastEventId();\n if (!lastEventId) {\n throw new RavenConfigError('Missing eventId');\n }\n\n var dsn = options.dsn || this._dsn;\n if (!dsn) {\n throw new RavenConfigError('Missing DSN');\n }\n\n var encode = encodeURIComponent;\n var qs = '';\n qs += '?eventId=' + encode(lastEventId);\n qs += '&dsn=' + encode(dsn);\n\n var user = options.user || this._globalContext.user;\n if (user) {\n if (user.name) qs += '&name=' + encode(user.name);\n if (user.email) qs += '&email=' + encode(user.email);\n }\n\n var globalServer = this._getGlobalServer(this._parseDSN(dsn));\n\n var script = _document.createElement('script');\n script.async = true;\n script.src = globalServer + '/api/embed/error-page/' + qs;\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 = '<unknown>';\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(originalCallback);\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(fn.handleEvent);\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(fn, undefined, before),\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(self.wrap(cb));\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(orig);\n }); // intentionally don't track filled methods on XHR instances\n }\n }\n\n if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {\n var xhrproto = 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(orig, undefined, onreadystatechangeHandler);\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.apply(this, args).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 };\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 {\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 history.pushState &&\n 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(history, 'pushState', historyReplacementFunction, wrappedBuiltIns);\n fill(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() {\n // if we are intentionally ignoring errors via onerror, bail out\n if (!this._ignoreOnError) {\n this._handleStackInfo.apply(this, arguments);\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 culprit: fileurl\n },\n options\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.culprit !== last.culprit // 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 // 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 _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 if (this._originalConsoleMethods[level] && this.debug) {\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// Plyr.io demo\n// This code is purely for the https://plyr.io website\n// Please see readme.md in the root or github.com/sampotts/plyr\n// ==========================================================================\n\nimport Raven from 'raven-js';\n\n(() => {\n const isLive = window.location.host === 'plyr.io';\n\n // Raven / Sentry\n // For demo site (https://plyr.io) only\n if (isLive) {\n Raven.config('https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555').install();\n }\n\n document.addEventListener('DOMContentLoaded', () => {\n Raven.context(() => {\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n document.activeElement.classList.add(tabClassName);\n }, 0);\n });\n\n // Setup the player\n const player = new Plyr('#player', {\n debug: true,\n title: 'View From A Blue Moon',\n iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: true,\n },\n /* controls: [\n 'play-large',\n 'restart',\n 'rewind',\n 'play',\n 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ], */\n captions: {\n active: true,\n },\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n ads: {\n enabled: true,\n publisherId: '918848828995742',\n },\n /* listeners: {\n seek: () => false,\n }, */\n });\n\n // Expose for tinkering in the console\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [{\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4',\n type: 'video/mp4',\n }],\n poster: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title: 'Kishi Bashi &ndash; &ldquo;It All Began With A Burst&rdquo;',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [{\n src: 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n }],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n }],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button => toggleClass(button.parentElement, 'active', false));\n\n // Set active on parent\n toggleClass(document.querySelector(`[data-source=\"${type}\"]`), 'active', true);\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(cite => {\n cite.setAttribute('hidden', '');\n });\n document.querySelector(`.plyr__cite--${type}`).removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`,\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n });\n });\n\n // Google analytics\n // For demo site (https://plyr.io) only\n /* eslint-disable */\n if (isLive) {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n }\n /* eslint-enable */\n})();\n"]} \ No newline at end of file
diff --git a/demo/src/js/demo.js b/demo/src/js/demo.js
index 0820e4e0..b4a11c44 100644
--- a/demo/src/js/demo.js
+++ b/demo/src/js/demo.js
@@ -80,9 +80,12 @@ import Raven from 'raven-js';
google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',
},
ads: {
- // enabled: true,
+ enabled: true,
publisherId: '918848828995742',
},
+ /* listeners: {
+ seek: () => false,
+ }, */
});
// Expose for tinkering in the console
diff --git a/dist/plyr.js b/dist/plyr.js
index f3fd7f30..0e9d4894 100644
--- a/dist/plyr.js
+++ b/dist/plyr.js
@@ -77,7 +77,7 @@ var defaults = {
// Sprite (for icons)
loadSprite: true,
iconPrefix: 'plyr',
- iconUrl: 'https://cdn.plyr.io/3.0.4/plyr.svg',
+ iconUrl: 'https://cdn.plyr.io/3.0.6/plyr.svg',
// Blank video (used to prevent errors on source change)
blankVideo: 'https://cdn.plyr.io/static/blank.mp4',
@@ -4476,14 +4476,15 @@ var Listeners = function () {
var proxy = function proxy(event, defaultHandler, customHandlerKey) {
var customHandler = _this4.player.config.listeners[customHandlerKey];
var hasCustomHandler = utils.is.function(customHandler);
+ var returned = true;
// Execute custom handler
if (hasCustomHandler) {
- customHandler.call(_this4.player, event);
+ returned = customHandler.call(_this4.player, event);
}
// Only call default handler if not prevented in custom handler
- if (!event.defaultPrevented && utils.is.function(defaultHandler)) {
+ if (returned && utils.is.function(defaultHandler)) {
defaultHandler.call(_this4.player, event);
}
};
@@ -6408,7 +6409,7 @@ var source = {
// ==========================================================================
// Plyr
-// plyr.js v3.0.4
+// plyr.js v3.0.6
// https://github.com/sampotts/plyr
// License: The MIT License (MIT)
// ==========================================================================
diff --git a/dist/plyr.js.map b/dist/plyr.js.map
index 4f770179..befbb104 100644
--- a/dist/plyr.js.map
+++ b/dist/plyr.js.map
@@ -1 +1 @@
-{"version":3,"sources":["src/js/types.js","src/js/defaults.js","node_modules/loadjs/dist/loadjs.umd.js","src/js/utils.js","src/js/support.js","src/js/console.js","src/js/fullscreen.js","src/js/captions.js","src/js/i18n.js","src/js/ui.js","src/js/controls.js","src/js/listeners.js","src/js/storage.js","src/js/plugins/ads.js","src/js/plugins/youtube.js","src/js/plugins/vimeo.js","src/js/media.js","src/js/source.js","src/js/plyr.js"],"names":["providers","types","defaults","window","navigator","language","split","define","this","utils","input","instanceof","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","test","array","nodeList","length","object","keys","constructor","document","documentMode","documentElement","style","userAgent","platform","url","responseType","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","JSON","parse","responseText","e","response","Error","statusText","open","send","id","is","prefix","hasId","isCached","exists","querySelectorAll","injectSprite","data","innerHTML","body","insertBefore","childNodes","container","createElement","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","call","content","fetch","then","empty","result","setItem","stringify","catch","Math","floor","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","entries","key","value","sel","existingAttributes","existing","selector","s","trim","className","replace","stripped","parts","start","charAt","class","toggle","contains","classList","removeAttribute","prototype","match","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","currentTime","seekTooltip","classNames","tooltip","error","debug","warn","toggleNativeControls","focused","activeElement","focusable","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","passiveListeners","bubbles","detail","CustomEvent","boolean","assign","plyr","dispatchEvent","toggleState","pressed","getAttribute","state","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toString","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","source","shift","extend","youtube","vimeo","regex","$2","parser","href","search","startsWith","parseUrl","hashes","indexOf","reduce","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","getRatio","w","h","ratio","transitionEndEvent","undefined","offsetHeight","provider","inline","api","ui","browser","getBrowser","playsInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","defineProperty","range","matchMedia","noop","Console","enabled","console","log","bind","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","toggleClass","fallback","Fullscreen","name","stopPropagation","update","native","iosNative","playing","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","action","enter","exit","hasClass","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","exitFullscreen","prefixes","some","pre","stored","get","isYouTube","textTracks","setCaptionsMenu","getAttributesFromSelector","insertAfter","getTracks","tracks","isIE","URL","src","track","hostname","location","protocol","createObjectURL","blob","setLanguage","show","setCue","mode","currentTrack","getCurrentTrack","activeCues","isVimeo","embed","enableTextTrack","filter","cue","setText","getCueAsHTML","emptyElement","caption","i18n","seekTime","title","uiSupported","listeners","inject","setup","muted","speed","loop","quality","timeUpdate","checkPlaying","ready","setTitle","label","isEmbed","iframe","stopped","paused","toggleControls","loading","timers","setTimeout","failed","networkState","setRange","updateRangeFill","getElementsByTagName","nodeValue","getPercentage","setProgress","buffered","invert","invertTime","updateTimeDisplay","seeking","updateProgress","hasDuration","displayDuration","updateSeekTooltip","isWebkit","setProperty","iconUrl","svg4everybody","namespace","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","hidden","badge","menu","buttonType","toCamelCase","labelPressed","iconPressed","control","createIcon","createLabel","push","suffix","list","checked","item","radio","faux","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","touch","pageX","left","parseFloat","setting","tab","tabs","pane","panes","toggleTab","getBadge","createBadge","createMenuItem","getLabel","updateSetting","getLanguage","default","hasTracks","unshift","form","isMenuItem","isButton","clone","position","opacity","scrollWidth","scrollHeight","getElementById","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setSpeedMenu","loadSprite","create","findElements","repaint","labels","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","repeat","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","toggleCaptions","isTouch","keyboard","global","tabFocus","hideControls","durationUpdate","hasAudio","showPosterOnEnd","load","updateVolume","checkLoading","clickToPlay","ended","disableContextMenu","set","concat","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","defaultPrevented","forward","showTab","toggleInvert","hover","webkitDirectionInvertedFromDevice","step","direction","deltaY","deltaX","Storage","store","json","removeItem","Ads","publisherId","ads","initialized","manager","loader","cuePoints","safetyTimer","countdownTimer","managerPromise","google","ima","loadScript","urls","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","getRemainingTime","setInterval","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","cues","setVolume","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","args","handlers","handler","apply","Date","now","base","buildUrlParams","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","instance","getPlaybackQuality","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stop","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","setQualityMenu","getAvailableQualityLevels","Vimeo","padding","offset","transform","parseVimeoId","setCurrentTime","selected","setLoop","currentSrc","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","frame","seconds","wrap","blankVideo","insertElement","attribute","cancelRequests","html5","check","crossorigin","poster","addStyleHook","insertElements","jQuery","original","tagName","getProviderByUrl","getUrlParams","truthy","playsinline","hasAttribute","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","showEvents","delayEvents","noTransition","toggled","soft","done","clear","unload","mime","readyState","targetTime","end","fauxDuration","realDuration","min","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","change","states","webkitPresentationMode"],"mappings":"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","file":"plyr.js","sourcesContent":["// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.0.4/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 'default',\n options: [\n 'hd2160',\n 'hd1440',\n 'hd1080',\n 'hd720',\n 'large',\n 'medium',\n 'small',\n 'tiny',\n 'default',\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: window.navigator.language.split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n 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 = path.replace(/^css!/, ''); // remove \"css!\" prefix\n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type, bubbles, detail) {\n // Bail if no element\n if (!utils.is.element(element) || !utils.is.string(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles: utils.is.boolean(bubbles) ? bubbles : false,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, inline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const playsInline = browser.isIPhone && inline && support.inline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n inline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.name = Fullscreen.name;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', () => {\n this.toggle();\n });\n\n // Prevent double click on controls bubbling up\n utils.on(this.player.elements.controls, 'dblclick', event => event.stopPropagation());\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return false;\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get name() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.name}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.name}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n document.cancelFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.name}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n return captions.getTracks.call(this).find(track => track.language.toLowerCase() === this.language);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // If there's no caption toggle, bail\n if (!utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality options\n this.options.quality = [];\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', i18n.get('frameTitle', this.config));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n ui.setProgress.call(this, this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport i18n from './i18n';\nimport captions from './captions';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = i18n.get(label, this.config);\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n ),\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the YouTube quality menu\n // TODO: Support for HTML5\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n } else {\n this.options.quality = this.config.quality.options;\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.isYouTube;\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 'hd2160':\n label = '4K';\n break;\n\n case 'hd1440':\n label = 'WQHD';\n break;\n\n case 'hd1080':\n label = 'HD';\n break;\n\n case 'hd720':\n label = 'HD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n this.options.quality.forEach(quality =>\n controls.createMenuItem.call(this, quality, list, type, controls.getLabel.call(this, 'quality', quality), getBadge(quality)),\n );\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? 'Normal' : `${value}&times;`;\n\n case 'quality':\n switch (value) {\n case 'hd2160':\n return '2160P';\n case 'hd1440':\n return '1440P';\n case 'hd1080':\n return '1080P';\n case 'hd720':\n return '720P';\n case 'large':\n return '480P';\n case 'medium':\n return '360P';\n case 'small':\n return '240P';\n case 'tiny':\n return 'Tiny';\n case 'default':\n return 'Auto';\n default:\n return value;\n }\n\n case 'captions':\n return controls.getLanguage.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.captions.active ? this.captions.language : i18n.get('disabled', this.config);\n break;\n\n default:\n value = this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // Update the label\n if (!utils.is.empty(value)) {\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n }\n\n // Find the radio option\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n // Check it\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n getLanguage() {\n if (!this.supported.ui) {\n return null;\n }\n\n if (support.textTracks && captions.getTracks.call(this).length && this.captions.active) {\n const currentTrack = captions.getCurrentTrack.call(this);\n\n if (utils.is.track(currentTrack)) {\n return currentTrack.label;\n }\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const hasTracks = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, hasTracks);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // If there's no captions, bail\n if (!hasTracks) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: track.language,\n label: !utils.is.empty(track.label) ? track.label : track.language.toUpperCase(),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label || track.language,\n controls.createBadge.call(this, track.language.toUpperCase()),\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the default speeds\n if (!utils.is.array(this.options.speed) || !this.options.speed.length) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed);\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => controls.createMenuItem.call(this, speed, list, type, controls.getLabel.call(this, 'speed', speed)));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.config.controls.includes('settings') && this.config.settings.includes('speed')) {\n controls.setSpeedMenu.call(this);\n }\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // HTML or Element passed as the option\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: controls.getLanguage.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.fastForward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.player.toggleControls(event);\n });\n }\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking', event => ui.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.showPosterOnEnd) {\n // Restart\n this.player.restart();\n\n // Re-load media\n this.player.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing', event => ui.updateProgress.call(this.player, event));\n\n // Handle native mute\n utils.on(this.player.media, 'volumechange', event => ui.updateVolume.call(this.player, event));\n\n // Handle native play/pause\n utils.on(this.player.media, 'playing play pause ended emptied', event => ui.checkPlaying.call(this.player, event));\n\n // Loading\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // Check if media failed to load\n // utils.on(this.player.media, 'play', event => ui.checkFailed.call(this.player, event));\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.media,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality');\n\n // Save to storage\n this.player.storage.set({ quality: this.player.quality });\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n // Execute custom handler\n if (hasCustomHandler) {\n customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (!event.defaultPrevented && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n },\n 'speed',\n );\n } else {\n controls.showTab.call(this.player, event);\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n this.player.currentTime = event.target.value / event.target.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n ui.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n this.player.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\nimport i18n from '../i18n';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.enabled = player.isHTML5 && player.isVideo && player.config.ads.enabled && utils.is.string(this.publisherId) && this.publisherId.length;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.api)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (seekElement) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current quality\n player.media.quality = instance.getPlaybackQuality();\n\n utils.dispatchEvent.call(player, player.media, 'qualitychange');\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return instance.getPlaybackQuality();\n },\n set(input) {\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n instance.setPlaybackQuality(input);\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, instance.getAvailableQualityLevels());\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.api)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n const height = 240;\n const offset = (height - padding) / (height / 50);\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n this.media.style.transform = `translateY(-${offset}%)`;\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed.setPlaybackRate(input).then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed.getVideoUrl().then(value => {\n currentSrc = value;\n });\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n }\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(this.media.querySelectorAll('source'));\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 media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n media.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // TODO: Reset menus here\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.inline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.0.4\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options,\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n this.elements.original = this.media.cloneNode(true);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.playsinline)) {\n this.config.inline = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.inline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // If ads are enabled, wait for them first\n if (this.ads.enabled && !this.ads.initialized) {\n return this.ads.managerPromise.then(() => this.ads.play()).catch(() => this.media.play());\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(!this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true));\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.media.load();\n } else {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = parseFloat(targetTime.toFixed(4));\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseInt(this.config.duration, 10);\n\n // True duration\n const realDuration = this.media ? Number(this.media.duration) : 0;\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume, reset muted state\n if (this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently YouTube only\n * @param {string} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (utils.is.string(input)) {\n quality = input;\n }\n\n if (!utils.is.string(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.string(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!this.options.quality.includes(quality)) {\n this.debug.warn(`Unsupported quality option (${quality})`);\n return;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support, or there's no caption toggle\n if (!this.supported.ui || !utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : this.elements.container.className.indexOf(this.config.classNames.captions.active) === -1;\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // Toggle captions based on input\n this.toggleCaptions(!utils.is.empty(input));\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Events that show the controls\n const showEvents = [\n 'touchstart',\n 'touchmove',\n 'mouseenter',\n 'mousemove',\n 'focusin',\n ];\n\n // Events that delay hiding\n const delayEvents = [\n 'touchmove',\n 'touchend',\n 'mousemove',\n ];\n\n // Whether to show controls\n show = showEvents.includes(toggle.type);\n\n // Delay hiding on move events\n if (delayEvents.includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (!this.touch && toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (this.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n"]} \ No newline at end of file
+{"version":3,"sources":["src/js/types.js","src/js/defaults.js","node_modules/loadjs/dist/loadjs.umd.js","src/js/utils.js","src/js/support.js","src/js/console.js","src/js/fullscreen.js","src/js/captions.js","src/js/i18n.js","src/js/ui.js","src/js/controls.js","src/js/listeners.js","src/js/storage.js","src/js/plugins/ads.js","src/js/plugins/youtube.js","src/js/plugins/vimeo.js","src/js/media.js","src/js/source.js","src/js/plyr.js"],"names":["providers","types","defaults","window","navigator","language","split","define","this","utils","input","instanceof","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","test","array","nodeList","length","object","keys","constructor","document","documentMode","documentElement","style","userAgent","platform","url","responseType","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","JSON","parse","responseText","e","response","Error","statusText","open","send","id","is","prefix","hasId","isCached","exists","querySelectorAll","injectSprite","data","innerHTML","body","insertBefore","childNodes","container","createElement","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","call","content","fetch","then","empty","result","setItem","stringify","catch","Math","floor","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","entries","key","value","sel","existingAttributes","existing","selector","s","trim","className","replace","stripped","parts","start","charAt","class","toggle","contains","classList","removeAttribute","prototype","match","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","currentTime","seekTooltip","classNames","tooltip","error","debug","warn","toggleNativeControls","focused","activeElement","focusable","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","passiveListeners","bubbles","detail","CustomEvent","boolean","assign","plyr","dispatchEvent","toggleState","pressed","getAttribute","state","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toString","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","source","shift","extend","youtube","vimeo","regex","$2","parser","href","search","startsWith","parseUrl","hashes","indexOf","reduce","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","getRatio","w","h","ratio","transitionEndEvent","undefined","offsetHeight","provider","inline","api","ui","browser","getBrowser","playsInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","defineProperty","range","matchMedia","noop","Console","enabled","console","log","bind","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","toggleClass","fallback","Fullscreen","name","stopPropagation","update","native","iosNative","playing","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","action","enter","exit","hasClass","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","exitFullscreen","prefixes","some","pre","stored","get","isYouTube","textTracks","setCaptionsMenu","getAttributesFromSelector","insertAfter","getTracks","tracks","isIE","URL","src","track","hostname","location","protocol","createObjectURL","blob","setLanguage","show","setCue","mode","currentTrack","getCurrentTrack","activeCues","isVimeo","embed","enableTextTrack","filter","cue","setText","getCueAsHTML","emptyElement","caption","i18n","seekTime","title","uiSupported","listeners","inject","setup","muted","speed","loop","quality","timeUpdate","checkPlaying","ready","setTitle","label","isEmbed","iframe","stopped","paused","toggleControls","loading","timers","setTimeout","failed","networkState","setRange","updateRangeFill","getElementsByTagName","nodeValue","getPercentage","setProgress","buffered","invert","invertTime","updateTimeDisplay","seeking","updateProgress","hasDuration","displayDuration","updateSeekTooltip","isWebkit","setProperty","iconUrl","svg4everybody","namespace","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","hidden","badge","menu","buttonType","toCamelCase","labelPressed","iconPressed","control","createIcon","createLabel","push","suffix","list","checked","item","radio","faux","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","touch","pageX","left","parseFloat","setting","tab","tabs","pane","panes","toggleTab","getBadge","createBadge","createMenuItem","getLabel","updateSetting","getLanguage","default","hasTracks","unshift","form","isMenuItem","isButton","clone","position","opacity","scrollWidth","scrollHeight","getElementById","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setSpeedMenu","loadSprite","create","findElements","repaint","labels","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","repeat","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","toggleCaptions","isTouch","keyboard","global","tabFocus","hideControls","durationUpdate","hasAudio","showPosterOnEnd","load","updateVolume","checkLoading","clickToPlay","ended","disableContextMenu","set","concat","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","forward","showTab","toggleInvert","hover","webkitDirectionInvertedFromDevice","step","direction","deltaY","deltaX","Storage","store","json","removeItem","Ads","publisherId","ads","initialized","manager","loader","cuePoints","safetyTimer","countdownTimer","managerPromise","google","ima","loadScript","urls","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","getRemainingTime","setInterval","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","cues","setVolume","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","args","handlers","handler","apply","Date","now","base","buildUrlParams","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","instance","getPlaybackQuality","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stop","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","setQualityMenu","getAvailableQualityLevels","Vimeo","padding","offset","transform","parseVimeoId","setCurrentTime","selected","setLoop","currentSrc","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","frame","seconds","wrap","blankVideo","insertElement","attribute","cancelRequests","html5","check","crossorigin","poster","addStyleHook","insertElements","jQuery","original","tagName","getProviderByUrl","getUrlParams","truthy","playsinline","hasAttribute","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","showEvents","delayEvents","noTransition","toggled","soft","done","clear","unload","mime","readyState","targetTime","end","fauxDuration","realDuration","min","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","change","states","webkitPresentationMode"],"mappings":"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","file":"plyr.js","sourcesContent":["// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.0.6/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 'default',\n options: [\n 'hd2160',\n 'hd1440',\n 'hd1080',\n 'hd720',\n 'large',\n 'medium',\n 'small',\n 'tiny',\n 'default',\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: window.navigator.language.split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n 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 = path.replace(/^css!/, ''); // remove \"css!\" prefix\n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type, bubbles, detail) {\n // Bail if no element\n if (!utils.is.element(element) || !utils.is.string(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles: utils.is.boolean(bubbles) ? bubbles : false,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, inline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const playsInline = browser.isIPhone && inline && support.inline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n inline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.name = Fullscreen.name;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', () => {\n this.toggle();\n });\n\n // Prevent double click on controls bubbling up\n utils.on(this.player.elements.controls, 'dblclick', event => event.stopPropagation());\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return false;\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get name() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.name}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.name}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n document.cancelFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.name}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n return captions.getTracks.call(this).find(track => track.language.toLowerCase() === this.language);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // If there's no caption toggle, bail\n if (!utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality options\n this.options.quality = [];\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', i18n.get('frameTitle', this.config));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n ui.setProgress.call(this, this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport i18n from './i18n';\nimport captions from './captions';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = i18n.get(label, this.config);\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n ),\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the YouTube quality menu\n // TODO: Support for HTML5\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n } else {\n this.options.quality = this.config.quality.options;\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.isYouTube;\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 'hd2160':\n label = '4K';\n break;\n\n case 'hd1440':\n label = 'WQHD';\n break;\n\n case 'hd1080':\n label = 'HD';\n break;\n\n case 'hd720':\n label = 'HD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n this.options.quality.forEach(quality =>\n controls.createMenuItem.call(this, quality, list, type, controls.getLabel.call(this, 'quality', quality), getBadge(quality)),\n );\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? 'Normal' : `${value}&times;`;\n\n case 'quality':\n switch (value) {\n case 'hd2160':\n return '2160P';\n case 'hd1440':\n return '1440P';\n case 'hd1080':\n return '1080P';\n case 'hd720':\n return '720P';\n case 'large':\n return '480P';\n case 'medium':\n return '360P';\n case 'small':\n return '240P';\n case 'tiny':\n return 'Tiny';\n case 'default':\n return 'Auto';\n default:\n return value;\n }\n\n case 'captions':\n return controls.getLanguage.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.captions.active ? this.captions.language : i18n.get('disabled', this.config);\n break;\n\n default:\n value = this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // Update the label\n if (!utils.is.empty(value)) {\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n }\n\n // Find the radio option\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n // Check it\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n getLanguage() {\n if (!this.supported.ui) {\n return null;\n }\n\n if (support.textTracks && captions.getTracks.call(this).length && this.captions.active) {\n const currentTrack = captions.getCurrentTrack.call(this);\n\n if (utils.is.track(currentTrack)) {\n return currentTrack.label;\n }\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const hasTracks = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, hasTracks);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // If there's no captions, bail\n if (!hasTracks) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: track.language,\n label: !utils.is.empty(track.label) ? track.label : track.language.toUpperCase(),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label || track.language,\n controls.createBadge.call(this, track.language.toUpperCase()),\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the default speeds\n if (!utils.is.array(this.options.speed) || !this.options.speed.length) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed);\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => controls.createMenuItem.call(this, speed, list, type, controls.getLabel.call(this, 'speed', speed)));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.config.controls.includes('settings') && this.config.settings.includes('speed')) {\n controls.setSpeedMenu.call(this);\n }\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // HTML or Element passed as the option\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: controls.getLanguage.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.fastForward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.player.toggleControls(event);\n });\n }\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking', event => ui.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.showPosterOnEnd) {\n // Restart\n this.player.restart();\n\n // Re-load media\n this.player.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing', event => ui.updateProgress.call(this.player, event));\n\n // Handle native mute\n utils.on(this.player.media, 'volumechange', event => ui.updateVolume.call(this.player, event));\n\n // Handle native play/pause\n utils.on(this.player.media, 'playing play pause ended emptied', event => ui.checkPlaying.call(this.player, event));\n\n // Loading\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // Check if media failed to load\n // utils.on(this.player.media, 'play', event => ui.checkFailed.call(this.player, event));\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.media,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality');\n\n // Save to storage\n this.player.storage.set({ quality: this.player.quality });\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n },\n 'speed',\n );\n } else {\n controls.showTab.call(this.player, event);\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n this.player.currentTime = event.target.value / event.target.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n ui.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n this.player.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\nimport i18n from '../i18n';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.enabled = player.isHTML5 && player.isVideo && player.config.ads.enabled && utils.is.string(this.publisherId) && this.publisherId.length;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.api)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (seekElement) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current quality\n player.media.quality = instance.getPlaybackQuality();\n\n utils.dispatchEvent.call(player, player.media, 'qualitychange');\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return instance.getPlaybackQuality();\n },\n set(input) {\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n instance.setPlaybackQuality(input);\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, instance.getAvailableQualityLevels());\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.api)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n const height = 240;\n const offset = (height - padding) / (height / 50);\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n this.media.style.transform = `translateY(-${offset}%)`;\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed.setPlaybackRate(input).then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed.getVideoUrl().then(value => {\n currentSrc = value;\n });\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n }\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(this.media.querySelectorAll('source'));\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 media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n media.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // TODO: Reset menus here\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.inline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.0.6\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options,\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n this.elements.original = this.media.cloneNode(true);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.playsinline)) {\n this.config.inline = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.inline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // If ads are enabled, wait for them first\n if (this.ads.enabled && !this.ads.initialized) {\n return this.ads.managerPromise.then(() => this.ads.play()).catch(() => this.media.play());\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(!this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true));\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.media.load();\n } else {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = parseFloat(targetTime.toFixed(4));\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseInt(this.config.duration, 10);\n\n // True duration\n const realDuration = this.media ? Number(this.media.duration) : 0;\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume, reset muted state\n if (this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently YouTube only\n * @param {string} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (utils.is.string(input)) {\n quality = input;\n }\n\n if (!utils.is.string(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.string(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!this.options.quality.includes(quality)) {\n this.debug.warn(`Unsupported quality option (${quality})`);\n return;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support, or there's no caption toggle\n if (!this.supported.ui || !utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : this.elements.container.className.indexOf(this.config.classNames.captions.active) === -1;\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // Toggle captions based on input\n this.toggleCaptions(!utils.is.empty(input));\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Events that show the controls\n const showEvents = [\n 'touchstart',\n 'touchmove',\n 'mouseenter',\n 'mousemove',\n 'focusin',\n ];\n\n // Events that delay hiding\n const delayEvents = [\n 'touchmove',\n 'touchend',\n 'mousemove',\n ];\n\n // Whether to show controls\n show = showEvents.includes(toggle.type);\n\n // Delay hiding on move events\n if (delayEvents.includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (!this.touch && toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (this.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n"]} \ No newline at end of file
diff --git a/dist/plyr.min.js b/dist/plyr.min.js
index 334026c3..09d20e7b 100644
--- a/dist/plyr.min.js
+++ b/dist/plyr.min.js
@@ -1,2 +1,2 @@
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";var e={html5:"html5",youtube:"youtube",vimeo:"vimeo"},t={audio:"audio",video:"video"},i={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,showPosterOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.0.4/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:"default",options:["hd2160","hd1440","hd1080","hd720","large","medium","small","tiny","default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:window.navigator.language.split("-")[0]},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime} secs",play:"Play",pause:"Pause",fastForward:"Forward {seektime} secs",seek:"Seek",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",advertisement:"Ad"},urls:{vimeo:{api:"https://player.vimeo.com/api/player.js"},youtube:{api:"https://www.youtube.com/iframe_api"},googleIMA:{api:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","adscontentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',fastForward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress--buffer",played:".plyr__progress--played",loop:".plyr__progress--loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{video:"plyr__video-wrapper",embed:"plyr__video-embed",ads:"plyr__ads",control:"plyr__control",type:"plyr--{0}",provider:"plyr--{0}",stopped:"plyr--stopped",playing:"plyr--playing",loading:"plyr--loading",error:"plyr--has-error",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1,publisherId:""}};"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var n,s,a=(function(e,t){var i;i=function(){var e=function(){},t={},i={},n={};function s(e,t){if(e){var s=n[e];if(i[e]=t,s)for(;s.length;)s[0](e,t),s.splice(0,1)}}function a(t,i){t.call&&(t={success:t}),i.length?(t.error||e)(i):(t.success||e)(t)}function l(t,i,n,s){var a,r,o=document,c=n.async,u=(n.numRetries||0)+1,d=n.before||e;s=s||0,/(^css!|\.css$)/.test(t)?(a=!0,(r=o.createElement("link")).rel="stylesheet",r.href=t.replace(/^css!/,"")):((r=o.createElement("script")).src=t,r.async=void 0===c||c),r.onload=r.onerror=r.onbeforeload=function(e){var o=e.type[0];if(a&&"hideFocus"in r)try{r.sheet.cssText.length||(o="e")}catch(e){o="e"}if("e"==o&&(s+=1)<u)return l(t,i,n,s);i(t,o,e.defaultPrevented)},!1!==d(t,r)&&o.head.appendChild(r)}function r(e,i,n){var r,o;if(i&&i.trim&&(r=i),o=(r?n:i)||{},r){if(r in t)throw"LoadJS";t[r]=!0}!function(e,t,i){var n,s,a=(e=e.push?e:[e]).length,r=a,o=[];for(n=function(e,i,n){if("e"==i&&o.push(e),"b"==i){if(!n)return;o.push(e)}--a||t(o)},s=0;s<r;s++)l(e[s],n,i)}(e,function(e){a(o,e),s(r,e)},o)}return r.ready=function(e,t){return function(e,t){var s,a,l,r=[],o=(e=e.push?e:[e]).length,c=o;for(s=function(e,i){i.length&&r.push(e),--c||t(r)};o--;)a=e[o],(l=i[a])?s(a,l):(n[a]=n[a]||[]).push(s)}(e,function(e){a(t,e)}),r},r.done=function(e){s(e,[])},r.reset=function(){t={},i={},n={}},r.isDefined=function(e){return e in t},r},e.exports=i()}(n={exports:{}},n.exports),n.exports),l=(function(){function e(e){this.value=e}function t(t){var i,n;function s(i,n){try{var l=t[i](n),r=l.value;r instanceof e?Promise.resolve(r.value).then(function(e){s("next",e)},function(e){s("throw",e)}):a(l.done?"return":"normal",l.value)}catch(e){a("throw",e)}}function a(e,t){switch(e){case"return":i.resolve({value:t,done:!0});break;case"throw":i.reject(t);break;default:i.resolve({value:t,done:!1})}(i=i.next)?s(i.key,i.arg):n=null}this._invoke=function(e,t){return new Promise(function(a,l){var r={key:e,arg:t,resolve:a,reject:l,next:null};n?n=n.next=r:(i=n=r,s(e,t))})},"function"!=typeof t.return&&(this.return=void 0)}"function"==typeof Symbol&&Symbol.asyncIterator&&(t.prototype[Symbol.asyncIterator]=function(){return this}),t.prototype.next=function(e){return this._invoke("next",e)},t.prototype.throw=function(e){return this._invoke("throw",e)},t.prototype.return=function(e){return this._invoke("return",e)}}(),function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}),r=function(){function e(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t}}(),o=function(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e},c=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var i=[],n=!0,s=!1,a=void 0;try{for(var l,r=e[Symbol.iterator]();!(n=(l=r.next()).done)&&(i.push(l.value),!t||i.length!==t);n=!0);}catch(e){s=!0,a=e}finally{try{!n&&r.return&&r.return()}finally{if(s)throw a}}return i}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),u={is:{plyr:function(e){return this.instanceof(e,window.Plyr)},object:function(e){return this.getConstructor(e)===Object},number:function(e){return this.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return this.getConstructor(e)===String},boolean:function(e){return this.getConstructor(e)===Boolean},function:function(e){return this.getConstructor(e)===Function},array:function(e){return!this.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return this.instanceof(e,window.WeakMap)},nodeList:function(e){return this.instanceof(e,window.NodeList)},element:function(e){return this.instanceof(e,window.Element)},textNode:function(e){return this.getConstructor(e)===Text},event:function(e){return this.instanceof(e,window.Event)},cue:function(e){return this.instanceof(e,window.TextTrackCue)||this.instanceof(e,window.VTTCue)},track:function(e){return this.instanceof(e,TextTrack)||!this.nullOrUndefined(e)&&this.string(e.kind)},url:function(e){return!this.nullOrUndefined(e)&&/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e)},nullOrUndefined:function(e){return null===e||void 0===e},empty:function(e){return this.nullOrUndefined(e)||(this.string(e)||this.array(e)||this.nodeList(e))&&!e.length||this.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)},getConstructor:function(e){return this.nullOrUndefined(e)?null:e.constructor}},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(i,n){try{var s=new XMLHttpRequest;if(!("withCredentials"in s))return;s.addEventListener("load",function(){if("text"===t)try{i(JSON.parse(s.responseText))}catch(e){i(s.responseText)}else i(s.response)}),s.addEventListener("error",function(){throw new Error(s.statusText)}),s.open("GET",e,!0),s.responseType=t,s.send()}catch(e){n(e)}})},loadScript:function(e){return new Promise(function(t,i){a(e,{success:t,error:i})})},loadSprite:function(e,t){if(u.is.string(e)){var i=u.is.string(t),n=function(){return document.querySelectorAll("#"+t).length};if(!i||!n()){var s=document.createElement("div");if(u.toggleHidden(s,!0),i&&s.setAttribute("id",t),d.storage){var a=window.localStorage.getItem("cache-"+t);if(null!==a){var l=JSON.parse(a);return void r.call(s,l.content)}}u.fetch(e).then(function(e){u.is.empty(e)||(d.storage&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),r.call(s,e))}).catch(function(){})}}function r(e){i&&n()||(this.innerHTML=e,document.body.insertBefore(this,document.body.childNodes[0]))}},generateId:function(e){return e+"-"+Math.floor(1e4*Math.random())},wrap:function(e,t){var i=e.length?e:[e];Array.from(i).reverse().forEach(function(e,i){var n=i>0?t.cloneNode(!0):t,s=e.parentNode,a=e.nextSibling;n.appendChild(e),a?s.insertBefore(n,a):s.appendChild(n)})},createElement:function(e,t,i){var n=document.createElement(e);return u.is.object(t)&&u.setAttributes(n,t),u.is.string(i)&&(n.textContent=i),n},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,i,n){t.appendChild(u.createElement(e,i,n))},removeElement:function(e){u.is.element(e)&&u.is.element(e.parentNode)&&(u.is.nodeList(e)||u.is.array(e)?Array.from(e).forEach(u.removeElement):e.parentNode.removeChild(e))},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return u.is.element(t)&&u.is.element(t.parentNode)&&u.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){u.is.element(e)&&!u.is.empty(t)&&Object.entries(t).forEach(function(t){var i=c(t,2),n=i[0],s=i[1];e.setAttribute(n,s)})},getAttributesFromSelector:function(e,t){if(!u.is.string(e)||u.is.empty(e))return{};var i={},n=t;return e.split(",").forEach(function(e){var t=e.trim(),s=t.replace(".",""),a=t.replace(/[[\]]/g,"").split("="),l=a[0],r=a.length>1?a[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":u.is.object(n)&&u.is.string(n.class)&&(n.class+=" "+s),i.class=s;break;case"#":i.id=t.replace("#","");break;case"[":i[l]=r}}),i},toggleClass:function(e,t,i){if(u.is.element(e)){var n=e.classList.contains(t);return e.classList[i?"add":"remove"](t),i&&!n||!i&&n}return null},hasClass:function(e,t){return u.is.element(e)&&e.classList.contains(t)},toggleHidden:function(e,t){u.is.element(e)&&(t?e.setAttribute("hidden",""):e.removeAttribute("hidden"))},matches:function(e,t){var i={Element:Element};var n=i.matches||i.webkitMatchesSelector||i.mozMatchesSelector||i.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return n.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},findElements:function(){try{return this.elements.controls=u.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:u.getElements.call(this,this.config.selectors.buttons.play),pause:u.getElement.call(this,this.config.selectors.buttons.pause),restart:u.getElement.call(this,this.config.selectors.buttons.restart),rewind:u.getElement.call(this,this.config.selectors.buttons.rewind),fastForward:u.getElement.call(this,this.config.selectors.buttons.fastForward),mute:u.getElement.call(this,this.config.selectors.buttons.mute),pip:u.getElement.call(this,this.config.selectors.buttons.pip),airplay:u.getElement.call(this,this.config.selectors.buttons.airplay),settings:u.getElement.call(this,this.config.selectors.buttons.settings),captions:u.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:u.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=u.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:u.getElement.call(this,this.config.selectors.inputs.seek),volume:u.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:u.getElement.call(this,this.config.selectors.display.buffer),duration:u.getElement.call(this,this.config.selectors.display.duration),currentTime:u.getElement.call(this,this.config.selectors.display.currentTime)},u.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(u.is.element(e)){var i=u.getElements.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),n=i[0],s=i[i.length-1],a=function(e){if("Tab"===e.key&&9===e.keyCode){var t=u.getFocusElement();t!==s||e.shiftKey?t===n&&e.shiftKey&&(s.focus(),e.preventDefault()):(n.focus(),e.preventDefault())}};t?u.on(this.elements.container,"keydown",a,!1):u.off(this.elements.container,"keydown",a,!1)}},toggleListener:function(e,t,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(!u.is.empty(e)&&!u.is.empty(t)&&u.is.function(i))if(u.is.nodeList(e)||u.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&u.toggleListener.call(null,e,t,i,n,s,a)});else{var l=t.split(" "),r=a;d.passiveListeners&&(r={passive:s,capture:a}),l.forEach(function(t){e[n?"addEventListener":"removeEventListener"](t,i,r)})}},on:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];u.toggleListener(e,t,i,!0,n,s)},off:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];u.toggleListener(e,t,i,!1,n,s)},dispatchEvent:function(e,t,i,n){if(u.is.element(e)&&u.is.string(t)){var s=new CustomEvent(t,{bubbles:!!u.is.boolean(i)&&i,detail:Object.assign({},n,{plyr:u.is.plyr(this)?this:null})});e.dispatchEvent(s)}},toggleState:function(e,t){if(u.is.array(e)||u.is.nodeList(e))Array.from(e).forEach(function(e){return u.toggleState(e,t)});else if(u.is.element(e)){var i="true"===e.getAttribute("aria-pressed"),n=u.is.boolean(t)?t:!i;e.setAttribute("aria-pressed",n)}},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!u.is.number(e))return this.formatTime(null,t,i);var n=function(e){return("0"+e).slice(-2)},s=this.getHours(e),a=this.getMinutes(e),l=this.getSeconds(e);return t||s>0?s+=":":s="",(i?"-":"")+s+n(a)+":"+n(l)},replaceAll:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1"),"g"),i.toString())},toTitleCase:function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString().replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})},toPascalCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=u.replaceAll(e,"-"," "),e=u.replaceAll(e,"_"," "),e=u.toTitleCase(e),u.replaceAll(e," ","")},toCamelCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=u.toPascalCase(e)).charAt(0).toLowerCase()+e.slice(1)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,i=Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];if(!i.length)return e;var s=i.shift();return u.is.object(s)?(Object.keys(s).forEach(function(t){u.is.object(s[t])?(Object.keys(e).includes(t)||Object.assign(e,o({},t,{})),u.extend(e[t],s[t])):Object.assign(e,o({},t,s[t]))}),u.extend.apply(u,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,i=Array(e.length);t<e.length;t++)i[t]=e[t];return i}return Array.from(e)}(i)))):e},getProviderByUrl:function(t){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(t)?e.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{8,}(?=\b|\/)/.test(t)?e.vimeo:null},parseYouTubeId:function(e){if(u.is.empty(e))return null;return e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if(u.is.empty(e))return null;if(u.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement("a");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith("http://")||e.startsWith("https://"))&&(t=this.parseUrl(e).search);return this.is.empty(t)?null:t.slice(t.indexOf("?")+1).split("&").reduce(function(e,t){var i=t.split("="),n=c(i,2),s=n[0],a=n[1];return Object.assign(e,o({},s,decodeURIComponent(a)))},{})},buildUrlParams:function(e){return u.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&"):""},stripHTML:function(e){var t=document.createDocumentFragment(),i=document.createElement("div");return t.appendChild(i),i.innerHTML=e,t.firstChild.innerText},getAspectRatio:function(e,t){var i=function e(t,i){return 0===i?t:e(i,t%i)}(e,t);return e/i+":"+t/i},get transitionEndEvent(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},i=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!u.is.string(i)&&t[i]},repaint:function(e){setTimeout(function(){u.toggleHidden(e,!0),e.offsetHeight,u.toggleHidden(e,!1)},0)}},d={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,i){var n=!1,s=!1,a=u.getBrowser(),l=a.isIPhone&&i&&d.inline;switch(t+":"+e){case"html5:video":s=(n=d.video)&&d.rangeInput&&(!a.isIPhone||l);break;case"html5:audio":s=(n=d.audio)&&d.rangeInput;break;case"youtube:video":case"vimeo:video":n=!0,s=d.rangeInput&&(!a.isIPhone||l);break;default:s=(n=d.audio&&d.video)&&d.rangeInput}return{api:n,ui:s}},pip:!u.getBrowser().isIPhone&&u.is.function(u.createElement("video").webkitSetPresentationMode),airplay:u.is.function(window.WebKitPlaybackTargetAvailabilityEvent),inline:"playsInline"in document.createElement("video"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!u.is.function(t.canPlayType))return!1;if(this.isVideo)switch(e){case"video/webm":return t.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return t.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return t.canPlayType('video/ogg; codecs="theora"').replace(/no/,"");default:return!1}else if(this.isAudio)switch(e){case"audio/mpeg":return t.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return t.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return t.canPlayType('audio/wav; codecs="1"').replace(/no/,"");default:return!1}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t)}catch(e){}return e}(),rangeInput:(s=document.createElement("input"),s.type="range","range"===s.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==u.transitionEndEvent,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},p=function(){},h=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];l(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return r(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):p}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):p}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):p}}]),e}(),m=u.getBrowser();function g(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;u.is.element(e)&&u.toggleState(e,this.active),u.dispatchEvent(this.target,this.active?"enterfullscreen":"exitfullscreen",!0),m.isIos||u.trapFocus.call(this.player,this.target,this.active)}}function f(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",u.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),g.call(this)}var y=function(){function e(t){var i=this;l(this,e),this.player=t,this.prefix=e.prefix,this.name=e.name,this.scrollPosition={x:0,y:0},u.on(document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){g.call(i)}),u.on(this.player.elements.container,"dblclick",function(){i.toggle()}),u.on(this.player.elements.controls,"dblclick",function(e){return e.stopPropagation()}),this.update()}return r(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),u.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(m.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?u.is.empty(this.prefix)||this.target[this.prefix+"Request"+this.name]():this.target.requestFullscreen():f.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(m.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(e.native)if(this.prefix){if(!u.is.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document[""+this.prefix+t+this.name]()}}else document.cancelFullScreen();else f.call(this,!1)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){return(e.native||this.player.config.fullscreen.fallback)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[""+this.prefix+this.name+"Element"]:document.fullscreenElement)===this.target:u.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return m.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if(u.is.function(document.exitFullscreen))return!1;var e="";return["webkit","moz","ms"].some(function(t){return!(!u.is.function(document[t+"ExitFullscreen"])&&!u.is.function(document[t+"CancelFullScreen"]))&&(e=t,!0)}),e}},{key:"name",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}(),v={setup:function(){if(this.supported.ui){var e=this.storage.get("language");if(u.is.empty(e)||(this.captions.language=e),u.is.empty(this.captions.language)&&(this.captions.language=this.config.captions.language.toLowerCase()),!u.is.boolean(this.captions.active)){var t=this.storage.get("captions");u.is.boolean(t)?this.captions.active=t:this.captions.active=this.config.captions.active}if(!this.isVideo||this.isYouTube||this.isHTML5&&!d.textTracks)u.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&E.setCaptionsMenu.call(this);else{u.is.element(this.elements.captions)||(this.elements.captions=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.captions)),u.insertAfter(this.elements.captions,this.elements.wrapper)),u.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!u.is.empty(v.getTracks.call(this)));var i=v.getTracks.call(this);if(!u.is.empty(i)){if(u.getBrowser().isIE&&window.URL){var n=this.media.querySelectorAll("track");Array.from(n).forEach(function(e){var t=e.getAttribute("src"),i=u.parseUrl(t);i.hostname!==window.location.href.hostname&&["http:","https:"].includes(i.protocol)&&u.fetch(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){u.removeElement(e)})})}v.setLanguage.call(this),v.show.call(this),u.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&E.setCaptionsMenu.call(this)}}}},setLanguage:function(){var e=this;if(this.isHTML5&&this.isVideo){v.getTracks.call(this).forEach(function(t){u.on(t,"cuechange",function(t){return v.setCue.call(e,t)}),t.mode="hidden"});var t=v.getCurrentTrack.call(this);u.is.track(t)&&Array.from(t.activeCues||[]).length&&v.setCue.call(this,t)}else this.isVimeo&&this.captions.active&&this.embed.enableTextTrack(this.language)},getTracks:function(){return u.is.nullOrUndefined(this.media)?[]:Array.from(this.media.textTracks||[]).filter(function(e){return["captions","subtitles"].includes(e.kind)})},getCurrentTrack:function(){var e=this;return v.getTracks.call(this).find(function(t){return t.language.toLowerCase()===e.language})},setCue:function(e){var t=u.is.event(e)?e.target:e,i=t.activeCues,n=i.length&&i[0];t===v.getCurrentTrack.call(this)&&(u.is.cue(n)?v.setText.call(this,n.getCueAsHTML()):v.setText.call(this,null),u.dispatchEvent.call(this,this.media,"cuechange"))},setText:function(e){if(this.supported.ui)if(u.is.element(this.elements.captions)){var t=u.createElement("span");u.emptyElement(this.elements.captions);var i=u.is.nullOrUndefined(e)?"":e;u.is.string(i)?t.textContent=i.trim():t.appendChild(i),this.elements.captions.appendChild(t)}else this.debug.warn("No captions element to render to")},show:function(){if(u.is.element(this.elements.buttons.captions)){var e=this.storage.get("captions");u.is.boolean(e)?this.captions.active=e:e=this.config.captions.active,e&&(u.toggleClass(this.elements.container,this.config.classNames.captions.active,!0),u.toggleState(this.elements.buttons.captions,!0))}}},b=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(u.is.empty(e)||u.is.empty(t)||!Object.keys(t.i18n).includes(e))return"";var i=t.i18n[e],n={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(n).forEach(function(e){var t=c(e,2),n=t[0],s=t[1];i=u.replaceAll(i,n,s)}),i},k={addStyleHook:function(){u.toggleClass(this.elements.container,this.config.selectors.container.replace(".",""),!0),u.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void k.toggleNativeControls.call(this,!0);u.is.element(this.elements.controls)||(E.inject.call(this),this.listeners.controls()),u.is.element(this.elements.controls)&&(k.toggleNativeControls.call(this),v.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.options.quality=[],k.timeUpdate.call(this),k.checkPlaying.call(this),this.ready=!0,setTimeout(function(){u.dispatchEvent.call(e,e.media,"ready")},0),k.setTitle.call(this))},setTitle:function(){var e=b("play",this.config);if(u.is.string(this.config.title)&&!u.is.empty(this.config.title)&&(e+=", "+this.config.title,this.elements.container.setAttribute("aria-label",this.config.title)),u.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=u.getElement.call(this,"iframe");if(!u.is.element(t))return;u.is.empty(this.config.title)||this.config.title;t.setAttribute("title",b("frameTitle",this.config))}},checkPlaying:function(){u.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),u.toggleClass(this.elements.container,this.config.classNames.stopped,this.paused),u.toggleState(this.elements.buttons.play,this.playing),this.toggleControls(!this.playing)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){u.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),t.toggleControls(t.loading)},this.loading?250:0)},checkFailed:function(){var e=this;this.failed=3===this.media.networkState,this.failed&&(u.toggleClass(this.elements.container,this.config.classNames.loading,!1),u.toggleClass(this.elements.container,this.config.classNames.error,!0)),clearTimeout(this.timers.failed),this.timers.loading=setTimeout(function(){u.toggleClass(e.elements.container,e.config.classNames.loading,e.loading),e.toggleControls(e.loading)},this.loading?250:0)},updateVolume:function(){this.supported.ui&&(u.is.element(this.elements.inputs.volume)&&k.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),u.is.element(this.elements.buttons.mute)&&u.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;u.is.element(e)&&(e.value=t,E.updateRangeFill.call(this,e))},setProgress:function(e,t){var i=u.is.number(t)?t:0,n=u.is.element(e)?e:this.elements.display.buffer;if(u.is.element(n)){n.value=i;var s=n.getElementsByTagName("span")[0];u.is.element(s)&&(s.childNodes[0].nodeValue=i)}},updateProgress:function(e){if(this.supported.ui&&u.is.event(e)){var t=0;if(e)switch(e.type){case"timeupdate":case"seeking":t=u.getPercentage(this.currentTime,this.duration),"timeupdate"===e.type&&k.setRange.call(this,this.elements.inputs.seek,t);break;case"playing":case"progress":k.setProgress.call(this,this.elements.display.buffer,100*this.buffered)}}},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(u.is.element(e)&&u.is.number(t)){var n=u.getHours(this.duration)>0;e.textContent=u.formatTime(t,n,i)}},timeUpdate:function(e){var t=!u.is.element(this.elements.display.duration)&&this.config.invertTime;k.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||k.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui){var e=u.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&k.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&k.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),E.updateSeekTooltip.call(this)}}},w=u.getBrowser(),E={updateRangeFill:function(e){if(w.isWebkit){var t=u.is.event(e)?e.target:e;u.is.element(t)&&"range"===t.getAttribute("type")&&t.style.setProperty("--value",t.value/t.max*100+"%")}},getIconUrl:function(){return{url:this.config.iconUrl,absolute:0===this.config.iconUrl.indexOf("http")||w.isIE&&!window.svg4everybody}},createIcon:function(e,t){var i=E.getIconUrl.call(this),n=(i.absolute?"":i.url)+"#"+this.config.iconPrefix,s=document.createElementNS("http://www.w3.org/2000/svg","svg");u.setAttributes(s,u.extend(t,{role:"presentation"}));var a=document.createElementNS("http://www.w3.org/2000/svg","use"),l=n+"-"+e;return"href"in a?a.setAttributeNS("http://www.w3.org/1999/xlink","href",l):a.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",l),s.appendChild(a),s},createLabel:function(e,t){var i=b(e,this.config),n=Object.assign({},t);switch(e){case"pip":i="PIP";break;case"airplay":i="AirPlay"}return"class"in n?n.class+=" "+this.config.classNames.hidden:n.class=this.config.classNames.hidden,u.createElement("span",n,i)},createBadge:function(e){if(u.is.empty(e))return null;var t=u.createElement("span",{class:this.config.classNames.menu.value});return t.appendChild(u.createElement("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var i=u.createElement("button"),n=Object.assign({},t),s=u.toCamelCase(e),a=!1,l=void 0,r=void 0,o=void 0,c=void 0;switch("type"in n||(n.type="button"),"class"in n?n.class.includes(this.config.classNames.control)&&(n.class+=" "+this.config.classNames.control):n.class=this.config.classNames.control,e){case"play":a=!0,l="play",o="pause",r="play",c="pause";break;case"mute":a=!0,l="mute",o="unmute",r="volume",c="muted";break;case"captions":a=!0,l="enableCaptions",o="disableCaptions",r="captions-off",c="captions-on";break;case"fullscreen":a=!0,l="enterFullscreen",o="exitFullscreen",r="enter-fullscreen",c="exit-fullscreen";break;case"play-large":n.class+=" "+this.config.classNames.control+"--overlaid",s="play",l="play",r="play";break;default:l=s,r=e}return a?(i.appendChild(E.createIcon.call(this,c,{class:"icon--pressed"})),i.appendChild(E.createIcon.call(this,r,{class:"icon--not-pressed"})),i.appendChild(E.createLabel.call(this,o,{class:"label--pressed"})),i.appendChild(E.createLabel.call(this,l,{class:"label--not-pressed"})),n["aria-pressed"]=!1,n["aria-label"]=b(l,this.config)):(i.appendChild(E.createIcon.call(this,r)),i.appendChild(E.createLabel.call(this,l))),u.extend(n,u.getAttributesFromSelector(this.config.selectors.buttons[s],n)),u.setAttributes(i,n),"play"===s?(u.is.array(this.elements.buttons[s])||(this.elements.buttons[s]=[]),this.elements.buttons[s].push(i)):this.elements.buttons[s]=i,i},createRange:function(e,t){var i=u.createElement("label",{for:t.id,class:this.config.classNames.hidden},b(e,this.config)),n=u.createElement("input",u.extend(u.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off"},t));return this.elements.inputs[e]=n,E.updateRangeFill.call(this,n),{label:i,input:n}},createProgress:function(e,t){var i=u.createElement("progress",u.extend(u.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0},t));if("volume"!==e){i.appendChild(u.createElement("span",null,"0"));var n="";switch(e){case"played":n=b("played",this.config);break;case"buffer":n=b("buffered",this.config)}i.textContent="% "+n.toLowerCase()}return this.elements.display[e]=i,i},createTime:function(e){var t=u.createElement("div",{class:"plyr__time"});return t.appendChild(u.createElement("span",{class:this.config.classNames.hidden},b(e,this.config))),t.appendChild(u.createElement("span",u.getAttributesFromSelector(this.config.selectors.display[e]),"00:00")),this.elements.display[e]=t,t},createMenuItem:function(e,t,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,a=arguments.length>5&&void 0!==arguments[5]&&arguments[5],l=u.createElement("li"),r=u.createElement("label",{class:this.config.classNames.control}),o=u.createElement("input",u.extend(u.getAttributesFromSelector(this.config.selectors.inputs[i]),{type:"radio",name:"plyr-"+i,value:e,checked:a,class:"plyr__sr-only"})),c=u.createElement("span",{"aria-hidden":!0});r.appendChild(o),r.appendChild(c),r.insertAdjacentHTML("beforeend",n),u.is.element(s)&&r.appendChild(s),l.appendChild(r),t.appendChild(l)},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&u.is.element(this.elements.inputs.seek)&&u.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var i=0,n=this.elements.inputs.seek.getBoundingClientRect(),s=this.config.classNames.tooltip+"--visible",a=function(e){u.toggleClass(t.elements.display.seekTooltip,s,e)};if(this.touch)a(!1);else{if(u.is.event(e))i=100/n.width*(e.pageX-n.left);else{if(!u.hasClass(this.elements.display.seekTooltip,s))return;i=parseFloat(this.elements.display.seekTooltip.style.left,10)}i<0?i=0:i>100&&(i=100),k.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*i),this.elements.display.seekTooltip.style.left=i+"%",u.is.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&a("mouseenter"===e.type)}}},toggleTab:function(e,t){var i=this.elements.settings.tabs[e],n=this.elements.settings.panes[e];u.toggleHidden(i,!t),u.toggleHidden(n,!t)},setQualityMenu:function(e){var t=this;if(u.is.element(this.elements.settings.panes.quality)){var i=this.elements.settings.panes.quality.querySelector("ul");u.is.array(e)?this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}):this.options.quality=this.config.quality.options;var n=!u.is.empty(this.options.quality)&&this.isYouTube;if(E.toggleTab.call(this,"quality",n),n){u.emptyElement(i);this.options.quality.forEach(function(e){return E.createMenuItem.call(t,e,i,"quality",E.getLabel.call(t,"quality",e),function(e){var i="";switch(e){case"hd2160":i="4K";break;case"hd1440":i="WQHD";break;case"hd1080":case"hd720":i="HD"}return i.length?E.createBadge.call(t,i):null}(e))}),E.updateSetting.call(this,"quality",i)}}},getLabel:function(e,t){switch(e){case"speed":return 1===t?"Normal":t+"&times;";case"quality":switch(t){case"hd2160":return"2160P";case"hd1440":return"1440P";case"hd1080":return"1080P";case"hd720":return"720P";case"large":return"480P";case"medium":return"360P";case"small":return"240P";case"tiny":return"Tiny";case"default":return"Auto";default:return t}case"captions":return E.getLanguage.call(this);default:return null}},updateSetting:function(e,t){var i=this.elements.settings.panes[e],n=null,s=t;switch(e){case"captions":n=this.captions.active?this.captions.language:b("disabled",this.config);break;default:if(n=this[e],u.is.empty(n)&&(n=this.config[e].default),!this.options[e].includes(n))return void this.debug.warn("Unsupported value of '"+n+"' for "+e);if(!this.config[e].options.includes(n))return void this.debug.warn("Disabled value of '"+n+"' for "+e)}(u.is.element(s)||(s=i&&i.querySelector("ul")),u.is.empty(n))||(this.elements.settings.tabs[e].querySelector("."+this.config.classNames.menu.value).innerHTML=E.getLabel.call(this,e,n));var a=s&&s.querySelector('input[value="'+n+'"]');u.is.element(a)&&(a.checked=!0)},getLanguage:function(){if(!this.supported.ui)return null;if(d.textTracks&&v.getTracks.call(this).length&&this.captions.active){var e=v.getCurrentTrack.call(this);if(u.is.track(e))return e.label}return b("disabled",this.config)},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector("ul"),i=v.getTracks.call(this).length;if(E.toggleTab.call(this,"captions",i),u.emptyElement(t),i){var n=v.getTracks.call(this).map(function(e){return{language:e.language,label:u.is.empty(e.label)?e.language.toUpperCase():e.label}});n.unshift({language:"",label:b("disabled",this.config)}),n.forEach(function(i){E.createMenuItem.call(e,i.language,t,"language",i.label||i.language,E.createBadge.call(e,i.language.toUpperCase()),i.language.toLowerCase()===e.captions.language.toLowerCase())}),E.updateSetting.call(this,"captions",t)}},setSpeedMenu:function(){var e=this;if(u.is.element(this.elements.settings.panes.speed)){u.is.array(this.options.speed)&&this.options.speed.length||(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(t){return e.config.speed.options.includes(t)});var t=!u.is.empty(this.options.speed);if(E.toggleTab.call(this,"speed",t),t){var i=this.elements.settings.panes.speed.querySelector("ul");u.toggleHidden(this.elements.settings.tabs.speed,!1),u.toggleHidden(this.elements.settings.panes.speed,!1),u.emptyElement(i),this.options.speed.forEach(function(t){return E.createMenuItem.call(e,t,i,"speed",E.getLabel.call(e,"speed",t))}),E.updateSetting.call(this,"speed",i)}}},toggleMenu:function(e){var t=this.elements.settings.form,i=this.elements.buttons.settings;if(u.is.element(t)&&u.is.element(i)){var n=u.is.boolean(e)?e:u.is.element(t)&&"true"===t.getAttribute("aria-hidden");if(u.is.event(e)){var s=u.is.element(t)&&t.contains(e.target),a=e.target===this.elements.buttons.settings;if(s||!s&&!a&&n)return;a&&e.stopPropagation()}u.is.element(i)&&i.setAttribute("aria-expanded",n),u.is.element(t)&&(t.setAttribute("aria-hidden",!n),u.toggleClass(this.elements.container,this.config.classNames.menu.open,n),n?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1))}},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.setAttribute("aria-hidden",!1),Array.from(t.querySelectorAll("input[name]")).forEach(function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(t);var i=t.scrollWidth,n=t.scrollHeight;return u.removeElement(t),{width:i,height:n}},showTab:function(e){var t=this.elements.settings.menu,i=e.target,n="false"===i.getAttribute("aria-expanded"),s=document.getElementById(i.getAttribute("aria-controls"));if(u.is.element(s)&&"tabpanel"===s.getAttribute("role")){var a=t.querySelector('[role="tabpanel"][aria-hidden="false"]'),l=a.parentNode;if(Array.from(t.querySelectorAll('[aria-controls="'+a.getAttribute("id")+'"]')).forEach(function(e){e.setAttribute("aria-expanded",!1)}),d.transitions&&!d.reducedMotion){l.style.width=a.scrollWidth+"px",l.style.height=a.scrollHeight+"px";var r=E.getTabSize.call(this,s);u.on(l,u.transitionEndEvent,function e(t){t.target===l&&["width","height"].includes(t.propertyName)&&(l.style.width="",l.style.height="",u.off(l,u.transitionEndEvent,e))}),l.style.width=r.width+"px",l.style.height=r.height+"px"}a.setAttribute("aria-hidden",!0),a.setAttribute("tabindex",-1),s.setAttribute("aria-hidden",!n),i.setAttribute("aria-expanded",n),s.removeAttribute("tabindex"),s.querySelectorAll("button:not(:disabled), input:not(:disabled), [tabindex]")[0].focus()}},create:function(e){var t=this;if(u.is.empty(this.config.controls))return null;var i=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&i.appendChild(E.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&i.appendChild(E.createButton.call(this,"rewind")),this.config.controls.includes("play")&&i.appendChild(E.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&i.appendChild(E.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var n=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.progress)),s=E.createRange.call(this,"seek",{id:"plyr-seek-"+e.id});if(n.appendChild(s.label),n.appendChild(s.input),n.appendChild(E.createProgress.call(this,"buffer")),this.config.tooltips.seek){var a=u.createElement("span",{role:"tooltip",class:this.config.classNames.tooltip},"00:00");n.appendChild(a),this.elements.display.seekTooltip=a}this.elements.progress=n,i.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&i.appendChild(E.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&i.appendChild(E.createTime.call(this,"duration")),this.config.controls.includes("mute")&&i.appendChild(E.createButton.call(this,"mute")),this.config.controls.includes("volume")){var l=u.createElement("div",{class:"plyr__volume"}),r={max:1,step:.05,value:this.config.volume},o=E.createRange.call(this,"volume",u.extend(r,{id:"plyr-volume-"+e.id}));l.appendChild(o.label),l.appendChild(o.input),this.elements.volume=l,i.appendChild(l)}if(this.config.controls.includes("captions")&&i.appendChild(E.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!u.is.empty(this.config.settings)){var c=u.createElement("div",{class:"plyr__menu"});c.appendChild(E.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var p=u.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),h=u.createElement("div"),m=u.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-hidden":!1,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),g=u.createElement("ul",{role:"tablist"});this.config.settings.forEach(function(i){var n=u.createElement("li",{role:"tab",hidden:""}),s=u.createElement("button",u.extend(u.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+i+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+i,"aria-expanded":!1}),b(i,t.config)),a=u.createElement("span",{class:t.config.classNames.menu.value});a.innerHTML=e[i],s.appendChild(a),n.appendChild(s),g.appendChild(n),t.elements.settings.tabs[i]=n}),m.appendChild(g),h.appendChild(m),this.config.settings.forEach(function(i){var n=u.createElement("div",{id:"plyr-settings-"+e.id+"-"+i,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-"+e.id+"-"+i+"-tab",role:"tabpanel",tabindex:-1,hidden:""}),s=u.createElement("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},b(i,t.config));n.appendChild(s);var a=u.createElement("ul");n.appendChild(a),h.appendChild(n),t.elements.settings.panes[i]=n}),p.appendChild(h),c.appendChild(p),i.appendChild(c),this.elements.settings.form=p,this.elements.settings.menu=c}return this.config.controls.includes("pip")&&d.pip&&i.appendChild(E.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&d.airplay&&i.appendChild(E.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&i.appendChild(E.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(E.createButton.call(this,"play-large")),this.elements.controls=i,this.config.controls.includes("settings")&&this.config.settings.includes("speed")&&E.setSpeedMenu.call(this),i},inject:function(){var e=this;if(this.config.loadSprite){var t=E.getIconUrl.call(this);t.absolute&&u.loadSprite(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var i=null;this.elements.controls=null,i=u.is.string(this.config.controls)||u.is.element(this.config.controls)?this.config.controls:u.is.function(this.config.controls)?this.config.controls({id:this.id,seektime:this.config.seekTime,title:this.config.title}):E.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:E.getLanguage.call(this)});var n=void 0;if(u.is.string(this.config.selectors.controls.container)&&(n=document.querySelector(this.config.selectors.controls.container)),u.is.element(n)||(n=this.elements.container),u.is.element(i)?n.appendChild(i):n.insertAdjacentHTML("beforeend",i),u.is.element(this.elements.controls)||u.findElements.call(this),window.navigator.userAgent.includes("Edge")&&u.repaint(n),this.config.tooltips.controls){var s=u.getElements.call(this,[this.config.selectors.controls.wrapper," ",this.config.selectors.labels," .",this.config.classNames.hidden].join(""));Array.from(s).forEach(function(t){u.toggleClass(t,e.config.classNames.hidden,!1),u.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute("role","tooltip")})}}},T=u.getBrowser(),C=function(){function e(t){l(this,e),this.player=t,this.lastKey=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.firstTouch=this.firstTouch.bind(this)}return r(e,[{key:"handleKey",value:function(e){var t=this,i=e.keyCode?e.keyCode:e.which,n="keydown"===e.type,s=n&&i===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&u.is.number(i)){if(n){var a=u.getFocusElement();if(u.is.element(a)&&u.matches(a,this.player.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(i)&&(e.preventDefault(),e.stopPropagation()),i){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:s||(t.player.currentTime=t.player.duration/10*(i-48));break;case 32:case 75:s||this.player.togglePlay();break;case 38:this.player.increaseVolume(.1);break;case 40:this.player.decreaseVolume(.1);break;case 77:s||(this.player.muted=!this.player.muted);break;case 39:this.player.fastForward();break;case 37:this.player.rewind();break;case 70:this.player.fullscreen.toggle();break;case 67:s||this.player.toggleCaptions();break;case 76:this.player.loop=!this.player.loop}!this.player.fullscreen.enabled&&this.player.fullscreen.active&&27===i&&this.player.fullscreen.toggle(),this.lastKey=i}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){E.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){this.player.touch=!0,u.toggleClass(this.player.elements.container,this.player.config.classNames.isTouch,!0),u.off(document.body,"touchstart",this.firstTouch)}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.player.config.keyboard.global&&u.toggleListener(window,"keydown keyup",this.handleKey,e,!1),u.toggleListener(document.body,"click",this.toggleMenu,e),u.on(document.body,"touchstart",this.firstTouch)}},{key:"container",value:function(){var e=this;!this.player.config.keyboard.global&&this.player.config.keyboard.focused&&u.on(this.player.elements.container,"keydown keyup",this.handleKey,!1),u.on(this.player.elements.container,"focusout",function(t){u.toggleClass(t.target,e.player.config.classNames.tabFocus,!1)}),u.on(this.player.elements.container,"keydown",function(t){9===t.keyCode&&setTimeout(function(){u.toggleClass(u.getFocusElement(),e.player.config.classNames.tabFocus,!0)},0)}),this.player.config.hideControls&&u.on(this.player.elements.container,"mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen",function(t){e.player.toggleControls(t)})}},{key:"media",value:function(){var e=this;if(u.on(this.player.media,"timeupdate seeking",function(t){return k.timeUpdate.call(e.player,t)}),u.on(this.player.media,"durationchange loadedmetadata",function(t){return k.durationUpdate.call(e.player,t)}),u.on(this.player.media,"loadeddata",function(){u.toggleHidden(e.player.elements.volume,!e.player.hasAudio),u.toggleHidden(e.player.elements.buttons.mute,!e.player.hasAudio)}),u.on(this.player.media,"ended",function(){e.player.isHTML5&&e.player.isVideo&&e.player.config.showPosterOnEnd&&(e.player.restart(),e.player.media.load())}),u.on(this.player.media,"progress playing",function(t){return k.updateProgress.call(e.player,t)}),u.on(this.player.media,"volumechange",function(t){return k.updateVolume.call(e.player,t)}),u.on(this.player.media,"playing play pause ended emptied",function(t){return k.checkPlaying.call(e.player,t)}),u.on(this.player.media,"waiting canplay seeked playing",function(t){return k.checkLoading.call(e.player,t)}),this.player.supported.ui&&this.player.config.clickToPlay&&!this.player.isAudio){var t=u.getElement.call(this.player,"."+this.player.config.classNames.video);if(!u.is.element(t))return;u.on(t,"click",function(){e.player.config.hideControls&&e.player.touch&&!e.player.paused||(e.player.paused?e.player.play():e.player.ended?(e.player.restart(),e.player.play()):e.player.pause())})}this.player.supported.ui&&this.player.config.disableContextMenu&&u.on(this.player.media,"contextmenu",function(e){e.preventDefault()},!1),u.on(this.player.media,"volumechange",function(){e.player.storage.set({volume:e.player.volume,muted:e.player.muted})}),u.on(this.player.media,"ratechange",function(){E.updateSetting.call(e.player,"speed"),e.player.storage.set({speed:e.player.speed})}),u.on(this.player.media,"qualitychange",function(){E.updateSetting.call(e.player,"quality"),e.player.storage.set({quality:e.player.quality})}),u.on(this.player.media,"languagechange",function(){E.updateSetting.call(e.player,"captions"),e.player.storage.set({language:e.player.language})}),u.on(this.player.media,"captionsenabled captionsdisabled",function(){E.updateSetting.call(e.player,"captions"),e.player.storage.set({captions:e.player.captions.active})}),u.on(this.player.media,this.player.config.events.concat(["keyup","keydown"]).join(" "),function(t){var i={};"error"===t.type&&(i=e.player.media.error),u.dispatchEvent.call(e.player,e.player.elements.container,t.type,!0,i)})}},{key:"controls",value:function(){var e=this,t=T.isIE?"change":"input",i=function(t,i,n){var s=e.player.config.listeners[n];u.is.function(s)&&s.call(e.player,t),!t.defaultPrevented&&u.is.function(i)&&i.call(e.player,t)},n=function(t,n,s,a){var l=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],r=e.player.config.listeners[a],o=u.is.function(r);u.on(t,n,function(e){return i(e,s,a)},l&&!o)};n(this.player.elements.buttons.play,"click",this.player.togglePlay,"play"),n(this.player.elements.buttons.restart,"click",this.player.restart,"restart"),n(this.player.elements.buttons.rewind,"click",this.player.rewind,"rewind"),n(this.player.elements.buttons.fastForward,"click",this.player.forward,"fastForward"),n(this.player.elements.buttons.mute,"click",function(){e.player.muted=!e.player.muted},"mute"),n(this.player.elements.buttons.captions,"click",this.player.toggleCaptions),n(this.player.elements.buttons.fullscreen,"click",function(){e.player.fullscreen.toggle()},"fullscreen"),n(this.player.elements.buttons.pip,"click",function(){e.player.pip="toggle"},"pip"),n(this.player.elements.buttons.airplay,"click",this.player.airplay,"airplay"),n(this.player.elements.buttons.settings,"click",function(t){E.toggleMenu.call(e.player,t)}),n(this.player.elements.settings.form,"click",function(t){t.stopPropagation(),u.matches(t.target,e.player.config.selectors.inputs.language)?i(t,function(){e.player.language=t.target.value},"language"):u.matches(t.target,e.player.config.selectors.inputs.quality)?i(t,function(){e.player.quality=t.target.value},"quality"):u.matches(t.target,e.player.config.selectors.inputs.speed)?i(t,function(){e.player.speed=parseFloat(t.target.value)},"speed"):E.showTab.call(e.player,t)}),n(this.player.elements.inputs.seek,t,function(t){e.player.currentTime=t.target.value/t.target.max*e.player.duration},"seek"),this.player.config.toggleInvert&&!u.is.element(this.player.elements.display.duration)&&n(this.player.elements.display.currentTime,"click",function(){0!==e.player.currentTime&&(e.player.config.invertTime=!e.player.config.invertTime,k.timeUpdate.call(e.player))}),n(this.player.elements.inputs.volume,t,function(t){e.player.volume=t.target.value},"volume"),T.isWebkit&&n(u.getElements.call(this.player,'input[type="range"]'),"input",function(t){E.updateRangeFill.call(e.player,t.target)}),n(this.player.elements.progress,"mouseenter mouseleave mousemove",function(t){return E.updateSeekTooltip.call(e.player,t)}),this.player.config.hideControls&&(n(this.player.elements.controls,"mouseenter mouseleave",function(t){e.player.elements.controls.hover=!e.player.touch&&"mouseenter"===t.type}),n(this.player.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.player.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),n(this.player.elements.controls,"focusin focusout",function(t){e.player.toggleControls(t)})),n(this.player.elements.inputs.volume,"wheel",function(t){var i=t.webkitDirectionInvertedFromDevice,n=0;(t.deltaY<0||t.deltaX>0)&&(i?(e.player.decreaseVolume(.02),n=-1):(e.player.increaseVolume(.02),n=1)),(t.deltaY>0||t.deltaX<0)&&(i?(e.player.increaseVolume(.02),n=1):(e.player.decreaseVolume(.02),n=-1)),(1===n&&e.player.media.volume<1||-1===n&&e.player.media.volume>0)&&t.preventDefault()},"volume",!1)}},{key:"clear",value:function(){this.global(!1)}}]),e}(),A=function(){function e(t){l(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return r(e,[{key:"get",value:function(t){if(!e.supported)return null;var i=window.localStorage.getItem(this.key);if(u.is.empty(i))return null;var n=JSON.parse(i);return u.is.string(t)&&t.length?n[t]:n}},{key:"set",value:function(t){if(e.supported&&this.enabled&&u.is.object(t)){var i=this.get();u.is.empty(i)&&(i={}),u.extend(i,t),window.localStorage.setItem(this.key,JSON.stringify(i))}}}],[{key:"supported",get:function(){try{if(!("localStorage"in window))return!1;return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}(),S=function(){function e(t){var i=this;l(this,e),this.player=t,this.publisherId=t.config.ads.publisherId,this.enabled=t.isHTML5&&t.isVideo&&t.config.ads.enabled&&u.is.string(this.publisherId)&&this.publisherId.length,this.playing=!1,this.initialized=!1,this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.managerPromise=new Promise(function(e,t){i.on("loaded",e),i.on("error",t)}),this.load()}return r(e,[{key:"load",value:function(){var e=this;this.enabled&&(u.is.object(window.google)&&u.is.object(window.google.ima)?this.ready():u.loadScript(this.player.config.urls.googleIMA.api).then(function(){e.ready()}).catch(function(){e.trigger("error",new Error("Google IMA SDK failed to load"))}))}},{key:"ready",value:function(){var e=this;this.startSafetyTimer(12e3,"ready()"),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.listeners(),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=u.createElement("div",{class:this.player.config.classNames.ads}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:"requestAds",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var i=new google.ima.AdsRequest;i.adTagUrl=this.tagUrl,i.linearAdSlotWidth=t.offsetWidth,i.linearAdSlotHeight=t.offsetHeight,i.nonLinearAdSlotWidth=t.offsetWidth,i.nonLinearAdSlotHeight=t.offsetHeight,i.forceNonLinearFullSlot=!1,this.loader.requestAds(i)}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=setInterval(function(){var t=u.formatTime(Math.max(e.manager.getRemainingTime(),0)),i=b("advertisement",e.player.config)+" - "+t;e.elements.container.setAttribute("data-badge-text",i)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,i=new google.ima.AdsRenderingSettings;i.restoreCustomPlaybackStateOnAdBreakComplete=!0,i.enablePreloading=!0,this.manager=e.getAdsManager(this.player,i),this.cuePoints=this.manager.getCuePoints(),this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var i=t.player.elements.progress;if(i){var n=100/t.player.duration*e,s=u.createElement("span",{class:t.player.config.classNames.cues});s.style.left=n.toString()+"%",i.appendChild(s)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.trigger("loaded")}},{key:"onAdEvent",value:function(e){var t=this,i=this.player.elements.container,n=e.getAd(),s=function(e){var i="ads"+e.replace(/_/g,"").toLowerCase();u.dispatchEvent.call(t.player,t.player.media,i)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.trigger("loaded"),s(e.type),this.pollCountdown(!0),n.isLinear()||(n.width=i.offsetWidth,n.height=i.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:s(e.type),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:s(e.type),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:s(e.type),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:case google.ima.AdEvent.Type.MIDPOINT:case google.ima.AdEvent.Type.COMPLETE:case google.ima.AdEvent.Type.IMPRESSION:case google.ima.AdEvent.Type.CLICK:s(e.type)}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.warn("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,i=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return i=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;e.cuePoints.forEach(function(n,s){i<n&&n<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(s,1))})}),window.addEventListener("resize",function(){e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.resumeContent(),this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}}).catch(function(){})}},{key:"resumeContent",value:function(){this.elements.container.style.zIndex="",this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){this.elements.container.style.zIndex=3,this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.trigger("error"),this.loadAds()}},{key:"loadAds",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on("loaded",t),e.player.debug.log(e.manager)}),e.requestAds()}).catch(function(){})}},{key:"trigger",value:function(e){for(var t=this,i=arguments.length,n=Array(i>1?i-1:0),s=1;s<i;s++)n[s-1]=arguments[s];var a=this.events[e];u.is.array(a)&&a.forEach(function(e){u.is.function(e)&&e.apply(t,n)})}},{key:"on",value:function(e,t){return u.is.array(this.events[e])||(this.events[e]=[]),this.events[e].push(t),this}},{key:"startSafetyTimer",value:function(e,t){var i=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=setTimeout(function(){i.cancel(),i.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){u.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:"tagUrl",get:function(){var e={AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId};return"https://go.aniview.com/api/adserver6/vast/?"+u.buildUrlParams(e)}}]),e}(),P={setup:function(){var e=this;u.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),P.setAspectRatio.call(this),u.is.object(window.YT)&&u.is.function(window.YT.Player)?P.ready.call(this):(u.loadScript(this.config.urls.youtube.api).catch(function(t){e.debug.warn("YouTube API failed to load",t)}),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){P.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(u.is.function(this.embed.getVideoData)){var i=this.embed.getVideoData().title;if(u.is.empty(i))return this.config.title=i,void k.setTitle.call(this)}var n=this.config.keys.google;if(u.is.string(n)&&!u.is.empty(n)){var s="https://www.googleapis.com/youtube/v3/videos?id="+e+"&key="+n+"&fields=items(snippet(title))&part=snippet";u.fetch(s).then(function(e){u.is.object(e)&&(t.config.title=e.items[0].snippet.title,k.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(u.is.empty(t)||!t.startsWith("youtube-")){var i=e.media.getAttribute("src");u.is.empty(i)&&(i=e.media.getAttribute(this.config.attributes.embed.id));var n=u.parseYouTubeId(i),s=u.generateId(e.provider),a=u.createElement("div",{id:s});e.media=u.replaceElement(a,e.media),e.embed=new window.YT.Player(s,{videoId:n,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!u.is.object(e.media.error)){var i={code:t.data};switch(t.data){case 2:i.message="The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.";break;case 5:i.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";break;case 100:i.message="The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.";break;case 101:case 150:i.message="The owner of the requested video does not allow it to be played in embedded players.";break;default:i.message="An unknown error occured"}e.media.error=i,u.dispatchEvent.call(e,e.media,"error")}},onPlaybackQualityChange:function(t){var i=t.target;e.media.quality=i.getPlaybackQuality(),u.dispatchEvent.call(e,e.media,"qualitychange")},onPlaybackRateChange:function(t){var i=t.target;e.media.playbackRate=i.getPlaybackRate(),u.dispatchEvent.call(e,e.media,"ratechange")},onReady:function(t){var i=t.target;P.getTitle.call(e,n),e.media.play=function(){i.playVideo()},e.media.pause=function(){i.pauseVideo()},e.media.stop=function(){i.stopVideo()},e.media.duration=i.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(i.getCurrentTime())},set:function(t){e.media.seeking=!0,u.dispatchEvent.call(e,e.media,"seeking"),i.seekTo(t)}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return i.getPlaybackRate()},set:function(e){i.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return i.getPlaybackQuality()},set:function(t){u.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:t}),i.setPlaybackQuality(t)}});var s=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return s},set:function(t){s=t,i.setVolume(100*s),u.dispatchEvent.call(e,e.media,"volumechange")}});var a=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return a},set:function(t){var n=u.is.boolean(t)?t:a;a=n,i[n?"mute":"unMute"](),u.dispatchEvent.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return i.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=i.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),u.dispatchEvent.call(e,e.media,"timeupdate"),u.dispatchEvent.call(e,e.media,"durationchange"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval(function(){e.media.buffered=i.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&u.dispatchEvent.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),u.dispatchEvent.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return k.build.call(e)},50)},onStateChange:function(t){var i=t.target;switch(clearInterval(e.timers.playing),t.data){case-1:u.dispatchEvent.call(e,e.media,"timeupdate"),e.media.buffered=i.getVideoLoadedFraction(),u.dispatchEvent.call(e,e.media,"progress");break;case 0:e.media.paused=!0,e.media.loop?(i.stopVideo(),i.playVideo()):u.dispatchEvent.call(e,e.media,"ended");break;case 1:e.media.seeking&&u.dispatchEvent.call(e,e.media,"seeked"),e.media.seeking=!1,e.media.paused&&u.dispatchEvent.call(e,e.media,"play"),e.media.paused=!1,u.dispatchEvent.call(e,e.media,"playing"),e.timers.playing=setInterval(function(){u.dispatchEvent.call(e,e.media,"timeupdate")},50),e.media.duration!==i.getDuration()&&(e.media.duration=i.getDuration(),u.dispatchEvent.call(e,e.media,"durationchange")),E.setQualityMenu.call(e,i.getAvailableQualityLevels());break;case 2:e.media.paused=!0,u.dispatchEvent.call(e,e.media,"pause")}u.dispatchEvent.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},N={setup:function(){var e=this;u.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),N.setAspectRatio.call(this),u.is.object(window.Vimeo)?N.ready.call(this):u.loadScript(this.config.urls.vimeo.api).then(function(){N.ready.call(e)}).catch(function(t){e.debug.warn("Vimeo API failed to load",t)})},setAspectRatio:function(e){var t=u.is.string(e)?e.split(":"):this.config.ratio.split(":"),i=100/t[0]*t[1],n=(240-i)/4.8;this.elements.wrapper.style.paddingBottom=i+"%",this.media.style.transform="translateY(-"+n+"%)"},ready:function(){var e=this,t=this,i={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media"},n=u.buildUrlParams(i),s=t.media.getAttribute("src");u.is.empty(s)&&(s=t.media.getAttribute(this.config.attributes.embed.id));var a=u.parseVimeoId(s),l=u.createElement("iframe"),r="https://player.vimeo.com/video/"+a+"?"+n;l.setAttribute("src",r),l.setAttribute("allowfullscreen",""),l.setAttribute("allowtransparency",""),l.setAttribute("allow","autoplay");var o=u.createElement("div");o.appendChild(l),t.media=u.replaceElement(o,t.media),t.embed=new window.Vimeo.Player(l),t.media.paused=!0,t.media.currentTime=0,t.media.play=function(){t.embed.play().then(function(){t.media.paused=!1})},t.media.pause=function(){t.embed.pause().then(function(){t.media.paused=!0})},t.media.stop=function(){t.pause(),t.currentTime=0};var c=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return c},set:function(e){var i=t.media.paused;t.media.seeking=!0,u.dispatchEvent.call(t,t.media,"seeking"),t.embed.setCurrentTime(e),i&&t.pause()}});var d=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return d},set:function(e){t.embed.setPlaybackRate(e).then(function(){d=e,u.dispatchEvent.call(t,t.media,"ratechange")})}});var p=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return p},set:function(e){t.embed.setVolume(e).then(function(){p=e,u.dispatchEvent.call(t,t.media,"volumechange")})}});var h=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return h},set:function(e){var i=!!u.is.boolean(e)&&e;t.embed.setVolume(i?0:t.config.volume).then(function(){h=i,u.dispatchEvent.call(t,t.media,"volumechange")})}});var m=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return m},set:function(e){var i=u.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(i).then(function(){m=i})}});var g=void 0;t.embed.getVideoUrl().then(function(e){g=e}),Object.defineProperty(t.media,"currentSrc",{get:function(){return g}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var i=u.getAspectRatio(t[0],t[1]);N.setAspectRatio.call(e,i)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(i){t.config.title=i,k.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){c=e,u.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,u.dispatchEvent.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,v.setup.call(t)}),t.embed.on("cuechange",function(e){var i=null;e.cues.length&&(i=u.stripHTML(e.cues[0].text)),v.setText.call(t,i)}),t.embed.on("loaded",function(){u.is.element(t.embed.element)&&t.supported.ui&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){t.media.paused&&u.dispatchEvent.call(t,t.media,"play"),t.media.paused=!1,u.dispatchEvent.call(t,t.media,"playing")}),t.embed.on("pause",function(){t.media.paused=!0,u.dispatchEvent.call(t,t.media,"pause")}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,c=e.seconds,u.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,u.dispatchEvent.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&u.dispatchEvent.call(t,t.media,"canplaythrough")}),t.embed.on("seeked",function(){t.media.seeking=!1,u.dispatchEvent.call(t,t.media,"seeked"),u.dispatchEvent.call(t,t.media,"play")}),t.embed.on("ended",function(){t.media.paused=!0,u.dispatchEvent.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,u.dispatchEvent.call(t,t.media,"error")}),setTimeout(function(){return k.build.call(t)},0)}},x=u.getBrowser(),L={setup:function(){if(this.media)if(u.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),u.toggleClass(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&u.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.supported.ui&&(u.toggleClass(this.elements.container,this.config.classNames.pip.supported,d.pip&&this.isHTML5&&this.isVideo),u.toggleClass(this.elements.container,this.config.classNames.airplay.supported,d.airplay&&this.isHTML5),u.toggleClass(this.elements.container,this.config.classNames.stopped,this.config.autoplay),u.toggleClass(this.elements.container,this.config.classNames.isIos,x.isIos),u.toggleClass(this.elements.container,this.config.classNames.isTouch,this.touch)),this.isVideo&&(this.elements.wrapper=u.createElement("div",{class:this.config.classNames.video}),u.wrap(this.media,this.elements.wrapper)),this.isEmbed)switch(this.provider){case"youtube":P.setup.call(this);break;case"vimeo":N.setup.call(this)}else this.isHTML5&&k.setTitle.call(this);else this.debug.warn("No media element found!")},cancelRequests:function(){this.isHTML5&&(u.removeElement(this.media.querySelectorAll("source")),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}},I={insertElements:function(e,t){var i=this;u.is.string(t)?u.insertElement(e,this.media,{src:t}):u.is.array(t)&&t.forEach(function(t){u.insertElement(e,i.media,t)})},change:function(t){var i=this;u.is.object(t)&&"sources"in t&&t.sources.length?(L.cancelRequests.call(this),this.destroy.call(this,function(){switch(u.removeElement(i.media),i.media=null,u.is.element(i.elements.container)&&i.elements.container.removeAttribute("class"),i.type=t.type,i.provider=u.is.empty(t.sources[0].provider)?e.html5:t.sources[0].provider,i.supported=d.check(i.type,i.provider,i.config.inline),i.provider+":"+i.type){case"html5:video":i.media=u.createElement("video");break;case"html5:audio":i.media=u.createElement("audio");break;case"youtube:video":case"vimeo:video":i.media=u.createElement("div",{src:t.sources[0].src})}i.elements.container.appendChild(i.media),u.is.boolean(t.autoplay)&&(i.config.autoplay=t.autoplay),i.isHTML5&&(i.config.crossorigin&&i.media.setAttribute("crossorigin",""),i.config.autoplay&&i.media.setAttribute("autoplay",""),"poster"in t&&i.media.setAttribute("poster",t.poster),i.config.loop.active&&i.media.setAttribute("loop",""),i.config.muted&&i.media.setAttribute("muted",""),i.config.inline&&i.media.setAttribute("playsinline","")),k.addStyleHook.call(i),i.isHTML5&&I.insertElements.call(i,"source",t.sources),i.config.title=t.title,L.setup.call(i),i.isHTML5&&("tracks"in t&&I.insertElements.call(i,"track",t.tracks),i.media.load()),(i.isHTML5||i.isEmbed&&!i.supported.ui)&&k.build.call(i),i.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}};return function(){function n(s,a){var r=this;if(l(this,n),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=d.touch,this.media=s,u.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||u.is.nodeList(this.media)||u.is.array(this.media))&&(this.media=this.media[0]),this.config=u.extend({},i,a,function(){try{return JSON.parse(r.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:null},this.fullscreen={active:!1},this.options={speed:[],quality:[]},this.debug=new h(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",d),!u.is.nullOrUndefined(this.media)&&u.is.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(d.check().api){this.elements.original=this.media.cloneNode(!0);var o=this.media.tagName.toLowerCase(),c=null,p=null,m=null;switch(o){case"div":if(c=this.media.querySelector("iframe"),u.is.element(c)){if(p=c.getAttribute("src"),this.provider=u.getProviderByUrl(p),this.elements.container=this.media,this.media=c,this.elements.container.className="",m=u.getUrlParams(p),!u.is.empty(m)){var g=["1","true"];g.includes(m.autoplay)&&(this.config.autoplay=!0),g.includes(m.playsinline)&&(this.config.inline=!0),g.includes(m.loop)&&(this.config.loop.active=!0)}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(u.is.empty(this.provider)||!Object.keys(e).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=t.video;break;case"video":case"audio":this.type=o,this.provider=e.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("playsinline")&&(this.config.inline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=d.check(this.type,this.provider,this.config.inline),this.supported.api?(this.listeners=new C(this),this.storage=new A(this),this.media.plyr=this,u.is.element(this.elements.container)||(this.elements.container=u.createElement("div"),u.wrap(this.media,this.elements.container)),this.elements.container.setAttribute("tabindex",0),k.addStyleHook.call(this),L.setup.call(this),this.config.debug&&u.on(this.elements.container,this.config.events.join(" "),function(e){r.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&k.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new y(this),this.ads=new S(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 r(n,[{key:"play",value:function(){var e=this;return u.is.function(this.media.play)?this.ads.enabled&&!this.ads.initialized?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&&u.is.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){(u.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?this.media.load():this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(u.is.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(u.is.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(u.is.number(e)?e:1)}},{key:"decreaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-(u.is.number(e)?e:1)}},{key:"toggleCaptions",value:function(e){if(this.supported.ui&&u.is.element(this.elements.buttons.captions)){var t=u.is.boolean(e)?e:-1===this.elements.container.className.indexOf(this.config.classNames.captions.active);this.captions.active!==t&&(this.captions.active=t,u.toggleState(this.elements.buttons.captions,this.captions.active),u.toggleClass(this.elements.container,this.config.classNames.captions.active,this.captions.active),u.dispatchEvent.call(this,this.media,this.captions.active?"captionsenabled":"captionsdisabled"))}}},{key:"airplay",value:function(){d.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){var t=this;if(u.is.element(this.elements.controls)&&this.supported.ui&&!this.isAudio){var i=0,n=e,s=!1;if(!u.is.boolean(e))if(u.is.event(e)){s="enterfullscreen"===e.type;n=["touchstart","touchmove","mouseenter","mousemove","focusin"].includes(e.type),["touchmove","touchend","mousemove"].includes(e.type)&&(i=2e3),this.touch||"focusin"!==e.type||(i=3e3,u.toggleClass(this.elements.controls,this.config.classNames.noTransition,!0))}else n=u.hasClass(this.elements.container,this.config.classNames.hideControls);if(clearTimeout(this.timers.controls),n||this.paused||this.loading){if(u.toggleClass(this.elements.container,this.config.classNames.hideControls,!1)&&u.dispatchEvent.call(this,this.media,"controlsshown"),this.paused||this.loading)return;this.touch&&(i=3e3)}n&&!this.playing||(this.timers.controls=setTimeout(function(){(!t.elements.controls.pressed&&!t.elements.controls.hover||s)&&(u.hasClass(t.elements.container,t.config.classNames.hideControls)||u.toggleClass(t.elements.controls,t.config.classNames.noTransition,!1),u.toggleClass(t.elements.container,t.config.classNames.hideControls,!0)&&(u.dispatchEvent.call(t,t.media,"controlshidden"),t.config.controls.includes("settings")&&!u.is.empty(t.config.settings)&&E.toggleMenu.call(t,!1)))},i))}}},{key:"on",value:function(e,t){u.on(this.elements.container,e,t)}},{key:"off",value:function(e,t){u.off(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var n=function(){document.body.style.overflow="",t.embed=null,i?(Object.keys(t.elements).length&&(u.removeElement(t.elements.buttons.play),u.removeElement(t.elements.captions),u.removeElement(t.elements.controls),u.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),u.is.function(e)&&e()):(t.listeners.clear(),u.replaceElement(t.elements.original,t.elements.container),u.dispatchEvent.call(t,t.elements.original,"destroyed",!0),u.is.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};switch(this.stop(),this.provider+":"+this.type){case"html5:video":case"html5:audio":clearTimeout(this.timers.loading),k.toggleNativeControls.call(this,!0),n();break;case"youtube:video":clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&u.is.function(this.embed.destroy)&&this.embed.destroy(),n();break;case"vimeo:video":null!==this.embed&&this.embed.unload().then(n),setTimeout(n,200)}}}},{key:"supports",value:function(e){return d.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===e.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===e.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===e.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===t.video)}},{key:"isAudio",get:function(){return Boolean(this.type===t.audio)}},{key:"paused",get:function(){return Boolean(this.media.paused)}},{key:"playing",get:function(){return Boolean(!this.paused&&!this.ended&&(!this.isHTML5||this.media.readyState>2))}},{key:"ended",get:function(){return Boolean(this.media.ended)}},{key:"currentTime",set:function(e){var t=0;u.is.number(e)&&(t=e),t<0?t=0:t>this.duration&&(t=this.duration),this.media.currentTime=parseFloat(t.toFixed(4)),this.debug.log("Seeking to "+this.currentTime+" seconds")},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return u.is.number(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}},{key:"seeking",get:function(){return Boolean(this.media.seeking)}},{key:"duration",get:function(){var e=parseInt(this.config.duration,10),t=this.media?Number(this.media.duration):0;return Number.isNaN(e)?t:e}},{key:"volume",set:function(e){var t=e;u.is.string(t)&&(t=Number(t)),u.is.number(t)||(t=this.storage.get("volume")),u.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;u.is.boolean(t)||(t=this.storage.get("muted")),u.is.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return Boolean(this.media.muted)}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;u.is.number(e)&&(t=e),u.is.number(t)||(t=this.storage.get("speed")),u.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=null;u.is.string(e)&&(t=e),u.is.string(t)||(t=this.storage.get("quality")),u.is.string(t)||(t=this.config.quality.selected),this.options.quality.includes(t)?(this.config.quality.selected=t,this.media.quality=t):this.debug.warn("Unsupported quality option ("+t+")")},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=u.is.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return Boolean(this.media.loop)}},{key:"source",set:function(e){I.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isHTML5&&this.isVideo?u.is.string(e)&&this.media.setAttribute("poster",e):this.debug.warn("Poster can only be set on HTML5 video")},get:function(){return this.isHTML5&&this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=u.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:"language",set:function(e){if(u.is.string(e)&&(this.toggleCaptions(!u.is.empty(e)),!u.is.empty(e))){var t=e.toLowerCase();this.language!==t&&(this.captions.language=t,v.setText.call(this,null),v.setLanguage.call(this),u.dispatchEvent.call(this,this.media,"languagechange"))}},get:function(){return this.captions.language}},{key:"pip",set:function(e){var t="picture-in-picture",i="inline";if(d.pip){var n=u.is.boolean(e)?e:this.pip===i;this.media.webkitSetPresentationMode(n?t:i)}},get:function(){return d.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,i){return d.check(e,t,i)}},{key:"loadSprite",value:function(e,t){return u.loadSprite(e,t)}}]),n}()});
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";var e={html5:"html5",youtube:"youtube",vimeo:"vimeo"},t={audio:"audio",video:"video"},i={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,showPosterOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.0.6/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:"default",options:["hd2160","hd1440","hd1080","hd720","large","medium","small","tiny","default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:window.navigator.language.split("-")[0]},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime} secs",play:"Play",pause:"Pause",fastForward:"Forward {seektime} secs",seek:"Seek",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",advertisement:"Ad"},urls:{vimeo:{api:"https://player.vimeo.com/api/player.js"},youtube:{api:"https://www.youtube.com/iframe_api"},googleIMA:{api:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","adscontentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',fastForward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress--buffer",played:".plyr__progress--played",loop:".plyr__progress--loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{video:"plyr__video-wrapper",embed:"plyr__video-embed",ads:"plyr__ads",control:"plyr__control",type:"plyr--{0}",provider:"plyr--{0}",stopped:"plyr--stopped",playing:"plyr--playing",loading:"plyr--loading",error:"plyr--has-error",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1,publisherId:""}};"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var n,s,a=(function(e,t){var i;i=function(){var e=function(){},t={},i={},n={};function s(e,t){if(e){var s=n[e];if(i[e]=t,s)for(;s.length;)s[0](e,t),s.splice(0,1)}}function a(t,i){t.call&&(t={success:t}),i.length?(t.error||e)(i):(t.success||e)(t)}function l(t,i,n,s){var a,r,o=document,c=n.async,u=(n.numRetries||0)+1,d=n.before||e;s=s||0,/(^css!|\.css$)/.test(t)?(a=!0,(r=o.createElement("link")).rel="stylesheet",r.href=t.replace(/^css!/,"")):((r=o.createElement("script")).src=t,r.async=void 0===c||c),r.onload=r.onerror=r.onbeforeload=function(e){var o=e.type[0];if(a&&"hideFocus"in r)try{r.sheet.cssText.length||(o="e")}catch(e){o="e"}if("e"==o&&(s+=1)<u)return l(t,i,n,s);i(t,o,e.defaultPrevented)},!1!==d(t,r)&&o.head.appendChild(r)}function r(e,i,n){var r,o;if(i&&i.trim&&(r=i),o=(r?n:i)||{},r){if(r in t)throw"LoadJS";t[r]=!0}!function(e,t,i){var n,s,a=(e=e.push?e:[e]).length,r=a,o=[];for(n=function(e,i,n){if("e"==i&&o.push(e),"b"==i){if(!n)return;o.push(e)}--a||t(o)},s=0;s<r;s++)l(e[s],n,i)}(e,function(e){a(o,e),s(r,e)},o)}return r.ready=function(e,t){return function(e,t){var s,a,l,r=[],o=(e=e.push?e:[e]).length,c=o;for(s=function(e,i){i.length&&r.push(e),--c||t(r)};o--;)a=e[o],(l=i[a])?s(a,l):(n[a]=n[a]||[]).push(s)}(e,function(e){a(t,e)}),r},r.done=function(e){s(e,[])},r.reset=function(){t={},i={},n={}},r.isDefined=function(e){return e in t},r},e.exports=i()}(n={exports:{}},n.exports),n.exports),l=(function(){function e(e){this.value=e}function t(t){var i,n;function s(i,n){try{var l=t[i](n),r=l.value;r instanceof e?Promise.resolve(r.value).then(function(e){s("next",e)},function(e){s("throw",e)}):a(l.done?"return":"normal",l.value)}catch(e){a("throw",e)}}function a(e,t){switch(e){case"return":i.resolve({value:t,done:!0});break;case"throw":i.reject(t);break;default:i.resolve({value:t,done:!1})}(i=i.next)?s(i.key,i.arg):n=null}this._invoke=function(e,t){return new Promise(function(a,l){var r={key:e,arg:t,resolve:a,reject:l,next:null};n?n=n.next=r:(i=n=r,s(e,t))})},"function"!=typeof t.return&&(this.return=void 0)}"function"==typeof Symbol&&Symbol.asyncIterator&&(t.prototype[Symbol.asyncIterator]=function(){return this}),t.prototype.next=function(e){return this._invoke("next",e)},t.prototype.throw=function(e){return this._invoke("throw",e)},t.prototype.return=function(e){return this._invoke("return",e)}}(),function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}),r=function(){function e(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t}}(),o=function(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e},c=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var i=[],n=!0,s=!1,a=void 0;try{for(var l,r=e[Symbol.iterator]();!(n=(l=r.next()).done)&&(i.push(l.value),!t||i.length!==t);n=!0);}catch(e){s=!0,a=e}finally{try{!n&&r.return&&r.return()}finally{if(s)throw a}}return i}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),u={is:{plyr:function(e){return this.instanceof(e,window.Plyr)},object:function(e){return this.getConstructor(e)===Object},number:function(e){return this.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return this.getConstructor(e)===String},boolean:function(e){return this.getConstructor(e)===Boolean},function:function(e){return this.getConstructor(e)===Function},array:function(e){return!this.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return this.instanceof(e,window.WeakMap)},nodeList:function(e){return this.instanceof(e,window.NodeList)},element:function(e){return this.instanceof(e,window.Element)},textNode:function(e){return this.getConstructor(e)===Text},event:function(e){return this.instanceof(e,window.Event)},cue:function(e){return this.instanceof(e,window.TextTrackCue)||this.instanceof(e,window.VTTCue)},track:function(e){return this.instanceof(e,TextTrack)||!this.nullOrUndefined(e)&&this.string(e.kind)},url:function(e){return!this.nullOrUndefined(e)&&/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e)},nullOrUndefined:function(e){return null===e||void 0===e},empty:function(e){return this.nullOrUndefined(e)||(this.string(e)||this.array(e)||this.nodeList(e))&&!e.length||this.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)},getConstructor:function(e){return this.nullOrUndefined(e)?null:e.constructor}},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(i,n){try{var s=new XMLHttpRequest;if(!("withCredentials"in s))return;s.addEventListener("load",function(){if("text"===t)try{i(JSON.parse(s.responseText))}catch(e){i(s.responseText)}else i(s.response)}),s.addEventListener("error",function(){throw new Error(s.statusText)}),s.open("GET",e,!0),s.responseType=t,s.send()}catch(e){n(e)}})},loadScript:function(e){return new Promise(function(t,i){a(e,{success:t,error:i})})},loadSprite:function(e,t){if(u.is.string(e)){var i=u.is.string(t),n=function(){return document.querySelectorAll("#"+t).length};if(!i||!n()){var s=document.createElement("div");if(u.toggleHidden(s,!0),i&&s.setAttribute("id",t),d.storage){var a=window.localStorage.getItem("cache-"+t);if(null!==a){var l=JSON.parse(a);return void r.call(s,l.content)}}u.fetch(e).then(function(e){u.is.empty(e)||(d.storage&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),r.call(s,e))}).catch(function(){})}}function r(e){i&&n()||(this.innerHTML=e,document.body.insertBefore(this,document.body.childNodes[0]))}},generateId:function(e){return e+"-"+Math.floor(1e4*Math.random())},wrap:function(e,t){var i=e.length?e:[e];Array.from(i).reverse().forEach(function(e,i){var n=i>0?t.cloneNode(!0):t,s=e.parentNode,a=e.nextSibling;n.appendChild(e),a?s.insertBefore(n,a):s.appendChild(n)})},createElement:function(e,t,i){var n=document.createElement(e);return u.is.object(t)&&u.setAttributes(n,t),u.is.string(i)&&(n.textContent=i),n},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,i,n){t.appendChild(u.createElement(e,i,n))},removeElement:function(e){u.is.element(e)&&u.is.element(e.parentNode)&&(u.is.nodeList(e)||u.is.array(e)?Array.from(e).forEach(u.removeElement):e.parentNode.removeChild(e))},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return u.is.element(t)&&u.is.element(t.parentNode)&&u.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){u.is.element(e)&&!u.is.empty(t)&&Object.entries(t).forEach(function(t){var i=c(t,2),n=i[0],s=i[1];e.setAttribute(n,s)})},getAttributesFromSelector:function(e,t){if(!u.is.string(e)||u.is.empty(e))return{};var i={},n=t;return e.split(",").forEach(function(e){var t=e.trim(),s=t.replace(".",""),a=t.replace(/[[\]]/g,"").split("="),l=a[0],r=a.length>1?a[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":u.is.object(n)&&u.is.string(n.class)&&(n.class+=" "+s),i.class=s;break;case"#":i.id=t.replace("#","");break;case"[":i[l]=r}}),i},toggleClass:function(e,t,i){if(u.is.element(e)){var n=e.classList.contains(t);return e.classList[i?"add":"remove"](t),i&&!n||!i&&n}return null},hasClass:function(e,t){return u.is.element(e)&&e.classList.contains(t)},toggleHidden:function(e,t){u.is.element(e)&&(t?e.setAttribute("hidden",""):e.removeAttribute("hidden"))},matches:function(e,t){var i={Element:Element};var n=i.matches||i.webkitMatchesSelector||i.mozMatchesSelector||i.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return n.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},findElements:function(){try{return this.elements.controls=u.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:u.getElements.call(this,this.config.selectors.buttons.play),pause:u.getElement.call(this,this.config.selectors.buttons.pause),restart:u.getElement.call(this,this.config.selectors.buttons.restart),rewind:u.getElement.call(this,this.config.selectors.buttons.rewind),fastForward:u.getElement.call(this,this.config.selectors.buttons.fastForward),mute:u.getElement.call(this,this.config.selectors.buttons.mute),pip:u.getElement.call(this,this.config.selectors.buttons.pip),airplay:u.getElement.call(this,this.config.selectors.buttons.airplay),settings:u.getElement.call(this,this.config.selectors.buttons.settings),captions:u.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:u.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=u.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:u.getElement.call(this,this.config.selectors.inputs.seek),volume:u.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:u.getElement.call(this,this.config.selectors.display.buffer),duration:u.getElement.call(this,this.config.selectors.display.duration),currentTime:u.getElement.call(this,this.config.selectors.display.currentTime)},u.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(u.is.element(e)){var i=u.getElements.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),n=i[0],s=i[i.length-1],a=function(e){if("Tab"===e.key&&9===e.keyCode){var t=u.getFocusElement();t!==s||e.shiftKey?t===n&&e.shiftKey&&(s.focus(),e.preventDefault()):(n.focus(),e.preventDefault())}};t?u.on(this.elements.container,"keydown",a,!1):u.off(this.elements.container,"keydown",a,!1)}},toggleListener:function(e,t,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(!u.is.empty(e)&&!u.is.empty(t)&&u.is.function(i))if(u.is.nodeList(e)||u.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&u.toggleListener.call(null,e,t,i,n,s,a)});else{var l=t.split(" "),r=a;d.passiveListeners&&(r={passive:s,capture:a}),l.forEach(function(t){e[n?"addEventListener":"removeEventListener"](t,i,r)})}},on:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];u.toggleListener(e,t,i,!0,n,s)},off:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];u.toggleListener(e,t,i,!1,n,s)},dispatchEvent:function(e,t,i,n){if(u.is.element(e)&&u.is.string(t)){var s=new CustomEvent(t,{bubbles:!!u.is.boolean(i)&&i,detail:Object.assign({},n,{plyr:u.is.plyr(this)?this:null})});e.dispatchEvent(s)}},toggleState:function(e,t){if(u.is.array(e)||u.is.nodeList(e))Array.from(e).forEach(function(e){return u.toggleState(e,t)});else if(u.is.element(e)){var i="true"===e.getAttribute("aria-pressed"),n=u.is.boolean(t)?t:!i;e.setAttribute("aria-pressed",n)}},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!u.is.number(e))return this.formatTime(null,t,i);var n=function(e){return("0"+e).slice(-2)},s=this.getHours(e),a=this.getMinutes(e),l=this.getSeconds(e);return t||s>0?s+=":":s="",(i?"-":"")+s+n(a)+":"+n(l)},replaceAll:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1"),"g"),i.toString())},toTitleCase:function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString().replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})},toPascalCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=u.replaceAll(e,"-"," "),e=u.replaceAll(e,"_"," "),e=u.toTitleCase(e),u.replaceAll(e," ","")},toCamelCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=u.toPascalCase(e)).charAt(0).toLowerCase()+e.slice(1)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,i=Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];if(!i.length)return e;var s=i.shift();return u.is.object(s)?(Object.keys(s).forEach(function(t){u.is.object(s[t])?(Object.keys(e).includes(t)||Object.assign(e,o({},t,{})),u.extend(e[t],s[t])):Object.assign(e,o({},t,s[t]))}),u.extend.apply(u,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,i=Array(e.length);t<e.length;t++)i[t]=e[t];return i}return Array.from(e)}(i)))):e},getProviderByUrl:function(t){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(t)?e.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{8,}(?=\b|\/)/.test(t)?e.vimeo:null},parseYouTubeId:function(e){if(u.is.empty(e))return null;return e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if(u.is.empty(e))return null;if(u.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement("a");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith("http://")||e.startsWith("https://"))&&(t=this.parseUrl(e).search);return this.is.empty(t)?null:t.slice(t.indexOf("?")+1).split("&").reduce(function(e,t){var i=t.split("="),n=c(i,2),s=n[0],a=n[1];return Object.assign(e,o({},s,decodeURIComponent(a)))},{})},buildUrlParams:function(e){return u.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&"):""},stripHTML:function(e){var t=document.createDocumentFragment(),i=document.createElement("div");return t.appendChild(i),i.innerHTML=e,t.firstChild.innerText},getAspectRatio:function(e,t){var i=function e(t,i){return 0===i?t:e(i,t%i)}(e,t);return e/i+":"+t/i},get transitionEndEvent(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},i=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!u.is.string(i)&&t[i]},repaint:function(e){setTimeout(function(){u.toggleHidden(e,!0),e.offsetHeight,u.toggleHidden(e,!1)},0)}},d={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,i){var n=!1,s=!1,a=u.getBrowser(),l=a.isIPhone&&i&&d.inline;switch(t+":"+e){case"html5:video":s=(n=d.video)&&d.rangeInput&&(!a.isIPhone||l);break;case"html5:audio":s=(n=d.audio)&&d.rangeInput;break;case"youtube:video":case"vimeo:video":n=!0,s=d.rangeInput&&(!a.isIPhone||l);break;default:s=(n=d.audio&&d.video)&&d.rangeInput}return{api:n,ui:s}},pip:!u.getBrowser().isIPhone&&u.is.function(u.createElement("video").webkitSetPresentationMode),airplay:u.is.function(window.WebKitPlaybackTargetAvailabilityEvent),inline:"playsInline"in document.createElement("video"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!u.is.function(t.canPlayType))return!1;if(this.isVideo)switch(e){case"video/webm":return t.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return t.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return t.canPlayType('video/ogg; codecs="theora"').replace(/no/,"");default:return!1}else if(this.isAudio)switch(e){case"audio/mpeg":return t.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return t.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return t.canPlayType('audio/wav; codecs="1"').replace(/no/,"");default:return!1}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t)}catch(e){}return e}(),rangeInput:(s=document.createElement("input"),s.type="range","range"===s.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==u.transitionEndEvent,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},p=function(){},h=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];l(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return r(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):p}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):p}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):p}}]),e}(),m=u.getBrowser();function g(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;u.is.element(e)&&u.toggleState(e,this.active),u.dispatchEvent(this.target,this.active?"enterfullscreen":"exitfullscreen",!0),m.isIos||u.trapFocus.call(this.player,this.target,this.active)}}function f(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",u.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),g.call(this)}var y=function(){function e(t){var i=this;l(this,e),this.player=t,this.prefix=e.prefix,this.name=e.name,this.scrollPosition={x:0,y:0},u.on(document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){g.call(i)}),u.on(this.player.elements.container,"dblclick",function(){i.toggle()}),u.on(this.player.elements.controls,"dblclick",function(e){return e.stopPropagation()}),this.update()}return r(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),u.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(m.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?u.is.empty(this.prefix)||this.target[this.prefix+"Request"+this.name]():this.target.requestFullscreen():f.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(m.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(e.native)if(this.prefix){if(!u.is.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document[""+this.prefix+t+this.name]()}}else document.cancelFullScreen();else f.call(this,!1)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){return(e.native||this.player.config.fullscreen.fallback)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[""+this.prefix+this.name+"Element"]:document.fullscreenElement)===this.target:u.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return m.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if(u.is.function(document.exitFullscreen))return!1;var e="";return["webkit","moz","ms"].some(function(t){return!(!u.is.function(document[t+"ExitFullscreen"])&&!u.is.function(document[t+"CancelFullScreen"]))&&(e=t,!0)}),e}},{key:"name",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}(),v={setup:function(){if(this.supported.ui){var e=this.storage.get("language");if(u.is.empty(e)||(this.captions.language=e),u.is.empty(this.captions.language)&&(this.captions.language=this.config.captions.language.toLowerCase()),!u.is.boolean(this.captions.active)){var t=this.storage.get("captions");u.is.boolean(t)?this.captions.active=t:this.captions.active=this.config.captions.active}if(!this.isVideo||this.isYouTube||this.isHTML5&&!d.textTracks)u.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&E.setCaptionsMenu.call(this);else{u.is.element(this.elements.captions)||(this.elements.captions=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.captions)),u.insertAfter(this.elements.captions,this.elements.wrapper)),u.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!u.is.empty(v.getTracks.call(this)));var i=v.getTracks.call(this);if(!u.is.empty(i)){if(u.getBrowser().isIE&&window.URL){var n=this.media.querySelectorAll("track");Array.from(n).forEach(function(e){var t=e.getAttribute("src"),i=u.parseUrl(t);i.hostname!==window.location.href.hostname&&["http:","https:"].includes(i.protocol)&&u.fetch(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){u.removeElement(e)})})}v.setLanguage.call(this),v.show.call(this),u.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&E.setCaptionsMenu.call(this)}}}},setLanguage:function(){var e=this;if(this.isHTML5&&this.isVideo){v.getTracks.call(this).forEach(function(t){u.on(t,"cuechange",function(t){return v.setCue.call(e,t)}),t.mode="hidden"});var t=v.getCurrentTrack.call(this);u.is.track(t)&&Array.from(t.activeCues||[]).length&&v.setCue.call(this,t)}else this.isVimeo&&this.captions.active&&this.embed.enableTextTrack(this.language)},getTracks:function(){return u.is.nullOrUndefined(this.media)?[]:Array.from(this.media.textTracks||[]).filter(function(e){return["captions","subtitles"].includes(e.kind)})},getCurrentTrack:function(){var e=this;return v.getTracks.call(this).find(function(t){return t.language.toLowerCase()===e.language})},setCue:function(e){var t=u.is.event(e)?e.target:e,i=t.activeCues,n=i.length&&i[0];t===v.getCurrentTrack.call(this)&&(u.is.cue(n)?v.setText.call(this,n.getCueAsHTML()):v.setText.call(this,null),u.dispatchEvent.call(this,this.media,"cuechange"))},setText:function(e){if(this.supported.ui)if(u.is.element(this.elements.captions)){var t=u.createElement("span");u.emptyElement(this.elements.captions);var i=u.is.nullOrUndefined(e)?"":e;u.is.string(i)?t.textContent=i.trim():t.appendChild(i),this.elements.captions.appendChild(t)}else this.debug.warn("No captions element to render to")},show:function(){if(u.is.element(this.elements.buttons.captions)){var e=this.storage.get("captions");u.is.boolean(e)?this.captions.active=e:e=this.config.captions.active,e&&(u.toggleClass(this.elements.container,this.config.classNames.captions.active,!0),u.toggleState(this.elements.buttons.captions,!0))}}},b=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(u.is.empty(e)||u.is.empty(t)||!Object.keys(t.i18n).includes(e))return"";var i=t.i18n[e],n={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(n).forEach(function(e){var t=c(e,2),n=t[0],s=t[1];i=u.replaceAll(i,n,s)}),i},k={addStyleHook:function(){u.toggleClass(this.elements.container,this.config.selectors.container.replace(".",""),!0),u.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void k.toggleNativeControls.call(this,!0);u.is.element(this.elements.controls)||(E.inject.call(this),this.listeners.controls()),u.is.element(this.elements.controls)&&(k.toggleNativeControls.call(this),v.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.options.quality=[],k.timeUpdate.call(this),k.checkPlaying.call(this),this.ready=!0,setTimeout(function(){u.dispatchEvent.call(e,e.media,"ready")},0),k.setTitle.call(this))},setTitle:function(){var e=b("play",this.config);if(u.is.string(this.config.title)&&!u.is.empty(this.config.title)&&(e+=", "+this.config.title,this.elements.container.setAttribute("aria-label",this.config.title)),u.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=u.getElement.call(this,"iframe");if(!u.is.element(t))return;u.is.empty(this.config.title)||this.config.title;t.setAttribute("title",b("frameTitle",this.config))}},checkPlaying:function(){u.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),u.toggleClass(this.elements.container,this.config.classNames.stopped,this.paused),u.toggleState(this.elements.buttons.play,this.playing),this.toggleControls(!this.playing)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){u.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),t.toggleControls(t.loading)},this.loading?250:0)},checkFailed:function(){var e=this;this.failed=3===this.media.networkState,this.failed&&(u.toggleClass(this.elements.container,this.config.classNames.loading,!1),u.toggleClass(this.elements.container,this.config.classNames.error,!0)),clearTimeout(this.timers.failed),this.timers.loading=setTimeout(function(){u.toggleClass(e.elements.container,e.config.classNames.loading,e.loading),e.toggleControls(e.loading)},this.loading?250:0)},updateVolume:function(){this.supported.ui&&(u.is.element(this.elements.inputs.volume)&&k.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),u.is.element(this.elements.buttons.mute)&&u.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;u.is.element(e)&&(e.value=t,E.updateRangeFill.call(this,e))},setProgress:function(e,t){var i=u.is.number(t)?t:0,n=u.is.element(e)?e:this.elements.display.buffer;if(u.is.element(n)){n.value=i;var s=n.getElementsByTagName("span")[0];u.is.element(s)&&(s.childNodes[0].nodeValue=i)}},updateProgress:function(e){if(this.supported.ui&&u.is.event(e)){var t=0;if(e)switch(e.type){case"timeupdate":case"seeking":t=u.getPercentage(this.currentTime,this.duration),"timeupdate"===e.type&&k.setRange.call(this,this.elements.inputs.seek,t);break;case"playing":case"progress":k.setProgress.call(this,this.elements.display.buffer,100*this.buffered)}}},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(u.is.element(e)&&u.is.number(t)){var n=u.getHours(this.duration)>0;e.textContent=u.formatTime(t,n,i)}},timeUpdate:function(e){var t=!u.is.element(this.elements.display.duration)&&this.config.invertTime;k.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||k.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui){var e=u.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&k.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&k.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),E.updateSeekTooltip.call(this)}}},w=u.getBrowser(),E={updateRangeFill:function(e){if(w.isWebkit){var t=u.is.event(e)?e.target:e;u.is.element(t)&&"range"===t.getAttribute("type")&&t.style.setProperty("--value",t.value/t.max*100+"%")}},getIconUrl:function(){return{url:this.config.iconUrl,absolute:0===this.config.iconUrl.indexOf("http")||w.isIE&&!window.svg4everybody}},createIcon:function(e,t){var i=E.getIconUrl.call(this),n=(i.absolute?"":i.url)+"#"+this.config.iconPrefix,s=document.createElementNS("http://www.w3.org/2000/svg","svg");u.setAttributes(s,u.extend(t,{role:"presentation"}));var a=document.createElementNS("http://www.w3.org/2000/svg","use"),l=n+"-"+e;return"href"in a?a.setAttributeNS("http://www.w3.org/1999/xlink","href",l):a.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",l),s.appendChild(a),s},createLabel:function(e,t){var i=b(e,this.config),n=Object.assign({},t);switch(e){case"pip":i="PIP";break;case"airplay":i="AirPlay"}return"class"in n?n.class+=" "+this.config.classNames.hidden:n.class=this.config.classNames.hidden,u.createElement("span",n,i)},createBadge:function(e){if(u.is.empty(e))return null;var t=u.createElement("span",{class:this.config.classNames.menu.value});return t.appendChild(u.createElement("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var i=u.createElement("button"),n=Object.assign({},t),s=u.toCamelCase(e),a=!1,l=void 0,r=void 0,o=void 0,c=void 0;switch("type"in n||(n.type="button"),"class"in n?n.class.includes(this.config.classNames.control)&&(n.class+=" "+this.config.classNames.control):n.class=this.config.classNames.control,e){case"play":a=!0,l="play",o="pause",r="play",c="pause";break;case"mute":a=!0,l="mute",o="unmute",r="volume",c="muted";break;case"captions":a=!0,l="enableCaptions",o="disableCaptions",r="captions-off",c="captions-on";break;case"fullscreen":a=!0,l="enterFullscreen",o="exitFullscreen",r="enter-fullscreen",c="exit-fullscreen";break;case"play-large":n.class+=" "+this.config.classNames.control+"--overlaid",s="play",l="play",r="play";break;default:l=s,r=e}return a?(i.appendChild(E.createIcon.call(this,c,{class:"icon--pressed"})),i.appendChild(E.createIcon.call(this,r,{class:"icon--not-pressed"})),i.appendChild(E.createLabel.call(this,o,{class:"label--pressed"})),i.appendChild(E.createLabel.call(this,l,{class:"label--not-pressed"})),n["aria-pressed"]=!1,n["aria-label"]=b(l,this.config)):(i.appendChild(E.createIcon.call(this,r)),i.appendChild(E.createLabel.call(this,l))),u.extend(n,u.getAttributesFromSelector(this.config.selectors.buttons[s],n)),u.setAttributes(i,n),"play"===s?(u.is.array(this.elements.buttons[s])||(this.elements.buttons[s]=[]),this.elements.buttons[s].push(i)):this.elements.buttons[s]=i,i},createRange:function(e,t){var i=u.createElement("label",{for:t.id,class:this.config.classNames.hidden},b(e,this.config)),n=u.createElement("input",u.extend(u.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off"},t));return this.elements.inputs[e]=n,E.updateRangeFill.call(this,n),{label:i,input:n}},createProgress:function(e,t){var i=u.createElement("progress",u.extend(u.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0},t));if("volume"!==e){i.appendChild(u.createElement("span",null,"0"));var n="";switch(e){case"played":n=b("played",this.config);break;case"buffer":n=b("buffered",this.config)}i.textContent="% "+n.toLowerCase()}return this.elements.display[e]=i,i},createTime:function(e){var t=u.createElement("div",{class:"plyr__time"});return t.appendChild(u.createElement("span",{class:this.config.classNames.hidden},b(e,this.config))),t.appendChild(u.createElement("span",u.getAttributesFromSelector(this.config.selectors.display[e]),"00:00")),this.elements.display[e]=t,t},createMenuItem:function(e,t,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,a=arguments.length>5&&void 0!==arguments[5]&&arguments[5],l=u.createElement("li"),r=u.createElement("label",{class:this.config.classNames.control}),o=u.createElement("input",u.extend(u.getAttributesFromSelector(this.config.selectors.inputs[i]),{type:"radio",name:"plyr-"+i,value:e,checked:a,class:"plyr__sr-only"})),c=u.createElement("span",{"aria-hidden":!0});r.appendChild(o),r.appendChild(c),r.insertAdjacentHTML("beforeend",n),u.is.element(s)&&r.appendChild(s),l.appendChild(r),t.appendChild(l)},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&u.is.element(this.elements.inputs.seek)&&u.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var i=0,n=this.elements.inputs.seek.getBoundingClientRect(),s=this.config.classNames.tooltip+"--visible",a=function(e){u.toggleClass(t.elements.display.seekTooltip,s,e)};if(this.touch)a(!1);else{if(u.is.event(e))i=100/n.width*(e.pageX-n.left);else{if(!u.hasClass(this.elements.display.seekTooltip,s))return;i=parseFloat(this.elements.display.seekTooltip.style.left,10)}i<0?i=0:i>100&&(i=100),k.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*i),this.elements.display.seekTooltip.style.left=i+"%",u.is.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&a("mouseenter"===e.type)}}},toggleTab:function(e,t){var i=this.elements.settings.tabs[e],n=this.elements.settings.panes[e];u.toggleHidden(i,!t),u.toggleHidden(n,!t)},setQualityMenu:function(e){var t=this;if(u.is.element(this.elements.settings.panes.quality)){var i=this.elements.settings.panes.quality.querySelector("ul");u.is.array(e)?this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}):this.options.quality=this.config.quality.options;var n=!u.is.empty(this.options.quality)&&this.isYouTube;if(E.toggleTab.call(this,"quality",n),n){u.emptyElement(i);this.options.quality.forEach(function(e){return E.createMenuItem.call(t,e,i,"quality",E.getLabel.call(t,"quality",e),function(e){var i="";switch(e){case"hd2160":i="4K";break;case"hd1440":i="WQHD";break;case"hd1080":case"hd720":i="HD"}return i.length?E.createBadge.call(t,i):null}(e))}),E.updateSetting.call(this,"quality",i)}}},getLabel:function(e,t){switch(e){case"speed":return 1===t?"Normal":t+"&times;";case"quality":switch(t){case"hd2160":return"2160P";case"hd1440":return"1440P";case"hd1080":return"1080P";case"hd720":return"720P";case"large":return"480P";case"medium":return"360P";case"small":return"240P";case"tiny":return"Tiny";case"default":return"Auto";default:return t}case"captions":return E.getLanguage.call(this);default:return null}},updateSetting:function(e,t){var i=this.elements.settings.panes[e],n=null,s=t;switch(e){case"captions":n=this.captions.active?this.captions.language:b("disabled",this.config);break;default:if(n=this[e],u.is.empty(n)&&(n=this.config[e].default),!this.options[e].includes(n))return void this.debug.warn("Unsupported value of '"+n+"' for "+e);if(!this.config[e].options.includes(n))return void this.debug.warn("Disabled value of '"+n+"' for "+e)}(u.is.element(s)||(s=i&&i.querySelector("ul")),u.is.empty(n))||(this.elements.settings.tabs[e].querySelector("."+this.config.classNames.menu.value).innerHTML=E.getLabel.call(this,e,n));var a=s&&s.querySelector('input[value="'+n+'"]');u.is.element(a)&&(a.checked=!0)},getLanguage:function(){if(!this.supported.ui)return null;if(d.textTracks&&v.getTracks.call(this).length&&this.captions.active){var e=v.getCurrentTrack.call(this);if(u.is.track(e))return e.label}return b("disabled",this.config)},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector("ul"),i=v.getTracks.call(this).length;if(E.toggleTab.call(this,"captions",i),u.emptyElement(t),i){var n=v.getTracks.call(this).map(function(e){return{language:e.language,label:u.is.empty(e.label)?e.language.toUpperCase():e.label}});n.unshift({language:"",label:b("disabled",this.config)}),n.forEach(function(i){E.createMenuItem.call(e,i.language,t,"language",i.label||i.language,E.createBadge.call(e,i.language.toUpperCase()),i.language.toLowerCase()===e.captions.language.toLowerCase())}),E.updateSetting.call(this,"captions",t)}},setSpeedMenu:function(){var e=this;if(u.is.element(this.elements.settings.panes.speed)){u.is.array(this.options.speed)&&this.options.speed.length||(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(t){return e.config.speed.options.includes(t)});var t=!u.is.empty(this.options.speed);if(E.toggleTab.call(this,"speed",t),t){var i=this.elements.settings.panes.speed.querySelector("ul");u.toggleHidden(this.elements.settings.tabs.speed,!1),u.toggleHidden(this.elements.settings.panes.speed,!1),u.emptyElement(i),this.options.speed.forEach(function(t){return E.createMenuItem.call(e,t,i,"speed",E.getLabel.call(e,"speed",t))}),E.updateSetting.call(this,"speed",i)}}},toggleMenu:function(e){var t=this.elements.settings.form,i=this.elements.buttons.settings;if(u.is.element(t)&&u.is.element(i)){var n=u.is.boolean(e)?e:u.is.element(t)&&"true"===t.getAttribute("aria-hidden");if(u.is.event(e)){var s=u.is.element(t)&&t.contains(e.target),a=e.target===this.elements.buttons.settings;if(s||!s&&!a&&n)return;a&&e.stopPropagation()}u.is.element(i)&&i.setAttribute("aria-expanded",n),u.is.element(t)&&(t.setAttribute("aria-hidden",!n),u.toggleClass(this.elements.container,this.config.classNames.menu.open,n),n?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1))}},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.setAttribute("aria-hidden",!1),Array.from(t.querySelectorAll("input[name]")).forEach(function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(t);var i=t.scrollWidth,n=t.scrollHeight;return u.removeElement(t),{width:i,height:n}},showTab:function(e){var t=this.elements.settings.menu,i=e.target,n="false"===i.getAttribute("aria-expanded"),s=document.getElementById(i.getAttribute("aria-controls"));if(u.is.element(s)&&"tabpanel"===s.getAttribute("role")){var a=t.querySelector('[role="tabpanel"][aria-hidden="false"]'),l=a.parentNode;if(Array.from(t.querySelectorAll('[aria-controls="'+a.getAttribute("id")+'"]')).forEach(function(e){e.setAttribute("aria-expanded",!1)}),d.transitions&&!d.reducedMotion){l.style.width=a.scrollWidth+"px",l.style.height=a.scrollHeight+"px";var r=E.getTabSize.call(this,s);u.on(l,u.transitionEndEvent,function e(t){t.target===l&&["width","height"].includes(t.propertyName)&&(l.style.width="",l.style.height="",u.off(l,u.transitionEndEvent,e))}),l.style.width=r.width+"px",l.style.height=r.height+"px"}a.setAttribute("aria-hidden",!0),a.setAttribute("tabindex",-1),s.setAttribute("aria-hidden",!n),i.setAttribute("aria-expanded",n),s.removeAttribute("tabindex"),s.querySelectorAll("button:not(:disabled), input:not(:disabled), [tabindex]")[0].focus()}},create:function(e){var t=this;if(u.is.empty(this.config.controls))return null;var i=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&i.appendChild(E.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&i.appendChild(E.createButton.call(this,"rewind")),this.config.controls.includes("play")&&i.appendChild(E.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&i.appendChild(E.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var n=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.progress)),s=E.createRange.call(this,"seek",{id:"plyr-seek-"+e.id});if(n.appendChild(s.label),n.appendChild(s.input),n.appendChild(E.createProgress.call(this,"buffer")),this.config.tooltips.seek){var a=u.createElement("span",{role:"tooltip",class:this.config.classNames.tooltip},"00:00");n.appendChild(a),this.elements.display.seekTooltip=a}this.elements.progress=n,i.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&i.appendChild(E.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&i.appendChild(E.createTime.call(this,"duration")),this.config.controls.includes("mute")&&i.appendChild(E.createButton.call(this,"mute")),this.config.controls.includes("volume")){var l=u.createElement("div",{class:"plyr__volume"}),r={max:1,step:.05,value:this.config.volume},o=E.createRange.call(this,"volume",u.extend(r,{id:"plyr-volume-"+e.id}));l.appendChild(o.label),l.appendChild(o.input),this.elements.volume=l,i.appendChild(l)}if(this.config.controls.includes("captions")&&i.appendChild(E.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!u.is.empty(this.config.settings)){var c=u.createElement("div",{class:"plyr__menu"});c.appendChild(E.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var p=u.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),h=u.createElement("div"),m=u.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-hidden":!1,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),g=u.createElement("ul",{role:"tablist"});this.config.settings.forEach(function(i){var n=u.createElement("li",{role:"tab",hidden:""}),s=u.createElement("button",u.extend(u.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+i+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+i,"aria-expanded":!1}),b(i,t.config)),a=u.createElement("span",{class:t.config.classNames.menu.value});a.innerHTML=e[i],s.appendChild(a),n.appendChild(s),g.appendChild(n),t.elements.settings.tabs[i]=n}),m.appendChild(g),h.appendChild(m),this.config.settings.forEach(function(i){var n=u.createElement("div",{id:"plyr-settings-"+e.id+"-"+i,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-"+e.id+"-"+i+"-tab",role:"tabpanel",tabindex:-1,hidden:""}),s=u.createElement("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},b(i,t.config));n.appendChild(s);var a=u.createElement("ul");n.appendChild(a),h.appendChild(n),t.elements.settings.panes[i]=n}),p.appendChild(h),c.appendChild(p),i.appendChild(c),this.elements.settings.form=p,this.elements.settings.menu=c}return this.config.controls.includes("pip")&&d.pip&&i.appendChild(E.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&d.airplay&&i.appendChild(E.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&i.appendChild(E.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(E.createButton.call(this,"play-large")),this.elements.controls=i,this.config.controls.includes("settings")&&this.config.settings.includes("speed")&&E.setSpeedMenu.call(this),i},inject:function(){var e=this;if(this.config.loadSprite){var t=E.getIconUrl.call(this);t.absolute&&u.loadSprite(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var i=null;this.elements.controls=null,i=u.is.string(this.config.controls)||u.is.element(this.config.controls)?this.config.controls:u.is.function(this.config.controls)?this.config.controls({id:this.id,seektime:this.config.seekTime,title:this.config.title}):E.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:E.getLanguage.call(this)});var n=void 0;if(u.is.string(this.config.selectors.controls.container)&&(n=document.querySelector(this.config.selectors.controls.container)),u.is.element(n)||(n=this.elements.container),u.is.element(i)?n.appendChild(i):n.insertAdjacentHTML("beforeend",i),u.is.element(this.elements.controls)||u.findElements.call(this),window.navigator.userAgent.includes("Edge")&&u.repaint(n),this.config.tooltips.controls){var s=u.getElements.call(this,[this.config.selectors.controls.wrapper," ",this.config.selectors.labels," .",this.config.classNames.hidden].join(""));Array.from(s).forEach(function(t){u.toggleClass(t,e.config.classNames.hidden,!1),u.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute("role","tooltip")})}}},T=u.getBrowser(),C=function(){function e(t){l(this,e),this.player=t,this.lastKey=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.firstTouch=this.firstTouch.bind(this)}return r(e,[{key:"handleKey",value:function(e){var t=this,i=e.keyCode?e.keyCode:e.which,n="keydown"===e.type,s=n&&i===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&u.is.number(i)){if(n){var a=u.getFocusElement();if(u.is.element(a)&&u.matches(a,this.player.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(i)&&(e.preventDefault(),e.stopPropagation()),i){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:s||(t.player.currentTime=t.player.duration/10*(i-48));break;case 32:case 75:s||this.player.togglePlay();break;case 38:this.player.increaseVolume(.1);break;case 40:this.player.decreaseVolume(.1);break;case 77:s||(this.player.muted=!this.player.muted);break;case 39:this.player.fastForward();break;case 37:this.player.rewind();break;case 70:this.player.fullscreen.toggle();break;case 67:s||this.player.toggleCaptions();break;case 76:this.player.loop=!this.player.loop}!this.player.fullscreen.enabled&&this.player.fullscreen.active&&27===i&&this.player.fullscreen.toggle(),this.lastKey=i}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){E.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){this.player.touch=!0,u.toggleClass(this.player.elements.container,this.player.config.classNames.isTouch,!0),u.off(document.body,"touchstart",this.firstTouch)}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.player.config.keyboard.global&&u.toggleListener(window,"keydown keyup",this.handleKey,e,!1),u.toggleListener(document.body,"click",this.toggleMenu,e),u.on(document.body,"touchstart",this.firstTouch)}},{key:"container",value:function(){var e=this;!this.player.config.keyboard.global&&this.player.config.keyboard.focused&&u.on(this.player.elements.container,"keydown keyup",this.handleKey,!1),u.on(this.player.elements.container,"focusout",function(t){u.toggleClass(t.target,e.player.config.classNames.tabFocus,!1)}),u.on(this.player.elements.container,"keydown",function(t){9===t.keyCode&&setTimeout(function(){u.toggleClass(u.getFocusElement(),e.player.config.classNames.tabFocus,!0)},0)}),this.player.config.hideControls&&u.on(this.player.elements.container,"mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen",function(t){e.player.toggleControls(t)})}},{key:"media",value:function(){var e=this;if(u.on(this.player.media,"timeupdate seeking",function(t){return k.timeUpdate.call(e.player,t)}),u.on(this.player.media,"durationchange loadedmetadata",function(t){return k.durationUpdate.call(e.player,t)}),u.on(this.player.media,"loadeddata",function(){u.toggleHidden(e.player.elements.volume,!e.player.hasAudio),u.toggleHidden(e.player.elements.buttons.mute,!e.player.hasAudio)}),u.on(this.player.media,"ended",function(){e.player.isHTML5&&e.player.isVideo&&e.player.config.showPosterOnEnd&&(e.player.restart(),e.player.media.load())}),u.on(this.player.media,"progress playing",function(t){return k.updateProgress.call(e.player,t)}),u.on(this.player.media,"volumechange",function(t){return k.updateVolume.call(e.player,t)}),u.on(this.player.media,"playing play pause ended emptied",function(t){return k.checkPlaying.call(e.player,t)}),u.on(this.player.media,"waiting canplay seeked playing",function(t){return k.checkLoading.call(e.player,t)}),this.player.supported.ui&&this.player.config.clickToPlay&&!this.player.isAudio){var t=u.getElement.call(this.player,"."+this.player.config.classNames.video);if(!u.is.element(t))return;u.on(t,"click",function(){e.player.config.hideControls&&e.player.touch&&!e.player.paused||(e.player.paused?e.player.play():e.player.ended?(e.player.restart(),e.player.play()):e.player.pause())})}this.player.supported.ui&&this.player.config.disableContextMenu&&u.on(this.player.media,"contextmenu",function(e){e.preventDefault()},!1),u.on(this.player.media,"volumechange",function(){e.player.storage.set({volume:e.player.volume,muted:e.player.muted})}),u.on(this.player.media,"ratechange",function(){E.updateSetting.call(e.player,"speed"),e.player.storage.set({speed:e.player.speed})}),u.on(this.player.media,"qualitychange",function(){E.updateSetting.call(e.player,"quality"),e.player.storage.set({quality:e.player.quality})}),u.on(this.player.media,"languagechange",function(){E.updateSetting.call(e.player,"captions"),e.player.storage.set({language:e.player.language})}),u.on(this.player.media,"captionsenabled captionsdisabled",function(){E.updateSetting.call(e.player,"captions"),e.player.storage.set({captions:e.player.captions.active})}),u.on(this.player.media,this.player.config.events.concat(["keyup","keydown"]).join(" "),function(t){var i={};"error"===t.type&&(i=e.player.media.error),u.dispatchEvent.call(e.player,e.player.elements.container,t.type,!0,i)})}},{key:"controls",value:function(){var e=this,t=T.isIE?"change":"input",i=function(t,i,n){var s=e.player.config.listeners[n],a=!0;u.is.function(s)&&(a=s.call(e.player,t)),a&&u.is.function(i)&&i.call(e.player,t)},n=function(t,n,s,a){var l=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],r=e.player.config.listeners[a],o=u.is.function(r);u.on(t,n,function(e){return i(e,s,a)},l&&!o)};n(this.player.elements.buttons.play,"click",this.player.togglePlay,"play"),n(this.player.elements.buttons.restart,"click",this.player.restart,"restart"),n(this.player.elements.buttons.rewind,"click",this.player.rewind,"rewind"),n(this.player.elements.buttons.fastForward,"click",this.player.forward,"fastForward"),n(this.player.elements.buttons.mute,"click",function(){e.player.muted=!e.player.muted},"mute"),n(this.player.elements.buttons.captions,"click",this.player.toggleCaptions),n(this.player.elements.buttons.fullscreen,"click",function(){e.player.fullscreen.toggle()},"fullscreen"),n(this.player.elements.buttons.pip,"click",function(){e.player.pip="toggle"},"pip"),n(this.player.elements.buttons.airplay,"click",this.player.airplay,"airplay"),n(this.player.elements.buttons.settings,"click",function(t){E.toggleMenu.call(e.player,t)}),n(this.player.elements.settings.form,"click",function(t){t.stopPropagation(),u.matches(t.target,e.player.config.selectors.inputs.language)?i(t,function(){e.player.language=t.target.value},"language"):u.matches(t.target,e.player.config.selectors.inputs.quality)?i(t,function(){e.player.quality=t.target.value},"quality"):u.matches(t.target,e.player.config.selectors.inputs.speed)?i(t,function(){e.player.speed=parseFloat(t.target.value)},"speed"):E.showTab.call(e.player,t)}),n(this.player.elements.inputs.seek,t,function(t){e.player.currentTime=t.target.value/t.target.max*e.player.duration},"seek"),this.player.config.toggleInvert&&!u.is.element(this.player.elements.display.duration)&&n(this.player.elements.display.currentTime,"click",function(){0!==e.player.currentTime&&(e.player.config.invertTime=!e.player.config.invertTime,k.timeUpdate.call(e.player))}),n(this.player.elements.inputs.volume,t,function(t){e.player.volume=t.target.value},"volume"),T.isWebkit&&n(u.getElements.call(this.player,'input[type="range"]'),"input",function(t){E.updateRangeFill.call(e.player,t.target)}),n(this.player.elements.progress,"mouseenter mouseleave mousemove",function(t){return E.updateSeekTooltip.call(e.player,t)}),this.player.config.hideControls&&(n(this.player.elements.controls,"mouseenter mouseleave",function(t){e.player.elements.controls.hover=!e.player.touch&&"mouseenter"===t.type}),n(this.player.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.player.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),n(this.player.elements.controls,"focusin focusout",function(t){e.player.toggleControls(t)})),n(this.player.elements.inputs.volume,"wheel",function(t){var i=t.webkitDirectionInvertedFromDevice,n=0;(t.deltaY<0||t.deltaX>0)&&(i?(e.player.decreaseVolume(.02),n=-1):(e.player.increaseVolume(.02),n=1)),(t.deltaY>0||t.deltaX<0)&&(i?(e.player.increaseVolume(.02),n=1):(e.player.decreaseVolume(.02),n=-1)),(1===n&&e.player.media.volume<1||-1===n&&e.player.media.volume>0)&&t.preventDefault()},"volume",!1)}},{key:"clear",value:function(){this.global(!1)}}]),e}(),A=function(){function e(t){l(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return r(e,[{key:"get",value:function(t){if(!e.supported)return null;var i=window.localStorage.getItem(this.key);if(u.is.empty(i))return null;var n=JSON.parse(i);return u.is.string(t)&&t.length?n[t]:n}},{key:"set",value:function(t){if(e.supported&&this.enabled&&u.is.object(t)){var i=this.get();u.is.empty(i)&&(i={}),u.extend(i,t),window.localStorage.setItem(this.key,JSON.stringify(i))}}}],[{key:"supported",get:function(){try{if(!("localStorage"in window))return!1;return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}(),S=function(){function e(t){var i=this;l(this,e),this.player=t,this.publisherId=t.config.ads.publisherId,this.enabled=t.isHTML5&&t.isVideo&&t.config.ads.enabled&&u.is.string(this.publisherId)&&this.publisherId.length,this.playing=!1,this.initialized=!1,this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.managerPromise=new Promise(function(e,t){i.on("loaded",e),i.on("error",t)}),this.load()}return r(e,[{key:"load",value:function(){var e=this;this.enabled&&(u.is.object(window.google)&&u.is.object(window.google.ima)?this.ready():u.loadScript(this.player.config.urls.googleIMA.api).then(function(){e.ready()}).catch(function(){e.trigger("error",new Error("Google IMA SDK failed to load"))}))}},{key:"ready",value:function(){var e=this;this.startSafetyTimer(12e3,"ready()"),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.listeners(),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=u.createElement("div",{class:this.player.config.classNames.ads}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:"requestAds",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var i=new google.ima.AdsRequest;i.adTagUrl=this.tagUrl,i.linearAdSlotWidth=t.offsetWidth,i.linearAdSlotHeight=t.offsetHeight,i.nonLinearAdSlotWidth=t.offsetWidth,i.nonLinearAdSlotHeight=t.offsetHeight,i.forceNonLinearFullSlot=!1,this.loader.requestAds(i)}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=setInterval(function(){var t=u.formatTime(Math.max(e.manager.getRemainingTime(),0)),i=b("advertisement",e.player.config)+" - "+t;e.elements.container.setAttribute("data-badge-text",i)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,i=new google.ima.AdsRenderingSettings;i.restoreCustomPlaybackStateOnAdBreakComplete=!0,i.enablePreloading=!0,this.manager=e.getAdsManager(this.player,i),this.cuePoints=this.manager.getCuePoints(),this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var i=t.player.elements.progress;if(i){var n=100/t.player.duration*e,s=u.createElement("span",{class:t.player.config.classNames.cues});s.style.left=n.toString()+"%",i.appendChild(s)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.trigger("loaded")}},{key:"onAdEvent",value:function(e){var t=this,i=this.player.elements.container,n=e.getAd(),s=function(e){var i="ads"+e.replace(/_/g,"").toLowerCase();u.dispatchEvent.call(t.player,t.player.media,i)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.trigger("loaded"),s(e.type),this.pollCountdown(!0),n.isLinear()||(n.width=i.offsetWidth,n.height=i.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:s(e.type),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:s(e.type),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:s(e.type),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:case google.ima.AdEvent.Type.MIDPOINT:case google.ima.AdEvent.Type.COMPLETE:case google.ima.AdEvent.Type.IMPRESSION:case google.ima.AdEvent.Type.CLICK:s(e.type)}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.warn("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,i=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return i=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;e.cuePoints.forEach(function(n,s){i<n&&n<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(s,1))})}),window.addEventListener("resize",function(){e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.resumeContent(),this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}}).catch(function(){})}},{key:"resumeContent",value:function(){this.elements.container.style.zIndex="",this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){this.elements.container.style.zIndex=3,this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.trigger("error"),this.loadAds()}},{key:"loadAds",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on("loaded",t),e.player.debug.log(e.manager)}),e.requestAds()}).catch(function(){})}},{key:"trigger",value:function(e){for(var t=this,i=arguments.length,n=Array(i>1?i-1:0),s=1;s<i;s++)n[s-1]=arguments[s];var a=this.events[e];u.is.array(a)&&a.forEach(function(e){u.is.function(e)&&e.apply(t,n)})}},{key:"on",value:function(e,t){return u.is.array(this.events[e])||(this.events[e]=[]),this.events[e].push(t),this}},{key:"startSafetyTimer",value:function(e,t){var i=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=setTimeout(function(){i.cancel(),i.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){u.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:"tagUrl",get:function(){var e={AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId};return"https://go.aniview.com/api/adserver6/vast/?"+u.buildUrlParams(e)}}]),e}(),P={setup:function(){var e=this;u.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),P.setAspectRatio.call(this),u.is.object(window.YT)&&u.is.function(window.YT.Player)?P.ready.call(this):(u.loadScript(this.config.urls.youtube.api).catch(function(t){e.debug.warn("YouTube API failed to load",t)}),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){P.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(u.is.function(this.embed.getVideoData)){var i=this.embed.getVideoData().title;if(u.is.empty(i))return this.config.title=i,void k.setTitle.call(this)}var n=this.config.keys.google;if(u.is.string(n)&&!u.is.empty(n)){var s="https://www.googleapis.com/youtube/v3/videos?id="+e+"&key="+n+"&fields=items(snippet(title))&part=snippet";u.fetch(s).then(function(e){u.is.object(e)&&(t.config.title=e.items[0].snippet.title,k.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(u.is.empty(t)||!t.startsWith("youtube-")){var i=e.media.getAttribute("src");u.is.empty(i)&&(i=e.media.getAttribute(this.config.attributes.embed.id));var n=u.parseYouTubeId(i),s=u.generateId(e.provider),a=u.createElement("div",{id:s});e.media=u.replaceElement(a,e.media),e.embed=new window.YT.Player(s,{videoId:n,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!u.is.object(e.media.error)){var i={code:t.data};switch(t.data){case 2:i.message="The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.";break;case 5:i.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";break;case 100:i.message="The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.";break;case 101:case 150:i.message="The owner of the requested video does not allow it to be played in embedded players.";break;default:i.message="An unknown error occured"}e.media.error=i,u.dispatchEvent.call(e,e.media,"error")}},onPlaybackQualityChange:function(t){var i=t.target;e.media.quality=i.getPlaybackQuality(),u.dispatchEvent.call(e,e.media,"qualitychange")},onPlaybackRateChange:function(t){var i=t.target;e.media.playbackRate=i.getPlaybackRate(),u.dispatchEvent.call(e,e.media,"ratechange")},onReady:function(t){var i=t.target;P.getTitle.call(e,n),e.media.play=function(){i.playVideo()},e.media.pause=function(){i.pauseVideo()},e.media.stop=function(){i.stopVideo()},e.media.duration=i.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(i.getCurrentTime())},set:function(t){e.media.seeking=!0,u.dispatchEvent.call(e,e.media,"seeking"),i.seekTo(t)}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return i.getPlaybackRate()},set:function(e){i.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return i.getPlaybackQuality()},set:function(t){u.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:t}),i.setPlaybackQuality(t)}});var s=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return s},set:function(t){s=t,i.setVolume(100*s),u.dispatchEvent.call(e,e.media,"volumechange")}});var a=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return a},set:function(t){var n=u.is.boolean(t)?t:a;a=n,i[n?"mute":"unMute"](),u.dispatchEvent.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return i.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=i.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),u.dispatchEvent.call(e,e.media,"timeupdate"),u.dispatchEvent.call(e,e.media,"durationchange"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval(function(){e.media.buffered=i.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&u.dispatchEvent.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),u.dispatchEvent.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return k.build.call(e)},50)},onStateChange:function(t){var i=t.target;switch(clearInterval(e.timers.playing),t.data){case-1:u.dispatchEvent.call(e,e.media,"timeupdate"),e.media.buffered=i.getVideoLoadedFraction(),u.dispatchEvent.call(e,e.media,"progress");break;case 0:e.media.paused=!0,e.media.loop?(i.stopVideo(),i.playVideo()):u.dispatchEvent.call(e,e.media,"ended");break;case 1:e.media.seeking&&u.dispatchEvent.call(e,e.media,"seeked"),e.media.seeking=!1,e.media.paused&&u.dispatchEvent.call(e,e.media,"play"),e.media.paused=!1,u.dispatchEvent.call(e,e.media,"playing"),e.timers.playing=setInterval(function(){u.dispatchEvent.call(e,e.media,"timeupdate")},50),e.media.duration!==i.getDuration()&&(e.media.duration=i.getDuration(),u.dispatchEvent.call(e,e.media,"durationchange")),E.setQualityMenu.call(e,i.getAvailableQualityLevels());break;case 2:e.media.paused=!0,u.dispatchEvent.call(e,e.media,"pause")}u.dispatchEvent.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},N={setup:function(){var e=this;u.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),N.setAspectRatio.call(this),u.is.object(window.Vimeo)?N.ready.call(this):u.loadScript(this.config.urls.vimeo.api).then(function(){N.ready.call(e)}).catch(function(t){e.debug.warn("Vimeo API failed to load",t)})},setAspectRatio:function(e){var t=u.is.string(e)?e.split(":"):this.config.ratio.split(":"),i=100/t[0]*t[1],n=(240-i)/4.8;this.elements.wrapper.style.paddingBottom=i+"%",this.media.style.transform="translateY(-"+n+"%)"},ready:function(){var e=this,t=this,i={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media"},n=u.buildUrlParams(i),s=t.media.getAttribute("src");u.is.empty(s)&&(s=t.media.getAttribute(this.config.attributes.embed.id));var a=u.parseVimeoId(s),l=u.createElement("iframe"),r="https://player.vimeo.com/video/"+a+"?"+n;l.setAttribute("src",r),l.setAttribute("allowfullscreen",""),l.setAttribute("allowtransparency",""),l.setAttribute("allow","autoplay");var o=u.createElement("div");o.appendChild(l),t.media=u.replaceElement(o,t.media),t.embed=new window.Vimeo.Player(l),t.media.paused=!0,t.media.currentTime=0,t.media.play=function(){t.embed.play().then(function(){t.media.paused=!1})},t.media.pause=function(){t.embed.pause().then(function(){t.media.paused=!0})},t.media.stop=function(){t.pause(),t.currentTime=0};var c=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return c},set:function(e){var i=t.media.paused;t.media.seeking=!0,u.dispatchEvent.call(t,t.media,"seeking"),t.embed.setCurrentTime(e),i&&t.pause()}});var d=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return d},set:function(e){t.embed.setPlaybackRate(e).then(function(){d=e,u.dispatchEvent.call(t,t.media,"ratechange")})}});var p=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return p},set:function(e){t.embed.setVolume(e).then(function(){p=e,u.dispatchEvent.call(t,t.media,"volumechange")})}});var h=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return h},set:function(e){var i=!!u.is.boolean(e)&&e;t.embed.setVolume(i?0:t.config.volume).then(function(){h=i,u.dispatchEvent.call(t,t.media,"volumechange")})}});var m=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return m},set:function(e){var i=u.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(i).then(function(){m=i})}});var g=void 0;t.embed.getVideoUrl().then(function(e){g=e}),Object.defineProperty(t.media,"currentSrc",{get:function(){return g}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var i=u.getAspectRatio(t[0],t[1]);N.setAspectRatio.call(e,i)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(i){t.config.title=i,k.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){c=e,u.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,u.dispatchEvent.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,v.setup.call(t)}),t.embed.on("cuechange",function(e){var i=null;e.cues.length&&(i=u.stripHTML(e.cues[0].text)),v.setText.call(t,i)}),t.embed.on("loaded",function(){u.is.element(t.embed.element)&&t.supported.ui&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){t.media.paused&&u.dispatchEvent.call(t,t.media,"play"),t.media.paused=!1,u.dispatchEvent.call(t,t.media,"playing")}),t.embed.on("pause",function(){t.media.paused=!0,u.dispatchEvent.call(t,t.media,"pause")}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,c=e.seconds,u.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,u.dispatchEvent.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&u.dispatchEvent.call(t,t.media,"canplaythrough")}),t.embed.on("seeked",function(){t.media.seeking=!1,u.dispatchEvent.call(t,t.media,"seeked"),u.dispatchEvent.call(t,t.media,"play")}),t.embed.on("ended",function(){t.media.paused=!0,u.dispatchEvent.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,u.dispatchEvent.call(t,t.media,"error")}),setTimeout(function(){return k.build.call(t)},0)}},x=u.getBrowser(),L={setup:function(){if(this.media)if(u.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),u.toggleClass(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&u.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.supported.ui&&(u.toggleClass(this.elements.container,this.config.classNames.pip.supported,d.pip&&this.isHTML5&&this.isVideo),u.toggleClass(this.elements.container,this.config.classNames.airplay.supported,d.airplay&&this.isHTML5),u.toggleClass(this.elements.container,this.config.classNames.stopped,this.config.autoplay),u.toggleClass(this.elements.container,this.config.classNames.isIos,x.isIos),u.toggleClass(this.elements.container,this.config.classNames.isTouch,this.touch)),this.isVideo&&(this.elements.wrapper=u.createElement("div",{class:this.config.classNames.video}),u.wrap(this.media,this.elements.wrapper)),this.isEmbed)switch(this.provider){case"youtube":P.setup.call(this);break;case"vimeo":N.setup.call(this)}else this.isHTML5&&k.setTitle.call(this);else this.debug.warn("No media element found!")},cancelRequests:function(){this.isHTML5&&(u.removeElement(this.media.querySelectorAll("source")),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}},I={insertElements:function(e,t){var i=this;u.is.string(t)?u.insertElement(e,this.media,{src:t}):u.is.array(t)&&t.forEach(function(t){u.insertElement(e,i.media,t)})},change:function(t){var i=this;u.is.object(t)&&"sources"in t&&t.sources.length?(L.cancelRequests.call(this),this.destroy.call(this,function(){switch(u.removeElement(i.media),i.media=null,u.is.element(i.elements.container)&&i.elements.container.removeAttribute("class"),i.type=t.type,i.provider=u.is.empty(t.sources[0].provider)?e.html5:t.sources[0].provider,i.supported=d.check(i.type,i.provider,i.config.inline),i.provider+":"+i.type){case"html5:video":i.media=u.createElement("video");break;case"html5:audio":i.media=u.createElement("audio");break;case"youtube:video":case"vimeo:video":i.media=u.createElement("div",{src:t.sources[0].src})}i.elements.container.appendChild(i.media),u.is.boolean(t.autoplay)&&(i.config.autoplay=t.autoplay),i.isHTML5&&(i.config.crossorigin&&i.media.setAttribute("crossorigin",""),i.config.autoplay&&i.media.setAttribute("autoplay",""),"poster"in t&&i.media.setAttribute("poster",t.poster),i.config.loop.active&&i.media.setAttribute("loop",""),i.config.muted&&i.media.setAttribute("muted",""),i.config.inline&&i.media.setAttribute("playsinline","")),k.addStyleHook.call(i),i.isHTML5&&I.insertElements.call(i,"source",t.sources),i.config.title=t.title,L.setup.call(i),i.isHTML5&&("tracks"in t&&I.insertElements.call(i,"track",t.tracks),i.media.load()),(i.isHTML5||i.isEmbed&&!i.supported.ui)&&k.build.call(i),i.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}};return function(){function n(s,a){var r=this;if(l(this,n),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=d.touch,this.media=s,u.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||u.is.nodeList(this.media)||u.is.array(this.media))&&(this.media=this.media[0]),this.config=u.extend({},i,a,function(){try{return JSON.parse(r.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:null},this.fullscreen={active:!1},this.options={speed:[],quality:[]},this.debug=new h(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",d),!u.is.nullOrUndefined(this.media)&&u.is.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(d.check().api){this.elements.original=this.media.cloneNode(!0);var o=this.media.tagName.toLowerCase(),c=null,p=null,m=null;switch(o){case"div":if(c=this.media.querySelector("iframe"),u.is.element(c)){if(p=c.getAttribute("src"),this.provider=u.getProviderByUrl(p),this.elements.container=this.media,this.media=c,this.elements.container.className="",m=u.getUrlParams(p),!u.is.empty(m)){var g=["1","true"];g.includes(m.autoplay)&&(this.config.autoplay=!0),g.includes(m.playsinline)&&(this.config.inline=!0),g.includes(m.loop)&&(this.config.loop.active=!0)}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(u.is.empty(this.provider)||!Object.keys(e).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=t.video;break;case"video":case"audio":this.type=o,this.provider=e.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("playsinline")&&(this.config.inline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=d.check(this.type,this.provider,this.config.inline),this.supported.api?(this.listeners=new C(this),this.storage=new A(this),this.media.plyr=this,u.is.element(this.elements.container)||(this.elements.container=u.createElement("div"),u.wrap(this.media,this.elements.container)),this.elements.container.setAttribute("tabindex",0),k.addStyleHook.call(this),L.setup.call(this),this.config.debug&&u.on(this.elements.container,this.config.events.join(" "),function(e){r.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&k.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new y(this),this.ads=new S(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 r(n,[{key:"play",value:function(){var e=this;return u.is.function(this.media.play)?this.ads.enabled&&!this.ads.initialized?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&&u.is.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){(u.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?this.media.load():this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(u.is.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(u.is.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(u.is.number(e)?e:1)}},{key:"decreaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-(u.is.number(e)?e:1)}},{key:"toggleCaptions",value:function(e){if(this.supported.ui&&u.is.element(this.elements.buttons.captions)){var t=u.is.boolean(e)?e:-1===this.elements.container.className.indexOf(this.config.classNames.captions.active);this.captions.active!==t&&(this.captions.active=t,u.toggleState(this.elements.buttons.captions,this.captions.active),u.toggleClass(this.elements.container,this.config.classNames.captions.active,this.captions.active),u.dispatchEvent.call(this,this.media,this.captions.active?"captionsenabled":"captionsdisabled"))}}},{key:"airplay",value:function(){d.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){var t=this;if(u.is.element(this.elements.controls)&&this.supported.ui&&!this.isAudio){var i=0,n=e,s=!1;if(!u.is.boolean(e))if(u.is.event(e)){s="enterfullscreen"===e.type;n=["touchstart","touchmove","mouseenter","mousemove","focusin"].includes(e.type),["touchmove","touchend","mousemove"].includes(e.type)&&(i=2e3),this.touch||"focusin"!==e.type||(i=3e3,u.toggleClass(this.elements.controls,this.config.classNames.noTransition,!0))}else n=u.hasClass(this.elements.container,this.config.classNames.hideControls);if(clearTimeout(this.timers.controls),n||this.paused||this.loading){if(u.toggleClass(this.elements.container,this.config.classNames.hideControls,!1)&&u.dispatchEvent.call(this,this.media,"controlsshown"),this.paused||this.loading)return;this.touch&&(i=3e3)}n&&!this.playing||(this.timers.controls=setTimeout(function(){(!t.elements.controls.pressed&&!t.elements.controls.hover||s)&&(u.hasClass(t.elements.container,t.config.classNames.hideControls)||u.toggleClass(t.elements.controls,t.config.classNames.noTransition,!1),u.toggleClass(t.elements.container,t.config.classNames.hideControls,!0)&&(u.dispatchEvent.call(t,t.media,"controlshidden"),t.config.controls.includes("settings")&&!u.is.empty(t.config.settings)&&E.toggleMenu.call(t,!1)))},i))}}},{key:"on",value:function(e,t){u.on(this.elements.container,e,t)}},{key:"off",value:function(e,t){u.off(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var n=function(){document.body.style.overflow="",t.embed=null,i?(Object.keys(t.elements).length&&(u.removeElement(t.elements.buttons.play),u.removeElement(t.elements.captions),u.removeElement(t.elements.controls),u.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),u.is.function(e)&&e()):(t.listeners.clear(),u.replaceElement(t.elements.original,t.elements.container),u.dispatchEvent.call(t,t.elements.original,"destroyed",!0),u.is.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};switch(this.stop(),this.provider+":"+this.type){case"html5:video":case"html5:audio":clearTimeout(this.timers.loading),k.toggleNativeControls.call(this,!0),n();break;case"youtube:video":clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&u.is.function(this.embed.destroy)&&this.embed.destroy(),n();break;case"vimeo:video":null!==this.embed&&this.embed.unload().then(n),setTimeout(n,200)}}}},{key:"supports",value:function(e){return d.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===e.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===e.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===e.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===t.video)}},{key:"isAudio",get:function(){return Boolean(this.type===t.audio)}},{key:"paused",get:function(){return Boolean(this.media.paused)}},{key:"playing",get:function(){return Boolean(!this.paused&&!this.ended&&(!this.isHTML5||this.media.readyState>2))}},{key:"ended",get:function(){return Boolean(this.media.ended)}},{key:"currentTime",set:function(e){var t=0;u.is.number(e)&&(t=e),t<0?t=0:t>this.duration&&(t=this.duration),this.media.currentTime=parseFloat(t.toFixed(4)),this.debug.log("Seeking to "+this.currentTime+" seconds")},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return u.is.number(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}},{key:"seeking",get:function(){return Boolean(this.media.seeking)}},{key:"duration",get:function(){var e=parseInt(this.config.duration,10),t=this.media?Number(this.media.duration):0;return Number.isNaN(e)?t:e}},{key:"volume",set:function(e){var t=e;u.is.string(t)&&(t=Number(t)),u.is.number(t)||(t=this.storage.get("volume")),u.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;u.is.boolean(t)||(t=this.storage.get("muted")),u.is.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return Boolean(this.media.muted)}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;u.is.number(e)&&(t=e),u.is.number(t)||(t=this.storage.get("speed")),u.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=null;u.is.string(e)&&(t=e),u.is.string(t)||(t=this.storage.get("quality")),u.is.string(t)||(t=this.config.quality.selected),this.options.quality.includes(t)?(this.config.quality.selected=t,this.media.quality=t):this.debug.warn("Unsupported quality option ("+t+")")},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=u.is.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return Boolean(this.media.loop)}},{key:"source",set:function(e){I.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isHTML5&&this.isVideo?u.is.string(e)&&this.media.setAttribute("poster",e):this.debug.warn("Poster can only be set on HTML5 video")},get:function(){return this.isHTML5&&this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=u.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:"language",set:function(e){if(u.is.string(e)&&(this.toggleCaptions(!u.is.empty(e)),!u.is.empty(e))){var t=e.toLowerCase();this.language!==t&&(this.captions.language=t,v.setText.call(this,null),v.setLanguage.call(this),u.dispatchEvent.call(this,this.media,"languagechange"))}},get:function(){return this.captions.language}},{key:"pip",set:function(e){var t="picture-in-picture",i="inline";if(d.pip){var n=u.is.boolean(e)?e:this.pip===i;this.media.webkitSetPresentationMode(n?t:i)}},get:function(){return d.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,i){return d.check(e,t,i)}},{key:"loadSprite",value:function(e,t){return u.loadSprite(e,t)}}]),n}()});
//# sourceMappingURL=plyr.min.js.map
diff --git a/dist/plyr.min.js.map b/dist/plyr.min.js.map
index 32e88998..efc7281e 100644
--- a/dist/plyr.min.js.map
+++ b/dist/plyr.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["src/js/types.js","src/js/defaults.js","src/js/support.js","node_modules/loadjs/dist/loadjs.umd.js","src/js/utils.js","src/js/console.js","src/js/fullscreen.js","src/js/captions.js","src/js/i18n.js","src/js/ui.js","src/js/controls.js","src/js/listeners.js","src/js/storage.js","src/js/plugins/ads.js","src/js/plugins/youtube.js","src/js/plugins/vimeo.js","src/js/media.js","src/js/source.js","src/js/plyr.js"],"names":["providers","types","defaults","window","navigator","language","split","range","factory","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","length","splice","executeCallbacks","args","depsNotFound","call","success","error","loadFile","path","callbackFn","numTries","isCss","e","doc","document","async","maxTries","numRetries","beforeCallbackFn","before","test","createElement","rel","href","replace","src","undefined","onload","onerror","onbeforeload","ev","result","type","sheet","cssText","x","defaultPrevented","head","appendChild","loadjs","paths","arg1","arg2","trim","fn","i","numWaiting","push","loadFiles","ready","deps","bundleIds","r","subscribe","done","reset","isDefined","module","exports","utils","input","this","instanceof","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","array","nodeList","object","keys","constructor","documentMode","documentElement","style","userAgent","platform","url","responseType","arguments","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","JSON","parse","responseText","response","Error","statusText","open","send","id","is","hasId","exists","querySelectorAll","container","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","data","content","fetch","then","empty","setItem","stringify","catch","injectSprite","innerHTML","body","insertBefore","childNodes","prefix","Math","floor","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","entries","_ref","key","_ref2","value","sel","existingAttributes","existing","s","selector","className","parts","charAt","class","toggle","contains","classList","removeAttribute","prototype","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","includes","querySelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","currentTime","seekTooltip","classNames","tooltip","debug","warn","toggleNativeControls","focused","activeElement","focusable","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","passiveListeners","bubbles","detail","CustomEvent","boolean","assign","plyr","dispatchEvent","toggleState","pressed","getAttribute","state","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toString","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","_len","_key","source","shift","defineProperty","extend","apply","concat","toConsumableArray","youtube","vimeo","match","$2","parser","search","startsWith","parseUrl","indexOf","reduce","params","hash","_hash$split2","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","ratio","getRatio","w","h","offsetHeight","provider","inline","api","ui","browser","getBrowser","playsInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","transitionEndEvent","matchMedia","noop","Console","enabled","console","log","bind","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","y","overflow","toggleClass","fallback","Fullscreen","name","_this","stopPropagation","update","native","iosNative","playing","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","exit","enter","fullscreenElement","hasClass","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","exitFullscreen","some","pre","stored","get","isYouTube","textTracks","setCaptionsMenu","getAttributesFromSelector","insertAfter","getTracks","tracks","isIE","URL","track","hostname","location","protocol","blob","createObjectURL","setLanguage","show","setCue","mode","currentTrack","getCurrentTrack","activeCues","isVimeo","embed","enableTextTrack","filter","_this2","cue","setText","getCueAsHTML","emptyElement","caption","i18n","seekTime","title","uiSupported","listeners","inject","setup","muted","speed","loop","quality","timeUpdate","checkPlaying","setTitle","label","isEmbed","iframe","stopped","paused","toggleControls","loading","timers","setTimeout","failed","networkState","_this3","setRange","updateRangeFill","getElementsByTagName","nodeValue","getPercentage","setProgress","buffered","invert","invertTime","updateTimeDisplay","seeking","updateProgress","hasDuration","displayDuration","updateSeekTooltip","isWebkit","setProperty","iconUrl","svg4everybody","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","setAttributeNS","attr","hidden","badge","menu","buttonType","toCamelCase","labelPressed","iconPressed","control","createIcon","createLabel","suffix","list","checked","item","radio","faux","aria-hidden","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","_toggle","touch","pageX","left","parseFloat","setting","tab","tabs","pane","panes","toggleTab","createMenuItem","getLabel","createBadge","getBadge","updateSetting","getLanguage","default","hasTracks","unshift","_this4","form","isMenuItem","isButton","clone","position","opacity","scrollWidth","scrollHeight","getElementById","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","_this5","back","setSpeedMenu","loadSprite","create","findElements","repaint","labels","_this6","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","repeat","altKey","ctrlKey","metaKey","editable","togglePlay","increaseVolume","decreaseVolume","toggleCaptions","isTouch","keyboard","global","tabFocus","hideControls","durationUpdate","hasAudio","showPosterOnEnd","load","updateVolume","checkLoading","clickToPlay","ended","disableContextMenu","set","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","forward","showTab","toggleInvert","hover","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","Storage","store","json","removeItem","Ads","publisherId","ads","initialized","manager","loader","cuePoints","safetyTimer","countdownTimer","managerPromise","google","ima","loadScript","urls","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setInterval","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","cues","setVolume","AdEvent","onAdEvent","ad","getAd","_this7","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","_this8","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","_this9","init","start","adError","zIndex","_this10","destroy","handlers","handler","_this11","Date","now","base","buildUrlParams","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","instance","getPlaybackQuality","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stop","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","setQualityMenu","getAvailableQualityLevels","Vimeo","padding","offset","transform","parseVimeoId","setCurrentTime","selected","setLoop","currentSrc","all","getVideoWidth","getVideoHeight","dimensions","getAspectRatio","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","seconds","wrap","blankVideo","insertElement","attribute","cancelRequests","html5","check","crossorigin","poster","addStyleHook","insertElements","jQuery","original","tagName","getProviderByUrl","getUrlParams","truthy","playsinline","hasAttribute","step","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","soft","clear","unload","mime","readyState","targetTime","end","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","change","states","webkitPresentationMode"],"mappings":"uLAIA,IAAaA,SACF,gBACE,gBACF,SAGEC,SACF,cACA,SCRLC,YAEO,QAGF,UAGA,YAGG,aAGC,WAGD,UAGF,SACD,WAGG,sBAIO,cAGL,gBAGE,QAGP,oBAGM,gBAGC,mBAGG,sBAGG,cAGR,aACA,eACH,gDAGG,wDAIC,mBAEL,SACA,SACA,SACA,QACA,QACA,SACA,QACA,OACA,0BAMI,mBAOE,WAEN,GACA,IACA,EACA,KACA,IACA,KACA,uBAMK,UACD,uBAKE,QACJ,qBAKE,WACEC,OAAOC,UAAUC,SAASC,MAAM,KAAK,yBAKtC,YACC,aACC,qBAKF,MACJ,kBAKL,+BAMA,eACA,OACA,SACA,WACA,WACA,MACA,UACA,wBAGA,WACA,UACA,uBAKS,iBACD,8BACF,aACC,oBACM,+BACP,cACE,kBACE,uBACG,wBACH,kBACF,cACF,cACE,wBACQ,kCACC,mCACA,kCACD,6BACJ,8BACF,oBACA,iBACH,gBACE,eACH,aACC,YACF,UACA,YACE,iBACG,yBACK,uBAMN,uDAGA,qDAGA,uEAMH,UACA,WACC,aACE,YACD,iBACK,UACP,YACE,cACE,gBACE,SACP,aACI,WACF,aACE,UACH,cACI,sBAQV,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,8BAIA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,sBAIA,gBACA,+BAIA,kBACA,mBACA,YACA,cACA,cACA,iBACA,gBACA,gCAMU,uDACC,4BAEI,aACF,0BAEL,4BAEE,2BACC,8BACE,+BACD,mCACK,kCACP,8BACI,oCACE,+BACP,4BACI,iCACC,8BACJ,mCAGA,4BACE,6BACD,+BACG,iCACD,8CAGI,gCACH,+BACF,iCACA,+BACF,+BACE,mCAEF,2BACA,gCAEG,oDAMN,4BACA,wBACF,oBACI,qBACH,qBACI,oBACD,wBACA,wBACA,sBACF,wBACA,sBACE,qBACH,oBACE,6BACM,4BACP,uBACE,6BACI,6BACC,kCAEH,0BACA,mBACD,qCAGG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","file":"plyr.min.js","sourcesContent":["// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.0.4/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 'default',\n options: [\n 'hd2160',\n 'hd1440',\n 'hd1080',\n 'hd720',\n 'large',\n 'medium',\n 'small',\n 'tiny',\n 'default',\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: window.navigator.language.split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, inline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const playsInline = browser.isIPhone && inline && support.inline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n inline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n 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 = path.replace(/^css!/, ''); // remove \"css!\" prefix\n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type, bubbles, detail) {\n // Bail if no element\n if (!utils.is.element(element) || !utils.is.string(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles: utils.is.boolean(bubbles) ? bubbles : false,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.name = Fullscreen.name;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', () => {\n this.toggle();\n });\n\n // Prevent double click on controls bubbling up\n utils.on(this.player.elements.controls, 'dblclick', event => event.stopPropagation());\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return false;\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get name() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.name}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.name}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n document.cancelFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.name}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n return captions.getTracks.call(this).find(track => track.language.toLowerCase() === this.language);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // If there's no caption toggle, bail\n if (!utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality options\n this.options.quality = [];\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', i18n.get('frameTitle', this.config));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n ui.setProgress.call(this, this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport i18n from './i18n';\nimport captions from './captions';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = i18n.get(label, this.config);\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n ),\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the YouTube quality menu\n // TODO: Support for HTML5\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n } else {\n this.options.quality = this.config.quality.options;\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.isYouTube;\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 'hd2160':\n label = '4K';\n break;\n\n case 'hd1440':\n label = 'WQHD';\n break;\n\n case 'hd1080':\n label = 'HD';\n break;\n\n case 'hd720':\n label = 'HD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n this.options.quality.forEach(quality =>\n controls.createMenuItem.call(this, quality, list, type, controls.getLabel.call(this, 'quality', quality), getBadge(quality)),\n );\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? 'Normal' : `${value}&times;`;\n\n case 'quality':\n switch (value) {\n case 'hd2160':\n return '2160P';\n case 'hd1440':\n return '1440P';\n case 'hd1080':\n return '1080P';\n case 'hd720':\n return '720P';\n case 'large':\n return '480P';\n case 'medium':\n return '360P';\n case 'small':\n return '240P';\n case 'tiny':\n return 'Tiny';\n case 'default':\n return 'Auto';\n default:\n return value;\n }\n\n case 'captions':\n return controls.getLanguage.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.captions.active ? this.captions.language : i18n.get('disabled', this.config);\n break;\n\n default:\n value = this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // Update the label\n if (!utils.is.empty(value)) {\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n }\n\n // Find the radio option\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n // Check it\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n getLanguage() {\n if (!this.supported.ui) {\n return null;\n }\n\n if (support.textTracks && captions.getTracks.call(this).length && this.captions.active) {\n const currentTrack = captions.getCurrentTrack.call(this);\n\n if (utils.is.track(currentTrack)) {\n return currentTrack.label;\n }\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const hasTracks = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, hasTracks);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // If there's no captions, bail\n if (!hasTracks) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: track.language,\n label: !utils.is.empty(track.label) ? track.label : track.language.toUpperCase(),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label || track.language,\n controls.createBadge.call(this, track.language.toUpperCase()),\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the default speeds\n if (!utils.is.array(this.options.speed) || !this.options.speed.length) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed);\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => controls.createMenuItem.call(this, speed, list, type, controls.getLabel.call(this, 'speed', speed)));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.config.controls.includes('settings') && this.config.settings.includes('speed')) {\n controls.setSpeedMenu.call(this);\n }\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // HTML or Element passed as the option\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: controls.getLanguage.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.fastForward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.player.toggleControls(event);\n });\n }\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking', event => ui.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.showPosterOnEnd) {\n // Restart\n this.player.restart();\n\n // Re-load media\n this.player.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing', event => ui.updateProgress.call(this.player, event));\n\n // Handle native mute\n utils.on(this.player.media, 'volumechange', event => ui.updateVolume.call(this.player, event));\n\n // Handle native play/pause\n utils.on(this.player.media, 'playing play pause ended emptied', event => ui.checkPlaying.call(this.player, event));\n\n // Loading\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // Check if media failed to load\n // utils.on(this.player.media, 'play', event => ui.checkFailed.call(this.player, event));\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.media,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality');\n\n // Save to storage\n this.player.storage.set({ quality: this.player.quality });\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n // Execute custom handler\n if (hasCustomHandler) {\n customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (!event.defaultPrevented && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n },\n 'speed',\n );\n } else {\n controls.showTab.call(this.player, event);\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n this.player.currentTime = event.target.value / event.target.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n ui.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n this.player.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\nimport i18n from '../i18n';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.enabled = player.isHTML5 && player.isVideo && player.config.ads.enabled && utils.is.string(this.publisherId) && this.publisherId.length;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.api)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (seekElement) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current quality\n player.media.quality = instance.getPlaybackQuality();\n\n utils.dispatchEvent.call(player, player.media, 'qualitychange');\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return instance.getPlaybackQuality();\n },\n set(input) {\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n instance.setPlaybackQuality(input);\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, instance.getAvailableQualityLevels());\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.api)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n const height = 240;\n const offset = (height - padding) / (height / 50);\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n this.media.style.transform = `translateY(-${offset}%)`;\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed.setPlaybackRate(input).then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed.getVideoUrl().then(value => {\n currentSrc = value;\n });\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n }\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(this.media.querySelectorAll('source'));\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 media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n media.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // TODO: Reset menus here\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.inline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.0.4\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options,\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n this.elements.original = this.media.cloneNode(true);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.playsinline)) {\n this.config.inline = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.inline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // If ads are enabled, wait for them first\n if (this.ads.enabled && !this.ads.initialized) {\n return this.ads.managerPromise.then(() => this.ads.play()).catch(() => this.media.play());\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(!this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true));\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.media.load();\n } else {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = parseFloat(targetTime.toFixed(4));\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseInt(this.config.duration, 10);\n\n // True duration\n const realDuration = this.media ? Number(this.media.duration) : 0;\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume, reset muted state\n if (this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently YouTube only\n * @param {string} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (utils.is.string(input)) {\n quality = input;\n }\n\n if (!utils.is.string(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.string(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!this.options.quality.includes(quality)) {\n this.debug.warn(`Unsupported quality option (${quality})`);\n return;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support, or there's no caption toggle\n if (!this.supported.ui || !utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : this.elements.container.className.indexOf(this.config.classNames.captions.active) === -1;\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // Toggle captions based on input\n this.toggleCaptions(!utils.is.empty(input));\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Events that show the controls\n const showEvents = [\n 'touchstart',\n 'touchmove',\n 'mouseenter',\n 'mousemove',\n 'focusin',\n ];\n\n // Events that delay hiding\n const delayEvents = [\n 'touchmove',\n 'touchend',\n 'mousemove',\n ];\n\n // Whether to show controls\n show = showEvents.includes(toggle.type);\n\n // Delay hiding on move events\n if (delayEvents.includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (!this.touch && toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (this.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n"]} \ No newline at end of file
+{"version":3,"sources":["src/js/types.js","src/js/defaults.js","src/js/support.js","node_modules/loadjs/dist/loadjs.umd.js","src/js/utils.js","src/js/console.js","src/js/fullscreen.js","src/js/captions.js","src/js/i18n.js","src/js/ui.js","src/js/controls.js","src/js/listeners.js","src/js/storage.js","src/js/plugins/ads.js","src/js/plugins/youtube.js","src/js/plugins/vimeo.js","src/js/media.js","src/js/source.js","src/js/plyr.js"],"names":["providers","types","defaults","window","navigator","language","split","range","factory","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","length","splice","executeCallbacks","args","depsNotFound","call","success","error","loadFile","path","callbackFn","numTries","isCss","e","doc","document","async","maxTries","numRetries","beforeCallbackFn","before","test","createElement","rel","href","replace","src","undefined","onload","onerror","onbeforeload","ev","result","type","sheet","cssText","x","defaultPrevented","head","appendChild","loadjs","paths","arg1","arg2","trim","fn","i","numWaiting","push","loadFiles","ready","deps","bundleIds","r","subscribe","done","reset","isDefined","module","exports","utils","input","this","instanceof","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","array","nodeList","object","keys","constructor","documentMode","documentElement","style","userAgent","platform","url","responseType","arguments","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","JSON","parse","responseText","response","Error","statusText","open","send","id","is","hasId","exists","querySelectorAll","container","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","data","content","fetch","then","empty","setItem","stringify","catch","injectSprite","innerHTML","body","insertBefore","childNodes","prefix","Math","floor","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","entries","_ref","key","_ref2","value","sel","existingAttributes","existing","s","selector","className","parts","charAt","class","toggle","contains","classList","removeAttribute","prototype","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","includes","querySelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","currentTime","seekTooltip","classNames","tooltip","debug","warn","toggleNativeControls","focused","activeElement","focusable","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","passiveListeners","bubbles","detail","CustomEvent","boolean","assign","plyr","dispatchEvent","toggleState","pressed","getAttribute","state","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toString","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","_len","_key","source","shift","defineProperty","extend","apply","concat","toConsumableArray","youtube","vimeo","match","$2","parser","search","startsWith","parseUrl","indexOf","reduce","params","hash","_hash$split2","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","ratio","getRatio","w","h","offsetHeight","provider","inline","api","ui","browser","getBrowser","playsInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","transitionEndEvent","matchMedia","noop","Console","enabled","console","log","bind","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","y","overflow","toggleClass","fallback","Fullscreen","name","_this","stopPropagation","update","native","iosNative","playing","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","exit","enter","fullscreenElement","hasClass","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","exitFullscreen","some","pre","stored","get","isYouTube","textTracks","setCaptionsMenu","getAttributesFromSelector","insertAfter","getTracks","tracks","isIE","URL","track","hostname","location","protocol","blob","createObjectURL","setLanguage","show","setCue","mode","currentTrack","getCurrentTrack","activeCues","isVimeo","embed","enableTextTrack","filter","_this2","cue","setText","getCueAsHTML","emptyElement","caption","i18n","seekTime","title","uiSupported","listeners","inject","setup","muted","speed","loop","quality","timeUpdate","checkPlaying","setTitle","label","isEmbed","iframe","stopped","paused","toggleControls","loading","timers","setTimeout","failed","networkState","_this3","setRange","updateRangeFill","getElementsByTagName","nodeValue","getPercentage","setProgress","buffered","invert","invertTime","updateTimeDisplay","seeking","updateProgress","hasDuration","displayDuration","updateSeekTooltip","isWebkit","setProperty","iconUrl","svg4everybody","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","setAttributeNS","attr","hidden","badge","menu","buttonType","toCamelCase","labelPressed","iconPressed","control","createIcon","createLabel","suffix","list","checked","item","radio","faux","aria-hidden","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","_toggle","touch","pageX","left","parseFloat","setting","tab","tabs","pane","panes","toggleTab","createMenuItem","getLabel","createBadge","getBadge","updateSetting","getLanguage","default","hasTracks","unshift","_this4","form","isMenuItem","isButton","clone","position","opacity","scrollWidth","scrollHeight","getElementById","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","_this5","back","setSpeedMenu","loadSprite","create","findElements","repaint","labels","_this6","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","repeat","altKey","ctrlKey","metaKey","editable","togglePlay","increaseVolume","decreaseVolume","toggleCaptions","isTouch","keyboard","global","tabFocus","hideControls","durationUpdate","hasAudio","showPosterOnEnd","load","updateVolume","checkLoading","clickToPlay","ended","disableContextMenu","set","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","forward","showTab","toggleInvert","hover","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","Storage","store","json","removeItem","Ads","publisherId","ads","initialized","manager","loader","cuePoints","safetyTimer","countdownTimer","managerPromise","google","ima","loadScript","urls","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setInterval","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","cues","setVolume","AdEvent","onAdEvent","ad","getAd","_this7","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","_this8","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","_this9","init","start","adError","zIndex","_this10","destroy","handlers","handler","_this11","Date","now","base","buildUrlParams","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","instance","getPlaybackQuality","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stop","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","setQualityMenu","getAvailableQualityLevels","Vimeo","padding","offset","transform","parseVimeoId","setCurrentTime","selected","setLoop","currentSrc","all","getVideoWidth","getVideoHeight","dimensions","getAspectRatio","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","seconds","wrap","blankVideo","insertElement","attribute","cancelRequests","html5","check","crossorigin","poster","addStyleHook","insertElements","jQuery","original","tagName","getProviderByUrl","getUrlParams","truthy","playsinline","hasAttribute","step","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","soft","clear","unload","mime","readyState","targetTime","end","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","change","states","webkitPresentationMode"],"mappings":"uLAIA,IAAaA,SACF,gBACE,gBACF,SAGEC,SACF,cACA,SCRLC,YAEO,QAGF,UAGA,YAGG,aAGC,WAGD,UAGF,SACD,WAGG,sBAIO,cAGL,gBAGE,QAGP,oBAGM,gBAGC,mBAGG,sBAGG,cAGR,aACA,eACH,gDAGG,wDAIC,mBAEL,SACA,SACA,SACA,QACA,QACA,SACA,QACA,OACA,0BAMI,mBAOE,WAEN,GACA,IACA,EACA,KACA,IACA,KACA,uBAMK,UACD,uBAKE,QACJ,qBAKE,WACEC,OAAOC,UAAUC,SAASC,MAAM,KAAK,yBAKtC,YACC,aACC,qBAKF,MACJ,kBAKL,+BAMA,eACA,OACA,SACA,WACA,WACA,MACA,UACA,wBAGA,WACA,UACA,uBAKS,iBACD,8BACF,aACC,oBACM,+BACP,cACE,kBACE,uBACG,wBACH,kBACF,cACF,cACE,wBACQ,kCACC,mCACA,kCACD,6BACJ,8BACF,oBACA,iBACH,gBACE,eACH,aACC,YACF,UACA,YACE,iBACG,yBACK,uBAMN,uDAGA,qDAGA,uEAMH,UACA,WACC,aACE,YACD,iBACK,UACP,YACE,cACE,gBACE,SACP,aACI,WACF,aACE,UACH,cACI,sBAQV,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,8BAIA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,sBAIA,gBACA,+BAIA,kBACA,mBACA,YACA,cACA,cACA,iBACA,gBACA,gCAMU,uDACC,4BAEI,aACF,0BAEL,4BAEE,2BACC,8BACE,+BACD,mCACK,kCACP,8BACI,oCACE,+BACP,4BACI,iCACC,8BACJ,mCAGA,4BACE,6BACD,+BACG,iCACD,8CAGI,gCACH,+BACF,iCACA,+BACF,+BACE,mCAEF,2BACA,gCAEG,oDAMN,4BACA,wBACF,oBACI,qBACH,qBACI,oBACD,wBACA,wBACA,sBACF,wBACA,sBACE,qBACH,oBACE,6BACM,4BACP,uBACE,6BACI,6BACC,kCAEH,0BACA,mBACD,qCAGG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","file":"plyr.min.js","sourcesContent":["// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.0.6/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 'default',\n options: [\n 'hd2160',\n 'hd1440',\n 'hd1080',\n 'hd720',\n 'large',\n 'medium',\n 'small',\n 'tiny',\n 'default',\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: window.navigator.language.split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, inline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const playsInline = browser.isIPhone && inline && support.inline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n inline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n 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 = path.replace(/^css!/, ''); // remove \"css!\" prefix\n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type, bubbles, detail) {\n // Bail if no element\n if (!utils.is.element(element) || !utils.is.string(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles: utils.is.boolean(bubbles) ? bubbles : false,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.name = Fullscreen.name;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', () => {\n this.toggle();\n });\n\n // Prevent double click on controls bubbling up\n utils.on(this.player.elements.controls, 'dblclick', event => event.stopPropagation());\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return false;\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get name() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.name}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.name}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n document.cancelFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.name}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n return captions.getTracks.call(this).find(track => track.language.toLowerCase() === this.language);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // If there's no caption toggle, bail\n if (!utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality options\n this.options.quality = [];\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', i18n.get('frameTitle', this.config));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n ui.setProgress.call(this, this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport i18n from './i18n';\nimport captions from './captions';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = i18n.get(label, this.config);\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n ),\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the YouTube quality menu\n // TODO: Support for HTML5\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n } else {\n this.options.quality = this.config.quality.options;\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.isYouTube;\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 'hd2160':\n label = '4K';\n break;\n\n case 'hd1440':\n label = 'WQHD';\n break;\n\n case 'hd1080':\n label = 'HD';\n break;\n\n case 'hd720':\n label = 'HD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n this.options.quality.forEach(quality =>\n controls.createMenuItem.call(this, quality, list, type, controls.getLabel.call(this, 'quality', quality), getBadge(quality)),\n );\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? 'Normal' : `${value}&times;`;\n\n case 'quality':\n switch (value) {\n case 'hd2160':\n return '2160P';\n case 'hd1440':\n return '1440P';\n case 'hd1080':\n return '1080P';\n case 'hd720':\n return '720P';\n case 'large':\n return '480P';\n case 'medium':\n return '360P';\n case 'small':\n return '240P';\n case 'tiny':\n return 'Tiny';\n case 'default':\n return 'Auto';\n default:\n return value;\n }\n\n case 'captions':\n return controls.getLanguage.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.captions.active ? this.captions.language : i18n.get('disabled', this.config);\n break;\n\n default:\n value = this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // Update the label\n if (!utils.is.empty(value)) {\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n }\n\n // Find the radio option\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n // Check it\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n getLanguage() {\n if (!this.supported.ui) {\n return null;\n }\n\n if (support.textTracks && captions.getTracks.call(this).length && this.captions.active) {\n const currentTrack = captions.getCurrentTrack.call(this);\n\n if (utils.is.track(currentTrack)) {\n return currentTrack.label;\n }\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const hasTracks = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, hasTracks);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // If there's no captions, bail\n if (!hasTracks) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: track.language,\n label: !utils.is.empty(track.label) ? track.label : track.language.toUpperCase(),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label || track.language,\n controls.createBadge.call(this, track.language.toUpperCase()),\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the default speeds\n if (!utils.is.array(this.options.speed) || !this.options.speed.length) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed);\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => controls.createMenuItem.call(this, speed, list, type, controls.getLabel.call(this, 'speed', speed)));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.config.controls.includes('settings') && this.config.settings.includes('speed')) {\n controls.setSpeedMenu.call(this);\n }\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // HTML or Element passed as the option\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: controls.getLanguage.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.fastForward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.player.toggleControls(event);\n });\n }\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking', event => ui.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.showPosterOnEnd) {\n // Restart\n this.player.restart();\n\n // Re-load media\n this.player.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing', event => ui.updateProgress.call(this.player, event));\n\n // Handle native mute\n utils.on(this.player.media, 'volumechange', event => ui.updateVolume.call(this.player, event));\n\n // Handle native play/pause\n utils.on(this.player.media, 'playing play pause ended emptied', event => ui.checkPlaying.call(this.player, event));\n\n // Loading\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // Check if media failed to load\n // utils.on(this.player.media, 'play', event => ui.checkFailed.call(this.player, event));\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.media,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality');\n\n // Save to storage\n this.player.storage.set({ quality: this.player.quality });\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n },\n 'speed',\n );\n } else {\n controls.showTab.call(this.player, event);\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n this.player.currentTime = event.target.value / event.target.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n ui.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n this.player.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\nimport i18n from '../i18n';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.enabled = player.isHTML5 && player.isVideo && player.config.ads.enabled && utils.is.string(this.publisherId) && this.publisherId.length;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.api)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (seekElement) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current quality\n player.media.quality = instance.getPlaybackQuality();\n\n utils.dispatchEvent.call(player, player.media, 'qualitychange');\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return instance.getPlaybackQuality();\n },\n set(input) {\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n instance.setPlaybackQuality(input);\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, instance.getAvailableQualityLevels());\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.api)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n const height = 240;\n const offset = (height - padding) / (height / 50);\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n this.media.style.transform = `translateY(-${offset}%)`;\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed.setPlaybackRate(input).then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed.getVideoUrl().then(value => {\n currentSrc = value;\n });\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n }\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(this.media.querySelectorAll('source'));\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 media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n media.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // TODO: Reset menus here\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.inline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.0.6\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options,\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n this.elements.original = this.media.cloneNode(true);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.playsinline)) {\n this.config.inline = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.inline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // If ads are enabled, wait for them first\n if (this.ads.enabled && !this.ads.initialized) {\n return this.ads.managerPromise.then(() => this.ads.play()).catch(() => this.media.play());\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(!this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true));\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.media.load();\n } else {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = parseFloat(targetTime.toFixed(4));\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseInt(this.config.duration, 10);\n\n // True duration\n const realDuration = this.media ? Number(this.media.duration) : 0;\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume, reset muted state\n if (this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently YouTube only\n * @param {string} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (utils.is.string(input)) {\n quality = input;\n }\n\n if (!utils.is.string(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.string(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!this.options.quality.includes(quality)) {\n this.debug.warn(`Unsupported quality option (${quality})`);\n return;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support, or there's no caption toggle\n if (!this.supported.ui || !utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : this.elements.container.className.indexOf(this.config.classNames.captions.active) === -1;\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // Toggle captions based on input\n this.toggleCaptions(!utils.is.empty(input));\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Events that show the controls\n const showEvents = [\n 'touchstart',\n 'touchmove',\n 'mouseenter',\n 'mousemove',\n 'focusin',\n ];\n\n // Events that delay hiding\n const delayEvents = [\n 'touchmove',\n 'touchend',\n 'mousemove',\n ];\n\n // Whether to show controls\n show = showEvents.includes(toggle.type);\n\n // Delay hiding on move events\n if (delayEvents.includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (!this.touch && toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (this.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n"]} \ No newline at end of file
diff --git a/dist/plyr.polyfilled.js b/dist/plyr.polyfilled.js
index 536e1174..10075962 100644
--- a/dist/plyr.polyfilled.js
+++ b/dist/plyr.polyfilled.js
@@ -5268,7 +5268,7 @@ var defaults = {
// Sprite (for icons)
loadSprite: true,
iconPrefix: 'plyr',
- iconUrl: 'https://cdn.plyr.io/3.0.5/plyr.svg',
+ iconUrl: 'https://cdn.plyr.io/3.0.6/plyr.svg',
// Blank video (used to prevent errors on source change)
blankVideo: 'https://cdn.plyr.io/static/blank.mp4',
@@ -9657,14 +9657,15 @@ var Listeners = function () {
var proxy = function proxy(event, defaultHandler, customHandlerKey) {
var customHandler = _this4.player.config.listeners[customHandlerKey];
var hasCustomHandler = utils.is.function(customHandler);
+ var returned = true;
// Execute custom handler
if (hasCustomHandler) {
- customHandler.call(_this4.player, event);
+ returned = customHandler.call(_this4.player, event);
}
// Only call default handler if not prevented in custom handler
- if (!event.defaultPrevented && utils.is.function(defaultHandler)) {
+ if (returned && utils.is.function(defaultHandler)) {
defaultHandler.call(_this4.player, event);
}
};
@@ -11589,7 +11590,7 @@ var source = {
// ==========================================================================
// Plyr
-// plyr.js v3.0.5
+// plyr.js v3.0.6
// https://github.com/sampotts/plyr
// License: The MIT License (MIT)
// ==========================================================================
@@ -12905,7 +12906,7 @@ var Plyr$1 = function () {
// ==========================================================================
// Plyr Polyfilled Build
-// plyr.js v3.0.4
+// plyr.js v3.0.6
// https://github.com/sampotts/plyr
// License: The MIT License (MIT)
// ==========================================================================
diff --git a/dist/plyr.polyfilled.js.map b/dist/plyr.polyfilled.js.map
index 210be437..6e70e49d 100644
--- a/dist/plyr.polyfilled.js.map
+++ b/dist/plyr.polyfilled.js.map
@@ -1 +1 @@
-{"version":3,"sources":["node_modules/core-js/modules/_global.js","node_modules/core-js/modules/_core.js","node_modules/core-js/modules/_is-object.js","node_modules/core-js/modules/_an-object.js","node_modules/core-js/modules/_fails.js","node_modules/core-js/modules/_descriptors.js","node_modules/core-js/modules/_dom-create.js","node_modules/core-js/modules/_ie8-dom-define.js","node_modules/core-js/modules/_to-primitive.js","node_modules/core-js/modules/_object-dp.js","node_modules/core-js/modules/_property-desc.js","node_modules/core-js/modules/_hide.js","node_modules/core-js/modules/_has.js","node_modules/core-js/modules/_uid.js","node_modules/core-js/modules/_redefine.js","node_modules/core-js/modules/_a-function.js","node_modules/core-js/modules/_ctx.js","node_modules/core-js/modules/_export.js","node_modules/core-js/modules/_typed.js","node_modules/core-js/modules/_library.js","node_modules/core-js/modules/_redefine-all.js","node_modules/core-js/modules/_an-instance.js","node_modules/core-js/modules/_to-integer.js","node_modules/core-js/modules/_to-length.js","node_modules/core-js/modules/_to-index.js","node_modules/core-js/modules/_cof.js","node_modules/core-js/modules/_iobject.js","node_modules/core-js/modules/_defined.js","node_modules/core-js/modules/_to-iobject.js","node_modules/core-js/modules/_to-absolute-index.js","node_modules/core-js/modules/_array-includes.js","node_modules/core-js/modules/_shared.js","node_modules/core-js/modules/_shared-key.js","node_modules/core-js/modules/_object-keys-internal.js","node_modules/core-js/modules/_enum-bug-keys.js","node_modules/core-js/modules/_object-gopn.js","node_modules/core-js/modules/_to-object.js","node_modules/core-js/modules/_array-fill.js","node_modules/core-js/modules/_wks.js","node_modules/core-js/modules/_set-to-string-tag.js","node_modules/core-js/modules/_typed-buffer.js","node_modules/core-js/modules/_species-constructor.js","node_modules/core-js/modules/_set-species.js","node_modules/core-js/modules/es6.typed.array-buffer.js","node_modules/core-js/modules/_classof.js","node_modules/core-js/modules/_iterators.js","node_modules/core-js/modules/_is-array-iter.js","node_modules/core-js/modules/_object-keys.js","node_modules/core-js/modules/_object-dps.js","node_modules/core-js/modules/_html.js","node_modules/core-js/modules/_object-create.js","node_modules/core-js/modules/_object-gpo.js","node_modules/core-js/modules/core.get-iterator-method.js","node_modules/core-js/modules/_is-array.js","node_modules/core-js/modules/_array-species-constructor.js","node_modules/core-js/modules/_array-species-create.js","node_modules/core-js/modules/_array-methods.js","node_modules/core-js/modules/_add-to-unscopables.js","node_modules/core-js/modules/_iter-step.js","node_modules/core-js/modules/_iter-create.js","node_modules/core-js/modules/_iter-define.js","node_modules/core-js/modules/es6.array.iterator.js","node_modules/core-js/modules/_iter-detect.js","node_modules/core-js/modules/_array-copy-within.js","node_modules/core-js/modules/_object-pie.js","node_modules/core-js/modules/_object-gopd.js","node_modules/core-js/modules/_typed-array.js","node_modules/core-js/modules/es6.typed.int8-array.js","node_modules/core-js/modules/es6.typed.uint8-array.js","node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","node_modules/core-js/modules/es6.typed.int16-array.js","node_modules/core-js/modules/es6.typed.uint16-array.js","node_modules/core-js/modules/es6.typed.int32-array.js","node_modules/core-js/modules/es6.typed.uint32-array.js","node_modules/core-js/modules/es6.typed.float32-array.js","node_modules/core-js/modules/es6.typed.float64-array.js","node_modules/core-js/modules/_iter-call.js","node_modules/core-js/modules/_for-of.js","node_modules/core-js/modules/_meta.js","node_modules/core-js/modules/_validate-collection.js","node_modules/core-js/modules/_collection-strong.js","node_modules/core-js/modules/_set-proto.js","node_modules/core-js/modules/_inherit-if-required.js","node_modules/core-js/modules/_collection.js","node_modules/core-js/modules/es6.map.js","node_modules/core-js/modules/es6.set.js","node_modules/core-js/modules/_object-gops.js","node_modules/core-js/modules/_object-assign.js","node_modules/core-js/modules/_collection-weak.js","node_modules/core-js/modules/es6.weak-map.js","node_modules/core-js/modules/es6.weak-set.js","node_modules/core-js/modules/es6.reflect.apply.js","node_modules/core-js/modules/_invoke.js","node_modules/core-js/modules/_bind.js","node_modules/core-js/modules/es6.reflect.construct.js","node_modules/core-js/modules/es6.reflect.define-property.js","node_modules/core-js/modules/es6.reflect.delete-property.js","node_modules/core-js/modules/es6.reflect.get.js","node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","node_modules/core-js/modules/es6.reflect.get-prototype-of.js","node_modules/core-js/modules/es6.reflect.has.js","node_modules/core-js/modules/es6.reflect.is-extensible.js","node_modules/core-js/modules/_own-keys.js","node_modules/core-js/modules/es6.reflect.own-keys.js","node_modules/core-js/modules/es6.reflect.prevent-extensions.js","node_modules/core-js/modules/es6.reflect.set.js","node_modules/core-js/modules/es6.reflect.set-prototype-of.js","node_modules/core-js/modules/_task.js","node_modules/core-js/modules/_microtask.js","node_modules/core-js/modules/_new-promise-capability.js","node_modules/core-js/modules/_perform.js","node_modules/core-js/modules/_promise-resolve.js","node_modules/core-js/modules/es6.promise.js","node_modules/core-js/modules/_wks-ext.js","node_modules/core-js/modules/_wks-define.js","node_modules/core-js/modules/_enum-keys.js","node_modules/core-js/modules/_object-gopn-ext.js","node_modules/core-js/modules/es6.symbol.js","node_modules/core-js/modules/_object-sap.js","node_modules/core-js/modules/es6.object.freeze.js","node_modules/core-js/modules/es6.object.seal.js","node_modules/core-js/modules/es6.object.prevent-extensions.js","node_modules/core-js/modules/es6.object.is-frozen.js","node_modules/core-js/modules/es6.object.is-sealed.js","node_modules/core-js/modules/es6.object.is-extensible.js","node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","node_modules/core-js/modules/es6.object.get-prototype-of.js","node_modules/core-js/modules/es6.object.keys.js","node_modules/core-js/modules/es6.object.get-own-property-names.js","node_modules/core-js/modules/es6.object.assign.js","node_modules/core-js/modules/_same-value.js","node_modules/core-js/modules/es6.object.is.js","node_modules/core-js/modules/es6.function.name.js","node_modules/core-js/modules/es6.string.raw.js","node_modules/core-js/modules/es6.string.from-code-point.js","node_modules/core-js/modules/_string-at.js","node_modules/core-js/modules/es6.string.code-point-at.js","node_modules/core-js/modules/_string-repeat.js","node_modules/core-js/modules/es6.string.repeat.js","node_modules/core-js/modules/_is-regexp.js","node_modules/core-js/modules/_string-context.js","node_modules/core-js/modules/_fails-is-regexp.js","node_modules/core-js/modules/es6.string.starts-with.js","node_modules/core-js/modules/es6.string.ends-with.js","node_modules/core-js/modules/es6.string.includes.js","node_modules/core-js/modules/_flags.js","node_modules/core-js/modules/es6.regexp.flags.js","node_modules/core-js/modules/_fix-re-wks.js","node_modules/core-js/modules/es6.regexp.match.js","node_modules/core-js/modules/es6.regexp.replace.js","node_modules/core-js/modules/es6.regexp.split.js","node_modules/core-js/modules/es6.regexp.search.js","node_modules/core-js/modules/_create-property.js","node_modules/core-js/modules/es6.array.from.js","node_modules/core-js/modules/es6.array.of.js","node_modules/core-js/modules/es6.array.copy-within.js","node_modules/core-js/modules/es6.array.find.js","node_modules/core-js/modules/es6.array.find-index.js","node_modules/core-js/modules/es6.array.fill.js","node_modules/core-js/modules/es6.number.is-finite.js","node_modules/core-js/modules/_is-integer.js","node_modules/core-js/modules/es6.number.is-integer.js","node_modules/core-js/modules/es6.number.is-safe-integer.js","node_modules/core-js/modules/es6.number.is-nan.js","node_modules/core-js/modules/es6.number.epsilon.js","node_modules/core-js/modules/es6.number.min-safe-integer.js","node_modules/core-js/modules/es6.number.max-safe-integer.js","node_modules/core-js/modules/_math-log1p.js","node_modules/core-js/modules/es6.math.acosh.js","node_modules/core-js/modules/es6.math.asinh.js","node_modules/core-js/modules/es6.math.atanh.js","node_modules/core-js/modules/_math-sign.js","node_modules/core-js/modules/es6.math.cbrt.js","node_modules/core-js/modules/es6.math.clz32.js","node_modules/core-js/modules/es6.math.cosh.js","node_modules/core-js/modules/_math-expm1.js","node_modules/core-js/modules/es6.math.expm1.js","node_modules/core-js/modules/_math-fround.js","node_modules/core-js/modules/es6.math.fround.js","node_modules/core-js/modules/es6.math.hypot.js","node_modules/core-js/modules/es6.math.imul.js","node_modules/core-js/modules/es6.math.log1p.js","node_modules/core-js/modules/es6.math.log10.js","node_modules/core-js/modules/es6.math.log2.js","node_modules/core-js/modules/es6.math.sign.js","node_modules/core-js/modules/es6.math.sinh.js","node_modules/core-js/modules/es6.math.tanh.js","node_modules/core-js/modules/es6.math.trunc.js","node_modules/core-js/modules/es7.array.includes.js","node_modules/core-js/modules/_object-to-array.js","node_modules/core-js/modules/es7.object.values.js","node_modules/core-js/modules/es7.object.entries.js","node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","node_modules/core-js/modules/_string-pad.js","node_modules/core-js/modules/_user-agent.js","node_modules/core-js/modules/es7.string.pad-start.js","node_modules/core-js/modules/es7.string.pad-end.js","node_modules/core-js/modules/web.timers.js","node_modules/core-js/modules/web.immediate.js","node_modules/core-js/modules/web.dom.iterable.js","node_modules/regenerator-runtime/runtime.js","node_modules/custom-event-polyfill/custom-event-polyfill.js","src/js/types.js","src/js/defaults.js","node_modules/loadjs/dist/loadjs.umd.js","src/js/utils.js","src/js/support.js","src/js/console.js","src/js/fullscreen.js","src/js/captions.js","src/js/i18n.js","src/js/ui.js","src/js/controls.js","src/js/listeners.js","src/js/storage.js","src/js/plugins/ads.js","src/js/plugins/youtube.js","src/js/plugins/vimeo.js","src/js/media.js","src/js/source.js","src/js/plyr.js","src/js/plyr.polyfilled.js"],"names":["isObject","require$$0","document","require$$1","require$$2","anObject","toPrimitive","IE8_DOM_DEFINE","dP","createDesc","has","hide","global","aFunction","core","ctx","redefine","uid","VIEW","toInteger","toLength","cof","IObject","defined","min","toIObject","toAbsoluteIndex","$keys","toObject","DESCRIPTORS","toIndex","$typed","anInstance","arrayFill","redefineAll","fails","LIBRARY","setToStringTag","SPECIES","buffer","$export","speciesConstructor","TAG","Iterators","enumBugKeys","getKeys","IE_PROTO","PROTOTYPE","dPs","ITERATOR","classof","isArray","asc","ArrayProto","create","descriptor","$iterCreate","getPrototypeOf","step","addToUnscopables","pIE","require$$3","require$$4","require$$5","require$$6","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","isArrayIter","require$$21","require$$22","require$$23","require$$24","getIterFn","require$$25","require$$26","require$$27","require$$28","require$$29","require$$30","require$$31","require$$32","require$$33","require$$34","require$$35","require$$36","require$$37","require$$38","$iterators","call","forOf","validate","$iterDefine","setSpecies","meta","$iterDetect","inheritIfRequired","strong","gOPS","createArrayMethod","id","$has","weak","assign","invoke","bind","gOPD","getProto","Reflect","gOPN","setProto","process","cel","html","Promise","isNode","newPromiseCapability","TypeError","newPromiseCapabilityModule","perform","promiseResolve","wksExt","toString","$GOPD","$DP","gOPNExt","wks","shared","ObjectProto","USE_NATIVE","$fails","_create","$defineProperty","enumKeys","wksDefine","$getOwnPropertyDescriptor","$getPrototypeOf","isRegExp","MATCH","context","createProperty","$find","KEY","forced","floor","isInteger","log1p","sign","$expm1","abs","exp","expm1","isEnum","ownKeys","repeat","navigator","userAgent","$pad","wrap","$task","i","NAME","this","CustomEvent","providers","types","defaults","window","language","split","define","utils","input","instanceof","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","test","array","nodeList","length","object","keys","constructor","documentMode","documentElement","style","platform","url","responseType","resolve","reject","request","XMLHttpRequest","addEventListener","JSON","parse","responseText","e","response","Error","statusText","open","send","is","prefix","hasId","isCached","exists","querySelectorAll","injectSprite","data","innerHTML","body","insertBefore","childNodes","container","createElement","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","content","fetch","then","empty","result","setItem","stringify","catch","Math","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","entries","key","value","sel","existingAttributes","existing","selector","s","trim","className","replace","stripped","parts","start","charAt","class","toggle","contains","classList","removeAttribute","prototype","match","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","duration","currentTime","seekTooltip","classNames","tooltip","error","debug","warn","toggleNativeControls","focused","activeElement","focusable","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","passiveListeners","bubbles","detail","boolean","plyr","dispatchEvent","toggleState","pressed","getAttribute","state","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","source","shift","extend","youtube","vimeo","regex","$2","parser","href","search","startsWith","parseUrl","hashes","indexOf","reduce","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","getRatio","w","h","ratio","transitionEndEvent","undefined","offsetHeight","provider","inline","api","ui","browser","getBrowser","playsInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","defineProperty","range","matchMedia","noop","Console","enabled","console","log","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","toggleClass","fallback","Fullscreen","name","stopPropagation","update","native","iosNative","playing","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","action","enter","exit","hasClass","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","exitFullscreen","prefixes","some","pre","stored","get","isYouTube","textTracks","setCaptionsMenu","getAttributesFromSelector","insertAfter","getTracks","tracks","isIE","URL","src","track","hostname","location","protocol","createObjectURL","blob","setLanguage","show","setCue","mode","currentTrack","getCurrentTrack","activeCues","isVimeo","embed","enableTextTrack","filter","cue","setText","getCueAsHTML","emptyElement","caption","i18n","seekTime","title","uiSupported","listeners","inject","setup","muted","speed","loop","quality","timeUpdate","checkPlaying","ready","setTitle","label","isEmbed","iframe","stopped","paused","toggleControls","loading","timers","setTimeout","failed","networkState","setRange","updateRangeFill","getElementsByTagName","nodeValue","getPercentage","setProgress","buffered","invert","invertTime","updateTimeDisplay","seeking","updateProgress","hasDuration","displayDuration","updateSeekTooltip","isWebkit","setProperty","iconUrl","svg4everybody","namespace","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","hidden","badge","menu","buttonType","toCamelCase","labelPressed","iconPressed","control","createIcon","createLabel","push","suffix","list","checked","item","radio","faux","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","touch","pageX","left","parseFloat","setting","tab","tabs","pane","panes","toggleTab","getBadge","createBadge","createMenuItem","getLabel","updateSetting","getLanguage","default","hasTracks","unshift","form","isMenuItem","isButton","clone","position","opacity","scrollWidth","scrollHeight","getElementById","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setSpeedMenu","loadSprite","findElements","repaint","labels","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","toggleCaptions","isTouch","keyboard","tabFocus","hideControls","durationUpdate","hasAudio","showPosterOnEnd","load","updateVolume","checkLoading","clickToPlay","ended","disableContextMenu","set","concat","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","defaultPrevented","forward","showTab","toggleInvert","hover","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","Storage","store","json","removeItem","Ads","publisherId","ads","initialized","manager","loader","cuePoints","safetyTimer","countdownTimer","managerPromise","google","ima","loadScript","urls","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","getRemainingTime","setInterval","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","cues","setVolume","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","args","handlers","handler","apply","Date","now","base","buildUrlParams","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","instance","getPlaybackQuality","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stop","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","setQualityMenu","getAvailableQualityLevels","Vimeo","padding","offset","transform","parseVimeoId","setCurrentTime","selected","setLoop","currentSrc","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","frame","seconds","blankVideo","insertElement","attribute","cancelRequests","html5","check","crossorigin","poster","addStyleHook","insertElements","jQuery","original","tagName","getProviderByUrl","getUrlParams","truthy","playsinline","hasAttribute","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","showEvents","delayEvents","noTransition","toggled","soft","done","clear","unload","mime","readyState","targetTime","end","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","change","states","webkitPresentationMode"],"mappings":"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","file":"plyr.polyfilled.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","module.exports = false;\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.0.5/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 'default',\n options: [\n 'hd2160',\n 'hd1440',\n 'hd1080',\n 'hd720',\n 'large',\n 'medium',\n 'small',\n 'tiny',\n 'default',\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: window.navigator.language.split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n 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 = path.replace(/^css!/, ''); // remove \"css!\" prefix\n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type, bubbles, detail) {\n // Bail if no element\n if (!utils.is.element(element) || !utils.is.string(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles: utils.is.boolean(bubbles) ? bubbles : false,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, inline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const playsInline = browser.isIPhone && inline && support.inline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n inline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.name = Fullscreen.name;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', () => {\n this.toggle();\n });\n\n // Prevent double click on controls bubbling up\n utils.on(this.player.elements.controls, 'dblclick', event => event.stopPropagation());\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return false;\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get name() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.name}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.name}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n document.cancelFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.name}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n return captions.getTracks.call(this).find(track => track.language.toLowerCase() === this.language);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // If there's no caption toggle, bail\n if (!utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality options\n this.options.quality = [];\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', i18n.get('frameTitle', this.config));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n ui.setProgress.call(this, this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport i18n from './i18n';\nimport captions from './captions';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = i18n.get(label, this.config);\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n ),\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the YouTube quality menu\n // TODO: Support for HTML5\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n } else {\n this.options.quality = this.config.quality.options;\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.isYouTube;\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 'hd2160':\n label = '4K';\n break;\n\n case 'hd1440':\n label = 'WQHD';\n break;\n\n case 'hd1080':\n label = 'HD';\n break;\n\n case 'hd720':\n label = 'HD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n this.options.quality.forEach(quality =>\n controls.createMenuItem.call(this, quality, list, type, controls.getLabel.call(this, 'quality', quality), getBadge(quality)),\n );\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? 'Normal' : `${value}&times;`;\n\n case 'quality':\n switch (value) {\n case 'hd2160':\n return '2160P';\n case 'hd1440':\n return '1440P';\n case 'hd1080':\n return '1080P';\n case 'hd720':\n return '720P';\n case 'large':\n return '480P';\n case 'medium':\n return '360P';\n case 'small':\n return '240P';\n case 'tiny':\n return 'Tiny';\n case 'default':\n return 'Auto';\n default:\n return value;\n }\n\n case 'captions':\n return controls.getLanguage.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.captions.active ? this.captions.language : i18n.get('disabled', this.config);\n break;\n\n default:\n value = this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // Update the label\n if (!utils.is.empty(value)) {\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n }\n\n // Find the radio option\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n // Check it\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n getLanguage() {\n if (!this.supported.ui) {\n return null;\n }\n\n if (support.textTracks && captions.getTracks.call(this).length && this.captions.active) {\n const currentTrack = captions.getCurrentTrack.call(this);\n\n if (utils.is.track(currentTrack)) {\n return currentTrack.label;\n }\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const hasTracks = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, hasTracks);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // If there's no captions, bail\n if (!hasTracks) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: track.language,\n label: !utils.is.empty(track.label) ? track.label : track.language.toUpperCase(),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label || track.language,\n controls.createBadge.call(this, track.language.toUpperCase()),\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the default speeds\n if (!utils.is.array(this.options.speed) || !this.options.speed.length) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed);\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => controls.createMenuItem.call(this, speed, list, type, controls.getLabel.call(this, 'speed', speed)));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.config.controls.includes('settings') && this.config.settings.includes('speed')) {\n controls.setSpeedMenu.call(this);\n }\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // HTML or Element passed as the option\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: controls.getLanguage.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.fastForward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.player.toggleControls(event);\n });\n }\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking', event => ui.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.showPosterOnEnd) {\n // Restart\n this.player.restart();\n\n // Re-load media\n this.player.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing', event => ui.updateProgress.call(this.player, event));\n\n // Handle native mute\n utils.on(this.player.media, 'volumechange', event => ui.updateVolume.call(this.player, event));\n\n // Handle native play/pause\n utils.on(this.player.media, 'playing play pause ended emptied', event => ui.checkPlaying.call(this.player, event));\n\n // Loading\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // Check if media failed to load\n // utils.on(this.player.media, 'play', event => ui.checkFailed.call(this.player, event));\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.media,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality');\n\n // Save to storage\n this.player.storage.set({ quality: this.player.quality });\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n // Execute custom handler\n if (hasCustomHandler) {\n customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (!event.defaultPrevented && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n },\n 'speed',\n );\n } else {\n controls.showTab.call(this.player, event);\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n this.player.currentTime = event.target.value / event.target.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n ui.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n this.player.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\nimport i18n from '../i18n';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.enabled = player.isHTML5 && player.isVideo && player.config.ads.enabled && utils.is.string(this.publisherId) && this.publisherId.length;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.api)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (seekElement) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current quality\n player.media.quality = instance.getPlaybackQuality();\n\n utils.dispatchEvent.call(player, player.media, 'qualitychange');\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return instance.getPlaybackQuality();\n },\n set(input) {\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n instance.setPlaybackQuality(input);\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, instance.getAvailableQualityLevels());\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.api)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n const height = 240;\n const offset = (height - padding) / (height / 50);\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n this.media.style.transform = `translateY(-${offset}%)`;\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed.setPlaybackRate(input).then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed.getVideoUrl().then(value => {\n currentSrc = value;\n });\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n }\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(this.media.querySelectorAll('source'));\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 media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n media.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // TODO: Reset menus here\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.inline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.0.5\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options,\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n this.elements.original = this.media.cloneNode(true);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.playsinline)) {\n this.config.inline = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.inline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // If ads are enabled, wait for them first\n if (this.ads.enabled && !this.ads.initialized) {\n return this.ads.managerPromise.then(() => this.ads.play()).catch(() => this.media.play());\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(!this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true));\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.media.load();\n } else {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = parseFloat(targetTime.toFixed(4));\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseInt(this.config.duration, 10);\n\n // True duration\n const realDuration = this.media ? Number(this.media.duration) : 0;\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume, reset muted state\n if (this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently YouTube only\n * @param {string} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (utils.is.string(input)) {\n quality = input;\n }\n\n if (!utils.is.string(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.string(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!this.options.quality.includes(quality)) {\n this.debug.warn(`Unsupported quality option (${quality})`);\n return;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support, or there's no caption toggle\n if (!this.supported.ui || !utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : this.elements.container.className.indexOf(this.config.classNames.captions.active) === -1;\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // Toggle captions based on input\n this.toggleCaptions(!utils.is.empty(input));\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Events that show the controls\n const showEvents = [\n 'touchstart',\n 'touchmove',\n 'mouseenter',\n 'mousemove',\n 'focusin',\n ];\n\n // Events that delay hiding\n const delayEvents = [\n 'touchmove',\n 'touchend',\n 'mousemove',\n ];\n\n // Whether to show controls\n show = showEvents.includes(toggle.type);\n\n // Delay hiding on move events\n if (delayEvents.includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (!this.touch && toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (this.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n","// ==========================================================================\n// Plyr Polyfilled Build\n// plyr.js v3.0.4\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport 'babel-polyfill';\n\nimport 'custom-event-polyfill';\n\nimport Plyr from './plyr';\n\nexport default Plyr;\n"]} \ No newline at end of file
+{"version":3,"sources":["node_modules/core-js/modules/_global.js","node_modules/core-js/modules/_core.js","node_modules/core-js/modules/_is-object.js","node_modules/core-js/modules/_an-object.js","node_modules/core-js/modules/_fails.js","node_modules/core-js/modules/_descriptors.js","node_modules/core-js/modules/_dom-create.js","node_modules/core-js/modules/_ie8-dom-define.js","node_modules/core-js/modules/_to-primitive.js","node_modules/core-js/modules/_object-dp.js","node_modules/core-js/modules/_property-desc.js","node_modules/core-js/modules/_hide.js","node_modules/core-js/modules/_has.js","node_modules/core-js/modules/_uid.js","node_modules/core-js/modules/_redefine.js","node_modules/core-js/modules/_a-function.js","node_modules/core-js/modules/_ctx.js","node_modules/core-js/modules/_export.js","node_modules/core-js/modules/_typed.js","node_modules/core-js/modules/_library.js","node_modules/core-js/modules/_redefine-all.js","node_modules/core-js/modules/_an-instance.js","node_modules/core-js/modules/_to-integer.js","node_modules/core-js/modules/_to-length.js","node_modules/core-js/modules/_to-index.js","node_modules/core-js/modules/_cof.js","node_modules/core-js/modules/_iobject.js","node_modules/core-js/modules/_defined.js","node_modules/core-js/modules/_to-iobject.js","node_modules/core-js/modules/_to-absolute-index.js","node_modules/core-js/modules/_array-includes.js","node_modules/core-js/modules/_shared.js","node_modules/core-js/modules/_shared-key.js","node_modules/core-js/modules/_object-keys-internal.js","node_modules/core-js/modules/_enum-bug-keys.js","node_modules/core-js/modules/_object-gopn.js","node_modules/core-js/modules/_to-object.js","node_modules/core-js/modules/_array-fill.js","node_modules/core-js/modules/_wks.js","node_modules/core-js/modules/_set-to-string-tag.js","node_modules/core-js/modules/_typed-buffer.js","node_modules/core-js/modules/_species-constructor.js","node_modules/core-js/modules/_set-species.js","node_modules/core-js/modules/es6.typed.array-buffer.js","node_modules/core-js/modules/_classof.js","node_modules/core-js/modules/_iterators.js","node_modules/core-js/modules/_is-array-iter.js","node_modules/core-js/modules/_object-keys.js","node_modules/core-js/modules/_object-dps.js","node_modules/core-js/modules/_html.js","node_modules/core-js/modules/_object-create.js","node_modules/core-js/modules/_object-gpo.js","node_modules/core-js/modules/core.get-iterator-method.js","node_modules/core-js/modules/_is-array.js","node_modules/core-js/modules/_array-species-constructor.js","node_modules/core-js/modules/_array-species-create.js","node_modules/core-js/modules/_array-methods.js","node_modules/core-js/modules/_add-to-unscopables.js","node_modules/core-js/modules/_iter-step.js","node_modules/core-js/modules/_iter-create.js","node_modules/core-js/modules/_iter-define.js","node_modules/core-js/modules/es6.array.iterator.js","node_modules/core-js/modules/_iter-detect.js","node_modules/core-js/modules/_array-copy-within.js","node_modules/core-js/modules/_object-pie.js","node_modules/core-js/modules/_object-gopd.js","node_modules/core-js/modules/_typed-array.js","node_modules/core-js/modules/es6.typed.int8-array.js","node_modules/core-js/modules/es6.typed.uint8-array.js","node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","node_modules/core-js/modules/es6.typed.int16-array.js","node_modules/core-js/modules/es6.typed.uint16-array.js","node_modules/core-js/modules/es6.typed.int32-array.js","node_modules/core-js/modules/es6.typed.uint32-array.js","node_modules/core-js/modules/es6.typed.float32-array.js","node_modules/core-js/modules/es6.typed.float64-array.js","node_modules/core-js/modules/_iter-call.js","node_modules/core-js/modules/_for-of.js","node_modules/core-js/modules/_meta.js","node_modules/core-js/modules/_validate-collection.js","node_modules/core-js/modules/_collection-strong.js","node_modules/core-js/modules/_set-proto.js","node_modules/core-js/modules/_inherit-if-required.js","node_modules/core-js/modules/_collection.js","node_modules/core-js/modules/es6.map.js","node_modules/core-js/modules/es6.set.js","node_modules/core-js/modules/_object-gops.js","node_modules/core-js/modules/_object-assign.js","node_modules/core-js/modules/_collection-weak.js","node_modules/core-js/modules/es6.weak-map.js","node_modules/core-js/modules/es6.weak-set.js","node_modules/core-js/modules/es6.reflect.apply.js","node_modules/core-js/modules/_invoke.js","node_modules/core-js/modules/_bind.js","node_modules/core-js/modules/es6.reflect.construct.js","node_modules/core-js/modules/es6.reflect.define-property.js","node_modules/core-js/modules/es6.reflect.delete-property.js","node_modules/core-js/modules/es6.reflect.get.js","node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","node_modules/core-js/modules/es6.reflect.get-prototype-of.js","node_modules/core-js/modules/es6.reflect.has.js","node_modules/core-js/modules/es6.reflect.is-extensible.js","node_modules/core-js/modules/_own-keys.js","node_modules/core-js/modules/es6.reflect.own-keys.js","node_modules/core-js/modules/es6.reflect.prevent-extensions.js","node_modules/core-js/modules/es6.reflect.set.js","node_modules/core-js/modules/es6.reflect.set-prototype-of.js","node_modules/core-js/modules/_task.js","node_modules/core-js/modules/_microtask.js","node_modules/core-js/modules/_new-promise-capability.js","node_modules/core-js/modules/_perform.js","node_modules/core-js/modules/_promise-resolve.js","node_modules/core-js/modules/es6.promise.js","node_modules/core-js/modules/_wks-ext.js","node_modules/core-js/modules/_wks-define.js","node_modules/core-js/modules/_enum-keys.js","node_modules/core-js/modules/_object-gopn-ext.js","node_modules/core-js/modules/es6.symbol.js","node_modules/core-js/modules/_object-sap.js","node_modules/core-js/modules/es6.object.freeze.js","node_modules/core-js/modules/es6.object.seal.js","node_modules/core-js/modules/es6.object.prevent-extensions.js","node_modules/core-js/modules/es6.object.is-frozen.js","node_modules/core-js/modules/es6.object.is-sealed.js","node_modules/core-js/modules/es6.object.is-extensible.js","node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","node_modules/core-js/modules/es6.object.get-prototype-of.js","node_modules/core-js/modules/es6.object.keys.js","node_modules/core-js/modules/es6.object.get-own-property-names.js","node_modules/core-js/modules/es6.object.assign.js","node_modules/core-js/modules/_same-value.js","node_modules/core-js/modules/es6.object.is.js","node_modules/core-js/modules/es6.function.name.js","node_modules/core-js/modules/es6.string.raw.js","node_modules/core-js/modules/es6.string.from-code-point.js","node_modules/core-js/modules/_string-at.js","node_modules/core-js/modules/es6.string.code-point-at.js","node_modules/core-js/modules/_string-repeat.js","node_modules/core-js/modules/es6.string.repeat.js","node_modules/core-js/modules/_is-regexp.js","node_modules/core-js/modules/_string-context.js","node_modules/core-js/modules/_fails-is-regexp.js","node_modules/core-js/modules/es6.string.starts-with.js","node_modules/core-js/modules/es6.string.ends-with.js","node_modules/core-js/modules/es6.string.includes.js","node_modules/core-js/modules/_flags.js","node_modules/core-js/modules/es6.regexp.flags.js","node_modules/core-js/modules/_fix-re-wks.js","node_modules/core-js/modules/es6.regexp.match.js","node_modules/core-js/modules/es6.regexp.replace.js","node_modules/core-js/modules/es6.regexp.split.js","node_modules/core-js/modules/es6.regexp.search.js","node_modules/core-js/modules/_create-property.js","node_modules/core-js/modules/es6.array.from.js","node_modules/core-js/modules/es6.array.of.js","node_modules/core-js/modules/es6.array.copy-within.js","node_modules/core-js/modules/es6.array.find.js","node_modules/core-js/modules/es6.array.find-index.js","node_modules/core-js/modules/es6.array.fill.js","node_modules/core-js/modules/es6.number.is-finite.js","node_modules/core-js/modules/_is-integer.js","node_modules/core-js/modules/es6.number.is-integer.js","node_modules/core-js/modules/es6.number.is-safe-integer.js","node_modules/core-js/modules/es6.number.is-nan.js","node_modules/core-js/modules/es6.number.epsilon.js","node_modules/core-js/modules/es6.number.min-safe-integer.js","node_modules/core-js/modules/es6.number.max-safe-integer.js","node_modules/core-js/modules/_math-log1p.js","node_modules/core-js/modules/es6.math.acosh.js","node_modules/core-js/modules/es6.math.asinh.js","node_modules/core-js/modules/es6.math.atanh.js","node_modules/core-js/modules/_math-sign.js","node_modules/core-js/modules/es6.math.cbrt.js","node_modules/core-js/modules/es6.math.clz32.js","node_modules/core-js/modules/es6.math.cosh.js","node_modules/core-js/modules/_math-expm1.js","node_modules/core-js/modules/es6.math.expm1.js","node_modules/core-js/modules/_math-fround.js","node_modules/core-js/modules/es6.math.fround.js","node_modules/core-js/modules/es6.math.hypot.js","node_modules/core-js/modules/es6.math.imul.js","node_modules/core-js/modules/es6.math.log1p.js","node_modules/core-js/modules/es6.math.log10.js","node_modules/core-js/modules/es6.math.log2.js","node_modules/core-js/modules/es6.math.sign.js","node_modules/core-js/modules/es6.math.sinh.js","node_modules/core-js/modules/es6.math.tanh.js","node_modules/core-js/modules/es6.math.trunc.js","node_modules/core-js/modules/es7.array.includes.js","node_modules/core-js/modules/_object-to-array.js","node_modules/core-js/modules/es7.object.values.js","node_modules/core-js/modules/es7.object.entries.js","node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","node_modules/core-js/modules/_string-pad.js","node_modules/core-js/modules/_user-agent.js","node_modules/core-js/modules/es7.string.pad-start.js","node_modules/core-js/modules/es7.string.pad-end.js","node_modules/core-js/modules/web.timers.js","node_modules/core-js/modules/web.immediate.js","node_modules/core-js/modules/web.dom.iterable.js","node_modules/regenerator-runtime/runtime.js","node_modules/custom-event-polyfill/custom-event-polyfill.js","src/js/types.js","src/js/defaults.js","node_modules/loadjs/dist/loadjs.umd.js","src/js/utils.js","src/js/support.js","src/js/console.js","src/js/fullscreen.js","src/js/captions.js","src/js/i18n.js","src/js/ui.js","src/js/controls.js","src/js/listeners.js","src/js/storage.js","src/js/plugins/ads.js","src/js/plugins/youtube.js","src/js/plugins/vimeo.js","src/js/media.js","src/js/source.js","src/js/plyr.js","src/js/plyr.polyfilled.js"],"names":["isObject","require$$0","document","require$$1","require$$2","anObject","toPrimitive","IE8_DOM_DEFINE","dP","createDesc","has","hide","global","aFunction","core","ctx","redefine","uid","VIEW","toInteger","toLength","cof","IObject","defined","min","toIObject","toAbsoluteIndex","$keys","toObject","DESCRIPTORS","toIndex","$typed","anInstance","arrayFill","redefineAll","fails","LIBRARY","setToStringTag","SPECIES","buffer","$export","speciesConstructor","TAG","Iterators","enumBugKeys","getKeys","IE_PROTO","PROTOTYPE","dPs","ITERATOR","classof","isArray","asc","ArrayProto","create","descriptor","$iterCreate","getPrototypeOf","step","addToUnscopables","pIE","require$$3","require$$4","require$$5","require$$6","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","isArrayIter","require$$21","require$$22","require$$23","require$$24","getIterFn","require$$25","require$$26","require$$27","require$$28","require$$29","require$$30","require$$31","require$$32","require$$33","require$$34","require$$35","require$$36","require$$37","require$$38","$iterators","call","forOf","validate","$iterDefine","setSpecies","meta","$iterDetect","inheritIfRequired","strong","gOPS","createArrayMethod","id","$has","weak","assign","invoke","bind","gOPD","getProto","Reflect","gOPN","setProto","process","cel","html","Promise","isNode","newPromiseCapability","TypeError","newPromiseCapabilityModule","perform","promiseResolve","wksExt","toString","$GOPD","$DP","gOPNExt","wks","shared","ObjectProto","USE_NATIVE","$fails","_create","$defineProperty","enumKeys","wksDefine","$getOwnPropertyDescriptor","$getPrototypeOf","isRegExp","MATCH","context","createProperty","$find","KEY","forced","floor","isInteger","log1p","sign","$expm1","abs","exp","expm1","isEnum","ownKeys","repeat","navigator","userAgent","$pad","wrap","$task","i","NAME","this","CustomEvent","providers","types","defaults","window","language","split","define","utils","input","instanceof","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","test","array","nodeList","length","object","keys","constructor","documentMode","documentElement","style","platform","url","responseType","resolve","reject","request","XMLHttpRequest","addEventListener","JSON","parse","responseText","e","response","Error","statusText","open","send","is","prefix","hasId","isCached","exists","querySelectorAll","injectSprite","data","innerHTML","body","insertBefore","childNodes","container","createElement","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","content","fetch","then","empty","result","setItem","stringify","catch","Math","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","entries","key","value","sel","existingAttributes","existing","selector","s","trim","className","replace","stripped","parts","start","charAt","class","toggle","contains","classList","removeAttribute","prototype","match","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","duration","currentTime","seekTooltip","classNames","tooltip","error","debug","warn","toggleNativeControls","focused","activeElement","focusable","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","passiveListeners","bubbles","detail","boolean","plyr","dispatchEvent","toggleState","pressed","getAttribute","state","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","source","shift","extend","youtube","vimeo","regex","$2","parser","href","search","startsWith","parseUrl","hashes","indexOf","reduce","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","getRatio","w","h","ratio","transitionEndEvent","undefined","offsetHeight","provider","inline","api","ui","browser","getBrowser","playsInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","defineProperty","range","matchMedia","noop","Console","enabled","console","log","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","toggleClass","fallback","Fullscreen","name","stopPropagation","update","native","iosNative","playing","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","action","enter","exit","hasClass","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","exitFullscreen","prefixes","some","pre","stored","get","isYouTube","textTracks","setCaptionsMenu","getAttributesFromSelector","insertAfter","getTracks","tracks","isIE","URL","src","track","hostname","location","protocol","createObjectURL","blob","setLanguage","show","setCue","mode","currentTrack","getCurrentTrack","activeCues","isVimeo","embed","enableTextTrack","filter","cue","setText","getCueAsHTML","emptyElement","caption","i18n","seekTime","title","uiSupported","listeners","inject","setup","muted","speed","loop","quality","timeUpdate","checkPlaying","ready","setTitle","label","isEmbed","iframe","stopped","paused","toggleControls","loading","timers","setTimeout","failed","networkState","setRange","updateRangeFill","getElementsByTagName","nodeValue","getPercentage","setProgress","buffered","invert","invertTime","updateTimeDisplay","seeking","updateProgress","hasDuration","displayDuration","updateSeekTooltip","isWebkit","setProperty","iconUrl","svg4everybody","namespace","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","hidden","badge","menu","buttonType","toCamelCase","labelPressed","iconPressed","control","createIcon","createLabel","push","suffix","list","checked","item","radio","faux","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","touch","pageX","left","parseFloat","setting","tab","tabs","pane","panes","toggleTab","getBadge","createBadge","createMenuItem","getLabel","updateSetting","getLanguage","default","hasTracks","unshift","form","isMenuItem","isButton","clone","position","opacity","scrollWidth","scrollHeight","getElementById","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setSpeedMenu","loadSprite","findElements","repaint","labels","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","toggleCaptions","isTouch","keyboard","tabFocus","hideControls","durationUpdate","hasAudio","showPosterOnEnd","load","updateVolume","checkLoading","clickToPlay","ended","disableContextMenu","set","concat","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","forward","showTab","toggleInvert","hover","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","Storage","store","json","removeItem","Ads","publisherId","ads","initialized","manager","loader","cuePoints","safetyTimer","countdownTimer","managerPromise","google","ima","loadScript","urls","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","getRemainingTime","setInterval","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","cues","setVolume","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","args","handlers","handler","apply","Date","now","base","buildUrlParams","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","instance","getPlaybackQuality","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stop","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","setQualityMenu","getAvailableQualityLevels","Vimeo","padding","offset","transform","parseVimeoId","setCurrentTime","selected","setLoop","currentSrc","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","frame","seconds","blankVideo","insertElement","attribute","cancelRequests","html5","check","crossorigin","poster","addStyleHook","insertElements","jQuery","original","tagName","getProviderByUrl","getUrlParams","truthy","playsinline","hasAttribute","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","showEvents","delayEvents","noTransition","toggled","soft","done","clear","unload","mime","readyState","targetTime","end","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","change","states","webkitPresentationMode"],"mappings":"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","file":"plyr.polyfilled.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","module.exports = false;\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.0.6/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 'default',\n options: [\n 'hd2160',\n 'hd1440',\n 'hd1080',\n 'hd720',\n 'large',\n 'medium',\n 'small',\n 'tiny',\n 'default',\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: window.navigator.language.split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n 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 = path.replace(/^css!/, ''); // remove \"css!\" prefix\n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type, bubbles, detail) {\n // Bail if no element\n if (!utils.is.element(element) || !utils.is.string(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles: utils.is.boolean(bubbles) ? bubbles : false,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, inline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const playsInline = browser.isIPhone && inline && support.inline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n inline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.name = Fullscreen.name;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', () => {\n this.toggle();\n });\n\n // Prevent double click on controls bubbling up\n utils.on(this.player.elements.controls, 'dblclick', event => event.stopPropagation());\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return false;\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get name() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.name}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.name}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n document.cancelFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.name}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n return captions.getTracks.call(this).find(track => track.language.toLowerCase() === this.language);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // If there's no caption toggle, bail\n if (!utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality options\n this.options.quality = [];\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', i18n.get('frameTitle', this.config));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n ui.setProgress.call(this, this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport i18n from './i18n';\nimport captions from './captions';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = i18n.get(label, this.config);\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n ),\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the YouTube quality menu\n // TODO: Support for HTML5\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n } else {\n this.options.quality = this.config.quality.options;\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.isYouTube;\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 'hd2160':\n label = '4K';\n break;\n\n case 'hd1440':\n label = 'WQHD';\n break;\n\n case 'hd1080':\n label = 'HD';\n break;\n\n case 'hd720':\n label = 'HD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n this.options.quality.forEach(quality =>\n controls.createMenuItem.call(this, quality, list, type, controls.getLabel.call(this, 'quality', quality), getBadge(quality)),\n );\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? 'Normal' : `${value}&times;`;\n\n case 'quality':\n switch (value) {\n case 'hd2160':\n return '2160P';\n case 'hd1440':\n return '1440P';\n case 'hd1080':\n return '1080P';\n case 'hd720':\n return '720P';\n case 'large':\n return '480P';\n case 'medium':\n return '360P';\n case 'small':\n return '240P';\n case 'tiny':\n return 'Tiny';\n case 'default':\n return 'Auto';\n default:\n return value;\n }\n\n case 'captions':\n return controls.getLanguage.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.captions.active ? this.captions.language : i18n.get('disabled', this.config);\n break;\n\n default:\n value = this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // Update the label\n if (!utils.is.empty(value)) {\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n }\n\n // Find the radio option\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n // Check it\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n getLanguage() {\n if (!this.supported.ui) {\n return null;\n }\n\n if (support.textTracks && captions.getTracks.call(this).length && this.captions.active) {\n const currentTrack = captions.getCurrentTrack.call(this);\n\n if (utils.is.track(currentTrack)) {\n return currentTrack.label;\n }\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const hasTracks = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, hasTracks);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // If there's no captions, bail\n if (!hasTracks) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: track.language,\n label: !utils.is.empty(track.label) ? track.label : track.language.toUpperCase(),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label || track.language,\n controls.createBadge.call(this, track.language.toUpperCase()),\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the default speeds\n if (!utils.is.array(this.options.speed) || !this.options.speed.length) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed);\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => controls.createMenuItem.call(this, speed, list, type, controls.getLabel.call(this, 'speed', speed)));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.config.controls.includes('settings') && this.config.settings.includes('speed')) {\n controls.setSpeedMenu.call(this);\n }\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // HTML or Element passed as the option\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: controls.getLanguage.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.fastForward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.player.toggleControls(event);\n });\n }\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking', event => ui.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.showPosterOnEnd) {\n // Restart\n this.player.restart();\n\n // Re-load media\n this.player.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing', event => ui.updateProgress.call(this.player, event));\n\n // Handle native mute\n utils.on(this.player.media, 'volumechange', event => ui.updateVolume.call(this.player, event));\n\n // Handle native play/pause\n utils.on(this.player.media, 'playing play pause ended emptied', event => ui.checkPlaying.call(this.player, event));\n\n // Loading\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // Check if media failed to load\n // utils.on(this.player.media, 'play', event => ui.checkFailed.call(this.player, event));\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.media,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality');\n\n // Save to storage\n this.player.storage.set({ quality: this.player.quality });\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n },\n 'speed',\n );\n } else {\n controls.showTab.call(this.player, event);\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n this.player.currentTime = event.target.value / event.target.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n ui.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n this.player.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\nimport i18n from '../i18n';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.enabled = player.isHTML5 && player.isVideo && player.config.ads.enabled && utils.is.string(this.publisherId) && this.publisherId.length;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.api)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (seekElement) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current quality\n player.media.quality = instance.getPlaybackQuality();\n\n utils.dispatchEvent.call(player, player.media, 'qualitychange');\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return instance.getPlaybackQuality();\n },\n set(input) {\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n instance.setPlaybackQuality(input);\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, instance.getAvailableQualityLevels());\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.api)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n const height = 240;\n const offset = (height - padding) / (height / 50);\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n this.media.style.transform = `translateY(-${offset}%)`;\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed.setPlaybackRate(input).then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed.getVideoUrl().then(value => {\n currentSrc = value;\n });\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n }\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(this.media.querySelectorAll('source'));\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 media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n media.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // TODO: Reset menus here\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.inline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.0.6\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options,\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n this.elements.original = this.media.cloneNode(true);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.playsinline)) {\n this.config.inline = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.inline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // If ads are enabled, wait for them first\n if (this.ads.enabled && !this.ads.initialized) {\n return this.ads.managerPromise.then(() => this.ads.play()).catch(() => this.media.play());\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(!this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true));\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.media.load();\n } else {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = parseFloat(targetTime.toFixed(4));\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseInt(this.config.duration, 10);\n\n // True duration\n const realDuration = this.media ? Number(this.media.duration) : 0;\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume, reset muted state\n if (this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently YouTube only\n * @param {string} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (utils.is.string(input)) {\n quality = input;\n }\n\n if (!utils.is.string(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.string(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!this.options.quality.includes(quality)) {\n this.debug.warn(`Unsupported quality option (${quality})`);\n return;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support, or there's no caption toggle\n if (!this.supported.ui || !utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : this.elements.container.className.indexOf(this.config.classNames.captions.active) === -1;\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // Toggle captions based on input\n this.toggleCaptions(!utils.is.empty(input));\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Events that show the controls\n const showEvents = [\n 'touchstart',\n 'touchmove',\n 'mouseenter',\n 'mousemove',\n 'focusin',\n ];\n\n // Events that delay hiding\n const delayEvents = [\n 'touchmove',\n 'touchend',\n 'mousemove',\n ];\n\n // Whether to show controls\n show = showEvents.includes(toggle.type);\n\n // Delay hiding on move events\n if (delayEvents.includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (!this.touch && toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (this.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n","// ==========================================================================\n// Plyr Polyfilled Build\n// plyr.js v3.0.6\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport 'babel-polyfill';\n\nimport 'custom-event-polyfill';\n\nimport Plyr from './plyr';\n\nexport default Plyr;\n"]} \ No newline at end of file
diff --git a/dist/plyr.polyfilled.min.js b/dist/plyr.polyfilled.min.js
index 42f67305..c3235187 100644
--- a/dist/plyr.polyfilled.min.js
+++ b/dist/plyr.polyfilled.min.js
@@ -1,2 +1,2 @@
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)}),i=t(function(e){var t=e.exports={version:"2.5.3"};"number"==typeof __e&&(__e=t)}),r=function(e){return"object"==typeof e?null!==e:"function"==typeof e},o=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e},s=function(e){try{return!!e()}catch(e){return!0}},a=!s(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),l=n.document,c=r(l)&&r(l.createElement),u=function(e){return c?l.createElement(e):{}},h=!a&&!s(function(){return 7!=Object.defineProperty(u("div"),"a",{get:function(){return 7}}).a}),d=function(e,t){if(!r(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!r(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")},f=Object.defineProperty,p={f:a?Object.defineProperty:function(e,t,n){if(o(e),t=d(t,!0),o(n),h)try{return f(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},g=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},m=a?function(e,t,n){return p.f(e,t,g(1,n))}:function(e,t,n){return e[t]=n,e},y={}.hasOwnProperty,v=function(e,t){return y.call(e,t)},b=0,w=Math.random(),E=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++b+w).toString(36))},k=t(function(e){var t=E("src"),r=Function.toString,o=(""+r).split("toString");i.inspectSource=function(e){return r.call(e)},(e.exports=function(e,i,r,s){var a="function"==typeof r;a&&(v(r,"name")||m(r,"name",i)),e[i]!==r&&(a&&(v(r,t)||m(r,t,e[i]?""+e[i]:o.join(String(i)))),e===n?e[i]=r:s?e[i]?e[i]=r:m(e,i,r):(delete e[i],m(e,i,r)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[t]||r.call(this)})}),S=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e},T=function(e,t,n){if(S(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,i){return e.call(t,n,i)};case 3:return function(n,i,r){return e.call(t,n,i,r)}}return function(){return e.apply(t,arguments)}},A=function(e,t,r){var o,s,a,l,c=e&A.F,u=e&A.G,h=e&A.S,d=e&A.P,f=e&A.B,p=u?n:h?n[t]||(n[t]={}):(n[t]||{}).prototype,g=u?i:i[t]||(i[t]={}),y=g.prototype||(g.prototype={});for(o in u&&(r=t),r)a=((s=!c&&p&&void 0!==p[o])?p:r)[o],l=f&&s?T(a,n):d&&"function"==typeof a?T(Function.call,a):a,p&&k(p,o,a,e&A.U),g[o]!=a&&m(g,o,l),d&&y[o]!=a&&(y[o]=a)};n.core=i,A.F=1,A.G=2,A.S=4,A.P=8,A.B=16,A.W=32,A.U=64,A.R=128;for(var _,C=A,P=E("typed_array"),x=E("view"),M=!(!n.ArrayBuffer||!n.DataView),L=M,N=0,O="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");N<9;)(_=n[O[N++]])?(m(_.prototype,P,!0),m(_.prototype,x,!0)):L=!1;var I={ABV:M,CONSTR:L,TYPED:P,VIEW:x},j=function(e,t,n){for(var i in t)k(e,i,t[i],n);return e},F=function(e,t,n,i){if(!(e instanceof t)||void 0!==i&&i in e)throw TypeError(n+": incorrect invocation!");return e},R=Math.ceil,B=Math.floor,q=function(e){return isNaN(e=+e)?0:(e>0?B:R)(e)},V=Math.min,D=function(e){return e>0?V(q(e),9007199254740991):0},U=function(e){if(void 0===e)return 0;var t=q(e),n=D(t);if(t!==n)throw RangeError("Wrong length!");return n},H={}.toString,W=function(e){return H.call(e).slice(8,-1)},G=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==W(e)?e.split(""):Object(e)},z=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e},Y=function(e){return G(z(e))},K=Math.max,Q=Math.min,J=function(e,t){return(e=q(e))<0?K(e+t,0):Q(e,t)},X=function(e){return function(t,n,i){var r,o=Y(t),s=D(o.length),a=J(i,s);if(e&&n!=n){for(;s>a;)if((r=o[a++])!=r)return!0}else for(;s>a;a++)if((e||a in o)&&o[a]===n)return e||a||0;return!e&&-1}},$=n["__core-js_shared__"]||(n["__core-js_shared__"]={}),Z=function(e){return $[e]||($[e]={})},ee=Z("keys"),te=function(e){return ee[e]||(ee[e]=E(e))},ne=X(!1),ie=te("IE_PROTO"),re=function(e,t){var n,i=Y(e),r=0,o=[];for(n in i)n!=ie&&v(i,n)&&o.push(n);for(;t.length>r;)v(i,n=t[r++])&&(~ne(o,n)||o.push(n));return o},oe="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),se=oe.concat("length","prototype"),ae={f:Object.getOwnPropertyNames||function(e){return re(e,se)}},le=function(e){return Object(z(e))},ce=function(e){for(var t=le(this),n=D(t.length),i=arguments.length,r=J(i>1?arguments[1]:void 0,n),o=i>2?arguments[2]:void 0,s=void 0===o?n:J(o,n);s>r;)t[r++]=e;return t},ue=t(function(e){var t=Z("wks"),i=n.Symbol,r="function"==typeof i;(e.exports=function(e){return t[e]||(t[e]=r&&i[e]||(r?i:E)("Symbol."+e))}).store=t}),he=p.f,de=ue("toStringTag"),fe=function(e,t,n){e&&!v(e=n?e:e.prototype,de)&&he(e,de,{configurable:!0,value:t})},pe=t(function(e,t){var i=ae.f,r=p.f,o="prototype",l="Wrong index!",c=n.ArrayBuffer,u=n.DataView,h=n.Math,d=n.RangeError,f=n.Infinity,g=c,y=h.abs,v=h.pow,b=h.floor,w=h.log,E=h.LN2,k=a?"_b":"buffer",S=a?"_l":"byteLength",T=a?"_o":"byteOffset";function A(e,t,n){var i,r,o,s=new Array(n),a=8*n-t-1,l=(1<<a)-1,c=l>>1,u=23===t?v(2,-24)-v(2,-77):0,h=0,d=e<0||0===e&&1/e<0?1:0;for((e=y(e))!=e||e===f?(r=e!=e?1:0,i=l):(i=b(w(e)/E),e*(o=v(2,-i))<1&&(i--,o*=2),(e+=i+c>=1?u/o:u*v(2,1-c))*o>=2&&(i++,o/=2),i+c>=l?(r=0,i=l):i+c>=1?(r=(e*o-1)*v(2,t),i+=c):(r=e*v(2,c-1)*v(2,t),i=0));t>=8;s[h++]=255&r,r/=256,t-=8);for(i=i<<t|r,a+=t;a>0;s[h++]=255&i,i/=256,a-=8);return s[--h]|=128*d,s}function _(e,t,n){var i,r=8*n-t-1,o=(1<<r)-1,s=o>>1,a=r-7,l=n-1,c=e[l--],u=127&c;for(c>>=7;a>0;u=256*u+e[l],l--,a-=8);for(i=u&(1<<-a)-1,u>>=-a,a+=t;a>0;i=256*i+e[l],l--,a-=8);if(0===u)u=1-s;else{if(u===o)return i?NaN:c?-f:f;i+=v(2,t),u-=s}return(c?-1:1)*i*v(2,u-t)}function C(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]}function P(e){return[255&e]}function x(e){return[255&e,e>>8&255]}function M(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]}function L(e){return A(e,52,8)}function N(e){return A(e,23,4)}function O(e,t,n){r(e[o],t,{get:function(){return this[n]}})}function R(e,t,n,i){var r=U(+n);if(r+t>e[S])throw d(l);var o=e[k]._b,s=r+e[T],a=o.slice(s,s+t);return i?a:a.reverse()}function B(e,t,n,i,r,o){var s=U(+n);if(s+t>e[S])throw d(l);for(var a=e[k]._b,c=s+e[T],u=i(+r),h=0;h<t;h++)a[c+h]=u[o?h:t-h-1]}if(I.ABV){if(!s(function(){c(1)})||!s(function(){new c(-1)})||s(function(){return new c,new c(1.5),new c(NaN),"ArrayBuffer"!=c.name})){for(var V,H=(c=function(e){return F(this,c),new g(U(e))})[o]=g[o],W=i(g),G=0;W.length>G;)(V=W[G++])in c||m(c,V,g[V]);H.constructor=c}var z=new u(new c(2)),Y=u[o].setInt8;z.setInt8(0,2147483648),z.setInt8(1,2147483649),!z.getInt8(0)&&z.getInt8(1)||j(u[o],{setInt8:function(e,t){Y.call(this,e,t<<24>>24)},setUint8:function(e,t){Y.call(this,e,t<<24>>24)}},!0)}else c=function(e){F(this,c,"ArrayBuffer");var t=U(e);this._b=ce.call(new Array(t),0),this[S]=t},u=function(e,t,n){F(this,u,"DataView"),F(e,c,"DataView");var i=e[S],r=q(t);if(r<0||r>i)throw d("Wrong offset!");if(r+(n=void 0===n?i-r:D(n))>i)throw d("Wrong length!");this[k]=e,this[T]=r,this[S]=n},a&&(O(c,"byteLength","_l"),O(u,"buffer","_b"),O(u,"byteLength","_l"),O(u,"byteOffset","_o")),j(u[o],{getInt8:function(e){return R(this,1,e)[0]<<24>>24},getUint8:function(e){return R(this,1,e)[0]},getInt16:function(e){var t=R(this,2,e,arguments[1]);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=R(this,2,e,arguments[1]);return t[1]<<8|t[0]},getInt32:function(e){return C(R(this,4,e,arguments[1]))},getUint32:function(e){return C(R(this,4,e,arguments[1]))>>>0},getFloat32:function(e){return _(R(this,4,e,arguments[1]),23,4)},getFloat64:function(e){return _(R(this,8,e,arguments[1]),52,8)},setInt8:function(e,t){B(this,1,e,P,t)},setUint8:function(e,t){B(this,1,e,P,t)},setInt16:function(e,t){B(this,2,e,x,t,arguments[2])},setUint16:function(e,t){B(this,2,e,x,t,arguments[2])},setInt32:function(e,t){B(this,4,e,M,t,arguments[2])},setUint32:function(e,t){B(this,4,e,M,t,arguments[2])},setFloat32:function(e,t){B(this,4,e,N,t,arguments[2])},setFloat64:function(e,t){B(this,8,e,L,t,arguments[2])}});fe(c,"ArrayBuffer"),fe(u,"DataView"),m(u[o],I.VIEW,!0),t.ArrayBuffer=c,t.DataView=u}),ge=ue("species"),me=function(e,t){var n,i=o(e).constructor;return void 0===i||void 0==(n=o(i)[ge])?t:S(n)},ye=ue("species"),ve=function(e){var t=n[e];a&&t&&!t[ye]&&p.f(t,ye,{configurable:!0,get:function(){return this}})},be=n.ArrayBuffer,we=pe.ArrayBuffer,Ee=pe.DataView,ke=I.ABV&&be.isView,Se=we.prototype.slice,Te=I.VIEW;C(C.G+C.W+C.F*(be!==we),{ArrayBuffer:we}),C(C.S+C.F*!I.CONSTR,"ArrayBuffer",{isView:function(e){return ke&&ke(e)||r(e)&&Te in e}}),C(C.P+C.U+C.F*s(function(){return!new we(2).slice(1,void 0).byteLength}),"ArrayBuffer",{slice:function(e,t){if(void 0!==Se&&void 0===t)return Se.call(o(this),e);for(var n=o(this).byteLength,i=J(e,n),r=J(void 0===t?n:t,n),s=new(me(this,we))(D(r-i)),a=new Ee(this),l=new Ee(s),c=0;i<r;)l.setUint8(c++,a.getUint8(i++));return s}}),ve("ArrayBuffer");var Ae=ue("toStringTag"),_e="Arguments"==W(function(){return arguments}()),Ce=function(e){var t,n,i;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),Ae))?n:_e?W(t):"Object"==(i=W(t))&&"function"==typeof t.callee?"Arguments":i},Pe={},xe=ue("iterator"),Me=Array.prototype,Le=function(e){return void 0!==e&&(Pe.Array===e||Me[xe]===e)},Ne=Object.keys||function(e){return re(e,oe)},Oe=a?Object.defineProperties:function(e,t){o(e);for(var n,i=Ne(t),r=i.length,s=0;r>s;)p.f(e,n=i[s++],t[n]);return e},Ie=n.document,je=Ie&&Ie.documentElement,Fe=te("IE_PROTO"),Re=function(){},Be=function(){var e,t=u("iframe"),n=oe.length;for(t.style.display="none",je.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),Be=e.F;n--;)delete Be.prototype[oe[n]];return Be()},qe=Object.create||function(e,t){var n;return null!==e?(Re.prototype=o(e),n=new Re,Re.prototype=null,n[Fe]=e):n=Be(),void 0===t?n:Oe(n,t)},Ve=te("IE_PROTO"),De=Object.prototype,Ue=Object.getPrototypeOf||function(e){return e=le(e),v(e,Ve)?e[Ve]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?De:null},He=ue("iterator"),We=i.getIteratorMethod=function(e){if(void 0!=e)return e[He]||e["@@iterator"]||Pe[Ce(e)]},Ge=Array.isArray||function(e){return"Array"==W(e)},ze=ue("species"),Ye=function(e,t){return new(function(e){var t;return Ge(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!Ge(t.prototype)||(t=void 0),r(t)&&null===(t=t[ze])&&(t=void 0)),void 0===t?Array:t}(e))(t)},Ke=function(e,t){var n=1==e,i=2==e,r=3==e,o=4==e,s=6==e,a=5==e||s,l=t||Ye;return function(t,c,u){for(var h,d,f=le(t),p=G(f),g=T(c,u,3),m=D(p.length),y=0,v=n?l(t,m):i?l(t,0):void 0;m>y;y++)if((a||y in p)&&(d=g(h=p[y],y,f),e))if(n)v[y]=d;else if(d)switch(e){case 3:return!0;case 5:return h;case 6:return y;case 2:v.push(h)}else if(o)return!1;return s?-1:r||o?o:v}},Qe=ue("unscopables"),Je=Array.prototype;void 0==Je[Qe]&&m(Je,Qe,{});var Xe=function(e){Je[Qe][e]=!0},$e=function(e,t){return{value:t,done:!!e}},Ze={};m(Ze,ue("iterator"),function(){return this});var et=function(e,t,n){e.prototype=qe(Ze,{next:g(1,n)}),fe(e,t+" Iterator")},tt=ue("iterator"),nt=!([].keys&&"next"in[].keys()),it=function(){return this},rt=function(e,t,n,i,r,o,s){et(n,t,i);var a,l,c,u=function(e){if(!nt&&e in p)return p[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},h=t+" Iterator",d="values"==r,f=!1,p=e.prototype,g=p[tt]||p["@@iterator"]||r&&p[r],y=!nt&&g||u(r),b=r?d?u("entries"):y:void 0,w="Array"==t&&p.entries||g;if(w&&(c=Ue(w.call(new e)))!==Object.prototype&&c.next&&(fe(c,h,!0),v(c,tt)||m(c,tt,it)),d&&g&&"values"!==g.name&&(f=!0,y=function(){return g.call(this)}),(nt||f||!p[tt])&&m(p,tt,y),Pe[t]=y,Pe[h]=it,r)if(a={values:d?y:u("values"),keys:o?y:u("keys"),entries:b},s)for(l in a)l in p||k(p,l,a[l]);else C(C.P+C.F*(nt||f),t,a);return a},ot=rt(Array,"Array",function(e,t){this._t=Y(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,$e(1)):$e(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])},"values");Pe.Arguments=Pe.Array,Xe("keys"),Xe("values"),Xe("entries");var st=ue("iterator"),at=!1;try{[7][st]().return=function(){at=!0}}catch(e){}var lt=function(e,t){if(!t&&!at)return!1;var n=!1;try{var i=[7],r=i[st]();r.next=function(){return{done:n=!0}},i[st]=function(){return r},e(i)}catch(e){}return n},ct=[].copyWithin||function(e,t){var n=le(this),i=D(n.length),r=J(e,i),o=J(t,i),s=arguments.length>2?arguments[2]:void 0,a=Math.min((void 0===s?i:J(s,i))-o,i-r),l=1;for(o<r&&r<o+a&&(l=-1,o+=a-1,r+=a-1);a-- >0;)o in n?n[r]=n[o]:delete n[r],r+=l,o+=l;return n},ut={f:{}.propertyIsEnumerable},ht=Object.getOwnPropertyDescriptor,dt={f:a?ht:function(e,t){if(e=Y(e),t=d(t,!0),h)try{return ht(e,t)}catch(e){}if(v(e,t))return g(!ut.f.call(e,t),e[t])}},ft=t(function(e){if(a){var t=n,i=s,o=C,l=I,c=pe,u=T,h=F,f=g,y=m,b=j,w=q,k=D,S=U,A=J,_=d,P=v,x=Ce,M=r,L=le,N=Le,O=qe,R=Ue,B=ae.f,V=We,H=E,W=ue,G=Ke,z=X,Y=me,K=ot,Q=Pe,$=lt,Z=ve,ee=ce,te=ct,ne=p,ie=dt,re=ne.f,oe=ie.f,se=t.RangeError,he=t.TypeError,de=t.Uint8Array,fe=Array.prototype,ge=c.ArrayBuffer,ye=c.DataView,be=G(0),we=G(2),Ee=G(3),ke=G(4),Se=G(5),Te=G(6),Ae=z(!0),_e=z(!1),xe=K.values,Me=K.keys,Ne=K.entries,Oe=fe.lastIndexOf,Ie=fe.reduce,je=fe.reduceRight,Fe=fe.join,Re=fe.sort,Be=fe.slice,Ve=fe.toString,De=fe.toLocaleString,He=W("iterator"),Ge=W("toStringTag"),ze=H("typed_constructor"),Ye=H("def_constructor"),Qe=l.CONSTR,Je=l.TYPED,Xe=l.VIEW,$e=G(1,function(e,t){return it(Y(e,e[Ye]),t)}),Ze=i(function(){return 1===new de(new Uint16Array([1]).buffer)[0]}),et=!!de&&!!de.prototype.set&&i(function(){new de(1).set({})}),tt=function(e,t){var n=w(e);if(n<0||n%t)throw se("Wrong offset!");return n},nt=function(e){if(M(e)&&Je in e)return e;throw he(e+" is not a typed array!")},it=function(e,t){if(!(M(e)&&ze in e))throw he("It is not a typed array constructor!");return new e(t)},rt=function(e,t){return st(Y(e,e[Ye]),t)},st=function(e,t){for(var n=0,i=t.length,r=it(e,i);i>n;)r[n]=t[n++];return r},at=function(e,t,n){re(e,t,{get:function(){return this._d[n]}})},ut=function(e){var t,n,i,r,o,s,a=L(e),l=arguments.length,c=l>1?arguments[1]:void 0,h=void 0!==c,d=V(a);if(void 0!=d&&!N(d)){for(s=d.call(a),i=[],t=0;!(o=s.next()).done;t++)i.push(o.value);a=i}for(h&&l>2&&(c=u(c,arguments[2],2)),t=0,n=k(a.length),r=it(this,n);n>t;t++)r[t]=h?c(a[t],t):a[t];return r},ht=function(){for(var e=0,t=arguments.length,n=it(this,t);t>e;)n[e]=arguments[e++];return n},ft=!!de&&i(function(){De.call(new de(1))}),pt=function(){return De.apply(ft?Be.call(nt(this)):nt(this),arguments)},gt={copyWithin:function(e,t){return te.call(nt(this),e,t,arguments.length>2?arguments[2]:void 0)},every:function(e){return ke(nt(this),e,arguments.length>1?arguments[1]:void 0)},fill:function(e){return ee.apply(nt(this),arguments)},filter:function(e){return rt(this,we(nt(this),e,arguments.length>1?arguments[1]:void 0))},find:function(e){return Se(nt(this),e,arguments.length>1?arguments[1]:void 0)},findIndex:function(e){return Te(nt(this),e,arguments.length>1?arguments[1]:void 0)},forEach:function(e){be(nt(this),e,arguments.length>1?arguments[1]:void 0)},indexOf:function(e){return _e(nt(this),e,arguments.length>1?arguments[1]:void 0)},includes:function(e){return Ae(nt(this),e,arguments.length>1?arguments[1]:void 0)},join:function(e){return Fe.apply(nt(this),arguments)},lastIndexOf:function(e){return Oe.apply(nt(this),arguments)},map:function(e){return $e(nt(this),e,arguments.length>1?arguments[1]:void 0)},reduce:function(e){return Ie.apply(nt(this),arguments)},reduceRight:function(e){return je.apply(nt(this),arguments)},reverse:function(){for(var e,t=nt(this).length,n=Math.floor(t/2),i=0;i<n;)e=this[i],this[i++]=this[--t],this[t]=e;return this},some:function(e){return Ee(nt(this),e,arguments.length>1?arguments[1]:void 0)},sort:function(e){return Re.call(nt(this),e)},subarray:function(e,t){var n=nt(this),i=n.length,r=A(e,i);return new(Y(n,n[Ye]))(n.buffer,n.byteOffset+r*n.BYTES_PER_ELEMENT,k((void 0===t?i:A(t,i))-r))}},mt=function(e,t){return rt(this,Be.call(nt(this),e,t))},yt=function(e){nt(this);var t=tt(arguments[1],1),n=this.length,i=L(e),r=k(i.length),o=0;if(r+t>n)throw se("Wrong length!");for(;o<r;)this[t+o]=i[o++]},vt={entries:function(){return Ne.call(nt(this))},keys:function(){return Me.call(nt(this))},values:function(){return xe.call(nt(this))}},bt=function(e,t){return M(e)&&e[Je]&&"symbol"!=typeof t&&t in e&&String(+t)==String(t)},wt=function(e,t){return bt(e,t=_(t,!0))?f(2,e[t]):oe(e,t)},Et=function(e,t,n){return!(bt(e,t=_(t,!0))&&M(n)&&P(n,"value"))||P(n,"get")||P(n,"set")||n.configurable||P(n,"writable")&&!n.writable||P(n,"enumerable")&&!n.enumerable?re(e,t,n):(e[t]=n.value,e)};Qe||(ie.f=wt,ne.f=Et),o(o.S+o.F*!Qe,"Object",{getOwnPropertyDescriptor:wt,defineProperty:Et}),i(function(){Ve.call({})})&&(Ve=De=function(){return Fe.call(this)});var kt=b({},gt);b(kt,vt),y(kt,He,vt.values),b(kt,{slice:mt,set:yt,constructor:function(){},toString:Ve,toLocaleString:pt}),at(kt,"buffer","b"),at(kt,"byteOffset","o"),at(kt,"byteLength","l"),at(kt,"length","e"),re(kt,Ge,{get:function(){return this[Je]}}),e.exports=function(e,n,r,s){var a=e+((s=!!s)?"Clamped":"")+"Array",c="get"+e,u="set"+e,d=t[a],f=d||{},p=d&&R(d),g=!d||!l.ABV,m={},v=d&&d.prototype,b=function(e,t){re(e,t,{get:function(){return function(e,t){var i=e._d;return i.v[c](t*n+i.o,Ze)}(this,t)},set:function(e){return function(e,t,i){var r=e._d;s&&(i=(i=Math.round(i))<0?0:i>255?255:255&i),r.v[u](t*n+r.o,i,Ze)}(this,t,e)},enumerable:!0})};g?(d=r(function(e,t,i,r){h(e,d,a,"_d");var o,s,l,c,u=0,f=0;if(M(t)){if(!(t instanceof ge||"ArrayBuffer"==(c=x(t))||"SharedArrayBuffer"==c))return Je in t?st(d,t):ut.call(d,t);o=t,f=tt(i,n);var p=t.byteLength;if(void 0===r){if(p%n)throw se("Wrong length!");if((s=p-f)<0)throw se("Wrong length!")}else if((s=k(r)*n)+f>p)throw se("Wrong length!");l=s/n}else l=S(t),o=new ge(s=l*n);for(y(e,"_d",{b:o,o:f,l:s,e:l,v:new ye(o)});u<l;)b(e,u++)}),v=d.prototype=O(kt),y(v,"constructor",d)):i(function(){d(1)})&&i(function(){new d(-1)})&&$(function(e){new d,new d(null),new d(1.5),new d(e)},!0)||(d=r(function(e,t,i,r){var o;return h(e,d,a),M(t)?t instanceof ge||"ArrayBuffer"==(o=x(t))||"SharedArrayBuffer"==o?void 0!==r?new f(t,tt(i,n),r):void 0!==i?new f(t,tt(i,n)):new f(t):Je in t?st(d,t):ut.call(d,t):new f(S(t))}),be(p!==Function.prototype?B(f).concat(B(p)):B(f),function(e){e in d||y(d,e,f[e])}),d.prototype=v,v.constructor=d);var w=v[He],E=!!w&&("values"==w.name||void 0==w.name),T=vt.values;y(d,ze,!0),y(v,Je,a),y(v,Xe,!0),y(v,Ye,d),(s?new d(1)[Ge]==a:Ge in v)||re(v,Ge,{get:function(){return a}}),m[a]=d,o(o.G+o.W+o.F*(d!=f),m),o(o.S,a,{BYTES_PER_ELEMENT:n}),o(o.S+o.F*i(function(){f.of.call(d,1)}),a,{from:ut,of:ht}),"BYTES_PER_ELEMENT"in v||y(v,"BYTES_PER_ELEMENT",n),o(o.P,a,gt),Z(a),o(o.P+o.F*et,a,{set:yt}),o(o.P+o.F*!E,a,vt),v.toString!=Ve&&(v.toString=Ve),o(o.P+o.F*i(function(){new d(1).slice()}),a,{slice:mt}),o(o.P+o.F*(i(function(){return[1,2].toLocaleString()!=new d([1,2]).toLocaleString()})||!i(function(){v.toLocaleString.call([1,2])})),a,{toLocaleString:pt}),Q[a]=E?w:T,E||y(v,He,T)}}else e.exports=function(){}});ft("Int8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),ft("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),ft("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}},!0),ft("Int16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),ft("Uint16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),ft("Int32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ft("Uint32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ft("Float32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ft("Float64",8,function(e){return function(t,n,i){return e(this,t,n,i)}});var pt=function(e,t,n,i){try{return i?t(o(n)[0],n[1]):t(n)}catch(t){var r=e.return;throw void 0!==r&&o(r.call(e)),t}},gt=t(function(e){var t={},n={},i=e.exports=function(e,i,r,s,a){var l,c,u,h,d=a?function(){return e}:We(e),f=T(r,s,i?2:1),p=0;if("function"!=typeof d)throw TypeError(e+" is not iterable!");if(Le(d)){for(l=D(e.length);l>p;p++)if((h=i?f(o(c=e[p])[0],c[1]):f(e[p]))===t||h===n)return h}else for(u=d.call(e);!(c=u.next()).done;)if((h=pt(u,f,c.value,i))===t||h===n)return h};i.BREAK=t,i.RETURN=n}),mt=t(function(e){var t=E("meta"),n=p.f,i=0,o=Object.isExtensible||function(){return!0},a=!s(function(){return o(Object.preventExtensions({}))}),l=function(e){n(e,t,{value:{i:"O"+ ++i,w:{}}})},c=e.exports={KEY:t,NEED:!1,fastKey:function(e,n){if(!r(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!v(e,t)){if(!o(e))return"F";if(!n)return"E";l(e)}return e[t].i},getWeak:function(e,n){if(!v(e,t)){if(!o(e))return!0;if(!n)return!1;l(e)}return e[t].w},onFreeze:function(e){return a&&c.NEED&&o(e)&&!v(e,t)&&l(e),e}}}),yt=function(e,t){if(!r(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e},vt=p.f,bt=mt.fastKey,wt=a?"_s":"size",Et=function(e,t){var n,i=bt(t);if("F"!==i)return e._i[i];for(n=e._f;n;n=n.n)if(n.k==t)return n},kt={getConstructor:function(e,t,n,i){var r=e(function(e,o){F(e,r,t,"_i"),e._t=t,e._i=qe(null),e._f=void 0,e._l=void 0,e[wt]=0,void 0!=o&&gt(o,n,e[i],e)});return j(r.prototype,{clear:function(){for(var e=yt(this,t),n=e._i,i=e._f;i;i=i.n)i.r=!0,i.p&&(i.p=i.p.n=void 0),delete n[i.i];e._f=e._l=void 0,e[wt]=0},delete:function(e){var n=yt(this,t),i=Et(n,e);if(i){var r=i.n,o=i.p;delete n._i[i.i],i.r=!0,o&&(o.n=r),r&&(r.p=o),n._f==i&&(n._f=r),n._l==i&&(n._l=o),n[wt]--}return!!i},forEach:function(e){yt(this,t);for(var n,i=T(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(i(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!Et(yt(this,t),e)}}),a&&vt(r.prototype,"size",{get:function(){return yt(this,t)[wt]}}),r},def:function(e,t,n){var i,r,o=Et(e,t);return o?o.v=n:(e._l=o={i:r=bt(t,!0),k:t,v:n,p:i=e._l,n:void 0,r:!1},e._f||(e._f=o),i&&(i.n=o),e[wt]++,"F"!==r&&(e._i[r]=o)),e},getEntry:Et,setStrong:function(e,t,n){rt(e,t,function(e,n){this._t=yt(e,t),this._k=n,this._l=void 0},function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?$e(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,$e(1))},n?"entries":"values",!n,!0),ve(t)}},St=function(e,t){if(o(e),!r(t)&&null!==t)throw TypeError(t+": can't set as prototype!")},Tt={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,n){try{(n=T(Function.call,dt.f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,i){return St(e,i),t?e.__proto__=i:n(e,i),e}}({},!1):void 0),check:St},At=Tt.set,_t=function(e,t,i,o,a,l){var c=n[e],u=c,h=a?"set":"add",d=u&&u.prototype,f={},p=function(e){var t=d[e];k(d,e,"delete"==e?function(e){return!(l&&!r(e))&&t.call(this,0===e?0:e)}:"has"==e?function(e){return!(l&&!r(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return l&&!r(e)?void 0:t.call(this,0===e?0:e)}:"add"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,n){return t.call(this,0===e?0:e,n),this})};if("function"==typeof u&&(l||d.forEach&&!s(function(){(new u).entries().next()}))){var g=new u,m=g[h](l?{}:-0,1)!=g,y=s(function(){g.has(1)}),v=lt(function(e){new u(e)}),b=!l&&s(function(){for(var e=new u,t=5;t--;)e[h](t,t);return!e.has(-0)});v||((u=t(function(t,n){F(t,u,e);var i=function(e,t,n){var i,o=t.constructor;return o!==n&&"function"==typeof o&&(i=o.prototype)!==n.prototype&&r(i)&&At&&At(e,i),e}(new c,t,u);return void 0!=n&&gt(n,a,i[h],i),i})).prototype=d,d.constructor=u),(y||b)&&(p("delete"),p("has"),a&&p("get")),(b||m)&&p(h),l&&d.clear&&delete d.clear}else u=o.getConstructor(t,e,a,h),j(u.prototype,i),mt.NEED=!0;return fe(u,e),f[e]=u,C(C.G+C.W+C.F*(u!=c),f),l||o.setStrong(u,e,a),u},Ct=(_t("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var t=kt.getEntry(yt(this,"Map"),e);return t&&t.v},set:function(e,t){return kt.def(yt(this,"Map"),0===e?0:e,t)}},kt,!0),_t("Set",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return kt.def(yt(this,"Set"),e=0===e?0:e,e)}},kt),{f:Object.getOwnPropertySymbols}),Pt=Object.assign,xt=!Pt||s(function(){var e={},t={},n=Symbol(),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach(function(e){t[e]=e}),7!=Pt({},e)[n]||Object.keys(Pt({},t)).join("")!=i})?function(e,t){for(var n=le(e),i=arguments.length,r=1,o=Ct.f,s=ut.f;i>r;)for(var a,l=G(arguments[r++]),c=o?Ne(l).concat(o(l)):Ne(l),u=c.length,h=0;u>h;)s.call(l,a=c[h++])&&(n[a]=l[a]);return n}:Pt,Mt=mt.getWeak,Lt=Ke(5),Nt=Ke(6),Ot=0,It=function(e){return e._l||(e._l=new jt)},jt=function(){this.a=[]},Ft=function(e,t){return Lt(e.a,function(e){return e[0]===t})};jt.prototype={get:function(e){var t=Ft(this,e);if(t)return t[1]},has:function(e){return!!Ft(this,e)},set:function(e,t){var n=Ft(this,e);n?n[1]=t:this.a.push([e,t])},delete:function(e){var t=Nt(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}};var Rt={getConstructor:function(e,t,n,i){var o=e(function(e,r){F(e,o,t,"_i"),e._t=t,e._i=Ot++,e._l=void 0,void 0!=r&&gt(r,n,e[i],e)});return j(o.prototype,{delete:function(e){if(!r(e))return!1;var n=Mt(e);return!0===n?It(yt(this,t)).delete(e):n&&v(n,this._i)&&delete n[this._i]},has:function(e){if(!r(e))return!1;var n=Mt(e);return!0===n?It(yt(this,t)).has(e):n&&v(n,this._i)}}),o},def:function(e,t,n){var i=Mt(o(t),!0);return!0===i?It(e).set(t,n):i[e._i]=n,e},ufstore:It};t(function(e){var t,n=Ke(0),i=mt.getWeak,o=Object.isExtensible,a=Rt.ufstore,l={},c=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},u={get:function(e){if(r(e)){var t=i(e);return!0===t?a(yt(this,"WeakMap")).get(e):t?t[this._i]:void 0}},set:function(e,t){return Rt.def(yt(this,"WeakMap"),e,t)}},h=e.exports=_t("WeakMap",c,u,Rt,!0,!0);s(function(){return 7!=(new h).set((Object.freeze||Object)(l),7).get(l)})&&(t=Rt.getConstructor(c,"WeakMap"),xt(t.prototype,u),mt.NEED=!0,n(["delete","has","get","set"],function(e){var n=h.prototype,i=n[e];k(n,e,function(n,s){if(r(n)&&!o(n)){this._f||(this._f=new t);var a=this._f[e](n,s);return"set"==e?this:a}return i.call(this,n,s)})}))});_t("WeakSet",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return Rt.def(yt(this,"WeakSet"),e,!0)}},Rt,!1,!0);var Bt=(n.Reflect||{}).apply,qt=Function.apply;C(C.S+C.F*!s(function(){Bt(function(){})}),"Reflect",{apply:function(e,t,n){var i=S(e),r=o(n);return Bt?Bt(i,t,r):qt.call(i,t,r)}});var Vt=function(e,t,n){var i=void 0===n;switch(t.length){case 0:return i?e():e.call(n);case 1:return i?e(t[0]):e.call(n,t[0]);case 2:return i?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return i?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return i?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)},Dt=[].slice,Ut={},Ht=Function.bind||function(e){var t=S(this),n=Dt.call(arguments,1),i=function(){var r=n.concat(Dt.call(arguments));return this instanceof i?function(e,t,n){if(!(t in Ut)){for(var i=[],r=0;r<t;r++)i[r]="a["+r+"]";Ut[t]=Function("F,a","return new F("+i.join(",")+")")}return Ut[t](e,n)}(t,r.length,r):Vt(t,r,e)};return r(t.prototype)&&(i.prototype=t.prototype),i},Wt=(n.Reflect||{}).construct,Gt=s(function(){function e(){}return!(Wt(function(){},[],e)instanceof e)}),zt=!s(function(){Wt(function(){})});C(C.S+C.F*(Gt||zt),"Reflect",{construct:function(e,t){S(e),o(t);var n=arguments.length<3?e:S(arguments[2]);if(zt&&!Gt)return Wt(e,t,n);if(e==n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var i=[null];return i.push.apply(i,t),new(Ht.apply(e,i))}var s=n.prototype,a=qe(r(s)?s:Object.prototype),l=Function.apply.call(e,a,t);return r(l)?l:a}}),C(C.S+C.F*s(function(){Reflect.defineProperty(p.f({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(e,t,n){o(e),t=d(t,!0),o(n);try{return p.f(e,t,n),!0}catch(e){return!1}}});var Yt=dt.f;C(C.S,"Reflect",{deleteProperty:function(e,t){var n=Yt(o(e),t);return!(n&&!n.configurable)&&delete e[t]}}),C(C.S,"Reflect",{get:function e(t,n){var i,s,a=arguments.length<3?t:arguments[2];return o(t)===a?t[n]:(i=dt.f(t,n))?v(i,"value")?i.value:void 0!==i.get?i.get.call(a):void 0:r(s=Ue(t))?e(s,n,a):void 0}}),C(C.S,"Reflect",{getOwnPropertyDescriptor:function(e,t){return dt.f(o(e),t)}}),C(C.S,"Reflect",{getPrototypeOf:function(e){return Ue(o(e))}}),C(C.S,"Reflect",{has:function(e,t){return t in e}});var Kt=Object.isExtensible;C(C.S,"Reflect",{isExtensible:function(e){return o(e),!Kt||Kt(e)}});var Qt=n.Reflect,Jt=Qt&&Qt.ownKeys||function(e){var t=ae.f(o(e)),n=Ct.f;return n?t.concat(n(e)):t};C(C.S,"Reflect",{ownKeys:Jt});var Xt=Object.preventExtensions;C(C.S,"Reflect",{preventExtensions:function(e){o(e);try{return Xt&&Xt(e),!0}catch(e){return!1}}}),C(C.S,"Reflect",{set:function e(t,n,i){var s,a,l=arguments.length<4?t:arguments[3],c=dt.f(o(t),n);if(!c){if(r(a=Ue(t)))return e(a,n,i,l);c=g(0)}return v(c,"value")?!(!1===c.writable||!r(l)||((s=dt.f(l,n)||g(0)).value=i,p.f(l,n,s),0)):void 0!==c.set&&(c.set.call(l,i),!0)}}),Tt&&C(C.S,"Reflect",{setPrototypeOf:function(e,t){Tt.check(e,t);try{return Tt.set(e,t),!0}catch(e){return!1}}});var $t,Zt,en,tn=n.process,nn=n.setImmediate,rn=n.clearImmediate,on=n.MessageChannel,sn=n.Dispatch,an=0,ln={},cn=function(){var e=+this;if(ln.hasOwnProperty(e)){var t=ln[e];delete ln[e],t()}},un=function(e){cn.call(e.data)};nn&&rn||(nn=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return ln[++an]=function(){Vt("function"==typeof e?e:Function(e),t)},$t(an),an},rn=function(e){delete ln[e]},"process"==W(tn)?$t=function(e){tn.nextTick(T(cn,e,1))}:sn&&sn.now?$t=function(e){sn.now(T(cn,e,1))}:on?(en=(Zt=new on).port2,Zt.port1.onmessage=un,$t=T(en.postMessage,en,1)):n.addEventListener&&"function"==typeof postMessage&&!n.importScripts?($t=function(e){n.postMessage(e+"","*")},n.addEventListener("message",un,!1)):$t="onreadystatechange"in u("script")?function(e){je.appendChild(u("script")).onreadystatechange=function(){je.removeChild(this),cn.call(e)}}:function(e){setTimeout(T(cn,e,1),0)});var hn={set:nn,clear:rn},dn=hn.set,fn=n.MutationObserver||n.WebKitMutationObserver,pn=n.process,gn=n.Promise,mn="process"==W(pn);var yn,vn,bn,wn,En={f:function(e){return new function(e){var t,n;this.promise=new e(function(e,i){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=i}),this.resolve=S(t),this.reject=S(n)}(e)}},kn=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}},Sn=hn.set,Tn=function(){var e,t,i,r=function(){var n,r;for(mn&&(n=pn.domain)&&n.exit();e;){r=e.fn,e=e.next;try{r()}catch(n){throw e?i():t=void 0,n}}t=void 0,n&&n.enter()};if(mn)i=function(){pn.nextTick(r)};else if(!fn||n.navigator&&n.navigator.standalone)if(gn&&gn.resolve){var o=gn.resolve();i=function(){o.then(r)}}else i=function(){dn.call(n,r)};else{var s=!0,a=document.createTextNode("");new fn(r).observe(a,{characterData:!0}),i=function(){a.data=s=!s}}return function(n){var r={fn:n,next:void 0};t&&(t.next=r),e||(e=r,i()),t=r}}(),An=n.TypeError,_n=n.process,Cn=n.Promise,Pn="process"==Ce(_n),xn=function(){},Mn=vn=En.f,Ln=!!function(){try{var e=Cn.resolve(1),t=(e.constructor={})[ue("species")]=function(e){e(xn,xn)};return(Pn||"function"==typeof PromiseRejectionEvent)&&e.then(xn)instanceof t}catch(e){}}(),Nn=function(e){var t;return!(!r(e)||"function"!=typeof(t=e.then))&&t},On=function(e,t){if(!e._n){e._n=!0;var n=e._c;Tn(function(){for(var i=e._v,r=1==e._s,o=0,s=function(t){var n,o,s=r?t.ok:t.fail,a=t.resolve,l=t.reject,c=t.domain;try{s?(r||(2==e._h&&Fn(e),e._h=1),!0===s?n=i:(c&&c.enter(),n=s(i),c&&c.exit()),n===t.promise?l(An("Promise-chain cycle")):(o=Nn(n))?o.call(n,a,l):a(n)):l(i)}catch(e){l(e)}};n.length>o;)s(n[o++]);e._c=[],e._n=!1,t&&!e._h&&In(e)})}},In=function(e){Sn.call(n,function(){var t,i,r,o=e._v,s=jn(e);if(s&&(t=kn(function(){Pn?_n.emit("unhandledRejection",o,e):(i=n.onunhandledrejection)?i({promise:e,reason:o}):(r=n.console)&&r.error&&r.error("Unhandled promise rejection",o)}),e._h=Pn||jn(e)?2:1),e._a=void 0,s&&t.e)throw t.v})},jn=function(e){return 1!==e._h&&0===(e._a||e._c).length},Fn=function(e){Sn.call(n,function(){var t;Pn?_n.emit("rejectionHandled",e):(t=n.onrejectionhandled)&&t({promise:e,reason:e._v})})},Rn=function(e){var t=this;t._d||(t._d=!0,(t=t._w||t)._v=e,t._s=2,t._a||(t._a=t._c.slice()),On(t,!0))},Bn=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw An("Promise can't be resolved itself");(t=Nn(e))?Tn(function(){var i={_w:n,_d:!1};try{t.call(e,T(Bn,i,1),T(Rn,i,1))}catch(e){Rn.call(i,e)}}):(n._v=e,n._s=1,On(n,!1))}catch(e){Rn.call({_w:n,_d:!1},e)}}};Ln||(Cn=function(e){F(this,Cn,"Promise","_h"),S(e),yn.call(this);try{e(T(Bn,this,1),T(Rn,this,1))}catch(e){Rn.call(this,e)}},(yn=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=j(Cn.prototype,{then:function(e,t){var n=Mn(me(this,Cn));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=Pn?_n.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&On(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),bn=function(){var e=new yn;this.promise=e,this.resolve=T(Bn,e,1),this.reject=T(Rn,e,1)},En.f=Mn=function(e){return e===Cn||e===wn?new bn(e):vn(e)}),C(C.G+C.W+C.F*!Ln,{Promise:Cn}),fe(Cn,"Promise"),ve("Promise"),wn=i.Promise,C(C.S+C.F*!Ln,"Promise",{reject:function(e){var t=Mn(this);return(0,t.reject)(e),t.promise}}),C(C.S+C.F*!Ln,"Promise",{resolve:function(e){return function(e,t){if(o(e),r(t)&&t.constructor===e)return t;var n=En.f(e);return(0,n.resolve)(t),n.promise}(this,e)}}),C(C.S+C.F*!(Ln&&lt(function(e){Cn.all(e).catch(xn)})),"Promise",{all:function(e){var t=this,n=Mn(t),i=n.resolve,r=n.reject,o=kn(function(){var n=[],o=0,s=1;gt(e,!1,function(e){var a=o++,l=!1;n.push(void 0),s++,t.resolve(e).then(function(e){l||(l=!0,n[a]=e,--s||i(n))},r)}),--s||i(n)});return o.e&&r(o.v),n.promise},race:function(e){var t=this,n=Mn(t),i=n.reject,r=kn(function(){gt(e,!1,function(e){t.resolve(e).then(n.resolve,i)})});return r.e&&i(r.v),n.promise}});var qn={f:ue},Vn=p.f,Dn=function(e){var t=i.Symbol||(i.Symbol=n.Symbol||{});"_"==e.charAt(0)||e in t||Vn(t,e,{value:qn.f(e)})},Un=ae.f,Hn={}.toString,Wn="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],Gn={f:function(e){return Wn&&"[object Window]"==Hn.call(e)?function(e){try{return Un(e)}catch(e){return Wn.slice()}}(e):Un(Y(e))}},zn=mt.KEY,Yn=dt.f,Kn=p.f,Qn=Gn.f,Jn=n.Symbol,Xn=n.JSON,$n=Xn&&Xn.stringify,Zn=ue("_hidden"),ei=ue("toPrimitive"),ti={}.propertyIsEnumerable,ni=Z("symbol-registry"),ii=Z("symbols"),ri=Z("op-symbols"),oi=Object.prototype,si="function"==typeof Jn,ai=n.QObject,li=!ai||!ai.prototype||!ai.prototype.findChild,ci=a&&s(function(){return 7!=qe(Kn({},"a",{get:function(){return Kn(this,"a",{value:7}).a}})).a})?function(e,t,n){var i=Yn(oi,t);i&&delete oi[t],Kn(e,t,n),i&&e!==oi&&Kn(oi,t,i)}:Kn,ui=function(e){var t=ii[e]=qe(Jn.prototype);return t._k=e,t},hi=si&&"symbol"==typeof Jn.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof Jn},di=function(e,t,n){return e===oi&&di(ri,t,n),o(e),t=d(t,!0),o(n),v(ii,t)?(n.enumerable?(v(e,Zn)&&e[Zn][t]&&(e[Zn][t]=!1),n=qe(n,{enumerable:g(0,!1)})):(v(e,Zn)||Kn(e,Zn,g(1,{})),e[Zn][t]=!0),ci(e,t,n)):Kn(e,t,n)},fi=function(e,t){o(e);for(var n,i=function(e){var t=Ne(e),n=Ct.f;if(n)for(var i,r=n(e),o=ut.f,s=0;r.length>s;)o.call(e,i=r[s++])&&t.push(i);return t}(t=Y(t)),r=0,s=i.length;s>r;)di(e,n=i[r++],t[n]);return e},pi=function(e){var t=ti.call(this,e=d(e,!0));return!(this===oi&&v(ii,e)&&!v(ri,e))&&(!(t||!v(this,e)||!v(ii,e)||v(this,Zn)&&this[Zn][e])||t)},gi=function(e,t){if(e=Y(e),t=d(t,!0),e!==oi||!v(ii,t)||v(ri,t)){var n=Yn(e,t);return!n||!v(ii,t)||v(e,Zn)&&e[Zn][t]||(n.enumerable=!0),n}},mi=function(e){for(var t,n=Qn(Y(e)),i=[],r=0;n.length>r;)v(ii,t=n[r++])||t==Zn||t==zn||i.push(t);return i},yi=function(e){for(var t,n=e===oi,i=Qn(n?ri:Y(e)),r=[],o=0;i.length>o;)!v(ii,t=i[o++])||n&&!v(oi,t)||r.push(ii[t]);return r};si||(k((Jn=function(){if(this instanceof Jn)throw TypeError("Symbol is not a constructor!");var e=E(arguments.length>0?arguments[0]:void 0),t=function(n){this===oi&&t.call(ri,n),v(this,Zn)&&v(this[Zn],e)&&(this[Zn][e]=!1),ci(this,e,g(1,n))};return a&&li&&ci(oi,e,{configurable:!0,set:t}),ui(e)}).prototype,"toString",function(){return this._k}),dt.f=gi,p.f=di,ae.f=Gn.f=mi,ut.f=pi,Ct.f=yi,a&&k(oi,"propertyIsEnumerable",pi,!0),qn.f=function(e){return ui(ue(e))}),C(C.G+C.W+C.F*!si,{Symbol:Jn});for(var vi="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),bi=0;vi.length>bi;)ue(vi[bi++]);for(var wi=Ne(ue.store),Ei=0;wi.length>Ei;)Dn(wi[Ei++]);C(C.S+C.F*!si,"Symbol",{for:function(e){return v(ni,e+="")?ni[e]:ni[e]=Jn(e)},keyFor:function(e){if(!hi(e))throw TypeError(e+" is not a symbol!");for(var t in ni)if(ni[t]===e)return t},useSetter:function(){li=!0},useSimple:function(){li=!1}}),C(C.S+C.F*!si,"Object",{create:function(e,t){return void 0===t?qe(e):fi(qe(e),t)},defineProperty:di,defineProperties:fi,getOwnPropertyDescriptor:gi,getOwnPropertyNames:mi,getOwnPropertySymbols:yi}),Xn&&C(C.S+C.F*(!si||s(function(){var e=Jn();return"[null]"!=$n([e])||"{}"!=$n({a:e})||"{}"!=$n(Object(e))})),"JSON",{stringify:function(e){for(var t,n,i=[e],o=1;arguments.length>o;)i.push(arguments[o++]);if(n=t=i[1],(r(t)||void 0!==e)&&!hi(e))return Ge(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!hi(t))return t}),i[1]=t,$n.apply(Xn,i)}}),Jn.prototype[ei]||m(Jn.prototype,ei,Jn.prototype.valueOf),fe(Jn,"Symbol"),fe(Math,"Math",!0),fe(n.JSON,"JSON",!0);var ki=function(e,t){var n=(i.Object||{})[e]||Object[e],r={};r[e]=t(n),C(C.S+C.F*s(function(){n(1)}),"Object",r)},Si=mt.onFreeze;ki("freeze",function(e){return function(t){return e&&r(t)?e(Si(t)):t}});var Ti=mt.onFreeze;ki("seal",function(e){return function(t){return e&&r(t)?e(Ti(t)):t}});var Ai=mt.onFreeze;ki("preventExtensions",function(e){return function(t){return e&&r(t)?e(Ai(t)):t}}),ki("isFrozen",function(e){return function(t){return!r(t)||!!e&&e(t)}}),ki("isSealed",function(e){return function(t){return!r(t)||!!e&&e(t)}}),ki("isExtensible",function(e){return function(t){return!!r(t)&&(!e||e(t))}});var _i=dt.f;ki("getOwnPropertyDescriptor",function(){return function(e,t){return _i(Y(e),t)}}),ki("getPrototypeOf",function(){return function(e){return Ue(le(e))}}),ki("keys",function(){return function(e){return Ne(le(e))}}),ki("getOwnPropertyNames",function(){return Gn.f}),C(C.S+C.F,"Object",{assign:xt});var Ci=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t};C(C.S,"Object",{is:Ci});var Pi=p.f,xi=Function.prototype,Mi=/^\s*function ([^ (]*)/;"name"in xi||a&&Pi(xi,"name",{configurable:!0,get:function(){try{return(""+this).match(Mi)[1]}catch(e){return""}}}),C(C.S,"String",{raw:function(e){for(var t=Y(e.raw),n=D(t.length),i=arguments.length,r=[],o=0;n>o;)r.push(String(t[o++])),o<i&&r.push(String(arguments[o]));return r.join("")}});var Li=String.fromCharCode,Ni=String.fromCodePoint;C(C.S+C.F*(!!Ni&&1!=Ni.length),"String",{fromCodePoint:function(e){for(var t,n=[],i=arguments.length,r=0;i>r;){if(t=+arguments[r++],J(t,1114111)!==t)throw RangeError(t+" is not a valid code point");n.push(t<65536?Li(t):Li(55296+((t-=65536)>>10),t%1024+56320))}return n.join("")}});var Oi,Ii=(Oi=!1,function(e,t){var n,i,r=String(z(e)),o=q(t),s=r.length;return o<0||o>=s?Oi?"":void 0:(n=r.charCodeAt(o))<55296||n>56319||o+1===s||(i=r.charCodeAt(o+1))<56320||i>57343?Oi?r.charAt(o):n:Oi?r.slice(o,o+2):i-56320+(n-55296<<10)+65536});C(C.P,"String",{codePointAt:function(e){return Ii(this,e)}});var ji=function(e){var t=String(z(this)),n="",i=q(e);if(i<0||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(t+=t))1&i&&(n+=t);return n};C(C.P,"String",{repeat:ji});var Fi=ue("match"),Ri=function(e){var t;return r(e)&&(void 0!==(t=e[Fi])?!!t:"RegExp"==W(e))},Bi=function(e,t,n){if(Ri(t))throw TypeError("String#"+n+" doesn't accept regex!");return String(z(e))},qi=ue("match"),Vi=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[qi]=!1,!"/./"[e](t)}catch(e){}}return!0},Di="".startsWith;C(C.P+C.F*Vi("startsWith"),"String",{startsWith:function(e){var t=Bi(this,e,"startsWith"),n=D(Math.min(arguments.length>1?arguments[1]:void 0,t.length)),i=String(e);return Di?Di.call(t,i,n):t.slice(n,n+i.length)===i}});var Ui="".endsWith;C(C.P+C.F*Vi("endsWith"),"String",{endsWith:function(e){var t=Bi(this,e,"endsWith"),n=arguments.length>1?arguments[1]:void 0,i=D(t.length),r=void 0===n?i:Math.min(D(n),i),o=String(e);return Ui?Ui.call(t,o,r):t.slice(r-o.length,r)===o}});C(C.P+C.F*Vi("includes"),"String",{includes:function(e){return!!~Bi(this,e,"includes").indexOf(e,arguments.length>1?arguments[1]:void 0)}});a&&"g"!=/./g.flags&&p.f(RegExp.prototype,"flags",{configurable:!0,get:function(){var e=o(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t}});var Hi=function(e,t,n){var i=ue(e),r=n(z,i,""[e]),o=r[0],a=r[1];s(function(){var t={};return t[i]=function(){return 7},7!=""[e](t)})&&(k(String.prototype,e,o),m(RegExp.prototype,i,2==t?function(e,t){return a.call(e,this,t)}:function(e){return a.call(e,this)}))};Hi("match",1,function(e,t,n){return[function(n){var i=e(this),r=void 0==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]}),Hi("replace",2,function(e,t,n){return[function(i,r){var o=e(this),s=void 0==i?void 0:i[t];return void 0!==s?s.call(i,o,r):n.call(String(o),i,r)},n]}),Hi("split",2,function(e,t,n){var i=Ri,r=n,o=[].push;if("c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length){var s=void 0===/()??/.exec("")[1];n=function(e,t){var n=String(this);if(void 0===e&&0===t)return[];if(!i(e))return r.call(n,e,t);var a,l,c,u,h,d=[],f=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),p=0,g=void 0===t?4294967295:t>>>0,m=new RegExp(e.source,f+"g");for(s||(a=new RegExp("^"+m.source+"$(?!\\s)",f));(l=m.exec(n))&&!((c=l.index+l[0].length)>p&&(d.push(n.slice(p,l.index)),!s&&l.length>1&&l[0].replace(a,function(){for(h=1;h<arguments.length-2;h++)void 0===arguments[h]&&(l[h]=void 0)}),l.length>1&&l.index<n.length&&o.apply(d,l.slice(1)),u=l[0].length,p=c,d.length>=g));)m.lastIndex===l.index&&m.lastIndex++;return p===n.length?!u&&m.test("")||d.push(""):d.push(n.slice(p)),d.length>g?d.slice(0,g):d}}else"0".split(void 0,0).length&&(n=function(e,t){return void 0===e&&0===t?[]:r.call(this,e,t)});return[function(i,r){var o=e(this),s=void 0==i?void 0:i[t];return void 0!==s?s.call(i,o,r):n.call(String(o),i,r)},n]}),Hi("search",1,function(e,t,n){return[function(n){var i=e(this),r=void 0==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]});var Wi=function(e,t,n){t in e?p.f(e,t,g(0,n)):e[t]=n};C(C.S+C.F*!lt(function(e){}),"Array",{from:function(e){var t,n,i,r,o=le(e),s="function"==typeof this?this:Array,a=arguments.length,l=a>1?arguments[1]:void 0,c=void 0!==l,u=0,h=We(o);if(c&&(l=T(l,a>2?arguments[2]:void 0,2)),void 0==h||s==Array&&Le(h))for(n=new s(t=D(o.length));t>u;u++)Wi(n,u,c?l(o[u],u):o[u]);else for(r=h.call(o),n=new s;!(i=r.next()).done;u++)Wi(n,u,c?pt(r,l,[i.value,u],!0):i.value);return n.length=u,n}}),C(C.S+C.F*s(function(){function e(){}return!(Array.of.call(e)instanceof e)}),"Array",{of:function(){for(var e=0,t=arguments.length,n=new("function"==typeof this?this:Array)(t);t>e;)Wi(n,e,arguments[e++]);return n.length=t,n}}),C(C.P,"Array",{copyWithin:ct}),Xe("copyWithin");var Gi=Ke(5),zi=!0;"find"in[]&&Array(1).find(function(){zi=!1}),C(C.P+C.F*zi,"Array",{find:function(e){return Gi(this,e,arguments.length>1?arguments[1]:void 0)}}),Xe("find");var Yi=Ke(6),Ki=!0;"findIndex"in[]&&Array(1).findIndex(function(){Ki=!1}),C(C.P+C.F*Ki,"Array",{findIndex:function(e){return Yi(this,e,arguments.length>1?arguments[1]:void 0)}}),Xe("findIndex"),C(C.P,"Array",{fill:ce}),Xe("fill");var Qi=n.isFinite;C(C.S,"Number",{isFinite:function(e){return"number"==typeof e&&Qi(e)}});var Ji=Math.floor,Xi=function(e){return!r(e)&&isFinite(e)&&Ji(e)===e};C(C.S,"Number",{isInteger:Xi});var $i=Math.abs;C(C.S,"Number",{isSafeInteger:function(e){return Xi(e)&&$i(e)<=9007199254740991}}),C(C.S,"Number",{isNaN:function(e){return e!=e}}),C(C.S,"Number",{EPSILON:Math.pow(2,-52)}),C(C.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991}),C(C.S,"Number",{MAX_SAFE_INTEGER:9007199254740991});var Zi=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:Math.log(1+e)},er=Math.sqrt,tr=Math.acosh;C(C.S+C.F*!(tr&&710==Math.floor(tr(Number.MAX_VALUE))&&tr(1/0)==1/0),"Math",{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?Math.log(e)+Math.LN2:Zi(e-1+er(e-1)*er(e+1))}});var nr=Math.asinh;C(C.S+C.F*!(nr&&1/nr(0)>0),"Math",{asinh:function e(t){return isFinite(t=+t)&&0!=t?t<0?-e(-t):Math.log(t+Math.sqrt(t*t+1)):t}});var ir=Math.atanh;C(C.S+C.F*!(ir&&1/ir(-0)<0),"Math",{atanh:function(e){return 0==(e=+e)?e:Math.log((1+e)/(1-e))/2}});var rr=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1};C(C.S,"Math",{cbrt:function(e){return rr(e=+e)*Math.pow(Math.abs(e),1/3)}}),C(C.S,"Math",{clz32:function(e){return(e>>>=0)?31-Math.floor(Math.log(e+.5)*Math.LOG2E):32}});var or=Math.exp;C(C.S,"Math",{cosh:function(e){return(or(e=+e)+or(-e))/2}});var sr=Math.expm1,ar=!sr||sr(10)>22025.465794806718||sr(10)<22025.465794806718||-2e-17!=sr(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:Math.exp(e)-1}:sr;C(C.S+C.F*(ar!=Math.expm1),"Math",{expm1:ar});var lr=Math.pow,cr=lr(2,-52),ur=lr(2,-23),hr=lr(2,127)*(2-ur),dr=lr(2,-126),fr=Math.fround||function(e){var t,n,i=Math.abs(e),r=rr(e);return i<dr?r*(i/dr/ur+1/cr-1/cr)*dr*ur:(n=(t=(1+ur/cr)*i)-(t-i))>hr||n!=n?r*(1/0):r*n};C(C.S,"Math",{fround:fr});var pr=Math.abs;C(C.S,"Math",{hypot:function(e,t){for(var n,i,r=0,o=0,s=arguments.length,a=0;o<s;)a<(n=pr(arguments[o++]))?(r=r*(i=a/n)*i+1,a=n):r+=n>0?(i=n/a)*i:n;return a===1/0?1/0:a*Math.sqrt(r)}});var gr=Math.imul;C(C.S+C.F*s(function(){return-5!=gr(4294967295,5)||2!=gr.length}),"Math",{imul:function(e,t){var n=+e,i=+t,r=65535&n,o=65535&i;return 0|r*o+((65535&n>>>16)*o+r*(65535&i>>>16)<<16>>>0)}}),C(C.S,"Math",{log1p:Zi}),C(C.S,"Math",{log10:function(e){return Math.log(e)*Math.LOG10E}}),C(C.S,"Math",{log2:function(e){return Math.log(e)/Math.LN2}}),C(C.S,"Math",{sign:rr});var mr=Math.exp;C(C.S+C.F*s(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(e){return Math.abs(e=+e)<1?(ar(e)-ar(-e))/2:(mr(e-1)-mr(-e-1))*(Math.E/2)}});var yr=Math.exp;C(C.S,"Math",{tanh:function(e){var t=ar(e=+e),n=ar(-e);return t==1/0?1:n==1/0?-1:(t-n)/(yr(e)+yr(-e))}}),C(C.S,"Math",{trunc:function(e){return(e>0?Math.floor:Math.ceil)(e)}});var vr=X(!0);C(C.P,"Array",{includes:function(e){return vr(this,e,arguments.length>1?arguments[1]:void 0)}}),Xe("includes");var br=ut.f,wr=function(e){return function(t){for(var n,i=Y(t),r=Ne(i),o=r.length,s=0,a=[];o>s;)br.call(i,n=r[s++])&&a.push(e?[n,i[n]]:i[n]);return a}},Er=wr(!1);C(C.S,"Object",{values:function(e){return Er(e)}});var kr=wr(!0);C(C.S,"Object",{entries:function(e){return kr(e)}}),C(C.S,"Object",{getOwnPropertyDescriptors:function(e){for(var t,n,i=Y(e),r=dt.f,o=Jt(i),s={},a=0;o.length>a;)void 0!==(n=r(i,t=o[a++]))&&Wi(s,t,n);return s}});var Sr=function(e,t,n,i){var r=String(z(e)),o=r.length,s=void 0===n?" ":String(n),a=D(t);if(a<=o||""==s)return r;var l=a-o,c=ji.call(s,Math.ceil(l/s.length));return c.length>l&&(c=c.slice(0,l)),i?c+r:r+c},Tr=n.navigator,Ar=Tr&&Tr.userAgent||"";C(C.P+C.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(Ar),"String",{padStart:function(e){return Sr(this,e,arguments.length>1?arguments[1]:void 0,!0)}}),C(C.P+C.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(Ar),"String",{padEnd:function(e){return Sr(this,e,arguments.length>1?arguments[1]:void 0,!1)}});var _r=[].slice,Cr=/MSIE .\./.test(Ar),Pr=function(e){return function(t,n){var i=arguments.length>2,r=!!i&&_r.call(arguments,2);return e(i?function(){("function"==typeof t?t:Function(t)).apply(this,r)}:t,n)}};C(C.G+C.B+C.F*Cr,{setTimeout:Pr(n.setTimeout),setInterval:Pr(n.setInterval)}),C(C.G+C.B,{setImmediate:hn.set,clearImmediate:hn.clear});for(var xr=ue("iterator"),Mr=ue("toStringTag"),Lr=Pe.Array,Nr={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},Or=Ne(Nr),Ir=0;Ir<Or.length;Ir++){var jr,Fr=Or[Ir],Rr=Nr[Fr],Br=n[Fr],qr=Br&&Br.prototype;if(qr&&(qr[xr]||m(qr,xr,Lr),qr[Mr]||m(qr,Mr,Fr),Pe[Fr]=Lr,Rr))for(jr in ot)qr[jr]||k(qr,jr,ot[jr],!0)}t(function(t){!function(e){var n,i=Object.prototype,r=i.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},s=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag",c=e.regeneratorRuntime;if(c)t.exports=c;else{(c=e.regeneratorRuntime=t.exports).wrap=b;var u="suspendedStart",h="suspendedYield",d="executing",f="completed",p={},g={};g[s]=function(){return this};var m=Object.getPrototypeOf,y=m&&m(m(M([])));y&&y!==i&&r.call(y,s)&&(g=y);var v=S.prototype=E.prototype=Object.create(g);k.prototype=v.constructor=S,S.constructor=k,S[l]=k.displayName="GeneratorFunction",c.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===k||"GeneratorFunction"===(t.displayName||t.name))},c.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,S):(e.__proto__=S,l in e||(e[l]="GeneratorFunction")),e.prototype=Object.create(v),e},c.awrap=function(e){return{__await:e}},T(A.prototype),A.prototype[a]=function(){return this},c.AsyncIterator=A,c.async=function(e,t,n,i){var r=new A(b(e,t,n,i));return c.isGeneratorFunction(t)?r:r.next().then(function(e){return e.done?e.value:r.next()})},T(v),v[l]="Generator",v[s]=function(){return this},v.toString=function(){return"[object Generator]"},c.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var i=t.pop();if(i in e)return n.value=i,n.done=!1,n}return n.done=!0,n}},c.values=M,x.prototype={constructor:x,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=n,this.done=!1,this.delegate=null,this.method="next",this.arg=n,this.tryEntries.forEach(P),!e)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=n)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function i(i,r){return a.type="throw",a.arg=e,t.next=i,r&&(t.method="next",t.arg=n),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var s=this.tryEntries[o],a=s.completion;if("root"===s.tryLoc)return i("end");if(s.tryLoc<=this.prev){var l=r.call(s,"catchLoc"),c=r.call(s,"finallyLoc");if(l&&c){if(this.prev<s.catchLoc)return i(s.catchLoc,!0);if(this.prev<s.finallyLoc)return i(s.finallyLoc)}else if(l){if(this.prev<s.catchLoc)return i(s.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<s.finallyLoc)return i(s.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var o=i;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var s=o?o.completion:{};return s.type=e,s.arg=t,o?(this.method="next",this.next=o.finallyLoc,p):this.complete(s)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),p},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),P(n),p}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var i=n.completion;if("throw"===i.type){var r=i.arg;P(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,i){return this.delegate={iterator:M(e),resultName:t,nextLoc:i},"next"===this.method&&(this.arg=n),p}}}function b(e,t,n,i){var r=t&&t.prototype instanceof E?t:E,o=Object.create(r.prototype),s=new x(i||[]);return o._invoke=function(e,t,n){var i=u;return function(r,o){if(i===d)throw new Error("Generator is already running");if(i===f){if("throw"===r)throw o;return L()}for(n.method=r,n.arg=o;;){var s=n.delegate;if(s){var a=_(s,n);if(a){if(a===p)continue;return a}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(i===u)throw i=f,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);i=d;var l=w(e,t,n);if("normal"===l.type){if(i=n.done?f:h,l.arg===p)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(i=f,n.method="throw",n.arg=l.arg)}}}(e,n,s),o}function w(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}function E(){}function k(){}function S(){}function T(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function A(t){function n(e,i,o,s){var a=w(t[e],t,i);if("throw"!==a.type){var l=a.arg,c=l.value;return c&&"object"==typeof c&&r.call(c,"__await")?Promise.resolve(c.__await).then(function(e){n("next",e,o,s)},function(e){n("throw",e,o,s)}):Promise.resolve(c).then(function(e){l.value=e,o(l)},s)}s(a.arg)}var i;"object"==typeof e.process&&e.process.domain&&(n=e.process.domain.bind(n)),this._invoke=function(e,t){function r(){return new Promise(function(i,r){n(e,t,i,r)})}return i=i?i.then(r,r):r()}}function _(e,t){var i=e.iterator[t.method];if(i===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=n,_(e,t),"throw"===t.method))return p;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return p}var r=w(i,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,p;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=n),t.delegate=null,p):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,p)}function C(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function P(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function x(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(C,this),this.reset(!0)}function M(e){if(e){var t=e[s];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var i=-1,o=function t(){for(;++i<e.length;)if(r.call(e,i))return t.value=e[i],t.done=!1,t;return t.value=n,t.done=!0,t};return o.next=o}}return{next:L}}function L(){return{value:n,done:!0}}}("object"==typeof e?e:"object"==typeof window?window:"object"==typeof self?self:e)});try{var Vr=new window.CustomEvent("test");if(Vr.preventDefault(),!0!==Vr.defaultPrevented)throw new Error("Could not prevent default")}catch(e){var Dr=function(e,t){var n,i;return t=t||{bubbles:!1,cancelable:!1,detail:void 0},(n=document.createEvent("CustomEvent")).initCustomEvent(e,t.bubbles,t.cancelable,t.detail),i=n.preventDefault,n.preventDefault=function(){i.call(this);try{Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})}catch(e){this.defaultPrevented=!0}},n};Dr.prototype=window.Event.prototype,window.CustomEvent=Dr}var Ur,Hr={html5:"html5",youtube:"youtube",vimeo:"vimeo"},Wr={audio:"audio",video:"video"},Gr={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,showPosterOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.0.5/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:"default",options:["hd2160","hd1440","hd1080","hd720","large","medium","small","tiny","default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:window.navigator.language.split("-")[0]},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime} secs",play:"Play",pause:"Pause",fastForward:"Forward {seektime} secs",seek:"Seek",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",advertisement:"Ad"},urls:{vimeo:{api:"https://player.vimeo.com/api/player.js"},youtube:{api:"https://www.youtube.com/iframe_api"},googleIMA:{api:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","adscontentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',fastForward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress--buffer",played:".plyr__progress--played",loop:".plyr__progress--loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{video:"plyr__video-wrapper",embed:"plyr__video-embed",ads:"plyr__ads",control:"plyr__control",type:"plyr--{0}",provider:"plyr--{0}",stopped:"plyr--stopped",playing:"plyr--playing",loading:"plyr--loading",error:"plyr--has-error",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1,publisherId:""}},zr=t(function(e,t){var n;n=function(){var e=function(){},t={},n={},i={};function r(e,t){if(e){var r=i[e];if(n[e]=t,r)for(;r.length;)r[0](e,t),r.splice(0,1)}}function o(t,n){t.call&&(t={success:t}),n.length?(t.error||e)(n):(t.success||e)(t)}function s(t,n,i,r){var o,a,l=document,c=i.async,u=(i.numRetries||0)+1,h=i.before||e;r=r||0,/(^css!|\.css$)/.test(t)?(o=!0,(a=l.createElement("link")).rel="stylesheet",a.href=t.replace(/^css!/,"")):((a=l.createElement("script")).src=t,a.async=void 0===c||c),a.onload=a.onerror=a.onbeforeload=function(e){var l=e.type[0];if(o&&"hideFocus"in a)try{a.sheet.cssText.length||(l="e")}catch(e){l="e"}if("e"==l&&(r+=1)<u)return s(t,n,i,r);n(t,l,e.defaultPrevented)},!1!==h(t,a)&&l.head.appendChild(a)}function a(e,n,i){var a,l;if(n&&n.trim&&(a=n),l=(a?i:n)||{},a){if(a in t)throw"LoadJS";t[a]=!0}!function(e,t,n){var i,r,o=(e=e.push?e:[e]).length,a=o,l=[];for(i=function(e,n,i){if("e"==n&&l.push(e),"b"==n){if(!i)return;l.push(e)}--o||t(l)},r=0;r<a;r++)s(e[r],i,n)}(e,function(e){o(l,e),r(a,e)},l)}return a.ready=function(e,t){return function(e,t){var r,o,s,a=[],l=(e=e.push?e:[e]).length,c=l;for(r=function(e,n){n.length&&a.push(e),--c||t(a)};l--;)o=e[l],(s=n[o])?r(o,s):(i[o]=i[o]||[]).push(r)}(e,function(e){o(t,e)}),a},a.done=function(e){r(e,[])},a.reset=function(){t={},n={},i={}},a.isDefined=function(e){return e in t},a},e.exports=n()}),Yr=(function(){function e(e){this.value=e}function t(t){var n,i;function r(n,i){try{var s=t[n](i),a=s.value;a instanceof e?Promise.resolve(a.value).then(function(e){r("next",e)},function(e){r("throw",e)}):o(s.done?"return":"normal",s.value)}catch(e){o("throw",e)}}function o(e,t){switch(e){case"return":n.resolve({value:t,done:!0});break;case"throw":n.reject(t);break;default:n.resolve({value:t,done:!1})}(n=n.next)?r(n.key,n.arg):i=null}this._invoke=function(e,t){return new Promise(function(o,s){var a={key:e,arg:t,resolve:o,reject:s,next:null};i?i=i.next=a:(n=i=a,r(e,t))})},"function"!=typeof t.return&&(this.return=void 0)}"function"==typeof Symbol&&Symbol.asyncIterator&&(t.prototype[Symbol.asyncIterator]=function(){return this}),t.prototype.next=function(e){return this._invoke("next",e)},t.prototype.throw=function(e){return this._invoke("throw",e)},t.prototype.return=function(e){return this._invoke("return",e)}}(),function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}),Kr=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),Qr=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},Jr=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],i=!0,r=!1,o=void 0;try{for(var s,a=e[Symbol.iterator]();!(i=(s=a.next()).done)&&(n.push(s.value),!t||n.length!==t);i=!0);}catch(e){r=!0,o=e}finally{try{!i&&a.return&&a.return()}finally{if(r)throw o}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Xr={is:{plyr:function(e){return this.instanceof(e,window.Plyr)},object:function(e){return this.getConstructor(e)===Object},number:function(e){return this.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return this.getConstructor(e)===String},boolean:function(e){return this.getConstructor(e)===Boolean},function:function(e){return this.getConstructor(e)===Function},array:function(e){return!this.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return this.instanceof(e,window.WeakMap)},nodeList:function(e){return this.instanceof(e,window.NodeList)},element:function(e){return this.instanceof(e,window.Element)},textNode:function(e){return this.getConstructor(e)===Text},event:function(e){return this.instanceof(e,window.Event)},cue:function(e){return this.instanceof(e,window.TextTrackCue)||this.instanceof(e,window.VTTCue)},track:function(e){return this.instanceof(e,TextTrack)||!this.nullOrUndefined(e)&&this.string(e.kind)},url:function(e){return!this.nullOrUndefined(e)&&/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e)},nullOrUndefined:function(e){return null===e||void 0===e},empty:function(e){return this.nullOrUndefined(e)||(this.string(e)||this.array(e)||this.nodeList(e))&&!e.length||this.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)},getConstructor:function(e){return this.nullOrUndefined(e)?null:e.constructor}},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(n,i){try{var r=new XMLHttpRequest;if(!("withCredentials"in r))return;r.addEventListener("load",function(){if("text"===t)try{n(JSON.parse(r.responseText))}catch(e){n(r.responseText)}else n(r.response)}),r.addEventListener("error",function(){throw new Error(r.statusText)}),r.open("GET",e,!0),r.responseType=t,r.send()}catch(e){i(e)}})},loadScript:function(e){return new Promise(function(t,n){zr(e,{success:t,error:n})})},loadSprite:function(e,t){if(Xr.is.string(e)){var n=Xr.is.string(t),i=function(){return document.querySelectorAll("#"+t).length};if(!n||!i()){var r=document.createElement("div");if(Xr.toggleHidden(r,!0),n&&r.setAttribute("id",t),$r.storage){var o=window.localStorage.getItem("cache-"+t);if(null!==o){var s=JSON.parse(o);return void a.call(r,s.content)}}Xr.fetch(e).then(function(e){Xr.is.empty(e)||($r.storage&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),a.call(r,e))}).catch(function(){})}}function a(e){n&&i()||(this.innerHTML=e,document.body.insertBefore(this,document.body.childNodes[0]))}},generateId:function(e){return e+"-"+Math.floor(1e4*Math.random())},wrap:function(e,t){var n=e.length?e:[e];Array.from(n).reverse().forEach(function(e,n){var i=n>0?t.cloneNode(!0):t,r=e.parentNode,o=e.nextSibling;i.appendChild(e),o?r.insertBefore(i,o):r.appendChild(i)})},createElement:function(e,t,n){var i=document.createElement(e);return Xr.is.object(t)&&Xr.setAttributes(i,t),Xr.is.string(n)&&(i.textContent=n),i},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,n,i){t.appendChild(Xr.createElement(e,n,i))},removeElement:function(e){Xr.is.element(e)&&Xr.is.element(e.parentNode)&&(Xr.is.nodeList(e)||Xr.is.array(e)?Array.from(e).forEach(Xr.removeElement):e.parentNode.removeChild(e))},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return Xr.is.element(t)&&Xr.is.element(t.parentNode)&&Xr.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){Xr.is.element(e)&&!Xr.is.empty(t)&&Object.entries(t).forEach(function(t){var n=Jr(t,2),i=n[0],r=n[1];e.setAttribute(i,r)})},getAttributesFromSelector:function(e,t){if(!Xr.is.string(e)||Xr.is.empty(e))return{};var n={},i=t;return e.split(",").forEach(function(e){var t=e.trim(),r=t.replace(".",""),o=t.replace(/[[\]]/g,"").split("="),s=o[0],a=o.length>1?o[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":Xr.is.object(i)&&Xr.is.string(i.class)&&(i.class+=" "+r),n.class=r;break;case"#":n.id=t.replace("#","");break;case"[":n[s]=a}}),n},toggleClass:function(e,t,n){if(Xr.is.element(e)){var i=e.classList.contains(t);return e.classList[n?"add":"remove"](t),n&&!i||!n&&i}return null},hasClass:function(e,t){return Xr.is.element(e)&&e.classList.contains(t)},toggleHidden:function(e,t){Xr.is.element(e)&&(t?e.setAttribute("hidden",""):e.removeAttribute("hidden"))},matches:function(e,t){var n={Element:Element};var i=n.matches||n.webkitMatchesSelector||n.mozMatchesSelector||n.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return i.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},findElements:function(){try{return this.elements.controls=Xr.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:Xr.getElements.call(this,this.config.selectors.buttons.play),pause:Xr.getElement.call(this,this.config.selectors.buttons.pause),restart:Xr.getElement.call(this,this.config.selectors.buttons.restart),rewind:Xr.getElement.call(this,this.config.selectors.buttons.rewind),fastForward:Xr.getElement.call(this,this.config.selectors.buttons.fastForward),mute:Xr.getElement.call(this,this.config.selectors.buttons.mute),pip:Xr.getElement.call(this,this.config.selectors.buttons.pip),airplay:Xr.getElement.call(this,this.config.selectors.buttons.airplay),settings:Xr.getElement.call(this,this.config.selectors.buttons.settings),captions:Xr.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:Xr.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=Xr.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:Xr.getElement.call(this,this.config.selectors.inputs.seek),volume:Xr.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:Xr.getElement.call(this,this.config.selectors.display.buffer),duration:Xr.getElement.call(this,this.config.selectors.display.duration),currentTime:Xr.getElement.call(this,this.config.selectors.display.currentTime)},Xr.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(Xr.is.element(e)){var n=Xr.getElements.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),i=n[0],r=n[n.length-1],o=function(e){if("Tab"===e.key&&9===e.keyCode){var t=Xr.getFocusElement();t!==r||e.shiftKey?t===i&&e.shiftKey&&(r.focus(),e.preventDefault()):(i.focus(),e.preventDefault())}};t?Xr.on(this.elements.container,"keydown",o,!1):Xr.off(this.elements.container,"keydown",o,!1)}},toggleListener:function(e,t,n){var i=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(!Xr.is.empty(e)&&!Xr.is.empty(t)&&Xr.is.function(n))if(Xr.is.nodeList(e)||Xr.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&Xr.toggleListener.call(null,e,t,n,i,r,o)});else{var s=t.split(" "),a=o;$r.passiveListeners&&(a={passive:r,capture:o}),s.forEach(function(t){e[i?"addEventListener":"removeEventListener"](t,n,a)})}},on:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments[2],i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];Xr.toggleListener(e,t,n,!0,i,r)},off:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments[2],i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];Xr.toggleListener(e,t,n,!1,i,r)},dispatchEvent:function(e,t,n,i){if(Xr.is.element(e)&&Xr.is.string(t)){var r=new CustomEvent(t,{bubbles:!!Xr.is.boolean(n)&&n,detail:Object.assign({},i,{plyr:Xr.is.plyr(this)?this:null})});e.dispatchEvent(r)}},toggleState:function(e,t){if(Xr.is.array(e)||Xr.is.nodeList(e))Array.from(e).forEach(function(e){return Xr.toggleState(e,t)});else if(Xr.is.element(e)){var n="true"===e.getAttribute("aria-pressed"),i=Xr.is.boolean(t)?t:!n;e.setAttribute("aria-pressed",i)}},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!Xr.is.number(e))return this.formatTime(null,t,n);var i=function(e){return("0"+e).slice(-2)},r=this.getHours(e),o=this.getMinutes(e),s=this.getSeconds(e);return t||r>0?r+=":":r="",(n?"-":"")+r+i(o)+":"+i(s)},replaceAll:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1"),"g"),n.toString())},toTitleCase:function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString().replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})},toPascalCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=Xr.replaceAll(e,"-"," "),e=Xr.replaceAll(e,"_"," "),e=Xr.toTitleCase(e),Xr.replaceAll(e," ","")},toCamelCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=Xr.toPascalCase(e)).charAt(0).toLowerCase()+e.slice(1)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];if(!n.length)return e;var r=n.shift();return Xr.is.object(r)?(Object.keys(r).forEach(function(t){Xr.is.object(r[t])?(Object.keys(e).includes(t)||Object.assign(e,Qr({},t,{})),Xr.extend(e[t],r[t])):Object.assign(e,Qr({},t,r[t]))}),Xr.extend.apply(Xr,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(n)))):e},getProviderByUrl:function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?Hr.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{8,}(?=\b|\/)/.test(e)?Hr.vimeo:null},parseYouTubeId:function(e){if(Xr.is.empty(e))return null;return e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if(Xr.is.empty(e))return null;if(Xr.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement("a");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith("http://")||e.startsWith("https://"))&&(t=this.parseUrl(e).search);return this.is.empty(t)?null:t.slice(t.indexOf("?")+1).split("&").reduce(function(e,t){var n=t.split("="),i=Jr(n,2),r=i[0],o=i[1];return Object.assign(e,Qr({},r,decodeURIComponent(o)))},{})},buildUrlParams:function(e){return Xr.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&"):""},stripHTML:function(e){var t=document.createDocumentFragment(),n=document.createElement("div");return t.appendChild(n),n.innerHTML=e,t.firstChild.innerText},getAspectRatio:function(e,t){var n=function e(t,n){return 0===n?t:e(n,t%n)}(e,t);return e/n+":"+t/n},get transitionEndEvent(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!Xr.is.string(n)&&t[n]},repaint:function(e){setTimeout(function(){Xr.toggleHidden(e,!0),e.offsetHeight,Xr.toggleHidden(e,!1)},0)}},$r={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,n){var i=!1,r=!1,o=Xr.getBrowser(),s=o.isIPhone&&n&&$r.inline;switch(t+":"+e){case"html5:video":r=(i=$r.video)&&$r.rangeInput&&(!o.isIPhone||s);break;case"html5:audio":r=(i=$r.audio)&&$r.rangeInput;break;case"youtube:video":case"vimeo:video":i=!0,r=$r.rangeInput&&(!o.isIPhone||s);break;default:r=(i=$r.audio&&$r.video)&&$r.rangeInput}return{api:i,ui:r}},pip:!Xr.getBrowser().isIPhone&&Xr.is.function(Xr.createElement("video").webkitSetPresentationMode),airplay:Xr.is.function(window.WebKitPlaybackTargetAvailabilityEvent),inline:"playsInline"in document.createElement("video"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!Xr.is.function(t.canPlayType))return!1;if(this.isVideo)switch(e){case"video/webm":return t.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return t.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return t.canPlayType('video/ogg; codecs="theora"').replace(/no/,"");default:return!1}else if(this.isAudio)switch(e){case"audio/mpeg":return t.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return t.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return t.canPlayType('audio/wav; codecs="1"').replace(/no/,"");default:return!1}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t)}catch(e){}return e}(),rangeInput:(Ur=document.createElement("input"),Ur.type="range","range"===Ur.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==Xr.transitionEndEvent,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},Zr=function(){},eo=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Yr(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return Kr(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):Zr}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):Zr}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):Zr}}]),e}(),to=Xr.getBrowser();function no(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;Xr.is.element(e)&&Xr.toggleState(e,this.active),Xr.dispatchEvent(this.target,this.active?"enterfullscreen":"exitfullscreen",!0),to.isIos||Xr.trapFocus.call(this.player,this.target,this.active)}}function io(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",Xr.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),no.call(this)}var ro=function(){function e(t){var n=this;Yr(this,e),this.player=t,this.prefix=e.prefix,this.name=e.name,this.scrollPosition={x:0,y:0},Xr.on(document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){no.call(n)}),Xr.on(this.player.elements.container,"dblclick",function(){n.toggle()}),Xr.on(this.player.elements.controls,"dblclick",function(e){return e.stopPropagation()}),this.update()}return Kr(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),Xr.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(to.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?Xr.is.empty(this.prefix)||this.target[this.prefix+"Request"+this.name]():this.target.requestFullscreen():io.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(to.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(e.native)if(this.prefix){if(!Xr.is.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document[""+this.prefix+t+this.name]()}}else document.cancelFullScreen();else io.call(this,!1)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){return(e.native||this.player.config.fullscreen.fallback)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[""+this.prefix+this.name+"Element"]:document.fullscreenElement)===this.target:Xr.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return to.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(Xr.is.function(document.exitFullscreen))return!1;var e="";return["webkit","moz","ms"].some(function(t){return!(!Xr.is.function(document[t+"ExitFullscreen"])&&!Xr.is.function(document[t+"CancelFullScreen"]))&&(e=t,!0)}),e}},{key:"name",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}(),oo={setup:function(){if(this.supported.ui){var e=this.storage.get("language");if(Xr.is.empty(e)||(this.captions.language=e),Xr.is.empty(this.captions.language)&&(this.captions.language=this.config.captions.language.toLowerCase()),!Xr.is.boolean(this.captions.active)){var t=this.storage.get("captions");Xr.is.boolean(t)?this.captions.active=t:this.captions.active=this.config.captions.active}if(!this.isVideo||this.isYouTube||this.isHTML5&&!$r.textTracks)Xr.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&co.setCaptionsMenu.call(this);else{Xr.is.element(this.elements.captions)||(this.elements.captions=Xr.createElement("div",Xr.getAttributesFromSelector(this.config.selectors.captions)),Xr.insertAfter(this.elements.captions,this.elements.wrapper)),Xr.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!Xr.is.empty(oo.getTracks.call(this)));var n=oo.getTracks.call(this);if(!Xr.is.empty(n)){if(Xr.getBrowser().isIE&&window.URL){var i=this.media.querySelectorAll("track");Array.from(i).forEach(function(e){var t=e.getAttribute("src"),n=Xr.parseUrl(t);n.hostname!==window.location.href.hostname&&["http:","https:"].includes(n.protocol)&&Xr.fetch(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){Xr.removeElement(e)})})}oo.setLanguage.call(this),oo.show.call(this),Xr.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&co.setCaptionsMenu.call(this)}}}},setLanguage:function(){var e=this;if(this.isHTML5&&this.isVideo){oo.getTracks.call(this).forEach(function(t){Xr.on(t,"cuechange",function(t){return oo.setCue.call(e,t)}),t.mode="hidden"});var t=oo.getCurrentTrack.call(this);Xr.is.track(t)&&Array.from(t.activeCues||[]).length&&oo.setCue.call(this,t)}else this.isVimeo&&this.captions.active&&this.embed.enableTextTrack(this.language)},getTracks:function(){return Xr.is.nullOrUndefined(this.media)?[]:Array.from(this.media.textTracks||[]).filter(function(e){return["captions","subtitles"].includes(e.kind)})},getCurrentTrack:function(){var e=this;return oo.getTracks.call(this).find(function(t){return t.language.toLowerCase()===e.language})},setCue:function(e){var t=Xr.is.event(e)?e.target:e,n=t.activeCues,i=n.length&&n[0];t===oo.getCurrentTrack.call(this)&&(Xr.is.cue(i)?oo.setText.call(this,i.getCueAsHTML()):oo.setText.call(this,null),Xr.dispatchEvent.call(this,this.media,"cuechange"))},setText:function(e){if(this.supported.ui)if(Xr.is.element(this.elements.captions)){var t=Xr.createElement("span");Xr.emptyElement(this.elements.captions);var n=Xr.is.nullOrUndefined(e)?"":e;Xr.is.string(n)?t.textContent=n.trim():t.appendChild(n),this.elements.captions.appendChild(t)}else this.debug.warn("No captions element to render to")},show:function(){if(Xr.is.element(this.elements.buttons.captions)){var e=this.storage.get("captions");Xr.is.boolean(e)?this.captions.active=e:e=this.config.captions.active,e&&(Xr.toggleClass(this.elements.container,this.config.classNames.captions.active,!0),Xr.toggleState(this.elements.buttons.captions,!0))}}},so=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(Xr.is.empty(e)||Xr.is.empty(t)||!Object.keys(t.i18n).includes(e))return"";var n=t.i18n[e],i={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(i).forEach(function(e){var t=Jr(e,2),i=t[0],r=t[1];n=Xr.replaceAll(n,i,r)}),n},ao={addStyleHook:function(){Xr.toggleClass(this.elements.container,this.config.selectors.container.replace(".",""),!0),Xr.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void ao.toggleNativeControls.call(this,!0);Xr.is.element(this.elements.controls)||(co.inject.call(this),this.listeners.controls()),Xr.is.element(this.elements.controls)&&(ao.toggleNativeControls.call(this),oo.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.options.quality=[],ao.timeUpdate.call(this),ao.checkPlaying.call(this),this.ready=!0,setTimeout(function(){Xr.dispatchEvent.call(e,e.media,"ready")},0),ao.setTitle.call(this))},setTitle:function(){var e=so("play",this.config);if(Xr.is.string(this.config.title)&&!Xr.is.empty(this.config.title)&&(e+=", "+this.config.title,this.elements.container.setAttribute("aria-label",this.config.title)),Xr.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=Xr.getElement.call(this,"iframe");if(!Xr.is.element(t))return;Xr.is.empty(this.config.title)||this.config.title;t.setAttribute("title",so("frameTitle",this.config))}},checkPlaying:function(){Xr.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),Xr.toggleClass(this.elements.container,this.config.classNames.stopped,this.paused),Xr.toggleState(this.elements.buttons.play,this.playing),this.toggleControls(!this.playing)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){Xr.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),t.toggleControls(t.loading)},this.loading?250:0)},checkFailed:function(){var e=this;this.failed=3===this.media.networkState,this.failed&&(Xr.toggleClass(this.elements.container,this.config.classNames.loading,!1),Xr.toggleClass(this.elements.container,this.config.classNames.error,!0)),clearTimeout(this.timers.failed),this.timers.loading=setTimeout(function(){Xr.toggleClass(e.elements.container,e.config.classNames.loading,e.loading),e.toggleControls(e.loading)},this.loading?250:0)},updateVolume:function(){this.supported.ui&&(Xr.is.element(this.elements.inputs.volume)&&ao.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),Xr.is.element(this.elements.buttons.mute)&&Xr.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;Xr.is.element(e)&&(e.value=t,co.updateRangeFill.call(this,e))},setProgress:function(e,t){var n=Xr.is.number(t)?t:0,i=Xr.is.element(e)?e:this.elements.display.buffer;if(Xr.is.element(i)){i.value=n;var r=i.getElementsByTagName("span")[0];Xr.is.element(r)&&(r.childNodes[0].nodeValue=n)}},updateProgress:function(e){if(this.supported.ui&&Xr.is.event(e)){var t=0;if(e)switch(e.type){case"timeupdate":case"seeking":t=Xr.getPercentage(this.currentTime,this.duration),"timeupdate"===e.type&&ao.setRange.call(this,this.elements.inputs.seek,t);break;case"playing":case"progress":ao.setProgress.call(this,this.elements.display.buffer,100*this.buffered)}}},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(Xr.is.element(e)&&Xr.is.number(t)){var i=Xr.getHours(this.duration)>0;e.textContent=Xr.formatTime(t,i,n)}},timeUpdate:function(e){var t=!Xr.is.element(this.elements.display.duration)&&this.config.invertTime;ao.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||ao.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui){var e=Xr.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&ao.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&ao.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),co.updateSeekTooltip.call(this)}}},lo=Xr.getBrowser(),co={updateRangeFill:function(e){if(lo.isWebkit){var t=Xr.is.event(e)?e.target:e;Xr.is.element(t)&&"range"===t.getAttribute("type")&&t.style.setProperty("--value",t.value/t.max*100+"%")}},getIconUrl:function(){return{url:this.config.iconUrl,absolute:0===this.config.iconUrl.indexOf("http")||lo.isIE&&!window.svg4everybody}},createIcon:function(e,t){var n=co.getIconUrl.call(this),i=(n.absolute?"":n.url)+"#"+this.config.iconPrefix,r=document.createElementNS("http://www.w3.org/2000/svg","svg");Xr.setAttributes(r,Xr.extend(t,{role:"presentation"}));var o=document.createElementNS("http://www.w3.org/2000/svg","use"),s=i+"-"+e;return"href"in o?o.setAttributeNS("http://www.w3.org/1999/xlink","href",s):o.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",s),r.appendChild(o),r},createLabel:function(e,t){var n=so(e,this.config),i=Object.assign({},t);switch(e){case"pip":n="PIP";break;case"airplay":n="AirPlay"}return"class"in i?i.class+=" "+this.config.classNames.hidden:i.class=this.config.classNames.hidden,Xr.createElement("span",i,n)},createBadge:function(e){if(Xr.is.empty(e))return null;var t=Xr.createElement("span",{class:this.config.classNames.menu.value});return t.appendChild(Xr.createElement("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var n=Xr.createElement("button"),i=Object.assign({},t),r=Xr.toCamelCase(e),o=!1,s=void 0,a=void 0,l=void 0,c=void 0;switch("type"in i||(i.type="button"),"class"in i?i.class.includes(this.config.classNames.control)&&(i.class+=" "+this.config.classNames.control):i.class=this.config.classNames.control,e){case"play":o=!0,s="play",l="pause",a="play",c="pause";break;case"mute":o=!0,s="mute",l="unmute",a="volume",c="muted";break;case"captions":o=!0,s="enableCaptions",l="disableCaptions",a="captions-off",c="captions-on";break;case"fullscreen":o=!0,s="enterFullscreen",l="exitFullscreen",a="enter-fullscreen",c="exit-fullscreen";break;case"play-large":i.class+=" "+this.config.classNames.control+"--overlaid",r="play",s="play",a="play";break;default:s=r,a=e}return o?(n.appendChild(co.createIcon.call(this,c,{class:"icon--pressed"})),n.appendChild(co.createIcon.call(this,a,{class:"icon--not-pressed"})),n.appendChild(co.createLabel.call(this,l,{class:"label--pressed"})),n.appendChild(co.createLabel.call(this,s,{class:"label--not-pressed"})),i["aria-pressed"]=!1,i["aria-label"]=so(s,this.config)):(n.appendChild(co.createIcon.call(this,a)),n.appendChild(co.createLabel.call(this,s))),Xr.extend(i,Xr.getAttributesFromSelector(this.config.selectors.buttons[r],i)),Xr.setAttributes(n,i),"play"===r?(Xr.is.array(this.elements.buttons[r])||(this.elements.buttons[r]=[]),this.elements.buttons[r].push(n)):this.elements.buttons[r]=n,n},createRange:function(e,t){var n=Xr.createElement("label",{for:t.id,class:this.config.classNames.hidden},so(e,this.config)),i=Xr.createElement("input",Xr.extend(Xr.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off"},t));return this.elements.inputs[e]=i,co.updateRangeFill.call(this,i),{label:n,input:i}},createProgress:function(e,t){var n=Xr.createElement("progress",Xr.extend(Xr.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0},t));if("volume"!==e){n.appendChild(Xr.createElement("span",null,"0"));var i="";switch(e){case"played":i=so("played",this.config);break;case"buffer":i=so("buffered",this.config)}n.textContent="% "+i.toLowerCase()}return this.elements.display[e]=n,n},createTime:function(e){var t=Xr.createElement("div",{class:"plyr__time"});return t.appendChild(Xr.createElement("span",{class:this.config.classNames.hidden},so(e,this.config))),t.appendChild(Xr.createElement("span",Xr.getAttributesFromSelector(this.config.selectors.display[e]),"00:00")),this.elements.display[e]=t,t},createMenuItem:function(e,t,n,i){var r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,o=arguments.length>5&&void 0!==arguments[5]&&arguments[5],s=Xr.createElement("li"),a=Xr.createElement("label",{class:this.config.classNames.control}),l=Xr.createElement("input",Xr.extend(Xr.getAttributesFromSelector(this.config.selectors.inputs[n]),{type:"radio",name:"plyr-"+n,value:e,checked:o,class:"plyr__sr-only"})),c=Xr.createElement("span",{"aria-hidden":!0});a.appendChild(l),a.appendChild(c),a.insertAdjacentHTML("beforeend",i),Xr.is.element(r)&&a.appendChild(r),s.appendChild(a),t.appendChild(s)},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&Xr.is.element(this.elements.inputs.seek)&&Xr.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var n=0,i=this.elements.inputs.seek.getBoundingClientRect(),r=this.config.classNames.tooltip+"--visible",o=function(e){Xr.toggleClass(t.elements.display.seekTooltip,r,e)};if(this.touch)o(!1);else{if(Xr.is.event(e))n=100/i.width*(e.pageX-i.left);else{if(!Xr.hasClass(this.elements.display.seekTooltip,r))return;n=parseFloat(this.elements.display.seekTooltip.style.left,10)}n<0?n=0:n>100&&(n=100),ao.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*n),this.elements.display.seekTooltip.style.left=n+"%",Xr.is.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&o("mouseenter"===e.type)}}},toggleTab:function(e,t){var n=this.elements.settings.tabs[e],i=this.elements.settings.panes[e];Xr.toggleHidden(n,!t),Xr.toggleHidden(i,!t)},setQualityMenu:function(e){var t=this;if(Xr.is.element(this.elements.settings.panes.quality)){var n=this.elements.settings.panes.quality.querySelector("ul");Xr.is.array(e)?this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}):this.options.quality=this.config.quality.options;var i=!Xr.is.empty(this.options.quality)&&this.isYouTube;if(co.toggleTab.call(this,"quality",i),i){Xr.emptyElement(n);this.options.quality.forEach(function(e){return co.createMenuItem.call(t,e,n,"quality",co.getLabel.call(t,"quality",e),function(e){var n="";switch(e){case"hd2160":n="4K";break;case"hd1440":n="WQHD";break;case"hd1080":case"hd720":n="HD"}return n.length?co.createBadge.call(t,n):null}(e))}),co.updateSetting.call(this,"quality",n)}}},getLabel:function(e,t){switch(e){case"speed":return 1===t?"Normal":t+"&times;";case"quality":switch(t){case"hd2160":return"2160P";case"hd1440":return"1440P";case"hd1080":return"1080P";case"hd720":return"720P";case"large":return"480P";case"medium":return"360P";case"small":return"240P";case"tiny":return"Tiny";case"default":return"Auto";default:return t}case"captions":return co.getLanguage.call(this);default:return null}},updateSetting:function(e,t){var n=this.elements.settings.panes[e],i=null,r=t;switch(e){case"captions":i=this.captions.active?this.captions.language:so("disabled",this.config);break;default:if(i=this[e],Xr.is.empty(i)&&(i=this.config[e].default),!this.options[e].includes(i))return void this.debug.warn("Unsupported value of '"+i+"' for "+e);if(!this.config[e].options.includes(i))return void this.debug.warn("Disabled value of '"+i+"' for "+e)}(Xr.is.element(r)||(r=n&&n.querySelector("ul")),Xr.is.empty(i))||(this.elements.settings.tabs[e].querySelector("."+this.config.classNames.menu.value).innerHTML=co.getLabel.call(this,e,i));var o=r&&r.querySelector('input[value="'+i+'"]');Xr.is.element(o)&&(o.checked=!0)},getLanguage:function(){if(!this.supported.ui)return null;if($r.textTracks&&oo.getTracks.call(this).length&&this.captions.active){var e=oo.getCurrentTrack.call(this);if(Xr.is.track(e))return e.label}return so("disabled",this.config)},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector("ul"),n=oo.getTracks.call(this).length;if(co.toggleTab.call(this,"captions",n),Xr.emptyElement(t),n){var i=oo.getTracks.call(this).map(function(e){return{language:e.language,label:Xr.is.empty(e.label)?e.language.toUpperCase():e.label}});i.unshift({language:"",label:so("disabled",this.config)}),i.forEach(function(n){co.createMenuItem.call(e,n.language,t,"language",n.label||n.language,co.createBadge.call(e,n.language.toUpperCase()),n.language.toLowerCase()===e.captions.language.toLowerCase())}),co.updateSetting.call(this,"captions",t)}},setSpeedMenu:function(){var e=this;if(Xr.is.element(this.elements.settings.panes.speed)){Xr.is.array(this.options.speed)&&this.options.speed.length||(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(t){return e.config.speed.options.includes(t)});var t=!Xr.is.empty(this.options.speed);if(co.toggleTab.call(this,"speed",t),t){var n=this.elements.settings.panes.speed.querySelector("ul");Xr.toggleHidden(this.elements.settings.tabs.speed,!1),Xr.toggleHidden(this.elements.settings.panes.speed,!1),Xr.emptyElement(n),this.options.speed.forEach(function(t){return co.createMenuItem.call(e,t,n,"speed",co.getLabel.call(e,"speed",t))}),co.updateSetting.call(this,"speed",n)}}},toggleMenu:function(e){var t=this.elements.settings.form,n=this.elements.buttons.settings;if(Xr.is.element(t)&&Xr.is.element(n)){var i=Xr.is.boolean(e)?e:Xr.is.element(t)&&"true"===t.getAttribute("aria-hidden");if(Xr.is.event(e)){var r=Xr.is.element(t)&&t.contains(e.target),o=e.target===this.elements.buttons.settings;if(r||!r&&!o&&i)return;o&&e.stopPropagation()}Xr.is.element(n)&&n.setAttribute("aria-expanded",i),Xr.is.element(t)&&(t.setAttribute("aria-hidden",!i),Xr.toggleClass(this.elements.container,this.config.classNames.menu.open,i),i?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1))}},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.setAttribute("aria-hidden",!1),Array.from(t.querySelectorAll("input[name]")).forEach(function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(t);var n=t.scrollWidth,i=t.scrollHeight;return Xr.removeElement(t),{width:n,height:i}},showTab:function(e){var t=this.elements.settings.menu,n=e.target,i="false"===n.getAttribute("aria-expanded"),r=document.getElementById(n.getAttribute("aria-controls"));if(Xr.is.element(r)&&"tabpanel"===r.getAttribute("role")){var o=t.querySelector('[role="tabpanel"][aria-hidden="false"]'),s=o.parentNode;if(Array.from(t.querySelectorAll('[aria-controls="'+o.getAttribute("id")+'"]')).forEach(function(e){e.setAttribute("aria-expanded",!1)}),$r.transitions&&!$r.reducedMotion){s.style.width=o.scrollWidth+"px",s.style.height=o.scrollHeight+"px";var a=co.getTabSize.call(this,r);Xr.on(s,Xr.transitionEndEvent,function e(t){t.target===s&&["width","height"].includes(t.propertyName)&&(s.style.width="",s.style.height="",Xr.off(s,Xr.transitionEndEvent,e))}),s.style.width=a.width+"px",s.style.height=a.height+"px"}o.setAttribute("aria-hidden",!0),o.setAttribute("tabindex",-1),r.setAttribute("aria-hidden",!i),n.setAttribute("aria-expanded",i),r.removeAttribute("tabindex"),r.querySelectorAll("button:not(:disabled), input:not(:disabled), [tabindex]")[0].focus()}},create:function(e){var t=this;if(Xr.is.empty(this.config.controls))return null;var n=Xr.createElement("div",Xr.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&n.appendChild(co.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&n.appendChild(co.createButton.call(this,"rewind")),this.config.controls.includes("play")&&n.appendChild(co.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&n.appendChild(co.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var i=Xr.createElement("div",Xr.getAttributesFromSelector(this.config.selectors.progress)),r=co.createRange.call(this,"seek",{id:"plyr-seek-"+e.id});if(i.appendChild(r.label),i.appendChild(r.input),i.appendChild(co.createProgress.call(this,"buffer")),this.config.tooltips.seek){var o=Xr.createElement("span",{role:"tooltip",class:this.config.classNames.tooltip},"00:00");i.appendChild(o),this.elements.display.seekTooltip=o}this.elements.progress=i,n.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&n.appendChild(co.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&n.appendChild(co.createTime.call(this,"duration")),this.config.controls.includes("mute")&&n.appendChild(co.createButton.call(this,"mute")),this.config.controls.includes("volume")){var s=Xr.createElement("div",{class:"plyr__volume"}),a={max:1,step:.05,value:this.config.volume},l=co.createRange.call(this,"volume",Xr.extend(a,{id:"plyr-volume-"+e.id}));s.appendChild(l.label),s.appendChild(l.input),this.elements.volume=s,n.appendChild(s)}if(this.config.controls.includes("captions")&&n.appendChild(co.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!Xr.is.empty(this.config.settings)){var c=Xr.createElement("div",{class:"plyr__menu"});c.appendChild(co.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var u=Xr.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),h=Xr.createElement("div"),d=Xr.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-hidden":!1,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),f=Xr.createElement("ul",{role:"tablist"});this.config.settings.forEach(function(n){var i=Xr.createElement("li",{role:"tab",hidden:""}),r=Xr.createElement("button",Xr.extend(Xr.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+n+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+n,"aria-expanded":!1}),so(n,t.config)),o=Xr.createElement("span",{class:t.config.classNames.menu.value});o.innerHTML=e[n],r.appendChild(o),i.appendChild(r),f.appendChild(i),t.elements.settings.tabs[n]=i}),d.appendChild(f),h.appendChild(d),this.config.settings.forEach(function(n){var i=Xr.createElement("div",{id:"plyr-settings-"+e.id+"-"+n,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-"+e.id+"-"+n+"-tab",role:"tabpanel",tabindex:-1,hidden:""}),r=Xr.createElement("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},so(n,t.config));i.appendChild(r);var o=Xr.createElement("ul");i.appendChild(o),h.appendChild(i),t.elements.settings.panes[n]=i}),u.appendChild(h),c.appendChild(u),n.appendChild(c),this.elements.settings.form=u,this.elements.settings.menu=c}return this.config.controls.includes("pip")&&$r.pip&&n.appendChild(co.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&$r.airplay&&n.appendChild(co.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&n.appendChild(co.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(co.createButton.call(this,"play-large")),this.elements.controls=n,this.config.controls.includes("settings")&&this.config.settings.includes("speed")&&co.setSpeedMenu.call(this),n},inject:function(){var e=this;if(this.config.loadSprite){var t=co.getIconUrl.call(this);t.absolute&&Xr.loadSprite(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var n=null;this.elements.controls=null,n=Xr.is.string(this.config.controls)||Xr.is.element(this.config.controls)?this.config.controls:Xr.is.function(this.config.controls)?this.config.controls({id:this.id,seektime:this.config.seekTime,title:this.config.title}):co.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:co.getLanguage.call(this)});var i=void 0;if(Xr.is.string(this.config.selectors.controls.container)&&(i=document.querySelector(this.config.selectors.controls.container)),Xr.is.element(i)||(i=this.elements.container),Xr.is.element(n)?i.appendChild(n):i.insertAdjacentHTML("beforeend",n),Xr.is.element(this.elements.controls)||Xr.findElements.call(this),window.navigator.userAgent.includes("Edge")&&Xr.repaint(i),this.config.tooltips.controls){var r=Xr.getElements.call(this,[this.config.selectors.controls.wrapper," ",this.config.selectors.labels," .",this.config.classNames.hidden].join(""));Array.from(r).forEach(function(t){Xr.toggleClass(t,e.config.classNames.hidden,!1),Xr.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute("role","tooltip")})}}},uo=Xr.getBrowser(),ho=function(){function e(t){Yr(this,e),this.player=t,this.lastKey=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.firstTouch=this.firstTouch.bind(this)}return Kr(e,[{key:"handleKey",value:function(e){var t=this,n=e.keyCode?e.keyCode:e.which,i="keydown"===e.type,r=i&&n===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&Xr.is.number(n)){if(i){var o=Xr.getFocusElement();if(Xr.is.element(o)&&Xr.matches(o,this.player.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(n)&&(e.preventDefault(),e.stopPropagation()),n){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:r||(t.player.currentTime=t.player.duration/10*(n-48));break;case 32:case 75:r||this.player.togglePlay();break;case 38:this.player.increaseVolume(.1);break;case 40:this.player.decreaseVolume(.1);break;case 77:r||(this.player.muted=!this.player.muted);break;case 39:this.player.fastForward();break;case 37:this.player.rewind();break;case 70:this.player.fullscreen.toggle();break;case 67:r||this.player.toggleCaptions();break;case 76:this.player.loop=!this.player.loop}!this.player.fullscreen.enabled&&this.player.fullscreen.active&&27===n&&this.player.fullscreen.toggle(),this.lastKey=n}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){co.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){this.player.touch=!0,Xr.toggleClass(this.player.elements.container,this.player.config.classNames.isTouch,!0),Xr.off(document.body,"touchstart",this.firstTouch)}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.player.config.keyboard.global&&Xr.toggleListener(window,"keydown keyup",this.handleKey,e,!1),Xr.toggleListener(document.body,"click",this.toggleMenu,e),Xr.on(document.body,"touchstart",this.firstTouch)}},{key:"container",value:function(){var e=this;!this.player.config.keyboard.global&&this.player.config.keyboard.focused&&Xr.on(this.player.elements.container,"keydown keyup",this.handleKey,!1),Xr.on(this.player.elements.container,"focusout",function(t){Xr.toggleClass(t.target,e.player.config.classNames.tabFocus,!1)}),Xr.on(this.player.elements.container,"keydown",function(t){9===t.keyCode&&setTimeout(function(){Xr.toggleClass(Xr.getFocusElement(),e.player.config.classNames.tabFocus,!0)},0)}),this.player.config.hideControls&&Xr.on(this.player.elements.container,"mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen",function(t){e.player.toggleControls(t)})}},{key:"media",value:function(){var e=this;if(Xr.on(this.player.media,"timeupdate seeking",function(t){return ao.timeUpdate.call(e.player,t)}),Xr.on(this.player.media,"durationchange loadedmetadata",function(t){return ao.durationUpdate.call(e.player,t)}),Xr.on(this.player.media,"loadeddata",function(){Xr.toggleHidden(e.player.elements.volume,!e.player.hasAudio),Xr.toggleHidden(e.player.elements.buttons.mute,!e.player.hasAudio)}),Xr.on(this.player.media,"ended",function(){e.player.isHTML5&&e.player.isVideo&&e.player.config.showPosterOnEnd&&(e.player.restart(),e.player.media.load())}),Xr.on(this.player.media,"progress playing",function(t){return ao.updateProgress.call(e.player,t)}),Xr.on(this.player.media,"volumechange",function(t){return ao.updateVolume.call(e.player,t)}),Xr.on(this.player.media,"playing play pause ended emptied",function(t){return ao.checkPlaying.call(e.player,t)}),Xr.on(this.player.media,"waiting canplay seeked playing",function(t){return ao.checkLoading.call(e.player,t)}),this.player.supported.ui&&this.player.config.clickToPlay&&!this.player.isAudio){var t=Xr.getElement.call(this.player,"."+this.player.config.classNames.video);if(!Xr.is.element(t))return;Xr.on(t,"click",function(){e.player.config.hideControls&&e.player.touch&&!e.player.paused||(e.player.paused?e.player.play():e.player.ended?(e.player.restart(),e.player.play()):e.player.pause())})}this.player.supported.ui&&this.player.config.disableContextMenu&&Xr.on(this.player.media,"contextmenu",function(e){e.preventDefault()},!1),Xr.on(this.player.media,"volumechange",function(){e.player.storage.set({volume:e.player.volume,muted:e.player.muted})}),Xr.on(this.player.media,"ratechange",function(){co.updateSetting.call(e.player,"speed"),e.player.storage.set({speed:e.player.speed})}),Xr.on(this.player.media,"qualitychange",function(){co.updateSetting.call(e.player,"quality"),e.player.storage.set({quality:e.player.quality})}),Xr.on(this.player.media,"languagechange",function(){co.updateSetting.call(e.player,"captions"),e.player.storage.set({language:e.player.language})}),Xr.on(this.player.media,"captionsenabled captionsdisabled",function(){co.updateSetting.call(e.player,"captions"),e.player.storage.set({captions:e.player.captions.active})}),Xr.on(this.player.media,this.player.config.events.concat(["keyup","keydown"]).join(" "),function(t){var n={};"error"===t.type&&(n=e.player.media.error),Xr.dispatchEvent.call(e.player,e.player.elements.container,t.type,!0,n)})}},{key:"controls",value:function(){var e=this,t=uo.isIE?"change":"input",n=function(t,n,i){var r=e.player.config.listeners[i];Xr.is.function(r)&&r.call(e.player,t),!t.defaultPrevented&&Xr.is.function(n)&&n.call(e.player,t)},i=function(t,i,r,o){var s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=e.player.config.listeners[o],l=Xr.is.function(a);Xr.on(t,i,function(e){return n(e,r,o)},s&&!l)};i(this.player.elements.buttons.play,"click",this.player.togglePlay,"play"),i(this.player.elements.buttons.restart,"click",this.player.restart,"restart"),i(this.player.elements.buttons.rewind,"click",this.player.rewind,"rewind"),i(this.player.elements.buttons.fastForward,"click",this.player.forward,"fastForward"),i(this.player.elements.buttons.mute,"click",function(){e.player.muted=!e.player.muted},"mute"),i(this.player.elements.buttons.captions,"click",this.player.toggleCaptions),i(this.player.elements.buttons.fullscreen,"click",function(){e.player.fullscreen.toggle()},"fullscreen"),i(this.player.elements.buttons.pip,"click",function(){e.player.pip="toggle"},"pip"),i(this.player.elements.buttons.airplay,"click",this.player.airplay,"airplay"),i(this.player.elements.buttons.settings,"click",function(t){co.toggleMenu.call(e.player,t)}),i(this.player.elements.settings.form,"click",function(t){t.stopPropagation(),Xr.matches(t.target,e.player.config.selectors.inputs.language)?n(t,function(){e.player.language=t.target.value},"language"):Xr.matches(t.target,e.player.config.selectors.inputs.quality)?n(t,function(){e.player.quality=t.target.value},"quality"):Xr.matches(t.target,e.player.config.selectors.inputs.speed)?n(t,function(){e.player.speed=parseFloat(t.target.value)},"speed"):co.showTab.call(e.player,t)}),i(this.player.elements.inputs.seek,t,function(t){e.player.currentTime=t.target.value/t.target.max*e.player.duration},"seek"),this.player.config.toggleInvert&&!Xr.is.element(this.player.elements.display.duration)&&i(this.player.elements.display.currentTime,"click",function(){0!==e.player.currentTime&&(e.player.config.invertTime=!e.player.config.invertTime,ao.timeUpdate.call(e.player))}),i(this.player.elements.inputs.volume,t,function(t){e.player.volume=t.target.value},"volume"),uo.isWebkit&&i(Xr.getElements.call(this.player,'input[type="range"]'),"input",function(t){co.updateRangeFill.call(e.player,t.target)}),i(this.player.elements.progress,"mouseenter mouseleave mousemove",function(t){return co.updateSeekTooltip.call(e.player,t)}),this.player.config.hideControls&&(i(this.player.elements.controls,"mouseenter mouseleave",function(t){e.player.elements.controls.hover=!e.player.touch&&"mouseenter"===t.type}),i(this.player.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.player.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),i(this.player.elements.controls,"focusin focusout",function(t){e.player.toggleControls(t)})),i(this.player.elements.inputs.volume,"wheel",function(t){var n=t.webkitDirectionInvertedFromDevice,i=0;(t.deltaY<0||t.deltaX>0)&&(n?(e.player.decreaseVolume(.02),i=-1):(e.player.increaseVolume(.02),i=1)),(t.deltaY>0||t.deltaX<0)&&(n?(e.player.increaseVolume(.02),i=1):(e.player.decreaseVolume(.02),i=-1)),(1===i&&e.player.media.volume<1||-1===i&&e.player.media.volume>0)&&t.preventDefault()},"volume",!1)}},{key:"clear",value:function(){this.global(!1)}}]),e}(),fo=function(){function e(t){Yr(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return Kr(e,[{key:"get",value:function(t){if(!e.supported)return null;var n=window.localStorage.getItem(this.key);if(Xr.is.empty(n))return null;var i=JSON.parse(n);return Xr.is.string(t)&&t.length?i[t]:i}},{key:"set",value:function(t){if(e.supported&&this.enabled&&Xr.is.object(t)){var n=this.get();Xr.is.empty(n)&&(n={}),Xr.extend(n,t),window.localStorage.setItem(this.key,JSON.stringify(n))}}}],[{key:"supported",get:function(){try{if(!("localStorage"in window))return!1;return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}(),po=function(){function e(t){var n=this;Yr(this,e),this.player=t,this.publisherId=t.config.ads.publisherId,this.enabled=t.isHTML5&&t.isVideo&&t.config.ads.enabled&&Xr.is.string(this.publisherId)&&this.publisherId.length,this.playing=!1,this.initialized=!1,this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.managerPromise=new Promise(function(e,t){n.on("loaded",e),n.on("error",t)}),this.load()}return Kr(e,[{key:"load",value:function(){var e=this;this.enabled&&(Xr.is.object(window.google)&&Xr.is.object(window.google.ima)?this.ready():Xr.loadScript(this.player.config.urls.googleIMA.api).then(function(){e.ready()}).catch(function(){e.trigger("error",new Error("Google IMA SDK failed to load"))}))}},{key:"ready",value:function(){var e=this;this.startSafetyTimer(12e3,"ready()"),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.listeners(),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=Xr.createElement("div",{class:this.player.config.classNames.ads}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:"requestAds",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var n=new google.ima.AdsRequest;n.adTagUrl=this.tagUrl,n.linearAdSlotWidth=t.offsetWidth,n.linearAdSlotHeight=t.offsetHeight,n.nonLinearAdSlotWidth=t.offsetWidth,n.nonLinearAdSlotHeight=t.offsetHeight,n.forceNonLinearFullSlot=!1,this.loader.requestAds(n)}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=setInterval(function(){var t=Xr.formatTime(Math.max(e.manager.getRemainingTime(),0)),n=so("advertisement",e.player.config)+" - "+t;e.elements.container.setAttribute("data-badge-text",n)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,n=new google.ima.AdsRenderingSettings;n.restoreCustomPlaybackStateOnAdBreakComplete=!0,n.enablePreloading=!0,this.manager=e.getAdsManager(this.player,n),this.cuePoints=this.manager.getCuePoints(),this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var n=t.player.elements.progress;if(n){var i=100/t.player.duration*e,r=Xr.createElement("span",{class:t.player.config.classNames.cues});r.style.left=i.toString()+"%",n.appendChild(r)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.trigger("loaded")}},{key:"onAdEvent",value:function(e){var t=this,n=this.player.elements.container,i=e.getAd(),r=function(e){var n="ads"+e.replace(/_/g,"").toLowerCase();Xr.dispatchEvent.call(t.player,t.player.media,n)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.trigger("loaded"),r(e.type),this.pollCountdown(!0),i.isLinear()||(i.width=n.offsetWidth,i.height=n.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:r(e.type),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:r(e.type),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:r(e.type),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:case google.ima.AdEvent.Type.MIDPOINT:case google.ima.AdEvent.Type.COMPLETE:case google.ima.AdEvent.Type.IMPRESSION:case google.ima.AdEvent.Type.CLICK:r(e.type)}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.warn("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,n=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return n=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;e.cuePoints.forEach(function(i,r){n<i&&i<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(r,1))})}),window.addEventListener("resize",function(){e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.resumeContent(),this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}}).catch(function(){})}},{key:"resumeContent",value:function(){this.elements.container.style.zIndex="",this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){this.elements.container.style.zIndex=3,this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.trigger("error"),this.loadAds()}},{key:"loadAds",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on("loaded",t),e.player.debug.log(e.manager)}),e.requestAds()}).catch(function(){})}},{key:"trigger",value:function(e){for(var t=this,n=arguments.length,i=Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];var o=this.events[e];Xr.is.array(o)&&o.forEach(function(e){Xr.is.function(e)&&e.apply(t,i)})}},{key:"on",value:function(e,t){return Xr.is.array(this.events[e])||(this.events[e]=[]),this.events[e].push(t),this}},{key:"startSafetyTimer",value:function(e,t){var n=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=setTimeout(function(){n.cancel(),n.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){Xr.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:"tagUrl",get:function(){var e={AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId};return"https://go.aniview.com/api/adserver6/vast/?"+Xr.buildUrlParams(e)}}]),e}(),go={setup:function(){var e=this;Xr.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),go.setAspectRatio.call(this),Xr.is.object(window.YT)&&Xr.is.function(window.YT.Player)?go.ready.call(this):(Xr.loadScript(this.config.urls.youtube.api).catch(function(t){e.debug.warn("YouTube API failed to load",t)}),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){go.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(Xr.is.function(this.embed.getVideoData)){var n=this.embed.getVideoData().title;if(Xr.is.empty(n))return this.config.title=n,void ao.setTitle.call(this)}var i=this.config.keys.google;if(Xr.is.string(i)&&!Xr.is.empty(i)){var r="https://www.googleapis.com/youtube/v3/videos?id="+e+"&key="+i+"&fields=items(snippet(title))&part=snippet";Xr.fetch(r).then(function(e){Xr.is.object(e)&&(t.config.title=e.items[0].snippet.title,ao.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(Xr.is.empty(t)||!t.startsWith("youtube-")){var n=e.media.getAttribute("src");Xr.is.empty(n)&&(n=e.media.getAttribute(this.config.attributes.embed.id));var i=Xr.parseYouTubeId(n),r=Xr.generateId(e.provider),o=Xr.createElement("div",{id:r});e.media=Xr.replaceElement(o,e.media),e.embed=new window.YT.Player(r,{videoId:i,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!Xr.is.object(e.media.error)){var n={code:t.data};switch(t.data){case 2:n.message="The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.";break;case 5:n.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";break;case 100:n.message="The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.";break;case 101:case 150:n.message="The owner of the requested video does not allow it to be played in embedded players.";break;default:n.message="An unknown error occured"}e.media.error=n,Xr.dispatchEvent.call(e,e.media,"error")}},onPlaybackQualityChange:function(t){var n=t.target;e.media.quality=n.getPlaybackQuality(),Xr.dispatchEvent.call(e,e.media,"qualitychange")},onPlaybackRateChange:function(t){var n=t.target;e.media.playbackRate=n.getPlaybackRate(),Xr.dispatchEvent.call(e,e.media,"ratechange")},onReady:function(t){var n=t.target;go.getTitle.call(e,i),e.media.play=function(){n.playVideo()},e.media.pause=function(){n.pauseVideo()},e.media.stop=function(){n.stopVideo()},e.media.duration=n.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(n.getCurrentTime())},set:function(t){e.media.seeking=!0,Xr.dispatchEvent.call(e,e.media,"seeking"),n.seekTo(t)}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return n.getPlaybackRate()},set:function(e){n.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return n.getPlaybackQuality()},set:function(t){Xr.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:t}),n.setPlaybackQuality(t)}});var r=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return r},set:function(t){r=t,n.setVolume(100*r),Xr.dispatchEvent.call(e,e.media,"volumechange")}});var o=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return o},set:function(t){var i=Xr.is.boolean(t)?t:o;o=i,n[i?"mute":"unMute"](),Xr.dispatchEvent.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return n.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=n.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),Xr.dispatchEvent.call(e,e.media,"timeupdate"),Xr.dispatchEvent.call(e,e.media,"durationchange"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval(function(){e.media.buffered=n.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&Xr.dispatchEvent.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),Xr.dispatchEvent.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return ao.build.call(e)},50)},onStateChange:function(t){var n=t.target;switch(clearInterval(e.timers.playing),t.data){case-1:Xr.dispatchEvent.call(e,e.media,"timeupdate"),e.media.buffered=n.getVideoLoadedFraction(),Xr.dispatchEvent.call(e,e.media,"progress");break;case 0:e.media.paused=!0,e.media.loop?(n.stopVideo(),n.playVideo()):Xr.dispatchEvent.call(e,e.media,"ended");break;case 1:e.media.seeking&&Xr.dispatchEvent.call(e,e.media,"seeked"),e.media.seeking=!1,e.media.paused&&Xr.dispatchEvent.call(e,e.media,"play"),e.media.paused=!1,Xr.dispatchEvent.call(e,e.media,"playing"),e.timers.playing=setInterval(function(){Xr.dispatchEvent.call(e,e.media,"timeupdate")},50),e.media.duration!==n.getDuration()&&(e.media.duration=n.getDuration(),Xr.dispatchEvent.call(e,e.media,"durationchange")),co.setQualityMenu.call(e,n.getAvailableQualityLevels());break;case 2:e.media.paused=!0,Xr.dispatchEvent.call(e,e.media,"pause")}Xr.dispatchEvent.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},mo={setup:function(){var e=this;Xr.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),mo.setAspectRatio.call(this),Xr.is.object(window.Vimeo)?mo.ready.call(this):Xr.loadScript(this.config.urls.vimeo.api).then(function(){mo.ready.call(e)}).catch(function(t){e.debug.warn("Vimeo API failed to load",t)})},setAspectRatio:function(e){var t=Xr.is.string(e)?e.split(":"):this.config.ratio.split(":"),n=100/t[0]*t[1],i=(240-n)/4.8;this.elements.wrapper.style.paddingBottom=n+"%",this.media.style.transform="translateY(-"+i+"%)"},ready:function(){var e=this,t=this,n={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media"},i=Xr.buildUrlParams(n),r=t.media.getAttribute("src");Xr.is.empty(r)&&(r=t.media.getAttribute(this.config.attributes.embed.id));var o=Xr.parseVimeoId(r),s=Xr.createElement("iframe"),a="https://player.vimeo.com/video/"+o+"?"+i;s.setAttribute("src",a),s.setAttribute("allowfullscreen",""),s.setAttribute("allowtransparency",""),s.setAttribute("allow","autoplay");var l=Xr.createElement("div");l.appendChild(s),t.media=Xr.replaceElement(l,t.media),t.embed=new window.Vimeo.Player(s),t.media.paused=!0,t.media.currentTime=0,t.media.play=function(){t.embed.play().then(function(){t.media.paused=!1})},t.media.pause=function(){t.embed.pause().then(function(){t.media.paused=!0})},t.media.stop=function(){t.pause(),t.currentTime=0};var c=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return c},set:function(e){var n=t.media.paused;t.media.seeking=!0,Xr.dispatchEvent.call(t,t.media,"seeking"),t.embed.setCurrentTime(e),n&&t.pause()}});var u=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return u},set:function(e){t.embed.setPlaybackRate(e).then(function(){u=e,Xr.dispatchEvent.call(t,t.media,"ratechange")})}});var h=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return h},set:function(e){t.embed.setVolume(e).then(function(){h=e,Xr.dispatchEvent.call(t,t.media,"volumechange")})}});var d=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return d},set:function(e){var n=!!Xr.is.boolean(e)&&e;t.embed.setVolume(n?0:t.config.volume).then(function(){d=n,Xr.dispatchEvent.call(t,t.media,"volumechange")})}});var f=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return f},set:function(e){var n=Xr.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(n).then(function(){f=n})}});var p=void 0;t.embed.getVideoUrl().then(function(e){p=e}),Object.defineProperty(t.media,"currentSrc",{get:function(){return p}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var n=Xr.getAspectRatio(t[0],t[1]);mo.setAspectRatio.call(e,n)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(n){t.config.title=n,ao.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){c=e,Xr.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,Xr.dispatchEvent.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,oo.setup.call(t)}),t.embed.on("cuechange",function(e){var n=null;e.cues.length&&(n=Xr.stripHTML(e.cues[0].text)),oo.setText.call(t,n)}),t.embed.on("loaded",function(){Xr.is.element(t.embed.element)&&t.supported.ui&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){t.media.paused&&Xr.dispatchEvent.call(t,t.media,"play"),t.media.paused=!1,Xr.dispatchEvent.call(t,t.media,"playing")}),t.embed.on("pause",function(){t.media.paused=!0,Xr.dispatchEvent.call(t,t.media,"pause")}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,c=e.seconds,Xr.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,Xr.dispatchEvent.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&Xr.dispatchEvent.call(t,t.media,"canplaythrough")}),t.embed.on("seeked",function(){t.media.seeking=!1,Xr.dispatchEvent.call(t,t.media,"seeked"),Xr.dispatchEvent.call(t,t.media,"play")}),t.embed.on("ended",function(){t.media.paused=!0,Xr.dispatchEvent.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,Xr.dispatchEvent.call(t,t.media,"error")}),setTimeout(function(){return ao.build.call(t)},0)}},yo=Xr.getBrowser(),vo={setup:function(){if(this.media)if(Xr.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),Xr.toggleClass(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&Xr.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.supported.ui&&(Xr.toggleClass(this.elements.container,this.config.classNames.pip.supported,$r.pip&&this.isHTML5&&this.isVideo),Xr.toggleClass(this.elements.container,this.config.classNames.airplay.supported,$r.airplay&&this.isHTML5),Xr.toggleClass(this.elements.container,this.config.classNames.stopped,this.config.autoplay),Xr.toggleClass(this.elements.container,this.config.classNames.isIos,yo.isIos),Xr.toggleClass(this.elements.container,this.config.classNames.isTouch,this.touch)),this.isVideo&&(this.elements.wrapper=Xr.createElement("div",{class:this.config.classNames.video}),Xr.wrap(this.media,this.elements.wrapper)),this.isEmbed)switch(this.provider){case"youtube":go.setup.call(this);break;case"vimeo":mo.setup.call(this)}else this.isHTML5&&ao.setTitle.call(this);else this.debug.warn("No media element found!")},cancelRequests:function(){this.isHTML5&&(Xr.removeElement(this.media.querySelectorAll("source")),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}},bo={insertElements:function(e,t){var n=this;Xr.is.string(t)?Xr.insertElement(e,this.media,{src:t}):Xr.is.array(t)&&t.forEach(function(t){Xr.insertElement(e,n.media,t)})},change:function(e){var t=this;Xr.is.object(e)&&"sources"in e&&e.sources.length?(vo.cancelRequests.call(this),this.destroy.call(this,function(){switch(Xr.removeElement(t.media),t.media=null,Xr.is.element(t.elements.container)&&t.elements.container.removeAttribute("class"),t.type=e.type,t.provider=Xr.is.empty(e.sources[0].provider)?Hr.html5:e.sources[0].provider,t.supported=$r.check(t.type,t.provider,t.config.inline),t.provider+":"+t.type){case"html5:video":t.media=Xr.createElement("video");break;case"html5:audio":t.media=Xr.createElement("audio");break;case"youtube:video":case"vimeo:video":t.media=Xr.createElement("div",{src:e.sources[0].src})}t.elements.container.appendChild(t.media),Xr.is.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),"poster"in e&&t.media.setAttribute("poster",e.poster),t.config.loop.active&&t.media.setAttribute("loop",""),t.config.muted&&t.media.setAttribute("muted",""),t.config.inline&&t.media.setAttribute("playsinline","")),ao.addStyleHook.call(t),t.isHTML5&&bo.insertElements.call(t,"source",e.sources),t.config.title=e.title,vo.setup.call(t),t.isHTML5&&("tracks"in e&&bo.insertElements.call(t,"track",e.tracks),t.media.load()),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&ao.build.call(t),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}};return function(){function e(t,n){var i=this;if(Yr(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=$r.touch,this.media=t,Xr.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||Xr.is.nodeList(this.media)||Xr.is.array(this.media))&&(this.media=this.media[0]),this.config=Xr.extend({},Gr,n,function(){try{return JSON.parse(i.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:null},this.fullscreen={active:!1},this.options={speed:[],quality:[]},this.debug=new eo(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",$r),!Xr.is.nullOrUndefined(this.media)&&Xr.is.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if($r.check().api){this.elements.original=this.media.cloneNode(!0);var r=this.media.tagName.toLowerCase(),o=null,s=null,a=null;switch(r){case"div":if(o=this.media.querySelector("iframe"),Xr.is.element(o)){if(s=o.getAttribute("src"),this.provider=Xr.getProviderByUrl(s),this.elements.container=this.media,this.media=o,this.elements.container.className="",a=Xr.getUrlParams(s),!Xr.is.empty(a)){var l=["1","true"];l.includes(a.autoplay)&&(this.config.autoplay=!0),l.includes(a.playsinline)&&(this.config.inline=!0),l.includes(a.loop)&&(this.config.loop.active=!0)}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(Xr.is.empty(this.provider)||!Object.keys(Hr).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=Wr.video;break;case"video":case"audio":this.type=r,this.provider=Hr.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("playsinline")&&(this.config.inline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=$r.check(this.type,this.provider,this.config.inline),this.supported.api?(this.listeners=new ho(this),this.storage=new fo(this),this.media.plyr=this,Xr.is.element(this.elements.container)||(this.elements.container=Xr.createElement("div"),Xr.wrap(this.media,this.elements.container)),this.elements.container.setAttribute("tabindex",0),ao.addStyleHook.call(this),vo.setup.call(this),this.config.debug&&Xr.on(this.elements.container,this.config.events.join(" "),function(e){i.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&ao.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new ro(this),this.ads=new po(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 Kr(e,[{key:"play",value:function(){var e=this;return Xr.is.function(this.media.play)?this.ads.enabled&&!this.ads.initialized?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&&Xr.is.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){(Xr.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?this.media.load():this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(Xr.is.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(Xr.is.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(Xr.is.number(e)?e:1)}},{key:"decreaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-(Xr.is.number(e)?e:1)}},{key:"toggleCaptions",value:function(e){if(this.supported.ui&&Xr.is.element(this.elements.buttons.captions)){var t=Xr.is.boolean(e)?e:-1===this.elements.container.className.indexOf(this.config.classNames.captions.active);this.captions.active!==t&&(this.captions.active=t,Xr.toggleState(this.elements.buttons.captions,this.captions.active),Xr.toggleClass(this.elements.container,this.config.classNames.captions.active,this.captions.active),Xr.dispatchEvent.call(this,this.media,this.captions.active?"captionsenabled":"captionsdisabled"))}}},{key:"airplay",value:function(){$r.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){var t=this;if(Xr.is.element(this.elements.controls)&&this.supported.ui&&!this.isAudio){var n=0,i=e,r=!1;if(!Xr.is.boolean(e))if(Xr.is.event(e)){r="enterfullscreen"===e.type;i=["touchstart","touchmove","mouseenter","mousemove","focusin"].includes(e.type),["touchmove","touchend","mousemove"].includes(e.type)&&(n=2e3),this.touch||"focusin"!==e.type||(n=3e3,Xr.toggleClass(this.elements.controls,this.config.classNames.noTransition,!0))}else i=Xr.hasClass(this.elements.container,this.config.classNames.hideControls);if(clearTimeout(this.timers.controls),i||this.paused||this.loading){if(Xr.toggleClass(this.elements.container,this.config.classNames.hideControls,!1)&&Xr.dispatchEvent.call(this,this.media,"controlsshown"),this.paused||this.loading)return;this.touch&&(n=3e3)}i&&!this.playing||(this.timers.controls=setTimeout(function(){(!t.elements.controls.pressed&&!t.elements.controls.hover||r)&&(Xr.hasClass(t.elements.container,t.config.classNames.hideControls)||Xr.toggleClass(t.elements.controls,t.config.classNames.noTransition,!1),Xr.toggleClass(t.elements.container,t.config.classNames.hideControls,!0)&&(Xr.dispatchEvent.call(t,t.media,"controlshidden"),t.config.controls.includes("settings")&&!Xr.is.empty(t.config.settings)&&co.toggleMenu.call(t,!1)))},n))}}},{key:"on",value:function(e,t){Xr.on(this.elements.container,e,t)}},{key:"off",value:function(e,t){Xr.off(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var i=function(){document.body.style.overflow="",t.embed=null,n?(Object.keys(t.elements).length&&(Xr.removeElement(t.elements.buttons.play),Xr.removeElement(t.elements.captions),Xr.removeElement(t.elements.controls),Xr.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),Xr.is.function(e)&&e()):(t.listeners.clear(),Xr.replaceElement(t.elements.original,t.elements.container),Xr.dispatchEvent.call(t,t.elements.original,"destroyed",!0),Xr.is.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};switch(this.stop(),this.provider+":"+this.type){case"html5:video":case"html5:audio":clearTimeout(this.timers.loading),ao.toggleNativeControls.call(this,!0),i();break;case"youtube:video":clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&Xr.is.function(this.embed.destroy)&&this.embed.destroy(),i();break;case"vimeo:video":null!==this.embed&&this.embed.unload().then(i),setTimeout(i,200)}}}},{key:"supports",value:function(e){return $r.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===Hr.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===Hr.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===Hr.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===Wr.video)}},{key:"isAudio",get:function(){return Boolean(this.type===Wr.audio)}},{key:"paused",get:function(){return Boolean(this.media.paused)}},{key:"playing",get:function(){return Boolean(!this.paused&&!this.ended&&(!this.isHTML5||this.media.readyState>2))}},{key:"ended",get:function(){return Boolean(this.media.ended)}},{key:"currentTime",set:function(e){var t=0;Xr.is.number(e)&&(t=e),t<0?t=0:t>this.duration&&(t=this.duration),this.media.currentTime=parseFloat(t.toFixed(4)),this.debug.log("Seeking to "+this.currentTime+" seconds")},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return Xr.is.number(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}},{key:"seeking",get:function(){return Boolean(this.media.seeking)}},{key:"duration",get:function(){var e=parseInt(this.config.duration,10),t=this.media?Number(this.media.duration):0;return Number.isNaN(e)?t:e}},{key:"volume",set:function(e){var t=e;Xr.is.string(t)&&(t=Number(t)),Xr.is.number(t)||(t=this.storage.get("volume")),Xr.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;Xr.is.boolean(t)||(t=this.storage.get("muted")),Xr.is.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return Boolean(this.media.muted)}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;Xr.is.number(e)&&(t=e),Xr.is.number(t)||(t=this.storage.get("speed")),Xr.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=null;Xr.is.string(e)&&(t=e),Xr.is.string(t)||(t=this.storage.get("quality")),Xr.is.string(t)||(t=this.config.quality.selected),this.options.quality.includes(t)?(this.config.quality.selected=t,this.media.quality=t):this.debug.warn("Unsupported quality option ("+t+")")},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=Xr.is.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return Boolean(this.media.loop)}},{key:"source",set:function(e){bo.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isHTML5&&this.isVideo?Xr.is.string(e)&&this.media.setAttribute("poster",e):this.debug.warn("Poster can only be set on HTML5 video")},get:function(){return this.isHTML5&&this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=Xr.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:"language",set:function(e){if(Xr.is.string(e)&&(this.toggleCaptions(!Xr.is.empty(e)),!Xr.is.empty(e))){var t=e.toLowerCase();this.language!==t&&(this.captions.language=t,oo.setText.call(this,null),oo.setLanguage.call(this),Xr.dispatchEvent.call(this,this.media,"languagechange"))}},get:function(){return this.captions.language}},{key:"pip",set:function(e){var t="picture-in-picture",n="inline";if($r.pip){var i=Xr.is.boolean(e)?e:this.pip===n;this.media.webkitSetPresentationMode(i?t:n)}},get:function(){return $r.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,n){return $r.check(e,t,n)}},{key:"loadSprite",value:function(e,t){return Xr.loadSprite(e,t)}}]),e}()});
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)}),i=t(function(e){var t=e.exports={version:"2.5.3"};"number"==typeof __e&&(__e=t)}),r=function(e){return"object"==typeof e?null!==e:"function"==typeof e},o=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e},s=function(e){try{return!!e()}catch(e){return!0}},a=!s(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),l=n.document,c=r(l)&&r(l.createElement),u=function(e){return c?l.createElement(e):{}},h=!a&&!s(function(){return 7!=Object.defineProperty(u("div"),"a",{get:function(){return 7}}).a}),d=function(e,t){if(!r(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!r(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")},f=Object.defineProperty,p={f:a?Object.defineProperty:function(e,t,n){if(o(e),t=d(t,!0),o(n),h)try{return f(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},g=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},m=a?function(e,t,n){return p.f(e,t,g(1,n))}:function(e,t,n){return e[t]=n,e},y={}.hasOwnProperty,v=function(e,t){return y.call(e,t)},b=0,w=Math.random(),E=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++b+w).toString(36))},k=t(function(e){var t=E("src"),r=Function.toString,o=(""+r).split("toString");i.inspectSource=function(e){return r.call(e)},(e.exports=function(e,i,r,s){var a="function"==typeof r;a&&(v(r,"name")||m(r,"name",i)),e[i]!==r&&(a&&(v(r,t)||m(r,t,e[i]?""+e[i]:o.join(String(i)))),e===n?e[i]=r:s?e[i]?e[i]=r:m(e,i,r):(delete e[i],m(e,i,r)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[t]||r.call(this)})}),S=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e},T=function(e,t,n){if(S(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,i){return e.call(t,n,i)};case 3:return function(n,i,r){return e.call(t,n,i,r)}}return function(){return e.apply(t,arguments)}},A=function(e,t,r){var o,s,a,l,c=e&A.F,u=e&A.G,h=e&A.S,d=e&A.P,f=e&A.B,p=u?n:h?n[t]||(n[t]={}):(n[t]||{}).prototype,g=u?i:i[t]||(i[t]={}),y=g.prototype||(g.prototype={});for(o in u&&(r=t),r)a=((s=!c&&p&&void 0!==p[o])?p:r)[o],l=f&&s?T(a,n):d&&"function"==typeof a?T(Function.call,a):a,p&&k(p,o,a,e&A.U),g[o]!=a&&m(g,o,l),d&&y[o]!=a&&(y[o]=a)};n.core=i,A.F=1,A.G=2,A.S=4,A.P=8,A.B=16,A.W=32,A.U=64,A.R=128;for(var _,C=A,P=E("typed_array"),x=E("view"),M=!(!n.ArrayBuffer||!n.DataView),L=M,N=0,O="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");N<9;)(_=n[O[N++]])?(m(_.prototype,P,!0),m(_.prototype,x,!0)):L=!1;var I={ABV:M,CONSTR:L,TYPED:P,VIEW:x},j=function(e,t,n){for(var i in t)k(e,i,t[i],n);return e},F=function(e,t,n,i){if(!(e instanceof t)||void 0!==i&&i in e)throw TypeError(n+": incorrect invocation!");return e},R=Math.ceil,B=Math.floor,q=function(e){return isNaN(e=+e)?0:(e>0?B:R)(e)},V=Math.min,D=function(e){return e>0?V(q(e),9007199254740991):0},U=function(e){if(void 0===e)return 0;var t=q(e),n=D(t);if(t!==n)throw RangeError("Wrong length!");return n},H={}.toString,W=function(e){return H.call(e).slice(8,-1)},G=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==W(e)?e.split(""):Object(e)},z=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e},Y=function(e){return G(z(e))},K=Math.max,Q=Math.min,J=function(e,t){return(e=q(e))<0?K(e+t,0):Q(e,t)},X=function(e){return function(t,n,i){var r,o=Y(t),s=D(o.length),a=J(i,s);if(e&&n!=n){for(;s>a;)if((r=o[a++])!=r)return!0}else for(;s>a;a++)if((e||a in o)&&o[a]===n)return e||a||0;return!e&&-1}},$=n["__core-js_shared__"]||(n["__core-js_shared__"]={}),Z=function(e){return $[e]||($[e]={})},ee=Z("keys"),te=function(e){return ee[e]||(ee[e]=E(e))},ne=X(!1),ie=te("IE_PROTO"),re=function(e,t){var n,i=Y(e),r=0,o=[];for(n in i)n!=ie&&v(i,n)&&o.push(n);for(;t.length>r;)v(i,n=t[r++])&&(~ne(o,n)||o.push(n));return o},oe="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),se=oe.concat("length","prototype"),ae={f:Object.getOwnPropertyNames||function(e){return re(e,se)}},le=function(e){return Object(z(e))},ce=function(e){for(var t=le(this),n=D(t.length),i=arguments.length,r=J(i>1?arguments[1]:void 0,n),o=i>2?arguments[2]:void 0,s=void 0===o?n:J(o,n);s>r;)t[r++]=e;return t},ue=t(function(e){var t=Z("wks"),i=n.Symbol,r="function"==typeof i;(e.exports=function(e){return t[e]||(t[e]=r&&i[e]||(r?i:E)("Symbol."+e))}).store=t}),he=p.f,de=ue("toStringTag"),fe=function(e,t,n){e&&!v(e=n?e:e.prototype,de)&&he(e,de,{configurable:!0,value:t})},pe=t(function(e,t){var i=ae.f,r=p.f,o="prototype",l="Wrong index!",c=n.ArrayBuffer,u=n.DataView,h=n.Math,d=n.RangeError,f=n.Infinity,g=c,y=h.abs,v=h.pow,b=h.floor,w=h.log,E=h.LN2,k=a?"_b":"buffer",S=a?"_l":"byteLength",T=a?"_o":"byteOffset";function A(e,t,n){var i,r,o,s=new Array(n),a=8*n-t-1,l=(1<<a)-1,c=l>>1,u=23===t?v(2,-24)-v(2,-77):0,h=0,d=e<0||0===e&&1/e<0?1:0;for((e=y(e))!=e||e===f?(r=e!=e?1:0,i=l):(i=b(w(e)/E),e*(o=v(2,-i))<1&&(i--,o*=2),(e+=i+c>=1?u/o:u*v(2,1-c))*o>=2&&(i++,o/=2),i+c>=l?(r=0,i=l):i+c>=1?(r=(e*o-1)*v(2,t),i+=c):(r=e*v(2,c-1)*v(2,t),i=0));t>=8;s[h++]=255&r,r/=256,t-=8);for(i=i<<t|r,a+=t;a>0;s[h++]=255&i,i/=256,a-=8);return s[--h]|=128*d,s}function _(e,t,n){var i,r=8*n-t-1,o=(1<<r)-1,s=o>>1,a=r-7,l=n-1,c=e[l--],u=127&c;for(c>>=7;a>0;u=256*u+e[l],l--,a-=8);for(i=u&(1<<-a)-1,u>>=-a,a+=t;a>0;i=256*i+e[l],l--,a-=8);if(0===u)u=1-s;else{if(u===o)return i?NaN:c?-f:f;i+=v(2,t),u-=s}return(c?-1:1)*i*v(2,u-t)}function C(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]}function P(e){return[255&e]}function x(e){return[255&e,e>>8&255]}function M(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]}function L(e){return A(e,52,8)}function N(e){return A(e,23,4)}function O(e,t,n){r(e[o],t,{get:function(){return this[n]}})}function R(e,t,n,i){var r=U(+n);if(r+t>e[S])throw d(l);var o=e[k]._b,s=r+e[T],a=o.slice(s,s+t);return i?a:a.reverse()}function B(e,t,n,i,r,o){var s=U(+n);if(s+t>e[S])throw d(l);for(var a=e[k]._b,c=s+e[T],u=i(+r),h=0;h<t;h++)a[c+h]=u[o?h:t-h-1]}if(I.ABV){if(!s(function(){c(1)})||!s(function(){new c(-1)})||s(function(){return new c,new c(1.5),new c(NaN),"ArrayBuffer"!=c.name})){for(var V,H=(c=function(e){return F(this,c),new g(U(e))})[o]=g[o],W=i(g),G=0;W.length>G;)(V=W[G++])in c||m(c,V,g[V]);H.constructor=c}var z=new u(new c(2)),Y=u[o].setInt8;z.setInt8(0,2147483648),z.setInt8(1,2147483649),!z.getInt8(0)&&z.getInt8(1)||j(u[o],{setInt8:function(e,t){Y.call(this,e,t<<24>>24)},setUint8:function(e,t){Y.call(this,e,t<<24>>24)}},!0)}else c=function(e){F(this,c,"ArrayBuffer");var t=U(e);this._b=ce.call(new Array(t),0),this[S]=t},u=function(e,t,n){F(this,u,"DataView"),F(e,c,"DataView");var i=e[S],r=q(t);if(r<0||r>i)throw d("Wrong offset!");if(r+(n=void 0===n?i-r:D(n))>i)throw d("Wrong length!");this[k]=e,this[T]=r,this[S]=n},a&&(O(c,"byteLength","_l"),O(u,"buffer","_b"),O(u,"byteLength","_l"),O(u,"byteOffset","_o")),j(u[o],{getInt8:function(e){return R(this,1,e)[0]<<24>>24},getUint8:function(e){return R(this,1,e)[0]},getInt16:function(e){var t=R(this,2,e,arguments[1]);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=R(this,2,e,arguments[1]);return t[1]<<8|t[0]},getInt32:function(e){return C(R(this,4,e,arguments[1]))},getUint32:function(e){return C(R(this,4,e,arguments[1]))>>>0},getFloat32:function(e){return _(R(this,4,e,arguments[1]),23,4)},getFloat64:function(e){return _(R(this,8,e,arguments[1]),52,8)},setInt8:function(e,t){B(this,1,e,P,t)},setUint8:function(e,t){B(this,1,e,P,t)},setInt16:function(e,t){B(this,2,e,x,t,arguments[2])},setUint16:function(e,t){B(this,2,e,x,t,arguments[2])},setInt32:function(e,t){B(this,4,e,M,t,arguments[2])},setUint32:function(e,t){B(this,4,e,M,t,arguments[2])},setFloat32:function(e,t){B(this,4,e,N,t,arguments[2])},setFloat64:function(e,t){B(this,8,e,L,t,arguments[2])}});fe(c,"ArrayBuffer"),fe(u,"DataView"),m(u[o],I.VIEW,!0),t.ArrayBuffer=c,t.DataView=u}),ge=ue("species"),me=function(e,t){var n,i=o(e).constructor;return void 0===i||void 0==(n=o(i)[ge])?t:S(n)},ye=ue("species"),ve=function(e){var t=n[e];a&&t&&!t[ye]&&p.f(t,ye,{configurable:!0,get:function(){return this}})},be=n.ArrayBuffer,we=pe.ArrayBuffer,Ee=pe.DataView,ke=I.ABV&&be.isView,Se=we.prototype.slice,Te=I.VIEW;C(C.G+C.W+C.F*(be!==we),{ArrayBuffer:we}),C(C.S+C.F*!I.CONSTR,"ArrayBuffer",{isView:function(e){return ke&&ke(e)||r(e)&&Te in e}}),C(C.P+C.U+C.F*s(function(){return!new we(2).slice(1,void 0).byteLength}),"ArrayBuffer",{slice:function(e,t){if(void 0!==Se&&void 0===t)return Se.call(o(this),e);for(var n=o(this).byteLength,i=J(e,n),r=J(void 0===t?n:t,n),s=new(me(this,we))(D(r-i)),a=new Ee(this),l=new Ee(s),c=0;i<r;)l.setUint8(c++,a.getUint8(i++));return s}}),ve("ArrayBuffer");var Ae=ue("toStringTag"),_e="Arguments"==W(function(){return arguments}()),Ce=function(e){var t,n,i;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),Ae))?n:_e?W(t):"Object"==(i=W(t))&&"function"==typeof t.callee?"Arguments":i},Pe={},xe=ue("iterator"),Me=Array.prototype,Le=function(e){return void 0!==e&&(Pe.Array===e||Me[xe]===e)},Ne=Object.keys||function(e){return re(e,oe)},Oe=a?Object.defineProperties:function(e,t){o(e);for(var n,i=Ne(t),r=i.length,s=0;r>s;)p.f(e,n=i[s++],t[n]);return e},Ie=n.document,je=Ie&&Ie.documentElement,Fe=te("IE_PROTO"),Re=function(){},Be=function(){var e,t=u("iframe"),n=oe.length;for(t.style.display="none",je.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),Be=e.F;n--;)delete Be.prototype[oe[n]];return Be()},qe=Object.create||function(e,t){var n;return null!==e?(Re.prototype=o(e),n=new Re,Re.prototype=null,n[Fe]=e):n=Be(),void 0===t?n:Oe(n,t)},Ve=te("IE_PROTO"),De=Object.prototype,Ue=Object.getPrototypeOf||function(e){return e=le(e),v(e,Ve)?e[Ve]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?De:null},He=ue("iterator"),We=i.getIteratorMethod=function(e){if(void 0!=e)return e[He]||e["@@iterator"]||Pe[Ce(e)]},Ge=Array.isArray||function(e){return"Array"==W(e)},ze=ue("species"),Ye=function(e,t){return new(function(e){var t;return Ge(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!Ge(t.prototype)||(t=void 0),r(t)&&null===(t=t[ze])&&(t=void 0)),void 0===t?Array:t}(e))(t)},Ke=function(e,t){var n=1==e,i=2==e,r=3==e,o=4==e,s=6==e,a=5==e||s,l=t||Ye;return function(t,c,u){for(var h,d,f=le(t),p=G(f),g=T(c,u,3),m=D(p.length),y=0,v=n?l(t,m):i?l(t,0):void 0;m>y;y++)if((a||y in p)&&(d=g(h=p[y],y,f),e))if(n)v[y]=d;else if(d)switch(e){case 3:return!0;case 5:return h;case 6:return y;case 2:v.push(h)}else if(o)return!1;return s?-1:r||o?o:v}},Qe=ue("unscopables"),Je=Array.prototype;void 0==Je[Qe]&&m(Je,Qe,{});var Xe=function(e){Je[Qe][e]=!0},$e=function(e,t){return{value:t,done:!!e}},Ze={};m(Ze,ue("iterator"),function(){return this});var et=function(e,t,n){e.prototype=qe(Ze,{next:g(1,n)}),fe(e,t+" Iterator")},tt=ue("iterator"),nt=!([].keys&&"next"in[].keys()),it=function(){return this},rt=function(e,t,n,i,r,o,s){et(n,t,i);var a,l,c,u=function(e){if(!nt&&e in p)return p[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},h=t+" Iterator",d="values"==r,f=!1,p=e.prototype,g=p[tt]||p["@@iterator"]||r&&p[r],y=!nt&&g||u(r),b=r?d?u("entries"):y:void 0,w="Array"==t&&p.entries||g;if(w&&(c=Ue(w.call(new e)))!==Object.prototype&&c.next&&(fe(c,h,!0),v(c,tt)||m(c,tt,it)),d&&g&&"values"!==g.name&&(f=!0,y=function(){return g.call(this)}),(nt||f||!p[tt])&&m(p,tt,y),Pe[t]=y,Pe[h]=it,r)if(a={values:d?y:u("values"),keys:o?y:u("keys"),entries:b},s)for(l in a)l in p||k(p,l,a[l]);else C(C.P+C.F*(nt||f),t,a);return a},ot=rt(Array,"Array",function(e,t){this._t=Y(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,$e(1)):$e(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])},"values");Pe.Arguments=Pe.Array,Xe("keys"),Xe("values"),Xe("entries");var st=ue("iterator"),at=!1;try{[7][st]().return=function(){at=!0}}catch(e){}var lt=function(e,t){if(!t&&!at)return!1;var n=!1;try{var i=[7],r=i[st]();r.next=function(){return{done:n=!0}},i[st]=function(){return r},e(i)}catch(e){}return n},ct=[].copyWithin||function(e,t){var n=le(this),i=D(n.length),r=J(e,i),o=J(t,i),s=arguments.length>2?arguments[2]:void 0,a=Math.min((void 0===s?i:J(s,i))-o,i-r),l=1;for(o<r&&r<o+a&&(l=-1,o+=a-1,r+=a-1);a-- >0;)o in n?n[r]=n[o]:delete n[r],r+=l,o+=l;return n},ut={f:{}.propertyIsEnumerable},ht=Object.getOwnPropertyDescriptor,dt={f:a?ht:function(e,t){if(e=Y(e),t=d(t,!0),h)try{return ht(e,t)}catch(e){}if(v(e,t))return g(!ut.f.call(e,t),e[t])}},ft=t(function(e){if(a){var t=n,i=s,o=C,l=I,c=pe,u=T,h=F,f=g,y=m,b=j,w=q,k=D,S=U,A=J,_=d,P=v,x=Ce,M=r,L=le,N=Le,O=qe,R=Ue,B=ae.f,V=We,H=E,W=ue,G=Ke,z=X,Y=me,K=ot,Q=Pe,$=lt,Z=ve,ee=ce,te=ct,ne=p,ie=dt,re=ne.f,oe=ie.f,se=t.RangeError,he=t.TypeError,de=t.Uint8Array,fe=Array.prototype,ge=c.ArrayBuffer,ye=c.DataView,be=G(0),we=G(2),Ee=G(3),ke=G(4),Se=G(5),Te=G(6),Ae=z(!0),_e=z(!1),xe=K.values,Me=K.keys,Ne=K.entries,Oe=fe.lastIndexOf,Ie=fe.reduce,je=fe.reduceRight,Fe=fe.join,Re=fe.sort,Be=fe.slice,Ve=fe.toString,De=fe.toLocaleString,He=W("iterator"),Ge=W("toStringTag"),ze=H("typed_constructor"),Ye=H("def_constructor"),Qe=l.CONSTR,Je=l.TYPED,Xe=l.VIEW,$e=G(1,function(e,t){return it(Y(e,e[Ye]),t)}),Ze=i(function(){return 1===new de(new Uint16Array([1]).buffer)[0]}),et=!!de&&!!de.prototype.set&&i(function(){new de(1).set({})}),tt=function(e,t){var n=w(e);if(n<0||n%t)throw se("Wrong offset!");return n},nt=function(e){if(M(e)&&Je in e)return e;throw he(e+" is not a typed array!")},it=function(e,t){if(!(M(e)&&ze in e))throw he("It is not a typed array constructor!");return new e(t)},rt=function(e,t){return st(Y(e,e[Ye]),t)},st=function(e,t){for(var n=0,i=t.length,r=it(e,i);i>n;)r[n]=t[n++];return r},at=function(e,t,n){re(e,t,{get:function(){return this._d[n]}})},ut=function(e){var t,n,i,r,o,s,a=L(e),l=arguments.length,c=l>1?arguments[1]:void 0,h=void 0!==c,d=V(a);if(void 0!=d&&!N(d)){for(s=d.call(a),i=[],t=0;!(o=s.next()).done;t++)i.push(o.value);a=i}for(h&&l>2&&(c=u(c,arguments[2],2)),t=0,n=k(a.length),r=it(this,n);n>t;t++)r[t]=h?c(a[t],t):a[t];return r},ht=function(){for(var e=0,t=arguments.length,n=it(this,t);t>e;)n[e]=arguments[e++];return n},ft=!!de&&i(function(){De.call(new de(1))}),pt=function(){return De.apply(ft?Be.call(nt(this)):nt(this),arguments)},gt={copyWithin:function(e,t){return te.call(nt(this),e,t,arguments.length>2?arguments[2]:void 0)},every:function(e){return ke(nt(this),e,arguments.length>1?arguments[1]:void 0)},fill:function(e){return ee.apply(nt(this),arguments)},filter:function(e){return rt(this,we(nt(this),e,arguments.length>1?arguments[1]:void 0))},find:function(e){return Se(nt(this),e,arguments.length>1?arguments[1]:void 0)},findIndex:function(e){return Te(nt(this),e,arguments.length>1?arguments[1]:void 0)},forEach:function(e){be(nt(this),e,arguments.length>1?arguments[1]:void 0)},indexOf:function(e){return _e(nt(this),e,arguments.length>1?arguments[1]:void 0)},includes:function(e){return Ae(nt(this),e,arguments.length>1?arguments[1]:void 0)},join:function(e){return Fe.apply(nt(this),arguments)},lastIndexOf:function(e){return Oe.apply(nt(this),arguments)},map:function(e){return $e(nt(this),e,arguments.length>1?arguments[1]:void 0)},reduce:function(e){return Ie.apply(nt(this),arguments)},reduceRight:function(e){return je.apply(nt(this),arguments)},reverse:function(){for(var e,t=nt(this).length,n=Math.floor(t/2),i=0;i<n;)e=this[i],this[i++]=this[--t],this[t]=e;return this},some:function(e){return Ee(nt(this),e,arguments.length>1?arguments[1]:void 0)},sort:function(e){return Re.call(nt(this),e)},subarray:function(e,t){var n=nt(this),i=n.length,r=A(e,i);return new(Y(n,n[Ye]))(n.buffer,n.byteOffset+r*n.BYTES_PER_ELEMENT,k((void 0===t?i:A(t,i))-r))}},mt=function(e,t){return rt(this,Be.call(nt(this),e,t))},yt=function(e){nt(this);var t=tt(arguments[1],1),n=this.length,i=L(e),r=k(i.length),o=0;if(r+t>n)throw se("Wrong length!");for(;o<r;)this[t+o]=i[o++]},vt={entries:function(){return Ne.call(nt(this))},keys:function(){return Me.call(nt(this))},values:function(){return xe.call(nt(this))}},bt=function(e,t){return M(e)&&e[Je]&&"symbol"!=typeof t&&t in e&&String(+t)==String(t)},wt=function(e,t){return bt(e,t=_(t,!0))?f(2,e[t]):oe(e,t)},Et=function(e,t,n){return!(bt(e,t=_(t,!0))&&M(n)&&P(n,"value"))||P(n,"get")||P(n,"set")||n.configurable||P(n,"writable")&&!n.writable||P(n,"enumerable")&&!n.enumerable?re(e,t,n):(e[t]=n.value,e)};Qe||(ie.f=wt,ne.f=Et),o(o.S+o.F*!Qe,"Object",{getOwnPropertyDescriptor:wt,defineProperty:Et}),i(function(){Ve.call({})})&&(Ve=De=function(){return Fe.call(this)});var kt=b({},gt);b(kt,vt),y(kt,He,vt.values),b(kt,{slice:mt,set:yt,constructor:function(){},toString:Ve,toLocaleString:pt}),at(kt,"buffer","b"),at(kt,"byteOffset","o"),at(kt,"byteLength","l"),at(kt,"length","e"),re(kt,Ge,{get:function(){return this[Je]}}),e.exports=function(e,n,r,s){var a=e+((s=!!s)?"Clamped":"")+"Array",c="get"+e,u="set"+e,d=t[a],f=d||{},p=d&&R(d),g=!d||!l.ABV,m={},v=d&&d.prototype,b=function(e,t){re(e,t,{get:function(){return function(e,t){var i=e._d;return i.v[c](t*n+i.o,Ze)}(this,t)},set:function(e){return function(e,t,i){var r=e._d;s&&(i=(i=Math.round(i))<0?0:i>255?255:255&i),r.v[u](t*n+r.o,i,Ze)}(this,t,e)},enumerable:!0})};g?(d=r(function(e,t,i,r){h(e,d,a,"_d");var o,s,l,c,u=0,f=0;if(M(t)){if(!(t instanceof ge||"ArrayBuffer"==(c=x(t))||"SharedArrayBuffer"==c))return Je in t?st(d,t):ut.call(d,t);o=t,f=tt(i,n);var p=t.byteLength;if(void 0===r){if(p%n)throw se("Wrong length!");if((s=p-f)<0)throw se("Wrong length!")}else if((s=k(r)*n)+f>p)throw se("Wrong length!");l=s/n}else l=S(t),o=new ge(s=l*n);for(y(e,"_d",{b:o,o:f,l:s,e:l,v:new ye(o)});u<l;)b(e,u++)}),v=d.prototype=O(kt),y(v,"constructor",d)):i(function(){d(1)})&&i(function(){new d(-1)})&&$(function(e){new d,new d(null),new d(1.5),new d(e)},!0)||(d=r(function(e,t,i,r){var o;return h(e,d,a),M(t)?t instanceof ge||"ArrayBuffer"==(o=x(t))||"SharedArrayBuffer"==o?void 0!==r?new f(t,tt(i,n),r):void 0!==i?new f(t,tt(i,n)):new f(t):Je in t?st(d,t):ut.call(d,t):new f(S(t))}),be(p!==Function.prototype?B(f).concat(B(p)):B(f),function(e){e in d||y(d,e,f[e])}),d.prototype=v,v.constructor=d);var w=v[He],E=!!w&&("values"==w.name||void 0==w.name),T=vt.values;y(d,ze,!0),y(v,Je,a),y(v,Xe,!0),y(v,Ye,d),(s?new d(1)[Ge]==a:Ge in v)||re(v,Ge,{get:function(){return a}}),m[a]=d,o(o.G+o.W+o.F*(d!=f),m),o(o.S,a,{BYTES_PER_ELEMENT:n}),o(o.S+o.F*i(function(){f.of.call(d,1)}),a,{from:ut,of:ht}),"BYTES_PER_ELEMENT"in v||y(v,"BYTES_PER_ELEMENT",n),o(o.P,a,gt),Z(a),o(o.P+o.F*et,a,{set:yt}),o(o.P+o.F*!E,a,vt),v.toString!=Ve&&(v.toString=Ve),o(o.P+o.F*i(function(){new d(1).slice()}),a,{slice:mt}),o(o.P+o.F*(i(function(){return[1,2].toLocaleString()!=new d([1,2]).toLocaleString()})||!i(function(){v.toLocaleString.call([1,2])})),a,{toLocaleString:pt}),Q[a]=E?w:T,E||y(v,He,T)}}else e.exports=function(){}});ft("Int8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),ft("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),ft("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}},!0),ft("Int16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),ft("Uint16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),ft("Int32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ft("Uint32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ft("Float32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ft("Float64",8,function(e){return function(t,n,i){return e(this,t,n,i)}});var pt=function(e,t,n,i){try{return i?t(o(n)[0],n[1]):t(n)}catch(t){var r=e.return;throw void 0!==r&&o(r.call(e)),t}},gt=t(function(e){var t={},n={},i=e.exports=function(e,i,r,s,a){var l,c,u,h,d=a?function(){return e}:We(e),f=T(r,s,i?2:1),p=0;if("function"!=typeof d)throw TypeError(e+" is not iterable!");if(Le(d)){for(l=D(e.length);l>p;p++)if((h=i?f(o(c=e[p])[0],c[1]):f(e[p]))===t||h===n)return h}else for(u=d.call(e);!(c=u.next()).done;)if((h=pt(u,f,c.value,i))===t||h===n)return h};i.BREAK=t,i.RETURN=n}),mt=t(function(e){var t=E("meta"),n=p.f,i=0,o=Object.isExtensible||function(){return!0},a=!s(function(){return o(Object.preventExtensions({}))}),l=function(e){n(e,t,{value:{i:"O"+ ++i,w:{}}})},c=e.exports={KEY:t,NEED:!1,fastKey:function(e,n){if(!r(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!v(e,t)){if(!o(e))return"F";if(!n)return"E";l(e)}return e[t].i},getWeak:function(e,n){if(!v(e,t)){if(!o(e))return!0;if(!n)return!1;l(e)}return e[t].w},onFreeze:function(e){return a&&c.NEED&&o(e)&&!v(e,t)&&l(e),e}}}),yt=function(e,t){if(!r(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e},vt=p.f,bt=mt.fastKey,wt=a?"_s":"size",Et=function(e,t){var n,i=bt(t);if("F"!==i)return e._i[i];for(n=e._f;n;n=n.n)if(n.k==t)return n},kt={getConstructor:function(e,t,n,i){var r=e(function(e,o){F(e,r,t,"_i"),e._t=t,e._i=qe(null),e._f=void 0,e._l=void 0,e[wt]=0,void 0!=o&&gt(o,n,e[i],e)});return j(r.prototype,{clear:function(){for(var e=yt(this,t),n=e._i,i=e._f;i;i=i.n)i.r=!0,i.p&&(i.p=i.p.n=void 0),delete n[i.i];e._f=e._l=void 0,e[wt]=0},delete:function(e){var n=yt(this,t),i=Et(n,e);if(i){var r=i.n,o=i.p;delete n._i[i.i],i.r=!0,o&&(o.n=r),r&&(r.p=o),n._f==i&&(n._f=r),n._l==i&&(n._l=o),n[wt]--}return!!i},forEach:function(e){yt(this,t);for(var n,i=T(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(i(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!Et(yt(this,t),e)}}),a&&vt(r.prototype,"size",{get:function(){return yt(this,t)[wt]}}),r},def:function(e,t,n){var i,r,o=Et(e,t);return o?o.v=n:(e._l=o={i:r=bt(t,!0),k:t,v:n,p:i=e._l,n:void 0,r:!1},e._f||(e._f=o),i&&(i.n=o),e[wt]++,"F"!==r&&(e._i[r]=o)),e},getEntry:Et,setStrong:function(e,t,n){rt(e,t,function(e,n){this._t=yt(e,t),this._k=n,this._l=void 0},function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?$e(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,$e(1))},n?"entries":"values",!n,!0),ve(t)}},St=function(e,t){if(o(e),!r(t)&&null!==t)throw TypeError(t+": can't set as prototype!")},Tt={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,n){try{(n=T(Function.call,dt.f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,i){return St(e,i),t?e.__proto__=i:n(e,i),e}}({},!1):void 0),check:St},At=Tt.set,_t=function(e,t,i,o,a,l){var c=n[e],u=c,h=a?"set":"add",d=u&&u.prototype,f={},p=function(e){var t=d[e];k(d,e,"delete"==e?function(e){return!(l&&!r(e))&&t.call(this,0===e?0:e)}:"has"==e?function(e){return!(l&&!r(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return l&&!r(e)?void 0:t.call(this,0===e?0:e)}:"add"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,n){return t.call(this,0===e?0:e,n),this})};if("function"==typeof u&&(l||d.forEach&&!s(function(){(new u).entries().next()}))){var g=new u,m=g[h](l?{}:-0,1)!=g,y=s(function(){g.has(1)}),v=lt(function(e){new u(e)}),b=!l&&s(function(){for(var e=new u,t=5;t--;)e[h](t,t);return!e.has(-0)});v||((u=t(function(t,n){F(t,u,e);var i=function(e,t,n){var i,o=t.constructor;return o!==n&&"function"==typeof o&&(i=o.prototype)!==n.prototype&&r(i)&&At&&At(e,i),e}(new c,t,u);return void 0!=n&&gt(n,a,i[h],i),i})).prototype=d,d.constructor=u),(y||b)&&(p("delete"),p("has"),a&&p("get")),(b||m)&&p(h),l&&d.clear&&delete d.clear}else u=o.getConstructor(t,e,a,h),j(u.prototype,i),mt.NEED=!0;return fe(u,e),f[e]=u,C(C.G+C.W+C.F*(u!=c),f),l||o.setStrong(u,e,a),u},Ct=(_t("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var t=kt.getEntry(yt(this,"Map"),e);return t&&t.v},set:function(e,t){return kt.def(yt(this,"Map"),0===e?0:e,t)}},kt,!0),_t("Set",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return kt.def(yt(this,"Set"),e=0===e?0:e,e)}},kt),{f:Object.getOwnPropertySymbols}),Pt=Object.assign,xt=!Pt||s(function(){var e={},t={},n=Symbol(),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach(function(e){t[e]=e}),7!=Pt({},e)[n]||Object.keys(Pt({},t)).join("")!=i})?function(e,t){for(var n=le(e),i=arguments.length,r=1,o=Ct.f,s=ut.f;i>r;)for(var a,l=G(arguments[r++]),c=o?Ne(l).concat(o(l)):Ne(l),u=c.length,h=0;u>h;)s.call(l,a=c[h++])&&(n[a]=l[a]);return n}:Pt,Mt=mt.getWeak,Lt=Ke(5),Nt=Ke(6),Ot=0,It=function(e){return e._l||(e._l=new jt)},jt=function(){this.a=[]},Ft=function(e,t){return Lt(e.a,function(e){return e[0]===t})};jt.prototype={get:function(e){var t=Ft(this,e);if(t)return t[1]},has:function(e){return!!Ft(this,e)},set:function(e,t){var n=Ft(this,e);n?n[1]=t:this.a.push([e,t])},delete:function(e){var t=Nt(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}};var Rt={getConstructor:function(e,t,n,i){var o=e(function(e,r){F(e,o,t,"_i"),e._t=t,e._i=Ot++,e._l=void 0,void 0!=r&&gt(r,n,e[i],e)});return j(o.prototype,{delete:function(e){if(!r(e))return!1;var n=Mt(e);return!0===n?It(yt(this,t)).delete(e):n&&v(n,this._i)&&delete n[this._i]},has:function(e){if(!r(e))return!1;var n=Mt(e);return!0===n?It(yt(this,t)).has(e):n&&v(n,this._i)}}),o},def:function(e,t,n){var i=Mt(o(t),!0);return!0===i?It(e).set(t,n):i[e._i]=n,e},ufstore:It};t(function(e){var t,n=Ke(0),i=mt.getWeak,o=Object.isExtensible,a=Rt.ufstore,l={},c=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},u={get:function(e){if(r(e)){var t=i(e);return!0===t?a(yt(this,"WeakMap")).get(e):t?t[this._i]:void 0}},set:function(e,t){return Rt.def(yt(this,"WeakMap"),e,t)}},h=e.exports=_t("WeakMap",c,u,Rt,!0,!0);s(function(){return 7!=(new h).set((Object.freeze||Object)(l),7).get(l)})&&(t=Rt.getConstructor(c,"WeakMap"),xt(t.prototype,u),mt.NEED=!0,n(["delete","has","get","set"],function(e){var n=h.prototype,i=n[e];k(n,e,function(n,s){if(r(n)&&!o(n)){this._f||(this._f=new t);var a=this._f[e](n,s);return"set"==e?this:a}return i.call(this,n,s)})}))});_t("WeakSet",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return Rt.def(yt(this,"WeakSet"),e,!0)}},Rt,!1,!0);var Bt=(n.Reflect||{}).apply,qt=Function.apply;C(C.S+C.F*!s(function(){Bt(function(){})}),"Reflect",{apply:function(e,t,n){var i=S(e),r=o(n);return Bt?Bt(i,t,r):qt.call(i,t,r)}});var Vt=function(e,t,n){var i=void 0===n;switch(t.length){case 0:return i?e():e.call(n);case 1:return i?e(t[0]):e.call(n,t[0]);case 2:return i?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return i?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return i?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)},Dt=[].slice,Ut={},Ht=Function.bind||function(e){var t=S(this),n=Dt.call(arguments,1),i=function(){var r=n.concat(Dt.call(arguments));return this instanceof i?function(e,t,n){if(!(t in Ut)){for(var i=[],r=0;r<t;r++)i[r]="a["+r+"]";Ut[t]=Function("F,a","return new F("+i.join(",")+")")}return Ut[t](e,n)}(t,r.length,r):Vt(t,r,e)};return r(t.prototype)&&(i.prototype=t.prototype),i},Wt=(n.Reflect||{}).construct,Gt=s(function(){function e(){}return!(Wt(function(){},[],e)instanceof e)}),zt=!s(function(){Wt(function(){})});C(C.S+C.F*(Gt||zt),"Reflect",{construct:function(e,t){S(e),o(t);var n=arguments.length<3?e:S(arguments[2]);if(zt&&!Gt)return Wt(e,t,n);if(e==n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var i=[null];return i.push.apply(i,t),new(Ht.apply(e,i))}var s=n.prototype,a=qe(r(s)?s:Object.prototype),l=Function.apply.call(e,a,t);return r(l)?l:a}}),C(C.S+C.F*s(function(){Reflect.defineProperty(p.f({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(e,t,n){o(e),t=d(t,!0),o(n);try{return p.f(e,t,n),!0}catch(e){return!1}}});var Yt=dt.f;C(C.S,"Reflect",{deleteProperty:function(e,t){var n=Yt(o(e),t);return!(n&&!n.configurable)&&delete e[t]}}),C(C.S,"Reflect",{get:function e(t,n){var i,s,a=arguments.length<3?t:arguments[2];return o(t)===a?t[n]:(i=dt.f(t,n))?v(i,"value")?i.value:void 0!==i.get?i.get.call(a):void 0:r(s=Ue(t))?e(s,n,a):void 0}}),C(C.S,"Reflect",{getOwnPropertyDescriptor:function(e,t){return dt.f(o(e),t)}}),C(C.S,"Reflect",{getPrototypeOf:function(e){return Ue(o(e))}}),C(C.S,"Reflect",{has:function(e,t){return t in e}});var Kt=Object.isExtensible;C(C.S,"Reflect",{isExtensible:function(e){return o(e),!Kt||Kt(e)}});var Qt=n.Reflect,Jt=Qt&&Qt.ownKeys||function(e){var t=ae.f(o(e)),n=Ct.f;return n?t.concat(n(e)):t};C(C.S,"Reflect",{ownKeys:Jt});var Xt=Object.preventExtensions;C(C.S,"Reflect",{preventExtensions:function(e){o(e);try{return Xt&&Xt(e),!0}catch(e){return!1}}}),C(C.S,"Reflect",{set:function e(t,n,i){var s,a,l=arguments.length<4?t:arguments[3],c=dt.f(o(t),n);if(!c){if(r(a=Ue(t)))return e(a,n,i,l);c=g(0)}return v(c,"value")?!(!1===c.writable||!r(l)||((s=dt.f(l,n)||g(0)).value=i,p.f(l,n,s),0)):void 0!==c.set&&(c.set.call(l,i),!0)}}),Tt&&C(C.S,"Reflect",{setPrototypeOf:function(e,t){Tt.check(e,t);try{return Tt.set(e,t),!0}catch(e){return!1}}});var $t,Zt,en,tn=n.process,nn=n.setImmediate,rn=n.clearImmediate,on=n.MessageChannel,sn=n.Dispatch,an=0,ln={},cn=function(){var e=+this;if(ln.hasOwnProperty(e)){var t=ln[e];delete ln[e],t()}},un=function(e){cn.call(e.data)};nn&&rn||(nn=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return ln[++an]=function(){Vt("function"==typeof e?e:Function(e),t)},$t(an),an},rn=function(e){delete ln[e]},"process"==W(tn)?$t=function(e){tn.nextTick(T(cn,e,1))}:sn&&sn.now?$t=function(e){sn.now(T(cn,e,1))}:on?(en=(Zt=new on).port2,Zt.port1.onmessage=un,$t=T(en.postMessage,en,1)):n.addEventListener&&"function"==typeof postMessage&&!n.importScripts?($t=function(e){n.postMessage(e+"","*")},n.addEventListener("message",un,!1)):$t="onreadystatechange"in u("script")?function(e){je.appendChild(u("script")).onreadystatechange=function(){je.removeChild(this),cn.call(e)}}:function(e){setTimeout(T(cn,e,1),0)});var hn={set:nn,clear:rn},dn=hn.set,fn=n.MutationObserver||n.WebKitMutationObserver,pn=n.process,gn=n.Promise,mn="process"==W(pn);var yn,vn,bn,wn,En={f:function(e){return new function(e){var t,n;this.promise=new e(function(e,i){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=i}),this.resolve=S(t),this.reject=S(n)}(e)}},kn=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}},Sn=hn.set,Tn=function(){var e,t,i,r=function(){var n,r;for(mn&&(n=pn.domain)&&n.exit();e;){r=e.fn,e=e.next;try{r()}catch(n){throw e?i():t=void 0,n}}t=void 0,n&&n.enter()};if(mn)i=function(){pn.nextTick(r)};else if(!fn||n.navigator&&n.navigator.standalone)if(gn&&gn.resolve){var o=gn.resolve();i=function(){o.then(r)}}else i=function(){dn.call(n,r)};else{var s=!0,a=document.createTextNode("");new fn(r).observe(a,{characterData:!0}),i=function(){a.data=s=!s}}return function(n){var r={fn:n,next:void 0};t&&(t.next=r),e||(e=r,i()),t=r}}(),An=n.TypeError,_n=n.process,Cn=n.Promise,Pn="process"==Ce(_n),xn=function(){},Mn=vn=En.f,Ln=!!function(){try{var e=Cn.resolve(1),t=(e.constructor={})[ue("species")]=function(e){e(xn,xn)};return(Pn||"function"==typeof PromiseRejectionEvent)&&e.then(xn)instanceof t}catch(e){}}(),Nn=function(e){var t;return!(!r(e)||"function"!=typeof(t=e.then))&&t},On=function(e,t){if(!e._n){e._n=!0;var n=e._c;Tn(function(){for(var i=e._v,r=1==e._s,o=0,s=function(t){var n,o,s=r?t.ok:t.fail,a=t.resolve,l=t.reject,c=t.domain;try{s?(r||(2==e._h&&Fn(e),e._h=1),!0===s?n=i:(c&&c.enter(),n=s(i),c&&c.exit()),n===t.promise?l(An("Promise-chain cycle")):(o=Nn(n))?o.call(n,a,l):a(n)):l(i)}catch(e){l(e)}};n.length>o;)s(n[o++]);e._c=[],e._n=!1,t&&!e._h&&In(e)})}},In=function(e){Sn.call(n,function(){var t,i,r,o=e._v,s=jn(e);if(s&&(t=kn(function(){Pn?_n.emit("unhandledRejection",o,e):(i=n.onunhandledrejection)?i({promise:e,reason:o}):(r=n.console)&&r.error&&r.error("Unhandled promise rejection",o)}),e._h=Pn||jn(e)?2:1),e._a=void 0,s&&t.e)throw t.v})},jn=function(e){return 1!==e._h&&0===(e._a||e._c).length},Fn=function(e){Sn.call(n,function(){var t;Pn?_n.emit("rejectionHandled",e):(t=n.onrejectionhandled)&&t({promise:e,reason:e._v})})},Rn=function(e){var t=this;t._d||(t._d=!0,(t=t._w||t)._v=e,t._s=2,t._a||(t._a=t._c.slice()),On(t,!0))},Bn=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw An("Promise can't be resolved itself");(t=Nn(e))?Tn(function(){var i={_w:n,_d:!1};try{t.call(e,T(Bn,i,1),T(Rn,i,1))}catch(e){Rn.call(i,e)}}):(n._v=e,n._s=1,On(n,!1))}catch(e){Rn.call({_w:n,_d:!1},e)}}};Ln||(Cn=function(e){F(this,Cn,"Promise","_h"),S(e),yn.call(this);try{e(T(Bn,this,1),T(Rn,this,1))}catch(e){Rn.call(this,e)}},(yn=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=j(Cn.prototype,{then:function(e,t){var n=Mn(me(this,Cn));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=Pn?_n.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&On(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),bn=function(){var e=new yn;this.promise=e,this.resolve=T(Bn,e,1),this.reject=T(Rn,e,1)},En.f=Mn=function(e){return e===Cn||e===wn?new bn(e):vn(e)}),C(C.G+C.W+C.F*!Ln,{Promise:Cn}),fe(Cn,"Promise"),ve("Promise"),wn=i.Promise,C(C.S+C.F*!Ln,"Promise",{reject:function(e){var t=Mn(this);return(0,t.reject)(e),t.promise}}),C(C.S+C.F*!Ln,"Promise",{resolve:function(e){return function(e,t){if(o(e),r(t)&&t.constructor===e)return t;var n=En.f(e);return(0,n.resolve)(t),n.promise}(this,e)}}),C(C.S+C.F*!(Ln&&lt(function(e){Cn.all(e).catch(xn)})),"Promise",{all:function(e){var t=this,n=Mn(t),i=n.resolve,r=n.reject,o=kn(function(){var n=[],o=0,s=1;gt(e,!1,function(e){var a=o++,l=!1;n.push(void 0),s++,t.resolve(e).then(function(e){l||(l=!0,n[a]=e,--s||i(n))},r)}),--s||i(n)});return o.e&&r(o.v),n.promise},race:function(e){var t=this,n=Mn(t),i=n.reject,r=kn(function(){gt(e,!1,function(e){t.resolve(e).then(n.resolve,i)})});return r.e&&i(r.v),n.promise}});var qn={f:ue},Vn=p.f,Dn=function(e){var t=i.Symbol||(i.Symbol=n.Symbol||{});"_"==e.charAt(0)||e in t||Vn(t,e,{value:qn.f(e)})},Un=ae.f,Hn={}.toString,Wn="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],Gn={f:function(e){return Wn&&"[object Window]"==Hn.call(e)?function(e){try{return Un(e)}catch(e){return Wn.slice()}}(e):Un(Y(e))}},zn=mt.KEY,Yn=dt.f,Kn=p.f,Qn=Gn.f,Jn=n.Symbol,Xn=n.JSON,$n=Xn&&Xn.stringify,Zn=ue("_hidden"),ei=ue("toPrimitive"),ti={}.propertyIsEnumerable,ni=Z("symbol-registry"),ii=Z("symbols"),ri=Z("op-symbols"),oi=Object.prototype,si="function"==typeof Jn,ai=n.QObject,li=!ai||!ai.prototype||!ai.prototype.findChild,ci=a&&s(function(){return 7!=qe(Kn({},"a",{get:function(){return Kn(this,"a",{value:7}).a}})).a})?function(e,t,n){var i=Yn(oi,t);i&&delete oi[t],Kn(e,t,n),i&&e!==oi&&Kn(oi,t,i)}:Kn,ui=function(e){var t=ii[e]=qe(Jn.prototype);return t._k=e,t},hi=si&&"symbol"==typeof Jn.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof Jn},di=function(e,t,n){return e===oi&&di(ri,t,n),o(e),t=d(t,!0),o(n),v(ii,t)?(n.enumerable?(v(e,Zn)&&e[Zn][t]&&(e[Zn][t]=!1),n=qe(n,{enumerable:g(0,!1)})):(v(e,Zn)||Kn(e,Zn,g(1,{})),e[Zn][t]=!0),ci(e,t,n)):Kn(e,t,n)},fi=function(e,t){o(e);for(var n,i=function(e){var t=Ne(e),n=Ct.f;if(n)for(var i,r=n(e),o=ut.f,s=0;r.length>s;)o.call(e,i=r[s++])&&t.push(i);return t}(t=Y(t)),r=0,s=i.length;s>r;)di(e,n=i[r++],t[n]);return e},pi=function(e){var t=ti.call(this,e=d(e,!0));return!(this===oi&&v(ii,e)&&!v(ri,e))&&(!(t||!v(this,e)||!v(ii,e)||v(this,Zn)&&this[Zn][e])||t)},gi=function(e,t){if(e=Y(e),t=d(t,!0),e!==oi||!v(ii,t)||v(ri,t)){var n=Yn(e,t);return!n||!v(ii,t)||v(e,Zn)&&e[Zn][t]||(n.enumerable=!0),n}},mi=function(e){for(var t,n=Qn(Y(e)),i=[],r=0;n.length>r;)v(ii,t=n[r++])||t==Zn||t==zn||i.push(t);return i},yi=function(e){for(var t,n=e===oi,i=Qn(n?ri:Y(e)),r=[],o=0;i.length>o;)!v(ii,t=i[o++])||n&&!v(oi,t)||r.push(ii[t]);return r};si||(k((Jn=function(){if(this instanceof Jn)throw TypeError("Symbol is not a constructor!");var e=E(arguments.length>0?arguments[0]:void 0),t=function(n){this===oi&&t.call(ri,n),v(this,Zn)&&v(this[Zn],e)&&(this[Zn][e]=!1),ci(this,e,g(1,n))};return a&&li&&ci(oi,e,{configurable:!0,set:t}),ui(e)}).prototype,"toString",function(){return this._k}),dt.f=gi,p.f=di,ae.f=Gn.f=mi,ut.f=pi,Ct.f=yi,a&&k(oi,"propertyIsEnumerable",pi,!0),qn.f=function(e){return ui(ue(e))}),C(C.G+C.W+C.F*!si,{Symbol:Jn});for(var vi="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),bi=0;vi.length>bi;)ue(vi[bi++]);for(var wi=Ne(ue.store),Ei=0;wi.length>Ei;)Dn(wi[Ei++]);C(C.S+C.F*!si,"Symbol",{for:function(e){return v(ni,e+="")?ni[e]:ni[e]=Jn(e)},keyFor:function(e){if(!hi(e))throw TypeError(e+" is not a symbol!");for(var t in ni)if(ni[t]===e)return t},useSetter:function(){li=!0},useSimple:function(){li=!1}}),C(C.S+C.F*!si,"Object",{create:function(e,t){return void 0===t?qe(e):fi(qe(e),t)},defineProperty:di,defineProperties:fi,getOwnPropertyDescriptor:gi,getOwnPropertyNames:mi,getOwnPropertySymbols:yi}),Xn&&C(C.S+C.F*(!si||s(function(){var e=Jn();return"[null]"!=$n([e])||"{}"!=$n({a:e})||"{}"!=$n(Object(e))})),"JSON",{stringify:function(e){for(var t,n,i=[e],o=1;arguments.length>o;)i.push(arguments[o++]);if(n=t=i[1],(r(t)||void 0!==e)&&!hi(e))return Ge(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!hi(t))return t}),i[1]=t,$n.apply(Xn,i)}}),Jn.prototype[ei]||m(Jn.prototype,ei,Jn.prototype.valueOf),fe(Jn,"Symbol"),fe(Math,"Math",!0),fe(n.JSON,"JSON",!0);var ki=function(e,t){var n=(i.Object||{})[e]||Object[e],r={};r[e]=t(n),C(C.S+C.F*s(function(){n(1)}),"Object",r)},Si=mt.onFreeze;ki("freeze",function(e){return function(t){return e&&r(t)?e(Si(t)):t}});var Ti=mt.onFreeze;ki("seal",function(e){return function(t){return e&&r(t)?e(Ti(t)):t}});var Ai=mt.onFreeze;ki("preventExtensions",function(e){return function(t){return e&&r(t)?e(Ai(t)):t}}),ki("isFrozen",function(e){return function(t){return!r(t)||!!e&&e(t)}}),ki("isSealed",function(e){return function(t){return!r(t)||!!e&&e(t)}}),ki("isExtensible",function(e){return function(t){return!!r(t)&&(!e||e(t))}});var _i=dt.f;ki("getOwnPropertyDescriptor",function(){return function(e,t){return _i(Y(e),t)}}),ki("getPrototypeOf",function(){return function(e){return Ue(le(e))}}),ki("keys",function(){return function(e){return Ne(le(e))}}),ki("getOwnPropertyNames",function(){return Gn.f}),C(C.S+C.F,"Object",{assign:xt});var Ci=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t};C(C.S,"Object",{is:Ci});var Pi=p.f,xi=Function.prototype,Mi=/^\s*function ([^ (]*)/;"name"in xi||a&&Pi(xi,"name",{configurable:!0,get:function(){try{return(""+this).match(Mi)[1]}catch(e){return""}}}),C(C.S,"String",{raw:function(e){for(var t=Y(e.raw),n=D(t.length),i=arguments.length,r=[],o=0;n>o;)r.push(String(t[o++])),o<i&&r.push(String(arguments[o]));return r.join("")}});var Li=String.fromCharCode,Ni=String.fromCodePoint;C(C.S+C.F*(!!Ni&&1!=Ni.length),"String",{fromCodePoint:function(e){for(var t,n=[],i=arguments.length,r=0;i>r;){if(t=+arguments[r++],J(t,1114111)!==t)throw RangeError(t+" is not a valid code point");n.push(t<65536?Li(t):Li(55296+((t-=65536)>>10),t%1024+56320))}return n.join("")}});var Oi,Ii=(Oi=!1,function(e,t){var n,i,r=String(z(e)),o=q(t),s=r.length;return o<0||o>=s?Oi?"":void 0:(n=r.charCodeAt(o))<55296||n>56319||o+1===s||(i=r.charCodeAt(o+1))<56320||i>57343?Oi?r.charAt(o):n:Oi?r.slice(o,o+2):i-56320+(n-55296<<10)+65536});C(C.P,"String",{codePointAt:function(e){return Ii(this,e)}});var ji=function(e){var t=String(z(this)),n="",i=q(e);if(i<0||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(t+=t))1&i&&(n+=t);return n};C(C.P,"String",{repeat:ji});var Fi=ue("match"),Ri=function(e){var t;return r(e)&&(void 0!==(t=e[Fi])?!!t:"RegExp"==W(e))},Bi=function(e,t,n){if(Ri(t))throw TypeError("String#"+n+" doesn't accept regex!");return String(z(e))},qi=ue("match"),Vi=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[qi]=!1,!"/./"[e](t)}catch(e){}}return!0},Di="".startsWith;C(C.P+C.F*Vi("startsWith"),"String",{startsWith:function(e){var t=Bi(this,e,"startsWith"),n=D(Math.min(arguments.length>1?arguments[1]:void 0,t.length)),i=String(e);return Di?Di.call(t,i,n):t.slice(n,n+i.length)===i}});var Ui="".endsWith;C(C.P+C.F*Vi("endsWith"),"String",{endsWith:function(e){var t=Bi(this,e,"endsWith"),n=arguments.length>1?arguments[1]:void 0,i=D(t.length),r=void 0===n?i:Math.min(D(n),i),o=String(e);return Ui?Ui.call(t,o,r):t.slice(r-o.length,r)===o}});C(C.P+C.F*Vi("includes"),"String",{includes:function(e){return!!~Bi(this,e,"includes").indexOf(e,arguments.length>1?arguments[1]:void 0)}});a&&"g"!=/./g.flags&&p.f(RegExp.prototype,"flags",{configurable:!0,get:function(){var e=o(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t}});var Hi=function(e,t,n){var i=ue(e),r=n(z,i,""[e]),o=r[0],a=r[1];s(function(){var t={};return t[i]=function(){return 7},7!=""[e](t)})&&(k(String.prototype,e,o),m(RegExp.prototype,i,2==t?function(e,t){return a.call(e,this,t)}:function(e){return a.call(e,this)}))};Hi("match",1,function(e,t,n){return[function(n){var i=e(this),r=void 0==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]}),Hi("replace",2,function(e,t,n){return[function(i,r){var o=e(this),s=void 0==i?void 0:i[t];return void 0!==s?s.call(i,o,r):n.call(String(o),i,r)},n]}),Hi("split",2,function(e,t,n){var i=Ri,r=n,o=[].push;if("c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length){var s=void 0===/()??/.exec("")[1];n=function(e,t){var n=String(this);if(void 0===e&&0===t)return[];if(!i(e))return r.call(n,e,t);var a,l,c,u,h,d=[],f=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),p=0,g=void 0===t?4294967295:t>>>0,m=new RegExp(e.source,f+"g");for(s||(a=new RegExp("^"+m.source+"$(?!\\s)",f));(l=m.exec(n))&&!((c=l.index+l[0].length)>p&&(d.push(n.slice(p,l.index)),!s&&l.length>1&&l[0].replace(a,function(){for(h=1;h<arguments.length-2;h++)void 0===arguments[h]&&(l[h]=void 0)}),l.length>1&&l.index<n.length&&o.apply(d,l.slice(1)),u=l[0].length,p=c,d.length>=g));)m.lastIndex===l.index&&m.lastIndex++;return p===n.length?!u&&m.test("")||d.push(""):d.push(n.slice(p)),d.length>g?d.slice(0,g):d}}else"0".split(void 0,0).length&&(n=function(e,t){return void 0===e&&0===t?[]:r.call(this,e,t)});return[function(i,r){var o=e(this),s=void 0==i?void 0:i[t];return void 0!==s?s.call(i,o,r):n.call(String(o),i,r)},n]}),Hi("search",1,function(e,t,n){return[function(n){var i=e(this),r=void 0==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]});var Wi=function(e,t,n){t in e?p.f(e,t,g(0,n)):e[t]=n};C(C.S+C.F*!lt(function(e){}),"Array",{from:function(e){var t,n,i,r,o=le(e),s="function"==typeof this?this:Array,a=arguments.length,l=a>1?arguments[1]:void 0,c=void 0!==l,u=0,h=We(o);if(c&&(l=T(l,a>2?arguments[2]:void 0,2)),void 0==h||s==Array&&Le(h))for(n=new s(t=D(o.length));t>u;u++)Wi(n,u,c?l(o[u],u):o[u]);else for(r=h.call(o),n=new s;!(i=r.next()).done;u++)Wi(n,u,c?pt(r,l,[i.value,u],!0):i.value);return n.length=u,n}}),C(C.S+C.F*s(function(){function e(){}return!(Array.of.call(e)instanceof e)}),"Array",{of:function(){for(var e=0,t=arguments.length,n=new("function"==typeof this?this:Array)(t);t>e;)Wi(n,e,arguments[e++]);return n.length=t,n}}),C(C.P,"Array",{copyWithin:ct}),Xe("copyWithin");var Gi=Ke(5),zi=!0;"find"in[]&&Array(1).find(function(){zi=!1}),C(C.P+C.F*zi,"Array",{find:function(e){return Gi(this,e,arguments.length>1?arguments[1]:void 0)}}),Xe("find");var Yi=Ke(6),Ki=!0;"findIndex"in[]&&Array(1).findIndex(function(){Ki=!1}),C(C.P+C.F*Ki,"Array",{findIndex:function(e){return Yi(this,e,arguments.length>1?arguments[1]:void 0)}}),Xe("findIndex"),C(C.P,"Array",{fill:ce}),Xe("fill");var Qi=n.isFinite;C(C.S,"Number",{isFinite:function(e){return"number"==typeof e&&Qi(e)}});var Ji=Math.floor,Xi=function(e){return!r(e)&&isFinite(e)&&Ji(e)===e};C(C.S,"Number",{isInteger:Xi});var $i=Math.abs;C(C.S,"Number",{isSafeInteger:function(e){return Xi(e)&&$i(e)<=9007199254740991}}),C(C.S,"Number",{isNaN:function(e){return e!=e}}),C(C.S,"Number",{EPSILON:Math.pow(2,-52)}),C(C.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991}),C(C.S,"Number",{MAX_SAFE_INTEGER:9007199254740991});var Zi=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:Math.log(1+e)},er=Math.sqrt,tr=Math.acosh;C(C.S+C.F*!(tr&&710==Math.floor(tr(Number.MAX_VALUE))&&tr(1/0)==1/0),"Math",{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?Math.log(e)+Math.LN2:Zi(e-1+er(e-1)*er(e+1))}});var nr=Math.asinh;C(C.S+C.F*!(nr&&1/nr(0)>0),"Math",{asinh:function e(t){return isFinite(t=+t)&&0!=t?t<0?-e(-t):Math.log(t+Math.sqrt(t*t+1)):t}});var ir=Math.atanh;C(C.S+C.F*!(ir&&1/ir(-0)<0),"Math",{atanh:function(e){return 0==(e=+e)?e:Math.log((1+e)/(1-e))/2}});var rr=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1};C(C.S,"Math",{cbrt:function(e){return rr(e=+e)*Math.pow(Math.abs(e),1/3)}}),C(C.S,"Math",{clz32:function(e){return(e>>>=0)?31-Math.floor(Math.log(e+.5)*Math.LOG2E):32}});var or=Math.exp;C(C.S,"Math",{cosh:function(e){return(or(e=+e)+or(-e))/2}});var sr=Math.expm1,ar=!sr||sr(10)>22025.465794806718||sr(10)<22025.465794806718||-2e-17!=sr(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:Math.exp(e)-1}:sr;C(C.S+C.F*(ar!=Math.expm1),"Math",{expm1:ar});var lr=Math.pow,cr=lr(2,-52),ur=lr(2,-23),hr=lr(2,127)*(2-ur),dr=lr(2,-126),fr=Math.fround||function(e){var t,n,i=Math.abs(e),r=rr(e);return i<dr?r*(i/dr/ur+1/cr-1/cr)*dr*ur:(n=(t=(1+ur/cr)*i)-(t-i))>hr||n!=n?r*(1/0):r*n};C(C.S,"Math",{fround:fr});var pr=Math.abs;C(C.S,"Math",{hypot:function(e,t){for(var n,i,r=0,o=0,s=arguments.length,a=0;o<s;)a<(n=pr(arguments[o++]))?(r=r*(i=a/n)*i+1,a=n):r+=n>0?(i=n/a)*i:n;return a===1/0?1/0:a*Math.sqrt(r)}});var gr=Math.imul;C(C.S+C.F*s(function(){return-5!=gr(4294967295,5)||2!=gr.length}),"Math",{imul:function(e,t){var n=+e,i=+t,r=65535&n,o=65535&i;return 0|r*o+((65535&n>>>16)*o+r*(65535&i>>>16)<<16>>>0)}}),C(C.S,"Math",{log1p:Zi}),C(C.S,"Math",{log10:function(e){return Math.log(e)*Math.LOG10E}}),C(C.S,"Math",{log2:function(e){return Math.log(e)/Math.LN2}}),C(C.S,"Math",{sign:rr});var mr=Math.exp;C(C.S+C.F*s(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(e){return Math.abs(e=+e)<1?(ar(e)-ar(-e))/2:(mr(e-1)-mr(-e-1))*(Math.E/2)}});var yr=Math.exp;C(C.S,"Math",{tanh:function(e){var t=ar(e=+e),n=ar(-e);return t==1/0?1:n==1/0?-1:(t-n)/(yr(e)+yr(-e))}}),C(C.S,"Math",{trunc:function(e){return(e>0?Math.floor:Math.ceil)(e)}});var vr=X(!0);C(C.P,"Array",{includes:function(e){return vr(this,e,arguments.length>1?arguments[1]:void 0)}}),Xe("includes");var br=ut.f,wr=function(e){return function(t){for(var n,i=Y(t),r=Ne(i),o=r.length,s=0,a=[];o>s;)br.call(i,n=r[s++])&&a.push(e?[n,i[n]]:i[n]);return a}},Er=wr(!1);C(C.S,"Object",{values:function(e){return Er(e)}});var kr=wr(!0);C(C.S,"Object",{entries:function(e){return kr(e)}}),C(C.S,"Object",{getOwnPropertyDescriptors:function(e){for(var t,n,i=Y(e),r=dt.f,o=Jt(i),s={},a=0;o.length>a;)void 0!==(n=r(i,t=o[a++]))&&Wi(s,t,n);return s}});var Sr=function(e,t,n,i){var r=String(z(e)),o=r.length,s=void 0===n?" ":String(n),a=D(t);if(a<=o||""==s)return r;var l=a-o,c=ji.call(s,Math.ceil(l/s.length));return c.length>l&&(c=c.slice(0,l)),i?c+r:r+c},Tr=n.navigator,Ar=Tr&&Tr.userAgent||"";C(C.P+C.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(Ar),"String",{padStart:function(e){return Sr(this,e,arguments.length>1?arguments[1]:void 0,!0)}}),C(C.P+C.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(Ar),"String",{padEnd:function(e){return Sr(this,e,arguments.length>1?arguments[1]:void 0,!1)}});var _r=[].slice,Cr=/MSIE .\./.test(Ar),Pr=function(e){return function(t,n){var i=arguments.length>2,r=!!i&&_r.call(arguments,2);return e(i?function(){("function"==typeof t?t:Function(t)).apply(this,r)}:t,n)}};C(C.G+C.B+C.F*Cr,{setTimeout:Pr(n.setTimeout),setInterval:Pr(n.setInterval)}),C(C.G+C.B,{setImmediate:hn.set,clearImmediate:hn.clear});for(var xr=ue("iterator"),Mr=ue("toStringTag"),Lr=Pe.Array,Nr={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},Or=Ne(Nr),Ir=0;Ir<Or.length;Ir++){var jr,Fr=Or[Ir],Rr=Nr[Fr],Br=n[Fr],qr=Br&&Br.prototype;if(qr&&(qr[xr]||m(qr,xr,Lr),qr[Mr]||m(qr,Mr,Fr),Pe[Fr]=Lr,Rr))for(jr in ot)qr[jr]||k(qr,jr,ot[jr],!0)}t(function(t){!function(e){var n,i=Object.prototype,r=i.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},s=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag",c=e.regeneratorRuntime;if(c)t.exports=c;else{(c=e.regeneratorRuntime=t.exports).wrap=b;var u="suspendedStart",h="suspendedYield",d="executing",f="completed",p={},g={};g[s]=function(){return this};var m=Object.getPrototypeOf,y=m&&m(m(M([])));y&&y!==i&&r.call(y,s)&&(g=y);var v=S.prototype=E.prototype=Object.create(g);k.prototype=v.constructor=S,S.constructor=k,S[l]=k.displayName="GeneratorFunction",c.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===k||"GeneratorFunction"===(t.displayName||t.name))},c.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,S):(e.__proto__=S,l in e||(e[l]="GeneratorFunction")),e.prototype=Object.create(v),e},c.awrap=function(e){return{__await:e}},T(A.prototype),A.prototype[a]=function(){return this},c.AsyncIterator=A,c.async=function(e,t,n,i){var r=new A(b(e,t,n,i));return c.isGeneratorFunction(t)?r:r.next().then(function(e){return e.done?e.value:r.next()})},T(v),v[l]="Generator",v[s]=function(){return this},v.toString=function(){return"[object Generator]"},c.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var i=t.pop();if(i in e)return n.value=i,n.done=!1,n}return n.done=!0,n}},c.values=M,x.prototype={constructor:x,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=n,this.done=!1,this.delegate=null,this.method="next",this.arg=n,this.tryEntries.forEach(P),!e)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=n)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function i(i,r){return a.type="throw",a.arg=e,t.next=i,r&&(t.method="next",t.arg=n),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var s=this.tryEntries[o],a=s.completion;if("root"===s.tryLoc)return i("end");if(s.tryLoc<=this.prev){var l=r.call(s,"catchLoc"),c=r.call(s,"finallyLoc");if(l&&c){if(this.prev<s.catchLoc)return i(s.catchLoc,!0);if(this.prev<s.finallyLoc)return i(s.finallyLoc)}else if(l){if(this.prev<s.catchLoc)return i(s.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<s.finallyLoc)return i(s.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var o=i;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var s=o?o.completion:{};return s.type=e,s.arg=t,o?(this.method="next",this.next=o.finallyLoc,p):this.complete(s)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),p},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),P(n),p}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var i=n.completion;if("throw"===i.type){var r=i.arg;P(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,i){return this.delegate={iterator:M(e),resultName:t,nextLoc:i},"next"===this.method&&(this.arg=n),p}}}function b(e,t,n,i){var r=t&&t.prototype instanceof E?t:E,o=Object.create(r.prototype),s=new x(i||[]);return o._invoke=function(e,t,n){var i=u;return function(r,o){if(i===d)throw new Error("Generator is already running");if(i===f){if("throw"===r)throw o;return L()}for(n.method=r,n.arg=o;;){var s=n.delegate;if(s){var a=_(s,n);if(a){if(a===p)continue;return a}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(i===u)throw i=f,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);i=d;var l=w(e,t,n);if("normal"===l.type){if(i=n.done?f:h,l.arg===p)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(i=f,n.method="throw",n.arg=l.arg)}}}(e,n,s),o}function w(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}function E(){}function k(){}function S(){}function T(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function A(t){function n(e,i,o,s){var a=w(t[e],t,i);if("throw"!==a.type){var l=a.arg,c=l.value;return c&&"object"==typeof c&&r.call(c,"__await")?Promise.resolve(c.__await).then(function(e){n("next",e,o,s)},function(e){n("throw",e,o,s)}):Promise.resolve(c).then(function(e){l.value=e,o(l)},s)}s(a.arg)}var i;"object"==typeof e.process&&e.process.domain&&(n=e.process.domain.bind(n)),this._invoke=function(e,t){function r(){return new Promise(function(i,r){n(e,t,i,r)})}return i=i?i.then(r,r):r()}}function _(e,t){var i=e.iterator[t.method];if(i===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=n,_(e,t),"throw"===t.method))return p;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return p}var r=w(i,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,p;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=n),t.delegate=null,p):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,p)}function C(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function P(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function x(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(C,this),this.reset(!0)}function M(e){if(e){var t=e[s];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var i=-1,o=function t(){for(;++i<e.length;)if(r.call(e,i))return t.value=e[i],t.done=!1,t;return t.value=n,t.done=!0,t};return o.next=o}}return{next:L}}function L(){return{value:n,done:!0}}}("object"==typeof e?e:"object"==typeof window?window:"object"==typeof self?self:e)});try{var Vr=new window.CustomEvent("test");if(Vr.preventDefault(),!0!==Vr.defaultPrevented)throw new Error("Could not prevent default")}catch(e){var Dr=function(e,t){var n,i;return t=t||{bubbles:!1,cancelable:!1,detail:void 0},(n=document.createEvent("CustomEvent")).initCustomEvent(e,t.bubbles,t.cancelable,t.detail),i=n.preventDefault,n.preventDefault=function(){i.call(this);try{Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})}catch(e){this.defaultPrevented=!0}},n};Dr.prototype=window.Event.prototype,window.CustomEvent=Dr}var Ur,Hr={html5:"html5",youtube:"youtube",vimeo:"vimeo"},Wr={audio:"audio",video:"video"},Gr={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,showPosterOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.0.6/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:"default",options:["hd2160","hd1440","hd1080","hd720","large","medium","small","tiny","default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:window.navigator.language.split("-")[0]},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime} secs",play:"Play",pause:"Pause",fastForward:"Forward {seektime} secs",seek:"Seek",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",advertisement:"Ad"},urls:{vimeo:{api:"https://player.vimeo.com/api/player.js"},youtube:{api:"https://www.youtube.com/iframe_api"},googleIMA:{api:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","adscontentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',fastForward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress--buffer",played:".plyr__progress--played",loop:".plyr__progress--loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{video:"plyr__video-wrapper",embed:"plyr__video-embed",ads:"plyr__ads",control:"plyr__control",type:"plyr--{0}",provider:"plyr--{0}",stopped:"plyr--stopped",playing:"plyr--playing",loading:"plyr--loading",error:"plyr--has-error",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1,publisherId:""}},zr=t(function(e,t){var n;n=function(){var e=function(){},t={},n={},i={};function r(e,t){if(e){var r=i[e];if(n[e]=t,r)for(;r.length;)r[0](e,t),r.splice(0,1)}}function o(t,n){t.call&&(t={success:t}),n.length?(t.error||e)(n):(t.success||e)(t)}function s(t,n,i,r){var o,a,l=document,c=i.async,u=(i.numRetries||0)+1,h=i.before||e;r=r||0,/(^css!|\.css$)/.test(t)?(o=!0,(a=l.createElement("link")).rel="stylesheet",a.href=t.replace(/^css!/,"")):((a=l.createElement("script")).src=t,a.async=void 0===c||c),a.onload=a.onerror=a.onbeforeload=function(e){var l=e.type[0];if(o&&"hideFocus"in a)try{a.sheet.cssText.length||(l="e")}catch(e){l="e"}if("e"==l&&(r+=1)<u)return s(t,n,i,r);n(t,l,e.defaultPrevented)},!1!==h(t,a)&&l.head.appendChild(a)}function a(e,n,i){var a,l;if(n&&n.trim&&(a=n),l=(a?i:n)||{},a){if(a in t)throw"LoadJS";t[a]=!0}!function(e,t,n){var i,r,o=(e=e.push?e:[e]).length,a=o,l=[];for(i=function(e,n,i){if("e"==n&&l.push(e),"b"==n){if(!i)return;l.push(e)}--o||t(l)},r=0;r<a;r++)s(e[r],i,n)}(e,function(e){o(l,e),r(a,e)},l)}return a.ready=function(e,t){return function(e,t){var r,o,s,a=[],l=(e=e.push?e:[e]).length,c=l;for(r=function(e,n){n.length&&a.push(e),--c||t(a)};l--;)o=e[l],(s=n[o])?r(o,s):(i[o]=i[o]||[]).push(r)}(e,function(e){o(t,e)}),a},a.done=function(e){r(e,[])},a.reset=function(){t={},n={},i={}},a.isDefined=function(e){return e in t},a},e.exports=n()}),Yr=(function(){function e(e){this.value=e}function t(t){var n,i;function r(n,i){try{var s=t[n](i),a=s.value;a instanceof e?Promise.resolve(a.value).then(function(e){r("next",e)},function(e){r("throw",e)}):o(s.done?"return":"normal",s.value)}catch(e){o("throw",e)}}function o(e,t){switch(e){case"return":n.resolve({value:t,done:!0});break;case"throw":n.reject(t);break;default:n.resolve({value:t,done:!1})}(n=n.next)?r(n.key,n.arg):i=null}this._invoke=function(e,t){return new Promise(function(o,s){var a={key:e,arg:t,resolve:o,reject:s,next:null};i?i=i.next=a:(n=i=a,r(e,t))})},"function"!=typeof t.return&&(this.return=void 0)}"function"==typeof Symbol&&Symbol.asyncIterator&&(t.prototype[Symbol.asyncIterator]=function(){return this}),t.prototype.next=function(e){return this._invoke("next",e)},t.prototype.throw=function(e){return this._invoke("throw",e)},t.prototype.return=function(e){return this._invoke("return",e)}}(),function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}),Kr=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),Qr=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},Jr=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],i=!0,r=!1,o=void 0;try{for(var s,a=e[Symbol.iterator]();!(i=(s=a.next()).done)&&(n.push(s.value),!t||n.length!==t);i=!0);}catch(e){r=!0,o=e}finally{try{!i&&a.return&&a.return()}finally{if(r)throw o}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Xr={is:{plyr:function(e){return this.instanceof(e,window.Plyr)},object:function(e){return this.getConstructor(e)===Object},number:function(e){return this.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return this.getConstructor(e)===String},boolean:function(e){return this.getConstructor(e)===Boolean},function:function(e){return this.getConstructor(e)===Function},array:function(e){return!this.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return this.instanceof(e,window.WeakMap)},nodeList:function(e){return this.instanceof(e,window.NodeList)},element:function(e){return this.instanceof(e,window.Element)},textNode:function(e){return this.getConstructor(e)===Text},event:function(e){return this.instanceof(e,window.Event)},cue:function(e){return this.instanceof(e,window.TextTrackCue)||this.instanceof(e,window.VTTCue)},track:function(e){return this.instanceof(e,TextTrack)||!this.nullOrUndefined(e)&&this.string(e.kind)},url:function(e){return!this.nullOrUndefined(e)&&/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e)},nullOrUndefined:function(e){return null===e||void 0===e},empty:function(e){return this.nullOrUndefined(e)||(this.string(e)||this.array(e)||this.nodeList(e))&&!e.length||this.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)},getConstructor:function(e){return this.nullOrUndefined(e)?null:e.constructor}},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(n,i){try{var r=new XMLHttpRequest;if(!("withCredentials"in r))return;r.addEventListener("load",function(){if("text"===t)try{n(JSON.parse(r.responseText))}catch(e){n(r.responseText)}else n(r.response)}),r.addEventListener("error",function(){throw new Error(r.statusText)}),r.open("GET",e,!0),r.responseType=t,r.send()}catch(e){i(e)}})},loadScript:function(e){return new Promise(function(t,n){zr(e,{success:t,error:n})})},loadSprite:function(e,t){if(Xr.is.string(e)){var n=Xr.is.string(t),i=function(){return document.querySelectorAll("#"+t).length};if(!n||!i()){var r=document.createElement("div");if(Xr.toggleHidden(r,!0),n&&r.setAttribute("id",t),$r.storage){var o=window.localStorage.getItem("cache-"+t);if(null!==o){var s=JSON.parse(o);return void a.call(r,s.content)}}Xr.fetch(e).then(function(e){Xr.is.empty(e)||($r.storage&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),a.call(r,e))}).catch(function(){})}}function a(e){n&&i()||(this.innerHTML=e,document.body.insertBefore(this,document.body.childNodes[0]))}},generateId:function(e){return e+"-"+Math.floor(1e4*Math.random())},wrap:function(e,t){var n=e.length?e:[e];Array.from(n).reverse().forEach(function(e,n){var i=n>0?t.cloneNode(!0):t,r=e.parentNode,o=e.nextSibling;i.appendChild(e),o?r.insertBefore(i,o):r.appendChild(i)})},createElement:function(e,t,n){var i=document.createElement(e);return Xr.is.object(t)&&Xr.setAttributes(i,t),Xr.is.string(n)&&(i.textContent=n),i},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,n,i){t.appendChild(Xr.createElement(e,n,i))},removeElement:function(e){Xr.is.element(e)&&Xr.is.element(e.parentNode)&&(Xr.is.nodeList(e)||Xr.is.array(e)?Array.from(e).forEach(Xr.removeElement):e.parentNode.removeChild(e))},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return Xr.is.element(t)&&Xr.is.element(t.parentNode)&&Xr.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){Xr.is.element(e)&&!Xr.is.empty(t)&&Object.entries(t).forEach(function(t){var n=Jr(t,2),i=n[0],r=n[1];e.setAttribute(i,r)})},getAttributesFromSelector:function(e,t){if(!Xr.is.string(e)||Xr.is.empty(e))return{};var n={},i=t;return e.split(",").forEach(function(e){var t=e.trim(),r=t.replace(".",""),o=t.replace(/[[\]]/g,"").split("="),s=o[0],a=o.length>1?o[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":Xr.is.object(i)&&Xr.is.string(i.class)&&(i.class+=" "+r),n.class=r;break;case"#":n.id=t.replace("#","");break;case"[":n[s]=a}}),n},toggleClass:function(e,t,n){if(Xr.is.element(e)){var i=e.classList.contains(t);return e.classList[n?"add":"remove"](t),n&&!i||!n&&i}return null},hasClass:function(e,t){return Xr.is.element(e)&&e.classList.contains(t)},toggleHidden:function(e,t){Xr.is.element(e)&&(t?e.setAttribute("hidden",""):e.removeAttribute("hidden"))},matches:function(e,t){var n={Element:Element};var i=n.matches||n.webkitMatchesSelector||n.mozMatchesSelector||n.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return i.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},findElements:function(){try{return this.elements.controls=Xr.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:Xr.getElements.call(this,this.config.selectors.buttons.play),pause:Xr.getElement.call(this,this.config.selectors.buttons.pause),restart:Xr.getElement.call(this,this.config.selectors.buttons.restart),rewind:Xr.getElement.call(this,this.config.selectors.buttons.rewind),fastForward:Xr.getElement.call(this,this.config.selectors.buttons.fastForward),mute:Xr.getElement.call(this,this.config.selectors.buttons.mute),pip:Xr.getElement.call(this,this.config.selectors.buttons.pip),airplay:Xr.getElement.call(this,this.config.selectors.buttons.airplay),settings:Xr.getElement.call(this,this.config.selectors.buttons.settings),captions:Xr.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:Xr.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=Xr.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:Xr.getElement.call(this,this.config.selectors.inputs.seek),volume:Xr.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:Xr.getElement.call(this,this.config.selectors.display.buffer),duration:Xr.getElement.call(this,this.config.selectors.display.duration),currentTime:Xr.getElement.call(this,this.config.selectors.display.currentTime)},Xr.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(Xr.is.element(e)){var n=Xr.getElements.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),i=n[0],r=n[n.length-1],o=function(e){if("Tab"===e.key&&9===e.keyCode){var t=Xr.getFocusElement();t!==r||e.shiftKey?t===i&&e.shiftKey&&(r.focus(),e.preventDefault()):(i.focus(),e.preventDefault())}};t?Xr.on(this.elements.container,"keydown",o,!1):Xr.off(this.elements.container,"keydown",o,!1)}},toggleListener:function(e,t,n){var i=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(!Xr.is.empty(e)&&!Xr.is.empty(t)&&Xr.is.function(n))if(Xr.is.nodeList(e)||Xr.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&Xr.toggleListener.call(null,e,t,n,i,r,o)});else{var s=t.split(" "),a=o;$r.passiveListeners&&(a={passive:r,capture:o}),s.forEach(function(t){e[i?"addEventListener":"removeEventListener"](t,n,a)})}},on:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments[2],i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];Xr.toggleListener(e,t,n,!0,i,r)},off:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments[2],i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];Xr.toggleListener(e,t,n,!1,i,r)},dispatchEvent:function(e,t,n,i){if(Xr.is.element(e)&&Xr.is.string(t)){var r=new CustomEvent(t,{bubbles:!!Xr.is.boolean(n)&&n,detail:Object.assign({},i,{plyr:Xr.is.plyr(this)?this:null})});e.dispatchEvent(r)}},toggleState:function(e,t){if(Xr.is.array(e)||Xr.is.nodeList(e))Array.from(e).forEach(function(e){return Xr.toggleState(e,t)});else if(Xr.is.element(e)){var n="true"===e.getAttribute("aria-pressed"),i=Xr.is.boolean(t)?t:!n;e.setAttribute("aria-pressed",i)}},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!Xr.is.number(e))return this.formatTime(null,t,n);var i=function(e){return("0"+e).slice(-2)},r=this.getHours(e),o=this.getMinutes(e),s=this.getSeconds(e);return t||r>0?r+=":":r="",(n?"-":"")+r+i(o)+":"+i(s)},replaceAll:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1"),"g"),n.toString())},toTitleCase:function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString().replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})},toPascalCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=Xr.replaceAll(e,"-"," "),e=Xr.replaceAll(e,"_"," "),e=Xr.toTitleCase(e),Xr.replaceAll(e," ","")},toCamelCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=Xr.toPascalCase(e)).charAt(0).toLowerCase()+e.slice(1)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];if(!n.length)return e;var r=n.shift();return Xr.is.object(r)?(Object.keys(r).forEach(function(t){Xr.is.object(r[t])?(Object.keys(e).includes(t)||Object.assign(e,Qr({},t,{})),Xr.extend(e[t],r[t])):Object.assign(e,Qr({},t,r[t]))}),Xr.extend.apply(Xr,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(n)))):e},getProviderByUrl:function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?Hr.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{8,}(?=\b|\/)/.test(e)?Hr.vimeo:null},parseYouTubeId:function(e){if(Xr.is.empty(e))return null;return e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if(Xr.is.empty(e))return null;if(Xr.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement("a");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith("http://")||e.startsWith("https://"))&&(t=this.parseUrl(e).search);return this.is.empty(t)?null:t.slice(t.indexOf("?")+1).split("&").reduce(function(e,t){var n=t.split("="),i=Jr(n,2),r=i[0],o=i[1];return Object.assign(e,Qr({},r,decodeURIComponent(o)))},{})},buildUrlParams:function(e){return Xr.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&"):""},stripHTML:function(e){var t=document.createDocumentFragment(),n=document.createElement("div");return t.appendChild(n),n.innerHTML=e,t.firstChild.innerText},getAspectRatio:function(e,t){var n=function e(t,n){return 0===n?t:e(n,t%n)}(e,t);return e/n+":"+t/n},get transitionEndEvent(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!Xr.is.string(n)&&t[n]},repaint:function(e){setTimeout(function(){Xr.toggleHidden(e,!0),e.offsetHeight,Xr.toggleHidden(e,!1)},0)}},$r={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,n){var i=!1,r=!1,o=Xr.getBrowser(),s=o.isIPhone&&n&&$r.inline;switch(t+":"+e){case"html5:video":r=(i=$r.video)&&$r.rangeInput&&(!o.isIPhone||s);break;case"html5:audio":r=(i=$r.audio)&&$r.rangeInput;break;case"youtube:video":case"vimeo:video":i=!0,r=$r.rangeInput&&(!o.isIPhone||s);break;default:r=(i=$r.audio&&$r.video)&&$r.rangeInput}return{api:i,ui:r}},pip:!Xr.getBrowser().isIPhone&&Xr.is.function(Xr.createElement("video").webkitSetPresentationMode),airplay:Xr.is.function(window.WebKitPlaybackTargetAvailabilityEvent),inline:"playsInline"in document.createElement("video"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!Xr.is.function(t.canPlayType))return!1;if(this.isVideo)switch(e){case"video/webm":return t.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return t.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return t.canPlayType('video/ogg; codecs="theora"').replace(/no/,"");default:return!1}else if(this.isAudio)switch(e){case"audio/mpeg":return t.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return t.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return t.canPlayType('audio/wav; codecs="1"').replace(/no/,"");default:return!1}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t)}catch(e){}return e}(),rangeInput:(Ur=document.createElement("input"),Ur.type="range","range"===Ur.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==Xr.transitionEndEvent,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},Zr=function(){},eo=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Yr(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return Kr(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):Zr}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):Zr}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):Zr}}]),e}(),to=Xr.getBrowser();function no(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;Xr.is.element(e)&&Xr.toggleState(e,this.active),Xr.dispatchEvent(this.target,this.active?"enterfullscreen":"exitfullscreen",!0),to.isIos||Xr.trapFocus.call(this.player,this.target,this.active)}}function io(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",Xr.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),no.call(this)}var ro=function(){function e(t){var n=this;Yr(this,e),this.player=t,this.prefix=e.prefix,this.name=e.name,this.scrollPosition={x:0,y:0},Xr.on(document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){no.call(n)}),Xr.on(this.player.elements.container,"dblclick",function(){n.toggle()}),Xr.on(this.player.elements.controls,"dblclick",function(e){return e.stopPropagation()}),this.update()}return Kr(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),Xr.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(to.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?Xr.is.empty(this.prefix)||this.target[this.prefix+"Request"+this.name]():this.target.requestFullscreen():io.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(to.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(e.native)if(this.prefix){if(!Xr.is.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document[""+this.prefix+t+this.name]()}}else document.cancelFullScreen();else io.call(this,!1)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){return(e.native||this.player.config.fullscreen.fallback)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[""+this.prefix+this.name+"Element"]:document.fullscreenElement)===this.target:Xr.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return to.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(Xr.is.function(document.exitFullscreen))return!1;var e="";return["webkit","moz","ms"].some(function(t){return!(!Xr.is.function(document[t+"ExitFullscreen"])&&!Xr.is.function(document[t+"CancelFullScreen"]))&&(e=t,!0)}),e}},{key:"name",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}(),oo={setup:function(){if(this.supported.ui){var e=this.storage.get("language");if(Xr.is.empty(e)||(this.captions.language=e),Xr.is.empty(this.captions.language)&&(this.captions.language=this.config.captions.language.toLowerCase()),!Xr.is.boolean(this.captions.active)){var t=this.storage.get("captions");Xr.is.boolean(t)?this.captions.active=t:this.captions.active=this.config.captions.active}if(!this.isVideo||this.isYouTube||this.isHTML5&&!$r.textTracks)Xr.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&co.setCaptionsMenu.call(this);else{Xr.is.element(this.elements.captions)||(this.elements.captions=Xr.createElement("div",Xr.getAttributesFromSelector(this.config.selectors.captions)),Xr.insertAfter(this.elements.captions,this.elements.wrapper)),Xr.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!Xr.is.empty(oo.getTracks.call(this)));var n=oo.getTracks.call(this);if(!Xr.is.empty(n)){if(Xr.getBrowser().isIE&&window.URL){var i=this.media.querySelectorAll("track");Array.from(i).forEach(function(e){var t=e.getAttribute("src"),n=Xr.parseUrl(t);n.hostname!==window.location.href.hostname&&["http:","https:"].includes(n.protocol)&&Xr.fetch(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){Xr.removeElement(e)})})}oo.setLanguage.call(this),oo.show.call(this),Xr.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&co.setCaptionsMenu.call(this)}}}},setLanguage:function(){var e=this;if(this.isHTML5&&this.isVideo){oo.getTracks.call(this).forEach(function(t){Xr.on(t,"cuechange",function(t){return oo.setCue.call(e,t)}),t.mode="hidden"});var t=oo.getCurrentTrack.call(this);Xr.is.track(t)&&Array.from(t.activeCues||[]).length&&oo.setCue.call(this,t)}else this.isVimeo&&this.captions.active&&this.embed.enableTextTrack(this.language)},getTracks:function(){return Xr.is.nullOrUndefined(this.media)?[]:Array.from(this.media.textTracks||[]).filter(function(e){return["captions","subtitles"].includes(e.kind)})},getCurrentTrack:function(){var e=this;return oo.getTracks.call(this).find(function(t){return t.language.toLowerCase()===e.language})},setCue:function(e){var t=Xr.is.event(e)?e.target:e,n=t.activeCues,i=n.length&&n[0];t===oo.getCurrentTrack.call(this)&&(Xr.is.cue(i)?oo.setText.call(this,i.getCueAsHTML()):oo.setText.call(this,null),Xr.dispatchEvent.call(this,this.media,"cuechange"))},setText:function(e){if(this.supported.ui)if(Xr.is.element(this.elements.captions)){var t=Xr.createElement("span");Xr.emptyElement(this.elements.captions);var n=Xr.is.nullOrUndefined(e)?"":e;Xr.is.string(n)?t.textContent=n.trim():t.appendChild(n),this.elements.captions.appendChild(t)}else this.debug.warn("No captions element to render to")},show:function(){if(Xr.is.element(this.elements.buttons.captions)){var e=this.storage.get("captions");Xr.is.boolean(e)?this.captions.active=e:e=this.config.captions.active,e&&(Xr.toggleClass(this.elements.container,this.config.classNames.captions.active,!0),Xr.toggleState(this.elements.buttons.captions,!0))}}},so=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(Xr.is.empty(e)||Xr.is.empty(t)||!Object.keys(t.i18n).includes(e))return"";var n=t.i18n[e],i={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(i).forEach(function(e){var t=Jr(e,2),i=t[0],r=t[1];n=Xr.replaceAll(n,i,r)}),n},ao={addStyleHook:function(){Xr.toggleClass(this.elements.container,this.config.selectors.container.replace(".",""),!0),Xr.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void ao.toggleNativeControls.call(this,!0);Xr.is.element(this.elements.controls)||(co.inject.call(this),this.listeners.controls()),Xr.is.element(this.elements.controls)&&(ao.toggleNativeControls.call(this),oo.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.options.quality=[],ao.timeUpdate.call(this),ao.checkPlaying.call(this),this.ready=!0,setTimeout(function(){Xr.dispatchEvent.call(e,e.media,"ready")},0),ao.setTitle.call(this))},setTitle:function(){var e=so("play",this.config);if(Xr.is.string(this.config.title)&&!Xr.is.empty(this.config.title)&&(e+=", "+this.config.title,this.elements.container.setAttribute("aria-label",this.config.title)),Xr.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=Xr.getElement.call(this,"iframe");if(!Xr.is.element(t))return;Xr.is.empty(this.config.title)||this.config.title;t.setAttribute("title",so("frameTitle",this.config))}},checkPlaying:function(){Xr.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),Xr.toggleClass(this.elements.container,this.config.classNames.stopped,this.paused),Xr.toggleState(this.elements.buttons.play,this.playing),this.toggleControls(!this.playing)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){Xr.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),t.toggleControls(t.loading)},this.loading?250:0)},checkFailed:function(){var e=this;this.failed=3===this.media.networkState,this.failed&&(Xr.toggleClass(this.elements.container,this.config.classNames.loading,!1),Xr.toggleClass(this.elements.container,this.config.classNames.error,!0)),clearTimeout(this.timers.failed),this.timers.loading=setTimeout(function(){Xr.toggleClass(e.elements.container,e.config.classNames.loading,e.loading),e.toggleControls(e.loading)},this.loading?250:0)},updateVolume:function(){this.supported.ui&&(Xr.is.element(this.elements.inputs.volume)&&ao.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),Xr.is.element(this.elements.buttons.mute)&&Xr.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;Xr.is.element(e)&&(e.value=t,co.updateRangeFill.call(this,e))},setProgress:function(e,t){var n=Xr.is.number(t)?t:0,i=Xr.is.element(e)?e:this.elements.display.buffer;if(Xr.is.element(i)){i.value=n;var r=i.getElementsByTagName("span")[0];Xr.is.element(r)&&(r.childNodes[0].nodeValue=n)}},updateProgress:function(e){if(this.supported.ui&&Xr.is.event(e)){var t=0;if(e)switch(e.type){case"timeupdate":case"seeking":t=Xr.getPercentage(this.currentTime,this.duration),"timeupdate"===e.type&&ao.setRange.call(this,this.elements.inputs.seek,t);break;case"playing":case"progress":ao.setProgress.call(this,this.elements.display.buffer,100*this.buffered)}}},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(Xr.is.element(e)&&Xr.is.number(t)){var i=Xr.getHours(this.duration)>0;e.textContent=Xr.formatTime(t,i,n)}},timeUpdate:function(e){var t=!Xr.is.element(this.elements.display.duration)&&this.config.invertTime;ao.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||ao.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui){var e=Xr.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&ao.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&ao.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),co.updateSeekTooltip.call(this)}}},lo=Xr.getBrowser(),co={updateRangeFill:function(e){if(lo.isWebkit){var t=Xr.is.event(e)?e.target:e;Xr.is.element(t)&&"range"===t.getAttribute("type")&&t.style.setProperty("--value",t.value/t.max*100+"%")}},getIconUrl:function(){return{url:this.config.iconUrl,absolute:0===this.config.iconUrl.indexOf("http")||lo.isIE&&!window.svg4everybody}},createIcon:function(e,t){var n=co.getIconUrl.call(this),i=(n.absolute?"":n.url)+"#"+this.config.iconPrefix,r=document.createElementNS("http://www.w3.org/2000/svg","svg");Xr.setAttributes(r,Xr.extend(t,{role:"presentation"}));var o=document.createElementNS("http://www.w3.org/2000/svg","use"),s=i+"-"+e;return"href"in o?o.setAttributeNS("http://www.w3.org/1999/xlink","href",s):o.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",s),r.appendChild(o),r},createLabel:function(e,t){var n=so(e,this.config),i=Object.assign({},t);switch(e){case"pip":n="PIP";break;case"airplay":n="AirPlay"}return"class"in i?i.class+=" "+this.config.classNames.hidden:i.class=this.config.classNames.hidden,Xr.createElement("span",i,n)},createBadge:function(e){if(Xr.is.empty(e))return null;var t=Xr.createElement("span",{class:this.config.classNames.menu.value});return t.appendChild(Xr.createElement("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var n=Xr.createElement("button"),i=Object.assign({},t),r=Xr.toCamelCase(e),o=!1,s=void 0,a=void 0,l=void 0,c=void 0;switch("type"in i||(i.type="button"),"class"in i?i.class.includes(this.config.classNames.control)&&(i.class+=" "+this.config.classNames.control):i.class=this.config.classNames.control,e){case"play":o=!0,s="play",l="pause",a="play",c="pause";break;case"mute":o=!0,s="mute",l="unmute",a="volume",c="muted";break;case"captions":o=!0,s="enableCaptions",l="disableCaptions",a="captions-off",c="captions-on";break;case"fullscreen":o=!0,s="enterFullscreen",l="exitFullscreen",a="enter-fullscreen",c="exit-fullscreen";break;case"play-large":i.class+=" "+this.config.classNames.control+"--overlaid",r="play",s="play",a="play";break;default:s=r,a=e}return o?(n.appendChild(co.createIcon.call(this,c,{class:"icon--pressed"})),n.appendChild(co.createIcon.call(this,a,{class:"icon--not-pressed"})),n.appendChild(co.createLabel.call(this,l,{class:"label--pressed"})),n.appendChild(co.createLabel.call(this,s,{class:"label--not-pressed"})),i["aria-pressed"]=!1,i["aria-label"]=so(s,this.config)):(n.appendChild(co.createIcon.call(this,a)),n.appendChild(co.createLabel.call(this,s))),Xr.extend(i,Xr.getAttributesFromSelector(this.config.selectors.buttons[r],i)),Xr.setAttributes(n,i),"play"===r?(Xr.is.array(this.elements.buttons[r])||(this.elements.buttons[r]=[]),this.elements.buttons[r].push(n)):this.elements.buttons[r]=n,n},createRange:function(e,t){var n=Xr.createElement("label",{for:t.id,class:this.config.classNames.hidden},so(e,this.config)),i=Xr.createElement("input",Xr.extend(Xr.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off"},t));return this.elements.inputs[e]=i,co.updateRangeFill.call(this,i),{label:n,input:i}},createProgress:function(e,t){var n=Xr.createElement("progress",Xr.extend(Xr.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0},t));if("volume"!==e){n.appendChild(Xr.createElement("span",null,"0"));var i="";switch(e){case"played":i=so("played",this.config);break;case"buffer":i=so("buffered",this.config)}n.textContent="% "+i.toLowerCase()}return this.elements.display[e]=n,n},createTime:function(e){var t=Xr.createElement("div",{class:"plyr__time"});return t.appendChild(Xr.createElement("span",{class:this.config.classNames.hidden},so(e,this.config))),t.appendChild(Xr.createElement("span",Xr.getAttributesFromSelector(this.config.selectors.display[e]),"00:00")),this.elements.display[e]=t,t},createMenuItem:function(e,t,n,i){var r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,o=arguments.length>5&&void 0!==arguments[5]&&arguments[5],s=Xr.createElement("li"),a=Xr.createElement("label",{class:this.config.classNames.control}),l=Xr.createElement("input",Xr.extend(Xr.getAttributesFromSelector(this.config.selectors.inputs[n]),{type:"radio",name:"plyr-"+n,value:e,checked:o,class:"plyr__sr-only"})),c=Xr.createElement("span",{"aria-hidden":!0});a.appendChild(l),a.appendChild(c),a.insertAdjacentHTML("beforeend",i),Xr.is.element(r)&&a.appendChild(r),s.appendChild(a),t.appendChild(s)},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&Xr.is.element(this.elements.inputs.seek)&&Xr.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var n=0,i=this.elements.inputs.seek.getBoundingClientRect(),r=this.config.classNames.tooltip+"--visible",o=function(e){Xr.toggleClass(t.elements.display.seekTooltip,r,e)};if(this.touch)o(!1);else{if(Xr.is.event(e))n=100/i.width*(e.pageX-i.left);else{if(!Xr.hasClass(this.elements.display.seekTooltip,r))return;n=parseFloat(this.elements.display.seekTooltip.style.left,10)}n<0?n=0:n>100&&(n=100),ao.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*n),this.elements.display.seekTooltip.style.left=n+"%",Xr.is.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&o("mouseenter"===e.type)}}},toggleTab:function(e,t){var n=this.elements.settings.tabs[e],i=this.elements.settings.panes[e];Xr.toggleHidden(n,!t),Xr.toggleHidden(i,!t)},setQualityMenu:function(e){var t=this;if(Xr.is.element(this.elements.settings.panes.quality)){var n=this.elements.settings.panes.quality.querySelector("ul");Xr.is.array(e)?this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}):this.options.quality=this.config.quality.options;var i=!Xr.is.empty(this.options.quality)&&this.isYouTube;if(co.toggleTab.call(this,"quality",i),i){Xr.emptyElement(n);this.options.quality.forEach(function(e){return co.createMenuItem.call(t,e,n,"quality",co.getLabel.call(t,"quality",e),function(e){var n="";switch(e){case"hd2160":n="4K";break;case"hd1440":n="WQHD";break;case"hd1080":case"hd720":n="HD"}return n.length?co.createBadge.call(t,n):null}(e))}),co.updateSetting.call(this,"quality",n)}}},getLabel:function(e,t){switch(e){case"speed":return 1===t?"Normal":t+"&times;";case"quality":switch(t){case"hd2160":return"2160P";case"hd1440":return"1440P";case"hd1080":return"1080P";case"hd720":return"720P";case"large":return"480P";case"medium":return"360P";case"small":return"240P";case"tiny":return"Tiny";case"default":return"Auto";default:return t}case"captions":return co.getLanguage.call(this);default:return null}},updateSetting:function(e,t){var n=this.elements.settings.panes[e],i=null,r=t;switch(e){case"captions":i=this.captions.active?this.captions.language:so("disabled",this.config);break;default:if(i=this[e],Xr.is.empty(i)&&(i=this.config[e].default),!this.options[e].includes(i))return void this.debug.warn("Unsupported value of '"+i+"' for "+e);if(!this.config[e].options.includes(i))return void this.debug.warn("Disabled value of '"+i+"' for "+e)}(Xr.is.element(r)||(r=n&&n.querySelector("ul")),Xr.is.empty(i))||(this.elements.settings.tabs[e].querySelector("."+this.config.classNames.menu.value).innerHTML=co.getLabel.call(this,e,i));var o=r&&r.querySelector('input[value="'+i+'"]');Xr.is.element(o)&&(o.checked=!0)},getLanguage:function(){if(!this.supported.ui)return null;if($r.textTracks&&oo.getTracks.call(this).length&&this.captions.active){var e=oo.getCurrentTrack.call(this);if(Xr.is.track(e))return e.label}return so("disabled",this.config)},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector("ul"),n=oo.getTracks.call(this).length;if(co.toggleTab.call(this,"captions",n),Xr.emptyElement(t),n){var i=oo.getTracks.call(this).map(function(e){return{language:e.language,label:Xr.is.empty(e.label)?e.language.toUpperCase():e.label}});i.unshift({language:"",label:so("disabled",this.config)}),i.forEach(function(n){co.createMenuItem.call(e,n.language,t,"language",n.label||n.language,co.createBadge.call(e,n.language.toUpperCase()),n.language.toLowerCase()===e.captions.language.toLowerCase())}),co.updateSetting.call(this,"captions",t)}},setSpeedMenu:function(){var e=this;if(Xr.is.element(this.elements.settings.panes.speed)){Xr.is.array(this.options.speed)&&this.options.speed.length||(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(t){return e.config.speed.options.includes(t)});var t=!Xr.is.empty(this.options.speed);if(co.toggleTab.call(this,"speed",t),t){var n=this.elements.settings.panes.speed.querySelector("ul");Xr.toggleHidden(this.elements.settings.tabs.speed,!1),Xr.toggleHidden(this.elements.settings.panes.speed,!1),Xr.emptyElement(n),this.options.speed.forEach(function(t){return co.createMenuItem.call(e,t,n,"speed",co.getLabel.call(e,"speed",t))}),co.updateSetting.call(this,"speed",n)}}},toggleMenu:function(e){var t=this.elements.settings.form,n=this.elements.buttons.settings;if(Xr.is.element(t)&&Xr.is.element(n)){var i=Xr.is.boolean(e)?e:Xr.is.element(t)&&"true"===t.getAttribute("aria-hidden");if(Xr.is.event(e)){var r=Xr.is.element(t)&&t.contains(e.target),o=e.target===this.elements.buttons.settings;if(r||!r&&!o&&i)return;o&&e.stopPropagation()}Xr.is.element(n)&&n.setAttribute("aria-expanded",i),Xr.is.element(t)&&(t.setAttribute("aria-hidden",!i),Xr.toggleClass(this.elements.container,this.config.classNames.menu.open,i),i?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1))}},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.setAttribute("aria-hidden",!1),Array.from(t.querySelectorAll("input[name]")).forEach(function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(t);var n=t.scrollWidth,i=t.scrollHeight;return Xr.removeElement(t),{width:n,height:i}},showTab:function(e){var t=this.elements.settings.menu,n=e.target,i="false"===n.getAttribute("aria-expanded"),r=document.getElementById(n.getAttribute("aria-controls"));if(Xr.is.element(r)&&"tabpanel"===r.getAttribute("role")){var o=t.querySelector('[role="tabpanel"][aria-hidden="false"]'),s=o.parentNode;if(Array.from(t.querySelectorAll('[aria-controls="'+o.getAttribute("id")+'"]')).forEach(function(e){e.setAttribute("aria-expanded",!1)}),$r.transitions&&!$r.reducedMotion){s.style.width=o.scrollWidth+"px",s.style.height=o.scrollHeight+"px";var a=co.getTabSize.call(this,r);Xr.on(s,Xr.transitionEndEvent,function e(t){t.target===s&&["width","height"].includes(t.propertyName)&&(s.style.width="",s.style.height="",Xr.off(s,Xr.transitionEndEvent,e))}),s.style.width=a.width+"px",s.style.height=a.height+"px"}o.setAttribute("aria-hidden",!0),o.setAttribute("tabindex",-1),r.setAttribute("aria-hidden",!i),n.setAttribute("aria-expanded",i),r.removeAttribute("tabindex"),r.querySelectorAll("button:not(:disabled), input:not(:disabled), [tabindex]")[0].focus()}},create:function(e){var t=this;if(Xr.is.empty(this.config.controls))return null;var n=Xr.createElement("div",Xr.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&n.appendChild(co.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&n.appendChild(co.createButton.call(this,"rewind")),this.config.controls.includes("play")&&n.appendChild(co.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&n.appendChild(co.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var i=Xr.createElement("div",Xr.getAttributesFromSelector(this.config.selectors.progress)),r=co.createRange.call(this,"seek",{id:"plyr-seek-"+e.id});if(i.appendChild(r.label),i.appendChild(r.input),i.appendChild(co.createProgress.call(this,"buffer")),this.config.tooltips.seek){var o=Xr.createElement("span",{role:"tooltip",class:this.config.classNames.tooltip},"00:00");i.appendChild(o),this.elements.display.seekTooltip=o}this.elements.progress=i,n.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&n.appendChild(co.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&n.appendChild(co.createTime.call(this,"duration")),this.config.controls.includes("mute")&&n.appendChild(co.createButton.call(this,"mute")),this.config.controls.includes("volume")){var s=Xr.createElement("div",{class:"plyr__volume"}),a={max:1,step:.05,value:this.config.volume},l=co.createRange.call(this,"volume",Xr.extend(a,{id:"plyr-volume-"+e.id}));s.appendChild(l.label),s.appendChild(l.input),this.elements.volume=s,n.appendChild(s)}if(this.config.controls.includes("captions")&&n.appendChild(co.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!Xr.is.empty(this.config.settings)){var c=Xr.createElement("div",{class:"plyr__menu"});c.appendChild(co.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var u=Xr.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),h=Xr.createElement("div"),d=Xr.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-hidden":!1,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),f=Xr.createElement("ul",{role:"tablist"});this.config.settings.forEach(function(n){var i=Xr.createElement("li",{role:"tab",hidden:""}),r=Xr.createElement("button",Xr.extend(Xr.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+n+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+n,"aria-expanded":!1}),so(n,t.config)),o=Xr.createElement("span",{class:t.config.classNames.menu.value});o.innerHTML=e[n],r.appendChild(o),i.appendChild(r),f.appendChild(i),t.elements.settings.tabs[n]=i}),d.appendChild(f),h.appendChild(d),this.config.settings.forEach(function(n){var i=Xr.createElement("div",{id:"plyr-settings-"+e.id+"-"+n,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-"+e.id+"-"+n+"-tab",role:"tabpanel",tabindex:-1,hidden:""}),r=Xr.createElement("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},so(n,t.config));i.appendChild(r);var o=Xr.createElement("ul");i.appendChild(o),h.appendChild(i),t.elements.settings.panes[n]=i}),u.appendChild(h),c.appendChild(u),n.appendChild(c),this.elements.settings.form=u,this.elements.settings.menu=c}return this.config.controls.includes("pip")&&$r.pip&&n.appendChild(co.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&$r.airplay&&n.appendChild(co.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&n.appendChild(co.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(co.createButton.call(this,"play-large")),this.elements.controls=n,this.config.controls.includes("settings")&&this.config.settings.includes("speed")&&co.setSpeedMenu.call(this),n},inject:function(){var e=this;if(this.config.loadSprite){var t=co.getIconUrl.call(this);t.absolute&&Xr.loadSprite(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var n=null;this.elements.controls=null,n=Xr.is.string(this.config.controls)||Xr.is.element(this.config.controls)?this.config.controls:Xr.is.function(this.config.controls)?this.config.controls({id:this.id,seektime:this.config.seekTime,title:this.config.title}):co.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:co.getLanguage.call(this)});var i=void 0;if(Xr.is.string(this.config.selectors.controls.container)&&(i=document.querySelector(this.config.selectors.controls.container)),Xr.is.element(i)||(i=this.elements.container),Xr.is.element(n)?i.appendChild(n):i.insertAdjacentHTML("beforeend",n),Xr.is.element(this.elements.controls)||Xr.findElements.call(this),window.navigator.userAgent.includes("Edge")&&Xr.repaint(i),this.config.tooltips.controls){var r=Xr.getElements.call(this,[this.config.selectors.controls.wrapper," ",this.config.selectors.labels," .",this.config.classNames.hidden].join(""));Array.from(r).forEach(function(t){Xr.toggleClass(t,e.config.classNames.hidden,!1),Xr.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute("role","tooltip")})}}},uo=Xr.getBrowser(),ho=function(){function e(t){Yr(this,e),this.player=t,this.lastKey=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.firstTouch=this.firstTouch.bind(this)}return Kr(e,[{key:"handleKey",value:function(e){var t=this,n=e.keyCode?e.keyCode:e.which,i="keydown"===e.type,r=i&&n===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&Xr.is.number(n)){if(i){var o=Xr.getFocusElement();if(Xr.is.element(o)&&Xr.matches(o,this.player.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(n)&&(e.preventDefault(),e.stopPropagation()),n){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:r||(t.player.currentTime=t.player.duration/10*(n-48));break;case 32:case 75:r||this.player.togglePlay();break;case 38:this.player.increaseVolume(.1);break;case 40:this.player.decreaseVolume(.1);break;case 77:r||(this.player.muted=!this.player.muted);break;case 39:this.player.fastForward();break;case 37:this.player.rewind();break;case 70:this.player.fullscreen.toggle();break;case 67:r||this.player.toggleCaptions();break;case 76:this.player.loop=!this.player.loop}!this.player.fullscreen.enabled&&this.player.fullscreen.active&&27===n&&this.player.fullscreen.toggle(),this.lastKey=n}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){co.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){this.player.touch=!0,Xr.toggleClass(this.player.elements.container,this.player.config.classNames.isTouch,!0),Xr.off(document.body,"touchstart",this.firstTouch)}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.player.config.keyboard.global&&Xr.toggleListener(window,"keydown keyup",this.handleKey,e,!1),Xr.toggleListener(document.body,"click",this.toggleMenu,e),Xr.on(document.body,"touchstart",this.firstTouch)}},{key:"container",value:function(){var e=this;!this.player.config.keyboard.global&&this.player.config.keyboard.focused&&Xr.on(this.player.elements.container,"keydown keyup",this.handleKey,!1),Xr.on(this.player.elements.container,"focusout",function(t){Xr.toggleClass(t.target,e.player.config.classNames.tabFocus,!1)}),Xr.on(this.player.elements.container,"keydown",function(t){9===t.keyCode&&setTimeout(function(){Xr.toggleClass(Xr.getFocusElement(),e.player.config.classNames.tabFocus,!0)},0)}),this.player.config.hideControls&&Xr.on(this.player.elements.container,"mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen",function(t){e.player.toggleControls(t)})}},{key:"media",value:function(){var e=this;if(Xr.on(this.player.media,"timeupdate seeking",function(t){return ao.timeUpdate.call(e.player,t)}),Xr.on(this.player.media,"durationchange loadedmetadata",function(t){return ao.durationUpdate.call(e.player,t)}),Xr.on(this.player.media,"loadeddata",function(){Xr.toggleHidden(e.player.elements.volume,!e.player.hasAudio),Xr.toggleHidden(e.player.elements.buttons.mute,!e.player.hasAudio)}),Xr.on(this.player.media,"ended",function(){e.player.isHTML5&&e.player.isVideo&&e.player.config.showPosterOnEnd&&(e.player.restart(),e.player.media.load())}),Xr.on(this.player.media,"progress playing",function(t){return ao.updateProgress.call(e.player,t)}),Xr.on(this.player.media,"volumechange",function(t){return ao.updateVolume.call(e.player,t)}),Xr.on(this.player.media,"playing play pause ended emptied",function(t){return ao.checkPlaying.call(e.player,t)}),Xr.on(this.player.media,"waiting canplay seeked playing",function(t){return ao.checkLoading.call(e.player,t)}),this.player.supported.ui&&this.player.config.clickToPlay&&!this.player.isAudio){var t=Xr.getElement.call(this.player,"."+this.player.config.classNames.video);if(!Xr.is.element(t))return;Xr.on(t,"click",function(){e.player.config.hideControls&&e.player.touch&&!e.player.paused||(e.player.paused?e.player.play():e.player.ended?(e.player.restart(),e.player.play()):e.player.pause())})}this.player.supported.ui&&this.player.config.disableContextMenu&&Xr.on(this.player.media,"contextmenu",function(e){e.preventDefault()},!1),Xr.on(this.player.media,"volumechange",function(){e.player.storage.set({volume:e.player.volume,muted:e.player.muted})}),Xr.on(this.player.media,"ratechange",function(){co.updateSetting.call(e.player,"speed"),e.player.storage.set({speed:e.player.speed})}),Xr.on(this.player.media,"qualitychange",function(){co.updateSetting.call(e.player,"quality"),e.player.storage.set({quality:e.player.quality})}),Xr.on(this.player.media,"languagechange",function(){co.updateSetting.call(e.player,"captions"),e.player.storage.set({language:e.player.language})}),Xr.on(this.player.media,"captionsenabled captionsdisabled",function(){co.updateSetting.call(e.player,"captions"),e.player.storage.set({captions:e.player.captions.active})}),Xr.on(this.player.media,this.player.config.events.concat(["keyup","keydown"]).join(" "),function(t){var n={};"error"===t.type&&(n=e.player.media.error),Xr.dispatchEvent.call(e.player,e.player.elements.container,t.type,!0,n)})}},{key:"controls",value:function(){var e=this,t=uo.isIE?"change":"input",n=function(t,n,i){var r=e.player.config.listeners[i],o=!0;Xr.is.function(r)&&(o=r.call(e.player,t)),o&&Xr.is.function(n)&&n.call(e.player,t)},i=function(t,i,r,o){var s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=e.player.config.listeners[o],l=Xr.is.function(a);Xr.on(t,i,function(e){return n(e,r,o)},s&&!l)};i(this.player.elements.buttons.play,"click",this.player.togglePlay,"play"),i(this.player.elements.buttons.restart,"click",this.player.restart,"restart"),i(this.player.elements.buttons.rewind,"click",this.player.rewind,"rewind"),i(this.player.elements.buttons.fastForward,"click",this.player.forward,"fastForward"),i(this.player.elements.buttons.mute,"click",function(){e.player.muted=!e.player.muted},"mute"),i(this.player.elements.buttons.captions,"click",this.player.toggleCaptions),i(this.player.elements.buttons.fullscreen,"click",function(){e.player.fullscreen.toggle()},"fullscreen"),i(this.player.elements.buttons.pip,"click",function(){e.player.pip="toggle"},"pip"),i(this.player.elements.buttons.airplay,"click",this.player.airplay,"airplay"),i(this.player.elements.buttons.settings,"click",function(t){co.toggleMenu.call(e.player,t)}),i(this.player.elements.settings.form,"click",function(t){t.stopPropagation(),Xr.matches(t.target,e.player.config.selectors.inputs.language)?n(t,function(){e.player.language=t.target.value},"language"):Xr.matches(t.target,e.player.config.selectors.inputs.quality)?n(t,function(){e.player.quality=t.target.value},"quality"):Xr.matches(t.target,e.player.config.selectors.inputs.speed)?n(t,function(){e.player.speed=parseFloat(t.target.value)},"speed"):co.showTab.call(e.player,t)}),i(this.player.elements.inputs.seek,t,function(t){e.player.currentTime=t.target.value/t.target.max*e.player.duration},"seek"),this.player.config.toggleInvert&&!Xr.is.element(this.player.elements.display.duration)&&i(this.player.elements.display.currentTime,"click",function(){0!==e.player.currentTime&&(e.player.config.invertTime=!e.player.config.invertTime,ao.timeUpdate.call(e.player))}),i(this.player.elements.inputs.volume,t,function(t){e.player.volume=t.target.value},"volume"),uo.isWebkit&&i(Xr.getElements.call(this.player,'input[type="range"]'),"input",function(t){co.updateRangeFill.call(e.player,t.target)}),i(this.player.elements.progress,"mouseenter mouseleave mousemove",function(t){return co.updateSeekTooltip.call(e.player,t)}),this.player.config.hideControls&&(i(this.player.elements.controls,"mouseenter mouseleave",function(t){e.player.elements.controls.hover=!e.player.touch&&"mouseenter"===t.type}),i(this.player.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.player.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),i(this.player.elements.controls,"focusin focusout",function(t){e.player.toggleControls(t)})),i(this.player.elements.inputs.volume,"wheel",function(t){var n=t.webkitDirectionInvertedFromDevice,i=0;(t.deltaY<0||t.deltaX>0)&&(n?(e.player.decreaseVolume(.02),i=-1):(e.player.increaseVolume(.02),i=1)),(t.deltaY>0||t.deltaX<0)&&(n?(e.player.increaseVolume(.02),i=1):(e.player.decreaseVolume(.02),i=-1)),(1===i&&e.player.media.volume<1||-1===i&&e.player.media.volume>0)&&t.preventDefault()},"volume",!1)}},{key:"clear",value:function(){this.global(!1)}}]),e}(),fo=function(){function e(t){Yr(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return Kr(e,[{key:"get",value:function(t){if(!e.supported)return null;var n=window.localStorage.getItem(this.key);if(Xr.is.empty(n))return null;var i=JSON.parse(n);return Xr.is.string(t)&&t.length?i[t]:i}},{key:"set",value:function(t){if(e.supported&&this.enabled&&Xr.is.object(t)){var n=this.get();Xr.is.empty(n)&&(n={}),Xr.extend(n,t),window.localStorage.setItem(this.key,JSON.stringify(n))}}}],[{key:"supported",get:function(){try{if(!("localStorage"in window))return!1;return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}(),po=function(){function e(t){var n=this;Yr(this,e),this.player=t,this.publisherId=t.config.ads.publisherId,this.enabled=t.isHTML5&&t.isVideo&&t.config.ads.enabled&&Xr.is.string(this.publisherId)&&this.publisherId.length,this.playing=!1,this.initialized=!1,this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.managerPromise=new Promise(function(e,t){n.on("loaded",e),n.on("error",t)}),this.load()}return Kr(e,[{key:"load",value:function(){var e=this;this.enabled&&(Xr.is.object(window.google)&&Xr.is.object(window.google.ima)?this.ready():Xr.loadScript(this.player.config.urls.googleIMA.api).then(function(){e.ready()}).catch(function(){e.trigger("error",new Error("Google IMA SDK failed to load"))}))}},{key:"ready",value:function(){var e=this;this.startSafetyTimer(12e3,"ready()"),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.listeners(),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=Xr.createElement("div",{class:this.player.config.classNames.ads}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:"requestAds",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var n=new google.ima.AdsRequest;n.adTagUrl=this.tagUrl,n.linearAdSlotWidth=t.offsetWidth,n.linearAdSlotHeight=t.offsetHeight,n.nonLinearAdSlotWidth=t.offsetWidth,n.nonLinearAdSlotHeight=t.offsetHeight,n.forceNonLinearFullSlot=!1,this.loader.requestAds(n)}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=setInterval(function(){var t=Xr.formatTime(Math.max(e.manager.getRemainingTime(),0)),n=so("advertisement",e.player.config)+" - "+t;e.elements.container.setAttribute("data-badge-text",n)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,n=new google.ima.AdsRenderingSettings;n.restoreCustomPlaybackStateOnAdBreakComplete=!0,n.enablePreloading=!0,this.manager=e.getAdsManager(this.player,n),this.cuePoints=this.manager.getCuePoints(),this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var n=t.player.elements.progress;if(n){var i=100/t.player.duration*e,r=Xr.createElement("span",{class:t.player.config.classNames.cues});r.style.left=i.toString()+"%",n.appendChild(r)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.trigger("loaded")}},{key:"onAdEvent",value:function(e){var t=this,n=this.player.elements.container,i=e.getAd(),r=function(e){var n="ads"+e.replace(/_/g,"").toLowerCase();Xr.dispatchEvent.call(t.player,t.player.media,n)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.trigger("loaded"),r(e.type),this.pollCountdown(!0),i.isLinear()||(i.width=n.offsetWidth,i.height=n.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:r(e.type),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:r(e.type),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:r(e.type),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:case google.ima.AdEvent.Type.MIDPOINT:case google.ima.AdEvent.Type.COMPLETE:case google.ima.AdEvent.Type.IMPRESSION:case google.ima.AdEvent.Type.CLICK:r(e.type)}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.warn("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,n=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return n=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;e.cuePoints.forEach(function(i,r){n<i&&i<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(r,1))})}),window.addEventListener("resize",function(){e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.resumeContent(),this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}}).catch(function(){})}},{key:"resumeContent",value:function(){this.elements.container.style.zIndex="",this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){this.elements.container.style.zIndex=3,this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.trigger("error"),this.loadAds()}},{key:"loadAds",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on("loaded",t),e.player.debug.log(e.manager)}),e.requestAds()}).catch(function(){})}},{key:"trigger",value:function(e){for(var t=this,n=arguments.length,i=Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];var o=this.events[e];Xr.is.array(o)&&o.forEach(function(e){Xr.is.function(e)&&e.apply(t,i)})}},{key:"on",value:function(e,t){return Xr.is.array(this.events[e])||(this.events[e]=[]),this.events[e].push(t),this}},{key:"startSafetyTimer",value:function(e,t){var n=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=setTimeout(function(){n.cancel(),n.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){Xr.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:"tagUrl",get:function(){var e={AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId};return"https://go.aniview.com/api/adserver6/vast/?"+Xr.buildUrlParams(e)}}]),e}(),go={setup:function(){var e=this;Xr.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),go.setAspectRatio.call(this),Xr.is.object(window.YT)&&Xr.is.function(window.YT.Player)?go.ready.call(this):(Xr.loadScript(this.config.urls.youtube.api).catch(function(t){e.debug.warn("YouTube API failed to load",t)}),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){go.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(Xr.is.function(this.embed.getVideoData)){var n=this.embed.getVideoData().title;if(Xr.is.empty(n))return this.config.title=n,void ao.setTitle.call(this)}var i=this.config.keys.google;if(Xr.is.string(i)&&!Xr.is.empty(i)){var r="https://www.googleapis.com/youtube/v3/videos?id="+e+"&key="+i+"&fields=items(snippet(title))&part=snippet";Xr.fetch(r).then(function(e){Xr.is.object(e)&&(t.config.title=e.items[0].snippet.title,ao.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(Xr.is.empty(t)||!t.startsWith("youtube-")){var n=e.media.getAttribute("src");Xr.is.empty(n)&&(n=e.media.getAttribute(this.config.attributes.embed.id));var i=Xr.parseYouTubeId(n),r=Xr.generateId(e.provider),o=Xr.createElement("div",{id:r});e.media=Xr.replaceElement(o,e.media),e.embed=new window.YT.Player(r,{videoId:i,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!Xr.is.object(e.media.error)){var n={code:t.data};switch(t.data){case 2:n.message="The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.";break;case 5:n.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";break;case 100:n.message="The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.";break;case 101:case 150:n.message="The owner of the requested video does not allow it to be played in embedded players.";break;default:n.message="An unknown error occured"}e.media.error=n,Xr.dispatchEvent.call(e,e.media,"error")}},onPlaybackQualityChange:function(t){var n=t.target;e.media.quality=n.getPlaybackQuality(),Xr.dispatchEvent.call(e,e.media,"qualitychange")},onPlaybackRateChange:function(t){var n=t.target;e.media.playbackRate=n.getPlaybackRate(),Xr.dispatchEvent.call(e,e.media,"ratechange")},onReady:function(t){var n=t.target;go.getTitle.call(e,i),e.media.play=function(){n.playVideo()},e.media.pause=function(){n.pauseVideo()},e.media.stop=function(){n.stopVideo()},e.media.duration=n.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(n.getCurrentTime())},set:function(t){e.media.seeking=!0,Xr.dispatchEvent.call(e,e.media,"seeking"),n.seekTo(t)}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return n.getPlaybackRate()},set:function(e){n.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return n.getPlaybackQuality()},set:function(t){Xr.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:t}),n.setPlaybackQuality(t)}});var r=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return r},set:function(t){r=t,n.setVolume(100*r),Xr.dispatchEvent.call(e,e.media,"volumechange")}});var o=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return o},set:function(t){var i=Xr.is.boolean(t)?t:o;o=i,n[i?"mute":"unMute"](),Xr.dispatchEvent.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return n.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=n.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),Xr.dispatchEvent.call(e,e.media,"timeupdate"),Xr.dispatchEvent.call(e,e.media,"durationchange"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval(function(){e.media.buffered=n.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&Xr.dispatchEvent.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),Xr.dispatchEvent.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return ao.build.call(e)},50)},onStateChange:function(t){var n=t.target;switch(clearInterval(e.timers.playing),t.data){case-1:Xr.dispatchEvent.call(e,e.media,"timeupdate"),e.media.buffered=n.getVideoLoadedFraction(),Xr.dispatchEvent.call(e,e.media,"progress");break;case 0:e.media.paused=!0,e.media.loop?(n.stopVideo(),n.playVideo()):Xr.dispatchEvent.call(e,e.media,"ended");break;case 1:e.media.seeking&&Xr.dispatchEvent.call(e,e.media,"seeked"),e.media.seeking=!1,e.media.paused&&Xr.dispatchEvent.call(e,e.media,"play"),e.media.paused=!1,Xr.dispatchEvent.call(e,e.media,"playing"),e.timers.playing=setInterval(function(){Xr.dispatchEvent.call(e,e.media,"timeupdate")},50),e.media.duration!==n.getDuration()&&(e.media.duration=n.getDuration(),Xr.dispatchEvent.call(e,e.media,"durationchange")),co.setQualityMenu.call(e,n.getAvailableQualityLevels());break;case 2:e.media.paused=!0,Xr.dispatchEvent.call(e,e.media,"pause")}Xr.dispatchEvent.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},mo={setup:function(){var e=this;Xr.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),mo.setAspectRatio.call(this),Xr.is.object(window.Vimeo)?mo.ready.call(this):Xr.loadScript(this.config.urls.vimeo.api).then(function(){mo.ready.call(e)}).catch(function(t){e.debug.warn("Vimeo API failed to load",t)})},setAspectRatio:function(e){var t=Xr.is.string(e)?e.split(":"):this.config.ratio.split(":"),n=100/t[0]*t[1],i=(240-n)/4.8;this.elements.wrapper.style.paddingBottom=n+"%",this.media.style.transform="translateY(-"+i+"%)"},ready:function(){var e=this,t=this,n={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media"},i=Xr.buildUrlParams(n),r=t.media.getAttribute("src");Xr.is.empty(r)&&(r=t.media.getAttribute(this.config.attributes.embed.id));var o=Xr.parseVimeoId(r),s=Xr.createElement("iframe"),a="https://player.vimeo.com/video/"+o+"?"+i;s.setAttribute("src",a),s.setAttribute("allowfullscreen",""),s.setAttribute("allowtransparency",""),s.setAttribute("allow","autoplay");var l=Xr.createElement("div");l.appendChild(s),t.media=Xr.replaceElement(l,t.media),t.embed=new window.Vimeo.Player(s),t.media.paused=!0,t.media.currentTime=0,t.media.play=function(){t.embed.play().then(function(){t.media.paused=!1})},t.media.pause=function(){t.embed.pause().then(function(){t.media.paused=!0})},t.media.stop=function(){t.pause(),t.currentTime=0};var c=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return c},set:function(e){var n=t.media.paused;t.media.seeking=!0,Xr.dispatchEvent.call(t,t.media,"seeking"),t.embed.setCurrentTime(e),n&&t.pause()}});var u=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return u},set:function(e){t.embed.setPlaybackRate(e).then(function(){u=e,Xr.dispatchEvent.call(t,t.media,"ratechange")})}});var h=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return h},set:function(e){t.embed.setVolume(e).then(function(){h=e,Xr.dispatchEvent.call(t,t.media,"volumechange")})}});var d=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return d},set:function(e){var n=!!Xr.is.boolean(e)&&e;t.embed.setVolume(n?0:t.config.volume).then(function(){d=n,Xr.dispatchEvent.call(t,t.media,"volumechange")})}});var f=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return f},set:function(e){var n=Xr.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(n).then(function(){f=n})}});var p=void 0;t.embed.getVideoUrl().then(function(e){p=e}),Object.defineProperty(t.media,"currentSrc",{get:function(){return p}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var n=Xr.getAspectRatio(t[0],t[1]);mo.setAspectRatio.call(e,n)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(n){t.config.title=n,ao.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){c=e,Xr.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,Xr.dispatchEvent.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,oo.setup.call(t)}),t.embed.on("cuechange",function(e){var n=null;e.cues.length&&(n=Xr.stripHTML(e.cues[0].text)),oo.setText.call(t,n)}),t.embed.on("loaded",function(){Xr.is.element(t.embed.element)&&t.supported.ui&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){t.media.paused&&Xr.dispatchEvent.call(t,t.media,"play"),t.media.paused=!1,Xr.dispatchEvent.call(t,t.media,"playing")}),t.embed.on("pause",function(){t.media.paused=!0,Xr.dispatchEvent.call(t,t.media,"pause")}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,c=e.seconds,Xr.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,Xr.dispatchEvent.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&Xr.dispatchEvent.call(t,t.media,"canplaythrough")}),t.embed.on("seeked",function(){t.media.seeking=!1,Xr.dispatchEvent.call(t,t.media,"seeked"),Xr.dispatchEvent.call(t,t.media,"play")}),t.embed.on("ended",function(){t.media.paused=!0,Xr.dispatchEvent.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,Xr.dispatchEvent.call(t,t.media,"error")}),setTimeout(function(){return ao.build.call(t)},0)}},yo=Xr.getBrowser(),vo={setup:function(){if(this.media)if(Xr.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),Xr.toggleClass(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&Xr.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.supported.ui&&(Xr.toggleClass(this.elements.container,this.config.classNames.pip.supported,$r.pip&&this.isHTML5&&this.isVideo),Xr.toggleClass(this.elements.container,this.config.classNames.airplay.supported,$r.airplay&&this.isHTML5),Xr.toggleClass(this.elements.container,this.config.classNames.stopped,this.config.autoplay),Xr.toggleClass(this.elements.container,this.config.classNames.isIos,yo.isIos),Xr.toggleClass(this.elements.container,this.config.classNames.isTouch,this.touch)),this.isVideo&&(this.elements.wrapper=Xr.createElement("div",{class:this.config.classNames.video}),Xr.wrap(this.media,this.elements.wrapper)),this.isEmbed)switch(this.provider){case"youtube":go.setup.call(this);break;case"vimeo":mo.setup.call(this)}else this.isHTML5&&ao.setTitle.call(this);else this.debug.warn("No media element found!")},cancelRequests:function(){this.isHTML5&&(Xr.removeElement(this.media.querySelectorAll("source")),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}},bo={insertElements:function(e,t){var n=this;Xr.is.string(t)?Xr.insertElement(e,this.media,{src:t}):Xr.is.array(t)&&t.forEach(function(t){Xr.insertElement(e,n.media,t)})},change:function(e){var t=this;Xr.is.object(e)&&"sources"in e&&e.sources.length?(vo.cancelRequests.call(this),this.destroy.call(this,function(){switch(Xr.removeElement(t.media),t.media=null,Xr.is.element(t.elements.container)&&t.elements.container.removeAttribute("class"),t.type=e.type,t.provider=Xr.is.empty(e.sources[0].provider)?Hr.html5:e.sources[0].provider,t.supported=$r.check(t.type,t.provider,t.config.inline),t.provider+":"+t.type){case"html5:video":t.media=Xr.createElement("video");break;case"html5:audio":t.media=Xr.createElement("audio");break;case"youtube:video":case"vimeo:video":t.media=Xr.createElement("div",{src:e.sources[0].src})}t.elements.container.appendChild(t.media),Xr.is.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),"poster"in e&&t.media.setAttribute("poster",e.poster),t.config.loop.active&&t.media.setAttribute("loop",""),t.config.muted&&t.media.setAttribute("muted",""),t.config.inline&&t.media.setAttribute("playsinline","")),ao.addStyleHook.call(t),t.isHTML5&&bo.insertElements.call(t,"source",e.sources),t.config.title=e.title,vo.setup.call(t),t.isHTML5&&("tracks"in e&&bo.insertElements.call(t,"track",e.tracks),t.media.load()),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&ao.build.call(t),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}};return function(){function e(t,n){var i=this;if(Yr(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=$r.touch,this.media=t,Xr.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||Xr.is.nodeList(this.media)||Xr.is.array(this.media))&&(this.media=this.media[0]),this.config=Xr.extend({},Gr,n,function(){try{return JSON.parse(i.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:null},this.fullscreen={active:!1},this.options={speed:[],quality:[]},this.debug=new eo(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",$r),!Xr.is.nullOrUndefined(this.media)&&Xr.is.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if($r.check().api){this.elements.original=this.media.cloneNode(!0);var r=this.media.tagName.toLowerCase(),o=null,s=null,a=null;switch(r){case"div":if(o=this.media.querySelector("iframe"),Xr.is.element(o)){if(s=o.getAttribute("src"),this.provider=Xr.getProviderByUrl(s),this.elements.container=this.media,this.media=o,this.elements.container.className="",a=Xr.getUrlParams(s),!Xr.is.empty(a)){var l=["1","true"];l.includes(a.autoplay)&&(this.config.autoplay=!0),l.includes(a.playsinline)&&(this.config.inline=!0),l.includes(a.loop)&&(this.config.loop.active=!0)}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(Xr.is.empty(this.provider)||!Object.keys(Hr).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=Wr.video;break;case"video":case"audio":this.type=r,this.provider=Hr.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("playsinline")&&(this.config.inline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=$r.check(this.type,this.provider,this.config.inline),this.supported.api?(this.listeners=new ho(this),this.storage=new fo(this),this.media.plyr=this,Xr.is.element(this.elements.container)||(this.elements.container=Xr.createElement("div"),Xr.wrap(this.media,this.elements.container)),this.elements.container.setAttribute("tabindex",0),ao.addStyleHook.call(this),vo.setup.call(this),this.config.debug&&Xr.on(this.elements.container,this.config.events.join(" "),function(e){i.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&ao.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new ro(this),this.ads=new po(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 Kr(e,[{key:"play",value:function(){var e=this;return Xr.is.function(this.media.play)?this.ads.enabled&&!this.ads.initialized?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&&Xr.is.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){(Xr.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?this.media.load():this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(Xr.is.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(Xr.is.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(Xr.is.number(e)?e:1)}},{key:"decreaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-(Xr.is.number(e)?e:1)}},{key:"toggleCaptions",value:function(e){if(this.supported.ui&&Xr.is.element(this.elements.buttons.captions)){var t=Xr.is.boolean(e)?e:-1===this.elements.container.className.indexOf(this.config.classNames.captions.active);this.captions.active!==t&&(this.captions.active=t,Xr.toggleState(this.elements.buttons.captions,this.captions.active),Xr.toggleClass(this.elements.container,this.config.classNames.captions.active,this.captions.active),Xr.dispatchEvent.call(this,this.media,this.captions.active?"captionsenabled":"captionsdisabled"))}}},{key:"airplay",value:function(){$r.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){var t=this;if(Xr.is.element(this.elements.controls)&&this.supported.ui&&!this.isAudio){var n=0,i=e,r=!1;if(!Xr.is.boolean(e))if(Xr.is.event(e)){r="enterfullscreen"===e.type;i=["touchstart","touchmove","mouseenter","mousemove","focusin"].includes(e.type),["touchmove","touchend","mousemove"].includes(e.type)&&(n=2e3),this.touch||"focusin"!==e.type||(n=3e3,Xr.toggleClass(this.elements.controls,this.config.classNames.noTransition,!0))}else i=Xr.hasClass(this.elements.container,this.config.classNames.hideControls);if(clearTimeout(this.timers.controls),i||this.paused||this.loading){if(Xr.toggleClass(this.elements.container,this.config.classNames.hideControls,!1)&&Xr.dispatchEvent.call(this,this.media,"controlsshown"),this.paused||this.loading)return;this.touch&&(n=3e3)}i&&!this.playing||(this.timers.controls=setTimeout(function(){(!t.elements.controls.pressed&&!t.elements.controls.hover||r)&&(Xr.hasClass(t.elements.container,t.config.classNames.hideControls)||Xr.toggleClass(t.elements.controls,t.config.classNames.noTransition,!1),Xr.toggleClass(t.elements.container,t.config.classNames.hideControls,!0)&&(Xr.dispatchEvent.call(t,t.media,"controlshidden"),t.config.controls.includes("settings")&&!Xr.is.empty(t.config.settings)&&co.toggleMenu.call(t,!1)))},n))}}},{key:"on",value:function(e,t){Xr.on(this.elements.container,e,t)}},{key:"off",value:function(e,t){Xr.off(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var i=function(){document.body.style.overflow="",t.embed=null,n?(Object.keys(t.elements).length&&(Xr.removeElement(t.elements.buttons.play),Xr.removeElement(t.elements.captions),Xr.removeElement(t.elements.controls),Xr.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),Xr.is.function(e)&&e()):(t.listeners.clear(),Xr.replaceElement(t.elements.original,t.elements.container),Xr.dispatchEvent.call(t,t.elements.original,"destroyed",!0),Xr.is.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};switch(this.stop(),this.provider+":"+this.type){case"html5:video":case"html5:audio":clearTimeout(this.timers.loading),ao.toggleNativeControls.call(this,!0),i();break;case"youtube:video":clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&Xr.is.function(this.embed.destroy)&&this.embed.destroy(),i();break;case"vimeo:video":null!==this.embed&&this.embed.unload().then(i),setTimeout(i,200)}}}},{key:"supports",value:function(e){return $r.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===Hr.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===Hr.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===Hr.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===Wr.video)}},{key:"isAudio",get:function(){return Boolean(this.type===Wr.audio)}},{key:"paused",get:function(){return Boolean(this.media.paused)}},{key:"playing",get:function(){return Boolean(!this.paused&&!this.ended&&(!this.isHTML5||this.media.readyState>2))}},{key:"ended",get:function(){return Boolean(this.media.ended)}},{key:"currentTime",set:function(e){var t=0;Xr.is.number(e)&&(t=e),t<0?t=0:t>this.duration&&(t=this.duration),this.media.currentTime=parseFloat(t.toFixed(4)),this.debug.log("Seeking to "+this.currentTime+" seconds")},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return Xr.is.number(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}},{key:"seeking",get:function(){return Boolean(this.media.seeking)}},{key:"duration",get:function(){var e=parseInt(this.config.duration,10),t=this.media?Number(this.media.duration):0;return Number.isNaN(e)?t:e}},{key:"volume",set:function(e){var t=e;Xr.is.string(t)&&(t=Number(t)),Xr.is.number(t)||(t=this.storage.get("volume")),Xr.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;Xr.is.boolean(t)||(t=this.storage.get("muted")),Xr.is.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return Boolean(this.media.muted)}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;Xr.is.number(e)&&(t=e),Xr.is.number(t)||(t=this.storage.get("speed")),Xr.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=null;Xr.is.string(e)&&(t=e),Xr.is.string(t)||(t=this.storage.get("quality")),Xr.is.string(t)||(t=this.config.quality.selected),this.options.quality.includes(t)?(this.config.quality.selected=t,this.media.quality=t):this.debug.warn("Unsupported quality option ("+t+")")},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=Xr.is.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return Boolean(this.media.loop)}},{key:"source",set:function(e){bo.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isHTML5&&this.isVideo?Xr.is.string(e)&&this.media.setAttribute("poster",e):this.debug.warn("Poster can only be set on HTML5 video")},get:function(){return this.isHTML5&&this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=Xr.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:"language",set:function(e){if(Xr.is.string(e)&&(this.toggleCaptions(!Xr.is.empty(e)),!Xr.is.empty(e))){var t=e.toLowerCase();this.language!==t&&(this.captions.language=t,oo.setText.call(this,null),oo.setLanguage.call(this),Xr.dispatchEvent.call(this,this.media,"languagechange"))}},get:function(){return this.captions.language}},{key:"pip",set:function(e){var t="picture-in-picture",n="inline";if($r.pip){var i=Xr.is.boolean(e)?e:this.pip===n;this.media.webkitSetPresentationMode(i?t:n)}},get:function(){return $r.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,n){return $r.check(e,t,n)}},{key:"loadSprite",value:function(e,t){return Xr.loadSprite(e,t)}}]),e}()});
//# sourceMappingURL=plyr.polyfilled.min.js.map
diff --git a/dist/plyr.polyfilled.min.js.map b/dist/plyr.polyfilled.min.js.map
index 3f809ff5..cfdcef6c 100644
--- a/dist/plyr.polyfilled.min.js.map
+++ b/dist/plyr.polyfilled.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["node_modules/core-js/modules/_global.js","node_modules/core-js/modules/_core.js","node_modules/core-js/modules/_is-object.js","node_modules/core-js/modules/_an-object.js","node_modules/core-js/modules/_fails.js","node_modules/core-js/modules/_descriptors.js","node_modules/core-js/modules/_dom-create.js","node_modules/core-js/modules/_ie8-dom-define.js","node_modules/core-js/modules/_to-primitive.js","node_modules/core-js/modules/_object-dp.js","node_modules/core-js/modules/_property-desc.js","node_modules/core-js/modules/_hide.js","node_modules/core-js/modules/_has.js","node_modules/core-js/modules/_uid.js","node_modules/core-js/modules/_redefine.js","node_modules/core-js/modules/_a-function.js","node_modules/core-js/modules/_ctx.js","node_modules/core-js/modules/_export.js","node_modules/core-js/modules/_typed.js","node_modules/core-js/modules/_redefine-all.js","node_modules/core-js/modules/_an-instance.js","node_modules/core-js/modules/_to-integer.js","node_modules/core-js/modules/_to-length.js","node_modules/core-js/modules/_to-index.js","node_modules/core-js/modules/_cof.js","node_modules/core-js/modules/_iobject.js","node_modules/core-js/modules/_defined.js","node_modules/core-js/modules/_to-iobject.js","node_modules/core-js/modules/_to-absolute-index.js","node_modules/core-js/modules/_array-includes.js","node_modules/core-js/modules/_shared.js","node_modules/core-js/modules/_shared-key.js","node_modules/core-js/modules/_object-keys-internal.js","node_modules/core-js/modules/_enum-bug-keys.js","node_modules/core-js/modules/_object-gopn.js","node_modules/core-js/modules/_to-object.js","node_modules/core-js/modules/_array-fill.js","node_modules/core-js/modules/_wks.js","node_modules/core-js/modules/_set-to-string-tag.js","node_modules/core-js/modules/_typed-buffer.js","node_modules/core-js/modules/_species-constructor.js","node_modules/core-js/modules/_set-species.js","node_modules/core-js/modules/es6.typed.array-buffer.js","node_modules/core-js/modules/_classof.js","node_modules/core-js/modules/_iterators.js","node_modules/core-js/modules/_is-array-iter.js","node_modules/core-js/modules/_object-keys.js","node_modules/core-js/modules/_object-dps.js","node_modules/core-js/modules/_html.js","node_modules/core-js/modules/_object-create.js","node_modules/core-js/modules/_object-gpo.js","node_modules/core-js/modules/core.get-iterator-method.js","node_modules/core-js/modules/_is-array.js","node_modules/core-js/modules/_array-species-constructor.js","node_modules/core-js/modules/_array-species-create.js","node_modules/core-js/modules/_array-methods.js","node_modules/core-js/modules/_add-to-unscopables.js","node_modules/core-js/modules/_iter-step.js","node_modules/core-js/modules/_iter-create.js","node_modules/core-js/modules/_iter-define.js","node_modules/core-js/modules/es6.array.iterator.js","node_modules/core-js/modules/_iter-detect.js","node_modules/core-js/modules/_array-copy-within.js","node_modules/core-js/modules/_object-pie.js","node_modules/core-js/modules/_object-gopd.js","node_modules/core-js/modules/_typed-array.js","node_modules/core-js/modules/es6.typed.int8-array.js","node_modules/core-js/modules/es6.typed.uint8-array.js","node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","node_modules/core-js/modules/es6.typed.int16-array.js","node_modules/core-js/modules/es6.typed.uint16-array.js","node_modules/core-js/modules/es6.typed.int32-array.js","node_modules/core-js/modules/es6.typed.uint32-array.js","node_modules/core-js/modules/es6.typed.float32-array.js","node_modules/core-js/modules/es6.typed.float64-array.js","node_modules/core-js/modules/_iter-call.js","node_modules/core-js/modules/_for-of.js","node_modules/core-js/modules/_meta.js","node_modules/core-js/modules/_validate-collection.js","node_modules/core-js/modules/_collection-strong.js","node_modules/core-js/modules/_set-proto.js","node_modules/core-js/modules/_inherit-if-required.js","node_modules/core-js/modules/_collection.js","node_modules/core-js/modules/es6.map.js","node_modules/core-js/modules/es6.set.js","node_modules/core-js/modules/_object-gops.js","node_modules/core-js/modules/_object-assign.js","node_modules/core-js/modules/_collection-weak.js","node_modules/core-js/modules/es6.weak-map.js","node_modules/core-js/modules/es6.weak-set.js","node_modules/core-js/modules/es6.reflect.apply.js","node_modules/core-js/modules/_invoke.js","node_modules/core-js/modules/_bind.js","node_modules/core-js/modules/es6.reflect.construct.js","node_modules/core-js/modules/es6.reflect.define-property.js","node_modules/core-js/modules/es6.reflect.delete-property.js","node_modules/core-js/modules/es6.reflect.get.js","node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","node_modules/core-js/modules/es6.reflect.get-prototype-of.js","node_modules/core-js/modules/es6.reflect.has.js","node_modules/core-js/modules/es6.reflect.is-extensible.js","node_modules/core-js/modules/_own-keys.js","node_modules/core-js/modules/es6.reflect.own-keys.js","node_modules/core-js/modules/es6.reflect.prevent-extensions.js","node_modules/core-js/modules/es6.reflect.set.js","node_modules/core-js/modules/es6.reflect.set-prototype-of.js","node_modules/core-js/modules/_task.js","node_modules/core-js/modules/_microtask.js","node_modules/core-js/modules/_new-promise-capability.js","node_modules/core-js/modules/es6.promise.js","node_modules/core-js/modules/_perform.js","node_modules/core-js/modules/_promise-resolve.js","node_modules/core-js/modules/_wks-ext.js","node_modules/core-js/modules/_wks-define.js","node_modules/core-js/modules/_object-gopn-ext.js","node_modules/core-js/modules/es6.symbol.js","node_modules/core-js/modules/_enum-keys.js","node_modules/core-js/modules/_object-sap.js","node_modules/core-js/modules/es6.object.freeze.js","node_modules/core-js/modules/es6.object.seal.js","node_modules/core-js/modules/es6.object.prevent-extensions.js","node_modules/core-js/modules/es6.object.is-frozen.js","node_modules/core-js/modules/es6.object.is-sealed.js","node_modules/core-js/modules/es6.object.is-extensible.js","node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","node_modules/core-js/modules/es6.object.get-prototype-of.js","node_modules/core-js/modules/es6.object.keys.js","node_modules/core-js/modules/es6.object.get-own-property-names.js","node_modules/core-js/modules/es6.object.assign.js","node_modules/core-js/modules/_same-value.js","node_modules/core-js/modules/es6.object.is.js","node_modules/core-js/modules/es6.function.name.js","node_modules/core-js/modules/es6.string.raw.js","node_modules/core-js/modules/es6.string.from-code-point.js","node_modules/core-js/modules/_string-at.js","node_modules/core-js/modules/es6.string.code-point-at.js","node_modules/core-js/modules/_string-repeat.js","node_modules/core-js/modules/es6.string.repeat.js","node_modules/core-js/modules/_is-regexp.js","node_modules/core-js/modules/_string-context.js","node_modules/core-js/modules/_fails-is-regexp.js","node_modules/core-js/modules/es6.string.starts-with.js","node_modules/core-js/modules/es6.string.ends-with.js","node_modules/core-js/modules/es6.string.includes.js","node_modules/core-js/modules/es6.regexp.flags.js","node_modules/core-js/modules/_flags.js","node_modules/core-js/modules/_fix-re-wks.js","node_modules/core-js/modules/es6.regexp.match.js","node_modules/core-js/modules/es6.regexp.replace.js","node_modules/core-js/modules/es6.regexp.split.js","node_modules/core-js/modules/es6.regexp.search.js","node_modules/core-js/modules/_create-property.js","node_modules/core-js/modules/es6.array.from.js","node_modules/core-js/modules/es6.array.of.js","node_modules/core-js/modules/es6.array.copy-within.js","node_modules/core-js/modules/es6.array.find.js","node_modules/core-js/modules/es6.array.find-index.js","node_modules/core-js/modules/es6.array.fill.js","node_modules/core-js/modules/es6.number.is-finite.js","node_modules/core-js/modules/_is-integer.js","node_modules/core-js/modules/es6.number.is-integer.js","node_modules/core-js/modules/es6.number.is-safe-integer.js","node_modules/core-js/modules/es6.number.is-nan.js","node_modules/core-js/modules/es6.number.epsilon.js","node_modules/core-js/modules/es6.number.min-safe-integer.js","node_modules/core-js/modules/es6.number.max-safe-integer.js","node_modules/core-js/modules/_math-log1p.js","node_modules/core-js/modules/es6.math.acosh.js","node_modules/core-js/modules/es6.math.asinh.js","node_modules/core-js/modules/es6.math.atanh.js","node_modules/core-js/modules/_math-sign.js","node_modules/core-js/modules/es6.math.cbrt.js","node_modules/core-js/modules/es6.math.clz32.js","node_modules/core-js/modules/es6.math.cosh.js","node_modules/core-js/modules/_math-expm1.js","node_modules/core-js/modules/es6.math.expm1.js","node_modules/core-js/modules/_math-fround.js","node_modules/core-js/modules/es6.math.fround.js","node_modules/core-js/modules/es6.math.hypot.js","node_modules/core-js/modules/es6.math.imul.js","node_modules/core-js/modules/es6.math.log1p.js","node_modules/core-js/modules/es6.math.log10.js","node_modules/core-js/modules/es6.math.log2.js","node_modules/core-js/modules/es6.math.sign.js","node_modules/core-js/modules/es6.math.sinh.js","node_modules/core-js/modules/es6.math.tanh.js","node_modules/core-js/modules/es6.math.trunc.js","node_modules/core-js/modules/es7.array.includes.js","node_modules/core-js/modules/_object-to-array.js","node_modules/core-js/modules/es7.object.values.js","node_modules/core-js/modules/es7.object.entries.js","node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","node_modules/core-js/modules/_string-pad.js","node_modules/core-js/modules/_user-agent.js","node_modules/core-js/modules/es7.string.pad-start.js","node_modules/core-js/modules/es7.string.pad-end.js","node_modules/core-js/modules/web.timers.js","node_modules/core-js/modules/web.immediate.js","node_modules/core-js/modules/web.dom.iterable.js","node_modules/regenerator-runtime/runtime.js","node_modules/custom-event-polyfill/custom-event-polyfill.js","src/js/types.js","src/js/support.js","src/js/defaults.js","node_modules/loadjs/dist/loadjs.umd.js","src/js/utils.js","src/js/console.js","src/js/fullscreen.js","src/js/captions.js","src/js/i18n.js","src/js/ui.js","src/js/controls.js","src/js/listeners.js","src/js/storage.js","src/js/plugins/ads.js","src/js/plugins/youtube.js","src/js/plugins/vimeo.js","src/js/media.js","src/js/source.js","src/js/plyr.js"],"names":["global","module","exports","window","Math","self","Function","__g","core","version","__e","_isObject","it","_anObject","isObject","TypeError","_fails","exec","e","_descriptors","require$$0","Object","defineProperty","get","a","document","is","createElement","_domCreate","_ie8DomDefine","require$$1","require$$2","_toPrimitive","S","fn","val","toString","call","valueOf","dP","O","P","Attributes","anObject","toPrimitive","IE8_DOM_DEFINE","value","_propertyDesc","bitmap","enumerable","configurable","writable","_hide","object","key","f","createDesc","hasOwnProperty","_has","id","px","random","_uid","concat","undefined","SRC","$toString","TPL","split","inspectSource","safe","isFunction","has","hide","join","String","prototype","this","_aFunction","_ctx","that","length","aFunction","b","c","apply","arguments","$export","type","name","source","own","out","exp","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","IS_PROTO","IS_BIND","B","target","expProto","ctx","redefine","U","W","R","Typed","_export","TYPED","uid","VIEW","ABV","ArrayBuffer","DataView","CONSTR","i","TypedArrayConstructors","_typed","_redefineAll","src","_anInstance","Constructor","forbiddenField","ceil","floor","_toInteger","isNaN","min","_toLength","toInteger","_toIndex","number","toLength","RangeError","_cof","slice","_iobject","propertyIsEnumerable","cof","_defined","_toIobject","IObject","defined","max","_toAbsoluteIndex","index","_arrayIncludes","IS_INCLUDES","$this","el","fromIndex","toIObject","toAbsoluteIndex","store","_shared","shared","_sharedKey","arrayIndexOf","IE_PROTO","_objectKeysInternal","names","result","push","_enumBugKeys","hiddenKeys","getOwnPropertyNames","$keys","_toObject","_arrayFill","toObject","aLen","end","endPos","Symbol","USE_SYMBOL","def","TAG","_setToStringTag","tag","stat","gOPN","PROTOTYPE","WRONG_INDEX","$ArrayBuffer","$DataView","Infinity","BaseBuffer","abs","pow","log","LN2","$BUFFER","DESCRIPTORS","$LENGTH","$OFFSET","packIEEE754","mLen","nBytes","m","buffer","Array","eLen","eMax","eBias","rt","s","unpackIEEE754","nBits","NaN","unpackI32","bytes","packI8","packI16","packI32","packF64","packF32","addGetter","C","internal","view","isLittleEndian","intIndex","toIndex","_b","start","pack","reverse","set","conversion","$typed","fails","ArrayBufferProto","anInstance","keys","j","constructor","$setInt8","setInt8","getInt8","redefineAll","byteOffset","setUint8","byteLength","arrayFill","bufferLength","offset","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","setToStringTag","SPECIES","_speciesConstructor","D","_setSpecies","KEY","$isView","isView","$slice","len","first","final","speciesConstructor","viewS","viewT","ARG","_classof","T","tryGet","callee","_iterators","ITERATOR","ArrayProto","_isArrayIter","Iterators","_objectKeys","enumBugKeys","_objectDps","defineProperties","Properties","getKeys","_html","documentElement","Empty","createDict","iframeDocument","iframe","style","display","appendChild","contentWindow","open","write","lt","close","_objectCreate","create","dPs","ObjectProto","_objectGpo","getPrototypeOf","core_getIteratorMethod","getIteratorMethod","classof","_isArray","isArray","arg","_arraySpeciesCreate","original","_arrayMethods","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","asc","callbackfn","res","UNSCOPABLES","_addToUnscopables","_iterStep","done","IteratorPrototype","_iterCreate","NAME","next","descriptor","BUGGY","returnThis","_iterDefine","Base","DEFAULT","IS_SET","FORCED","$iterCreate","methods","getMethod","kind","proto","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","values","es6_array_iterator","iterated","_t","_i","_k","step","Arguments","addToUnscopables","SAFE_CLOSING","_iterDetect","skipClosing","arr","iter","_arrayCopyWithin","copyWithin","to","from","count","inc","gOPD","getOwnPropertyDescriptor","pIE","require$$3","require$$4","require$$5","$buffer","require$$6","require$$7","require$$8","propertyDesc","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","isArrayIter","require$$21","require$$22","require$$23","require$$24","getIterFn","require$$25","require$$26","wks","require$$27","createArrayMethod","require$$28","createArrayIncludes","require$$29","require$$30","ArrayIterators","require$$31","require$$32","$iterDetect","require$$33","setSpecies","require$$34","require$$35","arrayCopyWithin","require$$36","$DP","require$$37","$GOPD","require$$38","Uint8Array","arrayForEach","arrayFilter","arraySome","arrayEvery","arrayFind","arrayFindIndex","arrayIncludes","arrayValues","arrayKeys","arrayEntries","arrayLastIndexOf","lastIndexOf","arrayReduce","reduce","arrayReduceRight","reduceRight","arrayJoin","arraySort","sort","arraySlice","arrayToString","arrayToLocaleString","toLocaleString","TYPED_CONSTRUCTOR","DEF_CONSTRUCTOR","ALL_CONSTRUCTORS","TYPED_ARRAY","$map","allocate","LITTLE_ENDIAN","Uint16Array","FORCED_SET","toOffset","BYTES","validate","speciesFromList","list","fromList","_d","$from","iterator","mapfn","mapping","iterFn","$of","TO_LOCALE_BUG","$toLocaleString","every","fill","filter","find","predicate","findIndex","forEach","indexOf","searchElement","includes","separator","map","middle","some","comparefn","subarray","begin","$begin","BYTES_PER_ELEMENT","$set","arrayLike","$iterators","isTAIndex","$getDesc","$setDesc","desc","$TypedArrayPrototype$","wrapper","CLAMPED","GETTER","SETTER","TypedArray","TAC","TypedArrayPrototype","addElement","data","v","o","getter","round","setter","$offset","$length","klass","$len","l","$nativeIterator","CORRECT_ITER_NAME","$iterator","of","init","_iterCall","ret","BREAK","RETURN","iterable","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","meta","NEED","fastKey","getWeak","onFreeze","_validateCollection","SIZE","getEntry","entry","_f","n","k","_collectionStrong","getConstructor","ADDER","_l","forOf","clear","r","p","delete","prev","setStrong","$iterDefine","check","_setProto","setPrototypeOf","test","buggy","__proto__","_collection","common","IS_WEAK","fixMethod","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","inheritIfRequired","strong","add","getOwnPropertySymbols","$assign","assign","_objectAssign","A","K","getSymbols","gOPS","isEnum","uncaughtFrozenStore","UncaughtFrozenStore","findUncaughtFrozen","splice","_collectionWeak","$has","ufstore","InternalMap","each","weak","tmp","$WeakMap","freeze","method","rApply","Reflect","fApply","thisArgument","argumentsList","L","_invoke","args","un","factories","_bind","bind","partArgs","bound","construct","invoke","rConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","propertyKey","attributes","deleteProperty","receiver","getProto","$isExtensible","_ownKeys","ownKeys","$preventExtensions","V","existingDescriptor","ownDesc","setProto","defer","channel","port","process","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","queue","run","listener","event","nextTick","now","port2","port1","onmessage","postMessage","addEventListener","importScripts","cel","html","removeChild","setTimeout","_task","macrotask","Observer","MutationObserver","WebKitMutationObserver","Promise","isNode","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","resolve","reject","promise","$$resolve","$$reject","_perform","task","microtask","head","last","notify","flush","parent","domain","exit","enter","navigator","standalone","then","toggle","node","createTextNode","observe","characterData","$Promise","empty","newPromiseCapability","newPromiseCapabilityModule","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","isReject","_n","chain","_c","_v","ok","_s","reaction","handler","fail","_h","onHandleUnhandled","onUnhandled","console","unhandled","isUnhandled","perform","emit","onunhandledrejection","reason","error","_a","onrejectionhandled","$reject","_w","$resolve","executor","err","onFulfilled","onRejected","catch","capability","x","promiseCapability","promiseResolve","all","remaining","$index","alreadyCalled","race","_wksDefine","$Symbol","charAt","wksExt","windowNames","getWindowNames","gOPNExt","$JSON","JSON","_stringify","stringify","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","QObject","findChild","setSymbolDesc","$fails","_create","protoDesc","wrap","sym","isSymbol","$defineProperty","$defineProperties","symbols","enumKeys","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","es6Symbols","wellKnownSymbols","wksDefine","for","keyFor","useSetter","useSimple","replacer","$replacer","_objectSap","$freeze","$seal","$isFrozen","$isSealed","$getPrototypeOf","_sameValue","y","FProto","nameRE","match","raw","callSite","tpl","fromCharCode","$fromCodePoint","fromCodePoint","code","TO_STRING","$at","pos","charCodeAt","codePointAt","_stringRepeat","str","repeat","MATCH","_isRegexp","isRegExp","_stringContext","searchString","_failsIsRegexp","re","$startsWith","startsWith","context","search","$endsWith","endsWith","endPosition","flags","RegExp","ignoreCase","multiline","unicode","sticky","_fixReWks","SYMBOL","fns","strfn","rxfn","string","$match","regexp","REPLACE","$replace","searchValue","replaceValue","SPLIT","$split","_split","$push","NPCG","limit","separator2","lastIndex","lastLength","output","lastLastIndex","splitLimit","separatorCopy","replace","SEARCH","$search","_createProperty","createProperty","$find","forced","_isFinite","isFinite","_isInteger","isInteger","isSafeInteger","EPSILON","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","_mathLog1p","log1p","sqrt","$acosh","acosh","Number","MAX_VALUE","$asinh","asinh","$atanh","atanh","_mathSign","sign","cbrt","clz32","LOG2E","cosh","$expm1","expm1","_mathExpm1","EPSILON32","MAX32","MIN32","_mathFround","fround","$abs","$sign","hypot","value1","value2","div","sum","larg","$imul","imul","xn","yn","xl","yl","log10","LOG10E","log2","sinh","tanh","trunc","$includes","_objectToArray","isEntries","$values","getOwnPropertyDescriptors","getDesc","_stringPad","maxLength","fillString","left","stringLength","fillStr","intMaxLength","fillLen","stringFiller","_userAgent","userAgent","padStart","$pad","padEnd","MSIE","time","boundArgs","setInterval","$task","TO_STRING_TAG","ArrayValues","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","collections","explicit","Collection","Op","hasOwn","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","runtime","regeneratorRuntime","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","NativeIteratorPrototype","Gp","GeneratorFunctionPrototype","Generator","GeneratorFunction","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","__await","defineIteratorMethods","AsyncIterator","async","innerFn","outerFn","tryLocsList","pop","Context","reset","skipTempReset","sent","_sent","delegate","tryEntries","resetTryEntry","stop","rootRecord","completion","rval","dispatchException","exception","handle","loc","caught","record","tryLoc","hasCatch","hasFinally","catchLoc","finallyLoc","Error","abrupt","finallyEntry","complete","afterLoc","finish","thrown","delegateYield","resultName","nextLoc","protoGenerator","generator","state","doneResult","delegateResult","maybeInvokeDelegate","tryCatch","makeInvokeMethod","obj","unwrapped","previousPromise","callInvokeWithMethodAndArg","return","info","pushTryEntry","locs","iteratorMethod","ce","CustomEvent","preventDefault","defaultPrevented","params","evt","origPrevent","bubbles","cancelable","detail","createEvent","initCustomEvent","Event","range","providers","types","defaults","language","factory","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","executeCallbacks","depsNotFound","success","loadFile","path","callbackFn","numTries","isCss","doc","maxTries","numRetries","beforeCallbackFn","before","rel","href","onload","onerror","onbeforeload","ev","sheet","cssText","loadjs","paths","arg1","arg2","trim","numWaiting","loadFiles","ready","deps","bundleIds","subscribe","isDefined","utils","input","instanceof","Plyr","Boolean","nullOrUndefined","WeakMap","Element","Text","TextTrackCue","VTTCue","TextTrack","array","nodeList","documentMode","platform","url","responseType","request","XMLHttpRequest","parse","responseText","response","statusText","send","hasId","exists","querySelectorAll","container","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","content","fetch","setItem","injectSprite","innerHTML","body","insertBefore","childNodes","prefix","elements","targets","element","child","cloneNode","parentNode","sibling","nextSibling","text","setAttributes","textContent","removeElement","lastChild","newChild","oldChild","replaceChild","_ref","_ref2","sel","existingAttributes","existing","selector","className","parts","class","contains","classList","removeAttribute","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","duration","currentTime","seekTooltip","classNames","tooltip","debug","warn","toggleNativeControls","focused","activeElement","focusable","trap","keyCode","getFocusElement","shiftKey","focus","on","off","callback","passive","capture","function","Node","toggleListener","events","options","passiveListeners","boolean","plyr","dispatchEvent","toggleState","pressed","getAttribute","current","toFixed","parseInt","displayHours","inverted","formatTime","format","hours","getHours","mins","getMinutes","secs","getSeconds","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","_len","_key","shift","defineProperty$1","extend","toConsumableArray","youtube","vimeo","$2","parser","parseUrl","hash","_hash$split2","decodeURIComponent","encodeURIComponent","fragment","createDocumentFragment","firstChild","innerText","width","height","ratio","getRatio","h","offsetHeight","provider","inline","api","ui","browser","getBrowser","playsInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","transitionEndEvent","matchMedia","noop","Console","enabled","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","overflow","toggleClass","fallback","Fullscreen","_this","stopPropagation","update","native","iosNative","playing","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","fullscreenElement","hasClass","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","exitFullscreen","pre","stored","isYouTube","textTracks","setCaptionsMenu","getAttributesFromSelector","insertAfter","getTracks","tracks","isIE","URL","track","hostname","location","protocol","blob","createObjectURL","setLanguage","show","setCue","mode","currentTrack","getCurrentTrack","activeCues","isVimeo","embed","enableTextTrack","_this2","cue","setText","getCueAsHTML","emptyElement","caption","i18n","seekTime","title","uiSupported","listeners","inject","setup","muted","speed","loop","quality","timeUpdate","checkPlaying","setTitle","label","isEmbed","stopped","paused","toggleControls","loading","timers","failed","networkState","_this3","setRange","updateRangeFill","getElementsByTagName","nodeValue","getPercentage","setProgress","buffered","invert","invertTime","updateTimeDisplay","seeking","updateProgress","hasDuration","displayDuration","updateSeekTooltip","isWebkit","setProperty","iconUrl","svg4everybody","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","setAttributeNS","attr","hidden","badge","menu","buttonType","toCamelCase","labelPressed","iconPressed","control","createIcon","createLabel","suffix","checked","item","radio","faux","aria-hidden","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","_toggle","touch","pageX","parseFloat","setting","tab","tabs","pane","panes","toggleTab","createMenuItem","getLabel","createBadge","getBadge","updateSetting","getLanguage","default","hasTracks","unshift","_this4","form","isMenuItem","isButton","clone","position","opacity","scrollWidth","scrollHeight","getElementById","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","_this5","back","setSpeedMenu","loadSprite","findElements","repaint","labels","_this6","Listeners","lastKey","handleKey","toggleMenu","firstTouch","which","altKey","ctrlKey","metaKey","editable","togglePlay","increaseVolume","decreaseVolume","toggleCaptions","isTouch","keyboard","tabFocus","hideControls","durationUpdate","hasAudio","showPosterOnEnd","load","updateVolume","checkLoading","clickToPlay","ended","disableContextMenu","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","forward","showTab","toggleInvert","hover","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","Storage","json","removeItem","Ads","publisherId","ads","initialized","manager","loader","cuePoints","safetyTimer","countdownTimer","managerPromise","google","ima","loadScript","urls","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","cues","setVolume","AdEvent","onAdEvent","ad","getAd","_this7","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","_this8","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","_this9","adError","zIndex","_this10","destroy","handlers","_this11","Date","base","buildUrlParams","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","getPlaybackQuality","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","setQualityMenu","getAvailableQualityLevels","Vimeo","padding","transform","parseVimeoId","setCurrentTime","selected","setLoop","currentSrc","getVideoWidth","getVideoHeight","dimensions","getAspectRatio","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","seconds","blankVideo","insertElement","attribute","cancelRequests","html5","crossorigin","poster","addStyleHook","insertElements","jQuery","tagName","getProviderByUrl","getUrlParams","truthy","playsinline","hasAttribute","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","soft","unload","mime","readyState","targetTime","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","change","states","webkitPresentationMode"],"mappings":"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QACA,SACA,QACA,OACA,0BAMI,mBAOE,WAEN,GACA,IACA,EACA,KACA,IACA,KACA,uBAMK,UACD,uBAKE,QACJ,qBAKE,WACEhkC,OAAOwrB,UAAUyY,SAAShgC,MAAM,KAAK,yBAKtC,YACC,aACC,qBAKF,MACJ,kBAKL,+BAMA,eACA,OACA,SACA,WACA,WACA,MACA,UACA,wBAGA,WACA,UACA,uBAKS,iBACD,8BACF,aACC,oBACM,+BACP,cACE,kBACE,uBACG,wBACH,kBACF,cACF,cACE,wBACQ,kCACC,mCACA,kCACD,6BACJ,8BACF,oBACA,iBACH,gBACE,eACH,aACC,YACF,UACA,YACE,iBACG,yBACK,uBAMN,uDAGA,qDAGA,uEAMH,UACA,WACC,aACE,YACD,iBACK,UACP,YACE,cACE,gBACE,SACP,aACI,WACF,aACE,UACH,cACI,sBAQV,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,8BAIA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,sBAIA,gBACA,+BAIA,kBACA,mBACA,YACA,cACA,cACA,iBACA,gBACA,gCAMU,uDACC,4BAEI,aACF,0BAEL,4BAEE,2BACC,8BACE,+BACD,mCACK,kCACP,8BACI,oCACE,+BACP,4BACI,iCACC,8BACJ,mCAGA,4BACE,6BACD,+BACG,iCACD,8CAGI,gCACH,+BACF,iCACA,+BACF,+BACE,mCAEF,2BACA,gCAEG,oDAMN,4BACA,wBACF,oBACI,qBACH,qBACI,oBACD,wBACA,wBACA,sBACF,wBACA,sBACE,qBACH,oBACE,6BACM,4BACP,uBACE,6BACI,6BACC,kCAEH,0BACA,mBACD,qCAGG,gCACD,6CAGC,oCACC,4CAGC,6BACH,uCAGG,iCACH,iCAEF,+CAMI,wBACN,oCAMA,oBAMC,cACI,wBC5XpB,IAAeigC,EAAAA,EAQR,WAMR,IAAIC,EAAU,aACVC,KACAC,KACAC,KAmDJ,SAASC,EAAQC,EAAUC,GAEzB,GAAKD,EAAL,CAEA,IAA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","file":"plyr.polyfilled.min.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, inline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const playsInline = browser.isIPhone && inline && support.inline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n inline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.0.5/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 'default',\n options: [\n 'hd2160',\n 'hd1440',\n 'hd1080',\n 'hd720',\n 'large',\n 'medium',\n 'small',\n 'tiny',\n 'default',\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: window.navigator.language.split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n 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 = path.replace(/^css!/, ''); // remove \"css!\" prefix\n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type, bubbles, detail) {\n // Bail if no element\n if (!utils.is.element(element) || !utils.is.string(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles: utils.is.boolean(bubbles) ? bubbles : false,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.name = Fullscreen.name;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', () => {\n this.toggle();\n });\n\n // Prevent double click on controls bubbling up\n utils.on(this.player.elements.controls, 'dblclick', event => event.stopPropagation());\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return false;\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get name() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.name}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.name}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n document.cancelFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.name}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n return captions.getTracks.call(this).find(track => track.language.toLowerCase() === this.language);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // If there's no caption toggle, bail\n if (!utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality options\n this.options.quality = [];\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', i18n.get('frameTitle', this.config));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n ui.setProgress.call(this, this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport i18n from './i18n';\nimport captions from './captions';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = i18n.get(label, this.config);\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n ),\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the YouTube quality menu\n // TODO: Support for HTML5\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n } else {\n this.options.quality = this.config.quality.options;\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.isYouTube;\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 'hd2160':\n label = '4K';\n break;\n\n case 'hd1440':\n label = 'WQHD';\n break;\n\n case 'hd1080':\n label = 'HD';\n break;\n\n case 'hd720':\n label = 'HD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n this.options.quality.forEach(quality =>\n controls.createMenuItem.call(this, quality, list, type, controls.getLabel.call(this, 'quality', quality), getBadge(quality)),\n );\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? 'Normal' : `${value}&times;`;\n\n case 'quality':\n switch (value) {\n case 'hd2160':\n return '2160P';\n case 'hd1440':\n return '1440P';\n case 'hd1080':\n return '1080P';\n case 'hd720':\n return '720P';\n case 'large':\n return '480P';\n case 'medium':\n return '360P';\n case 'small':\n return '240P';\n case 'tiny':\n return 'Tiny';\n case 'default':\n return 'Auto';\n default:\n return value;\n }\n\n case 'captions':\n return controls.getLanguage.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.captions.active ? this.captions.language : i18n.get('disabled', this.config);\n break;\n\n default:\n value = this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // Update the label\n if (!utils.is.empty(value)) {\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n }\n\n // Find the radio option\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n // Check it\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n getLanguage() {\n if (!this.supported.ui) {\n return null;\n }\n\n if (support.textTracks && captions.getTracks.call(this).length && this.captions.active) {\n const currentTrack = captions.getCurrentTrack.call(this);\n\n if (utils.is.track(currentTrack)) {\n return currentTrack.label;\n }\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const hasTracks = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, hasTracks);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // If there's no captions, bail\n if (!hasTracks) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: track.language,\n label: !utils.is.empty(track.label) ? track.label : track.language.toUpperCase(),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label || track.language,\n controls.createBadge.call(this, track.language.toUpperCase()),\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the default speeds\n if (!utils.is.array(this.options.speed) || !this.options.speed.length) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed);\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => controls.createMenuItem.call(this, speed, list, type, controls.getLabel.call(this, 'speed', speed)));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.config.controls.includes('settings') && this.config.settings.includes('speed')) {\n controls.setSpeedMenu.call(this);\n }\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // HTML or Element passed as the option\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: controls.getLanguage.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.fastForward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.player.toggleControls(event);\n });\n }\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking', event => ui.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.showPosterOnEnd) {\n // Restart\n this.player.restart();\n\n // Re-load media\n this.player.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing', event => ui.updateProgress.call(this.player, event));\n\n // Handle native mute\n utils.on(this.player.media, 'volumechange', event => ui.updateVolume.call(this.player, event));\n\n // Handle native play/pause\n utils.on(this.player.media, 'playing play pause ended emptied', event => ui.checkPlaying.call(this.player, event));\n\n // Loading\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // Check if media failed to load\n // utils.on(this.player.media, 'play', event => ui.checkFailed.call(this.player, event));\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.media,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality');\n\n // Save to storage\n this.player.storage.set({ quality: this.player.quality });\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n // Execute custom handler\n if (hasCustomHandler) {\n customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (!event.defaultPrevented && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n },\n 'speed',\n );\n } else {\n controls.showTab.call(this.player, event);\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n this.player.currentTime = event.target.value / event.target.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n ui.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n this.player.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\nimport i18n from '../i18n';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.enabled = player.isHTML5 && player.isVideo && player.config.ads.enabled && utils.is.string(this.publisherId) && this.publisherId.length;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.api)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (seekElement) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current quality\n player.media.quality = instance.getPlaybackQuality();\n\n utils.dispatchEvent.call(player, player.media, 'qualitychange');\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return instance.getPlaybackQuality();\n },\n set(input) {\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n instance.setPlaybackQuality(input);\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, instance.getAvailableQualityLevels());\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.api)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n const height = 240;\n const offset = (height - padding) / (height / 50);\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n this.media.style.transform = `translateY(-${offset}%)`;\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed.setPlaybackRate(input).then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed.getVideoUrl().then(value => {\n currentSrc = value;\n });\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n }\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(this.media.querySelectorAll('source'));\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 media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n media.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // TODO: Reset menus here\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.inline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.0.5\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options,\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n this.elements.original = this.media.cloneNode(true);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.playsinline)) {\n this.config.inline = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.inline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // If ads are enabled, wait for them first\n if (this.ads.enabled && !this.ads.initialized) {\n return this.ads.managerPromise.then(() => this.ads.play()).catch(() => this.media.play());\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(!this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true));\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.media.load();\n } else {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = parseFloat(targetTime.toFixed(4));\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseInt(this.config.duration, 10);\n\n // True duration\n const realDuration = this.media ? Number(this.media.duration) : 0;\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume, reset muted state\n if (this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently YouTube only\n * @param {string} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (utils.is.string(input)) {\n quality = input;\n }\n\n if (!utils.is.string(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.string(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!this.options.quality.includes(quality)) {\n this.debug.warn(`Unsupported quality option (${quality})`);\n return;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support, or there's no caption toggle\n if (!this.supported.ui || !utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : this.elements.container.className.indexOf(this.config.classNames.captions.active) === -1;\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // Toggle captions based on input\n this.toggleCaptions(!utils.is.empty(input));\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Events that show the controls\n const showEvents = [\n 'touchstart',\n 'touchmove',\n 'mouseenter',\n 'mousemove',\n 'focusin',\n ];\n\n // Events that delay hiding\n const delayEvents = [\n 'touchmove',\n 'touchend',\n 'mousemove',\n ];\n\n // Whether to show controls\n show = showEvents.includes(toggle.type);\n\n // Delay hiding on move events\n if (delayEvents.includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (!this.touch && toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (this.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n"]} \ No newline at end of file
+{"version":3,"sources":["node_modules/core-js/modules/_global.js","node_modules/core-js/modules/_core.js","node_modules/core-js/modules/_is-object.js","node_modules/core-js/modules/_an-object.js","node_modules/core-js/modules/_fails.js","node_modules/core-js/modules/_descriptors.js","node_modules/core-js/modules/_dom-create.js","node_modules/core-js/modules/_ie8-dom-define.js","node_modules/core-js/modules/_to-primitive.js","node_modules/core-js/modules/_object-dp.js","node_modules/core-js/modules/_property-desc.js","node_modules/core-js/modules/_hide.js","node_modules/core-js/modules/_has.js","node_modules/core-js/modules/_uid.js","node_modules/core-js/modules/_redefine.js","node_modules/core-js/modules/_a-function.js","node_modules/core-js/modules/_ctx.js","node_modules/core-js/modules/_export.js","node_modules/core-js/modules/_typed.js","node_modules/core-js/modules/_redefine-all.js","node_modules/core-js/modules/_an-instance.js","node_modules/core-js/modules/_to-integer.js","node_modules/core-js/modules/_to-length.js","node_modules/core-js/modules/_to-index.js","node_modules/core-js/modules/_cof.js","node_modules/core-js/modules/_iobject.js","node_modules/core-js/modules/_defined.js","node_modules/core-js/modules/_to-iobject.js","node_modules/core-js/modules/_to-absolute-index.js","node_modules/core-js/modules/_array-includes.js","node_modules/core-js/modules/_shared.js","node_modules/core-js/modules/_shared-key.js","node_modules/core-js/modules/_object-keys-internal.js","node_modules/core-js/modules/_enum-bug-keys.js","node_modules/core-js/modules/_object-gopn.js","node_modules/core-js/modules/_to-object.js","node_modules/core-js/modules/_array-fill.js","node_modules/core-js/modules/_wks.js","node_modules/core-js/modules/_set-to-string-tag.js","node_modules/core-js/modules/_typed-buffer.js","node_modules/core-js/modules/_species-constructor.js","node_modules/core-js/modules/_set-species.js","node_modules/core-js/modules/es6.typed.array-buffer.js","node_modules/core-js/modules/_classof.js","node_modules/core-js/modules/_iterators.js","node_modules/core-js/modules/_is-array-iter.js","node_modules/core-js/modules/_object-keys.js","node_modules/core-js/modules/_object-dps.js","node_modules/core-js/modules/_html.js","node_modules/core-js/modules/_object-create.js","node_modules/core-js/modules/_object-gpo.js","node_modules/core-js/modules/core.get-iterator-method.js","node_modules/core-js/modules/_is-array.js","node_modules/core-js/modules/_array-species-constructor.js","node_modules/core-js/modules/_array-species-create.js","node_modules/core-js/modules/_array-methods.js","node_modules/core-js/modules/_add-to-unscopables.js","node_modules/core-js/modules/_iter-step.js","node_modules/core-js/modules/_iter-create.js","node_modules/core-js/modules/_iter-define.js","node_modules/core-js/modules/es6.array.iterator.js","node_modules/core-js/modules/_iter-detect.js","node_modules/core-js/modules/_array-copy-within.js","node_modules/core-js/modules/_object-pie.js","node_modules/core-js/modules/_object-gopd.js","node_modules/core-js/modules/_typed-array.js","node_modules/core-js/modules/es6.typed.int8-array.js","node_modules/core-js/modules/es6.typed.uint8-array.js","node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","node_modules/core-js/modules/es6.typed.int16-array.js","node_modules/core-js/modules/es6.typed.uint16-array.js","node_modules/core-js/modules/es6.typed.int32-array.js","node_modules/core-js/modules/es6.typed.uint32-array.js","node_modules/core-js/modules/es6.typed.float32-array.js","node_modules/core-js/modules/es6.typed.float64-array.js","node_modules/core-js/modules/_iter-call.js","node_modules/core-js/modules/_for-of.js","node_modules/core-js/modules/_meta.js","node_modules/core-js/modules/_validate-collection.js","node_modules/core-js/modules/_collection-strong.js","node_modules/core-js/modules/_set-proto.js","node_modules/core-js/modules/_inherit-if-required.js","node_modules/core-js/modules/_collection.js","node_modules/core-js/modules/es6.map.js","node_modules/core-js/modules/es6.set.js","node_modules/core-js/modules/_object-gops.js","node_modules/core-js/modules/_object-assign.js","node_modules/core-js/modules/_collection-weak.js","node_modules/core-js/modules/es6.weak-map.js","node_modules/core-js/modules/es6.weak-set.js","node_modules/core-js/modules/es6.reflect.apply.js","node_modules/core-js/modules/_invoke.js","node_modules/core-js/modules/_bind.js","node_modules/core-js/modules/es6.reflect.construct.js","node_modules/core-js/modules/es6.reflect.define-property.js","node_modules/core-js/modules/es6.reflect.delete-property.js","node_modules/core-js/modules/es6.reflect.get.js","node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","node_modules/core-js/modules/es6.reflect.get-prototype-of.js","node_modules/core-js/modules/es6.reflect.has.js","node_modules/core-js/modules/es6.reflect.is-extensible.js","node_modules/core-js/modules/_own-keys.js","node_modules/core-js/modules/es6.reflect.own-keys.js","node_modules/core-js/modules/es6.reflect.prevent-extensions.js","node_modules/core-js/modules/es6.reflect.set.js","node_modules/core-js/modules/es6.reflect.set-prototype-of.js","node_modules/core-js/modules/_task.js","node_modules/core-js/modules/_microtask.js","node_modules/core-js/modules/_new-promise-capability.js","node_modules/core-js/modules/es6.promise.js","node_modules/core-js/modules/_perform.js","node_modules/core-js/modules/_promise-resolve.js","node_modules/core-js/modules/_wks-ext.js","node_modules/core-js/modules/_wks-define.js","node_modules/core-js/modules/_object-gopn-ext.js","node_modules/core-js/modules/es6.symbol.js","node_modules/core-js/modules/_enum-keys.js","node_modules/core-js/modules/_object-sap.js","node_modules/core-js/modules/es6.object.freeze.js","node_modules/core-js/modules/es6.object.seal.js","node_modules/core-js/modules/es6.object.prevent-extensions.js","node_modules/core-js/modules/es6.object.is-frozen.js","node_modules/core-js/modules/es6.object.is-sealed.js","node_modules/core-js/modules/es6.object.is-extensible.js","node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","node_modules/core-js/modules/es6.object.get-prototype-of.js","node_modules/core-js/modules/es6.object.keys.js","node_modules/core-js/modules/es6.object.get-own-property-names.js","node_modules/core-js/modules/es6.object.assign.js","node_modules/core-js/modules/_same-value.js","node_modules/core-js/modules/es6.object.is.js","node_modules/core-js/modules/es6.function.name.js","node_modules/core-js/modules/es6.string.raw.js","node_modules/core-js/modules/es6.string.from-code-point.js","node_modules/core-js/modules/_string-at.js","node_modules/core-js/modules/es6.string.code-point-at.js","node_modules/core-js/modules/_string-repeat.js","node_modules/core-js/modules/es6.string.repeat.js","node_modules/core-js/modules/_is-regexp.js","node_modules/core-js/modules/_string-context.js","node_modules/core-js/modules/_fails-is-regexp.js","node_modules/core-js/modules/es6.string.starts-with.js","node_modules/core-js/modules/es6.string.ends-with.js","node_modules/core-js/modules/es6.string.includes.js","node_modules/core-js/modules/es6.regexp.flags.js","node_modules/core-js/modules/_flags.js","node_modules/core-js/modules/_fix-re-wks.js","node_modules/core-js/modules/es6.regexp.match.js","node_modules/core-js/modules/es6.regexp.replace.js","node_modules/core-js/modules/es6.regexp.split.js","node_modules/core-js/modules/es6.regexp.search.js","node_modules/core-js/modules/_create-property.js","node_modules/core-js/modules/es6.array.from.js","node_modules/core-js/modules/es6.array.of.js","node_modules/core-js/modules/es6.array.copy-within.js","node_modules/core-js/modules/es6.array.find.js","node_modules/core-js/modules/es6.array.find-index.js","node_modules/core-js/modules/es6.array.fill.js","node_modules/core-js/modules/es6.number.is-finite.js","node_modules/core-js/modules/_is-integer.js","node_modules/core-js/modules/es6.number.is-integer.js","node_modules/core-js/modules/es6.number.is-safe-integer.js","node_modules/core-js/modules/es6.number.is-nan.js","node_modules/core-js/modules/es6.number.epsilon.js","node_modules/core-js/modules/es6.number.min-safe-integer.js","node_modules/core-js/modules/es6.number.max-safe-integer.js","node_modules/core-js/modules/_math-log1p.js","node_modules/core-js/modules/es6.math.acosh.js","node_modules/core-js/modules/es6.math.asinh.js","node_modules/core-js/modules/es6.math.atanh.js","node_modules/core-js/modules/_math-sign.js","node_modules/core-js/modules/es6.math.cbrt.js","node_modules/core-js/modules/es6.math.clz32.js","node_modules/core-js/modules/es6.math.cosh.js","node_modules/core-js/modules/_math-expm1.js","node_modules/core-js/modules/es6.math.expm1.js","node_modules/core-js/modules/_math-fround.js","node_modules/core-js/modules/es6.math.fround.js","node_modules/core-js/modules/es6.math.hypot.js","node_modules/core-js/modules/es6.math.imul.js","node_modules/core-js/modules/es6.math.log1p.js","node_modules/core-js/modules/es6.math.log10.js","node_modules/core-js/modules/es6.math.log2.js","node_modules/core-js/modules/es6.math.sign.js","node_modules/core-js/modules/es6.math.sinh.js","node_modules/core-js/modules/es6.math.tanh.js","node_modules/core-js/modules/es6.math.trunc.js","node_modules/core-js/modules/es7.array.includes.js","node_modules/core-js/modules/_object-to-array.js","node_modules/core-js/modules/es7.object.values.js","node_modules/core-js/modules/es7.object.entries.js","node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","node_modules/core-js/modules/_string-pad.js","node_modules/core-js/modules/_user-agent.js","node_modules/core-js/modules/es7.string.pad-start.js","node_modules/core-js/modules/es7.string.pad-end.js","node_modules/core-js/modules/web.timers.js","node_modules/core-js/modules/web.immediate.js","node_modules/core-js/modules/web.dom.iterable.js","node_modules/regenerator-runtime/runtime.js","node_modules/custom-event-polyfill/custom-event-polyfill.js","src/js/types.js","src/js/support.js","src/js/defaults.js","node_modules/loadjs/dist/loadjs.umd.js","src/js/utils.js","src/js/console.js","src/js/fullscreen.js","src/js/captions.js","src/js/i18n.js","src/js/ui.js","src/js/controls.js","src/js/listeners.js","src/js/storage.js","src/js/plugins/ads.js","src/js/plugins/youtube.js","src/js/plugins/vimeo.js","src/js/media.js","src/js/source.js","src/js/plyr.js"],"names":["global","module","exports","window","Math","self","Function","__g","core","version","__e","_isObject","it","_anObject","isObject","TypeError","_fails","exec","e","_descriptors","require$$0","Object","defineProperty","get","a","document","is","createElement","_domCreate","_ie8DomDefine","require$$1","require$$2","_toPrimitive","S","fn","val","toString","call","valueOf","dP","O","P","Attributes","anObject","toPrimitive","IE8_DOM_DEFINE","value","_propertyDesc","bitmap","enumerable","configurable","writable","_hide","object","key","f","createDesc","hasOwnProperty","_has","id","px","random","_uid","concat","undefined","SRC","$toString","TPL","split","inspectSource","safe","isFunction","has","hide","join","String","prototype","this","_aFunction","_ctx","that","length","aFunction","b","c","apply","arguments","$export","type","name","source","own","out","exp","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","IS_PROTO","IS_BIND","B","target","expProto","ctx","redefine","U","W","R","Typed","_export","TYPED","uid","VIEW","ABV","ArrayBuffer","DataView","CONSTR","i","TypedArrayConstructors","_typed","_redefineAll","src","_anInstance","Constructor","forbiddenField","ceil","floor","_toInteger","isNaN","min","_toLength","toInteger","_toIndex","number","toLength","RangeError","_cof","slice","_iobject","propertyIsEnumerable","cof","_defined","_toIobject","IObject","defined","max","_toAbsoluteIndex","index","_arrayIncludes","IS_INCLUDES","$this","el","fromIndex","toIObject","toAbsoluteIndex","store","_shared","shared","_sharedKey","arrayIndexOf","IE_PROTO","_objectKeysInternal","names","result","push","_enumBugKeys","hiddenKeys","getOwnPropertyNames","$keys","_toObject","_arrayFill","toObject","aLen","end","endPos","Symbol","USE_SYMBOL","def","TAG","_setToStringTag","tag","stat","gOPN","PROTOTYPE","WRONG_INDEX","$ArrayBuffer","$DataView","Infinity","BaseBuffer","abs","pow","log","LN2","$BUFFER","DESCRIPTORS","$LENGTH","$OFFSET","packIEEE754","mLen","nBytes","m","buffer","Array","eLen","eMax","eBias","rt","s","unpackIEEE754","nBits","NaN","unpackI32","bytes","packI8","packI16","packI32","packF64","packF32","addGetter","C","internal","view","isLittleEndian","intIndex","toIndex","_b","start","pack","reverse","set","conversion","$typed","fails","ArrayBufferProto","anInstance","keys","j","constructor","$setInt8","setInt8","getInt8","redefineAll","byteOffset","setUint8","byteLength","arrayFill","bufferLength","offset","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","setToStringTag","SPECIES","_speciesConstructor","D","_setSpecies","KEY","$isView","isView","$slice","len","first","final","speciesConstructor","viewS","viewT","ARG","_classof","T","tryGet","callee","_iterators","ITERATOR","ArrayProto","_isArrayIter","Iterators","_objectKeys","enumBugKeys","_objectDps","defineProperties","Properties","getKeys","_html","documentElement","Empty","createDict","iframeDocument","iframe","style","display","appendChild","contentWindow","open","write","lt","close","_objectCreate","create","dPs","ObjectProto","_objectGpo","getPrototypeOf","core_getIteratorMethod","getIteratorMethod","classof","_isArray","isArray","arg","_arraySpeciesCreate","original","_arrayMethods","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","asc","callbackfn","res","UNSCOPABLES","_addToUnscopables","_iterStep","done","IteratorPrototype","_iterCreate","NAME","next","descriptor","BUGGY","returnThis","_iterDefine","Base","DEFAULT","IS_SET","FORCED","$iterCreate","methods","getMethod","kind","proto","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","values","es6_array_iterator","iterated","_t","_i","_k","step","Arguments","addToUnscopables","SAFE_CLOSING","_iterDetect","skipClosing","arr","iter","_arrayCopyWithin","copyWithin","to","from","count","inc","gOPD","getOwnPropertyDescriptor","pIE","require$$3","require$$4","require$$5","$buffer","require$$6","require$$7","require$$8","propertyDesc","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","isArrayIter","require$$21","require$$22","require$$23","require$$24","getIterFn","require$$25","require$$26","wks","require$$27","createArrayMethod","require$$28","createArrayIncludes","require$$29","require$$30","ArrayIterators","require$$31","require$$32","$iterDetect","require$$33","setSpecies","require$$34","require$$35","arrayCopyWithin","require$$36","$DP","require$$37","$GOPD","require$$38","Uint8Array","arrayForEach","arrayFilter","arraySome","arrayEvery","arrayFind","arrayFindIndex","arrayIncludes","arrayValues","arrayKeys","arrayEntries","arrayLastIndexOf","lastIndexOf","arrayReduce","reduce","arrayReduceRight","reduceRight","arrayJoin","arraySort","sort","arraySlice","arrayToString","arrayToLocaleString","toLocaleString","TYPED_CONSTRUCTOR","DEF_CONSTRUCTOR","ALL_CONSTRUCTORS","TYPED_ARRAY","$map","allocate","LITTLE_ENDIAN","Uint16Array","FORCED_SET","toOffset","BYTES","validate","speciesFromList","list","fromList","_d","$from","iterator","mapfn","mapping","iterFn","$of","TO_LOCALE_BUG","$toLocaleString","every","fill","filter","find","predicate","findIndex","forEach","indexOf","searchElement","includes","separator","map","middle","some","comparefn","subarray","begin","$begin","BYTES_PER_ELEMENT","$set","arrayLike","$iterators","isTAIndex","$getDesc","$setDesc","desc","$TypedArrayPrototype$","wrapper","CLAMPED","GETTER","SETTER","TypedArray","TAC","TypedArrayPrototype","addElement","data","v","o","getter","round","setter","$offset","$length","klass","$len","l","$nativeIterator","CORRECT_ITER_NAME","$iterator","of","init","_iterCall","ret","BREAK","RETURN","iterable","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","meta","NEED","fastKey","getWeak","onFreeze","_validateCollection","SIZE","getEntry","entry","_f","n","k","_collectionStrong","getConstructor","ADDER","_l","forOf","clear","r","p","delete","prev","setStrong","$iterDefine","check","_setProto","setPrototypeOf","test","buggy","__proto__","_collection","common","IS_WEAK","fixMethod","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","inheritIfRequired","strong","add","getOwnPropertySymbols","$assign","assign","_objectAssign","A","K","getSymbols","gOPS","isEnum","uncaughtFrozenStore","UncaughtFrozenStore","findUncaughtFrozen","splice","_collectionWeak","$has","ufstore","InternalMap","each","weak","tmp","$WeakMap","freeze","method","rApply","Reflect","fApply","thisArgument","argumentsList","L","_invoke","args","un","factories","_bind","bind","partArgs","bound","construct","invoke","rConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","propertyKey","attributes","deleteProperty","receiver","getProto","$isExtensible","_ownKeys","ownKeys","$preventExtensions","V","existingDescriptor","ownDesc","setProto","defer","channel","port","process","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","queue","run","listener","event","nextTick","now","port2","port1","onmessage","postMessage","addEventListener","importScripts","cel","html","removeChild","setTimeout","_task","macrotask","Observer","MutationObserver","WebKitMutationObserver","Promise","isNode","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","resolve","reject","promise","$$resolve","$$reject","_perform","task","microtask","head","last","notify","flush","parent","domain","exit","enter","navigator","standalone","then","toggle","node","createTextNode","observe","characterData","$Promise","empty","newPromiseCapability","newPromiseCapabilityModule","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","isReject","_n","chain","_c","_v","ok","_s","reaction","handler","fail","_h","onHandleUnhandled","onUnhandled","console","unhandled","isUnhandled","perform","emit","onunhandledrejection","reason","error","_a","onrejectionhandled","$reject","_w","$resolve","executor","err","onFulfilled","onRejected","catch","capability","x","promiseCapability","promiseResolve","all","remaining","$index","alreadyCalled","race","_wksDefine","$Symbol","charAt","wksExt","windowNames","getWindowNames","gOPNExt","$JSON","JSON","_stringify","stringify","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","QObject","findChild","setSymbolDesc","$fails","_create","protoDesc","wrap","sym","isSymbol","$defineProperty","$defineProperties","symbols","enumKeys","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","es6Symbols","wellKnownSymbols","wksDefine","for","keyFor","useSetter","useSimple","replacer","$replacer","_objectSap","$freeze","$seal","$isFrozen","$isSealed","$getPrototypeOf","_sameValue","y","FProto","nameRE","match","raw","callSite","tpl","fromCharCode","$fromCodePoint","fromCodePoint","code","TO_STRING","$at","pos","charCodeAt","codePointAt","_stringRepeat","str","repeat","MATCH","_isRegexp","isRegExp","_stringContext","searchString","_failsIsRegexp","re","$startsWith","startsWith","context","search","$endsWith","endsWith","endPosition","flags","RegExp","ignoreCase","multiline","unicode","sticky","_fixReWks","SYMBOL","fns","strfn","rxfn","string","$match","regexp","REPLACE","$replace","searchValue","replaceValue","SPLIT","$split","_split","$push","NPCG","limit","separator2","lastIndex","lastLength","output","lastLastIndex","splitLimit","separatorCopy","replace","SEARCH","$search","_createProperty","createProperty","$find","forced","_isFinite","isFinite","_isInteger","isInteger","isSafeInteger","EPSILON","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","_mathLog1p","log1p","sqrt","$acosh","acosh","Number","MAX_VALUE","$asinh","asinh","$atanh","atanh","_mathSign","sign","cbrt","clz32","LOG2E","cosh","$expm1","expm1","_mathExpm1","EPSILON32","MAX32","MIN32","_mathFround","fround","$abs","$sign","hypot","value1","value2","div","sum","larg","$imul","imul","xn","yn","xl","yl","log10","LOG10E","log2","sinh","tanh","trunc","$includes","_objectToArray","isEntries","$values","getOwnPropertyDescriptors","getDesc","_stringPad","maxLength","fillString","left","stringLength","fillStr","intMaxLength","fillLen","stringFiller","_userAgent","userAgent","padStart","$pad","padEnd","MSIE","time","boundArgs","setInterval","$task","TO_STRING_TAG","ArrayValues","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","collections","explicit","Collection","Op","hasOwn","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","runtime","regeneratorRuntime","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","NativeIteratorPrototype","Gp","GeneratorFunctionPrototype","Generator","GeneratorFunction","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","__await","defineIteratorMethods","AsyncIterator","async","innerFn","outerFn","tryLocsList","pop","Context","reset","skipTempReset","sent","_sent","delegate","tryEntries","resetTryEntry","stop","rootRecord","completion","rval","dispatchException","exception","handle","loc","caught","record","tryLoc","hasCatch","hasFinally","catchLoc","finallyLoc","Error","abrupt","finallyEntry","complete","afterLoc","finish","thrown","delegateYield","resultName","nextLoc","protoGenerator","generator","state","doneResult","delegateResult","maybeInvokeDelegate","tryCatch","makeInvokeMethod","obj","unwrapped","previousPromise","callInvokeWithMethodAndArg","return","info","pushTryEntry","locs","iteratorMethod","ce","CustomEvent","preventDefault","defaultPrevented","params","evt","origPrevent","bubbles","cancelable","detail","createEvent","initCustomEvent","Event","range","providers","types","defaults","language","factory","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","executeCallbacks","depsNotFound","success","loadFile","path","callbackFn","numTries","isCss","doc","maxTries","numRetries","beforeCallbackFn","before","rel","href","onload","onerror","onbeforeload","ev","sheet","cssText","loadjs","paths","arg1","arg2","trim","numWaiting","loadFiles","ready","deps","bundleIds","subscribe","isDefined","utils","input","instanceof","Plyr","Boolean","nullOrUndefined","WeakMap","Element","Text","TextTrackCue","VTTCue","TextTrack","array","nodeList","documentMode","platform","url","responseType","request","XMLHttpRequest","parse","responseText","response","statusText","send","hasId","exists","querySelectorAll","container","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","content","fetch","setItem","injectSprite","innerHTML","body","insertBefore","childNodes","prefix","elements","targets","element","child","cloneNode","parentNode","sibling","nextSibling","text","setAttributes","textContent","removeElement","lastChild","newChild","oldChild","replaceChild","_ref","_ref2","sel","existingAttributes","existing","selector","className","parts","class","contains","classList","removeAttribute","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","duration","currentTime","seekTooltip","classNames","tooltip","debug","warn","toggleNativeControls","focused","activeElement","focusable","trap","keyCode","getFocusElement","shiftKey","focus","on","off","callback","passive","capture","function","Node","toggleListener","events","options","passiveListeners","boolean","plyr","dispatchEvent","toggleState","pressed","getAttribute","current","toFixed","parseInt","displayHours","inverted","formatTime","format","hours","getHours","mins","getMinutes","secs","getSeconds","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","_len","_key","shift","defineProperty$1","extend","toConsumableArray","youtube","vimeo","$2","parser","parseUrl","hash","_hash$split2","decodeURIComponent","encodeURIComponent","fragment","createDocumentFragment","firstChild","innerText","width","height","ratio","getRatio","h","offsetHeight","provider","inline","api","ui","browser","getBrowser","playsInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","transitionEndEvent","matchMedia","noop","Console","enabled","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","overflow","toggleClass","fallback","Fullscreen","_this","stopPropagation","update","native","iosNative","playing","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","fullscreenElement","hasClass","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","exitFullscreen","pre","stored","isYouTube","textTracks","setCaptionsMenu","getAttributesFromSelector","insertAfter","getTracks","tracks","isIE","URL","track","hostname","location","protocol","blob","createObjectURL","setLanguage","show","setCue","mode","currentTrack","getCurrentTrack","activeCues","isVimeo","embed","enableTextTrack","_this2","cue","setText","getCueAsHTML","emptyElement","caption","i18n","seekTime","title","uiSupported","listeners","inject","setup","muted","speed","loop","quality","timeUpdate","checkPlaying","setTitle","label","isEmbed","stopped","paused","toggleControls","loading","timers","failed","networkState","_this3","setRange","updateRangeFill","getElementsByTagName","nodeValue","getPercentage","setProgress","buffered","invert","invertTime","updateTimeDisplay","seeking","updateProgress","hasDuration","displayDuration","updateSeekTooltip","isWebkit","setProperty","iconUrl","svg4everybody","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","setAttributeNS","attr","hidden","badge","menu","buttonType","toCamelCase","labelPressed","iconPressed","control","createIcon","createLabel","suffix","checked","item","radio","faux","aria-hidden","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","_toggle","touch","pageX","parseFloat","setting","tab","tabs","pane","panes","toggleTab","createMenuItem","getLabel","createBadge","getBadge","updateSetting","getLanguage","default","hasTracks","unshift","_this4","form","isMenuItem","isButton","clone","position","opacity","scrollWidth","scrollHeight","getElementById","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","_this5","back","setSpeedMenu","loadSprite","findElements","repaint","labels","_this6","Listeners","lastKey","handleKey","toggleMenu","firstTouch","which","altKey","ctrlKey","metaKey","editable","togglePlay","increaseVolume","decreaseVolume","toggleCaptions","isTouch","keyboard","tabFocus","hideControls","durationUpdate","hasAudio","showPosterOnEnd","load","updateVolume","checkLoading","clickToPlay","ended","disableContextMenu","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","forward","showTab","toggleInvert","hover","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","Storage","json","removeItem","Ads","publisherId","ads","initialized","manager","loader","cuePoints","safetyTimer","countdownTimer","managerPromise","google","ima","loadScript","urls","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","cues","setVolume","AdEvent","onAdEvent","ad","getAd","_this7","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","_this8","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","_this9","adError","zIndex","_this10","destroy","handlers","_this11","Date","base","buildUrlParams","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","getPlaybackQuality","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","setQualityMenu","getAvailableQualityLevels","Vimeo","padding","transform","parseVimeoId","setCurrentTime","selected","setLoop","currentSrc","getVideoWidth","getVideoHeight","dimensions","getAspectRatio","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","seconds","blankVideo","insertElement","attribute","cancelRequests","html5","crossorigin","poster","addStyleHook","insertElements","jQuery","tagName","getProviderByUrl","getUrlParams","truthy","playsinline","hasAttribute","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","soft","unload","mime","readyState","targetTime","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","change","states","webkitPresentationMode"],"mappings":"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QACA,SACA,QACA,OACA,0BAMI,mBAOE,WAEN,GACA,IACA,EACA,KACA,IACA,KACA,uBAMK,UACD,uBAKE,QACJ,qBAKE,WACEhkC,OAAOwrB,UAAUyY,SAAShgC,MAAM,KAAK,yBAKtC,YACC,aACC,qBAKF,MACJ,kBAKL,+BAMA,eACA,OACA,SACA,WACA,WACA,MACA,UACA,wBAGA,WACA,UACA,uBAKS,iBACD,8BACF,aACC,oBACM,+BACP,cACE,kBACE,uBACG,wBACH,kBACF,cACF,cACE,wBACQ,kCACC,mCACA,kCACD,6BACJ,8BACF,oBACA,iBACH,gBACE,eACH,aACC,YACF,UACA,YACE,iBACG,yBACK,uBAMN,uDAGA,qDAGA,uEAMH,UACA,WACC,aACE,YACD,iBACK,UACP,YACE,cACE,gBACE,SACP,aACI,WACF,aACE,UACH,cACI,sBAQV,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,8BAIA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,sBAIA,gBACA,+BAIA,kBACA,mBACA,YACA,cACA,cACA,iBACA,gBACA,gCAMU,uDACC,4BAEI,aACF,0BAEL,4BAEE,2BACC,8BACE,+BACD,mCACK,kCACP,8BACI,oCACE,+BACP,4BACI,iCACC,8BACJ,mCAGA,4BACE,6BACD,+BACG,iCACD,8CAGI,gCACH,+BACF,iCACA,+BACF,+BACE,mCAEF,2BACA,gCAEG,oDAMN,4BACA,wBACF,oBACI,qBACH,qBACI,oBACD,wBACA,wBACA,sBACF,wBACA,sBACE,qBACH,oBACE,6BACM,4BACP,uBACE,6BACI,6BACC,kCAEH,0BACA,mBACD,qCAGG,gCACD,6CAGC,oCACC,4CAGC,6BACH,uCAGG,iCACH,iCAEF,+CAMI,wBACN,oCAMA,oBAMC,cACI,wBC5XpB,IAAeigC,EAAAA,EAQR,WAMR,IAAIC,EAAU,aACVC,KACAC,KACAC,KAmDJ,SAASC,EAAQC,EAAUC,GAEzB,GAAKD,EAAL,CAEA,IAA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","file":"plyr.polyfilled.min.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, inline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const playsInline = browser.isIPhone && inline && support.inline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n inline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.0.6/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 'default',\n options: [\n 'hd2160',\n 'hd1440',\n 'hd1080',\n 'hd720',\n 'large',\n 'medium',\n 'small',\n 'tiny',\n 'default',\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: window.navigator.language.split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n 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 = path.replace(/^css!/, ''); // remove \"css!\" prefix\n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type, bubbles, detail) {\n // Bail if no element\n if (!utils.is.element(element) || !utils.is.string(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles: utils.is.boolean(bubbles) ? bubbles : false,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.name = Fullscreen.name;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', () => {\n this.toggle();\n });\n\n // Prevent double click on controls bubbling up\n utils.on(this.player.elements.controls, 'dblclick', event => event.stopPropagation());\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return false;\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get name() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.name}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.name}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n document.cancelFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.name}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n return captions.getTracks.call(this).find(track => track.language.toLowerCase() === this.language);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // If there's no caption toggle, bail\n if (!utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality options\n this.options.quality = [];\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', i18n.get('frameTitle', this.config));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n ui.setProgress.call(this, this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport i18n from './i18n';\nimport captions from './captions';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = i18n.get(label, this.config);\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n ),\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the YouTube quality menu\n // TODO: Support for HTML5\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n } else {\n this.options.quality = this.config.quality.options;\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.isYouTube;\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 'hd2160':\n label = '4K';\n break;\n\n case 'hd1440':\n label = 'WQHD';\n break;\n\n case 'hd1080':\n label = 'HD';\n break;\n\n case 'hd720':\n label = 'HD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n this.options.quality.forEach(quality =>\n controls.createMenuItem.call(this, quality, list, type, controls.getLabel.call(this, 'quality', quality), getBadge(quality)),\n );\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? 'Normal' : `${value}&times;`;\n\n case 'quality':\n switch (value) {\n case 'hd2160':\n return '2160P';\n case 'hd1440':\n return '1440P';\n case 'hd1080':\n return '1080P';\n case 'hd720':\n return '720P';\n case 'large':\n return '480P';\n case 'medium':\n return '360P';\n case 'small':\n return '240P';\n case 'tiny':\n return 'Tiny';\n case 'default':\n return 'Auto';\n default:\n return value;\n }\n\n case 'captions':\n return controls.getLanguage.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.captions.active ? this.captions.language : i18n.get('disabled', this.config);\n break;\n\n default:\n value = this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // Update the label\n if (!utils.is.empty(value)) {\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n }\n\n // Find the radio option\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n // Check it\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n getLanguage() {\n if (!this.supported.ui) {\n return null;\n }\n\n if (support.textTracks && captions.getTracks.call(this).length && this.captions.active) {\n const currentTrack = captions.getCurrentTrack.call(this);\n\n if (utils.is.track(currentTrack)) {\n return currentTrack.label;\n }\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const hasTracks = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, hasTracks);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // If there's no captions, bail\n if (!hasTracks) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: track.language,\n label: !utils.is.empty(track.label) ? track.label : track.language.toUpperCase(),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label || track.language,\n controls.createBadge.call(this, track.language.toUpperCase()),\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the default speeds\n if (!utils.is.array(this.options.speed) || !this.options.speed.length) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed);\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => controls.createMenuItem.call(this, speed, list, type, controls.getLabel.call(this, 'speed', speed)));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.config.controls.includes('settings') && this.config.settings.includes('speed')) {\n controls.setSpeedMenu.call(this);\n }\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // HTML or Element passed as the option\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: controls.getLanguage.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.fastForward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.player.toggleControls(event);\n });\n }\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking', event => ui.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.showPosterOnEnd) {\n // Restart\n this.player.restart();\n\n // Re-load media\n this.player.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing', event => ui.updateProgress.call(this.player, event));\n\n // Handle native mute\n utils.on(this.player.media, 'volumechange', event => ui.updateVolume.call(this.player, event));\n\n // Handle native play/pause\n utils.on(this.player.media, 'playing play pause ended emptied', event => ui.checkPlaying.call(this.player, event));\n\n // Loading\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // Check if media failed to load\n // utils.on(this.player.media, 'play', event => ui.checkFailed.call(this.player, event));\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.media,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality');\n\n // Save to storage\n this.player.storage.set({ quality: this.player.quality });\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n },\n 'speed',\n );\n } else {\n controls.showTab.call(this.player, event);\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n this.player.currentTime = event.target.value / event.target.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n ui.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n this.player.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\nimport i18n from '../i18n';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.enabled = player.isHTML5 && player.isVideo && player.config.ads.enabled && utils.is.string(this.publisherId) && this.publisherId.length;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.api)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (seekElement) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current quality\n player.media.quality = instance.getPlaybackQuality();\n\n utils.dispatchEvent.call(player, player.media, 'qualitychange');\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return instance.getPlaybackQuality();\n },\n set(input) {\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n instance.setPlaybackQuality(input);\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, instance.getAvailableQualityLevels());\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.api)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n const height = 240;\n const offset = (height - padding) / (height / 50);\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n this.media.style.transform = `translateY(-${offset}%)`;\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed.setPlaybackRate(input).then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed.getVideoUrl().then(value => {\n currentSrc = value;\n });\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n }\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(this.media.querySelectorAll('source'));\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 media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n media.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // TODO: Reset menus here\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.inline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.0.6\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options,\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n this.elements.original = this.media.cloneNode(true);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.playsinline)) {\n this.config.inline = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.inline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // If ads are enabled, wait for them first\n if (this.ads.enabled && !this.ads.initialized) {\n return this.ads.managerPromise.then(() => this.ads.play()).catch(() => this.media.play());\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(!this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true));\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.media.load();\n } else {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = parseFloat(targetTime.toFixed(4));\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseInt(this.config.duration, 10);\n\n // True duration\n const realDuration = this.media ? Number(this.media.duration) : 0;\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume, reset muted state\n if (this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently YouTube only\n * @param {string} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (utils.is.string(input)) {\n quality = input;\n }\n\n if (!utils.is.string(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.string(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!this.options.quality.includes(quality)) {\n this.debug.warn(`Unsupported quality option (${quality})`);\n return;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support, or there's no caption toggle\n if (!this.supported.ui || !utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : this.elements.container.className.indexOf(this.config.classNames.captions.active) === -1;\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // Toggle captions based on input\n this.toggleCaptions(!utils.is.empty(input));\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Events that show the controls\n const showEvents = [\n 'touchstart',\n 'touchmove',\n 'mouseenter',\n 'mousemove',\n 'focusin',\n ];\n\n // Events that delay hiding\n const delayEvents = [\n 'touchmove',\n 'touchend',\n 'mousemove',\n ];\n\n // Whether to show controls\n show = showEvents.includes(toggle.type);\n\n // Delay hiding on move events\n if (delayEvents.includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (!this.touch && toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (this.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n"]} \ No newline at end of file
diff --git a/package.json b/package.json
index cc34ca6b..e29bd02f 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "plyr",
- "version": "3.0.5",
+ "version": "3.0.6",
"description": "A simple, accessible and customizable HTML5, YouTube and Vimeo media player",
"homepage": "https://plyr.io",
"main": "./dist/plyr.js",
diff --git a/readme.md b/readme.md
index 65f1b99f..48804b99 100644
--- a/readme.md
+++ b/readme.md
@@ -128,7 +128,7 @@ See [initialising](#initialising) for more information on advanced setups.
If you want to use our CDN (provided by [Fastly](https://www.fastly.com/)) for the JavaScript, you can use the following:
```html
-<script src="https://cdn.plyr.io/3.0.5/plyr.js"></script>
+<script src="https://cdn.plyr.io/3.0.6/plyr.js"></script>
```
_Note_: Be sure to read the [polyfills](#polyfills) section below about browser compatibility
@@ -144,13 +144,13 @@ Include the `plyr.css` stylsheet into your `<head>`
If you want to use our CDN (provided by [Fastly](https://www.fastly.com/)) for the default CSS, you can use the following:
```html
-<link rel="stylesheet" href="https://cdn.plyr.io/3.0.5/plyr.css">
+<link rel="stylesheet" href="https://cdn.plyr.io/3.0.6/plyr.css">
```
### SVG Sprite
The SVG sprite is loaded automatically from our CDN (provided by [Fastly](https://www.fastly.com/)). To change this, see the [options](#options) below. For
-reference, the CDN hosted SVG sprite can be found at `https://cdn.plyr.io/3.0.5/plyr.svg`.
+reference, the CDN hosted SVG sprite can be found at `https://cdn.plyr.io/3.0.6/plyr.svg`.
## Ads
diff --git a/src/js/defaults.js b/src/js/defaults.js
index 23b9cc4a..5d2cb657 100644
--- a/src/js/defaults.js
+++ b/src/js/defaults.js
@@ -56,7 +56,7 @@ const defaults = {
// Sprite (for icons)
loadSprite: true,
iconPrefix: 'plyr',
- iconUrl: 'https://cdn.plyr.io/3.0.5/plyr.svg',
+ iconUrl: 'https://cdn.plyr.io/3.0.6/plyr.svg',
// Blank video (used to prevent errors on source change)
blankVideo: 'https://cdn.plyr.io/static/blank.mp4',
diff --git a/src/js/listeners.js b/src/js/listeners.js
index a0edc7c6..b9d189b7 100644
--- a/src/js/listeners.js
+++ b/src/js/listeners.js
@@ -398,14 +398,15 @@ class Listeners {
const proxy = (event, defaultHandler, customHandlerKey) => {
const customHandler = this.player.config.listeners[customHandlerKey];
const hasCustomHandler = utils.is.function(customHandler);
+ let returned = true;
// Execute custom handler
if (hasCustomHandler) {
- customHandler.call(this.player, event);
+ returned = customHandler.call(this.player, event);
}
// Only call default handler if not prevented in custom handler
- if (!event.defaultPrevented && utils.is.function(defaultHandler)) {
+ if (returned && utils.is.function(defaultHandler)) {
defaultHandler.call(this.player, event);
}
};
diff --git a/src/js/plyr.js b/src/js/plyr.js
index 7c07e952..be930796 100644
--- a/src/js/plyr.js
+++ b/src/js/plyr.js
@@ -1,6 +1,6 @@
// ==========================================================================
// Plyr
-// plyr.js v3.0.5
+// plyr.js v3.0.6
// https://github.com/sampotts/plyr
// License: The MIT License (MIT)
// ==========================================================================
diff --git a/src/js/plyr.polyfilled.js b/src/js/plyr.polyfilled.js
index 7316e21b..71b33c0f 100644
--- a/src/js/plyr.polyfilled.js
+++ b/src/js/plyr.polyfilled.js
@@ -1,6 +1,6 @@
// ==========================================================================
// Plyr Polyfilled Build
-// plyr.js v3.0.5
+// plyr.js v3.0.6
// https://github.com/sampotts/plyr
// License: The MIT License (MIT)
// ==========================================================================