403Webshell
Server IP : 104.21.80.248  /  Your IP : 172.71.28.155
Web Server : Apache/2.4.25 (Win32) OpenSSL/1.0.2j PHP/5.6.30
System : Windows NT WIN-ECQAAA40806 6.2 build 9200 (Windows Server 2012 Standard Edition) i586
User : SYSTEM ( 0)
PHP Version : 5.6.30
Disable Function : NONE
MySQL : ON  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /Inetpub/www/myschool/triamudom/tuprblearn/lib/amd/build/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /Inetpub/www/myschool/triamudom/tuprblearn/lib/amd/build/adapter.min.js.map
{"version":3,"sources":["../src/adapter.js"],"names":["define","e","t","n","r","s","o","u","a","require","i","f","Error","code","l","exports","call","length","module","SDPUtils","fixStatsType","stat","inboundrtp","outboundrtp","candidatepair","localcandidate","remotecandidate","type","writeMediaSection","transceiver","caps","stream","dtlsRole","sdp","writeRtpDescription","kind","writeIceParameters","iceGatherer","getLocalParameters","writeDtlsParameters","dtlsTransport","mid","rtpSender","rtpReceiver","trackId","_initialTrackId","track","id","msid","sendEncodingParameters","ssrc","rtx","localCName","filterIceServers","iceServers","edgeVersion","hasTurn","JSON","parse","stringify","filter","server","urls","url","console","warn","isString","validTurn","indexOf","getCommonCapabilities","localCapabilities","remoteCapabilities","commonCapabilities","codecs","headerExtensions","fecMechanisms","findCodecByPayloadType","pt","parseInt","payloadType","preferredPayloadType","rtxCapabilityMatches","lRtx","rRtx","lCodecs","rCodecs","lCodec","parameters","apt","rCodec","name","toLowerCase","forEach","clockRate","numChannels","Math","min","push","rtcpFeedback","fb","j","parameter","lHeaderExtension","rHeaderExtension","uri","isActionAllowedInSignalingState","action","signalingState","offer","setLocalDescription","setRemoteDescription","answer","maybeAddCandidate","iceTransport","candidate","alreadyAdded","getRemoteCandidates","find","remoteCandidate","foundation","ip","port","priority","protocol","addRemoteCandidate","makeError","description","NotSupportedError","InvalidStateError","InvalidAccessError","TypeError","OperationError","window","addTrackToStreamAndFireEvent","addTrack","dispatchEvent","MediaStreamTrackEvent","removeTrackFromStreamAndFireEvent","removeTrack","fireAddTrack","pc","receiver","streams","trackEvent","Event","setTimeout","_dispatchEvent","RTCPeerConnection","config","_eventTarget","document","createDocumentFragment","method","bind","canTrickleIceCandidates","needNegotiation","localStreams","remoteStreams","_localDescription","_remoteDescription","iceConnectionState","connectionState","iceGatheringState","usingBundle","bundlePolicy","rtcpMuxPolicy","iceTransportPolicy","_iceGatherers","iceCandidatePoolSize","RTCIceGatherer","gatherPolicy","_config","transceivers","_sdpSessionId","generateSessionId","_sdpSessionVersion","_dtlsRole","_isClosed","Object","defineProperty","prototype","configurable","get","onicecandidate","onaddstream","ontrack","onremovestream","onsignalingstatechange","oniceconnectionstatechange","onconnectionstatechange","onicegatheringstatechange","onnegotiationneeded","ondatachannel","event","_emitGatheringStateChange","getConfiguration","getLocalStreams","getRemoteStreams","_createTransceiver","doNotAdd","hasBundleTransport","recvEncodingParameters","associatedRemoteMediaStreams","wantReceive","transports","_createIceAndDtlsTransports","alreadyExists","_maybeFireNegotiationNeeded","RTCRtpSender","addStream","getTracks","clonedStream","clone","idx","clonedTrack","addEventListener","enabled","sender","stop","map","splice","removeStream","getSenders","getReceivers","_createIceGatherer","sdpMLineIndex","shift","value","writable","bufferedCandidateEvents","bufferCandidates","end","keys","state","_gather","onlocalcandidate","removeEventListener","evt","sdpMid","cand","component","ufrag","usernameFragment","serializedCandidate","writeCandidate","assign","parseCandidate","toJSON","sections","getMediaSections","getDescription","join","complete","every","RTCIceTransport","onicestatechange","_updateIceConnectionState","_updateConnectionState","RTCDtlsTransport","ondtlsstatechange","onerror","_disposeIceAndDtlsTransports","_transceive","send","recv","params","encodings","rtcp","cname","compound","rtcpParameters","p","receive","Promise","reject","sessionpart","splitSections","mediaSection","parseRtpParameters","isIceLite","matchPrefix","rejected","isRejected","remoteIceParameters","getIceParameters","remoteDtlsParameters","getDtlsParameters","role","start","_updateSignalingState","resolve","receiverList","iceOptions","substr","split","lines","splitLines","getKind","direction","getDirection","remoteMsid","parseMsid","getMid","generateIdentifier","parseRtpEncodingParameters","parseRtcpParameters","isComplete","cands","setTransport","setRemoteCandidates","RTCRtpReceiver","getCapabilities","codec","isNewTrack","MediaStream","default","nativeTrack","hasRtx","c","sid","item","close","newState","states","closed","checking","connected","completed","disconnected","failed","new","connecting","createOffer","numAudioTracks","numVideoTracks","offerOptions","arguments","mandatory","optional","offerToReceiveAudio","offerToReceiveVideo","writeSessionBoilerplate","remoteCodec","hdrExt","remoteExtensions","rHdrExt","getLocalCandidates","desc","RTCSessionDescription","createAnswer","mediaSectionsInOffer","localTrack","getAudioTracks","getVideoTracks","reducedSize","addIceCandidate","candidateString","trim","getStats","selector","MediaStreamTrack","senderOrReceiver","promises","all","then","allStats","results","Map","stats","set","ortcObjectName","obj","nativeGetstats","apply","nativeStats","mapStats","methods","nativeMethod","args","error","random","toString","blob","line","parts","part","index","prefix","substring","address","relatedAddress","relatedPort","tcpType","toUpperCase","parseIceOptions","parseRtpMap","parsed","channels","writeRtpMap","parseExtmap","writeExtmap","headerExtension","preferredId","parseFmtp","kv","writeFmtp","param","parseRtcpFb","writeRtcpFb","parseSsrcMedia","sp","colon","attribute","parseSsrcGroup","semantics","ssrcs","parseFingerprint","algorithm","fingerprints","setupType","fp","concat","iceParameters","password","mline","rtpmapline","fmtps","maxptime","extension","encodingParameters","hasRed","hasUlpfec","primarySsrc","secondarySsrc","flows","encParam","codecPayloadType","fec","mechanism","bandwidth","maxBitrate","remoteSsrc","rsize","mux","spec","planB","msidParts","sessId","sessVer","sessUser","sessionId","version","parseMLine","fmt","slice","parseOLine","username","sessionVersion","netType","addressType","isValidSDP","charAt","global","adapterFactory","self","utils","dependencies","opts","options","shimChrome","shimFirefox","shimEdge","shimSafari","key","hasOwnProperty","logging","log","browserDetails","detectBrowser","chromeShim","edgeShim","firefoxShim","safariShim","commonShim","adapter","extractVersion","disableLog","disableWarnings","browser","shimPeerConnection","browserShim","shimCreateObjectURL","shimGetUserMedia","shimMediaStream","shimSourceObject","shimOnTrack","shimAddTrackRemoveTrack","shimGetSendersWithDtmf","shimSenderReceiverGetStats","fixNegotiationNeeded","shimRTCIceCandidate","shimMaxMessageSize","shimSendThrowTypeError","shimRemoveStream","shimSenderGetStats","shimReceiverGetStats","shimRTCDataChannel","shimReplaceTrack","shimRTCIceServerUrls","shimCreateOfferLegacy","shimCallbacksAPI","shimLocalStreamsAPI","shimRemoteStreamsAPI","shimTrackEventTransceiver","walkStats","base","resultSet","has","endsWith","filterStats","result","outbound","streamStatsType","filteredResult","trackStats","trackIdentifier","trackStat","webkitMediaStream","_ontrack","enumerable","origSetRemoteDescription","_ontrackpoly","te","wrapPeerConnectionEvent","shimSenderWithDtmf","dtmf","_dtmf","createDTMFSender","_pc","_senders","origAddTrack","origRemoveTrack","origAddStream","origRemoveStream","origGetSenders","senders","origGetReceivers","receivers","srcElement","origGetStats","err","DOMException","URL","HTMLMediaElement","_srcObject","src","revokeObjectURL","createObjectURL","shimAddTrackRemoveTrackWithNative","_shimmedLocalStreams","streamId","existingSenders","newSenders","newSender","origGetLocalStreams","nativeStreams","_reverseStreams","_streams","newStream","oldStream","replaceInternalStreamId","internalId","externalStream","internalStream","replace","RegExp","replaceExternalStreamId","isLegacyCall","origSetLocalDescription","origLocalDescription","getOwnPropertyDescriptor","isLocal","streamid","hasTrack","webkitRTCPeerConnection","pcConfig","pcConstraints","iceTransports","generateCertificate","successCallback","errorCallback","fixChromeStats_","response","standardReport","reports","report","standardStats","timestamp","names","makeMapStats","successCallbackWrapper_","promise","RTCIceCandidate","nativeAddIceCandidate","target","shimGetDisplayMedia","getSourceId","navigator","getDisplayMedia","constraints","sourceId","video","chromeMediaSource","chromeMediaSourceId","maxFrameRate","frameRate","mediaDevices","getUserMedia","constraintsToChrome_","cc","ideal","exact","max","oldname_","oc","mix","advanced","shimConstraints_","func","audio","remap","b","face","facingMode","getSupportedFacingModeLies","getSupportedConstraints","matches","enumerateDevices","devices","d","dev","some","match","label","deviceId","shimError_","PermissionDeniedError","PermissionDismissedError","DevicesNotFoundError","ConstraintNotSatisfiedError","TrackStartError","MediaDeviceFailedDueToShutdown","MediaDeviceKillSwitchOn","TabCaptureError","ScreenCaptureError","DeviceCaptureError","message","constraint","constraintName","getUserMedia_","onSuccess","onError","webkitGetUserMedia","getUserMediaPromise_","kinds","getSources","device","groupId","echoCancellation","height","width","origGetUserMedia","cs","NativeRTCIceCandidate","nativeCandidate","parsedCandidate","augmentedCandidate","nativeCreateObjectURL","nativeRevokeObjectURL","newId","deprecated","delete","dsc","srcObject","nativeSetAttribute","setAttribute","RTCSctpTransport","_sctp","sctpInDescription","mLine","getRemoteFirefoxVersion","getCanSendMaxMessageSize","remoteIsFirefox","canSendMaxMessageSize","getMaxMessageSize","maxMessageSize","isFirefox","canSendMMS","remoteMMS","Number","POSITIVE_INFINITY","sctp","wrapDcSend","dc","origDataChannelSend","data","size","byteLength","readyState","origCreateDataChannel","createDataChannel","dataChannel","channel","shimRTCPeerConnection","origMSTEnabled","ev","RTCDtmfSender","RTCDTMFSender","RTCPeerConnectionShim","replaceTrack","setTrack","catch","RTCTrackEvent","mozSrcObject","mozRTCPeerConnection","newIceServers","newServer","credential","mozRTCSessionDescription","mozRTCIceCandidate","modernStatsTypes","nativeGetStats","onSucc","onErr","DataChannel","RTCDataChannel","preferredMediaSource","mediaSource","InternalError","SecurityError","constraintsToFF37_","mozGetUserMedia","orgEnumerateDevices","nativeGetUserMedia","getSettings","nativeGetSettings","applyConstraints","nativeApplyConstraints","_localStreams","getStreamById","_remoteStreams","_addTrack","tracks","_onaddstream","_onaddstreampoly","failureCallback","withCallback","cb","errcb","OrigPeerConnection","RTCTransceiver","origCreateOffer","audioTransceiver","getTransceivers","setDirection","addTransceiver","videoTransceiver","logDisabled_","deprecationWarnings_","uastring","expr","pos","eventNameToWrap","wrapper","proto","nativeAddEventListener","nativeEventName","wrappedCallback","modifiedEvent","_eventMap","nativeRemoveEventListener","unwrappedCb","bool","oldMethod","newMethod","userAgent"],"mappings":"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","sourcesContent":["/**\n * Description of import/upgrade into Moodle:\n *\n * 1. Visit https://github.com/webrtc/adapter/releases.\n * 2. Check if the version has been updated from what is listed in lib/thirdpartylibs.xml in the Moodle wwwroot.\n * 3. If it has -\n *    1. Download the source code.\n *    2. Copy the content of the file release/adapter.js from the archive (ignore the first line).\n *    3. Replace the content below \"return (function e(t,n,r) ..\" in this file with the content you copied.\n *    4. Ensure to update lib/thirdpartylibs.xml with any changes.\n */\n\n// ESLint directives.\n/* eslint-disable */\n\n// JSHint directives.\n/* jshint ignore:start */\n\ndefine([], function() {\nreturn (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\n        /*\n         *  Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.\n         *\n         *  Use of this source code is governed by a BSD-style license\n         *  that can be found in the LICENSE file in the root of the source\n         *  tree.\n         */\n        /* eslint-env node */\n        'use strict';\n\n        var SDPUtils = require('sdp');\n\n        function fixStatsType(stat) {\n            return {\n                inboundrtp: 'inbound-rtp',\n                outboundrtp: 'outbound-rtp',\n                candidatepair: 'candidate-pair',\n                localcandidate: 'local-candidate',\n                remotecandidate: 'remote-candidate'\n            }[stat.type] || stat.type;\n        }\n\n        function writeMediaSection(transceiver, caps, type, stream, dtlsRole) {\n            var sdp = SDPUtils.writeRtpDescription(transceiver.kind, caps);\n\n            // Map ICE parameters (ufrag, pwd) to SDP.\n            sdp += SDPUtils.writeIceParameters(\n                transceiver.iceGatherer.getLocalParameters());\n\n            // Map DTLS parameters to SDP.\n            sdp += SDPUtils.writeDtlsParameters(\n                transceiver.dtlsTransport.getLocalParameters(),\n                type === 'offer' ? 'actpass' : dtlsRole || 'active');\n\n            sdp += 'a=mid:' + transceiver.mid + '\\r\\n';\n\n            if (transceiver.rtpSender && transceiver.rtpReceiver) {\n                sdp += 'a=sendrecv\\r\\n';\n            } else if (transceiver.rtpSender) {\n                sdp += 'a=sendonly\\r\\n';\n            } else if (transceiver.rtpReceiver) {\n                sdp += 'a=recvonly\\r\\n';\n            } else {\n                sdp += 'a=inactive\\r\\n';\n            }\n\n            if (transceiver.rtpSender) {\n                var trackId = transceiver.rtpSender._initialTrackId ||\n                    transceiver.rtpSender.track.id;\n                transceiver.rtpSender._initialTrackId = trackId;\n                // spec.\n                var msid = 'msid:' + (stream ? stream.id : '-') + ' ' +\n                    trackId + '\\r\\n';\n                sdp += 'a=' + msid;\n                // for Chrome. Legacy should no longer be required.\n                sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc +\n                    ' ' + msid;\n\n                // RTX\n                if (transceiver.sendEncodingParameters[0].rtx) {\n                    sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].rtx.ssrc +\n                        ' ' + msid;\n                    sdp += 'a=ssrc-group:FID ' +\n                        transceiver.sendEncodingParameters[0].ssrc + ' ' +\n                        transceiver.sendEncodingParameters[0].rtx.ssrc +\n                        '\\r\\n';\n                }\n            }\n            // FIXME: this should be written by writeRtpDescription.\n            sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc +\n                ' cname:' + SDPUtils.localCName + '\\r\\n';\n            if (transceiver.rtpSender && transceiver.sendEncodingParameters[0].rtx) {\n                sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].rtx.ssrc +\n                    ' cname:' + SDPUtils.localCName + '\\r\\n';\n            }\n            return sdp;\n        }\n\n        // Edge does not like\n        // 1) stun: filtered after 14393 unless ?transport=udp is present\n        // 2) turn: that does not have all of turn:host:port?transport=udp\n        // 3) turn: with ipv6 addresses\n        // 4) turn: occurring muliple times\n        function filterIceServers(iceServers, edgeVersion) {\n            var hasTurn = false;\n            iceServers = JSON.parse(JSON.stringify(iceServers));\n            return iceServers.filter(function(server) {\n                if (server && (server.urls || server.url)) {\n                    var urls = server.urls || server.url;\n                    if (server.url && !server.urls) {\n                        console.warn('RTCIceServer.url is deprecated! Use urls instead.');\n                    }\n                    var isString = typeof urls === 'string';\n                    if (isString) {\n                        urls = [urls];\n                    }\n                    urls = urls.filter(function(url) {\n                        var validTurn = url.indexOf('turn:') === 0 &&\n                            url.indexOf('transport=udp') !== -1 &&\n                            url.indexOf('turn:[') === -1 &&\n                            !hasTurn;\n\n                        if (validTurn) {\n                            hasTurn = true;\n                            return true;\n                        }\n                        return url.indexOf('stun:') === 0 && edgeVersion >= 14393 &&\n                            url.indexOf('?transport=udp') === -1;\n                    });\n\n                    delete server.url;\n                    server.urls = isString ? urls[0] : urls;\n                    return !!urls.length;\n                }\n            });\n        }\n\n        // Determines the intersection of local and remote capabilities.\n        function getCommonCapabilities(localCapabilities, remoteCapabilities) {\n            var commonCapabilities = {\n                codecs: [],\n                headerExtensions: [],\n                fecMechanisms: []\n            };\n\n            var findCodecByPayloadType = function(pt, codecs) {\n                pt = parseInt(pt, 10);\n                for (var i = 0; i < codecs.length; i++) {\n                    if (codecs[i].payloadType === pt ||\n                        codecs[i].preferredPayloadType === pt) {\n                        return codecs[i];\n                    }\n                }\n            };\n\n            var rtxCapabilityMatches = function(lRtx, rRtx, lCodecs, rCodecs) {\n                var lCodec = findCodecByPayloadType(lRtx.parameters.apt, lCodecs);\n                var rCodec = findCodecByPayloadType(rRtx.parameters.apt, rCodecs);\n                return lCodec && rCodec &&\n                    lCodec.name.toLowerCase() === rCodec.name.toLowerCase();\n            };\n\n            localCapabilities.codecs.forEach(function(lCodec) {\n                for (var i = 0; i < remoteCapabilities.codecs.length; i++) {\n                    var rCodec = remoteCapabilities.codecs[i];\n                    if (lCodec.name.toLowerCase() === rCodec.name.toLowerCase() &&\n                        lCodec.clockRate === rCodec.clockRate) {\n                        if (lCodec.name.toLowerCase() === 'rtx' &&\n                            lCodec.parameters && rCodec.parameters.apt) {\n                            // for RTX we need to find the local rtx that has a apt\n                            // which points to the same local codec as the remote one.\n                            if (!rtxCapabilityMatches(lCodec, rCodec,\n                                    localCapabilities.codecs, remoteCapabilities.codecs)) {\n                                continue;\n                            }\n                        }\n                        rCodec = JSON.parse(JSON.stringify(rCodec)); // deepcopy\n                        // number of channels is the highest common number of channels\n                        rCodec.numChannels = Math.min(lCodec.numChannels,\n                            rCodec.numChannels);\n                        // push rCodec so we reply with offerer payload type\n                        commonCapabilities.codecs.push(rCodec);\n\n                        // determine common feedback mechanisms\n                        rCodec.rtcpFeedback = rCodec.rtcpFeedback.filter(function(fb) {\n                            for (var j = 0; j < lCodec.rtcpFeedback.length; j++) {\n                                if (lCodec.rtcpFeedback[j].type === fb.type &&\n                                    lCodec.rtcpFeedback[j].parameter === fb.parameter) {\n                                    return true;\n                                }\n                            }\n                            return false;\n                        });\n                        // FIXME: also need to determine .parameters\n                        //  see https://github.com/openpeer/ortc/issues/569\n                        break;\n                    }\n                }\n            });\n\n            localCapabilities.headerExtensions.forEach(function(lHeaderExtension) {\n                for (var i = 0; i < remoteCapabilities.headerExtensions.length;\n                     i++) {\n                    var rHeaderExtension = remoteCapabilities.headerExtensions[i];\n                    if (lHeaderExtension.uri === rHeaderExtension.uri) {\n                        commonCapabilities.headerExtensions.push(rHeaderExtension);\n                        break;\n                    }\n                }\n            });\n\n            // FIXME: fecMechanisms\n            return commonCapabilities;\n        }\n\n        // is action=setLocalDescription with type allowed in signalingState\n        function isActionAllowedInSignalingState(action, type, signalingState) {\n            return {\n                offer: {\n                    setLocalDescription: ['stable', 'have-local-offer'],\n                    setRemoteDescription: ['stable', 'have-remote-offer']\n                },\n                answer: {\n                    setLocalDescription: ['have-remote-offer', 'have-local-pranswer'],\n                    setRemoteDescription: ['have-local-offer', 'have-remote-pranswer']\n                }\n            }[type][action].indexOf(signalingState) !== -1;\n        }\n\n        function maybeAddCandidate(iceTransport, candidate) {\n            // Edge's internal representation adds some fields therefore\n            // not all fieldѕ are taken into account.\n            var alreadyAdded = iceTransport.getRemoteCandidates()\n                .find(function(remoteCandidate) {\n                    return candidate.foundation === remoteCandidate.foundation &&\n                        candidate.ip === remoteCandidate.ip &&\n                        candidate.port === remoteCandidate.port &&\n                        candidate.priority === remoteCandidate.priority &&\n                        candidate.protocol === remoteCandidate.protocol &&\n                        candidate.type === remoteCandidate.type;\n                });\n            if (!alreadyAdded) {\n                iceTransport.addRemoteCandidate(candidate);\n            }\n            return !alreadyAdded;\n        }\n\n\n        function makeError(name, description) {\n            var e = new Error(description);\n            e.name = name;\n            // legacy error codes from https://heycam.github.io/webidl/#idl-DOMException-error-names\n            e.code = {\n                NotSupportedError: 9,\n                InvalidStateError: 11,\n                InvalidAccessError: 15,\n                TypeError: undefined,\n                OperationError: undefined\n            }[name];\n            return e;\n        }\n\n        module.exports = function(window, edgeVersion) {\n            // https://w3c.github.io/mediacapture-main/#mediastream\n            // Helper function to add the track to the stream and\n            // dispatch the event ourselves.\n            function addTrackToStreamAndFireEvent(track, stream) {\n                stream.addTrack(track);\n                stream.dispatchEvent(new window.MediaStreamTrackEvent('addtrack',\n                    {track: track}));\n            }\n\n            function removeTrackFromStreamAndFireEvent(track, stream) {\n                stream.removeTrack(track);\n                stream.dispatchEvent(new window.MediaStreamTrackEvent('removetrack',\n                    {track: track}));\n            }\n\n            function fireAddTrack(pc, track, receiver, streams) {\n                var trackEvent = new Event('track');\n                trackEvent.track = track;\n                trackEvent.receiver = receiver;\n                trackEvent.transceiver = {receiver: receiver};\n                trackEvent.streams = streams;\n                window.setTimeout(function() {\n                    pc._dispatchEvent('track', trackEvent);\n                });\n            }\n\n            var RTCPeerConnection = function(config) {\n                var pc = this;\n\n                var _eventTarget = document.createDocumentFragment();\n                ['addEventListener', 'removeEventListener', 'dispatchEvent']\n                    .forEach(function(method) {\n                        pc[method] = _eventTarget[method].bind(_eventTarget);\n                    });\n\n                this.canTrickleIceCandidates = null;\n\n                this.needNegotiation = false;\n\n                this.localStreams = [];\n                this.remoteStreams = [];\n\n                this._localDescription = null;\n                this._remoteDescription = null;\n\n                this.signalingState = 'stable';\n                this.iceConnectionState = 'new';\n                this.connectionState = 'new';\n                this.iceGatheringState = 'new';\n\n                config = JSON.parse(JSON.stringify(config || {}));\n\n                this.usingBundle = config.bundlePolicy === 'max-bundle';\n                if (config.rtcpMuxPolicy === 'negotiate') {\n                    throw(makeError('NotSupportedError',\n                        'rtcpMuxPolicy \\'negotiate\\' is not supported'));\n                } else if (!config.rtcpMuxPolicy) {\n                    config.rtcpMuxPolicy = 'require';\n                }\n\n                switch (config.iceTransportPolicy) {\n                    case 'all':\n                    case 'relay':\n                        break;\n                    default:\n                        config.iceTransportPolicy = 'all';\n                        break;\n                }\n\n                switch (config.bundlePolicy) {\n                    case 'balanced':\n                    case 'max-compat':\n                    case 'max-bundle':\n                        break;\n                    default:\n                        config.bundlePolicy = 'balanced';\n                        break;\n                }\n\n                config.iceServers = filterIceServers(config.iceServers || [], edgeVersion);\n\n                this._iceGatherers = [];\n                if (config.iceCandidatePoolSize) {\n                    for (var i = config.iceCandidatePoolSize; i > 0; i--) {\n                        this._iceGatherers.push(new window.RTCIceGatherer({\n                            iceServers: config.iceServers,\n                            gatherPolicy: config.iceTransportPolicy\n                        }));\n                    }\n                } else {\n                    config.iceCandidatePoolSize = 0;\n                }\n\n                this._config = config;\n\n                // per-track iceGathers, iceTransports, dtlsTransports, rtpSenders, ...\n                // everything that is needed to describe a SDP m-line.\n                this.transceivers = [];\n\n                this._sdpSessionId = SDPUtils.generateSessionId();\n                this._sdpSessionVersion = 0;\n\n                this._dtlsRole = undefined; // role for a=setup to use in answers.\n\n                this._isClosed = false;\n            };\n\n            Object.defineProperty(RTCPeerConnection.prototype, 'localDescription', {\n                configurable: true,\n                get: function() {\n                    return this._localDescription;\n                }\n            });\n            Object.defineProperty(RTCPeerConnection.prototype, 'remoteDescription', {\n                configurable: true,\n                get: function() {\n                    return this._remoteDescription;\n                }\n            });\n\n            // set up event handlers on prototype\n            RTCPeerConnection.prototype.onicecandidate = null;\n            RTCPeerConnection.prototype.onaddstream = null;\n            RTCPeerConnection.prototype.ontrack = null;\n            RTCPeerConnection.prototype.onremovestream = null;\n            RTCPeerConnection.prototype.onsignalingstatechange = null;\n            RTCPeerConnection.prototype.oniceconnectionstatechange = null;\n            RTCPeerConnection.prototype.onconnectionstatechange = null;\n            RTCPeerConnection.prototype.onicegatheringstatechange = null;\n            RTCPeerConnection.prototype.onnegotiationneeded = null;\n            RTCPeerConnection.prototype.ondatachannel = null;\n\n            RTCPeerConnection.prototype._dispatchEvent = function(name, event) {\n                if (this._isClosed) {\n                    return;\n                }\n                this.dispatchEvent(event);\n                if (typeof this['on' + name] === 'function') {\n                    this['on' + name](event);\n                }\n            };\n\n            RTCPeerConnection.prototype._emitGatheringStateChange = function() {\n                var event = new Event('icegatheringstatechange');\n                this._dispatchEvent('icegatheringstatechange', event);\n            };\n\n            RTCPeerConnection.prototype.getConfiguration = function() {\n                return this._config;\n            };\n\n            RTCPeerConnection.prototype.getLocalStreams = function() {\n                return this.localStreams;\n            };\n\n            RTCPeerConnection.prototype.getRemoteStreams = function() {\n                return this.remoteStreams;\n            };\n\n            // internal helper to create a transceiver object.\n            // (which is not yet the same as the WebRTC 1.0 transceiver)\n            RTCPeerConnection.prototype._createTransceiver = function(kind, doNotAdd) {\n                var hasBundleTransport = this.transceivers.length > 0;\n                var transceiver = {\n                    track: null,\n                    iceGatherer: null,\n                    iceTransport: null,\n                    dtlsTransport: null,\n                    localCapabilities: null,\n                    remoteCapabilities: null,\n                    rtpSender: null,\n                    rtpReceiver: null,\n                    kind: kind,\n                    mid: null,\n                    sendEncodingParameters: null,\n                    recvEncodingParameters: null,\n                    stream: null,\n                    associatedRemoteMediaStreams: [],\n                    wantReceive: true\n                };\n                if (this.usingBundle && hasBundleTransport) {\n                    transceiver.iceTransport = this.transceivers[0].iceTransport;\n                    transceiver.dtlsTransport = this.transceivers[0].dtlsTransport;\n                } else {\n                    var transports = this._createIceAndDtlsTransports();\n                    transceiver.iceTransport = transports.iceTransport;\n                    transceiver.dtlsTransport = transports.dtlsTransport;\n                }\n                if (!doNotAdd) {\n                    this.transceivers.push(transceiver);\n                }\n                return transceiver;\n            };\n\n            RTCPeerConnection.prototype.addTrack = function(track, stream) {\n                if (this._isClosed) {\n                    throw makeError('InvalidStateError',\n                        'Attempted to call addTrack on a closed peerconnection.');\n                }\n\n                var alreadyExists = this.transceivers.find(function(s) {\n                    return s.track === track;\n                });\n\n                if (alreadyExists) {\n                    throw makeError('InvalidAccessError', 'Track already exists.');\n                }\n\n                var transceiver;\n                for (var i = 0; i < this.transceivers.length; i++) {\n                    if (!this.transceivers[i].track &&\n                        this.transceivers[i].kind === track.kind) {\n                        transceiver = this.transceivers[i];\n                    }\n                }\n                if (!transceiver) {\n                    transceiver = this._createTransceiver(track.kind);\n                }\n\n                this._maybeFireNegotiationNeeded();\n\n                if (this.localStreams.indexOf(stream) === -1) {\n                    this.localStreams.push(stream);\n                }\n\n                transceiver.track = track;\n                transceiver.stream = stream;\n                transceiver.rtpSender = new window.RTCRtpSender(track,\n                    transceiver.dtlsTransport);\n                return transceiver.rtpSender;\n            };\n\n            RTCPeerConnection.prototype.addStream = function(stream) {\n                var pc = this;\n                if (edgeVersion >= 15025) {\n                    stream.getTracks().forEach(function(track) {\n                        pc.addTrack(track, stream);\n                    });\n                } else {\n                    // Clone is necessary for local demos mostly, attaching directly\n                    // to two different senders does not work (build 10547).\n                    // Fixed in 15025 (or earlier)\n                    var clonedStream = stream.clone();\n                    stream.getTracks().forEach(function(track, idx) {\n                        var clonedTrack = clonedStream.getTracks()[idx];\n                        track.addEventListener('enabled', function(event) {\n                            clonedTrack.enabled = event.enabled;\n                        });\n                    });\n                    clonedStream.getTracks().forEach(function(track) {\n                        pc.addTrack(track, clonedStream);\n                    });\n                }\n            };\n\n            RTCPeerConnection.prototype.removeTrack = function(sender) {\n                if (this._isClosed) {\n                    throw makeError('InvalidStateError',\n                        'Attempted to call removeTrack on a closed peerconnection.');\n                }\n\n                if (!(sender instanceof window.RTCRtpSender)) {\n                    throw new TypeError('Argument 1 of RTCPeerConnection.removeTrack ' +\n                        'does not implement interface RTCRtpSender.');\n                }\n\n                var transceiver = this.transceivers.find(function(t) {\n                    return t.rtpSender === sender;\n                });\n\n                if (!transceiver) {\n                    throw makeError('InvalidAccessError',\n                        'Sender was not created by this connection.');\n                }\n                var stream = transceiver.stream;\n\n                transceiver.rtpSender.stop();\n                transceiver.rtpSender = null;\n                transceiver.track = null;\n                transceiver.stream = null;\n\n                // remove the stream from the set of local streams\n                var localStreams = this.transceivers.map(function(t) {\n                    return t.stream;\n                });\n                if (localStreams.indexOf(stream) === -1 &&\n                    this.localStreams.indexOf(stream) > -1) {\n                    this.localStreams.splice(this.localStreams.indexOf(stream), 1);\n                }\n\n                this._maybeFireNegotiationNeeded();\n            };\n\n            RTCPeerConnection.prototype.removeStream = function(stream) {\n                var pc = this;\n                stream.getTracks().forEach(function(track) {\n                    var sender = pc.getSenders().find(function(s) {\n                        return s.track === track;\n                    });\n                    if (sender) {\n                        pc.removeTrack(sender);\n                    }\n                });\n            };\n\n            RTCPeerConnection.prototype.getSenders = function() {\n                return this.transceivers.filter(function(transceiver) {\n                    return !!transceiver.rtpSender;\n                })\n                    .map(function(transceiver) {\n                        return transceiver.rtpSender;\n                    });\n            };\n\n            RTCPeerConnection.prototype.getReceivers = function() {\n                return this.transceivers.filter(function(transceiver) {\n                    return !!transceiver.rtpReceiver;\n                })\n                    .map(function(transceiver) {\n                        return transceiver.rtpReceiver;\n                    });\n            };\n\n\n            RTCPeerConnection.prototype._createIceGatherer = function(sdpMLineIndex,\n                                                                      usingBundle) {\n                var pc = this;\n                if (usingBundle && sdpMLineIndex > 0) {\n                    return this.transceivers[0].iceGatherer;\n                } else if (this._iceGatherers.length) {\n                    return this._iceGatherers.shift();\n                }\n                var iceGatherer = new window.RTCIceGatherer({\n                    iceServers: this._config.iceServers,\n                    gatherPolicy: this._config.iceTransportPolicy\n                });\n                Object.defineProperty(iceGatherer, 'state',\n                    {value: 'new', writable: true}\n                );\n\n                this.transceivers[sdpMLineIndex].bufferedCandidateEvents = [];\n                this.transceivers[sdpMLineIndex].bufferCandidates = function(event) {\n                    var end = !event.candidate || Object.keys(event.candidate).length === 0;\n                    // polyfill since RTCIceGatherer.state is not implemented in\n                    // Edge 10547 yet.\n                    iceGatherer.state = end ? 'completed' : 'gathering';\n                    if (pc.transceivers[sdpMLineIndex].bufferedCandidateEvents !== null) {\n                        pc.transceivers[sdpMLineIndex].bufferedCandidateEvents.push(event);\n                    }\n                };\n                iceGatherer.addEventListener('localcandidate',\n                    this.transceivers[sdpMLineIndex].bufferCandidates);\n                return iceGatherer;\n            };\n\n            // start gathering from an RTCIceGatherer.\n            RTCPeerConnection.prototype._gather = function(mid, sdpMLineIndex) {\n                var pc = this;\n                var iceGatherer = this.transceivers[sdpMLineIndex].iceGatherer;\n                if (iceGatherer.onlocalcandidate) {\n                    return;\n                }\n                var bufferedCandidateEvents =\n                    this.transceivers[sdpMLineIndex].bufferedCandidateEvents;\n                this.transceivers[sdpMLineIndex].bufferedCandidateEvents = null;\n                iceGatherer.removeEventListener('localcandidate',\n                    this.transceivers[sdpMLineIndex].bufferCandidates);\n                iceGatherer.onlocalcandidate = function(evt) {\n                    if (pc.usingBundle && sdpMLineIndex > 0) {\n                        // if we know that we use bundle we can drop candidates with\n                        // ѕdpMLineIndex > 0. If we don't do this then our state gets\n                        // confused since we dispose the extra ice gatherer.\n                        return;\n                    }\n                    var event = new Event('icecandidate');\n                    event.candidate = {sdpMid: mid, sdpMLineIndex: sdpMLineIndex};\n\n                    var cand = evt.candidate;\n                    // Edge emits an empty object for RTCIceCandidateComplete‥\n                    var end = !cand || Object.keys(cand).length === 0;\n                    if (end) {\n                        // polyfill since RTCIceGatherer.state is not implemented in\n                        // Edge 10547 yet.\n                        if (iceGatherer.state === 'new' || iceGatherer.state === 'gathering') {\n                            iceGatherer.state = 'completed';\n                        }\n                    } else {\n                        if (iceGatherer.state === 'new') {\n                            iceGatherer.state = 'gathering';\n                        }\n                        // RTCIceCandidate doesn't have a component, needs to be added\n                        cand.component = 1;\n                        // also the usernameFragment. TODO: update SDP to take both variants.\n                        cand.ufrag = iceGatherer.getLocalParameters().usernameFragment;\n\n                        var serializedCandidate = SDPUtils.writeCandidate(cand);\n                        event.candidate = Object.assign(event.candidate,\n                            SDPUtils.parseCandidate(serializedCandidate));\n\n                        event.candidate.candidate = serializedCandidate;\n                        event.candidate.toJSON = function() {\n                            return {\n                                candidate: event.candidate.candidate,\n                                sdpMid: event.candidate.sdpMid,\n                                sdpMLineIndex: event.candidate.sdpMLineIndex,\n                                usernameFragment: event.candidate.usernameFragment\n                            };\n                        };\n                    }\n\n                    // update local description.\n                    var sections = SDPUtils.getMediaSections(pc._localDescription.sdp);\n                    if (!end) {\n                        sections[event.candidate.sdpMLineIndex] +=\n                            'a=' + event.candidate.candidate + '\\r\\n';\n                    } else {\n                        sections[event.candidate.sdpMLineIndex] +=\n                            'a=end-of-candidates\\r\\n';\n                    }\n                    pc._localDescription.sdp =\n                        SDPUtils.getDescription(pc._localDescription.sdp) +\n                        sections.join('');\n                    var complete = pc.transceivers.every(function(transceiver) {\n                        return transceiver.iceGatherer &&\n                            transceiver.iceGatherer.state === 'completed';\n                    });\n\n                    if (pc.iceGatheringState !== 'gathering') {\n                        pc.iceGatheringState = 'gathering';\n                        pc._emitGatheringStateChange();\n                    }\n\n                    // Emit candidate. Also emit null candidate when all gatherers are\n                    // complete.\n                    if (!end) {\n                        pc._dispatchEvent('icecandidate', event);\n                    }\n                    if (complete) {\n                        pc._dispatchEvent('icecandidate', new Event('icecandidate'));\n                        pc.iceGatheringState = 'complete';\n                        pc._emitGatheringStateChange();\n                    }\n                };\n\n                // emit already gathered candidates.\n                window.setTimeout(function() {\n                    bufferedCandidateEvents.forEach(function(e) {\n                        iceGatherer.onlocalcandidate(e);\n                    });\n                }, 0);\n            };\n\n            // Create ICE transport and DTLS transport.\n            RTCPeerConnection.prototype._createIceAndDtlsTransports = function() {\n                var pc = this;\n                var iceTransport = new window.RTCIceTransport(null);\n                iceTransport.onicestatechange = function() {\n                    pc._updateIceConnectionState();\n                    pc._updateConnectionState();\n                };\n\n                var dtlsTransport = new window.RTCDtlsTransport(iceTransport);\n                dtlsTransport.ondtlsstatechange = function() {\n                    pc._updateConnectionState();\n                };\n                dtlsTransport.onerror = function() {\n                    // onerror does not set state to failed by itself.\n                    Object.defineProperty(dtlsTransport, 'state',\n                        {value: 'failed', writable: true});\n                    pc._updateConnectionState();\n                };\n\n                return {\n                    iceTransport: iceTransport,\n                    dtlsTransport: dtlsTransport\n                };\n            };\n\n            // Destroy ICE gatherer, ICE transport and DTLS transport.\n            // Without triggering the callbacks.\n            RTCPeerConnection.prototype._disposeIceAndDtlsTransports = function(\n                sdpMLineIndex) {\n                var iceGatherer = this.transceivers[sdpMLineIndex].iceGatherer;\n                if (iceGatherer) {\n                    delete iceGatherer.onlocalcandidate;\n                    delete this.transceivers[sdpMLineIndex].iceGatherer;\n                }\n                var iceTransport = this.transceivers[sdpMLineIndex].iceTransport;\n                if (iceTransport) {\n                    delete iceTransport.onicestatechange;\n                    delete this.transceivers[sdpMLineIndex].iceTransport;\n                }\n                var dtlsTransport = this.transceivers[sdpMLineIndex].dtlsTransport;\n                if (dtlsTransport) {\n                    delete dtlsTransport.ondtlsstatechange;\n                    delete dtlsTransport.onerror;\n                    delete this.transceivers[sdpMLineIndex].dtlsTransport;\n                }\n            };\n\n            // Start the RTP Sender and Receiver for a transceiver.\n            RTCPeerConnection.prototype._transceive = function(transceiver,\n                                                               send, recv) {\n                var params = getCommonCapabilities(transceiver.localCapabilities,\n                    transceiver.remoteCapabilities);\n                if (send && transceiver.rtpSender) {\n                    params.encodings = transceiver.sendEncodingParameters;\n                    params.rtcp = {\n                        cname: SDPUtils.localCName,\n                        compound: transceiver.rtcpParameters.compound\n                    };\n                    if (transceiver.recvEncodingParameters.length) {\n                        params.rtcp.ssrc = transceiver.recvEncodingParameters[0].ssrc;\n                    }\n                    transceiver.rtpSender.send(params);\n                }\n                if (recv && transceiver.rtpReceiver && params.codecs.length > 0) {\n                    // remove RTX field in Edge 14942\n                    if (transceiver.kind === 'video'\n                        && transceiver.recvEncodingParameters\n                        && edgeVersion < 15019) {\n                        transceiver.recvEncodingParameters.forEach(function(p) {\n                            delete p.rtx;\n                        });\n                    }\n                    if (transceiver.recvEncodingParameters.length) {\n                        params.encodings = transceiver.recvEncodingParameters;\n                    } else {\n                        params.encodings = [{}];\n                    }\n                    params.rtcp = {\n                        compound: transceiver.rtcpParameters.compound\n                    };\n                    if (transceiver.rtcpParameters.cname) {\n                        params.rtcp.cname = transceiver.rtcpParameters.cname;\n                    }\n                    if (transceiver.sendEncodingParameters.length) {\n                        params.rtcp.ssrc = transceiver.sendEncodingParameters[0].ssrc;\n                    }\n                    transceiver.rtpReceiver.receive(params);\n                }\n            };\n\n            RTCPeerConnection.prototype.setLocalDescription = function(description) {\n                var pc = this;\n\n                // Note: pranswer is not supported.\n                if (['offer', 'answer'].indexOf(description.type) === -1) {\n                    return Promise.reject(makeError('TypeError',\n                        'Unsupported type \"' + description.type + '\"'));\n                }\n\n                if (!isActionAllowedInSignalingState('setLocalDescription',\n                        description.type, pc.signalingState) || pc._isClosed) {\n                    return Promise.reject(makeError('InvalidStateError',\n                        'Can not set local ' + description.type +\n                        ' in state ' + pc.signalingState));\n                }\n\n                var sections;\n                var sessionpart;\n                if (description.type === 'offer') {\n                    // VERY limited support for SDP munging. Limited to:\n                    // * changing the order of codecs\n                    sections = SDPUtils.splitSections(description.sdp);\n                    sessionpart = sections.shift();\n                    sections.forEach(function(mediaSection, sdpMLineIndex) {\n                        var caps = SDPUtils.parseRtpParameters(mediaSection);\n                        pc.transceivers[sdpMLineIndex].localCapabilities = caps;\n                    });\n\n                    pc.transceivers.forEach(function(transceiver, sdpMLineIndex) {\n                        pc._gather(transceiver.mid, sdpMLineIndex);\n                    });\n                } else if (description.type === 'answer') {\n                    sections = SDPUtils.splitSections(pc._remoteDescription.sdp);\n                    sessionpart = sections.shift();\n                    var isIceLite = SDPUtils.matchPrefix(sessionpart,\n                        'a=ice-lite').length > 0;\n                    sections.forEach(function(mediaSection, sdpMLineIndex) {\n                        var transceiver = pc.transceivers[sdpMLineIndex];\n                        var iceGatherer = transceiver.iceGatherer;\n                        var iceTransport = transceiver.iceTransport;\n                        var dtlsTransport = transceiver.dtlsTransport;\n                        var localCapabilities = transceiver.localCapabilities;\n                        var remoteCapabilities = transceiver.remoteCapabilities;\n\n                        // treat bundle-only as not-rejected.\n                        var rejected = SDPUtils.isRejected(mediaSection) &&\n                            SDPUtils.matchPrefix(mediaSection, 'a=bundle-only').length === 0;\n\n                        if (!rejected && !transceiver.rejected) {\n                            var remoteIceParameters = SDPUtils.getIceParameters(\n                                mediaSection, sessionpart);\n                            var remoteDtlsParameters = SDPUtils.getDtlsParameters(\n                                mediaSection, sessionpart);\n                            if (isIceLite) {\n                                remoteDtlsParameters.role = 'server';\n                            }\n\n                            if (!pc.usingBundle || sdpMLineIndex === 0) {\n                                pc._gather(transceiver.mid, sdpMLineIndex);\n                                if (iceTransport.state === 'new') {\n                                    iceTransport.start(iceGatherer, remoteIceParameters,\n                                        isIceLite ? 'controlling' : 'controlled');\n                                }\n                                if (dtlsTransport.state === 'new') {\n                                    dtlsTransport.start(remoteDtlsParameters);\n                                }\n                            }\n\n                            // Calculate intersection of capabilities.\n                            var params = getCommonCapabilities(localCapabilities,\n                                remoteCapabilities);\n\n                            // Start the RTCRtpSender. The RTCRtpReceiver for this\n                            // transceiver has already been started in setRemoteDescription.\n                            pc._transceive(transceiver,\n                                params.codecs.length > 0,\n                                false);\n                        }\n                    });\n                }\n\n                pc._localDescription = {\n                    type: description.type,\n                    sdp: description.sdp\n                };\n                if (description.type === 'offer') {\n                    pc._updateSignalingState('have-local-offer');\n                } else {\n                    pc._updateSignalingState('stable');\n                }\n\n                return Promise.resolve();\n            };\n\n            RTCPeerConnection.prototype.setRemoteDescription = function(description) {\n                var pc = this;\n\n                // Note: pranswer is not supported.\n                if (['offer', 'answer'].indexOf(description.type) === -1) {\n                    return Promise.reject(makeError('TypeError',\n                        'Unsupported type \"' + description.type + '\"'));\n                }\n\n                if (!isActionAllowedInSignalingState('setRemoteDescription',\n                        description.type, pc.signalingState) || pc._isClosed) {\n                    return Promise.reject(makeError('InvalidStateError',\n                        'Can not set remote ' + description.type +\n                        ' in state ' + pc.signalingState));\n                }\n\n                var streams = {};\n                pc.remoteStreams.forEach(function(stream) {\n                    streams[stream.id] = stream;\n                });\n                var receiverList = [];\n                var sections = SDPUtils.splitSections(description.sdp);\n                var sessionpart = sections.shift();\n                var isIceLite = SDPUtils.matchPrefix(sessionpart,\n                    'a=ice-lite').length > 0;\n                var usingBundle = SDPUtils.matchPrefix(sessionpart,\n                    'a=group:BUNDLE ').length > 0;\n                pc.usingBundle = usingBundle;\n                var iceOptions = SDPUtils.matchPrefix(sessionpart,\n                    'a=ice-options:')[0];\n                if (iceOptions) {\n                    pc.canTrickleIceCandidates = iceOptions.substr(14).split(' ')\n                        .indexOf('trickle') >= 0;\n                } else {\n                    pc.canTrickleIceCandidates = false;\n                }\n\n                sections.forEach(function(mediaSection, sdpMLineIndex) {\n                    var lines = SDPUtils.splitLines(mediaSection);\n                    var kind = SDPUtils.getKind(mediaSection);\n                    // treat bundle-only as not-rejected.\n                    var rejected = SDPUtils.isRejected(mediaSection) &&\n                        SDPUtils.matchPrefix(mediaSection, 'a=bundle-only').length === 0;\n                    var protocol = lines[0].substr(2).split(' ')[2];\n\n                    var direction = SDPUtils.getDirection(mediaSection, sessionpart);\n                    var remoteMsid = SDPUtils.parseMsid(mediaSection);\n\n                    var mid = SDPUtils.getMid(mediaSection) || SDPUtils.generateIdentifier();\n\n                    // Reject datachannels which are not implemented yet.\n                    if (rejected || (kind === 'application' && (protocol === 'DTLS/SCTP' ||\n                            protocol === 'UDP/DTLS/SCTP'))) {\n                        // TODO: this is dangerous in the case where a non-rejected m-line\n                        //     becomes rejected.\n                        pc.transceivers[sdpMLineIndex] = {\n                            mid: mid,\n                            kind: kind,\n                            protocol: protocol,\n                            rejected: true\n                        };\n                        return;\n                    }\n\n                    if (!rejected && pc.transceivers[sdpMLineIndex] &&\n                        pc.transceivers[sdpMLineIndex].rejected) {\n                        // recycle a rejected transceiver.\n                        pc.transceivers[sdpMLineIndex] = pc._createTransceiver(kind, true);\n                    }\n\n                    var transceiver;\n                    var iceGatherer;\n                    var iceTransport;\n                    var dtlsTransport;\n                    var rtpReceiver;\n                    var sendEncodingParameters;\n                    var recvEncodingParameters;\n                    var localCapabilities;\n\n                    var track;\n                    // FIXME: ensure the mediaSection has rtcp-mux set.\n                    var remoteCapabilities = SDPUtils.parseRtpParameters(mediaSection);\n                    var remoteIceParameters;\n                    var remoteDtlsParameters;\n                    if (!rejected) {\n                        remoteIceParameters = SDPUtils.getIceParameters(mediaSection,\n                            sessionpart);\n                        remoteDtlsParameters = SDPUtils.getDtlsParameters(mediaSection,\n                            sessionpart);\n                        remoteDtlsParameters.role = 'client';\n                    }\n                    recvEncodingParameters =\n                        SDPUtils.parseRtpEncodingParameters(mediaSection);\n\n                    var rtcpParameters = SDPUtils.parseRtcpParameters(mediaSection);\n\n                    var isComplete = SDPUtils.matchPrefix(mediaSection,\n                        'a=end-of-candidates', sessionpart).length > 0;\n                    var cands = SDPUtils.matchPrefix(mediaSection, 'a=candidate:')\n                        .map(function(cand) {\n                            return SDPUtils.parseCandidate(cand);\n                        })\n                        .filter(function(cand) {\n                            return cand.component === 1;\n                        });\n\n                    // Check if we can use BUNDLE and dispose transports.\n                    if ((description.type === 'offer' || description.type === 'answer') &&\n                        !rejected && usingBundle && sdpMLineIndex > 0 &&\n                        pc.transceivers[sdpMLineIndex]) {\n                        pc._disposeIceAndDtlsTransports(sdpMLineIndex);\n                        pc.transceivers[sdpMLineIndex].iceGatherer =\n                            pc.transceivers[0].iceGatherer;\n                        pc.transceivers[sdpMLineIndex].iceTransport =\n                            pc.transceivers[0].iceTransport;\n                        pc.transceivers[sdpMLineIndex].dtlsTransport =\n                            pc.transceivers[0].dtlsTransport;\n                        if (pc.transceivers[sdpMLineIndex].rtpSender) {\n                            pc.transceivers[sdpMLineIndex].rtpSender.setTransport(\n                                pc.transceivers[0].dtlsTransport);\n                        }\n                        if (pc.transceivers[sdpMLineIndex].rtpReceiver) {\n                            pc.transceivers[sdpMLineIndex].rtpReceiver.setTransport(\n                                pc.transceivers[0].dtlsTransport);\n                        }\n                    }\n                    if (description.type === 'offer' && !rejected) {\n                        transceiver = pc.transceivers[sdpMLineIndex] ||\n                            pc._createTransceiver(kind);\n                        transceiver.mid = mid;\n\n                        if (!transceiver.iceGatherer) {\n                            transceiver.iceGatherer = pc._createIceGatherer(sdpMLineIndex,\n                                usingBundle);\n                        }\n\n                        if (cands.length && transceiver.iceTransport.state === 'new') {\n                            if (isComplete && (!usingBundle || sdpMLineIndex === 0)) {\n                                transceiver.iceTransport.setRemoteCandidates(cands);\n                            } else {\n                                cands.forEach(function(candidate) {\n                                    maybeAddCandidate(transceiver.iceTransport, candidate);\n                                });\n                            }\n                        }\n\n                        localCapabilities = window.RTCRtpReceiver.getCapabilities(kind);\n\n                        // filter RTX until additional stuff needed for RTX is implemented\n                        // in adapter.js\n                        if (edgeVersion < 15019) {\n                            localCapabilities.codecs = localCapabilities.codecs.filter(\n                                function(codec) {\n                                    return codec.name !== 'rtx';\n                                });\n                        }\n\n                        sendEncodingParameters = transceiver.sendEncodingParameters || [{\n                            ssrc: (2 * sdpMLineIndex + 2) * 1001\n                        }];\n\n                        // TODO: rewrite to use http://w3c.github.io/webrtc-pc/#set-associated-remote-streams\n                        var isNewTrack = false;\n                        if (direction === 'sendrecv' || direction === 'sendonly') {\n                            isNewTrack = !transceiver.rtpReceiver;\n                            rtpReceiver = transceiver.rtpReceiver ||\n                                new window.RTCRtpReceiver(transceiver.dtlsTransport, kind);\n\n                            if (isNewTrack) {\n                                var stream;\n                                track = rtpReceiver.track;\n                                // FIXME: does not work with Plan B.\n                                if (remoteMsid && remoteMsid.stream === '-') {\n                                    // no-op. a stream id of '-' means: no associated stream.\n                                } else if (remoteMsid) {\n                                    if (!streams[remoteMsid.stream]) {\n                                        streams[remoteMsid.stream] = new window.MediaStream();\n                                        Object.defineProperty(streams[remoteMsid.stream], 'id', {\n                                            get: function() {\n                                                return remoteMsid.stream;\n                                            }\n                                        });\n                                    }\n                                    Object.defineProperty(track, 'id', {\n                                        get: function() {\n                                            return remoteMsid.track;\n                                        }\n                                    });\n                                    stream = streams[remoteMsid.stream];\n                                } else {\n                                    if (!streams.default) {\n                                        streams.default = new window.MediaStream();\n                                    }\n                                    stream = streams.default;\n                                }\n                                if (stream) {\n                                    addTrackToStreamAndFireEvent(track, stream);\n                                    transceiver.associatedRemoteMediaStreams.push(stream);\n                                }\n                                receiverList.push([track, rtpReceiver, stream]);\n                            }\n                        } else if (transceiver.rtpReceiver && transceiver.rtpReceiver.track) {\n                            transceiver.associatedRemoteMediaStreams.forEach(function(s) {\n                                var nativeTrack = s.getTracks().find(function(t) {\n                                    return t.id === transceiver.rtpReceiver.track.id;\n                                });\n                                if (nativeTrack) {\n                                    removeTrackFromStreamAndFireEvent(nativeTrack, s);\n                                }\n                            });\n                            transceiver.associatedRemoteMediaStreams = [];\n                        }\n\n                        transceiver.localCapabilities = localCapabilities;\n                        transceiver.remoteCapabilities = remoteCapabilities;\n                        transceiver.rtpReceiver = rtpReceiver;\n                        transceiver.rtcpParameters = rtcpParameters;\n                        transceiver.sendEncodingParameters = sendEncodingParameters;\n                        transceiver.recvEncodingParameters = recvEncodingParameters;\n\n                        // Start the RTCRtpReceiver now. The RTPSender is started in\n                        // setLocalDescription.\n                        pc._transceive(pc.transceivers[sdpMLineIndex],\n                            false,\n                            isNewTrack);\n                    } else if (description.type === 'answer' && !rejected) {\n                        transceiver = pc.transceivers[sdpMLineIndex];\n                        iceGatherer = transceiver.iceGatherer;\n                        iceTransport = transceiver.iceTransport;\n                        dtlsTransport = transceiver.dtlsTransport;\n                        rtpReceiver = transceiver.rtpReceiver;\n                        sendEncodingParameters = transceiver.sendEncodingParameters;\n                        localCapabilities = transceiver.localCapabilities;\n\n                        pc.transceivers[sdpMLineIndex].recvEncodingParameters =\n                            recvEncodingParameters;\n                        pc.transceivers[sdpMLineIndex].remoteCapabilities =\n                            remoteCapabilities;\n                        pc.transceivers[sdpMLineIndex].rtcpParameters = rtcpParameters;\n\n                        if (cands.length && iceTransport.state === 'new') {\n                            if ((isIceLite || isComplete) &&\n                                (!usingBundle || sdpMLineIndex === 0)) {\n                                iceTransport.setRemoteCandidates(cands);\n                            } else {\n                                cands.forEach(function(candidate) {\n                                    maybeAddCandidate(transceiver.iceTransport, candidate);\n                                });\n                            }\n                        }\n\n                        if (!usingBundle || sdpMLineIndex === 0) {\n                            if (iceTransport.state === 'new') {\n                                iceTransport.start(iceGatherer, remoteIceParameters,\n                                    'controlling');\n                            }\n                            if (dtlsTransport.state === 'new') {\n                                dtlsTransport.start(remoteDtlsParameters);\n                            }\n                        }\n\n                        // If the offer contained RTX but the answer did not,\n                        // remove RTX from sendEncodingParameters.\n                        var commonCapabilities = getCommonCapabilities(\n                            transceiver.localCapabilities,\n                            transceiver.remoteCapabilities);\n\n                        var hasRtx = commonCapabilities.codecs.filter(function(c) {\n                            return c.name.toLowerCase() === 'rtx';\n                        }).length;\n                        if (!hasRtx && transceiver.sendEncodingParameters[0].rtx) {\n                            delete transceiver.sendEncodingParameters[0].rtx;\n                        }\n\n                        pc._transceive(transceiver,\n                            direction === 'sendrecv' || direction === 'recvonly',\n                            direction === 'sendrecv' || direction === 'sendonly');\n\n                        // TODO: rewrite to use http://w3c.github.io/webrtc-pc/#set-associated-remote-streams\n                        if (rtpReceiver &&\n                            (direction === 'sendrecv' || direction === 'sendonly')) {\n                            track = rtpReceiver.track;\n                            if (remoteMsid) {\n                                if (!streams[remoteMsid.stream]) {\n                                    streams[remoteMsid.stream] = new window.MediaStream();\n                                }\n                                addTrackToStreamAndFireEvent(track, streams[remoteMsid.stream]);\n                                receiverList.push([track, rtpReceiver, streams[remoteMsid.stream]]);\n                            } else {\n                                if (!streams.default) {\n                                    streams.default = new window.MediaStream();\n                                }\n                                addTrackToStreamAndFireEvent(track, streams.default);\n                                receiverList.push([track, rtpReceiver, streams.default]);\n                            }\n                        } else {\n                            // FIXME: actually the receiver should be created later.\n                            delete transceiver.rtpReceiver;\n                        }\n                    }\n                });\n\n                if (pc._dtlsRole === undefined) {\n                    pc._dtlsRole = description.type === 'offer' ? 'active' : 'passive';\n                }\n\n                pc._remoteDescription = {\n                    type: description.type,\n                    sdp: description.sdp\n                };\n                if (description.type === 'offer') {\n                    pc._updateSignalingState('have-remote-offer');\n                } else {\n                    pc._updateSignalingState('stable');\n                }\n                Object.keys(streams).forEach(function(sid) {\n                    var stream = streams[sid];\n                    if (stream.getTracks().length) {\n                        if (pc.remoteStreams.indexOf(stream) === -1) {\n                            pc.remoteStreams.push(stream);\n                            var event = new Event('addstream');\n                            event.stream = stream;\n                            window.setTimeout(function() {\n                                pc._dispatchEvent('addstream', event);\n                            });\n                        }\n\n                        receiverList.forEach(function(item) {\n                            var track = item[0];\n                            var receiver = item[1];\n                            if (stream.id !== item[2].id) {\n                                return;\n                            }\n                            fireAddTrack(pc, track, receiver, [stream]);\n                        });\n                    }\n                });\n                receiverList.forEach(function(item) {\n                    if (item[2]) {\n                        return;\n                    }\n                    fireAddTrack(pc, item[0], item[1], []);\n                });\n\n                // check whether addIceCandidate({}) was called within four seconds after\n                // setRemoteDescription.\n                window.setTimeout(function() {\n                    if (!(pc && pc.transceivers)) {\n                        return;\n                    }\n                    pc.transceivers.forEach(function(transceiver) {\n                        if (transceiver.iceTransport &&\n                            transceiver.iceTransport.state === 'new' &&\n                            transceiver.iceTransport.getRemoteCandidates().length > 0) {\n                            console.warn('Timeout for addRemoteCandidate. Consider sending ' +\n                                'an end-of-candidates notification');\n                            transceiver.iceTransport.addRemoteCandidate({});\n                        }\n                    });\n                }, 4000);\n\n                return Promise.resolve();\n            };\n\n            RTCPeerConnection.prototype.close = function() {\n                this.transceivers.forEach(function(transceiver) {\n                    /* not yet\n                    if (transceiver.iceGatherer) {\n                        transceiver.iceGatherer.close();\n                    }\n                    */\n                    if (transceiver.iceTransport) {\n                        transceiver.iceTransport.stop();\n                    }\n                    if (transceiver.dtlsTransport) {\n                        transceiver.dtlsTransport.stop();\n                    }\n                    if (transceiver.rtpSender) {\n                        transceiver.rtpSender.stop();\n                    }\n                    if (transceiver.rtpReceiver) {\n                        transceiver.rtpReceiver.stop();\n                    }\n                });\n                // FIXME: clean up tracks, local streams, remote streams, etc\n                this._isClosed = true;\n                this._updateSignalingState('closed');\n            };\n\n            // Update the signaling state.\n            RTCPeerConnection.prototype._updateSignalingState = function(newState) {\n                this.signalingState = newState;\n                var event = new Event('signalingstatechange');\n                this._dispatchEvent('signalingstatechange', event);\n            };\n\n            // Determine whether to fire the negotiationneeded event.\n            RTCPeerConnection.prototype._maybeFireNegotiationNeeded = function() {\n                var pc = this;\n                if (this.signalingState !== 'stable' || this.needNegotiation === true) {\n                    return;\n                }\n                this.needNegotiation = true;\n                window.setTimeout(function() {\n                    if (pc.needNegotiation) {\n                        pc.needNegotiation = false;\n                        var event = new Event('negotiationneeded');\n                        pc._dispatchEvent('negotiationneeded', event);\n                    }\n                }, 0);\n            };\n\n            // Update the ice connection state.\n            RTCPeerConnection.prototype._updateIceConnectionState = function() {\n                var newState;\n                var states = {\n                    'new': 0,\n                    closed: 0,\n                    checking: 0,\n                    connected: 0,\n                    completed: 0,\n                    disconnected: 0,\n                    failed: 0\n                };\n                this.transceivers.forEach(function(transceiver) {\n                    states[transceiver.iceTransport.state]++;\n                });\n\n                newState = 'new';\n                if (states.failed > 0) {\n                    newState = 'failed';\n                } else if (states.checking > 0) {\n                    newState = 'checking';\n                } else if (states.disconnected > 0) {\n                    newState = 'disconnected';\n                } else if (states.new > 0) {\n                    newState = 'new';\n                } else if (states.connected > 0) {\n                    newState = 'connected';\n                } else if (states.completed > 0) {\n                    newState = 'completed';\n                }\n\n                if (newState !== this.iceConnectionState) {\n                    this.iceConnectionState = newState;\n                    var event = new Event('iceconnectionstatechange');\n                    this._dispatchEvent('iceconnectionstatechange', event);\n                }\n            };\n\n            // Update the connection state.\n            RTCPeerConnection.prototype._updateConnectionState = function() {\n                var newState;\n                var states = {\n                    'new': 0,\n                    closed: 0,\n                    connecting: 0,\n                    connected: 0,\n                    completed: 0,\n                    disconnected: 0,\n                    failed: 0\n                };\n                this.transceivers.forEach(function(transceiver) {\n                    states[transceiver.iceTransport.state]++;\n                    states[transceiver.dtlsTransport.state]++;\n                });\n                // ICETransport.completed and connected are the same for this purpose.\n                states.connected += states.completed;\n\n                newState = 'new';\n                if (states.failed > 0) {\n                    newState = 'failed';\n                } else if (states.connecting > 0) {\n                    newState = 'connecting';\n                } else if (states.disconnected > 0) {\n                    newState = 'disconnected';\n                } else if (states.new > 0) {\n                    newState = 'new';\n                } else if (states.connected > 0) {\n                    newState = 'connected';\n                }\n\n                if (newState !== this.connectionState) {\n                    this.connectionState = newState;\n                    var event = new Event('connectionstatechange');\n                    this._dispatchEvent('connectionstatechange', event);\n                }\n            };\n\n            RTCPeerConnection.prototype.createOffer = function() {\n                var pc = this;\n\n                if (pc._isClosed) {\n                    return Promise.reject(makeError('InvalidStateError',\n                        'Can not call createOffer after close'));\n                }\n\n                var numAudioTracks = pc.transceivers.filter(function(t) {\n                    return t.kind === 'audio';\n                }).length;\n                var numVideoTracks = pc.transceivers.filter(function(t) {\n                    return t.kind === 'video';\n                }).length;\n\n                // Determine number of audio and video tracks we need to send/recv.\n                var offerOptions = arguments[0];\n                if (offerOptions) {\n                    // Reject Chrome legacy constraints.\n                    if (offerOptions.mandatory || offerOptions.optional) {\n                        throw new TypeError(\n                            'Legacy mandatory/optional constraints not supported.');\n                    }\n                    if (offerOptions.offerToReceiveAudio !== undefined) {\n                        if (offerOptions.offerToReceiveAudio === true) {\n                            numAudioTracks = 1;\n                        } else if (offerOptions.offerToReceiveAudio === false) {\n                            numAudioTracks = 0;\n                        } else {\n                            numAudioTracks = offerOptions.offerToReceiveAudio;\n                        }\n                    }\n                    if (offerOptions.offerToReceiveVideo !== undefined) {\n                        if (offerOptions.offerToReceiveVideo === true) {\n                            numVideoTracks = 1;\n                        } else if (offerOptions.offerToReceiveVideo === false) {\n                            numVideoTracks = 0;\n                        } else {\n                            numVideoTracks = offerOptions.offerToReceiveVideo;\n                        }\n                    }\n                }\n\n                pc.transceivers.forEach(function(transceiver) {\n                    if (transceiver.kind === 'audio') {\n                        numAudioTracks--;\n                        if (numAudioTracks < 0) {\n                            transceiver.wantReceive = false;\n                        }\n                    } else if (transceiver.kind === 'video') {\n                        numVideoTracks--;\n                        if (numVideoTracks < 0) {\n                            transceiver.wantReceive = false;\n                        }\n                    }\n                });\n\n                // Create M-lines for recvonly streams.\n                while (numAudioTracks > 0 || numVideoTracks > 0) {\n                    if (numAudioTracks > 0) {\n                        pc._createTransceiver('audio');\n                        numAudioTracks--;\n                    }\n                    if (numVideoTracks > 0) {\n                        pc._createTransceiver('video');\n                        numVideoTracks--;\n                    }\n                }\n\n                var sdp = SDPUtils.writeSessionBoilerplate(pc._sdpSessionId,\n                    pc._sdpSessionVersion++);\n                pc.transceivers.forEach(function(transceiver, sdpMLineIndex) {\n                    // For each track, create an ice gatherer, ice transport,\n                    // dtls transport, potentially rtpsender and rtpreceiver.\n                    var track = transceiver.track;\n                    var kind = transceiver.kind;\n                    var mid = transceiver.mid || SDPUtils.generateIdentifier();\n                    transceiver.mid = mid;\n\n                    if (!transceiver.iceGatherer) {\n                        transceiver.iceGatherer = pc._createIceGatherer(sdpMLineIndex,\n                            pc.usingBundle);\n                    }\n\n                    var localCapabilities = window.RTCRtpSender.getCapabilities(kind);\n                    // filter RTX until additional stuff needed for RTX is implemented\n                    // in adapter.js\n                    if (edgeVersion < 15019) {\n                        localCapabilities.codecs = localCapabilities.codecs.filter(\n                            function(codec) {\n                                return codec.name !== 'rtx';\n                            });\n                    }\n                    localCapabilities.codecs.forEach(function(codec) {\n                        // work around https://bugs.chromium.org/p/webrtc/issues/detail?id=6552\n                        // by adding level-asymmetry-allowed=1\n                        if (codec.name === 'H264' &&\n                            codec.parameters['level-asymmetry-allowed'] === undefined) {\n                            codec.parameters['level-asymmetry-allowed'] = '1';\n                        }\n\n                        // for subsequent offers, we might have to re-use the payload\n                        // type of the last offer.\n                        if (transceiver.remoteCapabilities &&\n                            transceiver.remoteCapabilities.codecs) {\n                            transceiver.remoteCapabilities.codecs.forEach(function(remoteCodec) {\n                                if (codec.name.toLowerCase() === remoteCodec.name.toLowerCase() &&\n                                    codec.clockRate === remoteCodec.clockRate) {\n                                    codec.preferredPayloadType = remoteCodec.payloadType;\n                                }\n                            });\n                        }\n                    });\n                    localCapabilities.headerExtensions.forEach(function(hdrExt) {\n                        var remoteExtensions = transceiver.remoteCapabilities &&\n                            transceiver.remoteCapabilities.headerExtensions || [];\n                        remoteExtensions.forEach(function(rHdrExt) {\n                            if (hdrExt.uri === rHdrExt.uri) {\n                                hdrExt.id = rHdrExt.id;\n                            }\n                        });\n                    });\n\n                    // generate an ssrc now, to be used later in rtpSender.send\n                    var sendEncodingParameters = transceiver.sendEncodingParameters || [{\n                        ssrc: (2 * sdpMLineIndex + 1) * 1001\n                    }];\n                    if (track) {\n                        // add RTX\n                        if (edgeVersion >= 15019 && kind === 'video' &&\n                            !sendEncodingParameters[0].rtx) {\n                            sendEncodingParameters[0].rtx = {\n                                ssrc: sendEncodingParameters[0].ssrc + 1\n                            };\n                        }\n                    }\n\n                    if (transceiver.wantReceive) {\n                        transceiver.rtpReceiver = new window.RTCRtpReceiver(\n                            transceiver.dtlsTransport, kind);\n                    }\n\n                    transceiver.localCapabilities = localCapabilities;\n                    transceiver.sendEncodingParameters = sendEncodingParameters;\n                });\n\n                // always offer BUNDLE and dispose on return if not supported.\n                if (pc._config.bundlePolicy !== 'max-compat') {\n                    sdp += 'a=group:BUNDLE ' + pc.transceivers.map(function(t) {\n                        return t.mid;\n                    }).join(' ') + '\\r\\n';\n                }\n                sdp += 'a=ice-options:trickle\\r\\n';\n\n                pc.transceivers.forEach(function(transceiver, sdpMLineIndex) {\n                    sdp += writeMediaSection(transceiver, transceiver.localCapabilities,\n                        'offer', transceiver.stream, pc._dtlsRole);\n                    sdp += 'a=rtcp-rsize\\r\\n';\n\n                    if (transceiver.iceGatherer && pc.iceGatheringState !== 'new' &&\n                        (sdpMLineIndex === 0 || !pc.usingBundle)) {\n                        transceiver.iceGatherer.getLocalCandidates().forEach(function(cand) {\n                            cand.component = 1;\n                            sdp += 'a=' + SDPUtils.writeCandidate(cand) + '\\r\\n';\n                        });\n\n                        if (transceiver.iceGatherer.state === 'completed') {\n                            sdp += 'a=end-of-candidates\\r\\n';\n                        }\n                    }\n                });\n\n                var desc = new window.RTCSessionDescription({\n                    type: 'offer',\n                    sdp: sdp\n                });\n                return Promise.resolve(desc);\n            };\n\n            RTCPeerConnection.prototype.createAnswer = function() {\n                var pc = this;\n\n                if (pc._isClosed) {\n                    return Promise.reject(makeError('InvalidStateError',\n                        'Can not call createAnswer after close'));\n                }\n\n                if (!(pc.signalingState === 'have-remote-offer' ||\n                        pc.signalingState === 'have-local-pranswer')) {\n                    return Promise.reject(makeError('InvalidStateError',\n                        'Can not call createAnswer in signalingState ' + pc.signalingState));\n                }\n\n                var sdp = SDPUtils.writeSessionBoilerplate(pc._sdpSessionId,\n                    pc._sdpSessionVersion++);\n                if (pc.usingBundle) {\n                    sdp += 'a=group:BUNDLE ' + pc.transceivers.map(function(t) {\n                        return t.mid;\n                    }).join(' ') + '\\r\\n';\n                }\n                sdp += 'a=ice-options:trickle\\r\\n';\n\n                var mediaSectionsInOffer = SDPUtils.getMediaSections(\n                    pc._remoteDescription.sdp).length;\n                pc.transceivers.forEach(function(transceiver, sdpMLineIndex) {\n                    if (sdpMLineIndex + 1 > mediaSectionsInOffer) {\n                        return;\n                    }\n                    if (transceiver.rejected) {\n                        if (transceiver.kind === 'application') {\n                            if (transceiver.protocol === 'DTLS/SCTP') { // legacy fmt\n                                sdp += 'm=application 0 DTLS/SCTP 5000\\r\\n';\n                            } else {\n                                sdp += 'm=application 0 ' + transceiver.protocol +\n                                    ' webrtc-datachannel\\r\\n';\n                            }\n                        } else if (transceiver.kind === 'audio') {\n                            sdp += 'm=audio 0 UDP/TLS/RTP/SAVPF 0\\r\\n' +\n                                'a=rtpmap:0 PCMU/8000\\r\\n';\n                        } else if (transceiver.kind === 'video') {\n                            sdp += 'm=video 0 UDP/TLS/RTP/SAVPF 120\\r\\n' +\n                                'a=rtpmap:120 VP8/90000\\r\\n';\n                        }\n                        sdp += 'c=IN IP4 0.0.0.0\\r\\n' +\n                            'a=inactive\\r\\n' +\n                            'a=mid:' + transceiver.mid + '\\r\\n';\n                        return;\n                    }\n\n                    // FIXME: look at direction.\n                    if (transceiver.stream) {\n                        var localTrack;\n                        if (transceiver.kind === 'audio') {\n                            localTrack = transceiver.stream.getAudioTracks()[0];\n                        } else if (transceiver.kind === 'video') {\n                            localTrack = transceiver.stream.getVideoTracks()[0];\n                        }\n                        if (localTrack) {\n                            // add RTX\n                            if (edgeVersion >= 15019 && transceiver.kind === 'video' &&\n                                !transceiver.sendEncodingParameters[0].rtx) {\n                                transceiver.sendEncodingParameters[0].rtx = {\n                                    ssrc: transceiver.sendEncodingParameters[0].ssrc + 1\n                                };\n                            }\n                        }\n                    }\n\n                    // Calculate intersection of capabilities.\n                    var commonCapabilities = getCommonCapabilities(\n                        transceiver.localCapabilities,\n                        transceiver.remoteCapabilities);\n\n                    var hasRtx = commonCapabilities.codecs.filter(function(c) {\n                        return c.name.toLowerCase() === 'rtx';\n                    }).length;\n                    if (!hasRtx && transceiver.sendEncodingParameters[0].rtx) {\n                        delete transceiver.sendEncodingParameters[0].rtx;\n                    }\n\n                    sdp += writeMediaSection(transceiver, commonCapabilities,\n                        'answer', transceiver.stream, pc._dtlsRole);\n                    if (transceiver.rtcpParameters &&\n                        transceiver.rtcpParameters.reducedSize) {\n                        sdp += 'a=rtcp-rsize\\r\\n';\n                    }\n                });\n\n                var desc = new window.RTCSessionDescription({\n                    type: 'answer',\n                    sdp: sdp\n                });\n                return Promise.resolve(desc);\n            };\n\n            RTCPeerConnection.prototype.addIceCandidate = function(candidate) {\n                var pc = this;\n                var sections;\n                if (candidate && !(candidate.sdpMLineIndex !== undefined ||\n                        candidate.sdpMid)) {\n                    return Promise.reject(new TypeError('sdpMLineIndex or sdpMid required'));\n                }\n\n                // TODO: needs to go into ops queue.\n                return new Promise(function(resolve, reject) {\n                    if (!pc._remoteDescription) {\n                        return reject(makeError('InvalidStateError',\n                            'Can not add ICE candidate without a remote description'));\n                    } else if (!candidate || candidate.candidate === '') {\n                        for (var j = 0; j < pc.transceivers.length; j++) {\n                            if (pc.transceivers[j].rejected) {\n                                continue;\n                            }\n                            pc.transceivers[j].iceTransport.addRemoteCandidate({});\n                            sections = SDPUtils.getMediaSections(pc._remoteDescription.sdp);\n                            sections[j] += 'a=end-of-candidates\\r\\n';\n                            pc._remoteDescription.sdp =\n                                SDPUtils.getDescription(pc._remoteDescription.sdp) +\n                                sections.join('');\n                            if (pc.usingBundle) {\n                                break;\n                            }\n                        }\n                    } else {\n                        var sdpMLineIndex = candidate.sdpMLineIndex;\n                        if (candidate.sdpMid) {\n                            for (var i = 0; i < pc.transceivers.length; i++) {\n                                if (pc.transceivers[i].mid === candidate.sdpMid) {\n                                    sdpMLineIndex = i;\n                                    break;\n                                }\n                            }\n                        }\n                        var transceiver = pc.transceivers[sdpMLineIndex];\n                        if (transceiver) {\n                            if (transceiver.rejected) {\n                                return resolve();\n                            }\n                            var cand = Object.keys(candidate.candidate).length > 0 ?\n                                SDPUtils.parseCandidate(candidate.candidate) : {};\n                            // Ignore Chrome's invalid candidates since Edge does not like them.\n                            if (cand.protocol === 'tcp' && (cand.port === 0 || cand.port === 9)) {\n                                return resolve();\n                            }\n                            // Ignore RTCP candidates, we assume RTCP-MUX.\n                            if (cand.component && cand.component !== 1) {\n                                return resolve();\n                            }\n                            // when using bundle, avoid adding candidates to the wrong\n                            // ice transport. And avoid adding candidates added in the SDP.\n                            if (sdpMLineIndex === 0 || (sdpMLineIndex > 0 &&\n                                    transceiver.iceTransport !== pc.transceivers[0].iceTransport)) {\n                                if (!maybeAddCandidate(transceiver.iceTransport, cand)) {\n                                    return reject(makeError('OperationError',\n                                        'Can not add ICE candidate'));\n                                }\n                            }\n\n                            // update the remoteDescription.\n                            var candidateString = candidate.candidate.trim();\n                            if (candidateString.indexOf('a=') === 0) {\n                                candidateString = candidateString.substr(2);\n                            }\n                            sections = SDPUtils.getMediaSections(pc._remoteDescription.sdp);\n                            sections[sdpMLineIndex] += 'a=' +\n                                (cand.type ? candidateString : 'end-of-candidates')\n                                + '\\r\\n';\n                            pc._remoteDescription.sdp =\n                                SDPUtils.getDescription(pc._remoteDescription.sdp) +\n                                sections.join('');\n                        } else {\n                            return reject(makeError('OperationError',\n                                'Can not add ICE candidate'));\n                        }\n                    }\n                    resolve();\n                });\n            };\n\n            RTCPeerConnection.prototype.getStats = function(selector) {\n                if (selector && selector instanceof window.MediaStreamTrack) {\n                    var senderOrReceiver = null;\n                    this.transceivers.forEach(function(transceiver) {\n                        if (transceiver.rtpSender &&\n                            transceiver.rtpSender.track === selector) {\n                            senderOrReceiver = transceiver.rtpSender;\n                        } else if (transceiver.rtpReceiver &&\n                            transceiver.rtpReceiver.track === selector) {\n                            senderOrReceiver = transceiver.rtpReceiver;\n                        }\n                    });\n                    if (!senderOrReceiver) {\n                        throw makeError('InvalidAccessError', 'Invalid selector.');\n                    }\n                    return senderOrReceiver.getStats();\n                }\n\n                var promises = [];\n                this.transceivers.forEach(function(transceiver) {\n                    ['rtpSender', 'rtpReceiver', 'iceGatherer', 'iceTransport',\n                        'dtlsTransport'].forEach(function(method) {\n                        if (transceiver[method]) {\n                            promises.push(transceiver[method].getStats());\n                        }\n                    });\n                });\n                return Promise.all(promises).then(function(allStats) {\n                    var results = new Map();\n                    allStats.forEach(function(stats) {\n                        stats.forEach(function(stat) {\n                            results.set(stat.id, stat);\n                        });\n                    });\n                    return results;\n                });\n            };\n\n            // fix low-level stat names and return Map instead of object.\n            var ortcObjects = ['RTCRtpSender', 'RTCRtpReceiver', 'RTCIceGatherer',\n                'RTCIceTransport', 'RTCDtlsTransport'];\n            ortcObjects.forEach(function(ortcObjectName) {\n                var obj = window[ortcObjectName];\n                if (obj && obj.prototype && obj.prototype.getStats) {\n                    var nativeGetstats = obj.prototype.getStats;\n                    obj.prototype.getStats = function() {\n                        return nativeGetstats.apply(this)\n                            .then(function(nativeStats) {\n                                var mapStats = new Map();\n                                Object.keys(nativeStats).forEach(function(id) {\n                                    nativeStats[id].type = fixStatsType(nativeStats[id]);\n                                    mapStats.set(id, nativeStats[id]);\n                                });\n                                return mapStats;\n                            });\n                    };\n                }\n            });\n\n            // legacy callback shims. Should be moved to adapter.js some days.\n            var methods = ['createOffer', 'createAnswer'];\n            methods.forEach(function(method) {\n                var nativeMethod = RTCPeerConnection.prototype[method];\n                RTCPeerConnection.prototype[method] = function() {\n                    var args = arguments;\n                    if (typeof args[0] === 'function' ||\n                        typeof args[1] === 'function') { // legacy\n                        return nativeMethod.apply(this, [arguments[2]])\n                            .then(function(description) {\n                                if (typeof args[0] === 'function') {\n                                    args[0].apply(null, [description]);\n                                }\n                            }, function(error) {\n                                if (typeof args[1] === 'function') {\n                                    args[1].apply(null, [error]);\n                                }\n                            });\n                    }\n                    return nativeMethod.apply(this, arguments);\n                };\n            });\n\n            methods = ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'];\n            methods.forEach(function(method) {\n                var nativeMethod = RTCPeerConnection.prototype[method];\n                RTCPeerConnection.prototype[method] = function() {\n                    var args = arguments;\n                    if (typeof args[1] === 'function' ||\n                        typeof args[2] === 'function') { // legacy\n                        return nativeMethod.apply(this, arguments)\n                            .then(function() {\n                                if (typeof args[1] === 'function') {\n                                    args[1].apply(null);\n                                }\n                            }, function(error) {\n                                if (typeof args[2] === 'function') {\n                                    args[2].apply(null, [error]);\n                                }\n                            });\n                    }\n                    return nativeMethod.apply(this, arguments);\n                };\n            });\n\n            // getStats is special. It doesn't have a spec legacy method yet we support\n            // getStats(something, cb) without error callbacks.\n            ['getStats'].forEach(function(method) {\n                var nativeMethod = RTCPeerConnection.prototype[method];\n                RTCPeerConnection.prototype[method] = function() {\n                    var args = arguments;\n                    if (typeof args[1] === 'function') {\n                        return nativeMethod.apply(this, arguments)\n                            .then(function() {\n                                if (typeof args[1] === 'function') {\n                                    args[1].apply(null);\n                                }\n                            });\n                    }\n                    return nativeMethod.apply(this, arguments);\n                };\n            });\n\n            return RTCPeerConnection;\n        };\n\n    },{\"sdp\":2}],2:[function(require,module,exports){\n        /* eslint-env node */\n        'use strict';\n\n        // SDP helpers.\n        var SDPUtils = {};\n\n        // Generate an alphanumeric identifier for cname or mids.\n        // TODO: use UUIDs instead? https://gist.github.com/jed/982883\n        SDPUtils.generateIdentifier = function() {\n            return Math.random().toString(36).substr(2, 10);\n        };\n\n        // The RTCP CNAME used by all peerconnections from the same JS.\n        SDPUtils.localCName = SDPUtils.generateIdentifier();\n\n        // Splits SDP into lines, dealing with both CRLF and LF.\n        SDPUtils.splitLines = function(blob) {\n            return blob.trim().split('\\n').map(function(line) {\n                return line.trim();\n            });\n        };\n        // Splits SDP into sessionpart and mediasections. Ensures CRLF.\n        SDPUtils.splitSections = function(blob) {\n            var parts = blob.split('\\nm=');\n            return parts.map(function(part, index) {\n                return (index > 0 ? 'm=' + part : part).trim() + '\\r\\n';\n            });\n        };\n\n        // returns the session description.\n        SDPUtils.getDescription = function(blob) {\n            var sections = SDPUtils.splitSections(blob);\n            return sections && sections[0];\n        };\n\n        // returns the individual media sections.\n        SDPUtils.getMediaSections = function(blob) {\n            var sections = SDPUtils.splitSections(blob);\n            sections.shift();\n            return sections;\n        };\n\n        // Returns lines that start with a certain prefix.\n        SDPUtils.matchPrefix = function(blob, prefix) {\n            return SDPUtils.splitLines(blob).filter(function(line) {\n                return line.indexOf(prefix) === 0;\n            });\n        };\n\n        // Parses an ICE candidate line. Sample input:\n        // candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8\n        // rport 55996\"\n        SDPUtils.parseCandidate = function(line) {\n            var parts;\n            // Parse both variants.\n            if (line.indexOf('a=candidate:') === 0) {\n                parts = line.substring(12).split(' ');\n            } else {\n                parts = line.substring(10).split(' ');\n            }\n\n            var candidate = {\n                foundation: parts[0],\n                component: parseInt(parts[1], 10),\n                protocol: parts[2].toLowerCase(),\n                priority: parseInt(parts[3], 10),\n                ip: parts[4],\n                address: parts[4], // address is an alias for ip.\n                port: parseInt(parts[5], 10),\n                // skip parts[6] == 'typ'\n                type: parts[7]\n            };\n\n            for (var i = 8; i < parts.length; i += 2) {\n                switch (parts[i]) {\n                    case 'raddr':\n                        candidate.relatedAddress = parts[i + 1];\n                        break;\n                    case 'rport':\n                        candidate.relatedPort = parseInt(parts[i + 1], 10);\n                        break;\n                    case 'tcptype':\n                        candidate.tcpType = parts[i + 1];\n                        break;\n                    case 'ufrag':\n                        candidate.ufrag = parts[i + 1]; // for backward compability.\n                        candidate.usernameFragment = parts[i + 1];\n                        break;\n                    default: // extension handling, in particular ufrag\n                        candidate[parts[i]] = parts[i + 1];\n                        break;\n                }\n            }\n            return candidate;\n        };\n\n        // Translates a candidate object into SDP candidate attribute.\n        SDPUtils.writeCandidate = function(candidate) {\n            var sdp = [];\n            sdp.push(candidate.foundation);\n            sdp.push(candidate.component);\n            sdp.push(candidate.protocol.toUpperCase());\n            sdp.push(candidate.priority);\n            sdp.push(candidate.address || candidate.ip);\n            sdp.push(candidate.port);\n\n            var type = candidate.type;\n            sdp.push('typ');\n            sdp.push(type);\n            if (type !== 'host' && candidate.relatedAddress &&\n                candidate.relatedPort) {\n                sdp.push('raddr');\n                sdp.push(candidate.relatedAddress);\n                sdp.push('rport');\n                sdp.push(candidate.relatedPort);\n            }\n            if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') {\n                sdp.push('tcptype');\n                sdp.push(candidate.tcpType);\n            }\n            if (candidate.usernameFragment || candidate.ufrag) {\n                sdp.push('ufrag');\n                sdp.push(candidate.usernameFragment || candidate.ufrag);\n            }\n            return 'candidate:' + sdp.join(' ');\n        };\n\n        // Parses an ice-options line, returns an array of option tags.\n        // a=ice-options:foo bar\n        SDPUtils.parseIceOptions = function(line) {\n            return line.substr(14).split(' ');\n        };\n\n        // Parses an rtpmap line, returns RTCRtpCoddecParameters. Sample input:\n        // a=rtpmap:111 opus/48000/2\n        SDPUtils.parseRtpMap = function(line) {\n            var parts = line.substr(9).split(' ');\n            var parsed = {\n                payloadType: parseInt(parts.shift(), 10) // was: id\n            };\n\n            parts = parts[0].split('/');\n\n            parsed.name = parts[0];\n            parsed.clockRate = parseInt(parts[1], 10); // was: clockrate\n            parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1;\n            // legacy alias, got renamed back to channels in ORTC.\n            parsed.numChannels = parsed.channels;\n            return parsed;\n        };\n\n        // Generate an a=rtpmap line from RTCRtpCodecCapability or\n        // RTCRtpCodecParameters.\n        SDPUtils.writeRtpMap = function(codec) {\n            var pt = codec.payloadType;\n            if (codec.preferredPayloadType !== undefined) {\n                pt = codec.preferredPayloadType;\n            }\n            var channels = codec.channels || codec.numChannels || 1;\n            return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate +\n                (channels !== 1 ? '/' + channels : '') + '\\r\\n';\n        };\n\n        // Parses an a=extmap line (headerextension from RFC 5285). Sample input:\n        // a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\n        // a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset\n        SDPUtils.parseExtmap = function(line) {\n            var parts = line.substr(9).split(' ');\n            return {\n                id: parseInt(parts[0], 10),\n                direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv',\n                uri: parts[1]\n            };\n        };\n\n        // Generates a=extmap line from RTCRtpHeaderExtensionParameters or\n        // RTCRtpHeaderExtension.\n        SDPUtils.writeExtmap = function(headerExtension) {\n            return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) +\n                (headerExtension.direction && headerExtension.direction !== 'sendrecv'\n                    ? '/' + headerExtension.direction\n                    : '') +\n                ' ' + headerExtension.uri + '\\r\\n';\n        };\n\n        // Parses an ftmp line, returns dictionary. Sample input:\n        // a=fmtp:96 vbr=on;cng=on\n        // Also deals with vbr=on; cng=on\n        SDPUtils.parseFmtp = function(line) {\n            var parsed = {};\n            var kv;\n            var parts = line.substr(line.indexOf(' ') + 1).split(';');\n            for (var j = 0; j < parts.length; j++) {\n                kv = parts[j].trim().split('=');\n                parsed[kv[0].trim()] = kv[1];\n            }\n            return parsed;\n        };\n\n        // Generates an a=ftmp line from RTCRtpCodecCapability or RTCRtpCodecParameters.\n        SDPUtils.writeFmtp = function(codec) {\n            var line = '';\n            var pt = codec.payloadType;\n            if (codec.preferredPayloadType !== undefined) {\n                pt = codec.preferredPayloadType;\n            }\n            if (codec.parameters && Object.keys(codec.parameters).length) {\n                var params = [];\n                Object.keys(codec.parameters).forEach(function(param) {\n                    if (codec.parameters[param]) {\n                        params.push(param + '=' + codec.parameters[param]);\n                    } else {\n                        params.push(param);\n                    }\n                });\n                line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\\r\\n';\n            }\n            return line;\n        };\n\n        // Parses an rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:\n        // a=rtcp-fb:98 nack rpsi\n        SDPUtils.parseRtcpFb = function(line) {\n            var parts = line.substr(line.indexOf(' ') + 1).split(' ');\n            return {\n                type: parts.shift(),\n                parameter: parts.join(' ')\n            };\n        };\n        // Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.\n        SDPUtils.writeRtcpFb = function(codec) {\n            var lines = '';\n            var pt = codec.payloadType;\n            if (codec.preferredPayloadType !== undefined) {\n                pt = codec.preferredPayloadType;\n            }\n            if (codec.rtcpFeedback && codec.rtcpFeedback.length) {\n                // FIXME: special handling for trr-int?\n                codec.rtcpFeedback.forEach(function(fb) {\n                    lines += 'a=rtcp-fb:' + pt + ' ' + fb.type +\n                        (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') +\n                        '\\r\\n';\n                });\n            }\n            return lines;\n        };\n\n        // Parses an RFC 5576 ssrc media attribute. Sample input:\n        // a=ssrc:3735928559 cname:something\n        SDPUtils.parseSsrcMedia = function(line) {\n            var sp = line.indexOf(' ');\n            var parts = {\n                ssrc: parseInt(line.substr(7, sp - 7), 10)\n            };\n            var colon = line.indexOf(':', sp);\n            if (colon > -1) {\n                parts.attribute = line.substr(sp + 1, colon - sp - 1);\n                parts.value = line.substr(colon + 1);\n            } else {\n                parts.attribute = line.substr(sp + 1);\n            }\n            return parts;\n        };\n\n        SDPUtils.parseSsrcGroup = function(line) {\n            var parts = line.substr(13).split(' ');\n            return {\n                semantics: parts.shift(),\n                ssrcs: parts.map(function(ssrc) {\n                    return parseInt(ssrc, 10);\n                })\n            };\n        };\n\n        // Extracts the MID (RFC 5888) from a media section.\n        // returns the MID or undefined if no mid line was found.\n        SDPUtils.getMid = function(mediaSection) {\n            var mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0];\n            if (mid) {\n                return mid.substr(6);\n            }\n        };\n\n        SDPUtils.parseFingerprint = function(line) {\n            var parts = line.substr(14).split(' ');\n            return {\n                algorithm: parts[0].toLowerCase(), // algorithm is case-sensitive in Edge.\n                value: parts[1]\n            };\n        };\n\n        // Extracts DTLS parameters from SDP media section or sessionpart.\n        // FIXME: for consistency with other functions this should only\n        //   get the fingerprint line as input. See also getIceParameters.\n        SDPUtils.getDtlsParameters = function(mediaSection, sessionpart) {\n            var lines = SDPUtils.matchPrefix(mediaSection + sessionpart,\n                'a=fingerprint:');\n            // Note: a=setup line is ignored since we use the 'auto' role.\n            // Note2: 'algorithm' is not case sensitive except in Edge.\n            return {\n                role: 'auto',\n                fingerprints: lines.map(SDPUtils.parseFingerprint)\n            };\n        };\n\n        // Serializes DTLS parameters to SDP.\n        SDPUtils.writeDtlsParameters = function(params, setupType) {\n            var sdp = 'a=setup:' + setupType + '\\r\\n';\n            params.fingerprints.forEach(function(fp) {\n                sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\\r\\n';\n            });\n            return sdp;\n        };\n        // Parses ICE information from SDP media section or sessionpart.\n        // FIXME: for consistency with other functions this should only\n        //   get the ice-ufrag and ice-pwd lines as input.\n        SDPUtils.getIceParameters = function(mediaSection, sessionpart) {\n            var lines = SDPUtils.splitLines(mediaSection);\n            // Search in session part, too.\n            lines = lines.concat(SDPUtils.splitLines(sessionpart));\n            var iceParameters = {\n                usernameFragment: lines.filter(function(line) {\n                    return line.indexOf('a=ice-ufrag:') === 0;\n                })[0].substr(12),\n                password: lines.filter(function(line) {\n                    return line.indexOf('a=ice-pwd:') === 0;\n                })[0].substr(10)\n            };\n            return iceParameters;\n        };\n\n        // Serializes ICE parameters to SDP.\n        SDPUtils.writeIceParameters = function(params) {\n            return 'a=ice-ufrag:' + params.usernameFragment + '\\r\\n' +\n                'a=ice-pwd:' + params.password + '\\r\\n';\n        };\n\n        // Parses the SDP media section and returns RTCRtpParameters.\n        SDPUtils.parseRtpParameters = function(mediaSection) {\n            var description = {\n                codecs: [],\n                headerExtensions: [],\n                fecMechanisms: [],\n                rtcp: []\n            };\n            var lines = SDPUtils.splitLines(mediaSection);\n            var mline = lines[0].split(' ');\n            for (var i = 3; i < mline.length; i++) { // find all codecs from mline[3..]\n                var pt = mline[i];\n                var rtpmapline = SDPUtils.matchPrefix(\n                    mediaSection, 'a=rtpmap:' + pt + ' ')[0];\n                if (rtpmapline) {\n                    var codec = SDPUtils.parseRtpMap(rtpmapline);\n                    var fmtps = SDPUtils.matchPrefix(\n                        mediaSection, 'a=fmtp:' + pt + ' ');\n                    // Only the first a=fmtp:<pt> is considered.\n                    codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {};\n                    codec.rtcpFeedback = SDPUtils.matchPrefix(\n                        mediaSection, 'a=rtcp-fb:' + pt + ' ')\n                        .map(SDPUtils.parseRtcpFb);\n                    description.codecs.push(codec);\n                    // parse FEC mechanisms from rtpmap lines.\n                    switch (codec.name.toUpperCase()) {\n                        case 'RED':\n                        case 'ULPFEC':\n                            description.fecMechanisms.push(codec.name.toUpperCase());\n                            break;\n                        default: // only RED and ULPFEC are recognized as FEC mechanisms.\n                            break;\n                    }\n                }\n            }\n            SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(function(line) {\n                description.headerExtensions.push(SDPUtils.parseExtmap(line));\n            });\n            // FIXME: parse rtcp.\n            return description;\n        };\n\n        // Generates parts of the SDP media section describing the capabilities /\n        // parameters.\n        SDPUtils.writeRtpDescription = function(kind, caps) {\n            var sdp = '';\n\n            // Build the mline.\n            sdp += 'm=' + kind + ' ';\n            sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs.\n            sdp += ' UDP/TLS/RTP/SAVPF ';\n            sdp += caps.codecs.map(function(codec) {\n                if (codec.preferredPayloadType !== undefined) {\n                    return codec.preferredPayloadType;\n                }\n                return codec.payloadType;\n            }).join(' ') + '\\r\\n';\n\n            sdp += 'c=IN IP4 0.0.0.0\\r\\n';\n            sdp += 'a=rtcp:9 IN IP4 0.0.0.0\\r\\n';\n\n            // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb.\n            caps.codecs.forEach(function(codec) {\n                sdp += SDPUtils.writeRtpMap(codec);\n                sdp += SDPUtils.writeFmtp(codec);\n                sdp += SDPUtils.writeRtcpFb(codec);\n            });\n            var maxptime = 0;\n            caps.codecs.forEach(function(codec) {\n                if (codec.maxptime > maxptime) {\n                    maxptime = codec.maxptime;\n                }\n            });\n            if (maxptime > 0) {\n                sdp += 'a=maxptime:' + maxptime + '\\r\\n';\n            }\n            sdp += 'a=rtcp-mux\\r\\n';\n\n            if (caps.headerExtensions) {\n                caps.headerExtensions.forEach(function(extension) {\n                    sdp += SDPUtils.writeExtmap(extension);\n                });\n            }\n            // FIXME: write fecMechanisms.\n            return sdp;\n        };\n\n        // Parses the SDP media section and returns an array of\n        // RTCRtpEncodingParameters.\n        SDPUtils.parseRtpEncodingParameters = function(mediaSection) {\n            var encodingParameters = [];\n            var description = SDPUtils.parseRtpParameters(mediaSection);\n            var hasRed = description.fecMechanisms.indexOf('RED') !== -1;\n            var hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1;\n\n            // filter a=ssrc:... cname:, ignore PlanB-msid\n            var ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n                .map(function(line) {\n                    return SDPUtils.parseSsrcMedia(line);\n                })\n                .filter(function(parts) {\n                    return parts.attribute === 'cname';\n                });\n            var primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc;\n            var secondarySsrc;\n\n            var flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID')\n                .map(function(line) {\n                    var parts = line.substr(17).split(' ');\n                    return parts.map(function(part) {\n                        return parseInt(part, 10);\n                    });\n                });\n            if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) {\n                secondarySsrc = flows[0][1];\n            }\n\n            description.codecs.forEach(function(codec) {\n                if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) {\n                    var encParam = {\n                        ssrc: primarySsrc,\n                        codecPayloadType: parseInt(codec.parameters.apt, 10)\n                    };\n                    if (primarySsrc && secondarySsrc) {\n                        encParam.rtx = {ssrc: secondarySsrc};\n                    }\n                    encodingParameters.push(encParam);\n                    if (hasRed) {\n                        encParam = JSON.parse(JSON.stringify(encParam));\n                        encParam.fec = {\n                            ssrc: primarySsrc,\n                            mechanism: hasUlpfec ? 'red+ulpfec' : 'red'\n                        };\n                        encodingParameters.push(encParam);\n                    }\n                }\n            });\n            if (encodingParameters.length === 0 && primarySsrc) {\n                encodingParameters.push({\n                    ssrc: primarySsrc\n                });\n            }\n\n            // we support both b=AS and b=TIAS but interpret AS as TIAS.\n            var bandwidth = SDPUtils.matchPrefix(mediaSection, 'b=');\n            if (bandwidth.length) {\n                if (bandwidth[0].indexOf('b=TIAS:') === 0) {\n                    bandwidth = parseInt(bandwidth[0].substr(7), 10);\n                } else if (bandwidth[0].indexOf('b=AS:') === 0) {\n                    // use formula from JSEP to convert b=AS to TIAS value.\n                    bandwidth = parseInt(bandwidth[0].substr(5), 10) * 1000 * 0.95\n                        - (50 * 40 * 8);\n                } else {\n                    bandwidth = undefined;\n                }\n                encodingParameters.forEach(function(params) {\n                    params.maxBitrate = bandwidth;\n                });\n            }\n            return encodingParameters;\n        };\n\n        // parses http://draft.ortc.org/#rtcrtcpparameters*\n        SDPUtils.parseRtcpParameters = function(mediaSection) {\n            var rtcpParameters = {};\n\n            // Gets the first SSRC. Note tha with RTX there might be multiple\n            // SSRCs.\n            var remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n                .map(function(line) {\n                    return SDPUtils.parseSsrcMedia(line);\n                })\n                .filter(function(obj) {\n                    return obj.attribute === 'cname';\n                })[0];\n            if (remoteSsrc) {\n                rtcpParameters.cname = remoteSsrc.value;\n                rtcpParameters.ssrc = remoteSsrc.ssrc;\n            }\n\n            // Edge uses the compound attribute instead of reducedSize\n            // compound is !reducedSize\n            var rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize');\n            rtcpParameters.reducedSize = rsize.length > 0;\n            rtcpParameters.compound = rsize.length === 0;\n\n            // parses the rtcp-mux attrіbute.\n            // Note that Edge does not support unmuxed RTCP.\n            var mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux');\n            rtcpParameters.mux = mux.length > 0;\n\n            return rtcpParameters;\n        };\n\n        // parses either a=msid: or a=ssrc:... msid lines and returns\n        // the id of the MediaStream and MediaStreamTrack.\n        SDPUtils.parseMsid = function(mediaSection) {\n            var parts;\n            var spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:');\n            if (spec.length === 1) {\n                parts = spec[0].substr(7).split(' ');\n                return {stream: parts[0], track: parts[1]};\n            }\n            var planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n                .map(function(line) {\n                    return SDPUtils.parseSsrcMedia(line);\n                })\n                .filter(function(msidParts) {\n                    return msidParts.attribute === 'msid';\n                });\n            if (planB.length > 0) {\n                parts = planB[0].value.split(' ');\n                return {stream: parts[0], track: parts[1]};\n            }\n        };\n\n        // Generate a session ID for SDP.\n        // https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1\n        // recommends using a cryptographically random +ve 64-bit value\n        // but right now this should be acceptable and within the right range\n        SDPUtils.generateSessionId = function() {\n            return Math.random().toString().substr(2, 21);\n        };\n\n        // Write boilder plate for start of SDP\n        // sessId argument is optional - if not supplied it will\n        // be generated randomly\n        // sessVersion is optional and defaults to 2\n        // sessUser is optional and defaults to 'thisisadapterortc'\n        SDPUtils.writeSessionBoilerplate = function(sessId, sessVer, sessUser) {\n            var sessionId;\n            var version = sessVer !== undefined ? sessVer : 2;\n            if (sessId) {\n                sessionId = sessId;\n            } else {\n                sessionId = SDPUtils.generateSessionId();\n            }\n            var user = sessUser || 'thisisadapterortc';\n            // FIXME: sess-id should be an NTP timestamp.\n            return 'v=0\\r\\n' +\n                'o=' + user + ' ' + sessionId + ' ' + version +\n                ' IN IP4 127.0.0.1\\r\\n' +\n                's=-\\r\\n' +\n                't=0 0\\r\\n';\n        };\n\n        SDPUtils.writeMediaSection = function(transceiver, caps, type, stream) {\n            var sdp = SDPUtils.writeRtpDescription(transceiver.kind, caps);\n\n            // Map ICE parameters (ufrag, pwd) to SDP.\n            sdp += SDPUtils.writeIceParameters(\n                transceiver.iceGatherer.getLocalParameters());\n\n            // Map DTLS parameters to SDP.\n            sdp += SDPUtils.writeDtlsParameters(\n                transceiver.dtlsTransport.getLocalParameters(),\n                type === 'offer' ? 'actpass' : 'active');\n\n            sdp += 'a=mid:' + transceiver.mid + '\\r\\n';\n\n            if (transceiver.direction) {\n                sdp += 'a=' + transceiver.direction + '\\r\\n';\n            } else if (transceiver.rtpSender && transceiver.rtpReceiver) {\n                sdp += 'a=sendrecv\\r\\n';\n            } else if (transceiver.rtpSender) {\n                sdp += 'a=sendonly\\r\\n';\n            } else if (transceiver.rtpReceiver) {\n                sdp += 'a=recvonly\\r\\n';\n            } else {\n                sdp += 'a=inactive\\r\\n';\n            }\n\n            if (transceiver.rtpSender) {\n                // spec.\n                var msid = 'msid:' + stream.id + ' ' +\n                    transceiver.rtpSender.track.id + '\\r\\n';\n                sdp += 'a=' + msid;\n\n                // for Chrome.\n                sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc +\n                    ' ' + msid;\n                if (transceiver.sendEncodingParameters[0].rtx) {\n                    sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].rtx.ssrc +\n                        ' ' + msid;\n                    sdp += 'a=ssrc-group:FID ' +\n                        transceiver.sendEncodingParameters[0].ssrc + ' ' +\n                        transceiver.sendEncodingParameters[0].rtx.ssrc +\n                        '\\r\\n';\n                }\n            }\n            // FIXME: this should be written by writeRtpDescription.\n            sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc +\n                ' cname:' + SDPUtils.localCName + '\\r\\n';\n            if (transceiver.rtpSender && transceiver.sendEncodingParameters[0].rtx) {\n                sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].rtx.ssrc +\n                    ' cname:' + SDPUtils.localCName + '\\r\\n';\n            }\n            return sdp;\n        };\n\n        // Gets the direction from the mediaSection or the sessionpart.\n        SDPUtils.getDirection = function(mediaSection, sessionpart) {\n            // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv.\n            var lines = SDPUtils.splitLines(mediaSection);\n            for (var i = 0; i < lines.length; i++) {\n                switch (lines[i]) {\n                    case 'a=sendrecv':\n                    case 'a=sendonly':\n                    case 'a=recvonly':\n                    case 'a=inactive':\n                        return lines[i].substr(2);\n                    default:\n                    // FIXME: What should happen here?\n                }\n            }\n            if (sessionpart) {\n                return SDPUtils.getDirection(sessionpart);\n            }\n            return 'sendrecv';\n        };\n\n        SDPUtils.getKind = function(mediaSection) {\n            var lines = SDPUtils.splitLines(mediaSection);\n            var mline = lines[0].split(' ');\n            return mline[0].substr(2);\n        };\n\n        SDPUtils.isRejected = function(mediaSection) {\n            return mediaSection.split(' ', 2)[1] === '0';\n        };\n\n        SDPUtils.parseMLine = function(mediaSection) {\n            var lines = SDPUtils.splitLines(mediaSection);\n            var parts = lines[0].substr(2).split(' ');\n            return {\n                kind: parts[0],\n                port: parseInt(parts[1], 10),\n                protocol: parts[2],\n                fmt: parts.slice(3).join(' ')\n            };\n        };\n\n        SDPUtils.parseOLine = function(mediaSection) {\n            var line = SDPUtils.matchPrefix(mediaSection, 'o=')[0];\n            var parts = line.substr(2).split(' ');\n            return {\n                username: parts[0],\n                sessionId: parts[1],\n                sessionVersion: parseInt(parts[2], 10),\n                netType: parts[3],\n                addressType: parts[4],\n                address: parts[5]\n            };\n        };\n\n        // a very naive interpretation of a valid SDP.\n        SDPUtils.isValidSDP = function(blob) {\n            if (typeof blob !== 'string' || blob.length === 0) {\n                return false;\n            }\n            var lines = SDPUtils.splitLines(blob);\n            for (var i = 0; i < lines.length; i++) {\n                if (lines[i].length < 2 || lines[i].charAt(1) !== '=') {\n                    return false;\n                }\n                // TODO: check the modifier a bit more.\n            }\n            return true;\n        };\n\n        // Expose public methods.\n        if (typeof module === 'object') {\n            module.exports = SDPUtils;\n        }\n\n    },{}],3:[function(require,module,exports){\n        (function (global){\n            /*\n             *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n             *\n             *  Use of this source code is governed by a BSD-style license\n             *  that can be found in the LICENSE file in the root of the source\n             *  tree.\n             */\n            /* eslint-env node */\n\n            'use strict';\n\n            var adapterFactory = require('./adapter_factory.js');\n            module.exports = adapterFactory({window: global.window});\n\n        }).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n    },{\"./adapter_factory.js\":4}],4:[function(require,module,exports){\n        /*\n         *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n         *\n         *  Use of this source code is governed by a BSD-style license\n         *  that can be found in the LICENSE file in the root of the source\n         *  tree.\n         */\n        /* eslint-env node */\n\n        'use strict';\n\n        var utils = require('./utils');\n        // Shimming starts here.\n        module.exports = function(dependencies, opts) {\n            var window = dependencies && dependencies.window;\n\n            var options = {\n                shimChrome: true,\n                shimFirefox: true,\n                shimEdge: true,\n                shimSafari: true,\n            };\n\n            for (var key in opts) {\n                if (hasOwnProperty.call(opts, key)) {\n                    options[key] = opts[key];\n                }\n            }\n\n            // Utils.\n            var logging = utils.log;\n            var browserDetails = utils.detectBrowser(window);\n\n            // Uncomment the line below if you want logging to occur, including logging\n            // for the switch statement below. Can also be turned on in the browser via\n            // adapter.disableLog(false), but then logging from the switch statement below\n            // will not appear.\n            // require('./utils').disableLog(false);\n\n            // Browser shims.\n            var chromeShim = require('./chrome/chrome_shim') || null;\n            var edgeShim = require('./edge/edge_shim') || null;\n            var firefoxShim = require('./firefox/firefox_shim') || null;\n            var safariShim = require('./safari/safari_shim') || null;\n            var commonShim = require('./common_shim') || null;\n\n            // Export to the adapter global object visible in the browser.\n            var adapter = {\n                browserDetails: browserDetails,\n                commonShim: commonShim,\n                extractVersion: utils.extractVersion,\n                disableLog: utils.disableLog,\n                disableWarnings: utils.disableWarnings\n            };\n\n            // Shim browser if found.\n            switch (browserDetails.browser) {\n                case 'chrome':\n                    if (!chromeShim || !chromeShim.shimPeerConnection ||\n                        !options.shimChrome) {\n                        logging('Chrome shim is not included in this adapter release.');\n                        return adapter;\n                    }\n                    logging('adapter.js shimming chrome.');\n                    // Export to the adapter global object visible in the browser.\n                    adapter.browserShim = chromeShim;\n                    commonShim.shimCreateObjectURL(window);\n\n                    chromeShim.shimGetUserMedia(window);\n                    chromeShim.shimMediaStream(window);\n                    chromeShim.shimSourceObject(window);\n                    chromeShim.shimPeerConnection(window);\n                    chromeShim.shimOnTrack(window);\n                    chromeShim.shimAddTrackRemoveTrack(window);\n                    chromeShim.shimGetSendersWithDtmf(window);\n                    chromeShim.shimSenderReceiverGetStats(window);\n                    chromeShim.fixNegotiationNeeded(window);\n\n                    commonShim.shimRTCIceCandidate(window);\n                    commonShim.shimMaxMessageSize(window);\n                    commonShim.shimSendThrowTypeError(window);\n                    break;\n                case 'firefox':\n                    if (!firefoxShim || !firefoxShim.shimPeerConnection ||\n                        !options.shimFirefox) {\n                        logging('Firefox shim is not included in this adapter release.');\n                        return adapter;\n                    }\n                    logging('adapter.js shimming firefox.');\n                    // Export to the adapter global object visible in the browser.\n                    adapter.browserShim = firefoxShim;\n                    commonShim.shimCreateObjectURL(window);\n\n                    firefoxShim.shimGetUserMedia(window);\n                    firefoxShim.shimSourceObject(window);\n                    firefoxShim.shimPeerConnection(window);\n                    firefoxShim.shimOnTrack(window);\n                    firefoxShim.shimRemoveStream(window);\n                    firefoxShim.shimSenderGetStats(window);\n                    firefoxShim.shimReceiverGetStats(window);\n                    firefoxShim.shimRTCDataChannel(window);\n\n                    commonShim.shimRTCIceCandidate(window);\n                    commonShim.shimMaxMessageSize(window);\n                    commonShim.shimSendThrowTypeError(window);\n                    break;\n                case 'edge':\n                    if (!edgeShim || !edgeShim.shimPeerConnection || !options.shimEdge) {\n                        logging('MS edge shim is not included in this adapter release.');\n                        return adapter;\n                    }\n                    logging('adapter.js shimming edge.');\n                    // Export to the adapter global object visible in the browser.\n                    adapter.browserShim = edgeShim;\n                    commonShim.shimCreateObjectURL(window);\n\n                    edgeShim.shimGetUserMedia(window);\n                    edgeShim.shimPeerConnection(window);\n                    edgeShim.shimReplaceTrack(window);\n\n                    // the edge shim implements the full RTCIceCandidate object.\n\n                    commonShim.shimMaxMessageSize(window);\n                    commonShim.shimSendThrowTypeError(window);\n                    break;\n                case 'safari':\n                    if (!safariShim || !options.shimSafari) {\n                        logging('Safari shim is not included in this adapter release.');\n                        return adapter;\n                    }\n                    logging('adapter.js shimming safari.');\n                    // Export to the adapter global object visible in the browser.\n                    adapter.browserShim = safariShim;\n                    commonShim.shimCreateObjectURL(window);\n\n                    safariShim.shimRTCIceServerUrls(window);\n                    safariShim.shimCreateOfferLegacy(window);\n                    safariShim.shimCallbacksAPI(window);\n                    safariShim.shimLocalStreamsAPI(window);\n                    safariShim.shimRemoteStreamsAPI(window);\n                    safariShim.shimTrackEventTransceiver(window);\n                    safariShim.shimGetUserMedia(window);\n\n                    commonShim.shimRTCIceCandidate(window);\n                    commonShim.shimMaxMessageSize(window);\n                    commonShim.shimSendThrowTypeError(window);\n                    break;\n                default:\n                    logging('Unsupported browser!');\n                    break;\n            }\n\n            return adapter;\n        };\n\n    },{\"./chrome/chrome_shim\":5,\"./common_shim\":7,\"./edge/edge_shim\":8,\"./firefox/firefox_shim\":11,\"./safari/safari_shim\":13,\"./utils\":14}],5:[function(require,module,exports){\n\n        /*\n         *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n         *\n         *  Use of this source code is governed by a BSD-style license\n         *  that can be found in the LICENSE file in the root of the source\n         *  tree.\n         */\n        /* eslint-env node */\n        'use strict';\n        var utils = require('../utils.js');\n        var logging = utils.log;\n\n        /* iterates the stats graph recursively. */\n        function walkStats(stats, base, resultSet) {\n            if (!base || resultSet.has(base.id)) {\n                return;\n            }\n            resultSet.set(base.id, base);\n            Object.keys(base).forEach(function(name) {\n                if (name.endsWith('Id')) {\n                    walkStats(stats, stats.get(base[name]), resultSet);\n                } else if (name.endsWith('Ids')) {\n                    base[name].forEach(function(id) {\n                        walkStats(stats, stats.get(id), resultSet);\n                    });\n                }\n            });\n        }\n\n        /* filter getStats for a sender/receiver track. */\n        function filterStats(result, track, outbound) {\n            var streamStatsType = outbound ? 'outbound-rtp' : 'inbound-rtp';\n            var filteredResult = new Map();\n            if (track === null) {\n                return filteredResult;\n            }\n            var trackStats = [];\n            result.forEach(function(value) {\n                if (value.type === 'track' &&\n                    value.trackIdentifier === track.id) {\n                    trackStats.push(value);\n                }\n            });\n            trackStats.forEach(function(trackStat) {\n                result.forEach(function(stats) {\n                    if (stats.type === streamStatsType && stats.trackId === trackStat.id) {\n                        walkStats(result, stats, filteredResult);\n                    }\n                });\n            });\n            return filteredResult;\n        }\n\n        module.exports = {\n            shimGetUserMedia: require('./getusermedia'),\n            shimMediaStream: function(window) {\n                window.MediaStream = window.MediaStream || window.webkitMediaStream;\n            },\n\n            shimOnTrack: function(window) {\n                if (typeof window === 'object' && window.RTCPeerConnection && !('ontrack' in\n                        window.RTCPeerConnection.prototype)) {\n                    Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', {\n                        get: function() {\n                            return this._ontrack;\n                        },\n                        set: function(f) {\n                            if (this._ontrack) {\n                                this.removeEventListener('track', this._ontrack);\n                            }\n                            this.addEventListener('track', this._ontrack = f);\n                        },\n                        enumerable: true,\n                        configurable: true\n                    });\n                    var origSetRemoteDescription =\n                        window.RTCPeerConnection.prototype.setRemoteDescription;\n                    window.RTCPeerConnection.prototype.setRemoteDescription = function() {\n                        var pc = this;\n                        if (!pc._ontrackpoly) {\n                            pc._ontrackpoly = function(e) {\n                                // onaddstream does not fire when a track is added to an existing\n                                // stream. But stream.onaddtrack is implemented so we use that.\n                                e.stream.addEventListener('addtrack', function(te) {\n                                    var receiver;\n                                    if (window.RTCPeerConnection.prototype.getReceivers) {\n                                        receiver = pc.getReceivers().find(function(r) {\n                                            return r.track && r.track.id === te.track.id;\n                                        });\n                                    } else {\n                                        receiver = {track: te.track};\n                                    }\n\n                                    var event = new Event('track');\n                                    event.track = te.track;\n                                    event.receiver = receiver;\n                                    event.transceiver = {receiver: receiver};\n                                    event.streams = [e.stream];\n                                    pc.dispatchEvent(event);\n                                });\n                                e.stream.getTracks().forEach(function(track) {\n                                    var receiver;\n                                    if (window.RTCPeerConnection.prototype.getReceivers) {\n                                        receiver = pc.getReceivers().find(function(r) {\n                                            return r.track && r.track.id === track.id;\n                                        });\n                                    } else {\n                                        receiver = {track: track};\n                                    }\n                                    var event = new Event('track');\n                                    event.track = track;\n                                    event.receiver = receiver;\n                                    event.transceiver = {receiver: receiver};\n                                    event.streams = [e.stream];\n                                    pc.dispatchEvent(event);\n                                });\n                            };\n                            pc.addEventListener('addstream', pc._ontrackpoly);\n                        }\n                        return origSetRemoteDescription.apply(pc, arguments);\n                    };\n                } else {\n                    // even if RTCRtpTransceiver is in window, it is only used and\n                    // emitted in unified-plan. Unfortunately this means we need\n                    // to unconditionally wrap the event.\n                    utils.wrapPeerConnectionEvent(window, 'track', function(e) {\n                        if (!e.transceiver) {\n                            Object.defineProperty(e, 'transceiver',\n                                {value: {receiver: e.receiver}});\n                        }\n                        return e;\n                    });\n                }\n            },\n\n            shimGetSendersWithDtmf: function(window) {\n                // Overrides addTrack/removeTrack, depends on shimAddTrackRemoveTrack.\n                if (typeof window === 'object' && window.RTCPeerConnection &&\n                    !('getSenders' in window.RTCPeerConnection.prototype) &&\n                    'createDTMFSender' in window.RTCPeerConnection.prototype) {\n                    var shimSenderWithDtmf = function(pc, track) {\n                        return {\n                            track: track,\n                            get dtmf() {\n                                if (this._dtmf === undefined) {\n                                    if (track.kind === 'audio') {\n                                        this._dtmf = pc.createDTMFSender(track);\n                                    } else {\n                                        this._dtmf = null;\n                                    }\n                                }\n                                return this._dtmf;\n                            },\n                            _pc: pc\n                        };\n                    };\n\n                    // augment addTrack when getSenders is not available.\n                    if (!window.RTCPeerConnection.prototype.getSenders) {\n                        window.RTCPeerConnection.prototype.getSenders = function() {\n                            this._senders = this._senders || [];\n                            return this._senders.slice(); // return a copy of the internal state.\n                        };\n                        var origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n                        window.RTCPeerConnection.prototype.addTrack = function(track, stream) {\n                            var pc = this;\n                            var sender = origAddTrack.apply(pc, arguments);\n                            if (!sender) {\n                                sender = shimSenderWithDtmf(pc, track);\n                                pc._senders.push(sender);\n                            }\n                            return sender;\n                        };\n\n                        var origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n                        window.RTCPeerConnection.prototype.removeTrack = function(sender) {\n                            var pc = this;\n                            origRemoveTrack.apply(pc, arguments);\n                            var idx = pc._senders.indexOf(sender);\n                            if (idx !== -1) {\n                                pc._senders.splice(idx, 1);\n                            }\n                        };\n                    }\n                    var origAddStream = window.RTCPeerConnection.prototype.addStream;\n                    window.RTCPeerConnection.prototype.addStream = function(stream) {\n                        var pc = this;\n                        pc._senders = pc._senders || [];\n                        origAddStream.apply(pc, [stream]);\n                        stream.getTracks().forEach(function(track) {\n                            pc._senders.push(shimSenderWithDtmf(pc, track));\n                        });\n                    };\n\n                    var origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n                    window.RTCPeerConnection.prototype.removeStream = function(stream) {\n                        var pc = this;\n                        pc._senders = pc._senders || [];\n                        origRemoveStream.apply(pc, [stream]);\n\n                        stream.getTracks().forEach(function(track) {\n                            var sender = pc._senders.find(function(s) {\n                                return s.track === track;\n                            });\n                            if (sender) {\n                                pc._senders.splice(pc._senders.indexOf(sender), 1); // remove sender\n                            }\n                        });\n                    };\n                } else if (typeof window === 'object' && window.RTCPeerConnection &&\n                    'getSenders' in window.RTCPeerConnection.prototype &&\n                    'createDTMFSender' in window.RTCPeerConnection.prototype &&\n                    window.RTCRtpSender &&\n                    !('dtmf' in window.RTCRtpSender.prototype)) {\n                    var origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n                    window.RTCPeerConnection.prototype.getSenders = function() {\n                        var pc = this;\n                        var senders = origGetSenders.apply(pc, []);\n                        senders.forEach(function(sender) {\n                            sender._pc = pc;\n                        });\n                        return senders;\n                    };\n\n                    Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', {\n                        get: function() {\n                            if (this._dtmf === undefined) {\n                                if (this.track.kind === 'audio') {\n                                    this._dtmf = this._pc.createDTMFSender(this.track);\n                                } else {\n                                    this._dtmf = null;\n                                }\n                            }\n                            return this._dtmf;\n                        }\n                    });\n                }\n            },\n\n            shimSenderReceiverGetStats: function(window) {\n                if (!(typeof window === 'object' && window.RTCPeerConnection &&\n                        window.RTCRtpSender && window.RTCRtpReceiver)) {\n                    return;\n                }\n\n                // shim sender stats.\n                if (!('getStats' in window.RTCRtpSender.prototype)) {\n                    var origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n                    if (origGetSenders) {\n                        window.RTCPeerConnection.prototype.getSenders = function() {\n                            var pc = this;\n                            var senders = origGetSenders.apply(pc, []);\n                            senders.forEach(function(sender) {\n                                sender._pc = pc;\n                            });\n                            return senders;\n                        };\n                    }\n\n                    var origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n                    if (origAddTrack) {\n                        window.RTCPeerConnection.prototype.addTrack = function() {\n                            var sender = origAddTrack.apply(this, arguments);\n                            sender._pc = this;\n                            return sender;\n                        };\n                    }\n                    window.RTCRtpSender.prototype.getStats = function() {\n                        var sender = this;\n                        return this._pc.getStats().then(function(result) {\n                            /* Note: this will include stats of all senders that\n                             *   send a track with the same id as sender.track as\n                             *   it is not possible to identify the RTCRtpSender.\n                             */\n                            return filterStats(result, sender.track, true);\n                        });\n                    };\n                }\n\n                // shim receiver stats.\n                if (!('getStats' in window.RTCRtpReceiver.prototype)) {\n                    var origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n                    if (origGetReceivers) {\n                        window.RTCPeerConnection.prototype.getReceivers = function() {\n                            var pc = this;\n                            var receivers = origGetReceivers.apply(pc, []);\n                            receivers.forEach(function(receiver) {\n                                receiver._pc = pc;\n                            });\n                            return receivers;\n                        };\n                    }\n                    utils.wrapPeerConnectionEvent(window, 'track', function(e) {\n                        e.receiver._pc = e.srcElement;\n                        return e;\n                    });\n                    window.RTCRtpReceiver.prototype.getStats = function() {\n                        var receiver = this;\n                        return this._pc.getStats().then(function(result) {\n                            return filterStats(result, receiver.track, false);\n                        });\n                    };\n                }\n\n                if (!('getStats' in window.RTCRtpSender.prototype &&\n                        'getStats' in window.RTCRtpReceiver.prototype)) {\n                    return;\n                }\n\n                // shim RTCPeerConnection.getStats(track).\n                var origGetStats = window.RTCPeerConnection.prototype.getStats;\n                window.RTCPeerConnection.prototype.getStats = function() {\n                    var pc = this;\n                    if (arguments.length > 0 &&\n                        arguments[0] instanceof window.MediaStreamTrack) {\n                        var track = arguments[0];\n                        var sender;\n                        var receiver;\n                        var err;\n                        pc.getSenders().forEach(function(s) {\n                            if (s.track === track) {\n                                if (sender) {\n                                    err = true;\n                                } else {\n                                    sender = s;\n                                }\n                            }\n                        });\n                        pc.getReceivers().forEach(function(r) {\n                            if (r.track === track) {\n                                if (receiver) {\n                                    err = true;\n                                } else {\n                                    receiver = r;\n                                }\n                            }\n                            return r.track === track;\n                        });\n                        if (err || (sender && receiver)) {\n                            return Promise.reject(new DOMException(\n                                'There are more than one sender or receiver for the track.',\n                                'InvalidAccessError'));\n                        } else if (sender) {\n                            return sender.getStats();\n                        } else if (receiver) {\n                            return receiver.getStats();\n                        }\n                        return Promise.reject(new DOMException(\n                            'There is no sender or receiver for the track.',\n                            'InvalidAccessError'));\n                    }\n                    return origGetStats.apply(pc, arguments);\n                };\n            },\n\n            shimSourceObject: function(window) {\n                var URL = window && window.URL;\n\n                if (typeof window === 'object') {\n                    if (window.HTMLMediaElement &&\n                        !('srcObject' in window.HTMLMediaElement.prototype)) {\n                        // Shim the srcObject property, once, when HTMLMediaElement is found.\n                        Object.defineProperty(window.HTMLMediaElement.prototype, 'srcObject', {\n                            get: function() {\n                                return this._srcObject;\n                            },\n                            set: function(stream) {\n                                var self = this;\n                                // Use _srcObject as a private property for this shim\n                                this._srcObject = stream;\n                                if (this.src) {\n                                    URL.revokeObjectURL(this.src);\n                                }\n\n                                if (!stream) {\n                                    this.src = '';\n                                    return undefined;\n                                }\n                                this.src = URL.createObjectURL(stream);\n                                // We need to recreate the blob url when a track is added or\n                                // removed. Doing it manually since we want to avoid a recursion.\n                                stream.addEventListener('addtrack', function() {\n                                    if (self.src) {\n                                        URL.revokeObjectURL(self.src);\n                                    }\n                                    self.src = URL.createObjectURL(stream);\n                                });\n                                stream.addEventListener('removetrack', function() {\n                                    if (self.src) {\n                                        URL.revokeObjectURL(self.src);\n                                    }\n                                    self.src = URL.createObjectURL(stream);\n                                });\n                            }\n                        });\n                    }\n                }\n            },\n\n            shimAddTrackRemoveTrackWithNative: function(window) {\n                // shim addTrack/removeTrack with native variants in order to make\n                // the interactions with legacy getLocalStreams behave as in other browsers.\n                // Keeps a mapping stream.id => [stream, rtpsenders...]\n                window.RTCPeerConnection.prototype.getLocalStreams = function() {\n                    var pc = this;\n                    this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n                    return Object.keys(this._shimmedLocalStreams).map(function(streamId) {\n                        return pc._shimmedLocalStreams[streamId][0];\n                    });\n                };\n\n                var origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n                window.RTCPeerConnection.prototype.addTrack = function(track, stream) {\n                    if (!stream) {\n                        return origAddTrack.apply(this, arguments);\n                    }\n                    this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n\n                    var sender = origAddTrack.apply(this, arguments);\n                    if (!this._shimmedLocalStreams[stream.id]) {\n                        this._shimmedLocalStreams[stream.id] = [stream, sender];\n                    } else if (this._shimmedLocalStreams[stream.id].indexOf(sender) === -1) {\n                        this._shimmedLocalStreams[stream.id].push(sender);\n                    }\n                    return sender;\n                };\n\n                var origAddStream = window.RTCPeerConnection.prototype.addStream;\n                window.RTCPeerConnection.prototype.addStream = function(stream) {\n                    var pc = this;\n                    this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n\n                    stream.getTracks().forEach(function(track) {\n                        var alreadyExists = pc.getSenders().find(function(s) {\n                            return s.track === track;\n                        });\n                        if (alreadyExists) {\n                            throw new DOMException('Track already exists.',\n                                'InvalidAccessError');\n                        }\n                    });\n                    var existingSenders = pc.getSenders();\n                    origAddStream.apply(this, arguments);\n                    var newSenders = pc.getSenders().filter(function(newSender) {\n                        return existingSenders.indexOf(newSender) === -1;\n                    });\n                    this._shimmedLocalStreams[stream.id] = [stream].concat(newSenders);\n                };\n\n                var origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n                window.RTCPeerConnection.prototype.removeStream = function(stream) {\n                    this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n                    delete this._shimmedLocalStreams[stream.id];\n                    return origRemoveStream.apply(this, arguments);\n                };\n\n                var origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n                window.RTCPeerConnection.prototype.removeTrack = function(sender) {\n                    var pc = this;\n                    this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n                    if (sender) {\n                        Object.keys(this._shimmedLocalStreams).forEach(function(streamId) {\n                            var idx = pc._shimmedLocalStreams[streamId].indexOf(sender);\n                            if (idx !== -1) {\n                                pc._shimmedLocalStreams[streamId].splice(idx, 1);\n                            }\n                            if (pc._shimmedLocalStreams[streamId].length === 1) {\n                                delete pc._shimmedLocalStreams[streamId];\n                            }\n                        });\n                    }\n                    return origRemoveTrack.apply(this, arguments);\n                };\n            },\n\n            shimAddTrackRemoveTrack: function(window) {\n                var browserDetails = utils.detectBrowser(window);\n                // shim addTrack and removeTrack.\n                if (window.RTCPeerConnection.prototype.addTrack &&\n                    browserDetails.version >= 65) {\n                    return this.shimAddTrackRemoveTrackWithNative(window);\n                }\n\n                // also shim pc.getLocalStreams when addTrack is shimmed\n                // to return the original streams.\n                var origGetLocalStreams = window.RTCPeerConnection.prototype\n                    .getLocalStreams;\n                window.RTCPeerConnection.prototype.getLocalStreams = function() {\n                    var pc = this;\n                    var nativeStreams = origGetLocalStreams.apply(this);\n                    pc._reverseStreams = pc._reverseStreams || {};\n                    return nativeStreams.map(function(stream) {\n                        return pc._reverseStreams[stream.id];\n                    });\n                };\n\n                var origAddStream = window.RTCPeerConnection.prototype.addStream;\n                window.RTCPeerConnection.prototype.addStream = function(stream) {\n                    var pc = this;\n                    pc._streams = pc._streams || {};\n                    pc._reverseStreams = pc._reverseStreams || {};\n\n                    stream.getTracks().forEach(function(track) {\n                        var alreadyExists = pc.getSenders().find(function(s) {\n                            return s.track === track;\n                        });\n                        if (alreadyExists) {\n                            throw new DOMException('Track already exists.',\n                                'InvalidAccessError');\n                        }\n                    });\n                    // Add identity mapping for consistency with addTrack.\n                    // Unless this is being used with a stream from addTrack.\n                    if (!pc._reverseStreams[stream.id]) {\n                        var newStream = new window.MediaStream(stream.getTracks());\n                        pc._streams[stream.id] = newStream;\n                        pc._reverseStreams[newStream.id] = stream;\n                        stream = newStream;\n                    }\n                    origAddStream.apply(pc, [stream]);\n                };\n\n                var origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n                window.RTCPeerConnection.prototype.removeStream = function(stream) {\n                    var pc = this;\n                    pc._streams = pc._streams || {};\n                    pc._reverseStreams = pc._reverseStreams || {};\n\n                    origRemoveStream.apply(pc, [(pc._streams[stream.id] || stream)]);\n                    delete pc._reverseStreams[(pc._streams[stream.id] ?\n                        pc._streams[stream.id].id : stream.id)];\n                    delete pc._streams[stream.id];\n                };\n\n                window.RTCPeerConnection.prototype.addTrack = function(track, stream) {\n                    var pc = this;\n                    if (pc.signalingState === 'closed') {\n                        throw new DOMException(\n                            'The RTCPeerConnection\\'s signalingState is \\'closed\\'.',\n                            'InvalidStateError');\n                    }\n                    var streams = [].slice.call(arguments, 1);\n                    if (streams.length !== 1 ||\n                        !streams[0].getTracks().find(function(t) {\n                            return t === track;\n                        })) {\n                        // this is not fully correct but all we can manage without\n                        // [[associated MediaStreams]] internal slot.\n                        throw new DOMException(\n                            'The adapter.js addTrack polyfill only supports a single ' +\n                            ' stream which is associated with the specified track.',\n                            'NotSupportedError');\n                    }\n\n                    var alreadyExists = pc.getSenders().find(function(s) {\n                        return s.track === track;\n                    });\n                    if (alreadyExists) {\n                        throw new DOMException('Track already exists.',\n                            'InvalidAccessError');\n                    }\n\n                    pc._streams = pc._streams || {};\n                    pc._reverseStreams = pc._reverseStreams || {};\n                    var oldStream = pc._streams[stream.id];\n                    if (oldStream) {\n                        // this is using odd Chrome behaviour, use with caution:\n                        // https://bugs.chromium.org/p/webrtc/issues/detail?id=7815\n                        // Note: we rely on the high-level addTrack/dtmf shim to\n                        // create the sender with a dtmf sender.\n                        oldStream.addTrack(track);\n\n                        // Trigger ONN async.\n                        Promise.resolve().then(function() {\n                            pc.dispatchEvent(new Event('negotiationneeded'));\n                        });\n                    } else {\n                        var newStream = new window.MediaStream([track]);\n                        pc._streams[stream.id] = newStream;\n                        pc._reverseStreams[newStream.id] = stream;\n                        pc.addStream(newStream);\n                    }\n                    return pc.getSenders().find(function(s) {\n                        return s.track === track;\n                    });\n                };\n\n                // replace the internal stream id with the external one and\n                // vice versa.\n                function replaceInternalStreamId(pc, description) {\n                    var sdp = description.sdp;\n                    Object.keys(pc._reverseStreams || []).forEach(function(internalId) {\n                        var externalStream = pc._reverseStreams[internalId];\n                        var internalStream = pc._streams[externalStream.id];\n                        sdp = sdp.replace(new RegExp(internalStream.id, 'g'),\n                            externalStream.id);\n                    });\n                    return new RTCSessionDescription({\n                        type: description.type,\n                        sdp: sdp\n                    });\n                }\n                function replaceExternalStreamId(pc, description) {\n                    var sdp = description.sdp;\n                    Object.keys(pc._reverseStreams || []).forEach(function(internalId) {\n                        var externalStream = pc._reverseStreams[internalId];\n                        var internalStream = pc._streams[externalStream.id];\n                        sdp = sdp.replace(new RegExp(externalStream.id, 'g'),\n                            internalStream.id);\n                    });\n                    return new RTCSessionDescription({\n                        type: description.type,\n                        sdp: sdp\n                    });\n                }\n                ['createOffer', 'createAnswer'].forEach(function(method) {\n                    var nativeMethod = window.RTCPeerConnection.prototype[method];\n                    window.RTCPeerConnection.prototype[method] = function() {\n                        var pc = this;\n                        var args = arguments;\n                        var isLegacyCall = arguments.length &&\n                            typeof arguments[0] === 'function';\n                        if (isLegacyCall) {\n                            return nativeMethod.apply(pc, [\n                                function(description) {\n                                    var desc = replaceInternalStreamId(pc, description);\n                                    args[0].apply(null, [desc]);\n                                },\n                                function(err) {\n                                    if (args[1]) {\n                                        args[1].apply(null, err);\n                                    }\n                                }, arguments[2]\n                            ]);\n                        }\n                        return nativeMethod.apply(pc, arguments)\n                            .then(function(description) {\n                                return replaceInternalStreamId(pc, description);\n                            });\n                    };\n                });\n\n                var origSetLocalDescription =\n                    window.RTCPeerConnection.prototype.setLocalDescription;\n                window.RTCPeerConnection.prototype.setLocalDescription = function() {\n                    var pc = this;\n                    if (!arguments.length || !arguments[0].type) {\n                        return origSetLocalDescription.apply(pc, arguments);\n                    }\n                    arguments[0] = replaceExternalStreamId(pc, arguments[0]);\n                    return origSetLocalDescription.apply(pc, arguments);\n                };\n\n                // TODO: mangle getStats: https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamstats-streamidentifier\n\n                var origLocalDescription = Object.getOwnPropertyDescriptor(\n                    window.RTCPeerConnection.prototype, 'localDescription');\n                Object.defineProperty(window.RTCPeerConnection.prototype,\n                    'localDescription', {\n                        get: function() {\n                            var pc = this;\n                            var description = origLocalDescription.get.apply(this);\n                            if (description.type === '') {\n                                return description;\n                            }\n                            return replaceInternalStreamId(pc, description);\n                        }\n                    });\n\n                window.RTCPeerConnection.prototype.removeTrack = function(sender) {\n                    var pc = this;\n                    if (pc.signalingState === 'closed') {\n                        throw new DOMException(\n                            'The RTCPeerConnection\\'s signalingState is \\'closed\\'.',\n                            'InvalidStateError');\n                    }\n                    // We can not yet check for sender instanceof RTCRtpSender\n                    // since we shim RTPSender. So we check if sender._pc is set.\n                    if (!sender._pc) {\n                        throw new DOMException('Argument 1 of RTCPeerConnection.removeTrack ' +\n                            'does not implement interface RTCRtpSender.', 'TypeError');\n                    }\n                    var isLocal = sender._pc === pc;\n                    if (!isLocal) {\n                        throw new DOMException('Sender was not created by this connection.',\n                            'InvalidAccessError');\n                    }\n\n                    // Search for the native stream the senders track belongs to.\n                    pc._streams = pc._streams || {};\n                    var stream;\n                    Object.keys(pc._streams).forEach(function(streamid) {\n                        var hasTrack = pc._streams[streamid].getTracks().find(function(track) {\n                            return sender.track === track;\n                        });\n                        if (hasTrack) {\n                            stream = pc._streams[streamid];\n                        }\n                    });\n\n                    if (stream) {\n                        if (stream.getTracks().length === 1) {\n                            // if this is the last track of the stream, remove the stream. This\n                            // takes care of any shimmed _senders.\n                            pc.removeStream(pc._reverseStreams[stream.id]);\n                        } else {\n                            // relying on the same odd chrome behaviour as above.\n                            stream.removeTrack(sender.track);\n                        }\n                        pc.dispatchEvent(new Event('negotiationneeded'));\n                    }\n                };\n            },\n\n            shimPeerConnection: function(window) {\n                var browserDetails = utils.detectBrowser(window);\n\n                // The RTCPeerConnection object.\n                if (!window.RTCPeerConnection && window.webkitRTCPeerConnection) {\n                    window.RTCPeerConnection = function(pcConfig, pcConstraints) {\n                        // Translate iceTransportPolicy to iceTransports,\n                        // see https://code.google.com/p/webrtc/issues/detail?id=4869\n                        // this was fixed in M56 along with unprefixing RTCPeerConnection.\n                        logging('PeerConnection');\n                        if (pcConfig && pcConfig.iceTransportPolicy) {\n                            pcConfig.iceTransports = pcConfig.iceTransportPolicy;\n                        }\n\n                        return new window.webkitRTCPeerConnection(pcConfig, pcConstraints);\n                    };\n                    window.RTCPeerConnection.prototype =\n                        window.webkitRTCPeerConnection.prototype;\n                    // wrap static methods. Currently just generateCertificate.\n                    if (window.webkitRTCPeerConnection.generateCertificate) {\n                        Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', {\n                            get: function() {\n                                return window.webkitRTCPeerConnection.generateCertificate;\n                            }\n                        });\n                    }\n                }\n\n                var origGetStats = window.RTCPeerConnection.prototype.getStats;\n                window.RTCPeerConnection.prototype.getStats = function(selector,\n                                                                       successCallback, errorCallback) {\n                    var pc = this;\n                    var args = arguments;\n\n                    // If selector is a function then we are in the old style stats so just\n                    // pass back the original getStats format to avoid breaking old users.\n                    if (arguments.length > 0 && typeof selector === 'function') {\n                        return origGetStats.apply(this, arguments);\n                    }\n\n                    // When spec-style getStats is supported, return those when called with\n                    // either no arguments or the selector argument is null.\n                    if (origGetStats.length === 0 && (arguments.length === 0 ||\n                            typeof arguments[0] !== 'function')) {\n                        return origGetStats.apply(this, []);\n                    }\n\n                    var fixChromeStats_ = function(response) {\n                        var standardReport = {};\n                        var reports = response.result();\n                        reports.forEach(function(report) {\n                            var standardStats = {\n                                id: report.id,\n                                timestamp: report.timestamp,\n                                type: {\n                                    localcandidate: 'local-candidate',\n                                    remotecandidate: 'remote-candidate'\n                                }[report.type] || report.type\n                            };\n                            report.names().forEach(function(name) {\n                                standardStats[name] = report.stat(name);\n                            });\n                            standardReport[standardStats.id] = standardStats;\n                        });\n\n                        return standardReport;\n                    };\n\n                    // shim getStats with maplike support\n                    var makeMapStats = function(stats) {\n                        return new Map(Object.keys(stats).map(function(key) {\n                            return [key, stats[key]];\n                        }));\n                    };\n\n                    if (arguments.length >= 2) {\n                        var successCallbackWrapper_ = function(response) {\n                            args[1](makeMapStats(fixChromeStats_(response)));\n                        };\n\n                        return origGetStats.apply(this, [successCallbackWrapper_,\n                            arguments[0]]);\n                    }\n\n                    // promise-support\n                    return new Promise(function(resolve, reject) {\n                        origGetStats.apply(pc, [\n                            function(response) {\n                                resolve(makeMapStats(fixChromeStats_(response)));\n                            }, reject]);\n                    }).then(successCallback, errorCallback);\n                };\n\n                // add promise support -- natively available in Chrome 51\n                if (browserDetails.version < 51) {\n                    ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate']\n                        .forEach(function(method) {\n                            var nativeMethod = window.RTCPeerConnection.prototype[method];\n                            window.RTCPeerConnection.prototype[method] = function() {\n                                var args = arguments;\n                                var pc = this;\n                                var promise = new Promise(function(resolve, reject) {\n                                    nativeMethod.apply(pc, [args[0], resolve, reject]);\n                                });\n                                if (args.length < 2) {\n                                    return promise;\n                                }\n                                return promise.then(function() {\n                                        args[1].apply(null, []);\n                                    },\n                                    function(err) {\n                                        if (args.length >= 3) {\n                                            args[2].apply(null, [err]);\n                                        }\n                                    });\n                            };\n                        });\n                }\n\n                // promise support for createOffer and createAnswer. Available (without\n                // bugs) since M52: crbug/619289\n                if (browserDetails.version < 52) {\n                    ['createOffer', 'createAnswer'].forEach(function(method) {\n                        var nativeMethod = window.RTCPeerConnection.prototype[method];\n                        window.RTCPeerConnection.prototype[method] = function() {\n                            var pc = this;\n                            if (arguments.length < 1 || (arguments.length === 1 &&\n                                    typeof arguments[0] === 'object')) {\n                                var opts = arguments.length === 1 ? arguments[0] : undefined;\n                                return new Promise(function(resolve, reject) {\n                                    nativeMethod.apply(pc, [resolve, reject, opts]);\n                                });\n                            }\n                            return nativeMethod.apply(this, arguments);\n                        };\n                    });\n                }\n\n                // shim implicit creation of RTCSessionDescription/RTCIceCandidate\n                ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate']\n                    .forEach(function(method) {\n                        var nativeMethod = window.RTCPeerConnection.prototype[method];\n                        window.RTCPeerConnection.prototype[method] = function() {\n                            arguments[0] = new ((method === 'addIceCandidate') ?\n                                window.RTCIceCandidate :\n                                window.RTCSessionDescription)(arguments[0]);\n                            return nativeMethod.apply(this, arguments);\n                        };\n                    });\n\n                // support for addIceCandidate(null or undefined)\n                var nativeAddIceCandidate =\n                    window.RTCPeerConnection.prototype.addIceCandidate;\n                window.RTCPeerConnection.prototype.addIceCandidate = function() {\n                    if (!arguments[0]) {\n                        if (arguments[1]) {\n                            arguments[1].apply(null);\n                        }\n                        return Promise.resolve();\n                    }\n                    return nativeAddIceCandidate.apply(this, arguments);\n                };\n            },\n\n            fixNegotiationNeeded: function(window) {\n                utils.wrapPeerConnectionEvent(window, 'negotiationneeded', function(e) {\n                    var pc = e.target;\n                    if (pc.signalingState !== 'stable') {\n                        return;\n                    }\n                    return e;\n                });\n            },\n\n            shimGetDisplayMedia: function(window, getSourceId) {\n                if ('getDisplayMedia' in window.navigator) {\n                    return;\n                }\n                // getSourceId is a function that returns a promise resolving with\n                // the sourceId of the screen/window/tab to be shared.\n                if (typeof getSourceId !== 'function') {\n                    console.error('shimGetDisplayMedia: getSourceId argument is not ' +\n                        'a function');\n                    return;\n                }\n                navigator.getDisplayMedia = function(constraints) {\n                    return getSourceId(constraints)\n                        .then(function(sourceId) {\n                            constraints.video = {\n                                mandatory: {\n                                    chromeMediaSource: 'desktop',\n                                    chromeMediaSourceId: sourceId,\n                                    maxFrameRate: constraints.video.frameRate || 3\n                                }\n                            };\n                            return navigator.mediaDevices.getUserMedia(constraints);\n                        });\n                };\n            }\n        };\n\n    },{\"../utils.js\":14,\"./getusermedia\":6}],6:[function(require,module,exports){\n        /*\n         *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n         *\n         *  Use of this source code is governed by a BSD-style license\n         *  that can be found in the LICENSE file in the root of the source\n         *  tree.\n         */\n        /* eslint-env node */\n        'use strict';\n        var utils = require('../utils.js');\n        var logging = utils.log;\n\n        // Expose public methods.\n        module.exports = function(window) {\n            var browserDetails = utils.detectBrowser(window);\n            var navigator = window && window.navigator;\n\n            var constraintsToChrome_ = function(c) {\n                if (typeof c !== 'object' || c.mandatory || c.optional) {\n                    return c;\n                }\n                var cc = {};\n                Object.keys(c).forEach(function(key) {\n                    if (key === 'require' || key === 'advanced' || key === 'mediaSource') {\n                        return;\n                    }\n                    var r = (typeof c[key] === 'object') ? c[key] : {ideal: c[key]};\n                    if (r.exact !== undefined && typeof r.exact === 'number') {\n                        r.min = r.max = r.exact;\n                    }\n                    var oldname_ = function(prefix, name) {\n                        if (prefix) {\n                            return prefix + name.charAt(0).toUpperCase() + name.slice(1);\n                        }\n                        return (name === 'deviceId') ? 'sourceId' : name;\n                    };\n                    if (r.ideal !== undefined) {\n                        cc.optional = cc.optional || [];\n                        var oc = {};\n                        if (typeof r.ideal === 'number') {\n                            oc[oldname_('min', key)] = r.ideal;\n                            cc.optional.push(oc);\n                            oc = {};\n                            oc[oldname_('max', key)] = r.ideal;\n                            cc.optional.push(oc);\n                        } else {\n                            oc[oldname_('', key)] = r.ideal;\n                            cc.optional.push(oc);\n                        }\n                    }\n                    if (r.exact !== undefined && typeof r.exact !== 'number') {\n                        cc.mandatory = cc.mandatory || {};\n                        cc.mandatory[oldname_('', key)] = r.exact;\n                    } else {\n                        ['min', 'max'].forEach(function(mix) {\n                            if (r[mix] !== undefined) {\n                                cc.mandatory = cc.mandatory || {};\n                                cc.mandatory[oldname_(mix, key)] = r[mix];\n                            }\n                        });\n                    }\n                });\n                if (c.advanced) {\n                    cc.optional = (cc.optional || []).concat(c.advanced);\n                }\n                return cc;\n            };\n\n            var shimConstraints_ = function(constraints, func) {\n                if (browserDetails.version >= 61) {\n                    return func(constraints);\n                }\n                constraints = JSON.parse(JSON.stringify(constraints));\n                if (constraints && typeof constraints.audio === 'object') {\n                    var remap = function(obj, a, b) {\n                        if (a in obj && !(b in obj)) {\n                            obj[b] = obj[a];\n                            delete obj[a];\n                        }\n                    };\n                    constraints = JSON.parse(JSON.stringify(constraints));\n                    remap(constraints.audio, 'autoGainControl', 'googAutoGainControl');\n                    remap(constraints.audio, 'noiseSuppression', 'googNoiseSuppression');\n                    constraints.audio = constraintsToChrome_(constraints.audio);\n                }\n                if (constraints && typeof constraints.video === 'object') {\n                    // Shim facingMode for mobile & surface pro.\n                    var face = constraints.video.facingMode;\n                    face = face && ((typeof face === 'object') ? face : {ideal: face});\n                    var getSupportedFacingModeLies = browserDetails.version < 66;\n\n                    if ((face && (face.exact === 'user' || face.exact === 'environment' ||\n                            face.ideal === 'user' || face.ideal === 'environment')) &&\n                        !(navigator.mediaDevices.getSupportedConstraints &&\n                            navigator.mediaDevices.getSupportedConstraints().facingMode &&\n                            !getSupportedFacingModeLies)) {\n                        delete constraints.video.facingMode;\n                        var matches;\n                        if (face.exact === 'environment' || face.ideal === 'environment') {\n                            matches = ['back', 'rear'];\n                        } else if (face.exact === 'user' || face.ideal === 'user') {\n                            matches = ['front'];\n                        }\n                        if (matches) {\n                            // Look for matches in label, or use last cam for back (typical).\n                            return navigator.mediaDevices.enumerateDevices()\n                                .then(function(devices) {\n                                    devices = devices.filter(function(d) {\n                                        return d.kind === 'videoinput';\n                                    });\n                                    var dev = devices.find(function(d) {\n                                        return matches.some(function(match) {\n                                            return d.label.toLowerCase().indexOf(match) !== -1;\n                                        });\n                                    });\n                                    if (!dev && devices.length && matches.indexOf('back') !== -1) {\n                                        dev = devices[devices.length - 1]; // more likely the back cam\n                                    }\n                                    if (dev) {\n                                        constraints.video.deviceId = face.exact ? {exact: dev.deviceId} :\n                                            {ideal: dev.deviceId};\n                                    }\n                                    constraints.video = constraintsToChrome_(constraints.video);\n                                    logging('chrome: ' + JSON.stringify(constraints));\n                                    return func(constraints);\n                                });\n                        }\n                    }\n                    constraints.video = constraintsToChrome_(constraints.video);\n                }\n                logging('chrome: ' + JSON.stringify(constraints));\n                return func(constraints);\n            };\n\n            var shimError_ = function(e) {\n                if (browserDetails.version >= 64) {\n                    return e;\n                }\n                return {\n                    name: {\n                        PermissionDeniedError: 'NotAllowedError',\n                        PermissionDismissedError: 'NotAllowedError',\n                        InvalidStateError: 'NotAllowedError',\n                        DevicesNotFoundError: 'NotFoundError',\n                        ConstraintNotSatisfiedError: 'OverconstrainedError',\n                        TrackStartError: 'NotReadableError',\n                        MediaDeviceFailedDueToShutdown: 'NotAllowedError',\n                        MediaDeviceKillSwitchOn: 'NotAllowedError',\n                        TabCaptureError: 'AbortError',\n                        ScreenCaptureError: 'AbortError',\n                        DeviceCaptureError: 'AbortError'\n                    }[e.name] || e.name,\n                    message: e.message,\n                    constraint: e.constraint || e.constraintName,\n                    toString: function() {\n                        return this.name + (this.message && ': ') + this.message;\n                    }\n                };\n            };\n\n            var getUserMedia_ = function(constraints, onSuccess, onError) {\n                shimConstraints_(constraints, function(c) {\n                    navigator.webkitGetUserMedia(c, onSuccess, function(e) {\n                        if (onError) {\n                            onError(shimError_(e));\n                        }\n                    });\n                });\n            };\n\n            navigator.getUserMedia = getUserMedia_;\n\n            // Returns the result of getUserMedia as a Promise.\n            var getUserMediaPromise_ = function(constraints) {\n                return new Promise(function(resolve, reject) {\n                    navigator.getUserMedia(constraints, resolve, reject);\n                });\n            };\n\n            if (!navigator.mediaDevices) {\n                navigator.mediaDevices = {\n                    getUserMedia: getUserMediaPromise_,\n                    enumerateDevices: function() {\n                        return new Promise(function(resolve) {\n                            var kinds = {audio: 'audioinput', video: 'videoinput'};\n                            return window.MediaStreamTrack.getSources(function(devices) {\n                                resolve(devices.map(function(device) {\n                                    return {label: device.label,\n                                        kind: kinds[device.kind],\n                                        deviceId: device.id,\n                                        groupId: ''};\n                                }));\n                            });\n                        });\n                    },\n                    getSupportedConstraints: function() {\n                        return {\n                            deviceId: true, echoCancellation: true, facingMode: true,\n                            frameRate: true, height: true, width: true\n                        };\n                    }\n                };\n            }\n\n            // A shim for getUserMedia method on the mediaDevices object.\n            // TODO(KaptenJansson) remove once implemented in Chrome stable.\n            if (!navigator.mediaDevices.getUserMedia) {\n                navigator.mediaDevices.getUserMedia = function(constraints) {\n                    return getUserMediaPromise_(constraints);\n                };\n            } else {\n                // Even though Chrome 45 has navigator.mediaDevices and a getUserMedia\n                // function which returns a Promise, it does not accept spec-style\n                // constraints.\n                var origGetUserMedia = navigator.mediaDevices.getUserMedia.\n                bind(navigator.mediaDevices);\n                navigator.mediaDevices.getUserMedia = function(cs) {\n                    return shimConstraints_(cs, function(c) {\n                        return origGetUserMedia(c).then(function(stream) {\n                            if (c.audio && !stream.getAudioTracks().length ||\n                                c.video && !stream.getVideoTracks().length) {\n                                stream.getTracks().forEach(function(track) {\n                                    track.stop();\n                                });\n                                throw new DOMException('', 'NotFoundError');\n                            }\n                            return stream;\n                        }, function(e) {\n                            return Promise.reject(shimError_(e));\n                        });\n                    });\n                };\n            }\n\n            // Dummy devicechange event methods.\n            // TODO(KaptenJansson) remove once implemented in Chrome stable.\n            if (typeof navigator.mediaDevices.addEventListener === 'undefined') {\n                navigator.mediaDevices.addEventListener = function() {\n                    logging('Dummy mediaDevices.addEventListener called.');\n                };\n            }\n            if (typeof navigator.mediaDevices.removeEventListener === 'undefined') {\n                navigator.mediaDevices.removeEventListener = function() {\n                    logging('Dummy mediaDevices.removeEventListener called.');\n                };\n            }\n        };\n\n    },{\"../utils.js\":14}],7:[function(require,module,exports){\n        /*\n         *  Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.\n         *\n         *  Use of this source code is governed by a BSD-style license\n         *  that can be found in the LICENSE file in the root of the source\n         *  tree.\n         */\n        /* eslint-env node */\n        'use strict';\n\n        var SDPUtils = require('sdp');\n        var utils = require('./utils');\n\n        module.exports = {\n            shimRTCIceCandidate: function(window) {\n                // foundation is arbitrarily chosen as an indicator for full support for\n                // https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface\n                if (!window.RTCIceCandidate || (window.RTCIceCandidate && 'foundation' in\n                        window.RTCIceCandidate.prototype)) {\n                    return;\n                }\n\n                var NativeRTCIceCandidate = window.RTCIceCandidate;\n                window.RTCIceCandidate = function(args) {\n                    // Remove the a= which shouldn't be part of the candidate string.\n                    if (typeof args === 'object' && args.candidate &&\n                        args.candidate.indexOf('a=') === 0) {\n                        args = JSON.parse(JSON.stringify(args));\n                        args.candidate = args.candidate.substr(2);\n                    }\n\n                    if (args.candidate && args.candidate.length) {\n                        // Augment the native candidate with the parsed fields.\n                        var nativeCandidate = new NativeRTCIceCandidate(args);\n                        var parsedCandidate = SDPUtils.parseCandidate(args.candidate);\n                        var augmentedCandidate = Object.assign(nativeCandidate,\n                            parsedCandidate);\n\n                        // Add a serializer that does not serialize the extra attributes.\n                        augmentedCandidate.toJSON = function() {\n                            return {\n                                candidate: augmentedCandidate.candidate,\n                                sdpMid: augmentedCandidate.sdpMid,\n                                sdpMLineIndex: augmentedCandidate.sdpMLineIndex,\n                                usernameFragment: augmentedCandidate.usernameFragment,\n                            };\n                        };\n                        return augmentedCandidate;\n                    }\n                    return new NativeRTCIceCandidate(args);\n                };\n                window.RTCIceCandidate.prototype = NativeRTCIceCandidate.prototype;\n\n                // Hook up the augmented candidate in onicecandidate and\n                // addEventListener('icecandidate', ...)\n                utils.wrapPeerConnectionEvent(window, 'icecandidate', function(e) {\n                    if (e.candidate) {\n                        Object.defineProperty(e, 'candidate', {\n                            value: new window.RTCIceCandidate(e.candidate),\n                            writable: 'false'\n                        });\n                    }\n                    return e;\n                });\n            },\n\n            // shimCreateObjectURL must be called before shimSourceObject to avoid loop.\n\n            shimCreateObjectURL: function(window) {\n                var URL = window && window.URL;\n\n                if (!(typeof window === 'object' && window.HTMLMediaElement &&\n                        'srcObject' in window.HTMLMediaElement.prototype &&\n                        URL.createObjectURL && URL.revokeObjectURL)) {\n                    // Only shim CreateObjectURL using srcObject if srcObject exists.\n                    return undefined;\n                }\n\n                var nativeCreateObjectURL = URL.createObjectURL.bind(URL);\n                var nativeRevokeObjectURL = URL.revokeObjectURL.bind(URL);\n                var streams = new Map(), newId = 0;\n\n                URL.createObjectURL = function(stream) {\n                    if ('getTracks' in stream) {\n                        var url = 'polyblob:' + (++newId);\n                        streams.set(url, stream);\n                        utils.deprecated('URL.createObjectURL(stream)',\n                            'elem.srcObject = stream');\n                        return url;\n                    }\n                    return nativeCreateObjectURL(stream);\n                };\n                URL.revokeObjectURL = function(url) {\n                    nativeRevokeObjectURL(url);\n                    streams.delete(url);\n                };\n\n                var dsc = Object.getOwnPropertyDescriptor(window.HTMLMediaElement.prototype,\n                    'src');\n                Object.defineProperty(window.HTMLMediaElement.prototype, 'src', {\n                    get: function() {\n                        return dsc.get.apply(this);\n                    },\n                    set: function(url) {\n                        this.srcObject = streams.get(url) || null;\n                        return dsc.set.apply(this, [url]);\n                    }\n                });\n\n                var nativeSetAttribute = window.HTMLMediaElement.prototype.setAttribute;\n                window.HTMLMediaElement.prototype.setAttribute = function() {\n                    if (arguments.length === 2 &&\n                        ('' + arguments[0]).toLowerCase() === 'src') {\n                        this.srcObject = streams.get(arguments[1]) || null;\n                    }\n                    return nativeSetAttribute.apply(this, arguments);\n                };\n            },\n\n            shimMaxMessageSize: function(window) {\n                if (window.RTCSctpTransport || !window.RTCPeerConnection) {\n                    return;\n                }\n                var browserDetails = utils.detectBrowser(window);\n\n                if (!('sctp' in window.RTCPeerConnection.prototype)) {\n                    Object.defineProperty(window.RTCPeerConnection.prototype, 'sctp', {\n                        get: function() {\n                            return typeof this._sctp === 'undefined' ? null : this._sctp;\n                        }\n                    });\n                }\n\n                var sctpInDescription = function(description) {\n                    var sections = SDPUtils.splitSections(description.sdp);\n                    sections.shift();\n                    return sections.some(function(mediaSection) {\n                        var mLine = SDPUtils.parseMLine(mediaSection);\n                        return mLine && mLine.kind === 'application'\n                            && mLine.protocol.indexOf('SCTP') !== -1;\n                    });\n                };\n\n                var getRemoteFirefoxVersion = function(description) {\n                    // TODO: Is there a better solution for detecting Firefox?\n                    var match = description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\\d+)/);\n                    if (match === null || match.length < 2) {\n                        return -1;\n                    }\n                    var version = parseInt(match[1], 10);\n                    // Test for NaN (yes, this is ugly)\n                    return version !== version ? -1 : version;\n                };\n\n                var getCanSendMaxMessageSize = function(remoteIsFirefox) {\n                    // Every implementation we know can send at least 64 KiB.\n                    // Note: Although Chrome is technically able to send up to 256 KiB, the\n                    //       data does not reach the other peer reliably.\n                    //       See: https://bugs.chromium.org/p/webrtc/issues/detail?id=8419\n                    var canSendMaxMessageSize = 65536;\n                    if (browserDetails.browser === 'firefox') {\n                        if (browserDetails.version < 57) {\n                            if (remoteIsFirefox === -1) {\n                                // FF < 57 will send in 16 KiB chunks using the deprecated PPID\n                                // fragmentation.\n                                canSendMaxMessageSize = 16384;\n                            } else {\n                                // However, other FF (and RAWRTC) can reassemble PPID-fragmented\n                                // messages. Thus, supporting ~2 GiB when sending.\n                                canSendMaxMessageSize = 2147483637;\n                            }\n                        } else if (browserDetails.version < 60) {\n                            // Currently, all FF >= 57 will reset the remote maximum message size\n                            // to the default value when a data channel is created at a later\n                            // stage. :(\n                            // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n                            canSendMaxMessageSize =\n                                browserDetails.version === 57 ? 65535 : 65536;\n                        } else {\n                            // FF >= 60 supports sending ~2 GiB\n                            canSendMaxMessageSize = 2147483637;\n                        }\n                    }\n                    return canSendMaxMessageSize;\n                };\n\n                var getMaxMessageSize = function(description, remoteIsFirefox) {\n                    // Note: 65536 bytes is the default value from the SDP spec. Also,\n                    //       every implementation we know supports receiving 65536 bytes.\n                    var maxMessageSize = 65536;\n\n                    // FF 57 has a slightly incorrect default remote max message size, so\n                    // we need to adjust it here to avoid a failure when sending.\n                    // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1425697\n                    if (browserDetails.browser === 'firefox'\n                        && browserDetails.version === 57) {\n                        maxMessageSize = 65535;\n                    }\n\n                    var match = SDPUtils.matchPrefix(description.sdp, 'a=max-message-size:');\n                    if (match.length > 0) {\n                        maxMessageSize = parseInt(match[0].substr(19), 10);\n                    } else if (browserDetails.browser === 'firefox' &&\n                        remoteIsFirefox !== -1) {\n                        // If the maximum message size is not present in the remote SDP and\n                        // both local and remote are Firefox, the remote peer can receive\n                        // ~2 GiB.\n                        maxMessageSize = 2147483637;\n                    }\n                    return maxMessageSize;\n                };\n\n                var origSetRemoteDescription =\n                    window.RTCPeerConnection.prototype.setRemoteDescription;\n                window.RTCPeerConnection.prototype.setRemoteDescription = function() {\n                    var pc = this;\n                    pc._sctp = null;\n\n                    if (sctpInDescription(arguments[0])) {\n                        // Check if the remote is FF.\n                        var isFirefox = getRemoteFirefoxVersion(arguments[0]);\n\n                        // Get the maximum message size the local peer is capable of sending\n                        var canSendMMS = getCanSendMaxMessageSize(isFirefox);\n\n                        // Get the maximum message size of the remote peer.\n                        var remoteMMS = getMaxMessageSize(arguments[0], isFirefox);\n\n                        // Determine final maximum message size\n                        var maxMessageSize;\n                        if (canSendMMS === 0 && remoteMMS === 0) {\n                            maxMessageSize = Number.POSITIVE_INFINITY;\n                        } else if (canSendMMS === 0 || remoteMMS === 0) {\n                            maxMessageSize = Math.max(canSendMMS, remoteMMS);\n                        } else {\n                            maxMessageSize = Math.min(canSendMMS, remoteMMS);\n                        }\n\n                        // Create a dummy RTCSctpTransport object and the 'maxMessageSize'\n                        // attribute.\n                        var sctp = {};\n                        Object.defineProperty(sctp, 'maxMessageSize', {\n                            get: function() {\n                                return maxMessageSize;\n                            }\n                        });\n                        pc._sctp = sctp;\n                    }\n\n                    return origSetRemoteDescription.apply(pc, arguments);\n                };\n            },\n\n            shimSendThrowTypeError: function(window) {\n                if (!(window.RTCPeerConnection &&\n                        'createDataChannel' in window.RTCPeerConnection.prototype)) {\n                    return;\n                }\n\n                // Note: Although Firefox >= 57 has a native implementation, the maximum\n                //       message size can be reset for all data channels at a later stage.\n                //       See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n\n                function wrapDcSend(dc, pc) {\n                    var origDataChannelSend = dc.send;\n                    dc.send = function() {\n                        var data = arguments[0];\n                        var length = data.length || data.size || data.byteLength;\n                        if (dc.readyState === 'open' &&\n                            pc.sctp && length > pc.sctp.maxMessageSize) {\n                            throw new TypeError('Message too large (can send a maximum of ' +\n                                pc.sctp.maxMessageSize + ' bytes)');\n                        }\n                        return origDataChannelSend.apply(dc, arguments);\n                    };\n                }\n                var origCreateDataChannel =\n                    window.RTCPeerConnection.prototype.createDataChannel;\n                window.RTCPeerConnection.prototype.createDataChannel = function() {\n                    var pc = this;\n                    var dataChannel = origCreateDataChannel.apply(pc, arguments);\n                    wrapDcSend(dataChannel, pc);\n                    return dataChannel;\n                };\n                utils.wrapPeerConnectionEvent(window, 'datachannel', function(e) {\n                    wrapDcSend(e.channel, e.target);\n                    return e;\n                });\n            }\n        };\n\n    },{\"./utils\":14,\"sdp\":2}],8:[function(require,module,exports){\n        /*\n         *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n         *\n         *  Use of this source code is governed by a BSD-style license\n         *  that can be found in the LICENSE file in the root of the source\n         *  tree.\n         */\n        /* eslint-env node */\n        'use strict';\n\n        var utils = require('../utils');\n        var filterIceServers = require('./filtericeservers');\n        var shimRTCPeerConnection = require('rtcpeerconnection-shim');\n\n        module.exports = {\n            shimGetUserMedia: require('./getusermedia'),\n            shimPeerConnection: function(window) {\n                var browserDetails = utils.detectBrowser(window);\n\n                if (window.RTCIceGatherer) {\n                    if (!window.RTCIceCandidate) {\n                        window.RTCIceCandidate = function(args) {\n                            return args;\n                        };\n                    }\n                    if (!window.RTCSessionDescription) {\n                        window.RTCSessionDescription = function(args) {\n                            return args;\n                        };\n                    }\n                    // this adds an additional event listener to MediaStrackTrack that signals\n                    // when a tracks enabled property was changed. Workaround for a bug in\n                    // addStream, see below. No longer required in 15025+\n                    if (browserDetails.version < 15025) {\n                        var origMSTEnabled = Object.getOwnPropertyDescriptor(\n                            window.MediaStreamTrack.prototype, 'enabled');\n                        Object.defineProperty(window.MediaStreamTrack.prototype, 'enabled', {\n                            set: function(value) {\n                                origMSTEnabled.set.call(this, value);\n                                var ev = new Event('enabled');\n                                ev.enabled = value;\n                                this.dispatchEvent(ev);\n                            }\n                        });\n                    }\n                }\n\n                // ORTC defines the DTMF sender a bit different.\n                // https://github.com/w3c/ortc/issues/714\n                if (window.RTCRtpSender && !('dtmf' in window.RTCRtpSender.prototype)) {\n                    Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', {\n                        get: function() {\n                            if (this._dtmf === undefined) {\n                                if (this.track.kind === 'audio') {\n                                    this._dtmf = new window.RTCDtmfSender(this);\n                                } else if (this.track.kind === 'video') {\n                                    this._dtmf = null;\n                                }\n                            }\n                            return this._dtmf;\n                        }\n                    });\n                }\n                // Edge currently only implements the RTCDtmfSender, not the\n                // RTCDTMFSender alias. See http://draft.ortc.org/#rtcdtmfsender2*\n                if (window.RTCDtmfSender && !window.RTCDTMFSender) {\n                    window.RTCDTMFSender = window.RTCDtmfSender;\n                }\n\n                var RTCPeerConnectionShim = shimRTCPeerConnection(window,\n                    browserDetails.version);\n                window.RTCPeerConnection = function(config) {\n                    if (config && config.iceServers) {\n                        config.iceServers = filterIceServers(config.iceServers);\n                    }\n                    return new RTCPeerConnectionShim(config);\n                };\n                window.RTCPeerConnection.prototype = RTCPeerConnectionShim.prototype;\n            },\n            shimReplaceTrack: function(window) {\n                // ORTC has replaceTrack -- https://github.com/w3c/ortc/issues/614\n                if (window.RTCRtpSender &&\n                    !('replaceTrack' in window.RTCRtpSender.prototype)) {\n                    window.RTCRtpSender.prototype.replaceTrack =\n                        window.RTCRtpSender.prototype.setTrack;\n                }\n            }\n        };\n\n    },{\"../utils\":14,\"./filtericeservers\":9,\"./getusermedia\":10,\"rtcpeerconnection-shim\":1}],9:[function(require,module,exports){\n        /*\n         *  Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.\n         *\n         *  Use of this source code is governed by a BSD-style license\n         *  that can be found in the LICENSE file in the root of the source\n         *  tree.\n         */\n        /* eslint-env node */\n        'use strict';\n\n        var utils = require('../utils');\n        // Edge does not like\n        // 1) stun: filtered after 14393 unless ?transport=udp is present\n        // 2) turn: that does not have all of turn:host:port?transport=udp\n        // 3) turn: with ipv6 addresses\n        // 4) turn: occurring muliple times\n        module.exports = function(iceServers, edgeVersion) {\n            var hasTurn = false;\n            iceServers = JSON.parse(JSON.stringify(iceServers));\n            return iceServers.filter(function(server) {\n                if (server && (server.urls || server.url)) {\n                    var urls = server.urls || server.url;\n                    if (server.url && !server.urls) {\n                        utils.deprecated('RTCIceServer.url', 'RTCIceServer.urls');\n                    }\n                    var isString = typeof urls === 'string';\n                    if (isString) {\n                        urls = [urls];\n                    }\n                    urls = urls.filter(function(url) {\n                        var validTurn = url.indexOf('turn:') === 0 &&\n                            url.indexOf('transport=udp') !== -1 &&\n                            url.indexOf('turn:[') === -1 &&\n                            !hasTurn;\n\n                        if (validTurn) {\n                            hasTurn = true;\n                            return true;\n                        }\n                        return url.indexOf('stun:') === 0 && edgeVersion >= 14393 &&\n                            url.indexOf('?transport=udp') === -1;\n                    });\n\n                    delete server.url;\n                    server.urls = isString ? urls[0] : urls;\n                    return !!urls.length;\n                }\n            });\n        };\n\n    },{\"../utils\":14}],10:[function(require,module,exports){\n        /*\n         *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n         *\n         *  Use of this source code is governed by a BSD-style license\n         *  that can be found in the LICENSE file in the root of the source\n         *  tree.\n         */\n        /* eslint-env node */\n        'use strict';\n\n        // Expose public methods.\n        module.exports = function(window) {\n            var navigator = window && window.navigator;\n\n            var shimError_ = function(e) {\n                return {\n                    name: {PermissionDeniedError: 'NotAllowedError'}[e.name] || e.name,\n                    message: e.message,\n                    constraint: e.constraint,\n                    toString: function() {\n                        return this.name;\n                    }\n                };\n            };\n\n            // getUserMedia error shim.\n            var origGetUserMedia = navigator.mediaDevices.getUserMedia.\n            bind(navigator.mediaDevices);\n            navigator.mediaDevices.getUserMedia = function(c) {\n                return origGetUserMedia(c).catch(function(e) {\n                    return Promise.reject(shimError_(e));\n                });\n            };\n        };\n\n    },{}],11:[function(require,module,exports){\n        /*\n         *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n         *\n         *  Use of this source code is governed by a BSD-style license\n         *  that can be found in the LICENSE file in the root of the source\n         *  tree.\n         */\n        /* eslint-env node */\n        'use strict';\n\n        var utils = require('../utils');\n\n        module.exports = {\n            shimGetUserMedia: require('./getusermedia'),\n            shimOnTrack: function(window) {\n                if (typeof window === 'object' && window.RTCPeerConnection && !('ontrack' in\n                        window.RTCPeerConnection.prototype)) {\n                    Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', {\n                        get: function() {\n                            return this._ontrack;\n                        },\n                        set: function(f) {\n                            if (this._ontrack) {\n                                this.removeEventListener('track', this._ontrack);\n                                this.removeEventListener('addstream', this._ontrackpoly);\n                            }\n                            this.addEventListener('track', this._ontrack = f);\n                            this.addEventListener('addstream', this._ontrackpoly = function(e) {\n                                e.stream.getTracks().forEach(function(track) {\n                                    var event = new Event('track');\n                                    event.track = track;\n                                    event.receiver = {track: track};\n                                    event.transceiver = {receiver: event.receiver};\n                                    event.streams = [e.stream];\n                                    this.dispatchEvent(event);\n                                }.bind(this));\n                            }.bind(this));\n                        },\n                        enumerable: true,\n                        configurable: true\n                    });\n                }\n                if (typeof window === 'object' && window.RTCTrackEvent &&\n                    ('receiver' in window.RTCTrackEvent.prototype) &&\n                    !('transceiver' in window.RTCTrackEvent.prototype)) {\n                    Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n                        get: function() {\n                            return {receiver: this.receiver};\n                        }\n                    });\n                }\n            },\n\n            shimSourceObject: function(window) {\n                // Firefox has supported mozSrcObject since FF22, unprefixed in 42.\n                if (typeof window === 'object') {\n                    if (window.HTMLMediaElement &&\n                        !('srcObject' in window.HTMLMediaElement.prototype)) {\n                        // Shim the srcObject property, once, when HTMLMediaElement is found.\n                        Object.defineProperty(window.HTMLMediaElement.prototype, 'srcObject', {\n                            get: function() {\n                                return this.mozSrcObject;\n                            },\n                            set: function(stream) {\n                                this.mozSrcObject = stream;\n                            }\n                        });\n                    }\n                }\n            },\n\n            shimPeerConnection: function(window) {\n                var browserDetails = utils.detectBrowser(window);\n\n                if (typeof window !== 'object' || !(window.RTCPeerConnection ||\n                        window.mozRTCPeerConnection)) {\n                    return; // probably media.peerconnection.enabled=false in about:config\n                }\n                // The RTCPeerConnection object.\n                if (!window.RTCPeerConnection) {\n                    window.RTCPeerConnection = function(pcConfig, pcConstraints) {\n                        if (browserDetails.version < 38) {\n                            // .urls is not supported in FF < 38.\n                            // create RTCIceServers with a single url.\n                            if (pcConfig && pcConfig.iceServers) {\n                                var newIceServers = [];\n                                for (var i = 0; i < pcConfig.iceServers.length; i++) {\n                                    var server = pcConfig.iceServers[i];\n                                    if (server.hasOwnProperty('urls')) {\n                                        for (var j = 0; j < server.urls.length; j++) {\n                                            var newServer = {\n                                                url: server.urls[j]\n                                            };\n                                            if (server.urls[j].indexOf('turn') === 0) {\n                                                newServer.username = server.username;\n                                                newServer.credential = server.credential;\n                                            }\n                                            newIceServers.push(newServer);\n                                        }\n                                    } else {\n                                        newIceServers.push(pcConfig.iceServers[i]);\n                                    }\n                                }\n                                pcConfig.iceServers = newIceServers;\n                            }\n                        }\n                        return new window.mozRTCPeerConnection(pcConfig, pcConstraints);\n                    };\n                    window.RTCPeerConnection.prototype =\n                        window.mozRTCPeerConnection.prototype;\n\n                    // wrap static methods. Currently just generateCertificate.\n                    if (window.mozRTCPeerConnection.generateCertificate) {\n                        Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', {\n                            get: function() {\n                                return window.mozRTCPeerConnection.generateCertificate;\n                            }\n                        });\n                    }\n\n                    window.RTCSessionDescription = window.mozRTCSessionDescription;\n                    window.RTCIceCandidate = window.mozRTCIceCandidate;\n                }\n\n                // shim away need for obsolete RTCIceCandidate/RTCSessionDescription.\n                ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate']\n                    .forEach(function(method) {\n                        var nativeMethod = window.RTCPeerConnection.prototype[method];\n                        window.RTCPeerConnection.prototype[method] = function() {\n                            arguments[0] = new ((method === 'addIceCandidate') ?\n                                window.RTCIceCandidate :\n                                window.RTCSessionDescription)(arguments[0]);\n                            return nativeMethod.apply(this, arguments);\n                        };\n                    });\n\n                // support for addIceCandidate(null or undefined)\n                var nativeAddIceCandidate =\n                    window.RTCPeerConnection.prototype.addIceCandidate;\n                window.RTCPeerConnection.prototype.addIceCandidate = function() {\n                    if (!arguments[0]) {\n                        if (arguments[1]) {\n                            arguments[1].apply(null);\n                        }\n                        return Promise.resolve();\n                    }\n                    return nativeAddIceCandidate.apply(this, arguments);\n                };\n\n                // shim getStats with maplike support\n                var makeMapStats = function(stats) {\n                    var map = new Map();\n                    Object.keys(stats).forEach(function(key) {\n                        map.set(key, stats[key]);\n                        map[key] = stats[key];\n                    });\n                    return map;\n                };\n\n                var modernStatsTypes = {\n                    inboundrtp: 'inbound-rtp',\n                    outboundrtp: 'outbound-rtp',\n                    candidatepair: 'candidate-pair',\n                    localcandidate: 'local-candidate',\n                    remotecandidate: 'remote-candidate'\n                };\n\n                var nativeGetStats = window.RTCPeerConnection.prototype.getStats;\n                window.RTCPeerConnection.prototype.getStats = function(\n                    selector,\n                    onSucc,\n                    onErr\n                ) {\n                    return nativeGetStats.apply(this, [selector || null])\n                        .then(function(stats) {\n                            if (browserDetails.version < 48) {\n                                stats = makeMapStats(stats);\n                            }\n                            if (browserDetails.version < 53 && !onSucc) {\n                                // Shim only promise getStats with spec-hyphens in type names\n                                // Leave callback version alone; misc old uses of forEach before Map\n                                try {\n                                    stats.forEach(function(stat) {\n                                        stat.type = modernStatsTypes[stat.type] || stat.type;\n                                    });\n                                } catch (e) {\n                                    if (e.name !== 'TypeError') {\n                                        throw e;\n                                    }\n                                    // Avoid TypeError: \"type\" is read-only, in old versions. 34-43ish\n                                    stats.forEach(function(stat, i) {\n                                        stats.set(i, Object.assign({}, stat, {\n                                            type: modernStatsTypes[stat.type] || stat.type\n                                        }));\n                                    });\n                                }\n                            }\n                            return stats;\n                        })\n                        .then(onSucc, onErr);\n                };\n            },\n\n            shimSenderGetStats: function(window) {\n                if (!(typeof window === 'object' && window.RTCPeerConnection &&\n                        window.RTCRtpSender)) {\n                    return;\n                }\n                if (window.RTCRtpSender && 'getStats' in window.RTCRtpSender.prototype) {\n                    return;\n                }\n                var origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n                if (origGetSenders) {\n                    window.RTCPeerConnection.prototype.getSenders = function() {\n                        var pc = this;\n                        var senders = origGetSenders.apply(pc, []);\n                        senders.forEach(function(sender) {\n                            sender._pc = pc;\n                        });\n                        return senders;\n                    };\n                }\n\n                var origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n                if (origAddTrack) {\n                    window.RTCPeerConnection.prototype.addTrack = function() {\n                        var sender = origAddTrack.apply(this, arguments);\n                        sender._pc = this;\n                        return sender;\n                    };\n                }\n                window.RTCRtpSender.prototype.getStats = function() {\n                    return this.track ? this._pc.getStats(this.track) :\n                        Promise.resolve(new Map());\n                };\n            },\n\n            shimReceiverGetStats: function(window) {\n                if (!(typeof window === 'object' && window.RTCPeerConnection &&\n                        window.RTCRtpSender)) {\n                    return;\n                }\n                if (window.RTCRtpSender && 'getStats' in window.RTCRtpReceiver.prototype) {\n                    return;\n                }\n                var origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n                if (origGetReceivers) {\n                    window.RTCPeerConnection.prototype.getReceivers = function() {\n                        var pc = this;\n                        var receivers = origGetReceivers.apply(pc, []);\n                        receivers.forEach(function(receiver) {\n                            receiver._pc = pc;\n                        });\n                        return receivers;\n                    };\n                }\n                utils.wrapPeerConnectionEvent(window, 'track', function(e) {\n                    e.receiver._pc = e.srcElement;\n                    return e;\n                });\n                window.RTCRtpReceiver.prototype.getStats = function() {\n                    return this._pc.getStats(this.track);\n                };\n            },\n\n            shimRemoveStream: function(window) {\n                if (!window.RTCPeerConnection ||\n                    'removeStream' in window.RTCPeerConnection.prototype) {\n                    return;\n                }\n                window.RTCPeerConnection.prototype.removeStream = function(stream) {\n                    var pc = this;\n                    utils.deprecated('removeStream', 'removeTrack');\n                    this.getSenders().forEach(function(sender) {\n                        if (sender.track && stream.getTracks().indexOf(sender.track) !== -1) {\n                            pc.removeTrack(sender);\n                        }\n                    });\n                };\n            },\n\n            shimRTCDataChannel: function(window) {\n                // rename DataChannel to RTCDataChannel (native fix in FF60):\n                // https://bugzilla.mozilla.org/show_bug.cgi?id=1173851\n                if (window.DataChannel && !window.RTCDataChannel) {\n                    window.RTCDataChannel = window.DataChannel;\n                }\n            },\n\n            shimGetDisplayMedia: function(window, preferredMediaSource) {\n                if ('getDisplayMedia' in window.navigator) {\n                    return;\n                }\n                navigator.getDisplayMedia = function(constraints) {\n                    if (!(constraints && constraints.video)) {\n                        var err = new DOMException('getDisplayMedia without video ' +\n                            'constraints is undefined');\n                        err.name = 'NotFoundError';\n                        // from https://heycam.github.io/webidl/#idl-DOMException-error-names\n                        err.code = 8;\n                        return Promise.reject(err);\n                    }\n                    if (constraints.video === true) {\n                        constraints.video = {mediaSource: preferredMediaSource};\n                    } else {\n                        constraints.video.mediaSource = preferredMediaSource;\n                    }\n                    return navigator.mediaDevices.getUserMedia(constraints);\n                };\n            }\n        };\n\n    },{\"../utils\":14,\"./getusermedia\":12}],12:[function(require,module,exports){\n        /*\n         *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n         *\n         *  Use of this source code is governed by a BSD-style license\n         *  that can be found in the LICENSE file in the root of the source\n         *  tree.\n         */\n        /* eslint-env node */\n        'use strict';\n\n        var utils = require('../utils');\n        var logging = utils.log;\n\n        // Expose public methods.\n        module.exports = function(window) {\n            var browserDetails = utils.detectBrowser(window);\n            var navigator = window && window.navigator;\n            var MediaStreamTrack = window && window.MediaStreamTrack;\n\n            var shimError_ = function(e) {\n                return {\n                    name: {\n                        InternalError: 'NotReadableError',\n                        NotSupportedError: 'TypeError',\n                        PermissionDeniedError: 'NotAllowedError',\n                        SecurityError: 'NotAllowedError'\n                    }[e.name] || e.name,\n                    message: {\n                        'The operation is insecure.': 'The request is not allowed by the ' +\n                        'user agent or the platform in the current context.'\n                    }[e.message] || e.message,\n                    constraint: e.constraint,\n                    toString: function() {\n                        return this.name + (this.message && ': ') + this.message;\n                    }\n                };\n            };\n\n            // getUserMedia constraints shim.\n            var getUserMedia_ = function(constraints, onSuccess, onError) {\n                var constraintsToFF37_ = function(c) {\n                    if (typeof c !== 'object' || c.require) {\n                        return c;\n                    }\n                    var require = [];\n                    Object.keys(c).forEach(function(key) {\n                        if (key === 'require' || key === 'advanced' || key === 'mediaSource') {\n                            return;\n                        }\n                        var r = c[key] = (typeof c[key] === 'object') ?\n                            c[key] : {ideal: c[key]};\n                        if (r.min !== undefined ||\n                            r.max !== undefined || r.exact !== undefined) {\n                            require.push(key);\n                        }\n                        if (r.exact !== undefined) {\n                            if (typeof r.exact === 'number') {\n                                r. min = r.max = r.exact;\n                            } else {\n                                c[key] = r.exact;\n                            }\n                            delete r.exact;\n                        }\n                        if (r.ideal !== undefined) {\n                            c.advanced = c.advanced || [];\n                            var oc = {};\n                            if (typeof r.ideal === 'number') {\n                                oc[key] = {min: r.ideal, max: r.ideal};\n                            } else {\n                                oc[key] = r.ideal;\n                            }\n                            c.advanced.push(oc);\n                            delete r.ideal;\n                            if (!Object.keys(r).length) {\n                                delete c[key];\n                            }\n                        }\n                    });\n                    if (require.length) {\n                        c.require = require;\n                    }\n                    return c;\n                };\n                constraints = JSON.parse(JSON.stringify(constraints));\n                if (browserDetails.version < 38) {\n                    logging('spec: ' + JSON.stringify(constraints));\n                    if (constraints.audio) {\n                        constraints.audio = constraintsToFF37_(constraints.audio);\n                    }\n                    if (constraints.video) {\n                        constraints.video = constraintsToFF37_(constraints.video);\n                    }\n                    logging('ff37: ' + JSON.stringify(constraints));\n                }\n                return navigator.mozGetUserMedia(constraints, onSuccess, function(e) {\n                    onError(shimError_(e));\n                });\n            };\n\n            // Returns the result of getUserMedia as a Promise.\n            var getUserMediaPromise_ = function(constraints) {\n                return new Promise(function(resolve, reject) {\n                    getUserMedia_(constraints, resolve, reject);\n                });\n            };\n\n            // Shim for mediaDevices on older versions.\n            if (!navigator.mediaDevices) {\n                navigator.mediaDevices = {getUserMedia: getUserMediaPromise_,\n                    addEventListener: function() { },\n                    removeEventListener: function() { }\n                };\n            }\n            navigator.mediaDevices.enumerateDevices =\n                navigator.mediaDevices.enumerateDevices || function() {\n                    return new Promise(function(resolve) {\n                        var infos = [\n                            {kind: 'audioinput', deviceId: 'default', label: '', groupId: ''},\n                            {kind: 'videoinput', deviceId: 'default', label: '', groupId: ''}\n                        ];\n                        resolve(infos);\n                    });\n                };\n\n            if (browserDetails.version < 41) {\n                // Work around http://bugzil.la/1169665\n                var orgEnumerateDevices =\n                    navigator.mediaDevices.enumerateDevices.bind(navigator.mediaDevices);\n                navigator.mediaDevices.enumerateDevices = function() {\n                    return orgEnumerateDevices().then(undefined, function(e) {\n                        if (e.name === 'NotFoundError') {\n                            return [];\n                        }\n                        throw e;\n                    });\n                };\n            }\n            if (browserDetails.version < 49) {\n                var origGetUserMedia = navigator.mediaDevices.getUserMedia.\n                bind(navigator.mediaDevices);\n                navigator.mediaDevices.getUserMedia = function(c) {\n                    return origGetUserMedia(c).then(function(stream) {\n                        // Work around https://bugzil.la/802326\n                        if (c.audio && !stream.getAudioTracks().length ||\n                            c.video && !stream.getVideoTracks().length) {\n                            stream.getTracks().forEach(function(track) {\n                                track.stop();\n                            });\n                            throw new DOMException('The object can not be found here.',\n                                'NotFoundError');\n                        }\n                        return stream;\n                    }, function(e) {\n                        return Promise.reject(shimError_(e));\n                    });\n                };\n            }\n            if (!(browserDetails.version > 55 &&\n                    'autoGainControl' in navigator.mediaDevices.getSupportedConstraints())) {\n                var remap = function(obj, a, b) {\n                    if (a in obj && !(b in obj)) {\n                        obj[b] = obj[a];\n                        delete obj[a];\n                    }\n                };\n\n                var nativeGetUserMedia = navigator.mediaDevices.getUserMedia.\n                bind(navigator.mediaDevices);\n                navigator.mediaDevices.getUserMedia = function(c) {\n                    if (typeof c === 'object' && typeof c.audio === 'object') {\n                        c = JSON.parse(JSON.stringify(c));\n                        remap(c.audio, 'autoGainControl', 'mozAutoGainControl');\n                        remap(c.audio, 'noiseSuppression', 'mozNoiseSuppression');\n                    }\n                    return nativeGetUserMedia(c);\n                };\n\n                if (MediaStreamTrack && MediaStreamTrack.prototype.getSettings) {\n                    var nativeGetSettings = MediaStreamTrack.prototype.getSettings;\n                    MediaStreamTrack.prototype.getSettings = function() {\n                        var obj = nativeGetSettings.apply(this, arguments);\n                        remap(obj, 'mozAutoGainControl', 'autoGainControl');\n                        remap(obj, 'mozNoiseSuppression', 'noiseSuppression');\n                        return obj;\n                    };\n                }\n\n                if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) {\n                    var nativeApplyConstraints = MediaStreamTrack.prototype.applyConstraints;\n                    MediaStreamTrack.prototype.applyConstraints = function(c) {\n                        if (this.kind === 'audio' && typeof c === 'object') {\n                            c = JSON.parse(JSON.stringify(c));\n                            remap(c, 'autoGainControl', 'mozAutoGainControl');\n                            remap(c, 'noiseSuppression', 'mozNoiseSuppression');\n                        }\n                        return nativeApplyConstraints.apply(this, [c]);\n                    };\n                }\n            }\n            navigator.getUserMedia = function(constraints, onSuccess, onError) {\n                if (browserDetails.version < 44) {\n                    return getUserMedia_(constraints, onSuccess, onError);\n                }\n                // Replace Firefox 44+'s deprecation warning with unprefixed version.\n                utils.deprecated('navigator.getUserMedia',\n                    'navigator.mediaDevices.getUserMedia');\n                navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError);\n            };\n        };\n\n    },{\"../utils\":14}],13:[function(require,module,exports){\n        /*\n         *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n         *\n         *  Use of this source code is governed by a BSD-style license\n         *  that can be found in the LICENSE file in the root of the source\n         *  tree.\n         */\n        'use strict';\n        var utils = require('../utils');\n\n        module.exports = {\n            shimLocalStreamsAPI: function(window) {\n                if (typeof window !== 'object' || !window.RTCPeerConnection) {\n                    return;\n                }\n                if (!('getLocalStreams' in window.RTCPeerConnection.prototype)) {\n                    window.RTCPeerConnection.prototype.getLocalStreams = function() {\n                        if (!this._localStreams) {\n                            this._localStreams = [];\n                        }\n                        return this._localStreams;\n                    };\n                }\n                if (!('getStreamById' in window.RTCPeerConnection.prototype)) {\n                    window.RTCPeerConnection.prototype.getStreamById = function(id) {\n                        var result = null;\n                        if (this._localStreams) {\n                            this._localStreams.forEach(function(stream) {\n                                if (stream.id === id) {\n                                    result = stream;\n                                }\n                            });\n                        }\n                        if (this._remoteStreams) {\n                            this._remoteStreams.forEach(function(stream) {\n                                if (stream.id === id) {\n                                    result = stream;\n                                }\n                            });\n                        }\n                        return result;\n                    };\n                }\n                if (!('addStream' in window.RTCPeerConnection.prototype)) {\n                    var _addTrack = window.RTCPeerConnection.prototype.addTrack;\n                    window.RTCPeerConnection.prototype.addStream = function(stream) {\n                        if (!this._localStreams) {\n                            this._localStreams = [];\n                        }\n                        if (this._localStreams.indexOf(stream) === -1) {\n                            this._localStreams.push(stream);\n                        }\n                        var pc = this;\n                        stream.getTracks().forEach(function(track) {\n                            _addTrack.call(pc, track, stream);\n                        });\n                    };\n\n                    window.RTCPeerConnection.prototype.addTrack = function(track, stream) {\n                        if (stream) {\n                            if (!this._localStreams) {\n                                this._localStreams = [stream];\n                            } else if (this._localStreams.indexOf(stream) === -1) {\n                                this._localStreams.push(stream);\n                            }\n                        }\n                        return _addTrack.call(this, track, stream);\n                    };\n                }\n                if (!('removeStream' in window.RTCPeerConnection.prototype)) {\n                    window.RTCPeerConnection.prototype.removeStream = function(stream) {\n                        if (!this._localStreams) {\n                            this._localStreams = [];\n                        }\n                        var index = this._localStreams.indexOf(stream);\n                        if (index === -1) {\n                            return;\n                        }\n                        this._localStreams.splice(index, 1);\n                        var pc = this;\n                        var tracks = stream.getTracks();\n                        this.getSenders().forEach(function(sender) {\n                            if (tracks.indexOf(sender.track) !== -1) {\n                                pc.removeTrack(sender);\n                            }\n                        });\n                    };\n                }\n            },\n            shimRemoteStreamsAPI: function(window) {\n                if (typeof window !== 'object' || !window.RTCPeerConnection) {\n                    return;\n                }\n                if (!('getRemoteStreams' in window.RTCPeerConnection.prototype)) {\n                    window.RTCPeerConnection.prototype.getRemoteStreams = function() {\n                        return this._remoteStreams ? this._remoteStreams : [];\n                    };\n                }\n                if (!('onaddstream' in window.RTCPeerConnection.prototype)) {\n                    Object.defineProperty(window.RTCPeerConnection.prototype, 'onaddstream', {\n                        get: function() {\n                            return this._onaddstream;\n                        },\n                        set: function(f) {\n                            if (this._onaddstream) {\n                                this.removeEventListener('addstream', this._onaddstream);\n                            }\n                            this.addEventListener('addstream', this._onaddstream = f);\n                        }\n                    });\n                    var origSetRemoteDescription =\n                        window.RTCPeerConnection.prototype.setRemoteDescription;\n                    window.RTCPeerConnection.prototype.setRemoteDescription = function() {\n                        var pc = this;\n                        if (!this._onaddstreampoly) {\n                            this.addEventListener('track', this._onaddstreampoly = function(e) {\n                                e.streams.forEach(function(stream) {\n                                    if (!pc._remoteStreams) {\n                                        pc._remoteStreams = [];\n                                    }\n                                    if (pc._remoteStreams.indexOf(stream) >= 0) {\n                                        return;\n                                    }\n                                    pc._remoteStreams.push(stream);\n                                    var event = new Event('addstream');\n                                    event.stream = stream;\n                                    pc.dispatchEvent(event);\n                                });\n                            });\n                        }\n                        return origSetRemoteDescription.apply(pc, arguments);\n                    };\n                }\n            },\n            shimCallbacksAPI: function(window) {\n                if (typeof window !== 'object' || !window.RTCPeerConnection) {\n                    return;\n                }\n                var prototype = window.RTCPeerConnection.prototype;\n                var createOffer = prototype.createOffer;\n                var createAnswer = prototype.createAnswer;\n                var setLocalDescription = prototype.setLocalDescription;\n                var setRemoteDescription = prototype.setRemoteDescription;\n                var addIceCandidate = prototype.addIceCandidate;\n\n                prototype.createOffer = function(successCallback, failureCallback) {\n                    var options = (arguments.length >= 2) ? arguments[2] : arguments[0];\n                    var promise = createOffer.apply(this, [options]);\n                    if (!failureCallback) {\n                        return promise;\n                    }\n                    promise.then(successCallback, failureCallback);\n                    return Promise.resolve();\n                };\n\n                prototype.createAnswer = function(successCallback, failureCallback) {\n                    var options = (arguments.length >= 2) ? arguments[2] : arguments[0];\n                    var promise = createAnswer.apply(this, [options]);\n                    if (!failureCallback) {\n                        return promise;\n                    }\n                    promise.then(successCallback, failureCallback);\n                    return Promise.resolve();\n                };\n\n                var withCallback = function(description, successCallback, failureCallback) {\n                    var promise = setLocalDescription.apply(this, [description]);\n                    if (!failureCallback) {\n                        return promise;\n                    }\n                    promise.then(successCallback, failureCallback);\n                    return Promise.resolve();\n                };\n                prototype.setLocalDescription = withCallback;\n\n                withCallback = function(description, successCallback, failureCallback) {\n                    var promise = setRemoteDescription.apply(this, [description]);\n                    if (!failureCallback) {\n                        return promise;\n                    }\n                    promise.then(successCallback, failureCallback);\n                    return Promise.resolve();\n                };\n                prototype.setRemoteDescription = withCallback;\n\n                withCallback = function(candidate, successCallback, failureCallback) {\n                    var promise = addIceCandidate.apply(this, [candidate]);\n                    if (!failureCallback) {\n                        return promise;\n                    }\n                    promise.then(successCallback, failureCallback);\n                    return Promise.resolve();\n                };\n                prototype.addIceCandidate = withCallback;\n            },\n            shimGetUserMedia: function(window) {\n                var navigator = window && window.navigator;\n\n                if (!navigator.getUserMedia) {\n                    if (navigator.webkitGetUserMedia) {\n                        navigator.getUserMedia = navigator.webkitGetUserMedia.bind(navigator);\n                    } else if (navigator.mediaDevices &&\n                        navigator.mediaDevices.getUserMedia) {\n                        navigator.getUserMedia = function(constraints, cb, errcb) {\n                            navigator.mediaDevices.getUserMedia(constraints)\n                                .then(cb, errcb);\n                        }.bind(navigator);\n                    }\n                }\n            },\n            shimRTCIceServerUrls: function(window) {\n                // migrate from non-spec RTCIceServer.url to RTCIceServer.urls\n                var OrigPeerConnection = window.RTCPeerConnection;\n                window.RTCPeerConnection = function(pcConfig, pcConstraints) {\n                    if (pcConfig && pcConfig.iceServers) {\n                        var newIceServers = [];\n                        for (var i = 0; i < pcConfig.iceServers.length; i++) {\n                            var server = pcConfig.iceServers[i];\n                            if (!server.hasOwnProperty('urls') &&\n                                server.hasOwnProperty('url')) {\n                                utils.deprecated('RTCIceServer.url', 'RTCIceServer.urls');\n                                server = JSON.parse(JSON.stringify(server));\n                                server.urls = server.url;\n                                delete server.url;\n                                newIceServers.push(server);\n                            } else {\n                                newIceServers.push(pcConfig.iceServers[i]);\n                            }\n                        }\n                        pcConfig.iceServers = newIceServers;\n                    }\n                    return new OrigPeerConnection(pcConfig, pcConstraints);\n                };\n                window.RTCPeerConnection.prototype = OrigPeerConnection.prototype;\n                // wrap static methods. Currently just generateCertificate.\n                if ('generateCertificate' in window.RTCPeerConnection) {\n                    Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', {\n                        get: function() {\n                            return OrigPeerConnection.generateCertificate;\n                        }\n                    });\n                }\n            },\n            shimTrackEventTransceiver: function(window) {\n                // Add event.transceiver member over deprecated event.receiver\n                if (typeof window === 'object' && window.RTCPeerConnection &&\n                    ('receiver' in window.RTCTrackEvent.prototype) &&\n                    // can't check 'transceiver' in window.RTCTrackEvent.prototype, as it is\n                    // defined for some reason even when window.RTCTransceiver is not.\n                    !window.RTCTransceiver) {\n                    Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n                        get: function() {\n                            return {receiver: this.receiver};\n                        }\n                    });\n                }\n            },\n\n            shimCreateOfferLegacy: function(window) {\n                var origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n                window.RTCPeerConnection.prototype.createOffer = function(offerOptions) {\n                    var pc = this;\n                    if (offerOptions) {\n                        if (typeof offerOptions.offerToReceiveAudio !== 'undefined') {\n                            // support bit values\n                            offerOptions.offerToReceiveAudio = !!offerOptions.offerToReceiveAudio;\n                        }\n                        var audioTransceiver = pc.getTransceivers().find(function(transceiver) {\n                            return transceiver.sender.track &&\n                                transceiver.sender.track.kind === 'audio';\n                        });\n                        if (offerOptions.offerToReceiveAudio === false && audioTransceiver) {\n                            if (audioTransceiver.direction === 'sendrecv') {\n                                if (audioTransceiver.setDirection) {\n                                    audioTransceiver.setDirection('sendonly');\n                                } else {\n                                    audioTransceiver.direction = 'sendonly';\n                                }\n                            } else if (audioTransceiver.direction === 'recvonly') {\n                                if (audioTransceiver.setDirection) {\n                                    audioTransceiver.setDirection('inactive');\n                                } else {\n                                    audioTransceiver.direction = 'inactive';\n                                }\n                            }\n                        } else if (offerOptions.offerToReceiveAudio === true &&\n                            !audioTransceiver) {\n                            pc.addTransceiver('audio');\n                        }\n\n\n                        if (typeof offerOptions.offerToReceiveVideo !== 'undefined') {\n                            // support bit values\n                            offerOptions.offerToReceiveVideo = !!offerOptions.offerToReceiveVideo;\n                        }\n                        var videoTransceiver = pc.getTransceivers().find(function(transceiver) {\n                            return transceiver.sender.track &&\n                                transceiver.sender.track.kind === 'video';\n                        });\n                        if (offerOptions.offerToReceiveVideo === false && videoTransceiver) {\n                            if (videoTransceiver.direction === 'sendrecv') {\n                                videoTransceiver.setDirection('sendonly');\n                            } else if (videoTransceiver.direction === 'recvonly') {\n                                videoTransceiver.setDirection('inactive');\n                            }\n                        } else if (offerOptions.offerToReceiveVideo === true &&\n                            !videoTransceiver) {\n                            pc.addTransceiver('video');\n                        }\n                    }\n                    return origCreateOffer.apply(pc, arguments);\n                };\n            }\n        };\n\n    },{\"../utils\":14}],14:[function(require,module,exports){\n        /*\n         *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n         *\n         *  Use of this source code is governed by a BSD-style license\n         *  that can be found in the LICENSE file in the root of the source\n         *  tree.\n         */\n        /* eslint-env node */\n        'use strict';\n\n        var logDisabled_ = true;\n        var deprecationWarnings_ = true;\n\n        /**\n         * Extract browser version out of the provided user agent string.\n         *\n         * @param {!string} uastring userAgent string.\n         * @param {!string} expr Regular expression used as match criteria.\n         * @param {!number} pos position in the version string to be returned.\n         * @return {!number} browser version.\n         */\n        function extractVersion(uastring, expr, pos) {\n            var match = uastring.match(expr);\n            return match && match.length >= pos && parseInt(match[pos], 10);\n        }\n\n        // Wraps the peerconnection event eventNameToWrap in a function\n        // which returns the modified event object (or false to prevent\n        // the event).\n        function wrapPeerConnectionEvent(window, eventNameToWrap, wrapper) {\n            if (!window.RTCPeerConnection) {\n                return;\n            }\n            var proto = window.RTCPeerConnection.prototype;\n            var nativeAddEventListener = proto.addEventListener;\n            proto.addEventListener = function(nativeEventName, cb) {\n                if (nativeEventName !== eventNameToWrap) {\n                    return nativeAddEventListener.apply(this, arguments);\n                }\n                var wrappedCallback = function(e) {\n                    var modifiedEvent = wrapper(e);\n                    if (modifiedEvent) {\n                        cb(modifiedEvent);\n                    }\n                };\n                this._eventMap = this._eventMap || {};\n                this._eventMap[cb] = wrappedCallback;\n                return nativeAddEventListener.apply(this, [nativeEventName,\n                    wrappedCallback]);\n            };\n\n            var nativeRemoveEventListener = proto.removeEventListener;\n            proto.removeEventListener = function(nativeEventName, cb) {\n                if (nativeEventName !== eventNameToWrap || !this._eventMap\n                    || !this._eventMap[cb]) {\n                    return nativeRemoveEventListener.apply(this, arguments);\n                }\n                var unwrappedCb = this._eventMap[cb];\n                delete this._eventMap[cb];\n                return nativeRemoveEventListener.apply(this, [nativeEventName,\n                    unwrappedCb]);\n            };\n\n            Object.defineProperty(proto, 'on' + eventNameToWrap, {\n                get: function() {\n                    return this['_on' + eventNameToWrap];\n                },\n                set: function(cb) {\n                    if (this['_on' + eventNameToWrap]) {\n                        this.removeEventListener(eventNameToWrap,\n                            this['_on' + eventNameToWrap]);\n                        delete this['_on' + eventNameToWrap];\n                    }\n                    if (cb) {\n                        this.addEventListener(eventNameToWrap,\n                            this['_on' + eventNameToWrap] = cb);\n                    }\n                },\n                enumerable: true,\n                configurable: true\n            });\n        }\n\n        // Utility methods.\n        module.exports = {\n            extractVersion: extractVersion,\n            wrapPeerConnectionEvent: wrapPeerConnectionEvent,\n            disableLog: function(bool) {\n                if (typeof bool !== 'boolean') {\n                    return new Error('Argument type: ' + typeof bool +\n                        '. Please use a boolean.');\n                }\n                logDisabled_ = bool;\n                return (bool) ? 'adapter.js logging disabled' :\n                    'adapter.js logging enabled';\n            },\n\n            /**\n             * Disable or enable deprecation warnings\n             * @param {!boolean} bool set to true to disable warnings.\n             */\n            disableWarnings: function(bool) {\n                if (typeof bool !== 'boolean') {\n                    return new Error('Argument type: ' + typeof bool +\n                        '. Please use a boolean.');\n                }\n                deprecationWarnings_ = !bool;\n                return 'adapter.js deprecation warnings ' + (bool ? 'disabled' : 'enabled');\n            },\n\n            log: function() {\n                if (typeof window === 'object') {\n                    if (logDisabled_) {\n                        return;\n                    }\n                    if (typeof console !== 'undefined' && typeof console.log === 'function') {\n                        console.log.apply(console, arguments);\n                    }\n                }\n            },\n\n            /**\n             * Shows a deprecation warning suggesting the modern and spec-compatible API.\n             */\n            deprecated: function(oldMethod, newMethod) {\n                if (!deprecationWarnings_) {\n                    return;\n                }\n                console.warn(oldMethod + ' is deprecated, please use ' + newMethod +\n                    ' instead.');\n            },\n\n            /**\n             * Browser detector.\n             *\n             * @return {object} result containing browser and version\n             *     properties.\n             */\n            detectBrowser: function(window) {\n                var navigator = window && window.navigator;\n\n                // Returned result object.\n                var result = {};\n                result.browser = null;\n                result.version = null;\n\n                // Fail early if it's not a browser\n                if (typeof window === 'undefined' || !window.navigator) {\n                    result.browser = 'Not a browser.';\n                    return result;\n                }\n\n                if (navigator.mozGetUserMedia) { // Firefox.\n                    result.browser = 'firefox';\n                    result.version = extractVersion(navigator.userAgent,\n                        /Firefox\\/(\\d+)\\./, 1);\n                } else if (navigator.webkitGetUserMedia) {\n                    // Chrome, Chromium, Webview, Opera.\n                    // Version matches Chrome/WebRTC version.\n                    result.browser = 'chrome';\n                    result.version = extractVersion(navigator.userAgent,\n                        /Chrom(e|ium)\\/(\\d+)\\./, 2);\n                } else if (navigator.mediaDevices &&\n                    navigator.userAgent.match(/Edge\\/(\\d+).(\\d+)$/)) { // Edge.\n                    result.browser = 'edge';\n                    result.version = extractVersion(navigator.userAgent,\n                        /Edge\\/(\\d+).(\\d+)$/, 2);\n                } else if (window.RTCPeerConnection &&\n                    navigator.userAgent.match(/AppleWebKit\\/(\\d+)\\./)) { // Safari.\n                    result.browser = 'safari';\n                    result.version = extractVersion(navigator.userAgent,\n                        /AppleWebKit\\/(\\d+)\\./, 1);\n                } else { // Default fallthrough: not supported.\n                    result.browser = 'Not a supported browser.';\n                    return result;\n                }\n\n                return result;\n            }\n        };\n\n    },{}]},{},[3])(3)\n});\n\n"],"file":"adapter.min.js"}

Youez - 2016 - github.com/yon3zu
LinuXploit