@epicgames-ps/lib-pixelstreamingfrontend-ue5.5 0.4.7 → 1.0.1
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.
- package/.lintstagedrc.mjs +7 -0
- package/dist/{commonjs → cjs}/Config/Config.js +8 -0
- package/dist/cjs/Config/Config.js.map +1 -0
- package/dist/{commonjs → cjs}/Config/SettingBase.js +1 -3
- package/dist/cjs/Config/SettingBase.js.map +1 -0
- package/dist/{commonjs → cjs}/Config/SettingFlag.js +1 -3
- package/dist/cjs/Config/SettingFlag.js.map +1 -0
- package/dist/{commonjs → cjs}/Config/SettingNumber.js +1 -3
- package/dist/cjs/Config/SettingNumber.js.map +1 -0
- package/dist/{commonjs → cjs}/Config/SettingOption.js +2 -6
- package/dist/cjs/Config/SettingOption.js.map +1 -0
- package/dist/{commonjs → cjs}/Config/SettingText.js +1 -3
- package/dist/cjs/Config/SettingText.js.map +1 -0
- package/dist/{commonjs → cjs}/Inputs/GamepadController.js +0 -2
- package/dist/cjs/Inputs/GamepadController.js.map +1 -0
- package/dist/{commonjs → cjs}/PeerConnectionController/AggregatedStats.js +103 -45
- package/dist/cjs/PeerConnectionController/AggregatedStats.js.map +1 -0
- package/dist/{commonjs → cjs}/PeerConnectionController/InboundRTPStats.js.map +1 -1
- package/dist/cjs/PeerConnectionController/LatencyCalculator.js +290 -0
- package/dist/cjs/PeerConnectionController/LatencyCalculator.js.map +1 -0
- package/dist/cjs/PeerConnectionController/OutBoundRTPStats.js +21 -0
- package/dist/cjs/PeerConnectionController/OutBoundRTPStats.js.map +1 -0
- package/dist/{commonjs → cjs}/PeerConnectionController/PeerConnectionController.js +53 -19
- package/dist/cjs/PeerConnectionController/PeerConnectionController.js.map +1 -0
- package/dist/{commonjs → cjs}/PixelStreaming/PixelStreaming.js +24 -3
- package/dist/cjs/PixelStreaming/PixelStreaming.js.map +1 -0
- package/dist/{commonjs → cjs}/Util/EventEmitter.js +38 -1
- package/dist/cjs/Util/EventEmitter.js.map +1 -0
- package/dist/{commonjs → cjs}/WebRtcPlayer/WebRtcPlayerController.js +41 -5
- package/dist/cjs/WebRtcPlayer/WebRtcPlayerController.js.map +1 -0
- package/dist/cjs/__test__/mockMediaStream.js +100 -0
- package/dist/cjs/__test__/mockMediaStream.js.map +1 -0
- package/dist/cjs/__test__/mockRTCPeerConnection.js +252 -0
- package/dist/cjs/__test__/mockRTCPeerConnection.js.map +1 -0
- package/dist/cjs/__test__/mockRTCRtpReceiver.js +26 -0
- package/dist/cjs/__test__/mockRTCRtpReceiver.js.map +1 -0
- package/dist/cjs/__test__/mockWebSocket.js +109 -0
- package/dist/cjs/__test__/mockWebSocket.js.map +1 -0
- package/dist/{commonjs → cjs}/pixelstreamingfrontend.js +4 -2
- package/dist/{commonjs → cjs}/pixelstreamingfrontend.js.map +1 -1
- package/dist/esm/Config/Config.js +8 -0
- package/dist/esm/Config/Config.js.map +1 -1
- package/dist/esm/Config/SettingBase.js +1 -3
- package/dist/esm/Config/SettingBase.js.map +1 -1
- package/dist/esm/Config/SettingFlag.js +1 -3
- package/dist/esm/Config/SettingFlag.js.map +1 -1
- package/dist/esm/Config/SettingNumber.js +1 -3
- package/dist/esm/Config/SettingNumber.js.map +1 -1
- package/dist/esm/Config/SettingOption.js +2 -6
- package/dist/esm/Config/SettingOption.js.map +1 -1
- package/dist/esm/Config/SettingText.js +1 -3
- package/dist/esm/Config/SettingText.js.map +1 -1
- package/dist/esm/Inputs/GamepadController.js +0 -2
- package/dist/esm/Inputs/GamepadController.js.map +1 -1
- package/dist/esm/PeerConnectionController/AggregatedStats.js +104 -46
- package/dist/esm/PeerConnectionController/AggregatedStats.js.map +1 -1
- package/dist/esm/PeerConnectionController/InboundRTPStats.js.map +1 -1
- package/dist/esm/PeerConnectionController/LatencyCalculator.js +284 -0
- package/dist/esm/PeerConnectionController/LatencyCalculator.js.map +1 -0
- package/dist/esm/PeerConnectionController/OutBoundRTPStats.js +8 -4
- package/dist/esm/PeerConnectionController/OutBoundRTPStats.js.map +1 -1
- package/dist/esm/PeerConnectionController/PeerConnectionController.js +52 -18
- package/dist/esm/PeerConnectionController/PeerConnectionController.js.map +1 -1
- package/dist/esm/PixelStreaming/PixelStreaming.js +25 -4
- package/dist/esm/PixelStreaming/PixelStreaming.js.map +1 -1
- package/dist/esm/Util/EventEmitter.js +33 -0
- package/dist/esm/Util/EventEmitter.js.map +1 -1
- package/dist/esm/WebRtcPlayer/WebRtcPlayerController.js +42 -6
- package/dist/esm/WebRtcPlayer/WebRtcPlayerController.js.map +1 -1
- package/dist/esm/__test__/mockMediaStream.js +92 -0
- package/dist/esm/__test__/mockMediaStream.js.map +1 -0
- package/dist/esm/__test__/mockRTCPeerConnection.js +242 -0
- package/dist/esm/__test__/mockRTCPeerConnection.js.map +1 -0
- package/dist/esm/__test__/mockRTCRtpReceiver.js +21 -0
- package/dist/esm/__test__/mockRTCRtpReceiver.js.map +1 -0
- package/dist/esm/__test__/mockWebSocket.js +103 -0
- package/dist/esm/__test__/mockWebSocket.js.map +1 -0
- package/dist/esm/pixelstreamingfrontend.js +2 -1
- package/dist/esm/pixelstreamingfrontend.js.map +1 -1
- package/dist/types/Config/Config.d.ts +2 -0
- package/dist/types/PeerConnectionController/AggregatedStats.d.ts +18 -7
- package/dist/types/PeerConnectionController/InboundRTPStats.d.ts +88 -85
- package/dist/types/PeerConnectionController/LatencyCalculator.d.ts +87 -0
- package/dist/types/PeerConnectionController/OutBoundRTPStats.d.ts +46 -12
- package/dist/types/PeerConnectionController/PeerConnectionController.d.ts +17 -3
- package/dist/types/PixelStreaming/PixelStreaming.d.ts +17 -3
- package/dist/types/Util/EventEmitter.d.ts +41 -1
- package/dist/types/VideoPlayer/VideoPlayer.d.ts +1 -1
- package/dist/types/WebRtcPlayer/WebRtcPlayerController.d.ts +4 -1
- package/dist/types/__test__/mockMediaStream.d.ts +49 -0
- package/dist/types/__test__/mockRTCPeerConnection.d.ts +134 -0
- package/dist/types/__test__/mockRTCRtpReceiver.d.ts +3 -0
- package/dist/types/__test__/mockWebSocket.d.ts +33 -0
- package/dist/types/pixelstreamingfrontend.d.ts +2 -1
- package/eslint.config.mjs +52 -0
- package/package.json +47 -45
- package/src/Config/Config.ts +30 -0
- package/src/Config/SettingBase.ts +1 -1
- package/src/Config/SettingFlag.ts +1 -1
- package/src/Config/SettingNumber.ts +1 -1
- package/src/Config/SettingOption.ts +2 -2
- package/src/Config/SettingText.ts +1 -1
- package/src/Inputs/GamepadController.ts +2 -2
- package/src/PeerConnectionController/AggregatedStats.ts +111 -52
- package/src/PeerConnectionController/InboundRTPStats.ts +88 -85
- package/src/PeerConnectionController/LatencyCalculator.ts +392 -0
- package/src/PeerConnectionController/OutBoundRTPStats.ts +46 -12
- package/src/PeerConnectionController/PeerConnectionController.ts +72 -19
- package/src/PixelStreaming/PixelStreaming.ts +34 -4
- package/src/Util/EventEmitter.ts +60 -0
- package/src/VideoPlayer/VideoPlayer.ts +1 -1
- package/src/WebRtcPlayer/WebRtcPlayerController.ts +53 -7
- package/src/__test__/mockRTCPeerConnection.ts +1 -1
- package/src/pixelstreamingfrontend.ts +2 -1
- package/{tsconfig.json → tsconfig.base.json} +5 -3
- package/tsconfig.cjs.json +3 -5
- package/tsconfig.esm.json +3 -3
- package/tsconfig.jest.json +6 -6
- package/.eslintignore +0 -12
- package/.eslintrc.js +0 -20
- package/.prettierrc.json +0 -7
- package/dist/commonjs/Config/Config.js.map +0 -1
- package/dist/commonjs/Config/SettingBase.js.map +0 -1
- package/dist/commonjs/Config/SettingFlag.js.map +0 -1
- package/dist/commonjs/Config/SettingNumber.js.map +0 -1
- package/dist/commonjs/Config/SettingOption.js.map +0 -1
- package/dist/commonjs/Config/SettingText.js.map +0 -1
- package/dist/commonjs/Inputs/GamepadController.js.map +0 -1
- package/dist/commonjs/PeerConnectionController/AggregatedStats.js.map +0 -1
- package/dist/commonjs/PeerConnectionController/OutBoundRTPStats.js +0 -17
- package/dist/commonjs/PeerConnectionController/OutBoundRTPStats.js.map +0 -1
- package/dist/commonjs/PeerConnectionController/PeerConnectionController.js.map +0 -1
- package/dist/commonjs/PixelStreaming/PixelStreaming.js.map +0 -1
- package/dist/commonjs/Util/EventEmitter.js.map +0 -1
- package/dist/commonjs/WebRtcPlayer/WebRtcPlayerController.js.map +0 -1
- /package/dist/{commonjs → cjs}/AFK/AFKController.js +0 -0
- /package/dist/{commonjs → cjs}/AFK/AFKController.js.map +0 -0
- /package/dist/{commonjs → cjs}/DataChannel/DataChannelController.js +0 -0
- /package/dist/{commonjs → cjs}/DataChannel/DataChannelController.js.map +0 -0
- /package/dist/{commonjs → cjs}/DataChannel/DataChannelLatencyTestController.js +0 -0
- /package/dist/{commonjs → cjs}/DataChannel/DataChannelLatencyTestController.js.map +0 -0
- /package/dist/{commonjs → cjs}/DataChannel/DataChannelLatencyTestResults.js +0 -0
- /package/dist/{commonjs → cjs}/DataChannel/DataChannelLatencyTestResults.js.map +0 -0
- /package/dist/{commonjs → cjs}/DataChannel/DataChannelSender.js +0 -0
- /package/dist/{commonjs → cjs}/DataChannel/DataChannelSender.js.map +0 -0
- /package/dist/{commonjs → cjs}/DataChannel/InitialSettings.js +0 -0
- /package/dist/{commonjs → cjs}/DataChannel/InitialSettings.js.map +0 -0
- /package/dist/{commonjs → cjs}/DataChannel/LatencyTestResults.js +0 -0
- /package/dist/{commonjs → cjs}/DataChannel/LatencyTestResults.js.map +0 -0
- /package/dist/{commonjs → cjs}/FreezeFrame/FreezeFrame.js +0 -0
- /package/dist/{commonjs → cjs}/FreezeFrame/FreezeFrame.js.map +0 -0
- /package/dist/{commonjs → cjs}/FreezeFrame/FreezeFrameController.js +0 -0
- /package/dist/{commonjs → cjs}/FreezeFrame/FreezeFrameController.js.map +0 -0
- /package/dist/{commonjs → cjs}/Inputs/GamepadTypes.js +0 -0
- /package/dist/{commonjs → cjs}/Inputs/GamepadTypes.js.map +0 -0
- /package/dist/{commonjs → cjs}/Inputs/IInputController.js +0 -0
- /package/dist/{commonjs → cjs}/Inputs/IInputController.js.map +0 -0
- /package/dist/{commonjs → cjs}/Inputs/InputClassesFactory.js +0 -0
- /package/dist/{commonjs → cjs}/Inputs/InputClassesFactory.js.map +0 -0
- /package/dist/{commonjs → cjs}/Inputs/KeyCodes.js +0 -0
- /package/dist/{commonjs → cjs}/Inputs/KeyCodes.js.map +0 -0
- /package/dist/{commonjs → cjs}/Inputs/KeyboardController.js +0 -0
- /package/dist/{commonjs → cjs}/Inputs/KeyboardController.js.map +0 -0
- /package/dist/{commonjs → cjs}/Inputs/MouseButtons.js +0 -0
- /package/dist/{commonjs → cjs}/Inputs/MouseButtons.js.map +0 -0
- /package/dist/{commonjs → cjs}/Inputs/MouseController.js +0 -0
- /package/dist/{commonjs → cjs}/Inputs/MouseController.js.map +0 -0
- /package/dist/{commonjs → cjs}/Inputs/MouseControllerHovering.js +0 -0
- /package/dist/{commonjs → cjs}/Inputs/MouseControllerHovering.js.map +0 -0
- /package/dist/{commonjs → cjs}/Inputs/MouseControllerLocked.js +0 -0
- /package/dist/{commonjs → cjs}/Inputs/MouseControllerLocked.js.map +0 -0
- /package/dist/{commonjs → cjs}/Inputs/SpecialKeyCodes.js +0 -0
- /package/dist/{commonjs → cjs}/Inputs/SpecialKeyCodes.js.map +0 -0
- /package/dist/{commonjs → cjs}/Inputs/TouchController.js +0 -0
- /package/dist/{commonjs → cjs}/Inputs/TouchController.js.map +0 -0
- /package/dist/{commonjs → cjs}/Inputs/TouchControllerFake.js +0 -0
- /package/dist/{commonjs → cjs}/Inputs/TouchControllerFake.js.map +0 -0
- /package/dist/{commonjs → cjs}/Inputs/XRGamepadController.js +0 -0
- /package/dist/{commonjs → cjs}/Inputs/XRGamepadController.js.map +0 -0
- /package/dist/{commonjs → cjs}/PeerConnectionController/CandidatePairStats.js +0 -0
- /package/dist/{commonjs → cjs}/PeerConnectionController/CandidatePairStats.js.map +0 -0
- /package/dist/{commonjs → cjs}/PeerConnectionController/CandidateStat.js +0 -0
- /package/dist/{commonjs → cjs}/PeerConnectionController/CandidateStat.js.map +0 -0
- /package/dist/{commonjs → cjs}/PeerConnectionController/CodecStats.js +0 -0
- /package/dist/{commonjs → cjs}/PeerConnectionController/CodecStats.js.map +0 -0
- /package/dist/{commonjs → cjs}/PeerConnectionController/DataChannelStats.js +0 -0
- /package/dist/{commonjs → cjs}/PeerConnectionController/DataChannelStats.js.map +0 -0
- /package/dist/{commonjs → cjs}/PeerConnectionController/InboundRTPStats.js +0 -0
- /package/dist/{commonjs → cjs}/PeerConnectionController/InboundTrackStats.js +0 -0
- /package/dist/{commonjs → cjs}/PeerConnectionController/InboundTrackStats.js.map +0 -0
- /package/dist/{commonjs → cjs}/PeerConnectionController/SessionStats.js +0 -0
- /package/dist/{commonjs → cjs}/PeerConnectionController/SessionStats.js.map +0 -0
- /package/dist/{commonjs → cjs}/PeerConnectionController/StreamStats.js +0 -0
- /package/dist/{commonjs → cjs}/PeerConnectionController/StreamStats.js.map +0 -0
- /package/dist/{commonjs → cjs}/UI/OnScreenKeyboard.js +0 -0
- /package/dist/{commonjs → cjs}/UI/OnScreenKeyboard.js.map +0 -0
- /package/dist/{commonjs → cjs}/UeInstanceMessage/ResponseController.js +0 -0
- /package/dist/{commonjs → cjs}/UeInstanceMessage/ResponseController.js.map +0 -0
- /package/dist/{commonjs → cjs}/UeInstanceMessage/SendMessageController.js +0 -0
- /package/dist/{commonjs → cjs}/UeInstanceMessage/SendMessageController.js.map +0 -0
- /package/dist/{commonjs → cjs}/UeInstanceMessage/StreamMessageController.js +0 -0
- /package/dist/{commonjs → cjs}/UeInstanceMessage/StreamMessageController.js.map +0 -0
- /package/dist/{commonjs → cjs}/UeInstanceMessage/ToStreamerMessagesController.js +0 -0
- /package/dist/{commonjs → cjs}/UeInstanceMessage/ToStreamerMessagesController.js.map +0 -0
- /package/dist/{commonjs → cjs}/Util/FileUtil.js +0 -0
- /package/dist/{commonjs → cjs}/Util/FileUtil.js.map +0 -0
- /package/dist/{commonjs → cjs}/Util/IURLSearchParams.js +0 -0
- /package/dist/{commonjs → cjs}/Util/IURLSearchParams.js.map +0 -0
- /package/dist/{commonjs → cjs}/Util/InputCoordTranslator.js +0 -0
- /package/dist/{commonjs → cjs}/Util/InputCoordTranslator.js.map +0 -0
- /package/dist/{commonjs → cjs}/Util/RTCUtils.js +0 -0
- /package/dist/{commonjs → cjs}/Util/RTCUtils.js.map +0 -0
- /package/dist/{commonjs → cjs}/VideoPlayer/StreamController.js +0 -0
- /package/dist/{commonjs → cjs}/VideoPlayer/StreamController.js.map +0 -0
- /package/dist/{commonjs → cjs}/VideoPlayer/VideoPlayer.js +0 -0
- /package/dist/{commonjs → cjs}/VideoPlayer/VideoPlayer.js.map +0 -0
- /package/dist/{commonjs → cjs}/WebXR/WebXRController.js +0 -0
- /package/dist/{commonjs → cjs}/WebXR/WebXRController.js.map +0 -0
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.LatencyInfo = exports.LatencyCalculator = exports.FrameTimingInfo = void 0;
|
|
5
|
+
/**
|
|
6
|
+
* Represents either a:
|
|
7
|
+
* - synchronization source: https://developer.mozilla.org/en-US/docs/Web/API/RTCRtpReceiver/getSynchronizationSources
|
|
8
|
+
* - contributing source: https://developer.mozilla.org/en-US/docs/Web/API/RTCRtpReceiver/getContributingSources
|
|
9
|
+
* Which also (if browser supports it) may optionall contain fields for captureTimestamp + senderCaptureTimeOffset
|
|
10
|
+
* if the abs-capture-time RTP header extension is enabled (currently this only works in Chromium based browsers).
|
|
11
|
+
*/
|
|
12
|
+
class RTCRtpCaptureSource {
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* FrameTimingInfo is a Chromium-specific set of WebRTC stats useful for latency calculation. It is stored in WebRTC stats as `googTimingFrameInfo`.
|
|
16
|
+
* It is defined as an RTP header extension here: https://webrtc.googlesource.com/src/+/refs/heads/main/docs/native-code/rtp-hdrext/video-timing/README.md
|
|
17
|
+
* It is defined in source code here: https://source.chromium.org/chromium/chromium/src/+/main:third_party/webrtc/api/video/video_timing.cc;l=82;drc=8d399817282e3c12ed54eb23ec42a5e418298ec6
|
|
18
|
+
* It is discussed by its author here: https://github.com/w3c/webrtc-provisional-stats/issues/40#issuecomment-1272916692
|
|
19
|
+
* In summary it a comma-delimited string that contains the following (in this order):
|
|
20
|
+
* 1) RTP timestamp: the RTP timestamp of the frame
|
|
21
|
+
* 2) Capture time: timestamp when this frame was captured
|
|
22
|
+
* 3) Encode start: timestamp when this frame started to be encoded
|
|
23
|
+
* 4) Encode finish: timestamp when this frame finished encoding
|
|
24
|
+
* 5) Packetization finish: timestamp when this frame was split into packets and was ready to be sent over the network
|
|
25
|
+
* 6) Pacer exit: timestamp when last packet of this frame was sent over the network by the sender at this timestamp
|
|
26
|
+
* 7) Network timestamp1: place for the SFU to mark when the frame started being forwarded. Application specific.
|
|
27
|
+
* 8) Network timestamp2: place for the SFU to mark when the frame finished being forwarded. Application specific.
|
|
28
|
+
* 9) Receive start: timestamp when the first packet of this frame was received
|
|
29
|
+
* 10) Receive finish: timestamp when the last packet of this frame was received
|
|
30
|
+
* 11) Decode start: timestamp when the frame was passed to decoder
|
|
31
|
+
* 12) Decode finish: timestamp when the frame was decoded
|
|
32
|
+
* 13) Render time: timestamp of the projected render time for this frame
|
|
33
|
+
* 14) "is outlier": a flag for if this frame is bigger in encoded size than the average frame by at least 5x.
|
|
34
|
+
* 15) "triggered by timer": a flag for if this report was triggered by the timer (The report is sent every 200ms)
|
|
35
|
+
*/
|
|
36
|
+
class FrameTimingInfo {
|
|
37
|
+
}
|
|
38
|
+
exports.FrameTimingInfo = FrameTimingInfo;
|
|
39
|
+
/**
|
|
40
|
+
* Calculates a combination of latency statistics using purely WebRTC API.
|
|
41
|
+
*/
|
|
42
|
+
class LatencyCalculator {
|
|
43
|
+
constructor() {
|
|
44
|
+
/* Clock offset between peer clocks cannot always be calculated as it relies of latest sender reports.
|
|
45
|
+
* so we store the last time we had a valid clock offset in the assumption that clocks haven't drifted too much since then.
|
|
46
|
+
*/
|
|
47
|
+
this.latestSenderRecvClockOffset = null;
|
|
48
|
+
}
|
|
49
|
+
calculate(stats, receivers) {
|
|
50
|
+
const latencyInfo = new LatencyInfo();
|
|
51
|
+
const rttMS = this.getRTTMs(stats);
|
|
52
|
+
if (rttMS != null) {
|
|
53
|
+
latencyInfo.rttMs = rttMS;
|
|
54
|
+
// Calculate sender latency using the first valid video ssrc/csrc
|
|
55
|
+
const captureSource = this.getCaptureSource(receivers);
|
|
56
|
+
if (captureSource != null) {
|
|
57
|
+
const senderLatencyMs = this.calculateSenderLatency(stats, captureSource);
|
|
58
|
+
if (senderLatencyMs !== null) {
|
|
59
|
+
latencyInfo.senderLatencyMs = senderLatencyMs;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// https://w3c.github.io/webrtc-stats/#dom-rtcinboundrtpstreamstats-totalprocessingdelay
|
|
64
|
+
if (stats.inboundVideoStats.totalProcessingDelay !== undefined &&
|
|
65
|
+
stats.inboundVideoStats.framesDecoded !== undefined) {
|
|
66
|
+
latencyInfo.averageProcessingDelayMs =
|
|
67
|
+
(stats.inboundVideoStats.totalProcessingDelay / stats.inboundVideoStats.framesDecoded) * 1000;
|
|
68
|
+
}
|
|
69
|
+
// https://w3c.github.io/webrtc-stats/#dom-rtcinboundrtpstreamstats-jitterbufferminimumdelay
|
|
70
|
+
if (stats.inboundVideoStats.jitterBufferDelay !== undefined &&
|
|
71
|
+
stats.inboundVideoStats.jitterBufferEmittedCount !== undefined) {
|
|
72
|
+
latencyInfo.averageJitterBufferDelayMs =
|
|
73
|
+
(stats.inboundVideoStats.jitterBufferDelay /
|
|
74
|
+
stats.inboundVideoStats.jitterBufferEmittedCount) *
|
|
75
|
+
1000;
|
|
76
|
+
}
|
|
77
|
+
// https://w3c.github.io/webrtc-stats/#dom-rtcinboundrtpstreamstats-totaldecodetime
|
|
78
|
+
if (stats.inboundVideoStats.framesDecoded !== undefined &&
|
|
79
|
+
stats.inboundVideoStats.totalDecodeTime !== undefined) {
|
|
80
|
+
latencyInfo.averageDecodeLatencyMs =
|
|
81
|
+
(stats.inboundVideoStats.totalDecodeTime / stats.inboundVideoStats.framesDecoded) * 1000;
|
|
82
|
+
}
|
|
83
|
+
// https://w3c.github.io/webrtc-stats/#dom-rtcinboundrtpstreamstats-framesassembledfrommultiplepackets
|
|
84
|
+
if (stats.inboundVideoStats.totalAssemblyTime !== undefined &&
|
|
85
|
+
stats.inboundVideoStats.framesAssembledFromMultiplePackets !== undefined) {
|
|
86
|
+
latencyInfo.averageAssemblyDelayMs =
|
|
87
|
+
(stats.inboundVideoStats.totalAssemblyTime /
|
|
88
|
+
stats.inboundVideoStats.framesAssembledFromMultiplePackets) *
|
|
89
|
+
1000;
|
|
90
|
+
}
|
|
91
|
+
// Extract extra Chrome-specific stats like encoding latency
|
|
92
|
+
if (stats.inboundVideoStats.googTimingFrameInfo !== undefined &&
|
|
93
|
+
stats.inboundVideoStats.googTimingFrameInfo.length > 0) {
|
|
94
|
+
latencyInfo.frameTiming = this.extractFrameTimingInfo(stats.inboundVideoStats.googTimingFrameInfo);
|
|
95
|
+
}
|
|
96
|
+
// Calculate E2E latency using video-timing capture to send time + one way network latency + receiver-side latency
|
|
97
|
+
if (latencyInfo.frameTiming !== undefined &&
|
|
98
|
+
latencyInfo.frameTiming.captureToSendLatencyMs !== undefined &&
|
|
99
|
+
latencyInfo.averageProcessingDelayMs !== undefined &&
|
|
100
|
+
latencyInfo.rttMs !== undefined) {
|
|
101
|
+
latencyInfo.averageE2ELatency =
|
|
102
|
+
latencyInfo.frameTiming.captureToSendLatencyMs +
|
|
103
|
+
latencyInfo.rttMs * 0.5 +
|
|
104
|
+
latencyInfo.averageProcessingDelayMs;
|
|
105
|
+
}
|
|
106
|
+
// Calculate E2E latency as abs-capture-time capture to send latency + one way network latency + receiver-side latency
|
|
107
|
+
if (latencyInfo.senderLatencyMs != undefined &&
|
|
108
|
+
latencyInfo.averageProcessingDelayMs !== undefined &&
|
|
109
|
+
latencyInfo.rttMs !== undefined) {
|
|
110
|
+
latencyInfo.averageE2ELatency =
|
|
111
|
+
latencyInfo.senderLatencyMs + latencyInfo.rttMs * 0.5 + latencyInfo.averageProcessingDelayMs;
|
|
112
|
+
}
|
|
113
|
+
return latencyInfo;
|
|
114
|
+
}
|
|
115
|
+
extractFrameTimingInfo(googTimingFrameInfo) {
|
|
116
|
+
const timingInfo = new FrameTimingInfo();
|
|
117
|
+
const timingInfoArr = googTimingFrameInfo.split(',');
|
|
118
|
+
// Should have exactly 15 elements according to:
|
|
119
|
+
// https://source.chromium.org/chromium/chromium/src/+/main:third_party/webrtc/api/video/video_timing.cc;l=82;drc=8d399817282e3c12ed54eb23ec42a5e418298ec6
|
|
120
|
+
if (timingInfoArr.length === 15) {
|
|
121
|
+
timingInfo.rtpTimestamp = Number.parseInt(timingInfoArr[0]);
|
|
122
|
+
timingInfo.captureTimestamp = Number.parseInt(timingInfoArr[1]);
|
|
123
|
+
timingInfo.encodeStartTimestamp = Number.parseInt(timingInfoArr[2]);
|
|
124
|
+
timingInfo.encodeFinishTimestamp = Number.parseInt(timingInfoArr[3]);
|
|
125
|
+
timingInfo.packetizerFinishTimestamp = Number.parseInt(timingInfoArr[4]);
|
|
126
|
+
timingInfo.pacerExitTimestamp = Number.parseInt(timingInfoArr[5]);
|
|
127
|
+
timingInfo.networkTimestamp1 = Number.parseInt(timingInfoArr[6]);
|
|
128
|
+
timingInfo.networkTimestamp2 = Number.parseInt(timingInfoArr[7]);
|
|
129
|
+
timingInfo.receiveStart = Number.parseInt(timingInfoArr[8]);
|
|
130
|
+
timingInfo.receiveFinish = Number.parseInt(timingInfoArr[9]);
|
|
131
|
+
timingInfo.decodeStart = Number.parseInt(timingInfoArr[10]);
|
|
132
|
+
timingInfo.decodeFinish = Number.parseInt(timingInfoArr[11]);
|
|
133
|
+
timingInfo.renderTime = Number.parseInt(timingInfoArr[12]);
|
|
134
|
+
timingInfo.isOutlier = Number.parseInt(timingInfoArr[13]) > 0;
|
|
135
|
+
timingInfo.isTriggeredByTimer = Number.parseInt(timingInfoArr[14]) > 0;
|
|
136
|
+
// Calculate some latency stats
|
|
137
|
+
timingInfo.encoderLatencyMs = timingInfo.encodeFinishTimestamp - timingInfo.encodeStartTimestamp;
|
|
138
|
+
timingInfo.packetizeLatencyMs =
|
|
139
|
+
timingInfo.packetizerFinishTimestamp - timingInfo.encodeFinishTimestamp;
|
|
140
|
+
timingInfo.pacerLatencyMs = timingInfo.pacerExitTimestamp - timingInfo.packetizerFinishTimestamp;
|
|
141
|
+
timingInfo.captureToSendLatencyMs = timingInfo.pacerExitTimestamp - timingInfo.captureTimestamp;
|
|
142
|
+
}
|
|
143
|
+
return timingInfo;
|
|
144
|
+
}
|
|
145
|
+
calculateSenderLatency(stats, captureSource) {
|
|
146
|
+
// The calculation performed in this function is as per the procedure defined here:
|
|
147
|
+
// https://w3c.github.io/webrtc-extensions/#dom-rtcrtpcontributingsource-sendercapturetimeoffset
|
|
148
|
+
// Get the sender capture in the sender's clock
|
|
149
|
+
const senderCaptureTimestamp = captureSource.captureTimestamp + captureSource.senderCaptureTimeOffset;
|
|
150
|
+
let sendRecvClockOffset = this.calculateSenderReceiverClockOffset(stats);
|
|
151
|
+
// Use latest clock offset if we couldn't calculate one now
|
|
152
|
+
if (sendRecvClockOffset == null) {
|
|
153
|
+
if (this.latestSenderRecvClockOffset != null) {
|
|
154
|
+
sendRecvClockOffset = this.latestSenderRecvClockOffset;
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
this.latestSenderRecvClockOffset = sendRecvClockOffset;
|
|
162
|
+
}
|
|
163
|
+
// This brings sender clock roughly inline with recv clock
|
|
164
|
+
const recvCaptureTimestampNTP = senderCaptureTimestamp + sendRecvClockOffset;
|
|
165
|
+
// As defined in Chrome source: https://chromium.googlesource.com/external/webrtc/+/master/system_wrappers/include/clock.h#26
|
|
166
|
+
const ntp1970 = 2208988800000;
|
|
167
|
+
const recvCaptureTimestamp = recvCaptureTimestampNTP - ntp1970;
|
|
168
|
+
const senderLatency = captureSource.timestamp - recvCaptureTimestamp;
|
|
169
|
+
return senderLatency;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Find the first valid ssrc or csrc that has capture time fields present from abs-capture-time header extension.
|
|
173
|
+
* @param receivers The RTP receviers this peer connection has.
|
|
174
|
+
* @returns A single valid ssrc or csrc that has capture time fields or null if there is none (e.g. in non-chromium browsers it will be null).
|
|
175
|
+
*/
|
|
176
|
+
getCaptureSource(receivers) {
|
|
177
|
+
// We only want video receivers
|
|
178
|
+
receivers = receivers.filter((receiver) => receiver.track.kind === 'video');
|
|
179
|
+
for (const receiver of receivers) {
|
|
180
|
+
// Go through all ssrc and csrc to check for capture timestamp
|
|
181
|
+
// Note: Conversion to `any` here is because TS does not have captureTimestamp etc defined in the types
|
|
182
|
+
// these fields only exist in Chromium currently.
|
|
183
|
+
const sources = receiver
|
|
184
|
+
.getSynchronizationSources()
|
|
185
|
+
.concat(receiver.getContributingSources());
|
|
186
|
+
for (const src of sources) {
|
|
187
|
+
if (src.captureTimestamp !== undefined &&
|
|
188
|
+
src.senderCaptureTimeOffset !== undefined &&
|
|
189
|
+
src.timestamp !== undefined) {
|
|
190
|
+
const captureSrc = new RTCRtpCaptureSource();
|
|
191
|
+
captureSrc.timestamp = src.timestamp;
|
|
192
|
+
captureSrc.captureTimestamp = src.captureTimestamp;
|
|
193
|
+
captureSrc.senderCaptureTimeOffset = src.senderCaptureTimeOffset;
|
|
194
|
+
return captureSrc;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
calculateSenderReceiverClockOffset(stats) {
|
|
201
|
+
// The calculation performed in this function is as per the procedure defined here:
|
|
202
|
+
// https://w3c.github.io/webrtc-extensions/#dom-rtcrtpcontributingsource-sendercapturetimeoffset
|
|
203
|
+
const hasRemoteOutboundVideoStats = stats.remoteOutboundVideoStats !== undefined &&
|
|
204
|
+
stats.remoteOutboundVideoStats.timestamp !== undefined &&
|
|
205
|
+
stats.remoteOutboundVideoStats.remoteTimestamp !== undefined;
|
|
206
|
+
// Note: As of Chrome 132, remote-outbound-rtp stats for video are not yet implemented (audio works).
|
|
207
|
+
// This codepath should activate once they do begin to work.
|
|
208
|
+
if (!hasRemoteOutboundVideoStats) {
|
|
209
|
+
return null;
|
|
210
|
+
}
|
|
211
|
+
const remoteStatsArrivedTimestamp = stats.remoteOutboundVideoStats.timestamp;
|
|
212
|
+
const remoteStatsSentTimestamp = stats.remoteOutboundVideoStats.remoteTimestamp;
|
|
213
|
+
const rttMs = this.getRTTMs(stats);
|
|
214
|
+
if (remoteStatsArrivedTimestamp !== undefined &&
|
|
215
|
+
remoteStatsSentTimestamp !== undefined &&
|
|
216
|
+
rttMs !== null) {
|
|
217
|
+
const onewayDelay = rttMs * 0.5;
|
|
218
|
+
return remoteStatsArrivedTimestamp - (remoteStatsSentTimestamp + onewayDelay);
|
|
219
|
+
}
|
|
220
|
+
// Could not get stats to calculate sender/receiver clock offset
|
|
221
|
+
else {
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
getRTTMs(stats) {
|
|
226
|
+
// Try to get it from the active candidate pair
|
|
227
|
+
const activeCandidatePair = stats.getActiveCandidatePair();
|
|
228
|
+
if (!!activeCandidatePair && activeCandidatePair.currentRoundTripTime !== undefined) {
|
|
229
|
+
const curRTTSeconds = activeCandidatePair.currentRoundTripTime;
|
|
230
|
+
return curRTTSeconds * 1000;
|
|
231
|
+
}
|
|
232
|
+
// Next try to get it from remote-outbound-rtp video stats
|
|
233
|
+
if (!!stats.remoteOutboundVideoStats &&
|
|
234
|
+
stats.remoteOutboundVideoStats.totalRoundTripTime !== undefined &&
|
|
235
|
+
stats.remoteOutboundVideoStats.roundTripTimeMeasurements !== undefined &&
|
|
236
|
+
stats.remoteOutboundVideoStats.roundTripTimeMeasurements > 0) {
|
|
237
|
+
const avgRttSeconds = stats.remoteOutboundVideoStats.totalRoundTripTime /
|
|
238
|
+
stats.remoteOutboundVideoStats.roundTripTimeMeasurements;
|
|
239
|
+
return avgRttSeconds * 1000;
|
|
240
|
+
}
|
|
241
|
+
// Next try to get it from remote-outbound-rtp audio stats
|
|
242
|
+
if (!!stats.remoteOutboundAudioStats &&
|
|
243
|
+
stats.remoteOutboundAudioStats.totalRoundTripTime !== undefined &&
|
|
244
|
+
stats.remoteOutboundAudioStats.roundTripTimeMeasurements !== undefined &&
|
|
245
|
+
stats.remoteOutboundAudioStats.roundTripTimeMeasurements > 0) {
|
|
246
|
+
const avgRttSeconds = stats.remoteOutboundAudioStats.totalRoundTripTime /
|
|
247
|
+
stats.remoteOutboundAudioStats.roundTripTimeMeasurements;
|
|
248
|
+
return avgRttSeconds * 1000;
|
|
249
|
+
}
|
|
250
|
+
return null;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
exports.LatencyCalculator = LatencyCalculator;
|
|
254
|
+
/**
|
|
255
|
+
* A collection of latency information calculated using the WebRTC API.
|
|
256
|
+
* Most stats are calculated following the spec:
|
|
257
|
+
* https://w3c.github.io/webrtc-stats/#dictionary-rtcinboundrtpstreamstats-members
|
|
258
|
+
*/
|
|
259
|
+
class LatencyInfo {
|
|
260
|
+
constructor() {
|
|
261
|
+
/**
|
|
262
|
+
* The time taken from the moment a frame is done capturing to the moment it is sent over the network.
|
|
263
|
+
* Note: This can only be calculated if both offer and answer contain the
|
|
264
|
+
* the RTP header extension for `video-timing` (Chrome only for now)
|
|
265
|
+
*/
|
|
266
|
+
this.senderLatencyMs = undefined;
|
|
267
|
+
/**
|
|
268
|
+
* The time taken from the moment a frame is done capturing to the moment it is sent over the network.
|
|
269
|
+
* Note: This can only be calculated if both offer and answer contain the
|
|
270
|
+
* the RTP header extension for `abs-capture-time` (Chrome only for now)
|
|
271
|
+
*/
|
|
272
|
+
this.senderLatencyAbsCaptureTimeMs = undefined;
|
|
273
|
+
/* The round trip time (milliseconds) between each sender->receiver->sender */
|
|
274
|
+
this.rttMs = undefined;
|
|
275
|
+
/* Average time taken (milliseconds) from video packet receipt to post-decode. */
|
|
276
|
+
this.averageProcessingDelayMs = undefined;
|
|
277
|
+
/* Average time taken (milliseconds) inside the jitter buffer (which is post-receipt but pre-decode). */
|
|
278
|
+
this.averageJitterBufferDelayMs = undefined;
|
|
279
|
+
/* Average time taken (milliseconds) to decode a video frame. */
|
|
280
|
+
this.averageDecodeLatencyMs = undefined;
|
|
281
|
+
/* Average time taken (milliseconds) to between receipt of the first and last video packet of a. */
|
|
282
|
+
this.averageAssemblyDelayMs = undefined;
|
|
283
|
+
/* The sender latency + RTT/2 + processing delay */
|
|
284
|
+
this.averageE2ELatency = undefined;
|
|
285
|
+
/* Timing information about the worst performing frame since the last getStats call (only works on Chrome) */
|
|
286
|
+
this.frameTiming = undefined;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
exports.LatencyInfo = LatencyInfo;
|
|
290
|
+
//# sourceMappingURL=LatencyCalculator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LatencyCalculator.js","sourceRoot":"","sources":["../../../src/PeerConnectionController/LatencyCalculator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.RemoteOutboundRTPStats = exports.OutboundRTPStats = void 0;
|
|
5
|
+
/**
|
|
6
|
+
* Outbound RTP stats collected from the RTC Stats Report under `outbound-rtp`.
|
|
7
|
+
* Wrapper around: https://developer.mozilla.org/en-US/docs/Web/API/RTCOutboundRtpStreamStats
|
|
8
|
+
* These are stats for video we are sending to a remote peer.
|
|
9
|
+
*/
|
|
10
|
+
class OutboundRTPStats {
|
|
11
|
+
}
|
|
12
|
+
exports.OutboundRTPStats = OutboundRTPStats;
|
|
13
|
+
/**
|
|
14
|
+
* Remote outbound stats collected from the RTC Stats Report under `remote-outbound-rtp`.
|
|
15
|
+
* Wrapper around: https://developer.mozilla.org/en-US/docs/Web/API/RTCRemoteOutboundRtpStreamStats
|
|
16
|
+
* These are stats for media we are receiving from a remote peer.
|
|
17
|
+
*/
|
|
18
|
+
class RemoteOutboundRTPStats {
|
|
19
|
+
}
|
|
20
|
+
exports.RemoteOutboundRTPStats = RemoteOutboundRTPStats;
|
|
21
|
+
//# sourceMappingURL=OutBoundRTPStats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OutBoundRTPStats.js","sourceRoot":"","sources":["../../../src/PeerConnectionController/OutBoundRTPStats.ts"],"names":[],"mappings":";AAAA,kDAAkD;;;AAElD;;;;GAIG;AACH,MAAa,gBAAgB;CA+B5B;AA/BD,4CA+BC;AAED;;;;GAIG;AACH,MAAa,sBAAsB;CAclC;AAdD,wDAcC"}
|
|
@@ -10,12 +10,15 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
});
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.PeerConnectionController = void 0;
|
|
13
|
+
exports.PeerConnectionController = exports.kAbsCaptureTime = void 0;
|
|
14
14
|
const lib_pixelstreamingcommon_ue5_5_1 = require("@epicgames-ps/lib-pixelstreamingcommon-ue5.5");
|
|
15
15
|
const Config_1 = require("../Config/Config");
|
|
16
16
|
const AggregatedStats_1 = require("./AggregatedStats");
|
|
17
17
|
const sdp_1 = require("sdp");
|
|
18
18
|
const RTCUtils_1 = require("../Util/RTCUtils");
|
|
19
|
+
const lib_pixelstreamingcommon_ue5_5_2 = require("@epicgames-ps/lib-pixelstreamingcommon-ue5.5");
|
|
20
|
+
const LatencyCalculator_1 = require("./LatencyCalculator");
|
|
21
|
+
exports.kAbsCaptureTime = 'http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time';
|
|
19
22
|
/**
|
|
20
23
|
* Handles the Peer Connection
|
|
21
24
|
*/
|
|
@@ -28,6 +31,7 @@ class PeerConnectionController {
|
|
|
28
31
|
constructor(options, config, preferredCodec) {
|
|
29
32
|
this.config = config;
|
|
30
33
|
this.createPeerConnection(options, preferredCodec);
|
|
34
|
+
this.latencyCalculator = new LatencyCalculator_1.LatencyCalculator();
|
|
31
35
|
}
|
|
32
36
|
createPeerConnection(options, preferredCodec) {
|
|
33
37
|
// Set the ICE transport to relay if TURN enabled
|
|
@@ -79,13 +83,22 @@ class PeerConnectionController {
|
|
|
79
83
|
});
|
|
80
84
|
}
|
|
81
85
|
/**
|
|
82
|
-
*
|
|
86
|
+
* Receive offer from UE side and process it as the remote description of this peer connection
|
|
83
87
|
*/
|
|
84
88
|
receiveOffer(offer, config) {
|
|
85
89
|
return __awaiter(this, void 0, void 0, function* () {
|
|
86
90
|
var _a;
|
|
87
91
|
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('Receive Offer');
|
|
92
|
+
// If UE or JSStreamer did send abs-capture-time RTP header extension to a non-Chrome browser
|
|
93
|
+
// then remove it from the SDP because if Firefox detects it in offer or answer it will fail to connect
|
|
94
|
+
// due having 15 or more header extensions: https://mailarchive.ietf.org/arch/msg/rtcweb/QRnWNuWzGuLRovWdHkodNP6VOgg/
|
|
95
|
+
if (this.isFirefox()) {
|
|
96
|
+
// example: a=extmap:15 http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time
|
|
97
|
+
offer.sdp = offer.sdp.replace(/^a=extmap:\d+ http:\/\/www\.webrtc\.org\/experiments\/rtp-hdrext\/abs-capture-time\r\n/gm, '');
|
|
98
|
+
}
|
|
88
99
|
(_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.setRemoteDescription(offer).then(() => {
|
|
100
|
+
// Fire event for when remote offer description is set
|
|
101
|
+
this.onSetRemoteDescription(offer);
|
|
89
102
|
const isLocalhostConnection = location.hostname === 'localhost' || location.hostname === '127.0.0.1';
|
|
90
103
|
const isHttpsConnection = location.protocol === 'https:';
|
|
91
104
|
let useMic = config.isFlagEnabled(Config_1.Flags.UseMic);
|
|
@@ -106,9 +119,9 @@ class PeerConnectionController {
|
|
|
106
119
|
return (_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.setLocalDescription(Answer);
|
|
107
120
|
}).then(() => {
|
|
108
121
|
var _a;
|
|
109
|
-
this.
|
|
110
|
-
}).catch(() => {
|
|
111
|
-
lib_pixelstreamingcommon_ue5_5_1.Logger.Error(
|
|
122
|
+
this.onSetLocalDescription((_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.currentLocalDescription);
|
|
123
|
+
}).catch((err) => {
|
|
124
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Error(`createAnswer() failed - ${err}`);
|
|
112
125
|
});
|
|
113
126
|
});
|
|
114
127
|
});
|
|
@@ -128,23 +141,19 @@ class PeerConnectionController {
|
|
|
128
141
|
* Generate Aggregated Stats and then fire a onVideo Stats event
|
|
129
142
|
*/
|
|
130
143
|
generateStats() {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
? (_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.getStats(this.audioTrack).then((statsData) => {
|
|
134
|
-
this.aggregatedStats.processStats(statsData);
|
|
135
|
-
})
|
|
136
|
-
: Promise.resolve();
|
|
137
|
-
const videoPromise = this.videoTrack
|
|
138
|
-
? (_b = this.peerConnection) === null || _b === void 0 ? void 0 : _b.getStats(this.videoTrack).then((statsData) => {
|
|
139
|
-
this.aggregatedStats.processStats(statsData);
|
|
140
|
-
})
|
|
141
|
-
: Promise.resolve();
|
|
142
|
-
Promise.allSettled([audioPromise, videoPromise]).then(() => {
|
|
144
|
+
this.peerConnection.getStats().then((statsData) => {
|
|
145
|
+
this.aggregatedStats.processStats(statsData);
|
|
143
146
|
this.onVideoStats(this.aggregatedStats);
|
|
147
|
+
// Calculate latency using stats and video receivers and then call the handling function
|
|
148
|
+
const latencyInfo = this.latencyCalculator.calculate(this.aggregatedStats, this.peerConnection.getReceivers());
|
|
149
|
+
this.onLatencyCalculated(latencyInfo);
|
|
144
150
|
// Update the preferred codec selection based on what was actually negotiated
|
|
145
151
|
if (this.updateCodecSelection && !!this.aggregatedStats.inboundVideoStats.codecId) {
|
|
146
152
|
// Construct the qualified codec name from the mimetype and fmtp
|
|
147
153
|
const codecStats = this.aggregatedStats.codecs.get(this.aggregatedStats.inboundVideoStats.codecId);
|
|
154
|
+
if (codecStats === undefined) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
148
157
|
const codecShortname = codecStats.mimeType.replace('video/', '');
|
|
149
158
|
let fullCodecName = codecShortname;
|
|
150
159
|
if (codecStats.sdpFmtpLine && codecStats.sdpFmtpLine.trim() !== '') {
|
|
@@ -194,8 +203,17 @@ class PeerConnectionController {
|
|
|
194
203
|
audioSDP += 'useinbandfec=1';
|
|
195
204
|
// We use the line 'useinbandfec=1' (which Opus uses) to set our Opus specific audio parameters.
|
|
196
205
|
mungedSDP = mungedSDP.replace('useinbandfec=1', audioSDP);
|
|
206
|
+
// Add abs-capture-time RTP header extension if we have enabled the setting.
|
|
207
|
+
// Note: As at Feb 2025, Chromium based browsers are the only ones that support this and
|
|
208
|
+
// munging it into the answer in Firefox will cause the connection to fail.
|
|
209
|
+
if (this.config.isFlagEnabled(Config_1.Flags.EnableCaptureTimeExt) && !this.isFirefox()) {
|
|
210
|
+
mungedSDP = lib_pixelstreamingcommon_ue5_5_2.SDPUtils.addVideoHeaderExtensionToSdp(mungedSDP, exports.kAbsCaptureTime);
|
|
211
|
+
}
|
|
197
212
|
return mungedSDP;
|
|
198
213
|
}
|
|
214
|
+
isFirefox() {
|
|
215
|
+
return navigator.userAgent.indexOf('Firefox') > 0;
|
|
216
|
+
}
|
|
199
217
|
/**
|
|
200
218
|
* When a Ice Candidate is received add to the RTC Peer Connection
|
|
201
219
|
* @param iceCandidate - RTC Ice Candidate from the Signaling Server
|
|
@@ -515,6 +533,14 @@ class PeerConnectionController {
|
|
|
515
533
|
onVideoStats(event) {
|
|
516
534
|
// Default Functionality: Do Nothing
|
|
517
535
|
}
|
|
536
|
+
/**
|
|
537
|
+
* And override event for when latency info is calculated
|
|
538
|
+
* @param latencyInfo - Calculated latency information.
|
|
539
|
+
*/
|
|
540
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
541
|
+
onLatencyCalculated(latencyInfo) {
|
|
542
|
+
// Default Functionality: Do Nothing
|
|
543
|
+
}
|
|
518
544
|
/**
|
|
519
545
|
* Event to send the RTC offer to the Signaling server
|
|
520
546
|
* @param offer - RTC Offer
|
|
@@ -524,11 +550,19 @@ class PeerConnectionController {
|
|
|
524
550
|
// Default Functionality: Do Nothing
|
|
525
551
|
}
|
|
526
552
|
/**
|
|
527
|
-
* Event
|
|
553
|
+
* Event fired when remote offer description is set.
|
|
554
|
+
* @param offer - RTC Offer
|
|
555
|
+
*/
|
|
556
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
557
|
+
onSetRemoteDescription(offer) {
|
|
558
|
+
// Default Functionality: Do Nothing
|
|
559
|
+
}
|
|
560
|
+
/**
|
|
561
|
+
* Event fire when local description answer is set.
|
|
528
562
|
* @param answer - RTC Answer
|
|
529
563
|
*/
|
|
530
564
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
531
|
-
|
|
565
|
+
onSetLocalDescription(answer) {
|
|
532
566
|
// Default Functionality: Do Nothing
|
|
533
567
|
}
|
|
534
568
|
/**
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PeerConnectionController.js","sourceRoot":"","sources":["../../../src/PeerConnectionController/PeerConnectionController.ts"],"names":[],"mappings":"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"}
|
|
@@ -303,19 +303,37 @@ class PixelStreaming {
|
|
|
303
303
|
}
|
|
304
304
|
}
|
|
305
305
|
/**
|
|
306
|
-
*
|
|
306
|
+
* Internal function to emit an event when auto connecting occurs
|
|
307
307
|
*/
|
|
308
308
|
_onWebRtcAutoConnect() {
|
|
309
309
|
this._eventEmitter.dispatchEvent(new EventEmitter_1.WebRtcAutoConnectEvent());
|
|
310
310
|
}
|
|
311
311
|
/**
|
|
312
|
-
*
|
|
312
|
+
* Internal function to emit an event for when SDP negotiation is fully finished.
|
|
313
313
|
*/
|
|
314
314
|
_onWebRtcSdp() {
|
|
315
315
|
this._eventEmitter.dispatchEvent(new EventEmitter_1.WebRtcSdpEvent());
|
|
316
316
|
}
|
|
317
317
|
/**
|
|
318
|
-
*
|
|
318
|
+
* Internal function to emit an SDP offer after it has been set.
|
|
319
|
+
*/
|
|
320
|
+
_onWebRtcSdpOffer(offer) {
|
|
321
|
+
this._eventEmitter.dispatchEvent(new EventEmitter_1.WebRtcSdpOfferEvent({ sdp: offer }));
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Internal function to emit an SDP answer after it has been set.
|
|
325
|
+
*/
|
|
326
|
+
_onWebRtcSdpAnswer(answer) {
|
|
327
|
+
this._eventEmitter.dispatchEvent(new EventEmitter_1.WebRtcSdpAnswerEvent({ sdp: answer }));
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Internal function call to emit a `latencyCalculated` event.
|
|
331
|
+
*/
|
|
332
|
+
_onLatencyCalculated(latencyInfo) {
|
|
333
|
+
this._eventEmitter.dispatchEvent(new EventEmitter_1.LatencyCalculatedEvent({ latencyInfo }));
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Internal function to emits a StreamLoading event
|
|
319
337
|
*/
|
|
320
338
|
_onStreamLoading() {
|
|
321
339
|
this._eventEmitter.dispatchEvent(new EventEmitter_1.StreamLoadingEvent());
|
|
@@ -460,6 +478,9 @@ class PixelStreaming {
|
|
|
460
478
|
_onPlayerCount(playerCount) {
|
|
461
479
|
this._eventEmitter.dispatchEvent(new EventEmitter_1.PlayerCountEvent({ count: playerCount }));
|
|
462
480
|
}
|
|
481
|
+
_onSubscribeFailed(message) {
|
|
482
|
+
this._eventEmitter.dispatchEvent(new EventEmitter_1.SubscribeFailedEvent({ message: message }));
|
|
483
|
+
}
|
|
463
484
|
// Sets up to emit the webrtc tcp relay detect event
|
|
464
485
|
_setupWebRtcTCPRelayDetection(statsReceivedEvent) {
|
|
465
486
|
// Get the active candidate pair
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PixelStreaming.js","sourceRoot":"","sources":["../../../src/PixelStreaming/PixelStreaming.ts"],"names":[],"mappings":";AAAA,kDAAkD;;;AAElD,6CAA4D;AAG5D,mFAAgF;AAChF,6CAA4D;AAC5D,iGAAsE;AAEtE,6DAA0D;AAC1D,uDA0B8B;AAC9B,8DAA2D;AAC3D,0FAAgF;AAChF,sGAGyD;AAKzD,+CAA4C;AAC5C,+DAA4D;AAW5D;;;;;GAKG;AACH,MAAa,cAAc;IAsBvB;;;;OAIG;IACH,YAAY,MAAc,EAAE,SAAmC;QAdvD,yBAAoB,GAAG,KAAK,CAAC;QAejC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,kBAAkB,EAAE,CAAC;YAChC,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC,kBAAkB,CAAC;QAC5D,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,yCAA0B,EAAE,CAAC;QAEtD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,eAAe;QACf,IAAI,CAAC,yBAAyB,CAAC,IAAI,+CAAsB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QAE9E,oBAAoB;QACpB,IAAI,CAAC,sBAAsB,GAAG,IAAI,mCAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC5E,IAAI,CAAC,sBAAsB,CAAC,gCAAgC,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CACpF,IAAI,CAAC,iBAAiB,CAAC,wCAAwC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1E,IAAI,CAAC,yBAAyB,GAAG,CAAC,OAAY,EAAE,EAAE,CAC9C,IAAI,CAAC,sBAAsB,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAE9D,IAAI,CAAC,gBAAgB,GAAG,IAAI,iCAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAEpE,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEnF,mDAAmD;QACnD,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,CAAC,CAAuB,EAAE,EAAE;YAC/E,mCAAmC;YACnC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,eAAe,EAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC7F,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACH,IAAW,kBAAkB;QACzB,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC5B,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACzD,IAAI,CAAC,mBAAmB,CAAC,EAAE,GAAG,oBAAoB,CAAC;QACvD,CAAC;QACD,OAAO,IAAI,CAAC,mBAAmB,CAAC;IACpC,CAAC;IAED;;OAEG;IACK,iBAAiB;QACrB,IAAI,CAAC,MAAM,CAAC,4BAA4B,CACpC,cAAK,CAAC,mBAAmB,EACzB,CAAC,sBAA+B,EAAE,EAAE;YAChC,mGAAmG;YACnG,+DAA+D;YAC/D,IAAI,sBAAsB,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,CAAC;gBACjF,IAAI,CAAC,iBAAiB,CAAC,kCAAkC,EAAE,CAAC;YAChE,CAAC;QACL,CAAC,CACJ,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,cAAK,CAAC,YAAY,EAAE,CAAC,YAAqB,EAAE,EAAE;YACnF,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,cAAK,CAAC,uBAAuB,EAAE,GAAG,EAAE;YACzE,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,cAAK,CAAC,iBAAiB,EAAE,CAAC,eAAwB,EAAE,EAAE;YAC3F,IAAI,CAAC,MAAM,CAAC,YAAY,CACpB,cAAK,CAAC,iBAAiB,EACvB,mBAAmB,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,QAAQ,CACrE,CAAC;YACF,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,cAAK,CAAC,UAAU,CAAC,CAAC,CAAC;QAC7F,CAAC,CAAC,CAAC;QAEH,aAAa;QACb,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,cAAK,CAAC,aAAa,EAAE,CAAC,SAAkB,EAAE,EAAE;YACjF,IAAI,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,cAAK,CAAC,UAAU,EAAE,CAAC,SAAkB,EAAE,EAAE;YAC9E,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,4BAA4B,CACpC,cAAK,CAAC,oBAAoB,EAC1B,CAAC,mBAA4B,EAAE,EAAE;YAC7B,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,cAAK,CAAC,UAAU,CAAC,CAAC,CAAC;QAC7F,CAAC,CACJ,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,cAAK,CAAC,UAAU,EAAE,CAAC,SAAkB,EAAE,EAAE;YAC9E,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,cAAK,CAAC,YAAY,EAAE,CAAC,SAAkB,EAAE,EAAE;YAChF,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,qBAAqB;QACrB,IAAI,CAAC,MAAM,CAAC,mCAAmC,CAAC,0BAAiB,CAAC,KAAK,EAAE,CAAC,QAAgB,EAAE,EAAE;YAC1F,uCAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;YACjD,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAClD,uCAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC;YACtD,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,0BAAiB,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QAC/E,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,mCAAmC,CAAC,0BAAiB,CAAC,KAAK,EAAE,CAAC,QAAgB,EAAE,EAAE;YAC1F,uCAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;YACjD,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAClD,uCAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC;YACtD,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,0BAAiB,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QAC/E,CAAC,CAAC,CAAC;QAEH,iCAAiC;QACjC,IAAI,CAAC,MAAM,CAAC,mCAAmC,CAAC,0BAAiB,CAAC,UAAU,EAAE,CAAC,QAAgB,EAAE,EAAE;YAC/F,uCAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;YACtD,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;YACvD,uCAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;YAC3D,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,0BAAiB,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,mCAAmC,CAAC,0BAAiB,CAAC,UAAU,EAAE,CAAC,QAAgB,EAAE,EAAE;YAC/F,uCAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;YACtD,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;YACvD,uCAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;YAC3D,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,0BAAiB,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;QAEH,8DAA8D;QAC9D,IAAI,CAAC,MAAM,CAAC,mCAAmC,CAC3C,0BAAiB,CAAC,gBAAgB,EAClC,CAAC,QAAgB,EAAE,EAAE;YACjB,QAAQ,GAAG,EAAE,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;YACtC,uCAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;YACpE,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAClD,uCAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QAC/D,CAAC,CACJ,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,mCAAmC,CAC3C,0BAAiB,CAAC,gBAAgB,EAClC,CAAC,QAAgB,EAAE,EAAE;YACjB,QAAQ,GAAG,EAAE,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;YACtC,uCAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;YACpE,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAClD,uCAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QAC/D,CAAC,CACJ,CAAC;QACF,kBAAkB;QAClB,IAAI,CAAC,MAAM,CAAC,mCAAmC,CAC3C,0BAAiB,CAAC,gBAAgB,EAClC,CAAC,QAAgB,EAAE,EAAE;YACjB,uCAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;YAC5D,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC/E,uCAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QAC/D,CAAC,CACJ,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,mCAAmC,CAC3C,0BAAiB,CAAC,gBAAgB,EAClC,CAAC,QAAgB,EAAE,EAAE;YACjB,uCAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;YAC5D,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC/E,uCAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QAC/D,CAAC,CACJ,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,mCAAmC,CAAC,0BAAiB,CAAC,SAAS,EAAE,CAAC,QAAgB,EAAE,EAAE;YAC9F,uCAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;YAC5D,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC/C,uCAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,kCAAkC,CAC1C,yBAAgB,CAAC,cAAc,EAC/B,CAAC,QAAgB,EAAE,EAAE;YACjB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACzB,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YACvD,CAAC;QACL,CAAC,CACJ,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC5D,CAAC;IAED;;;OAGG;IACH,6DAA6D;IAC7D,yBAAyB,CAAC,OAAY;QAClC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAED;;;OAGG;IACH,wBAAwB,CAAC,qBAA8B;QACnD,IAAI,CAAC,gBAAgB,GAAG,qBAAqB,CAAC;IAClD,CAAC;IAED;;;OAGG;IACK,yBAAyB,CAAC,sBAA8C;QAC5E,IAAI,CAAC,iBAAiB,GAAG,sBAAsB,CAAC;QAEhD,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CACpC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,yBAAgB,CAAC,cAAc,CAAC,CAAC,QAAQ,CACzE,CAAC;QACF,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,CAAC;QAE3C,0CAA0C;QAC1C,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACI,OAAO;QACV,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,oCAAqB,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,iBAAiB,CAAC,yBAAyB,EAAE,CAAC;IACvD,CAAC;IAED;;;OAGG;IACI,SAAS;QACZ,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,mCAAoB,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;IAC3D,CAAC;IAED;;OAEG;IACI,UAAU;QACb,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,uCAAwB,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;IACnC,CAAC;IAED;;OAEG;IACI,IAAI;QACP,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAC;IACxC,CAAC;IAED;;OAEG;IACK,mBAAmB;QACvB,iEAAiE;QACjE,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,cAAK,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/C,sFAAsF;YACtF,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,CAAC,iBAAiB,CAAC,yBAAyB,EAAE,CAAC;QACvD,CAAC;IACL,CAAC;IAED;;;;;;;OAOG;IACI,gBAAgB,CAAC,WAAW,GAAG,KAAK;QACvC,4DAA4D;QAC5D,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC/B,OAAO;QACX,CAAC;QAED,8FAA8F;QAC9F,IAAI,WAAW,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC3C,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,OAAO;QACX,CAAC;QAED,iGAAiG;QACjG,uCAAM,CAAC,OAAO,CACV,kJAAkJ,CACrJ,CAAC;IACN,CAAC;IAEM,cAAc;QACjB,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO;QACX,CAAC;QAED,0EAA0E;QAC1E,uCAAM,CAAC,IAAI,CACP,uGAAuG,CAC1G,CAAC;IACN,CAAC;IAEO,kBAAkB,CAAC,IAAa;;QACpC,KAAK,MAAM,WAAW,IAAI,MAAA,MAAA,MAAA,MAAA,IAAI,CAAC,iBAAiB,0CAAE,wBAAwB,0CAAE,cAAc,0CAAE,eAAe,EAAE,mCACzG,EAAE,EAAE,CAAC;YACL,IAAI,mBAAQ,CAAC,uBAAuB,CAAC,WAAW,CAAC,EAAE,CAAC;gBAChD,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC;YAC7C,CAAC;QACL,CAAC;IACL,CAAC;IAED;;;;;;;OAOG;IACI,YAAY,CAAC,WAAW,GAAG,KAAK;QACnC,8DAA8D;QAC9D,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;YACzC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAC3B,OAAO;QACX,CAAC;QAED,gGAAgG;QAChG,IAAI,WAAW,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAC9C,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,OAAO;QACX,CAAC;QAED,iGAAiG;QACjG,uCAAM,CAAC,OAAO,CACV,iJAAiJ,CACpJ,CAAC;IACN,CAAC;IAEM,UAAU;QACb,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;YACzC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAC1B,OAAO;QACX,CAAC;QAED,0EAA0E;QAC1E,uCAAM,CAAC,IAAI,CACP,qGAAqG,CACxG,CAAC;IACN,CAAC;IAEO,cAAc,CAAC,IAAa;;QAChC,KAAK,MAAM,WAAW,IAAI,MAAA,MAAA,MAAA,MAAA,IAAI,CAAC,iBAAiB,0CAAE,wBAAwB,0CAAE,cAAc,0CAAE,eAAe,EAAE,mCACzG,EAAE,EAAE,CAAC;YACL,IAAI,mBAAQ,CAAC,uBAAuB,CAAC,WAAW,CAAC,EAAE,CAAC;gBAChD,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC;YAC7C,CAAC;QACL,CAAC;IACL,CAAC;IAED;;OAEG;IACH,oBAAoB;QAChB,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,qCAAsB,EAAE,CAAC,CAAC;IACnE,CAAC;IAED;;OAEG;IACH,YAAY;QACR,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,6BAAc,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,KAAgC;QAC9C,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,kCAAmB,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,MAAiC;QAChD,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,mCAAoB,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAChF,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,WAAwB;QACzC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,qCAAsB,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IAClF,CAAC;IAED;;OAEG;IACH,gBAAgB;QACZ,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,iCAAkB,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED;;;;;OAKG;IACH,aAAa,CAAC,WAAmB,EAAE,qBAA8B;QAC7D,IAAI,CAAC,aAAa,CAAC,aAAa,CAC5B,IAAI,sCAAuB,CAAC;YACxB,WAAW,EAAE,WAAW;YACxB,qBAAqB,EAAE,qBAAqB;SAC/C,CAAC,CACL,CAAC;IACN,CAAC;IAED;;OAEG;IACH,mBAAmB;QACf,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,oCAAqB,EAAE,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,kBAAkB;QACd,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,mCAAoB,EAAE,CAAC,CAAC;IACjE,CAAC;IAED;;OAEG;IACH,eAAe;QACX,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,gCAAiB,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACH,mBAAmB;QACf,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,oCAAqB,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACtC,CAAC;IAED;;;OAGG;IACH,oBAAoB,CAAC,cAAkC;QACnD,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,qCAAsB,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;IACrF,CAAC;IAED,iCAAiC,CAAC,QAAwC;QACtE,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,kDAAmC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC5F,CAAC;IAED;;;OAGG;IACH,aAAa,CAAC,UAA2B;QACrC,WAAW;QACX,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YAC9D,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACtC,CAAC;QACD,UAAU,CAAC,uBAAuB,CAC9B,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,iBAAiB,CAAC,UAAU,CACpC,CAAC;QAEF,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,iCAAkB,CAAC,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;IAC9F,CAAC;IAED;;;OAGG;IACH,oBAAoB,CAAC,EAAU;QAC3B,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,qCAAsB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAChF,CAAC;IAED;;;OAGG;IACH,kBAAkB,CAAC,QAAyB;;QACxC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,mCAAoB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QACzE,IAAI,QAAQ,CAAC,sBAAsB,EAAE,CAAC;YAClC,IAAI,CAAC,oBAAoB,GAAG,MAAA,QAAQ,CAAC,sBAAsB,CAAC,2BAA2B,mCAAI,KAAK,CAAC;YACjG,IAAI,IAAI,CAAC,oBAAoB,KAAK,KAAK,EAAE,CAAC;gBACtC,uCAAM,CAAC,IAAI,CACP,wGAAwG,CAC3G,CAAC;YACN,CAAC;QACL,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;QAC9C,MAAM,SAAS,GAAG,IAAI,mCAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/D,uCAAM,CAAC,IAAI,CAAC,wBAAwB,YAAY,EAAE,CAAC,CAAC;QACpD,IAAI,QAAQ,CAAC,eAAe,EAAE,CAAC;YAC3B,+CAA+C;YAC/C,6BAA6B;YAC7B,wFAAwF;YACxF,0DAA0D;YAC1D,IAAI,QAAQ,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CACzB,0BAAiB,CAAC,KAAK;gBACvB,8GAA8G;gBAC9G,YAAY,IAAI,SAAS,CAAC,GAAG,CAAC,0BAAiB,CAAC,KAAK,CAAC;oBAClD,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,0BAAiB,CAAC,KAAK,CAAC,CAAC;oBAC3D,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC,CAC5C,CAAC;gBAEF,IAAI,CAAC,MAAM,CAAC,iBAAiB,CACzB,0BAAiB,CAAC,KAAK,EACvB,YAAY,IAAI,SAAS,CAAC,GAAG,CAAC,0BAAiB,CAAC,KAAK,CAAC;oBAClD,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,0BAAiB,CAAC,KAAK,CAAC,CAAC;oBAC3D,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,IAAI,EAAE,CAC7C,CAAC;YACN,CAAC;YAED,IAAI,QAAQ,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;gBACtC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CACzB,0BAAiB,CAAC,UAAU;gBAC5B,8GAA8G;gBAC9G,YAAY,IAAI,SAAS,CAAC,GAAG,CAAC,0BAAiB,CAAC,UAAU,CAAC;oBACvD,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,0BAAiB,CAAC,UAAU,CAAC,CAAC;oBAChE,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,UAAU,IAAI,CAAC,CACjD,CAAC;gBAEF,IAAI,CAAC,MAAM,CAAC,iBAAiB,CACzB,0BAAiB,CAAC,UAAU,EAC5B,YAAY,IAAI,SAAS,CAAC,GAAG,CAAC,0BAAiB,CAAC,UAAU,CAAC;oBACvD,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,0BAAiB,CAAC,UAAU,CAAC,CAAC;oBAChE,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,UAAU,IAAI,GAAG,CACnD,CAAC;YACN,CAAC;YAED,gGAAgG;YAChG,oCAAoC;YACpC,IAAI,YAAY,EAAE,CAAC;gBACf,IAAI,SAAS,CAAC,GAAG,CAAC,0BAAiB,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBACpD,IAAI,CAAC,MAAM,CAAC,iBAAiB,CACzB,0BAAiB,CAAC,gBAAgB,EAClC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,0BAAiB,CAAC,gBAAgB,CAAC,CAAC,CACvE,CAAC;gBACN,CAAC;gBACD,IAAI,SAAS,CAAC,GAAG,CAAC,0BAAiB,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBACpD,IAAI,CAAC,MAAM,CAAC,iBAAiB,CACzB,0BAAiB,CAAC,gBAAgB,EAClC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,0BAAiB,CAAC,gBAAgB,CAAC,CAAC,CACvE,CAAC;gBACN,CAAC;YACL,CAAC;QACL,CAAC;QACD,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC1B,IAAI,CAAC,MAAM,CAAC,iBAAiB,CACzB,0BAAiB,CAAC,gBAAgB,EAClC,YAAY,IAAI,SAAS,CAAC,GAAG,CAAC,0BAAiB,CAAC,gBAAgB,CAAC;gBAC7D,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,0BAAiB,CAAC,gBAAgB,CAAC,CAAC;gBACtE,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,CACpE,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,iBAAiB,CACzB,0BAAiB,CAAC,gBAAgB,EAClC,YAAY,IAAI,SAAS,CAAC,GAAG,CAAC,0BAAiB,CAAC,gBAAgB,CAAC;gBAC7D,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,0BAAiB,CAAC,gBAAgB,CAAC,CAAC;gBACtE,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,CACpE,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,iBAAiB,CACzB,0BAAiB,CAAC,SAAS,EAC3B,YAAY,IAAI,SAAS,CAAC,GAAG,CAAC,0BAAiB,CAAC,SAAS,CAAC;gBACtD,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,0BAAiB,CAAC,SAAS,CAAC,CAAC;gBAC/D,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CACpC,CAAC;QACN,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,0BAA0B,CAAC,mBAA4B;QACnD,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,cAAK,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,CAAC;IAC/E,CAAC;IAED,cAAc,CAAC,WAAmB;QAC9B,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,+BAAgB,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IACnF,CAAC;IAED,kBAAkB,CAAC,OAAe;QAC9B,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,mCAAoB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IACrF,CAAC;IAED,oDAAoD;IACpD,6BAA6B,CAAC,kBAAsC;QAChE,gCAAgC;QAChC,MAAM,mBAAmB,GAAG,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,sBAAsB,EAAE,CAAC;QAE7F,iDAAiD;QACjD,IAAI,mBAAmB,IAAI,IAAI,EAAE,CAAC;YAC9B,gEAAgE;YAChE,MAAM,cAAc,GAAG,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,IAAI,CAC/E,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,IAAI,mBAAmB,CAAC,gBAAgB,EACnE,IAAI,CACP,CAAC;YAEF,kGAAkG;YAClG,IACI,cAAc,IAAI,IAAI;gBACtB,cAAc,CAAC,aAAa,IAAI,OAAO;gBACvC,cAAc,CAAC,aAAa,IAAI,KAAK,EACvC,CAAC;gBACC,4CAA4C;gBAC5C,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,0CAA2B,EAAE,CAAC,CAAC;YACxE,CAAC;YACD,mEAAmE;YACnE,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,eAAe,EAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAChG,CAAC;IACL,CAAC;IAED;;;;OAIG;IACI,kBAAkB;QACrB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,CAAC;YACrD,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACI,6BAA6B,CAAC,MAAoC;QACrE,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,CAAC;YACrD,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,iCAAiC,EAAE,CAAC;YAC1C,IAAI,CAAC,iCAAiC,GAAG,IAAI,mEAAgC,CACzE,IAAI,CAAC,iBAAiB,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAC9E,CAAC,MAAoC,EAAE,EAAE;gBACrC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,gDAAiC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YACxF,CAAC,CACJ,CAAC;YACF,IAAI,CAAC,gBAAgB,CAAC,gCAAgC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE;gBAC/E,IAAI,CAAC,iCAAiC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;QACP,CAAC;QACD,OAAO,IAAI,CAAC,iCAAiC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAChE,CAAC;IAED;;;;OAIG;IACI,cAAc;QACjB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,CAAC;YACrD,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACI,aAAa;QAChB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,CAAC;YACrD,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACI,iBAAiB,CAAC,UAA2B;QAChD,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,CAAC;YACrD,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACI,WAAW,CAAC,UAAkB;QACjC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,CAAC;YACrD,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,oBAAoB,IAAI,gBAAgB,IAAI,UAAU,EAAE,CAAC;YAC/D,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACI,kBAAkB,CAAC,OAAe;QACrC,IAAI,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,CAAC;YACnF,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACI,wBAAwB,CAAC,IAAY,EAAE,QAAoC;QAC9E,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACvF,CAAC;IAED;;;OAGG;IACI,2BAA2B,CAAC,IAAY;QAC3C,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;IAChF,CAAC;IAED;;;;OAIG;IACI,aAAa,CAAC,CAAsB;QACvC,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED;;;;OAIG;IACI,gBAAgB,CAGrB,IAAO,EAAE,QAAgC;QACvC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACxD,CAAC;IAED;;;;OAIG;IACI,mBAAmB,CAGxB,IAAO,EAAE,QAAgC;QACvC,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED;;OAEG;IACI,QAAQ;QACX,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;IACrC,CAAC;IAED;;;;OAIG;IACI,uBAAuB,CAAC,wBAAsC;QACjE,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,GAAG,wBAAwB,CAAC;IAC3E,CAAC;IAED,IAAW,gBAAgB;QACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IAED;;;OAGG;IACH,IAAW,kBAAkB;QACzB,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,IAAW,eAAe;QACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IAEM,sBAAsB,CACzB,IAAY,EACZ,SAA2B,EAC3B,OAA8D;QAE9D,IAAI,SAAS,KAAK,0CAAgB,CAAC,YAAY,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE,CAAC;YAChF,uCAAM,CAAC,OAAO,CAAC,+CAA+C,IAAI,EAAE,CAAC,CAAC;YACtE,OAAO;QACX,CAAC;QAED,IAAI,SAAS,KAAK,0CAAgB,CAAC,UAAU,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE,CAAC;YAC9E,IAAI,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,sBAAsB,CACjE,SAAS,EACT,IAAI,EACJ,CAAC,IAA4B,EAAE,EAAE,CAC7B,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,CACrF,CAAC;QACN,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,sBAAsB,CACjE,SAAS,EACT,IAAI,EACJ,CAAC,IAAiB,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CACvC,CAAC;QACN,CAAC;IACL,CAAC;IAED,IAAW,kBAAkB;QACzB,OAAO,IAAI,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,kBAAkB,CAAC;IAC7E,CAAC;IAEM,cAAc;QACjB,OAAO,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC;IACjD,CAAC;CACJ;AA12BD,wCA02BC"}
|