{"version":3,"sources":["webpack:///./node_modules/yt-player/index.js","webpack:///./node_modules/events/events.js","webpack:///./node_modules/load-script2/index.js"],"names":["EventEmitter","loadScript","YOUTUBE_STATES","0","1","2","3","5","YOUTUBE_ERROR","loadIframeAPICallbacks","module","exports","element","opts","super","elem","document","querySelector","id","this","_id","Math","random","toString","slice","_opts","Object","assign","width","height","autoplay","captions","undefined","controls","keyboard","fullscreen","annotations","modestBranding","related","timeupdateFrequency","playsInline","videoId","destroyed","_api","_autoplay","_player","_ready","_queue","_interval","_startInterval","bind","_stopInterval","on","_loadIframeAPI","err","api","_destroy","Error","load","loadVideoById","cueVideoById","_createPlayer","playVideo","_queueCommand","pauseVideo","stopVideo","seconds","seekTo","volume","setVolume","getVolume","mute","unMute","isMuted","setSize","rate","setPlaybackRate","suggestedQuality","setPlaybackQuality","getPlaybackRate","getAvailablePlaybackRates","getDuration","getVideoLoadedFraction","getPlayerState","getCurrentTime","destroy","removeListener","emit","command","args","push","length","shift","apply","cb","window","YT","Player","Array","from","getElementsByTagName","some","script","src","catch","loadCb","onYouTubeIframeAPIReady","playerVars","cc_load_policy","hl","cc_lang_pref","disablekb","enablejsapi","fs","iv_load_policy","modestbranding","origin","location","playsinline","rel","wmode","events","onReady","_onReady","onStateChange","data","_onStateChange","onPlaybackQualityChange","_onPlaybackQualityChange","onPlaybackRateChange","_onPlaybackRateChange","onError","_onError","_flushQueue","state","includes","_onTimeupdate","code","setInterval","clearInterval","ReflectOwnKeys","R","Reflect","ReflectApply","target","receiver","Function","prototype","call","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","concat","NumberIsNaN","Number","isNaN","value","init","once","emitter","name","Promise","resolve","reject","errorListener","resolver","arguments","eventTargetAgnosticAddListener","handler","flags","addErrorHandlerIfEventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","TypeError","_getMaxListeners","that","_addListener","type","prepend","m","existing","warning","create","newListener","unshift","warned","w","String","count","console","warn","onceWrapper","fired","wrapFn","_onceWrap","wrapped","_listeners","unwrap","evlistener","arr","ret","i","unwrapListeners","arrayClone","listenerCount","n","copy","addEventListener","wrapListener","arg","removeEventListener","defineProperty","enumerable","get","set","RangeError","getPrototypeOf","setMaxListeners","getMaxListeners","doError","error","er","message","context","len","listeners","addListener","prependListener","prependOnceListener","list","position","originalListener","index","pop","spliceOne","off","removeAllListeners","key","keys","rawListeners","eventNames","attrs","parentNode","createElement","async","k","v","entries","setAttribute","onload","onerror","head","appendChild"],"mappings":"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","file":"2.29d926.js","sourcesContent":["const EventEmitter = require('events').EventEmitter\nconst loadScript = require('load-script2')\n\nconst YOUTUBE_IFRAME_API_SRC = 'https://www.youtube.com/iframe_api'\n\nconst YOUTUBE_STATES = {\n  '-1': 'unstarted',\n  0: 'ended',\n  1: 'playing',\n  2: 'paused',\n  3: 'buffering',\n  5: 'cued'\n}\n\nconst YOUTUBE_ERROR = {\n  // The request contains an invalid parameter value. For example, this error\n  // occurs if you specify a videoId that does not have 11 characters, or if the\n  // videoId contains invalid characters, such as exclamation points or asterisks.\n  INVALID_PARAM: 2,\n\n  // The requested content cannot be played in an HTML5 player or another error\n  // related to the HTML5 player has occurred.\n  HTML5_ERROR: 5,\n\n  // The video requested was not found. This error occurs when a video has been\n  // removed (for any reason) or has been marked as private.\n  NOT_FOUND: 100,\n\n  // The owner of the requested video does not allow it to be played in embedded\n  // players.\n  UNPLAYABLE_1: 101,\n\n  // This error is the same as 101. It's just a 101 error in disguise!\n  UNPLAYABLE_2: 150\n}\n\nconst loadIframeAPICallbacks = []\n\n/**\n * YouTube Player. Exposes a better API, with nicer events.\n * @param {HTMLElement|selector} element\n */\nclass YouTubePlayer extends EventEmitter {\n  constructor (element, opts) {\n    super()\n\n    const elem = typeof element === 'string'\n      ? document.querySelector(element)\n      : element\n\n    if (elem.id) {\n      this._id = elem.id // use existing element id\n    } else {\n      this._id = elem.id = 'ytplayer-' + Math.random().toString(16).slice(2, 8)\n    }\n\n    this._opts = Object.assign({\n      width: 640,\n      height: 360,\n      autoplay: false,\n      captions: undefined,\n      controls: true,\n      keyboard: true,\n      fullscreen: true,\n      annotations: true,\n      modestBranding: false,\n      related: true,\n      timeupdateFrequency: 1000,\n      playsInline: true\n    }, opts)\n\n    this.videoId = null\n    this.destroyed = false\n\n    this._api = null\n    this._autoplay = false // autoplay the first video?\n    this._player = null\n    this._ready = false // is player ready?\n    this._queue = []\n\n    this._interval = null\n\n    // Setup listeners for 'timeupdate' events. The YouTube Player does not fire\n    // 'timeupdate' events, so they are simulated using a setInterval().\n    this._startInterval = this._startInterval.bind(this)\n    this._stopInterval = this._stopInterval.bind(this)\n\n    this.on('playing', this._startInterval)\n    this.on('unstarted', this._stopInterval)\n    this.on('ended', this._stopInterval)\n    this.on('paused', this._stopInterval)\n    this.on('buffering', this._stopInterval)\n\n    this._loadIframeAPI((err, api) => {\n      if (err) return this._destroy(new Error('YouTube Iframe API failed to load'))\n      this._api = api\n\n      // If load(videoId, [autoplay]) was called before Iframe API loaded, ensure it gets\n      // called again now\n      if (this.videoId) this.load(this.videoId, this._autoplay)\n    })\n  }\n\n  load (videoId, autoplay = false) {\n    if (this.destroyed) return\n\n    this.videoId = videoId\n    this._autoplay = autoplay\n\n    // If the Iframe API is not ready yet, do nothing. Once the Iframe API is\n    // ready, `load(this.videoId)` will be called.\n    if (!this._api) return\n\n    // If there is no player instance, create one.\n    if (!this._player) {\n      this._createPlayer(videoId)\n      return\n    }\n\n    // If the player instance is not ready yet, do nothing. Once the player\n    // instance is ready, `load(this.videoId)` will be called. This ensures that\n    // the last call to `load()` is the one that takes effect.\n    if (!this._ready) return\n\n    // If the player instance is ready, load the given `videoId`.\n    if (autoplay) {\n      this._player.loadVideoById(videoId)\n    } else {\n      this._player.cueVideoById(videoId)\n    }\n  }\n\n  play () {\n    if (this._ready) this._player.playVideo()\n    else this._queueCommand('play')\n  }\n\n  pause () {\n    if (this._ready) this._player.pauseVideo()\n    else this._queueCommand('pause')\n  }\n\n  stop () {\n    if (this._ready) this._player.stopVideo()\n    else this._queueCommand('stop')\n  }\n\n  seek (seconds) {\n    if (this._ready) this._player.seekTo(seconds, true)\n    else this._queueCommand('seek', seconds)\n  }\n\n  setVolume (volume) {\n    if (this._ready) this._player.setVolume(volume)\n    else this._queueCommand('setVolume', volume)\n  }\n\n  getVolume () {\n    return (this._ready && this._player.getVolume()) || 0\n  }\n\n  mute () {\n    if (this._ready) this._player.mute()\n    else this._queueCommand('mute')\n  }\n\n  unMute () {\n    if (this._ready) this._player.unMute()\n    else this._queueCommand('unMute')\n  }\n\n  isMuted () {\n    return (this._ready && this._player.isMuted()) || false\n  }\n\n  setSize (width, height) {\n    if (this._ready) this._player.setSize(width, height)\n    else this._queueCommand('setSize', width, height)\n  }\n\n  setPlaybackRate (rate) {\n    if (this._ready) this._player.setPlaybackRate(rate)\n    else this._queueCommand('setPlaybackRate', rate)\n  }\n\n  setPlaybackQuality (suggestedQuality) {\n    if (this._ready) this._player.setPlaybackQuality(suggestedQuality)\n    else this._queueCommand('setPlaybackQuality', suggestedQuality)\n  }\n\n  getPlaybackRate () {\n    return (this._ready && this._player.getPlaybackRate()) || 1\n  }\n\n  getAvailablePlaybackRates () {\n    return (this._ready && this._player.getAvailablePlaybackRates()) || [1]\n  }\n\n  getDuration () {\n    return (this._ready && this._player.getDuration()) || 0\n  }\n\n  getProgress () {\n    return (this._ready && this._player.getVideoLoadedFraction()) || 0\n  }\n\n  getState () {\n    return (this._ready && YOUTUBE_STATES[this._player.getPlayerState()]) || 'unstarted'\n  }\n\n  getCurrentTime () {\n    return (this._ready && this._player.getCurrentTime()) || 0\n  }\n\n  destroy () {\n    this._destroy()\n  }\n\n  _destroy (err) {\n    if (this.destroyed) return\n    this.destroyed = true\n\n    if (this._player) {\n      this._player.stopVideo && this._player.stopVideo()\n      this._player.destroy()\n    }\n\n    this.videoId = null\n\n    this._id = null\n    this._opts = null\n    this._api = null\n    this._player = null\n    this._ready = false\n    this._queue = null\n\n    this._stopInterval()\n\n    this.removeListener('playing', this._startInterval)\n    this.removeListener('paused', this._stopInterval)\n    this.removeListener('buffering', this._stopInterval)\n    this.removeListener('unstarted', this._stopInterval)\n    this.removeListener('ended', this._stopInterval)\n\n    if (err) this.emit('error', err)\n  }\n\n  _queueCommand (command, ...args) {\n    if (this.destroyed) return\n    this._queue.push([command, args])\n  }\n\n  _flushQueue () {\n    while (this._queue.length) {\n      const command = this._queue.shift()\n      this[command[0]].apply(this, command[1])\n    }\n  }\n\n  _loadIframeAPI (cb) {\n    // If API is loaded, there is nothing else to do\n    if (window.YT && typeof window.YT.Player === 'function') {\n      return cb(null, window.YT)\n    }\n\n    // Otherwise, queue callback until API is loaded\n    loadIframeAPICallbacks.push(cb)\n\n    const scripts = Array.from(document.getElementsByTagName('script'))\n    const isLoading = scripts.some(script => script.src === YOUTUBE_IFRAME_API_SRC)\n\n    // If API <script> tag is not present in the page, inject it. Ensures that\n    // if user includes a hardcoded <script> tag in HTML for performance, another\n    // one will not be added\n    if (!isLoading) {\n      loadScript(YOUTUBE_IFRAME_API_SRC).catch(err => {\n        while (loadIframeAPICallbacks.length) {\n          const loadCb = loadIframeAPICallbacks.shift()\n          loadCb(err)\n        }\n      })\n    }\n\n    // If ready function is not present, create it\n    if (typeof window.onYouTubeIframeAPIReady !== 'function') {\n      window.onYouTubeIframeAPIReady = () => {\n        while (loadIframeAPICallbacks.length) {\n          const loadCb = loadIframeAPICallbacks.shift()\n          loadCb(null, window.YT)\n        }\n      }\n    }\n  }\n\n  _createPlayer (videoId) {\n    if (this.destroyed) return\n\n    const opts = this._opts\n\n    this._player = new this._api.Player(this._id, {\n      width: opts.width,\n      height: opts.height,\n      videoId: videoId,\n      playerVars: {\n        // This parameter specifies whether the initial video will automatically\n        // start to play when the player loads. Supported values are 0 or 1. The\n        // default value is 0.\n        autoplay: opts.autoplay ? 1 : 0,\n\n        // Setting the parameter's value to 1 causes closed captions to be shown\n        // by default, even if the user has turned captions off. The default\n        // behavior is based on user preference.\n        cc_load_policy: opts.captions != null\n          ? opts.captions !== false ? 1 : 0\n          : undefined, // default to not setting this option\n\n        // Sets the player's interface language. The parameter value is an ISO\n        // 639-1 two-letter language code or a fully specified locale. For\n        // example, fr and fr-ca are both valid values. Other language input\n        // codes, such as IETF language tags (BCP 47) might also be handled\n        // properly.\n        hl: (opts.captions != null && opts.captions !== false)\n          ? opts.captions\n          : undefined, // default to not setting this option\n\n        // This parameter specifies the default language that the player will\n        // use to display captions. Set the parameter's value to an ISO 639-1\n        // two-letter language code.\n        cc_lang_pref: (opts.captions != null && opts.captions !== false)\n          ? opts.captions\n          : undefined, // default to not setting this option\n\n        // This parameter indicates whether the video player controls are\n        // displayed. For IFrame embeds that load a Flash player, it also defines\n        // when the controls display in the player as well as when the player\n        // will load. Supported values are:\n        //   - controls=0 – Player controls do not display in the player. For\n        //                  IFrame embeds, the Flash player loads immediately.\n        //   - controls=1 – (default) Player controls display in the player. For\n        //                  IFrame embeds, the controls display immediately and\n        //                  the Flash player also loads immediately.\n        //   - controls=2 – Player controls display in the player. For IFrame\n        //                  embeds, the controls display and the Flash player\n        //                  loads after the user initiates the video playback.\n        controls: opts.controls ? 2 : 0,\n\n        // Setting the parameter's value to 1 causes the player to not respond to\n        // keyboard controls. The default value is 0, which means that keyboard\n        // controls are enabled.\n        disablekb: opts.keyboard ? 0 : 1,\n\n        // Setting the parameter's value to 1 enables the player to be\n        // controlled via IFrame or JavaScript Player API calls. The default\n        // value is 0, which means that the player cannot be controlled using\n        // those APIs.\n        enablejsapi: 1,\n\n        // Setting this parameter to 0 prevents the fullscreen button from\n        // displaying in the player. The default value is 1, which causes the\n        // fullscreen button to display.\n        fs: opts.fullscreen ? 1 : 0,\n\n        // Setting the parameter's value to 1 causes video annotations to be\n        // shown by default, whereas setting to 3 causes video annotations to not\n        // be shown by default. The default value is 1.\n        iv_load_policy: opts.annotations ? 1 : 3,\n\n        // This parameter lets you use a YouTube player that does not show a\n        // YouTube logo. Set the parameter value to 1 to prevent the YouTube logo\n        // from displaying in the control bar. Note that a small YouTube text\n        // label will still display in the upper-right corner of a paused video\n        // when the user's mouse pointer hovers over the player.\n        modestbranding: opts.modestBranding ? 1 : 0,\n\n        // This parameter provides an extra security measure for the IFrame API\n        // and is only supported for IFrame embeds. If you are using the IFrame\n        // API, which means you are setting the enablejsapi parameter value to 1,\n        // you should always specify your domain as the origin parameter value.\n        origin: window.location.origin,\n\n        // This parameter controls whether videos play inline or fullscreen in an\n        // HTML5 player on iOS. Valid values are:\n        //   - 0: This value causes fullscreen playback. This is currently the\n        //        default value, though the default is subject to change.\n        //   - 1: This value causes inline playback for UIWebViews created with\n        //        the allowsInlineMediaPlayback property set to TRUE.\n        playsinline: opts.playsInline ? 1 : 0,\n\n        // This parameter indicates whether the player should show related\n        // videos from the same channel (0) or from any channel (1) when\n        // playback of the video ends. The default value is 1.\n        rel: opts.related ? 1 : 0,\n\n        // (Not part of documented API) Allow html elements with higher z-index\n        // to be shown on top of the YouTube player.\n        wmode: 'opaque'\n      },\n      events: {\n        onReady: () => this._onReady(videoId),\n        onStateChange: (data) => this._onStateChange(data),\n        onPlaybackQualityChange: (data) => this._onPlaybackQualityChange(data),\n        onPlaybackRateChange: (data) => this._onPlaybackRateChange(data),\n        onError: (data) => this._onError(data)\n      }\n    })\n  }\n\n  /**\n   * This event fires when the player has finished loading and is ready to begin\n   * receiving API calls.\n   */\n  _onReady (videoId) {\n    if (this.destroyed) return\n\n    this._ready = true\n\n    // Once the player is ready, always call `load(videoId, [autoplay])` to handle\n    // these possible cases:\n    //\n    //   1. `load(videoId, true)` was called before the player was ready. Ensure that\n    //      the selected video starts to play.\n    //\n    //   2. `load(videoId, false)` was called before the player was ready. Now the\n    //      player is ready and there's nothing to do.\n    //\n    //   3. `load(videoId, [autoplay])` was called multiple times before the player\n    //      was ready. Therefore, the player was initialized with the wrong videoId,\n    //      so load the latest videoId and potentially autoplay it.\n    this.load(this.videoId, this._autoplay)\n\n    this._flushQueue()\n  }\n\n  /**\n   * Called when the player's state changes. We emit friendly events so the user\n   * doesn't need to use YouTube's YT.PlayerState.* event constants.\n   */\n  _onStateChange (data) {\n    if (this.destroyed) return\n\n    const state = YOUTUBE_STATES[data.data]\n\n    if (state) {\n      // Send a 'timeupdate' anytime the state changes. When the video halts for any\n      // reason ('paused', 'buffering', or 'ended') no further 'timeupdate' events\n      // should fire until the video unhalts.\n      if (['paused', 'buffering', 'ended'].includes(state)) this._onTimeupdate()\n\n      this.emit(state)\n\n      // When the video changes ('unstarted' or 'cued') or starts ('playing') then a\n      // 'timeupdate' should follow afterwards (never before!) to reset the time.\n      if (['unstarted', 'playing', 'cued'].includes(state)) this._onTimeupdate()\n    } else {\n      throw new Error('Unrecognized state change: ' + data)\n    }\n  }\n\n  /**\n   * This event fires whenever the video playback quality changes. Possible\n   * values are: 'small', 'medium', 'large', 'hd720', 'hd1080', 'highres'.\n   */\n  _onPlaybackQualityChange (data) {\n    if (this.destroyed) return\n    this.emit('playbackQualityChange', data.data)\n  }\n\n  /**\n   * This event fires whenever the video playback rate changes.\n   */\n  _onPlaybackRateChange (data) {\n    if (this.destroyed) return\n    this.emit('playbackRateChange', data.data)\n  }\n\n  /**\n   * This event fires if an error occurs in the player.\n   */\n  _onError (data) {\n    if (this.destroyed) return\n\n    const code = data.data\n\n    // The HTML5_ERROR error occurs when the YouTube player needs to switch from\n    // HTML5 to Flash to show an ad. Ignore it.\n    if (code === YOUTUBE_ERROR.HTML5_ERROR) return\n\n    // The remaining error types occur when the YouTube player cannot play the\n    // given video. This is not a fatal error. Report it as unplayable so the user\n    // has an opportunity to play another video.\n    if (code === YOUTUBE_ERROR.UNPLAYABLE_1 ||\n        code === YOUTUBE_ERROR.UNPLAYABLE_2 ||\n        code === YOUTUBE_ERROR.NOT_FOUND ||\n        code === YOUTUBE_ERROR.INVALID_PARAM) {\n      return this.emit('unplayable', this.videoId)\n    }\n\n    // Unexpected error, does not match any known type\n    this._destroy(new Error('YouTube Player Error. Unknown error code: ' + code))\n  }\n\n  /**\n   * This event fires when the time indicated by the `getCurrentTime()` method\n   * has been updated.\n   */\n  _onTimeupdate () {\n    this.emit('timeupdate', this.getCurrentTime())\n  }\n\n  _startInterval () {\n    this._interval = setInterval(() => this._onTimeupdate(), this._opts.timeupdateFrequency)\n  }\n\n  _stopInterval () {\n    clearInterval(this._interval)\n    this._interval = null\n  }\n}\n\nmodule.exports = YouTubePlayer\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n  ? R.apply\n  : function ReflectApply(target, receiver, args) {\n    return Function.prototype.apply.call(target, receiver, args);\n  }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n  ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target)\n      .concat(Object.getOwnPropertySymbols(target));\n  };\n} else {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target);\n  };\n}\n\nfunction ProcessEmitWarning(warning) {\n  if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n  return value !== value;\n}\n\nfunction EventEmitter() {\n  EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n  if (typeof listener !== 'function') {\n    throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n  }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n  enumerable: true,\n  get: function() {\n    return defaultMaxListeners;\n  },\n  set: function(arg) {\n    if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n      throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n    }\n    defaultMaxListeners = arg;\n  }\n});\n\nEventEmitter.init = function() {\n\n  if (this._events === undefined ||\n      this._events === Object.getPrototypeOf(this)._events) {\n    this._events = Object.create(null);\n    this._eventsCount = 0;\n  }\n\n  this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n  if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n    throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n  }\n  this._maxListeners = n;\n  return this;\n};\n\nfunction _getMaxListeners(that) {\n  if (that._maxListeners === undefined)\n    return EventEmitter.defaultMaxListeners;\n  return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n  return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n  var args = [];\n  for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n  var doError = (type === 'error');\n\n  var events = this._events;\n  if (events !== undefined)\n    doError = (doError && events.error === undefined);\n  else if (!doError)\n    return false;\n\n  // If there is no 'error' event listener then throw.\n  if (doError) {\n    var er;\n    if (args.length > 0)\n      er = args[0];\n    if (er instanceof Error) {\n      // Note: The comments on the `throw` lines are intentional, they show\n      // up in Node's output if this results in an unhandled exception.\n      throw er; // Unhandled 'error' event\n    }\n    // At least give some kind of context to the user\n    var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n    err.context = er;\n    throw err; // Unhandled 'error' event\n  }\n\n  var handler = events[type];\n\n  if (handler === undefined)\n    return false;\n\n  if (typeof handler === 'function') {\n    ReflectApply(handler, this, args);\n  } else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      ReflectApply(listeners[i], this, args);\n  }\n\n  return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n  var m;\n  var events;\n  var existing;\n\n  checkListener(listener);\n\n  events = target._events;\n  if (events === undefined) {\n    events = target._events = Object.create(null);\n    target._eventsCount = 0;\n  } else {\n    // To avoid recursion in the case that type === \"newListener\"! Before\n    // adding it to the listeners, first emit \"newListener\".\n    if (events.newListener !== undefined) {\n      target.emit('newListener', type,\n                  listener.listener ? listener.listener : listener);\n\n      // Re-assign `events` because a newListener handler could have caused the\n      // this._events to be assigned to a new object\n      events = target._events;\n    }\n    existing = events[type];\n  }\n\n  if (existing === undefined) {\n    // Optimize the case of one listener. Don't need the extra array object.\n    existing = events[type] = listener;\n    ++target._eventsCount;\n  } else {\n    if (typeof existing === 'function') {\n      // Adding the second element, need to change to array.\n      existing = events[type] =\n        prepend ? [listener, existing] : [existing, listener];\n      // If we've already got an array, just append.\n    } else if (prepend) {\n      existing.unshift(listener);\n    } else {\n      existing.push(listener);\n    }\n\n    // Check for listener leak\n    m = _getMaxListeners(target);\n    if (m > 0 && existing.length > m && !existing.warned) {\n      existing.warned = true;\n      // No error code for this since it is a Warning\n      // eslint-disable-next-line no-restricted-syntax\n      var w = new Error('Possible EventEmitter memory leak detected. ' +\n                          existing.length + ' ' + String(type) + ' listeners ' +\n                          'added. Use emitter.setMaxListeners() to ' +\n                          'increase limit');\n      w.name = 'MaxListenersExceededWarning';\n      w.emitter = target;\n      w.type = type;\n      w.count = existing.length;\n      ProcessEmitWarning(w);\n    }\n  }\n\n  return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n  return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n    function prependListener(type, listener) {\n      return _addListener(this, type, listener, true);\n    };\n\nfunction onceWrapper() {\n  if (!this.fired) {\n    this.target.removeListener(this.type, this.wrapFn);\n    this.fired = true;\n    if (arguments.length === 0)\n      return this.listener.call(this.target);\n    return this.listener.apply(this.target, arguments);\n  }\n}\n\nfunction _onceWrap(target, type, listener) {\n  var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n  var wrapped = onceWrapper.bind(state);\n  wrapped.listener = listener;\n  state.wrapFn = wrapped;\n  return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n  checkListener(listener);\n  this.on(type, _onceWrap(this, type, listener));\n  return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n    function prependOnceListener(type, listener) {\n      checkListener(listener);\n      this.prependListener(type, _onceWrap(this, type, listener));\n      return this;\n    };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n    function removeListener(type, listener) {\n      var list, events, position, i, originalListener;\n\n      checkListener(listener);\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      list = events[type];\n      if (list === undefined)\n        return this;\n\n      if (list === listener || list.listener === listener) {\n        if (--this._eventsCount === 0)\n          this._events = Object.create(null);\n        else {\n          delete events[type];\n          if (events.removeListener)\n            this.emit('removeListener', type, list.listener || listener);\n        }\n      } else if (typeof list !== 'function') {\n        position = -1;\n\n        for (i = list.length - 1; i >= 0; i--) {\n          if (list[i] === listener || list[i].listener === listener) {\n            originalListener = list[i].listener;\n            position = i;\n            break;\n          }\n        }\n\n        if (position < 0)\n          return this;\n\n        if (position === 0)\n          list.shift();\n        else {\n          spliceOne(list, position);\n        }\n\n        if (list.length === 1)\n          events[type] = list[0];\n\n        if (events.removeListener !== undefined)\n          this.emit('removeListener', type, originalListener || listener);\n      }\n\n      return this;\n    };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n    function removeAllListeners(type) {\n      var listeners, events, i;\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      // not listening for removeListener, no need to emit\n      if (events.removeListener === undefined) {\n        if (arguments.length === 0) {\n          this._events = Object.create(null);\n          this._eventsCount = 0;\n        } else if (events[type] !== undefined) {\n          if (--this._eventsCount === 0)\n            this._events = Object.create(null);\n          else\n            delete events[type];\n        }\n        return this;\n      }\n\n      // emit removeListener for all listeners on all events\n      if (arguments.length === 0) {\n        var keys = Object.keys(events);\n        var key;\n        for (i = 0; i < keys.length; ++i) {\n          key = keys[i];\n          if (key === 'removeListener') continue;\n          this.removeAllListeners(key);\n        }\n        this.removeAllListeners('removeListener');\n        this._events = Object.create(null);\n        this._eventsCount = 0;\n        return this;\n      }\n\n      listeners = events[type];\n\n      if (typeof listeners === 'function') {\n        this.removeListener(type, listeners);\n      } else if (listeners !== undefined) {\n        // LIFO order\n        for (i = listeners.length - 1; i >= 0; i--) {\n          this.removeListener(type, listeners[i]);\n        }\n      }\n\n      return this;\n    };\n\nfunction _listeners(target, type, unwrap) {\n  var events = target._events;\n\n  if (events === undefined)\n    return [];\n\n  var evlistener = events[type];\n  if (evlistener === undefined)\n    return [];\n\n  if (typeof evlistener === 'function')\n    return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n  return unwrap ?\n    unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n  return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n  return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  if (typeof emitter.listenerCount === 'function') {\n    return emitter.listenerCount(type);\n  } else {\n    return listenerCount.call(emitter, type);\n  }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n  var events = this._events;\n\n  if (events !== undefined) {\n    var evlistener = events[type];\n\n    if (typeof evlistener === 'function') {\n      return 1;\n    } else if (evlistener !== undefined) {\n      return evlistener.length;\n    }\n  }\n\n  return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n  return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n  var copy = new Array(n);\n  for (var i = 0; i < n; ++i)\n    copy[i] = arr[i];\n  return copy;\n}\n\nfunction spliceOne(list, index) {\n  for (; index + 1 < list.length; index++)\n    list[index] = list[index + 1];\n  list.pop();\n}\n\nfunction unwrapListeners(arr) {\n  var ret = new Array(arr.length);\n  for (var i = 0; i < ret.length; ++i) {\n    ret[i] = arr[i].listener || arr[i];\n  }\n  return ret;\n}\n\nfunction once(emitter, name) {\n  return new Promise(function (resolve, reject) {\n    function errorListener(err) {\n      emitter.removeListener(name, resolver);\n      reject(err);\n    }\n\n    function resolver() {\n      if (typeof emitter.removeListener === 'function') {\n        emitter.removeListener('error', errorListener);\n      }\n      resolve([].slice.call(arguments));\n    };\n\n    eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n    if (name !== 'error') {\n      addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n    }\n  });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n  if (typeof emitter.on === 'function') {\n    eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n  }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n  if (typeof emitter.on === 'function') {\n    if (flags.once) {\n      emitter.once(name, listener);\n    } else {\n      emitter.on(name, listener);\n    }\n  } else if (typeof emitter.addEventListener === 'function') {\n    // EventTarget does not have `error` event semantics like Node\n    // EventEmitters, we do not listen for `error` events here.\n    emitter.addEventListener(name, function wrapListener(arg) {\n      // IE does not have builtin `{ once: true }` support so we\n      // have to do it manually.\n      if (flags.once) {\n        emitter.removeEventListener(name, wrapListener);\n      }\n      listener(arg);\n    });\n  } else {\n    throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n  }\n}\n","/*! load-script2. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nmodule.exports = function loadScript2 (src, attrs, parentNode) {\n  return new Promise((resolve, reject) => {\n    const script = document.createElement('script')\n    script.async = true\n    script.src = src\n\n    for (const [k, v] of Object.entries(attrs || {})) {\n      script.setAttribute(k, v)\n    }\n\n    script.onload = () => {\n      script.onerror = script.onload = null\n      resolve(script)\n    }\n\n    script.onerror = () => {\n      script.onerror = script.onload = null\n      reject(new Error(`Failed to load ${src}`))\n    }\n\n    const node = parentNode || document.head || document.getElementsByTagName('head')[0]\n    node.appendChild(script)\n  })\n}\n"],"sourceRoot":""}