@betterbugs/rrweb-plugin-canvas-webrtc-record 2.0.0-alpha.20 → 2.0.0-alpha.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../node_modules/simple-peer-light/index.js", "../src/index.ts"],
4
4
  "sourcesContent": ["/*! simple-peer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nconst MAX_BUFFERED_AMOUNT = 64 * 1024\nconst ICECOMPLETE_TIMEOUT = 5 * 1000\nconst CHANNEL_CLOSING_TIMEOUT = 5 * 1000\n\nfunction randombytes (size) {\n const array = new Uint8Array(size)\n for (let i = 0; i < size; i++) {\n array[i] = (Math.random() * 256) | 0\n }\n return array\n}\n\nfunction getBrowserRTC () {\n if (typeof globalThis === 'undefined') return null\n const wrtc = {\n RTCPeerConnection:\n globalThis.RTCPeerConnection ||\n globalThis.mozRTCPeerConnection ||\n globalThis.webkitRTCPeerConnection,\n RTCSessionDescription:\n globalThis.RTCSessionDescription ||\n globalThis.mozRTCSessionDescription ||\n globalThis.webkitRTCSessionDescription,\n RTCIceCandidate:\n globalThis.RTCIceCandidate ||\n globalThis.mozRTCIceCandidate ||\n globalThis.webkitRTCIceCandidate\n }\n if (!wrtc.RTCPeerConnection) return null\n return wrtc\n}\n\nfunction errCode (err, code) {\n Object.defineProperty(err, 'code', {\n value: code,\n enumerable: true,\n configurable: true\n })\n return err\n}\n\n// HACK: Filter trickle lines when trickle is disabled #354\nfunction filterTrickle (sdp) {\n return sdp.replace(/a=ice-options:trickle\\s\\n/g, '')\n}\n\nfunction warn (message) {\n console.warn(message)\n}\n\n/**\n * WebRTC peer connection.\n * @param {Object} opts\n */\nclass Peer {\n constructor (opts = {}) {\n this._map = new Map() // for event emitter\n\n this._id = randombytes(4).toString('hex').slice(0, 7)\n this._doDebug = opts.debug\n this._debug('new peer %o', opts)\n\n this.channelName = opts.initiator\n ? opts.channelName || randombytes(20).toString('hex')\n : null\n\n this.initiator = opts.initiator || false\n this.channelConfig = opts.channelConfig || Peer.channelConfig\n this.channelNegotiated = this.channelConfig.negotiated\n this.config = Object.assign({}, Peer.config, opts.config)\n this.offerOptions = opts.offerOptions || {}\n this.answerOptions = opts.answerOptions || {}\n this.sdpTransform = opts.sdpTransform || (sdp => sdp)\n this.streams = opts.streams || (opts.stream ? [opts.stream] : []) // support old \"stream\" option\n this.trickle = opts.trickle !== undefined ? opts.trickle : true\n this.allowHalfTrickle =\n opts.allowHalfTrickle !== undefined ? opts.allowHalfTrickle : false\n this.iceCompleteTimeout = opts.iceCompleteTimeout || ICECOMPLETE_TIMEOUT\n\n this.destroyed = false\n this.destroying = false\n this._connected = false\n\n this.remoteAddress = undefined\n this.remoteFamily = undefined\n this.remotePort = undefined\n this.localAddress = undefined\n this.localFamily = undefined\n this.localPort = undefined\n\n this._wrtc =\n opts.wrtc && typeof opts.wrtc === 'object' ? opts.wrtc : getBrowserRTC()\n\n if (!this._wrtc) {\n if (typeof window === 'undefined') {\n throw errCode(\n new Error(\n 'No WebRTC support: Specify `opts.wrtc` option in this environment'\n ),\n 'ERR_WEBRTC_SUPPORT'\n )\n } else {\n throw errCode(\n new Error('No WebRTC support: Not a supported browser'),\n 'ERR_WEBRTC_SUPPORT'\n )\n }\n }\n\n this._pcReady = false\n this._channelReady = false\n this._iceComplete = false // ice candidate trickle done (got null candidate)\n this._iceCompleteTimer = null // send an offer/answer anyway after some timeout\n this._channel = null\n this._pendingCandidates = []\n\n this._isNegotiating = false // is this peer waiting for negotiation to complete?\n this._firstNegotiation = true\n this._batchedNegotiation = false // batch synchronous negotiations\n this._queuedNegotiation = false // is there a queued negotiation request?\n this._sendersAwaitingStable = []\n this._senderMap = new Map()\n this._closingInterval = null\n\n this._remoteTracks = []\n this._remoteStreams = []\n\n this._chunk = null\n this._cb = null\n this._interval = null\n\n try {\n this._pc = new this._wrtc.RTCPeerConnection(this.config)\n } catch (err) {\n this.destroy(errCode(err, 'ERR_PC_CONSTRUCTOR'))\n return\n }\n\n // We prefer feature detection whenever possible, but sometimes that's not\n // possible for certain implementations.\n this._isReactNativeWebrtc = typeof this._pc._peerConnectionId === 'number'\n\n this._pc.oniceconnectionstatechange = () => {\n this._onIceStateChange()\n }\n this._pc.onicegatheringstatechange = () => {\n this._onIceStateChange()\n }\n this._pc.onconnectionstatechange = () => {\n this._onConnectionStateChange()\n }\n this._pc.onsignalingstatechange = () => {\n this._onSignalingStateChange()\n }\n this._pc.onicecandidate = event => {\n this._onIceCandidate(event)\n }\n\n // HACK: Fix for odd Firefox behavior, see: https://github.com/feross/simple-peer/pull/783\n if (typeof this._pc.peerIdentity === 'object') {\n this._pc.peerIdentity.catch(err => {\n this.destroy(errCode(err, 'ERR_PC_PEER_IDENTITY'))\n })\n }\n\n // Other spec events, unused by this implementation:\n // - onconnectionstatechange\n // - onicecandidateerror\n // - onfingerprintfailure\n // - onnegotiationneeded\n\n if (this.initiator || this.channelNegotiated) {\n this._setupData({\n channel: this._pc.createDataChannel(\n this.channelName,\n this.channelConfig\n )\n })\n } else {\n this._pc.ondatachannel = event => {\n this._setupData(event)\n }\n }\n\n if (this.streams) {\n this.streams.forEach(stream => {\n this.addStream(stream)\n })\n }\n this._pc.ontrack = event => {\n this._onTrack(event)\n }\n\n this._debug('initial negotiation')\n this._needsNegotiation()\n }\n\n get bufferSize () {\n return (this._channel && this._channel.bufferedAmount) || 0\n }\n\n // HACK: it's possible channel.readyState is \"closing\" before peer.destroy() fires\n // https://bugs.chromium.org/p/chromium/issues/detail?id=882743\n get connected () {\n return this._connected && this._channel.readyState === 'open'\n }\n\n address () {\n return {\n port: this.localPort,\n family: this.localFamily,\n address: this.localAddress\n }\n }\n\n signal (data) {\n if (this.destroying) return\n if (this.destroyed) throw errCode(new Error('cannot signal after peer is destroyed'), 'ERR_DESTROYED')\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data)\n } catch (err) {\n data = {}\n }\n }\n this._debug('signal()')\n\n if (data.renegotiate && this.initiator) {\n this._debug('got request to renegotiate')\n this._needsNegotiation()\n }\n if (data.transceiverRequest && this.initiator) {\n this._debug('got request for transceiver')\n this.addTransceiver(\n data.transceiverRequest.kind,\n data.transceiverRequest.init\n )\n }\n if (data.candidate) {\n if (this._pc.remoteDescription && this._pc.remoteDescription.type) {\n this._addIceCandidate(data.candidate)\n } else {\n this._pendingCandidates.push(data.candidate)\n }\n }\n if (data.sdp) {\n this._pc\n .setRemoteDescription(new this._wrtc.RTCSessionDescription(data))\n .then(() => {\n if (this.destroyed) return\n\n this._pendingCandidates.forEach(candidate => {\n this._addIceCandidate(candidate)\n })\n this._pendingCandidates = []\n\n if (this._pc.remoteDescription.type === 'offer') this._createAnswer()\n })\n .catch(err => {\n this.destroy(errCode(err, 'ERR_SET_REMOTE_DESCRIPTION'))\n })\n }\n if (\n !data.sdp &&\n !data.candidate &&\n !data.renegotiate &&\n !data.transceiverRequest\n ) {\n this.destroy(\n errCode(\n new Error('signal() called with invalid signal data'),\n 'ERR_SIGNALING'\n )\n )\n }\n }\n\n _addIceCandidate (candidate) {\n const iceCandidateObj = new this._wrtc.RTCIceCandidate(candidate)\n this._pc.addIceCandidate(iceCandidateObj).catch(err => {\n if (\n !iceCandidateObj.address ||\n iceCandidateObj.address.endsWith('.local')\n ) {\n warn('Ignoring unsupported ICE candidate.')\n } else {\n this.destroy(errCode(err, 'ERR_ADD_ICE_CANDIDATE'))\n }\n })\n }\n\n /**\n * Send text/binary data to the remote peer.\n * @param {ArrayBufferView|ArrayBuffer|string|Blob} chunk\n */\n send (chunk) {\n if (this.destroying) return\n if (this.destroyed) throw errCode(new Error('cannot send after peer is destroyed'), 'ERR_DESTROYED')\n this._channel.send(chunk)\n }\n\n /**\n * Add a Transceiver to the connection.\n * @param {String} kind\n * @param {Object} init\n */\n addTransceiver (kind, init) {\n if (this.destroying) return\n if (this.destroyed) throw errCode(new Error('cannot addTransceiver after peer is destroyed'), 'ERR_DESTROYED')\n this._debug('addTransceiver()')\n\n if (this.initiator) {\n try {\n this._pc.addTransceiver(kind, init)\n this._needsNegotiation()\n } catch (err) {\n this.destroy(errCode(err, 'ERR_ADD_TRANSCEIVER'))\n }\n } else {\n this.emit('signal', {\n // request initiator to renegotiate\n type: 'transceiverRequest',\n transceiverRequest: { kind, init }\n })\n }\n }\n\n /**\n * Add a MediaStream to the connection.\n * @param {MediaStream} stream\n */\n addStream (stream) {\n if (this.destroying) return\n if (this.destroyed) throw errCode(new Error('cannot addStream after peer is destroyed'), 'ERR_DESTROYED')\n this._debug('addStream()')\n\n stream.getTracks().forEach(track => {\n this.addTrack(track, stream)\n })\n }\n\n /**\n * Add a MediaStreamTrack to the connection.\n * @param {MediaStreamTrack} track\n * @param {MediaStream} stream\n */\n addTrack (track, stream) {\n if (this.destroying) return\n if (this.destroyed) throw errCode(new Error('cannot addTrack after peer is destroyed'), 'ERR_DESTROYED')\n this._debug('addTrack()')\n\n const submap = this._senderMap.get(track) || new Map() // nested Maps map [track, stream] to sender\n let sender = submap.get(stream)\n if (!sender) {\n sender = this._pc.addTrack(track, stream)\n submap.set(stream, sender)\n this._senderMap.set(track, submap)\n this._needsNegotiation()\n } else if (sender.removed) {\n throw errCode(\n new Error(\n 'Track has been removed. You should enable/disable tracks that you want to re-add.'\n ),\n 'ERR_SENDER_REMOVED'\n )\n } else {\n throw errCode(\n new Error('Track has already been added to that stream.'),\n 'ERR_SENDER_ALREADY_ADDED'\n )\n }\n }\n\n /**\n * Replace a MediaStreamTrack by another in the connection.\n * @param {MediaStreamTrack} oldTrack\n * @param {MediaStreamTrack} newTrack\n * @param {MediaStream} stream\n */\n replaceTrack (oldTrack, newTrack, stream) {\n if (this.destroying) return\n if (this.destroyed) throw errCode(new Error('cannot replaceTrack after peer is destroyed'), 'ERR_DESTROYED')\n this._debug('replaceTrack()')\n\n const submap = this._senderMap.get(oldTrack)\n const sender = submap ? submap.get(stream) : null\n if (!sender) {\n throw errCode(\n new Error('Cannot replace track that was never added.'),\n 'ERR_TRACK_NOT_ADDED'\n )\n }\n if (newTrack) this._senderMap.set(newTrack, submap)\n\n if (sender.replaceTrack != null) {\n sender.replaceTrack(newTrack)\n } else {\n this.destroy(\n errCode(\n new Error('replaceTrack is not supported in this browser'),\n 'ERR_UNSUPPORTED_REPLACETRACK'\n )\n )\n }\n }\n\n /**\n * Remove a MediaStreamTrack from the connection.\n * @param {MediaStreamTrack} track\n * @param {MediaStream} stream\n */\n removeTrack (track, stream) {\n if (this.destroying) return\n if (this.destroyed) throw errCode(new Error('cannot removeTrack after peer is destroyed'), 'ERR_DESTROYED')\n this._debug('removeSender()')\n\n const submap = this._senderMap.get(track)\n const sender = submap ? submap.get(stream) : null\n if (!sender) {\n throw errCode(\n new Error('Cannot remove track that was never added.'),\n 'ERR_TRACK_NOT_ADDED'\n )\n }\n try {\n sender.removed = true\n this._pc.removeTrack(sender)\n } catch (err) {\n if (err.name === 'NS_ERROR_UNEXPECTED') {\n this._sendersAwaitingStable.push(sender) // HACK: Firefox must wait until (signalingState === stable) https://bugzilla.mozilla.org/show_bug.cgi?id=1133874\n } else {\n this.destroy(errCode(err, 'ERR_REMOVE_TRACK'))\n }\n }\n this._needsNegotiation()\n }\n\n /**\n * Remove a MediaStream from the connection.\n * @param {MediaStream} stream\n */\n removeStream (stream) {\n if (this.destroying) return\n if (this.destroyed) throw errCode(new Error('cannot removeStream after peer is destroyed'), 'ERR_DESTROYED')\n this._debug('removeSenders()')\n\n stream.getTracks().forEach(track => {\n this.removeTrack(track, stream)\n })\n }\n\n _needsNegotiation () {\n this._debug('_needsNegotiation')\n if (this._batchedNegotiation) return // batch synchronous renegotiations\n this._batchedNegotiation = true\n queueMicrotask(() => {\n this._batchedNegotiation = false\n if (this.initiator || !this._firstNegotiation) {\n this._debug('starting batched negotiation')\n this.negotiate()\n } else {\n this._debug('non-initiator initial negotiation request discarded')\n }\n this._firstNegotiation = false\n })\n }\n\n negotiate () {\n if (this.destroying) return\n if (this.destroyed) throw errCode(new Error('cannot negotiate after peer is destroyed'), 'ERR_DESTROYED')\n\n if (this.initiator) {\n if (this._isNegotiating) {\n this._queuedNegotiation = true\n this._debug('already negotiating, queueing')\n } else {\n this._debug('start negotiation')\n setTimeout(() => {\n // HACK: Chrome crashes if we immediately call createOffer\n this._createOffer()\n }, 0)\n }\n } else {\n if (this._isNegotiating) {\n this._queuedNegotiation = true\n this._debug('already negotiating, queueing')\n } else {\n this._debug('requesting negotiation from initiator')\n this.emit('signal', {\n // request initiator to renegotiate\n type: 'renegotiate',\n renegotiate: true\n })\n }\n }\n this._isNegotiating = true\n }\n\n destroy (err) {\n if (this.destroyed || this.destroying) return\n this.destroying = true\n\n this._debug('destroying (error: %s)', err && (err.message || err))\n\n queueMicrotask(() => {\n // allow events concurrent with the call to _destroy() to fire (see #692)\n this.destroyed = true\n this.destroying = false\n\n this._debug('destroy (error: %s)', err && (err.message || err))\n\n this._connected = false\n this._pcReady = false\n this._channelReady = false\n this._remoteTracks = null\n this._remoteStreams = null\n this._senderMap = null\n\n clearInterval(this._closingInterval)\n this._closingInterval = null\n\n clearInterval(this._interval)\n this._interval = null\n this._chunk = null\n this._cb = null\n\n if (this._channel) {\n try {\n this._channel.close()\n } catch (err) {}\n\n // allow events concurrent with destruction to be handled\n this._channel.onmessage = null\n this._channel.onopen = null\n this._channel.onclose = null\n this._channel.onerror = null\n }\n if (this._pc) {\n try {\n this._pc.close()\n } catch (err) {}\n\n // allow events concurrent with destruction to be handled\n this._pc.oniceconnectionstatechange = null\n this._pc.onicegatheringstatechange = null\n this._pc.onsignalingstatechange = null\n this._pc.onicecandidate = null\n this._pc.ontrack = null\n this._pc.ondatachannel = null\n }\n this._pc = null\n this._channel = null\n\n if (err) this.emit('error', err)\n this.emit('close')\n })\n }\n\n _setupData (event) {\n if (!event.channel) {\n // In some situations `pc.createDataChannel()` returns `undefined` (in wrtc),\n // which is invalid behavior. Handle it gracefully.\n // See: https://github.com/feross/simple-peer/issues/163\n return this.destroy(\n errCode(\n new Error('Data channel event is missing `channel` property'),\n 'ERR_DATA_CHANNEL'\n )\n )\n }\n\n this._channel = event.channel\n this._channel.binaryType = 'arraybuffer'\n\n if (typeof this._channel.bufferedAmountLowThreshold === 'number') {\n this._channel.bufferedAmountLowThreshold = MAX_BUFFERED_AMOUNT\n }\n\n this.channelName = this._channel.label\n\n this._channel.onmessage = event => {\n this._onChannelMessage(event)\n }\n this._channel.onbufferedamountlow = () => {\n this._onChannelBufferedAmountLow()\n }\n this._channel.onopen = () => {\n this._onChannelOpen()\n }\n this._channel.onclose = () => {\n this._onChannelClose()\n }\n this._channel.onerror = err => {\n this.destroy(errCode(err, 'ERR_DATA_CHANNEL'))\n }\n\n // HACK: Chrome will sometimes get stuck in readyState \"closing\", let's check for this condition\n // https://bugs.chromium.org/p/chromium/issues/detail?id=882743\n let isClosing = false\n this._closingInterval = setInterval(() => {\n // No \"onclosing\" event\n if (this._channel && this._channel.readyState === 'closing') {\n if (isClosing) this._onChannelClose() // closing timed out: equivalent to onclose firing\n isClosing = true\n } else {\n isClosing = false\n }\n }, CHANNEL_CLOSING_TIMEOUT)\n }\n\n _startIceCompleteTimeout () {\n if (this.destroyed) return\n if (this._iceCompleteTimer) return\n this._debug('started iceComplete timeout')\n this._iceCompleteTimer = setTimeout(() => {\n if (!this._iceComplete) {\n this._iceComplete = true\n this._debug('iceComplete timeout completed')\n this.emit('iceTimeout')\n this.emit('_iceComplete')\n }\n }, this.iceCompleteTimeout)\n }\n\n _createOffer () {\n if (this.destroyed) return\n\n this._pc\n .createOffer(this.offerOptions)\n .then(offer => {\n if (this.destroyed) return\n if (!this.trickle && !this.allowHalfTrickle) { offer.sdp = filterTrickle(offer.sdp) }\n offer.sdp = this.sdpTransform(offer.sdp)\n\n const sendOffer = () => {\n if (this.destroyed) return\n const signal = this._pc.localDescription || offer\n this._debug('signal')\n this.emit('signal', {\n type: signal.type,\n sdp: signal.sdp\n })\n }\n\n const onSuccess = () => {\n this._debug('createOffer success')\n if (this.destroyed) return\n if (this.trickle || this._iceComplete) sendOffer()\n else this.once('_iceComplete', sendOffer) // wait for candidates\n }\n\n const onError = err => {\n this.destroy(errCode(err, 'ERR_SET_LOCAL_DESCRIPTION'))\n }\n\n this._pc.setLocalDescription(offer).then(onSuccess).catch(onError)\n })\n .catch(err => {\n this.destroy(errCode(err, 'ERR_CREATE_OFFER'))\n })\n }\n\n _requestMissingTransceivers () {\n if (this._pc.getTransceivers) {\n this._pc.getTransceivers().forEach(transceiver => {\n if (\n !transceiver.mid &&\n transceiver.sender.track &&\n !transceiver.requested\n ) {\n transceiver.requested = true // HACK: Safari returns negotiated transceivers with a null mid\n this.addTransceiver(transceiver.sender.track.kind)\n }\n })\n }\n }\n\n _createAnswer () {\n if (this.destroyed) return\n\n this._pc\n .createAnswer(this.answerOptions)\n .then(answer => {\n if (this.destroyed) return\n if (!this.trickle && !this.allowHalfTrickle) { answer.sdp = filterTrickle(answer.sdp) }\n answer.sdp = this.sdpTransform(answer.sdp)\n\n const sendAnswer = () => {\n if (this.destroyed) return\n const signal = this._pc.localDescription || answer\n this._debug('signal')\n this.emit('signal', {\n type: signal.type,\n sdp: signal.sdp\n })\n if (!this.initiator) this._requestMissingTransceivers()\n }\n\n const onSuccess = () => {\n if (this.destroyed) return\n if (this.trickle || this._iceComplete) sendAnswer()\n else this.once('_iceComplete', sendAnswer)\n }\n\n const onError = err => {\n this.destroy(errCode(err, 'ERR_SET_LOCAL_DESCRIPTION'))\n }\n\n this._pc.setLocalDescription(answer).then(onSuccess).catch(onError)\n })\n .catch(err => {\n this.destroy(errCode(err, 'ERR_CREATE_ANSWER'))\n })\n }\n\n _onConnectionStateChange () {\n if (this.destroyed) return\n if (this._pc.connectionState === 'failed') {\n this.destroy(\n errCode(new Error('Connection failed.'), 'ERR_CONNECTION_FAILURE')\n )\n }\n }\n\n _onIceStateChange () {\n if (this.destroyed) return\n const iceConnectionState = this._pc.iceConnectionState\n const iceGatheringState = this._pc.iceGatheringState\n\n this._debug(\n 'iceStateChange (connection: %s) (gathering: %s)',\n iceConnectionState,\n iceGatheringState\n )\n this.emit('iceStateChange', iceConnectionState, iceGatheringState)\n\n if (\n iceConnectionState === 'connected' ||\n iceConnectionState === 'completed'\n ) {\n this._pcReady = true\n this._maybeReady()\n }\n if (iceConnectionState === 'failed') {\n this.destroy(\n errCode(\n new Error('Ice connection failed.'),\n 'ERR_ICE_CONNECTION_FAILURE'\n )\n )\n }\n if (iceConnectionState === 'closed') {\n this.destroy(\n errCode(\n new Error('Ice connection closed.'),\n 'ERR_ICE_CONNECTION_CLOSED'\n )\n )\n }\n }\n\n getStats (cb) {\n // statreports can come with a value array instead of properties\n const flattenValues = report => {\n if (Object.prototype.toString.call(report.values) === '[object Array]') {\n report.values.forEach(value => {\n Object.assign(report, value)\n })\n }\n return report\n }\n\n // Promise-based getStats() (standard)\n if (this._pc.getStats.length === 0 || this._isReactNativeWebrtc) {\n this._pc.getStats().then(\n res => {\n const reports = []\n res.forEach(report => {\n reports.push(flattenValues(report))\n })\n cb(null, reports)\n },\n err => cb(err)\n )\n\n // Single-parameter callback-based getStats() (non-standard)\n } else if (this._pc.getStats.length > 0) {\n this._pc.getStats(\n res => {\n // If we destroy connection in `connect` callback this code might happen to run when actual connection is already closed\n if (this.destroyed) return\n\n const reports = []\n res.result().forEach(result => {\n const report = {}\n result.names().forEach(name => {\n report[name] = result.stat(name)\n })\n report.id = result.id\n report.type = result.type\n report.timestamp = result.timestamp\n reports.push(flattenValues(report))\n })\n cb(null, reports)\n },\n err => cb(err)\n )\n\n // Unknown browser, skip getStats() since it's anyone's guess which style of\n // getStats() they implement.\n } else {\n cb(null, [])\n }\n }\n\n _maybeReady () {\n this._debug(\n 'maybeReady pc %s channel %s',\n this._pcReady,\n this._channelReady\n )\n if (\n this._connected ||\n this._connecting ||\n !this._pcReady ||\n !this._channelReady\n ) { return }\n\n this._connecting = true\n\n // HACK: We can't rely on order here, for details see https://github.com/js-platform/node-webrtc/issues/339\n const findCandidatePair = () => {\n if (this.destroyed) return\n\n this.getStats((err, items) => {\n if (this.destroyed) return\n\n // Treat getStats error as non-fatal. It's not essential.\n if (err) items = []\n\n const remoteCandidates = {}\n const localCandidates = {}\n const candidatePairs = {}\n let foundSelectedCandidatePair = false\n\n items.forEach(item => {\n // TODO: Once all browsers support the hyphenated stats report types, remove\n // the non-hypenated ones\n if (\n item.type === 'remotecandidate' ||\n item.type === 'remote-candidate'\n ) {\n remoteCandidates[item.id] = item\n }\n if (\n item.type === 'localcandidate' ||\n item.type === 'local-candidate'\n ) {\n localCandidates[item.id] = item\n }\n if (item.type === 'candidatepair' || item.type === 'candidate-pair') {\n candidatePairs[item.id] = item\n }\n })\n\n const setSelectedCandidatePair = selectedCandidatePair => {\n foundSelectedCandidatePair = true\n\n let local = localCandidates[selectedCandidatePair.localCandidateId]\n\n if (local && (local.ip || local.address)) {\n // Spec\n this.localAddress = local.ip || local.address\n this.localPort = Number(local.port)\n } else if (local && local.ipAddress) {\n // Firefox\n this.localAddress = local.ipAddress\n this.localPort = Number(local.portNumber)\n } else if (\n typeof selectedCandidatePair.googLocalAddress === 'string'\n ) {\n // TODO: remove this once Chrome 58 is released\n local = selectedCandidatePair.googLocalAddress.split(':')\n this.localAddress = local[0]\n this.localPort = Number(local[1])\n }\n if (this.localAddress) {\n this.localFamily = this.localAddress.includes(':')\n ? 'IPv6'\n : 'IPv4'\n }\n\n let remote =\n remoteCandidates[selectedCandidatePair.remoteCandidateId]\n\n if (remote && (remote.ip || remote.address)) {\n // Spec\n this.remoteAddress = remote.ip || remote.address\n this.remotePort = Number(remote.port)\n } else if (remote && remote.ipAddress) {\n // Firefox\n this.remoteAddress = remote.ipAddress\n this.remotePort = Number(remote.portNumber)\n } else if (\n typeof selectedCandidatePair.googRemoteAddress === 'string'\n ) {\n // TODO: remove this once Chrome 58 is released\n remote = selectedCandidatePair.googRemoteAddress.split(':')\n this.remoteAddress = remote[0]\n this.remotePort = Number(remote[1])\n }\n if (this.remoteAddress) {\n this.remoteFamily = this.remoteAddress.includes(':')\n ? 'IPv6'\n : 'IPv4'\n }\n\n this._debug(\n 'connect local: %s:%s remote: %s:%s',\n this.localAddress,\n this.localPort,\n this.remoteAddress,\n this.remotePort\n )\n }\n\n items.forEach(item => {\n // Spec-compliant\n if (item.type === 'transport' && item.selectedCandidatePairId) {\n setSelectedCandidatePair(\n candidatePairs[item.selectedCandidatePairId]\n )\n }\n\n // Old implementations\n if (\n (item.type === 'googCandidatePair' &&\n item.googActiveConnection === 'true') ||\n ((item.type === 'candidatepair' ||\n item.type === 'candidate-pair') &&\n item.selected)\n ) {\n setSelectedCandidatePair(item)\n }\n })\n\n // Ignore candidate pair selection in browsers like Safari 11 that do not have any local or remote candidates\n // But wait until at least 1 candidate pair is available\n if (\n !foundSelectedCandidatePair &&\n (!Object.keys(candidatePairs).length ||\n Object.keys(localCandidates).length)\n ) {\n setTimeout(findCandidatePair, 100)\n return\n } else {\n this._connecting = false\n this._connected = true\n }\n\n if (this._chunk) {\n try {\n this.send(this._chunk)\n } catch (err) {\n return this.destroy(errCode(err, 'ERR_DATA_CHANNEL'))\n }\n this._chunk = null\n this._debug('sent chunk from \"write before connect\"')\n\n const cb = this._cb\n this._cb = null\n cb(null)\n }\n\n // If `bufferedAmountLowThreshold` and 'onbufferedamountlow' are unsupported,\n // fallback to using setInterval to implement backpressure.\n if (typeof this._channel.bufferedAmountLowThreshold !== 'number') {\n this._interval = setInterval(() => this._onInterval(), 150)\n if (this._interval.unref) this._interval.unref()\n }\n\n this._debug('connect')\n this.emit('connect')\n })\n }\n findCandidatePair()\n }\n\n _onInterval () {\n if (\n !this._cb ||\n !this._channel ||\n this._channel.bufferedAmount > MAX_BUFFERED_AMOUNT\n ) {\n return\n }\n this._onChannelBufferedAmountLow()\n }\n\n _onSignalingStateChange () {\n if (this.destroyed) return\n\n if (this._pc.signalingState === 'stable') {\n this._isNegotiating = false\n\n // HACK: Firefox doesn't yet support removing tracks when signalingState !== 'stable'\n this._debug('flushing sender queue', this._sendersAwaitingStable)\n this._sendersAwaitingStable.forEach(sender => {\n this._pc.removeTrack(sender)\n this._queuedNegotiation = true\n })\n this._sendersAwaitingStable = []\n\n if (this._queuedNegotiation) {\n this._debug('flushing negotiation queue')\n this._queuedNegotiation = false\n this._needsNegotiation() // negotiate again\n } else {\n this._debug('negotiated')\n this.emit('negotiated')\n }\n }\n\n this._debug('signalingStateChange %s', this._pc.signalingState)\n this.emit('signalingStateChange', this._pc.signalingState)\n }\n\n _onIceCandidate (event) {\n if (this.destroyed) return\n if (event.candidate && this.trickle) {\n this.emit('signal', {\n type: 'candidate',\n candidate: {\n candidate: event.candidate.candidate,\n sdpMLineIndex: event.candidate.sdpMLineIndex,\n sdpMid: event.candidate.sdpMid\n }\n })\n } else if (!event.candidate && !this._iceComplete) {\n this._iceComplete = true\n this.emit('_iceComplete')\n }\n // as soon as we've received one valid candidate start timeout\n if (event.candidate) {\n this._startIceCompleteTimeout()\n }\n }\n\n _onChannelMessage (event) {\n if (this.destroyed) return\n let data = event.data\n if (data instanceof ArrayBuffer) data = new Uint8Array(data)\n this.emit('data', data)\n }\n\n _onChannelBufferedAmountLow () {\n if (this.destroyed || !this._cb) return\n this._debug(\n 'ending backpressure: bufferedAmount %d',\n this._channel.bufferedAmount\n )\n const cb = this._cb\n this._cb = null\n cb(null)\n }\n\n _onChannelOpen () {\n if (this._connected || this.destroyed) return\n this._debug('on channel open')\n this._channelReady = true\n this._maybeReady()\n }\n\n _onChannelClose () {\n if (this.destroyed) return\n this._debug('on channel close')\n this.destroy()\n }\n\n _onTrack (event) {\n if (this.destroyed) return\n\n event.streams.forEach(eventStream => {\n this._debug('on track')\n this.emit('track', event.track, eventStream)\n\n this._remoteTracks.push({\n track: event.track,\n stream: eventStream\n })\n\n if (\n this._remoteStreams.some(remoteStream => {\n return remoteStream.id === eventStream.id\n })\n ) { return } // Only fire one 'stream' event, even though there may be multiple tracks per stream\n\n this._remoteStreams.push(eventStream)\n queueMicrotask(() => {\n this._debug('on stream')\n this.emit('stream', eventStream) // ensure all tracks have been added\n })\n })\n }\n\n _debug (...args) {\n if (!this._doDebug) return\n args[0] = '[' + this._id + '] ' + args[0]\n console.log(...args)\n }\n\n // event emitter\n on (key, listener) {\n const map = this._map\n if (!map.has(key)) map.set(key, new Set())\n map.get(key).add(listener)\n }\n\n off (key, listener) {\n const map = this._map\n const listeners = map.get(key)\n if (!listeners) return\n listeners.delete(listener)\n if (listeners.size === 0) map.delete(key)\n }\n\n once (key, listener) {\n const listener_ = (...args) => {\n this.off(key, listener_)\n listener(...args)\n }\n this.on(key, listener_)\n }\n\n emit (key, ...args) {\n const map = this._map\n if (!map.has(key)) return\n for (const listener of map.get(key)) {\n try {\n listener(...args)\n } catch (err) {\n console.error(err)\n }\n }\n }\n}\n\nPeer.WEBRTC_SUPPORT = !!getBrowserRTC()\n\n/**\n * Expose peer and data channel config for overriding all Peer\n * instances. Otherwise, just set opts.config or opts.channelConfig\n * when constructing a Peer.\n */\nPeer.config = {\n iceServers: [\n {\n urls: [\n 'stun:stun.l.google.com:19302',\n 'stun:global.stun.twilio.com:3478'\n ]\n }\n ],\n sdpSemantics: 'unified-plan'\n}\n\nPeer.channelConfig = {}\n\n// module.exports = Peer\nexport default Peer\n", "import SimplePeer from 'simple-peer-light';\nimport type {\n RecordPlugin,\n ICrossOriginIframeMirror,\n IMirror,\n} from '@betterbugs/types';\nimport type { WebRTCDataChannel } from './types';\n\nexport const PLUGIN_NAME = 'rrweb/canvas-webrtc@1';\n\nexport type CrossOriginIframeMessageEventContent = {\n type: 'rrweb-canvas-webrtc';\n data:\n | {\n type: 'signal';\n signal: RTCSessionDescriptionInit;\n }\n | {\n type: 'who-has-canvas';\n rootId: number;\n id: number;\n }\n | {\n type: 'i-have-canvas';\n rootId: number;\n };\n};\n\nexport class RRWebPluginCanvasWebRTCRecord {\n private peer: SimplePeer.Instance | null = null;\n private mirror: IMirror<Node> | undefined;\n private crossOriginIframeMirror: ICrossOriginIframeMirror | undefined;\n private streamMap: Map<number, MediaStream> = new Map();\n private incomingStreams = new Set<MediaStream>();\n private outgoingStreams = new Set<MediaStream>();\n private streamNodeMap = new Map<string, number>();\n private canvasWindowMap = new Map<number, WindowProxy>();\n private windowPeerMap = new WeakMap<WindowProxy, SimplePeer.Instance>();\n private peerWindowMap = new WeakMap<SimplePeer.Instance, WindowProxy>();\n private signalSendCallback: (msg: RTCSessionDescriptionInit) => void;\n\n constructor({\n signalSendCallback,\n peer,\n }: {\n signalSendCallback: RRWebPluginCanvasWebRTCRecord['signalSendCallback'];\n peer?: SimplePeer.Instance;\n }) {\n this.signalSendCallback = signalSendCallback;\n window.addEventListener('message', (event: MessageEvent) =>\n this.windowPostMessageHandler(event),\n );\n if (peer) this.peer = peer;\n }\n public initPlugin(): RecordPlugin {\n return {\n name: PLUGIN_NAME,\n getMirror: ({ nodeMirror, crossOriginIframeMirror }) => {\n this.mirror = nodeMirror;\n this.crossOriginIframeMirror = crossOriginIframeMirror;\n },\n options: {},\n };\n }\n\n public signalReceive(signal: RTCSessionDescriptionInit) {\n if (!this.peer) this.setupPeer();\n this.peer?.signal(signal);\n }\n\n public signalReceiveFromCrossOriginIframe(\n signal: RTCSessionDescriptionInit,\n source: WindowProxy,\n ) {\n const peer = this.setupPeer(source);\n peer.signal(signal);\n }\n\n private startStream(id: number, stream: MediaStream) {\n if (!this.peer) this.setupPeer();\n\n const data: WebRTCDataChannel = {\n nodeId: id,\n streamId: stream.id,\n };\n this.peer?.send(JSON.stringify(data));\n if (!this.outgoingStreams.has(stream)) this.peer?.addStream(stream);\n this.outgoingStreams.add(stream);\n }\n\n public setupPeer(source?: WindowProxy): SimplePeer.Instance {\n let peer: SimplePeer.Instance;\n\n if (!source) {\n if (this.peer) return this.peer;\n\n peer = this.peer = new SimplePeer({\n initiator: true,\n // trickle: false, // only create one WebRTC offer per session\n });\n } else {\n const peerFromMap = this.windowPeerMap.get(source);\n\n if (peerFromMap) return peerFromMap;\n\n peer = new SimplePeer({\n initiator: false,\n // trickle: false, // only create one WebRTC offer per session\n });\n this.windowPeerMap.set(source, peer);\n this.peerWindowMap.set(peer, source);\n }\n\n const resetPeer = (source?: WindowProxy) => {\n if (!source) return (this.peer = null);\n\n this.windowPeerMap.delete(source);\n this.peerWindowMap.delete(peer);\n };\n\n peer.on('error', (err: Error) => {\n resetPeer(source);\n console.log('error', err);\n });\n\n peer.on('close', () => {\n resetPeer(source);\n console.log('closing');\n });\n\n peer.on('signal', (data: RTCSessionDescriptionInit) => {\n if (this.inRootFrame()) {\n if (peer === this.peer) {\n // connected to replayer\n this.signalSendCallback(data);\n } else {\n // connected to cross-origin iframe\n this.peerWindowMap.get(peer)?.postMessage(\n {\n type: 'rrweb-canvas-webrtc',\n data: {\n type: 'signal',\n signal: data,\n },\n } as CrossOriginIframeMessageEventContent,\n '*',\n );\n }\n } else {\n // connected to root frame\n window.top?.postMessage(\n {\n type: 'rrweb-canvas-webrtc',\n data: {\n type: 'signal',\n signal: data,\n },\n } as CrossOriginIframeMessageEventContent,\n '*',\n );\n }\n });\n\n peer.on('connect', () => {\n // connected to cross-origin iframe, no need to do anything\n if (this.inRootFrame() && peer !== this.peer) return;\n\n // cross origin frame connected to root frame\n // or root frame connected to replayer\n // send all streams to peer\n for (const [id, stream] of this.streamMap) {\n this.startStream(id, stream);\n }\n });\n\n if (!this.inRootFrame()) return peer;\n\n peer.on('data', (data: SimplePeer.SimplePeerData) => {\n try {\n const json = JSON.parse(data as string) as WebRTCDataChannel;\n this.streamNodeMap.set(json.streamId, json.nodeId);\n } catch (error) {\n console.error('Could not parse data', error);\n }\n this.flushStreams();\n });\n\n peer.on('stream', (stream: MediaStream) => {\n this.incomingStreams.add(stream);\n this.flushStreams();\n });\n\n return peer;\n }\n\n public setupStream(id: number, rootId?: number): boolean | MediaStream {\n if (id === -1 || !this.mirror) return false;\n let stream: MediaStream | undefined = this.streamMap.get(rootId || id);\n if (stream) return stream;\n\n const el = this.mirror.getNode(id) as HTMLCanvasElement | null;\n\n if (!el || !('captureStream' in el))\n // we don't have it, lets check our iframes\n return this.setupStreamInCrossOriginIframe(id, rootId || id);\n\n if (!this.inRootFrame()) {\n window.top?.postMessage(\n {\n type: 'rrweb-canvas-webrtc',\n data: {\n type: 'i-have-canvas',\n rootId: rootId || id,\n },\n } as CrossOriginIframeMessageEventContent,\n '*',\n );\n }\n\n stream = el.captureStream();\n this.streamMap.set(rootId || id, stream);\n this.setupPeer();\n\n return stream;\n }\n\n private flushStreams() {\n this.incomingStreams.forEach((stream) => {\n const nodeId = this.streamNodeMap.get(stream.id);\n if (!nodeId) return;\n // got remote video stream, now let's send it to the replayer\n this.startStream(nodeId, stream);\n });\n }\n\n private inRootFrame(): boolean {\n return Boolean(window.top && window.top === window);\n }\n\n public setupStreamInCrossOriginIframe(id: number, rootId: number): boolean {\n let found = false;\n\n document.querySelectorAll('iframe').forEach((iframe) => {\n if (found) return;\n if (!this.crossOriginIframeMirror) return;\n\n const remoteId = this.crossOriginIframeMirror.getRemoteId(iframe, id);\n if (remoteId === -1) return;\n\n found = true;\n iframe.contentWindow?.postMessage(\n {\n type: 'rrweb-canvas-webrtc',\n data: {\n type: 'who-has-canvas',\n id: remoteId,\n rootId,\n },\n } as CrossOriginIframeMessageEventContent,\n '*',\n );\n });\n return found;\n }\n\n private isCrossOriginIframeMessageEventContent(\n event: MessageEvent<unknown>,\n ): event is MessageEvent<CrossOriginIframeMessageEventContent> {\n return Boolean(\n event.data &&\n typeof event.data === 'object' &&\n 'type' in event.data &&\n 'data' in event.data &&\n (event.data as CrossOriginIframeMessageEventContent).type ===\n 'rrweb-canvas-webrtc' &&\n (event.data as CrossOriginIframeMessageEventContent).data,\n );\n }\n\n /**\n * All messages being sent to the (root or sub) frame are received through `windowPostMessageHandler`.\n * @param event - The message event\n */\n private windowPostMessageHandler(\n event: MessageEvent<CrossOriginIframeMessageEventContent> | MessageEvent,\n ) {\n if (!this.isCrossOriginIframeMessageEventContent(event)) return;\n\n const { type } = event.data.data;\n if (type === 'who-has-canvas') {\n const { id, rootId } = event.data.data;\n this.setupStream(id, rootId);\n } else if (type === 'signal') {\n const { signal } = event.data.data;\n const { source } = event;\n if (!source || !('self' in source)) return;\n if (this.inRootFrame()) {\n this.signalReceiveFromCrossOriginIframe(signal, source);\n } else {\n this.signalReceive(signal);\n }\n } else if (type === 'i-have-canvas') {\n const { rootId } = event.data.data;\n const { source } = event;\n if (!source || !('self' in source)) return;\n this.canvasWindowMap.set(rootId, source);\n }\n }\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;4OAAA,oFACA,MAAMA,EAAsB,GAAK,KAC3BC,EAAsB,EAAI,IAC1BC,EAA0B,EAAI,IAEpC,SAASC,EAAaC,EAAM,CAC1B,MAAMC,EAAQ,IAAI,WAAWD,CAAI,EACjC,QAASE,EAAI,EAAGA,EAAIF,EAAME,IACxBD,EAAMC,CAAC,EAAK,KAAK,OAAM,EAAK,IAAO,EAErC,OAAOD,CACT,CAEA,SAASE,GAAiB,CACxB,GAAI,OAAO,YAAe,YAAa,OAAO,KAC9C,MAAMC,EAAO,CACX,kBACE,WAAW,mBACX,WAAW,sBACX,WAAW,wBACb,sBACE,WAAW,uBACX,WAAW,0BACX,WAAW,4BACb,gBACE,WAAW,iBACX,WAAW,oBACX,WAAW,qBACd,EACD,OAAKA,EAAK,kBACHA,EAD6B,IAEtC,CAEA,SAASC,EAASC,EAAKC,EAAM,CAC3B,cAAO,eAAeD,EAAK,OAAQ,CACjC,MAAOC,EACP,WAAY,GACZ,aAAc,EAClB,CAAG,EACMD,CACT,CAGA,SAASE,EAAeC,EAAK,CAC3B,OAAOA,EAAI,QAAQ,6BAA8B,EAAE,CACrD,CAEA,SAASC,EAAMC,EAAS,CACtB,QAAQ,KAAKA,CAAO,CACtB,CAMA,MAAMC,CAAK,CACT,YAAaC,EAAO,CAAA,EAAI,CAsCtB,GArCA,KAAK,KAAO,IAAI,IAEhB,KAAK,IAAMd,EAAY,CAAC,EAAE,SAAS,KAAK,EAAE,MAAM,EAAG,CAAC,EACpD,KAAK,SAAWc,EAAK,MACrB,KAAK,OAAO,cAAeA,CAAI,EAE/B,KAAK,YAAcA,EAAK,UACpBA,EAAK,aAAed,EAAY,EAAE,EAAE,SAAS,KAAK,EAClD,KAEJ,KAAK,UAAYc,EAAK,WAAa,GACnC,KAAK,cAAgBA,EAAK,eAAiBD,EAAK,cAChD,KAAK,kBAAoB,KAAK,cAAc,WAC5C,KAAK,OAAS,OAAO,OAAO,CAAE,EAAEA,EAAK,OAAQC,EAAK,MAAM,EACxD,KAAK,aAAeA,EAAK,cAAgB,CAAE,EAC3C,KAAK,cAAgBA,EAAK,eAAiB,CAAE,EAC7C,KAAK,aAAeA,EAAK,eAAiBJ,GAAOA,GACjD,KAAK,QAAUI,EAAK,UAAYA,EAAK,OAAS,CAACA,EAAK,MAAM,EAAI,CAAA,GAC9D,KAAK,QAAUA,EAAK,UAAY,OAAYA,EAAK,QAAU,GAC3D,KAAK,iBACHA,EAAK,mBAAqB,OAAYA,EAAK,iBAAmB,GAChE,KAAK,mBAAqBA,EAAK,oBAAsBhB,EAErD,KAAK,UAAY,GACjB,KAAK,WAAa,GAClB,KAAK,WAAa,GAElB,KAAK,cAAgB,OACrB,KAAK,aAAe,OACpB,KAAK,WAAa,OAClB,KAAK,aAAe,OACpB,KAAK,YAAc,OACnB,KAAK,UAAY,OAEjB,KAAK,MACHgB,EAAK,MAAQ,OAAOA,EAAK,MAAS,SAAWA,EAAK,KAAOV,EAAe,EAEtE,CAAC,KAAK,MACR,MACQE,EADJ,OAAO,QAAW,YAElB,IAAI,MACF,mEACD,EAKD,IAAI,MAAM,4CAA4C,EAJtD,oBACD,EASL,KAAK,SAAW,GAChB,KAAK,cAAgB,GACrB,KAAK,aAAe,GACpB,KAAK,kBAAoB,KACzB,KAAK,SAAW,KAChB,KAAK,mBAAqB,CAAE,EAE5B,KAAK,eAAiB,GACtB,KAAK,kBAAoB,GACzB,KAAK,oBAAsB,GAC3B,KAAK,mBAAqB,GAC1B,KAAK,uBAAyB,CAAE,EAChC,KAAK,WAAa,IAAI,IACtB,KAAK,iBAAmB,KAExB,KAAK,cAAgB,CAAE,EACvB,KAAK,eAAiB,CAAE,EAExB,KAAK,OAAS,KACd,KAAK,IAAM,KACX,KAAK,UAAY,KAEjB,GAAI,CACF,KAAK,IAAM,IAAI,KAAK,MAAM,kBAAkB,KAAK,MAAM,CACxD,OAAQC,EAAK,CACZ,KAAK,QAAQD,EAAQC,EAAK,oBAAoB,CAAC,EAC/C,MACD,CAID,KAAK,qBAAuB,OAAO,KAAK,IAAI,mBAAsB,SAElE,KAAK,IAAI,2BAA6B,IAAM,CAC1C,KAAK,kBAAmB,CACzB,EACD,KAAK,IAAI,0BAA4B,IAAM,CACzC,KAAK,kBAAmB,CACzB,EACD,KAAK,IAAI,wBAA0B,IAAM,CACvC,KAAK,yBAA0B,CAChC,EACD,KAAK,IAAI,uBAAyB,IAAM,CACtC,KAAK,wBAAyB,CAC/B,EACD,KAAK,IAAI,eAAiBQ,GAAS,CACjC,KAAK,gBAAgBA,CAAK,CAC3B,EAGG,OAAO,KAAK,IAAI,cAAiB,UACnC,KAAK,IAAI,aAAa,MAAMR,GAAO,CACjC,KAAK,QAAQD,EAAQC,EAAK,sBAAsB,CAAC,CACzD,CAAO,EASC,KAAK,WAAa,KAAK,kBACzB,KAAK,WAAW,CACd,QAAS,KAAK,IAAI,kBAChB,KAAK,YACL,KAAK,aACN,CACT,CAAO,EAED,KAAK,IAAI,cAAgBQ,GAAS,CAChC,KAAK,WAAWA,CAAK,CACtB,EAGC,KAAK,SACP,KAAK,QAAQ,QAAQC,GAAU,CAC7B,KAAK,UAAUA,CAAM,CAC7B,CAAO,EAEH,KAAK,IAAI,QAAUD,GAAS,CAC1B,KAAK,SAASA,CAAK,CACpB,EAED,KAAK,OAAO,qBAAqB,EACjC,KAAK,kBAAmB,CACzB,CAED,IAAI,YAAc,CAChB,OAAQ,KAAK,UAAY,KAAK,SAAS,gBAAmB,CAC3D,CAID,IAAI,WAAa,CACf,OAAO,KAAK,YAAc,KAAK,SAAS,aAAe,MACxD,CAED,SAAW,CACT,MAAO,CACL,KAAM,KAAK,UACX,OAAQ,KAAK,YACb,QAAS,KAAK,YACf,CACF,CAED,OAAQE,EAAM,CACZ,GAAI,MAAK,WACT,IAAI,KAAK,UAAW,MAAMX,EAAQ,IAAI,MAAM,uCAAuC,EAAG,eAAe,EACrG,GAAI,OAAOW,GAAS,SAClB,GAAI,CACFA,EAAO,KAAK,MAAMA,CAAI,CACvB,OAAQV,EAAK,CACZU,EAAO,CAAE,CACV,CAEH,KAAK,OAAO,UAAU,EAElBA,EAAK,aAAe,KAAK,YAC3B,KAAK,OAAO,4BAA4B,EACxC,KAAK,kBAAmB,GAEtBA,EAAK,oBAAsB,KAAK,YAClC,KAAK,OAAO,6BAA6B,EACzC,KAAK,eACHA,EAAK,mBAAmB,KACxBA,EAAK,mBAAmB,IACzB,GAECA,EAAK,YACH,KAAK,IAAI,mBAAqB,KAAK,IAAI,kBAAkB,KAC3D,KAAK,iBAAiBA,EAAK,SAAS,EAEpC,KAAK,mBAAmB,KAAKA,EAAK,SAAS,GAG3CA,EAAK,KACP,KAAK,IACF,qBAAqB,IAAI,KAAK,MAAM,sBAAsBA,CAAI,CAAC,EAC/D,KAAK,IAAM,CACN,KAAK,YAET,KAAK,mBAAmB,QAAQC,GAAa,CAC3C,KAAK,iBAAiBA,CAAS,CAC3C,CAAW,EACD,KAAK,mBAAqB,CAAE,EAExB,KAAK,IAAI,kBAAkB,OAAS,SAAS,KAAK,cAAe,EAC/E,CAAS,EACA,MAAMX,GAAO,CACZ,KAAK,QAAQD,EAAQC,EAAK,4BAA4B,CAAC,CACjE,CAAS,EAGH,CAACU,EAAK,KACN,CAACA,EAAK,WACN,CAACA,EAAK,aACN,CAACA,EAAK,oBAEN,KAAK,QACHX,EACE,IAAI,MAAM,0CAA0C,EACpD,eACD,CACF,EAEJ,CAED,iBAAkBY,EAAW,CAC3B,MAAMC,EAAkB,IAAI,KAAK,MAAM,gBAAgBD,CAAS,EAChE,KAAK,IAAI,gBAAgBC,CAAe,EAAE,MAAMZ,GAAO,CAEnD,CAACY,EAAgB,SACjBA,EAAgB,QAAQ,SAAS,QAAQ,EAEzCR,EAAK,qCAAqC,EAE1C,KAAK,QAAQL,EAAQC,EAAK,uBAAuB,CAAC,CAE1D,CAAK,CACF,CAMD,KAAMa,EAAO,CACX,GAAI,MAAK,WACT,IAAI,KAAK,UAAW,MAAMd,EAAQ,IAAI,MAAM,qCAAqC,EAAG,eAAe,EACnG,KAAK,SAAS,KAAKc,CAAK,EACzB,CAOD,eAAgBC,EAAMC,EAAM,CAC1B,GAAI,MAAK,WACT,IAAI,KAAK,UAAW,MAAMhB,EAAQ,IAAI,MAAM,+CAA+C,EAAG,eAAe,EAG7G,GAFA,KAAK,OAAO,kBAAkB,EAE1B,KAAK,UACP,GAAI,CACF,KAAK,IAAI,eAAee,EAAMC,CAAI,EAClC,KAAK,kBAAmB,CACzB,OAAQf,EAAK,CACZ,KAAK,QAAQD,EAAQC,EAAK,qBAAqB,CAAC,CACjD,MAED,KAAK,KAAK,SAAU,CAElB,KAAM,qBACN,mBAAoB,CAAE,KAAAc,EAAM,KAAAC,CAAM,CAC1C,CAAO,EAEJ,CAMD,UAAWN,EAAQ,CACjB,GAAI,MAAK,WACT,IAAI,KAAK,UAAW,MAAMV,EAAQ,IAAI,MAAM,0CAA0C,EAAG,eAAe,EACxG,KAAK,OAAO,aAAa,EAEzBU,EAAO,UAAS,EAAG,QAAQO,GAAS,CAClC,KAAK,SAASA,EAAOP,CAAM,CACjC,CAAK,EACF,CAOD,SAAUO,EAAOP,EAAQ,CACvB,GAAI,KAAK,WAAY,OACrB,GAAI,KAAK,UAAW,MAAMV,EAAQ,IAAI,MAAM,yCAAyC,EAAG,eAAe,EACvG,KAAK,OAAO,YAAY,EAExB,MAAMkB,EAAS,KAAK,WAAW,IAAID,CAAK,GAAK,IAAI,IACjD,IAAIE,EAASD,EAAO,IAAIR,CAAM,EAC9B,GAAI,CAACS,EACHA,EAAS,KAAK,IAAI,SAASF,EAAOP,CAAM,EACxCQ,EAAO,IAAIR,EAAQS,CAAM,EACzB,KAAK,WAAW,IAAIF,EAAOC,CAAM,EACjC,KAAK,kBAAmB,MAC9B,OAAeC,EAAO,QACVnB,EACJ,IAAI,MACF,mFACD,EACD,oBACD,EAEKA,EACJ,IAAI,MAAM,8CAA8C,EACxD,0BACD,CAEJ,CAQD,aAAcoB,EAAUC,EAAUX,EAAQ,CACxC,GAAI,KAAK,WAAY,OACrB,GAAI,KAAK,UAAW,MAAMV,EAAQ,IAAI,MAAM,6CAA6C,EAAG,eAAe,EAC3G,KAAK,OAAO,gBAAgB,EAE5B,MAAMkB,EAAS,KAAK,WAAW,IAAIE,CAAQ,EACrCD,EAASD,EAASA,EAAO,IAAIR,CAAM,EAAI,KAC7C,GAAI,CAACS,EACH,MAAMnB,EACJ,IAAI,MAAM,4CAA4C,EACtD,qBACD,EAECqB,GAAU,KAAK,WAAW,IAAIA,EAAUH,CAAM,EAE9CC,EAAO,cAAgB,KACzBA,EAAO,aAAaE,CAAQ,EAE5B,KAAK,QACHrB,EACE,IAAI,MAAM,+CAA+C,EACzD,8BACD,CACF,CAEJ,CAOD,YAAaiB,EAAOP,EAAQ,CAC1B,GAAI,KAAK,WAAY,OACrB,GAAI,KAAK,UAAW,MAAMV,EAAQ,IAAI,MAAM,4CAA4C,EAAG,eAAe,EAC1G,KAAK,OAAO,gBAAgB,EAE5B,MAAMkB,EAAS,KAAK,WAAW,IAAID,CAAK,EAClCE,EAASD,EAASA,EAAO,IAAIR,CAAM,EAAI,KAC7C,GAAI,CAACS,EACH,MAAMnB,EACJ,IAAI,MAAM,2CAA2C,EACrD,qBACD,EAEH,GAAI,CACFmB,EAAO,QAAU,GACjB,KAAK,IAAI,YAAYA,CAAM,CAC5B,OAAQlB,EAAK,CACRA,EAAI,OAAS,sBACf,KAAK,uBAAuB,KAAKkB,CAAM,EAEvC,KAAK,QAAQnB,EAAQC,EAAK,kBAAkB,CAAC,CAEhD,CACD,KAAK,kBAAmB,CACzB,CAMD,aAAcS,EAAQ,CACpB,GAAI,MAAK,WACT,IAAI,KAAK,UAAW,MAAMV,EAAQ,IAAI,MAAM,6CAA6C,EAAG,eAAe,EAC3G,KAAK,OAAO,iBAAiB,EAE7BU,EAAO,UAAS,EAAG,QAAQO,GAAS,CAClC,KAAK,YAAYA,EAAOP,CAAM,CACpC,CAAK,EACF,CAED,mBAAqB,CACnB,KAAK,OAAO,mBAAmB,EAC3B,MAAK,sBACT,KAAK,oBAAsB,GAC3B,eAAe,IAAM,CACnB,KAAK,oBAAsB,GACvB,KAAK,WAAa,CAAC,KAAK,mBAC1B,KAAK,OAAO,8BAA8B,EAC1C,KAAK,UAAW,GAEhB,KAAK,OAAO,qDAAqD,EAEnE,KAAK,kBAAoB,EAC/B,CAAK,EACF,CAED,WAAa,CACX,GAAI,MAAK,WACT,IAAI,KAAK,UAAW,MAAMV,EAAQ,IAAI,MAAM,0CAA0C,EAAG,eAAe,EAEpG,KAAK,UACH,KAAK,gBACP,KAAK,mBAAqB,GAC1B,KAAK,OAAO,+BAA+B,IAE3C,KAAK,OAAO,mBAAmB,EAC/B,WAAW,IAAM,CAEf,KAAK,aAAc,CACpB,EAAE,CAAC,GAGF,KAAK,gBACP,KAAK,mBAAqB,GAC1B,KAAK,OAAO,+BAA+B,IAE3C,KAAK,OAAO,uCAAuC,EACnD,KAAK,KAAK,SAAU,CAElB,KAAM,cACN,YAAa,EACvB,CAAS,GAGL,KAAK,eAAiB,GACvB,CAED,QAASC,EAAK,CACR,KAAK,WAAa,KAAK,aAC3B,KAAK,WAAa,GAElB,KAAK,OAAO,yBAA0BA,IAAQA,EAAI,SAAWA,EAAI,EAEjE,eAAe,IAAM,CAsBnB,GApBA,KAAK,UAAY,GACjB,KAAK,WAAa,GAElB,KAAK,OAAO,sBAAuBA,IAAQA,EAAI,SAAWA,EAAI,EAE9D,KAAK,WAAa,GAClB,KAAK,SAAW,GAChB,KAAK,cAAgB,GACrB,KAAK,cAAgB,KACrB,KAAK,eAAiB,KACtB,KAAK,WAAa,KAElB,cAAc,KAAK,gBAAgB,EACnC,KAAK,iBAAmB,KAExB,cAAc,KAAK,SAAS,EAC5B,KAAK,UAAY,KACjB,KAAK,OAAS,KACd,KAAK,IAAM,KAEP,KAAK,SAAU,CACjB,GAAI,CACF,KAAK,SAAS,MAAO,CAC/B,OAAiBA,EAAK,CAAE,CAGhB,KAAK,SAAS,UAAY,KAC1B,KAAK,SAAS,OAAS,KACvB,KAAK,SAAS,QAAU,KACxB,KAAK,SAAS,QAAU,IACzB,CACD,GAAI,KAAK,IAAK,CACZ,GAAI,CACF,KAAK,IAAI,MAAO,CAC1B,OAAiBA,EAAK,CAAE,CAGhB,KAAK,IAAI,2BAA6B,KACtC,KAAK,IAAI,0BAA4B,KACrC,KAAK,IAAI,uBAAyB,KAClC,KAAK,IAAI,eAAiB,KAC1B,KAAK,IAAI,QAAU,KACnB,KAAK,IAAI,cAAgB,IAC1B,CACD,KAAK,IAAM,KACX,KAAK,SAAW,KAEZA,GAAK,KAAK,KAAK,QAASA,CAAG,EAC/B,KAAK,KAAK,OAAO,CACvB,CAAK,EACF,CAED,WAAYQ,EAAO,CACjB,GAAI,CAACA,EAAM,QAIT,OAAO,KAAK,QACVT,EACE,IAAI,MAAM,kDAAkD,EAC5D,kBACD,CACF,EAGH,KAAK,SAAWS,EAAM,QACtB,KAAK,SAAS,WAAa,cAEvB,OAAO,KAAK,SAAS,4BAA+B,WACtD,KAAK,SAAS,2BAA6BlB,GAG7C,KAAK,YAAc,KAAK,SAAS,MAEjC,KAAK,SAAS,UAAYkB,GAAS,CACjC,KAAK,kBAAkBA,CAAK,CAC7B,EACD,KAAK,SAAS,oBAAsB,IAAM,CACxC,KAAK,4BAA6B,CACnC,EACD,KAAK,SAAS,OAAS,IAAM,CAC3B,KAAK,eAAgB,CACtB,EACD,KAAK,SAAS,QAAU,IAAM,CAC5B,KAAK,gBAAiB,CACvB,EACD,KAAK,SAAS,QAAUR,GAAO,CAC7B,KAAK,QAAQD,EAAQC,EAAK,kBAAkB,CAAC,CAC9C,EAID,IAAIqB,EAAY,GAChB,KAAK,iBAAmB,YAAY,IAAM,CAEpC,KAAK,UAAY,KAAK,SAAS,aAAe,WAC5CA,GAAW,KAAK,gBAAiB,EACrCA,EAAY,IAEZA,EAAY,EAEf,EAAE7B,CAAuB,CAC3B,CAED,0BAA4B,CACtB,KAAK,WACL,KAAK,oBACT,KAAK,OAAO,6BAA6B,EACzC,KAAK,kBAAoB,WAAW,IAAM,CACnC,KAAK,eACR,KAAK,aAAe,GACpB,KAAK,OAAO,+BAA+B,EAC3C,KAAK,KAAK,YAAY,EACtB,KAAK,KAAK,cAAc,EAEhC,EAAO,KAAK,kBAAkB,EAC3B,CAED,cAAgB,CACV,KAAK,WAET,KAAK,IACF,YAAY,KAAK,YAAY,EAC7B,KAAK8B,GAAS,CACb,GAAI,KAAK,UAAW,OAChB,CAAC,KAAK,SAAW,CAAC,KAAK,mBAAoBA,EAAM,IAAMpB,EAAcoB,EAAM,GAAG,GAClFA,EAAM,IAAM,KAAK,aAAaA,EAAM,GAAG,EAEvC,MAAMC,EAAY,IAAM,CACtB,GAAI,KAAK,UAAW,OACpB,MAAMC,EAAS,KAAK,IAAI,kBAAoBF,EAC5C,KAAK,OAAO,QAAQ,EACpB,KAAK,KAAK,SAAU,CAClB,KAAME,EAAO,KACb,IAAKA,EAAO,GACxB,CAAW,CACF,EAEKC,EAAY,IAAM,CACtB,KAAK,OAAO,qBAAqB,EAC7B,MAAK,YACL,KAAK,SAAW,KAAK,aAAcF,EAAW,EAC7C,KAAK,KAAK,eAAgBA,CAAS,EACzC,EAEKG,EAAU1B,GAAO,CACrB,KAAK,QAAQD,EAAQC,EAAK,2BAA2B,CAAC,CACvD,EAED,KAAK,IAAI,oBAAoBsB,CAAK,EAAE,KAAKG,CAAS,EAAE,MAAMC,CAAO,CACzE,CAAO,EACA,MAAM1B,GAAO,CACZ,KAAK,QAAQD,EAAQC,EAAK,kBAAkB,CAAC,CACrD,CAAO,CACJ,CAED,6BAA+B,CACzB,KAAK,IAAI,iBACX,KAAK,IAAI,gBAAA,EAAkB,QAAQ2B,GAAe,CAE9C,CAACA,EAAY,KACbA,EAAY,OAAO,OACnB,CAACA,EAAY,YAEbA,EAAY,UAAY,GACxB,KAAK,eAAeA,EAAY,OAAO,MAAM,IAAI,EAE3D,CAAO,CAEJ,CAED,eAAiB,CACX,KAAK,WAET,KAAK,IACF,aAAa,KAAK,aAAa,EAC/B,KAAKC,GAAU,CACd,GAAI,KAAK,UAAW,OAChB,CAAC,KAAK,SAAW,CAAC,KAAK,mBAAoBA,EAAO,IAAM1B,EAAc0B,EAAO,GAAG,GACpFA,EAAO,IAAM,KAAK,aAAaA,EAAO,GAAG,EAEzC,MAAMC,EAAa,IAAM,CACvB,GAAI,KAAK,UAAW,OACpB,MAAML,EAAS,KAAK,IAAI,kBAAoBI,EAC5C,KAAK,OAAO,QAAQ,EACpB,KAAK,KAAK,SAAU,CAClB,KAAMJ,EAAO,KACb,IAAKA,EAAO,GACxB,CAAW,EACI,KAAK,WAAW,KAAK,4BAA6B,CACxD,EAEKC,EAAY,IAAM,CAClB,KAAK,YACL,KAAK,SAAW,KAAK,aAAcI,EAAY,EAC9C,KAAK,KAAK,eAAgBA,CAAU,EAC1C,EAEKH,EAAU1B,GAAO,CACrB,KAAK,QAAQD,EAAQC,EAAK,2BAA2B,CAAC,CACvD,EAED,KAAK,IAAI,oBAAoB4B,CAAM,EAAE,KAAKH,CAAS,EAAE,MAAMC,CAAO,CAC1E,CAAO,EACA,MAAM1B,GAAO,CACZ,KAAK,QAAQD,EAAQC,EAAK,mBAAmB,CAAC,CACtD,CAAO,CACJ,CAED,0BAA4B,CACtB,KAAK,WACL,KAAK,IAAI,kBAAoB,UAC/B,KAAK,QACHD,EAAQ,IAAI,MAAM,oBAAoB,EAAG,wBAAwB,CAClE,CAEJ,CAED,mBAAqB,CACnB,GAAI,KAAK,UAAW,OACpB,MAAM+B,EAAqB,KAAK,IAAI,mBAC9BC,EAAoB,KAAK,IAAI,kBAEnC,KAAK,OACH,kDACAD,EACAC,CACD,EACD,KAAK,KAAK,iBAAkBD,EAAoBC,CAAiB,GAG/DD,IAAuB,aACvBA,IAAuB,eAEvB,KAAK,SAAW,GAChB,KAAK,YAAa,GAEhBA,IAAuB,UACzB,KAAK,QACH/B,EACE,IAAI,MAAM,wBAAwB,EAClC,4BACD,CACF,EAEC+B,IAAuB,UACzB,KAAK,QACH/B,EACE,IAAI,MAAM,wBAAwB,EAClC,2BACD,CACF,CAEJ,CAED,SAAUiC,EAAI,CAEZ,MAAMC,EAAgBC,IAChB,OAAO,UAAU,SAAS,KAAKA,EAAO,MAAM,IAAM,kBACpDA,EAAO,OAAO,QAAQC,GAAS,CAC7B,OAAO,OAAOD,EAAQC,CAAK,CACrC,CAAS,EAEID,GAIL,KAAK,IAAI,SAAS,SAAW,GAAK,KAAK,qBACzC,KAAK,IAAI,SAAQ,EAAG,KAClBE,GAAO,CACL,MAAMC,EAAU,CAAE,EAClBD,EAAI,QAAQF,GAAU,CACpBG,EAAQ,KAAKJ,EAAcC,CAAM,CAAC,CAC9C,CAAW,EACDF,EAAG,KAAMK,CAAO,CACjB,EACDrC,GAAOgC,EAAGhC,CAAG,CACd,EAGQ,KAAK,IAAI,SAAS,OAAS,EACpC,KAAK,IAAI,SACPoC,GAAO,CAEL,GAAI,KAAK,UAAW,OAEpB,MAAMC,EAAU,CAAE,EAClBD,EAAI,OAAM,EAAG,QAAQE,GAAU,CAC7B,MAAMJ,EAAS,CAAE,EACjBI,EAAO,MAAK,EAAG,QAAQC,GAAQ,CAC7BL,EAAOK,CAAI,EAAID,EAAO,KAAKC,CAAI,CAC7C,CAAa,EACDL,EAAO,GAAKI,EAAO,GACnBJ,EAAO,KAAOI,EAAO,KACrBJ,EAAO,UAAYI,EAAO,UAC1BD,EAAQ,KAAKJ,EAAcC,CAAM,CAAC,CAC9C,CAAW,EACDF,EAAG,KAAMK,CAAO,CACjB,EACDrC,GAAOgC,EAAGhC,CAAG,CACd,EAKDgC,EAAG,KAAM,CAAA,CAAE,CAEd,CAED,aAAe,CAMb,GALA,KAAK,OACH,8BACA,KAAK,SACL,KAAK,aACN,EAEC,KAAK,YACL,KAAK,aACL,CAAC,KAAK,UACN,CAAC,KAAK,cACJ,OAEJ,KAAK,YAAc,GAGnB,MAAMQ,EAAoB,IAAM,CAC1B,KAAK,WAET,KAAK,SAAS,CAACxC,EAAKyC,IAAU,CAC5B,GAAI,KAAK,UAAW,OAGhBzC,IAAKyC,EAAQ,CAAE,GAEnB,MAAMC,EAAmB,CAAE,EACrBC,EAAkB,CAAE,EACpBC,EAAiB,CAAE,EACzB,IAAIC,EAA6B,GAEjCJ,EAAM,QAAQK,GAAQ,EAIlBA,EAAK,OAAS,mBACdA,EAAK,OAAS,sBAEdJ,EAAiBI,EAAK,EAAE,EAAIA,IAG5BA,EAAK,OAAS,kBACdA,EAAK,OAAS,qBAEdH,EAAgBG,EAAK,EAAE,EAAIA,IAEzBA,EAAK,OAAS,iBAAmBA,EAAK,OAAS,oBACjDF,EAAeE,EAAK,EAAE,EAAIA,EAEtC,CAAS,EAED,MAAMC,EAA2BC,GAAyB,CACxDH,EAA6B,GAE7B,IAAII,EAAQN,EAAgBK,EAAsB,gBAAgB,EAE9DC,IAAUA,EAAM,IAAMA,EAAM,UAE9B,KAAK,aAAeA,EAAM,IAAMA,EAAM,QACtC,KAAK,UAAY,OAAOA,EAAM,IAAI,GACzBA,GAASA,EAAM,WAExB,KAAK,aAAeA,EAAM,UAC1B,KAAK,UAAY,OAAOA,EAAM,UAAU,GAExC,OAAOD,EAAsB,kBAAqB,WAGlDC,EAAQD,EAAsB,iBAAiB,MAAM,GAAG,EACxD,KAAK,aAAeC,EAAM,CAAC,EAC3B,KAAK,UAAY,OAAOA,EAAM,CAAC,CAAC,GAE9B,KAAK,eACP,KAAK,YAAc,KAAK,aAAa,SAAS,GAAG,EAC7C,OACA,QAGN,IAAIC,EACFR,EAAiBM,EAAsB,iBAAiB,EAEtDE,IAAWA,EAAO,IAAMA,EAAO,UAEjC,KAAK,cAAgBA,EAAO,IAAMA,EAAO,QACzC,KAAK,WAAa,OAAOA,EAAO,IAAI,GAC3BA,GAAUA,EAAO,WAE1B,KAAK,cAAgBA,EAAO,UAC5B,KAAK,WAAa,OAAOA,EAAO,UAAU,GAE1C,OAAOF,EAAsB,mBAAsB,WAGnDE,EAASF,EAAsB,kBAAkB,MAAM,GAAG,EAC1D,KAAK,cAAgBE,EAAO,CAAC,EAC7B,KAAK,WAAa,OAAOA,EAAO,CAAC,CAAC,GAEhC,KAAK,gBACP,KAAK,aAAe,KAAK,cAAc,SAAS,GAAG,EAC/C,OACA,QAGN,KAAK,OACH,qCACA,KAAK,aACL,KAAK,UACL,KAAK,cACL,KAAK,UACN,CACF,EAwBD,GAtBAT,EAAM,QAAQK,GAAQ,CAEhBA,EAAK,OAAS,aAAeA,EAAK,yBACpCC,EACEH,EAAeE,EAAK,uBAAuB,CAC5C,GAKAA,EAAK,OAAS,qBACbA,EAAK,uBAAyB,SAC9BA,EAAK,OAAS,iBACdA,EAAK,OAAS,mBACdA,EAAK,WAEPC,EAAyBD,CAAI,CAEzC,CAAS,EAKC,CAACD,IACA,CAAC,OAAO,KAAKD,CAAc,EAAE,QAC5B,OAAO,KAAKD,CAAe,EAAE,QAC/B,CACA,WAAWH,EAAmB,GAAG,EACjC,MACV,MACU,KAAK,YAAc,GACnB,KAAK,WAAa,GAGpB,GAAI,KAAK,OAAQ,CACf,GAAI,CACF,KAAK,KAAK,KAAK,MAAM,CACtB,OAAQxC,EAAK,CACZ,OAAO,KAAK,QAAQD,EAAQC,EAAK,kBAAkB,CAAC,CACrD,CACD,KAAK,OAAS,KACd,KAAK,OAAO,wCAAwC,EAEpD,MAAMgC,EAAK,KAAK,IAChB,KAAK,IAAM,KACXA,EAAG,IAAI,CACR,CAIG,OAAO,KAAK,SAAS,4BAA+B,WACtD,KAAK,UAAY,YAAY,IAAM,KAAK,YAAa,EAAE,GAAG,EACtD,KAAK,UAAU,OAAO,KAAK,UAAU,MAAO,GAGlD,KAAK,OAAO,SAAS,EACrB,KAAK,KAAK,SAAS,CAC3B,CAAO,CACF,EACDQ,EAAmB,CACpB,CAED,aAAe,CAEX,CAAC,KAAK,KACN,CAAC,KAAK,UACN,KAAK,SAAS,eAAiBlD,GAIjC,KAAK,4BAA6B,CACnC,CAED,yBAA2B,CACrB,KAAK,YAEL,KAAK,IAAI,iBAAmB,WAC9B,KAAK,eAAiB,GAGtB,KAAK,OAAO,wBAAyB,KAAK,sBAAsB,EAChE,KAAK,uBAAuB,QAAQ4B,GAAU,CAC5C,KAAK,IAAI,YAAYA,CAAM,EAC3B,KAAK,mBAAqB,EAClC,CAAO,EACD,KAAK,uBAAyB,CAAE,EAE5B,KAAK,oBACP,KAAK,OAAO,4BAA4B,EACxC,KAAK,mBAAqB,GAC1B,KAAK,kBAAmB,IAExB,KAAK,OAAO,YAAY,EACxB,KAAK,KAAK,YAAY,IAI1B,KAAK,OAAO,0BAA2B,KAAK,IAAI,cAAc,EAC9D,KAAK,KAAK,uBAAwB,KAAK,IAAI,cAAc,EAC1D,CAED,gBAAiBV,EAAO,CAClB,KAAK,YACLA,EAAM,WAAa,KAAK,QAC1B,KAAK,KAAK,SAAU,CAClB,KAAM,YACN,UAAW,CACT,UAAWA,EAAM,UAAU,UAC3B,cAAeA,EAAM,UAAU,cAC/B,OAAQA,EAAM,UAAU,MACzB,CACT,CAAO,EACQ,CAACA,EAAM,WAAa,CAAC,KAAK,eACnC,KAAK,aAAe,GACpB,KAAK,KAAK,cAAc,GAGtBA,EAAM,WACR,KAAK,yBAA0B,EAElC,CAED,kBAAmBA,EAAO,CACxB,GAAI,KAAK,UAAW,OACpB,IAAIE,EAAOF,EAAM,KACbE,aAAgB,cAAaA,EAAO,IAAI,WAAWA,CAAI,GAC3D,KAAK,KAAK,OAAQA,CAAI,CACvB,CAED,6BAA+B,CAC7B,GAAI,KAAK,WAAa,CAAC,KAAK,IAAK,OACjC,KAAK,OACH,yCACA,KAAK,SAAS,cACf,EACD,MAAMsB,EAAK,KAAK,IAChB,KAAK,IAAM,KACXA,EAAG,IAAI,CACR,CAED,gBAAkB,CACZ,KAAK,YAAc,KAAK,YAC5B,KAAK,OAAO,iBAAiB,EAC7B,KAAK,cAAgB,GACrB,KAAK,YAAa,EACnB,CAED,iBAAmB,CACb,KAAK,YACT,KAAK,OAAO,kBAAkB,EAC9B,KAAK,QAAS,EACf,CAED,SAAUxB,EAAO,CACX,KAAK,WAETA,EAAM,QAAQ,QAAQ2C,GAAe,CACnC,KAAK,OAAO,UAAU,EACtB,KAAK,KAAK,QAAS3C,EAAM,MAAO2C,CAAW,EAE3C,KAAK,cAAc,KAAK,CACtB,MAAO3C,EAAM,MACb,OAAQ2C,CAChB,CAAO,EAGC,MAAK,eAAe,KAAKC,GAChBA,EAAa,KAAOD,EAAY,EACxC,IAGH,KAAK,eAAe,KAAKA,CAAW,EACpC,eAAe,IAAM,CACnB,KAAK,OAAO,WAAW,EACvB,KAAK,KAAK,SAAUA,CAAW,CACvC,CAAO,EACP,CAAK,CACF,CAED,UAAWE,EAAM,CACV,KAAK,WACVA,EAAK,CAAC,EAAI,IAAM,KAAK,IAAM,KAAOA,EAAK,CAAC,EACxC,QAAQ,IAAI,GAAGA,CAAI,EACpB,CAGD,GAAIC,EAAKC,EAAU,CACjB,MAAMC,EAAM,KAAK,KACZA,EAAI,IAAIF,CAAG,GAAGE,EAAI,IAAIF,EAAK,IAAI,GAAK,EACzCE,EAAI,IAAIF,CAAG,EAAE,IAAIC,CAAQ,CAC1B,CAED,IAAKD,EAAKC,EAAU,CAClB,MAAMC,EAAM,KAAK,KACXC,EAAYD,EAAI,IAAIF,CAAG,EACxBG,IACLA,EAAU,OAAOF,CAAQ,EACrBE,EAAU,OAAS,GAAGD,EAAI,OAAOF,CAAG,EACzC,CAED,KAAMA,EAAKC,EAAU,CACnB,MAAMG,EAAY,IAAIL,IAAS,CAC7B,KAAK,IAAIC,EAAKI,CAAS,EACvBH,EAAS,GAAGF,CAAI,CACjB,EACD,KAAK,GAAGC,EAAKI,CAAS,CACvB,CAED,KAAMJ,KAAQD,EAAM,CAClB,MAAMG,EAAM,KAAK,KACjB,GAAKA,EAAI,IAAIF,CAAG,EAChB,UAAWC,KAAYC,EAAI,IAAIF,CAAG,EAChC,GAAI,CACFC,EAAS,GAAGF,CAAI,CACjB,OAAQrD,EAAK,CACZ,QAAQ,MAAMA,CAAG,CAClB,CAEJ,CACH,CAEAM,EAAK,eAAiB,CAAC,CAACT,EAAe,EAOvCS,EAAK,OAAS,CACZ,WAAY,CACV,CACE,KAAM,CACJ,+BACA,kCACD,CACF,CACF,EACD,aAAc,cAChB,EAEAA,EAAK,cAAgB,CAAA,ECvoCd,MAAMqD,EAAc,wBAoBpB,MAAMC,CAA8B,CAazC,YAAY,CACV,mBAAAC,EACA,KAAAC,CAAA,EAIC,CAlBKC,EAAA,KAAA,OAAmC,IAAA,EACnCA,EAAA,KAAA,QAAA,EACAA,EAAA,KAAA,yBAAA,EACAA,EAAA,KAAA,YAAA,IAA0C,GAAA,EAC1CA,EAAA,KAAA,kBAAA,IAAsB,GAAA,EACtBA,EAAA,KAAA,kBAAA,IAAsB,GAAA,EACtBA,EAAA,KAAA,gBAAA,IAAoB,GAAA,EACpBA,EAAA,KAAA,kBAAA,IAAsB,GAAA,EACtBA,EAAA,KAAA,gBAAA,IAAoB,OAAA,EACpBA,EAAA,KAAA,gBAAA,IAAoB,OAAA,EACpBA,EAAA,KAAA,oBAAA,EASN,KAAK,mBAAqBF,EACnB,OAAA,iBAAiB,UAAYrD,GAClC,KAAK,yBAAyBA,CAAK,CAAA,EAEjCsD,IAAA,KAAW,KAAOA,EACxB,CACO,YAA2B,CACzB,MAAA,CACL,KAAMH,EACN,UAAW,CAAC,CAAE,WAAAK,EAAY,wBAAAC,CAAA,IAA8B,CACtD,KAAK,OAASD,EACd,KAAK,wBAA0BC,CACjC,EACA,QAAS,CAAC,CAAA,CAEd,CAEO,cAAczC,EAAmC,OACjD,KAAK,MAAM,KAAK,UAAU,GAC1B0C,EAAA,KAAA,OAAA,MAAAA,EAAM,OAAO1C,CAAA,CACpB,CAEO,mCACLA,EACA2C,EACA,CACa,KAAK,UAAUA,CAAM,EAC7B,OAAO3C,CAAM,CACpB,CAEQ,YAAY4C,EAAY3D,EAAqB,SAC9C,KAAK,MAAM,KAAK,UAAU,EAE/B,MAAMC,EAA0B,CAC9B,OAAQ0D,EACR,SAAU3D,EAAO,EAAA,GAEnByD,EAAA,KAAK,OAAL,MAAAA,EAAW,KAAK,KAAK,UAAUxD,CAAI,CAAA,EAC9B,KAAK,gBAAgB,IAAID,CAAM,IAAG4D,EAAA,KAAK,OAAL,MAAAA,EAAW,UAAU5D,CAAA,EACvD,KAAA,gBAAgB,IAAIA,CAAM,CACjC,CAEO,UAAU0D,EAA2C,CACtD,IAAAL,EAEJ,GAAKK,EAOE,CACL,MAAMG,EAAc,KAAK,cAAc,IAAIH,CAAM,EAEjD,GAAIG,EAAoB,OAAAA,EAExBR,EAAO,IAAIS,EAAW,CACpB,UAAW,EAAA,CAEZ,EACI,KAAA,cAAc,IAAIJ,EAAQL,CAAI,EAC9B,KAAA,cAAc,IAAIA,EAAMK,CAAM,CACrC,KAlBa,CACP,GAAA,KAAK,KAAM,OAAO,KAAK,KAEpBL,EAAA,KAAK,KAAO,IAAIS,EAAW,CAChC,UAAW,EAAA,CAEZ,CAAA,CAcG,MAAAC,EAAaL,GAAyB,CAC1C,GAAI,CAACA,EAAgB,OAAA,KAAK,KAAO,KAE5B,KAAA,cAAc,OAAOA,CAAM,EAC3B,KAAA,cAAc,OAAOL,CAAI,CAAA,EA0DhC,OAvDKA,EAAA,GAAG,QAAU9D,GAAe,CAC/BwE,EAAUL,CAAM,EACR,QAAA,IAAI,QAASnE,CAAG,CAAA,CACzB,EAEI8D,EAAA,GAAG,QAAS,IAAM,CACrBU,EAAUL,CAAM,EAChB,QAAQ,IAAI,SAAS,CAAA,CACtB,EAEIL,EAAA,GAAG,SAAWpD,GAAoC,SACjD,KAAK,YAAA,EACHoD,IAAS,KAAK,KAEhB,KAAK,mBAAmBpD,CAAI,GAGvBwD,EAAA,KAAA,cAAc,IAAIJ,CAAI,IAAtB,MAAAI,EAAyB,YAC5B,CACE,KAAM,sBACN,KAAM,CACJ,KAAM,SACN,OAAQxD,CACV,CACF,EACA,GAAA,GAKJ2D,EAAA,OAAO,MAAP,MAAAA,EAAY,YACV,CACE,KAAM,sBACN,KAAM,CACJ,KAAM,SACN,OAAQ3D,CACV,CACF,EACA,GAAA,CAEJ,CACD,EAEIoD,EAAA,GAAG,UAAW,IAAM,CAEvB,GAAI,OAAK,YAAiB,GAAAA,IAAS,KAAK,MAKxC,SAAW,CAACM,EAAI3D,CAAM,IAAK,KAAK,UACzB,KAAA,YAAY2D,EAAI3D,CAAM,CAC7B,CACD,EAEI,KAAK,YAAY,IAEjBqD,EAAA,GAAG,OAASpD,GAAoC,CAC/C,GAAA,CACI,MAAA+D,EAAO,KAAK,MAAM/D,CAAc,EACtC,KAAK,cAAc,IAAI+D,EAAK,SAAUA,EAAK,MAAM,CAAA,OAC1CC,EAAO,CACN,QAAA,MAAM,uBAAwBA,CAAK,CAC7C,CACA,KAAK,aAAa,CAAA,CACnB,EAEIZ,EAAA,GAAG,SAAWrD,GAAwB,CACpC,KAAA,gBAAgB,IAAIA,CAAM,EAC/B,KAAK,aAAa,CAAA,CACnB,GAEMqD,CACT,CAEO,YAAYM,EAAYO,EAAwC,OACrE,GAAIP,IAAO,IAAM,CAAC,KAAK,OAAe,MAAA,GACtC,IAAI3D,EAAkC,KAAK,UAAU,IAAIkE,GAAUP,CAAE,EACrE,GAAI3D,EAAe,OAAAA,EAEnB,MAAMmE,EAAK,KAAK,OAAO,QAAQR,CAAE,EAE7B,MAAA,CAACQ,GAAM,EAAE,kBAAmBA,GAEvB,KAAK,+BAA+BR,EAAIO,GAAUP,CAAE,GAExD,KAAK,YAAA,IACRF,EAAA,OAAO,MAAP,MAAAA,EAAY,YACV,CACE,KAAM,sBACN,KAAM,CACJ,KAAM,gBACN,OAAQS,GAAUP,CACpB,CACF,EACA,GAAA,EAIJ3D,EAASmE,EAAG,cAAA,EACZ,KAAK,UAAU,IAAID,GAAUP,EAAI3D,CAAM,EACvC,KAAK,UAAU,EAERA,EACT,CAEQ,cAAe,CAChB,KAAA,gBAAgB,QAASA,GAAW,CACvC,MAAMoE,EAAS,KAAK,cAAc,IAAIpE,EAAO,EAAE,EAC1CoE,GAEA,KAAA,YAAYA,EAAQpE,CAAM,CAAA,CAChC,CACH,CAEQ,aAAuB,CAC7B,MAAO,GAAQ,OAAO,KAAO,OAAO,MAAQ,OAC9C,CAEO,+BAA+B2D,EAAYO,EAAyB,CACzE,IAAIG,EAAQ,GAEZ,gBAAS,iBAAiB,QAAQ,EAAE,QAASC,GAAW,OAElD,GADAD,GACA,CAAC,KAAK,wBAAyB,OAEnC,MAAME,EAAW,KAAK,wBAAwB,YAAYD,EAAQX,CAAE,EAChEY,IAAa,KAETF,EAAA,IACRZ,EAAAa,EAAO,gBAAP,MAAAb,EAAsB,YACpB,CACE,KAAM,sBACN,KAAM,CACJ,KAAM,iBACN,GAAIc,EACJ,OAAAL,CACF,CACF,EACA,GAAA,EACF,CACD,EACMG,CACT,CAEQ,uCACNtE,EAC6D,CACtD,MAAA,GACLA,EAAM,MACJ,OAAOA,EAAM,MAAS,UACtB,SAAUA,EAAM,MAChB,SAAUA,EAAM,MACfA,EAAM,KAA8C,OACnD,uBACDA,EAAM,KAA8C,KAE3D,CAMQ,yBACNA,EACA,CACA,GAAI,CAAC,KAAK,uCAAuCA,CAAK,EAAG,OAEzD,KAAM,CAAE,KAAAyE,CAAS,EAAAzE,EAAM,KAAK,KAC5B,GAAIyE,IAAS,iBAAkB,CAC7B,KAAM,CAAE,GAAAb,EAAI,OAAAO,CAAO,EAAInE,EAAM,KAAK,KAC7B,KAAA,YAAY4D,EAAIO,CAAM,CAAA,SAClBM,IAAS,SAAU,CAC5B,KAAM,CAAE,OAAAzD,CAAW,EAAAhB,EAAM,KAAK,KACxB,CAAE,OAAA2D,CAAW,EAAA3D,EACnB,GAAI,CAAC2D,GAAU,EAAE,SAAUA,GAAS,OAChC,KAAK,YAAA,EACF,KAAA,mCAAmC3C,EAAQ2C,CAAM,EAEtD,KAAK,cAAc3C,CAAM,CAC3B,SACSyD,IAAS,gBAAiB,CACnC,KAAM,CAAE,OAAAN,CAAW,EAAAnE,EAAM,KAAK,KACxB,CAAE,OAAA2D,CAAW,EAAA3D,EACnB,GAAI,CAAC2D,GAAU,EAAE,SAAUA,GAAS,OAC/B,KAAA,gBAAgB,IAAIQ,EAAQR,CAAM,CACzC,CACF,CACF",
5
+ "mappings": ";;;;;;;;;;;;;4OAAA,oFACA,MAAMA,EAAsB,GAAK,KAC3BC,EAAsB,EAAI,IAC1BC,EAA0B,EAAI,IAEpC,SAASC,EAAaC,EAAM,CAC1B,MAAMC,EAAQ,IAAI,WAAWD,CAAI,EACjC,QAASE,EAAI,EAAGA,EAAIF,EAAME,IACxBD,EAAMC,CAAC,EAAK,KAAK,OAAM,EAAK,IAAO,EAErC,OAAOD,CACT,CAEA,SAASE,GAAiB,CACxB,GAAI,OAAO,YAAe,YAAa,OAAO,KAC9C,MAAMC,EAAO,CACX,kBACE,WAAW,mBACX,WAAW,sBACX,WAAW,wBACb,sBACE,WAAW,uBACX,WAAW,0BACX,WAAW,4BACb,gBACE,WAAW,iBACX,WAAW,oBACX,WAAW,qBACjB,EACE,OAAKA,EAAK,kBACHA,EAD6B,IAEtC,CAEA,SAASC,EAASC,EAAKC,EAAM,CAC3B,cAAO,eAAeD,EAAK,OAAQ,CACjC,MAAOC,EACP,WAAY,GACZ,aAAc,EACf,CAAA,EACMD,CACT,CAGA,SAASE,EAAeC,EAAK,CAC3B,OAAOA,EAAI,QAAQ,6BAA8B,EAAE,CACrD,CAEA,SAASC,EAAMC,EAAS,CACtB,QAAQ,KAAKA,CAAO,CACtB,CAMA,MAAMC,CAAK,CACT,YAAaC,EAAO,CAAA,EAAI,CAsCtB,GArCA,KAAK,KAAO,IAAI,IAEhB,KAAK,IAAMd,EAAY,CAAC,EAAE,SAAS,KAAK,EAAE,MAAM,EAAG,CAAC,EACpD,KAAK,SAAWc,EAAK,MACrB,KAAK,OAAO,cAAeA,CAAI,EAE/B,KAAK,YAAcA,EAAK,UACpBA,EAAK,aAAed,EAAY,EAAE,EAAE,SAAS,KAAK,EAClD,KAEJ,KAAK,UAAYc,EAAK,WAAa,GACnC,KAAK,cAAgBA,EAAK,eAAiBD,EAAK,cAChD,KAAK,kBAAoB,KAAK,cAAc,WAC5C,KAAK,OAAS,OAAO,OAAO,CAAE,EAAEA,EAAK,OAAQC,EAAK,MAAM,EACxD,KAAK,aAAeA,EAAK,cAAgB,CAAA,EACzC,KAAK,cAAgBA,EAAK,eAAiB,CAAA,EAC3C,KAAK,aAAeA,EAAK,eAAiBJ,GAAOA,GACjD,KAAK,QAAUI,EAAK,UAAYA,EAAK,OAAS,CAACA,EAAK,MAAM,EAAI,CAAA,GAC9D,KAAK,QAAUA,EAAK,UAAY,OAAYA,EAAK,QAAU,GAC3D,KAAK,iBACHA,EAAK,mBAAqB,OAAYA,EAAK,iBAAmB,GAChE,KAAK,mBAAqBA,EAAK,oBAAsBhB,EAErD,KAAK,UAAY,GACjB,KAAK,WAAa,GAClB,KAAK,WAAa,GAElB,KAAK,cAAgB,OACrB,KAAK,aAAe,OACpB,KAAK,WAAa,OAClB,KAAK,aAAe,OACpB,KAAK,YAAc,OACnB,KAAK,UAAY,OAEjB,KAAK,MACHgB,EAAK,MAAQ,OAAOA,EAAK,MAAS,SAAWA,EAAK,KAAOV,EAAa,EAEpE,CAAC,KAAK,MACR,MACQE,EADJ,OAAO,QAAW,YAElB,IAAI,MACF,mEACD,EAKD,IAAI,MAAM,4CAA4C,EAJtD,oBACV,EASI,KAAK,SAAW,GAChB,KAAK,cAAgB,GACrB,KAAK,aAAe,GACpB,KAAK,kBAAoB,KACzB,KAAK,SAAW,KAChB,KAAK,mBAAqB,CAAA,EAE1B,KAAK,eAAiB,GACtB,KAAK,kBAAoB,GACzB,KAAK,oBAAsB,GAC3B,KAAK,mBAAqB,GAC1B,KAAK,uBAAyB,CAAA,EAC9B,KAAK,WAAa,IAAI,IACtB,KAAK,iBAAmB,KAExB,KAAK,cAAgB,CAAA,EACrB,KAAK,eAAiB,CAAA,EAEtB,KAAK,OAAS,KACd,KAAK,IAAM,KACX,KAAK,UAAY,KAEjB,GAAI,CACF,KAAK,IAAM,IAAI,KAAK,MAAM,kBAAkB,KAAK,MAAM,CACxD,OAAQC,EAAK,CACZ,KAAK,QAAQD,EAAQC,EAAK,oBAAoB,CAAC,EAC/C,MACN,CAII,KAAK,qBAAuB,OAAO,KAAK,IAAI,mBAAsB,SAElE,KAAK,IAAI,2BAA6B,IAAM,CAC1C,KAAK,kBAAiB,CAC5B,EACI,KAAK,IAAI,0BAA4B,IAAM,CACzC,KAAK,kBAAiB,CAC5B,EACI,KAAK,IAAI,wBAA0B,IAAM,CACvC,KAAK,yBAAwB,CACnC,EACI,KAAK,IAAI,uBAAyB,IAAM,CACtC,KAAK,wBAAuB,CAClC,EACI,KAAK,IAAI,eAAiBQ,GAAS,CACjC,KAAK,gBAAgBA,CAAK,CAChC,EAGQ,OAAO,KAAK,IAAI,cAAiB,UACnC,KAAK,IAAI,aAAa,MAAMR,GAAO,CACjC,KAAK,QAAQD,EAAQC,EAAK,sBAAsB,CAAC,CAClD,CAAA,EASC,KAAK,WAAa,KAAK,kBACzB,KAAK,WAAW,CACd,QAAS,KAAK,IAAI,kBAChB,KAAK,YACL,KAAK,aACf,CACO,CAAA,EAED,KAAK,IAAI,cAAgBQ,GAAS,CAChC,KAAK,WAAWA,CAAK,CAC7B,EAGQ,KAAK,SACP,KAAK,QAAQ,QAAQC,GAAU,CAC7B,KAAK,UAAUA,CAAM,CACtB,CAAA,EAEH,KAAK,IAAI,QAAUD,GAAS,CAC1B,KAAK,SAASA,CAAK,CACzB,EAEI,KAAK,OAAO,qBAAqB,EACjC,KAAK,kBAAiB,CAC1B,CAEE,IAAI,YAAc,CAChB,OAAQ,KAAK,UAAY,KAAK,SAAS,gBAAmB,CAC9D,CAIE,IAAI,WAAa,CACf,OAAO,KAAK,YAAc,KAAK,SAAS,aAAe,MAC3D,CAEE,SAAW,CACT,MAAO,CACL,KAAM,KAAK,UACX,OAAQ,KAAK,YACb,QAAS,KAAK,YACpB,CACA,CAEE,OAAQE,EAAM,CACZ,GAAI,MAAK,WACT,IAAI,KAAK,UAAW,MAAMX,EAAQ,IAAI,MAAM,uCAAuC,EAAG,eAAe,EACrG,GAAI,OAAOW,GAAS,SAClB,GAAI,CACFA,EAAO,KAAK,MAAMA,CAAI,CACvB,OAAQV,EAAK,CACZU,EAAO,CAAA,CACf,CAEI,KAAK,OAAO,UAAU,EAElBA,EAAK,aAAe,KAAK,YAC3B,KAAK,OAAO,4BAA4B,EACxC,KAAK,kBAAiB,GAEpBA,EAAK,oBAAsB,KAAK,YAClC,KAAK,OAAO,6BAA6B,EACzC,KAAK,eACHA,EAAK,mBAAmB,KACxBA,EAAK,mBAAmB,IAChC,GAEQA,EAAK,YACH,KAAK,IAAI,mBAAqB,KAAK,IAAI,kBAAkB,KAC3D,KAAK,iBAAiBA,EAAK,SAAS,EAEpC,KAAK,mBAAmB,KAAKA,EAAK,SAAS,GAG3CA,EAAK,KACP,KAAK,IACF,qBAAqB,IAAI,KAAK,MAAM,sBAAsBA,CAAI,CAAC,EAC/D,KAAK,IAAM,CACN,KAAK,YAET,KAAK,mBAAmB,QAAQC,GAAa,CAC3C,KAAK,iBAAiBA,CAAS,CAChC,CAAA,EACD,KAAK,mBAAqB,CAAA,EAEtB,KAAK,IAAI,kBAAkB,OAAS,SAAS,KAAK,cAAa,EACpE,CAAA,EACA,MAAMX,GAAO,CACZ,KAAK,QAAQD,EAAQC,EAAK,4BAA4B,CAAC,CACxD,CAAA,EAGH,CAACU,EAAK,KACN,CAACA,EAAK,WACN,CAACA,EAAK,aACN,CAACA,EAAK,oBAEN,KAAK,QACHX,EACE,IAAI,MAAM,0CAA0C,EACpD,eACV,CACA,EAEA,CAEE,iBAAkBY,EAAW,CAC3B,MAAMC,EAAkB,IAAI,KAAK,MAAM,gBAAgBD,CAAS,EAChE,KAAK,IAAI,gBAAgBC,CAAe,EAAE,MAAMZ,GAAO,CAEnD,CAACY,EAAgB,SACjBA,EAAgB,QAAQ,SAAS,QAAQ,EAEzCR,EAAK,qCAAqC,EAE1C,KAAK,QAAQL,EAAQC,EAAK,uBAAuB,CAAC,CAErD,CAAA,CACL,CAME,KAAMa,EAAO,CACX,GAAI,MAAK,WACT,IAAI,KAAK,UAAW,MAAMd,EAAQ,IAAI,MAAM,qCAAqC,EAAG,eAAe,EACnG,KAAK,SAAS,KAAKc,CAAK,EAC5B,CAOE,eAAgBC,EAAMC,EAAM,CAC1B,GAAI,MAAK,WACT,IAAI,KAAK,UAAW,MAAMhB,EAAQ,IAAI,MAAM,+CAA+C,EAAG,eAAe,EAG7G,GAFA,KAAK,OAAO,kBAAkB,EAE1B,KAAK,UACP,GAAI,CACF,KAAK,IAAI,eAAee,EAAMC,CAAI,EAClC,KAAK,kBAAiB,CACvB,OAAQf,EAAK,CACZ,KAAK,QAAQD,EAAQC,EAAK,qBAAqB,CAAC,CACxD,MAEM,KAAK,KAAK,SAAU,CAElB,KAAM,qBACN,mBAAoB,CAAE,KAAAc,EAAM,KAAAC,CAAI,CACjC,CAAA,EAEP,CAME,UAAWN,EAAQ,CACjB,GAAI,MAAK,WACT,IAAI,KAAK,UAAW,MAAMV,EAAQ,IAAI,MAAM,0CAA0C,EAAG,eAAe,EACxG,KAAK,OAAO,aAAa,EAEzBU,EAAO,UAAS,EAAG,QAAQO,GAAS,CAClC,KAAK,SAASA,EAAOP,CAAM,CAC5B,CAAA,EACL,CAOE,SAAUO,EAAOP,EAAQ,CACvB,GAAI,KAAK,WAAY,OACrB,GAAI,KAAK,UAAW,MAAMV,EAAQ,IAAI,MAAM,yCAAyC,EAAG,eAAe,EACvG,KAAK,OAAO,YAAY,EAExB,MAAMkB,EAAS,KAAK,WAAW,IAAID,CAAK,GAAK,IAAI,IACjD,IAAIE,EAASD,EAAO,IAAIR,CAAM,EAC9B,GAAI,CAACS,EACHA,EAAS,KAAK,IAAI,SAASF,EAAOP,CAAM,EACxCQ,EAAO,IAAIR,EAAQS,CAAM,EACzB,KAAK,WAAW,IAAIF,EAAOC,CAAM,EACjC,KAAK,kBAAiB,MAC5B,OAAeC,EAAO,QACVnB,EACJ,IAAI,MACF,mFACD,EACD,oBACR,EAEYA,EACJ,IAAI,MAAM,8CAA8C,EACxD,0BACR,CAEA,CAQE,aAAcoB,EAAUC,EAAUX,EAAQ,CACxC,GAAI,KAAK,WAAY,OACrB,GAAI,KAAK,UAAW,MAAMV,EAAQ,IAAI,MAAM,6CAA6C,EAAG,eAAe,EAC3G,KAAK,OAAO,gBAAgB,EAE5B,MAAMkB,EAAS,KAAK,WAAW,IAAIE,CAAQ,EACrCD,EAASD,EAASA,EAAO,IAAIR,CAAM,EAAI,KAC7C,GAAI,CAACS,EACH,MAAMnB,EACJ,IAAI,MAAM,4CAA4C,EACtD,qBACR,EAEQqB,GAAU,KAAK,WAAW,IAAIA,EAAUH,CAAM,EAE9CC,EAAO,cAAgB,KACzBA,EAAO,aAAaE,CAAQ,EAE5B,KAAK,QACHrB,EACE,IAAI,MAAM,+CAA+C,EACzD,8BACV,CACA,CAEA,CAOE,YAAaiB,EAAOP,EAAQ,CAC1B,GAAI,KAAK,WAAY,OACrB,GAAI,KAAK,UAAW,MAAMV,EAAQ,IAAI,MAAM,4CAA4C,EAAG,eAAe,EAC1G,KAAK,OAAO,gBAAgB,EAE5B,MAAMkB,EAAS,KAAK,WAAW,IAAID,CAAK,EAClCE,EAASD,EAASA,EAAO,IAAIR,CAAM,EAAI,KAC7C,GAAI,CAACS,EACH,MAAMnB,EACJ,IAAI,MAAM,2CAA2C,EACrD,qBACR,EAEI,GAAI,CACFmB,EAAO,QAAU,GACjB,KAAK,IAAI,YAAYA,CAAM,CAC5B,OAAQlB,EAAK,CACRA,EAAI,OAAS,sBACf,KAAK,uBAAuB,KAAKkB,CAAM,EAEvC,KAAK,QAAQnB,EAAQC,EAAK,kBAAkB,CAAC,CAErD,CACI,KAAK,kBAAiB,CAC1B,CAME,aAAcS,EAAQ,CACpB,GAAI,MAAK,WACT,IAAI,KAAK,UAAW,MAAMV,EAAQ,IAAI,MAAM,6CAA6C,EAAG,eAAe,EAC3G,KAAK,OAAO,iBAAiB,EAE7BU,EAAO,UAAS,EAAG,QAAQO,GAAS,CAClC,KAAK,YAAYA,EAAOP,CAAM,CAC/B,CAAA,EACL,CAEE,mBAAqB,CACnB,KAAK,OAAO,mBAAmB,EAC3B,MAAK,sBACT,KAAK,oBAAsB,GAC3B,eAAe,IAAM,CACnB,KAAK,oBAAsB,GACvB,KAAK,WAAa,CAAC,KAAK,mBAC1B,KAAK,OAAO,8BAA8B,EAC1C,KAAK,UAAS,GAEd,KAAK,OAAO,qDAAqD,EAEnE,KAAK,kBAAoB,EAC1B,CAAA,EACL,CAEE,WAAa,CACX,GAAI,MAAK,WACT,IAAI,KAAK,UAAW,MAAMV,EAAQ,IAAI,MAAM,0CAA0C,EAAG,eAAe,EAEpG,KAAK,UACH,KAAK,gBACP,KAAK,mBAAqB,GAC1B,KAAK,OAAO,+BAA+B,IAE3C,KAAK,OAAO,mBAAmB,EAC/B,WAAW,IAAM,CAEf,KAAK,aAAY,CAC3B,EAAW,CAAC,GAGF,KAAK,gBACP,KAAK,mBAAqB,GAC1B,KAAK,OAAO,+BAA+B,IAE3C,KAAK,OAAO,uCAAuC,EACnD,KAAK,KAAK,SAAU,CAElB,KAAM,cACN,YAAa,EACd,CAAA,GAGL,KAAK,eAAiB,GAC1B,CAEE,QAASC,EAAK,CACR,KAAK,WAAa,KAAK,aAC3B,KAAK,WAAa,GAElB,KAAK,OAAO,yBAA0BA,IAAQA,EAAI,SAAWA,EAAI,EAEjE,eAAe,IAAM,CAsBnB,GApBA,KAAK,UAAY,GACjB,KAAK,WAAa,GAElB,KAAK,OAAO,sBAAuBA,IAAQA,EAAI,SAAWA,EAAI,EAE9D,KAAK,WAAa,GAClB,KAAK,SAAW,GAChB,KAAK,cAAgB,GACrB,KAAK,cAAgB,KACrB,KAAK,eAAiB,KACtB,KAAK,WAAa,KAElB,cAAc,KAAK,gBAAgB,EACnC,KAAK,iBAAmB,KAExB,cAAc,KAAK,SAAS,EAC5B,KAAK,UAAY,KACjB,KAAK,OAAS,KACd,KAAK,IAAM,KAEP,KAAK,SAAU,CACjB,GAAI,CACF,KAAK,SAAS,MAAK,CACpB,OAAQA,EAAK,CAAA,CAGd,KAAK,SAAS,UAAY,KAC1B,KAAK,SAAS,OAAS,KACvB,KAAK,SAAS,QAAU,KACxB,KAAK,SAAS,QAAU,IAChC,CACM,GAAI,KAAK,IAAK,CACZ,GAAI,CACF,KAAK,IAAI,MAAK,CACf,OAAQA,EAAK,CAAA,CAGd,KAAK,IAAI,2BAA6B,KACtC,KAAK,IAAI,0BAA4B,KACrC,KAAK,IAAI,uBAAyB,KAClC,KAAK,IAAI,eAAiB,KAC1B,KAAK,IAAI,QAAU,KACnB,KAAK,IAAI,cAAgB,IACjC,CACM,KAAK,IAAM,KACX,KAAK,SAAW,KAEZA,GAAK,KAAK,KAAK,QAASA,CAAG,EAC/B,KAAK,KAAK,OAAO,CAClB,CAAA,EACL,CAEE,WAAYQ,EAAO,CACjB,GAAI,CAACA,EAAM,QAIT,OAAO,KAAK,QACVT,EACE,IAAI,MAAM,kDAAkD,EAC5D,kBACV,CACA,EAGI,KAAK,SAAWS,EAAM,QACtB,KAAK,SAAS,WAAa,cAEvB,OAAO,KAAK,SAAS,4BAA+B,WACtD,KAAK,SAAS,2BAA6BlB,GAG7C,KAAK,YAAc,KAAK,SAAS,MAEjC,KAAK,SAAS,UAAYkB,GAAS,CACjC,KAAK,kBAAkBA,CAAK,CAClC,EACI,KAAK,SAAS,oBAAsB,IAAM,CACxC,KAAK,4BAA2B,CACtC,EACI,KAAK,SAAS,OAAS,IAAM,CAC3B,KAAK,eAAc,CACzB,EACI,KAAK,SAAS,QAAU,IAAM,CAC5B,KAAK,gBAAe,CAC1B,EACI,KAAK,SAAS,QAAUR,GAAO,CAC7B,KAAK,QAAQD,EAAQC,EAAK,kBAAkB,CAAC,CACnD,EAII,IAAIqB,EAAY,GAChB,KAAK,iBAAmB,YAAY,IAAM,CAEpC,KAAK,UAAY,KAAK,SAAS,aAAe,WAC5CA,GAAW,KAAK,gBAAiB,EACrCA,EAAY,IAEZA,EAAY,EAEpB,EAAO7B,CAAuB,CAC9B,CAEE,0BAA4B,CACtB,KAAK,WACL,KAAK,oBACT,KAAK,OAAO,6BAA6B,EACzC,KAAK,kBAAoB,WAAW,IAAM,CACnC,KAAK,eACR,KAAK,aAAe,GACpB,KAAK,OAAO,+BAA+B,EAC3C,KAAK,KAAK,YAAY,EACtB,KAAK,KAAK,cAAc,EAE3B,EAAE,KAAK,kBAAkB,EAC9B,CAEE,cAAgB,CACV,KAAK,WAET,KAAK,IACF,YAAY,KAAK,YAAY,EAC7B,KAAK8B,GAAS,CACb,GAAI,KAAK,UAAW,OAChB,CAAC,KAAK,SAAW,CAAC,KAAK,mBAAoBA,EAAM,IAAMpB,EAAcoB,EAAM,GAAG,GAClFA,EAAM,IAAM,KAAK,aAAaA,EAAM,GAAG,EAEvC,MAAMC,EAAY,IAAM,CACtB,GAAI,KAAK,UAAW,OACpB,MAAMC,EAAS,KAAK,IAAI,kBAAoBF,EAC5C,KAAK,OAAO,QAAQ,EACpB,KAAK,KAAK,SAAU,CAClB,KAAME,EAAO,KACb,IAAKA,EAAO,GACb,CAAA,CACX,EAEcC,EAAY,IAAM,CACtB,KAAK,OAAO,qBAAqB,EAC7B,MAAK,YACL,KAAK,SAAW,KAAK,aAAcF,EAAS,EAC3C,KAAK,KAAK,eAAgBA,CAAS,EAClD,EAEcG,EAAU1B,GAAO,CACrB,KAAK,QAAQD,EAAQC,EAAK,2BAA2B,CAAC,CAChE,EAEQ,KAAK,IAAI,oBAAoBsB,CAAK,EAAE,KAAKG,CAAS,EAAE,MAAMC,CAAO,CAClE,CAAA,EACA,MAAM1B,GAAO,CACZ,KAAK,QAAQD,EAAQC,EAAK,kBAAkB,CAAC,CAC9C,CAAA,CACP,CAEE,6BAA+B,CACzB,KAAK,IAAI,iBACX,KAAK,IAAI,gBAAA,EAAkB,QAAQ2B,GAAe,CAE9C,CAACA,EAAY,KACbA,EAAY,OAAO,OACnB,CAACA,EAAY,YAEbA,EAAY,UAAY,GACxB,KAAK,eAAeA,EAAY,OAAO,MAAM,IAAI,EAEpD,CAAA,CAEP,CAEE,eAAiB,CACX,KAAK,WAET,KAAK,IACF,aAAa,KAAK,aAAa,EAC/B,KAAKC,GAAU,CACd,GAAI,KAAK,UAAW,OAChB,CAAC,KAAK,SAAW,CAAC,KAAK,mBAAoBA,EAAO,IAAM1B,EAAc0B,EAAO,GAAG,GACpFA,EAAO,IAAM,KAAK,aAAaA,EAAO,GAAG,EAEzC,MAAMC,EAAa,IAAM,CACvB,GAAI,KAAK,UAAW,OACpB,MAAML,EAAS,KAAK,IAAI,kBAAoBI,EAC5C,KAAK,OAAO,QAAQ,EACpB,KAAK,KAAK,SAAU,CAClB,KAAMJ,EAAO,KACb,IAAKA,EAAO,GACb,CAAA,EACI,KAAK,WAAW,KAAK,4BAA2B,CAC/D,EAEcC,EAAY,IAAM,CAClB,KAAK,YACL,KAAK,SAAW,KAAK,aAAcI,EAAU,EAC5C,KAAK,KAAK,eAAgBA,CAAU,EACnD,EAEcH,EAAU1B,GAAO,CACrB,KAAK,QAAQD,EAAQC,EAAK,2BAA2B,CAAC,CAChE,EAEQ,KAAK,IAAI,oBAAoB4B,CAAM,EAAE,KAAKH,CAAS,EAAE,MAAMC,CAAO,CACnE,CAAA,EACA,MAAM1B,GAAO,CACZ,KAAK,QAAQD,EAAQC,EAAK,mBAAmB,CAAC,CAC/C,CAAA,CACP,CAEE,0BAA4B,CACtB,KAAK,WACL,KAAK,IAAI,kBAAoB,UAC/B,KAAK,QACHD,EAAQ,IAAI,MAAM,oBAAoB,EAAG,wBAAwB,CACzE,CAEA,CAEE,mBAAqB,CACnB,GAAI,KAAK,UAAW,OACpB,MAAM+B,EAAqB,KAAK,IAAI,mBAC9BC,EAAoB,KAAK,IAAI,kBAEnC,KAAK,OACH,kDACAD,EACAC,CACN,EACI,KAAK,KAAK,iBAAkBD,EAAoBC,CAAiB,GAG/DD,IAAuB,aACvBA,IAAuB,eAEvB,KAAK,SAAW,GAChB,KAAK,YAAW,GAEdA,IAAuB,UACzB,KAAK,QACH/B,EACE,IAAI,MAAM,wBAAwB,EAClC,4BACV,CACA,EAEQ+B,IAAuB,UACzB,KAAK,QACH/B,EACE,IAAI,MAAM,wBAAwB,EAClC,2BACV,CACA,CAEA,CAEE,SAAUiC,EAAI,CAEZ,MAAMC,EAAgBC,IAChB,OAAO,UAAU,SAAS,KAAKA,EAAO,MAAM,IAAM,kBACpDA,EAAO,OAAO,QAAQC,GAAS,CAC7B,OAAO,OAAOD,EAAQC,CAAK,CAC5B,CAAA,EAEID,GAIL,KAAK,IAAI,SAAS,SAAW,GAAK,KAAK,qBACzC,KAAK,IAAI,SAAQ,EAAG,KAClBE,GAAO,CACL,MAAMC,EAAU,CAAA,EAChBD,EAAI,QAAQF,GAAU,CACpBG,EAAQ,KAAKJ,EAAcC,CAAM,CAAC,CACnC,CAAA,EACDF,EAAG,KAAMK,CAAO,CACjB,EACDrC,GAAOgC,EAAGhC,CAAG,CACrB,EAGe,KAAK,IAAI,SAAS,OAAS,EACpC,KAAK,IAAI,SACPoC,GAAO,CAEL,GAAI,KAAK,UAAW,OAEpB,MAAMC,EAAU,CAAA,EAChBD,EAAI,OAAM,EAAG,QAAQE,GAAU,CAC7B,MAAMJ,EAAS,CAAA,EACfI,EAAO,MAAK,EAAG,QAAQC,GAAQ,CAC7BL,EAAOK,CAAI,EAAID,EAAO,KAAKC,CAAI,CAChC,CAAA,EACDL,EAAO,GAAKI,EAAO,GACnBJ,EAAO,KAAOI,EAAO,KACrBJ,EAAO,UAAYI,EAAO,UAC1BD,EAAQ,KAAKJ,EAAcC,CAAM,CAAC,CACnC,CAAA,EACDF,EAAG,KAAMK,CAAO,CACjB,EACDrC,GAAOgC,EAAGhC,CAAG,CACrB,EAKMgC,EAAG,KAAM,CAAE,CAAA,CAEjB,CAEE,aAAe,CAMb,GALA,KAAK,OACH,8BACA,KAAK,SACL,KAAK,aACX,EAEM,KAAK,YACL,KAAK,aACL,CAAC,KAAK,UACN,CAAC,KAAK,cACJ,OAEJ,KAAK,YAAc,GAGnB,MAAMQ,EAAoB,IAAM,CAC1B,KAAK,WAET,KAAK,SAAS,CAACxC,EAAKyC,IAAU,CAC5B,GAAI,KAAK,UAAW,OAGhBzC,IAAKyC,EAAQ,CAAA,GAEjB,MAAMC,EAAmB,CAAA,EACnBC,EAAkB,CAAA,EAClBC,EAAiB,CAAA,EACvB,IAAIC,EAA6B,GAEjCJ,EAAM,QAAQK,GAAQ,EAIlBA,EAAK,OAAS,mBACdA,EAAK,OAAS,sBAEdJ,EAAiBI,EAAK,EAAE,EAAIA,IAG5BA,EAAK,OAAS,kBACdA,EAAK,OAAS,qBAEdH,EAAgBG,EAAK,EAAE,EAAIA,IAEzBA,EAAK,OAAS,iBAAmBA,EAAK,OAAS,oBACjDF,EAAeE,EAAK,EAAE,EAAIA,EAE7B,CAAA,EAED,MAAMC,EAA2BC,GAAyB,CACxDH,EAA6B,GAE7B,IAAII,EAAQN,EAAgBK,EAAsB,gBAAgB,EAE9DC,IAAUA,EAAM,IAAMA,EAAM,UAE9B,KAAK,aAAeA,EAAM,IAAMA,EAAM,QACtC,KAAK,UAAY,OAAOA,EAAM,IAAI,GACzBA,GAASA,EAAM,WAExB,KAAK,aAAeA,EAAM,UAC1B,KAAK,UAAY,OAAOA,EAAM,UAAU,GAExC,OAAOD,EAAsB,kBAAqB,WAGlDC,EAAQD,EAAsB,iBAAiB,MAAM,GAAG,EACxD,KAAK,aAAeC,EAAM,CAAC,EAC3B,KAAK,UAAY,OAAOA,EAAM,CAAC,CAAC,GAE9B,KAAK,eACP,KAAK,YAAc,KAAK,aAAa,SAAS,GAAG,EAC7C,OACA,QAGN,IAAIC,EACFR,EAAiBM,EAAsB,iBAAiB,EAEtDE,IAAWA,EAAO,IAAMA,EAAO,UAEjC,KAAK,cAAgBA,EAAO,IAAMA,EAAO,QACzC,KAAK,WAAa,OAAOA,EAAO,IAAI,GAC3BA,GAAUA,EAAO,WAE1B,KAAK,cAAgBA,EAAO,UAC5B,KAAK,WAAa,OAAOA,EAAO,UAAU,GAE1C,OAAOF,EAAsB,mBAAsB,WAGnDE,EAASF,EAAsB,kBAAkB,MAAM,GAAG,EAC1D,KAAK,cAAgBE,EAAO,CAAC,EAC7B,KAAK,WAAa,OAAOA,EAAO,CAAC,CAAC,GAEhC,KAAK,gBACP,KAAK,aAAe,KAAK,cAAc,SAAS,GAAG,EAC/C,OACA,QAGN,KAAK,OACH,qCACA,KAAK,aACL,KAAK,UACL,KAAK,cACL,KAAK,UACjB,CACA,EAwBQ,GAtBAT,EAAM,QAAQK,GAAQ,CAEhBA,EAAK,OAAS,aAAeA,EAAK,yBACpCC,EACEH,EAAeE,EAAK,uBAAuB,CACzD,GAKaA,EAAK,OAAS,qBACbA,EAAK,uBAAyB,SAC9BA,EAAK,OAAS,iBACdA,EAAK,OAAS,mBACdA,EAAK,WAEPC,EAAyBD,CAAI,CAEhC,CAAA,EAKC,CAACD,IACA,CAAC,OAAO,KAAKD,CAAc,EAAE,QAC5B,OAAO,KAAKD,CAAe,EAAE,QAC/B,CACA,WAAWH,EAAmB,GAAG,EACjC,MACV,MACU,KAAK,YAAc,GACnB,KAAK,WAAa,GAGpB,GAAI,KAAK,OAAQ,CACf,GAAI,CACF,KAAK,KAAK,KAAK,MAAM,CACtB,OAAQxC,EAAK,CACZ,OAAO,KAAK,QAAQD,EAAQC,EAAK,kBAAkB,CAAC,CAChE,CACU,KAAK,OAAS,KACd,KAAK,OAAO,wCAAwC,EAEpD,MAAMgC,EAAK,KAAK,IAChB,KAAK,IAAM,KACXA,EAAG,IAAI,CACjB,CAIY,OAAO,KAAK,SAAS,4BAA+B,WACtD,KAAK,UAAY,YAAY,IAAM,KAAK,YAAa,EAAE,GAAG,EACtD,KAAK,UAAU,OAAO,KAAK,UAAU,MAAK,GAGhD,KAAK,OAAO,SAAS,EACrB,KAAK,KAAK,SAAS,CACpB,CAAA,CACP,EACIQ,EAAiB,CACrB,CAEE,aAAe,CAEX,CAAC,KAAK,KACN,CAAC,KAAK,UACN,KAAK,SAAS,eAAiBlD,GAIjC,KAAK,4BAA2B,CACpC,CAEE,yBAA2B,CACrB,KAAK,YAEL,KAAK,IAAI,iBAAmB,WAC9B,KAAK,eAAiB,GAGtB,KAAK,OAAO,wBAAyB,KAAK,sBAAsB,EAChE,KAAK,uBAAuB,QAAQ4B,GAAU,CAC5C,KAAK,IAAI,YAAYA,CAAM,EAC3B,KAAK,mBAAqB,EAC3B,CAAA,EACD,KAAK,uBAAyB,CAAA,EAE1B,KAAK,oBACP,KAAK,OAAO,4BAA4B,EACxC,KAAK,mBAAqB,GAC1B,KAAK,kBAAmB,IAExB,KAAK,OAAO,YAAY,EACxB,KAAK,KAAK,YAAY,IAI1B,KAAK,OAAO,0BAA2B,KAAK,IAAI,cAAc,EAC9D,KAAK,KAAK,uBAAwB,KAAK,IAAI,cAAc,EAC7D,CAEE,gBAAiBV,EAAO,CAClB,KAAK,YACLA,EAAM,WAAa,KAAK,QAC1B,KAAK,KAAK,SAAU,CAClB,KAAM,YACN,UAAW,CACT,UAAWA,EAAM,UAAU,UAC3B,cAAeA,EAAM,UAAU,cAC/B,OAAQA,EAAM,UAAU,MAClC,CACO,CAAA,EACQ,CAACA,EAAM,WAAa,CAAC,KAAK,eACnC,KAAK,aAAe,GACpB,KAAK,KAAK,cAAc,GAGtBA,EAAM,WACR,KAAK,yBAAwB,EAEnC,CAEE,kBAAmBA,EAAO,CACxB,GAAI,KAAK,UAAW,OACpB,IAAIE,EAAOF,EAAM,KACbE,aAAgB,cAAaA,EAAO,IAAI,WAAWA,CAAI,GAC3D,KAAK,KAAK,OAAQA,CAAI,CAC1B,CAEE,6BAA+B,CAC7B,GAAI,KAAK,WAAa,CAAC,KAAK,IAAK,OACjC,KAAK,OACH,yCACA,KAAK,SAAS,cACpB,EACI,MAAMsB,EAAK,KAAK,IAChB,KAAK,IAAM,KACXA,EAAG,IAAI,CACX,CAEE,gBAAkB,CACZ,KAAK,YAAc,KAAK,YAC5B,KAAK,OAAO,iBAAiB,EAC7B,KAAK,cAAgB,GACrB,KAAK,YAAW,EACpB,CAEE,iBAAmB,CACb,KAAK,YACT,KAAK,OAAO,kBAAkB,EAC9B,KAAK,QAAO,EAChB,CAEE,SAAUxB,EAAO,CACX,KAAK,WAETA,EAAM,QAAQ,QAAQ2C,GAAe,CACnC,KAAK,OAAO,UAAU,EACtB,KAAK,KAAK,QAAS3C,EAAM,MAAO2C,CAAW,EAE3C,KAAK,cAAc,KAAK,CACtB,MAAO3C,EAAM,MACb,OAAQ2C,CACT,CAAA,EAGC,MAAK,eAAe,KAAKC,GAChBA,EAAa,KAAOD,EAAY,EACxC,IAGH,KAAK,eAAe,KAAKA,CAAW,EACpC,eAAe,IAAM,CACnB,KAAK,OAAO,WAAW,EACvB,KAAK,KAAK,SAAUA,CAAW,CAChC,CAAA,EACF,CAAA,CACL,CAEE,UAAWE,EAAM,CACV,KAAK,WACVA,EAAK,CAAC,EAAI,IAAM,KAAK,IAAM,KAAOA,EAAK,CAAC,EACxC,QAAQ,IAAI,GAAGA,CAAI,EACvB,CAGE,GAAIC,EAAKC,EAAU,CACjB,MAAMC,EAAM,KAAK,KACZA,EAAI,IAAIF,CAAG,GAAGE,EAAI,IAAIF,EAAK,IAAI,GAAK,EACzCE,EAAI,IAAIF,CAAG,EAAE,IAAIC,CAAQ,CAC7B,CAEE,IAAKD,EAAKC,EAAU,CAClB,MAAMC,EAAM,KAAK,KACXC,EAAYD,EAAI,IAAIF,CAAG,EACxBG,IACLA,EAAU,OAAOF,CAAQ,EACrBE,EAAU,OAAS,GAAGD,EAAI,OAAOF,CAAG,EAC5C,CAEE,KAAMA,EAAKC,EAAU,CACnB,MAAMG,EAAY,IAAIL,IAAS,CAC7B,KAAK,IAAIC,EAAKI,CAAS,EACvBH,EAAS,GAAGF,CAAI,CACtB,EACI,KAAK,GAAGC,EAAKI,CAAS,CAC1B,CAEE,KAAMJ,KAAQD,EAAM,CAClB,MAAMG,EAAM,KAAK,KACjB,GAAKA,EAAI,IAAIF,CAAG,EAChB,UAAWC,KAAYC,EAAI,IAAIF,CAAG,EAChC,GAAI,CACFC,EAAS,GAAGF,CAAI,CACjB,OAAQrD,EAAK,CACZ,QAAQ,MAAMA,CAAG,CACzB,CAEA,CACA,CAEAM,EAAK,eAAiB,CAAC,CAACT,EAAa,EAOrCS,EAAK,OAAS,CACZ,WAAY,CACV,CACE,KAAM,CACJ,+BACA,kCACR,CACA,CACG,EACD,aAAc,cAChB,EAEAA,EAAK,cAAgB,CAAA,ECvoCd,MAAMqD,EAAc,wBAoBpB,MAAMC,CAA8B,CAazC,YAAY,CACV,mBAAAC,EACA,KAAAC,CAAA,EAIC,CAlBKC,EAAA,KAAA,OAAmC,IAAA,EACnCA,EAAA,KAAA,QAAA,EACAA,EAAA,KAAA,yBAAA,EACAA,EAAA,KAAA,YAAA,IAA0C,GAAI,EAC9CA,EAAA,KAAA,kBAAA,IAAsB,GAAiB,EACvCA,EAAA,KAAA,kBAAA,IAAsB,GAAiB,EACvCA,EAAA,KAAA,gBAAA,IAAoB,GAAoB,EACxCA,EAAA,KAAA,kBAAA,IAAsB,GAAyB,EAC/CA,EAAA,KAAA,gBAAA,IAAoB,OAA0C,EAC9DA,EAAA,KAAA,gBAAA,IAAoB,OAA0C,EAC9DA,EAAA,KAAA,oBAAA,EASN,KAAK,mBAAqBF,EACnB,OAAA,iBAAiB,UAAYrD,GAClC,KAAK,yBAAyBA,CAAK,CACrC,EACIsD,IAAA,KAAW,KAAOA,EAAA,CAEjB,YAA2B,CACzB,MAAA,CACL,KAAMH,EACN,UAAW,CAAC,CAAE,WAAAK,EAAY,wBAAAC,CAAA,IAA8B,CACtD,KAAK,OAASD,EACd,KAAK,wBAA0BC,CACjC,EACA,QAAS,CAAA,CACX,CAAA,CAGK,cAAczC,EAAmC,OACjD,KAAK,MAAM,KAAK,UAAU,GAC1B0C,EAAA,KAAA,OAAA,MAAAA,EAAM,OAAO1C,CAAA,CAAM,CAGnB,mCACLA,EACA2C,EACA,CACa,KAAK,UAAUA,CAAM,EAC7B,OAAO3C,CAAM,CAAA,CAGZ,YAAY4C,EAAY3D,EAAqB,SAC9C,KAAK,MAAM,KAAK,UAAU,EAE/B,MAAMC,EAA0B,CAC9B,OAAQ0D,EACR,SAAU3D,EAAO,EACnB,GACAyD,EAAA,KAAK,OAAL,MAAAA,EAAW,KAAK,KAAK,UAAUxD,CAAI,CAAA,EAC9B,KAAK,gBAAgB,IAAID,CAAM,IAAG4D,EAAA,KAAK,OAAL,MAAAA,EAAW,UAAU5D,CAAA,EACvD,KAAA,gBAAgB,IAAIA,CAAM,CAAA,CAG1B,UAAU0D,EAA2C,CACtD,IAAAL,EAEJ,GAAKK,EAOE,CACL,MAAMG,EAAc,KAAK,cAAc,IAAIH,CAAM,EAEjD,GAAIG,EAAoB,OAAAA,EAExBR,EAAO,IAAIS,EAAW,CACpB,UAAW,EAAA,CAEZ,EACI,KAAA,cAAc,IAAIJ,EAAQL,CAAI,EAC9B,KAAA,cAAc,IAAIA,EAAMK,CAAM,CAAA,KAjBxB,CACP,GAAA,KAAK,KAAM,OAAO,KAAK,KAEpBL,EAAA,KAAK,KAAO,IAAIS,EAAW,CAChC,UAAW,EAAA,CAEZ,CAAA,CAcG,MAAAC,EAAaL,GAAyB,CAC1C,GAAI,CAACA,EAAgB,OAAA,KAAK,KAAO,KAE5B,KAAA,cAAc,OAAOA,CAAM,EAC3B,KAAA,cAAc,OAAOL,CAAI,CAChC,EAyDA,OAvDKA,EAAA,GAAG,QAAU9D,GAAe,CAC/BwE,EAAUL,CAAM,EACR,QAAA,IAAI,QAASnE,CAAG,CAAA,CACzB,EAEI8D,EAAA,GAAG,QAAS,IAAM,CACrBU,EAAUL,CAAM,EAChB,QAAQ,IAAI,SAAS,CAAA,CACtB,EAEIL,EAAA,GAAG,SAAWpD,GAAoC,SACjD,KAAK,YAAA,EACHoD,IAAS,KAAK,KAEhB,KAAK,mBAAmBpD,CAAI,GAGvBwD,EAAA,KAAA,cAAc,IAAIJ,CAAI,IAAtB,MAAAI,EAAyB,YAC5B,CACE,KAAM,sBACN,KAAM,CACJ,KAAM,SACN,OAAQxD,CAAA,CAEZ,EACA,GAAA,GAKJ2D,EAAA,OAAO,MAAP,MAAAA,EAAY,YACV,CACE,KAAM,sBACN,KAAM,CACJ,KAAM,SACN,OAAQ3D,CAAA,CAEZ,EACA,GAAA,CAEJ,CACD,EAEIoD,EAAA,GAAG,UAAW,IAAM,CAEvB,GAAI,OAAK,YAAA,GAAiBA,IAAS,KAAK,MAKxC,SAAW,CAACM,EAAI3D,CAAM,IAAK,KAAK,UACzB,KAAA,YAAY2D,EAAI3D,CAAM,CAC7B,CACD,EAEI,KAAK,YAAY,IAEjBqD,EAAA,GAAG,OAASpD,GAAoC,CAC/C,GAAA,CACI,MAAA+D,EAAO,KAAK,MAAM/D,CAAc,EACtC,KAAK,cAAc,IAAI+D,EAAK,SAAUA,EAAK,MAAM,CAAA,OAC1CC,EAAO,CACN,QAAA,MAAM,uBAAwBA,CAAK,CAAA,CAE7C,KAAK,aAAa,CAAA,CACnB,EAEIZ,EAAA,GAAG,SAAWrD,GAAwB,CACpC,KAAA,gBAAgB,IAAIA,CAAM,EAC/B,KAAK,aAAa,CAAA,CACnB,GAEMqD,CAAA,CAGF,YAAYM,EAAYO,EAAwC,OACrE,GAAIP,IAAO,IAAM,CAAC,KAAK,OAAe,MAAA,GACtC,IAAI3D,EAAkC,KAAK,UAAU,IAAIkE,GAAUP,CAAE,EACrE,GAAI3D,EAAe,OAAAA,EAEnB,MAAMmE,EAAK,KAAK,OAAO,QAAQR,CAAE,EAE7B,MAAA,CAACQ,GAAM,EAAE,kBAAmBA,GAEvB,KAAK,+BAA+BR,EAAIO,GAAUP,CAAE,GAExD,KAAK,YAAA,IACRF,EAAA,OAAO,MAAP,MAAAA,EAAY,YACV,CACE,KAAM,sBACN,KAAM,CACJ,KAAM,gBACN,OAAQS,GAAUP,CAAA,CAEtB,EACA,GAAA,EAIJ3D,EAASmE,EAAG,cAAc,EAC1B,KAAK,UAAU,IAAID,GAAUP,EAAI3D,CAAM,EACvC,KAAK,UAAU,EAERA,EAAA,CAGD,cAAe,CAChB,KAAA,gBAAgB,QAASA,GAAW,CACvC,MAAMoE,EAAS,KAAK,cAAc,IAAIpE,EAAO,EAAE,EAC1CoE,GAEA,KAAA,YAAYA,EAAQpE,CAAM,CAAA,CAChC,CAAA,CAGK,aAAuB,CAC7B,MAAO,GAAQ,OAAO,KAAO,OAAO,MAAQ,OAAM,CAG7C,+BAA+B2D,EAAYO,EAAyB,CACzE,IAAIG,EAAQ,GAEZ,gBAAS,iBAAiB,QAAQ,EAAE,QAASC,GAAW,OAElD,GADAD,GACA,CAAC,KAAK,wBAAyB,OAEnC,MAAME,EAAW,KAAK,wBAAwB,YAAYD,EAAQX,CAAE,EAChEY,IAAa,KAETF,EAAA,IACRZ,EAAAa,EAAO,gBAAP,MAAAb,EAAsB,YACpB,CACE,KAAM,sBACN,KAAM,CACJ,KAAM,iBACN,GAAIc,EACJ,OAAAL,CAAA,CAEJ,EACA,GAAA,EACF,CACD,EACMG,CAAA,CAGD,uCACNtE,EAC6D,CACtD,MAAA,GACLA,EAAM,MACJ,OAAOA,EAAM,MAAS,UACtB,SAAUA,EAAM,MAChB,SAAUA,EAAM,MACfA,EAAM,KAA8C,OACnD,uBACDA,EAAM,KAA8C,KACzD,CAOM,yBACNA,EACA,CACA,GAAI,CAAC,KAAK,uCAAuCA,CAAK,EAAG,OAEzD,KAAM,CAAE,KAAAyE,CAAA,EAASzE,EAAM,KAAK,KAC5B,GAAIyE,IAAS,iBAAkB,CAC7B,KAAM,CAAE,GAAAb,EAAI,OAAAO,CAAO,EAAInE,EAAM,KAAK,KAC7B,KAAA,YAAY4D,EAAIO,CAAM,CAAA,SAClBM,IAAS,SAAU,CAC5B,KAAM,CAAE,OAAAzD,CAAA,EAAWhB,EAAM,KAAK,KACxB,CAAE,OAAA2D,CAAA,EAAW3D,EACnB,GAAI,CAAC2D,GAAU,EAAE,SAAUA,GAAS,OAChC,KAAK,YAAA,EACF,KAAA,mCAAmC3C,EAAQ2C,CAAM,EAEtD,KAAK,cAAc3C,CAAM,CAC3B,SACSyD,IAAS,gBAAiB,CACnC,KAAM,CAAE,OAAAN,CAAA,EAAWnE,EAAM,KAAK,KACxB,CAAE,OAAA2D,CAAA,EAAW3D,EACnB,GAAI,CAAC2D,GAAU,EAAE,SAAUA,GAAS,OAC/B,KAAA,gBAAgB,IAAIQ,EAAQR,CAAM,CAAA,CACzC,CAEJ",
6
6
  "names": ["MAX_BUFFERED_AMOUNT", "ICECOMPLETE_TIMEOUT", "CHANNEL_CLOSING_TIMEOUT", "randombytes", "size", "array", "i", "getBrowserRTC", "wrtc", "errCode", "err", "code", "filterTrickle", "sdp", "warn", "message", "Peer", "opts", "event", "stream", "data", "candidate", "iceCandidateObj", "chunk", "kind", "init", "track", "submap", "sender", "oldTrack", "newTrack", "isClosing", "offer", "sendOffer", "signal", "onSuccess", "onError", "transceiver", "answer", "sendAnswer", "iceConnectionState", "iceGatheringState", "cb", "flattenValues", "report", "value", "res", "reports", "result", "name", "findCandidatePair", "items", "remoteCandidates", "localCandidates", "candidatePairs", "foundSelectedCandidatePair", "item", "setSelectedCandidatePair", "selectedCandidatePair", "local", "remote", "eventStream", "remoteStream", "args", "key", "listener", "map", "listeners", "listener_", "PLUGIN_NAME", "RRWebPluginCanvasWebRTCRecord", "signalSendCallback", "peer", "__publicField", "nodeMirror", "crossOriginIframeMirror", "_a", "source", "id", "_b", "peerFromMap", "SimplePeer", "resetPeer", "json", "error", "rootId", "el", "nodeId", "found", "iframe", "remoteId", "type"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@betterbugs/rrweb-plugin-canvas-webrtc-record",
3
- "version": "2.0.0-alpha.20",
3
+ "version": "2.0.0-alpha.22",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -23,6 +23,7 @@
23
23
  }
24
24
  },
25
25
  "files": [
26
+ "umd",
26
27
  "dist",
27
28
  "package.json"
28
29
  ],
@@ -47,12 +48,12 @@
47
48
  },
48
49
  "homepage": "https://github.com/BetterBugs-Team/rrweb#readme",
49
50
  "devDependencies": {
50
- "@betterbugs/rrweb": "^2.0.0-alpha.20",
51
+ "@betterbugs/rrweb": "^2.0.0-alpha.22",
51
52
  "typescript": "^5.4.5",
52
- "vite": "^5.3.1",
53
+ "vite": "^6.0.1",
53
54
  "vite-plugin-dts": "^3.9.1"
54
55
  },
55
56
  "peerDependencies": {
56
- "@betterbugs/rrweb": "^2.0.0-alpha.20"
57
+ "@betterbugs/rrweb": "^2.0.0-alpha.22"
57
58
  }
58
59
  }