-
Notifications
You must be signed in to change notification settings - Fork 1.7k
/
dash.mss.min.js.map
1 lines (1 loc) · 262 KB
/
dash.mss.min.js.map
1
{"version":3,"sources":["webpack://dashjs/webpack/universalModuleDefinition","webpack://dashjs/webpack/bootstrap","webpack://dashjs/./src/streaming/vo/DashJSError.js","webpack://dashjs/./src/mss/MssFragmentInfoController.js","webpack://dashjs/./src/mss/errors/MssErrors.js","webpack://dashjs/./src/mss/MssFragmentMoofProcessor.js","webpack://dashjs/./src/mss/MssFragmentMoovProcessor.js","webpack://dashjs/./src/mss/MssFragmentProcessor.js","webpack://dashjs/./src/mss/parser/MssParser.js","webpack://dashjs/./src/mss/MssHandler.js","webpack://dashjs/./src/mss/index.js","webpack://dashjs/(webpack)/buildin/module.js","webpack://dashjs/./src/streaming/vo/FragmentRequest.js","webpack://dashjs/./src/core/events/EventsBase.js","webpack://dashjs/(webpack)/buildin/global.js","webpack://dashjs/./src/core/errors/ErrorsBase.js","webpack://dashjs/./src/streaming/MediaPlayerEvents.js","webpack://dashjs/./src/streaming/vo/metrics/HTTPRequest.js","webpack://dashjs/./externals/BigInteger.js","webpack://dashjs/./src/streaming/vo/DataChunk.js"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","DashJSError","code","message","data","this","MssFragmentInfoController","config","instance","logger","fragmentModel","started","type","loadFragmentTimeout","startTime","startFragmentTime","index","streamProcessor","baseURLController","debug","stop","clearTimeout","loadNextFragmentInfo","representation","getRepresentationController","getCurrentRepresentation","adaptation","period","mpd","manifest","Period_asArray","AdaptationSet_asArray","segments","SegmentTemplate","SegmentTimeline","S_asArray","request","segment","timescale","FragmentRequest","mediaType","HTTPRequest","MSS_FRAGMENT_INFO_SEGMENT_TYPE","duration","quality","mediaInfo","getMediaInfo","adaptationIndex","representationId","id","url","resolve","path","media","replace","bandwidth","tManifest","getRequestForSegment","length","requestFragment","getFragmentModel","isFragmentLoadedOrPending","executeRequest","initialize","getType","controllerType","start","fragmentInfoLoaded","e","deltaFragmentTime","deltaTime","delay","response","Date","getTime","Math","max","setTimeout","error","reset","getLogger","__dashjs_factory_name","dashjs","FactoryMaker","getClassFactory","mssErrors","MSS_NO_TFRF_CODE","MSS_UNSUPPORTED_CODEC_CODE","MSS_NO_TFRF_MESSAGE","MSS_UNSUPPORTED_CODEC_MESSAGE","ErrorsBase","MssFragmentMoofProcessor","dashMetrics","playbackController","errorHandler","errHandler","eventBus","ISOBoxer","processTfrf","tfrf","tfdt","timeShiftBufferDepth","entry","segmentTime","range","endTime","S","entries","availabilityStartTime","parseFloat","fragment_absolute_time","end","baseMediaDecodeTime","updateDVR","getStreamInfo","manifestInfo","fragment_duration","lastSegment","push","isPaused","splice","trigger","Events","MANIFEST_VALIDITY_CHANGED","sender","newDuration","MssErrors","dvrInfos","getCurrentDVRInfo","addDVRInfo","updateCurrentTime","getBoxOffset","parent","offset","boxes","size","convertFragment","isoFile","parseBuffer","tfhd","fetch","track_ID","traf","createFullBox","version","flags","floor","trun","tfxd","_parent","indexOf","sepiff","usertype","undefined","saio","entry_count","saiz","sample_count","default_sample_info_size","sample_info_size","NumberOfEntries","moof","getLength","data_offset","trafPosInMoof","sencPosInTraf","write","updateSegmentList","Error","MssFragmentMoovProcessor","adaptationSet","contentProtection","trackId","constants","protectionController","createMoovBox","moov","createBox","mvhd","creation_time","modification_time","Infinity","round","rate","volume","reserved1","reserved2","matrix","pre_defined","next_track_ID","createMvhdBox","trak","tkhd","layer","alternate_group","reserved3","width","height","createTkhdBox","mdia","mdhd","language","lang","createMdhdBox","hdlr","VIDEO","handler_type","AUDIO","reserved","createHdlrBox","minf","vmhd","graphicsmode","opcolor","createVmhdBox","smhd","balance","createSmhdBox","dinf","dref","location","createDrefBox","stbl","_data","stsd","codec","codecs","substring","avc1","data_reference_index","pre_defined1","pre_defined2","horizresolution","vertresolution","frame_count","compressorname","depth","pre_defined3","naluBytes","avcC","avcCLength","sps","pps","AVCProfileIndication","AVCLevelIndication","profile_compatibility","nalus","codecPrivateData","split","slice","hexStringtoBuffer","Uint8Array","set","createAVC1ConfigurationRecord","sinf","createOriginalFormatBox","createSchemeTypeBox","createSchemeInformationBox","createAVCVisualSampleEntry","mp4a","channelcount","audioChannels","samplesize","reserved_3","samplerate","audioSamplingRate","esds","audioSpecificConfig","esdsLength","createMPEG4AACESDescriptor","createMP4AudioSampleEntry","createSampleEntry","createStsdBox","trex","default_sample_description_index","default_sample_duration","default_sample_size","default_sample_flags","createTrexBox","keySystems","pssh_bytes","pssh","parsedBuffer","initData","Utils","appendBox","createProtectionSystemSpecificHeaderBox","getSupportedKeySystemsFromContentProtection","data_format","str","charCodeAt","stringToCharCode","schm","scheme_type","scheme_version","schi","tenc","default_IsEncrypted","default_IV_size","default_KID","createTrackEncryptionBox","buf","parseInt","generateMoov","rep","ContentProtection","ftyp","major_brand","minor_version","compatible_brands","createFtypBox","createFile","arrayEqual","arr1","arr2","every","element","saioProcessor","_procFullBox","_procField","_procFieldArray","saizProcessor","sencProcessor","_procEntries","_procEntryField","_procSubEntries","clearAndCryptedData","uuidProcessor","_parsing","fragment_count","MssFragmentProcessor","mssFragmentMoovProcessor","mssFragmentMoofProcessor","context","processFragment","addBoxProcessor","MssParser","initialBufferSettings","BASE64","manifestModel","settings","SUPPORTED_CODECS","ROLE","ACCESSIBILITY","samplingFrequencyIndex","96000","88200","64000","48000","44100","32000","24000","22050","16000","12000","11025","8000","7350","mimeTypeMap","getAttributeAsBoolean","node","attrName","getAttribute","toLowerCase","mapAdaptationSet","streamIndex","segmentTemplate","qualityLevels","representations","fallBackId","contentType","mimeType","subType","maxWidth","maxHeight","role","schemeIdUri","Role","Role_asArray","accessibility","Accessibility","Accessibility_asArray","mediaUrl","streamIndexTimeScale","prevSegment","j","segmentTimeline","chunks","getElementsByTagName","BigInt","greater","Number","MAX_SAFE_INTEGER","subtract","toJSNumber","add","toString","mapSegmentTimeline","availabilityTimeOffset","mapSegmentTemplate","BaseURL","Id","mapRepresentation","Representation","Representation_asArray","qualityLevel","fourCCValue","isNaN","toUpperCase","warn","nalHeader","exec","substr","getH264Codec","codecPrivateDataHex","arr16","indexFreq","extensionSamplingFrequencyIndex","samplingRate","objectType","Channels","Uint16Array","setAttribute","getAACCodec","STPP","getKIDFromProtectionHeader","protectionHeader","wrmHeader","KID","uuid","prHeader","recordType","recordLength","recordValue","subarray","getWRMHeaderFromPRHeader","decodeArray","firstChild","buffer","String","fromCharCode","apply","DOMParser","parseFromString","querySelector","textContent","swapBytes","bytes","pos1","pos2","temp","processManifest","xmlDoc","adaptations","timestampOffset","segmentDuration","contentProtections","smoothStreamingMedia","protection","protocol","profiles","dvrWindowLength","mediaPresentationDuration","minBufferTime","ttmlTimeIsRelative","refreshManifestOnSwitchTrack","doNotUpdateDVRWindowOnBufferUpdated","ignorePostponeTimePeriod","Period","streams","AdaptationSet","mapPeriod","pro","__text","__prefix","pro_asArray","createPRContentProtection","widevineCP","wvCencHeader","encodeASCII","createWidevineContentProtection","ContentProtection_asArray","initialization","min","targetLiveDelay","streaming","liveDelay","liveDelayFragmentCount","targetDelayCapping","bufferTime","stableBufferTime","bufferTimeAtTopQuality","bufferTimeAtTopQualityLongForm","calcFromSegmentTimeline","timeShiftBuffer","update","prevManifest","getValue","presentationTimeOffset","parse","performance","now","parseDOM","xmlParseTime","mss2dashTime","info","toPrecision","getMatchers","getIron","MssHandler","mssParser","fragmentInfoControllers","events","initSegmentType","streamController","mssFragmentProcessor","getStreamProcessor","getActiveStreamProcessors","filter","processor","getFragmentInfoController","controller","startFragmentInfoControllers","forEach","TEXT","fragmentInfoController","onInitFragmentNeeded","chunk","streamId","endFragment","DataChunk","segmentType","createDataChunk","streamInfo","FRAGMENT_LOADING_PROGRESS","INIT_FRAGMENT_LOADED","onSegmentMediaLoaded","isDynamic","dvrWindowSize","onPlaybackPaused","getIsDynamic","onPlaybackSeeking","onTTMLPreProcess","ttmlSubtitles","off","INIT_FRAGMENT_NEEDED","PLAYBACK_PAUSED","PLAYBACK_SEEKING","FRAGMENT_LOADING_COMPLETED","TTML_TO_PARSE","createMssParser","registerEvents","on","priority","getSingletonFactoryByName","getClassName","EVENT_PRIORITY_HIGH","errors","updateClassFactory","global","webpackPolyfill","deprecate","paths","children","action","ACTION_DOWNLOAD","NaN","mediaStartTime","serviceLocation","requestStartDate","firstByteDate","requestEndDate","availabilityEndTime","wallStartTime","bytesLoaded","bytesTotal","delayLoadingTime","responseType","INIT_SEGMENT_TYPE","init","MEDIA_SEGMENT_TYPE","ACTION_COMPLETE","EventsBase","override","publicOnly","evt","g","Function","err","mediaPlayerEvents","AST_IN_FUTURE","BUFFER_EMPTY","BUFFER_LOADED","BUFFER_LEVEL_STATE_CHANGED","BUFFER_LEVEL_UPDATED","DYNAMIC_TO_STATIC","ERROR","FRAGMENT_LOADING_STARTED","FRAGMENT_LOADING_ABANDONED","LOG","MANIFEST_LOADED","METRICS_CHANGED","METRIC_CHANGED","METRIC_ADDED","METRIC_UPDATED","PERIOD_SWITCH_STARTED","PERIOD_SWITCH_COMPLETED","QUALITY_CHANGE_REQUESTED","QUALITY_CHANGE_RENDERED","TRACK_CHANGE_RENDERED","STREAM_INITIALIZING","STREAM_UPDATED","STREAM_ACTIVATED","STREAM_DEACTIVATED","STREAM_INITIALIZED","STREAM_TEARDOWN_COMPLETE","TEXT_TRACKS_ADDED","TEXT_TRACK_ADDED","TTML_PARSED","CAPTION_RENDERED","CAPTION_CONTAINER_RESIZE","CAN_PLAY","CAN_PLAY_THROUGH","PLAYBACK_ENDED","PLAYBACK_ERROR","PLAYBACK_NOT_ALLOWED","PLAYBACK_METADATA_LOADED","PLAYBACK_LOADED_DATA","PLAYBACK_PLAYING","PLAYBACK_PROGRESS","PLAYBACK_RATE_CHANGED","PLAYBACK_SEEKED","PLAYBACK_STALLED","PLAYBACK_STARTED","PLAYBACK_TIME_UPDATED","PLAYBACK_VOLUME_CHANGED","PLAYBACK_WAITING","EVENT_MODE_ON_START","EVENT_MODE_ON_RECEIVE","CONFORMANCE_VIOLATION","REPRESENTATION_SWITCH","ADAPTATION_SET_REMOVED_NO_CAPABILITIES","CONTENT_STEERING_REQUEST_COMPLETED","tcpid","actualurl","trequest","tresponse","responsecode","interval","trace","_stream","_tfinish","_mediaduration","_quality","_responseHeaders","_serviceLocation","_fileLoaderType","HTTPRequestTrace","b","GET","HEAD","MPD_TYPE","XLINK_EXPANSION_TYPE","INDEX_SEGMENT_TYPE","BITSTREAM_SWITCHING_SEGMENT_TYPE","DVB_REPORTING_TYPE","LICENSE","CONTENT_STEERING_TYPE","OTHER_TYPE","bigInt","BASE","MAX_INT","MAX_INT_ARR","smallToArray","supportsNativeBigInt","Integer","v","radix","alphabet","caseSensitive","parseBase","parseValue","BigInteger","sign","isSmall","SmallInteger","NativeBigInt","isPrecise","arrayToSmall","arr","trim","compareAbs","createArray","x","Array","truncate","ceil","a","sum","l_a","l_b","carry","base","addAny","addSmall","difference","a_l","b_l","borrow","subtractSmall","multiplyLong","product","a_i","multiplySmall","shiftLeft","concat","multiplySmallAndArray","square","divModSmall","lambda","q","remainder","divisor","quotient","divModAny","self","negate","abs","comparison","quotientDigit","shift","result","divisorMostSignificantDigit","divMod1","guess","xlen","highx","highy","check","part","unshift","reverse","divMod2","qSign","mod","mSign","isBasicPrime","isUnit","equals","isEven","isDivisibleBy","lesser","millerRabinTest","nPrev","prev","divide","next","modPow","plus","subtractAny","minus","small","multiply","l1","l2","multiplyKaratsuba","y","ac","bd","abcd","times","_multiplyBySmall","divmod","over","pow","_0","_1","_2","isNegative","exp","isZero","isPositive","isOdd","compare","compareTo","eq","notEquals","neq","gt","lt","greaterOrEquals","geq","lesserOrEquals","leq","isPrime","strict","bits","bitLength","logN","log","isProbablePrime","iterations","randBetween","modInv","lastT","lastR","zero","newT","one","newR","powersOfTwo","powers2Length","highestPower2","shift_isSmall","bitwise","fn","xSign","ySign","xRem","not","yRem","xDigit","yDigit","xDivMod","yDivMod","shiftRight","remQuo","and","or","xor","roughLOB","gcd","integerLogarithm","tmp","text","absBase","alphabetValues","digits","parseBaseFromArray","val","toBase","map","valueOf","neg","out","left","digit","toBaseString","stringify","join","parseStringValue","decimalPlace","test","parseNumberValue","toArray","toJSON","minusOne","lcm","isInstance","low","random","restricted","top","fromArray"],"mappings":"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","file":"dash.mss.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"dashjs\"] = factory();\n\telse\n\t\troot[\"dashjs\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/dist/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 119);\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass DashJSError {\n constructor(code, message, data) {\n this.code = code || null;\n this.message = message || null;\n this.data = data || null;\n }\n}\n\nexport default DashJSError;","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport FragmentRequest from '../streaming/vo/FragmentRequest';\nimport {HTTPRequest} from '../streaming/vo/metrics/HTTPRequest';\n\nfunction MssFragmentInfoController(config) {\n\n config = config || {};\n\n let instance,\n logger,\n fragmentModel,\n started,\n type,\n loadFragmentTimeout,\n startTime,\n startFragmentTime,\n index;\n\n const streamProcessor = config.streamProcessor;\n const baseURLController = config.baseURLController;\n const debug = config.debug;\n const controllerType = 'MssFragmentInfoController';\n\n function setup() {\n logger = debug.getLogger(instance);\n }\n\n function initialize() {\n type = streamProcessor.getType();\n fragmentModel = streamProcessor.getFragmentModel();\n\n started = false;\n startTime = null;\n startFragmentTime = null;\n }\n\n function start() {\n if (started) return;\n\n logger.debug('Start');\n\n started = true;\n index = 0;\n\n loadNextFragmentInfo();\n }\n\n function stop() {\n if (!started) return;\n\n logger.debug('Stop');\n\n clearTimeout(loadFragmentTimeout);\n started = false;\n startTime = null;\n startFragmentTime = null;\n }\n\n function reset() {\n stop();\n }\n\n function loadNextFragmentInfo() {\n if (!started) return;\n\n // Get last segment from SegmentTimeline\n const representation = getCurrentRepresentation();\n const manifest = representation.adaptation.period.mpd.manifest;\n const adaptation = manifest.Period_asArray[representation.adaptation.period.index].AdaptationSet_asArray[representation.adaptation.index];\n const segments = adaptation.SegmentTemplate.SegmentTimeline.S_asArray;\n const segment = segments[segments.length - 1];\n\n // logger.debug('Last fragment time: ' + (segment.t / adaptation.SegmentTemplate.timescale));\n\n // Generate segment request\n const request = getRequestForSegment(adaptation, representation, segment);\n\n // Send segment request\n requestFragment.call(this, request);\n }\n\n function getRequestForSegment(adaptation, representation, segment) {\n let timescale = adaptation.SegmentTemplate.timescale;\n let request = new FragmentRequest();\n\n request.mediaType = type;\n request.type = HTTPRequest.MSS_FRAGMENT_INFO_SEGMENT_TYPE;\n // request.range = segment.mediaRange;\n request.startTime = segment.t / timescale;\n request.duration = segment.d / timescale;\n request.timescale = timescale;\n // request.availabilityStartTime = segment.availabilityStartTime;\n // request.availabilityEndTime = segment.availabilityEndTime;\n // request.wallStartTime = segment.wallStartTime;\n request.quality = representation.index;\n request.index = index++;\n request.mediaInfo = streamProcessor.getMediaInfo();\n request.adaptationIndex = representation.adaptation.index;\n request.representationId = representation.id;\n request.url = baseURLController.resolve(representation.path).url + adaptation.SegmentTemplate.media;\n request.url = request.url.replace('$Bandwidth$', representation.bandwidth);\n request.url = request.url.replace('$Time$', segment.tManifest ? segment.tManifest : segment.t);\n request.url = request.url.replace('/Fragments(', '/FragmentInfo(');\n\n return request;\n }\n\n function getCurrentRepresentation() {\n const representationController = streamProcessor.getRepresentationController();\n const representation = representationController.getCurrentRepresentation();\n return representation;\n }\n\n function requestFragment(request) {\n // logger.debug('Load FragmentInfo for time: ' + request.startTime);\n if (streamProcessor.getFragmentModel().isFragmentLoadedOrPending(request)) {\n // We may have reached end of timeline in case of start-over streams\n logger.debug('End of timeline');\n stop();\n return;\n }\n\n fragmentModel.executeRequest(request);\n }\n\n function fragmentInfoLoaded (e) {\n if (!started) return;\n\n const request = e.request;\n if (!e.response) {\n logger.error('Load error', request.url);\n return;\n }\n\n let deltaFragmentTime,\n deltaTime,\n delay;\n\n // logger.debug('FragmentInfo loaded: ', request.url);\n\n if (startTime === null) {\n startTime = new Date().getTime();\n }\n\n if (!startFragmentTime) {\n startFragmentTime = request.startTime;\n }\n\n // Determine delay before requesting next FragmentInfo\n deltaTime = (new Date().getTime() - startTime) / 1000;\n deltaFragmentTime = (request.startTime + request.duration) - startFragmentTime;\n delay = Math.max(0, (deltaFragmentTime - deltaTime));\n\n // Set timeout for requesting next FragmentInfo\n clearTimeout(loadFragmentTimeout);\n loadFragmentTimeout = setTimeout(function () {\n loadFragmentTimeout = null;\n loadNextFragmentInfo();\n }, delay * 1000);\n }\n\n function getType() {\n return type;\n }\n\n instance = {\n initialize: initialize,\n controllerType: controllerType,\n start: start,\n fragmentInfoLoaded: fragmentInfoLoaded,\n getType: getType,\n reset: reset\n };\n\n setup();\n\n return instance;\n}\n\nMssFragmentInfoController.__dashjs_factory_name = 'MssFragmentInfoController';\nexport default dashjs.FactoryMaker.getClassFactory(MssFragmentInfoController); /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport ErrorsBase from '../../core/errors/ErrorsBase';\n\n/**\n * @class\n *\n */\nclass MssErrors extends ErrorsBase {\n constructor() {\n super();\n /**\n * Error code returned when no tfrf box is detected in MSS live stream\n */\n this.MSS_NO_TFRF_CODE = 200;\n\n /**\n * Error code returned when one of the codecs defined in the manifest is not supported\n */\n this.MSS_UNSUPPORTED_CODEC_CODE = 201;\n\n this.MSS_NO_TFRF_MESSAGE = 'Missing tfrf in live media segment';\n this.MSS_UNSUPPORTED_CODEC_MESSAGE = 'Unsupported codec';\n }\n}\n\nlet mssErrors = new MssErrors();\nexport default mssErrors;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport DashJSError from '../streaming/vo/DashJSError';\nimport MssErrors from './errors/MssErrors';\n\nimport Events from '../streaming/MediaPlayerEvents';\n\n/**\n * @module MssFragmentMoofProcessor\n * @ignore\n * @param {Object} config object\n */\nfunction MssFragmentMoofProcessor(config) {\n\n config = config || {};\n let instance,\n type,\n logger;\n const dashMetrics = config.dashMetrics;\n const playbackController = config.playbackController;\n const errorHandler = config.errHandler;\n const eventBus = config.eventBus;\n const ISOBoxer = config.ISOBoxer;\n const debug = config.debug;\n\n function setup() {\n logger = debug.getLogger(instance);\n type = '';\n }\n\n function processTfrf(request, tfrf, tfdt, streamProcessor) {\n const representationController = streamProcessor.getRepresentationController();\n const representation = representationController.getCurrentRepresentation();\n\n const manifest = representation.adaptation.period.mpd.manifest;\n const adaptation = manifest.Period_asArray[representation.adaptation.period.index].AdaptationSet_asArray[representation.adaptation.index];\n const timescale = adaptation.SegmentTemplate.timescale;\n\n type = streamProcessor.getType();\n\n // Process tfrf only for live streams or start-over static streams (timeShiftBufferDepth > 0)\n if (manifest.type !== 'dynamic' && !manifest.timeShiftBufferDepth) {\n return;\n }\n\n if (!tfrf) {\n errorHandler.error(new DashJSError(MssErrors.MSS_NO_TFRF_CODE, MssErrors.MSS_NO_TFRF_MESSAGE));\n return;\n }\n\n // Get adaptation's segment timeline (always a SegmentTimeline in Smooth Streaming use case)\n const segments = adaptation.SegmentTemplate.SegmentTimeline.S;\n const entries = tfrf.entry;\n let entry,\n segmentTime,\n range;\n let segment = null;\n let t = 0;\n let endTime;\n let availabilityStartTime = null;\n\n if (entries.length === 0) {\n return;\n }\n\n // Consider only first tfrf entry (to avoid pre-condition failure on fragment info requests)\n entry = entries[0];\n\n // In case of start-over streams, check if we have reached end of original manifest duration (set in timeShiftBufferDepth)\n // => then do not update anymore timeline\n if (manifest.type === 'static') {\n // Get first segment time\n segmentTime = segments[0].tManifest ? parseFloat(segments[0].tManifest) : segments[0].t;\n if (entry.fragment_absolute_time > (segmentTime + (manifest.timeShiftBufferDepth * timescale))) {\n return;\n }\n }\n\n // logger.debug('entry - t = ', (entry.fragment_absolute_time / timescale));\n\n // Get last segment time\n segmentTime = segments[segments.length - 1].tManifest ? parseFloat(segments[segments.length - 1].tManifest) : segments[segments.length - 1].t;\n // logger.debug('Last segment - t = ', (segmentTime / timescale));\n\n // Check if we have to append new segment to timeline\n if (entry.fragment_absolute_time <= segmentTime) {\n // Update DVR window range => set range end to end time of current segment\n range = {\n start: segments[0].t / timescale,\n end: (tfdt.baseMediaDecodeTime / timescale) + request.duration\n };\n\n updateDVR(request.mediaType, range, streamProcessor.getStreamInfo().manifestInfo);\n return;\n }\n\n // logger.debug('Add new segment - t = ', (entry.fragment_absolute_time / timescale));\n segment = {};\n segment.t = entry.fragment_absolute_time;\n segment.d = entry.fragment_duration;\n // If timestamps starts at 0 relative to 1st segment (dynamic to static) then update segment time\n if (segments[0].tManifest) {\n segment.t -= parseFloat(segments[0].tManifest) - segments[0].t;\n segment.tManifest = entry.fragment_absolute_time;\n }\n\n // Patch previous segment duration\n let lastSegment = segments[segments.length - 1];\n if (lastSegment.t + lastSegment.d !== segment.t) {\n logger.debug('Patch segment duration - t = ', lastSegment.t + ', d = ' + lastSegment.d + ' => ' + (segment.t - lastSegment.t));\n lastSegment.d = segment.t - lastSegment.t;\n }\n\n segments.push(segment);\n\n // In case of static start-over streams, update content duration\n if (manifest.type === 'static') {\n if (type === 'video') {\n segment = segments[segments.length - 1];\n endTime = (segment.t + segment.d) / timescale;\n if (endTime > representation.adaptation.period.duration) {\n eventBus.trigger(Events.MANIFEST_VALIDITY_CHANGED, { sender: this, newDuration: endTime });\n }\n }\n return;\n }\n else {\n // In case of live streams, update segment timeline according to DVR window\n if (manifest.timeShiftBufferDepth && manifest.timeShiftBufferDepth > 0) {\n // Get timestamp of the last segment\n segment = segments[segments.length - 1];\n t = segment.t;\n\n // Determine the segments' availability start time\n availabilityStartTime = (t - (manifest.timeShiftBufferDepth * timescale)) / timescale;\n\n // Remove segments prior to availability start time\n segment = segments[0];\n endTime = (segment.t + segment.d) / timescale;\n while (endTime < availabilityStartTime) {\n // Check if not currently playing the segment to be removed\n if (!playbackController.isPaused() && playbackController.getTime() < endTime) {\n break;\n }\n // logger.debug('Remove segment - t = ' + (segment.t / timescale));\n segments.splice(0, 1);\n segment = segments[0];\n endTime = (segment.t + segment.d) / timescale;\n }\n }\n\n // Update DVR window range => set range end to end time of current segment\n range = {\n start: segments[0].t / timescale,\n end: (tfdt.baseMediaDecodeTime / timescale) + request.duration\n };\n\n updateDVR(type, range, streamProcessor.getStreamInfo().manifestInfo);\n }\n\n }\n\n function updateDVR(type, range, manifestInfo) {\n if (type !== 'video' && type !== 'audio') return;\n const dvrInfos = dashMetrics.getCurrentDVRInfo(type);\n if (!dvrInfos || (range.end > dvrInfos.range.end)) {\n logger.debug('Update DVR range: [' + range.start + ' - ' + range.end + ']');\n dashMetrics.addDVRInfo(type, playbackController.getTime(), manifestInfo, range);\n playbackController.updateCurrentTime(type);\n }\n }\n\n // This function returns the offset of the 1st byte of a child box within a container box\n function getBoxOffset(parent, type) {\n let offset = 8;\n let i = 0;\n\n for (i = 0; i < parent.boxes.length; i++) {\n if (parent.boxes[i].type === type) {\n return offset;\n }\n offset += parent.boxes[i].size;\n }\n return offset;\n }\n\n function convertFragment(e, streamProcessor) {\n let i;\n\n // e.request contains request description object\n // e.response contains fragment bytes\n const isoFile = ISOBoxer.parseBuffer(e.response);\n // Update track_Id in tfhd box\n const tfhd = isoFile.fetch('tfhd');\n tfhd.track_ID = e.request.mediaInfo.index + 1;\n\n // Add tfdt box\n let tfdt = isoFile.fetch('tfdt');\n const traf = isoFile.fetch('traf');\n if (tfdt === null) {\n tfdt = ISOBoxer.createFullBox('tfdt', traf, tfhd);\n tfdt.version = 1;\n tfdt.flags = 0;\n tfdt.baseMediaDecodeTime = Math.floor(e.request.startTime * e.request.timescale);\n }\n\n const trun = isoFile.fetch('trun');\n\n // Process tfxd boxes\n // This box provide absolute timestamp but we take the segment start time for tfdt\n let tfxd = isoFile.fetch('tfxd');\n if (tfxd) {\n tfxd._parent.boxes.splice(tfxd._parent.boxes.indexOf(tfxd), 1);\n tfxd = null;\n }\n let tfrf = isoFile.fetch('tfrf');\n processTfrf(e.request, tfrf, tfdt, streamProcessor);\n if (tfrf) {\n tfrf._parent.boxes.splice(tfrf._parent.boxes.indexOf(tfrf), 1);\n tfrf = null;\n }\n\n // If protected content in PIFF1.1 format (sepiff box = Sample Encryption PIFF)\n // => convert sepiff box it into a senc box\n // => create saio and saiz boxes (if not already present)\n const sepiff = isoFile.fetch('sepiff');\n if (sepiff !== null) {\n sepiff.type = 'senc';\n sepiff.usertype = undefined;\n\n let saio = isoFile.fetch('saio');\n if (saio === null) {\n // Create Sample Auxiliary Information Offsets Box box (saio)\n saio = ISOBoxer.createFullBox('saio', traf);\n saio.version = 0;\n saio.flags = 0;\n saio.entry_count = 1;\n saio.offset = [0];\n\n const saiz = ISOBoxer.createFullBox('saiz', traf);\n saiz.version = 0;\n saiz.flags = 0;\n saiz.sample_count = sepiff.sample_count;\n saiz.default_sample_info_size = 0;\n saiz.sample_info_size = [];\n\n if (sepiff.flags & 0x02) {\n // Sub-sample encryption => set sample_info_size for each sample\n for (i = 0; i < sepiff.sample_count; i += 1) {\n // 10 = 8 (InitializationVector field size) + 2 (subsample_count field size)\n // 6 = 2 (BytesOfClearData field size) + 4 (BytesOfEncryptedData field size)\n saiz.sample_info_size[i] = 10 + (6 * sepiff.entry[i].NumberOfEntries);\n }\n } else {\n // No sub-sample encryption => set default sample_info_size = InitializationVector field size (8)\n saiz.default_sample_info_size = 8;\n }\n }\n }\n\n tfhd.flags &= 0xFFFFFE; // set tfhd.base-data-offset-present to false\n tfhd.flags |= 0x020000; // set tfhd.default-base-is-moof to true\n trun.flags |= 0x000001; // set trun.data-offset-present to true\n\n // Update trun.data_offset field that corresponds to first data byte (inside mdat box)\n const moof = isoFile.fetch('moof');\n let length = moof.getLength();\n trun.data_offset = length + 8;\n\n // Update saio box offset field according to new senc box offset\n let saio = isoFile.fetch('saio');\n if (saio !== null) {\n let trafPosInMoof = getBoxOffset(moof, 'traf');\n let sencPosInTraf = getBoxOffset(traf, 'senc');\n // Set offset from begin fragment to the first IV field in senc box\n saio.offset[0] = trafPosInMoof + sencPosInTraf + 16; // 16 = box header (12) + sample_count field size (4)\n }\n\n // Write transformed/processed fragment into request reponse data\n e.response = isoFile.write();\n }\n\n function updateSegmentList(e, streamProcessor) {\n // e.request contains request description object\n // e.response contains fragment bytes\n if (!e.response) {\n throw new Error('e.response parameter is missing');\n }\n\n const isoFile = ISOBoxer.parseBuffer(e.response);\n // Update track_Id in tfhd box\n const tfhd = isoFile.fetch('tfhd');\n tfhd.track_ID = e.request.mediaInfo.index + 1;\n\n // Add tfdt box\n let tfdt = isoFile.fetch('tfdt');\n let traf = isoFile.fetch('traf');\n if (tfdt === null) {\n tfdt = ISOBoxer.createFullBox('tfdt', traf, tfhd);\n tfdt.version = 1;\n tfdt.flags = 0;\n tfdt.baseMediaDecodeTime = Math.floor(e.request.startTime * e.request.timescale);\n }\n\n let tfrf = isoFile.fetch('tfrf');\n processTfrf(e.request, tfrf, tfdt, streamProcessor);\n if (tfrf) {\n tfrf._parent.boxes.splice(tfrf._parent.boxes.indexOf(tfrf), 1);\n tfrf = null;\n }\n }\n\n function getType() {\n return type;\n }\n\n instance = {\n convertFragment: convertFragment,\n updateSegmentList: updateSegmentList,\n getType: getType\n };\n\n setup();\n return instance;\n}\n\nMssFragmentMoofProcessor.__dashjs_factory_name = 'MssFragmentMoofProcessor';\nexport default dashjs.FactoryMaker.getClassFactory(MssFragmentMoofProcessor); /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport MssErrors from './errors/MssErrors';\n\n/**\n * @module MssFragmentMoovProcessor\n * @ignore\n * @param {Object} config object\n */\nfunction MssFragmentMoovProcessor(config) {\n config = config || {};\n const NALUTYPE_SPS = 7;\n const NALUTYPE_PPS = 8;\n const constants = config.constants;\n const ISOBoxer = config.ISOBoxer;\n\n let protectionController = config.protectionController;\n let instance,\n period,\n adaptationSet,\n representation,\n contentProtection,\n timescale,\n trackId;\n\n function createFtypBox(isoFile) {\n let ftyp = ISOBoxer.createBox('ftyp', isoFile);\n ftyp.major_brand = 'iso6';\n ftyp.minor_version = 1; // is an informative integer for the minor version of the major brand\n ftyp.compatible_brands = []; //is a list, to the end of the box, of brands isom, iso6 and msdh\n ftyp.compatible_brands[0] = 'isom'; // => decimal ASCII value for isom\n ftyp.compatible_brands[1] = 'iso6'; // => decimal ASCII value for iso6\n ftyp.compatible_brands[2] = 'msdh'; // => decimal ASCII value for msdh\n\n return ftyp;\n }\n\n function createMoovBox(isoFile) {\n\n // moov box\n let moov = ISOBoxer.createBox('moov', isoFile);\n\n // moov/mvhd\n createMvhdBox(moov);\n\n // moov/trak\n let trak = ISOBoxer.createBox('trak', moov);\n\n // moov/trak/tkhd\n createTkhdBox(trak);\n\n // moov/trak/mdia\n let mdia = ISOBoxer.createBox('mdia', trak);\n\n // moov/trak/mdia/mdhd\n createMdhdBox(mdia);\n\n // moov/trak/mdia/hdlr\n createHdlrBox(mdia);\n\n // moov/trak/mdia/minf\n let minf = ISOBoxer.createBox('minf', mdia);\n\n switch (adaptationSet.type) {\n case constants.VIDEO:\n // moov/trak/mdia/minf/vmhd\n createVmhdBox(minf);\n break;\n case constants.AUDIO:\n // moov/trak/mdia/minf/smhd\n createSmhdBox(minf);\n break;\n default:\n break;\n }\n\n // moov/trak/mdia/minf/dinf\n let dinf = ISOBoxer.createBox('dinf', minf);\n\n // moov/trak/mdia/minf/dinf/dref\n createDrefBox(dinf);\n\n // moov/trak/mdia/minf/stbl\n let stbl = ISOBoxer.createBox('stbl', minf);\n\n // Create empty stts, stsc, stco and stsz boxes\n // Use data field as for codem-isoboxer unknown boxes for setting fields value\n\n // moov/trak/mdia/minf/stbl/stts\n let stts = ISOBoxer.createFullBox('stts', stbl);\n stts._data = [0, 0, 0, 0, 0, 0, 0, 0]; // version = 0, flags = 0, entry_count = 0\n\n // moov/trak/mdia/minf/stbl/stsc\n let stsc = ISOBoxer.createFullBox('stsc', stbl);\n stsc._data = [0, 0, 0, 0, 0, 0, 0, 0]; // version = 0, flags = 0, entry_count = 0\n\n // moov/trak/mdia/minf/stbl/stco\n let stco = ISOBoxer.createFullBox('stco', stbl);\n stco._data = [0, 0, 0, 0, 0, 0, 0, 0]; // version = 0, flags = 0, entry_count = 0\n\n // moov/trak/mdia/minf/stbl/stsz\n let stsz = ISOBoxer.createFullBox('stsz', stbl);\n stsz._data = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; // version = 0, flags = 0, sample_size = 0, sample_count = 0\n\n // moov/trak/mdia/minf/stbl/stsd\n createStsdBox(stbl);\n\n // moov/mvex\n let mvex = ISOBoxer.createBox('mvex', moov);\n\n // moov/mvex/trex\n createTrexBox(mvex);\n\n if (contentProtection && protectionController) {\n let supportedKS = protectionController.getSupportedKeySystemsFromContentProtection(contentProtection);\n createProtectionSystemSpecificHeaderBox(moov, supportedKS);\n }\n }\n\n function createMvhdBox(moov) {\n\n let mvhd = ISOBoxer.createFullBox('mvhd', moov);\n\n mvhd.version = 1; // version = 1 in order to have 64bits duration value\n\n mvhd.creation_time = 0; // the creation time of the presentation => ignore (set to 0)\n mvhd.modification_time = 0; // the most recent time the presentation was modified => ignore (set to 0)\n mvhd.timescale = timescale; // the time-scale for the entire presentation => 10000000 for MSS\n mvhd.duration = period.duration === Infinity ? 0xFFFFFFFFFFFFFFFF : Math.round(period.duration * timescale); // the length of the presentation (in the indicated timescale) => take duration of period\n mvhd.rate = 1.0; // 16.16 number, '1.0' = normal playback\n mvhd.volume = 1.0; // 8.8 number, '1.0' = full volume\n mvhd.reserved1 = 0;\n mvhd.reserved2 = [0x0, 0x0];\n mvhd.matrix = [\n 1, 0, 0, // provides a transformation matrix for the video;\n 0, 1, 0, // (u,v,w) are restricted here to (0,0,1)\n 0, 0, 16384\n ];\n mvhd.pre_defined = [0, 0, 0, 0, 0, 0];\n mvhd.next_track_ID = trackId + 1; // indicates a value to use for the track ID of the next track to be added to this presentation\n\n return mvhd;\n }\n\n function createTkhdBox(trak) {\n\n let tkhd = ISOBoxer.createFullBox('tkhd', trak);\n\n tkhd.version = 1; // version = 1 in order to have 64bits duration value\n tkhd.flags = 0x1 | // Track_enabled (0x000001): Indicates that the track is enabled\n 0x2 | // Track_in_movie (0x000002): Indicates that the track is used in the presentation\n 0x4; // Track_in_preview (0x000004): Indicates that the track is used when previewing the presentation\n\n tkhd.creation_time = 0; // the creation time of the presentation => ignore (set to 0)\n tkhd.modification_time = 0; // the most recent time the presentation was modified => ignore (set to 0)\n tkhd.track_ID = trackId; // uniquely identifies this track over the entire life-time of this presentation\n tkhd.reserved1 = 0;\n tkhd.duration = period.duration === Infinity ? 0xFFFFFFFFFFFFFFFF : Math.round(period.duration * timescale); // the duration of this track (in the timescale indicated in the Movie Header Box) => take duration of period\n tkhd.reserved2 = [0x0, 0x0];\n tkhd.layer = 0; // specifies the front-to-back ordering of video tracks; tracks with lower numbers are closer to the viewer => 0 since only one video track\n tkhd.alternate_group = 0; // specifies a group or collection of tracks => ignore\n tkhd.volume = 1.0; // '1.0' = full volume\n tkhd.reserved3 = 0;\n tkhd.matrix = [\n 1, 0, 0, // provides a transformation matrix for the video;\n 0, 1, 0, // (u,v,w) are restricted here to (0,0,1)\n 0, 0, 16384\n ];\n tkhd.width = representation.width; // visual presentation width\n tkhd.height = representation.height; // visual presentation height\n\n return tkhd;\n }\n\n function createMdhdBox(mdia) {\n\n let mdhd = ISOBoxer.createFullBox('mdhd', mdia);\n\n mdhd.version = 1; // version = 1 in order to have 64bits duration value\n\n mdhd.creation_time = 0; // the creation time of the presentation => ignore (set to 0)\n mdhd.modification_time = 0; // the most recent time the presentation was modified => ignore (set to 0)\n mdhd.timescale = timescale; // the time-scale for the entire presentation\n mdhd.duration = period.duration === Infinity ? 0xFFFFFFFFFFFFFFFF : Math.round(period.duration * timescale); // the duration of this media (in the scale of the timescale). If the duration cannot be determined then duration is set to all 1s.\n mdhd.language = adaptationSet.lang || 'und'; // declares the language code for this media\n mdhd.pre_defined = 0;\n\n return mdhd;\n }\n\n function createHdlrBox(mdia) {\n\n let hdlr = ISOBoxer.createFullBox('hdlr', mdia);\n\n hdlr.pre_defined = 0;\n switch (adaptationSet.type) {\n case constants.VIDEO:\n hdlr.handler_type = 'vide';\n break;\n case constants.AUDIO:\n hdlr.handler_type = 'soun';\n break;\n default:\n hdlr.handler_type = 'meta';\n break;\n }\n hdlr.name = representation.id;\n hdlr.reserved = [0, 0, 0];\n\n return hdlr;\n }\n\n function createVmhdBox(minf) {\n\n let vmhd = ISOBoxer.createFullBox('vmhd', minf);\n\n vmhd.flags = 1;\n\n vmhd.graphicsmode = 0; // specifies a composition mode for this video track, from the following enumerated set, which may be extended by derived specifications: copy = 0 copy over the existing image\n vmhd.opcolor = [0, 0, 0]; // is a set of 3 colour values (red, green, blue) available for use by graphics modes\n\n return vmhd;\n }\n\n function createSmhdBox(minf) {\n\n let smhd = ISOBoxer.createFullBox('smhd', minf);\n\n smhd.flags = 1;\n\n smhd.balance = 0; // is a fixed-point 8.8 number that places mono audio tracks in a stereo space; 0 is centre (the normal value); full left is -1.0 and full right is 1.0.\n smhd.reserved = 0;\n\n return smhd;\n }\n\n function createDrefBox(dinf) {\n\n let dref = ISOBoxer.createFullBox('dref', dinf);\n\n dref.entry_count = 1;\n dref.entries = [];\n\n let url = ISOBoxer.createFullBox('url ', dref, false);\n url.location = '';\n url.flags = 1;\n\n dref.entries.push(url);\n\n return dref;\n }\n\n function createStsdBox(stbl) {\n\n let stsd = ISOBoxer.createFullBox('stsd', stbl);\n\n stsd.entries = [];\n switch (adaptationSet.type) {\n case constants.VIDEO:\n case constants.AUDIO:\n stsd.entries.push(createSampleEntry(stsd));\n break;\n default:\n break;\n }\n\n stsd.entry_count = stsd.entries.length; // is an integer that counts the actual entries\n return stsd;\n }\n\n function createSampleEntry(stsd) {\n let codec = representation.codecs.substring(0, representation.codecs.indexOf('.'));\n\n switch (codec) {\n case 'avc1':\n return createAVCVisualSampleEntry(stsd, codec);\n case 'mp4a':\n return createMP4AudioSampleEntry(stsd, codec);\n default:\n throw {\n code: MssErrors.MSS_UNSUPPORTED_CODEC_CODE,\n message: MssErrors.MSS_UNSUPPORTED_CODEC_MESSAGE,\n data: {\n codec: codec\n }\n };\n }\n }\n\n function createAVCVisualSampleEntry(stsd, codec) {\n let avc1;\n\n if (contentProtection) {\n avc1 = ISOBoxer.createBox('encv', stsd, false);\n } else {\n avc1 = ISOBoxer.createBox('avc1', stsd, false);\n }\n\n // SampleEntry fields\n avc1.reserved1 = [0x0, 0x0, 0x0, 0x0, 0x0, 0x0];\n avc1.data_reference_index = 1;\n\n // VisualSampleEntry fields\n avc1.pre_defined1 = 0;\n avc1.reserved2 = 0;\n avc1.pre_defined2 = [0, 0, 0];\n avc1.height = representation.height;\n avc1.width = representation.width;\n avc1.horizresolution = 72; // 72 dpi\n avc1.vertresolution = 72; // 72 dpi\n avc1.reserved3 = 0;\n avc1.frame_count = 1; // 1 compressed video frame per sample\n avc1.compressorname = [\n 0x0A, 0x41, 0x56, 0x43, 0x20, 0x43, 0x6F, 0x64, // = 'AVC Coding';\n 0x69, 0x6E, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\n ];\n avc1.depth = 0x0018; // 0x0018 – images are in colour with no alpha.\n avc1.pre_defined3 = 65535;\n avc1.config = createAVC1ConfigurationRecord();\n if (contentProtection) {\n // Create and add Protection Scheme Info Box\n let sinf = ISOBoxer.createBox('sinf', avc1);\n\n // Create and add Original Format Box => indicate codec type of the encrypted content\n createOriginalFormatBox(sinf, codec);\n\n // Create and add Scheme Type box\n createSchemeTypeBox(sinf);\n\n // Create and add Scheme Information Box\n createSchemeInformationBox(sinf);\n }\n\n return avc1;\n }\n\n function createAVC1ConfigurationRecord() {\n\n let avcC = null;\n let avcCLength = 15; // length = 15 by default (0 SPS and 0 PPS)\n\n // First get all SPS and PPS from codecPrivateData\n let sps = [];\n let pps = [];\n let AVCProfileIndication = 0;\n let AVCLevelIndication = 0;\n let profile_compatibility = 0;\n\n let nalus = representation.codecPrivateData.split('00000001').slice(1);\n let naluBytes, naluType;\n\n for (let i = 0; i < nalus.length; i++) {\n naluBytes = hexStringtoBuffer(nalus[i]);\n\n naluType = naluBytes[0] & 0x1F;\n\n switch (naluType) {\n case NALUTYPE_SPS:\n sps.push(naluBytes);\n avcCLength += naluBytes.length + 2; // 2 = sequenceParameterSetLength field length\n break;\n case NALUTYPE_PPS:\n pps.push(naluBytes);\n avcCLength += naluBytes.length + 2; // 2 = pictureParameterSetLength field length\n break;\n default:\n break;\n }\n }\n\n // Get profile and level from SPS\n if (sps.length > 0) {\n AVCProfileIndication = sps[0][1];\n profile_compatibility = sps[0][2];\n AVCLevelIndication = sps[0][3];\n }\n\n // Generate avcC buffer\n avcC = new Uint8Array(avcCLength);\n\n let i = 0;\n // length\n avcC[i++] = (avcCLength & 0xFF000000) >> 24;\n avcC[i++] = (avcCLength & 0x00FF0000) >> 16;\n avcC[i++] = (avcCLength & 0x0000FF00) >> 8;\n avcC[i++] = (avcCLength & 0x000000FF);\n avcC.set([0x61, 0x76, 0x63, 0x43], i); // type = 'avcC'\n i += 4;\n avcC[i++] = 1; // configurationVersion = 1\n avcC[i++] = AVCProfileIndication;\n avcC[i++] = profile_compatibility;\n avcC[i++] = AVCLevelIndication;\n avcC[i++] = 0xFF; // '11111' + lengthSizeMinusOne = 3\n avcC[i++] = 0xE0 | sps.length; // '111' + numOfSequenceParameterSets\n for (let n = 0; n < sps.length; n++) {\n avcC[i++] = (sps[n].length & 0xFF00) >> 8;\n avcC[i++] = (sps[n].length & 0x00FF);\n avcC.set(sps[n], i);\n i += sps[n].length;\n }\n avcC[i++] = pps.length; // numOfPictureParameterSets\n for (let n = 0; n < pps.length; n++) {\n avcC[i++] = (pps[n].length & 0xFF00) >> 8;\n avcC[i++] = (pps[n].length & 0x00FF);\n avcC.set(pps[n], i);\n i += pps[n].length;\n }\n\n return avcC;\n }\n\n function createMP4AudioSampleEntry(stsd, codec) {\n let mp4a;\n\n if (contentProtection) {\n mp4a = ISOBoxer.createBox('enca', stsd, false);\n } else {\n mp4a = ISOBoxer.createBox('mp4a', stsd, false);\n }\n\n // SampleEntry fields\n mp4a.reserved1 = [0x0, 0x0, 0x0, 0x0, 0x0, 0x0];\n mp4a.data_reference_index = 1;\n\n // AudioSampleEntry fields\n mp4a.reserved2 = [0x0, 0x0];\n mp4a.channelcount = representation.audioChannels;\n mp4a.samplesize = 16;\n mp4a.pre_defined = 0;\n mp4a.reserved_3 = 0;\n mp4a.samplerate = representation.audioSamplingRate << 16;\n\n mp4a.esds = createMPEG4AACESDescriptor();\n\n if (contentProtection) {\n // Create and add Protection Scheme Info Box\n let sinf = ISOBoxer.createBox('sinf', mp4a);\n\n // Create and add Original Format Box => indicate codec type of the encrypted content\n createOriginalFormatBox(sinf, codec);\n\n // Create and add Scheme Type box\n createSchemeTypeBox(sinf);\n\n // Create and add Scheme Information Box\n createSchemeInformationBox(sinf);\n }\n\n return mp4a;\n }\n\n function createMPEG4AACESDescriptor() {\n\n // AudioSpecificConfig (see ISO/IEC 14496-3, subpart 1) => corresponds to hex bytes contained in 'codecPrivateData' field\n let audioSpecificConfig = hexStringtoBuffer(representation.codecPrivateData);\n\n // ESDS length = esds box header length (= 12) +\n // ES_Descriptor header length (= 5) +\n // DecoderConfigDescriptor header length (= 15) +\n // decoderSpecificInfo header length (= 2) +\n // AudioSpecificConfig length (= codecPrivateData length)\n let esdsLength = 34 + audioSpecificConfig.length;\n let esds = new Uint8Array(esdsLength);\n\n let i = 0;\n // esds box\n esds[i++] = (esdsLength & 0xFF000000) >> 24; // esds box length\n esds[i++] = (esdsLength & 0x00FF0000) >> 16; // ''\n esds[i++] = (esdsLength & 0x0000FF00) >> 8; // ''\n esds[i++] = (esdsLength & 0x000000FF); // ''\n esds.set([0x65, 0x73, 0x64, 0x73], i); // type = 'esds'\n i += 4;\n esds.set([0, 0, 0, 0], i); // version = 0, flags = 0\n i += 4;\n // ES_Descriptor (see ISO/IEC 14496-1 (Systems))\n esds[i++] = 0x03; // tag = 0x03 (ES_DescrTag)\n esds[i++] = 20 + audioSpecificConfig.length; // size\n esds[i++] = (trackId & 0xFF00) >> 8; // ES_ID = track_id\n esds[i++] = (trackId & 0x00FF); // ''\n esds[i++] = 0; // flags and streamPriority\n\n // DecoderConfigDescriptor (see ISO/IEC 14496-1 (Systems))\n esds[i++] = 0x04; // tag = 0x04 (DecoderConfigDescrTag)\n esds[i++] = 15 + audioSpecificConfig.length; // size\n esds[i++] = 0x40; // objectTypeIndication = 0x40 (MPEG-4 AAC)\n esds[i] = 0x05 << 2; // streamType = 0x05 (Audiostream)\n esds[i] |= 0 << 1; // upStream = 0\n esds[i++] |= 1; // reserved = 1\n esds[i++] = 0xFF; // buffersizeDB = undefined\n esds[i++] = 0xFF; // ''\n esds[i++] = 0xFF; // ''\n esds[i++] = (representation.bandwidth & 0xFF000000) >> 24; // maxBitrate\n esds[i++] = (representation.bandwidth & 0x00FF0000) >> 16; // ''\n esds[i++] = (representation.bandwidth & 0x0000FF00) >> 8; // ''\n esds[i++] = (representation.bandwidth & 0x000000FF); // ''\n esds[i++] = (representation.bandwidth & 0xFF000000) >> 24; // avgbitrate\n esds[i++] = (representation.bandwidth & 0x00FF0000) >> 16; // ''\n esds[i++] = (representation.bandwidth & 0x0000FF00) >> 8; // ''\n esds[i++] = (representation.bandwidth & 0x000000FF); // ''\n\n // DecoderSpecificInfo (see ISO/IEC 14496-1 (Systems))\n esds[i++] = 0x05; // tag = 0x05 (DecSpecificInfoTag)\n esds[i++] = audioSpecificConfig.length; // size\n esds.set(audioSpecificConfig, i); // AudioSpecificConfig bytes\n\n return esds;\n }\n\n function createOriginalFormatBox(sinf, codec) {\n let frma = ISOBoxer.createBox('frma', sinf);\n frma.data_format = stringToCharCode(codec);\n }\n\n function createSchemeTypeBox(sinf) {\n let schm = ISOBoxer.createFullBox('schm', sinf);\n\n schm.flags = 0;\n schm.version = 0;\n schm.scheme_type = 0x63656E63; // 'cenc' => common encryption\n schm.scheme_version = 0x00010000; // version set to 0x00010000 (Major version 1, Minor version 0)\n }\n\n function createSchemeInformationBox(sinf) {\n let schi = ISOBoxer.createBox('schi', sinf);\n\n // Create and add Track Encryption Box\n createTrackEncryptionBox(schi);\n }\n\n function createProtectionSystemSpecificHeaderBox(moov, keySystems) {\n let pssh_bytes,\n pssh,\n i,\n parsedBuffer;\n\n for (i = 0; i < keySystems.length; i += 1) {\n pssh_bytes = keySystems[i].initData;\n if (pssh_bytes) {\n parsedBuffer = ISOBoxer.parseBuffer(pssh_bytes);\n pssh = parsedBuffer.fetch('pssh');\n if (pssh) {\n ISOBoxer.Utils.appendBox(moov, pssh);\n }\n }\n }\n }\n\n function createTrackEncryptionBox(schi) {\n let tenc = ISOBoxer.createFullBox('tenc', schi);\n\n tenc.flags = 0;\n tenc.version = 0;\n\n tenc.default_IsEncrypted = 0x1;\n tenc.default_IV_size = 8;\n tenc.default_KID = (contentProtection && (contentProtection.length) > 0 && contentProtection[0]['cenc:default_KID']) ?\n contentProtection[0]['cenc:default_KID'] : [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0];\n }\n\n function createTrexBox(moov) {\n let trex = ISOBoxer.createFullBox('trex', moov);\n\n trex.track_ID = trackId;\n trex.default_sample_description_index = 1;\n trex.default_sample_duration = 0;\n trex.default_sample_size = 0;\n trex.default_sample_flags = 0;\n\n return trex;\n }\n\n function hexStringtoBuffer(str) {\n let buf = new Uint8Array(str.length / 2);\n let i;\n\n for (i = 0; i < str.length / 2; i += 1) {\n buf[i] = parseInt('' + str[i * 2] + str[i * 2 + 1], 16);\n }\n return buf;\n }\n\n function stringToCharCode(str) {\n let code = 0;\n let i;\n\n for (i = 0; i < str.length; i += 1) {\n code |= str.charCodeAt(i) << ((str.length - i - 1) * 8);\n }\n return code;\n }\n\n function generateMoov(rep) {\n if (!rep || !rep.adaptation) {\n return;\n }\n\n let isoFile,\n arrayBuffer;\n\n representation = rep;\n adaptationSet = representation.adaptation;\n\n period = adaptationSet.period;\n trackId = adaptationSet.index + 1;\n contentProtection = period.mpd.manifest.Period_asArray[period.index].AdaptationSet_asArray[adaptationSet.index].ContentProtection;\n\n timescale = period.mpd.manifest.Period_asArray[period.index].AdaptationSet_asArray[adaptationSet.index].SegmentTemplate.timescale;\n\n isoFile = ISOBoxer.createFile();\n createFtypBox(isoFile);\n createMoovBox(isoFile);\n\n arrayBuffer = isoFile.write();\n\n return arrayBuffer;\n }\n\n instance = {\n generateMoov: generateMoov\n };\n\n return instance;\n}\n\nMssFragmentMoovProcessor.__dashjs_factory_name = 'MssFragmentMoovProcessor';\nexport default dashjs.FactoryMaker.getClassFactory(MssFragmentMoovProcessor); /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport MssFragmentMoofProcessor from './MssFragmentMoofProcessor';\nimport MssFragmentMoovProcessor from './MssFragmentMoovProcessor';\nimport {HTTPRequest} from '../streaming/vo/metrics/HTTPRequest';\n\n\n// Add specific box processors not provided by codem-isoboxer library\n\nfunction arrayEqual(arr1, arr2) {\n return (arr1.length === arr2.length) && arr1.every(function (element, index) {\n return element === arr2[index];\n });\n}\n\nfunction saioProcessor() {\n this._procFullBox();\n if (this.flags & 1) {\n this._procField('aux_info_type', 'uint', 32);\n this._procField('aux_info_type_parameter', 'uint', 32);\n }\n this._procField('entry_count', 'uint', 32);\n this._procFieldArray('offset', this.entry_count, 'uint', (this.version === 1) ? 64 : 32);\n}\n\nfunction saizProcessor() {\n this._procFullBox();\n if (this.flags & 1) {\n this._procField('aux_info_type', 'uint', 32);\n this._procField('aux_info_type_parameter', 'uint', 32);\n }\n this._procField('default_sample_info_size', 'uint', 8);\n this._procField('sample_count', 'uint', 32);\n if (this.default_sample_info_size === 0) {\n this._procFieldArray('sample_info_size', this.sample_count, 'uint', 8);\n }\n}\n\nfunction sencProcessor() {\n this._procFullBox();\n this._procField('sample_count', 'uint', 32);\n if (this.flags & 1) {\n this._procField('IV_size', 'uint', 8);\n }\n this._procEntries('entry', this.sample_count, function (entry) {\n this._procEntryField(entry, 'InitializationVector', 'data', 8);\n if (this.flags & 2) {\n this._procEntryField(entry, 'NumberOfEntries', 'uint', 16);\n this._procSubEntries(entry, 'clearAndCryptedData', entry.NumberOfEntries, function (clearAndCryptedData) {\n this._procEntryField(clearAndCryptedData, 'BytesOfClearData', 'uint', 16);\n this._procEntryField(clearAndCryptedData, 'BytesOfEncryptedData', 'uint', 32);\n });\n }\n });\n}\n\nfunction uuidProcessor() {\n let tfxdUserType = [0x6D, 0x1D, 0x9B, 0x05, 0x42, 0xD5, 0x44, 0xE6, 0x80, 0xE2, 0x14, 0x1D, 0xAF, 0xF7, 0x57, 0xB2];\n let tfrfUserType = [0xD4, 0x80, 0x7E, 0xF2, 0xCA, 0x39, 0x46, 0x95, 0x8E, 0x54, 0x26, 0xCB, 0x9E, 0x46, 0xA7, 0x9F];\n let sepiffUserType = [0xA2, 0x39, 0x4F, 0x52, 0x5A, 0x9B, 0x4f, 0x14, 0xA2, 0x44, 0x6C, 0x42, 0x7C, 0x64, 0x8D, 0xF4];\n\n if (arrayEqual(this.usertype, tfxdUserType)) {\n this._procFullBox();\n if (this._parsing) {\n this.type = 'tfxd';\n }\n this._procField('fragment_absolute_time', 'uint', (this.version === 1) ? 64 : 32);\n this._procField('fragment_duration', 'uint', (this.version === 1) ? 64 : 32);\n }\n\n if (arrayEqual(this.usertype, tfrfUserType)) {\n this._procFullBox();\n if (this._parsing) {\n this.type = 'tfrf';\n }\n this._procField('fragment_count', 'uint', 8);\n this._procEntries('entry', this.fragment_count, function (entry) {\n this._procEntryField(entry, 'fragment_absolute_time', 'uint', (this.version === 1) ? 64 : 32);\n this._procEntryField(entry, 'fragment_duration', 'uint', (this.version === 1) ? 64 : 32);\n });\n }\n\n if (arrayEqual(this.usertype, sepiffUserType)) {\n if (this._parsing) {\n this.type = 'sepiff';\n }\n sencProcessor.call(this);\n }\n}\n\nfunction MssFragmentProcessor(config) {\n\n config = config || {};\n const context = this.context;\n const dashMetrics = config.dashMetrics;\n const playbackController = config.playbackController;\n const eventBus = config.eventBus;\n const protectionController = config.protectionController;\n const ISOBoxer = config.ISOBoxer;\n const debug = config.debug;\n let mssFragmentMoovProcessor,\n mssFragmentMoofProcessor,\n instance;\n\n function setup() {\n ISOBoxer.addBoxProcessor('uuid', uuidProcessor);\n ISOBoxer.addBoxProcessor('saio', saioProcessor);\n ISOBoxer.addBoxProcessor('saiz', saizProcessor);\n ISOBoxer.addBoxProcessor('senc', sencProcessor);\n\n mssFragmentMoovProcessor = MssFragmentMoovProcessor(context).create({\n protectionController: protectionController,\n constants: config.constants,\n ISOBoxer: ISOBoxer});\n\n mssFragmentMoofProcessor = MssFragmentMoofProcessor(context).create({\n dashMetrics: dashMetrics,\n playbackController: playbackController,\n ISOBoxer: ISOBoxer,\n eventBus: eventBus,\n debug: debug,\n errHandler: config.errHandler\n });\n }\n\n function generateMoov(rep) {\n return mssFragmentMoovProcessor.generateMoov(rep);\n }\n\n function processFragment(e, streamProcessor) {\n if (!e || !e.request || !e.response) {\n throw new Error('e parameter is missing or malformed');\n }\n\n if (e.request.type === 'MediaSegment') {\n // MediaSegment => convert to Smooth Streaming moof format\n mssFragmentMoofProcessor.convertFragment(e, streamProcessor);\n\n } else if (e.request.type === HTTPRequest.MSS_FRAGMENT_INFO_SEGMENT_TYPE) {\n // FragmentInfo (live) => update segments list\n mssFragmentMoofProcessor.updateSegmentList(e, streamProcessor);\n\n // Stop event propagation (FragmentInfo must not be added to buffer)\n e.sender = null;\n }\n }\n\n instance = {\n generateMoov: generateMoov,\n processFragment: processFragment\n };\n\n setup();\n\n return instance;\n}\n\nMssFragmentProcessor.__dashjs_factory_name = 'MssFragmentProcessor';\nexport default dashjs.FactoryMaker.getClassFactory(MssFragmentProcessor); /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * @module MssParser\n * @ignore\n * @param {Object} config object\n */\n\nimport BigInt from '../../../externals/BigInteger';\n\nfunction MssParser(config) {\n config = config || {};\n const BASE64 = config.BASE64;\n const debug = config.debug;\n const constants = config.constants;\n const manifestModel = config.manifestModel;\n const settings = config.settings;\n\n const DEFAULT_TIME_SCALE = 10000000.0;\n const SUPPORTED_CODECS = ['AAC', 'AACL', 'AACH', 'AACP', 'AVC1', 'H264', 'TTML', 'DFXP'];\n // MPEG-DASH Role and accessibility mapping for text tracks according to ETSI TS 103 285 v1.1.1 (section 7.1.2)\n const ROLE = {\n 'CAPT': 'main',\n 'SUBT': 'alternate',\n 'DESC': 'main'\n };\n const ACCESSIBILITY = {\n 'DESC': '2'\n };\n const samplingFrequencyIndex = {\n 96000: 0x0,\n 88200: 0x1,\n 64000: 0x2,\n 48000: 0x3,\n 44100: 0x4,\n 32000: 0x5,\n 24000: 0x6,\n 22050: 0x7,\n 16000: 0x8,\n 12000: 0x9,\n 11025: 0xA,\n 8000: 0xB,\n 7350: 0xC\n };\n const mimeTypeMap = {\n 'video': 'video/mp4',\n 'audio': 'audio/mp4',\n 'text': 'application/mp4'\n };\n\n let instance,\n logger,\n initialBufferSettings;\n\n\n function setup() {\n logger = debug.getLogger(instance);\n }\n\n function getAttributeAsBoolean(node, attrName) {\n const value = node.getAttribute(attrName);\n if (!value) return false;\n return value.toLowerCase() === 'true';\n }\n\n function mapPeriod(smoothStreamingMedia, timescale) {\n const period = {};\n let streams,\n adaptation;\n\n // For each StreamIndex node, create an AdaptationSet element\n period.AdaptationSet_asArray = [];\n streams = smoothStreamingMedia.getElementsByTagName('StreamIndex');\n for (let i = 0; i < streams.length; i++) {\n adaptation = mapAdaptationSet(streams[i], timescale);\n if (adaptation !== null) {\n period.AdaptationSet_asArray.push(adaptation);\n }\n }\n\n if (period.AdaptationSet_asArray.length > 0) {\n period.AdaptationSet = (period.AdaptationSet_asArray.length > 1) ? period.AdaptationSet_asArray : period.AdaptationSet_asArray[0];\n }\n\n return period;\n }\n\n function mapAdaptationSet(streamIndex, timescale) {\n const adaptationSet = {};\n const representations = [];\n let segmentTemplate;\n let qualityLevels,\n representation,\n i,\n index;\n\n const name = streamIndex.getAttribute('Name');\n const type = streamIndex.getAttribute('Type');\n const lang = streamIndex.getAttribute('Language');\n const fallBackId = lang ? type + '_' + lang : type;\n\n adaptationSet.id = name || fallBackId;\n adaptationSet.contentType = type;\n adaptationSet.lang = lang || 'und';\n adaptationSet.mimeType = mimeTypeMap[type];\n adaptationSet.subType = streamIndex.getAttribute('Subtype');\n adaptationSet.maxWidth = streamIndex.getAttribute('MaxWidth');\n adaptationSet.maxHeight = streamIndex.getAttribute('MaxHeight');\n\n // Map text tracks subTypes to MPEG-DASH AdaptationSet role and accessibility (see ETSI TS 103 285 v1.1.1, section 7.1.2)\n if (adaptationSet.subType) {\n if (ROLE[adaptationSet.subType]) {\n let role = {\n schemeIdUri: 'urn:mpeg:dash:role:2011',\n value: ROLE[adaptationSet.subType]\n };\n adaptationSet.Role = role;\n adaptationSet.Role_asArray = [role];\n }\n if (ACCESSIBILITY[adaptationSet.subType]) {\n let accessibility = {\n schemeIdUri: 'urn:tva:metadata:cs:AudioPurposeCS:2007',\n value: ACCESSIBILITY[adaptationSet.subType]\n };\n adaptationSet.Accessibility = accessibility;\n adaptationSet.Accessibility_asArray = [accessibility];\n }\n }\n\n // Create a SegmentTemplate with a SegmentTimeline\n segmentTemplate = mapSegmentTemplate(streamIndex, timescale);\n\n qualityLevels = streamIndex.getElementsByTagName('QualityLevel');\n // For each QualityLevel node, create a Representation element\n for (i = 0; i < qualityLevels.length; i++) {\n // Propagate BaseURL and mimeType\n qualityLevels[i].BaseURL = adaptationSet.BaseURL;\n qualityLevels[i].mimeType = adaptationSet.mimeType;\n\n // Set quality level id\n index = qualityLevels[i].getAttribute('Index');\n qualityLevels[i].Id = adaptationSet.id + ((index !== null) ? ('_' + index) : '');\n\n // Map Representation to QualityLevel\n representation = mapRepresentation(qualityLevels[i], streamIndex);\n\n if (representation !== null) {\n // Copy SegmentTemplate into Representation\n representation.SegmentTemplate = segmentTemplate;\n\n representations.push(representation);\n }\n }\n\n if (representations.length === 0) {\n return null;\n }\n\n adaptationSet.Representation = (representations.length > 1) ? representations : representations[0];\n adaptationSet.Representation_asArray = representations;\n\n // Set SegmentTemplate\n adaptationSet.SegmentTemplate = segmentTemplate;\n\n return adaptationSet;\n }\n\n function mapRepresentation(qualityLevel, streamIndex) {\n const representation = {};\n const type = streamIndex.getAttribute('Type');\n let fourCCValue = null;\n let width = null;\n let height = null;\n\n representation.id = qualityLevel.Id;\n representation.bandwidth = parseInt(qualityLevel.getAttribute('Bitrate'), 10);\n representation.mimeType = qualityLevel.mimeType;\n\n width = parseInt(qualityLevel.getAttribute('MaxWidth'), 10);\n height = parseInt(qualityLevel.getAttribute('MaxHeight'), 10);\n if (!isNaN(width)) representation.width = width;\n if (!isNaN(height)) representation.height = height;\n\n\n fourCCValue = qualityLevel.getAttribute('FourCC');\n\n // If FourCC not defined at QualityLevel level, then get it from StreamIndex level\n if (fourCCValue === null || fourCCValue === '') {\n fourCCValue = streamIndex.getAttribute('FourCC');\n }\n\n // If still not defined (optionnal for audio stream, see https://msdn.microsoft.com/en-us/library/ff728116%28v=vs.95%29.aspx),\n // then we consider the stream is an audio AAC stream\n if (fourCCValue === null || fourCCValue === '') {\n if (type === constants.AUDIO) {\n fourCCValue = 'AAC';\n } else if (type === constants.VIDEO) {\n logger.debug('FourCC is not defined whereas it is required for a QualityLevel element for a StreamIndex of type \"video\"');\n return null;\n }\n }\n\n // Check if codec is supported\n if (SUPPORTED_CODECS.indexOf(fourCCValue.toUpperCase()) === -1) {\n // Do not send warning\n logger.warn('Codec not supported: ' + fourCCValue);\n return null;\n }\n\n // Get codecs value according to FourCC field\n if (fourCCValue === 'H264' || fourCCValue === 'AVC1') {\n representation.codecs = getH264Codec(qualityLevel);\n } else if (fourCCValue.indexOf('AAC') >= 0) {\n representation.codecs = getAACCodec(qualityLevel, fourCCValue);\n representation.audioSamplingRate = parseInt(qualityLevel.getAttribute('SamplingRate'), 10);\n representation.audioChannels = parseInt(qualityLevel.getAttribute('Channels'), 10);\n } else if (fourCCValue.indexOf('TTML') || fourCCValue.indexOf('DFXP')) {\n representation.codecs = constants.STPP;\n }\n\n representation.codecPrivateData = '' + qualityLevel.getAttribute('CodecPrivateData');\n representation.BaseURL = qualityLevel.BaseURL;\n\n return representation;\n }\n\n function getH264Codec(qualityLevel) {\n let codecPrivateData = qualityLevel.getAttribute('CodecPrivateData').toString();\n let nalHeader,\n avcoti;\n\n\n // Extract from the CodecPrivateData field the hexadecimal representation of the following\n // three bytes in the sequence parameter set NAL unit.\n // => Find the SPS nal header\n nalHeader = /00000001[0-9]7/.exec(codecPrivateData);\n // => Find the 6 characters after the SPS nalHeader (if it exists)\n avcoti = nalHeader && nalHeader[0] ? (codecPrivateData.substr(codecPrivateData.indexOf(nalHeader[0]) + 10, 6)) : undefined;\n\n return 'avc1.' + avcoti;\n }\n\n function getAACCodec(qualityLevel, fourCCValue) {\n const samplingRate = parseInt(qualityLevel.getAttribute('SamplingRate'), 10);\n let codecPrivateData = qualityLevel.getAttribute('CodecPrivateData').toString();\n let objectType = 0;\n let codecPrivateDataHex,\n arr16,\n indexFreq,\n extensionSamplingFrequencyIndex;\n\n //chrome problem, in implicit AAC HE definition, so when AACH is detected in FourCC\n //set objectType to 5 => strange, it should be 2\n if (fourCCValue === 'AACH') {\n objectType = 0x05;\n }\n //if codecPrivateData is empty, build it :\n if (codecPrivateData === undefined || codecPrivateData === '') {\n objectType = 0x02; //AAC Main Low Complexity => object Type = 2\n indexFreq = samplingFrequencyIndex[samplingRate];\n if (fourCCValue === 'AACH') {\n // 4 bytes : XXXXX XXXX XXXX XXXX XXXXX XXX XXXXXXX\n // ' ObjectType' 'Freq Index' 'Channels value' 'Extens Sampl Freq' 'ObjectType' 'GAS' 'alignment = 0'\n objectType = 0x05; // High Efficiency AAC Profile = object Type = 5 SBR\n codecPrivateData = new Uint8Array(4);\n extensionSamplingFrequencyIndex = samplingFrequencyIndex[samplingRate * 2]; // in HE AAC Extension Sampling frequence\n // equals to SamplingRate*2\n //Freq Index is present for 3 bits in the first byte, last bit is in the second\n codecPrivateData[0] = (objectType << 3) | (indexFreq >> 1);\n codecPrivateData[1] = (indexFreq << 7) | (qualityLevel.Channels << 3) | (extensionSamplingFrequencyIndex >> 1);\n codecPrivateData[2] = (extensionSamplingFrequencyIndex << 7) | (0x02 << 2); // origin object type equals to 2 => AAC Main Low Complexity\n codecPrivateData[3] = 0x0; //alignment bits\n\n arr16 = new Uint16Array(2);\n arr16[0] = (codecPrivateData[0] << 8) + codecPrivateData[1];\n arr16[1] = (codecPrivateData[2] << 8) + codecPrivateData[3];\n //convert decimal to hex value\n codecPrivateDataHex = arr16[0].toString(16);\n codecPrivateDataHex = arr16[0].toString(16) + arr16[1].toString(16);\n\n } else {\n // 2 bytes : XXXXX XXXX XXXX XXX\n // ' ObjectType' 'Freq Index' 'Channels value' 'GAS = 000'\n codecPrivateData = new Uint8Array(2);\n //Freq Index is present for 3 bits in the first byte, last bit is in the second\n codecPrivateData[0] = (objectType << 3) | (indexFreq >> 1);\n codecPrivateData[1] = (indexFreq << 7) | (parseInt(qualityLevel.getAttribute('Channels'), 10) << 3);\n // put the 2 bytes in an 16 bits array\n arr16 = new Uint16Array(1);\n arr16[0] = (codecPrivateData[0] << 8) + codecPrivateData[1];\n //convert decimal to hex value\n codecPrivateDataHex = arr16[0].toString(16);\n }\n\n codecPrivateData = '' + codecPrivateDataHex;\n codecPrivateData = codecPrivateData.toUpperCase();\n qualityLevel.setAttribute('CodecPrivateData', codecPrivateData);\n } else if (objectType === 0) {\n objectType = (parseInt(codecPrivateData.substr(0, 2), 16) & 0xF8) >> 3;\n }\n\n return 'mp4a.40.' + objectType;\n }\n\n function mapSegmentTemplate(streamIndex, timescale) {\n const segmentTemplate = {};\n let mediaUrl,\n streamIndexTimeScale,\n url;\n\n url = streamIndex.getAttribute('Url');\n mediaUrl = url ? url.replace('{bitrate}', '$Bandwidth$') : null;\n mediaUrl = mediaUrl ? mediaUrl.replace('{start time}', '$Time$') : null;\n\n streamIndexTimeScale = streamIndex.getAttribute('TimeScale');\n streamIndexTimeScale = streamIndexTimeScale ? parseFloat(streamIndexTimeScale) : timescale;\n\n segmentTemplate.media = mediaUrl;\n segmentTemplate.timescale = streamIndexTimeScale;\n\n segmentTemplate.SegmentTimeline = mapSegmentTimeline(streamIndex, segmentTemplate.timescale);\n\n // Patch: set availabilityTimeOffset to Infinity since segments are available as long as they are present in timeline\n segmentTemplate.availabilityTimeOffset = 'INF';\n\n return segmentTemplate;\n }\n\n function mapSegmentTimeline(streamIndex, timescale) {\n const segmentTimeline = {};\n const chunks = streamIndex.getElementsByTagName('c');\n const segments = [];\n let segment,\n prevSegment,\n tManifest,\n i, j, r;\n let duration = 0;\n\n for (i = 0; i < chunks.length; i++) {\n segment = {};\n\n // Get time 't' attribute value\n tManifest = chunks[i].getAttribute('t');\n\n // => segment.tManifest = original timestamp value as a string (for constructing the fragment request url, see DashHandler)\n // => segment.t = number value of timestamp (maybe rounded value, but only for 0.1 microsecond)\n if (tManifest && BigInt(tManifest).greater(BigInt(Number.MAX_SAFE_INTEGER))) {\n segment.tManifest = tManifest;\n }\n segment.t = parseFloat(tManifest);\n\n // Get duration 'd' attribute value\n segment.d = parseFloat(chunks[i].getAttribute('d'));\n\n // If 't' not defined for first segment then t=0\n if ((i === 0) && !segment.t) {\n segment.t = 0;\n }\n\n if (i > 0) {\n prevSegment = segments[segments.length - 1];\n // Update previous segment duration if not defined\n if (!prevSegment.d) {\n if (prevSegment.tManifest) {\n prevSegment.d = BigInt(tManifest).subtract(BigInt(prevSegment.tManifest)).toJSNumber();\n } else {\n prevSegment.d = segment.t - prevSegment.t;\n }\n duration += prevSegment.d;\n }\n // Set segment absolute timestamp if not set in manifest\n if (!segment.t) {\n if (prevSegment.tManifest) {\n segment.tManifest = BigInt(prevSegment.tManifest).add(BigInt(prevSegment.d)).toString();\n segment.t = parseFloat(segment.tManifest);\n } else {\n segment.t = prevSegment.t + prevSegment.d;\n }\n }\n }\n\n if (segment.d) {\n duration += segment.d;\n }\n\n // Create new segment\n segments.push(segment);\n\n // Support for 'r' attribute (i.e. \"repeat\" as in MPEG-DASH)\n r = parseFloat(chunks[i].getAttribute('r'));\n if (r) {\n\n for (j = 0; j < (r - 1); j++) {\n prevSegment = segments[segments.length - 1];\n segment = {};\n segment.t = prevSegment.t + prevSegment.d;\n segment.d = prevSegment.d;\n if (prevSegment.tManifest) {\n segment.tManifest = BigInt(prevSegment.tManifest).add(BigInt(prevSegment.d)).toString();\n }\n duration += segment.d;\n segments.push(segment);\n }\n }\n }\n\n segmentTimeline.S = segments;\n segmentTimeline.S_asArray = segments;\n segmentTimeline.duration = duration / timescale;\n\n return segmentTimeline;\n }\n\n function getKIDFromProtectionHeader(protectionHeader) {\n let prHeader,\n wrmHeader,\n xmlReader,\n KID;\n\n // Get PlayReady header as byte array (base64 decoded)\n prHeader = BASE64.decodeArray(protectionHeader.firstChild.data);\n\n // Get Right Management header (WRMHEADER) from PlayReady header\n wrmHeader = getWRMHeaderFromPRHeader(prHeader);\n\n if (wrmHeader) {\n // Convert from multi-byte to unicode\n wrmHeader = new Uint16Array(wrmHeader.buffer);\n\n // Convert to string\n wrmHeader = String.fromCharCode.apply(null, wrmHeader);\n\n // Parse <WRMHeader> to get KID field value\n xmlReader = (new DOMParser()).parseFromString(wrmHeader, 'application/xml');\n KID = xmlReader.querySelector('KID').textContent;\n\n // Get KID (base64 decoded) as byte array\n KID = BASE64.decodeArray(KID);\n\n // Convert UUID from little-endian to big-endian\n convertUuidEndianness(KID);\n }\n\n return KID;\n }\n\n function getWRMHeaderFromPRHeader(prHeader) {\n let length,\n recordCount,\n recordType,\n recordLength,\n recordValue;\n let i = 0;\n\n // Parse PlayReady header\n\n // Length - 32 bits (LE format)\n length = (prHeader[i + 3] << 24) + (prHeader[i + 2] << 16) + (prHeader[i + 1] << 8) + prHeader[i]; // eslint-disable-line\n i += 4;\n\n // Record count - 16 bits (LE format)\n recordCount = (prHeader[i + 1] << 8) + prHeader[i]; // eslint-disable-line\n i += 2;\n\n // Parse records\n while (i < prHeader.length) {\n // Record type - 16 bits (LE format)\n recordType = (prHeader[i + 1] << 8) + prHeader[i];\n i += 2;\n\n // Check if Rights Management header (record type = 0x01)\n if (recordType === 0x01) {\n\n // Record length - 16 bits (LE format)\n recordLength = (prHeader[i + 1] << 8) + prHeader[i];\n i += 2;\n\n // Record value => contains <WRMHEADER>\n recordValue = new Uint8Array(recordLength);\n recordValue.set(prHeader.subarray(i, i + recordLength));\n return recordValue;\n }\n }\n\n return null;\n }\n\n function convertUuidEndianness(uuid) {\n swapBytes(uuid, 0, 3);\n swapBytes(uuid, 1, 2);\n swapBytes(uuid, 4, 5);\n swapBytes(uuid, 6, 7);\n }\n\n function swapBytes(bytes, pos1, pos2) {\n const temp = bytes[pos1];\n bytes[pos1] = bytes[pos2];\n bytes[pos2] = temp;\n }\n\n\n function createPRContentProtection(protectionHeader) {\n let pro = {\n __text: protectionHeader.firstChild.data,\n __prefix: 'mspr'\n };\n return {\n schemeIdUri: 'urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95',\n value: 'com.microsoft.playready',\n pro: pro,\n pro_asArray: pro\n };\n }\n\n function createWidevineContentProtection(KID) {\n let widevineCP = {\n schemeIdUri: 'urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed',\n value: 'com.widevine.alpha'\n };\n if (!KID)\n return widevineCP;\n // Create Widevine CENC header (Protocol Buffer) with KID value\n const wvCencHeader = new Uint8Array(2 + KID.length);\n wvCencHeader[0] = 0x12;\n wvCencHeader[1] = 0x10;\n wvCencHeader.set(KID, 2);\n\n // Create a pssh box\n const length = 12 /* box length, type, version and flags */ + 16 /* SystemID */ + 4 /* data length */ + wvCencHeader.length;\n let pssh = new Uint8Array(length);\n let i = 0;\n\n // Set box length value\n pssh[i++] = (length & 0xFF000000) >> 24;\n pssh[i++] = (length & 0x00FF0000) >> 16;\n pssh[i++] = (length & 0x0000FF00) >> 8;\n pssh[i++] = (length & 0x000000FF);\n\n // Set type ('pssh'), version (0) and flags (0)\n pssh.set([0x70, 0x73, 0x73, 0x68, 0x00, 0x00, 0x00, 0x00], i);\n i += 8;\n\n // Set SystemID ('edef8ba9-79d6-4ace-a3c8-27dcd51d21ed')\n pssh.set([0xed, 0xef, 0x8b, 0xa9, 0x79, 0xd6, 0x4a, 0xce, 0xa3, 0xc8, 0x27, 0xdc, 0xd5, 0x1d, 0x21, 0xed], i);\n i += 16;\n\n // Set data length value\n pssh[i++] = (wvCencHeader.length & 0xFF000000) >> 24;\n pssh[i++] = (wvCencHeader.length & 0x00FF0000) >> 16;\n pssh[i++] = (wvCencHeader.length & 0x0000FF00) >> 8;\n pssh[i++] = (wvCencHeader.length & 0x000000FF);\n\n // Copy Widevine CENC header\n pssh.set(wvCencHeader, i);\n\n // Convert to BASE64 string\n pssh = String.fromCharCode.apply(null, pssh);\n pssh = BASE64.encodeASCII(pssh);\n\n widevineCP.pssh = { __text: pssh };\n\n return widevineCP;\n }\n\n function processManifest(xmlDoc) {\n const manifest = {};\n const contentProtections = [];\n const smoothStreamingMedia = xmlDoc.getElementsByTagName('SmoothStreamingMedia')[0];\n const protection = xmlDoc.getElementsByTagName('Protection')[0];\n let protectionHeader = null;\n let period,\n adaptations,\n contentProtection,\n KID,\n timestampOffset,\n startTime,\n segments,\n timescale,\n segmentDuration,\n i, j;\n\n // Set manifest node properties\n manifest.protocol = 'MSS';\n manifest.profiles = 'urn:mpeg:dash:profile:isoff-live:2011';\n manifest.type = getAttributeAsBoolean(smoothStreamingMedia, 'IsLive') ? 'dynamic' : 'static';\n timescale = smoothStreamingMedia.getAttribute('TimeScale');\n manifest.timescale = timescale ? parseFloat(timescale) : DEFAULT_TIME_SCALE;\n let dvrWindowLength = parseFloat(smoothStreamingMedia.getAttribute('DVRWindowLength'));\n // If the DVRWindowLength field is omitted for a live presentation or set to 0, the DVR window is effectively infinite\n if (manifest.type === 'dynamic' && (dvrWindowLength === 0 || isNaN(dvrWindowLength))) {\n dvrWindowLength = Infinity;\n }\n // Star-over\n if (dvrWindowLength === 0 && getAttributeAsBoolean(smoothStreamingMedia, 'CanSeek')) {\n dvrWindowLength = Infinity;\n }\n\n if (dvrWindowLength > 0) {\n manifest.timeShiftBufferDepth = dvrWindowLength / manifest.timescale;\n }\n\n let duration = parseFloat(smoothStreamingMedia.getAttribute('Duration'));\n manifest.mediaPresentationDuration = (duration === 0) ? Infinity : duration / manifest.timescale;\n // By default, set minBufferTime to 2 sec. (but set below according to video segment duration)\n manifest.minBufferTime = 2;\n manifest.ttmlTimeIsRelative = true;\n\n // Live manifest with Duration = start-over\n if (manifest.type === 'dynamic' && duration > 0) {\n manifest.type = 'static';\n // We set timeShiftBufferDepth to initial duration, to be used by MssFragmentController to update segment timeline\n manifest.timeShiftBufferDepth = duration / manifest.timescale;\n // Duration will be set according to current segment timeline duration (see below)\n }\n\n if (manifest.type === 'dynamic') {\n manifest.refreshManifestOnSwitchTrack = true; // Refresh manifest when switching tracks\n manifest.doNotUpdateDVRWindowOnBufferUpdated = true; // DVRWindow is update by MssFragmentMoofPocessor based on tfrf boxes\n manifest.ignorePostponeTimePeriod = true; // Never update manifest\n manifest.availabilityStartTime = new Date(null); // Returns 1970\n }\n\n // Map period node to manifest root node\n manifest.Period = mapPeriod(smoothStreamingMedia, manifest.timescale);\n manifest.Period_asArray = [manifest.Period];\n\n // Initialize period start time\n period = manifest.Period;\n period.start = 0;\n\n // Uncomment to test live to static manifests\n // if (manifest.type !== 'static') {\n // manifest.type = 'static';\n // manifest.mediaPresentationDuration = manifest.timeShiftBufferDepth;\n // manifest.timeShiftBufferDepth = null;\n // }\n\n // ContentProtection node\n if (protection !== undefined) {\n protectionHeader = xmlDoc.getElementsByTagName('ProtectionHeader')[0];\n\n // Some packagers put newlines into the ProtectionHeader base64 string, which is not good\n // because this cannot be correctly parsed. Let's just filter out any newlines found in there.\n protectionHeader.firstChild.data = protectionHeader.firstChild.data.replace(/\\n|\\r/g, '');\n\n // Get KID (in CENC format) from protection header\n KID = getKIDFromProtectionHeader(protectionHeader);\n\n // Create ContentProtection for PlayReady\n contentProtection = createPRContentProtection(protectionHeader);\n contentProtection['cenc:default_KID'] = KID;\n contentProtections.push(contentProtection);\n\n // Create ContentProtection for Widevine (as a CENC protection)\n contentProtection = createWidevineContentProtection(KID);\n contentProtection['cenc:default_KID'] = KID;\n contentProtections.push(contentProtection);\n\n manifest.ContentProtection = contentProtections;\n manifest.ContentProtection_asArray = contentProtections;\n }\n\n adaptations = period.AdaptationSet_asArray;\n\n for (i = 0; i < adaptations.length; i += 1) {\n adaptations[i].SegmentTemplate.initialization = '$Bandwidth$';\n // Propagate content protection information into each adaptation\n if (manifest.ContentProtection !== undefined) {\n adaptations[i].ContentProtection = manifest.ContentProtection;\n adaptations[i].ContentProtection_asArray = manifest.ContentProtection_asArray;\n }\n\n if (adaptations[i].contentType === 'video') {\n // Get video segment duration\n segmentDuration = adaptations[i].SegmentTemplate.SegmentTimeline.S_asArray[0].d / adaptations[i].SegmentTemplate.timescale;\n // Set minBufferTime to one segment duration\n manifest.minBufferTime = segmentDuration;\n\n if (manifest.type === 'dynamic') {\n // Match timeShiftBufferDepth to video segment timeline duration\n if (manifest.timeShiftBufferDepth > 0 &&\n manifest.timeShiftBufferDepth !== Infinity &&\n manifest.timeShiftBufferDepth > adaptations[i].SegmentTemplate.SegmentTimeline.duration) {\n manifest.timeShiftBufferDepth = adaptations[i].SegmentTemplate.SegmentTimeline.duration;\n }\n }\n }\n }\n\n // Cap minBufferTime to timeShiftBufferDepth\n manifest.minBufferTime = Math.min(manifest.minBufferTime, (manifest.timeShiftBufferDepth ? manifest.timeShiftBufferDepth : Infinity));\n\n // In case of live streams:\n // 1- configure player buffering properties according to target live delay\n // 2- adapt live delay and then buffers length in case timeShiftBufferDepth is too small compared to target live delay (see PlaybackController.computeLiveDelay())\n // 3- Set retry attempts and intervals for FragmentInfo requests\n if (manifest.type === 'dynamic') {\n let targetLiveDelay = settings.get().streaming.delay.liveDelay;\n if (!targetLiveDelay) {\n const liveDelayFragmentCount = settings.get().streaming.delay.liveDelayFragmentCount !== null && !isNaN(settings.get().streaming.delay.liveDelayFragmentCount) ? settings.get().streaming.delay.liveDelayFragmentCount : 4;\n targetLiveDelay = segmentDuration * liveDelayFragmentCount;\n }\n let targetDelayCapping = Math.max(manifest.timeShiftBufferDepth - 10/*END_OF_PLAYLIST_PADDING*/, manifest.timeShiftBufferDepth / 2);\n let liveDelay = Math.min(targetDelayCapping, targetLiveDelay);\n // Consider a margin of more than one segment in order to avoid Precondition Failed errors (412), for example if audio and video are not correctly synchronized\n let bufferTime = liveDelay - (segmentDuration * 1.5);\n\n // Store initial buffer settings\n initialBufferSettings = {\n 'streaming': {\n 'buffer': {\n 'stableBufferTime': settings.get().streaming.buffer.stableBufferTime,\n 'bufferTimeAtTopQuality': settings.get().streaming.buffer.bufferTimeAtTopQuality,\n 'bufferTimeAtTopQualityLongForm': settings.get().streaming.buffer.bufferTimeAtTopQualityLongForm\n },\n 'timeShiftBuffer': {\n calcFromSegmentTimeline: settings.get().streaming.timeShiftBuffer.calcFromSegmentTimeline\n },\n 'delay': {\n 'liveDelay': settings.get().streaming.delay.liveDelay\n }\n }\n };\n\n settings.update({\n 'streaming': {\n 'buffer': {\n 'stableBufferTime': bufferTime,\n 'bufferTimeAtTopQuality': bufferTime,\n 'bufferTimeAtTopQualityLongForm': bufferTime\n },\n 'timeShiftBuffer': {\n calcFromSegmentTimeline: true\n },\n 'delay': {\n 'liveDelay': liveDelay\n }\n }\n });\n }\n\n // Delete Content Protection under root manifest node\n delete manifest.ContentProtection;\n delete manifest.ContentProtection_asArray;\n\n // In case of VOD streams, check if start time is greater than 0\n // Then determine timestamp offset according to higher audio/video start time\n // (use case = live stream delinearization)\n if (manifest.type === 'static') {\n // In case of start-over stream and manifest reloading (due to track switch)\n // we consider previous timestampOffset to keep timelines synchronized\n var prevManifest = manifestModel.getValue();\n if (prevManifest && prevManifest.timestampOffset) {\n timestampOffset = prevManifest.timestampOffset;\n } else {\n for (i = 0; i < adaptations.length; i++) {\n if (adaptations[i].contentType === constants.AUDIO || adaptations[i].contentType === constants.VIDEO) {\n segments = adaptations[i].SegmentTemplate.SegmentTimeline.S_asArray;\n startTime = segments[0].t;\n if (timestampOffset === undefined) {\n timestampOffset = startTime;\n }\n timestampOffset = Math.min(timestampOffset, startTime);\n // Correct content duration according to minimum adaptation's segment timeline duration\n // in order to force <video> element sending 'ended' event\n manifest.mediaPresentationDuration = Math.min(manifest.mediaPresentationDuration, adaptations[i].SegmentTemplate.SegmentTimeline.duration);\n }\n }\n }\n if (timestampOffset > 0) {\n // Patch segment templates timestamps and determine period start time (since audio/video should not be aligned to 0)\n manifest.timestampOffset = timestampOffset;\n for (i = 0; i < adaptations.length; i++) {\n segments = adaptations[i].SegmentTemplate.SegmentTimeline.S_asArray;\n for (j = 0; j < segments.length; j++) {\n if (!segments[j].tManifest) {\n segments[j].tManifest = segments[j].t.toString();\n }\n segments[j].t -= timestampOffset;\n }\n if (adaptations[i].contentType === constants.AUDIO || adaptations[i].contentType === constants.VIDEO) {\n period.start = Math.max(segments[0].t, period.start);\n adaptations[i].SegmentTemplate.presentationTimeOffset = period.start;\n }\n }\n period.start /= manifest.timescale;\n }\n }\n\n // Floor the duration to get around precision differences between segments timestamps and MSE buffer timestamps\n // and then avoid 'ended' event not being raised\n manifest.mediaPresentationDuration = Math.floor(manifest.mediaPresentationDuration * 1000) / 1000;\n period.duration = manifest.mediaPresentationDuration;\n\n return manifest;\n }\n\n function parseDOM(data) {\n let xmlDoc = null;\n\n if (window.DOMParser) {\n const parser = new window.DOMParser();\n\n xmlDoc = parser.parseFromString(data, 'text/xml');\n if (xmlDoc.getElementsByTagName('parsererror').length > 0) {\n throw new Error('parsing the manifest failed');\n }\n }\n\n return xmlDoc;\n }\n\n function getMatchers() {\n return null;\n }\n\n function getIron() {\n return null;\n }\n\n function internalParse(data) {\n let xmlDoc = null;\n let manifest = null;\n\n const startTime = window.performance.now();\n\n // Parse the MSS XML manifest\n xmlDoc = parseDOM(data);\n\n const xmlParseTime = window.performance.now();\n\n if (xmlDoc === null) {\n return null;\n }\n\n // Convert MSS manifest into DASH manifest\n manifest = processManifest(xmlDoc, new Date());\n\n const mss2dashTime = window.performance.now();\n\n logger.info('Parsing complete: (xmlParsing: ' + (xmlParseTime - startTime).toPrecision(3) + 'ms, mss2dash: ' + (mss2dashTime - xmlParseTime).toPrecision(3) + 'ms, total: ' + ((mss2dashTime - startTime) / 1000).toPrecision(3) + 's)');\n\n return manifest;\n }\n\n function reset() {\n // Restore initial buffer settings\n if (initialBufferSettings) {\n settings.update(initialBufferSettings);\n }\n }\n\n instance = {\n parse: internalParse,\n getMatchers: getMatchers,\n getIron: getIron,\n reset: reset\n };\n\n setup();\n\n return instance;\n}\n\nMssParser.__dashjs_factory_name = 'MssParser';\nexport default dashjs.FactoryMaker.getClassFactory(MssParser); /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport DataChunk from '../streaming/vo/DataChunk';\nimport FragmentRequest from '../streaming/vo/FragmentRequest';\nimport MssFragmentInfoController from './MssFragmentInfoController';\nimport MssFragmentProcessor from './MssFragmentProcessor';\nimport MssParser from './parser/MssParser';\nimport MssErrors from './errors/MssErrors';\nimport DashJSError from '../streaming/vo/DashJSError';\nimport {HTTPRequest} from '../streaming/vo/metrics/HTTPRequest';\n\nfunction MssHandler(config) {\n\n config = config || {};\n const context = this.context;\n const eventBus = config.eventBus;\n const events = config.events;\n const constants = config.constants;\n const initSegmentType = config.initSegmentType;\n const dashMetrics = config.dashMetrics;\n const playbackController = config.playbackController;\n const streamController = config.streamController;\n const protectionController = config.protectionController;\n const mssFragmentProcessor = MssFragmentProcessor(context).create({\n dashMetrics: dashMetrics,\n playbackController: playbackController,\n protectionController: protectionController,\n streamController: streamController,\n eventBus: eventBus,\n constants: constants,\n ISOBoxer: config.ISOBoxer,\n debug: config.debug,\n errHandler: config.errHandler\n });\n let mssParser,\n fragmentInfoControllers,\n instance;\n\n function setup() {\n fragmentInfoControllers = [];\n }\n\n function getStreamProcessor(type) {\n return streamController.getActiveStreamProcessors().filter(processor => {\n return processor.getType() === type;\n })[0];\n }\n\n function getFragmentInfoController(type) {\n return fragmentInfoControllers.filter(controller => {\n return (controller.getType() === type);\n })[0];\n }\n\n function createDataChunk(request, streamId, endFragment) {\n const chunk = new DataChunk();\n\n chunk.streamId = streamId;\n chunk.mediaInfo = request.mediaInfo;\n chunk.segmentType = request.type;\n chunk.start = request.startTime;\n chunk.duration = request.duration;\n chunk.end = chunk.start + chunk.duration;\n chunk.index = request.index;\n chunk.quality = request.quality;\n chunk.representationId = request.representationId;\n chunk.endFragment = endFragment;\n\n return chunk;\n }\n\n function startFragmentInfoControllers() {\n\n // Create MssFragmentInfoControllers for each StreamProcessor of active stream (only for audio, video or text)\n let processors = streamController.getActiveStreamProcessors();\n processors.forEach(function (processor) {\n if (processor.getType() === constants.VIDEO ||\n processor.getType() === constants.AUDIO ||\n processor.getType() === constants.TEXT) {\n\n let fragmentInfoController = getFragmentInfoController(processor.getType());\n if (!fragmentInfoController) {\n fragmentInfoController = MssFragmentInfoController(context).create({\n streamProcessor: processor,\n baseURLController: config.baseURLController,\n debug: config.debug\n });\n fragmentInfoController.initialize();\n fragmentInfoControllers.push(fragmentInfoController);\n }\n fragmentInfoController.start();\n }\n });\n }\n\n function stopFragmentInfoControllers() {\n fragmentInfoControllers.forEach(c => {\n c.reset();\n });\n fragmentInfoControllers = [];\n }\n\n function onInitFragmentNeeded(e) {\n let streamProcessor = getStreamProcessor(e.mediaType);\n if (!streamProcessor) return;\n\n // Create init segment request\n let representationController = streamProcessor.getRepresentationController();\n let representation = representationController.getCurrentRepresentation();\n let mediaInfo = streamProcessor.getMediaInfo();\n\n let request = new FragmentRequest();\n request.mediaType = representation.adaptation.type;\n request.type = initSegmentType;\n request.range = representation.range;\n request.quality = representation.index;\n request.mediaInfo = mediaInfo;\n request.representationId = representation.id;\n\n const chunk = createDataChunk(request, mediaInfo.streamInfo.id, e.type !== events.FRAGMENT_LOADING_PROGRESS);\n\n try {\n // Generate init segment (moov)\n chunk.bytes = mssFragmentProcessor.generateMoov(representation);\n\n // Notify init segment has been loaded\n eventBus.trigger(events.INIT_FRAGMENT_LOADED,\n { chunk: chunk },\n { streamId: mediaInfo.streamInfo.id, mediaType: representation.adaptation.type }\n );\n } catch (e) {\n config.errHandler.error(new DashJSError(e.code, e.message, e.data));\n }\n\n // Change the sender value to stop event to be propagated\n e.sender = null;\n }\n\n function onSegmentMediaLoaded(e) {\n if (e.error) return;\n\n let streamProcessor = getStreamProcessor(e.request.mediaType);\n if (!streamProcessor) return;\n\n // Process moof to transcode it from MSS to DASH (or to update segment timeline for SegmentInfo fragments)\n mssFragmentProcessor.processFragment(e, streamProcessor);\n\n if (e.request.type === HTTPRequest.MSS_FRAGMENT_INFO_SEGMENT_TYPE) {\n // If FragmentInfo loaded, then notify corresponding MssFragmentInfoController\n let fragmentInfoController = getFragmentInfoController(e.request.mediaType);\n if (fragmentInfoController) {\n fragmentInfoController.fragmentInfoLoaded(e);\n }\n }\n\n // Start MssFragmentInfoControllers in case of start-over streams\n let manifestInfo = e.request.mediaInfo.streamInfo.manifestInfo;\n if (!manifestInfo.isDynamic && manifestInfo.dvrWindowSize !== Infinity) {\n startFragmentInfoControllers();\n }\n }\n\n function onPlaybackPaused() {\n if (playbackController.getIsDynamic() && playbackController.getTime() !== 0) {\n startFragmentInfoControllers();\n }\n }\n\n function onPlaybackSeeking() {\n if (playbackController.getIsDynamic() && playbackController.getTime() !== 0) {\n startFragmentInfoControllers();\n }\n }\n\n function onTTMLPreProcess(ttmlSubtitles) {\n if (!ttmlSubtitles || !ttmlSubtitles.data) {\n return;\n }\n\n ttmlSubtitles.data = ttmlSubtitles.data.replace(/http:\\/\\/www.w3.org\\/2006\\/10\\/ttaf1/gi, 'http://www.w3.org/ns/ttml');\n }\n\n function registerEvents() {\n eventBus.on(events.INIT_FRAGMENT_NEEDED, onInitFragmentNeeded, instance, { priority: dashjs.FactoryMaker.getSingletonFactoryByName(eventBus.getClassName()).EVENT_PRIORITY_HIGH }); /* jshint ignore:line */\n eventBus.on(events.PLAYBACK_PAUSED, onPlaybackPaused, instance, { priority: dashjs.FactoryMaker.getSingletonFactoryByName(eventBus.getClassName()).EVENT_PRIORITY_HIGH }); /* jshint ignore:line */\n eventBus.on(events.PLAYBACK_SEEKING, onPlaybackSeeking, instance, { priority: dashjs.FactoryMaker.getSingletonFactoryByName(eventBus.getClassName()).EVENT_PRIORITY_HIGH }); /* jshint ignore:line */\n eventBus.on(events.FRAGMENT_LOADING_COMPLETED, onSegmentMediaLoaded, instance, { priority: dashjs.FactoryMaker.getSingletonFactoryByName(eventBus.getClassName()).EVENT_PRIORITY_HIGH }); /* jshint ignore:line */\n eventBus.on(events.TTML_TO_PARSE, onTTMLPreProcess, instance);\n }\n\n function reset() {\n if (mssParser) {\n mssParser.reset();\n mssParser = undefined;\n }\n\n eventBus.off(events.INIT_FRAGMENT_NEEDED, onInitFragmentNeeded, this);\n eventBus.off(events.PLAYBACK_PAUSED, onPlaybackPaused, this);\n eventBus.off(events.PLAYBACK_SEEKING, onPlaybackSeeking, this);\n eventBus.off(events.FRAGMENT_LOADING_COMPLETED, onSegmentMediaLoaded, this);\n eventBus.off(events.TTML_TO_PARSE, onTTMLPreProcess, this);\n\n // Reset FragmentInfoControllers\n stopFragmentInfoControllers();\n }\n\n function createMssParser() {\n mssParser = MssParser(context).create(config);\n return mssParser;\n }\n\n instance = {\n reset: reset,\n createMssParser: createMssParser,\n registerEvents: registerEvents\n };\n\n setup();\n\n return instance;\n}\n\nMssHandler.__dashjs_factory_name = 'MssHandler';\nconst factory = dashjs.FactoryMaker.getClassFactory(MssHandler); /* jshint ignore:line */\nfactory.errors = MssErrors;\ndashjs.FactoryMaker.updateClassFactory(MssHandler.__dashjs_factory_name, factory); /* jshint ignore:line */\nexport default factory; /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport MssHandler from './MssHandler';\n\n// Shove both of these into the global scope\nvar context = (typeof window !== 'undefined' && window) || global;\n\nvar dashjs = context.dashjs;\nif (!dashjs) {\n dashjs = context.dashjs = {};\n}\n\ndashjs.MssHandler = MssHandler;\n\nexport default dashjs;\nexport { MssHandler };\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport { HTTPRequest } from '../vo/metrics/HTTPRequest';\n\n/**\n * @class\n * @ignore\n */\nclass FragmentRequest {\n constructor(url) {\n this.action = FragmentRequest.ACTION_DOWNLOAD;\n this.startTime = NaN;\n this.mediaStartTime = NaN;\n this.mediaType = null;\n this.mediaInfo = null;\n this.type = null;\n this.duration = NaN;\n this.timescale = NaN;\n this.range = null;\n this.url = url || null;\n this.serviceLocation = null;\n this.requestStartDate = null;\n this.firstByteDate = null;\n this.requestEndDate = null;\n this.quality = NaN;\n this.index = NaN;\n this.availabilityStartTime = null;\n this.availabilityEndTime = null;\n this.wallStartTime = null;\n this.bytesLoaded = NaN;\n this.bytesTotal = NaN;\n this.delayLoadingTime = NaN;\n this.responseType = 'arraybuffer';\n this.representationId = null;\n }\n\n isInitializationRequest() {\n return (this.type && this.type === HTTPRequest.INIT_SEGMENT_TYPE);\n }\n\n setInfo(info) {\n this.type = info && info.init ? HTTPRequest.INIT_SEGMENT_TYPE : HTTPRequest.MEDIA_SEGMENT_TYPE;\n this.url = info && info.url ? info.url : null;\n this.range = info && info.range ? info.range.start + '-' + info.range.end : null;\n this.mediaType = info && info.mediaType ? info.mediaType : null;\n }\n}\n\nFragmentRequest.ACTION_DOWNLOAD = 'download';\nFragmentRequest.ACTION_COMPLETE = 'complete';\n\nexport default FragmentRequest;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass EventsBase {\n extend (events, config) {\n if (!events) return;\n\n let override = config ? config.override : false;\n let publicOnly = config ? config.publicOnly : false;\n\n\n for (const evt in events) {\n if (!events.hasOwnProperty(evt) || (this[evt] && !override)) continue;\n if (publicOnly && events[evt].indexOf('public_') === -1) continue;\n this[evt] = events[evt];\n\n }\n }\n}\n\nexport default EventsBase;","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass ErrorsBase {\n extend (errors, config) {\n if (!errors) return;\n\n let override = config ? config.override : false;\n let publicOnly = config ? config.publicOnly : false;\n\n\n for (const err in errors) {\n if (!errors.hasOwnProperty(err) || (this[err] && !override)) continue;\n if (publicOnly && errors[err].indexOf('public_') === -1) continue;\n this[err] = errors[err];\n\n }\n }\n}\n\nexport default ErrorsBase;","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport EventsBase from '../core/events/EventsBase';\n\n/**\n * @class\n * @implements EventsBase\n */\nclass MediaPlayerEvents extends EventsBase {\n\n /**\n * @description Public facing external events to be used when developing a player that implements dash.js.\n */\n constructor() {\n super();\n /**\n * Triggered when playback will not start yet\n * as the MPD's availabilityStartTime is in the future.\n * Check delay property in payload to determine time before playback will start.\n * @event MediaPlayerEvents#AST_IN_FUTURE\n */\n this.AST_IN_FUTURE = 'astInFuture';\n\n /**\n * Triggered when the video element's buffer state changes to stalled.\n * Check mediaType in payload to determine type (Video, Audio, FragmentedText).\n * @event MediaPlayerEvents#BUFFER_EMPTY\n */\n this.BUFFER_EMPTY = 'bufferStalled';\n\n /**\n * Triggered when the video element's buffer state changes to loaded.\n * Check mediaType in payload to determine type (Video, Audio, FragmentedText).\n * @event MediaPlayerEvents#BUFFER_LOADED\n */\n this.BUFFER_LOADED = 'bufferLoaded';\n\n /**\n * Triggered when the video element's buffer state changes, either stalled or loaded. Check payload for state.\n * @event MediaPlayerEvents#BUFFER_LEVEL_STATE_CHANGED\n */\n this.BUFFER_LEVEL_STATE_CHANGED = 'bufferStateChanged';\n\n /**\n * Triggered when the buffer level of a media type has been updated\n * @event MediaPlayerEvents#BUFFER_LEVEL_UPDATED\n */\n this.BUFFER_LEVEL_UPDATED = 'bufferLevelUpdated';\n\n /**\n * Triggered when a dynamic stream changed to static (transition phase between Live and On-Demand).\n * @event MediaPlayerEvents#DYNAMIC_TO_STATIC\n */\n this.DYNAMIC_TO_STATIC = 'dynamicToStatic';\n\n /**\n * Triggered when there is an error from the element or MSE source buffer.\n * @event MediaPlayerEvents#ERROR\n */\n this.ERROR = 'error';\n /**\n * Triggered when a fragment download has completed.\n * @event MediaPlayerEvents#FRAGMENT_LOADING_COMPLETED\n */\n this.FRAGMENT_LOADING_COMPLETED = 'fragmentLoadingCompleted';\n\n /**\n * Triggered when a partial fragment download has completed.\n * @event MediaPlayerEvents#FRAGMENT_LOADING_PROGRESS\n */\n this.FRAGMENT_LOADING_PROGRESS = 'fragmentLoadingProgress';\n /**\n * Triggered when a fragment download has started.\n * @event MediaPlayerEvents#FRAGMENT_LOADING_STARTED\n */\n this.FRAGMENT_LOADING_STARTED = 'fragmentLoadingStarted';\n\n /**\n * Triggered when a fragment download is abandoned due to detection of slow download base on the ABR abandon rule..\n * @event MediaPlayerEvents#FRAGMENT_LOADING_ABANDONED\n */\n this.FRAGMENT_LOADING_ABANDONED = 'fragmentLoadingAbandoned';\n\n /**\n * Triggered when {@link module:Debug} logger methods are called.\n * @event MediaPlayerEvents#LOG\n */\n this.LOG = 'log';\n\n /**\n * Triggered when the manifest load is complete\n * @event MediaPlayerEvents#MANIFEST_LOADED\n */\n this.MANIFEST_LOADED = 'manifestLoaded';\n\n /**\n * Triggered anytime there is a change to the overall metrics.\n * @event MediaPlayerEvents#METRICS_CHANGED\n */\n this.METRICS_CHANGED = 'metricsChanged';\n\n /**\n * Triggered when an individual metric is added, updated or cleared.\n * @event MediaPlayerEvents#METRIC_CHANGED\n */\n this.METRIC_CHANGED = 'metricChanged';\n\n /**\n * Triggered every time a new metric is added.\n * @event MediaPlayerEvents#METRIC_ADDED\n */\n this.METRIC_ADDED = 'metricAdded';\n\n /**\n * Triggered every time a metric is updated.\n * @event MediaPlayerEvents#METRIC_UPDATED\n */\n this.METRIC_UPDATED = 'metricUpdated';\n\n /**\n * Triggered when a new stream (period) starts.\n * @event MediaPlayerEvents#PERIOD_SWITCH_STARTED\n */\n this.PERIOD_SWITCH_STARTED = 'periodSwitchStarted';\n\n /**\n * Triggered at the stream end of a period.\n * @event MediaPlayerEvents#PERIOD_SWITCH_COMPLETED\n */\n this.PERIOD_SWITCH_COMPLETED = 'periodSwitchCompleted';\n\n /**\n * Triggered when an ABR up /down switch is initiated; either by user in manual mode or auto mode via ABR rules.\n * @event MediaPlayerEvents#QUALITY_CHANGE_REQUESTED\n */\n this.QUALITY_CHANGE_REQUESTED = 'qualityChangeRequested';\n\n /**\n * Triggered when the new ABR quality is being rendered on-screen.\n * @event MediaPlayerEvents#QUALITY_CHANGE_RENDERED\n */\n this.QUALITY_CHANGE_RENDERED = 'qualityChangeRendered';\n\n /**\n * Triggered when the new track is being rendered.\n * @event MediaPlayerEvents#TRACK_CHANGE_RENDERED\n */\n this.TRACK_CHANGE_RENDERED = 'trackChangeRendered';\n\n /**\n * Triggered when a stream (period) is being loaded\n * @event MediaPlayerEvents#STREAM_INITIALIZING\n */\n this.STREAM_INITIALIZING = 'streamInitializing';\n\n /**\n * Triggered when a stream (period) is loaded\n * @event MediaPlayerEvents#STREAM_UPDATED\n */\n this.STREAM_UPDATED = 'streamUpdated';\n\n /**\n * Triggered when a stream (period) is activated\n * @event MediaPlayerEvents#STREAM_ACTIVATED\n */\n this.STREAM_ACTIVATED = 'streamActivated';\n\n /**\n * Triggered when a stream (period) is deactivated\n * @event MediaPlayerEvents#STREAM_DEACTIVATED\n */\n this.STREAM_DEACTIVATED = 'streamDeactivated';\n\n /**\n * Triggered when a stream (period) is activated\n * @event MediaPlayerEvents#STREAM_INITIALIZED\n */\n this.STREAM_INITIALIZED = 'streamInitialized';\n\n /**\n * Triggered when the player has been reset.\n * @event MediaPlayerEvents#STREAM_TEARDOWN_COMPLETE\n */\n this.STREAM_TEARDOWN_COMPLETE = 'streamTeardownComplete';\n\n /**\n * Triggered once all text tracks detected in the MPD are added to the video element.\n * @event MediaPlayerEvents#TEXT_TRACKS_ADDED\n */\n this.TEXT_TRACKS_ADDED = 'allTextTracksAdded';\n\n /**\n * Triggered when a text track is added to the video element's TextTrackList\n * @event MediaPlayerEvents#TEXT_TRACK_ADDED\n */\n this.TEXT_TRACK_ADDED = 'textTrackAdded';\n\n /**\n * Triggered when a ttml chunk is parsed.\n * @event MediaPlayerEvents#TTML_PARSED\n */\n this.TTML_PARSED = 'ttmlParsed';\n\n /**\n * Triggered when a ttml chunk has to be parsed.\n * @event MediaPlayerEvents#TTML_TO_PARSE\n */\n this.TTML_TO_PARSE = 'ttmlToParse';\n\n /**\n * Triggered when a caption is rendered.\n * @event MediaPlayerEvents#CAPTION_RENDERED\n */\n this.CAPTION_RENDERED = 'captionRendered';\n\n /**\n * Triggered when the caption container is resized.\n * @event MediaPlayerEvents#CAPTION_CONTAINER_RESIZE\n */\n this.CAPTION_CONTAINER_RESIZE = 'captionContainerResize';\n\n /**\n * Sent when enough data is available that the media can be played,\n * at least for a couple of frames. This corresponds to the\n * HAVE_ENOUGH_DATA readyState.\n * @event MediaPlayerEvents#CAN_PLAY\n */\n this.CAN_PLAY = 'canPlay';\n\n /**\n * This corresponds to the CAN_PLAY_THROUGH readyState.\n * @event MediaPlayerEvents#CAN_PLAY_THROUGH\n */\n this.CAN_PLAY_THROUGH = 'canPlayThrough';\n\n /**\n * Sent when playback completes.\n * @event MediaPlayerEvents#PLAYBACK_ENDED\n */\n this.PLAYBACK_ENDED = 'playbackEnded';\n\n /**\n * Sent when an error occurs. The element's error\n * attribute contains more information.\n * @event MediaPlayerEvents#PLAYBACK_ERROR\n */\n this.PLAYBACK_ERROR = 'playbackError';\n\n /**\n * Sent when playback is not allowed (for example if user gesture is needed).\n * @event MediaPlayerEvents#PLAYBACK_NOT_ALLOWED\n */\n this.PLAYBACK_NOT_ALLOWED = 'playbackNotAllowed';\n\n /**\n * The media's metadata has finished loading; all attributes now\n * contain as much useful information as they're going to.\n * @event MediaPlayerEvents#PLAYBACK_METADATA_LOADED\n */\n this.PLAYBACK_METADATA_LOADED = 'playbackMetaDataLoaded';\n\n /**\n * The event is fired when the frame at the current playback position of the media has finished loading;\n * often the first frame\n * @event MediaPlayerEvents#PLAYBACK_LOADED_DATA\n */\n this.PLAYBACK_LOADED_DATA = 'playbackLoadedData';\n\n /**\n * Sent when playback is paused.\n * @event MediaPlayerEvents#PLAYBACK_PAUSED\n */\n this.PLAYBACK_PAUSED = 'playbackPaused';\n\n /**\n * Sent when the media begins to play (either for the first time, after having been paused,\n * or after ending and then restarting).\n *\n * @event MediaPlayerEvents#PLAYBACK_PLAYING\n */\n this.PLAYBACK_PLAYING = 'playbackPlaying';\n\n /**\n * Sent periodically to inform interested parties of progress downloading\n * the media. Information about the current amount of the media that has\n * been downloaded is available in the media element's buffered attribute.\n * @event MediaPlayerEvents#PLAYBACK_PROGRESS\n */\n this.PLAYBACK_PROGRESS = 'playbackProgress';\n\n /**\n * Sent when the playback speed changes.\n * @event MediaPlayerEvents#PLAYBACK_RATE_CHANGED\n */\n this.PLAYBACK_RATE_CHANGED = 'playbackRateChanged';\n\n /**\n * Sent when a seek operation completes.\n * @event MediaPlayerEvents#PLAYBACK_SEEKED\n */\n this.PLAYBACK_SEEKED = 'playbackSeeked';\n\n /**\n * Sent when a seek operation begins.\n * @event MediaPlayerEvents#PLAYBACK_SEEKING\n */\n this.PLAYBACK_SEEKING = 'playbackSeeking';\n\n /**\n * Sent when the video element reports stalled\n * @event MediaPlayerEvents#PLAYBACK_STALLED\n */\n this.PLAYBACK_STALLED = 'playbackStalled';\n\n /**\n * Sent when playback of the media starts after having been paused;\n * that is, when playback is resumed after a prior pause event.\n *\n * @event MediaPlayerEvents#PLAYBACK_STARTED\n */\n this.PLAYBACK_STARTED = 'playbackStarted';\n\n /**\n * The time indicated by the element's currentTime attribute has changed.\n * @event MediaPlayerEvents#PLAYBACK_TIME_UPDATED\n */\n this.PLAYBACK_TIME_UPDATED = 'playbackTimeUpdated';\n\n /**\n * Sent when the video element reports that the volume has changed\n * @event MediaPlayerEvents#PLAYBACK_VOLUME_CHANGED\n */\n this.PLAYBACK_VOLUME_CHANGED = 'playbackVolumeChanged';\n\n /**\n * Sent when the media playback has stopped because of a temporary lack of data.\n *\n * @event MediaPlayerEvents#PLAYBACK_WAITING\n */\n this.PLAYBACK_WAITING = 'playbackWaiting';\n\n /**\n * Manifest validity changed - As a result of an MPD validity expiration event.\n * @event MediaPlayerEvents#MANIFEST_VALIDITY_CHANGED\n */\n this.MANIFEST_VALIDITY_CHANGED = 'manifestValidityChanged';\n\n /**\n * Dash events are triggered at their respective start points on the timeline.\n * @event MediaPlayerEvents#EVENT_MODE_ON_START\n */\n this.EVENT_MODE_ON_START = 'eventModeOnStart';\n\n /**\n * Dash events are triggered as soon as they were parsed.\n * @event MediaPlayerEvents#EVENT_MODE_ON_RECEIVE\n */\n this.EVENT_MODE_ON_RECEIVE = 'eventModeOnReceive';\n\n /**\n * Event that is dispatched whenever the player encounters a potential conformance validation that might lead to unexpected/not optimal behavior\n * @event MediaPlayerEvents#CONFORMANCE_VIOLATION\n */\n this.CONFORMANCE_VIOLATION = 'conformanceViolation';\n\n /**\n * Event that is dispatched whenever the player switches to a different representation\n * @event MediaPlayerEvents#REPRESENTATION_SWITCH\n */\n this.REPRESENTATION_SWITCH = 'representationSwitch';\n\n /**\n * Event that is dispatched whenever an adaptation set is removed due to all representations not being supported.\n * @event MediaPlayerEvents#ADAPTATION_SET_REMOVED_NO_CAPABILITIES\n */\n this.ADAPTATION_SET_REMOVED_NO_CAPABILITIES = 'adaptationSetRemovedNoCapabilities';\n /**\n * Triggered when a content steering request has completed.\n * @event MediaPlayerEvents#CONTENT_STEERING_REQUEST_COMPLETED\n */\n this.CONTENT_STEERING_REQUEST_COMPLETED = 'contentSteeringRequestCompleted';\n }\n}\n\nlet mediaPlayerEvents = new MediaPlayerEvents();\nexport default mediaPlayerEvents;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @classdesc This Object holds reference to the HTTPRequest for manifest, fragment and xlink loading.\n * Members which are not defined in ISO23009-1 Annex D should be prefixed by a _ so that they are ignored\n * by Metrics Reporting code.\n * @ignore\n */\nclass HTTPRequest {\n /**\n * @class\n */\n constructor() {\n /**\n * Identifier of the TCP connection on which the HTTP request was sent.\n * @public\n */\n this.tcpid = null;\n /**\n * This is an optional parameter and should not be included in HTTP request/response transactions for progressive download.\n * The type of the request:\n * - MPD\n * - XLink expansion\n * - Initialization Fragment\n * - Index Fragment\n * - Media Fragment\n * - Bitstream Switching Fragment\n * - other\n * @public\n */\n this.type = null;\n /**\n * The original URL (before any redirects or failures)\n * @public\n */\n this.url = null;\n /**\n * The actual URL requested, if different from above\n * @public\n */\n this.actualurl = null;\n /**\n * The contents of the byte-range-spec part of the HTTP Range header.\n * @public\n */\n this.range = null;\n /**\n * Real-Time | The real time at which the request was sent.\n * @public\n */\n this.trequest = null;\n /**\n * Real-Time | The real time at which the first byte of the response was received.\n * @public\n */\n this.tresponse = null;\n /**\n * The HTTP response code.\n * @public\n */\n this.responsecode = null;\n /**\n * The duration of the throughput trace intervals (ms), for successful requests only.\n * @public\n */\n this.interval = null;\n /**\n * Throughput traces, for successful requests only.\n * @public\n */\n this.trace = [];\n\n /**\n * Type of stream (\"audio\" | \"video\" etc..)\n * @public\n */\n this._stream = null;\n /**\n * Real-Time | The real time at which the request finished.\n * @public\n */\n this._tfinish = null;\n /**\n * The duration of the media requests, if available, in seconds.\n * @public\n */\n this._mediaduration = null;\n /**\n * The media segment quality\n * @public\n */\n this._quality = null;\n /**\n * all the response headers from request.\n * @public\n */\n this._responseHeaders = null;\n /**\n * The selected service location for the request. string.\n * @public\n */\n this._serviceLocation = null;\n /**\n * The type of the loader that was used. Distinguish between fetch loader and xhr loader\n */\n this._fileLoaderType = null;\n }\n}\n\n/**\n * @classdesc This Object holds reference to the progress of the HTTPRequest.\n * @ignore\n */\nclass HTTPRequestTrace {\n /**\n * @class\n */\n constructor() {\n /**\n * Real-Time | Measurement stream start.\n * @public\n */\n this.s = null;\n /**\n * Measurement stream duration (ms).\n * @public\n */\n this.d = null;\n /**\n * List of integers counting the bytes received in each trace interval within the measurement stream.\n * @public\n */\n this.b = [];\n }\n}\n\nHTTPRequest.GET = 'GET';\nHTTPRequest.HEAD = 'HEAD';\nHTTPRequest.MPD_TYPE = 'MPD';\nHTTPRequest.XLINK_EXPANSION_TYPE = 'XLinkExpansion';\nHTTPRequest.INIT_SEGMENT_TYPE = 'InitializationSegment';\nHTTPRequest.INDEX_SEGMENT_TYPE = 'IndexSegment';\nHTTPRequest.MEDIA_SEGMENT_TYPE = 'MediaSegment';\nHTTPRequest.BITSTREAM_SWITCHING_SEGMENT_TYPE = 'BitstreamSwitchingSegment';\nHTTPRequest.MSS_FRAGMENT_INFO_SEGMENT_TYPE = 'FragmentInfoSegment';\nHTTPRequest.DVB_REPORTING_TYPE = 'DVBReporting';\nHTTPRequest.LICENSE = 'license';\nHTTPRequest.CONTENT_STEERING_TYPE = 'ContentSteering';\nHTTPRequest.OTHER_TYPE = 'other';\n\nexport {HTTPRequest, HTTPRequestTrace};\n","var bigInt=function(undefined){\"use strict\";var BASE=1e7,LOG_BASE=7,MAX_INT=9007199254740992,MAX_INT_ARR=smallToArray(MAX_INT),DEFAULT_ALPHABET=\"0123456789abcdefghijklmnopqrstuvwxyz\";var supportsNativeBigInt=typeof BigInt===\"function\";function Integer(v,radix,alphabet,caseSensitive){if(typeof v===\"undefined\")return Integer[0];if(typeof radix!==\"undefined\")return+radix===10&&!alphabet?parseValue(v):parseBase(v,radix,alphabet,caseSensitive);return parseValue(v)}function BigInteger(value,sign){this.value=value;this.sign=sign;this.isSmall=false}BigInteger.prototype=Object.create(Integer.prototype);function SmallInteger(value){this.value=value;this.sign=value<0;this.isSmall=true}SmallInteger.prototype=Object.create(Integer.prototype);function NativeBigInt(value){this.value=value}NativeBigInt.prototype=Object.create(Integer.prototype);function isPrecise(n){return-MAX_INT<n&&n<MAX_INT}function smallToArray(n){if(n<1e7)return[n];if(n<1e14)return[n%1e7,Math.floor(n/1e7)];return[n%1e7,Math.floor(n/1e7)%1e7,Math.floor(n/1e14)]}function arrayToSmall(arr){trim(arr);var length=arr.length;if(length<4&&compareAbs(arr,MAX_INT_ARR)<0){switch(length){case 0:return 0;case 1:return arr[0];case 2:return arr[0]+arr[1]*BASE;default:return arr[0]+(arr[1]+arr[2]*BASE)*BASE}}return arr}function trim(v){var i=v.length;while(v[--i]===0);v.length=i+1}function createArray(length){var x=new Array(length);var i=-1;while(++i<length){x[i]=0}return x}function truncate(n){if(n>0)return Math.floor(n);return Math.ceil(n)}function add(a,b){var l_a=a.length,l_b=b.length,r=new Array(l_a),carry=0,base=BASE,sum,i;for(i=0;i<l_b;i++){sum=a[i]+b[i]+carry;carry=sum>=base?1:0;r[i]=sum-carry*base}while(i<l_a){sum=a[i]+carry;carry=sum===base?1:0;r[i++]=sum-carry*base}if(carry>0)r.push(carry);return r}function addAny(a,b){if(a.length>=b.length)return add(a,b);return add(b,a)}function addSmall(a,carry){var l=a.length,r=new Array(l),base=BASE,sum,i;for(i=0;i<l;i++){sum=a[i]-base+carry;carry=Math.floor(sum/base);r[i]=sum-carry*base;carry+=1}while(carry>0){r[i++]=carry%base;carry=Math.floor(carry/base)}return r}BigInteger.prototype.add=function(v){var n=parseValue(v);if(this.sign!==n.sign){return this.subtract(n.negate())}var a=this.value,b=n.value;if(n.isSmall){return new BigInteger(addSmall(a,Math.abs(b)),this.sign)}return new BigInteger(addAny(a,b),this.sign)};BigInteger.prototype.plus=BigInteger.prototype.add;SmallInteger.prototype.add=function(v){var n=parseValue(v);var a=this.value;if(a<0!==n.sign){return this.subtract(n.negate())}var b=n.value;if(n.isSmall){if(isPrecise(a+b))return new SmallInteger(a+b);b=smallToArray(Math.abs(b))}return new BigInteger(addSmall(b,Math.abs(a)),a<0)};SmallInteger.prototype.plus=SmallInteger.prototype.add;NativeBigInt.prototype.add=function(v){return new NativeBigInt(this.value+parseValue(v).value)};NativeBigInt.prototype.plus=NativeBigInt.prototype.add;function subtract(a,b){var a_l=a.length,b_l=b.length,r=new Array(a_l),borrow=0,base=BASE,i,difference;for(i=0;i<b_l;i++){difference=a[i]-borrow-b[i];if(difference<0){difference+=base;borrow=1}else borrow=0;r[i]=difference}for(i=b_l;i<a_l;i++){difference=a[i]-borrow;if(difference<0)difference+=base;else{r[i++]=difference;break}r[i]=difference}for(;i<a_l;i++){r[i]=a[i]}trim(r);return r}function subtractAny(a,b,sign){var value;if(compareAbs(a,b)>=0){value=subtract(a,b)}else{value=subtract(b,a);sign=!sign}value=arrayToSmall(value);if(typeof value===\"number\"){if(sign)value=-value;return new SmallInteger(value)}return new BigInteger(value,sign)}function subtractSmall(a,b,sign){var l=a.length,r=new Array(l),carry=-b,base=BASE,i,difference;for(i=0;i<l;i++){difference=a[i]+carry;carry=Math.floor(difference/base);difference%=base;r[i]=difference<0?difference+base:difference}r=arrayToSmall(r);if(typeof r===\"number\"){if(sign)r=-r;return new SmallInteger(r)}return new BigInteger(r,sign)}BigInteger.prototype.subtract=function(v){var n=parseValue(v);if(this.sign!==n.sign){return this.add(n.negate())}var a=this.value,b=n.value;if(n.isSmall)return subtractSmall(a,Math.abs(b),this.sign);return subtractAny(a,b,this.sign)};BigInteger.prototype.minus=BigInteger.prototype.subtract;SmallInteger.prototype.subtract=function(v){var n=parseValue(v);var a=this.value;if(a<0!==n.sign){return this.add(n.negate())}var b=n.value;if(n.isSmall){return new SmallInteger(a-b)}return subtractSmall(b,Math.abs(a),a>=0)};SmallInteger.prototype.minus=SmallInteger.prototype.subtract;NativeBigInt.prototype.subtract=function(v){return new NativeBigInt(this.value-parseValue(v).value)};NativeBigInt.prototype.minus=NativeBigInt.prototype.subtract;BigInteger.prototype.negate=function(){return new BigInteger(this.value,!this.sign)};SmallInteger.prototype.negate=function(){var sign=this.sign;var small=new SmallInteger(-this.value);small.sign=!sign;return small};NativeBigInt.prototype.negate=function(){return new NativeBigInt(-this.value)};BigInteger.prototype.abs=function(){return new BigInteger(this.value,false)};SmallInteger.prototype.abs=function(){return new SmallInteger(Math.abs(this.value))};NativeBigInt.prototype.abs=function(){return new NativeBigInt(this.value>=0?this.value:-this.value)};function multiplyLong(a,b){var a_l=a.length,b_l=b.length,l=a_l+b_l,r=createArray(l),base=BASE,product,carry,i,a_i,b_j;for(i=0;i<a_l;++i){a_i=a[i];for(var j=0;j<b_l;++j){b_j=b[j];product=a_i*b_j+r[i+j];carry=Math.floor(product/base);r[i+j]=product-carry*base;r[i+j+1]+=carry}}trim(r);return r}function multiplySmall(a,b){var l=a.length,r=new Array(l),base=BASE,carry=0,product,i;for(i=0;i<l;i++){product=a[i]*b+carry;carry=Math.floor(product/base);r[i]=product-carry*base}while(carry>0){r[i++]=carry%base;carry=Math.floor(carry/base)}return r}function shiftLeft(x,n){var r=[];while(n-- >0)r.push(0);return r.concat(x)}function multiplyKaratsuba(x,y){var n=Math.max(x.length,y.length);if(n<=30)return multiplyLong(x,y);n=Math.ceil(n/2);var b=x.slice(n),a=x.slice(0,n),d=y.slice(n),c=y.slice(0,n);var ac=multiplyKaratsuba(a,c),bd=multiplyKaratsuba(b,d),abcd=multiplyKaratsuba(addAny(a,b),addAny(c,d));var product=addAny(addAny(ac,shiftLeft(subtract(subtract(abcd,ac),bd),n)),shiftLeft(bd,2*n));trim(product);return product}function useKaratsuba(l1,l2){return-.012*l1-.012*l2+15e-6*l1*l2>0}BigInteger.prototype.multiply=function(v){var n=parseValue(v),a=this.value,b=n.value,sign=this.sign!==n.sign,abs;if(n.isSmall){if(b===0)return Integer[0];if(b===1)return this;if(b===-1)return this.negate();abs=Math.abs(b);if(abs<BASE){return new BigInteger(multiplySmall(a,abs),sign)}b=smallToArray(abs)}if(useKaratsuba(a.length,b.length))return new BigInteger(multiplyKaratsuba(a,b),sign);return new BigInteger(multiplyLong(a,b),sign)};BigInteger.prototype.times=BigInteger.prototype.multiply;function multiplySmallAndArray(a,b,sign){if(a<BASE){return new BigInteger(multiplySmall(b,a),sign)}return new BigInteger(multiplyLong(b,smallToArray(a)),sign)}SmallInteger.prototype._multiplyBySmall=function(a){if(isPrecise(a.value*this.value)){return new SmallInteger(a.value*this.value)}return multiplySmallAndArray(Math.abs(a.value),smallToArray(Math.abs(this.value)),this.sign!==a.sign)};BigInteger.prototype._multiplyBySmall=function(a){if(a.value===0)return Integer[0];if(a.value===1)return this;if(a.value===-1)return this.negate();return multiplySmallAndArray(Math.abs(a.value),this.value,this.sign!==a.sign)};SmallInteger.prototype.multiply=function(v){return parseValue(v)._multiplyBySmall(this)};SmallInteger.prototype.times=SmallInteger.prototype.multiply;NativeBigInt.prototype.multiply=function(v){return new NativeBigInt(this.value*parseValue(v).value)};NativeBigInt.prototype.times=NativeBigInt.prototype.multiply;function square(a){var l=a.length,r=createArray(l+l),base=BASE,product,carry,i,a_i,a_j;for(i=0;i<l;i++){a_i=a[i];carry=0-a_i*a_i;for(var j=i;j<l;j++){a_j=a[j];product=2*(a_i*a_j)+r[i+j]+carry;carry=Math.floor(product/base);r[i+j]=product-carry*base}r[i+l]=carry}trim(r);return r}BigInteger.prototype.square=function(){return new BigInteger(square(this.value),false)};SmallInteger.prototype.square=function(){var value=this.value*this.value;if(isPrecise(value))return new SmallInteger(value);return new BigInteger(square(smallToArray(Math.abs(this.value))),false)};NativeBigInt.prototype.square=function(v){return new NativeBigInt(this.value*this.value)};function divMod1(a,b){var a_l=a.length,b_l=b.length,base=BASE,result=createArray(b.length),divisorMostSignificantDigit=b[b_l-1],lambda=Math.ceil(base/(2*divisorMostSignificantDigit)),remainder=multiplySmall(a,lambda),divisor=multiplySmall(b,lambda),quotientDigit,shift,carry,borrow,i,l,q;if(remainder.length<=a_l)remainder.push(0);divisor.push(0);divisorMostSignificantDigit=divisor[b_l-1];for(shift=a_l-b_l;shift>=0;shift--){quotientDigit=base-1;if(remainder[shift+b_l]!==divisorMostSignificantDigit){quotientDigit=Math.floor((remainder[shift+b_l]*base+remainder[shift+b_l-1])/divisorMostSignificantDigit)}carry=0;borrow=0;l=divisor.length;for(i=0;i<l;i++){carry+=quotientDigit*divisor[i];q=Math.floor(carry/base);borrow+=remainder[shift+i]-(carry-q*base);carry=q;if(borrow<0){remainder[shift+i]=borrow+base;borrow=-1}else{remainder[shift+i]=borrow;borrow=0}}while(borrow!==0){quotientDigit-=1;carry=0;for(i=0;i<l;i++){carry+=remainder[shift+i]-base+divisor[i];if(carry<0){remainder[shift+i]=carry+base;carry=0}else{remainder[shift+i]=carry;carry=1}}borrow+=carry}result[shift]=quotientDigit}remainder=divModSmall(remainder,lambda)[0];return[arrayToSmall(result),arrayToSmall(remainder)]}function divMod2(a,b){var a_l=a.length,b_l=b.length,result=[],part=[],base=BASE,guess,xlen,highx,highy,check;while(a_l){part.unshift(a[--a_l]);trim(part);if(compareAbs(part,b)<0){result.push(0);continue}xlen=part.length;highx=part[xlen-1]*base+part[xlen-2];highy=b[b_l-1]*base+b[b_l-2];if(xlen>b_l){highx=(highx+1)*base}guess=Math.ceil(highx/highy);do{check=multiplySmall(b,guess);if(compareAbs(check,part)<=0)break;guess--}while(guess);result.push(guess);part=subtract(part,check)}result.reverse();return[arrayToSmall(result),arrayToSmall(part)]}function divModSmall(value,lambda){var length=value.length,quotient=createArray(length),base=BASE,i,q,remainder,divisor;remainder=0;for(i=length-1;i>=0;--i){divisor=remainder*base+value[i];q=truncate(divisor/lambda);remainder=divisor-q*lambda;quotient[i]=q|0}return[quotient,remainder|0]}function divModAny(self,v){var value,n=parseValue(v);if(supportsNativeBigInt){return[new NativeBigInt(self.value/n.value),new NativeBigInt(self.value%n.value)]}var a=self.value,b=n.value;var quotient;if(b===0)throw new Error(\"Cannot divide by zero\");if(self.isSmall){if(n.isSmall){return[new SmallInteger(truncate(a/b)),new SmallInteger(a%b)]}return[Integer[0],self]}if(n.isSmall){if(b===1)return[self,Integer[0]];if(b==-1)return[self.negate(),Integer[0]];var abs=Math.abs(b);if(abs<BASE){value=divModSmall(a,abs);quotient=arrayToSmall(value[0]);var remainder=value[1];if(self.sign)remainder=-remainder;if(typeof quotient===\"number\"){if(self.sign!==n.sign)quotient=-quotient;return[new SmallInteger(quotient),new SmallInteger(remainder)]}return[new BigInteger(quotient,self.sign!==n.sign),new SmallInteger(remainder)]}b=smallToArray(abs)}var comparison=compareAbs(a,b);if(comparison===-1)return[Integer[0],self];if(comparison===0)return[Integer[self.sign===n.sign?1:-1],Integer[0]];if(a.length+b.length<=200)value=divMod1(a,b);else value=divMod2(a,b);quotient=value[0];var qSign=self.sign!==n.sign,mod=value[1],mSign=self.sign;if(typeof quotient===\"number\"){if(qSign)quotient=-quotient;quotient=new SmallInteger(quotient)}else quotient=new BigInteger(quotient,qSign);if(typeof mod===\"number\"){if(mSign)mod=-mod;mod=new SmallInteger(mod)}else mod=new BigInteger(mod,mSign);return[quotient,mod]}BigInteger.prototype.divmod=function(v){var result=divModAny(this,v);return{quotient:result[0],remainder:result[1]}};NativeBigInt.prototype.divmod=SmallInteger.prototype.divmod=BigInteger.prototype.divmod;BigInteger.prototype.divide=function(v){return divModAny(this,v)[0]};NativeBigInt.prototype.over=NativeBigInt.prototype.divide=function(v){return new NativeBigInt(this.value/parseValue(v).value)};SmallInteger.prototype.over=SmallInteger.prototype.divide=BigInteger.prototype.over=BigInteger.prototype.divide;BigInteger.prototype.mod=function(v){return divModAny(this,v)[1]};NativeBigInt.prototype.mod=NativeBigInt.prototype.remainder=function(v){return new NativeBigInt(this.value%parseValue(v).value)};SmallInteger.prototype.remainder=SmallInteger.prototype.mod=BigInteger.prototype.remainder=BigInteger.prototype.mod;BigInteger.prototype.pow=function(v){var n=parseValue(v),a=this.value,b=n.value,value,x,y;if(b===0)return Integer[1];if(a===0)return Integer[0];if(a===1)return Integer[1];if(a===-1)return n.isEven()?Integer[1]:Integer[-1];if(n.sign){return Integer[0]}if(!n.isSmall)throw new Error(\"The exponent \"+n.toString()+\" is too large.\");if(this.isSmall){if(isPrecise(value=Math.pow(a,b)))return new SmallInteger(truncate(value))}x=this;y=Integer[1];while(true){if(b&1===1){y=y.times(x);--b}if(b===0)break;b/=2;x=x.square()}return y};SmallInteger.prototype.pow=BigInteger.prototype.pow;NativeBigInt.prototype.pow=function(v){var n=parseValue(v);var a=this.value,b=n.value;var _0=BigInt(0),_1=BigInt(1),_2=BigInt(2);if(b===_0)return Integer[1];if(a===_0)return Integer[0];if(a===_1)return Integer[1];if(a===BigInt(-1))return n.isEven()?Integer[1]:Integer[-1];if(n.isNegative())return new NativeBigInt(_0);var x=this;var y=Integer[1];while(true){if((b&_1)===_1){y=y.times(x);--b}if(b===_0)break;b/=_2;x=x.square()}return y};BigInteger.prototype.modPow=function(exp,mod){exp=parseValue(exp);mod=parseValue(mod);if(mod.isZero())throw new Error(\"Cannot take modPow with modulus 0\");var r=Integer[1],base=this.mod(mod);while(exp.isPositive()){if(base.isZero())return Integer[0];if(exp.isOdd())r=r.multiply(base).mod(mod);exp=exp.divide(2);base=base.square().mod(mod)}return r};NativeBigInt.prototype.modPow=SmallInteger.prototype.modPow=BigInteger.prototype.modPow;function compareAbs(a,b){if(a.length!==b.length){return a.length>b.length?1:-1}for(var i=a.length-1;i>=0;i--){if(a[i]!==b[i])return a[i]>b[i]?1:-1}return 0}BigInteger.prototype.compareAbs=function(v){var n=parseValue(v),a=this.value,b=n.value;if(n.isSmall)return 1;return compareAbs(a,b)};SmallInteger.prototype.compareAbs=function(v){var n=parseValue(v),a=Math.abs(this.value),b=n.value;if(n.isSmall){b=Math.abs(b);return a===b?0:a>b?1:-1}return-1};NativeBigInt.prototype.compareAbs=function(v){var a=this.value;var b=parseValue(v).value;a=a>=0?a:-a;b=b>=0?b:-b;return a===b?0:a>b?1:-1};BigInteger.prototype.compare=function(v){if(v===Infinity){return-1}if(v===-Infinity){return 1}var n=parseValue(v),a=this.value,b=n.value;if(this.sign!==n.sign){return n.sign?1:-1}if(n.isSmall){return this.sign?-1:1}return compareAbs(a,b)*(this.sign?-1:1)};BigInteger.prototype.compareTo=BigInteger.prototype.compare;SmallInteger.prototype.compare=function(v){if(v===Infinity){return-1}if(v===-Infinity){return 1}var n=parseValue(v),a=this.value,b=n.value;if(n.isSmall){return a==b?0:a>b?1:-1}if(a<0!==n.sign){return a<0?-1:1}return a<0?1:-1};SmallInteger.prototype.compareTo=SmallInteger.prototype.compare;NativeBigInt.prototype.compare=function(v){if(v===Infinity){return-1}if(v===-Infinity){return 1}var a=this.value;var b=parseValue(v).value;return a===b?0:a>b?1:-1};NativeBigInt.prototype.compareTo=NativeBigInt.prototype.compare;BigInteger.prototype.equals=function(v){return this.compare(v)===0};NativeBigInt.prototype.eq=NativeBigInt.prototype.equals=SmallInteger.prototype.eq=SmallInteger.prototype.equals=BigInteger.prototype.eq=BigInteger.prototype.equals;BigInteger.prototype.notEquals=function(v){return this.compare(v)!==0};NativeBigInt.prototype.neq=NativeBigInt.prototype.notEquals=SmallInteger.prototype.neq=SmallInteger.prototype.notEquals=BigInteger.prototype.neq=BigInteger.prototype.notEquals;BigInteger.prototype.greater=function(v){return this.compare(v)>0};NativeBigInt.prototype.gt=NativeBigInt.prototype.greater=SmallInteger.prototype.gt=SmallInteger.prototype.greater=BigInteger.prototype.gt=BigInteger.prototype.greater;BigInteger.prototype.lesser=function(v){return this.compare(v)<0};NativeBigInt.prototype.lt=NativeBigInt.prototype.lesser=SmallInteger.prototype.lt=SmallInteger.prototype.lesser=BigInteger.prototype.lt=BigInteger.prototype.lesser;BigInteger.prototype.greaterOrEquals=function(v){return this.compare(v)>=0};NativeBigInt.prototype.geq=NativeBigInt.prototype.greaterOrEquals=SmallInteger.prototype.geq=SmallInteger.prototype.greaterOrEquals=BigInteger.prototype.geq=BigInteger.prototype.greaterOrEquals;BigInteger.prototype.lesserOrEquals=function(v){return this.compare(v)<=0};NativeBigInt.prototype.leq=NativeBigInt.prototype.lesserOrEquals=SmallInteger.prototype.leq=SmallInteger.prototype.lesserOrEquals=BigInteger.prototype.leq=BigInteger.prototype.lesserOrEquals;BigInteger.prototype.isEven=function(){return(this.value[0]&1)===0};SmallInteger.prototype.isEven=function(){return(this.value&1)===0};NativeBigInt.prototype.isEven=function(){return(this.value&BigInt(1))===BigInt(0)};BigInteger.prototype.isOdd=function(){return(this.value[0]&1)===1};SmallInteger.prototype.isOdd=function(){return(this.value&1)===1};NativeBigInt.prototype.isOdd=function(){return(this.value&BigInt(1))===BigInt(1)};BigInteger.prototype.isPositive=function(){return!this.sign};SmallInteger.prototype.isPositive=function(){return this.value>0};NativeBigInt.prototype.isPositive=SmallInteger.prototype.isPositive;BigInteger.prototype.isNegative=function(){return this.sign};SmallInteger.prototype.isNegative=function(){return this.value<0};NativeBigInt.prototype.isNegative=SmallInteger.prototype.isNegative;BigInteger.prototype.isUnit=function(){return false};SmallInteger.prototype.isUnit=function(){return Math.abs(this.value)===1};NativeBigInt.prototype.isUnit=function(){return this.abs().value===BigInt(1)};BigInteger.prototype.isZero=function(){return false};SmallInteger.prototype.isZero=function(){return this.value===0};NativeBigInt.prototype.isZero=function(){return this.value===BigInt(0)};BigInteger.prototype.isDivisibleBy=function(v){var n=parseValue(v);if(n.isZero())return false;if(n.isUnit())return true;if(n.compareAbs(2)===0)return this.isEven();return this.mod(n).isZero()};NativeBigInt.prototype.isDivisibleBy=SmallInteger.prototype.isDivisibleBy=BigInteger.prototype.isDivisibleBy;function isBasicPrime(v){var n=v.abs();if(n.isUnit())return false;if(n.equals(2)||n.equals(3)||n.equals(5))return true;if(n.isEven()||n.isDivisibleBy(3)||n.isDivisibleBy(5))return false;if(n.lesser(49))return true}function millerRabinTest(n,a){var nPrev=n.prev(),b=nPrev,r=0,d,t,i,x;while(b.isEven())b=b.divide(2),r++;next:for(i=0;i<a.length;i++){if(n.lesser(a[i]))continue;x=bigInt(a[i]).modPow(b,n);if(x.isUnit()||x.equals(nPrev))continue;for(d=r-1;d!=0;d--){x=x.square().mod(n);if(x.isUnit())return false;if(x.equals(nPrev))continue next}return false}return true}BigInteger.prototype.isPrime=function(strict){var isPrime=isBasicPrime(this);if(isPrime!==undefined)return isPrime;var n=this.abs();var bits=n.bitLength();if(bits<=64)return millerRabinTest(n,[2,3,5,7,11,13,17,19,23,29,31,37]);var logN=Math.log(2)*bits.toJSNumber();var t=Math.ceil(strict===true?2*Math.pow(logN,2):logN);for(var a=[],i=0;i<t;i++){a.push(bigInt(i+2))}return millerRabinTest(n,a)};NativeBigInt.prototype.isPrime=SmallInteger.prototype.isPrime=BigInteger.prototype.isPrime;BigInteger.prototype.isProbablePrime=function(iterations){var isPrime=isBasicPrime(this);if(isPrime!==undefined)return isPrime;var n=this.abs();var t=iterations===undefined?5:iterations;for(var a=[],i=0;i<t;i++){a.push(bigInt.randBetween(2,n.minus(2)))}return millerRabinTest(n,a)};NativeBigInt.prototype.isProbablePrime=SmallInteger.prototype.isProbablePrime=BigInteger.prototype.isProbablePrime;BigInteger.prototype.modInv=function(n){var t=bigInt.zero,newT=bigInt.one,r=parseValue(n),newR=this.abs(),q,lastT,lastR;while(!newR.isZero()){q=r.divide(newR);lastT=t;lastR=r;t=newT;r=newR;newT=lastT.subtract(q.multiply(newT));newR=lastR.subtract(q.multiply(newR))}if(!r.isUnit())throw new Error(this.toString()+\" and \"+n.toString()+\" are not co-prime\");if(t.compare(0)===-1){t=t.add(n)}if(this.isNegative()){return t.negate()}return t};NativeBigInt.prototype.modInv=SmallInteger.prototype.modInv=BigInteger.prototype.modInv;BigInteger.prototype.next=function(){var value=this.value;if(this.sign){return subtractSmall(value,1,this.sign)}return new BigInteger(addSmall(value,1),this.sign)};SmallInteger.prototype.next=function(){var value=this.value;if(value+1<MAX_INT)return new SmallInteger(value+1);return new BigInteger(MAX_INT_ARR,false)};NativeBigInt.prototype.next=function(){return new NativeBigInt(this.value+BigInt(1))};BigInteger.prototype.prev=function(){var value=this.value;if(this.sign){return new BigInteger(addSmall(value,1),true)}return subtractSmall(value,1,this.sign)};SmallInteger.prototype.prev=function(){var value=this.value;if(value-1>-MAX_INT)return new SmallInteger(value-1);return new BigInteger(MAX_INT_ARR,true)};NativeBigInt.prototype.prev=function(){return new NativeBigInt(this.value-BigInt(1))};var powersOfTwo=[1];while(2*powersOfTwo[powersOfTwo.length-1]<=BASE)powersOfTwo.push(2*powersOfTwo[powersOfTwo.length-1]);var powers2Length=powersOfTwo.length,highestPower2=powersOfTwo[powers2Length-1];function shift_isSmall(n){return Math.abs(n)<=BASE}BigInteger.prototype.shiftLeft=function(v){var n=parseValue(v).toJSNumber();if(!shift_isSmall(n)){throw new Error(String(n)+\" is too large for shifting.\")}if(n<0)return this.shiftRight(-n);var result=this;if(result.isZero())return result;while(n>=powers2Length){result=result.multiply(highestPower2);n-=powers2Length-1}return result.multiply(powersOfTwo[n])};NativeBigInt.prototype.shiftLeft=SmallInteger.prototype.shiftLeft=BigInteger.prototype.shiftLeft;BigInteger.prototype.shiftRight=function(v){var remQuo;var n=parseValue(v).toJSNumber();if(!shift_isSmall(n)){throw new Error(String(n)+\" is too large for shifting.\")}if(n<0)return this.shiftLeft(-n);var result=this;while(n>=powers2Length){if(result.isZero()||result.isNegative()&&result.isUnit())return result;remQuo=divModAny(result,highestPower2);result=remQuo[1].isNegative()?remQuo[0].prev():remQuo[0];n-=powers2Length-1}remQuo=divModAny(result,powersOfTwo[n]);return remQuo[1].isNegative()?remQuo[0].prev():remQuo[0]};NativeBigInt.prototype.shiftRight=SmallInteger.prototype.shiftRight=BigInteger.prototype.shiftRight;function bitwise(x,y,fn){y=parseValue(y);var xSign=x.isNegative(),ySign=y.isNegative();var xRem=xSign?x.not():x,yRem=ySign?y.not():y;var xDigit=0,yDigit=0;var xDivMod=null,yDivMod=null;var result=[];while(!xRem.isZero()||!yRem.isZero()){xDivMod=divModAny(xRem,highestPower2);xDigit=xDivMod[1].toJSNumber();if(xSign){xDigit=highestPower2-1-xDigit}yDivMod=divModAny(yRem,highestPower2);yDigit=yDivMod[1].toJSNumber();if(ySign){yDigit=highestPower2-1-yDigit}xRem=xDivMod[0];yRem=yDivMod[0];result.push(fn(xDigit,yDigit))}var sum=fn(xSign?1:0,ySign?1:0)!==0?bigInt(-1):bigInt(0);for(var i=result.length-1;i>=0;i-=1){sum=sum.multiply(highestPower2).add(bigInt(result[i]))}return sum}BigInteger.prototype.not=function(){return this.negate().prev()};NativeBigInt.prototype.not=SmallInteger.prototype.not=BigInteger.prototype.not;BigInteger.prototype.and=function(n){return bitwise(this,n,function(a,b){return a&b})};NativeBigInt.prototype.and=SmallInteger.prototype.and=BigInteger.prototype.and;BigInteger.prototype.or=function(n){return bitwise(this,n,function(a,b){return a|b})};NativeBigInt.prototype.or=SmallInteger.prototype.or=BigInteger.prototype.or;BigInteger.prototype.xor=function(n){return bitwise(this,n,function(a,b){return a^b})};NativeBigInt.prototype.xor=SmallInteger.prototype.xor=BigInteger.prototype.xor;var LOBMASK_I=1<<30,LOBMASK_BI=(BASE&-BASE)*(BASE&-BASE)|LOBMASK_I;function roughLOB(n){var v=n.value,x=typeof v===\"number\"?v|LOBMASK_I:typeof v===\"bigint\"?v|BigInt(LOBMASK_I):v[0]+v[1]*BASE|LOBMASK_BI;return x&-x}function integerLogarithm(value,base){if(base.compareTo(value)<=0){var tmp=integerLogarithm(value,base.square(base));var p=tmp.p;var e=tmp.e;var t=p.multiply(base);return t.compareTo(value)<=0?{p:t,e:e*2+1}:{p:p,e:e*2}}return{p:bigInt(1),e:0}}BigInteger.prototype.bitLength=function(){var n=this;if(n.compareTo(bigInt(0))<0){n=n.negate().subtract(bigInt(1))}if(n.compareTo(bigInt(0))===0){return bigInt(0)}return bigInt(integerLogarithm(n,bigInt(2)).e).add(bigInt(1))};NativeBigInt.prototype.bitLength=SmallInteger.prototype.bitLength=BigInteger.prototype.bitLength;function max(a,b){a=parseValue(a);b=parseValue(b);return a.greater(b)?a:b}function min(a,b){a=parseValue(a);b=parseValue(b);return a.lesser(b)?a:b}function gcd(a,b){a=parseValue(a).abs();b=parseValue(b).abs();if(a.equals(b))return a;if(a.isZero())return b;if(b.isZero())return a;var c=Integer[1],d,t;while(a.isEven()&&b.isEven()){d=min(roughLOB(a),roughLOB(b));a=a.divide(d);b=b.divide(d);c=c.multiply(d)}while(a.isEven()){a=a.divide(roughLOB(a))}do{while(b.isEven()){b=b.divide(roughLOB(b))}if(a.greater(b)){t=b;b=a;a=t}b=b.subtract(a)}while(!b.isZero());return c.isUnit()?a:a.multiply(c)}function lcm(a,b){a=parseValue(a).abs();b=parseValue(b).abs();return a.divide(gcd(a,b)).multiply(b)}function randBetween(a,b){a=parseValue(a);b=parseValue(b);var low=min(a,b),high=max(a,b);var range=high.subtract(low).add(1);if(range.isSmall)return low.add(Math.floor(Math.random()*range));var digits=toBase(range,BASE).value;var result=[],restricted=true;for(var i=0;i<digits.length;i++){var top=restricted?digits[i]:BASE;var digit=truncate(Math.random()*top);result.push(digit);if(digit<top)restricted=false}return low.add(Integer.fromArray(result,BASE,false))}var parseBase=function(text,base,alphabet,caseSensitive){alphabet=alphabet||DEFAULT_ALPHABET;text=String(text);if(!caseSensitive){text=text.toLowerCase();alphabet=alphabet.toLowerCase()}var length=text.length;var i;var absBase=Math.abs(base);var alphabetValues={};for(i=0;i<alphabet.length;i++){alphabetValues[alphabet[i]]=i}for(i=0;i<length;i++){var c=text[i];if(c===\"-\")continue;if(c in alphabetValues){if(alphabetValues[c]>=absBase){if(c===\"1\"&&absBase===1)continue;throw new Error(c+\" is not a valid digit in base \"+base+\".\")}}}base=parseValue(base);var digits=[];var isNegative=text[0]===\"-\";for(i=isNegative?1:0;i<text.length;i++){var c=text[i];if(c in alphabetValues)digits.push(parseValue(alphabetValues[c]));else if(c===\"<\"){var start=i;do{i++}while(text[i]!==\">\"&&i<text.length);digits.push(parseValue(text.slice(start+1,i)))}else throw new Error(c+\" is not a valid character\")}return parseBaseFromArray(digits,base,isNegative)};function parseBaseFromArray(digits,base,isNegative){var val=Integer[0],pow=Integer[1],i;for(i=digits.length-1;i>=0;i--){val=val.add(digits[i].times(pow));pow=pow.times(base)}return isNegative?val.negate():val}function stringify(digit,alphabet){alphabet=alphabet||DEFAULT_ALPHABET;if(digit<alphabet.length){return alphabet[digit]}return\"<\"+digit+\">\"}function toBase(n,base){base=bigInt(base);if(base.isZero()){if(n.isZero())return{value:[0],isNegative:false};throw new Error(\"Cannot convert nonzero numbers to base 0.\")}if(base.equals(-1)){if(n.isZero())return{value:[0],isNegative:false};if(n.isNegative())return{value:[].concat.apply([],Array.apply(null,Array(-n.toJSNumber())).map(Array.prototype.valueOf,[1,0])),isNegative:false};var arr=Array.apply(null,Array(n.toJSNumber()-1)).map(Array.prototype.valueOf,[0,1]);arr.unshift([1]);return{value:[].concat.apply([],arr),isNegative:false}}var neg=false;if(n.isNegative()&&base.isPositive()){neg=true;n=n.abs()}if(base.isUnit()){if(n.isZero())return{value:[0],isNegative:false};return{value:Array.apply(null,Array(n.toJSNumber())).map(Number.prototype.valueOf,1),isNegative:neg}}var out=[];var left=n,divmod;while(left.isNegative()||left.compareAbs(base)>=0){divmod=left.divmod(base);left=divmod.quotient;var digit=divmod.remainder;if(digit.isNegative()){digit=base.minus(digit).abs();left=left.next()}out.push(digit.toJSNumber())}out.push(left.toJSNumber());return{value:out.reverse(),isNegative:neg}}function toBaseString(n,base,alphabet){var arr=toBase(n,base);return(arr.isNegative?\"-\":\"\")+arr.value.map(function(x){return stringify(x,alphabet)}).join(\"\")}BigInteger.prototype.toArray=function(radix){return toBase(this,radix)};SmallInteger.prototype.toArray=function(radix){return toBase(this,radix)};NativeBigInt.prototype.toArray=function(radix){return toBase(this,radix)};BigInteger.prototype.toString=function(radix,alphabet){if(radix===undefined)radix=10;if(radix!==10)return toBaseString(this,radix,alphabet);var v=this.value,l=v.length,str=String(v[--l]),zeros=\"0000000\",digit;while(--l>=0){digit=String(v[l]);str+=zeros.slice(digit.length)+digit}var sign=this.sign?\"-\":\"\";return sign+str};SmallInteger.prototype.toString=function(radix,alphabet){if(radix===undefined)radix=10;if(radix!=10)return toBaseString(this,radix,alphabet);return String(this.value)};NativeBigInt.prototype.toString=SmallInteger.prototype.toString;NativeBigInt.prototype.toJSON=BigInteger.prototype.toJSON=SmallInteger.prototype.toJSON=function(){return this.toString()};BigInteger.prototype.valueOf=function(){return parseInt(this.toString(),10)};BigInteger.prototype.toJSNumber=BigInteger.prototype.valueOf;SmallInteger.prototype.valueOf=function(){return this.value};SmallInteger.prototype.toJSNumber=SmallInteger.prototype.valueOf;NativeBigInt.prototype.valueOf=NativeBigInt.prototype.toJSNumber=function(){return parseInt(this.toString(),10)};function parseStringValue(v){if(isPrecise(+v)){var x=+v;if(x===truncate(x))return supportsNativeBigInt?new NativeBigInt(BigInt(x)):new SmallInteger(x);throw new Error(\"Invalid integer: \"+v)}var sign=v[0]===\"-\";if(sign)v=v.slice(1);var split=v.split(/e/i);if(split.length>2)throw new Error(\"Invalid integer: \"+split.join(\"e\"));if(split.length===2){var exp=split[1];if(exp[0]===\"+\")exp=exp.slice(1);exp=+exp;if(exp!==truncate(exp)||!isPrecise(exp))throw new Error(\"Invalid integer: \"+exp+\" is not a valid exponent.\");var text=split[0];var decimalPlace=text.indexOf(\".\");if(decimalPlace>=0){exp-=text.length-decimalPlace-1;text=text.slice(0,decimalPlace)+text.slice(decimalPlace+1)}if(exp<0)throw new Error(\"Cannot include negative exponent part for integers\");text+=new Array(exp+1).join(\"0\");v=text}var isValid=/^([0-9][0-9]*)$/.test(v);if(!isValid)throw new Error(\"Invalid integer: \"+v);if(supportsNativeBigInt){return new NativeBigInt(BigInt(sign?\"-\"+v:v))}var r=[],max=v.length,l=LOG_BASE,min=max-l;while(max>0){r.push(+v.slice(min,max));min-=l;if(min<0)min=0;max-=l}trim(r);return new BigInteger(r,sign)}function parseNumberValue(v){if(supportsNativeBigInt){return new NativeBigInt(BigInt(v))}if(isPrecise(v)){if(v!==truncate(v))throw new Error(v+\" is not an integer.\");return new SmallInteger(v)}return parseStringValue(v.toString())}function parseValue(v){if(typeof v===\"number\"){return parseNumberValue(v)}if(typeof v===\"string\"){return parseStringValue(v)}if(typeof v===\"bigint\"){return new NativeBigInt(v)}return v}for(var i=0;i<1e3;i++){Integer[i]=parseValue(i);if(i>0)Integer[-i]=parseValue(-i)}Integer.one=Integer[1];Integer.zero=Integer[0];Integer.minusOne=Integer[-1];Integer.max=max;Integer.min=min;Integer.gcd=gcd;Integer.lcm=lcm;Integer.isInstance=function(x){return x instanceof BigInteger||x instanceof SmallInteger||x instanceof NativeBigInt};Integer.randBetween=randBetween;Integer.fromArray=function(digits,base,isNegative){return parseBaseFromArray(digits.map(parseValue),parseValue(base||10),isNegative)};return Integer}();if(typeof module!==\"undefined\"&&module.hasOwnProperty(\"exports\")){module.exports=bigInt}if(typeof define===\"function\"&&define.amd){define(\"big-integer\",[],function(){return bigInt})}","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * @class\n * @ignore\n */\nclass DataChunk {\n //Represents a data structure that keep all the necessary info about a single init/media segment\n constructor() {\n this.streamId = null;\n this.mediaInfo = null;\n this.segmentType = null;\n this.quality = NaN;\n this.index = NaN;\n this.bytes = null;\n this.start = NaN;\n this.end = NaN;\n this.duration = NaN;\n this.representationId = null;\n this.endFragment = null;\n }\n}\n\nexport default DataChunk;"],"sourceRoot":""}