{"version":3,"sources":["webpack:///./src/views/pages/E-Learning/LiveClass/index.vue?0ce0","webpack:///./node_modules/@videojs/http-streaming/node_modules/mux.js/lib/utils/numbers.js","webpack:///./node_modules/@videojs/http-streaming/node_modules/mux.js/lib/utils/clock.js","webpack:///./node_modules/@videojs/http-streaming/node_modules/mux.js/lib/tools/parse-sidx.js","webpack:///./node_modules/@videojs/http-streaming/node_modules/m3u8-parser/dist/m3u8-parser.es.js","webpack:///./src/event-bus.js","webpack:///./src/views/pages/E-Learning/LiveClass/index.vue?7974","webpack:///./src/components/common-ui/video-player/index.vue?a7ba","webpack:///src/components/common-ui/video-player/index.vue","webpack:///./src/components/common-ui/video-player/index.vue?6d3a","webpack:///./src/components/common-ui/video-player/index.vue?81d7","webpack:///src/views/pages/E-Learning/LiveClass/index.vue","webpack:///./src/views/pages/E-Learning/LiveClass/index.vue?1501","webpack:///./src/views/pages/E-Learning/LiveClass/index.vue?9650","webpack:///./src/components/common-ui/video-player/index.vue?8fdb"],"names":["MAX_UINT32","Math","pow","getUint64","uint8","value","dv","DataView","buffer","byteOffset","byteLength","getBigUint64","Number","MAX_SAFE_INTEGER","getUint32","module","exports","secondsToVideoTs","secondsToAudioTs","videoTsToSeconds","audioTsToSeconds","audioTsToVideoTs","videoTsToAudioTs","metadataTsToSeconds","ONE_SECOND_IN_TS","seconds","sampleRate","timestamp","timelineStartPts","keepOriginalTimestamps","parseSidx","data","view","result","version","flags","Uint8Array","subarray","references","referenceId","timescale","i","earliestPresentationTime","firstOffset","referenceCount","getUint16","push","referenceType","referencedSize","subsegmentDuration","startsWithSap","sapType","sapDeltaTime","LineStream","super","this","nextNewline","indexOf","trigger","substring","TAB","String","fromCharCode","parseByterange","byterangeString","match","exec","length","parseInt","offset","attributeSeparator","key","keyvalue","RegExp","parseAttributes","attributes","attrs","split","attr","slice","replace","parseResolution","resolution","width","height","ParseStream","customParsers","tagMappers","line","event","trim","type","uri","newLines","reduce","acc","mapper","mappedLine","concat","forEach","newLine","call","tagType","duration","parseFloat","title","number","playlistType","allowed","test","URI","BYTERANGE","byterange","RESOLUTION","BANDWIDTH","dateTimeString","dateTimeObject","Date","IV","toLowerCase","Uint32Array","PRECISE","hasOwnProperty","subkey","toString","clientAttributePattern","isHexaDecimal","isDecimalFloating","text","expression","customType","dataParser","segment","map","mapFn","camelCase","str","a","toUpperCase","camelCaseKeys","Object","keys","setHoldBack","manifest","serverControl","targetDuration","partTargetDuration","tag","hb","phb","minTargetDuration","minPartDuration","message","Parser","opts","lineStream","parseStream","pipe","mainDefinitions","params","URL","searchParams","lastProgramDateTime","self","uris","currentMap","currentUri","hasParts","noop","defaultMediaGroups","widevineUuid","currentTimeline","allowCache","discontinuityStarts","dateRanges","iFramePlaylists","segments","lastByterangeEnd","lastPartByterangeEnd","dateRangeTags","on","parts","preloadHints","timeline","preloadSegment","entry","mediaGroup","rendition","definitions","def","endList","mediaSequence","discontinuitySequence","METHOD","KEYFORMAT","contentProtection","VALID_METHODS","KEYID","schemeIdUri","keyId","pssh","method","iv","isFinite","playlist","playlists","mediaGroups","TYPE","NAME","mediaGroupType","default","DEFAULT","autoselect","AUTOSELECT","LANGUAGE","language","instreamId","CHARACTERISTICS","characteristics","FORCED","forced","discontinuity","getTime","reduceRight","programDateTime","isNaN","start","timeOffset","precise","cueOut","cueOutCont","cueIn","skip","warnOnMissingAttributes_","segmentIndex","part","partIndex","renditionReports","r","canBlockReload","canSkipDateranges","hint","isPart","index","otherHint","report","required","partInf","partTarget","dateRange","endDate","startDate","plannedDuration","endOnNextYes","endOnNext","class","newDateInSeconds","id","attribute","JSON","stringify","dateRangeWithSameId","findIndex","dateRangeToFind","pop","independentSegments","iFramesOnly","requiredCompatibilityversion","contentSteering","addDef","n","v","val","get","QUERYPARAM","decodeURIComponent","VALUE","IMPORT","custom","currentVersion","targetVersion","identifier","missing","join","chunk","options","addParser","addTagMapper","Vue","render","_vm","_h","$createElement","_c","_self","staticClass","liveError","_v","$event","routeTo","ref","staticStyle","isSidebarActive","isContentTabButtonActive","assign","videoOptions","sources","generateVideoSource","feature","currentLiveClass","staticRenderFns","name","props","html5","vdoSetTopicId","player","methods","generateVideoPlayer","_this","$refs","videoPlayer","controls","currentTime","lastCurrentTime","localStorage","getItem","currentUserId","mounted","beforeDestroy","dispose","component","components","VideoPlayer","Chat","status","nolive","mainPanelMode","mainPanelWidth","window","innerWidth","userLiveClassSession","currentVideoContent","videoWatchStat","vdoLoading","vdoPlayingCount","units","unitSeqs","autoplay","fluid","nativeControlsForTouch","nativeControls","isLive","liveui","stream_key","computed","learningCourse","$store","state","User","currentLearningCourse","student","Student","profile","teacher","subject","courseOutline","courseOutlineRegistration","courseOutlineAssessments","courseOutlineUnits","classSection","classAssignments","classMaterials","exams","validStream","studentUnitTests","LiveClass","watch","route","$router","assignemntDueDateFormatter","date","setVideoEvents","getVideoPlayingTime","videoWatchingId","userClassSession","getPlayingPercent","created","setTimeout","vm","error","code","destroyed","removeEventListener"],"mappings":"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","file":"js/chunk-2480014b.81c509a8.js","sourcesContent":["import mod from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=style&index=0&lang=scss&\"","var MAX_UINT32 = Math.pow(2, 32);\n\nvar getUint64 = function(uint8) {\n var dv = new DataView(uint8.buffer, uint8.byteOffset, uint8.byteLength);\n var value;\n\n if (dv.getBigUint64) {\n value = dv.getBigUint64(0);\n\n if (value < Number.MAX_SAFE_INTEGER) {\n return Number(value);\n }\n\n return value;\n }\n\n return (dv.getUint32(0) * MAX_UINT32) + dv.getUint32(4);\n};\n\nmodule.exports = {\n getUint64: getUint64,\n MAX_UINT32: MAX_UINT32\n};\n","/**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n */\nvar\n ONE_SECOND_IN_TS = 90000, // 90kHz clock\n secondsToVideoTs,\n secondsToAudioTs,\n videoTsToSeconds,\n audioTsToSeconds,\n audioTsToVideoTs,\n videoTsToAudioTs,\n metadataTsToSeconds;\n\nsecondsToVideoTs = function(seconds) {\n return seconds * ONE_SECOND_IN_TS;\n};\n\nsecondsToAudioTs = function(seconds, sampleRate) {\n return seconds * sampleRate;\n};\n\nvideoTsToSeconds = function(timestamp) {\n return timestamp / ONE_SECOND_IN_TS;\n};\n\naudioTsToSeconds = function(timestamp, sampleRate) {\n return timestamp / sampleRate;\n};\n\naudioTsToVideoTs = function(timestamp, sampleRate) {\n return secondsToVideoTs(audioTsToSeconds(timestamp, sampleRate));\n};\n\nvideoTsToAudioTs = function(timestamp, sampleRate) {\n return secondsToAudioTs(videoTsToSeconds(timestamp), sampleRate);\n};\n\n/**\n * Adjust ID3 tag or caption timing information by the timeline pts values\n * (if keepOriginalTimestamps is false) and convert to seconds\n */\nmetadataTsToSeconds = function(timestamp, timelineStartPts, keepOriginalTimestamps) {\n return videoTsToSeconds(keepOriginalTimestamps ? timestamp : timestamp - timelineStartPts);\n};\n\nmodule.exports = {\n ONE_SECOND_IN_TS: ONE_SECOND_IN_TS,\n secondsToVideoTs: secondsToVideoTs,\n secondsToAudioTs: secondsToAudioTs,\n videoTsToSeconds: videoTsToSeconds,\n audioTsToSeconds: audioTsToSeconds,\n audioTsToVideoTs: audioTsToVideoTs,\n videoTsToAudioTs: videoTsToAudioTs,\n metadataTsToSeconds: metadataTsToSeconds\n};\n","var getUint64 = require('../utils/numbers.js').getUint64;\n\nvar parseSidx = function(data) {\n var view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n result = {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n references: [],\n referenceId: view.getUint32(4),\n timescale: view.getUint32(8)\n },\n i = 12;\n\n if (result.version === 0) {\n result.earliestPresentationTime = view.getUint32(i);\n result.firstOffset = view.getUint32(i + 4);\n i += 8;\n } else {\n // read 64 bits\n result.earliestPresentationTime = getUint64(data.subarray(i));\n result.firstOffset = getUint64(data.subarray(i + 8));\n i += 16;\n }\n\n i += 2; // reserved\n\n var referenceCount = view.getUint16(i);\n\n i += 2; // start of references\n\n for (; referenceCount > 0; i += 12, referenceCount--) {\n result.references.push({\n referenceType: (data[i] & 0x80) >>> 7,\n referencedSize: view.getUint32(i) & 0x7FFFFFFF,\n subsegmentDuration: view.getUint32(i + 4),\n startsWithSap: !!(data[i + 8] & 0x80),\n sapType: (data[i + 8] & 0x70) >>> 4,\n sapDeltaTime: view.getUint32(i + 8) & 0x0FFFFFFF\n });\n }\n\n return result;\n};\n\n\nmodule.exports = parseSidx;\n","/*! @name m3u8-parser @version 7.2.0 @license Apache-2.0 */\nimport Stream from '@videojs/vhs-utils/es/stream.js';\nimport _extends from '@babel/runtime/helpers/extends';\nimport decodeB64ToUint8Array from '@videojs/vhs-utils/es/decode-b64-to-uint8-array.js';\n\n/**\n * @file m3u8/line-stream.js\n */\n/**\n * A stream that buffers string input and generates a `data` event for each\n * line.\n *\n * @class LineStream\n * @extends Stream\n */\n\nclass LineStream extends Stream {\n constructor() {\n super();\n this.buffer = '';\n }\n /**\n * Add new data to be parsed.\n *\n * @param {string} data the text to process\n */\n\n\n push(data) {\n let nextNewline;\n this.buffer += data;\n nextNewline = this.buffer.indexOf('\\n');\n\n for (; nextNewline > -1; nextNewline = this.buffer.indexOf('\\n')) {\n this.trigger('data', this.buffer.substring(0, nextNewline));\n this.buffer = this.buffer.substring(nextNewline + 1);\n }\n }\n\n}\n\nconst TAB = String.fromCharCode(0x09);\n\nconst parseByterange = function (byterangeString) {\n // optionally match and capture 0+ digits before `@`\n // optionally match and capture 0+ digits after `@`\n const match = /([0-9.]*)?@?([0-9.]*)?/.exec(byterangeString || '');\n const result = {};\n\n if (match[1]) {\n result.length = parseInt(match[1], 10);\n }\n\n if (match[2]) {\n result.offset = parseInt(match[2], 10);\n }\n\n return result;\n};\n/**\n * \"forgiving\" attribute list psuedo-grammar:\n * attributes -> keyvalue (',' keyvalue)*\n * keyvalue -> key '=' value\n * key -> [^=]*\n * value -> '\"' [^\"]* '\"' | [^,]*\n */\n\n\nconst attributeSeparator = function () {\n const key = '[^=]*';\n const value = '\"[^\"]*\"|[^,]*';\n const keyvalue = '(?:' + key + ')=(?:' + value + ')';\n return new RegExp('(?:^|,)(' + keyvalue + ')');\n};\n/**\n * Parse attributes from a line given the separator\n *\n * @param {string} attributes the attribute line to parse\n */\n\n\nconst parseAttributes = function (attributes) {\n const result = {};\n\n if (!attributes) {\n return result;\n } // split the string using attributes as the separator\n\n\n const attrs = attributes.split(attributeSeparator());\n let i = attrs.length;\n let attr;\n\n while (i--) {\n // filter out unmatched portions of the string\n if (attrs[i] === '') {\n continue;\n } // split the key and value\n\n\n attr = /([^=]*)=(.*)/.exec(attrs[i]).slice(1); // trim whitespace and remove optional quotes around the value\n\n attr[0] = attr[0].replace(/^\\s+|\\s+$/g, '');\n attr[1] = attr[1].replace(/^\\s+|\\s+$/g, '');\n attr[1] = attr[1].replace(/^['\"](.*)['\"]$/g, '$1');\n result[attr[0]] = attr[1];\n }\n\n return result;\n};\n/**\n * Converts a string into a resolution object\n *\n * @param {string} resolution a string such as 3840x2160\n *\n * @return {Object} An object representing the resolution\n *\n */\n\n\nconst parseResolution = resolution => {\n const split = resolution.split('x');\n const result = {};\n\n if (split[0]) {\n result.width = parseInt(split[0], 10);\n }\n\n if (split[1]) {\n result.height = parseInt(split[1], 10);\n }\n\n return result;\n};\n/**\n * A line-level M3U8 parser event stream. It expects to receive input one\n * line at a time and performs a context-free parse of its contents. A stream\n * interpretation of a manifest can be useful if the manifest is expected to\n * be too large to fit comfortably into memory or the entirety of the input\n * is not immediately available. Otherwise, it's probably much easier to work\n * with a regular `Parser` object.\n *\n * Produces `data` events with an object that captures the parser's\n * interpretation of the input. That object has a property `tag` that is one\n * of `uri`, `comment`, or `tag`. URIs only have a single additional\n * property, `line`, which captures the entirety of the input without\n * interpretation. Comments similarly have a single additional property\n * `text` which is the input without the leading `#`.\n *\n * Tags always have a property `tagType` which is the lower-cased version of\n * the M3U8 directive without the `#EXT` or `#EXT-X-` prefix. For instance,\n * `#EXT-X-MEDIA-SEQUENCE` becomes `media-sequence` when parsed. Unrecognized\n * tags are given the tag type `unknown` and a single additional property\n * `data` with the remainder of the input.\n *\n * @class ParseStream\n * @extends Stream\n */\n\n\nclass ParseStream extends Stream {\n constructor() {\n super();\n this.customParsers = [];\n this.tagMappers = [];\n }\n /**\n * Parses an additional line of input.\n *\n * @param {string} line a single line of an M3U8 file to parse\n */\n\n\n push(line) {\n let match;\n let event; // strip whitespace\n\n line = line.trim();\n\n if (line.length === 0) {\n // ignore empty lines\n return;\n } // URIs\n\n\n if (line[0] !== '#') {\n this.trigger('data', {\n type: 'uri',\n uri: line\n });\n return;\n } // map tags\n\n\n const newLines = this.tagMappers.reduce((acc, mapper) => {\n const mappedLine = mapper(line); // skip if unchanged\n\n if (mappedLine === line) {\n return acc;\n }\n\n return acc.concat([mappedLine]);\n }, [line]);\n newLines.forEach(newLine => {\n for (let i = 0; i < this.customParsers.length; i++) {\n if (this.customParsers[i].call(this, newLine)) {\n return;\n }\n } // Comments\n\n\n if (newLine.indexOf('#EXT') !== 0) {\n this.trigger('data', {\n type: 'comment',\n text: newLine.slice(1)\n });\n return;\n } // strip off any carriage returns here so the regex matching\n // doesn't have to account for them.\n\n\n newLine = newLine.replace('\\r', ''); // Tags\n\n match = /^#EXTM3U/.exec(newLine);\n\n if (match) {\n this.trigger('data', {\n type: 'tag',\n tagType: 'm3u'\n });\n return;\n }\n\n match = /^#EXTINF:([0-9\\.]*)?,?(.*)?$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'inf'\n };\n\n if (match[1]) {\n event.duration = parseFloat(match[1]);\n }\n\n if (match[2]) {\n event.title = match[2];\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-TARGETDURATION:([0-9.]*)?/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'targetduration'\n };\n\n if (match[1]) {\n event.duration = parseInt(match[1], 10);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-VERSION:([0-9.]*)?/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'version'\n };\n\n if (match[1]) {\n event.version = parseInt(match[1], 10);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-MEDIA-SEQUENCE:(\\-?[0-9.]*)?/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'media-sequence'\n };\n\n if (match[1]) {\n event.number = parseInt(match[1], 10);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-DISCONTINUITY-SEQUENCE:(\\-?[0-9.]*)?/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'discontinuity-sequence'\n };\n\n if (match[1]) {\n event.number = parseInt(match[1], 10);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-PLAYLIST-TYPE:(.*)?$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'playlist-type'\n };\n\n if (match[1]) {\n event.playlistType = match[1];\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-BYTERANGE:(.*)?$/.exec(newLine);\n\n if (match) {\n event = _extends(parseByterange(match[1]), {\n type: 'tag',\n tagType: 'byterange'\n });\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-ALLOW-CACHE:(YES|NO)?/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'allow-cache'\n };\n\n if (match[1]) {\n event.allowed = !/NO/.test(match[1]);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-MAP:(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'map'\n };\n\n if (match[1]) {\n const attributes = parseAttributes(match[1]);\n\n if (attributes.URI) {\n event.uri = attributes.URI;\n }\n\n if (attributes.BYTERANGE) {\n event.byterange = parseByterange(attributes.BYTERANGE);\n }\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-STREAM-INF:(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'stream-inf'\n };\n\n if (match[1]) {\n event.attributes = parseAttributes(match[1]);\n\n if (event.attributes.RESOLUTION) {\n event.attributes.RESOLUTION = parseResolution(event.attributes.RESOLUTION);\n }\n\n if (event.attributes.BANDWIDTH) {\n event.attributes.BANDWIDTH = parseInt(event.attributes.BANDWIDTH, 10);\n }\n\n if (event.attributes['FRAME-RATE']) {\n event.attributes['FRAME-RATE'] = parseFloat(event.attributes['FRAME-RATE']);\n }\n\n if (event.attributes['PROGRAM-ID']) {\n event.attributes['PROGRAM-ID'] = parseInt(event.attributes['PROGRAM-ID'], 10);\n }\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-MEDIA:(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'media'\n };\n\n if (match[1]) {\n event.attributes = parseAttributes(match[1]);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-ENDLIST/.exec(newLine);\n\n if (match) {\n this.trigger('data', {\n type: 'tag',\n tagType: 'endlist'\n });\n return;\n }\n\n match = /^#EXT-X-DISCONTINUITY/.exec(newLine);\n\n if (match) {\n this.trigger('data', {\n type: 'tag',\n tagType: 'discontinuity'\n });\n return;\n }\n\n match = /^#EXT-X-PROGRAM-DATE-TIME:(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'program-date-time'\n };\n\n if (match[1]) {\n event.dateTimeString = match[1];\n event.dateTimeObject = new Date(match[1]);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-KEY:(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'key'\n };\n\n if (match[1]) {\n event.attributes = parseAttributes(match[1]); // parse the IV string into a Uint32Array\n\n if (event.attributes.IV) {\n if (event.attributes.IV.substring(0, 2).toLowerCase() === '0x') {\n event.attributes.IV = event.attributes.IV.substring(2);\n }\n\n event.attributes.IV = event.attributes.IV.match(/.{8}/g);\n event.attributes.IV[0] = parseInt(event.attributes.IV[0], 16);\n event.attributes.IV[1] = parseInt(event.attributes.IV[1], 16);\n event.attributes.IV[2] = parseInt(event.attributes.IV[2], 16);\n event.attributes.IV[3] = parseInt(event.attributes.IV[3], 16);\n event.attributes.IV = new Uint32Array(event.attributes.IV);\n }\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-START:(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'start'\n };\n\n if (match[1]) {\n event.attributes = parseAttributes(match[1]);\n event.attributes['TIME-OFFSET'] = parseFloat(event.attributes['TIME-OFFSET']);\n event.attributes.PRECISE = /YES/.test(event.attributes.PRECISE);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-CUE-OUT-CONT:(.*)?$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'cue-out-cont'\n };\n\n if (match[1]) {\n event.data = match[1];\n } else {\n event.data = '';\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-CUE-OUT:(.*)?$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'cue-out'\n };\n\n if (match[1]) {\n event.data = match[1];\n } else {\n event.data = '';\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-CUE-IN:?(.*)?$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'cue-in'\n };\n\n if (match[1]) {\n event.data = match[1];\n } else {\n event.data = '';\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-SKIP:(.*)$/.exec(newLine);\n\n if (match && match[1]) {\n event = {\n type: 'tag',\n tagType: 'skip'\n };\n event.attributes = parseAttributes(match[1]);\n\n if (event.attributes.hasOwnProperty('SKIPPED-SEGMENTS')) {\n event.attributes['SKIPPED-SEGMENTS'] = parseInt(event.attributes['SKIPPED-SEGMENTS'], 10);\n }\n\n if (event.attributes.hasOwnProperty('RECENTLY-REMOVED-DATERANGES')) {\n event.attributes['RECENTLY-REMOVED-DATERANGES'] = event.attributes['RECENTLY-REMOVED-DATERANGES'].split(TAB);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-PART:(.*)$/.exec(newLine);\n\n if (match && match[1]) {\n event = {\n type: 'tag',\n tagType: 'part'\n };\n event.attributes = parseAttributes(match[1]);\n ['DURATION'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = parseFloat(event.attributes[key]);\n }\n });\n ['INDEPENDENT', 'GAP'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = /YES/.test(event.attributes[key]);\n }\n });\n\n if (event.attributes.hasOwnProperty('BYTERANGE')) {\n event.attributes.byterange = parseByterange(event.attributes.BYTERANGE);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-SERVER-CONTROL:(.*)$/.exec(newLine);\n\n if (match && match[1]) {\n event = {\n type: 'tag',\n tagType: 'server-control'\n };\n event.attributes = parseAttributes(match[1]);\n ['CAN-SKIP-UNTIL', 'PART-HOLD-BACK', 'HOLD-BACK'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = parseFloat(event.attributes[key]);\n }\n });\n ['CAN-SKIP-DATERANGES', 'CAN-BLOCK-RELOAD'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = /YES/.test(event.attributes[key]);\n }\n });\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-PART-INF:(.*)$/.exec(newLine);\n\n if (match && match[1]) {\n event = {\n type: 'tag',\n tagType: 'part-inf'\n };\n event.attributes = parseAttributes(match[1]);\n ['PART-TARGET'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = parseFloat(event.attributes[key]);\n }\n });\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-PRELOAD-HINT:(.*)$/.exec(newLine);\n\n if (match && match[1]) {\n event = {\n type: 'tag',\n tagType: 'preload-hint'\n };\n event.attributes = parseAttributes(match[1]);\n ['BYTERANGE-START', 'BYTERANGE-LENGTH'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = parseInt(event.attributes[key], 10);\n const subkey = key === 'BYTERANGE-LENGTH' ? 'length' : 'offset';\n event.attributes.byterange = event.attributes.byterange || {};\n event.attributes.byterange[subkey] = event.attributes[key]; // only keep the parsed byterange object.\n\n delete event.attributes[key];\n }\n });\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-RENDITION-REPORT:(.*)$/.exec(newLine);\n\n if (match && match[1]) {\n event = {\n type: 'tag',\n tagType: 'rendition-report'\n };\n event.attributes = parseAttributes(match[1]);\n ['LAST-MSN', 'LAST-PART'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = parseInt(event.attributes[key], 10);\n }\n });\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-DATERANGE:(.*)$/.exec(newLine);\n\n if (match && match[1]) {\n event = {\n type: 'tag',\n tagType: 'daterange'\n };\n event.attributes = parseAttributes(match[1]);\n ['ID', 'CLASS'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = String(event.attributes[key]);\n }\n });\n ['START-DATE', 'END-DATE'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = new Date(event.attributes[key]);\n }\n });\n ['DURATION', 'PLANNED-DURATION'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = parseFloat(event.attributes[key]);\n }\n });\n ['END-ON-NEXT'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = /YES/i.test(event.attributes[key]);\n }\n });\n ['SCTE35-CMD', ' SCTE35-OUT', 'SCTE35-IN'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = event.attributes[key].toString(16);\n }\n });\n const clientAttributePattern = /^X-([A-Z]+-)+[A-Z]+$/;\n\n for (const key in event.attributes) {\n if (!clientAttributePattern.test(key)) {\n continue;\n }\n\n const isHexaDecimal = /[0-9A-Fa-f]{6}/g.test(event.attributes[key]);\n const isDecimalFloating = /^\\d+(\\.\\d+)?$/.test(event.attributes[key]);\n event.attributes[key] = isHexaDecimal ? event.attributes[key].toString(16) : isDecimalFloating ? parseFloat(event.attributes[key]) : String(event.attributes[key]);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-INDEPENDENT-SEGMENTS/.exec(newLine);\n\n if (match) {\n this.trigger('data', {\n type: 'tag',\n tagType: 'independent-segments'\n });\n return;\n }\n\n match = /^#EXT-X-I-FRAMES-ONLY/.exec(newLine);\n\n if (match) {\n this.trigger('data', {\n type: 'tag',\n tagType: 'i-frames-only'\n });\n return;\n }\n\n match = /^#EXT-X-CONTENT-STEERING:(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'content-steering'\n };\n event.attributes = parseAttributes(match[1]);\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-I-FRAME-STREAM-INF:(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'i-frame-playlist'\n };\n event.attributes = parseAttributes(match[1]);\n\n if (event.attributes.URI) {\n event.uri = event.attributes.URI;\n }\n\n if (event.attributes.BANDWIDTH) {\n event.attributes.BANDWIDTH = parseInt(event.attributes.BANDWIDTH, 10);\n }\n\n if (event.attributes.RESOLUTION) {\n event.attributes.RESOLUTION = parseResolution(event.attributes.RESOLUTION);\n }\n\n if (event.attributes['AVERAGE-BANDWIDTH']) {\n event.attributes['AVERAGE-BANDWIDTH'] = parseInt(event.attributes['AVERAGE-BANDWIDTH'], 10);\n }\n\n if (event.attributes['FRAME-RATE']) {\n event.attributes['FRAME-RATE'] = parseFloat(event.attributes['FRAME-RATE']);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-DEFINE:(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'define'\n };\n event.attributes = parseAttributes(match[1]);\n this.trigger('data', event);\n return;\n } // unknown tag type\n\n\n this.trigger('data', {\n type: 'tag',\n data: newLine.slice(4)\n });\n });\n }\n /**\n * Add a parser for custom headers\n *\n * @param {Object} options a map of options for the added parser\n * @param {RegExp} options.expression a regular expression to match the custom header\n * @param {string} options.customType the custom type to register to the output\n * @param {Function} [options.dataParser] function to parse the line into an object\n * @param {boolean} [options.segment] should tag data be attached to the segment object\n */\n\n\n addParser({\n expression,\n customType,\n dataParser,\n segment\n }) {\n if (typeof dataParser !== 'function') {\n dataParser = line => line;\n }\n\n this.customParsers.push(line => {\n const match = expression.exec(line);\n\n if (match) {\n this.trigger('data', {\n type: 'custom',\n data: dataParser(line),\n customType,\n segment\n });\n return true;\n }\n });\n }\n /**\n * Add a custom header mapper\n *\n * @param {Object} options\n * @param {RegExp} options.expression a regular expression to match the custom header\n * @param {Function} options.map function to translate tag into a different tag\n */\n\n\n addTagMapper({\n expression,\n map\n }) {\n const mapFn = line => {\n if (expression.test(line)) {\n return map(line);\n }\n\n return line;\n };\n\n this.tagMappers.push(mapFn);\n }\n\n}\n\nconst camelCase = str => str.toLowerCase().replace(/-(\\w)/g, a => a[1].toUpperCase());\n\nconst camelCaseKeys = function (attributes) {\n const result = {};\n Object.keys(attributes).forEach(function (key) {\n result[camelCase(key)] = attributes[key];\n });\n return result;\n}; // set SERVER-CONTROL hold back based upon targetDuration and partTargetDuration\n// we need this helper because defaults are based upon targetDuration and\n// partTargetDuration being set, but they may not be if SERVER-CONTROL appears before\n// target durations are set.\n\n\nconst setHoldBack = function (manifest) {\n const {\n serverControl,\n targetDuration,\n partTargetDuration\n } = manifest;\n\n if (!serverControl) {\n return;\n }\n\n const tag = '#EXT-X-SERVER-CONTROL';\n const hb = 'holdBack';\n const phb = 'partHoldBack';\n const minTargetDuration = targetDuration && targetDuration * 3;\n const minPartDuration = partTargetDuration && partTargetDuration * 2;\n\n if (targetDuration && !serverControl.hasOwnProperty(hb)) {\n serverControl[hb] = minTargetDuration;\n this.trigger('info', {\n message: `${tag} defaulting HOLD-BACK to targetDuration * 3 (${minTargetDuration}).`\n });\n }\n\n if (minTargetDuration && serverControl[hb] < minTargetDuration) {\n this.trigger('warn', {\n message: `${tag} clamping HOLD-BACK (${serverControl[hb]}) to targetDuration * 3 (${minTargetDuration})`\n });\n serverControl[hb] = minTargetDuration;\n } // default no part hold back to part target duration * 3\n\n\n if (partTargetDuration && !serverControl.hasOwnProperty(phb)) {\n serverControl[phb] = partTargetDuration * 3;\n this.trigger('info', {\n message: `${tag} defaulting PART-HOLD-BACK to partTargetDuration * 3 (${serverControl[phb]}).`\n });\n } // if part hold back is too small default it to part target duration * 2\n\n\n if (partTargetDuration && serverControl[phb] < minPartDuration) {\n this.trigger('warn', {\n message: `${tag} clamping PART-HOLD-BACK (${serverControl[phb]}) to partTargetDuration * 2 (${minPartDuration}).`\n });\n serverControl[phb] = minPartDuration;\n }\n};\n/**\n * A parser for M3U8 files. The current interpretation of the input is\n * exposed as a property `manifest` on parser objects. It's just two lines to\n * create and parse a manifest once you have the contents available as a string:\n *\n * ```js\n * var parser = new m3u8.Parser();\n * parser.push(xhr.responseText);\n * ```\n *\n * New input can later be applied to update the manifest object by calling\n * `push` again.\n *\n * The parser attempts to create a usable manifest object even if the\n * underlying input is somewhat nonsensical. It emits `info` and `warning`\n * events during the parse if it encounters input that seems invalid or\n * requires some property of the manifest object to be defaulted.\n *\n * @class Parser\n * @param {Object} [opts] Options for the constructor, needed for substitutions\n * @param {string} [opts.uri] URL to check for query params\n * @param {Object} [opts.mainDefinitions] Definitions on main playlist that can be imported\n * @extends Stream\n */\n\n\nclass Parser extends Stream {\n constructor(opts = {}) {\n super();\n this.lineStream = new LineStream();\n this.parseStream = new ParseStream();\n this.lineStream.pipe(this.parseStream);\n this.mainDefinitions = opts.mainDefinitions || {};\n this.params = new URL(opts.uri, 'https://a.com').searchParams;\n this.lastProgramDateTime = null;\n /* eslint-disable consistent-this */\n\n const self = this;\n /* eslint-enable consistent-this */\n\n const uris = [];\n let currentUri = {}; // if specified, the active EXT-X-MAP definition\n\n let currentMap; // if specified, the active decryption key\n\n let key;\n let hasParts = false;\n\n const noop = function () {};\n\n const defaultMediaGroups = {\n 'AUDIO': {},\n 'VIDEO': {},\n 'CLOSED-CAPTIONS': {},\n 'SUBTITLES': {}\n }; // This is the Widevine UUID from DASH IF IOP. The same exact string is\n // used in MPDs with Widevine encrypted streams.\n\n const widevineUuid = 'urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed'; // group segments into numbered timelines delineated by discontinuities\n\n let currentTimeline = 0; // the manifest is empty until the parse stream begins delivering data\n\n this.manifest = {\n allowCache: true,\n discontinuityStarts: [],\n dateRanges: [],\n iFramePlaylists: [],\n segments: []\n }; // keep track of the last seen segment's byte range end, as segments are not required\n // to provide the offset, in which case it defaults to the next byte after the\n // previous segment\n\n let lastByterangeEnd = 0; // keep track of the last seen part's byte range end.\n\n let lastPartByterangeEnd = 0;\n const dateRangeTags = {};\n this.on('end', () => {\n // only add preloadSegment if we don't yet have a uri for it.\n // and we actually have parts/preloadHints\n if (currentUri.uri || !currentUri.parts && !currentUri.preloadHints) {\n return;\n }\n\n if (!currentUri.map && currentMap) {\n currentUri.map = currentMap;\n }\n\n if (!currentUri.key && key) {\n currentUri.key = key;\n }\n\n if (!currentUri.timeline && typeof currentTimeline === 'number') {\n currentUri.timeline = currentTimeline;\n }\n\n this.manifest.preloadSegment = currentUri;\n }); // update the manifest with the m3u8 entry from the parse stream\n\n this.parseStream.on('data', function (entry) {\n let mediaGroup;\n let rendition; // Replace variables in uris and attributes as defined in #EXT-X-DEFINE tags\n\n if (self.manifest.definitions) {\n for (const def in self.manifest.definitions) {\n if (entry.uri) {\n entry.uri = entry.uri.replace(`{$${def}}`, self.manifest.definitions[def]);\n }\n\n if (entry.attributes) {\n for (const attr in entry.attributes) {\n if (typeof entry.attributes[attr] === 'string') {\n entry.attributes[attr] = entry.attributes[attr].replace(`{$${def}}`, self.manifest.definitions[def]);\n }\n }\n }\n }\n }\n\n ({\n tag() {\n // switch based on the tag type\n (({\n version() {\n if (entry.version) {\n this.manifest.version = entry.version;\n }\n },\n\n 'allow-cache'() {\n this.manifest.allowCache = entry.allowed;\n\n if (!('allowed' in entry)) {\n this.trigger('info', {\n message: 'defaulting allowCache to YES'\n });\n this.manifest.allowCache = true;\n }\n },\n\n byterange() {\n const byterange = {};\n\n if ('length' in entry) {\n currentUri.byterange = byterange;\n byterange.length = entry.length;\n\n if (!('offset' in entry)) {\n /*\n * From the latest spec (as of this writing):\n * https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-4.3.2.2\n *\n * Same text since EXT-X-BYTERANGE's introduction in draft 7:\n * https://tools.ietf.org/html/draft-pantos-http-live-streaming-07#section-3.3.1)\n *\n * \"If o [offset] is not present, the sub-range begins at the next byte\n * following the sub-range of the previous media segment.\"\n */\n entry.offset = lastByterangeEnd;\n }\n }\n\n if ('offset' in entry) {\n currentUri.byterange = byterange;\n byterange.offset = entry.offset;\n }\n\n lastByterangeEnd = byterange.offset + byterange.length;\n },\n\n endlist() {\n this.manifest.endList = true;\n },\n\n inf() {\n if (!('mediaSequence' in this.manifest)) {\n this.manifest.mediaSequence = 0;\n this.trigger('info', {\n message: 'defaulting media sequence to zero'\n });\n }\n\n if (!('discontinuitySequence' in this.manifest)) {\n this.manifest.discontinuitySequence = 0;\n this.trigger('info', {\n message: 'defaulting discontinuity sequence to zero'\n });\n }\n\n if (entry.title) {\n currentUri.title = entry.title;\n }\n\n if (entry.duration > 0) {\n currentUri.duration = entry.duration;\n }\n\n if (entry.duration === 0) {\n currentUri.duration = 0.01;\n this.trigger('info', {\n message: 'updating zero segment duration to a small value'\n });\n }\n\n this.manifest.segments = uris;\n },\n\n key() {\n if (!entry.attributes) {\n this.trigger('warn', {\n message: 'ignoring key declaration without attribute list'\n });\n return;\n } // clear the active encryption key\n\n\n if (entry.attributes.METHOD === 'NONE') {\n key = null;\n return;\n }\n\n if (!entry.attributes.URI) {\n this.trigger('warn', {\n message: 'ignoring key declaration without URI'\n });\n return;\n }\n\n if (entry.attributes.KEYFORMAT === 'com.apple.streamingkeydelivery') {\n this.manifest.contentProtection = this.manifest.contentProtection || {}; // TODO: add full support for this.\n\n this.manifest.contentProtection['com.apple.fps.1_0'] = {\n attributes: entry.attributes\n };\n return;\n }\n\n if (entry.attributes.KEYFORMAT === 'com.microsoft.playready') {\n this.manifest.contentProtection = this.manifest.contentProtection || {}; // TODO: add full support for this.\n\n this.manifest.contentProtection['com.microsoft.playready'] = {\n uri: entry.attributes.URI\n };\n return;\n } // check if the content is encrypted for Widevine\n // Widevine/HLS spec: https://storage.googleapis.com/wvdocs/Widevine_DRM_HLS.pdf\n\n\n if (entry.attributes.KEYFORMAT === widevineUuid) {\n const VALID_METHODS = ['SAMPLE-AES', 'SAMPLE-AES-CTR', 'SAMPLE-AES-CENC'];\n\n if (VALID_METHODS.indexOf(entry.attributes.METHOD) === -1) {\n this.trigger('warn', {\n message: 'invalid key method provided for Widevine'\n });\n return;\n }\n\n if (entry.attributes.METHOD === 'SAMPLE-AES-CENC') {\n this.trigger('warn', {\n message: 'SAMPLE-AES-CENC is deprecated, please use SAMPLE-AES-CTR instead'\n });\n }\n\n if (entry.attributes.URI.substring(0, 23) !== 'data:text/plain;base64,') {\n this.trigger('warn', {\n message: 'invalid key URI provided for Widevine'\n });\n return;\n }\n\n if (!(entry.attributes.KEYID && entry.attributes.KEYID.substring(0, 2) === '0x')) {\n this.trigger('warn', {\n message: 'invalid key ID provided for Widevine'\n });\n return;\n } // if Widevine key attributes are valid, store them as `contentProtection`\n // on the manifest to emulate Widevine tag structure in a DASH mpd\n\n\n this.manifest.contentProtection = this.manifest.contentProtection || {};\n this.manifest.contentProtection['com.widevine.alpha'] = {\n attributes: {\n schemeIdUri: entry.attributes.KEYFORMAT,\n // remove '0x' from the key id string\n keyId: entry.attributes.KEYID.substring(2)\n },\n // decode the base64-encoded PSSH box\n pssh: decodeB64ToUint8Array(entry.attributes.URI.split(',')[1])\n };\n return;\n }\n\n if (!entry.attributes.METHOD) {\n this.trigger('warn', {\n message: 'defaulting key method to AES-128'\n });\n } // setup an encryption key for upcoming segments\n\n\n key = {\n method: entry.attributes.METHOD || 'AES-128',\n uri: entry.attributes.URI\n };\n\n if (typeof entry.attributes.IV !== 'undefined') {\n key.iv = entry.attributes.IV;\n }\n },\n\n 'media-sequence'() {\n if (!isFinite(entry.number)) {\n this.trigger('warn', {\n message: 'ignoring invalid media sequence: ' + entry.number\n });\n return;\n }\n\n this.manifest.mediaSequence = entry.number;\n },\n\n 'discontinuity-sequence'() {\n if (!isFinite(entry.number)) {\n this.trigger('warn', {\n message: 'ignoring invalid discontinuity sequence: ' + entry.number\n });\n return;\n }\n\n this.manifest.discontinuitySequence = entry.number;\n currentTimeline = entry.number;\n },\n\n 'playlist-type'() {\n if (!/VOD|EVENT/.test(entry.playlistType)) {\n this.trigger('warn', {\n message: 'ignoring unknown playlist type: ' + entry.playlist\n });\n return;\n }\n\n this.manifest.playlistType = entry.playlistType;\n },\n\n map() {\n currentMap = {};\n\n if (entry.uri) {\n currentMap.uri = entry.uri;\n }\n\n if (entry.byterange) {\n currentMap.byterange = entry.byterange;\n }\n\n if (key) {\n currentMap.key = key;\n }\n },\n\n 'stream-inf'() {\n this.manifest.playlists = uris;\n this.manifest.mediaGroups = this.manifest.mediaGroups || defaultMediaGroups;\n\n if (!entry.attributes) {\n this.trigger('warn', {\n message: 'ignoring empty stream-inf attributes'\n });\n return;\n }\n\n if (!currentUri.attributes) {\n currentUri.attributes = {};\n }\n\n _extends(currentUri.attributes, entry.attributes);\n },\n\n media() {\n this.manifest.mediaGroups = this.manifest.mediaGroups || defaultMediaGroups;\n\n if (!(entry.attributes && entry.attributes.TYPE && entry.attributes['GROUP-ID'] && entry.attributes.NAME)) {\n this.trigger('warn', {\n message: 'ignoring incomplete or missing media group'\n });\n return;\n } // find the media group, creating defaults as necessary\n\n\n const mediaGroupType = this.manifest.mediaGroups[entry.attributes.TYPE];\n mediaGroupType[entry.attributes['GROUP-ID']] = mediaGroupType[entry.attributes['GROUP-ID']] || {};\n mediaGroup = mediaGroupType[entry.attributes['GROUP-ID']]; // collect the rendition metadata\n\n rendition = {\n default: /yes/i.test(entry.attributes.DEFAULT)\n };\n\n if (rendition.default) {\n rendition.autoselect = true;\n } else {\n rendition.autoselect = /yes/i.test(entry.attributes.AUTOSELECT);\n }\n\n if (entry.attributes.LANGUAGE) {\n rendition.language = entry.attributes.LANGUAGE;\n }\n\n if (entry.attributes.URI) {\n rendition.uri = entry.attributes.URI;\n }\n\n if (entry.attributes['INSTREAM-ID']) {\n rendition.instreamId = entry.attributes['INSTREAM-ID'];\n }\n\n if (entry.attributes.CHARACTERISTICS) {\n rendition.characteristics = entry.attributes.CHARACTERISTICS;\n }\n\n if (entry.attributes.FORCED) {\n rendition.forced = /yes/i.test(entry.attributes.FORCED);\n } // insert the new rendition\n\n\n mediaGroup[entry.attributes.NAME] = rendition;\n },\n\n discontinuity() {\n currentTimeline += 1;\n currentUri.discontinuity = true;\n this.manifest.discontinuityStarts.push(uris.length);\n },\n\n 'program-date-time'() {\n if (typeof this.manifest.dateTimeString === 'undefined') {\n // PROGRAM-DATE-TIME is a media-segment tag, but for backwards\n // compatibility, we add the first occurence of the PROGRAM-DATE-TIME tag\n // to the manifest object\n // TODO: Consider removing this in future major version\n this.manifest.dateTimeString = entry.dateTimeString;\n this.manifest.dateTimeObject = entry.dateTimeObject;\n }\n\n currentUri.dateTimeString = entry.dateTimeString;\n currentUri.dateTimeObject = entry.dateTimeObject;\n const {\n lastProgramDateTime\n } = this;\n this.lastProgramDateTime = new Date(entry.dateTimeString).getTime(); // We should extrapolate Program Date Time backward only during first program date time occurrence.\n // Once we have at least one program date time point, we can always extrapolate it forward using lastProgramDateTime reference.\n\n if (lastProgramDateTime === null) {\n // Extrapolate Program Date Time backward\n // Since it is first program date time occurrence we're assuming that\n // all this.manifest.segments have no program date time info\n this.manifest.segments.reduceRight((programDateTime, segment) => {\n segment.programDateTime = programDateTime - segment.duration * 1000;\n return segment.programDateTime;\n }, this.lastProgramDateTime);\n }\n },\n\n targetduration() {\n if (!isFinite(entry.duration) || entry.duration < 0) {\n this.trigger('warn', {\n message: 'ignoring invalid target duration: ' + entry.duration\n });\n return;\n }\n\n this.manifest.targetDuration = entry.duration;\n setHoldBack.call(this, this.manifest);\n },\n\n start() {\n if (!entry.attributes || isNaN(entry.attributes['TIME-OFFSET'])) {\n this.trigger('warn', {\n message: 'ignoring start declaration without appropriate attribute list'\n });\n return;\n }\n\n this.manifest.start = {\n timeOffset: entry.attributes['TIME-OFFSET'],\n precise: entry.attributes.PRECISE\n };\n },\n\n 'cue-out'() {\n currentUri.cueOut = entry.data;\n },\n\n 'cue-out-cont'() {\n currentUri.cueOutCont = entry.data;\n },\n\n 'cue-in'() {\n currentUri.cueIn = entry.data;\n },\n\n 'skip'() {\n this.manifest.skip = camelCaseKeys(entry.attributes);\n this.warnOnMissingAttributes_('#EXT-X-SKIP', entry.attributes, ['SKIPPED-SEGMENTS']);\n },\n\n 'part'() {\n hasParts = true; // parts are always specifed before a segment\n\n const segmentIndex = this.manifest.segments.length;\n const part = camelCaseKeys(entry.attributes);\n currentUri.parts = currentUri.parts || [];\n currentUri.parts.push(part);\n\n if (part.byterange) {\n if (!part.byterange.hasOwnProperty('offset')) {\n part.byterange.offset = lastPartByterangeEnd;\n }\n\n lastPartByterangeEnd = part.byterange.offset + part.byterange.length;\n }\n\n const partIndex = currentUri.parts.length - 1;\n this.warnOnMissingAttributes_(`#EXT-X-PART #${partIndex} for segment #${segmentIndex}`, entry.attributes, ['URI', 'DURATION']);\n\n if (this.manifest.renditionReports) {\n this.manifest.renditionReports.forEach((r, i) => {\n if (!r.hasOwnProperty('lastPart')) {\n this.trigger('warn', {\n message: `#EXT-X-RENDITION-REPORT #${i} lacks required attribute(s): LAST-PART`\n });\n }\n });\n }\n },\n\n 'server-control'() {\n const attrs = this.manifest.serverControl = camelCaseKeys(entry.attributes);\n\n if (!attrs.hasOwnProperty('canBlockReload')) {\n attrs.canBlockReload = false;\n this.trigger('info', {\n message: '#EXT-X-SERVER-CONTROL defaulting CAN-BLOCK-RELOAD to false'\n });\n }\n\n setHoldBack.call(this, this.manifest);\n\n if (attrs.canSkipDateranges && !attrs.hasOwnProperty('canSkipUntil')) {\n this.trigger('warn', {\n message: '#EXT-X-SERVER-CONTROL lacks required attribute CAN-SKIP-UNTIL which is required when CAN-SKIP-DATERANGES is set'\n });\n }\n },\n\n 'preload-hint'() {\n // parts are always specifed before a segment\n const segmentIndex = this.manifest.segments.length;\n const hint = camelCaseKeys(entry.attributes);\n const isPart = hint.type && hint.type === 'PART';\n currentUri.preloadHints = currentUri.preloadHints || [];\n currentUri.preloadHints.push(hint);\n\n if (hint.byterange) {\n if (!hint.byterange.hasOwnProperty('offset')) {\n // use last part byterange end or zero if not a part.\n hint.byterange.offset = isPart ? lastPartByterangeEnd : 0;\n\n if (isPart) {\n lastPartByterangeEnd = hint.byterange.offset + hint.byterange.length;\n }\n }\n }\n\n const index = currentUri.preloadHints.length - 1;\n this.warnOnMissingAttributes_(`#EXT-X-PRELOAD-HINT #${index} for segment #${segmentIndex}`, entry.attributes, ['TYPE', 'URI']);\n\n if (!hint.type) {\n return;\n } // search through all preload hints except for the current one for\n // a duplicate type.\n\n\n for (let i = 0; i < currentUri.preloadHints.length - 1; i++) {\n const otherHint = currentUri.preloadHints[i];\n\n if (!otherHint.type) {\n continue;\n }\n\n if (otherHint.type === hint.type) {\n this.trigger('warn', {\n message: `#EXT-X-PRELOAD-HINT #${index} for segment #${segmentIndex} has the same TYPE ${hint.type} as preload hint #${i}`\n });\n }\n }\n },\n\n 'rendition-report'() {\n const report = camelCaseKeys(entry.attributes);\n this.manifest.renditionReports = this.manifest.renditionReports || [];\n this.manifest.renditionReports.push(report);\n const index = this.manifest.renditionReports.length - 1;\n const required = ['LAST-MSN', 'URI'];\n\n if (hasParts) {\n required.push('LAST-PART');\n }\n\n this.warnOnMissingAttributes_(`#EXT-X-RENDITION-REPORT #${index}`, entry.attributes, required);\n },\n\n 'part-inf'() {\n this.manifest.partInf = camelCaseKeys(entry.attributes);\n this.warnOnMissingAttributes_('#EXT-X-PART-INF', entry.attributes, ['PART-TARGET']);\n\n if (this.manifest.partInf.partTarget) {\n this.manifest.partTargetDuration = this.manifest.partInf.partTarget;\n }\n\n setHoldBack.call(this, this.manifest);\n },\n\n 'daterange'() {\n this.manifest.dateRanges.push(camelCaseKeys(entry.attributes));\n const index = this.manifest.dateRanges.length - 1;\n this.warnOnMissingAttributes_(`#EXT-X-DATERANGE #${index}`, entry.attributes, ['ID', 'START-DATE']);\n const dateRange = this.manifest.dateRanges[index];\n\n if (dateRange.endDate && dateRange.startDate && new Date(dateRange.endDate) < new Date(dateRange.startDate)) {\n this.trigger('warn', {\n message: 'EXT-X-DATERANGE END-DATE must be equal to or later than the value of the START-DATE'\n });\n }\n\n if (dateRange.duration && dateRange.duration < 0) {\n this.trigger('warn', {\n message: 'EXT-X-DATERANGE DURATION must not be negative'\n });\n }\n\n if (dateRange.plannedDuration && dateRange.plannedDuration < 0) {\n this.trigger('warn', {\n message: 'EXT-X-DATERANGE PLANNED-DURATION must not be negative'\n });\n }\n\n const endOnNextYes = !!dateRange.endOnNext;\n\n if (endOnNextYes && !dateRange.class) {\n this.trigger('warn', {\n message: 'EXT-X-DATERANGE with an END-ON-NEXT=YES attribute must have a CLASS attribute'\n });\n }\n\n if (endOnNextYes && (dateRange.duration || dateRange.endDate)) {\n this.trigger('warn', {\n message: 'EXT-X-DATERANGE with an END-ON-NEXT=YES attribute must not contain DURATION or END-DATE attributes'\n });\n }\n\n if (dateRange.duration && dateRange.endDate) {\n const startDate = dateRange.startDate;\n const newDateInSeconds = startDate.getTime() + dateRange.duration * 1000;\n this.manifest.dateRanges[index].endDate = new Date(newDateInSeconds);\n }\n\n if (!dateRangeTags[dateRange.id]) {\n dateRangeTags[dateRange.id] = dateRange;\n } else {\n for (const attribute in dateRangeTags[dateRange.id]) {\n if (!!dateRange[attribute] && JSON.stringify(dateRangeTags[dateRange.id][attribute]) !== JSON.stringify(dateRange[attribute])) {\n this.trigger('warn', {\n message: 'EXT-X-DATERANGE tags with the same ID in a playlist must have the same attributes values'\n });\n break;\n }\n } // if tags with the same ID do not have conflicting attributes, merge them\n\n\n const dateRangeWithSameId = this.manifest.dateRanges.findIndex(dateRangeToFind => dateRangeToFind.id === dateRange.id);\n this.manifest.dateRanges[dateRangeWithSameId] = _extends(this.manifest.dateRanges[dateRangeWithSameId], dateRange);\n dateRangeTags[dateRange.id] = _extends(dateRangeTags[dateRange.id], dateRange); // after merging, delete the duplicate dateRange that was added last\n\n this.manifest.dateRanges.pop();\n }\n },\n\n 'independent-segments'() {\n this.manifest.independentSegments = true;\n },\n\n 'i-frames-only'() {\n this.manifest.iFramesOnly = true;\n this.requiredCompatibilityversion(this.manifest.version, 4);\n },\n\n 'content-steering'() {\n this.manifest.contentSteering = camelCaseKeys(entry.attributes);\n this.warnOnMissingAttributes_('#EXT-X-CONTENT-STEERING', entry.attributes, ['SERVER-URI']);\n },\n\n /** @this {Parser} */\n define() {\n this.manifest.definitions = this.manifest.definitions || {};\n\n const addDef = (n, v) => {\n if (n in this.manifest.definitions) {\n // An EXT-X-DEFINE tag MUST NOT specify the same Variable Name as any other\n // EXT-X-DEFINE tag in the same Playlist. Parsers that encounter duplicate\n // Variable Name declarations MUST fail to parse the Playlist.\n this.trigger('error', {\n message: `EXT-X-DEFINE: Duplicate name ${n}`\n });\n return;\n }\n\n this.manifest.definitions[n] = v;\n };\n\n if ('QUERYPARAM' in entry.attributes) {\n if ('NAME' in entry.attributes || 'IMPORT' in entry.attributes) {\n // An EXT-X-DEFINE tag MUST contain either a NAME, an IMPORT, or a\n // QUERYPARAM attribute, but only one of the three. Otherwise, the\n // client MUST fail to parse the Playlist.\n this.trigger('error', {\n message: 'EXT-X-DEFINE: Invalid attributes'\n });\n return;\n }\n\n const val = this.params.get(entry.attributes.QUERYPARAM);\n\n if (!val) {\n // If the QUERYPARAM attribute value does not match any query parameter in\n // the URI or the matching parameter has no associated value, the parser\n // MUST fail to parse the Playlist. If more than one parameter matches,\n // any of the associated values MAY be used.\n this.trigger('error', {\n message: `EXT-X-DEFINE: No query param ${entry.attributes.QUERYPARAM}`\n });\n return;\n }\n\n addDef(entry.attributes.QUERYPARAM, decodeURIComponent(val));\n return;\n }\n\n if ('NAME' in entry.attributes) {\n if ('IMPORT' in entry.attributes) {\n // An EXT-X-DEFINE tag MUST contain either a NAME, an IMPORT, or a\n // QUERYPARAM attribute, but only one of the three. Otherwise, the\n // client MUST fail to parse the Playlist.\n this.trigger('error', {\n message: 'EXT-X-DEFINE: Invalid attributes'\n });\n return;\n }\n\n if (!('VALUE' in entry.attributes) || typeof entry.attributes.VALUE !== 'string') {\n // This attribute is REQUIRED if the EXT-X-DEFINE tag has a NAME attribute.\n // The quoted-string MAY be empty.\n this.trigger('error', {\n message: `EXT-X-DEFINE: No value for ${entry.attributes.NAME}`\n });\n return;\n }\n\n addDef(entry.attributes.NAME, entry.attributes.VALUE);\n return;\n }\n\n if ('IMPORT' in entry.attributes) {\n if (!this.mainDefinitions[entry.attributes.IMPORT]) {\n // Covers two conditions, as mainDefinitions will always be empty on main\n //\n // EXT-X-DEFINE tags containing the IMPORT attribute MUST NOT occur in\n // Multivariant Playlists; they are only allowed in Media Playlists.\n //\n // If the IMPORT attribute value does not match any Variable Name in the\n // Multivariant Playlist, or if the Media Playlist loaded from a\n // Multivariant Playlist, the parser MUST fail the Playlist.\n this.trigger('error', {\n message: `EXT-X-DEFINE: No value ${entry.attributes.IMPORT} to import, or IMPORT used on main playlist`\n });\n return;\n }\n\n addDef(entry.attributes.IMPORT, this.mainDefinitions[entry.attributes.IMPORT]);\n return;\n } // An EXT-X-DEFINE tag MUST contain either a NAME, an IMPORT, or a QUERYPARAM\n // attribute, but only one of the three. Otherwise, the client MUST fail to\n // parse the Playlist.\n\n\n this.trigger('error', {\n message: 'EXT-X-DEFINE: No attribute'\n });\n },\n\n 'i-frame-playlist'() {\n this.manifest.iFramePlaylists.push({\n attributes: entry.attributes,\n uri: entry.uri,\n timeline: currentTimeline\n });\n this.warnOnMissingAttributes_('#EXT-X-I-FRAME-STREAM-INF', entry.attributes, ['BANDWIDTH', 'URI']);\n }\n\n })[entry.tagType] || noop).call(self);\n },\n\n uri() {\n currentUri.uri = entry.uri;\n uris.push(currentUri); // if no explicit duration was declared, use the target duration\n\n if (this.manifest.targetDuration && !('duration' in currentUri)) {\n this.trigger('warn', {\n message: 'defaulting segment duration to the target duration'\n });\n currentUri.duration = this.manifest.targetDuration;\n } // annotate with encryption information, if necessary\n\n\n if (key) {\n currentUri.key = key;\n }\n\n currentUri.timeline = currentTimeline; // annotate with initialization segment information, if necessary\n\n if (currentMap) {\n currentUri.map = currentMap;\n } // reset the last byterange end as it needs to be 0 between parts\n\n\n lastPartByterangeEnd = 0; // Once we have at least one program date time we can always extrapolate it forward\n\n if (this.lastProgramDateTime !== null) {\n currentUri.programDateTime = this.lastProgramDateTime;\n this.lastProgramDateTime += currentUri.duration * 1000;\n } // prepare for the next URI\n\n\n currentUri = {};\n },\n\n comment() {// comments are not important for playback\n },\n\n custom() {\n // if this is segment-level data attach the output to the segment\n if (entry.segment) {\n currentUri.custom = currentUri.custom || {};\n currentUri.custom[entry.customType] = entry.data; // if this is manifest-level data attach to the top level manifest object\n } else {\n this.manifest.custom = this.manifest.custom || {};\n this.manifest.custom[entry.customType] = entry.data;\n }\n }\n\n })[entry.type].call(self);\n });\n }\n\n requiredCompatibilityversion(currentVersion, targetVersion) {\n if (currentVersion < targetVersion || !currentVersion) {\n this.trigger('warn', {\n message: `manifest must be at least version ${targetVersion}`\n });\n }\n }\n\n warnOnMissingAttributes_(identifier, attributes, required) {\n const missing = [];\n required.forEach(function (key) {\n if (!attributes.hasOwnProperty(key)) {\n missing.push(key);\n }\n });\n\n if (missing.length) {\n this.trigger('warn', {\n message: `${identifier} lacks required attribute(s): ${missing.join(', ')}`\n });\n }\n }\n /**\n * Parse the input string and update the manifest object.\n *\n * @param {string} chunk a potentially incomplete portion of the manifest\n */\n\n\n push(chunk) {\n this.lineStream.push(chunk);\n }\n /**\n * Flush any remaining input. This can be handy if the last line of an M3U8\n * manifest did not contain a trailing newline but the file has been\n * completely received.\n */\n\n\n end() {\n // flush any buffered input\n this.lineStream.push('\\n');\n\n if (this.manifest.dateRanges.length && this.lastProgramDateTime === null) {\n this.trigger('warn', {\n message: 'A playlist with EXT-X-DATERANGE tag must contain atleast one EXT-X-PROGRAM-DATE-TIME tag'\n });\n }\n\n this.lastProgramDateTime = null;\n this.trigger('end');\n }\n /**\n * Add an additional parser for non-standard tags\n *\n * @param {Object} options a map of options for the added parser\n * @param {RegExp} options.expression a regular expression to match the custom header\n * @param {string} options.customType the custom type to register to the output\n * @param {Function} [options.dataParser] function to parse the line into an object\n * @param {boolean} [options.segment] should tag data be attached to the segment object\n */\n\n\n addParser(options) {\n this.parseStream.addParser(options);\n }\n /**\n * Add a custom header mapper\n *\n * @param {Object} options\n * @param {RegExp} options.expression a regular expression to match the custom header\n * @param {Function} options.map function to translate tag into a different tag\n */\n\n\n addTagMapper(options) {\n this.parseStream.addTagMapper(options);\n }\n\n}\n\nexport { LineStream, ParseStream, Parser };\n","// Global Event Bus\n\nimport Vue from \"vue\";\nexport default new Vue();\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"footer-hidden m-0 p-0\",attrs:{\"id\":\"live-class\"}},[(_vm.liveError.status)?_c('div',{staticClass:\"vx-row lg:h-full flex m-0 relative bg-black mr-2 px-20 py-32\"},[_c('div',{staticClass:\"vx-col panel h-screen lg:h-full sm:h-1/2 flex-1 sm:w-1/1 p-0\\n flex flex-col flex-wrap items-center justify-center\\n \"},[_c('h3',{staticClass:\"text-danger text-center mt-20\"},[_vm._v(\"Live is not available right now\")]),_c('div',{staticClass:\"flex justify-center flex-wrap mt-32\"},[_c('vs-button',{staticClass:\"mx-2\",on:{\"click\":function($event){return _vm.routeTo('/')}}},[_vm._v(\"Back to home\")]),_c('vs-button',{staticClass:\"mx-2\",on:{\"click\":function($event){return _vm.routeTo('/liveschedule')}}},[_vm._v(\"View other Live Class\")])],1)])]):_c('div',{staticClass:\"vx-row lg:h-full flex m-0 relative\"},[_c('div',{ref:\"main-panel\",staticClass:\"vx-col panel main-panel h-screen lg:h-full sm:h-1/2 flex-1 sm:w-1/1 p-0\"},[_c('div',{staticClass:\"bg-white w-full h-auto\",staticStyle:{\"position\":\"relative\"}},[_c('vs-button',{staticClass:\"content-tab-button p-2 pb-1 pr-5 flex-inline\",class:{ 'hide': _vm.isSidebarActive },attrs:{\"color\":\"black\",\"type\":\"filled\"},on:{\"click\":function($event){_vm.isSidebarActive = true},\"mouseover\":function($event){_vm.isContentTabButtonActive = true},\"mouseleave\":function($event){_vm.isContentTabButtonActive = false}}},[_c('feather-icon',{staticClass:\"cursor-pointer\",attrs:{\"icon\":\"MessageCircleIcon\",\"svgClasses\":\"text-white stroke-current h-5 w-5 mr-2 p-0\"}}),_c('span',{staticClass:\"my-auto\"},[_vm._v(\"Chat\")])],1),_c('transition',{attrs:{\"name\":\"panel-fade\",\"mode\":\"out-in\"}},[_c('div',{key:\"1\",staticClass:\"bg-black flex justify-center items-center\",staticStyle:{\"height\":\"calc(100vh - 180px)\"}},[_c('VideoPlayer',{ref:\"videoPlayer\",attrs:{\"options\":Object.assign({}, _vm.videoOptions,\n {sources: _vm.generateVideoSource()})}})],1)])],1)]),_c('div',{staticClass:\"vx-col panel side-panel lg:h-full lg:w-1/3 sm:w-1/1 p-0\",class:{ 'hide': !_vm.isSidebarActive },staticStyle:{\"background\":\"#eeeeee\"}},[_c('div',{staticClass:\"flex w-full bg-white p-8 justify-between\"},[_c('span',{staticClass:\"my-auto text-xl\"},[_vm._v(\"Live Chat\")]),_c('vs-button',{attrs:{\"color\":\"warning\",\"icon-pack\":\"feather\",\"icon\":\"icon-x\",\"radius\":\"\"},on:{\"click\":function($event){_vm.isSidebarActive = false}}})],1),_c('vs-divider',{staticClass:\"w-full m-0 p-0 bg-grey\"}),_c('Chat',{attrs:{\"activator\":[{ feature: 'liveclass', id: _vm.currentLiveClass.id }]}})],1)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"video-player\"},[_c('video',{ref:\"videoPlayer\",staticClass:\"video-js\",attrs:{\"controls\":\"\"}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n
\n\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./index.vue?vue&type=template&id=c7b254ac&\"\nimport script from \"./index.vue?vue&type=script&lang=js&\"\nexport * from \"./index.vue?vue&type=script&lang=js&\"\nimport style0 from \"./index.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n \n\n\n\n\n\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./index.vue?vue&type=template&id=1ff51d9a&\"\nimport script from \"./index.vue?vue&type=script&lang=js&\"\nexport * from \"./index.vue?vue&type=script&lang=js&\"\nimport style0 from \"./index.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=style&index=0&lang=scss&\""],"sourceRoot":""}