hj-gis-sdk 1.0.0 → 1.0.2
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/README.md +50 -59
- package/dev-dist/animation.esm.js +152 -0
- package/dev-dist/animation.esm.js.map +1 -0
- package/dev-dist/animation.js +154 -0
- package/dev-dist/animation.js.map +1 -0
- package/dev-dist/building.esm.js +85 -0
- package/dev-dist/building.esm.js.map +1 -0
- package/dev-dist/building.js +87 -0
- package/dev-dist/building.js.map +1 -0
- package/dev-dist/common.esm.js +16159 -0
- package/dev-dist/common.esm.js.map +1 -0
- package/dev-dist/common.js +16163 -0
- package/dev-dist/common.js.map +1 -0
- package/dev-dist/fence.esm.js +100 -0
- package/dev-dist/fence.esm.js.map +1 -0
- package/dev-dist/fence.js +102 -0
- package/dev-dist/fence.js.map +1 -0
- package/dev-dist/ghost.esm.js +53 -0
- package/dev-dist/ghost.esm.js.map +1 -0
- package/dev-dist/ghost.js +55 -0
- package/dev-dist/ghost.js.map +1 -0
- package/dev-dist/heatmap.esm.js +103 -0
- package/dev-dist/heatmap.esm.js.map +1 -0
- package/dev-dist/heatmap.js +105 -0
- package/dev-dist/heatmap.js.map +1 -0
- package/dev-dist/index.esm.js +21 -0
- package/dev-dist/index.esm.js.map +1 -0
- package/dev-dist/index.esm2.js +4272 -0
- package/dev-dist/index.esm2.js.map +1 -0
- package/dev-dist/index.js +26 -0
- package/dev-dist/index.js.map +1 -0
- package/dev-dist/index2.js +4280 -0
- package/dev-dist/index2.js.map +1 -0
- package/dev-dist/keyframe.esm.js +95 -0
- package/dev-dist/keyframe.esm.js.map +1 -0
- package/dev-dist/keyframe.js +97 -0
- package/dev-dist/keyframe.js.map +1 -0
- package/dev-dist/measurement.esm.js +57 -0
- package/dev-dist/measurement.esm.js.map +1 -0
- package/dev-dist/measurement.js +59 -0
- package/dev-dist/measurement.js.map +1 -0
- package/dev-dist/scatter.esm.js +85 -0
- package/dev-dist/scatter.esm.js.map +1 -0
- package/dev-dist/scatter.js +87 -0
- package/dev-dist/scatter.js.map +1 -0
- package/dev-dist/src.esm.js +289 -0
- package/dev-dist/src.esm.js.map +1 -0
- package/dev-dist/src.js +291 -0
- package/dev-dist/src.js.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/animation/animate-clip.d.ts +39 -0
- package/dev-dist/types/hj-gis-sdk/addons/animation/animate-clip.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/animation/animation-action.d.ts +31 -0
- package/dev-dist/types/hj-gis-sdk/addons/animation/animation-action.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/animation/animation-mixer.d.ts +18 -0
- package/dev-dist/types/hj-gis-sdk/addons/animation/animation-mixer.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/animation/index.d.ts +5 -0
- package/dev-dist/types/hj-gis-sdk/addons/animation/index.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/camera.d.ts +59 -0
- package/dev-dist/types/hj-gis-sdk/addons/camera.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/clock.d.ts +40 -0
- package/dev-dist/types/hj-gis-sdk/addons/clock.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/commander/context.d.ts +24 -0
- package/dev-dist/types/hj-gis-sdk/addons/commander/context.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/commander/dispatcher.d.ts +43 -0
- package/dev-dist/types/hj-gis-sdk/addons/commander/dispatcher.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/commander/excutor/base.d.ts +22 -0
- package/dev-dist/types/hj-gis-sdk/addons/commander/excutor/base.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/loader/index.d.ts +6 -0
- package/dev-dist/types/hj-gis-sdk/addons/loader/index.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/loader/loader.d.ts +4 -0
- package/dev-dist/types/hj-gis-sdk/addons/loader/loader.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/node/base.d.ts +63 -0
- package/dev-dist/types/hj-gis-sdk/addons/node/base.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/node/ue-node.d.ts +82 -0
- package/dev-dist/types/hj-gis-sdk/addons/node/ue-node.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/proxy.d.ts +83 -0
- package/dev-dist/types/hj-gis-sdk/addons/proxy.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/base.d.ts +7 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/base.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/building.d.ts +36 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/building.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/daytime.d.ts +7 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/daytime.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/fence.d.ts +61 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/fence.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/ghost.d.ts +14 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/ghost.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/heat-map.d.ts +65 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/heat-map.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/index.d.ts +26 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/index.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/match-view.d.ts +7 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/match-view.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/measurement.d.ts +13 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/measurement.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/pick-cast.d.ts +26 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/pick-cast.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/scatter.d.ts +57 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/scatter.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/weather.d.ts +31 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/weather.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/transform.d.ts +91 -0
- package/dev-dist/types/hj-gis-sdk/addons/transform.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/world.d.ts +76 -0
- package/dev-dist/types/hj-gis-sdk/addons/world.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/core/ue-rpc.d.ts +54 -0
- package/dev-dist/types/hj-gis-sdk/core/ue-rpc.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/index.d.ts +27 -0
- package/dev-dist/types/hj-gis-sdk/index.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/utils.d.ts +16 -0
- package/dev-dist/types/hj-gis-sdk/utils.d.ts.map +1 -0
- package/dev-dist/types/src/animation.d.ts +2 -0
- package/dev-dist/types/src/animation.d.ts.map +1 -0
- package/dev-dist/types/src/building.d.ts +2 -0
- package/dev-dist/types/src/building.d.ts.map +1 -0
- package/dev-dist/types/src/common.d.ts +5 -0
- package/dev-dist/types/src/common.d.ts.map +1 -0
- package/dev-dist/types/src/fence.d.ts +2 -0
- package/dev-dist/types/src/fence.d.ts.map +1 -0
- package/dev-dist/types/src/ghost.d.ts +2 -0
- package/dev-dist/types/src/ghost.d.ts.map +1 -0
- package/dev-dist/types/src/heatmap.d.ts +2 -0
- package/dev-dist/types/src/heatmap.d.ts.map +1 -0
- package/dev-dist/types/src/index.d.ts +2 -0
- package/dev-dist/types/src/index.d.ts.map +1 -0
- package/dev-dist/types/src/keyframe.d.ts +2 -0
- package/dev-dist/types/src/keyframe.d.ts.map +1 -0
- package/dev-dist/types/src/measurement.d.ts +2 -0
- package/dev-dist/types/src/measurement.d.ts.map +1 -0
- package/dev-dist/types/src/scatter.d.ts +2 -0
- package/dev-dist/types/src/scatter.d.ts.map +1 -0
- package/dev-dist/types/src/weather.d.ts +2 -0
- package/dev-dist/types/src/weather.d.ts.map +1 -0
- package/dev-dist/weather.esm.js +68 -0
- package/dev-dist/weather.esm.js.map +1 -0
- package/dev-dist/weather.js +70 -0
- package/dev-dist/weather.js.map +1 -0
- package/dist/sdk.esm.js +19 -6
- package/dist/sdk.esm.js.map +1 -1
- package/dist/sdk.js +19 -6
- package/dist/sdk.js.map +1 -1
- package/dist/sdk.umd.js +1 -1
- package/dist/sdk.umd.js.map +1 -1
- package/dist/types/hj-gis-sdk/addons/tools/scatter.d.ts.map +1 -1
- package/dist/types/src/common.d.ts.map +1 -1
- package/hj-gis-sdk/addons/animation/animate-clip.ts +93 -0
- package/hj-gis-sdk/addons/animation/animation-action.ts +93 -0
- package/hj-gis-sdk/addons/animation/animation-mixer.ts +51 -0
- package/hj-gis-sdk/addons/animation/index.ts +17 -0
- package/hj-gis-sdk/addons/camera.ts +173 -0
- package/hj-gis-sdk/addons/clock.ts +85 -0
- package/hj-gis-sdk/addons/commander/context.ts +70 -0
- package/hj-gis-sdk/addons/commander/dispatcher.ts +68 -0
- package/hj-gis-sdk/addons/commander/excutor/base.ts +26 -0
- package/hj-gis-sdk/addons/loader/index.ts +7 -0
- package/hj-gis-sdk/addons/loader/loader.ts +3 -0
- package/hj-gis-sdk/addons/node/base.ts +131 -0
- package/hj-gis-sdk/addons/node/ue-node.ts +147 -0
- package/hj-gis-sdk/addons/proxy.ts +200 -0
- package/hj-gis-sdk/addons/tools/base.ts +11 -0
- package/hj-gis-sdk/addons/tools/building.ts +84 -0
- package/hj-gis-sdk/addons/tools/daytime.ts +14 -0
- package/hj-gis-sdk/addons/tools/fence.ts +105 -0
- package/hj-gis-sdk/addons/tools/ghost.ts +31 -0
- package/hj-gis-sdk/addons/tools/heat-map.ts +95 -0
- package/hj-gis-sdk/addons/tools/index.ts +25 -0
- package/hj-gis-sdk/addons/tools/match-view.ts +35 -0
- package/hj-gis-sdk/addons/tools/measurement.ts +25 -0
- package/hj-gis-sdk/addons/tools/pick-cast.ts +67 -0
- package/hj-gis-sdk/addons/tools/scatter.ts +230 -0
- package/hj-gis-sdk/addons/tools/weather.ts +40 -0
- package/hj-gis-sdk/addons/transform.ts +126 -0
- package/hj-gis-sdk/addons/world.ts +173 -0
- package/hj-gis-sdk/core/ue-rpc.ts +234 -0
- package/hj-gis-sdk/index.ts +26 -0
- package/hj-gis-sdk/utils.ts +52 -0
- package/index.html +48 -0
- package/package-lock.json +7368 -0
- package/package.json +17 -4
- package/rollup.config.dev.js +107 -0
- package/rollup.config.js +52 -0
- package/src/animation.ts +175 -0
- package/src/building.ts +114 -0
- package/src/common.ts +47 -0
- package/src/fence.ts +131 -0
- package/src/ghost.ts +70 -0
- package/src/heatmap.ts +125 -0
- package/src/index.ts +350 -0
- package/src/keyframe.ts +113 -0
- package/src/measurement.ts +80 -0
- package/src/scatter.ts +105 -0
- package/src/weather.ts +86 -0
- package/tsconfig.json +30 -0
- package/yarn.lock +3108 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sources":["../node_modules/@epicgames-ps/lib-pixelstreamingcommon-ue5.5/dist/esm/Event/EventEmitter.js","../node_modules/@epicgames-ps/lib-pixelstreamingcommon-ue5.5/dist/esm/Transport/WebSocketTransport.js","../node_modules/@epicgames-ps/lib-pixelstreamingcommon-ue5.5/dist/esm/Protocol/SignallingProtocol.js","../node_modules/@protobuf-ts/runtime/build/es2015/json-typings.js","../node_modules/@protobuf-ts/runtime/build/es2015/base64.js","../node_modules/@protobuf-ts/runtime/build/es2015/binary-format-contract.js","../node_modules/@protobuf-ts/runtime/build/es2015/goog-varint.js","../node_modules/@protobuf-ts/runtime/build/es2015/pb-long.js","../node_modules/@protobuf-ts/runtime/build/es2015/binary-reader.js","../node_modules/@protobuf-ts/runtime/build/es2015/assert.js","../node_modules/@protobuf-ts/runtime/build/es2015/binary-writer.js","../node_modules/@protobuf-ts/runtime/build/es2015/json-format-contract.js","../node_modules/@protobuf-ts/runtime/build/es2015/message-type-contract.js","../node_modules/@protobuf-ts/runtime/build/es2015/lower-camel-case.js","../node_modules/@protobuf-ts/runtime/build/es2015/reflection-info.js","../node_modules/@protobuf-ts/runtime/build/es2015/oneof.js","../node_modules/@protobuf-ts/runtime/build/es2015/reflection-type-check.js","../node_modules/@protobuf-ts/runtime/build/es2015/reflection-long-convert.js","../node_modules/@protobuf-ts/runtime/build/es2015/reflection-json-reader.js","../node_modules/@protobuf-ts/runtime/build/es2015/reflection-json-writer.js","../node_modules/@protobuf-ts/runtime/build/es2015/reflection-scalar-default.js","../node_modules/@protobuf-ts/runtime/build/es2015/reflection-binary-reader.js","../node_modules/@protobuf-ts/runtime/build/es2015/reflection-binary-writer.js","../node_modules/@protobuf-ts/runtime/build/es2015/reflection-create.js","../node_modules/@protobuf-ts/runtime/build/es2015/reflection-merge-partial.js","../node_modules/@protobuf-ts/runtime/build/es2015/reflection-equals.js","../node_modules/@protobuf-ts/runtime/build/es2015/message-type.js","../node_modules/@epicgames-ps/lib-pixelstreamingcommon-ue5.5/dist/esm/Messages/signalling_messages.js","../node_modules/@epicgames-ps/lib-pixelstreamingcommon-ue5.5/dist/esm/Messages/message_helpers.js","../node_modules/@epicgames-ps/lib-pixelstreamingcommon-ue5.5/dist/esm/Protocol/KeepaliveMonitor.js","../node_modules/@epicgames-ps/lib-pixelstreamingcommon-ue5.5/dist/esm/Util/SdpUtils.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/VideoPlayer/StreamController.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/FreezeFrame/FreezeFrame.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/FreezeFrame/FreezeFrameController.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/Config/SettingBase.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/Config/SettingFlag.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/Config/SettingNumber.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/Config/SettingText.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/Config/SettingOption.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/Util/EventEmitter.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/Util/BrowserUtils.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/Config/Config.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/AFK/AFKController.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/DataChannel/DataChannelController.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/PeerConnectionController/InboundRTPStats.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/PeerConnectionController/DataChannelStats.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/PeerConnectionController/CandidateStat.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/PeerConnectionController/OutBoundRTPStats.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/PeerConnectionController/SessionStats.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/PeerConnectionController/StreamStats.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/PeerConnectionController/AggregatedStats.js","../node_modules/sdp/sdp.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/Util/RTCUtils.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/PeerConnectionController/LatencyCalculator.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/PeerConnectionController/PeerConnectionController.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/DataChannel/InitialSettings.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/DataChannel/LatencyTestResults.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/Util/FileUtil.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/Inputs/SpecialKeyCodes.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/Inputs/KeyCodes.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/Inputs/KeyboardController.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/Inputs/MouseButtons.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/Inputs/MouseController.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/Inputs/MouseControllerLocked.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/Inputs/MouseControllerHovering.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/Inputs/TouchController.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/Inputs/TouchControllerFake.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/Inputs/GamepadTypes.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/Inputs/GamepadController.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/Inputs/InputClassesFactory.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/VideoPlayer/VideoPlayer.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/UeInstanceMessage/StreamMessageController.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/UeInstanceMessage/ResponseController.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/UeInstanceMessage/SendMessageController.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/UeInstanceMessage/ToStreamerMessagesController.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/DataChannel/DataChannelSender.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/Util/InputCoordTranslator.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/Util/IURLSearchParams.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/WebRtcPlayer/WebRtcPlayerController.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/Inputs/XRGamepadController.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/WebXR/WebXRController.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/DataChannel/DataChannelLatencyTestResults.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/DataChannel/DataChannelLatencyTestController.js","../node_modules/@epicgames-ps/lib-pixelstreamingfrontend-ue5.5/dist/esm/PixelStreaming/PixelStreaming.js","../hj-gis-sdk/index.ts","../node_modules/lil-gui/dist/lil-gui.esm.js","../src/common.ts"],"sourcesContent":["// Copyright Epic Games, Inc. All Rights Reserved.\n// To match NodeJS' EventEmitter syntax without downstream code changes we need to use `any`.\n// This means we need to disable linting `any` checks on this file.\n//\n/* eslint-disable @typescript-eslint/no-unsafe-argument */\nclass PixelStreamingEventListener {\n constructor(callback) {\n this._args = [];\n this._callback = callback;\n }\n handleEvent(_evt) {\n this._callback(...this._args);\n // Reset storage of args.\n this._args = [];\n }\n setArgs(...args) {\n this._args = args;\n }\n}\n/**\n * A feature-limited, but _mostly_ drop-in replacement for Node's EventEmitter type that is implemented using EventTarget.\n *\n * For those unfamiliar with Node's EventEmitter, here is some info from the official docs:\n *\n * [In NodeJS] all objects that emit events are instances of the `EventEmitter` class. These\n * objects expose an `eventEmitter.on()` function that allows one or more\n * functions to be attached to named events emitted by the object. Typically,\n * event names are camel-cased strings but any valid JavaScript property key\n * can be used.\n *\n * When the `EventEmitter` object emits an event, all of the functions attached\n * to that specific event are called _synchronously_. Any values returned by the\n * called listeners are _ignored_ and discarded.\n *\n * The following example shows a simple `EventEmitter` instance with a single\n * listener. The `eventEmitter.on()` method is used to register listeners, while\n * the `eventEmitter.emit()` method is used to trigger the event.\n *\n * ```js\n * import { EventEmitter } from 'node:events';\n *\n * class MyEmitter extends EventEmitter {}\n *\n * const myEmitter = new MyEmitter();\n * myEmitter.on('event', () => {\n * console.log('an event occurred!');\n * });\n * myEmitter.emit('event');\n * ```\n */\nexport class EventEmitter extends EventTarget {\n constructor() {\n super();\n this._eventListeners = new Map();\n }\n removeListenerInternal(eventName, listener) {\n if (this._eventListeners.has(eventName)) {\n const listeners = this._eventListeners.get(eventName);\n if (listeners === undefined) {\n return this;\n }\n for (let i = 0; i < listeners.length; ++i) {\n const eventPair = listeners[i];\n if (eventPair.callback === listener) {\n // Remove from event target\n super.removeEventListener(eventName, eventPair.eventListenerWrapper);\n // Remove from our internal map\n listeners.splice(i, 1);\n break;\n }\n }\n }\n return this;\n }\n /**\n * Alias for `emitter.on(eventName, listener)`.\n */\n addListener(eventName, listener) {\n return this.on(eventName, listener);\n }\n /**\n * Adds the `listener` function to the end of the listeners array for the event\n * named `eventName`.\n *\n * ```js\n * server.on('connection', (stream) => {\n * console.log('someone connected!');\n * });\n * ```\n *\n * Returns a reference to the `EventEmitter`, so that calls can be chained.\n *\n * @param eventName - The name of the event.\n * @param listener - The callback function\n */\n on(eventName, listener) {\n var _a;\n // Wrap our normal JS function in a event listener interface\n // so we can use it with event target.\n const eventListenerWrapper = new PixelStreamingEventListener(listener);\n super.addEventListener(eventName, eventListenerWrapper);\n // Store the event listener/function pair for later removal.\n if (!this._eventListeners.has(eventName)) {\n this._eventListeners.set(eventName, new Array());\n }\n (_a = this._eventListeners\n .get(eventName)) === null || _a === void 0 ? void 0 : _a.push({ callback: listener, eventListenerWrapper: eventListenerWrapper });\n return this;\n }\n /**\n * Adds a **one-time** `listener` function for the event named `eventName`. The\n * next time `eventName` is triggered, this listener is removed and then invoked.\n *\n * ```js\n * server.once('connection', (stream) => {\n * console.log('Ah, we have our first user!');\n * });\n * ```\n *\n * Returns a reference to the `EventEmitter`, so that calls can be chained.\n * @param eventName - The name of the event.\n * @param listener - The callback function\n */\n once(eventName, listener) {\n var _a;\n // Pass options so this event callback is only called once\n const eventListenerOpts = { once: true };\n // Wrap our normal JS function in a event listener interface\n // so we can use it with event target and remove it from event target when this function completes.\n const eventListenerWrapper = new PixelStreamingEventListener((...args) => {\n listener(args);\n this.removeListenerInternal(eventName, listener);\n });\n super.addEventListener(eventName, eventListenerWrapper, eventListenerOpts);\n // Store the event listener/function pair for later removal.\n if (!this._eventListeners.has(eventName)) {\n this._eventListeners.set(eventName, new Array());\n }\n (_a = this._eventListeners\n .get(eventName)) === null || _a === void 0 ? void 0 : _a.push({ callback: listener, eventListenerWrapper: eventListenerWrapper });\n return this;\n }\n /**\n * Removes the specified `listener` from this EventEmitter.\n *\n * ```js\n * const callback = (stream) => {\n * console.log('someone connected!');\n * };\n * server.on('connection', callback);\n * // ...\n * server.removeListener('connection', callback);\n * ```\n * Returns a reference to the `EventEmitter`, so that calls can be chained.\n */\n removeListener(eventName, listener) {\n this.removeListenerInternal(eventName, listener);\n return this;\n }\n /**\n * Alias for `emitter.removeListener()`.\n */\n off(eventName, listener) {\n return this.removeListener(eventName, listener);\n }\n /**\n * Removes all listeners, or those of the specified `eventName`.\n * Returns a reference to the `EventEmitter`, so that calls can be chained.\n */\n removeAllListeners(eventName) {\n if (this._eventListeners.has(eventName)) {\n const listeners = this._eventListeners.get(eventName);\n if (listeners === undefined) {\n return this;\n }\n // Remove each event listener from the event target\n for (const listenerPair of listeners) {\n this.removeEventListener(eventName, listenerPair.eventListenerWrapper);\n }\n // Remove all event listeners mapped to this event from our internal map\n this._eventListeners.delete(eventName);\n }\n return this;\n }\n /**\n * Synchronously calls each of the listeners registered for the event named `eventName`, in the order they were registered, passing the supplied arguments\n * to each.\n *\n * Returns `true` if the event had listeners, `false` otherwise.\n *\n * ```js\n * import { EventEmitter } from 'node:events';\n * const myEmitter = new EventEmitter();\n *\n * // First listener\n * myEmitter.on('event', function firstListener() {\n * console.log('Helloooo! first listener');\n * });\n * // Second listener\n * myEmitter.on('event', function secondListener(arg1, arg2) {\n * console.log(`event with parameters ${arg1}, ${arg2} in second listener`);\n * });\n * // Third listener\n * myEmitter.on('event', function thirdListener(...args) {\n * const parameters = args.join(', ');\n * console.log(`event with parameters ${parameters} in third listener`);\n * });\n *\n * console.log(myEmitter.listeners('event'));\n *\n * myEmitter.emit('event', 1, 2, 3, 4, 5);\n *\n * // Prints:\n * // [\n * // [Function: firstListener],\n * // [Function: secondListener],\n * // [Function: thirdListener]\n * // ]\n * // Helloooo! first listener\n * // event with parameters 1, 2 in second listener\n * // event with parameters 1, 2, 3, 4, 5 in third listener\n * ```\n */\n emit(eventName, ...args) {\n if (this._eventListeners.has(eventName)) {\n const listeners = this._eventListeners.get(eventName);\n if (listeners === undefined) {\n return false;\n }\n // Ensure each of our listeners have the args the callback injected\n for (const listenerPair of listeners) {\n listenerPair.eventListenerWrapper.setArgs(...args);\n }\n // Fire off the actual event\n super.dispatchEvent(new Event(eventName));\n return true;\n }\n return false;\n }\n}\n//# sourceMappingURL=EventEmitter.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport { Logger } from '../Logger/Logger';\nimport { EventEmitter } from '../Event/EventEmitter';\n/**\n * The controller for the WebSocket and all associated methods\n */\nexport class WebSocketTransport extends EventEmitter {\n /**\n * Constructs a new WebSocketTransport for browser contexts.\n * @param protocols - An optional string or list of strings to pass to the new websocket protocols param\n */\n constructor(protocols) {\n super();\n this.WS_OPEN_STATE = 1;\n this.protocols = protocols;\n }\n /**\n * Sends a message over the websocket.\n * @param msg - The message to send.\n */\n sendMessage(msg) {\n if (this.webSocket) {\n this.webSocket.send(msg);\n }\n }\n /**\n * Connect to the signaling server\n * @param connectionURL - The Address of the signaling server\n * @returns If there is a connection\n */\n connect(connectionURL) {\n Logger.Info(connectionURL);\n try {\n this.webSocket = new WebSocket(connectionURL, this.protocols);\n this.webSocket.onopen = (_) => this.handleOnOpen();\n this.webSocket.onerror = (_) => this.handleOnError();\n this.webSocket.onclose = (event) => this.handleOnClose(event);\n this.webSocket.onmessage = (event) => this.handleOnMessage(event);\n this.webSocket.onmessagebinary = (event) => this.handleOnMessageBinary(event);\n return true;\n }\n catch (error) {\n Logger.Error(error);\n return false;\n }\n }\n /**\n * Disconnect this transport.\n * @param code - An optional disconnect code.\n * @param reason - A descriptive string for the disconnect reason.\n */\n disconnect(code, reason) {\n if (this.webSocket) {\n this.webSocket.close(code, reason);\n }\n }\n /**\n * Should return true when the transport is connected and ready to send/receive messages.\n * @returns True if the transport is connected.\n */\n isConnected() {\n return !!this.webSocket && this.webSocket.readyState != WebSocket.CLOSED;\n }\n /**\n * Handles what happens when a message is received in binary form\n * @param event - Message Received\n */\n handleOnMessageBinary(event) {\n // if the event is empty return\n if (!event || !event.data) {\n return;\n }\n // handle the binary and then handle the message\n event.data\n .text()\n .then((messageString) => {\n // build a new message\n const constructedMessage = new MessageEvent('messageFromBinary', {\n data: messageString\n });\n // send the new stringified event back into `onmessage`\n this.handleOnMessage(constructedMessage);\n })\n .catch((error) => {\n Logger.Error(`Failed to parse binary blob from websocket, reason: ${error.message}`);\n });\n }\n /**\n * Handles what happens when a message is received\n * @param event - Message Received\n */\n handleOnMessage(event) {\n // Check if websocket message is binary, if so, stringify it.\n if (event.data && event.data instanceof Blob) {\n this.handleOnMessageBinary(event);\n return;\n }\n if (this.onMessage) {\n this.onMessage(event.data);\n }\n }\n /**\n * Handles when the Websocket is opened\n */\n handleOnOpen() {\n Logger.Info('Connected to the signalling server via WebSocket');\n this.emit('open');\n }\n /**\n * Handles when there is an error on the websocket\n */\n handleOnError() {\n //Logger.Error(Logger.GetStackTrace(), 'WebSocket error');\n this.emit('error');\n }\n /**\n * Handles when the Websocket is closed\n * @param event - Close Event\n */\n handleOnClose(event) {\n Logger.Info('Disconnected to the signalling server via WebSocket: ' +\n JSON.stringify(event.code) +\n ' - ' +\n event.reason);\n this.emit('close', event);\n }\n}\n//# sourceMappingURL=WebSocketTransport.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport { EventEmitter } from '../Event/EventEmitter';\nimport { Logger } from '../Logger/Logger';\n/**\n * Signalling protocol for handling messages from the signalling server.\n *\n * Listen on this emitter for messages. Message type is the name of the event to listen for.\n * Example:\n * signallingProtocol.on('config', (message: Messages.config) =\\> console.log(`Got a config message: ${message}`)));\n *\n * The transport in this class will also emit on message events.\n *\n * Events emitted on transport:\n * message:\n * Emitted any time a message is received by the transport. Listen on this if\n * you wish to capture all messages, rather than specific messages on\n * 'messageHandlers'.\n *\n * out:\n * Emitted when sending a message out on the transport. Similar to 'message' but\n * only for when messages are sent from this endpoint. Useful for debugging.\n */\nexport class SignallingProtocol extends EventEmitter {\n static get SIGNALLING_VERSION() {\n return '1.3.0';\n }\n constructor(transport) {\n super();\n this.transport = transport;\n transport.onMessage = (msg) => {\n let parsedMessage;\n try {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const parsedData = JSON.parse(msg);\n Logger.Debug('Protocol received => \\n' + JSON.stringify(parsedData, undefined, 4));\n parsedMessage = parsedData;\n }\n catch (e) {\n if (e instanceof Error) {\n Logger.Error(`Error parsing message string ${msg}.\\n${e.message}`);\n }\n else {\n Logger.Error(`Unknown error while parsing message data in handleOnMessage`);\n }\n return;\n }\n // call the handlers\n transport.emit('message', parsedMessage); // emit this for listeners listening to any message\n if (!this.emit(parsedMessage.type, parsedMessage)) {\n // emit this for listeners listening for specific messages\n // no listeners\n this.emit('unhandled', parsedMessage);\n }\n };\n }\n /**\n * Asks the transport to connect to the given URL.\n * @param url - The url to connect to.\n * @returns True if the connection call succeeded.\n */\n connect(url) {\n return this.transport.connect(url);\n }\n /**\n * Asks the transport to disconnect from any connection it might have.\n * @param code - An optional disconnection code.\n * @param reason - An optional descriptive string for the disconnect reason.\n */\n disconnect(code, reason) {\n this.transport.disconnect(code, reason);\n }\n /**\n * Returns true if the transport is connected and ready to send/receive messages.\n * @returns True if the protocol is connected.\n */\n isConnected() {\n return this.transport.isConnected();\n }\n /**\n * Passes a message to the transport to send to the other end.\n * @param msg - The message to send.\n */\n sendMessage(msg) {\n this.transport.sendMessage(JSON.stringify(msg));\n this.transport.emit('out', msg); // emit this for listeners listening to outgoing messages\n Logger.Debug('Protocol sent => \\n' + JSON.stringify(msg, undefined, 4));\n }\n}\n//# sourceMappingURL=SignallingProtocol.js.map","/**\n * Get the type of a JSON value.\n * Distinguishes between array, null and object.\n */\nexport function typeofJsonValue(value) {\n let t = typeof value;\n if (t == \"object\") {\n if (Array.isArray(value))\n return \"array\";\n if (value === null)\n return \"null\";\n }\n return t;\n}\n/**\n * Is this a JSON object (instead of an array or null)?\n */\nexport function isJsonObject(value) {\n return value !== null && typeof value == \"object\" && !Array.isArray(value);\n}\n","// lookup table from base64 character to byte\nlet encTable = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n// lookup table from base64 character *code* to byte because lookup by number is fast\nlet decTable = [];\nfor (let i = 0; i < encTable.length; i++)\n decTable[encTable[i].charCodeAt(0)] = i;\n// support base64url variants\ndecTable[\"-\".charCodeAt(0)] = encTable.indexOf(\"+\");\ndecTable[\"_\".charCodeAt(0)] = encTable.indexOf(\"/\");\n/**\n * Decodes a base64 string to a byte array.\n *\n * - ignores white-space, including line breaks and tabs\n * - allows inner padding (can decode concatenated base64 strings)\n * - does not require padding\n * - understands base64url encoding:\n * \"-\" instead of \"+\",\n * \"_\" instead of \"/\",\n * no padding\n */\nexport function base64decode(base64Str) {\n // estimate byte size, not accounting for inner padding and whitespace\n let es = base64Str.length * 3 / 4;\n // if (es % 3 !== 0)\n // throw new Error('invalid base64 string');\n if (base64Str[base64Str.length - 2] == '=')\n es -= 2;\n else if (base64Str[base64Str.length - 1] == '=')\n es -= 1;\n let bytes = new Uint8Array(es), bytePos = 0, // position in byte array\n groupPos = 0, // position in base64 group\n b, // current byte\n p = 0 // previous byte\n ;\n for (let i = 0; i < base64Str.length; i++) {\n b = decTable[base64Str.charCodeAt(i)];\n if (b === undefined) {\n // noinspection FallThroughInSwitchStatementJS\n switch (base64Str[i]) {\n case '=':\n groupPos = 0; // reset state when padding found\n case '\\n':\n case '\\r':\n case '\\t':\n case ' ':\n continue; // skip white-space, and padding\n default:\n throw Error(`invalid base64 string.`);\n }\n }\n switch (groupPos) {\n case 0:\n p = b;\n groupPos = 1;\n break;\n case 1:\n bytes[bytePos++] = p << 2 | (b & 48) >> 4;\n p = b;\n groupPos = 2;\n break;\n case 2:\n bytes[bytePos++] = (p & 15) << 4 | (b & 60) >> 2;\n p = b;\n groupPos = 3;\n break;\n case 3:\n bytes[bytePos++] = (p & 3) << 6 | b;\n groupPos = 0;\n break;\n }\n }\n if (groupPos == 1)\n throw Error(`invalid base64 string.`);\n return bytes.subarray(0, bytePos);\n}\n/**\n * Encodes a byte array to a base64 string.\n * Adds padding at the end.\n * Does not insert newlines.\n */\nexport function base64encode(bytes) {\n let base64 = '', groupPos = 0, // position in base64 group\n b, // current byte\n p = 0; // carry over from previous byte\n for (let i = 0; i < bytes.length; i++) {\n b = bytes[i];\n switch (groupPos) {\n case 0:\n base64 += encTable[b >> 2];\n p = (b & 3) << 4;\n groupPos = 1;\n break;\n case 1:\n base64 += encTable[p | b >> 4];\n p = (b & 15) << 2;\n groupPos = 2;\n break;\n case 2:\n base64 += encTable[p | b >> 6];\n base64 += encTable[b & 63];\n groupPos = 0;\n break;\n }\n }\n // padding required?\n if (groupPos) {\n base64 += encTable[p];\n base64 += '=';\n if (groupPos == 1)\n base64 += '=';\n }\n return base64;\n}\n","/**\n * This handler implements the default behaviour for unknown fields.\n * When reading data, unknown fields are stored on the message, in a\n * symbol property.\n * When writing data, the symbol property is queried and unknown fields\n * are serialized into the output again.\n */\nexport var UnknownFieldHandler;\n(function (UnknownFieldHandler) {\n /**\n * The symbol used to store unknown fields for a message.\n * The property must conform to `UnknownFieldContainer`.\n */\n UnknownFieldHandler.symbol = Symbol.for(\"protobuf-ts/unknown\");\n /**\n * Store an unknown field during binary read directly on the message.\n * This method is compatible with `BinaryReadOptions.readUnknownField`.\n */\n UnknownFieldHandler.onRead = (typeName, message, fieldNo, wireType, data) => {\n let container = is(message) ? message[UnknownFieldHandler.symbol] : message[UnknownFieldHandler.symbol] = [];\n container.push({ no: fieldNo, wireType, data });\n };\n /**\n * Write unknown fields stored for the message to the writer.\n * This method is compatible with `BinaryWriteOptions.writeUnknownFields`.\n */\n UnknownFieldHandler.onWrite = (typeName, message, writer) => {\n for (let { no, wireType, data } of UnknownFieldHandler.list(message))\n writer.tag(no, wireType).raw(data);\n };\n /**\n * List unknown fields stored for the message.\n * Note that there may be multiples fields with the same number.\n */\n UnknownFieldHandler.list = (message, fieldNo) => {\n if (is(message)) {\n let all = message[UnknownFieldHandler.symbol];\n return fieldNo ? all.filter(uf => uf.no == fieldNo) : all;\n }\n return [];\n };\n /**\n * Returns the last unknown field by field number.\n */\n UnknownFieldHandler.last = (message, fieldNo) => UnknownFieldHandler.list(message, fieldNo).slice(-1)[0];\n const is = (message) => message && Array.isArray(message[UnknownFieldHandler.symbol]);\n})(UnknownFieldHandler || (UnknownFieldHandler = {}));\n/**\n * Merges binary write or read options. Later values override earlier values.\n */\nexport function mergeBinaryOptions(a, b) {\n return Object.assign(Object.assign({}, a), b);\n}\n/**\n * Protobuf binary format wire types.\n *\n * A wire type provides just enough information to find the length of the\n * following value.\n *\n * See https://developers.google.com/protocol-buffers/docs/encoding#structure\n */\nexport var WireType;\n(function (WireType) {\n /**\n * Used for int32, int64, uint32, uint64, sint32, sint64, bool, enum\n */\n WireType[WireType[\"Varint\"] = 0] = \"Varint\";\n /**\n * Used for fixed64, sfixed64, double.\n * Always 8 bytes with little-endian byte order.\n */\n WireType[WireType[\"Bit64\"] = 1] = \"Bit64\";\n /**\n * Used for string, bytes, embedded messages, packed repeated fields\n *\n * Only repeated numeric types (types which use the varint, 32-bit,\n * or 64-bit wire types) can be packed. In proto3, such fields are\n * packed by default.\n */\n WireType[WireType[\"LengthDelimited\"] = 2] = \"LengthDelimited\";\n /**\n * Used for groups\n * @deprecated\n */\n WireType[WireType[\"StartGroup\"] = 3] = \"StartGroup\";\n /**\n * Used for groups\n * @deprecated\n */\n WireType[WireType[\"EndGroup\"] = 4] = \"EndGroup\";\n /**\n * Used for fixed32, sfixed32, float.\n * Always 4 bytes with little-endian byte order.\n */\n WireType[WireType[\"Bit32\"] = 5] = \"Bit32\";\n})(WireType || (WireType = {}));\n","// Copyright 2008 Google Inc. All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Code generated by the Protocol Buffer compiler is owned by the owner\n// of the input file used when generating it. This code is not\n// standalone and requires a support library to be linked with it. This\n// support library is itself covered by the above license.\n/**\n * Read a 64 bit varint as two JS numbers.\n *\n * Returns tuple:\n * [0]: low bits\n * [0]: high bits\n *\n * Copyright 2008 Google Inc. All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/8a71927d74a4ce34efe2d8769fda198f52d20d12/js/experimental/runtime/kernel/buffer_decoder.js#L175\n */\nexport function varint64read() {\n let lowBits = 0;\n let highBits = 0;\n for (let shift = 0; shift < 28; shift += 7) {\n let b = this.buf[this.pos++];\n lowBits |= (b & 0x7F) << shift;\n if ((b & 0x80) == 0) {\n this.assertBounds();\n return [lowBits, highBits];\n }\n }\n let middleByte = this.buf[this.pos++];\n // last four bits of the first 32 bit number\n lowBits |= (middleByte & 0x0F) << 28;\n // 3 upper bits are part of the next 32 bit number\n highBits = (middleByte & 0x70) >> 4;\n if ((middleByte & 0x80) == 0) {\n this.assertBounds();\n return [lowBits, highBits];\n }\n for (let shift = 3; shift <= 31; shift += 7) {\n let b = this.buf[this.pos++];\n highBits |= (b & 0x7F) << shift;\n if ((b & 0x80) == 0) {\n this.assertBounds();\n return [lowBits, highBits];\n }\n }\n throw new Error('invalid varint');\n}\n/**\n * Write a 64 bit varint, given as two JS numbers, to the given bytes array.\n *\n * Copyright 2008 Google Inc. All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/8a71927d74a4ce34efe2d8769fda198f52d20d12/js/experimental/runtime/kernel/writer.js#L344\n */\nexport function varint64write(lo, hi, bytes) {\n for (let i = 0; i < 28; i = i + 7) {\n const shift = lo >>> i;\n const hasNext = !((shift >>> 7) == 0 && hi == 0);\n const byte = (hasNext ? shift | 0x80 : shift) & 0xFF;\n bytes.push(byte);\n if (!hasNext) {\n return;\n }\n }\n const splitBits = ((lo >>> 28) & 0x0F) | ((hi & 0x07) << 4);\n const hasMoreBits = !((hi >> 3) == 0);\n bytes.push((hasMoreBits ? splitBits | 0x80 : splitBits) & 0xFF);\n if (!hasMoreBits) {\n return;\n }\n for (let i = 3; i < 31; i = i + 7) {\n const shift = hi >>> i;\n const hasNext = !((shift >>> 7) == 0);\n const byte = (hasNext ? shift | 0x80 : shift) & 0xFF;\n bytes.push(byte);\n if (!hasNext) {\n return;\n }\n }\n bytes.push((hi >>> 31) & 0x01);\n}\n// constants for binary math\nconst TWO_PWR_32_DBL = (1 << 16) * (1 << 16);\n/**\n * Parse decimal string of 64 bit integer value as two JS numbers.\n *\n * Returns tuple:\n * [0]: minus sign?\n * [1]: low bits\n * [2]: high bits\n *\n * Copyright 2008 Google Inc.\n */\nexport function int64fromString(dec) {\n // Check for minus sign.\n let minus = dec[0] == '-';\n if (minus)\n dec = dec.slice(1);\n // Work 6 decimal digits at a time, acting like we're converting base 1e6\n // digits to binary. This is safe to do with floating point math because\n // Number.isSafeInteger(ALL_32_BITS * 1e6) == true.\n const base = 1e6;\n let lowBits = 0;\n let highBits = 0;\n function add1e6digit(begin, end) {\n // Note: Number('') is 0.\n const digit1e6 = Number(dec.slice(begin, end));\n highBits *= base;\n lowBits = lowBits * base + digit1e6;\n // Carry bits from lowBits to highBits\n if (lowBits >= TWO_PWR_32_DBL) {\n highBits = highBits + ((lowBits / TWO_PWR_32_DBL) | 0);\n lowBits = lowBits % TWO_PWR_32_DBL;\n }\n }\n add1e6digit(-24, -18);\n add1e6digit(-18, -12);\n add1e6digit(-12, -6);\n add1e6digit(-6);\n return [minus, lowBits, highBits];\n}\n/**\n * Format 64 bit integer value (as two JS numbers) to decimal string.\n *\n * Copyright 2008 Google Inc.\n */\nexport function int64toString(bitsLow, bitsHigh) {\n // Skip the expensive conversion if the number is small enough to use the\n // built-in conversions.\n if ((bitsHigh >>> 0) <= 0x1FFFFF) {\n return '' + (TWO_PWR_32_DBL * bitsHigh + (bitsLow >>> 0));\n }\n // What this code is doing is essentially converting the input number from\n // base-2 to base-1e7, which allows us to represent the 64-bit range with\n // only 3 (very large) digits. Those digits are then trivial to convert to\n // a base-10 string.\n // The magic numbers used here are -\n // 2^24 = 16777216 = (1,6777216) in base-1e7.\n // 2^48 = 281474976710656 = (2,8147497,6710656) in base-1e7.\n // Split 32:32 representation into 16:24:24 representation so our\n // intermediate digits don't overflow.\n let low = bitsLow & 0xFFFFFF;\n let mid = (((bitsLow >>> 24) | (bitsHigh << 8)) >>> 0) & 0xFFFFFF;\n let high = (bitsHigh >> 16) & 0xFFFF;\n // Assemble our three base-1e7 digits, ignoring carries. The maximum\n // value in a digit at this step is representable as a 48-bit integer, which\n // can be stored in a 64-bit floating point number.\n let digitA = low + (mid * 6777216) + (high * 6710656);\n let digitB = mid + (high * 8147497);\n let digitC = (high * 2);\n // Apply carries from A to B and from B to C.\n let base = 10000000;\n if (digitA >= base) {\n digitB += Math.floor(digitA / base);\n digitA %= base;\n }\n if (digitB >= base) {\n digitC += Math.floor(digitB / base);\n digitB %= base;\n }\n // Convert base-1e7 digits to base-10, with optional leading zeroes.\n function decimalFrom1e7(digit1e7, needLeadingZeros) {\n let partial = digit1e7 ? String(digit1e7) : '';\n if (needLeadingZeros) {\n return '0000000'.slice(partial.length) + partial;\n }\n return partial;\n }\n return decimalFrom1e7(digitC, /*needLeadingZeros=*/ 0) +\n decimalFrom1e7(digitB, /*needLeadingZeros=*/ digitC) +\n // If the final 1e7 digit didn't need leading zeros, we would have\n // returned via the trivial code path at the top.\n decimalFrom1e7(digitA, /*needLeadingZeros=*/ 1);\n}\n/**\n * Write a 32 bit varint, signed or unsigned. Same as `varint64write(0, value, bytes)`\n *\n * Copyright 2008 Google Inc. All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/1b18833f4f2a2f681f4e4a25cdf3b0a43115ec26/js/binary/encoder.js#L144\n */\nexport function varint32write(value, bytes) {\n if (value >= 0) {\n // write value as varint 32\n while (value > 0x7f) {\n bytes.push((value & 0x7f) | 0x80);\n value = value >>> 7;\n }\n bytes.push(value);\n }\n else {\n for (let i = 0; i < 9; i++) {\n bytes.push(value & 127 | 128);\n value = value >> 7;\n }\n bytes.push(1);\n }\n}\n/**\n * Read an unsigned 32 bit varint.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/8a71927d74a4ce34efe2d8769fda198f52d20d12/js/experimental/runtime/kernel/buffer_decoder.js#L220\n */\nexport function varint32read() {\n let b = this.buf[this.pos++];\n let result = b & 0x7F;\n if ((b & 0x80) == 0) {\n this.assertBounds();\n return result;\n }\n b = this.buf[this.pos++];\n result |= (b & 0x7F) << 7;\n if ((b & 0x80) == 0) {\n this.assertBounds();\n return result;\n }\n b = this.buf[this.pos++];\n result |= (b & 0x7F) << 14;\n if ((b & 0x80) == 0) {\n this.assertBounds();\n return result;\n }\n b = this.buf[this.pos++];\n result |= (b & 0x7F) << 21;\n if ((b & 0x80) == 0) {\n this.assertBounds();\n return result;\n }\n // Extract only last 4 bits\n b = this.buf[this.pos++];\n result |= (b & 0x0F) << 28;\n for (let readBytes = 5; ((b & 0x80) !== 0) && readBytes < 10; readBytes++)\n b = this.buf[this.pos++];\n if ((b & 0x80) != 0)\n throw new Error('invalid varint');\n this.assertBounds();\n // Result can have 32 bits, convert it to unsigned\n return result >>> 0;\n}\n","import { int64fromString, int64toString } from \"./goog-varint\";\nlet BI;\nexport function detectBi() {\n const dv = new DataView(new ArrayBuffer(8));\n const ok = globalThis.BigInt !== undefined\n && typeof dv.getBigInt64 === \"function\"\n && typeof dv.getBigUint64 === \"function\"\n && typeof dv.setBigInt64 === \"function\"\n && typeof dv.setBigUint64 === \"function\";\n BI = ok ? {\n MIN: BigInt(\"-9223372036854775808\"),\n MAX: BigInt(\"9223372036854775807\"),\n UMIN: BigInt(\"0\"),\n UMAX: BigInt(\"18446744073709551615\"),\n C: BigInt,\n V: dv,\n } : undefined;\n}\ndetectBi();\nfunction assertBi(bi) {\n if (!bi)\n throw new Error(\"BigInt unavailable, see https://github.com/timostamm/protobuf-ts/blob/v1.0.8/MANUAL.md#bigint-support\");\n}\n// used to validate from(string) input (when bigint is unavailable)\nconst RE_DECIMAL_STR = /^-?[0-9]+$/;\n// constants for binary math\nconst TWO_PWR_32_DBL = 0x100000000;\nconst HALF_2_PWR_32 = 0x080000000;\n// base class for PbLong and PbULong provides shared code\nclass SharedPbLong {\n /**\n * Create a new instance with the given bits.\n */\n constructor(lo, hi) {\n this.lo = lo | 0;\n this.hi = hi | 0;\n }\n /**\n * Is this instance equal to 0?\n */\n isZero() {\n return this.lo == 0 && this.hi == 0;\n }\n /**\n * Convert to a native number.\n */\n toNumber() {\n let result = this.hi * TWO_PWR_32_DBL + (this.lo >>> 0);\n if (!Number.isSafeInteger(result))\n throw new Error(\"cannot convert to safe number\");\n return result;\n }\n}\n/**\n * 64-bit unsigned integer as two 32-bit values.\n * Converts between `string`, `number` and `bigint` representations.\n */\nexport class PbULong extends SharedPbLong {\n /**\n * Create instance from a `string`, `number` or `bigint`.\n */\n static from(value) {\n if (BI)\n // noinspection FallThroughInSwitchStatementJS\n switch (typeof value) {\n case \"string\":\n if (value == \"0\")\n return this.ZERO;\n if (value == \"\")\n throw new Error('string is no integer');\n value = BI.C(value);\n case \"number\":\n if (value === 0)\n return this.ZERO;\n value = BI.C(value);\n case \"bigint\":\n if (!value)\n return this.ZERO;\n if (value < BI.UMIN)\n throw new Error('signed value for ulong');\n if (value > BI.UMAX)\n throw new Error('ulong too large');\n BI.V.setBigUint64(0, value, true);\n return new PbULong(BI.V.getInt32(0, true), BI.V.getInt32(4, true));\n }\n else\n switch (typeof value) {\n case \"string\":\n if (value == \"0\")\n return this.ZERO;\n value = value.trim();\n if (!RE_DECIMAL_STR.test(value))\n throw new Error('string is no integer');\n let [minus, lo, hi] = int64fromString(value);\n if (minus)\n throw new Error('signed value for ulong');\n return new PbULong(lo, hi);\n case \"number\":\n if (value == 0)\n return this.ZERO;\n if (!Number.isSafeInteger(value))\n throw new Error('number is no integer');\n if (value < 0)\n throw new Error('signed value for ulong');\n return new PbULong(value, value / TWO_PWR_32_DBL);\n }\n throw new Error('unknown value ' + typeof value);\n }\n /**\n * Convert to decimal string.\n */\n toString() {\n return BI ? this.toBigInt().toString() : int64toString(this.lo, this.hi);\n }\n /**\n * Convert to native bigint.\n */\n toBigInt() {\n assertBi(BI);\n BI.V.setInt32(0, this.lo, true);\n BI.V.setInt32(4, this.hi, true);\n return BI.V.getBigUint64(0, true);\n }\n}\n/**\n * ulong 0 singleton.\n */\nPbULong.ZERO = new PbULong(0, 0);\n/**\n * 64-bit signed integer as two 32-bit values.\n * Converts between `string`, `number` and `bigint` representations.\n */\nexport class PbLong extends SharedPbLong {\n /**\n * Create instance from a `string`, `number` or `bigint`.\n */\n static from(value) {\n if (BI)\n // noinspection FallThroughInSwitchStatementJS\n switch (typeof value) {\n case \"string\":\n if (value == \"0\")\n return this.ZERO;\n if (value == \"\")\n throw new Error('string is no integer');\n value = BI.C(value);\n case \"number\":\n if (value === 0)\n return this.ZERO;\n value = BI.C(value);\n case \"bigint\":\n if (!value)\n return this.ZERO;\n if (value < BI.MIN)\n throw new Error('signed long too small');\n if (value > BI.MAX)\n throw new Error('signed long too large');\n BI.V.setBigInt64(0, value, true);\n return new PbLong(BI.V.getInt32(0, true), BI.V.getInt32(4, true));\n }\n else\n switch (typeof value) {\n case \"string\":\n if (value == \"0\")\n return this.ZERO;\n value = value.trim();\n if (!RE_DECIMAL_STR.test(value))\n throw new Error('string is no integer');\n let [minus, lo, hi] = int64fromString(value);\n if (minus) {\n if (hi > HALF_2_PWR_32 || (hi == HALF_2_PWR_32 && lo != 0))\n throw new Error('signed long too small');\n }\n else if (hi >= HALF_2_PWR_32)\n throw new Error('signed long too large');\n let pbl = new PbLong(lo, hi);\n return minus ? pbl.negate() : pbl;\n case \"number\":\n if (value == 0)\n return this.ZERO;\n if (!Number.isSafeInteger(value))\n throw new Error('number is no integer');\n return value > 0\n ? new PbLong(value, value / TWO_PWR_32_DBL)\n : new PbLong(-value, -value / TWO_PWR_32_DBL).negate();\n }\n throw new Error('unknown value ' + typeof value);\n }\n /**\n * Do we have a minus sign?\n */\n isNegative() {\n return (this.hi & HALF_2_PWR_32) !== 0;\n }\n /**\n * Negate two's complement.\n * Invert all the bits and add one to the result.\n */\n negate() {\n let hi = ~this.hi, lo = this.lo;\n if (lo)\n lo = ~lo + 1;\n else\n hi += 1;\n return new PbLong(lo, hi);\n }\n /**\n * Convert to decimal string.\n */\n toString() {\n if (BI)\n return this.toBigInt().toString();\n if (this.isNegative()) {\n let n = this.negate();\n return '-' + int64toString(n.lo, n.hi);\n }\n return int64toString(this.lo, this.hi);\n }\n /**\n * Convert to native bigint.\n */\n toBigInt() {\n assertBi(BI);\n BI.V.setInt32(0, this.lo, true);\n BI.V.setInt32(4, this.hi, true);\n return BI.V.getBigInt64(0, true);\n }\n}\n/**\n * long 0 singleton.\n */\nPbLong.ZERO = new PbLong(0, 0);\n","import { WireType } from \"./binary-format-contract\";\nimport { PbLong, PbULong } from \"./pb-long\";\nimport { varint32read, varint64read } from \"./goog-varint\";\nconst defaultsRead = {\n readUnknownField: true,\n readerFactory: bytes => new BinaryReader(bytes),\n};\n/**\n * Make options for reading binary data form partial options.\n */\nexport function binaryReadOptions(options) {\n return options ? Object.assign(Object.assign({}, defaultsRead), options) : defaultsRead;\n}\nexport class BinaryReader {\n constructor(buf, textDecoder) {\n this.varint64 = varint64read; // dirty cast for `this`\n /**\n * Read a `uint32` field, an unsigned 32 bit varint.\n */\n this.uint32 = varint32read; // dirty cast for `this` and access to protected `buf`\n this.buf = buf;\n this.len = buf.length;\n this.pos = 0;\n this.view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n this.textDecoder = textDecoder !== null && textDecoder !== void 0 ? textDecoder : new TextDecoder(\"utf-8\", {\n fatal: true,\n ignoreBOM: true,\n });\n }\n /**\n * Reads a tag - field number and wire type.\n */\n tag() {\n let tag = this.uint32(), fieldNo = tag >>> 3, wireType = tag & 7;\n if (fieldNo <= 0 || wireType < 0 || wireType > 5)\n throw new Error(\"illegal tag: field no \" + fieldNo + \" wire type \" + wireType);\n return [fieldNo, wireType];\n }\n /**\n * Skip one element on the wire and return the skipped data.\n * Supports WireType.StartGroup since v2.0.0-alpha.23.\n */\n skip(wireType) {\n let start = this.pos;\n // noinspection FallThroughInSwitchStatementJS\n switch (wireType) {\n case WireType.Varint:\n while (this.buf[this.pos++] & 0x80) {\n // ignore\n }\n break;\n case WireType.Bit64:\n this.pos += 4;\n case WireType.Bit32:\n this.pos += 4;\n break;\n case WireType.LengthDelimited:\n let len = this.uint32();\n this.pos += len;\n break;\n case WireType.StartGroup:\n // From descriptor.proto: Group type is deprecated, not supported in proto3.\n // But we must still be able to parse and treat as unknown.\n let t;\n while ((t = this.tag()[1]) !== WireType.EndGroup) {\n this.skip(t);\n }\n break;\n default:\n throw new Error(\"cant skip wire type \" + wireType);\n }\n this.assertBounds();\n return this.buf.subarray(start, this.pos);\n }\n /**\n * Throws error if position in byte array is out of range.\n */\n assertBounds() {\n if (this.pos > this.len)\n throw new RangeError(\"premature EOF\");\n }\n /**\n * Read a `int32` field, a signed 32 bit varint.\n */\n int32() {\n return this.uint32() | 0;\n }\n /**\n * Read a `sint32` field, a signed, zigzag-encoded 32-bit varint.\n */\n sint32() {\n let zze = this.uint32();\n // decode zigzag\n return (zze >>> 1) ^ -(zze & 1);\n }\n /**\n * Read a `int64` field, a signed 64-bit varint.\n */\n int64() {\n return new PbLong(...this.varint64());\n }\n /**\n * Read a `uint64` field, an unsigned 64-bit varint.\n */\n uint64() {\n return new PbULong(...this.varint64());\n }\n /**\n * Read a `sint64` field, a signed, zig-zag-encoded 64-bit varint.\n */\n sint64() {\n let [lo, hi] = this.varint64();\n // decode zig zag\n let s = -(lo & 1);\n lo = ((lo >>> 1 | (hi & 1) << 31) ^ s);\n hi = (hi >>> 1 ^ s);\n return new PbLong(lo, hi);\n }\n /**\n * Read a `bool` field, a variant.\n */\n bool() {\n let [lo, hi] = this.varint64();\n return lo !== 0 || hi !== 0;\n }\n /**\n * Read a `fixed32` field, an unsigned, fixed-length 32-bit integer.\n */\n fixed32() {\n return this.view.getUint32((this.pos += 4) - 4, true);\n }\n /**\n * Read a `sfixed32` field, a signed, fixed-length 32-bit integer.\n */\n sfixed32() {\n return this.view.getInt32((this.pos += 4) - 4, true);\n }\n /**\n * Read a `fixed64` field, an unsigned, fixed-length 64 bit integer.\n */\n fixed64() {\n return new PbULong(this.sfixed32(), this.sfixed32());\n }\n /**\n * Read a `fixed64` field, a signed, fixed-length 64-bit integer.\n */\n sfixed64() {\n return new PbLong(this.sfixed32(), this.sfixed32());\n }\n /**\n * Read a `float` field, 32-bit floating point number.\n */\n float() {\n return this.view.getFloat32((this.pos += 4) - 4, true);\n }\n /**\n * Read a `double` field, a 64-bit floating point number.\n */\n double() {\n return this.view.getFloat64((this.pos += 8) - 8, true);\n }\n /**\n * Read a `bytes` field, length-delimited arbitrary data.\n */\n bytes() {\n let len = this.uint32();\n let start = this.pos;\n this.pos += len;\n this.assertBounds();\n return this.buf.subarray(start, start + len);\n }\n /**\n * Read a `string` field, length-delimited data converted to UTF-8 text.\n */\n string() {\n return this.textDecoder.decode(this.bytes());\n }\n}\n","/**\n * assert that condition is true or throw error (with message)\n */\nexport function assert(condition, msg) {\n if (!condition) {\n throw new Error(msg);\n }\n}\n/**\n * assert that value cannot exist = type `never`. throw runtime error if it does.\n */\nexport function assertNever(value, msg) {\n throw new Error(msg !== null && msg !== void 0 ? msg : 'Unexpected object: ' + value);\n}\nconst FLOAT32_MAX = 3.4028234663852886e+38, FLOAT32_MIN = -3.4028234663852886e+38, UINT32_MAX = 0xFFFFFFFF, INT32_MAX = 0X7FFFFFFF, INT32_MIN = -0X80000000;\nexport function assertInt32(arg) {\n if (typeof arg !== \"number\")\n throw new Error('invalid int 32: ' + typeof arg);\n if (!Number.isInteger(arg) || arg > INT32_MAX || arg < INT32_MIN)\n throw new Error('invalid int 32: ' + arg);\n}\nexport function assertUInt32(arg) {\n if (typeof arg !== \"number\")\n throw new Error('invalid uint 32: ' + typeof arg);\n if (!Number.isInteger(arg) || arg > UINT32_MAX || arg < 0)\n throw new Error('invalid uint 32: ' + arg);\n}\nexport function assertFloat32(arg) {\n if (typeof arg !== \"number\")\n throw new Error('invalid float 32: ' + typeof arg);\n if (!Number.isFinite(arg))\n return;\n if (arg > FLOAT32_MAX || arg < FLOAT32_MIN)\n throw new Error('invalid float 32: ' + arg);\n}\n","import { PbLong, PbULong } from \"./pb-long\";\nimport { varint32write, varint64write } from \"./goog-varint\";\nimport { assertFloat32, assertInt32, assertUInt32 } from \"./assert\";\nconst defaultsWrite = {\n writeUnknownFields: true,\n writerFactory: () => new BinaryWriter(),\n};\n/**\n * Make options for writing binary data form partial options.\n */\nexport function binaryWriteOptions(options) {\n return options ? Object.assign(Object.assign({}, defaultsWrite), options) : defaultsWrite;\n}\nexport class BinaryWriter {\n constructor(textEncoder) {\n /**\n * Previous fork states.\n */\n this.stack = [];\n this.textEncoder = textEncoder !== null && textEncoder !== void 0 ? textEncoder : new TextEncoder();\n this.chunks = [];\n this.buf = [];\n }\n /**\n * Return all bytes written and reset this writer.\n */\n finish() {\n this.chunks.push(new Uint8Array(this.buf)); // flush the buffer\n let len = 0;\n for (let i = 0; i < this.chunks.length; i++)\n len += this.chunks[i].length;\n let bytes = new Uint8Array(len);\n let offset = 0;\n for (let i = 0; i < this.chunks.length; i++) {\n bytes.set(this.chunks[i], offset);\n offset += this.chunks[i].length;\n }\n this.chunks = [];\n return bytes;\n }\n /**\n * Start a new fork for length-delimited data like a message\n * or a packed repeated field.\n *\n * Must be joined later with `join()`.\n */\n fork() {\n this.stack.push({ chunks: this.chunks, buf: this.buf });\n this.chunks = [];\n this.buf = [];\n return this;\n }\n /**\n * Join the last fork. Write its length and bytes, then\n * return to the previous state.\n */\n join() {\n // get chunk of fork\n let chunk = this.finish();\n // restore previous state\n let prev = this.stack.pop();\n if (!prev)\n throw new Error('invalid state, fork stack empty');\n this.chunks = prev.chunks;\n this.buf = prev.buf;\n // write length of chunk as varint\n this.uint32(chunk.byteLength);\n return this.raw(chunk);\n }\n /**\n * Writes a tag (field number and wire type).\n *\n * Equivalent to `uint32( (fieldNo << 3 | type) >>> 0 )`.\n *\n * Generated code should compute the tag ahead of time and call `uint32()`.\n */\n tag(fieldNo, type) {\n return this.uint32((fieldNo << 3 | type) >>> 0);\n }\n /**\n * Write a chunk of raw bytes.\n */\n raw(chunk) {\n if (this.buf.length) {\n this.chunks.push(new Uint8Array(this.buf));\n this.buf = [];\n }\n this.chunks.push(chunk);\n return this;\n }\n /**\n * Write a `uint32` value, an unsigned 32 bit varint.\n */\n uint32(value) {\n assertUInt32(value);\n // write value as varint 32, inlined for speed\n while (value > 0x7f) {\n this.buf.push((value & 0x7f) | 0x80);\n value = value >>> 7;\n }\n this.buf.push(value);\n return this;\n }\n /**\n * Write a `int32` value, a signed 32 bit varint.\n */\n int32(value) {\n assertInt32(value);\n varint32write(value, this.buf);\n return this;\n }\n /**\n * Write a `bool` value, a variant.\n */\n bool(value) {\n this.buf.push(value ? 1 : 0);\n return this;\n }\n /**\n * Write a `bytes` value, length-delimited arbitrary data.\n */\n bytes(value) {\n this.uint32(value.byteLength); // write length of chunk as varint\n return this.raw(value);\n }\n /**\n * Write a `string` value, length-delimited data converted to UTF-8 text.\n */\n string(value) {\n let chunk = this.textEncoder.encode(value);\n this.uint32(chunk.byteLength); // write length of chunk as varint\n return this.raw(chunk);\n }\n /**\n * Write a `float` value, 32-bit floating point number.\n */\n float(value) {\n assertFloat32(value);\n let chunk = new Uint8Array(4);\n new DataView(chunk.buffer).setFloat32(0, value, true);\n return this.raw(chunk);\n }\n /**\n * Write a `double` value, a 64-bit floating point number.\n */\n double(value) {\n let chunk = new Uint8Array(8);\n new DataView(chunk.buffer).setFloat64(0, value, true);\n return this.raw(chunk);\n }\n /**\n * Write a `fixed32` value, an unsigned, fixed-length 32-bit integer.\n */\n fixed32(value) {\n assertUInt32(value);\n let chunk = new Uint8Array(4);\n new DataView(chunk.buffer).setUint32(0, value, true);\n return this.raw(chunk);\n }\n /**\n * Write a `sfixed32` value, a signed, fixed-length 32-bit integer.\n */\n sfixed32(value) {\n assertInt32(value);\n let chunk = new Uint8Array(4);\n new DataView(chunk.buffer).setInt32(0, value, true);\n return this.raw(chunk);\n }\n /**\n * Write a `sint32` value, a signed, zigzag-encoded 32-bit varint.\n */\n sint32(value) {\n assertInt32(value);\n // zigzag encode\n value = ((value << 1) ^ (value >> 31)) >>> 0;\n varint32write(value, this.buf);\n return this;\n }\n /**\n * Write a `fixed64` value, a signed, fixed-length 64-bit integer.\n */\n sfixed64(value) {\n let chunk = new Uint8Array(8);\n let view = new DataView(chunk.buffer);\n let long = PbLong.from(value);\n view.setInt32(0, long.lo, true);\n view.setInt32(4, long.hi, true);\n return this.raw(chunk);\n }\n /**\n * Write a `fixed64` value, an unsigned, fixed-length 64 bit integer.\n */\n fixed64(value) {\n let chunk = new Uint8Array(8);\n let view = new DataView(chunk.buffer);\n let long = PbULong.from(value);\n view.setInt32(0, long.lo, true);\n view.setInt32(4, long.hi, true);\n return this.raw(chunk);\n }\n /**\n * Write a `int64` value, a signed 64-bit varint.\n */\n int64(value) {\n let long = PbLong.from(value);\n varint64write(long.lo, long.hi, this.buf);\n return this;\n }\n /**\n * Write a `sint64` value, a signed, zig-zag-encoded 64-bit varint.\n */\n sint64(value) {\n let long = PbLong.from(value), \n // zigzag encode\n sign = long.hi >> 31, lo = (long.lo << 1) ^ sign, hi = ((long.hi << 1) | (long.lo >>> 31)) ^ sign;\n varint64write(lo, hi, this.buf);\n return this;\n }\n /**\n * Write a `uint64` value, an unsigned 64-bit varint.\n */\n uint64(value) {\n let long = PbULong.from(value);\n varint64write(long.lo, long.hi, this.buf);\n return this;\n }\n}\n","const defaultsWrite = {\n emitDefaultValues: false,\n enumAsInteger: false,\n useProtoFieldName: false,\n prettySpaces: 0,\n}, defaultsRead = {\n ignoreUnknownFields: false,\n};\n/**\n * Make options for reading JSON data from partial options.\n */\nexport function jsonReadOptions(options) {\n return options ? Object.assign(Object.assign({}, defaultsRead), options) : defaultsRead;\n}\n/**\n * Make options for writing JSON data from partial options.\n */\nexport function jsonWriteOptions(options) {\n return options ? Object.assign(Object.assign({}, defaultsWrite), options) : defaultsWrite;\n}\n/**\n * Merges JSON write or read options. Later values override earlier values. Type registries are merged.\n */\nexport function mergeJsonOptions(a, b) {\n var _a, _b;\n let c = Object.assign(Object.assign({}, a), b);\n c.typeRegistry = [...((_a = a === null || a === void 0 ? void 0 : a.typeRegistry) !== null && _a !== void 0 ? _a : []), ...((_b = b === null || b === void 0 ? void 0 : b.typeRegistry) !== null && _b !== void 0 ? _b : [])];\n return c;\n}\n","/**\n * The symbol used as a key on message objects to store the message type.\n *\n * Note that this is an experimental feature - it is here to stay, but\n * implementation details may change without notice.\n */\nexport const MESSAGE_TYPE = Symbol.for(\"protobuf-ts/message-type\");\n","/**\n * Converts snake_case to lowerCamelCase.\n *\n * Should behave like protoc:\n * https://github.com/protocolbuffers/protobuf/blob/e8ae137c96444ea313485ed1118c5e43b2099cf1/src/google/protobuf/compiler/java/java_helpers.cc#L118\n */\nexport function lowerCamelCase(snakeCase) {\n let capNext = false;\n const sb = [];\n for (let i = 0; i < snakeCase.length; i++) {\n let next = snakeCase.charAt(i);\n if (next == '_') {\n capNext = true;\n }\n else if (/\\d/.test(next)) {\n sb.push(next);\n capNext = true;\n }\n else if (capNext) {\n sb.push(next.toUpperCase());\n capNext = false;\n }\n else if (i == 0) {\n sb.push(next.toLowerCase());\n }\n else {\n sb.push(next);\n }\n }\n return sb.join('');\n}\n","import { lowerCamelCase } from \"./lower-camel-case\";\n/**\n * Scalar value types. This is a subset of field types declared by protobuf\n * enum google.protobuf.FieldDescriptorProto.Type The types GROUP and MESSAGE\n * are omitted, but the numerical values are identical.\n */\nexport var ScalarType;\n(function (ScalarType) {\n // 0 is reserved for errors.\n // Order is weird for historical reasons.\n ScalarType[ScalarType[\"DOUBLE\"] = 1] = \"DOUBLE\";\n ScalarType[ScalarType[\"FLOAT\"] = 2] = \"FLOAT\";\n // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT64 if\n // negative values are likely.\n ScalarType[ScalarType[\"INT64\"] = 3] = \"INT64\";\n ScalarType[ScalarType[\"UINT64\"] = 4] = \"UINT64\";\n // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT32 if\n // negative values are likely.\n ScalarType[ScalarType[\"INT32\"] = 5] = \"INT32\";\n ScalarType[ScalarType[\"FIXED64\"] = 6] = \"FIXED64\";\n ScalarType[ScalarType[\"FIXED32\"] = 7] = \"FIXED32\";\n ScalarType[ScalarType[\"BOOL\"] = 8] = \"BOOL\";\n ScalarType[ScalarType[\"STRING\"] = 9] = \"STRING\";\n // Tag-delimited aggregate.\n // Group type is deprecated and not supported in proto3. However, Proto3\n // implementations should still be able to parse the group wire format and\n // treat group fields as unknown fields.\n // TYPE_GROUP = 10,\n // TYPE_MESSAGE = 11, // Length-delimited aggregate.\n // New in version 2.\n ScalarType[ScalarType[\"BYTES\"] = 12] = \"BYTES\";\n ScalarType[ScalarType[\"UINT32\"] = 13] = \"UINT32\";\n // TYPE_ENUM = 14,\n ScalarType[ScalarType[\"SFIXED32\"] = 15] = \"SFIXED32\";\n ScalarType[ScalarType[\"SFIXED64\"] = 16] = \"SFIXED64\";\n ScalarType[ScalarType[\"SINT32\"] = 17] = \"SINT32\";\n ScalarType[ScalarType[\"SINT64\"] = 18] = \"SINT64\";\n})(ScalarType || (ScalarType = {}));\n/**\n * JavaScript representation of 64 bit integral types. Equivalent to the\n * field option \"jstype\".\n *\n * By default, protobuf-ts represents 64 bit types as `bigint`.\n *\n * You can change the default behaviour by enabling the plugin parameter\n * `long_type_string`, which will represent 64 bit types as `string`.\n *\n * Alternatively, you can change the behaviour for individual fields\n * with the field option \"jstype\":\n *\n * ```protobuf\n * uint64 my_field = 1 [jstype = JS_STRING];\n * uint64 other_field = 2 [jstype = JS_NUMBER];\n * ```\n */\nexport var LongType;\n(function (LongType) {\n /**\n * Use JavaScript `bigint`.\n *\n * Field option `[jstype = JS_NORMAL]`.\n */\n LongType[LongType[\"BIGINT\"] = 0] = \"BIGINT\";\n /**\n * Use JavaScript `string`.\n *\n * Field option `[jstype = JS_STRING]`.\n */\n LongType[LongType[\"STRING\"] = 1] = \"STRING\";\n /**\n * Use JavaScript `number`.\n *\n * Large values will loose precision.\n *\n * Field option `[jstype = JS_NUMBER]`.\n */\n LongType[LongType[\"NUMBER\"] = 2] = \"NUMBER\";\n})(LongType || (LongType = {}));\n/**\n * Protobuf 2.1.0 introduced packed repeated fields.\n * Setting the field option `[packed = true]` enables packing.\n *\n * In proto3, all repeated fields are packed by default.\n * Setting the field option `[packed = false]` disables packing.\n *\n * Packed repeated fields are encoded with a single tag,\n * then a length-delimiter, then the element values.\n *\n * Unpacked repeated fields are encoded with a tag and\n * value for each element.\n *\n * `bytes` and `string` cannot be packed.\n */\nexport var RepeatType;\n(function (RepeatType) {\n /**\n * The field is not repeated.\n */\n RepeatType[RepeatType[\"NO\"] = 0] = \"NO\";\n /**\n * The field is repeated and should be packed.\n * Invalid for `bytes` and `string`, they cannot be packed.\n */\n RepeatType[RepeatType[\"PACKED\"] = 1] = \"PACKED\";\n /**\n * The field is repeated but should not be packed.\n * The only valid repeat type for repeated `bytes` and `string`.\n */\n RepeatType[RepeatType[\"UNPACKED\"] = 2] = \"UNPACKED\";\n})(RepeatType || (RepeatType = {}));\n/**\n * Turns PartialFieldInfo into FieldInfo.\n */\nexport function normalizeFieldInfo(field) {\n var _a, _b, _c, _d;\n field.localName = (_a = field.localName) !== null && _a !== void 0 ? _a : lowerCamelCase(field.name);\n field.jsonName = (_b = field.jsonName) !== null && _b !== void 0 ? _b : lowerCamelCase(field.name);\n field.repeat = (_c = field.repeat) !== null && _c !== void 0 ? _c : RepeatType.NO;\n field.opt = (_d = field.opt) !== null && _d !== void 0 ? _d : (field.repeat ? false : field.oneof ? false : field.kind == \"message\");\n return field;\n}\n/**\n * Read custom field options from a generated message type.\n *\n * @deprecated use readFieldOption()\n */\nexport function readFieldOptions(messageType, fieldName, extensionName, extensionType) {\n var _a;\n const options = (_a = messageType.fields.find((m, i) => m.localName == fieldName || i == fieldName)) === null || _a === void 0 ? void 0 : _a.options;\n return options && options[extensionName] ? extensionType.fromJson(options[extensionName]) : undefined;\n}\nexport function readFieldOption(messageType, fieldName, extensionName, extensionType) {\n var _a;\n const options = (_a = messageType.fields.find((m, i) => m.localName == fieldName || i == fieldName)) === null || _a === void 0 ? void 0 : _a.options;\n if (!options) {\n return undefined;\n }\n const optionVal = options[extensionName];\n if (optionVal === undefined) {\n return optionVal;\n }\n return extensionType ? extensionType.fromJson(optionVal) : optionVal;\n}\nexport function readMessageOption(messageType, extensionName, extensionType) {\n const options = messageType.options;\n const optionVal = options[extensionName];\n if (optionVal === undefined) {\n return optionVal;\n }\n return extensionType ? extensionType.fromJson(optionVal) : optionVal;\n}\n","/**\n * Is the given value a valid oneof group?\n *\n * We represent protobuf `oneof` as algebraic data types (ADT) in generated\n * code. But when working with messages of unknown type, the ADT does not\n * help us.\n *\n * This type guard checks if the given object adheres to the ADT rules, which\n * are as follows:\n *\n * 1) Must be an object.\n *\n * 2) Must have a \"oneofKind\" discriminator property.\n *\n * 3) If \"oneofKind\" is `undefined`, no member field is selected. The object\n * must not have any other properties.\n *\n * 4) If \"oneofKind\" is a `string`, the member field with this name is\n * selected.\n *\n * 5) If a member field is selected, the object must have a second property\n * with this name. The property must not be `undefined`.\n *\n * 6) No extra properties are allowed. The object has either one property\n * (no selection) or two properties (selection).\n *\n */\nexport function isOneofGroup(any) {\n if (typeof any != 'object' || any === null || !any.hasOwnProperty('oneofKind')) {\n return false;\n }\n switch (typeof any.oneofKind) {\n case \"string\":\n if (any[any.oneofKind] === undefined)\n return false;\n return Object.keys(any).length == 2;\n case \"undefined\":\n return Object.keys(any).length == 1;\n default:\n return false;\n }\n}\n/**\n * Returns the value of the given field in a oneof group.\n */\nexport function getOneofValue(oneof, kind) {\n return oneof[kind];\n}\nexport function setOneofValue(oneof, kind, value) {\n if (oneof.oneofKind !== undefined) {\n delete oneof[oneof.oneofKind];\n }\n oneof.oneofKind = kind;\n if (value !== undefined) {\n oneof[kind] = value;\n }\n}\nexport function setUnknownOneofValue(oneof, kind, value) {\n if (oneof.oneofKind !== undefined) {\n delete oneof[oneof.oneofKind];\n }\n oneof.oneofKind = kind;\n if (value !== undefined && kind !== undefined) {\n oneof[kind] = value;\n }\n}\n/**\n * Removes the selected field in a oneof group.\n *\n * Note that the recommended way to modify a oneof group is to set\n * a new object:\n *\n * ```ts\n * message.result = { oneofKind: undefined };\n * ```\n */\nexport function clearOneofValue(oneof) {\n if (oneof.oneofKind !== undefined) {\n delete oneof[oneof.oneofKind];\n }\n oneof.oneofKind = undefined;\n}\n/**\n * Returns the selected value of the given oneof group.\n *\n * Not that the recommended way to access a oneof group is to check\n * the \"oneofKind\" property and let TypeScript narrow down the union\n * type for you:\n *\n * ```ts\n * if (message.result.oneofKind === \"error\") {\n * message.result.error; // string\n * }\n * ```\n *\n * In the rare case you just need the value, and do not care about\n * which protobuf field is selected, you can use this function\n * for convenience.\n */\nexport function getSelectedOneofValue(oneof) {\n if (oneof.oneofKind === undefined) {\n return undefined;\n }\n return oneof[oneof.oneofKind];\n}\n","import { LongType, ScalarType } from \"./reflection-info\";\nimport { isOneofGroup } from \"./oneof\";\n// noinspection JSMethodCanBeStatic\nexport class ReflectionTypeCheck {\n constructor(info) {\n var _a;\n this.fields = (_a = info.fields) !== null && _a !== void 0 ? _a : [];\n }\n prepare() {\n if (this.data)\n return;\n const req = [], known = [], oneofs = [];\n for (let field of this.fields) {\n if (field.oneof) {\n if (!oneofs.includes(field.oneof)) {\n oneofs.push(field.oneof);\n req.push(field.oneof);\n known.push(field.oneof);\n }\n }\n else {\n known.push(field.localName);\n switch (field.kind) {\n case \"scalar\":\n case \"enum\":\n if (!field.opt || field.repeat)\n req.push(field.localName);\n break;\n case \"message\":\n if (field.repeat)\n req.push(field.localName);\n break;\n case \"map\":\n req.push(field.localName);\n break;\n }\n }\n }\n this.data = { req, known, oneofs: Object.values(oneofs) };\n }\n /**\n * Is the argument a valid message as specified by the\n * reflection information?\n *\n * Checks all field types recursively. The `depth`\n * specifies how deep into the structure the check will be.\n *\n * With a depth of 0, only the presence of fields\n * is checked.\n *\n * With a depth of 1 or more, the field types are checked.\n *\n * With a depth of 2 or more, the members of map, repeated\n * and message fields are checked.\n *\n * Message fields will be checked recursively with depth - 1.\n *\n * The number of map entries / repeated values being checked\n * is < depth.\n */\n is(message, depth, allowExcessProperties = false) {\n if (depth < 0)\n return true;\n if (message === null || message === undefined || typeof message != 'object')\n return false;\n this.prepare();\n let keys = Object.keys(message), data = this.data;\n // if a required field is missing in arg, this cannot be a T\n if (keys.length < data.req.length || data.req.some(n => !keys.includes(n)))\n return false;\n if (!allowExcessProperties) {\n // if the arg contains a key we dont know, this is not a literal T\n if (keys.some(k => !data.known.includes(k)))\n return false;\n }\n // \"With a depth of 0, only the presence and absence of fields is checked.\"\n // \"With a depth of 1 or more, the field types are checked.\"\n if (depth < 1) {\n return true;\n }\n // check oneof group\n for (const name of data.oneofs) {\n const group = message[name];\n if (!isOneofGroup(group))\n return false;\n if (group.oneofKind === undefined)\n continue;\n const field = this.fields.find(f => f.localName === group.oneofKind);\n if (!field)\n return false; // we found no field, but have a kind, something is wrong\n if (!this.field(group[group.oneofKind], field, allowExcessProperties, depth))\n return false;\n }\n // check types\n for (const field of this.fields) {\n if (field.oneof !== undefined)\n continue;\n if (!this.field(message[field.localName], field, allowExcessProperties, depth))\n return false;\n }\n return true;\n }\n field(arg, field, allowExcessProperties, depth) {\n let repeated = field.repeat;\n switch (field.kind) {\n case \"scalar\":\n if (arg === undefined)\n return field.opt;\n if (repeated)\n return this.scalars(arg, field.T, depth, field.L);\n return this.scalar(arg, field.T, field.L);\n case \"enum\":\n if (arg === undefined)\n return field.opt;\n if (repeated)\n return this.scalars(arg, ScalarType.INT32, depth);\n return this.scalar(arg, ScalarType.INT32);\n case \"message\":\n if (arg === undefined)\n return true;\n if (repeated)\n return this.messages(arg, field.T(), allowExcessProperties, depth);\n return this.message(arg, field.T(), allowExcessProperties, depth);\n case \"map\":\n if (typeof arg != 'object' || arg === null)\n return false;\n if (depth < 2)\n return true;\n if (!this.mapKeys(arg, field.K, depth))\n return false;\n switch (field.V.kind) {\n case \"scalar\":\n return this.scalars(Object.values(arg), field.V.T, depth, field.V.L);\n case \"enum\":\n return this.scalars(Object.values(arg), ScalarType.INT32, depth);\n case \"message\":\n return this.messages(Object.values(arg), field.V.T(), allowExcessProperties, depth);\n }\n break;\n }\n return true;\n }\n message(arg, type, allowExcessProperties, depth) {\n if (allowExcessProperties) {\n return type.isAssignable(arg, depth);\n }\n return type.is(arg, depth);\n }\n messages(arg, type, allowExcessProperties, depth) {\n if (!Array.isArray(arg))\n return false;\n if (depth < 2)\n return true;\n if (allowExcessProperties) {\n for (let i = 0; i < arg.length && i < depth; i++)\n if (!type.isAssignable(arg[i], depth - 1))\n return false;\n }\n else {\n for (let i = 0; i < arg.length && i < depth; i++)\n if (!type.is(arg[i], depth - 1))\n return false;\n }\n return true;\n }\n scalar(arg, type, longType) {\n let argType = typeof arg;\n switch (type) {\n case ScalarType.UINT64:\n case ScalarType.FIXED64:\n case ScalarType.INT64:\n case ScalarType.SFIXED64:\n case ScalarType.SINT64:\n switch (longType) {\n case LongType.BIGINT:\n return argType == \"bigint\";\n case LongType.NUMBER:\n return argType == \"number\" && !isNaN(arg);\n default:\n return argType == \"string\";\n }\n case ScalarType.BOOL:\n return argType == 'boolean';\n case ScalarType.STRING:\n return argType == 'string';\n case ScalarType.BYTES:\n return arg instanceof Uint8Array;\n case ScalarType.DOUBLE:\n case ScalarType.FLOAT:\n return argType == 'number' && !isNaN(arg);\n default:\n // case ScalarType.UINT32:\n // case ScalarType.FIXED32:\n // case ScalarType.INT32:\n // case ScalarType.SINT32:\n // case ScalarType.SFIXED32:\n return argType == 'number' && Number.isInteger(arg);\n }\n }\n scalars(arg, type, depth, longType) {\n if (!Array.isArray(arg))\n return false;\n if (depth < 2)\n return true;\n if (Array.isArray(arg))\n for (let i = 0; i < arg.length && i < depth; i++)\n if (!this.scalar(arg[i], type, longType))\n return false;\n return true;\n }\n mapKeys(map, type, depth) {\n let keys = Object.keys(map);\n switch (type) {\n case ScalarType.INT32:\n case ScalarType.FIXED32:\n case ScalarType.SFIXED32:\n case ScalarType.SINT32:\n case ScalarType.UINT32:\n return this.scalars(keys.slice(0, depth).map(k => parseInt(k)), type, depth);\n case ScalarType.BOOL:\n return this.scalars(keys.slice(0, depth).map(k => k == 'true' ? true : k == 'false' ? false : k), type, depth);\n default:\n return this.scalars(keys, type, depth, LongType.STRING);\n }\n }\n}\n","import { LongType } from \"./reflection-info\";\n/**\n * Utility method to convert a PbLong or PbUlong to a JavaScript\n * representation during runtime.\n *\n * Works with generated field information, `undefined` is equivalent\n * to `STRING`.\n */\nexport function reflectionLongConvert(long, type) {\n switch (type) {\n case LongType.BIGINT:\n return long.toBigInt();\n case LongType.NUMBER:\n return long.toNumber();\n default:\n // case undefined:\n // case LongType.STRING:\n return long.toString();\n }\n}\n","import { isJsonObject, typeofJsonValue } from \"./json-typings\";\nimport { base64decode } from \"./base64\";\nimport { LongType, ScalarType } from \"./reflection-info\";\nimport { PbLong, PbULong } from \"./pb-long\";\nimport { assert, assertFloat32, assertInt32, assertUInt32 } from \"./assert\";\nimport { reflectionLongConvert } from \"./reflection-long-convert\";\n/**\n * Reads proto3 messages in canonical JSON format using reflection information.\n *\n * https://developers.google.com/protocol-buffers/docs/proto3#json\n */\nexport class ReflectionJsonReader {\n constructor(info) {\n this.info = info;\n }\n prepare() {\n var _a;\n if (this.fMap === undefined) {\n this.fMap = {};\n const fieldsInput = (_a = this.info.fields) !== null && _a !== void 0 ? _a : [];\n for (const field of fieldsInput) {\n this.fMap[field.name] = field;\n this.fMap[field.jsonName] = field;\n this.fMap[field.localName] = field;\n }\n }\n }\n // Cannot parse JSON <type of jsonValue> for <type name>#<fieldName>.\n assert(condition, fieldName, jsonValue) {\n if (!condition) {\n let what = typeofJsonValue(jsonValue);\n if (what == \"number\" || what == \"boolean\")\n what = jsonValue.toString();\n throw new Error(`Cannot parse JSON ${what} for ${this.info.typeName}#${fieldName}`);\n }\n }\n /**\n * Reads a message from canonical JSON format into the target message.\n *\n * Repeated fields are appended. Map entries are added, overwriting\n * existing keys.\n *\n * If a message field is already present, it will be merged with the\n * new data.\n */\n read(input, message, options) {\n this.prepare();\n const oneofsHandled = [];\n for (const [jsonKey, jsonValue] of Object.entries(input)) {\n const field = this.fMap[jsonKey];\n if (!field) {\n if (!options.ignoreUnknownFields)\n throw new Error(`Found unknown field while reading ${this.info.typeName} from JSON format. JSON key: ${jsonKey}`);\n continue;\n }\n const localName = field.localName;\n // handle oneof ADT\n let target; // this will be the target for the field value, whether it is member of a oneof or not\n if (field.oneof) {\n if (jsonValue === null && (field.kind !== 'enum' || field.T()[0] !== 'google.protobuf.NullValue')) {\n continue;\n }\n // since json objects are unordered by specification, it is not possible to take the last of multiple oneofs\n if (oneofsHandled.includes(field.oneof))\n throw new Error(`Multiple members of the oneof group \"${field.oneof}\" of ${this.info.typeName} are present in JSON.`);\n oneofsHandled.push(field.oneof);\n target = message[field.oneof] = {\n oneofKind: localName\n };\n }\n else {\n target = message;\n }\n // we have handled oneof above. we just have read the value into `target`.\n if (field.kind == 'map') {\n if (jsonValue === null) {\n continue;\n }\n // check input\n this.assert(isJsonObject(jsonValue), field.name, jsonValue);\n // our target to put map entries into\n const fieldObj = target[localName];\n // read entries\n for (const [jsonObjKey, jsonObjValue] of Object.entries(jsonValue)) {\n this.assert(jsonObjValue !== null, field.name + \" map value\", null);\n // read value\n let val;\n switch (field.V.kind) {\n case \"message\":\n val = field.V.T().internalJsonRead(jsonObjValue, options);\n break;\n case \"enum\":\n val = this.enum(field.V.T(), jsonObjValue, field.name, options.ignoreUnknownFields);\n if (val === false)\n continue;\n break;\n case \"scalar\":\n val = this.scalar(jsonObjValue, field.V.T, field.V.L, field.name);\n break;\n }\n this.assert(val !== undefined, field.name + \" map value\", jsonObjValue);\n // read key\n let key = jsonObjKey;\n if (field.K == ScalarType.BOOL)\n key = key == \"true\" ? true : key == \"false\" ? false : key;\n key = this.scalar(key, field.K, LongType.STRING, field.name).toString();\n fieldObj[key] = val;\n }\n }\n else if (field.repeat) {\n if (jsonValue === null)\n continue;\n // check input\n this.assert(Array.isArray(jsonValue), field.name, jsonValue);\n // our target to put array entries into\n const fieldArr = target[localName];\n // read array entries\n for (const jsonItem of jsonValue) {\n this.assert(jsonItem !== null, field.name, null);\n let val;\n switch (field.kind) {\n case \"message\":\n val = field.T().internalJsonRead(jsonItem, options);\n break;\n case \"enum\":\n val = this.enum(field.T(), jsonItem, field.name, options.ignoreUnknownFields);\n if (val === false)\n continue;\n break;\n case \"scalar\":\n val = this.scalar(jsonItem, field.T, field.L, field.name);\n break;\n }\n this.assert(val !== undefined, field.name, jsonValue);\n fieldArr.push(val);\n }\n }\n else {\n switch (field.kind) {\n case \"message\":\n if (jsonValue === null && field.T().typeName != 'google.protobuf.Value') {\n this.assert(field.oneof === undefined, field.name + \" (oneof member)\", null);\n continue;\n }\n target[localName] = field.T().internalJsonRead(jsonValue, options, target[localName]);\n break;\n case \"enum\":\n if (jsonValue === null)\n continue;\n let val = this.enum(field.T(), jsonValue, field.name, options.ignoreUnknownFields);\n if (val === false)\n continue;\n target[localName] = val;\n break;\n case \"scalar\":\n if (jsonValue === null)\n continue;\n target[localName] = this.scalar(jsonValue, field.T, field.L, field.name);\n break;\n }\n }\n }\n }\n /**\n * Returns `false` for unrecognized string representations.\n *\n * google.protobuf.NullValue accepts only JSON `null` (or the old `\"NULL_VALUE\"`).\n */\n enum(type, json, fieldName, ignoreUnknownFields) {\n if (type[0] == 'google.protobuf.NullValue')\n assert(json === null || json === \"NULL_VALUE\", `Unable to parse field ${this.info.typeName}#${fieldName}, enum ${type[0]} only accepts null.`);\n if (json === null)\n // we require 0 to be default value for all enums\n return 0;\n switch (typeof json) {\n case \"number\":\n assert(Number.isInteger(json), `Unable to parse field ${this.info.typeName}#${fieldName}, enum can only be integral number, got ${json}.`);\n return json;\n case \"string\":\n let localEnumName = json;\n if (type[2] && json.substring(0, type[2].length) === type[2])\n // lookup without the shared prefix\n localEnumName = json.substring(type[2].length);\n let enumNumber = type[1][localEnumName];\n if (typeof enumNumber === 'undefined' && ignoreUnknownFields) {\n return false;\n }\n assert(typeof enumNumber == \"number\", `Unable to parse field ${this.info.typeName}#${fieldName}, enum ${type[0]} has no value for \"${json}\".`);\n return enumNumber;\n }\n assert(false, `Unable to parse field ${this.info.typeName}#${fieldName}, cannot parse enum value from ${typeof json}\".`);\n }\n scalar(json, type, longType, fieldName) {\n let e;\n try {\n switch (type) {\n // float, double: JSON value will be a number or one of the special string values \"NaN\", \"Infinity\", and \"-Infinity\".\n // Either numbers or strings are accepted. Exponent notation is also accepted.\n case ScalarType.DOUBLE:\n case ScalarType.FLOAT:\n if (json === null)\n return .0;\n if (json === \"NaN\")\n return Number.NaN;\n if (json === \"Infinity\")\n return Number.POSITIVE_INFINITY;\n if (json === \"-Infinity\")\n return Number.NEGATIVE_INFINITY;\n if (json === \"\") {\n e = \"empty string\";\n break;\n }\n if (typeof json == \"string\" && json.trim().length !== json.length) {\n e = \"extra whitespace\";\n break;\n }\n if (typeof json != \"string\" && typeof json != \"number\") {\n break;\n }\n let float = Number(json);\n if (Number.isNaN(float)) {\n e = \"not a number\";\n break;\n }\n if (!Number.isFinite(float)) {\n // infinity and -infinity are handled by string representation above, so this is an error\n e = \"too large or small\";\n break;\n }\n if (type == ScalarType.FLOAT)\n assertFloat32(float);\n return float;\n // int32, fixed32, uint32: JSON value will be a decimal number. Either numbers or strings are accepted.\n case ScalarType.INT32:\n case ScalarType.FIXED32:\n case ScalarType.SFIXED32:\n case ScalarType.SINT32:\n case ScalarType.UINT32:\n if (json === null)\n return 0;\n let int32;\n if (typeof json == \"number\")\n int32 = json;\n else if (json === \"\")\n e = \"empty string\";\n else if (typeof json == \"string\") {\n if (json.trim().length !== json.length)\n e = \"extra whitespace\";\n else\n int32 = Number(json);\n }\n if (int32 === undefined)\n break;\n if (type == ScalarType.UINT32)\n assertUInt32(int32);\n else\n assertInt32(int32);\n return int32;\n // int64, fixed64, uint64: JSON value will be a decimal string. Either numbers or strings are accepted.\n case ScalarType.INT64:\n case ScalarType.SFIXED64:\n case ScalarType.SINT64:\n if (json === null)\n return reflectionLongConvert(PbLong.ZERO, longType);\n if (typeof json != \"number\" && typeof json != \"string\")\n break;\n return reflectionLongConvert(PbLong.from(json), longType);\n case ScalarType.FIXED64:\n case ScalarType.UINT64:\n if (json === null)\n return reflectionLongConvert(PbULong.ZERO, longType);\n if (typeof json != \"number\" && typeof json != \"string\")\n break;\n return reflectionLongConvert(PbULong.from(json), longType);\n // bool:\n case ScalarType.BOOL:\n if (json === null)\n return false;\n if (typeof json !== \"boolean\")\n break;\n return json;\n // string:\n case ScalarType.STRING:\n if (json === null)\n return \"\";\n if (typeof json !== \"string\") {\n e = \"extra whitespace\";\n break;\n }\n try {\n encodeURIComponent(json);\n }\n catch (e) {\n e = \"invalid UTF8\";\n break;\n }\n return json;\n // bytes: JSON value will be the data encoded as a string using standard base64 encoding with paddings.\n // Either standard or URL-safe base64 encoding with/without paddings are accepted.\n case ScalarType.BYTES:\n if (json === null || json === \"\")\n return new Uint8Array(0);\n if (typeof json !== 'string')\n break;\n return base64decode(json);\n }\n }\n catch (error) {\n e = error.message;\n }\n this.assert(false, fieldName + (e ? \" - \" + e : \"\"), json);\n }\n}\n","import { base64encode } from \"./base64\";\nimport { PbLong, PbULong } from \"./pb-long\";\nimport { ScalarType } from \"./reflection-info\";\nimport { assert, assertFloat32, assertInt32, assertUInt32 } from \"./assert\";\n/**\n * Writes proto3 messages in canonical JSON format using reflection\n * information.\n *\n * https://developers.google.com/protocol-buffers/docs/proto3#json\n */\nexport class ReflectionJsonWriter {\n constructor(info) {\n var _a;\n this.fields = (_a = info.fields) !== null && _a !== void 0 ? _a : [];\n }\n /**\n * Converts the message to a JSON object, based on the field descriptors.\n */\n write(message, options) {\n const json = {}, source = message;\n for (const field of this.fields) {\n // field is not part of a oneof, simply write as is\n if (!field.oneof) {\n let jsonValue = this.field(field, source[field.localName], options);\n if (jsonValue !== undefined)\n json[options.useProtoFieldName ? field.name : field.jsonName] = jsonValue;\n continue;\n }\n // field is part of a oneof\n const group = source[field.oneof];\n if (group.oneofKind !== field.localName)\n continue; // not selected, skip\n const opt = field.kind == 'scalar' || field.kind == 'enum'\n ? Object.assign(Object.assign({}, options), { emitDefaultValues: true }) : options;\n let jsonValue = this.field(field, group[field.localName], opt);\n assert(jsonValue !== undefined);\n json[options.useProtoFieldName ? field.name : field.jsonName] = jsonValue;\n }\n return json;\n }\n field(field, value, options) {\n let jsonValue = undefined;\n if (field.kind == 'map') {\n assert(typeof value == \"object\" && value !== null);\n const jsonObj = {};\n switch (field.V.kind) {\n case \"scalar\":\n for (const [entryKey, entryValue] of Object.entries(value)) {\n const val = this.scalar(field.V.T, entryValue, field.name, false, true);\n assert(val !== undefined);\n jsonObj[entryKey.toString()] = val; // JSON standard allows only (double quoted) string as property key\n }\n break;\n case \"message\":\n const messageType = field.V.T();\n for (const [entryKey, entryValue] of Object.entries(value)) {\n const val = this.message(messageType, entryValue, field.name, options);\n assert(val !== undefined);\n jsonObj[entryKey.toString()] = val; // JSON standard allows only (double quoted) string as property key\n }\n break;\n case \"enum\":\n const enumInfo = field.V.T();\n for (const [entryKey, entryValue] of Object.entries(value)) {\n assert(entryValue === undefined || typeof entryValue == 'number');\n const val = this.enum(enumInfo, entryValue, field.name, false, true, options.enumAsInteger);\n assert(val !== undefined);\n jsonObj[entryKey.toString()] = val; // JSON standard allows only (double quoted) string as property key\n }\n break;\n }\n if (options.emitDefaultValues || Object.keys(jsonObj).length > 0)\n jsonValue = jsonObj;\n }\n else if (field.repeat) {\n assert(Array.isArray(value));\n const jsonArr = [];\n switch (field.kind) {\n case \"scalar\":\n for (let i = 0; i < value.length; i++) {\n const val = this.scalar(field.T, value[i], field.name, field.opt, true);\n assert(val !== undefined);\n jsonArr.push(val);\n }\n break;\n case \"enum\":\n const enumInfo = field.T();\n for (let i = 0; i < value.length; i++) {\n assert(value[i] === undefined || typeof value[i] == 'number');\n const val = this.enum(enumInfo, value[i], field.name, field.opt, true, options.enumAsInteger);\n assert(val !== undefined);\n jsonArr.push(val);\n }\n break;\n case \"message\":\n const messageType = field.T();\n for (let i = 0; i < value.length; i++) {\n const val = this.message(messageType, value[i], field.name, options);\n assert(val !== undefined);\n jsonArr.push(val);\n }\n break;\n }\n // add converted array to json output\n if (options.emitDefaultValues || jsonArr.length > 0 || options.emitDefaultValues)\n jsonValue = jsonArr;\n }\n else {\n switch (field.kind) {\n case \"scalar\":\n jsonValue = this.scalar(field.T, value, field.name, field.opt, options.emitDefaultValues);\n break;\n case \"enum\":\n jsonValue = this.enum(field.T(), value, field.name, field.opt, options.emitDefaultValues, options.enumAsInteger);\n break;\n case \"message\":\n jsonValue = this.message(field.T(), value, field.name, options);\n break;\n }\n }\n return jsonValue;\n }\n /**\n * Returns `null` as the default for google.protobuf.NullValue.\n */\n enum(type, value, fieldName, optional, emitDefaultValues, enumAsInteger) {\n if (type[0] == 'google.protobuf.NullValue')\n return !emitDefaultValues && !optional ? undefined : null;\n if (value === undefined) {\n assert(optional);\n return undefined;\n }\n if (value === 0 && !emitDefaultValues && !optional)\n // we require 0 to be default value for all enums\n return undefined;\n assert(typeof value == 'number');\n assert(Number.isInteger(value));\n if (enumAsInteger || !type[1].hasOwnProperty(value))\n // if we don't now the enum value, just return the number\n return value;\n if (type[2])\n // restore the dropped prefix\n return type[2] + type[1][value];\n return type[1][value];\n }\n message(type, value, fieldName, options) {\n if (value === undefined)\n return options.emitDefaultValues ? null : undefined;\n return type.internalJsonWrite(value, options);\n }\n scalar(type, value, fieldName, optional, emitDefaultValues) {\n if (value === undefined) {\n assert(optional);\n return undefined;\n }\n const ed = emitDefaultValues || optional;\n // noinspection FallThroughInSwitchStatementJS\n switch (type) {\n // int32, fixed32, uint32: JSON value will be a decimal number. Either numbers or strings are accepted.\n case ScalarType.INT32:\n case ScalarType.SFIXED32:\n case ScalarType.SINT32:\n if (value === 0)\n return ed ? 0 : undefined;\n assertInt32(value);\n return value;\n case ScalarType.FIXED32:\n case ScalarType.UINT32:\n if (value === 0)\n return ed ? 0 : undefined;\n assertUInt32(value);\n return value;\n // float, double: JSON value will be a number or one of the special string values \"NaN\", \"Infinity\", and \"-Infinity\".\n // Either numbers or strings are accepted. Exponent notation is also accepted.\n case ScalarType.FLOAT:\n assertFloat32(value);\n case ScalarType.DOUBLE:\n if (value === 0)\n return ed ? 0 : undefined;\n assert(typeof value == 'number');\n if (Number.isNaN(value))\n return 'NaN';\n if (value === Number.POSITIVE_INFINITY)\n return 'Infinity';\n if (value === Number.NEGATIVE_INFINITY)\n return '-Infinity';\n return value;\n // string:\n case ScalarType.STRING:\n if (value === \"\")\n return ed ? '' : undefined;\n assert(typeof value == 'string');\n return value;\n // bool:\n case ScalarType.BOOL:\n if (value === false)\n return ed ? false : undefined;\n assert(typeof value == 'boolean');\n return value;\n // JSON value will be a decimal string. Either numbers or strings are accepted.\n case ScalarType.UINT64:\n case ScalarType.FIXED64:\n assert(typeof value == 'number' || typeof value == 'string' || typeof value == 'bigint');\n let ulong = PbULong.from(value);\n if (ulong.isZero() && !ed)\n return undefined;\n return ulong.toString();\n // JSON value will be a decimal string. Either numbers or strings are accepted.\n case ScalarType.INT64:\n case ScalarType.SFIXED64:\n case ScalarType.SINT64:\n assert(typeof value == 'number' || typeof value == 'string' || typeof value == 'bigint');\n let long = PbLong.from(value);\n if (long.isZero() && !ed)\n return undefined;\n return long.toString();\n // bytes: JSON value will be the data encoded as a string using standard base64 encoding with paddings.\n // Either standard or URL-safe base64 encoding with/without paddings are accepted.\n case ScalarType.BYTES:\n assert(value instanceof Uint8Array);\n if (!value.byteLength)\n return ed ? \"\" : undefined;\n return base64encode(value);\n }\n }\n}\n","import { LongType, ScalarType } from \"./reflection-info\";\nimport { reflectionLongConvert } from \"./reflection-long-convert\";\nimport { PbLong, PbULong } from \"./pb-long\";\n/**\n * Creates the default value for a scalar type.\n */\nexport function reflectionScalarDefault(type, longType = LongType.STRING) {\n switch (type) {\n case ScalarType.BOOL:\n return false;\n case ScalarType.UINT64:\n case ScalarType.FIXED64:\n return reflectionLongConvert(PbULong.ZERO, longType);\n case ScalarType.INT64:\n case ScalarType.SFIXED64:\n case ScalarType.SINT64:\n return reflectionLongConvert(PbLong.ZERO, longType);\n case ScalarType.DOUBLE:\n case ScalarType.FLOAT:\n return 0.0;\n case ScalarType.BYTES:\n return new Uint8Array(0);\n case ScalarType.STRING:\n return \"\";\n default:\n // case ScalarType.INT32:\n // case ScalarType.UINT32:\n // case ScalarType.SINT32:\n // case ScalarType.FIXED32:\n // case ScalarType.SFIXED32:\n return 0;\n }\n}\n","import { UnknownFieldHandler, WireType } from \"./binary-format-contract\";\nimport { LongType, ScalarType } from \"./reflection-info\";\nimport { reflectionLongConvert } from \"./reflection-long-convert\";\nimport { reflectionScalarDefault } from \"./reflection-scalar-default\";\n/**\n * Reads proto3 messages in binary format using reflection information.\n *\n * https://developers.google.com/protocol-buffers/docs/encoding\n */\nexport class ReflectionBinaryReader {\n constructor(info) {\n this.info = info;\n }\n prepare() {\n var _a;\n if (!this.fieldNoToField) {\n const fieldsInput = (_a = this.info.fields) !== null && _a !== void 0 ? _a : [];\n this.fieldNoToField = new Map(fieldsInput.map(field => [field.no, field]));\n }\n }\n /**\n * Reads a message from binary format into the target message.\n *\n * Repeated fields are appended. Map entries are added, overwriting\n * existing keys.\n *\n * If a message field is already present, it will be merged with the\n * new data.\n */\n read(reader, message, options, length) {\n this.prepare();\n const end = length === undefined ? reader.len : reader.pos + length;\n while (reader.pos < end) {\n // read the tag and find the field\n const [fieldNo, wireType] = reader.tag(), field = this.fieldNoToField.get(fieldNo);\n if (!field) {\n let u = options.readUnknownField;\n if (u == \"throw\")\n throw new Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.info.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.info.typeName, message, fieldNo, wireType, d);\n continue;\n }\n // target object for the field we are reading\n let target = message, repeated = field.repeat, localName = field.localName;\n // if field is member of oneof ADT, use ADT as target\n if (field.oneof) {\n target = target[field.oneof];\n // if other oneof member selected, set new ADT\n if (target.oneofKind !== localName)\n target = message[field.oneof] = {\n oneofKind: localName\n };\n }\n // we have handled oneof above, we just have read the value into `target[localName]`\n switch (field.kind) {\n case \"scalar\":\n case \"enum\":\n let T = field.kind == \"enum\" ? ScalarType.INT32 : field.T;\n let L = field.kind == \"scalar\" ? field.L : undefined;\n if (repeated) {\n let arr = target[localName]; // safe to assume presence of array, oneof cannot contain repeated values\n if (wireType == WireType.LengthDelimited && T != ScalarType.STRING && T != ScalarType.BYTES) {\n let e = reader.uint32() + reader.pos;\n while (reader.pos < e)\n arr.push(this.scalar(reader, T, L));\n }\n else\n arr.push(this.scalar(reader, T, L));\n }\n else\n target[localName] = this.scalar(reader, T, L);\n break;\n case \"message\":\n if (repeated) {\n let arr = target[localName]; // safe to assume presence of array, oneof cannot contain repeated values\n let msg = field.T().internalBinaryRead(reader, reader.uint32(), options);\n arr.push(msg);\n }\n else\n target[localName] = field.T().internalBinaryRead(reader, reader.uint32(), options, target[localName]);\n break;\n case \"map\":\n let [mapKey, mapVal] = this.mapEntry(field, reader, options);\n // safe to assume presence of map object, oneof cannot contain repeated values\n target[localName][mapKey] = mapVal;\n break;\n }\n }\n }\n /**\n * Read a map field, expecting key field = 1, value field = 2\n */\n mapEntry(field, reader, options) {\n let length = reader.uint32();\n let end = reader.pos + length;\n let key = undefined; // javascript only allows number or string for object properties\n let val = undefined;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case 1:\n if (field.K == ScalarType.BOOL)\n key = reader.bool().toString();\n else\n // long types are read as string, number types are okay as number\n key = this.scalar(reader, field.K, LongType.STRING);\n break;\n case 2:\n switch (field.V.kind) {\n case \"scalar\":\n val = this.scalar(reader, field.V.T, field.V.L);\n break;\n case \"enum\":\n val = reader.int32();\n break;\n case \"message\":\n val = field.V.T().internalBinaryRead(reader, reader.uint32(), options);\n break;\n }\n break;\n default:\n throw new Error(`Unknown field ${fieldNo} (wire type ${wireType}) in map entry for ${this.info.typeName}#${field.name}`);\n }\n }\n if (key === undefined) {\n let keyRaw = reflectionScalarDefault(field.K);\n key = field.K == ScalarType.BOOL ? keyRaw.toString() : keyRaw;\n }\n if (val === undefined)\n switch (field.V.kind) {\n case \"scalar\":\n val = reflectionScalarDefault(field.V.T, field.V.L);\n break;\n case \"enum\":\n val = 0;\n break;\n case \"message\":\n val = field.V.T().create();\n break;\n }\n return [key, val];\n }\n scalar(reader, type, longType) {\n switch (type) {\n case ScalarType.INT32:\n return reader.int32();\n case ScalarType.STRING:\n return reader.string();\n case ScalarType.BOOL:\n return reader.bool();\n case ScalarType.DOUBLE:\n return reader.double();\n case ScalarType.FLOAT:\n return reader.float();\n case ScalarType.INT64:\n return reflectionLongConvert(reader.int64(), longType);\n case ScalarType.UINT64:\n return reflectionLongConvert(reader.uint64(), longType);\n case ScalarType.FIXED64:\n return reflectionLongConvert(reader.fixed64(), longType);\n case ScalarType.FIXED32:\n return reader.fixed32();\n case ScalarType.BYTES:\n return reader.bytes();\n case ScalarType.UINT32:\n return reader.uint32();\n case ScalarType.SFIXED32:\n return reader.sfixed32();\n case ScalarType.SFIXED64:\n return reflectionLongConvert(reader.sfixed64(), longType);\n case ScalarType.SINT32:\n return reader.sint32();\n case ScalarType.SINT64:\n return reflectionLongConvert(reader.sint64(), longType);\n }\n }\n}\n","import { UnknownFieldHandler, WireType } from \"./binary-format-contract\";\nimport { RepeatType, ScalarType } from \"./reflection-info\";\nimport { assert } from \"./assert\";\nimport { PbLong, PbULong } from \"./pb-long\";\n/**\n * Writes proto3 messages in binary format using reflection information.\n *\n * https://developers.google.com/protocol-buffers/docs/encoding\n */\nexport class ReflectionBinaryWriter {\n constructor(info) {\n this.info = info;\n }\n prepare() {\n if (!this.fields) {\n const fieldsInput = this.info.fields ? this.info.fields.concat() : [];\n this.fields = fieldsInput.sort((a, b) => a.no - b.no);\n }\n }\n /**\n * Writes the message to binary format.\n */\n write(message, writer, options) {\n this.prepare();\n for (const field of this.fields) {\n let value, // this will be our field value, whether it is member of a oneof or not\n emitDefault, // whether we emit the default value (only true for oneof members)\n repeated = field.repeat, localName = field.localName;\n // handle oneof ADT\n if (field.oneof) {\n const group = message[field.oneof];\n if (group.oneofKind !== localName)\n continue; // if field is not selected, skip\n value = group[localName];\n emitDefault = true;\n }\n else {\n value = message[localName];\n emitDefault = false;\n }\n // we have handled oneof above. we just have to honor `emitDefault`.\n switch (field.kind) {\n case \"scalar\":\n case \"enum\":\n let T = field.kind == \"enum\" ? ScalarType.INT32 : field.T;\n if (repeated) {\n assert(Array.isArray(value));\n if (repeated == RepeatType.PACKED)\n this.packed(writer, T, field.no, value);\n else\n for (const item of value)\n this.scalar(writer, T, field.no, item, true);\n }\n else if (value === undefined)\n assert(field.opt);\n else\n this.scalar(writer, T, field.no, value, emitDefault || field.opt);\n break;\n case \"message\":\n if (repeated) {\n assert(Array.isArray(value));\n for (const item of value)\n this.message(writer, options, field.T(), field.no, item);\n }\n else {\n this.message(writer, options, field.T(), field.no, value);\n }\n break;\n case \"map\":\n assert(typeof value == 'object' && value !== null);\n for (const [key, val] of Object.entries(value))\n this.mapEntry(writer, options, field, key, val);\n break;\n }\n }\n let u = options.writeUnknownFields;\n if (u !== false)\n (u === true ? UnknownFieldHandler.onWrite : u)(this.info.typeName, message, writer);\n }\n mapEntry(writer, options, field, key, value) {\n writer.tag(field.no, WireType.LengthDelimited);\n writer.fork();\n // javascript only allows number or string for object properties\n // we convert from our representation to the protobuf type\n let keyValue = key;\n switch (field.K) {\n case ScalarType.INT32:\n case ScalarType.FIXED32:\n case ScalarType.UINT32:\n case ScalarType.SFIXED32:\n case ScalarType.SINT32:\n keyValue = Number.parseInt(key);\n break;\n case ScalarType.BOOL:\n assert(key == 'true' || key == 'false');\n keyValue = key == 'true';\n break;\n }\n // write key, expecting key field number = 1\n this.scalar(writer, field.K, 1, keyValue, true);\n // write value, expecting value field number = 2\n switch (field.V.kind) {\n case 'scalar':\n this.scalar(writer, field.V.T, 2, value, true);\n break;\n case 'enum':\n this.scalar(writer, ScalarType.INT32, 2, value, true);\n break;\n case 'message':\n this.message(writer, options, field.V.T(), 2, value);\n break;\n }\n writer.join();\n }\n message(writer, options, handler, fieldNo, value) {\n if (value === undefined)\n return;\n handler.internalBinaryWrite(value, writer.tag(fieldNo, WireType.LengthDelimited).fork(), options);\n writer.join();\n }\n /**\n * Write a single scalar value.\n */\n scalar(writer, type, fieldNo, value, emitDefault) {\n let [wireType, method, isDefault] = this.scalarInfo(type, value);\n if (!isDefault || emitDefault) {\n writer.tag(fieldNo, wireType);\n writer[method](value);\n }\n }\n /**\n * Write an array of scalar values in packed format.\n */\n packed(writer, type, fieldNo, value) {\n if (!value.length)\n return;\n assert(type !== ScalarType.BYTES && type !== ScalarType.STRING);\n // write tag\n writer.tag(fieldNo, WireType.LengthDelimited);\n // begin length-delimited\n writer.fork();\n // write values without tags\n let [, method,] = this.scalarInfo(type);\n for (let i = 0; i < value.length; i++)\n writer[method](value[i]);\n // end length delimited\n writer.join();\n }\n /**\n * Get information for writing a scalar value.\n *\n * Returns tuple:\n * [0]: appropriate WireType\n * [1]: name of the appropriate method of IBinaryWriter\n * [2]: whether the given value is a default value\n *\n * If argument `value` is omitted, [2] is always false.\n */\n scalarInfo(type, value) {\n let t = WireType.Varint;\n let m;\n let i = value === undefined;\n let d = value === 0;\n switch (type) {\n case ScalarType.INT32:\n m = \"int32\";\n break;\n case ScalarType.STRING:\n d = i || !value.length;\n t = WireType.LengthDelimited;\n m = \"string\";\n break;\n case ScalarType.BOOL:\n d = value === false;\n m = \"bool\";\n break;\n case ScalarType.UINT32:\n m = \"uint32\";\n break;\n case ScalarType.DOUBLE:\n t = WireType.Bit64;\n m = \"double\";\n break;\n case ScalarType.FLOAT:\n t = WireType.Bit32;\n m = \"float\";\n break;\n case ScalarType.INT64:\n d = i || PbLong.from(value).isZero();\n m = \"int64\";\n break;\n case ScalarType.UINT64:\n d = i || PbULong.from(value).isZero();\n m = \"uint64\";\n break;\n case ScalarType.FIXED64:\n d = i || PbULong.from(value).isZero();\n t = WireType.Bit64;\n m = \"fixed64\";\n break;\n case ScalarType.BYTES:\n d = i || !value.byteLength;\n t = WireType.LengthDelimited;\n m = \"bytes\";\n break;\n case ScalarType.FIXED32:\n t = WireType.Bit32;\n m = \"fixed32\";\n break;\n case ScalarType.SFIXED32:\n t = WireType.Bit32;\n m = \"sfixed32\";\n break;\n case ScalarType.SFIXED64:\n d = i || PbLong.from(value).isZero();\n t = WireType.Bit64;\n m = \"sfixed64\";\n break;\n case ScalarType.SINT32:\n m = \"sint32\";\n break;\n case ScalarType.SINT64:\n d = i || PbLong.from(value).isZero();\n m = \"sint64\";\n break;\n }\n return [t, m, i || d];\n }\n}\n","import { reflectionScalarDefault } from \"./reflection-scalar-default\";\nimport { MESSAGE_TYPE } from './message-type-contract';\n/**\n * Creates an instance of the generic message, using the field\n * information.\n */\nexport function reflectionCreate(type) {\n /**\n * This ternary can be removed in the next major version.\n * The `Object.create()` code path utilizes a new `messagePrototype`\n * property on the `IMessageType` which has this same `MESSAGE_TYPE`\n * non-enumerable property on it. Doing it this way means that we only\n * pay the cost of `Object.defineProperty()` once per `IMessageType`\n * class of once per \"instance\". The falsy code path is only provided\n * for backwards compatibility in cases where the runtime library is\n * updated without also updating the generated code.\n */\n const msg = type.messagePrototype\n ? Object.create(type.messagePrototype)\n : Object.defineProperty({}, MESSAGE_TYPE, { value: type });\n for (let field of type.fields) {\n let name = field.localName;\n if (field.opt)\n continue;\n if (field.oneof)\n msg[field.oneof] = { oneofKind: undefined };\n else if (field.repeat)\n msg[name] = [];\n else\n switch (field.kind) {\n case \"scalar\":\n msg[name] = reflectionScalarDefault(field.T, field.L);\n break;\n case \"enum\":\n // we require 0 to be default value for all enums\n msg[name] = 0;\n break;\n case \"map\":\n msg[name] = {};\n break;\n }\n }\n return msg;\n}\n","/**\n * Copy partial data into the target message.\n *\n * If a singular scalar or enum field is present in the source, it\n * replaces the field in the target.\n *\n * If a singular message field is present in the source, it is merged\n * with the target field by calling mergePartial() of the responsible\n * message type.\n *\n * If a repeated field is present in the source, its values replace\n * all values in the target array, removing extraneous values.\n * Repeated message fields are copied, not merged.\n *\n * If a map field is present in the source, entries are added to the\n * target map, replacing entries with the same key. Entries that only\n * exist in the target remain. Entries with message values are copied,\n * not merged.\n *\n * Note that this function differs from protobuf merge semantics,\n * which appends repeated fields.\n */\nexport function reflectionMergePartial(info, target, source) {\n let fieldValue, // the field value we are working with\n input = source, output; // where we want our field value to go\n for (let field of info.fields) {\n let name = field.localName;\n if (field.oneof) {\n const group = input[field.oneof]; // this is the oneof`s group in the source\n if ((group === null || group === void 0 ? void 0 : group.oneofKind) == undefined) { // the user is free to omit\n continue; // we skip this field, and all other members too\n }\n fieldValue = group[name]; // our value comes from the the oneof group of the source\n output = target[field.oneof]; // and our output is the oneof group of the target\n output.oneofKind = group.oneofKind; // always update discriminator\n if (fieldValue == undefined) {\n delete output[name]; // remove any existing value\n continue; // skip further work on field\n }\n }\n else {\n fieldValue = input[name]; // we are using the source directly\n output = target; // we want our field value to go directly into the target\n if (fieldValue == undefined) {\n continue; // skip further work on field, existing value is used as is\n }\n }\n if (field.repeat)\n output[name].length = fieldValue.length; // resize target array to match source array\n // now we just work with `fieldValue` and `output` to merge the value\n switch (field.kind) {\n case \"scalar\":\n case \"enum\":\n if (field.repeat)\n for (let i = 0; i < fieldValue.length; i++)\n output[name][i] = fieldValue[i]; // not a reference type\n else\n output[name] = fieldValue; // not a reference type\n break;\n case \"message\":\n let T = field.T();\n if (field.repeat)\n for (let i = 0; i < fieldValue.length; i++)\n output[name][i] = T.create(fieldValue[i]);\n else if (output[name] === undefined)\n output[name] = T.create(fieldValue); // nothing to merge with\n else\n T.mergePartial(output[name], fieldValue);\n break;\n case \"map\":\n // Map and repeated fields are simply overwritten, not appended or merged\n switch (field.V.kind) {\n case \"scalar\":\n case \"enum\":\n Object.assign(output[name], fieldValue); // elements are not reference types\n break;\n case \"message\":\n let T = field.V.T();\n for (let k of Object.keys(fieldValue))\n output[name][k] = T.create(fieldValue[k]);\n break;\n }\n break;\n }\n }\n}\n","import { ScalarType } from \"./reflection-info\";\n/**\n * Determines whether two message of the same type have the same field values.\n * Checks for deep equality, traversing repeated fields, oneof groups, maps\n * and messages recursively.\n * Will also return true if both messages are `undefined`.\n */\nexport function reflectionEquals(info, a, b) {\n if (a === b)\n return true;\n if (!a || !b)\n return false;\n for (let field of info.fields) {\n let localName = field.localName;\n let val_a = field.oneof ? a[field.oneof][localName] : a[localName];\n let val_b = field.oneof ? b[field.oneof][localName] : b[localName];\n switch (field.kind) {\n case \"enum\":\n case \"scalar\":\n let t = field.kind == \"enum\" ? ScalarType.INT32 : field.T;\n if (!(field.repeat\n ? repeatedPrimitiveEq(t, val_a, val_b)\n : primitiveEq(t, val_a, val_b)))\n return false;\n break;\n case \"map\":\n if (!(field.V.kind == \"message\"\n ? repeatedMsgEq(field.V.T(), objectValues(val_a), objectValues(val_b))\n : repeatedPrimitiveEq(field.V.kind == \"enum\" ? ScalarType.INT32 : field.V.T, objectValues(val_a), objectValues(val_b))))\n return false;\n break;\n case \"message\":\n let T = field.T();\n if (!(field.repeat\n ? repeatedMsgEq(T, val_a, val_b)\n : T.equals(val_a, val_b)))\n return false;\n break;\n }\n }\n return true;\n}\nconst objectValues = Object.values;\nfunction primitiveEq(type, a, b) {\n if (a === b)\n return true;\n if (type !== ScalarType.BYTES)\n return false;\n let ba = a;\n let bb = b;\n if (ba.length !== bb.length)\n return false;\n for (let i = 0; i < ba.length; i++)\n if (ba[i] != bb[i])\n return false;\n return true;\n}\nfunction repeatedPrimitiveEq(type, a, b) {\n if (a.length !== b.length)\n return false;\n for (let i = 0; i < a.length; i++)\n if (!primitiveEq(type, a[i], b[i]))\n return false;\n return true;\n}\nfunction repeatedMsgEq(type, a, b) {\n if (a.length !== b.length)\n return false;\n for (let i = 0; i < a.length; i++)\n if (!type.equals(a[i], b[i]))\n return false;\n return true;\n}\n","import { MESSAGE_TYPE } from \"./message-type-contract\";\nimport { normalizeFieldInfo } from \"./reflection-info\";\nimport { ReflectionTypeCheck } from \"./reflection-type-check\";\nimport { ReflectionJsonReader } from \"./reflection-json-reader\";\nimport { ReflectionJsonWriter } from \"./reflection-json-writer\";\nimport { ReflectionBinaryReader } from \"./reflection-binary-reader\";\nimport { ReflectionBinaryWriter } from \"./reflection-binary-writer\";\nimport { reflectionCreate } from \"./reflection-create\";\nimport { reflectionMergePartial } from \"./reflection-merge-partial\";\nimport { typeofJsonValue } from \"./json-typings\";\nimport { jsonReadOptions, jsonWriteOptions, } from \"./json-format-contract\";\nimport { reflectionEquals } from \"./reflection-equals\";\nimport { binaryWriteOptions } from \"./binary-writer\";\nimport { binaryReadOptions } from \"./binary-reader\";\nconst baseDescriptors = Object.getOwnPropertyDescriptors(Object.getPrototypeOf({}));\nconst messageTypeDescriptor = baseDescriptors[MESSAGE_TYPE] = {};\n/**\n * This standard message type provides reflection-based\n * operations to work with a message.\n */\nexport class MessageType {\n constructor(name, fields, options) {\n this.defaultCheckDepth = 16;\n this.typeName = name;\n this.fields = fields.map(normalizeFieldInfo);\n this.options = options !== null && options !== void 0 ? options : {};\n messageTypeDescriptor.value = this;\n this.messagePrototype = Object.create(null, baseDescriptors);\n this.refTypeCheck = new ReflectionTypeCheck(this);\n this.refJsonReader = new ReflectionJsonReader(this);\n this.refJsonWriter = new ReflectionJsonWriter(this);\n this.refBinReader = new ReflectionBinaryReader(this);\n this.refBinWriter = new ReflectionBinaryWriter(this);\n }\n create(value) {\n let message = reflectionCreate(this);\n if (value !== undefined) {\n reflectionMergePartial(this, message, value);\n }\n return message;\n }\n /**\n * Clone the message.\n *\n * Unknown fields are discarded.\n */\n clone(message) {\n let copy = this.create();\n reflectionMergePartial(this, copy, message);\n return copy;\n }\n /**\n * Determines whether two message of the same type have the same field values.\n * Checks for deep equality, traversing repeated fields, oneof groups, maps\n * and messages recursively.\n * Will also return true if both messages are `undefined`.\n */\n equals(a, b) {\n return reflectionEquals(this, a, b);\n }\n /**\n * Is the given value assignable to our message type\n * and contains no [excess properties](https://www.typescriptlang.org/docs/handbook/interfaces.html#excess-property-checks)?\n */\n is(arg, depth = this.defaultCheckDepth) {\n return this.refTypeCheck.is(arg, depth, false);\n }\n /**\n * Is the given value assignable to our message type,\n * regardless of [excess properties](https://www.typescriptlang.org/docs/handbook/interfaces.html#excess-property-checks)?\n */\n isAssignable(arg, depth = this.defaultCheckDepth) {\n return this.refTypeCheck.is(arg, depth, true);\n }\n /**\n * Copy partial data into the target message.\n */\n mergePartial(target, source) {\n reflectionMergePartial(this, target, source);\n }\n /**\n * Create a new message from binary format.\n */\n fromBinary(data, options) {\n let opt = binaryReadOptions(options);\n return this.internalBinaryRead(opt.readerFactory(data), data.byteLength, opt);\n }\n /**\n * Read a new message from a JSON value.\n */\n fromJson(json, options) {\n return this.internalJsonRead(json, jsonReadOptions(options));\n }\n /**\n * Read a new message from a JSON string.\n * This is equivalent to `T.fromJson(JSON.parse(json))`.\n */\n fromJsonString(json, options) {\n let value = JSON.parse(json);\n return this.fromJson(value, options);\n }\n /**\n * Write the message to canonical JSON value.\n */\n toJson(message, options) {\n return this.internalJsonWrite(message, jsonWriteOptions(options));\n }\n /**\n * Convert the message to canonical JSON string.\n * This is equivalent to `JSON.stringify(T.toJson(t))`\n */\n toJsonString(message, options) {\n var _a;\n let value = this.toJson(message, options);\n return JSON.stringify(value, null, (_a = options === null || options === void 0 ? void 0 : options.prettySpaces) !== null && _a !== void 0 ? _a : 0);\n }\n /**\n * Write the message to binary format.\n */\n toBinary(message, options) {\n let opt = binaryWriteOptions(options);\n return this.internalBinaryWrite(message, opt.writerFactory(), opt).finish();\n }\n /**\n * This is an internal method. If you just want to read a message from\n * JSON, use `fromJson()` or `fromJsonString()`.\n *\n * Reads JSON value and merges the fields into the target\n * according to protobuf rules. If the target is omitted,\n * a new instance is created first.\n */\n internalJsonRead(json, options, target) {\n if (json !== null && typeof json == \"object\" && !Array.isArray(json)) {\n let message = target !== null && target !== void 0 ? target : this.create();\n this.refJsonReader.read(json, message, options);\n return message;\n }\n throw new Error(`Unable to parse message ${this.typeName} from JSON ${typeofJsonValue(json)}.`);\n }\n /**\n * This is an internal method. If you just want to write a message\n * to JSON, use `toJson()` or `toJsonString().\n *\n * Writes JSON value and returns it.\n */\n internalJsonWrite(message, options) {\n return this.refJsonWriter.write(message, options);\n }\n /**\n * This is an internal method. If you just want to write a message\n * in binary format, use `toBinary()`.\n *\n * Serializes the message in binary format and appends it to the given\n * writer. Returns passed writer.\n */\n internalBinaryWrite(message, writer, options) {\n this.refBinWriter.write(message, writer, options);\n return writer;\n }\n /**\n * This is an internal method. If you just want to read a message from\n * binary data, use `fromBinary()`.\n *\n * Reads data from binary format and merges the fields into\n * the target according to protobuf rules. If the target is\n * omitted, a new instance is created first.\n */\n internalBinaryRead(reader, length, options, target) {\n let message = target !== null && target !== void 0 ? target : this.create();\n this.refBinReader.read(reader, message, options, length);\n return message;\n }\n}\n","import { WireType } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\n// @generated message type with reflection information, may provide speed optimized methods\nclass base_message$Type extends MessageType {\n constructor() {\n super(\"base_message\", [\n { no: 1, name: \"type\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.type = \"\";\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string type */ 1:\n message.type = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* string type = 1; */\n if (message.type !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.type);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message base_message\n */\nexport const base_message = new base_message$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass peerConnectionOptions$Type extends MessageType {\n constructor() {\n super(\"peerConnectionOptions\", []);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message peerConnectionOptions\n */\nexport const peerConnectionOptions = new peerConnectionOptions$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass config$Type extends MessageType {\n constructor() {\n super(\"config\", [\n { no: 1, name: \"type\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"peerConnectionOptions\", kind: \"message\", T: () => peerConnectionOptions },\n { no: 3, name: \"protocolVersion\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.type = \"\";\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string type */ 1:\n message.type = reader.string();\n break;\n case /* peerConnectionOptions peerConnectionOptions */ 2:\n message.peerConnectionOptions = peerConnectionOptions.internalBinaryRead(reader, reader.uint32(), options, message.peerConnectionOptions);\n break;\n case /* optional string protocolVersion */ 3:\n message.protocolVersion = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* string type = 1; */\n if (message.type !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.type);\n /* peerConnectionOptions peerConnectionOptions = 2; */\n if (message.peerConnectionOptions)\n peerConnectionOptions.internalBinaryWrite(message.peerConnectionOptions, writer.tag(2, WireType.LengthDelimited).fork(), options).join();\n /* optional string protocolVersion = 3; */\n if (message.protocolVersion !== undefined)\n writer.tag(3, WireType.LengthDelimited).string(message.protocolVersion);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message config\n */\nexport const config = new config$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass identify$Type extends MessageType {\n constructor() {\n super(\"identify\", [\n { no: 1, name: \"type\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.type = \"\";\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string type */ 1:\n message.type = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* string type = 1; */\n if (message.type !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.type);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message identify\n */\nexport const identify = new identify$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass endpointId$Type extends MessageType {\n constructor() {\n super(\"endpointId\", [\n { no: 1, name: \"type\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"id\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 3, name: \"protocolVersion\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.type = \"\";\n message.id = \"\";\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string type */ 1:\n message.type = reader.string();\n break;\n case /* string id */ 2:\n message.id = reader.string();\n break;\n case /* optional string protocolVersion */ 3:\n message.protocolVersion = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* string type = 1; */\n if (message.type !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.type);\n /* string id = 2; */\n if (message.id !== \"\")\n writer.tag(2, WireType.LengthDelimited).string(message.id);\n /* optional string protocolVersion = 3; */\n if (message.protocolVersion !== undefined)\n writer.tag(3, WireType.LengthDelimited).string(message.protocolVersion);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message endpointId\n */\nexport const endpointId = new endpointId$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass endpointIdConfirm$Type extends MessageType {\n constructor() {\n super(\"endpointIdConfirm\", [\n { no: 1, name: \"type\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"committedId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.type = \"\";\n message.committedId = \"\";\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string type */ 1:\n message.type = reader.string();\n break;\n case /* string committedId */ 2:\n message.committedId = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* string type = 1; */\n if (message.type !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.type);\n /* string committedId = 2; */\n if (message.committedId !== \"\")\n writer.tag(2, WireType.LengthDelimited).string(message.committedId);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message endpointIdConfirm\n */\nexport const endpointIdConfirm = new endpointIdConfirm$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass streamerIdChanged$Type extends MessageType {\n constructor() {\n super(\"streamerIdChanged\", [\n { no: 1, name: \"type\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"newID\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.type = \"\";\n message.newID = \"\";\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string type */ 1:\n message.type = reader.string();\n break;\n case /* string newID */ 2:\n message.newID = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* string type = 1; */\n if (message.type !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.type);\n /* string newID = 2; */\n if (message.newID !== \"\")\n writer.tag(2, WireType.LengthDelimited).string(message.newID);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message streamerIdChanged\n */\nexport const streamerIdChanged = new streamerIdChanged$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass listStreamers$Type extends MessageType {\n constructor() {\n super(\"listStreamers\", [\n { no: 1, name: \"type\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.type = \"\";\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string type */ 1:\n message.type = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* string type = 1; */\n if (message.type !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.type);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message listStreamers\n */\nexport const listStreamers = new listStreamers$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass streamerList$Type extends MessageType {\n constructor() {\n super(\"streamerList\", [\n { no: 1, name: \"type\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"ids\", kind: \"scalar\", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.type = \"\";\n message.ids = [];\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string type */ 1:\n message.type = reader.string();\n break;\n case /* repeated string ids */ 2:\n message.ids.push(reader.string());\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* string type = 1; */\n if (message.type !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.type);\n /* repeated string ids = 2; */\n for (let i = 0; i < message.ids.length; i++)\n writer.tag(2, WireType.LengthDelimited).string(message.ids[i]);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message streamerList\n */\nexport const streamerList = new streamerList$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass subscribe$Type extends MessageType {\n constructor() {\n super(\"subscribe\", [\n { no: 1, name: \"type\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"streamerId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.type = \"\";\n message.streamerId = \"\";\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string type */ 1:\n message.type = reader.string();\n break;\n case /* string streamerId */ 2:\n message.streamerId = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* string type = 1; */\n if (message.type !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.type);\n /* string streamerId = 2; */\n if (message.streamerId !== \"\")\n writer.tag(2, WireType.LengthDelimited).string(message.streamerId);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message subscribe\n */\nexport const subscribe = new subscribe$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass unsubscribe$Type extends MessageType {\n constructor() {\n super(\"unsubscribe\", [\n { no: 1, name: \"type\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.type = \"\";\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string type */ 1:\n message.type = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* string type = 1; */\n if (message.type !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.type);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message unsubscribe\n */\nexport const unsubscribe = new unsubscribe$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass subscribeFailed$Type extends MessageType {\n constructor() {\n super(\"subscribeFailed\", [\n { no: 1, name: \"type\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"message\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.type = \"\";\n message.message = \"\";\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string type */ 1:\n message.type = reader.string();\n break;\n case /* string message */ 2:\n message.message = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* string type = 1; */\n if (message.type !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.type);\n /* string message = 2; */\n if (message.message !== \"\")\n writer.tag(2, WireType.LengthDelimited).string(message.message);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message subscribeFailed\n */\nexport const subscribeFailed = new subscribeFailed$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass playerConnected$Type extends MessageType {\n constructor() {\n super(\"playerConnected\", [\n { no: 1, name: \"type\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"dataChannel\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ },\n { no: 3, name: \"sfu\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ },\n { no: 5, name: \"playerId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.type = \"\";\n message.dataChannel = false;\n message.sfu = false;\n message.playerId = \"\";\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string type */ 1:\n message.type = reader.string();\n break;\n case /* bool dataChannel */ 2:\n message.dataChannel = reader.bool();\n break;\n case /* bool sfu */ 3:\n message.sfu = reader.bool();\n break;\n case /* string playerId */ 5:\n message.playerId = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* string type = 1; */\n if (message.type !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.type);\n /* bool dataChannel = 2; */\n if (message.dataChannel !== false)\n writer.tag(2, WireType.Varint).bool(message.dataChannel);\n /* bool sfu = 3; */\n if (message.sfu !== false)\n writer.tag(3, WireType.Varint).bool(message.sfu);\n /* string playerId = 5; */\n if (message.playerId !== \"\")\n writer.tag(5, WireType.LengthDelimited).string(message.playerId);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message playerConnected\n */\nexport const playerConnected = new playerConnected$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass playerDisconnected$Type extends MessageType {\n constructor() {\n super(\"playerDisconnected\", [\n { no: 1, name: \"type\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"playerId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.type = \"\";\n message.playerId = \"\";\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string type */ 1:\n message.type = reader.string();\n break;\n case /* string playerId */ 2:\n message.playerId = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* string type = 1; */\n if (message.type !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.type);\n /* string playerId = 2; */\n if (message.playerId !== \"\")\n writer.tag(2, WireType.LengthDelimited).string(message.playerId);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message playerDisconnected\n */\nexport const playerDisconnected = new playerDisconnected$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass offer$Type extends MessageType {\n constructor() {\n super(\"offer\", [\n { no: 1, name: \"type\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"sdp\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 3, name: \"playerId\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/ },\n { no: 4, name: \"sfu\", kind: \"scalar\", opt: true, T: 8 /*ScalarType.BOOL*/ },\n { no: 5, name: \"multiplex\", kind: \"scalar\", opt: true, T: 8 /*ScalarType.BOOL*/ },\n { no: 6, name: \"scalabilityMode\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.type = \"\";\n message.sdp = \"\";\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string type */ 1:\n message.type = reader.string();\n break;\n case /* string sdp */ 2:\n message.sdp = reader.string();\n break;\n case /* optional string playerId */ 3:\n message.playerId = reader.string();\n break;\n case /* optional bool sfu */ 4:\n message.sfu = reader.bool();\n break;\n case /* optional bool multiplex */ 5:\n message.multiplex = reader.bool();\n break;\n case /* optional string scalabilityMode */ 6:\n message.scalabilityMode = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* string type = 1; */\n if (message.type !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.type);\n /* string sdp = 2; */\n if (message.sdp !== \"\")\n writer.tag(2, WireType.LengthDelimited).string(message.sdp);\n /* optional string playerId = 3; */\n if (message.playerId !== undefined)\n writer.tag(3, WireType.LengthDelimited).string(message.playerId);\n /* optional bool sfu = 4; */\n if (message.sfu !== undefined)\n writer.tag(4, WireType.Varint).bool(message.sfu);\n /* optional bool multiplex = 5; */\n if (message.multiplex !== undefined)\n writer.tag(5, WireType.Varint).bool(message.multiplex);\n /* optional string scalabilityMode = 6; */\n if (message.scalabilityMode !== undefined)\n writer.tag(6, WireType.LengthDelimited).string(message.scalabilityMode);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message offer\n */\nexport const offer = new offer$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass answer$Type extends MessageType {\n constructor() {\n super(\"answer\", [\n { no: 1, name: \"type\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"sdp\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 3, name: \"playerId\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/ },\n { no: 4, name: \"minBitrateBps\", kind: \"scalar\", opt: true, T: 5 /*ScalarType.INT32*/ },\n { no: 5, name: \"maxBitrateBps\", kind: \"scalar\", opt: true, T: 5 /*ScalarType.INT32*/ }\n ]);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.type = \"\";\n message.sdp = \"\";\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string type */ 1:\n message.type = reader.string();\n break;\n case /* string sdp */ 2:\n message.sdp = reader.string();\n break;\n case /* optional string playerId */ 3:\n message.playerId = reader.string();\n break;\n case /* optional int32 minBitrateBps */ 4:\n message.minBitrateBps = reader.int32();\n break;\n case /* optional int32 maxBitrateBps */ 5:\n message.maxBitrateBps = reader.int32();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* string type = 1; */\n if (message.type !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.type);\n /* string sdp = 2; */\n if (message.sdp !== \"\")\n writer.tag(2, WireType.LengthDelimited).string(message.sdp);\n /* optional string playerId = 3; */\n if (message.playerId !== undefined)\n writer.tag(3, WireType.LengthDelimited).string(message.playerId);\n /* optional int32 minBitrateBps = 4; */\n if (message.minBitrateBps !== undefined)\n writer.tag(4, WireType.Varint).int32(message.minBitrateBps);\n /* optional int32 maxBitrateBps = 5; */\n if (message.maxBitrateBps !== undefined)\n writer.tag(5, WireType.Varint).int32(message.maxBitrateBps);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message answer\n */\nexport const answer = new answer$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass iceCandidateData$Type extends MessageType {\n constructor() {\n super(\"iceCandidateData\", [\n { no: 1, name: \"candidate\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"sdpMid\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 3, name: \"sdpMLineIndex\", kind: \"scalar\", T: 5 /*ScalarType.INT32*/ },\n { no: 4, name: \"usernameFragment\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.candidate = \"\";\n message.sdpMid = \"\";\n message.sdpMLineIndex = 0;\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string candidate */ 1:\n message.candidate = reader.string();\n break;\n case /* string sdpMid */ 2:\n message.sdpMid = reader.string();\n break;\n case /* int32 sdpMLineIndex */ 3:\n message.sdpMLineIndex = reader.int32();\n break;\n case /* optional string usernameFragment */ 4:\n message.usernameFragment = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* string candidate = 1; */\n if (message.candidate !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.candidate);\n /* string sdpMid = 2; */\n if (message.sdpMid !== \"\")\n writer.tag(2, WireType.LengthDelimited).string(message.sdpMid);\n /* int32 sdpMLineIndex = 3; */\n if (message.sdpMLineIndex !== 0)\n writer.tag(3, WireType.Varint).int32(message.sdpMLineIndex);\n /* optional string usernameFragment = 4; */\n if (message.usernameFragment !== undefined)\n writer.tag(4, WireType.LengthDelimited).string(message.usernameFragment);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message iceCandidateData\n */\nexport const iceCandidateData = new iceCandidateData$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass iceCandidate$Type extends MessageType {\n constructor() {\n super(\"iceCandidate\", [\n { no: 1, name: \"type\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"candidate\", kind: \"message\", T: () => iceCandidateData },\n { no: 3, name: \"playerId\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.type = \"\";\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string type */ 1:\n message.type = reader.string();\n break;\n case /* iceCandidateData candidate */ 2:\n message.candidate = iceCandidateData.internalBinaryRead(reader, reader.uint32(), options, message.candidate);\n break;\n case /* optional string playerId */ 3:\n message.playerId = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* string type = 1; */\n if (message.type !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.type);\n /* iceCandidateData candidate = 2; */\n if (message.candidate)\n iceCandidateData.internalBinaryWrite(message.candidate, writer.tag(2, WireType.LengthDelimited).fork(), options).join();\n /* optional string playerId = 3; */\n if (message.playerId !== undefined)\n writer.tag(3, WireType.LengthDelimited).string(message.playerId);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message iceCandidate\n */\nexport const iceCandidate = new iceCandidate$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass disconnectPlayer$Type extends MessageType {\n constructor() {\n super(\"disconnectPlayer\", [\n { no: 1, name: \"type\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"playerId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 3, name: \"reason\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.type = \"\";\n message.playerId = \"\";\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string type */ 1:\n message.type = reader.string();\n break;\n case /* string playerId */ 2:\n message.playerId = reader.string();\n break;\n case /* optional string reason */ 3:\n message.reason = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* string type = 1; */\n if (message.type !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.type);\n /* string playerId = 2; */\n if (message.playerId !== \"\")\n writer.tag(2, WireType.LengthDelimited).string(message.playerId);\n /* optional string reason = 3; */\n if (message.reason !== undefined)\n writer.tag(3, WireType.LengthDelimited).string(message.reason);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message disconnectPlayer\n */\nexport const disconnectPlayer = new disconnectPlayer$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ping$Type extends MessageType {\n constructor() {\n super(\"ping\", [\n { no: 1, name: \"type\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"time\", kind: \"scalar\", T: 5 /*ScalarType.INT32*/ }\n ]);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.type = \"\";\n message.time = 0;\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string type */ 1:\n message.type = reader.string();\n break;\n case /* int32 time */ 2:\n message.time = reader.int32();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* string type = 1; */\n if (message.type !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.type);\n /* int32 time = 2; */\n if (message.time !== 0)\n writer.tag(2, WireType.Varint).int32(message.time);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message ping\n */\nexport const ping = new ping$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass pong$Type extends MessageType {\n constructor() {\n super(\"pong\", [\n { no: 1, name: \"type\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"time\", kind: \"scalar\", T: 5 /*ScalarType.INT32*/ }\n ]);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.type = \"\";\n message.time = 0;\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string type */ 1:\n message.type = reader.string();\n break;\n case /* int32 time */ 2:\n message.time = reader.int32();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* string type = 1; */\n if (message.type !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.type);\n /* int32 time = 2; */\n if (message.time !== 0)\n writer.tag(2, WireType.Varint).int32(message.time);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message pong\n */\nexport const pong = new pong$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass streamerDisconnected$Type extends MessageType {\n constructor() {\n super(\"streamerDisconnected\", [\n { no: 1, name: \"type\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.type = \"\";\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string type */ 1:\n message.type = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* string type = 1; */\n if (message.type !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.type);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message streamerDisconnected\n */\nexport const streamerDisconnected = new streamerDisconnected$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass layerPreference$Type extends MessageType {\n constructor() {\n super(\"layerPreference\", [\n { no: 1, name: \"type\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"spatialLayer\", kind: \"scalar\", T: 5 /*ScalarType.INT32*/ },\n { no: 3, name: \"temporalLayer\", kind: \"scalar\", T: 5 /*ScalarType.INT32*/ },\n { no: 4, name: \"playerId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.type = \"\";\n message.spatialLayer = 0;\n message.temporalLayer = 0;\n message.playerId = \"\";\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string type */ 1:\n message.type = reader.string();\n break;\n case /* int32 spatialLayer */ 2:\n message.spatialLayer = reader.int32();\n break;\n case /* int32 temporalLayer */ 3:\n message.temporalLayer = reader.int32();\n break;\n case /* string playerId */ 4:\n message.playerId = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* string type = 1; */\n if (message.type !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.type);\n /* int32 spatialLayer = 2; */\n if (message.spatialLayer !== 0)\n writer.tag(2, WireType.Varint).int32(message.spatialLayer);\n /* int32 temporalLayer = 3; */\n if (message.temporalLayer !== 0)\n writer.tag(3, WireType.Varint).int32(message.temporalLayer);\n /* string playerId = 4; */\n if (message.playerId !== \"\")\n writer.tag(4, WireType.LengthDelimited).string(message.playerId);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message layerPreference\n */\nexport const layerPreference = new layerPreference$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass dataChannelRequest$Type extends MessageType {\n constructor() {\n super(\"dataChannelRequest\", [\n { no: 1, name: \"type\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.type = \"\";\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string type */ 1:\n message.type = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* string type = 1; */\n if (message.type !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.type);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message dataChannelRequest\n */\nexport const dataChannelRequest = new dataChannelRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass peerDataChannels$Type extends MessageType {\n constructor() {\n super(\"peerDataChannels\", [\n { no: 1, name: \"type\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"playerId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 3, name: \"sendStreamId\", kind: \"scalar\", T: 5 /*ScalarType.INT32*/ },\n { no: 4, name: \"recvStreamId\", kind: \"scalar\", T: 5 /*ScalarType.INT32*/ }\n ]);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.type = \"\";\n message.playerId = \"\";\n message.sendStreamId = 0;\n message.recvStreamId = 0;\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string type */ 1:\n message.type = reader.string();\n break;\n case /* string playerId */ 2:\n message.playerId = reader.string();\n break;\n case /* int32 sendStreamId */ 3:\n message.sendStreamId = reader.int32();\n break;\n case /* int32 recvStreamId */ 4:\n message.recvStreamId = reader.int32();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* string type = 1; */\n if (message.type !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.type);\n /* string playerId = 2; */\n if (message.playerId !== \"\")\n writer.tag(2, WireType.LengthDelimited).string(message.playerId);\n /* int32 sendStreamId = 3; */\n if (message.sendStreamId !== 0)\n writer.tag(3, WireType.Varint).int32(message.sendStreamId);\n /* int32 recvStreamId = 4; */\n if (message.recvStreamId !== 0)\n writer.tag(4, WireType.Varint).int32(message.recvStreamId);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message peerDataChannels\n */\nexport const peerDataChannels = new peerDataChannels$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass peerDataChannelsReady$Type extends MessageType {\n constructor() {\n super(\"peerDataChannelsReady\", [\n { no: 1, name: \"type\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.type = \"\";\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string type */ 1:\n message.type = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* string type = 1; */\n if (message.type !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.type);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message peerDataChannelsReady\n */\nexport const peerDataChannelsReady = new peerDataChannelsReady$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass streamerDataChannels$Type extends MessageType {\n constructor() {\n super(\"streamerDataChannels\", [\n { no: 1, name: \"type\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"sfuId\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 3, name: \"sendStreamId\", kind: \"scalar\", T: 5 /*ScalarType.INT32*/ },\n { no: 4, name: \"recvStreamId\", kind: \"scalar\", T: 5 /*ScalarType.INT32*/ }\n ]);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.type = \"\";\n message.sfuId = \"\";\n message.sendStreamId = 0;\n message.recvStreamId = 0;\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string type */ 1:\n message.type = reader.string();\n break;\n case /* string sfuId */ 2:\n message.sfuId = reader.string();\n break;\n case /* int32 sendStreamId */ 3:\n message.sendStreamId = reader.int32();\n break;\n case /* int32 recvStreamId */ 4:\n message.recvStreamId = reader.int32();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* string type = 1; */\n if (message.type !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.type);\n /* string sfuId = 2; */\n if (message.sfuId !== \"\")\n writer.tag(2, WireType.LengthDelimited).string(message.sfuId);\n /* int32 sendStreamId = 3; */\n if (message.sendStreamId !== 0)\n writer.tag(3, WireType.Varint).int32(message.sendStreamId);\n /* int32 recvStreamId = 4; */\n if (message.recvStreamId !== 0)\n writer.tag(4, WireType.Varint).int32(message.recvStreamId);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message streamerDataChannels\n */\nexport const streamerDataChannels = new streamerDataChannels$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass startStreaming$Type extends MessageType {\n constructor() {\n super(\"startStreaming\", [\n { no: 1, name: \"type\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.type = \"\";\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string type */ 1:\n message.type = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* string type = 1; */\n if (message.type !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.type);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message startStreaming\n */\nexport const startStreaming = new startStreaming$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass stopStreaming$Type extends MessageType {\n constructor() {\n super(\"stopStreaming\", [\n { no: 1, name: \"type\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.type = \"\";\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string type */ 1:\n message.type = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* string type = 1; */\n if (message.type !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.type);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message stopStreaming\n */\nexport const stopStreaming = new stopStreaming$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass playerCount$Type extends MessageType {\n constructor() {\n super(\"playerCount\", [\n { no: 1, name: \"type\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"count\", kind: \"scalar\", T: 5 /*ScalarType.INT32*/ }\n ]);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.type = \"\";\n message.count = 0;\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string type */ 1:\n message.type = reader.string();\n break;\n case /* int32 count */ 2:\n message.count = reader.int32();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* string type = 1; */\n if (message.type !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.type);\n /* int32 count = 2; */\n if (message.count !== 0)\n writer.tag(2, WireType.Varint).int32(message.count);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message playerCount\n */\nexport const playerCount = new playerCount$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass stats$Type extends MessageType {\n constructor() {\n super(\"stats\", [\n { no: 1, name: \"type\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"data\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value) {\n const message = globalThis.Object.create((this.messagePrototype));\n message.type = \"\";\n message.data = \"\";\n if (value !== undefined)\n reflectionMergePartial(this, message, value);\n return message;\n }\n internalBinaryRead(reader, length, options, target) {\n let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string type */ 1:\n message.type = reader.string();\n break;\n case /* string data */ 2:\n message.data = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message, writer, options) {\n /* string type = 1; */\n if (message.type !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.type);\n /* string data = 2; */\n if (message.data !== \"\")\n writer.tag(2, WireType.LengthDelimited).string(message.data);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message stats\n */\nexport const stats = new stats$Type();\n//# sourceMappingURL=signalling_messages.js.map","import { Logger } from '../Logger/Logger';\nimport { MessageRegistry } from './message_registry';\n/**\n * A helper for creating signalling messages. Takes in optional given parameters and\n * includes them in a message object with the 'type' field set properly for the message\n * type supplied.\n * @param messageType - A message type from MessageRegistry that indicates the type of message to create.\n * @param params - An optional object whose fields are added to the newly created message.\n * @returns The resulting message object.\n */\nexport function createMessage(messageType, params) {\n const message = messageType.create();\n message.type = messageType.typeName;\n if (params) {\n messageType.mergePartial(message, params);\n }\n return message;\n}\n/**\n * Tests that the supplied message is valid. That is contains all expected fields and\n * doesn't contain any unknown fields.\n * @param msg - The message object to test.\n * @returns The message type from MessageRegistry of the supplied message object if it's valid, or null if invalid.\n */\nexport function validateMessage(msg) {\n let valid = true;\n if (!msg.type) {\n Logger.Error(`Parsed message has no type. Rejected. ${JSON.stringify(msg)}`);\n return null;\n }\n const messageType = MessageRegistry[msg.type];\n if (!messageType) {\n Logger.Error(`Message is of an unknown type: \"${msg.type}\". Rejected.`);\n return null;\n }\n if (messageType.fields) {\n for (const field of messageType.fields) {\n if (!field.opt) {\n if (!Object.prototype.hasOwnProperty.call(msg, field.name)) {\n Logger.Error(`Message \"${msg.type}\"\" is missing required field \"${field.name}\". Rejected.`);\n valid = false;\n }\n }\n }\n }\n for (const fieldName in msg) {\n const found = messageType.fields.find((field) => field.name === fieldName);\n if (!found) {\n Logger.Error(`Message \"${msg.type}\" contains unknown field \"${fieldName}\". Rejected.`);\n valid = false;\n }\n }\n return valid ? messageType : null;\n}\n//# sourceMappingURL=message_helpers.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport * as Messages from '../Messages/signalling_messages';\nimport * as MessageHelpers from '../Messages/message_helpers';\n/**\n * Used to regularly ping a protocol connection to make sure the connection is still good and open.\n * When the pong doesn't come in response to a ping in time a callback is fired that can be handed\n * by the owner.\n */\nexport class KeepaliveMonitor {\n /**\n * Gets the Round Trip Time of the current connection in milliseconds.\n */\n get RTT() {\n return this.rtt;\n }\n /**\n * Creates a new monitor and starts the ping timer. If a pong does not come back by the time we want\n * to send a second ping then the connection is considered dead and the onTimeout callback is fired.\n * @param protocol - The connection that we want to monitor.\n * @param timeout - The time in milliseconds between ping messages.\n */\n constructor(protocol, timeout) {\n this.alive = false;\n this.rtt = 0;\n this.protocol = protocol;\n this.timeout = timeout;\n this.onResponse = this.onHeartbeatResponse.bind(this);\n this.protocol.transport.on('close', this.stop.bind(this));\n this.start();\n }\n start() {\n this.alive = true;\n this.protocol.on('pong', this.onResponse);\n this.keepalive = setInterval(this.sendHeartbeat.bind(this), this.timeout);\n }\n stop() {\n clearInterval(this.keepalive);\n this.protocol.off('pong', this.onResponse);\n }\n sendHeartbeat() {\n var _a;\n // if we never got a response from the last heartbeat, assume the connection is dead and timeout\n if (this.alive === false) {\n (_a = this.onTimeout) === null || _a === void 0 ? void 0 : _a.call(this);\n return;\n }\n // mark the connection as temporarily dead until we get a response from the ping\n this.alive = false;\n this.protocol.sendMessage(MessageHelpers.createMessage(Messages.ping, { time: new Date().getTime() }));\n }\n onHeartbeatResponse(pongMsg) {\n // we got a pong response from the other side, the connection is good.\n // we also store the round trip time if anyone is curious\n this.rtt = new Date().getTime() - pongMsg.time;\n this.alive = true;\n }\n}\n//# sourceMappingURL=KeepaliveMonitor.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nexport class SDPUtils {\n static addVideoHeaderExtensionToSdp(sdp, uri) {\n // Find the highest used header extension id by sorting the extension ids used,\n // eliminating duplicates and adding one.\n // Todo: Update this when WebRTC in Chrome supports the header extension API.\n const usedIds = sdp\n .split('\\n')\n .filter((line) => line.startsWith('a=extmap:'))\n .map((line) => parseInt(line.split(' ')[0].substring(9), 10))\n .sort((a, b) => a - b)\n .filter((item, index, array) => array.indexOf(item) === index);\n const nextId = usedIds[usedIds.length - 1] + 1;\n const extmapLine = 'a=extmap:' + nextId + ' ' + uri + '\\r\\n';\n const sections = sdp.split('\\nm=').map((part, index) => {\n return (index > 0 ? 'm=' + part : part).trim() + '\\r\\n';\n });\n const sessionPart = sections.shift();\n // Only add extension to m=video media section\n return (sessionPart +\n sections\n .map((mediaSection) => mediaSection.startsWith('m=video') ? mediaSection + extmapLine : mediaSection)\n .join(''));\n }\n}\n//# sourceMappingURL=SdpUtils.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';\n/**\n * Video Player Controller handles the creation of the video HTML element and all handlers\n */\nexport class StreamController {\n /**\n * @param videoElementProvider Video Player instance\n */\n constructor(videoElementProvider) {\n this.videoElementProvider = videoElementProvider;\n this.audioElement = document.createElement('Audio');\n this.videoElementProvider.setAudioElement(this.audioElement);\n }\n /**\n * Handles when the Peer connection has a track event\n * @param rtcTrackEvent - RTC Track Event\n */\n handleOnTrack(rtcTrackEvent) {\n Logger.Info('handleOnTrack ' + JSON.stringify(rtcTrackEvent.streams));\n // Do not add the track if the ID is `probator` as this is special track created by mediasoup for bitrate probing.\n // Refer to https://github.com/EpicGamesExt/PixelStreamingInfrastructure/pull/86 for more details.\n if (rtcTrackEvent.streams.length < 1 || rtcTrackEvent.streams[0].id == 'probator') {\n return;\n }\n const videoElement = this.videoElementProvider.getVideoElement();\n if (rtcTrackEvent.track) {\n Logger.Info('Got track - ' +\n rtcTrackEvent.track.kind +\n ' id=' +\n rtcTrackEvent.track.id +\n ' readyState=' +\n rtcTrackEvent.track.readyState);\n }\n if (rtcTrackEvent.track.kind == 'audio') {\n this.CreateAudioTrack(rtcTrackEvent.streams[0]);\n return;\n }\n else if (rtcTrackEvent.track.kind == 'video' &&\n videoElement.srcObject !== rtcTrackEvent.streams[0]) {\n videoElement.srcObject = rtcTrackEvent.streams[0];\n Logger.Info('Set video source from video track ontrack.');\n return;\n }\n }\n /**\n * Creates the audio device when receiving an RTCTrackEvent with the kind of \"audio\"\n * @param audioMediaStream - Audio Media stream track\n */\n CreateAudioTrack(audioMediaStream) {\n const videoElement = this.videoElementProvider.getVideoElement();\n // do nothing the video has the same media stream as the audio track we have here (they are linked)\n if (videoElement.srcObject == audioMediaStream) {\n return;\n }\n // video element has some other media stream that is not associated with this audio track\n else if (videoElement.srcObject && videoElement.srcObject !== audioMediaStream) {\n // create a new audio element\n this.audioElement.srcObject = audioMediaStream;\n Logger.Info('Created new audio element to play separate audio stream.');\n }\n }\n}\n//# sourceMappingURL=StreamController.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\n/**\n * A class for managing the freeze frame object\n */\nexport class FreezeFrame {\n /**\n * Construct a freeze frame\n * @param rootDiv the div that a freeze frame element will be injected into\n */\n constructor(rootDiv) {\n this.freezeFrameHeight = 0;\n this.freezeFrameWidth = 0;\n this.rootDiv = rootDiv;\n // create the overlay\n this.rootElement = document.createElement('div');\n this.rootElement.id = 'freezeFrame';\n this.rootElement.style.display = 'none';\n this.rootElement.style.pointerEvents = 'none';\n this.rootElement.style.position = 'absolute';\n this.rootElement.style.zIndex = '20';\n // create the image place holder\n this.imageElement = document.createElement('img');\n this.imageElement.style.position = 'absolute';\n // append the image into the root element and append the element to the root div\n this.rootElement.appendChild(this.imageElement);\n this.rootDiv.appendChild(this.rootElement);\n }\n /**\n * Set the freeze frame element for showing\n */\n setElementForShow() {\n this.rootElement.style.display = 'block';\n }\n /**\n * Set the freeze frame element for hiding\n */\n setElementForHide() {\n this.rootElement.style.display = 'none';\n }\n /**\n * Update the freeze frames image source\n * @param jpeg - the freeze frame image as a byte array data\n */\n updateImageElementSource(jpeg) {\n const base64 = btoa(jpeg.reduce((data, byte) => data + String.fromCharCode(byte), ''));\n this.imageElement.src = 'data:image/jpeg;base64,' + base64;\n }\n /**\n * Set the dimensions for the freeze frame from the element and resize it\n */\n setDimensionsFromElementAndResize() {\n this.freezeFrameHeight = this.imageElement.naturalHeight;\n this.freezeFrameWidth = this.imageElement.naturalWidth;\n this.resize();\n }\n /**\n * Resize a freeze frame element\n */\n resize() {\n if (this.freezeFrameWidth !== 0 && this.freezeFrameHeight !== 0) {\n let displayWidth = 0;\n let displayHeight = 0;\n let displayTop = 0;\n let displayLeft = 0;\n const parentAspectRatio = this.rootDiv.clientWidth / this.rootDiv.clientHeight;\n const videoAspectRatio = this.freezeFrameWidth / this.freezeFrameHeight;\n if (parentAspectRatio < videoAspectRatio) {\n displayWidth = this.rootDiv.clientWidth;\n displayHeight = Math.floor(this.rootDiv.clientWidth / videoAspectRatio);\n displayTop = Math.floor((this.rootDiv.clientHeight - displayHeight) * 0.5);\n displayLeft = 0;\n }\n else {\n displayWidth = Math.floor(this.rootDiv.clientHeight * videoAspectRatio);\n displayHeight = this.rootDiv.clientHeight;\n displayTop = 0;\n displayLeft = Math.floor((this.rootDiv.clientWidth - displayWidth) * 0.5);\n }\n this.rootElement.style.width = this.rootDiv.offsetWidth + 'px';\n this.rootElement.style.height = this.rootDiv.offsetHeight + 'px';\n this.rootElement.style.left = 0 + 'px';\n this.rootElement.style.top = 0 + 'px';\n this.imageElement.style.width = displayWidth + 'px';\n this.imageElement.style.height = displayHeight + 'px';\n this.imageElement.style.left = displayLeft + 'px';\n this.imageElement.style.top = displayTop + 'px';\n }\n }\n}\n//# sourceMappingURL=FreezeFrame.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';\nimport { FreezeFrame } from './FreezeFrame';\n/**\n * A class for controlling freeze frame functionality\n */\nexport class FreezeFrameController {\n /**\n * Construct a freeze frame controller\n * @param rootDiv - the div that a freeze frame element will be injected into\n */\n constructor(rootDiv) {\n this.receiving = false;\n this.size = 0;\n this.jpeg = undefined;\n this.valid = false;\n this.freezeFrameDelay = 50;\n this.freezeFrame = new FreezeFrame(rootDiv);\n }\n /**\n * Show the freeze frame if it is valid\n */\n showFreezeFrame() {\n if (this.valid) {\n this.freezeFrame.setElementForShow();\n }\n }\n /**\n * Hide the freeze frame and set the validity to false\n */\n hideFreezeFrame() {\n this.valid = false;\n this.freezeFrame.setElementForHide();\n }\n /**\n * Update the freeze frames image source and load it\n * @param jpeg - the freeze frame image as a byte array data\n * @param onLoadCallBack - a call back for managing if the play overlay needs to be shown or not\n */\n updateFreezeFrameAndShow(jpeg, onLoadCallBack) {\n this.freezeFrame.updateImageElementSource(jpeg);\n this.freezeFrame.imageElement.onload = () => {\n this.freezeFrame.setDimensionsFromElementAndResize();\n onLoadCallBack();\n };\n }\n /**\n * Process the new freeze frame image and update it\n * @param view - the freeze frame image as a byte array data\n * @param onLoadCallBack - a call back for managing if the play overlay needs to be shown or not\n */\n processFreezeFrameMessage(view, onLoadCallBack) {\n // Reset freeze frame if we got a freeze frame message and we are not \"receiving\" yet.\n if (!this.receiving) {\n this.receiving = true;\n this.valid = false;\n this.size = 0;\n this.jpeg = undefined;\n }\n // Extract total size of freeze frame (across all chunks)\n this.size = new DataView(view.slice(1, 5).buffer).getInt32(0, true);\n // Get the jpeg part of the payload\n const jpegBytes = view.slice(1 + 4);\n // Append to existing jpeg that holds the freeze frame\n if (this.jpeg) {\n const jpeg = new Uint8Array(this.jpeg.length + jpegBytes.length);\n jpeg.set(this.jpeg, 0);\n jpeg.set(jpegBytes, this.jpeg.length);\n this.jpeg = jpeg;\n }\n // No existing freeze frame jpeg, make one\n else {\n this.jpeg = jpegBytes;\n this.receiving = true;\n Logger.Info(`received first chunk of freeze frame: ${this.jpeg.length}/${this.size}`);\n }\n // Finished receiving freeze frame, we can show it now\n if (this.jpeg.length === this.size) {\n this.receiving = false;\n this.valid = true;\n Logger.Info(`received complete freeze frame ${this.size}`);\n this.updateFreezeFrameAndShow(this.jpeg, onLoadCallBack);\n }\n // We received more data than the freeze frame payload message indicate (this is an error)\n else if (this.jpeg.length > this.size) {\n Logger.Error(`received bigger freeze frame than advertised: ${this.jpeg.length}/${this.size}`);\n this.jpeg = undefined;\n this.receiving = false;\n }\n }\n}\n//# sourceMappingURL=FreezeFrameController.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\n/**\n * Base class for a setting that has a text label and an arbitrary setting value it stores.\n */\nexport class SettingBase {\n constructor(id, label, description, defaultSettingValue, defaultOnChangeListener = () => {\n /* Do nothing, to be overridden. */\n }) {\n this.parseURLParams();\n this.onChange = defaultOnChangeListener;\n this.onChangeEmit = () => {\n /* Do nothing, to be overridden. */\n };\n this.id = id;\n this.description = description;\n this.label = label;\n this.value = defaultSettingValue;\n }\n /**\n * Set the label text for the setting.\n * @param label setting label.\n */\n set label(inLabel) {\n this._label = inLabel;\n this.onChangeEmit(this._value);\n }\n /**\n * @returns The label text for the setting.\n */\n get label() {\n return this._label;\n }\n /**\n * @return The setting's value.\n */\n get value() {\n return this._value;\n }\n /**\n * Update the setting's stored value.\n * @param inValue The new value for the setting.\n */\n set value(inValue) {\n this._value = inValue;\n this.onChange(this._value, this);\n this.onChangeEmit(this._value);\n }\n /**\n * Persist the setting value in URL.\n */\n updateURLParams() {\n if (this.useUrlParams) {\n // set url params\n const urlParams = new URLSearchParams(window.location.search);\n const valueString = this.getValueAsString();\n let set = false;\n for (const [name, _value] of urlParams) {\n if (name.toLowerCase() == this.id.toLowerCase()) {\n urlParams.set(name, valueString);\n set = true;\n break;\n }\n }\n if (!set) {\n urlParams.set(this.id, valueString);\n }\n window.history.replaceState({}, '', urlParams.toString() !== '' ? `${location.pathname}?${urlParams}` : `${location.pathname}`);\n }\n }\n /**\n * Allows sub types to provide their value for the url search params.\n */\n getValueAsString() {\n return '';\n }\n parseURLParams() {\n this._urlParams = {};\n const params = new URLSearchParams(window.location.search);\n for (const [name, value] of params) {\n this._urlParams[name.toLowerCase()] = value;\n }\n }\n hasURLParam(name) {\n return name.toLowerCase() in this._urlParams;\n }\n getURLParam(name) {\n if (this.hasURLParam(name)) {\n return this._urlParams[name.toLowerCase()];\n }\n return '';\n }\n}\n//# sourceMappingURL=SettingBase.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport { SettingBase } from './SettingBase';\n/**\n * A boolean flag setting object with a text label.\n */\nexport class SettingFlag extends SettingBase {\n constructor(id, label, description, defaultFlagValue, useUrlParams, defaultOnChangeListener = () => {\n /* Do nothing, to be overridden. */\n }) {\n super(id, label, description, defaultFlagValue, defaultOnChangeListener);\n if (!useUrlParams || !this.hasURLParam(this.id)) {\n this.flag = defaultFlagValue;\n }\n else {\n // parse flag from url parameters\n const urlParamFlag = this.getURLParam(this.id);\n this.flag = urlParamFlag.toLowerCase() != 'false';\n }\n this.useUrlParams = useUrlParams;\n }\n getValueAsString() {\n return this.flag ? 'true' : 'false';\n }\n /**\n * Enables this flag.\n */\n enable() {\n this.flag = true;\n }\n /**\n * @return The setting's value.\n */\n get flag() {\n return !!this.value;\n }\n /**\n * Update the setting's stored value.\n * @param inValue The new value for the setting.\n */\n set flag(inValue) {\n this.value = inValue;\n }\n}\n//# sourceMappingURL=SettingFlag.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport { SettingBase } from './SettingBase';\n/**\n * A number setting object with a text label. Min and max limit the range of allowed values.\n */\nexport class SettingNumber extends SettingBase {\n constructor(id, label, description, min, max, defaultNumber, useUrlParams, defaultOnChangeListener = () => {\n /* Do nothing, to be overridden. */\n }) {\n super(id, label, description, defaultNumber, defaultOnChangeListener);\n this._min = min;\n this._max = max;\n // attempt to read the number from the url params\n if (!useUrlParams || !this.hasURLParam(this.id)) {\n this.number = defaultNumber;\n }\n else {\n const parsedValue = Number.parseFloat(this.getURLParam(this.id));\n this.number = Number.isNaN(parsedValue) ? defaultNumber : parsedValue;\n }\n this.useUrlParams = useUrlParams;\n }\n getValueAsString() {\n return this.number.toString();\n }\n /**\n * Set the number value (will be clamped within range).\n */\n set number(newNumber) {\n this.value = this.clamp(newNumber);\n }\n /**\n * @returns The number stored.\n */\n get number() {\n return this.value;\n }\n /**\n * Clamps a number between the min and max values (inclusive).\n * @param inNumber The number to clamp.\n * @returns The clamped number.\n */\n clamp(inNumber) {\n if (this._min == null && this._max == null) {\n return inNumber;\n }\n else if (this._min == null) {\n return Math.min(this._max, inNumber);\n }\n else if (this._max == null) {\n return Math.max(this._min, inNumber);\n }\n else {\n return Math.max(Math.min(this._max, inNumber), this._min);\n }\n }\n /**\n * Returns the minimum value\n * @returns The minimum value\n */\n get min() {\n return this._min;\n }\n /**\n * Returns the maximum value\n * @returns The maximum value\n */\n get max() {\n return this._max;\n }\n /**\n * Add a change listener to the number object.\n */\n addOnChangedListener(onChangedFunc) {\n this.onChange = onChangedFunc;\n }\n}\n//# sourceMappingURL=SettingNumber.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport { SettingBase } from './SettingBase';\n/**\n * A text setting object with a text label.\n */\nexport class SettingText extends SettingBase {\n constructor(id, label, description, defaultTextValue, useUrlParams, defaultOnChangeListener = () => {\n /* Do nothing, to be overridden. */\n }) {\n super(id, label, description, defaultTextValue, defaultOnChangeListener);\n if (!useUrlParams || !this.hasURLParam(this.id)) {\n this.text = defaultTextValue;\n }\n else {\n // parse flag from url parameters\n this.text = this.getURLParam(this.id);\n }\n this.useUrlParams = useUrlParams;\n }\n getValueAsString() {\n return this.text;\n }\n /**\n * @return The setting's value.\n */\n get text() {\n return this.value;\n }\n /**\n * Update the setting's stored value.\n * @param inValue The new value for the setting.\n */\n set text(inValue) {\n this.value = inValue;\n }\n}\n//# sourceMappingURL=SettingText.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';\nimport { SettingBase } from './SettingBase';\n/**\n * An Option setting object with a text label. Allows you to specify an array of options and select one of them.\n */\nexport class SettingOption extends SettingBase {\n constructor(id, label, description, defaultTextValue, options, useUrlParams, defaultUrlParamResolver = function (value) {\n /* Return the string as-is by default */\n return value;\n }, defaultOnChangeListener = () => {\n /* Do nothing, to be overridden. */\n }) {\n super(id, label, description, defaultTextValue, defaultOnChangeListener);\n this._urlParamResolver = defaultUrlParamResolver;\n const stringToMatch = this.hasURLParam(this.id)\n ? this._urlParamResolver(this.getURLParam(this.id))\n : defaultTextValue;\n this.options = options !== null && options !== void 0 ? options : [stringToMatch];\n this.selected = stringToMatch;\n this.useUrlParams = useUrlParams;\n }\n getValueAsString() {\n return this.selected;\n }\n /**\n * Add a change listener to the select element.\n */\n addOnChangedListener(onChangedFunc) {\n this.onChange = onChangedFunc;\n }\n /**\n * @returns All available options as an array\n */\n get options() {\n return this._options;\n }\n /**\n * Set options\n * @param values Array of options\n */\n set options(values) {\n this._options = values;\n this.onChangeEmit(this.selected);\n }\n /**\n * @returns Selected option as a string\n */\n get selected() {\n return this.value;\n }\n /**\n * Set selected option if it matches one of the available options\n * @param value Selected option\n */\n set selected(value) {\n if (value === undefined) {\n return;\n }\n // If options contains the value, then set that as selected\n if (this.options.includes(value)) {\n this.value = value;\n }\n else {\n Logger.Error(`Could not set \"${value}\" as the selected option for ${this.id} because it wasn't one of the options.`);\n }\n }\n /**\n * Set the url parameter resolver to do some transformation to the string value\n * that is extracted from the url parameters.\n * @param urlParam A function that transforms the extracted url parameter string for this setting to something else.\n */\n set urlParamResolver(value) {\n this._urlParamResolver = value;\n }\n}\n//# sourceMappingURL=SettingOption.js.map","/**\n * An event that is emitted when AFK disconnect is about to happen.\n * Can be cancelled by calling the callback function provided as part of the event.\n */\nexport class AfkWarningActivateEvent extends Event {\n constructor(data) {\n super('afkWarningActivate');\n this.data = data;\n }\n}\n/**\n * An event that is emitted when the AFK disconnect countdown is updated.\n */\nexport class AfkWarningUpdateEvent extends Event {\n constructor(data) {\n super('afkWarningUpdate');\n this.data = data;\n }\n}\n/**\n * An event that is emitted when AFK warning is deactivated.\n */\nexport class AfkWarningDeactivateEvent extends Event {\n constructor() {\n super('afkWarningDeactivate');\n }\n}\n/**\n * An event that is emitted when AFK countdown reaches 0 and the user is disconnected.\n */\nexport class AfkTimedOutEvent extends Event {\n constructor() {\n super('afkTimedOut');\n }\n}\n/**\n * An event that is emitted when we receive new video quality value.\n */\nexport class VideoEncoderAvgQPEvent extends Event {\n constructor(data) {\n super('videoEncoderAvgQP');\n this.data = data;\n }\n}\n/**\n * An event that is emitted after a WebRtc connection has been negotiated.\n */\nexport class WebRtcSdpEvent extends Event {\n constructor() {\n super('webRtcSdp');\n }\n}\n/**\n * An event that is emitted after the SDP answer is set.\n */\nexport class WebRtcSdpAnswerEvent extends Event {\n constructor(data) {\n super('webRtcSdpAnswer');\n this.data = data;\n }\n}\n/**\n * An event that is emitted after the SDP offer is set.\n */\nexport class WebRtcSdpOfferEvent extends Event {\n constructor(data) {\n super('webRtcSdpOffer');\n this.data = data;\n }\n}\n/**\n * An event that is emitted when auto connecting.\n */\nexport class WebRtcAutoConnectEvent extends Event {\n constructor() {\n super('webRtcAutoConnect');\n }\n}\n/**\n * An event that is emitted when sending a WebRtc offer.\n */\nexport class WebRtcConnectingEvent extends Event {\n constructor() {\n super('webRtcConnecting');\n }\n}\n/**\n * An event that is emitted when WebRtc connection has been established.\n */\nexport class WebRtcConnectedEvent extends Event {\n constructor() {\n super('webRtcConnected');\n }\n}\n/**\n * An event that is emitted if WebRtc connection has failed.\n */\nexport class WebRtcFailedEvent extends Event {\n constructor() {\n super('webRtcFailed');\n }\n}\n/**\n * An event that is emitted if WebRtc connection is disconnected.\n */\nexport class WebRtcDisconnectedEvent extends Event {\n constructor(data) {\n super('webRtcDisconnected');\n this.data = data;\n }\n}\n/**\n * An event that is emitted when RTCDataChannel is opened.\n */\nexport class DataChannelOpenEvent extends Event {\n constructor(data) {\n super('dataChannelOpen');\n this.data = data;\n }\n}\n/**\n * An event that is emitted when RTCDataChannel is closed.\n */\nexport class DataChannelCloseEvent extends Event {\n constructor(data) {\n super('dataChannelClose');\n this.data = data;\n }\n}\n/**\n * An event that is emitted on RTCDataChannel errors.\n */\nexport class DataChannelErrorEvent extends Event {\n constructor(data) {\n super('dataChannelError');\n this.data = data;\n }\n}\n/**\n * An event that is emitted when the video stream has been initialized.\n */\nexport class VideoInitializedEvent extends Event {\n constructor() {\n super('videoInitialized');\n }\n}\n/**\n * An event that is emitted when video stream loading starts.\n */\nexport class StreamLoadingEvent extends Event {\n constructor() {\n super('streamLoading');\n }\n}\n/**\n * An event that is emitted when video stream loading has finished.\n */\nexport class StreamPreConnectEvent extends Event {\n constructor() {\n super('streamConnect');\n }\n}\n/**\n * An event that is emitted when video stream has stopped.\n */\nexport class StreamPreDisconnectEvent extends Event {\n constructor() {\n super('streamDisconnect');\n }\n}\n/**\n * An event that is emitted when video stream is reconnecting.\n */\nexport class StreamReconnectEvent extends Event {\n constructor() {\n super('streamReconnect');\n }\n}\n/**\n * An event that is emitted if there are errors loading the video stream.\n */\nexport class PlayStreamErrorEvent extends Event {\n constructor(data) {\n super('playStreamError');\n this.data = data;\n }\n}\n/**\n * An event that is emitted before trying to start video playback.\n */\nexport class PlayStreamEvent extends Event {\n constructor() {\n super('playStream');\n }\n}\n/**\n * An event that is emitted if the browser rejects video playback. Can happen for example if\n * video auto-play without user interaction is refused by the browser.\n */\nexport class PlayStreamRejectedEvent extends Event {\n constructor(data) {\n super('playStreamRejected');\n this.data = data;\n }\n}\n/**\n * An event that is emitted when receiving a full FreezeFrame image from UE.\n */\nexport class LoadFreezeFrameEvent extends Event {\n constructor(data) {\n super('loadFreezeFrame');\n this.data = data;\n }\n}\n/**\n * An event that is emitted when receiving UnfreezeFrame message from UE and video playback is about to be resumed.\n */\nexport class HideFreezeFrameEvent extends Event {\n constructor() {\n super('hideFreezeFrame');\n }\n}\n/**\n * An event that is emitted when receiving WebRTC statistics.\n */\nexport class StatsReceivedEvent extends Event {\n constructor(data) {\n super('statsReceived');\n this.data = data;\n }\n}\n/**\n * An event that is emitted when streamer list changes.\n */\nexport class StreamerListMessageEvent extends Event {\n constructor(data) {\n super('streamerListMessage');\n this.data = data;\n }\n}\n/**\n * An event that is emitted when a subscribed to streamer's id changes.\n */\nexport class StreamerIDChangedMessageEvent extends Event {\n constructor(data) {\n super('StreamerIDChangedMessage');\n this.data = data;\n }\n}\n/**\n * An event that is emitted when receiving latency test results.\n */\nexport class LatencyTestResultEvent extends Event {\n constructor(data) {\n super('latencyTestResult');\n this.data = data;\n }\n}\n/**\n * An event that is emitted everytime latency is calculated using the WebRTC stats API.\n */\nexport class LatencyCalculatedEvent extends Event {\n constructor(data) {\n super('latencyCalculated');\n this.data = data;\n }\n}\n/**\n * An event that is emitted when we receive the \"onScreenKeyboard\" command from UE.\n */\nexport class ShowOnScreenKeyboardEvent extends Event {\n constructor(data) {\n super('showOnScreenKeyboard');\n this.data = data;\n }\n}\n/**\n * An event that is emitted when receiving data channel latency test response from server.\n * This event is handled by DataChannelLatencyTestController\n */\nexport class DataChannelLatencyTestResponseEvent extends Event {\n constructor(data) {\n super('dataChannelLatencyTestResponse');\n this.data = data;\n }\n}\n/**\n * An event that is emitted when data channel latency test results are ready.\n */\nexport class DataChannelLatencyTestResultEvent extends Event {\n constructor(data) {\n super('dataChannelLatencyTestResult');\n this.data = data;\n }\n}\nexport class SubscribeFailedEvent extends Event {\n constructor(data) {\n super('subscribeFailed');\n this.data = data;\n }\n}\n/**\n * An event that is emitted when receiving initial settings from UE.\n */\nexport class InitialSettingsEvent extends Event {\n constructor(data) {\n super('initialSettings');\n this.data = data;\n }\n}\n/**\n * An event that is emitted when PixelStreaming settings change.\n */\nexport class SettingsChangedEvent extends Event {\n constructor(data) {\n super('settingsChanged');\n this.data = data;\n }\n}\n/**\n * Event emitted when an XR Session starts\n */\nexport class XrSessionStartedEvent extends Event {\n constructor() {\n super('xrSessionStarted');\n }\n}\n/**\n * Event emitted when an XR Session ends\n */\nexport class XrSessionEndedEvent extends Event {\n constructor() {\n super('xrSessionEnded');\n }\n}\n/**\n * Event emitted when an XR Frame is complete\n */\nexport class XrFrameEvent extends Event {\n constructor(data) {\n super('xrFrame');\n this.data = data;\n }\n}\n/**\n * An event that is emitted when receiving a player count from the signalling server\n */\nexport class PlayerCountEvent extends Event {\n constructor(data) {\n super('playerCount');\n this.data = data;\n }\n}\n/**\n * An event that is emitted when the webRTC connections is relayed over TCP.\n */\nexport class WebRtcTCPRelayDetectedEvent extends Event {\n constructor() {\n super('webRtcTCPRelayDetected');\n }\n}\nexport class PixelStreamingEventEmitter extends EventTarget {\n /**\n * Dispatch a new event.\n * @param e event\n * @returns\n */\n dispatchEvent(e) {\n return super.dispatchEvent(e);\n }\n /**\n * Register an event handler.\n * @param type event name\n * @param listener event handler function\n */\n addEventListener(type, listener) {\n super.addEventListener(type, listener);\n }\n /**\n * Remove an event handler.\n * @param type event name\n * @param listener event handler function\n */\n removeEventListener(type, listener) {\n super.removeEventListener(type, listener);\n }\n}\n//# sourceMappingURL=EventEmitter.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';\nexport class BrowserUtils {\n static getSupportedVideoCodecs() {\n const browserSupportedCodecs = [];\n // Try get the info needed from the RTCRtpReceiver. This is only available on chrome\n if (!RTCRtpReceiver.getCapabilities) {\n Logger.Warning('RTCRtpReceiver.getCapabilities API is not available in your browser, defaulting to guess that we support H.264.');\n browserSupportedCodecs.push('H264 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f');\n return browserSupportedCodecs;\n }\n const matcher = /(VP\\d|H26\\d|AV1).*/;\n const capabilities = RTCRtpReceiver.getCapabilities('video');\n if (!capabilities) {\n browserSupportedCodecs.push('H264 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f');\n return browserSupportedCodecs;\n }\n capabilities.codecs.forEach((codec) => {\n const str = codec.mimeType.split('/')[1] + ' ' + (codec.sdpFmtpLine || '');\n const match = matcher.exec(str);\n if (match !== null) {\n browserSupportedCodecs.push(str);\n }\n });\n return browserSupportedCodecs;\n }\n}\n//# sourceMappingURL=BrowserUtils.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';\nimport { SettingFlag } from './SettingFlag';\nimport { SettingNumber } from './SettingNumber';\nimport { SettingText } from './SettingText';\nimport { SettingOption } from './SettingOption';\nimport { SettingsChangedEvent } from '../Util/EventEmitter';\nimport { BrowserUtils } from '../Util/BrowserUtils';\n/**\n * A collection of flags that can be toggled and are core to all Pixel Streaming experiences.\n * These are used in the `Config.Flags` map.\n */\nexport class Flags {\n}\nFlags.AutoConnect = 'AutoConnect';\nFlags.AutoPlayVideo = 'AutoPlayVideo';\nFlags.AFKDetection = 'TimeoutIfIdle';\nFlags.HoveringMouseMode = 'HoveringMouse';\nFlags.ForceMonoAudio = 'ForceMonoAudio';\nFlags.ForceTURN = 'ForceTURN';\nFlags.FakeMouseWithTouches = 'FakeMouseWithTouches';\nFlags.IsQualityController = 'ControlsQuality';\nFlags.MatchViewportResolution = 'MatchViewportRes';\nFlags.StartVideoMuted = 'StartVideoMuted';\nFlags.SuppressBrowserKeys = 'SuppressBrowserKeys';\nFlags.UseMic = 'UseMic';\nFlags.UseModalForTextInput = 'UseModalForTextInput';\nFlags.UseCamera = 'UseCamera';\nFlags.KeyboardInput = 'KeyboardInput';\nFlags.MouseInput = 'MouseInput';\nFlags.TouchInput = 'TouchInput';\nFlags.GamepadInput = 'GamepadInput';\nFlags.XRControllerInput = 'XRControllerInput';\nFlags.WaitForStreamer = 'WaitForStreamer';\nFlags.HideUI = 'HideUI';\nFlags.EnableCaptureTimeExt = 'EnableCaptureTimeExt';\nexport const isFlagId = (id) => Object.getOwnPropertyNames(Flags).some((name) => Flags[name] === id);\n/**\n * A collection of numeric parameters that are core to all Pixel Streaming experiences.\n *\n */\nexport class NumericParameters {\n}\nNumericParameters.AFKTimeoutSecs = 'AFKTimeout';\nNumericParameters.AFKCountdownSecs = 'AFKCountdown';\nNumericParameters.MinQP = 'MinQP';\nNumericParameters.MaxQP = 'MaxQP';\nNumericParameters.MinQuality = 'MinQuality';\nNumericParameters.MaxQuality = 'MaxQuality';\nNumericParameters.CompatQualityMin = 'CompatQualityMin';\nNumericParameters.CompatQualityMax = 'CompatQualityMax';\nNumericParameters.WebRTCFPS = 'WebRTCFPS';\nNumericParameters.WebRTCMinBitrate = 'WebRTCMinBitrate';\nNumericParameters.WebRTCMaxBitrate = 'WebRTCMaxBitrate';\nNumericParameters.MaxReconnectAttempts = 'MaxReconnectAttempts';\nNumericParameters.StreamerAutoJoinInterval = 'StreamerAutoJoinInterval';\nNumericParameters.KeepaliveDelay = 'KeepaliveDelay';\nexport const isNumericId = (id) => Object.getOwnPropertyNames(NumericParameters).some((name) => NumericParameters[name] === id);\n/**\n * A collection of textual parameters that are core to all Pixel Streaming experiences.\n *\n */\nexport class TextParameters {\n}\nTextParameters.SignallingServerUrl = 'ss';\nexport const isTextId = (id) => Object.getOwnPropertyNames(TextParameters).some((name) => TextParameters[name] === id);\n/**\n * A collection of enum based parameters that are core to all Pixel Streaming experiences.\n *\n */\nexport class OptionParameters {\n}\nOptionParameters.PreferredCodec = 'PreferredCodec';\nOptionParameters.StreamerId = 'StreamerId';\nOptionParameters.PreferredQuality = 'PreferredQuality';\nexport const isOptionId = (id) => Object.getOwnPropertyNames(OptionParameters).some((name) => OptionParameters[name] === id);\nexport class Config {\n // ------------ Settings -----------------\n constructor(config = {}) {\n /* A map of flags that can be toggled - options that can be set in the application - e.g. Use Mic? */\n this.flags = new Map();\n /* A map of numerical settings - options that can be in the application - e.g. MinBitrate */\n this.numericParameters = new Map();\n /* A map of text settings - e.g. signalling server url */\n this.textParameters = new Map();\n /* A map of enum based settings - e.g. preferred codec */\n this.optionParameters = new Map();\n const { initialSettings, useUrlParams, webSocketProtocols } = config;\n this._useUrlParams = !!useUrlParams;\n this._webSocketProtocols = webSocketProtocols;\n this.populateDefaultSettings(this._useUrlParams, initialSettings);\n }\n /**\n * True if reading configuration initial values from URL parameters, and\n * persisting changes in URL when changed.\n */\n get useUrlParams() {\n return this._useUrlParams;\n }\n /**\n * Gets a protocol or list of protocols to pass to the websocket if set.\n */\n get webSocketProtocols() {\n return this._webSocketProtocols;\n }\n /**\n * Populate the default settings for a Pixel Streaming application\n */\n populateDefaultSettings(useUrlParams, settings) {\n /**\n * Text Parameters\n */\n this.textParameters.set(TextParameters.SignallingServerUrl, new SettingText(TextParameters.SignallingServerUrl, 'Signalling url', 'Url of the signalling server', settings && Object.prototype.hasOwnProperty.call(settings, TextParameters.SignallingServerUrl)\n ? settings[TextParameters.SignallingServerUrl]\n : (location.protocol === 'https:' ? 'wss://' : 'ws://') +\n window.location.hostname +\n // for readability, we omit the port if it's 80\n (window.location.port === '80' || window.location.port === ''\n ? ''\n : `:${window.location.port}`), useUrlParams));\n this.optionParameters.set(OptionParameters.StreamerId, new SettingOption(OptionParameters.StreamerId, 'Streamer ID', 'The ID of the streamer to stream.', settings && Object.prototype.hasOwnProperty.call(settings, OptionParameters.StreamerId)\n ? settings[OptionParameters.StreamerId]\n : '', settings && Object.prototype.hasOwnProperty.call(settings, OptionParameters.StreamerId)\n ? [settings[OptionParameters.StreamerId]]\n : undefined, useUrlParams));\n const getDefaultVideoCodec = function () {\n const videoCodecs = BrowserUtils.getSupportedVideoCodecs();\n // If only one option, then select that.\n if (videoCodecs.length == 1) {\n return videoCodecs[0];\n }\n else if (videoCodecs.length > 0) {\n const defaultCodec = videoCodecs[0];\n for (const codec of videoCodecs) {\n if (codec.startsWith('H264')) {\n return codec;\n }\n }\n return defaultCodec;\n }\n Logger.Error('Could not find any reasonable video codec to assign as a default.');\n return '';\n };\n const matchSpecifiedCodecToClosestSupported = function (specifiedCodec) {\n const browserSupportedCodecs = BrowserUtils.getSupportedVideoCodecs();\n // Codec supplied in url param is an exact match for the browser codec.\n // (e.g. H264 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f)\n if (browserSupportedCodecs.includes(specifiedCodec)) {\n return specifiedCodec;\n }\n // Try to match the start of whatever is passed into the url parameter with what the browser supports\n for (const browserCodec of browserSupportedCodecs) {\n if (browserCodec.startsWith(specifiedCodec)) {\n return browserCodec;\n }\n }\n // If we weren't able to match, just return the codec as from the URL as-is.\n return specifiedCodec;\n };\n /**\n * Enum Parameters\n */\n this.optionParameters.set(OptionParameters.PreferredCodec, new SettingOption(OptionParameters.PreferredCodec, 'Preferred Codec', 'The preferred codec to be used during codec negotiation', settings && Object.prototype.hasOwnProperty.call(settings, OptionParameters.PreferredCodec)\n ? matchSpecifiedCodecToClosestSupported(settings[OptionParameters.PreferredCodec])\n : getDefaultVideoCodec(), BrowserUtils.getSupportedVideoCodecs(), useUrlParams, matchSpecifiedCodecToClosestSupported));\n this.optionParameters.set(OptionParameters.PreferredQuality, new SettingOption(OptionParameters.PreferredQuality, 'Preferred Quality', 'The preferred quality of the stream (only applicable when using the SFU)', settings && Object.prototype.hasOwnProperty.call(settings, OptionParameters.PreferredQuality)\n ? settings[OptionParameters.PreferredQuality]\n : 'Default', ['Default'], useUrlParams));\n /**\n * Boolean parameters\n */\n this.flags.set(Flags.AutoConnect, new SettingFlag(Flags.AutoConnect, 'Auto connect to stream', 'Whether we should attempt to auto connect to the signalling server or show a click to start prompt.', settings && Object.prototype.hasOwnProperty.call(settings, Flags.AutoConnect)\n ? settings[Flags.AutoConnect]\n : false, useUrlParams));\n this.flags.set(Flags.AutoPlayVideo, new SettingFlag(Flags.AutoPlayVideo, 'Auto play video', 'When video is ready automatically start playing it as opposed to showing a play button.', settings && Object.prototype.hasOwnProperty.call(settings, Flags.AutoPlayVideo)\n ? settings[Flags.AutoPlayVideo]\n : true, useUrlParams));\n this.flags.set(Flags.UseMic, new SettingFlag(Flags.UseMic, 'Use microphone', 'Make browser request microphone access and open an input audio track.', settings && Object.prototype.hasOwnProperty.call(settings, Flags.UseMic)\n ? settings[Flags.UseMic]\n : false, useUrlParams));\n this.flags.set(Flags.UseModalForTextInput, new SettingFlag(Flags.UseModalForTextInput, 'Use modal for text input', 'When entering input into a streamed UE text widget, use an input modal.', settings && Object.prototype.hasOwnProperty.call(settings, Flags.UseModalForTextInput)\n ? settings[Flags.UseModalForTextInput]\n : true, useUrlParams));\n this.flags.set(Flags.UseCamera, new SettingFlag(Flags.UseCamera, 'Use webcam', 'Make browser request webcam access and open a input video track.', settings && Object.prototype.hasOwnProperty.call(settings, Flags.UseCamera)\n ? settings[Flags.UseCamera]\n : false, useUrlParams));\n this.flags.set(Flags.StartVideoMuted, new SettingFlag(Flags.StartVideoMuted, 'Start video muted', 'Video will start muted if true.', settings && Object.prototype.hasOwnProperty.call(settings, Flags.StartVideoMuted)\n ? settings[Flags.StartVideoMuted]\n : false, useUrlParams));\n this.flags.set(Flags.SuppressBrowserKeys, new SettingFlag(Flags.SuppressBrowserKeys, 'Suppress browser keys', 'Suppress certain browser keys that we use in UE, for example F5 to show shader complexity instead of refresh the page.', settings && Object.prototype.hasOwnProperty.call(settings, Flags.SuppressBrowserKeys)\n ? settings[Flags.SuppressBrowserKeys]\n : true, useUrlParams));\n this.flags.set(Flags.IsQualityController, new SettingFlag(Flags.IsQualityController, 'Is quality controller?', 'True if this peer controls stream quality', settings && Object.prototype.hasOwnProperty.call(settings, Flags.IsQualityController)\n ? settings[Flags.IsQualityController]\n : true, useUrlParams));\n this.flags.set(Flags.ForceMonoAudio, new SettingFlag(Flags.ForceMonoAudio, 'Force mono audio', 'Force browser to request mono audio in the SDP', settings && Object.prototype.hasOwnProperty.call(settings, Flags.ForceMonoAudio)\n ? settings[Flags.ForceMonoAudio]\n : false, useUrlParams));\n this.flags.set(Flags.ForceTURN, new SettingFlag(Flags.ForceTURN, 'Force TURN', 'Only generate TURN/Relayed ICE candidates.', settings && Object.prototype.hasOwnProperty.call(settings, Flags.ForceTURN)\n ? settings[Flags.ForceTURN]\n : false, useUrlParams));\n this.flags.set(Flags.AFKDetection, new SettingFlag(Flags.AFKDetection, 'AFK if idle', 'Timeout the experience if user is AFK for a period.', settings && Object.prototype.hasOwnProperty.call(settings, Flags.AFKDetection)\n ? settings[Flags.AFKDetection]\n : false, useUrlParams));\n this.flags.set(Flags.MatchViewportResolution, new SettingFlag(Flags.MatchViewportResolution, 'Match viewport resolution', 'Pixel Streaming will be instructed to dynamically resize the video stream to match the size of the video element.', settings && Object.prototype.hasOwnProperty.call(settings, Flags.MatchViewportResolution)\n ? settings[Flags.MatchViewportResolution]\n : false, useUrlParams));\n this.flags.set(Flags.HoveringMouseMode, new SettingFlag(Flags.HoveringMouseMode, 'Control Scheme: Locked Mouse', 'Either locked mouse, where the pointer is consumed by the video and locked to it, or hovering mouse, where the mouse is not consumed.', settings && Object.prototype.hasOwnProperty.call(settings, Flags.HoveringMouseMode)\n ? settings[Flags.HoveringMouseMode]\n : false, useUrlParams, (isHoveringMouse, setting) => {\n setting.label = `Control Scheme: ${isHoveringMouse ? 'Hovering' : 'Locked'} Mouse`;\n }));\n this.flags.set(Flags.FakeMouseWithTouches, new SettingFlag(Flags.FakeMouseWithTouches, 'Fake mouse with touches', 'A single finger touch is converted into a mouse event. This allows a non-touch application to be controlled partially via a touch device.', settings && Object.prototype.hasOwnProperty.call(settings, Flags.FakeMouseWithTouches)\n ? settings[Flags.FakeMouseWithTouches]\n : false, useUrlParams));\n this.flags.set(Flags.KeyboardInput, new SettingFlag(Flags.KeyboardInput, 'Keyboard input', 'If enabled, send keyboard events to streamer', settings && Object.prototype.hasOwnProperty.call(settings, Flags.KeyboardInput)\n ? settings[Flags.KeyboardInput]\n : true, useUrlParams));\n this.flags.set(Flags.MouseInput, new SettingFlag(Flags.MouseInput, 'Mouse input', 'If enabled, send mouse events to streamer', settings && Object.prototype.hasOwnProperty.call(settings, Flags.MouseInput)\n ? settings[Flags.MouseInput]\n : true, useUrlParams));\n this.flags.set(Flags.TouchInput, new SettingFlag(Flags.TouchInput, 'Touch input', 'If enabled, send touch events to streamer', settings && Object.prototype.hasOwnProperty.call(settings, Flags.TouchInput)\n ? settings[Flags.TouchInput]\n : true, useUrlParams));\n this.flags.set(Flags.GamepadInput, new SettingFlag(Flags.GamepadInput, 'Gamepad input', 'If enabled, send gamepad events to streamer', settings && Object.prototype.hasOwnProperty.call(settings, Flags.GamepadInput)\n ? settings[Flags.GamepadInput]\n : true, useUrlParams));\n this.flags.set(Flags.XRControllerInput, new SettingFlag(Flags.XRControllerInput, 'XR controller input', 'If enabled, send XR controller events to streamer', settings && Object.prototype.hasOwnProperty.call(settings, Flags.XRControllerInput)\n ? settings[Flags.XRControllerInput]\n : true, useUrlParams));\n this.flags.set(Flags.WaitForStreamer, new SettingFlag(Flags.WaitForStreamer, 'Wait for streamer', 'Will continue trying to connect to the first streamer available.', settings && Object.prototype.hasOwnProperty.call(settings, Flags.WaitForStreamer)\n ? settings[Flags.WaitForStreamer]\n : true, useUrlParams));\n this.flags.set(Flags.HideUI, new SettingFlag(Flags.HideUI, 'Hide the UI overlay', 'Will hide all UI overlay details', settings && Object.prototype.hasOwnProperty.call(settings, Flags.HideUI)\n ? settings[Flags.HideUI]\n : false, useUrlParams));\n this.flags.set(Flags.EnableCaptureTimeExt, new SettingFlag(Flags.EnableCaptureTimeExt, 'Enable abs-capture-time', 'Enables the abs-capture-time RTP header extension', settings && Object.prototype.hasOwnProperty.call(settings, Flags.EnableCaptureTimeExt)\n ? settings[Flags.EnableCaptureTimeExt]\n : false, useUrlParams));\n /**\n * Numeric parameters\n */\n this.numericParameters.set(NumericParameters.AFKTimeoutSecs, new SettingNumber(NumericParameters.AFKTimeoutSecs, 'AFK timeout', 'The time (in seconds) it takes for the application to time out if AFK timeout is enabled.', 0 /*min*/, null /*max*/, settings && Object.prototype.hasOwnProperty.call(settings, NumericParameters.AFKTimeoutSecs)\n ? settings[NumericParameters.AFKTimeoutSecs]\n : 120 /*value*/, useUrlParams));\n this.numericParameters.set(NumericParameters.AFKCountdownSecs, new SettingNumber(NumericParameters.AFKCountdownSecs, 'AFK countdown', 'The time (in seconds) for a user to respond before the stream is ended after an AFK timeout.', 10 /*min*/, null /*max*/, 10 /*value*/, useUrlParams));\n this.numericParameters.set(NumericParameters.MaxReconnectAttempts, new SettingNumber(NumericParameters.MaxReconnectAttempts, 'Max Reconnects', 'Maximum number of reconnects the application will attempt when a streamer disconnects.', 0 /*min*/, 999 /*max*/, settings &&\n Object.prototype.hasOwnProperty.call(settings, NumericParameters.MaxReconnectAttempts)\n ? settings[NumericParameters.MaxReconnectAttempts]\n : 3 /*value*/, useUrlParams));\n this.numericParameters.set(NumericParameters.MinQP, new SettingNumber(NumericParameters.MinQP, 'Min QP', 'The lower bound for the quantization parameter (QP) of the encoder. 0 = Best quality, 51 = worst quality.', 0 /*min*/, 51 /*max*/, settings && Object.prototype.hasOwnProperty.call(settings, NumericParameters.MinQP)\n ? settings[NumericParameters.MinQP]\n : 0 /*value*/, useUrlParams));\n this.numericParameters.set(NumericParameters.MaxQP, new SettingNumber(NumericParameters.MaxQP, 'Max QP', 'The upper bound for the quantization parameter (QP) of the encoder. 0 = Best quality, 51 = worst quality.', 0 /*min*/, 51 /*max*/, settings && Object.prototype.hasOwnProperty.call(settings, NumericParameters.MaxQP)\n ? settings[NumericParameters.MaxQP]\n : 51 /*value*/, useUrlParams));\n this.numericParameters.set(NumericParameters.MinQuality, new SettingNumber(NumericParameters.MinQuality, 'Min Quality', 'The lower bound for the quality factor of the encoder. 0 = Worst quality, 100 = Best quality.', 0 /*min*/, 100 /*max*/, settings && Object.prototype.hasOwnProperty.call(settings, NumericParameters.MinQuality)\n ? settings[NumericParameters.MinQuality]\n : 0 /*value*/, useUrlParams));\n this.numericParameters.set(NumericParameters.MaxQuality, new SettingNumber(NumericParameters.MaxQuality, 'Max Quality', 'The upper bound for the quality factor of the encoder. 0 = Worst quality, 100 = Best quality.', 0 /*min*/, 100 /*max*/, settings && Object.prototype.hasOwnProperty.call(settings, NumericParameters.MaxQuality)\n ? settings[NumericParameters.MaxQuality]\n : 100 /*value*/, useUrlParams));\n this.numericParameters.set(NumericParameters.CompatQualityMin, new SettingNumber(NumericParameters.CompatQualityMin, 'Min Quality', 'The lower bound for encoding quality. 0 = Worst, 100 = Best.', 0 /*min*/, 100 /*max*/, settings && Object.prototype.hasOwnProperty.call(settings, NumericParameters.CompatQualityMin)\n ? settings[NumericParameters.CompatQualityMin]\n : 0 /*value*/, useUrlParams));\n this.numericParameters.set(NumericParameters.CompatQualityMax, new SettingNumber(NumericParameters.CompatQualityMax, 'Max Quality', 'The upper bound for encoding quality. 0 = Worst, 100 = Best.', 0 /*min*/, 100 /*max*/, settings && Object.prototype.hasOwnProperty.call(settings, NumericParameters.CompatQualityMax)\n ? settings[NumericParameters.CompatQualityMax]\n : 100 /*value*/, useUrlParams));\n this.numericParameters.set(NumericParameters.WebRTCFPS, new SettingNumber(NumericParameters.WebRTCFPS, 'Max FPS', 'The maximum FPS that WebRTC will try to transmit frames at.', 1 /*min*/, 999 /*max*/, settings && Object.prototype.hasOwnProperty.call(settings, NumericParameters.WebRTCFPS)\n ? settings[NumericParameters.WebRTCFPS]\n : 60 /*value*/, useUrlParams));\n this.numericParameters.set(NumericParameters.WebRTCMinBitrate, new SettingNumber(NumericParameters.WebRTCMinBitrate, 'Min Bitrate (kbps)', 'The minimum bitrate that WebRTC should use.', 0 /*min*/, 500000 /*max*/, settings && Object.prototype.hasOwnProperty.call(settings, NumericParameters.WebRTCMinBitrate)\n ? settings[NumericParameters.WebRTCMinBitrate]\n : 0 /*value*/, useUrlParams));\n this.numericParameters.set(NumericParameters.WebRTCMaxBitrate, new SettingNumber(NumericParameters.WebRTCMaxBitrate, 'Max Bitrate (kbps)', 'The maximum bitrate that WebRTC should use.', 0 /*min*/, 500000 /*max*/, settings && Object.prototype.hasOwnProperty.call(settings, NumericParameters.WebRTCMaxBitrate)\n ? settings[NumericParameters.WebRTCMaxBitrate]\n : 0 /*value*/, useUrlParams));\n this.numericParameters.set(NumericParameters.StreamerAutoJoinInterval, new SettingNumber(NumericParameters.StreamerAutoJoinInterval, 'Streamer Auto Join Interval (ms)', 'Delay between retries when waiting for an available streamer.', 500 /*min*/, 900000 /*max*/, settings &&\n Object.prototype.hasOwnProperty.call(settings, NumericParameters.StreamerAutoJoinInterval)\n ? settings[NumericParameters.StreamerAutoJoinInterval]\n : 3000 /*value*/, useUrlParams));\n this.numericParameters.set(NumericParameters.KeepaliveDelay, new SettingNumber(NumericParameters.KeepaliveDelay, 'Connection Keepalive delay', 'Delay between keepalive pings to the signalling server.', 0 /*min*/, 900000 /*max*/, settings && Object.prototype.hasOwnProperty.call(settings, NumericParameters.KeepaliveDelay)\n ? settings[NumericParameters.KeepaliveDelay]\n : 30000 /*value*/, useUrlParams));\n }\n /**\n * Add a callback to fire when the numeric setting is toggled.\n * @param id The id of the flag.\n * @param onChangedListener The callback to fire when the numeric value changes.\n */\n _addOnNumericSettingChangedListener(id, onChangedListener) {\n if (this.numericParameters.has(id)) {\n this.numericParameters.get(id).addOnChangedListener(onChangedListener);\n }\n }\n _addOnOptionSettingChangedListener(id, onChangedListener) {\n if (this.optionParameters.has(id)) {\n this.optionParameters.get(id).addOnChangedListener(onChangedListener);\n }\n }\n /**\n * @param id The id of the numeric setting we are interested in getting a value for.\n * @returns The numeric value stored in the parameter with the passed id.\n */\n getNumericSettingValue(id) {\n if (this.numericParameters.has(id)) {\n return this.numericParameters.get(id).number;\n }\n else {\n throw new Error(`There is no numeric setting with the id of ${id}`);\n }\n }\n /**\n * @param id The id of the text setting we are interested in getting a value for.\n * @returns The text value stored in the parameter with the passed id.\n */\n getTextSettingValue(id) {\n if (this.textParameters.has(id)) {\n return this.textParameters.get(id).value;\n }\n else {\n throw new Error(`There is no numeric setting with the id of ${id}`);\n }\n }\n /**\n * Set number in the setting.\n * @param id The id of the numeric setting we are interested in.\n * @param value The numeric value to set.\n */\n setNumericSetting(id, value) {\n if (this.numericParameters.has(id)) {\n this.numericParameters.get(id).number = value;\n }\n else {\n throw new Error(`There is no numeric setting with the id of ${id}`);\n }\n }\n /**\n * Add a callback to fire when the flag is toggled.\n * @param id The id of the flag.\n * @param onChangeListener The callback to fire when the value changes.\n */\n _addOnSettingChangedListener(id, onChangeListener) {\n if (this.flags.has(id)) {\n this.flags.get(id).onChange = onChangeListener;\n }\n }\n /**\n * Add a callback to fire when the text is changed.\n * @param id The id of the flag.\n * @param onChangeListener The callback to fire when the value changes.\n */\n _addOnTextSettingChangedListener(id, onChangeListener) {\n if (this.textParameters.has(id)) {\n this.textParameters.get(id).onChange = onChangeListener;\n }\n }\n /**\n * Get the option which has the given id.\n * @param id The id of the option.\n * @returns The SettingOption object matching id\n */\n getSettingOption(id) {\n return this.optionParameters.get(id);\n }\n /**\n * Get the value of the configuration flag which has the given id.\n * @param id The unique id for the flag.\n * @returns True if the flag is enabled.\n */\n isFlagEnabled(id) {\n return this.flags.get(id).flag;\n }\n /**\n * Set flag to be enabled/disabled.\n * @param id The id of the flag to toggle.\n * @param flagEnabled True if the flag should be enabled.\n */\n setFlagEnabled(id, flagEnabled) {\n if (!this.flags.has(id)) {\n Logger.Warning(`Cannot toggle flag called ${id} - it does not exist in the Config.flags map.`);\n }\n else {\n this.flags.get(id).flag = flagEnabled;\n }\n }\n /**\n * Set the text setting.\n * @param id The id of the setting\n * @param settingValue The value to set in the setting.\n */\n setTextSetting(id, settingValue) {\n if (!this.textParameters.has(id)) {\n Logger.Warning(`Cannot set text setting called ${id} - it does not exist in the Config.textParameters map.`);\n }\n else {\n this.textParameters.get(id).text = settingValue;\n }\n }\n /**\n * Set the option setting list of options.\n * @param id The id of the setting\n * @param settingOptions The values the setting could take\n */\n setOptionSettingOptions(id, settingOptions) {\n if (!this.optionParameters.has(id)) {\n Logger.Warning(`Cannot set text setting called ${id} - it does not exist in the Config.optionParameters map.`);\n }\n else {\n this.optionParameters.get(id).options = settingOptions;\n }\n }\n /**\n * Set option enum settings selected option.\n * @param id The id of the setting\n * @param settingOptions The value to select out of all the options\n */\n setOptionSettingValue(id, settingValue) {\n if (!this.optionParameters.has(id)) {\n Logger.Warning(`Cannot set text setting called ${id} - it does not exist in the Config.enumParameters map.`);\n }\n else {\n const optionSetting = this.optionParameters.get(id);\n const existingOptions = optionSetting.options;\n if (!existingOptions.includes(settingValue)) {\n existingOptions.push(settingValue);\n optionSetting.options = existingOptions;\n }\n optionSetting.selected = settingValue;\n }\n }\n /**\n * Set the label for the flag.\n * @param id The id of the flag.\n * @param label The new label to use for the flag.\n */\n setFlagLabel(id, label) {\n if (!this.flags.has(id)) {\n Logger.Warning(`Cannot set label for flag called ${id} - it does not exist in the Config.flags map.`);\n }\n else {\n this.flags.get(id).label = label;\n }\n }\n /**\n * Set a subset of all settings in one function call.\n *\n * @param settings A (partial) list of settings to set\n */\n setSettings(settings) {\n for (const key of Object.keys(settings)) {\n if (isFlagId(key)) {\n this.setFlagEnabled(key, settings[key]);\n }\n else if (isNumericId(key)) {\n this.setNumericSetting(key, settings[key]);\n }\n else if (isTextId(key)) {\n this.setTextSetting(key, settings[key]);\n }\n else if (isOptionId(key)) {\n this.setOptionSettingValue(key, settings[key]);\n }\n }\n }\n /**\n * Get all settings\n * @returns All setting values as an object with setting ids as keys\n */\n getSettings() {\n const settings = {};\n for (const [key, value] of this.flags.entries()) {\n settings[key] = value.flag;\n }\n for (const [key, value] of this.numericParameters.entries()) {\n settings[key] = value.number;\n }\n for (const [key, value] of this.textParameters.entries()) {\n settings[key] = value.text;\n }\n for (const [key, value] of this.optionParameters.entries()) {\n settings[key] = value.selected;\n }\n return settings;\n }\n /**\n * Get all Flag settings as an array.\n * @returns All SettingFlag objects\n */\n getFlags() {\n return Array.from(this.flags.values());\n }\n /**\n * Get all Text settings as an array.\n * @returns All SettingText objects\n */\n getTextSettings() {\n return Array.from(this.textParameters.values());\n }\n /**\n * Get all Number settings as an array.\n * @returns All SettingNumber objects\n */\n getNumericSettings() {\n return Array.from(this.numericParameters.values());\n }\n /**\n * Get all Option settings as an array.\n * @returns All SettingOption objects\n */\n getOptionSettings() {\n return Array.from(this.optionParameters.values());\n }\n /**\n * Emit events when settings change.\n * @param eventEmitter\n */\n _registerOnChangeEvents(eventEmitter) {\n for (const key of this.flags.keys()) {\n const flag = this.flags.get(key);\n if (flag) {\n flag.onChangeEmit = (newValue) => eventEmitter.dispatchEvent(new SettingsChangedEvent({\n id: flag.id,\n type: 'flag',\n value: newValue,\n target: flag\n }));\n }\n }\n for (const key of this.numericParameters.keys()) {\n const number = this.numericParameters.get(key);\n if (number) {\n number.onChangeEmit = (newValue) => eventEmitter.dispatchEvent(new SettingsChangedEvent({\n id: number.id,\n type: 'number',\n value: newValue,\n target: number\n }));\n }\n }\n for (const key of this.textParameters.keys()) {\n const text = this.textParameters.get(key);\n if (text) {\n text.onChangeEmit = (newValue) => eventEmitter.dispatchEvent(new SettingsChangedEvent({\n id: text.id,\n type: 'text',\n value: newValue,\n target: text\n }));\n }\n }\n for (const key of this.optionParameters.keys()) {\n const option = this.optionParameters.get(key);\n if (option) {\n option.onChangeEmit = (newValue) => eventEmitter.dispatchEvent(new SettingsChangedEvent({\n id: option.id,\n type: 'option',\n value: newValue,\n target: option\n }));\n }\n }\n }\n}\n/**\n * The enum associated with the mouse being locked or hovering\n */\nexport var ControlSchemeType;\n(function (ControlSchemeType) {\n ControlSchemeType[ControlSchemeType[\"LockedMouse\"] = 0] = \"LockedMouse\";\n ControlSchemeType[ControlSchemeType[\"HoveringMouse\"] = 1] = \"HoveringMouse\";\n})(ControlSchemeType || (ControlSchemeType = {}));\n//# sourceMappingURL=Config.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport { Flags, NumericParameters } from '../Config/Config';\nimport { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';\nimport { AfkTimedOutEvent, AfkWarningActivateEvent, AfkWarningDeactivateEvent, AfkWarningUpdateEvent } from '../Util/EventEmitter';\nexport class AFKController {\n constructor(config, pixelStreaming, onDismissAfk) {\n // time out logic details\n this.active = false;\n this.countdownActive = false;\n this.warnTimer = undefined;\n this.countDown = 0;\n this.countDownTimer = undefined;\n this.config = config;\n this.pixelStreaming = pixelStreaming;\n this.onDismissAfk = onDismissAfk;\n this.onAFKTimedOutCallback = () => {\n console.log('AFK timed out, did you want to override this callback?');\n };\n }\n /**\n * The methods that occur when an afk event listener is clicked\n */\n onAfkClick() {\n clearInterval(this.countDownTimer);\n if (this.active || this.countdownActive) {\n this.startAfkWarningTimer();\n this.pixelStreaming.dispatchEvent(new AfkWarningDeactivateEvent());\n }\n }\n /**\n * Start the warning timer if a timeout is set greater that 0 seconds\n */\n startAfkWarningTimer() {\n if (this.config.getNumericSettingValue(NumericParameters.AFKTimeoutSecs) > 0 &&\n this.config.isFlagEnabled(Flags.AFKDetection)) {\n this.active = true;\n }\n else {\n this.active = false;\n }\n this.resetAfkWarningTimer();\n }\n /**\n * Stop the afk warning timer\n */\n stopAfkWarningTimer() {\n this.active = false;\n this.countdownActive = false;\n clearTimeout(this.warnTimer);\n clearInterval(this.countDownTimer);\n }\n /**\n * Pause the timer which when elapsed will warn the user they are inactive.\n */\n pauseAfkWarningTimer() {\n this.active = false;\n }\n /**\n * If the user interacts then reset the warning timer.\n */\n resetAfkWarningTimer() {\n if (this.active && this.config.isFlagEnabled(Flags.AFKDetection)) {\n clearTimeout(this.warnTimer);\n this.warnTimer = setTimeout(() => this.activateAfkEvent(), this.config.getNumericSettingValue(NumericParameters.AFKTimeoutSecs) * 1000);\n }\n }\n /**\n * Show the AFK overlay and begin the countDown\n */\n activateAfkEvent() {\n // Pause the timer while the user is looking at the inactivity warning overlay\n this.pauseAfkWarningTimer();\n // instantiate a new overlay\n this.pixelStreaming.dispatchEvent(new AfkWarningActivateEvent({\n countDown: this.countDown,\n dismissAfk: this.onDismissAfk\n }));\n // update our countDown timer and overlay contents\n this.countDown = this.config.getNumericSettingValue(NumericParameters.AFKCountdownSecs);\n this.countdownActive = true;\n this.pixelStreaming.dispatchEvent(new AfkWarningUpdateEvent({ countDown: this.countDown }));\n // if we are in locked mouse exit pointerlock\n if (!this.config.isFlagEnabled(Flags.HoveringMouseMode)) {\n // minor hack to alleviate ios not supporting pointerlock\n if (document.exitPointerLock) {\n document.exitPointerLock();\n }\n }\n // reset our countDown interval accordingly\n this.countDownTimer = setInterval(() => {\n this.countDown--;\n if (this.countDown == 0) {\n // The user failed to click so hide the overlay and disconnect them.\n this.pixelStreaming.dispatchEvent(new AfkTimedOutEvent());\n this.onAFKTimedOutCallback();\n Logger.Info('You have been disconnected due to inactivity');\n // switch off the afk feature as stream has closed\n this.stopAfkWarningTimer();\n }\n else {\n this.pixelStreaming.dispatchEvent(new AfkWarningUpdateEvent({ countDown: this.countDown }));\n }\n }, 1000);\n }\n}\n//# sourceMappingURL=AFKController.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';\n/**\n * Handles the Sending and Receiving of messages to the UE Instance via the Data Channel\n */\nexport class DataChannelController {\n constructor() {\n this.isReceivingFreezeFrame = false;\n }\n /**\n * return the current state of a datachannel controller instance\n * @returns the current DataChannelController instance\n */\n getDataChannelInstance() {\n return this;\n }\n /**\n * To Create and Set up a Data Channel\n * @param peerConnection - The RTC Peer Connection\n * @param label - Label of the Data Channel\n * @param datachannelOptions - Optional RTC DataChannel options\n */\n createDataChannel(peerConnection, label, datachannelOptions) {\n this.peerConnection = peerConnection;\n this.label = label;\n this.datachannelOptions = datachannelOptions;\n if (datachannelOptions == null) {\n this.datachannelOptions = {};\n this.datachannelOptions.ordered = true;\n }\n this.dataChannel = this.peerConnection.createDataChannel(this.label, this.datachannelOptions);\n this.setupDataChannel();\n }\n setupDataChannel() {\n //We Want an Array Buffer not a blob\n this.dataChannel.binaryType = 'arraybuffer';\n this.dataChannel.onopen = (ev) => this.handleOnOpen(ev);\n this.dataChannel.onclose = (ev) => this.handleOnClose(ev);\n this.dataChannel.onmessage = (ev) => this.handleOnMessage(ev);\n this.dataChannel.onerror = (ev) => this.handleOnError(ev);\n }\n /**\n * Handles when the Data Channel is opened\n */\n handleOnOpen(ev) {\n var _a;\n Logger.Info(`Data Channel (${this.label}) opened.`);\n this.onOpen((_a = this.dataChannel) === null || _a === void 0 ? void 0 : _a.label, ev);\n }\n /**\n * Handles when the Data Channel is closed\n */\n handleOnClose(ev) {\n var _a;\n Logger.Info(`Data Channel (${this.label}) closed.`);\n this.onClose((_a = this.dataChannel) === null || _a === void 0 ? void 0 : _a.label, ev);\n }\n /**\n * Handles when a message is received\n * @param event - Message Event\n */\n handleOnMessage(event) {\n // Higher log level to prevent log spam with messages received\n Logger.Info(`Data Channel (${this.label}) message: ${event}`);\n }\n /**\n * Handles when an error is thrown\n * @param event - Error Event\n */\n handleOnError(event) {\n var _a;\n Logger.Info(`Data Channel (${this.label}) error: ${event}`);\n this.onError((_a = this.dataChannel) === null || _a === void 0 ? void 0 : _a.label, event);\n }\n /**\n * Override to register onOpen handler\n * @param label Data channel label (\"datachannel\", \"send-datachannel\", \"recv-datachannel\")\n * @param ev event\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onOpen(label, ev) {\n // empty default implementation\n }\n /**\n * Override to register onClose handler\n * @param label Data channel label (\"datachannel\", \"send-datachannel\", \"recv-datachannel\")\n * @param ev event\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onClose(label, ev) {\n // empty default implementation\n }\n /**\n * Override to register onError handler\n * @param label Data channel label (\"datachannel\", \"send-datachannel\", \"recv-datachannel\")\n * @param ev event\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onError(label, ev) {\n // empty default implementation\n }\n}\n//# sourceMappingURL=DataChannelController.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\n/**\n * Inbound Audio Stats collected from the RTC Stats Report\n */\nexport class InboundAudioStats {\n}\n/**\n * Inbound Video Stats collected from the RTC Stats Report\n */\nexport class InboundVideoStats {\n}\n/**\n * Inbound Stats collected from the RTC Stats Report\n */\nexport class InboundRTPStats {\n}\n//# sourceMappingURL=InboundRTPStats.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\n/**\n * Data Channel Stats collected from the RTC Stats Report\n */\nexport class DataChannelStats {\n}\n//# sourceMappingURL=DataChannelStats.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\n/**\n * ICE Candidate Stat collected from the RTC Stats Report\n */\nexport class CandidateStat {\n}\n//# sourceMappingURL=CandidateStat.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\n/**\n * Outbound RTP stats collected from the RTC Stats Report under `outbound-rtp`.\n * Wrapper around: https://developer.mozilla.org/en-US/docs/Web/API/RTCOutboundRtpStreamStats\n * These are stats for video we are sending to a remote peer.\n */\nexport class OutboundRTPStats {\n}\n/**\n * Remote outbound stats collected from the RTC Stats Report under `remote-outbound-rtp`.\n * Wrapper around: https://developer.mozilla.org/en-US/docs/Web/API/RTCRemoteOutboundRtpStreamStats\n * These are stats for media we are receiving from a remote peer.\n */\nexport class RemoteOutboundRTPStats {\n}\n//# sourceMappingURL=OutBoundRTPStats.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\n/**\n * Session statistics\n */\nexport class SessionStats {\n}\n//# sourceMappingURL=SessionStats.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\n/**\n * Class to hold the stream stats data coming in from webRtc\n */\nexport class StreamStats {\n}\n//# sourceMappingURL=StreamStats.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport { InboundVideoStats, InboundAudioStats } from './InboundRTPStats';\nimport { DataChannelStats } from './DataChannelStats';\nimport { CandidateStat } from './CandidateStat';\nimport { RemoteOutboundRTPStats, OutboundRTPStats } from './OutBoundRTPStats';\nimport { SessionStats } from './SessionStats';\nimport { StreamStats } from './StreamStats';\nimport { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';\n/**\n * The Aggregated Stats that is generated from the RTC Stats Report\n */\nexport class AggregatedStats {\n constructor() {\n this.inboundVideoStats = new InboundVideoStats();\n this.inboundAudioStats = new InboundAudioStats();\n this.datachannelStats = new DataChannelStats();\n this.outboundVideoStats = new OutboundRTPStats();\n this.outboundAudioStats = new OutboundRTPStats();\n this.remoteOutboundAudioStats = new RemoteOutboundRTPStats();\n this.remoteOutboundVideoStats = new RemoteOutboundRTPStats();\n this.sessionStats = new SessionStats();\n this.streamStats = new StreamStats();\n this.codecs = new Map();\n }\n /**\n * Gather all the information from the RTC Peer Connection Report\n * @param rtcStatsReport - RTC Stats Report\n */\n processStats(rtcStatsReport) {\n this.localCandidates = new Array();\n this.remoteCandidates = new Array();\n this.candidatePairs = new Array();\n rtcStatsReport.forEach((stat) => {\n const type = stat.type;\n switch (type) {\n case 'candidate-pair':\n this.handleCandidatePair(stat);\n break;\n case 'certificate':\n break;\n case 'codec':\n this.handleCodec(stat);\n break;\n case 'data-channel':\n this.handleDataChannel(stat);\n break;\n case 'inbound-rtp':\n this.handleInboundRTP(stat);\n break;\n case 'local-candidate':\n this.handleLocalCandidate(stat);\n break;\n case 'media-source':\n break;\n case 'media-playout':\n break;\n case 'outbound-rtp':\n this.handleLocalOutbound(stat);\n break;\n case 'peer-connection':\n break;\n case 'remote-candidate':\n this.handleRemoteCandidate(stat);\n break;\n case 'remote-inbound-rtp':\n break;\n case 'remote-outbound-rtp':\n this.handleRemoteOutbound(stat);\n break;\n case 'track':\n this.handleTrack(stat);\n break;\n case 'transport':\n this.handleTransport(stat);\n break;\n case 'stream':\n this.handleStream(stat);\n break;\n default:\n Logger.Error('unhandled Stat Type');\n Logger.Info(stat);\n break;\n }\n });\n }\n /**\n * Process stream stats data from webrtc\n *\n * @param stat - the stats coming in from webrtc\n */\n handleStream(stat) {\n this.streamStats = stat;\n }\n /**\n * Process the Ice Candidate Pair Data\n * @param stat - the stats coming in from ice candidates\n */\n handleCandidatePair(stat) {\n // Add the candidate pair to the candidate pair array\n this.candidatePairs.push(stat);\n }\n /**\n * Process the Data Channel Data\n * @param stat - the stats coming in from the data channel\n */\n handleDataChannel(stat) {\n this.datachannelStats.bytesReceived = stat.bytesReceived;\n this.datachannelStats.bytesSent = stat.bytesSent;\n this.datachannelStats.dataChannelIdentifier = stat.dataChannelIdentifier;\n this.datachannelStats.id = stat.id;\n this.datachannelStats.label = stat.label;\n this.datachannelStats.messagesReceived = stat.messagesReceived;\n this.datachannelStats.messagesSent = stat.messagesSent;\n this.datachannelStats.protocol = stat.protocol;\n this.datachannelStats.state = stat.state;\n this.datachannelStats.timestamp = stat.timestamp;\n }\n /**\n * Process the Local Ice Candidate Data\n * @param stat - local stats\n */\n handleLocalCandidate(stat) {\n const localCandidate = new CandidateStat();\n localCandidate.label = 'local-candidate';\n localCandidate.address = stat.address;\n localCandidate.port = stat.port;\n localCandidate.protocol = stat.protocol;\n localCandidate.candidateType = stat.candidateType;\n localCandidate.id = stat.id;\n localCandidate.relayProtocol = stat.relayProtocol;\n localCandidate.transportId = stat.transportId;\n this.localCandidates.push(localCandidate);\n }\n /**\n * Process the Remote Ice Candidate Data\n * @param stat - ice candidate stats\n */\n handleRemoteCandidate(stat) {\n const remoteCandidate = new CandidateStat();\n remoteCandidate.label = 'remote-candidate';\n remoteCandidate.address = stat.address;\n remoteCandidate.port = stat.port;\n remoteCandidate.protocol = stat.protocol;\n remoteCandidate.id = stat.id;\n remoteCandidate.candidateType = stat.candidateType;\n remoteCandidate.relayProtocol = stat.relayProtocol;\n remoteCandidate.transportId = stat.transportId;\n this.remoteCandidates.push(remoteCandidate);\n }\n /**\n * Process the Inbound RTP Audio and Video Data\n * @param stat - inbound rtp stats\n */\n handleInboundRTP(stat) {\n switch (stat.kind) {\n case 'video':\n // Calculate bitrate between stat updates\n if (stat.bytesReceived > this.inboundVideoStats.bytesReceived &&\n stat.timestamp > this.inboundVideoStats.timestamp) {\n this.inboundVideoStats.bitrate =\n (8 * (stat.bytesReceived - this.inboundVideoStats.bytesReceived)) /\n (stat.timestamp - this.inboundVideoStats.timestamp);\n this.inboundVideoStats.bitrate = Math.floor(this.inboundVideoStats.bitrate);\n }\n // Copy members from stat into `this.inboundVideoStats`\n for (const key in stat) {\n this.inboundVideoStats[key] = stat[key];\n }\n break;\n case 'audio':\n if (stat.bytesReceived > this.inboundAudioStats.bytesReceived &&\n stat.timestamp > this.inboundAudioStats.timestamp) {\n this.inboundAudioStats.bitrate =\n (8 * (stat.bytesReceived - this.inboundAudioStats.bytesReceived)) /\n (stat.timestamp - this.inboundAudioStats.timestamp);\n this.inboundAudioStats.bitrate = Math.floor(this.inboundAudioStats.bitrate);\n }\n // Copy members from stat into `this.inboundAudioStats`\n for (const key in stat) {\n this.inboundAudioStats[key] = stat[key];\n }\n break;\n default:\n Logger.Error(`Kind should be audio or video, we got ${stat.kind} - that's unsupported.`);\n break;\n }\n }\n /**\n * Process the \"local\" outbound RTP Audio and Video stats.\n * @param stat - local outbound rtp stats\n */\n handleLocalOutbound(stat) {\n const localOutboundStats = stat.kind === 'audio' ? this.outboundAudioStats : this.outboundVideoStats;\n localOutboundStats.active = stat.active;\n localOutboundStats.codecId = stat.codecId;\n localOutboundStats.bytesSent = stat.bytesSent;\n localOutboundStats.frameHeight = stat.frameHeight;\n localOutboundStats.frameWidth = stat.frameWidth;\n localOutboundStats.framesEncoded = stat.framesEncoded;\n localOutboundStats.framesPerSecond = stat.framesPerSecond;\n localOutboundStats.headerBytesSent = stat.headerBytesSent;\n localOutboundStats.id = stat.id;\n localOutboundStats.keyFramesEncoded = stat.keyFramesEncoded;\n localOutboundStats.kind = stat.kind;\n localOutboundStats.mediaSourceId = stat.mediaSourceId;\n localOutboundStats.mid = stat.mid;\n localOutboundStats.nackCount = stat.nackCount;\n localOutboundStats.packetsSent = stat.packetsSent;\n localOutboundStats.qpSum = stat.qpSum;\n localOutboundStats.qualityLimitationDurations = stat.qualityLimitationDurations;\n localOutboundStats.qualityLimitationReason = stat.qualityLimitationReason;\n localOutboundStats.remoteId = stat.remoteId;\n localOutboundStats.retransmittedBytesSent = stat.retransmittedBytesSent;\n localOutboundStats.rid = stat.rid;\n localOutboundStats.scalabilityMode = stat.scalabilityMode;\n localOutboundStats.ssrc = stat.ssrc;\n localOutboundStats.targetBitrate = stat.targetBitrate;\n localOutboundStats.timestamp = stat.timestamp;\n localOutboundStats.totalEncodeTime = stat.totalEncodeTime;\n localOutboundStats.totalEncodeBytesTarget = stat.totalEncodeBytesTarget;\n localOutboundStats.totalPacketSendDelay = stat.totalPacketSendDelay;\n localOutboundStats.transportId = stat.transportId;\n }\n /**\n * Process the \"remote\" outbound RTP Audio and Video stats.\n * @param stat - remote outbound rtp stats\n */\n handleRemoteOutbound(stat) {\n const remoteOutboundStats = stat.kind === 'audio' ? this.remoteOutboundAudioStats : this.remoteOutboundVideoStats;\n remoteOutboundStats.bytesSent = stat.bytesSent;\n remoteOutboundStats.codecId = stat.codecId;\n remoteOutboundStats.id = stat.id;\n remoteOutboundStats.kind = stat.kind;\n remoteOutboundStats.localId = stat.localId;\n remoteOutboundStats.packetsSent = stat.packetsSent;\n remoteOutboundStats.remoteTimestamp = stat.remoteTimestamp;\n remoteOutboundStats.reportsSent = stat.reportsSent;\n remoteOutboundStats.roundTripTimeMeasurements = stat.roundTripTimeMeasurements;\n remoteOutboundStats.ssrc = stat.ssrc;\n remoteOutboundStats.timestamp = stat.timestamp;\n remoteOutboundStats.totalRoundTripTime = stat.totalRoundTripTime;\n remoteOutboundStats.transportId = stat.transportId;\n }\n /**\n * Process the Inbound Video Track Data\n * @param stat - video track stats\n */\n handleTrack(stat) {\n // we only want to extract stats from the video track\n if (stat.type === 'track' && (stat.trackIdentifier === 'video_label' || stat.kind === 'video')) {\n this.inboundVideoStats.framesDropped = stat.framesDropped;\n this.inboundVideoStats.framesReceived = stat.framesReceived;\n this.inboundVideoStats.frameHeight = stat.frameHeight;\n this.inboundVideoStats.frameWidth = stat.frameWidth;\n }\n }\n handleTransport(stat) {\n this.transportStats = stat;\n }\n handleCodec(stat) {\n const codecId = stat.id;\n this.codecs.set(codecId, stat);\n }\n handleSessionStatistics(videoStartTime, inputController, videoEncoderAvgQP) {\n const deltaTime = Date.now() - videoStartTime;\n this.sessionStats.runTime = new Date(deltaTime).toISOString().substr(11, 8).toString();\n const controlsStreamInput = inputController === null ? 'Not sent yet' : inputController ? 'true' : 'false';\n this.sessionStats.controlsStreamInput = controlsStreamInput;\n this.sessionStats.videoEncoderAvgQP = videoEncoderAvgQP;\n }\n /**\n * Check if a value coming in from our stats is actually a number\n * @param value - the number to be checked\n */\n isNumber(value) {\n return typeof value === 'number' && isFinite(value);\n }\n /**\n * Helper function to return the active candidate pair\n * @returns The candidate pair that is currently receiving data\n */\n getActiveCandidatePair() {\n if (this.candidatePairs === undefined) {\n return null;\n }\n // Check if the RTCTransport stat is not undefined\n if (this.transportStats) {\n // Return the candidate pair that matches the transport candidate pair id\n const selectedPair = this.candidatePairs.find((candidatePair) => candidatePair.id === this.transportStats.selectedCandidatePairId);\n if (selectedPair === undefined) {\n return null;\n }\n else {\n return selectedPair;\n }\n }\n // Fall back to the `.selected` member of the candidate pair\n const selectedPair = this.candidatePairs.find((candidatePair) => candidatePair.selected);\n if (selectedPair === undefined) {\n return null;\n }\n else {\n return selectedPair;\n }\n }\n}\n//# sourceMappingURL=AggregatedStats.js.map","/* eslint-env node */\n'use strict';\n\n// SDP helpers.\nconst SDPUtils = {};\n\n// Generate an alphanumeric identifier for cname or mids.\n// TODO: use UUIDs instead? https://gist.github.com/jed/982883\nSDPUtils.generateIdentifier = function() {\n return Math.random().toString(36).substring(2, 12);\n};\n\n// The RTCP CNAME used by all peerconnections from the same JS.\nSDPUtils.localCName = SDPUtils.generateIdentifier();\n\n// Splits SDP into lines, dealing with both CRLF and LF.\nSDPUtils.splitLines = function(blob) {\n return blob.trim().split('\\n').map(line => line.trim());\n};\n// Splits SDP into sessionpart and mediasections. Ensures CRLF.\nSDPUtils.splitSections = function(blob) {\n const parts = blob.split('\\nm=');\n return parts.map((part, index) => (index > 0 ?\n 'm=' + part : part).trim() + '\\r\\n');\n};\n\n// Returns the session description.\nSDPUtils.getDescription = function(blob) {\n const sections = SDPUtils.splitSections(blob);\n return sections && sections[0];\n};\n\n// Returns the individual media sections.\nSDPUtils.getMediaSections = function(blob) {\n const sections = SDPUtils.splitSections(blob);\n sections.shift();\n return sections;\n};\n\n// Returns lines that start with a certain prefix.\nSDPUtils.matchPrefix = function(blob, prefix) {\n return SDPUtils.splitLines(blob).filter(line => line.indexOf(prefix) === 0);\n};\n\n// Parses an ICE candidate line. Sample input:\n// candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8\n// rport 55996\"\n// Input can be prefixed with a=.\nSDPUtils.parseCandidate = function(line) {\n let parts;\n // Parse both variants.\n if (line.indexOf('a=candidate:') === 0) {\n parts = line.substring(12).split(' ');\n } else {\n parts = line.substring(10).split(' ');\n }\n\n const candidate = {\n foundation: parts[0],\n component: {1: 'rtp', 2: 'rtcp'}[parts[1]] || parts[1],\n protocol: parts[2].toLowerCase(),\n priority: parseInt(parts[3], 10),\n ip: parts[4],\n address: parts[4], // address is an alias for ip.\n port: parseInt(parts[5], 10),\n // skip parts[6] == 'typ'\n type: parts[7],\n };\n\n for (let i = 8; i < parts.length; i += 2) {\n switch (parts[i]) {\n case 'raddr':\n candidate.relatedAddress = parts[i + 1];\n break;\n case 'rport':\n candidate.relatedPort = parseInt(parts[i + 1], 10);\n break;\n case 'tcptype':\n candidate.tcpType = parts[i + 1];\n break;\n case 'ufrag':\n candidate.ufrag = parts[i + 1]; // for backward compatibility.\n candidate.usernameFragment = parts[i + 1];\n break;\n default: // extension handling, in particular ufrag. Don't overwrite.\n if (candidate[parts[i]] === undefined) {\n candidate[parts[i]] = parts[i + 1];\n }\n break;\n }\n }\n return candidate;\n};\n\n// Translates a candidate object into SDP candidate attribute.\n// This does not include the a= prefix!\nSDPUtils.writeCandidate = function(candidate) {\n const sdp = [];\n sdp.push(candidate.foundation);\n\n const component = candidate.component;\n if (component === 'rtp') {\n sdp.push(1);\n } else if (component === 'rtcp') {\n sdp.push(2);\n } else {\n sdp.push(component);\n }\n sdp.push(candidate.protocol.toUpperCase());\n sdp.push(candidate.priority);\n sdp.push(candidate.address || candidate.ip);\n sdp.push(candidate.port);\n\n const type = candidate.type;\n sdp.push('typ');\n sdp.push(type);\n if (type !== 'host' && candidate.relatedAddress &&\n candidate.relatedPort) {\n sdp.push('raddr');\n sdp.push(candidate.relatedAddress);\n sdp.push('rport');\n sdp.push(candidate.relatedPort);\n }\n if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') {\n sdp.push('tcptype');\n sdp.push(candidate.tcpType);\n }\n if (candidate.usernameFragment || candidate.ufrag) {\n sdp.push('ufrag');\n sdp.push(candidate.usernameFragment || candidate.ufrag);\n }\n return 'candidate:' + sdp.join(' ');\n};\n\n// Parses an ice-options line, returns an array of option tags.\n// Sample input:\n// a=ice-options:foo bar\nSDPUtils.parseIceOptions = function(line) {\n return line.substring(14).split(' ');\n};\n\n// Parses a rtpmap line, returns RTCRtpCoddecParameters. Sample input:\n// a=rtpmap:111 opus/48000/2\nSDPUtils.parseRtpMap = function(line) {\n let parts = line.substring(9).split(' ');\n const parsed = {\n payloadType: parseInt(parts.shift(), 10), // was: id\n };\n\n parts = parts[0].split('/');\n\n parsed.name = parts[0];\n parsed.clockRate = parseInt(parts[1], 10); // was: clockrate\n parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1;\n // legacy alias, got renamed back to channels in ORTC.\n parsed.numChannels = parsed.channels;\n return parsed;\n};\n\n// Generates a rtpmap line from RTCRtpCodecCapability or\n// RTCRtpCodecParameters.\nSDPUtils.writeRtpMap = function(codec) {\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n const channels = codec.channels || codec.numChannels || 1;\n return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate +\n (channels !== 1 ? '/' + channels : '') + '\\r\\n';\n};\n\n// Parses a extmap line (headerextension from RFC 5285). Sample input:\n// a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\n// a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset\nSDPUtils.parseExtmap = function(line) {\n const parts = line.substring(9).split(' ');\n return {\n id: parseInt(parts[0], 10),\n direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv',\n uri: parts[1],\n attributes: parts.slice(2).join(' '),\n };\n};\n\n// Generates an extmap line from RTCRtpHeaderExtensionParameters or\n// RTCRtpHeaderExtension.\nSDPUtils.writeExtmap = function(headerExtension) {\n return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) +\n (headerExtension.direction && headerExtension.direction !== 'sendrecv'\n ? '/' + headerExtension.direction\n : '') +\n ' ' + headerExtension.uri +\n (headerExtension.attributes ? ' ' + headerExtension.attributes : '') +\n '\\r\\n';\n};\n\n// Parses a fmtp line, returns dictionary. Sample input:\n// a=fmtp:96 vbr=on;cng=on\n// Also deals with vbr=on; cng=on\n// Non-key-value such as telephone-events `0-15` get parsed as\n// {`0-15`:undefined}\nSDPUtils.parseFmtp = function(line) {\n const parsed = {};\n let kv;\n const parts = line.substring(line.indexOf(' ') + 1).split(';');\n for (let j = 0; j < parts.length; j++) {\n kv = parts[j].trim().split('=');\n parsed[kv[0].trim()] = kv[1];\n }\n return parsed;\n};\n\n// Generates a fmtp line from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeFmtp = function(codec) {\n let line = '';\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.parameters && Object.keys(codec.parameters).length) {\n const params = [];\n Object.keys(codec.parameters).forEach(param => {\n if (codec.parameters[param] !== undefined) {\n params.push(param + '=' + codec.parameters[param]);\n } else {\n params.push(param);\n }\n });\n line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\\r\\n';\n }\n return line;\n};\n\n// Parses a rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:\n// a=rtcp-fb:98 nack rpsi\nSDPUtils.parseRtcpFb = function(line) {\n const parts = line.substring(line.indexOf(' ') + 1).split(' ');\n return {\n type: parts.shift(),\n parameter: parts.join(' '),\n };\n};\n\n// Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeRtcpFb = function(codec) {\n let lines = '';\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.rtcpFeedback && codec.rtcpFeedback.length) {\n // FIXME: special handling for trr-int?\n codec.rtcpFeedback.forEach(fb => {\n lines += 'a=rtcp-fb:' + pt + ' ' + fb.type +\n (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') +\n '\\r\\n';\n });\n }\n return lines;\n};\n\n// Parses a RFC 5576 ssrc media attribute. Sample input:\n// a=ssrc:3735928559 cname:something\nSDPUtils.parseSsrcMedia = function(line) {\n const sp = line.indexOf(' ');\n const parts = {\n ssrc: parseInt(line.substring(7, sp), 10),\n };\n const colon = line.indexOf(':', sp);\n if (colon > -1) {\n parts.attribute = line.substring(sp + 1, colon);\n parts.value = line.substring(colon + 1);\n } else {\n parts.attribute = line.substring(sp + 1);\n }\n return parts;\n};\n\n// Parse a ssrc-group line (see RFC 5576). Sample input:\n// a=ssrc-group:semantics 12 34\nSDPUtils.parseSsrcGroup = function(line) {\n const parts = line.substring(13).split(' ');\n return {\n semantics: parts.shift(),\n ssrcs: parts.map(ssrc => parseInt(ssrc, 10)),\n };\n};\n\n// Extracts the MID (RFC 5888) from a media section.\n// Returns the MID or undefined if no mid line was found.\nSDPUtils.getMid = function(mediaSection) {\n const mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0];\n if (mid) {\n return mid.substring(6);\n }\n};\n\n// Parses a fingerprint line for DTLS-SRTP.\nSDPUtils.parseFingerprint = function(line) {\n const parts = line.substring(14).split(' ');\n return {\n algorithm: parts[0].toLowerCase(), // algorithm is case-sensitive in Edge.\n value: parts[1].toUpperCase(), // the definition is upper-case in RFC 4572.\n };\n};\n\n// Extracts DTLS parameters from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the fingerprint line as input. See also getIceParameters.\nSDPUtils.getDtlsParameters = function(mediaSection, sessionpart) {\n const lines = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=fingerprint:');\n // Note: a=setup line is ignored since we use the 'auto' role in Edge.\n return {\n role: 'auto',\n fingerprints: lines.map(SDPUtils.parseFingerprint),\n };\n};\n\n// Serializes DTLS parameters to SDP.\nSDPUtils.writeDtlsParameters = function(params, setupType) {\n let sdp = 'a=setup:' + setupType + '\\r\\n';\n params.fingerprints.forEach(fp => {\n sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\\r\\n';\n });\n return sdp;\n};\n\n// Parses a=crypto lines into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members\nSDPUtils.parseCryptoLine = function(line) {\n const parts = line.substring(9).split(' ');\n return {\n tag: parseInt(parts[0], 10),\n cryptoSuite: parts[1],\n keyParams: parts[2],\n sessionParams: parts.slice(3),\n };\n};\n\nSDPUtils.writeCryptoLine = function(parameters) {\n return 'a=crypto:' + parameters.tag + ' ' +\n parameters.cryptoSuite + ' ' +\n (typeof parameters.keyParams === 'object'\n ? SDPUtils.writeCryptoKeyParams(parameters.keyParams)\n : parameters.keyParams) +\n (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') +\n '\\r\\n';\n};\n\n// Parses the crypto key parameters into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam*\nSDPUtils.parseCryptoKeyParams = function(keyParams) {\n if (keyParams.indexOf('inline:') !== 0) {\n return null;\n }\n const parts = keyParams.substring(7).split('|');\n return {\n keyMethod: 'inline',\n keySalt: parts[0],\n lifeTime: parts[1],\n mkiValue: parts[2] ? parts[2].split(':')[0] : undefined,\n mkiLength: parts[2] ? parts[2].split(':')[1] : undefined,\n };\n};\n\nSDPUtils.writeCryptoKeyParams = function(keyParams) {\n return keyParams.keyMethod + ':'\n + keyParams.keySalt +\n (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') +\n (keyParams.mkiValue && keyParams.mkiLength\n ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength\n : '');\n};\n\n// Extracts all SDES parameters.\nSDPUtils.getCryptoParameters = function(mediaSection, sessionpart) {\n const lines = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=crypto:');\n return lines.map(SDPUtils.parseCryptoLine);\n};\n\n// Parses ICE information from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the ice-ufrag and ice-pwd lines as input.\nSDPUtils.getIceParameters = function(mediaSection, sessionpart) {\n const ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=ice-ufrag:')[0];\n const pwd = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=ice-pwd:')[0];\n if (!(ufrag && pwd)) {\n return null;\n }\n return {\n usernameFragment: ufrag.substring(12),\n password: pwd.substring(10),\n };\n};\n\n// Serializes ICE parameters to SDP.\nSDPUtils.writeIceParameters = function(params) {\n let sdp = 'a=ice-ufrag:' + params.usernameFragment + '\\r\\n' +\n 'a=ice-pwd:' + params.password + '\\r\\n';\n if (params.iceLite) {\n sdp += 'a=ice-lite\\r\\n';\n }\n return sdp;\n};\n\n// Parses the SDP media section and returns RTCRtpParameters.\nSDPUtils.parseRtpParameters = function(mediaSection) {\n const description = {\n codecs: [],\n headerExtensions: [],\n fecMechanisms: [],\n rtcp: [],\n };\n const lines = SDPUtils.splitLines(mediaSection);\n const mline = lines[0].split(' ');\n description.profile = mline[2];\n for (let i = 3; i < mline.length; i++) { // find all codecs from mline[3..]\n const pt = mline[i];\n const rtpmapline = SDPUtils.matchPrefix(\n mediaSection, 'a=rtpmap:' + pt + ' ')[0];\n if (rtpmapline) {\n const codec = SDPUtils.parseRtpMap(rtpmapline);\n const fmtps = SDPUtils.matchPrefix(\n mediaSection, 'a=fmtp:' + pt + ' ');\n // Only the first a=fmtp:<pt> is considered.\n codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {};\n codec.rtcpFeedback = SDPUtils.matchPrefix(\n mediaSection, 'a=rtcp-fb:' + pt + ' ')\n .map(SDPUtils.parseRtcpFb);\n description.codecs.push(codec);\n // parse FEC mechanisms from rtpmap lines.\n switch (codec.name.toUpperCase()) {\n case 'RED':\n case 'ULPFEC':\n description.fecMechanisms.push(codec.name.toUpperCase());\n break;\n default: // only RED and ULPFEC are recognized as FEC mechanisms.\n break;\n }\n }\n }\n SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(line => {\n description.headerExtensions.push(SDPUtils.parseExtmap(line));\n });\n const wildcardRtcpFb = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-fb:* ')\n .map(SDPUtils.parseRtcpFb);\n description.codecs.forEach(codec => {\n wildcardRtcpFb.forEach(fb=> {\n const duplicate = codec.rtcpFeedback.find(existingFeedback => {\n return existingFeedback.type === fb.type &&\n existingFeedback.parameter === fb.parameter;\n });\n if (!duplicate) {\n codec.rtcpFeedback.push(fb);\n }\n });\n });\n // FIXME: parse rtcp.\n return description;\n};\n\n// Generates parts of the SDP media section describing the capabilities /\n// parameters.\nSDPUtils.writeRtpDescription = function(kind, caps) {\n let sdp = '';\n\n // Build the mline.\n sdp += 'm=' + kind + ' ';\n sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs.\n sdp += ' ' + (caps.profile || 'UDP/TLS/RTP/SAVPF') + ' ';\n sdp += caps.codecs.map(codec => {\n if (codec.preferredPayloadType !== undefined) {\n return codec.preferredPayloadType;\n }\n return codec.payloadType;\n }).join(' ') + '\\r\\n';\n\n sdp += 'c=IN IP4 0.0.0.0\\r\\n';\n sdp += 'a=rtcp:9 IN IP4 0.0.0.0\\r\\n';\n\n // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb.\n caps.codecs.forEach(codec => {\n sdp += SDPUtils.writeRtpMap(codec);\n sdp += SDPUtils.writeFmtp(codec);\n sdp += SDPUtils.writeRtcpFb(codec);\n });\n let maxptime = 0;\n caps.codecs.forEach(codec => {\n if (codec.maxptime > maxptime) {\n maxptime = codec.maxptime;\n }\n });\n if (maxptime > 0) {\n sdp += 'a=maxptime:' + maxptime + '\\r\\n';\n }\n\n if (caps.headerExtensions) {\n caps.headerExtensions.forEach(extension => {\n sdp += SDPUtils.writeExtmap(extension);\n });\n }\n // FIXME: write fecMechanisms.\n return sdp;\n};\n\n// Parses the SDP media section and returns an array of\n// RTCRtpEncodingParameters.\nSDPUtils.parseRtpEncodingParameters = function(mediaSection) {\n const encodingParameters = [];\n const description = SDPUtils.parseRtpParameters(mediaSection);\n const hasRed = description.fecMechanisms.indexOf('RED') !== -1;\n const hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1;\n\n // filter a=ssrc:... cname:, ignore PlanB-msid\n const ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(parts => parts.attribute === 'cname');\n const primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc;\n let secondarySsrc;\n\n const flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID')\n .map(line => {\n const parts = line.substring(17).split(' ');\n return parts.map(part => parseInt(part, 10));\n });\n if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) {\n secondarySsrc = flows[0][1];\n }\n\n description.codecs.forEach(codec => {\n if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) {\n let encParam = {\n ssrc: primarySsrc,\n codecPayloadType: parseInt(codec.parameters.apt, 10),\n };\n if (primarySsrc && secondarySsrc) {\n encParam.rtx = {ssrc: secondarySsrc};\n }\n encodingParameters.push(encParam);\n if (hasRed) {\n encParam = JSON.parse(JSON.stringify(encParam));\n encParam.fec = {\n ssrc: primarySsrc,\n mechanism: hasUlpfec ? 'red+ulpfec' : 'red',\n };\n encodingParameters.push(encParam);\n }\n }\n });\n if (encodingParameters.length === 0 && primarySsrc) {\n encodingParameters.push({\n ssrc: primarySsrc,\n });\n }\n\n // we support both b=AS and b=TIAS but interpret AS as TIAS.\n let bandwidth = SDPUtils.matchPrefix(mediaSection, 'b=');\n if (bandwidth.length) {\n if (bandwidth[0].indexOf('b=TIAS:') === 0) {\n bandwidth = parseInt(bandwidth[0].substring(7), 10);\n } else if (bandwidth[0].indexOf('b=AS:') === 0) {\n // use formula from JSEP to convert b=AS to TIAS value.\n bandwidth = parseInt(bandwidth[0].substring(5), 10) * 1000 * 0.95\n - (50 * 40 * 8);\n } else {\n bandwidth = undefined;\n }\n encodingParameters.forEach(params => {\n params.maxBitrate = bandwidth;\n });\n }\n return encodingParameters;\n};\n\n// parses http://draft.ortc.org/#rtcrtcpparameters*\nSDPUtils.parseRtcpParameters = function(mediaSection) {\n const rtcpParameters = {};\n\n // Gets the first SSRC. Note that with RTX there might be multiple\n // SSRCs.\n const remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(obj => obj.attribute === 'cname')[0];\n if (remoteSsrc) {\n rtcpParameters.cname = remoteSsrc.value;\n rtcpParameters.ssrc = remoteSsrc.ssrc;\n }\n\n // Edge uses the compound attribute instead of reducedSize\n // compound is !reducedSize\n const rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize');\n rtcpParameters.reducedSize = rsize.length > 0;\n rtcpParameters.compound = rsize.length === 0;\n\n // parses the rtcp-mux attrіbute.\n // Note that Edge does not support unmuxed RTCP.\n const mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux');\n rtcpParameters.mux = mux.length > 0;\n\n return rtcpParameters;\n};\n\nSDPUtils.writeRtcpParameters = function(rtcpParameters) {\n let sdp = '';\n if (rtcpParameters.reducedSize) {\n sdp += 'a=rtcp-rsize\\r\\n';\n }\n if (rtcpParameters.mux) {\n sdp += 'a=rtcp-mux\\r\\n';\n }\n if (rtcpParameters.ssrc !== undefined && rtcpParameters.cname) {\n sdp += 'a=ssrc:' + rtcpParameters.ssrc +\n ' cname:' + rtcpParameters.cname + '\\r\\n';\n }\n return sdp;\n};\n\n\n// parses either a=msid: or a=ssrc:... msid lines and returns\n// the id of the MediaStream and MediaStreamTrack.\nSDPUtils.parseMsid = function(mediaSection) {\n let parts;\n const spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:');\n if (spec.length === 1) {\n parts = spec[0].substring(7).split(' ');\n return {stream: parts[0], track: parts[1]};\n }\n const planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(msidParts => msidParts.attribute === 'msid');\n if (planB.length > 0) {\n parts = planB[0].value.split(' ');\n return {stream: parts[0], track: parts[1]};\n }\n};\n\n// SCTP\n// parses draft-ietf-mmusic-sctp-sdp-26 first and falls back\n// to draft-ietf-mmusic-sctp-sdp-05\nSDPUtils.parseSctpDescription = function(mediaSection) {\n const mline = SDPUtils.parseMLine(mediaSection);\n const maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:');\n let maxMessageSize;\n if (maxSizeLine.length > 0) {\n maxMessageSize = parseInt(maxSizeLine[0].substring(19), 10);\n }\n if (isNaN(maxMessageSize)) {\n maxMessageSize = 65536;\n }\n const sctpPort = SDPUtils.matchPrefix(mediaSection, 'a=sctp-port:');\n if (sctpPort.length > 0) {\n return {\n port: parseInt(sctpPort[0].substring(12), 10),\n protocol: mline.fmt,\n maxMessageSize,\n };\n }\n const sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:');\n if (sctpMapLines.length > 0) {\n const parts = sctpMapLines[0]\n .substring(10)\n .split(' ');\n return {\n port: parseInt(parts[0], 10),\n protocol: parts[1],\n maxMessageSize,\n };\n }\n};\n\n// SCTP\n// outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers\n// support by now receiving in this format, unless we originally parsed\n// as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line\n// protocol of DTLS/SCTP -- without UDP/ or TCP/)\nSDPUtils.writeSctpDescription = function(media, sctp) {\n let output = [];\n if (media.protocol !== 'DTLS/SCTP') {\n output = [\n 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\\r\\n',\n 'c=IN IP4 0.0.0.0\\r\\n',\n 'a=sctp-port:' + sctp.port + '\\r\\n',\n ];\n } else {\n output = [\n 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\\r\\n',\n 'c=IN IP4 0.0.0.0\\r\\n',\n 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\\r\\n',\n ];\n }\n if (sctp.maxMessageSize !== undefined) {\n output.push('a=max-message-size:' + sctp.maxMessageSize + '\\r\\n');\n }\n return output.join('');\n};\n\n// Generate a session ID for SDP.\n// https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1\n// recommends using a cryptographically random +ve 64-bit value\n// but right now this should be acceptable and within the right range\nSDPUtils.generateSessionId = function() {\n return Math.random().toString().substr(2, 22);\n};\n\n// Write boiler plate for start of SDP\n// sessId argument is optional - if not supplied it will\n// be generated randomly\n// sessVersion is optional and defaults to 2\n// sessUser is optional and defaults to 'thisisadapterortc'\nSDPUtils.writeSessionBoilerplate = function(sessId, sessVer, sessUser) {\n let sessionId;\n const version = sessVer !== undefined ? sessVer : 2;\n if (sessId) {\n sessionId = sessId;\n } else {\n sessionId = SDPUtils.generateSessionId();\n }\n const user = sessUser || 'thisisadapterortc';\n // FIXME: sess-id should be an NTP timestamp.\n return 'v=0\\r\\n' +\n 'o=' + user + ' ' + sessionId + ' ' + version +\n ' IN IP4 127.0.0.1\\r\\n' +\n 's=-\\r\\n' +\n 't=0 0\\r\\n';\n};\n\n// Gets the direction from the mediaSection or the sessionpart.\nSDPUtils.getDirection = function(mediaSection, sessionpart) {\n // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv.\n const lines = SDPUtils.splitLines(mediaSection);\n for (let i = 0; i < lines.length; i++) {\n switch (lines[i]) {\n case 'a=sendrecv':\n case 'a=sendonly':\n case 'a=recvonly':\n case 'a=inactive':\n return lines[i].substring(2);\n default:\n // FIXME: What should happen here?\n }\n }\n if (sessionpart) {\n return SDPUtils.getDirection(sessionpart);\n }\n return 'sendrecv';\n};\n\nSDPUtils.getKind = function(mediaSection) {\n const lines = SDPUtils.splitLines(mediaSection);\n const mline = lines[0].split(' ');\n return mline[0].substring(2);\n};\n\nSDPUtils.isRejected = function(mediaSection) {\n return mediaSection.split(' ', 2)[1] === '0';\n};\n\nSDPUtils.parseMLine = function(mediaSection) {\n const lines = SDPUtils.splitLines(mediaSection);\n const parts = lines[0].substring(2).split(' ');\n return {\n kind: parts[0],\n port: parseInt(parts[1], 10),\n protocol: parts[2],\n fmt: parts.slice(3).join(' '),\n };\n};\n\nSDPUtils.parseOLine = function(mediaSection) {\n const line = SDPUtils.matchPrefix(mediaSection, 'o=')[0];\n const parts = line.substring(2).split(' ');\n return {\n username: parts[0],\n sessionId: parts[1],\n sessionVersion: parseInt(parts[2], 10),\n netType: parts[3],\n addressType: parts[4],\n address: parts[5],\n };\n};\n\n// a very naive interpretation of a valid SDP.\nSDPUtils.isValidSDP = function(blob) {\n if (typeof blob !== 'string' || blob.length === 0) {\n return false;\n }\n const lines = SDPUtils.splitLines(blob);\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].length < 2 || lines[i].charAt(1) !== '=') {\n return false;\n }\n // TODO: check the modifier a bit more.\n }\n return true;\n};\n\n// Expose public methods.\nif (typeof module === 'object') {\n module.exports = SDPUtils;\n}\n","// Copyright Epic Games, Inc. All Rights Reserved.\nexport class RTCUtils {\n static isVideoTransceiver(transceiver) {\n return this.canTransceiverReceiveVideo(transceiver) || this.canTransceiverSendVideo(transceiver);\n }\n static canTransceiverReceiveVideo(transceiver) {\n return (!!transceiver &&\n (transceiver.direction === 'sendrecv' || transceiver.direction === 'recvonly') &&\n transceiver.receiver &&\n transceiver.receiver.track &&\n transceiver.receiver.track.kind === 'video');\n }\n static canTransceiverSendVideo(transceiver) {\n return (!!transceiver &&\n (transceiver.direction === 'sendrecv' || transceiver.direction === 'sendonly') &&\n transceiver.sender &&\n transceiver.sender.track &&\n transceiver.sender.track.kind === 'video');\n }\n static isAudioTransceiver(transceiver) {\n return this.canTransceiverReceiveAudio(transceiver) || this.canTransceiverSendAudio(transceiver);\n }\n static canTransceiverReceiveAudio(transceiver) {\n return (!!transceiver &&\n (transceiver.direction === 'sendrecv' || transceiver.direction === 'recvonly') &&\n transceiver.receiver &&\n transceiver.receiver.track &&\n transceiver.receiver.track.kind === 'audio');\n }\n static canTransceiverSendAudio(transceiver) {\n return (!!transceiver &&\n (transceiver.direction === 'sendrecv' || transceiver.direction === 'sendonly') &&\n transceiver.sender &&\n transceiver.sender.track &&\n transceiver.sender.track.kind === 'audio');\n }\n}\n//# sourceMappingURL=RTCUtils.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\n/**\n * Represents either a:\n * - synchronization source: https://developer.mozilla.org/en-US/docs/Web/API/RTCRtpReceiver/getSynchronizationSources\n * - contributing source: https://developer.mozilla.org/en-US/docs/Web/API/RTCRtpReceiver/getContributingSources\n * Which also (if browser supports it) may optionall contain fields for captureTimestamp + senderCaptureTimeOffset\n * if the abs-capture-time RTP header extension is enabled (currently this only works in Chromium based browsers).\n */\nclass RTCRtpCaptureSource {\n}\n/**\n * FrameTimingInfo is a Chromium-specific set of WebRTC stats useful for latency calculation. It is stored in WebRTC stats as `googTimingFrameInfo`.\n * 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\n * 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\n * It is discussed by its author here: https://github.com/w3c/webrtc-provisional-stats/issues/40#issuecomment-1272916692\n * In summary it a comma-delimited string that contains the following (in this order):\n * 1) RTP timestamp: the RTP timestamp of the frame\n * 2) Capture time: timestamp when this frame was captured\n * 3) Encode start: timestamp when this frame started to be encoded\n * 4) Encode finish: timestamp when this frame finished encoding\n * 5) Packetization finish: timestamp when this frame was split into packets and was ready to be sent over the network\n * 6) Pacer exit: timestamp when last packet of this frame was sent over the network by the sender at this timestamp\n * 7) Network timestamp1: place for the SFU to mark when the frame started being forwarded. Application specific.\n * 8) Network timestamp2: place for the SFU to mark when the frame finished being forwarded. Application specific.\n * 9) Receive start: timestamp when the first packet of this frame was received\n * 10) Receive finish: timestamp when the last packet of this frame was received\n * 11) Decode start: timestamp when the frame was passed to decoder\n * 12) Decode finish: timestamp when the frame was decoded\n * 13) Render time: timestamp of the projected render time for this frame\n * 14) \"is outlier\": a flag for if this frame is bigger in encoded size than the average frame by at least 5x.\n * 15) \"triggered by timer\": a flag for if this report was triggered by the timer (The report is sent every 200ms)\n */\nexport class FrameTimingInfo {\n}\n/**\n * Calculates a combination of latency statistics using purely WebRTC API.\n */\nexport class LatencyCalculator {\n constructor() {\n /* Clock offset between peer clocks cannot always be calculated as it relies of latest sender reports.\n * so we store the last time we had a valid clock offset in the assumption that clocks haven't drifted too much since then.\n */\n this.latestSenderRecvClockOffset = null;\n }\n calculate(stats, receivers) {\n const latencyInfo = new LatencyInfo();\n const rttMS = this.getRTTMs(stats);\n if (rttMS != null) {\n latencyInfo.rttMs = rttMS;\n // Calculate sender latency using the first valid video ssrc/csrc\n const captureSource = this.getCaptureSource(receivers);\n if (captureSource != null) {\n const senderLatencyMs = this.calculateSenderLatency(stats, captureSource);\n if (senderLatencyMs !== null) {\n latencyInfo.senderLatencyMs = senderLatencyMs;\n }\n }\n }\n // https://w3c.github.io/webrtc-stats/#dom-rtcinboundrtpstreamstats-totalprocessingdelay\n if (stats.inboundVideoStats.totalProcessingDelay !== undefined &&\n stats.inboundVideoStats.framesDecoded !== undefined) {\n latencyInfo.averageProcessingDelayMs =\n (stats.inboundVideoStats.totalProcessingDelay / stats.inboundVideoStats.framesDecoded) * 1000;\n }\n // https://w3c.github.io/webrtc-stats/#dom-rtcinboundrtpstreamstats-jitterbufferminimumdelay\n if (stats.inboundVideoStats.jitterBufferDelay !== undefined &&\n stats.inboundVideoStats.jitterBufferEmittedCount !== undefined) {\n latencyInfo.averageJitterBufferDelayMs =\n (stats.inboundVideoStats.jitterBufferDelay /\n stats.inboundVideoStats.jitterBufferEmittedCount) *\n 1000;\n }\n // https://w3c.github.io/webrtc-stats/#dom-rtcinboundrtpstreamstats-totaldecodetime\n if (stats.inboundVideoStats.framesDecoded !== undefined &&\n stats.inboundVideoStats.totalDecodeTime !== undefined) {\n latencyInfo.averageDecodeLatencyMs =\n (stats.inboundVideoStats.totalDecodeTime / stats.inboundVideoStats.framesDecoded) * 1000;\n }\n // https://w3c.github.io/webrtc-stats/#dom-rtcinboundrtpstreamstats-framesassembledfrommultiplepackets\n if (stats.inboundVideoStats.totalAssemblyTime !== undefined &&\n stats.inboundVideoStats.framesAssembledFromMultiplePackets !== undefined) {\n latencyInfo.averageAssemblyDelayMs =\n (stats.inboundVideoStats.totalAssemblyTime /\n stats.inboundVideoStats.framesAssembledFromMultiplePackets) *\n 1000;\n }\n // Extract extra Chrome-specific stats like encoding latency\n if (stats.inboundVideoStats.googTimingFrameInfo !== undefined &&\n stats.inboundVideoStats.googTimingFrameInfo.length > 0) {\n latencyInfo.frameTiming = this.extractFrameTimingInfo(stats.inboundVideoStats.googTimingFrameInfo);\n }\n // Calculate E2E latency using video-timing capture to send time + one way network latency + receiver-side latency\n if (latencyInfo.frameTiming !== undefined &&\n latencyInfo.frameTiming.captureToSendLatencyMs !== undefined &&\n latencyInfo.averageProcessingDelayMs !== undefined &&\n latencyInfo.rttMs !== undefined) {\n latencyInfo.averageE2ELatency =\n latencyInfo.frameTiming.captureToSendLatencyMs +\n latencyInfo.rttMs * 0.5 +\n latencyInfo.averageProcessingDelayMs;\n }\n // Calculate E2E latency as abs-capture-time capture to send latency + one way network latency + receiver-side latency\n if (latencyInfo.senderLatencyMs != undefined &&\n latencyInfo.averageProcessingDelayMs !== undefined &&\n latencyInfo.rttMs !== undefined) {\n latencyInfo.averageE2ELatency =\n latencyInfo.senderLatencyMs + latencyInfo.rttMs * 0.5 + latencyInfo.averageProcessingDelayMs;\n }\n return latencyInfo;\n }\n extractFrameTimingInfo(googTimingFrameInfo) {\n const timingInfo = new FrameTimingInfo();\n const timingInfoArr = googTimingFrameInfo.split(',');\n // Should have exactly 15 elements according to:\n // https://source.chromium.org/chromium/chromium/src/+/main:third_party/webrtc/api/video/video_timing.cc;l=82;drc=8d399817282e3c12ed54eb23ec42a5e418298ec6\n if (timingInfoArr.length === 15) {\n timingInfo.rtpTimestamp = Number.parseInt(timingInfoArr[0]);\n timingInfo.captureTimestamp = Number.parseInt(timingInfoArr[1]);\n timingInfo.encodeStartTimestamp = Number.parseInt(timingInfoArr[2]);\n timingInfo.encodeFinishTimestamp = Number.parseInt(timingInfoArr[3]);\n timingInfo.packetizerFinishTimestamp = Number.parseInt(timingInfoArr[4]);\n timingInfo.pacerExitTimestamp = Number.parseInt(timingInfoArr[5]);\n timingInfo.networkTimestamp1 = Number.parseInt(timingInfoArr[6]);\n timingInfo.networkTimestamp2 = Number.parseInt(timingInfoArr[7]);\n timingInfo.receiveStart = Number.parseInt(timingInfoArr[8]);\n timingInfo.receiveFinish = Number.parseInt(timingInfoArr[9]);\n timingInfo.decodeStart = Number.parseInt(timingInfoArr[10]);\n timingInfo.decodeFinish = Number.parseInt(timingInfoArr[11]);\n timingInfo.renderTime = Number.parseInt(timingInfoArr[12]);\n timingInfo.isOutlier = Number.parseInt(timingInfoArr[13]) > 0;\n timingInfo.isTriggeredByTimer = Number.parseInt(timingInfoArr[14]) > 0;\n // Calculate some latency stats\n timingInfo.encoderLatencyMs = timingInfo.encodeFinishTimestamp - timingInfo.encodeStartTimestamp;\n timingInfo.packetizeLatencyMs =\n timingInfo.packetizerFinishTimestamp - timingInfo.encodeFinishTimestamp;\n timingInfo.pacerLatencyMs = timingInfo.pacerExitTimestamp - timingInfo.packetizerFinishTimestamp;\n timingInfo.captureToSendLatencyMs = timingInfo.pacerExitTimestamp - timingInfo.captureTimestamp;\n }\n return timingInfo;\n }\n calculateSenderLatency(stats, captureSource) {\n // The calculation performed in this function is as per the procedure defined here:\n // https://w3c.github.io/webrtc-extensions/#dom-rtcrtpcontributingsource-sendercapturetimeoffset\n // Get the sender capture in the sender's clock\n const senderCaptureTimestamp = captureSource.captureTimestamp + captureSource.senderCaptureTimeOffset;\n let sendRecvClockOffset = this.calculateSenderReceiverClockOffset(stats);\n // Use latest clock offset if we couldn't calculate one now\n if (sendRecvClockOffset == null) {\n if (this.latestSenderRecvClockOffset != null) {\n sendRecvClockOffset = this.latestSenderRecvClockOffset;\n }\n else {\n return null;\n }\n }\n else {\n this.latestSenderRecvClockOffset = sendRecvClockOffset;\n }\n // This brings sender clock roughly inline with recv clock\n const recvCaptureTimestampNTP = senderCaptureTimestamp + sendRecvClockOffset;\n // As defined in Chrome source: https://chromium.googlesource.com/external/webrtc/+/master/system_wrappers/include/clock.h#26\n const ntp1970 = 2208988800000;\n const recvCaptureTimestamp = recvCaptureTimestampNTP - ntp1970;\n const senderLatency = captureSource.timestamp - recvCaptureTimestamp;\n return senderLatency;\n }\n /**\n * Find the first valid ssrc or csrc that has capture time fields present from abs-capture-time header extension.\n * @param receivers The RTP receviers this peer connection has.\n * @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).\n */\n getCaptureSource(receivers) {\n // We only want video receivers\n receivers = receivers.filter((receiver) => receiver.track.kind === 'video');\n for (const receiver of receivers) {\n // Go through all ssrc and csrc to check for capture timestamp\n // Note: Conversion to `any` here is because TS does not have captureTimestamp etc defined in the types\n // these fields only exist in Chromium currently.\n const sources = receiver\n .getSynchronizationSources()\n .concat(receiver.getContributingSources());\n for (const src of sources) {\n if (src.captureTimestamp !== undefined &&\n src.senderCaptureTimeOffset !== undefined &&\n src.timestamp !== undefined) {\n const captureSrc = new RTCRtpCaptureSource();\n captureSrc.timestamp = src.timestamp;\n captureSrc.captureTimestamp = src.captureTimestamp;\n captureSrc.senderCaptureTimeOffset = src.senderCaptureTimeOffset;\n return captureSrc;\n }\n }\n }\n return null;\n }\n calculateSenderReceiverClockOffset(stats) {\n // The calculation performed in this function is as per the procedure defined here:\n // https://w3c.github.io/webrtc-extensions/#dom-rtcrtpcontributingsource-sendercapturetimeoffset\n const hasRemoteOutboundVideoStats = stats.remoteOutboundVideoStats !== undefined &&\n stats.remoteOutboundVideoStats.timestamp !== undefined &&\n stats.remoteOutboundVideoStats.remoteTimestamp !== undefined;\n // Note: As of Chrome 132, remote-outbound-rtp stats for video are not yet implemented (audio works).\n // This codepath should activate once they do begin to work.\n if (!hasRemoteOutboundVideoStats) {\n return null;\n }\n const remoteStatsArrivedTimestamp = stats.remoteOutboundVideoStats.timestamp;\n const remoteStatsSentTimestamp = stats.remoteOutboundVideoStats.remoteTimestamp;\n const rttMs = this.getRTTMs(stats);\n if (remoteStatsArrivedTimestamp !== undefined &&\n remoteStatsSentTimestamp !== undefined &&\n rttMs !== null) {\n const onewayDelay = rttMs * 0.5;\n return remoteStatsArrivedTimestamp - (remoteStatsSentTimestamp + onewayDelay);\n }\n // Could not get stats to calculate sender/receiver clock offset\n else {\n return null;\n }\n }\n getRTTMs(stats) {\n // Try to get it from the active candidate pair\n const activeCandidatePair = stats.getActiveCandidatePair();\n if (!!activeCandidatePair && activeCandidatePair.currentRoundTripTime !== undefined) {\n const curRTTSeconds = activeCandidatePair.currentRoundTripTime;\n return curRTTSeconds * 1000;\n }\n // Next try to get it from remote-outbound-rtp video stats\n if (!!stats.remoteOutboundVideoStats &&\n stats.remoteOutboundVideoStats.totalRoundTripTime !== undefined &&\n stats.remoteOutboundVideoStats.roundTripTimeMeasurements !== undefined &&\n stats.remoteOutboundVideoStats.roundTripTimeMeasurements > 0) {\n const avgRttSeconds = stats.remoteOutboundVideoStats.totalRoundTripTime /\n stats.remoteOutboundVideoStats.roundTripTimeMeasurements;\n return avgRttSeconds * 1000;\n }\n // Next try to get it from remote-outbound-rtp audio stats\n if (!!stats.remoteOutboundAudioStats &&\n stats.remoteOutboundAudioStats.totalRoundTripTime !== undefined &&\n stats.remoteOutboundAudioStats.roundTripTimeMeasurements !== undefined &&\n stats.remoteOutboundAudioStats.roundTripTimeMeasurements > 0) {\n const avgRttSeconds = stats.remoteOutboundAudioStats.totalRoundTripTime /\n stats.remoteOutboundAudioStats.roundTripTimeMeasurements;\n return avgRttSeconds * 1000;\n }\n return null;\n }\n}\n/**\n * A collection of latency information calculated using the WebRTC API.\n * Most stats are calculated following the spec:\n * https://w3c.github.io/webrtc-stats/#dictionary-rtcinboundrtpstreamstats-members\n */\nexport class LatencyInfo {\n constructor() {\n /**\n * The time taken from the moment a frame is done capturing to the moment it is sent over the network.\n * Note: This can only be calculated if both offer and answer contain the\n * the RTP header extension for `video-timing` (Chrome only for now)\n */\n this.senderLatencyMs = undefined;\n /**\n * The time taken from the moment a frame is done capturing to the moment it is sent over the network.\n * Note: This can only be calculated if both offer and answer contain the\n * the RTP header extension for `abs-capture-time` (Chrome only for now)\n */\n this.senderLatencyAbsCaptureTimeMs = undefined;\n /* The round trip time (milliseconds) between each sender->receiver->sender */\n this.rttMs = undefined;\n /* Average time taken (milliseconds) from video packet receipt to post-decode. */\n this.averageProcessingDelayMs = undefined;\n /* Average time taken (milliseconds) inside the jitter buffer (which is post-receipt but pre-decode). */\n this.averageJitterBufferDelayMs = undefined;\n /* Average time taken (milliseconds) to decode a video frame. */\n this.averageDecodeLatencyMs = undefined;\n /* Average time taken (milliseconds) to between receipt of the first and last video packet of a. */\n this.averageAssemblyDelayMs = undefined;\n /* The sender latency + RTT/2 + processing delay */\n this.averageE2ELatency = undefined;\n /* Timing information about the worst performing frame since the last getStats call (only works on Chrome) */\n this.frameTiming = undefined;\n }\n}\n//# sourceMappingURL=LatencyCalculator.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';\nimport { OptionParameters, Flags } from '../Config/Config';\nimport { AggregatedStats } from './AggregatedStats';\nimport { parseRtpParameters, splitSections } from 'sdp';\nimport { RTCUtils } from '../Util/RTCUtils';\nimport { SDPUtils } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';\nimport { LatencyCalculator } from './LatencyCalculator';\nexport const kAbsCaptureTime = 'http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time';\n/**\n * Handles the Peer Connection\n */\nexport class PeerConnectionController {\n /**\n * Create a new RTC Peer Connection client\n * @param options - Peer connection Options\n * @param config - The config for our PS experience.\n */\n constructor(options, config, preferredCodec) {\n this.config = config;\n this.createPeerConnection(options, preferredCodec);\n this.latencyCalculator = new LatencyCalculator();\n }\n createPeerConnection(options, preferredCodec) {\n // Set the ICE transport to relay if TURN enabled\n if (this.config.isFlagEnabled(Flags.ForceTURN)) {\n options.iceTransportPolicy = 'relay';\n Logger.Info('Forcing TURN usage by setting ICE Transport Policy in peer connection config.');\n }\n // build a new peer connection with the options\n this.peerConnection = new RTCPeerConnection(options);\n this.peerConnection.onsignalingstatechange = (ev) => this.handleSignalStateChange(ev);\n this.peerConnection.oniceconnectionstatechange = (ev) => this.handleIceConnectionStateChange(ev);\n this.peerConnection.onicegatheringstatechange = (ev) => this.handleIceGatheringStateChange(ev);\n this.peerConnection.ontrack = (ev) => this.handleOnTrack(ev);\n this.peerConnection.onicecandidate = (ev) => this.handleIceCandidate(ev);\n this.peerConnection.ondatachannel = (ev) => this.handleDataChannel(ev);\n this.aggregatedStats = new AggregatedStats();\n this.preferredCodec = preferredCodec;\n this.updateCodecSelection = true;\n }\n /**\n * Create an offer for the Web RTC handshake and send the offer to the signaling server via websocket\n * @param offerOptions - RTC Offer Options\n */\n createOffer(offerOptions, config) {\n return __awaiter(this, void 0, void 0, function* () {\n Logger.Info('Create Offer');\n const isLocalhostConnection = location.hostname === 'localhost' || location.hostname === '127.0.0.1';\n const isHttpsConnection = location.protocol === 'https:';\n let useMic = config.isFlagEnabled(Flags.UseMic);\n let useCamera = config.isFlagEnabled(Flags.UseCamera);\n if ((useMic || useCamera) && !(isLocalhostConnection || isHttpsConnection)) {\n useMic = false;\n useCamera = false;\n Logger.Error('Microphone and Webcam access in the browser will not work if you are not on HTTPS or localhost. Disabling mic and webcam access.');\n Logger.Error(\"For testing you can enable HTTP microphone access Chrome by visiting chrome://flags/ and enabling 'unsafely-treat-insecure-origin-as-secure'\");\n }\n this.setupTransceiversAsync(useMic, useCamera).finally(() => {\n var _a;\n (_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.createOffer(offerOptions).then((offer) => {\n var _a;\n this.showTextOverlayConnecting();\n offer.sdp = this.mungeSDP(offer.sdp, useMic);\n (_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.setLocalDescription(offer);\n this.onSendWebRTCOffer(offer);\n }).catch(() => {\n this.showTextOverlaySetupFailure();\n });\n });\n });\n }\n /**\n * Receive offer from UE side and process it as the remote description of this peer connection\n */\n receiveOffer(offer, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n Logger.Info('Receive Offer');\n // If UE or JSStreamer did send abs-capture-time RTP header extension to a non-Chrome browser\n // then remove it from the SDP because if Firefox detects it in offer or answer it will fail to connect\n // due having 15 or more header extensions: https://mailarchive.ietf.org/arch/msg/rtcweb/QRnWNuWzGuLRovWdHkodNP6VOgg/\n if (this.isFirefox()) {\n // example: a=extmap:15 http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time\n offer.sdp = offer.sdp.replace(/^a=extmap:\\d+ http:\\/\\/www\\.webrtc\\.org\\/experiments\\/rtp-hdrext\\/abs-capture-time\\r\\n/gm, '');\n }\n (_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.setRemoteDescription(offer).then(() => {\n // Fire event for when remote offer description is set\n this.onSetRemoteDescription(offer);\n const isLocalhostConnection = location.hostname === 'localhost' || location.hostname === '127.0.0.1';\n const isHttpsConnection = location.protocol === 'https:';\n let useMic = config.isFlagEnabled(Flags.UseMic);\n let useCamera = config.isFlagEnabled(Flags.UseCamera);\n if ((useMic || useCamera) && !(isLocalhostConnection || isHttpsConnection)) {\n useMic = false;\n useCamera = false;\n Logger.Error('Microphone and Webcam access in the browser will not work if you are not on HTTPS or localhost. Disabling mic and webcam access.');\n Logger.Error(\"For testing you can enable HTTP microphone access Chrome by visiting chrome://flags/ and enabling 'unsafely-treat-insecure-origin-as-secure'\");\n }\n // Add our list of preferred codecs, in order of preference\n this.config.setOptionSettingOptions(OptionParameters.PreferredCodec, this.fuzzyIntersectUEAndBrowserCodecs(offer));\n this.setupTransceiversAsync(useMic, useCamera).finally(() => {\n var _a;\n (_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.createAnswer().then((Answer) => {\n var _a;\n Answer.sdp = this.mungeSDP(Answer.sdp, useMic);\n return (_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.setLocalDescription(Answer);\n }).then(() => {\n var _a;\n this.onSetLocalDescription((_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.currentLocalDescription);\n }).catch((err) => {\n Logger.Error(`createAnswer() failed - ${err}`);\n });\n });\n });\n });\n }\n /**\n * Set the Remote Descriptor from the signaling server to the RTC Peer Connection\n * @param answer - RTC Session Descriptor from the Signaling Server\n */\n receiveAnswer(answer) {\n var _a;\n (_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.setRemoteDescription(answer);\n // Add our list of preferred codecs, in order of preference\n this.config.setOptionSettingOptions(OptionParameters.PreferredCodec, this.fuzzyIntersectUEAndBrowserCodecs(answer));\n }\n /**\n * Generate Aggregated Stats and then fire a onVideo Stats event\n */\n generateStats() {\n this.peerConnection.getStats().then((statsData) => {\n this.aggregatedStats.processStats(statsData);\n this.onVideoStats(this.aggregatedStats);\n // Calculate latency using stats and video receivers and then call the handling function\n const latencyInfo = this.latencyCalculator.calculate(this.aggregatedStats, this.peerConnection.getReceivers());\n this.onLatencyCalculated(latencyInfo);\n // Update the preferred codec selection based on what was actually negotiated\n if (this.updateCodecSelection && !!this.aggregatedStats.inboundVideoStats.codecId) {\n // Construct the qualified codec name from the mimetype and fmtp\n const codecStats = this.aggregatedStats.codecs.get(this.aggregatedStats.inboundVideoStats.codecId);\n if (codecStats === undefined) {\n return;\n }\n const codecShortname = codecStats.mimeType.replace('video/', '');\n let fullCodecName = codecShortname;\n if (codecStats.sdpFmtpLine && codecStats.sdpFmtpLine.trim() !== '') {\n fullCodecName = `${codecShortname} ${codecStats.sdpFmtpLine.trim()}`;\n }\n const allBrowserCodecs = this.config.getSettingOption(OptionParameters.PreferredCodec).options;\n // The list of codecs directly contains the one that was negotiated, select that\n if (allBrowserCodecs.includes(fullCodecName)) {\n this.config.setOptionSettingValue(OptionParameters.PreferredCodec, fullCodecName);\n return;\n }\n // If we couldn't match on the full name, try to match on just the codec shortname\n const filteredList = allBrowserCodecs.filter((option) => option.indexOf(codecShortname) !== -1);\n if (filteredList.length > 0) {\n this.config.setOptionSettingValue(OptionParameters.PreferredCodec, filteredList[0]);\n return;\n }\n }\n });\n }\n /**\n * Close The Peer Connection\n */\n close() {\n if (this.peerConnection) {\n this.peerConnection.close();\n this.peerConnection = null;\n }\n }\n /**\n * Modify the Session Descriptor\n * @param sdp - Session Descriptor as a string\n * @param useMic - Is the microphone in use\n * @returns A modified Session Descriptor\n */\n mungeSDP(sdp, useMic) {\n let mungedSDP = sdp.replace(/(a=fmtp:\\d+ .*level-asymmetry-allowed=.*)\\r\\n/gm, '$1;x-google-start-bitrate=10000;x-google-max-bitrate=100000\\r\\n');\n // set max bitrate to highest bitrate Opus supports\n let audioSDP = 'maxaveragebitrate=510000;';\n if (useMic) {\n // set the max capture rate to 48khz (so we can send high quality audio from mic)\n audioSDP += 'sprop-maxcapturerate=48000;';\n }\n // Force mono or stereo based on whether ?forceMono was passed or not\n audioSDP += this.config.isFlagEnabled(Flags.ForceMonoAudio) ? 'stereo=0;' : 'stereo=1;';\n // enable in-band forward error correction for opus audio\n audioSDP += 'useinbandfec=1';\n // We use the line 'useinbandfec=1' (which Opus uses) to set our Opus specific audio parameters.\n mungedSDP = mungedSDP.replace('useinbandfec=1', audioSDP);\n // Add abs-capture-time RTP header extension if we have enabled the setting.\n // Note: As at Feb 2025, Chromium based browsers are the only ones that support this and\n // munging it into the answer in Firefox will cause the connection to fail.\n if (this.config.isFlagEnabled(Flags.EnableCaptureTimeExt) && !this.isFirefox()) {\n mungedSDP = SDPUtils.addVideoHeaderExtensionToSdp(mungedSDP, kAbsCaptureTime);\n }\n return mungedSDP;\n }\n isFirefox() {\n return navigator.userAgent.indexOf('Firefox') > 0;\n }\n /**\n * When a Ice Candidate is received add to the RTC Peer Connection\n * @param iceCandidate - RTC Ice Candidate from the Signaling Server\n */\n handleOnIce(iceCandidate) {\n var _a;\n Logger.Info('peerconnection handleOnIce');\n // // if forcing TURN, reject any candidates not relay\n if (this.config.isFlagEnabled(Flags.ForceTURN)) {\n // check if no relay address is found, if so, we are assuming it means no TURN server\n if (iceCandidate.candidate.indexOf('relay') < 0) {\n Logger.Info(`Dropping candidate because it was not TURN relay. | Type= ${iceCandidate.type} | Protocol= ${iceCandidate.protocol} | Address=${iceCandidate.address} | Port=${iceCandidate.port} |`);\n return;\n }\n }\n (_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.addIceCandidate(iceCandidate);\n }\n /**\n * When the RTC Peer Connection Signaling server state Changes\n * @param state - Signaling Server State Change Event\n */\n handleSignalStateChange(state) {\n Logger.Info('signaling state change: ' + state);\n }\n /**\n * Handle when the Ice Connection State Changes\n * @param state - Ice Connection State\n */\n handleIceConnectionStateChange(state) {\n Logger.Info('ice connection state change: ' + state);\n this.onIceConnectionStateChange(state);\n }\n /**\n * Handle when the Ice Gathering State Changes\n * @param state - Ice Gathering State Change\n */\n handleIceGatheringStateChange(state) {\n Logger.Info('ice gathering state change: ' + JSON.stringify(state));\n }\n /**\n * Activates the onTrack method\n * @param event - The webRtc track event\n */\n handleOnTrack(event) {\n if (event.streams.length < 1 || event.streams[0].id == 'probator') {\n return;\n }\n if (event.track.kind == 'video') {\n this.videoTrack = event.track;\n }\n if (event.track.kind == 'audio') {\n this.audioTrack = event.track;\n }\n this.onTrack(event);\n }\n /**\n * Activates the onPeerIceCandidate\n * @param event - The peer ice candidate\n */\n handleIceCandidate(event) {\n this.onPeerIceCandidate(event);\n }\n /**\n * Activates the onDataChannel\n * @param event - The peer's data channel\n */\n handleDataChannel(event) {\n this.onDataChannel(event);\n }\n /**\n * An override method for onTrack for use outside of the PeerConnectionController\n * @param trackEvent - The webRtc track event\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onTrack(trackEvent) {\n // Default Functionality: Do Nothing\n }\n /**\n * An override method for onIceConnectionStateChange for use outside of the PeerConnectionController\n * @param event - The webRtc iceconnectionstatechange event\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onIceConnectionStateChange(event) {\n // Default Functionality: Do Nothing\n }\n /**\n * An override method for onPeerIceCandidate for use outside of the PeerConnectionController\n * @param peerConnectionIceEvent - The peer ice candidate\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onPeerIceCandidate(peerConnectionIceEvent) {\n // Default Functionality: Do Nothing\n }\n /**\n * An override method for onDataChannel for use outside of the PeerConnectionController\n * @param datachannelEvent - The peer's data channel\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onDataChannel(datachannelEvent) {\n // Default Functionality: Do Nothing\n }\n /**\n * Find the intersection between UE and browser codecs, with fuzzy matching if some parameters are mismatched.\n * @param sdp The remote sdp\n * @returns The intersection between browser supported codecs and ue supported codecs.\n */\n fuzzyIntersectUEAndBrowserCodecs(sdp) {\n // We want to build an array of all supported codecs on both sides\n const allSupportedCodecs = new Array();\n const allUECodecs = this.parseAvailableCodecs(sdp);\n const allBrowserCodecs = this.config.getSettingOption(OptionParameters.PreferredCodec).options;\n for (const ueCodec of allUECodecs) {\n // Check if browser codecs directly matches UE codec (with parameters and everything)\n if (allBrowserCodecs.includes(ueCodec)) {\n allSupportedCodecs.push(ueCodec);\n continue;\n }\n // Otherwise check if browser codec at least contains a match for the UE codec name (without parameters).\n else {\n const ueCodecNameAndParams = ueCodec.split(' ');\n const ueCodecName = ueCodecNameAndParams[0];\n for (const browserCodec of allBrowserCodecs) {\n if (browserCodec.includes(ueCodecName)) {\n // We pass browser codec here as they option contain extra parameters.\n allSupportedCodecs.push(browserCodec);\n break;\n }\n }\n }\n }\n return allSupportedCodecs;\n }\n /**\n * Setup tracks on the RTC Peer Connection\n * @param useMic - is mic in use\n * @param useCamera - is webcam in use\n */\n setupTransceiversAsync(useMic, useCamera) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n let hasVideoReceiver = false;\n for (const transceiver of (_b = (_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.getTransceivers()) !== null && _b !== void 0 ? _b : []) {\n if (transceiver &&\n transceiver.receiver &&\n transceiver.receiver.track &&\n transceiver.receiver.track.kind === 'video') {\n hasVideoReceiver = true;\n break;\n }\n }\n // Setup a transceiver for sending webcam video to UE and receiving video from UE\n if (!useCamera) {\n if (!hasVideoReceiver) {\n (_c = this.peerConnection) === null || _c === void 0 ? void 0 : _c.addTransceiver('video', { direction: 'recvonly' });\n }\n }\n else {\n yield this.setupVideoSender(hasVideoReceiver);\n }\n if (RTCRtpReceiver.getCapabilities && this.preferredCodec != '') {\n for (const transceiver of (_e = (_d = this.peerConnection) === null || _d === void 0 ? void 0 : _d.getTransceivers()) !== null && _e !== void 0 ? _e : []) {\n if (transceiver &&\n transceiver.receiver &&\n transceiver.receiver.track &&\n transceiver.receiver.track.kind === 'video' &&\n transceiver.setCodecPreferences) {\n // Get our preferred codec from the codecs options drop down\n const preferredRTPCodec = this.preferredCodec.split(' ');\n const preferredRTCRtpCodecCapability = {\n mimeType: 'video/' + preferredRTPCodec[0] /* Name */,\n clockRate: 90000 /* All current video formats in browsers have 90khz clock rate */,\n sdpFmtpLine: preferredRTPCodec[1] ? preferredRTPCodec[1] : ''\n };\n // Populate a list of codecs we will support with our preferred one in the first position\n const ourSupportedCodecs = [preferredRTCRtpCodecCapability];\n // Go through all codecs the browser supports and add them to the list (in any order)\n RTCRtpReceiver.getCapabilities('video').codecs.forEach((browserSupportedCodec) => {\n // Don't add our preferred codec again, but add everything else\n if (browserSupportedCodec.mimeType != preferredRTCRtpCodecCapability.mimeType) {\n ourSupportedCodecs.push(browserSupportedCodec);\n }\n else if ((browserSupportedCodec === null || browserSupportedCodec === void 0 ? void 0 : browserSupportedCodec.sdpFmtpLine) !=\n (preferredRTCRtpCodecCapability === null || preferredRTCRtpCodecCapability === void 0 ? void 0 : preferredRTCRtpCodecCapability.sdpFmtpLine)) {\n ourSupportedCodecs.push(browserSupportedCodec);\n }\n });\n for (const codec of ourSupportedCodecs) {\n if ((codec === null || codec === void 0 ? void 0 : codec.sdpFmtpLine) === undefined || codec.sdpFmtpLine === '') {\n // We can't dynamically add members to the codec, so instead remove the field if it's empty\n delete codec.sdpFmtpLine;\n }\n }\n transceiver.setCodecPreferences(ourSupportedCodecs);\n }\n }\n }\n let hasAudioReceiver = false;\n for (const transceiver of (_g = (_f = this.peerConnection) === null || _f === void 0 ? void 0 : _f.getTransceivers()) !== null && _g !== void 0 ? _g : []) {\n if (transceiver &&\n transceiver.receiver &&\n transceiver.receiver.track &&\n transceiver.receiver.track.kind === 'audio') {\n hasAudioReceiver = true;\n break;\n }\n }\n // Setup a transceiver for sending mic audio to UE and receiving audio from UE\n if (!useMic) {\n if (!hasAudioReceiver) {\n (_h = this.peerConnection) === null || _h === void 0 ? void 0 : _h.addTransceiver('audio', {\n direction: 'recvonly'\n });\n }\n }\n else {\n yield this.setupAudioSender(hasAudioReceiver);\n }\n });\n }\n setupVideoSender(hasVideoReceiver) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b, _c, _d;\n // set the media send options\n const mediaSendOptions = {\n video: true\n };\n // Note using webcam on android chrome requires SSL or chrome://flags/ \"unsafely-treat-insecure-origin-as-secure\"\n const stream = yield navigator.mediaDevices.getUserMedia(mediaSendOptions);\n if (stream) {\n if (hasVideoReceiver) {\n for (const transceiver of (_b = (_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.getTransceivers()) !== null && _b !== void 0 ? _b : []) {\n if (RTCUtils.canTransceiverReceiveVideo(transceiver)) {\n for (const track of stream.getTracks()) {\n if (track.kind && track.kind == 'video') {\n transceiver.sender.replaceTrack(track);\n transceiver.direction = 'sendrecv';\n }\n }\n }\n }\n }\n else {\n for (const track of stream.getTracks()) {\n if (track.kind && track.kind == 'video') {\n (_c = this.peerConnection) === null || _c === void 0 ? void 0 : _c.addTransceiver(track, {\n direction: 'sendrecv'\n });\n }\n }\n }\n }\n else {\n if (!hasVideoReceiver) {\n (_d = this.peerConnection) === null || _d === void 0 ? void 0 : _d.addTransceiver('video', { direction: 'recvonly' });\n }\n }\n });\n }\n setupAudioSender(hasAudioReceiver) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b, _c, _d;\n // set the audio options based on mic usage\n const audioOptions = {\n autoGainControl: false,\n channelCount: 1,\n echoCancellation: false,\n latency: 0,\n noiseSuppression: false,\n sampleRate: 48000,\n sampleSize: 16,\n volume: 1.0\n };\n // set the media send options\n const mediaSendOptions = {\n video: false,\n audio: audioOptions\n };\n // Note using mic on android chrome requires SSL or chrome://flags/ \"unsafely-treat-insecure-origin-as-secure\"\n const stream = yield navigator.mediaDevices.getUserMedia(mediaSendOptions);\n if (stream) {\n if (hasAudioReceiver) {\n for (const transceiver of (_b = (_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.getTransceivers()) !== null && _b !== void 0 ? _b : []) {\n if (RTCUtils.canTransceiverReceiveAudio(transceiver)) {\n for (const track of stream.getTracks()) {\n if (track.kind && track.kind == 'audio') {\n transceiver.sender.replaceTrack(track);\n transceiver.direction = 'sendrecv';\n }\n }\n }\n }\n }\n else {\n for (const track of stream.getTracks()) {\n if (track.kind && track.kind == 'audio') {\n (_c = this.peerConnection) === null || _c === void 0 ? void 0 : _c.addTransceiver(track, {\n direction: 'sendrecv'\n });\n }\n }\n }\n }\n else {\n if (!hasAudioReceiver) {\n (_d = this.peerConnection) === null || _d === void 0 ? void 0 : _d.addTransceiver('audio', {\n direction: 'recvonly'\n });\n }\n }\n });\n }\n /**\n * And override event for when the video stats are fired\n * @param event - Aggregated Stats\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onVideoStats(event) {\n // Default Functionality: Do Nothing\n }\n /**\n * And override event for when latency info is calculated\n * @param latencyInfo - Calculated latency information.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onLatencyCalculated(latencyInfo) {\n // Default Functionality: Do Nothing\n }\n /**\n * Event to send the RTC offer to the Signaling server\n * @param offer - RTC Offer\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onSendWebRTCOffer(offer) {\n // Default Functionality: Do Nothing\n }\n /**\n * Event fired when remote offer description is set.\n * @param offer - RTC Offer\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onSetRemoteDescription(offer) {\n // Default Functionality: Do Nothing\n }\n /**\n * Event fire when local description answer is set.\n * @param answer - RTC Answer\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onSetLocalDescription(answer) {\n // Default Functionality: Do Nothing\n }\n /**\n * An override for showing the Peer connection connecting Overlay\n */\n showTextOverlayConnecting() {\n // Default Functionality: Do Nothing\n }\n /**\n * An override for showing the Peer connection Failed overlay\n */\n showTextOverlaySetupFailure() {\n // Default Functionality: Do Nothing\n }\n parseAvailableCodecs(rtcSessionDescription) {\n // No point in updating the available codecs if on FF\n if (!RTCRtpReceiver.getCapabilities)\n return ['Only available on Chrome'];\n const ueSupportedCodecs = [];\n const sections = splitSections(rtcSessionDescription.sdp);\n // discard the session information as we only want media related info\n sections.shift();\n sections.forEach((mediaSection) => {\n const { codecs } = parseRtpParameters(mediaSection);\n // Filter only for VPX / H26X / AV1\n const matcher = /(VP\\d|H26\\d|AV1).*/;\n codecs.forEach((c) => {\n const str = c.name +\n ' ' +\n Object.keys(c.parameters || {})\n .map((p) => p + '=' + c.parameters[p])\n .join(';');\n const match = matcher.exec(str);\n if (match !== null) {\n if (c.name == 'VP9') {\n // UE answers don't specify profile but we know we want profile 0\n c.parameters = {\n 'profile-id': '0'\n };\n }\n const codecStr = c.name +\n ' ' +\n Object.keys(c.parameters || {})\n .map((p) => p + '=' + c.parameters[p])\n .join(';');\n ueSupportedCodecs.push(codecStr);\n }\n });\n });\n return ueSupportedCodecs;\n }\n}\n//# sourceMappingURL=PeerConnectionController.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\n/**\n * Latency Test Results Data\n */\nexport class InitialSettings {\n constructor() {\n this.PixelStreamingSettings = new PixelStreamingSettings();\n this.EncoderSettings = new EncoderSettings();\n this.WebRTCSettings = new WebRTCSettings();\n }\n /**\n * Checks for compatibility with the FPS and MaxFPS stats between 4.27 and 5\n */\n ueCompatible() {\n if (this.WebRTCSettings.MaxFPS != null) {\n this.WebRTCSettings.FPS = this.WebRTCSettings.MaxFPS;\n }\n }\n}\n/**\n * A class for handling Pixel Streaming details\n */\nexport class PixelStreamingSettings {\n}\n/**\n * A class for handling encoder stats\n */\nexport class EncoderSettings {\n}\n/**\n * A class for handling web rtc stats\n */\nexport class WebRTCSettings {\n}\n//# sourceMappingURL=InitialSettings.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';\n/**\n * Latency Test Results Data\n */\nexport class LatencyTestResults {\n constructor() {\n //Fields Set from the latency payload regardless of version\n this.ReceiptTimeMs = null;\n this.TransmissionTimeMs = null;\n //Fields Set from the latency payload from 4.27.2\n this.PreCaptureTimeMs = null;\n this.PostCaptureTimeMs = null;\n this.PreEncodeTimeMs = null;\n this.PostEncodeTimeMs = null;\n //Fields Set from the latency payload from 5.0\n this.EncodeMs = null;\n this.CaptureToSendMs = null;\n //Fields Set when processed\n this.testStartTimeMs = 0;\n this.browserReceiptTimeMs = 0;\n //Fields set from calculations\n this.latencyExcludingDecode = 0;\n this.testDuration = 0;\n //ueLatency: number = 0;\n this.networkLatency = 0;\n this.browserSendLatency = 0;\n this.frameDisplayDeltaTimeMs = 0;\n this.endToEndLatency = 0;\n //uePixelStreamLatency: number = 0;\n this.encodeLatency = 0;\n }\n /**\n * Sets the Delta Time Milliseconds\n * @param DeltaTimeMs - Delta Time Milliseconds\n */\n setFrameDisplayDeltaTime(DeltaTimeMs) {\n if (this.frameDisplayDeltaTimeMs == 0) {\n this.frameDisplayDeltaTimeMs = Math.round(DeltaTimeMs);\n }\n }\n /**\n * Process the encoder times and set them\n */\n processFields() {\n if (this.EncodeMs == null && (this.PreEncodeTimeMs != null || this.PostEncodeTimeMs != null)) {\n Logger.Info(`Setting Encode Ms \\n ${this.PostEncodeTimeMs} \\n ${this.PreEncodeTimeMs}`);\n this.EncodeMs = this.PostEncodeTimeMs - this.PreEncodeTimeMs;\n }\n if (this.CaptureToSendMs == null &&\n (this.PreCaptureTimeMs != null || this.PostCaptureTimeMs != null)) {\n Logger.Info(`Setting CaptureToSendMs Ms \\n ${this.PostCaptureTimeMs} \\n ${this.PreCaptureTimeMs}`);\n this.CaptureToSendMs = this.PostCaptureTimeMs - this.PreCaptureTimeMs;\n }\n }\n}\n//# sourceMappingURL=LatencyTestResults.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';\n/**\n * Utility function for populate file information from byte buffers.\n */\nexport class FileUtil {\n /**\n * Processes a files extension when received over data channel\n * @param view - the file extension data\n */\n static setExtensionFromBytes(view, file) {\n // Reset file if we got a file message and we are not \"receiving\" it yet\n if (!file.receiving) {\n file.mimetype = '';\n file.extension = '';\n file.receiving = true;\n file.valid = false;\n file.chunks = 0;\n file.data = [];\n file.timestampStart = new Date().getTime();\n Logger.Info('Received first chunk of file');\n }\n const extensionAsString = new TextDecoder('utf-16').decode(view.slice(1));\n Logger.Info(extensionAsString);\n file.extension = extensionAsString;\n }\n /**\n * Processes a files mime type when received over data channel\n * @param view - the file mime type data\n */\n static setMimeTypeFromBytes(view, file) {\n // Reset file if we got a file message and we are not \"receiving\" it yet\n if (!file.receiving) {\n file.mimetype = '';\n file.extension = '';\n file.receiving = true;\n file.valid = false;\n file.chunks = 0;\n file.data = [];\n file.timestampStart = new Date().getTime();\n Logger.Info('Received first chunk of file');\n }\n const mimeAsString = new TextDecoder('utf-16').decode(view.slice(1));\n Logger.Info(mimeAsString);\n file.mimetype = mimeAsString;\n }\n /**\n * Processes a files contents when received over data channel\n * @param view - the file contents data\n */\n static setContentsFromBytes(view, file) {\n // If we haven't received the initial setup instructions, return\n if (!file.receiving)\n return;\n const typeSize = 1;\n const intSize = 4;\n const maxMessageSize = 16 * 1024;\n const headerSize = typeSize + intSize;\n const maxPayloadSize = maxMessageSize - headerSize;\n // Calculate total number of chunks from the total file size\n file.chunks = Math.ceil(new DataView(view.slice(typeSize, headerSize).buffer).getInt32(0, true) / maxPayloadSize);\n // Get the file part of the payload\n const fileBytes = view.slice(headerSize);\n // Append to existing data that holds the file\n file.data.push(fileBytes);\n // Uncomment for debug\n Logger.Info(`Received file chunk: ${file.data.length}/${file.chunks}`);\n if (file.data.length === file.chunks) {\n file.receiving = false;\n file.valid = true;\n Logger.Info('Received complete file');\n const transferDuration = new Date().getTime() - file.timestampStart;\n const transferBitrate = Math.round((file.chunks * maxMessageSize) / transferDuration);\n Logger.Info(`Average transfer bitrate: ${transferBitrate}kb/s over ${transferDuration / 1000} seconds`);\n // File reconstruction\n /**\n * Example code to reconstruct the file\n *\n * This code reconstructs the received data into the original file based on the mime type and extension provided and then downloads the reconstructed file\n */\n // const received = new Blob(file.data, { type: file.mimetype });\n // const a = document.createElement('a');\n // a.setAttribute('href', URL.createObjectURL(received));\n // a.setAttribute('download', `transfer.${file.extension}`);\n // document.body.append(a);\n // if you are so inclined to make it auto-download, do something like: a.click();\n // a.remove();\n }\n else if (file.data.length > file.chunks) {\n file.receiving = false;\n Logger.Error(`Received bigger file than advertised: ${file.data.length}/${file.chunks}`);\n }\n }\n}\n/**\n * A class that represents a template for a downloaded file\n */\nexport class FileTemplate {\n constructor() {\n this.mimetype = '';\n this.extension = '';\n this.receiving = false;\n this.chunks = 0;\n this.data = [];\n this.valid = false;\n }\n}\n//# sourceMappingURL=FileUtil.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\n/**\n * Registers the Special Key codes\n * Must be kept in sync with JavaScriptKeyCodeToFKey C++ array.\n * The index of the entry in the array is the special key code given below.\n */\nexport class SpecialKeyCodes {\n}\nSpecialKeyCodes.backSpace = 8;\nSpecialKeyCodes.shift = 16;\nSpecialKeyCodes.control = 17;\nSpecialKeyCodes.alt = 18;\nSpecialKeyCodes.rightShift = 253;\nSpecialKeyCodes.rightControl = 254;\nSpecialKeyCodes.rightAlt = 255;\n//# sourceMappingURL=SpecialKeyCodes.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\n/*\n * New browser APIs have moved away from KeyboardEvent.keyCode to KeyboardEvent.Code.\n * For details see: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode#constants_for_keycode_value\n * We still use old KeyboardEvent.keyCode integers in the UE C++ side, so we need a way to map the new\n * string-based KeyboardEvent.Code to the old integers.\n */\nexport const CodeToKeyCode = Object.freeze({\n Escape: 27,\n Digit0: 48,\n Digit1: 49,\n Digit2: 50,\n Digit3: 51,\n Digit4: 52,\n Digit5: 53,\n Digit6: 54,\n Digit7: 55,\n Digit8: 56,\n Digit9: 57,\n Minus: 173,\n Equal: 187,\n Backspace: 8,\n Tab: 9,\n KeyQ: 81,\n KeyW: 87,\n KeyE: 69,\n KeyR: 82,\n KeyT: 84,\n KeyY: 89,\n KeyU: 85,\n KeyI: 73,\n KeyO: 79,\n KeyP: 80,\n BracketLeft: 219,\n BracketRight: 221,\n Enter: 13,\n ControlLeft: 17,\n KeyA: 65,\n KeyS: 83,\n KeyD: 68,\n KeyF: 70,\n KeyG: 71,\n KeyH: 72,\n KeyJ: 74,\n KeyK: 75,\n KeyL: 76,\n Semicolon: 186,\n Quote: 222,\n Backquote: 192,\n ShiftLeft: 16,\n Backslash: 220,\n KeyZ: 90,\n KeyX: 88,\n KeyC: 67,\n KeyV: 86,\n KeyB: 66,\n KeyN: 78,\n KeyM: 77,\n Comma: 188,\n Period: 190,\n Slash: 191,\n ShiftRight: 253,\n AltLeft: 18,\n Space: 32,\n CapsLock: 20,\n F1: 112,\n F2: 113,\n F3: 114,\n F4: 115,\n F5: 116,\n F6: 117,\n F7: 118,\n F8: 119,\n F9: 120,\n F10: 121,\n F11: 122,\n F12: 123,\n Pause: 19,\n ScrollLock: 145,\n NumpadDivide: 111,\n NumpadMultiply: 106,\n NumpadSubtract: 109,\n NumpadAdd: 107,\n NumpadDecimal: 110,\n Numpad9: 105,\n Numpad8: 104,\n Numpad7: 103,\n Numpad6: 102,\n Numpad5: 101,\n Numpad4: 100,\n Numpad3: 99,\n Numpad2: 98,\n Numpad1: 97,\n Numpad0: 96,\n NumLock: 144,\n ControlRight: 254,\n AltRight: 255,\n Home: 36,\n End: 35,\n ArrowUp: 38,\n ArrowLeft: 37,\n ArrowRight: 39,\n ArrowDown: 40,\n PageUp: 33,\n PageDown: 34,\n Insert: 45,\n Delete: 46,\n ContextMenu: 93\n});\n//# sourceMappingURL=KeyCodes.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport { SpecialKeyCodes } from './SpecialKeyCodes';\nimport { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';\nimport { Flags } from '../Config/Config';\nimport { CodeToKeyCode } from './KeyCodes';\n/**\n * Handles the Keyboard Inputs for the document\n */\nexport class KeyboardController {\n constructor(streamMessageController, config, activeKeys) {\n this.streamMessageController = streamMessageController;\n this.config = config;\n this.activeKeys = activeKeys;\n this.onKeyDownListener = this.handleOnKeyDown.bind(this);\n this.onKeyUpListener = this.handleOnKeyUp.bind(this);\n this.onKeyPressListener = this.handleOnKeyPress.bind(this);\n }\n register() {\n document.addEventListener('keydown', this.onKeyDownListener);\n document.addEventListener('keyup', this.onKeyUpListener);\n //This has been deprecated as at Jun 13 2021\n document.addEventListener('keypress', this.onKeyPressListener);\n }\n unregister() {\n document.removeEventListener('keydown', this.onKeyDownListener);\n document.removeEventListener('keyup', this.onKeyUpListener);\n document.removeEventListener('keypress', this.onKeyPressListener);\n }\n handleOnKeyDown(keyboardEvent) {\n var _a;\n const keyCode = this.getKeycode(keyboardEvent);\n if (!keyCode || keyCode === 229) {\n return;\n }\n const toStreamerHandlers = this.streamMessageController.toStreamerHandlers;\n (_a = toStreamerHandlers.get('KeyDown')) === null || _a === void 0 ? void 0 : _a([this.getKeycode(keyboardEvent), keyboardEvent.repeat ? 1 : 0]);\n const activeKeys = this.activeKeys.getActiveKeys();\n activeKeys.push(keyCode);\n // Backspace is not considered a keypress in JavaScript but we need it\n // to be so characters may be deleted in a UE text entry field.\n // since keypress is deprecated we really should be sending all keys to keypress\n // or we change everything to handle the deprecation of these parts\n if (keyCode === SpecialKeyCodes.backSpace) {\n this.handleOnKeyPress(new KeyboardEvent('keypress', {\n charCode: SpecialKeyCodes.backSpace,\n keyCode: SpecialKeyCodes.backSpace\n }));\n }\n if (this.config.isFlagEnabled(Flags.SuppressBrowserKeys) && this.isKeyCodeBrowserKey(keyCode)) {\n keyboardEvent.preventDefault();\n }\n }\n handleOnKeyUp(keyboardEvent) {\n var _a;\n const keyCode = this.getKeycode(keyboardEvent);\n if (!keyCode) {\n return;\n }\n const toStreamerHandlers = this.streamMessageController.toStreamerHandlers;\n (_a = toStreamerHandlers.get('KeyUp')) === null || _a === void 0 ? void 0 : _a([keyCode]);\n if (this.config.isFlagEnabled(Flags.SuppressBrowserKeys) && this.isKeyCodeBrowserKey(keyCode)) {\n keyboardEvent.preventDefault();\n }\n }\n handleOnKeyPress(keyboardEvent) {\n var _a;\n const keyCode = this.getKeycode(keyboardEvent);\n if (!keyCode) {\n return;\n }\n const toStreamerHandlers = this.streamMessageController.toStreamerHandlers;\n (_a = toStreamerHandlers.get('KeyPress')) === null || _a === void 0 ? void 0 : _a([keyCode]);\n }\n /**\n * Gets the Keycode of the Key pressed\n * @param keyboardEvent - Key board Event\n * @returns - the key code of the Key\n */\n getKeycode(keyboardEvent) {\n // If we don't have keyCode property because browser API is deprecated then use KeyboardEvent.code instead.\n // See: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode#constants_for_keycode_value\n if (!('keyCode' in keyboardEvent)) {\n // this type assertion here is required because if 'keyCode' doesnt exist in keyboardEvent then\n // it cannot be a KeyboardEvent and so it gets narrowed to 'never'\n const event = keyboardEvent;\n // Convert KeyboardEvent.code string into integer-based key code for backwards compatibility reasons.\n if (event.code in CodeToKeyCode) {\n return CodeToKeyCode[event.code];\n }\n else {\n Logger.Warning(`Keyboard code of ${event.code} is not supported in our mapping, ignoring this key.`);\n return null;\n }\n }\n // If we made it here KeyboardEvent.keyCode is still supported so we can safely use it.\n if (keyboardEvent.keyCode === SpecialKeyCodes.shift && keyboardEvent.code === 'ShiftRight') {\n return SpecialKeyCodes.rightShift;\n }\n else if (keyboardEvent.keyCode === SpecialKeyCodes.control &&\n keyboardEvent.code === 'ControlRight') {\n return SpecialKeyCodes.rightControl;\n }\n else if (keyboardEvent.keyCode === SpecialKeyCodes.alt && keyboardEvent.code === 'AltRight') {\n return SpecialKeyCodes.rightAlt;\n }\n else {\n return keyboardEvent.keyCode;\n }\n }\n /**\n * Browser keys do not have a charCode so we only need to test keyCode.\n * @param keyCode - the browser keycode number\n */\n isKeyCodeBrowserKey(keyCode) {\n // Function keys or tab key are considered \"browser keys\" that we may wish to suppress by preventing them being process by browser.\n return (keyCode >= 112 && keyCode <= 123) || keyCode === 9;\n }\n}\n//# sourceMappingURL=KeyboardController.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\n/**\n * Mouse Button Data\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button}\n */\nexport class MouseButton {\n}\nMouseButton.mainButton = 0; // Left button.\nMouseButton.auxiliaryButton = 1; // Wheel button.\nMouseButton.secondaryButton = 2; // Right button.\nMouseButton.fourthButton = 3; // Browser Back button.\nMouseButton.fifthButton = 4; // Browser Forward button.\n/**\n * Mouse Button Mask Data\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons}\n */\nexport class MouseButtonsMask {\n}\nMouseButtonsMask.primaryButton = 1; // Left button.\nMouseButtonsMask.secondaryButton = 2; // Right button.\nMouseButtonsMask.auxiliaryButton = 4; // Wheel button.\nMouseButtonsMask.fourthButton = 8; // Browser Back button.\nMouseButtonsMask.fifthButton = 16; // Browser Forward button.\n//# sourceMappingURL=MouseButtons.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport { MouseButtonsMask, MouseButton } from './MouseButtons';\n/**\n * The base class for mouse controllers. Since there is a bunch of shared behaviour between locked and\n * hover mouse controllers this is where that shared behaviour lives.\n */\nexport class MouseController {\n constructor(streamMessageController, videoPlayer, coordinateConverter, activeKeys) {\n this.streamMessageController = streamMessageController;\n this.coordinateConverter = coordinateConverter;\n this.videoPlayer = videoPlayer;\n this.activeKeys = activeKeys;\n this.onEnterListener = this.onMouseEnter.bind(this);\n this.onLeaveListener = this.onMouseLeave.bind(this);\n }\n register() {\n this.registerMouseEnterAndLeaveEvents();\n }\n unregister() {\n this.unregisterMouseEnterAndLeaveEvents();\n }\n registerMouseEnterAndLeaveEvents() {\n const videoElementParent = this.videoPlayer.getVideoParentElement();\n videoElementParent === null || videoElementParent === void 0 ? void 0 : videoElementParent.addEventListener('mouseenter', this.onEnterListener);\n videoElementParent === null || videoElementParent === void 0 ? void 0 : videoElementParent.addEventListener('mouseleave', this.onLeaveListener);\n }\n unregisterMouseEnterAndLeaveEvents() {\n const videoElementParent = this.videoPlayer.getVideoParentElement();\n videoElementParent === null || videoElementParent === void 0 ? void 0 : videoElementParent.removeEventListener('mouseenter', this.onEnterListener);\n videoElementParent === null || videoElementParent === void 0 ? void 0 : videoElementParent.removeEventListener('mouseleave', this.onLeaveListener);\n }\n onMouseEnter(event) {\n var _a;\n if (!this.videoPlayer.isVideoReady()) {\n return;\n }\n (_a = this.streamMessageController.toStreamerHandlers.get('MouseEnter')) === null || _a === void 0 ? void 0 : _a();\n this.pressMouseButtons(event.buttons, event.x, event.y);\n }\n onMouseLeave(event) {\n var _a;\n if (!this.videoPlayer.isVideoReady()) {\n return;\n }\n (_a = this.streamMessageController.toStreamerHandlers.get('MouseLeave')) === null || _a === void 0 ? void 0 : _a();\n this.releaseMouseButtons(event.buttons, event.x, event.y);\n }\n releaseMouseButtons(buttons, X, Y) {\n const coord = this.coordinateConverter.translateUnsigned(X, Y);\n if (buttons & MouseButtonsMask.primaryButton) {\n this.sendMouseUp(MouseButton.mainButton, coord.x, coord.y);\n }\n if (buttons & MouseButtonsMask.secondaryButton) {\n this.sendMouseUp(MouseButton.secondaryButton, coord.x, coord.y);\n }\n if (buttons & MouseButtonsMask.auxiliaryButton) {\n this.sendMouseUp(MouseButton.auxiliaryButton, coord.x, coord.y);\n }\n if (buttons & MouseButtonsMask.fourthButton) {\n this.sendMouseUp(MouseButton.fourthButton, coord.x, coord.y);\n }\n if (buttons & MouseButtonsMask.fifthButton) {\n this.sendMouseUp(MouseButton.fifthButton, coord.x, coord.y);\n }\n }\n pressMouseButtons(buttons, X, Y) {\n if (!this.videoPlayer.isVideoReady()) {\n return;\n }\n const coord = this.coordinateConverter.translateUnsigned(X, Y);\n if (buttons & MouseButtonsMask.primaryButton) {\n this.sendMouseDown(MouseButton.mainButton, coord.x, coord.y);\n }\n if (buttons & MouseButtonsMask.secondaryButton) {\n this.sendMouseDown(MouseButton.secondaryButton, coord.x, coord.y);\n }\n if (buttons & MouseButtonsMask.auxiliaryButton) {\n this.sendMouseDown(MouseButton.auxiliaryButton, coord.x, coord.y);\n }\n if (buttons & MouseButtonsMask.fourthButton) {\n this.sendMouseDown(MouseButton.fourthButton, coord.x, coord.y);\n }\n if (buttons & MouseButtonsMask.fifthButton) {\n this.sendMouseDown(MouseButton.fifthButton, coord.x, coord.y);\n }\n }\n sendMouseDown(button, X, Y) {\n var _a;\n (_a = this.streamMessageController.toStreamerHandlers.get('MouseDown')) === null || _a === void 0 ? void 0 : _a([button, X, Y]);\n }\n sendMouseUp(button, X, Y) {\n var _a;\n const coord = this.coordinateConverter.translateUnsigned(X, Y);\n (_a = this.streamMessageController.toStreamerHandlers.get('MouseUp')) === null || _a === void 0 ? void 0 : _a([button, coord.x, coord.y]);\n }\n}\n//# sourceMappingURL=MouseController.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';\nimport { MouseController } from './MouseController';\n/**\n * A mouse controller that locks the mouse to the video document and prevents it from leaving the window\n */\nexport class MouseControllerLocked extends MouseController {\n constructor(streamMessageController, videoPlayer, coordinateConverter, activeKeys) {\n super(streamMessageController, videoPlayer, coordinateConverter, activeKeys);\n this.videoElementParent = videoPlayer.getVideoParentElement();\n this.x = this.videoElementParent.getBoundingClientRect().width / 2;\n this.y = this.videoElementParent.getBoundingClientRect().height / 2;\n this.normalizedCoord = this.coordinateConverter.translateUnsigned(this.x, this.y);\n this.onRequestLockListener = this.onRequestLock.bind(this);\n this.onLockStateChangeListener = this.onLockStateChange.bind(this);\n this.onMouseUpListener = this.onMouseUp.bind(this);\n this.onMouseDownListener = this.onMouseDown.bind(this);\n this.onMouseDblClickListener = this.onMouseDblClick.bind(this);\n this.onMouseWheelListener = this.onMouseWheel.bind(this);\n this.onMouseMoveListener = this.onMouseMove.bind(this);\n }\n register() {\n super.register();\n this.videoElementParent.requestPointerLock =\n this.videoElementParent.requestPointerLock || this.videoElementParent.mozRequestPointerLock;\n document.exitPointerLock = document.exitPointerLock || document.mozExitPointerLock;\n if (this.videoElementParent.requestPointerLock) {\n this.videoElementParent.addEventListener('click', this.onRequestLockListener);\n }\n document.addEventListener('pointerlockchange', this.onLockStateChangeListener);\n document.addEventListener('mozpointerlockchange', this.onLockStateChangeListener);\n this.videoElementParent.addEventListener('mousedown', this.onMouseDownListener);\n this.videoElementParent.addEventListener('mouseup', this.onMouseUpListener);\n this.videoElementParent.addEventListener('wheel', this.onMouseWheelListener);\n this.videoElementParent.addEventListener('dblclick', this.onMouseDblClickListener);\n }\n unregister() {\n const pointerLockElement = document.pointerLockElement || document.mozPointerLockElement;\n if (document.exitPointerLock && pointerLockElement === this.videoElementParent) {\n document.exitPointerLock();\n }\n this.videoElementParent.removeEventListener('click', this.onRequestLockListener);\n document.removeEventListener('pointerlockchange', this.onLockStateChangeListener);\n document.removeEventListener('mozpointerlockchange', this.onLockStateChangeListener);\n document.removeEventListener('mousemove', this.onMouseMoveListener);\n this.videoElementParent.removeEventListener('mousedown', this.onMouseDownListener);\n this.videoElementParent.removeEventListener('mouseup', this.onMouseUpListener);\n this.videoElementParent.removeEventListener('wheel', this.onMouseWheelListener);\n this.videoElementParent.removeEventListener('dblclick', this.onMouseDblClickListener);\n super.unregister();\n }\n onRequestLock() {\n this.videoElementParent.requestPointerLock();\n }\n onLockStateChange() {\n const pointerLockElement = document.pointerLockElement || document.mozPointerLockElement;\n if (pointerLockElement === this.videoElementParent) {\n Logger.Info('Pointer locked');\n document.addEventListener('mousemove', this.onMouseMoveListener);\n }\n else {\n Logger.Info('The pointer lock status is now unlocked');\n document.removeEventListener('mousemove', this.onMouseMoveListener);\n // If mouse loses focus, send a key up for all of the currently held-down keys\n // This is necessary as when the mouse loses focus, the windows stops listening for events and as such\n // the keyup listener won't get fired\n const activeKeys = this.activeKeys.getActiveKeys();\n activeKeys.forEach((key) => {\n this.streamMessageController.toStreamerHandlers.get('KeyUp')([key]);\n });\n }\n }\n onMouseDown(event) {\n if (!this.videoPlayer.isVideoReady()) {\n return;\n }\n this.streamMessageController.toStreamerHandlers.get('MouseDown')([\n event.button,\n // We use the store value of this.coord as opposed to the mouseEvent.x/y as the mouseEvent location\n // uses the system cursor location which hasn't moved\n this.normalizedCoord.x,\n this.normalizedCoord.y\n ]);\n }\n onMouseUp(event) {\n if (!this.videoPlayer.isVideoReady()) {\n return;\n }\n this.streamMessageController.toStreamerHandlers.get('MouseUp')([\n event.button,\n // We use the store value of this.coord as opposed to the mouseEvent.x/y as the mouseEvent location\n // uses the system cursor location which hasn't moved\n this.normalizedCoord.x,\n this.normalizedCoord.y\n ]);\n }\n onMouseMove(event) {\n if (!this.videoPlayer.isVideoReady()) {\n return;\n }\n const styleWidth = this.videoPlayer.getVideoParentElement().clientWidth;\n const styleHeight = this.videoPlayer.getVideoParentElement().clientHeight;\n this.x += event.movementX;\n this.y += event.movementY;\n while (this.x > styleWidth) {\n this.x -= styleWidth;\n }\n while (this.y > styleHeight) {\n this.y -= styleHeight;\n }\n while (this.x < 0) {\n this.x += styleWidth;\n }\n while (this.y < 0) {\n this.y += styleHeight;\n }\n this.normalizedCoord = this.coordinateConverter.translateUnsigned(this.x, this.y);\n const delta = this.coordinateConverter.translateSigned(event.movementX, event.movementY);\n this.streamMessageController.toStreamerHandlers.get('MouseMove')([\n this.normalizedCoord.x,\n this.normalizedCoord.y,\n delta.x,\n delta.y\n ]);\n }\n onMouseWheel(event) {\n if (!this.videoPlayer.isVideoReady()) {\n return;\n }\n this.streamMessageController.toStreamerHandlers.get('MouseWheel')([\n event.wheelDelta,\n // We use the store value of this.coord as opposed to the mouseEvent.x/y as the mouseEvent location\n // uses the system cursor location which hasn't moved\n this.normalizedCoord.x,\n this.normalizedCoord.y\n ]);\n }\n onMouseDblClick(event) {\n if (!this.videoPlayer.isVideoReady()) {\n return;\n }\n this.streamMessageController.toStreamerHandlers.get('MouseDouble')([\n event.button,\n // We use the store value of this.coord as opposed to the mouseEvent.x/y as the mouseEvent location\n // uses the system cursor location which hasn't moved\n this.normalizedCoord.x,\n this.normalizedCoord.y\n ]);\n }\n}\n//# sourceMappingURL=MouseControllerLocked.js.map","import { MouseController } from './MouseController';\n/**\n * A mouse controller that allows the mouse to freely float over the video document.\n */\nexport class MouseControllerHovering extends MouseController {\n constructor(streamMessageController, videoPlayer, coordinateConverter, activeKeys) {\n super(streamMessageController, videoPlayer, coordinateConverter, activeKeys);\n this.videoElementParent = videoPlayer.getVideoParentElement();\n this.onMouseUpListener = this.onMouseUp.bind(this);\n this.onMouseDownListener = this.onMouseDown.bind(this);\n this.onMouseDblClickListener = this.onMouseDblClick.bind(this);\n this.onMouseWheelListener = this.onMouseWheel.bind(this);\n this.onMouseMoveListener = this.onMouseMove.bind(this);\n this.onContextMenuListener = this.onContextMenu.bind(this);\n }\n register() {\n super.register();\n this.videoElementParent.addEventListener('mousemove', this.onMouseMoveListener);\n this.videoElementParent.addEventListener('mousedown', this.onMouseDownListener);\n this.videoElementParent.addEventListener('mouseup', this.onMouseUpListener);\n this.videoElementParent.addEventListener('contextmenu', this.onContextMenuListener);\n this.videoElementParent.addEventListener('wheel', this.onMouseWheelListener);\n this.videoElementParent.addEventListener('dblclick', this.onMouseDblClickListener);\n }\n unregister() {\n this.videoElementParent.removeEventListener('mousemove', this.onMouseMoveListener);\n this.videoElementParent.removeEventListener('mousedown', this.onMouseDownListener);\n this.videoElementParent.removeEventListener('mouseup', this.onMouseUpListener);\n this.videoElementParent.removeEventListener('contextmenu', this.onContextMenuListener);\n this.videoElementParent.removeEventListener('wheel', this.onMouseWheelListener);\n this.videoElementParent.removeEventListener('dblclick', this.onMouseDblClickListener);\n super.unregister();\n }\n onMouseDown(event) {\n if (!this.videoPlayer.isVideoReady()) {\n return;\n }\n const coord = this.coordinateConverter.translateUnsigned(event.offsetX, event.offsetY);\n this.streamMessageController.toStreamerHandlers.get('MouseDown')([event.button, coord.x, coord.y]);\n event.preventDefault();\n }\n onMouseUp(event) {\n if (!this.videoPlayer.isVideoReady()) {\n return;\n }\n const coord = this.coordinateConverter.translateUnsigned(event.offsetX, event.offsetY);\n this.streamMessageController.toStreamerHandlers.get('MouseUp')([event.button, coord.x, coord.y]);\n event.preventDefault();\n }\n onContextMenu(event) {\n if (!this.videoPlayer.isVideoReady()) {\n return;\n }\n event.preventDefault();\n }\n onMouseMove(event) {\n if (!this.videoPlayer.isVideoReady()) {\n return;\n }\n const coord = this.coordinateConverter.translateUnsigned(event.offsetX, event.offsetY);\n const delta = this.coordinateConverter.translateSigned(event.movementX, event.movementY);\n this.streamMessageController.toStreamerHandlers.get('MouseMove')([\n coord.x,\n coord.y,\n delta.x,\n delta.y\n ]);\n event.preventDefault();\n }\n onMouseWheel(event) {\n if (!this.videoPlayer.isVideoReady()) {\n return;\n }\n const coord = this.coordinateConverter.translateUnsigned(event.offsetX, event.offsetY);\n this.streamMessageController.toStreamerHandlers.get('MouseWheel')([\n event.wheelDelta,\n coord.x,\n coord.y\n ]);\n event.preventDefault();\n }\n onMouseDblClick(event) {\n if (!this.videoPlayer.isVideoReady()) {\n return;\n }\n const coord = this.coordinateConverter.translateUnsigned(event.offsetX, event.offsetY);\n this.streamMessageController.toStreamerHandlers.get('MouseDouble')([event.button, coord.x, coord.y]);\n }\n}\n//# sourceMappingURL=MouseControllerHovering.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';\n/**\n * The basic touch controller that handles the touch events on the document.\n */\nexport class TouchController {\n constructor(streamMessageController, videoPlayer, coordinateConverter) {\n this.fingers = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0];\n this.fingerIds = new Map();\n this.maxByteValue = 255;\n this.streamMessageController = streamMessageController;\n this.videoPlayer = videoPlayer;\n this.coordinateConverter = coordinateConverter;\n this.videoElementParent = videoPlayer.getVideoElement();\n this.onTouchStartListener = this.onTouchStart.bind(this);\n this.onTouchEndListener = this.onTouchEnd.bind(this);\n this.onTouchMoveListener = this.onTouchMove.bind(this);\n }\n register() {\n this.videoElementParent.addEventListener('touchstart', this.onTouchStartListener);\n this.videoElementParent.addEventListener('touchend', this.onTouchEndListener);\n this.videoElementParent.addEventListener('touchmove', this.onTouchMoveListener);\n }\n unregister() {\n this.videoElementParent.removeEventListener('touchstart', this.onTouchStartListener);\n this.videoElementParent.removeEventListener('touchend', this.onTouchEndListener);\n this.videoElementParent.removeEventListener('touchmove', this.onTouchMoveListener);\n }\n rememberTouch(touch) {\n const finger = this.fingers.pop();\n if (finger === undefined) {\n Logger.Info('exhausted touch identifiers');\n }\n this.fingerIds.set(touch.identifier, finger);\n }\n forgetTouch(touch) {\n this.fingers.push(this.fingerIds.get(touch.identifier));\n // Sort array back into descending order. This means if finger '1' were to lift after finger '0', we would ensure that 0 will be the first index to pop\n this.fingers.sort(function (a, b) {\n return b - a;\n });\n this.fingerIds.delete(touch.identifier);\n }\n onTouchStart(touchEvent) {\n if (!this.videoPlayer.isVideoReady()) {\n return;\n }\n for (let t = 0; t < touchEvent.changedTouches.length; t++) {\n this.rememberTouch(touchEvent.changedTouches[t]);\n }\n this.emitTouchData('TouchStart', touchEvent.changedTouches);\n touchEvent.preventDefault();\n }\n onTouchEnd(touchEvent) {\n if (!this.videoPlayer.isVideoReady()) {\n return;\n }\n this.emitTouchData('TouchEnd', touchEvent.changedTouches);\n // Re-cycle unique identifiers previously assigned to each touch.\n for (let t = 0; t < touchEvent.changedTouches.length; t++) {\n this.forgetTouch(touchEvent.changedTouches[t]);\n }\n touchEvent.preventDefault();\n }\n onTouchMove(touchEvent) {\n if (!this.videoPlayer.isVideoReady()) {\n return;\n }\n this.emitTouchData('TouchMove', touchEvent.touches);\n touchEvent.preventDefault();\n }\n emitTouchData(type, touches) {\n if (!this.videoPlayer.isVideoReady()) {\n return;\n }\n const offset = this.videoPlayer.getVideoParentElement().getBoundingClientRect();\n const toStreamerHandlers = this.streamMessageController.toStreamerHandlers;\n for (let t = 0; t < touches.length; t++) {\n const numTouches = 1; // the number of touches to be sent this message\n const touch = touches[t];\n const x = touch.clientX - offset.left;\n const y = touch.clientY - offset.top;\n Logger.Info(`F${this.fingerIds.get(touch.identifier)}=(${x}, ${y})`);\n const coord = this.coordinateConverter.translateUnsigned(x, y);\n switch (type) {\n case 'TouchStart':\n toStreamerHandlers.get('TouchStart')([\n numTouches,\n coord.x,\n coord.y,\n this.fingerIds.get(touch.identifier),\n this.maxByteValue * (touch.force > 0 ? touch.force : 1),\n coord.inRange ? 1 : 0\n ]);\n break;\n case 'TouchEnd':\n toStreamerHandlers.get('TouchEnd')([\n numTouches,\n coord.x,\n coord.y,\n this.fingerIds.get(touch.identifier),\n this.maxByteValue * touch.force,\n coord.inRange ? 1 : 0\n ]);\n break;\n case 'TouchMove':\n toStreamerHandlers.get('TouchMove')([\n numTouches,\n coord.x,\n coord.y,\n this.fingerIds.get(touch.identifier),\n this.maxByteValue * (touch.force > 0 ? touch.force : 1),\n coord.inRange ? 1 : 0\n ]);\n break;\n }\n }\n }\n}\n//# sourceMappingURL=TouchController.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport { MouseButton } from './MouseButtons';\n/**\n * Allows for the usage of fake touch events\n */\nexport class TouchControllerFake {\n constructor(streamMessageController, videoPlayer, coordinateConverter) {\n this.streamMessageController = streamMessageController;\n this.videoPlayer = videoPlayer;\n this.coordinateConverter = coordinateConverter;\n this.onTouchStartListener = this.onTouchStart.bind(this);\n this.onTouchEndListener = this.onTouchEnd.bind(this);\n this.onTouchMoveListener = this.onTouchMove.bind(this);\n this.videoElementParentClientRect = this.videoPlayer.getVideoParentElement().getBoundingClientRect();\n }\n register() {\n document.addEventListener('touchstart', this.onTouchStartListener);\n document.addEventListener('touchend', this.onTouchEndListener);\n document.addEventListener('touchmove', this.onTouchMoveListener);\n }\n unregister() {\n document.removeEventListener('touchstart', this.onTouchStartListener);\n document.removeEventListener('touchend', this.onTouchEndListener);\n document.removeEventListener('touchmove', this.onTouchMoveListener);\n }\n onTouchStart(touch) {\n if (!this.videoPlayer.isVideoReady() || touch.target !== this.videoPlayer.getVideoElement()) {\n return;\n }\n if (this.fakeTouchFinger == null) {\n const first_touch = touch.changedTouches[0];\n this.fakeTouchFinger = {\n id: first_touch.identifier,\n x: first_touch.clientX - this.videoElementParentClientRect.left,\n y: first_touch.clientY - this.videoElementParentClientRect.top\n };\n const videoElementParent = this.videoPlayer.getVideoParentElement();\n const mouseEvent = new MouseEvent('mouseenter', first_touch);\n videoElementParent.dispatchEvent(mouseEvent);\n const coord = this.coordinateConverter.translateUnsigned(this.fakeTouchFinger.x, this.fakeTouchFinger.y);\n const toStreamerHandlers = this.streamMessageController.toStreamerHandlers;\n toStreamerHandlers.get('MouseDown')([MouseButton.mainButton, coord.x, coord.y]);\n }\n touch.preventDefault();\n }\n onTouchEnd(touchEvent) {\n if (!this.videoPlayer.isVideoReady() || this.fakeTouchFinger == null) {\n return;\n }\n const videoElementParent = this.videoPlayer.getVideoParentElement();\n const toStreamerHandlers = this.streamMessageController.toStreamerHandlers;\n for (let t = 0; t < touchEvent.changedTouches.length; t++) {\n const touch = touchEvent.changedTouches[t];\n if (touch.identifier === this.fakeTouchFinger.id) {\n const x = touch.clientX - this.videoElementParentClientRect.left;\n const y = touch.clientY - this.videoElementParentClientRect.top;\n const coord = this.coordinateConverter.translateUnsigned(x, y);\n toStreamerHandlers.get('MouseUp')([MouseButton.mainButton, coord.x, coord.y]);\n const mouseEvent = new MouseEvent('mouseleave', touch);\n videoElementParent.dispatchEvent(mouseEvent);\n this.fakeTouchFinger = null;\n break;\n }\n }\n touchEvent.preventDefault();\n }\n onTouchMove(touchEvent) {\n if (!this.videoPlayer.isVideoReady() || this.fakeTouchFinger == null) {\n return;\n }\n const toStreamerHandlers = this.streamMessageController.toStreamerHandlers;\n for (let t = 0; t < touchEvent.touches.length; t++) {\n const touch = touchEvent.touches[t];\n if (touch.identifier === this.fakeTouchFinger.id) {\n const x = touch.clientX - this.videoElementParentClientRect.left;\n const y = touch.clientY - this.videoElementParentClientRect.top;\n const coord = this.coordinateConverter.translateUnsigned(x, y);\n const delta = this.coordinateConverter.translateSigned(x - this.fakeTouchFinger.x, y - this.fakeTouchFinger.y);\n toStreamerHandlers.get('MouseMove')([coord.x, coord.y, delta.x, delta.y]);\n this.fakeTouchFinger.x = x;\n this.fakeTouchFinger.y = y;\n break;\n }\n }\n touchEvent.preventDefault();\n }\n}\n//# sourceMappingURL=TouchControllerFake.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\n/**\n * Deep copies the values from a gamepad by first converting it to a JSON object and then back to a gamepad\n *\n * @param gamepad the original gamepad\n * @returns a new gamepad object, populated with the original gamepads values\n */\nexport function deepCopyGamepad(gamepad) {\n return JSON.parse(JSON.stringify({\n buttons: gamepad.buttons.map((b) => JSON.parse(JSON.stringify({\n pressed: b.pressed,\n touched: b.touched,\n value: b.value\n }))),\n axes: gamepad.axes\n }));\n}\n//# sourceMappingURL=GamepadTypes.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport { deepCopyGamepad } from './GamepadTypes';\n/**\n * Gamepad layout codes enum\n */\nexport var GamepadLayout;\n(function (GamepadLayout) {\n GamepadLayout[GamepadLayout[\"RightClusterBottomButton\"] = 0] = \"RightClusterBottomButton\";\n GamepadLayout[GamepadLayout[\"RightClusterRightButton\"] = 1] = \"RightClusterRightButton\";\n GamepadLayout[GamepadLayout[\"RightClusterLeftButton\"] = 2] = \"RightClusterLeftButton\";\n GamepadLayout[GamepadLayout[\"RightClusterTopButton\"] = 3] = \"RightClusterTopButton\";\n GamepadLayout[GamepadLayout[\"LeftShoulder\"] = 4] = \"LeftShoulder\";\n GamepadLayout[GamepadLayout[\"RightShoulder\"] = 5] = \"RightShoulder\";\n GamepadLayout[GamepadLayout[\"LeftTrigger\"] = 6] = \"LeftTrigger\";\n GamepadLayout[GamepadLayout[\"RightTrigger\"] = 7] = \"RightTrigger\";\n GamepadLayout[GamepadLayout[\"SelectOrBack\"] = 8] = \"SelectOrBack\";\n GamepadLayout[GamepadLayout[\"StartOrForward\"] = 9] = \"StartOrForward\";\n GamepadLayout[GamepadLayout[\"LeftAnalogPress\"] = 10] = \"LeftAnalogPress\";\n GamepadLayout[GamepadLayout[\"RightAnalogPress\"] = 11] = \"RightAnalogPress\";\n GamepadLayout[GamepadLayout[\"LeftClusterTopButton\"] = 12] = \"LeftClusterTopButton\";\n GamepadLayout[GamepadLayout[\"LeftClusterBottomButton\"] = 13] = \"LeftClusterBottomButton\";\n GamepadLayout[GamepadLayout[\"LeftClusterLeftButton\"] = 14] = \"LeftClusterLeftButton\";\n GamepadLayout[GamepadLayout[\"LeftClusterRightButton\"] = 15] = \"LeftClusterRightButton\";\n GamepadLayout[GamepadLayout[\"CentreButton\"] = 16] = \"CentreButton\";\n // Axes\n GamepadLayout[GamepadLayout[\"LeftStickHorizontal\"] = 0] = \"LeftStickHorizontal\";\n GamepadLayout[GamepadLayout[\"LeftStickVertical\"] = 1] = \"LeftStickVertical\";\n GamepadLayout[GamepadLayout[\"RightStickHorizontal\"] = 2] = \"RightStickHorizontal\";\n GamepadLayout[GamepadLayout[\"RightStickVertical\"] = 3] = \"RightStickVertical\";\n})(GamepadLayout || (GamepadLayout = {}));\n/**\n * Handles gamepad events from the document to send to the streamer.\n */\nexport class GamepadController {\n constructor(streamMessageController) {\n this.streamMessageController = streamMessageController;\n this.onGamepadConnectedListener = this.onGamepadConnected.bind(this);\n this.onGamepadDisconnectedListener = this.onGamepadDisconnected.bind(this);\n this.beforeUnloadListener = this.onBeforeUnload.bind(this);\n this.requestAnimationFrame = (window.mozRequestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.requestAnimationFrame).bind(window);\n }\n register() {\n window.addEventListener('beforeunload', this.beforeUnloadListener);\n const browserWindow = window;\n if ('GamepadEvent' in browserWindow) {\n window.addEventListener('gamepadconnected', this.onGamepadConnectedListener);\n window.addEventListener('gamepaddisconnected', this.onGamepadDisconnectedListener);\n }\n else if ('WebKitGamepadEvent' in browserWindow) {\n window.addEventListener('webkitgamepadconnected', this.onGamepadConnectedListener);\n window.addEventListener('webkitgamepaddisconnected', this.onGamepadDisconnectedListener);\n }\n this.controllers = [];\n if (navigator.getGamepads) {\n for (const gamepad of navigator.getGamepads()) {\n if (gamepad) {\n this.onGamepadConnected(new GamepadEvent('gamepadconnected', { gamepad }));\n }\n }\n }\n }\n unregister() {\n window.removeEventListener('gamepadconnected', this.onGamepadConnectedListener);\n window.removeEventListener('gamepaddisconnected', this.onGamepadDisconnectedListener);\n window.removeEventListener('webkitgamepadconnected', this.onGamepadConnectedListener);\n window.removeEventListener('webkitgamepaddisconnected', this.onGamepadDisconnectedListener);\n for (const controller of this.controllers) {\n if (controller && controller.id !== undefined) {\n this.streamMessageController.toStreamerHandlers.get('GamepadDisconnected')([controller.id]);\n }\n }\n this.controllers = [];\n }\n onGamepadResponseReceived(gamepadId) {\n for (const controller of this.controllers) {\n if (controller && controller.id === undefined) {\n controller.id = gamepadId;\n break;\n }\n }\n }\n onGamepadConnected(event) {\n const gamepad = event.gamepad;\n const newController = {\n currentState: deepCopyGamepad(gamepad),\n prevState: deepCopyGamepad(gamepad),\n id: undefined\n };\n this.controllers[gamepad.index] = newController;\n window.requestAnimationFrame(() => this.updateStatus());\n this.streamMessageController.toStreamerHandlers.get('GamepadConnected')();\n }\n onGamepadDisconnected(event) {\n const gamepad = event.gamepad;\n const deletedController = this.controllers[gamepad.index];\n delete this.controllers[gamepad.index];\n this.controllers = this.controllers.filter((controller) => controller !== undefined);\n if (deletedController.id !== undefined) {\n this.streamMessageController.toStreamerHandlers.get('GamepadDisconnected')([\n deletedController.id\n ]);\n }\n }\n scanGamepads() {\n const gamepads = navigator.getGamepads\n ? navigator.getGamepads()\n : navigator.webkitGetGamepads\n ? navigator.webkitGetGamepads()\n : [];\n for (let i = 0; i < gamepads.length; i++) {\n if (gamepads[i] && this.controllers[gamepads[i].index] !== undefined) {\n this.controllers[gamepads[i].index].currentState = gamepads[i];\n }\n }\n }\n updateStatus() {\n this.scanGamepads();\n const toStreamerHandlers = this.streamMessageController.toStreamerHandlers;\n // Iterate over multiple controllers in the case the multiple gamepads are connected\n for (const controller of this.controllers) {\n if (!controller) {\n continue;\n }\n // If we haven't received an id (possible if using an older version of UE), return to original functionality\n const controllerId = controller.id === undefined ? this.controllers.indexOf(controller) : controller.id;\n const currentState = controller.currentState;\n for (let i = 0; i < controller.currentState.buttons.length; i++) {\n const currentButton = controller.currentState.buttons[i];\n const previousButton = controller.prevState.buttons[i];\n if (currentButton.pressed) {\n // press\n if (i == GamepadLayout.LeftTrigger) {\n // UEs left analog has a button index of 5\n toStreamerHandlers.get('GamepadAnalog')([controllerId, 5, currentButton.value]);\n }\n else if (i == GamepadLayout.RightTrigger) {\n // UEs right analog has a button index of 6\n toStreamerHandlers.get('GamepadAnalog')([controllerId, 6, currentButton.value]);\n }\n else {\n toStreamerHandlers.get('GamepadButtonPressed')([\n controllerId,\n i,\n previousButton.pressed ? 1 : 0\n ]);\n }\n }\n else if (!currentButton.pressed && previousButton.pressed) {\n // release\n if (i == GamepadLayout.LeftTrigger) {\n // UEs left analog has a button index of 5\n toStreamerHandlers.get('GamepadAnalog')([controllerId, 5, 0]);\n }\n else if (i == GamepadLayout.RightTrigger) {\n // UEs right analog has a button index of 6\n toStreamerHandlers.get('GamepadAnalog')([controllerId, 6, 0]);\n }\n else {\n toStreamerHandlers.get('GamepadButtonReleased')([controllerId, i, 0]);\n }\n }\n }\n // Iterate over gamepad axes (we will increment in lots of 2 as there is 2 axes per stick)\n for (let i = 0; i < currentState.axes.length; i += 2) {\n // Horizontal axes are even numbered\n const x = parseFloat(currentState.axes[i].toFixed(4));\n // Vertical axes are odd numbered\n // https://w3c.github.io/gamepad/#remapping Gamepad browser side standard mapping has positive down, negative up. This is downright disgusting. So we fix it.\n const y = -parseFloat(currentState.axes[i + 1].toFixed(4));\n // UE's analog axes follow the same order as the browsers, but start at index 1 so we will offset as such\n toStreamerHandlers.get('GamepadAnalog')([controllerId, i + 1, x]); // Horizontal axes, only offset by 1\n toStreamerHandlers.get('GamepadAnalog')([controllerId, i + 2, y]); // Vertical axes, offset by two (1 to match UEs axes convention and then another 1 for the vertical axes)\n }\n const controllerIndex = this.controllers.indexOf(controller);\n this.controllers[controllerIndex].prevState = deepCopyGamepad(currentState);\n }\n if (this.controllers.length > 0) {\n this.requestAnimationFrame(() => this.updateStatus());\n }\n }\n onBeforeUnload(_) {\n // When a user navigates away from the page, we need to inform UE of all the disconnecting\n // controllers\n for (const controller of this.controllers) {\n if (!controller || controller.id === undefined) {\n continue;\n }\n this.streamMessageController.toStreamerHandlers.get('GamepadDisconnected')([controller.id]);\n }\n }\n}\n//# sourceMappingURL=GamepadController.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport { KeyboardController } from './KeyboardController';\nimport { MouseControllerLocked } from './MouseControllerLocked';\nimport { MouseControllerHovering } from './MouseControllerHovering';\nimport { TouchController } from './TouchController';\nimport { TouchControllerFake } from './TouchControllerFake';\nimport { GamepadController } from './GamepadController';\nimport { ControlSchemeType } from '../Config/Config';\nimport { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';\n/**\n * Class for making and setting up input class types\n */\nexport class InputClassesFactory {\n /**\n * @param toStreamerMessagesProvider - Stream message instance\n * @param videoElementProvider - Video Player instance\n * @param coordinateConverter - A coordinateConverter instance\n */\n constructor(toStreamerMessagesProvider, videoElementProvider, coordinateConverter) {\n this.activeKeys = new ActiveKeys();\n this.toStreamerMessagesProvider = toStreamerMessagesProvider;\n this.videoElementProvider = videoElementProvider;\n this.coordinateConverter = coordinateConverter;\n }\n /**\n * Registers browser key events.\n */\n registerKeyBoard(config) {\n Logger.Info('Register Keyboard Events');\n const keyboardController = new KeyboardController(this.toStreamerMessagesProvider, config, this.activeKeys);\n keyboardController.register();\n return keyboardController;\n }\n /**\n * register mouse events based on a control type\n * @param controlScheme - if the mouse is either hovering or locked\n */\n registerMouse(controlScheme) {\n Logger.Info('Register Mouse Events');\n let mouseController;\n if (controlScheme == ControlSchemeType.HoveringMouse) {\n mouseController = new MouseControllerHovering(this.toStreamerMessagesProvider, this.videoElementProvider, this.coordinateConverter, this.activeKeys);\n }\n else {\n mouseController = new MouseControllerLocked(this.toStreamerMessagesProvider, this.videoElementProvider, this.coordinateConverter, this.activeKeys);\n }\n mouseController.register();\n return mouseController;\n }\n /**\n * register touch events\n * @param fakeMouseTouch - the faked mouse touch event\n */\n registerTouch(fakeMouseTouch) {\n Logger.Info('Registering Touch');\n let touchController;\n if (fakeMouseTouch) {\n touchController = new TouchControllerFake(this.toStreamerMessagesProvider, this.videoElementProvider, this.coordinateConverter);\n }\n else {\n touchController = new TouchController(this.toStreamerMessagesProvider, this.videoElementProvider, this.coordinateConverter);\n }\n touchController.register();\n return touchController;\n }\n /**\n * registers a gamepad\n */\n registerGamePad() {\n Logger.Info('Register Game Pad');\n const gamepadController = new GamepadController(this.toStreamerMessagesProvider);\n gamepadController.register();\n return gamepadController;\n }\n}\n/**\n * A class that keeps track of current active keys\n */\nexport class ActiveKeys {\n constructor() {\n this.activeKeys = [];\n this.activeKeys = [];\n }\n /**\n * Get the current array of active keys\n * @returns - an array of active keys\n */\n getActiveKeys() {\n return this.activeKeys;\n }\n}\n//# sourceMappingURL=InputClassesFactory.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport { Flags } from '../Config/Config';\nimport { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';\n/**\n * The video player html element\n */\nexport class VideoPlayer {\n /**\n * @param videoElementParent the html div the the video player will be injected into\n * @param config the applications configuration. We're interested in the startVideoMuted flag\n */\n constructor(videoElementParent, config) {\n this.lastTimeResized = new Date().getTime();\n this.videoElement = document.createElement('video');\n this.config = config;\n this.videoElement.id = 'streamingVideo';\n this.videoElement.disablePictureInPicture = true;\n this.videoElement.playsInline = true;\n this.videoElement.style.width = '100%';\n this.videoElement.style.height = '100%';\n this.videoElement.style.position = 'absolute';\n this.videoElement.style.pointerEvents = 'all';\n videoElementParent.appendChild(this.videoElement);\n this.onResizePlayerCallback = () => {\n console.log('Resolution changed, restyling player, did you forget to override this function?');\n };\n this.onMatchViewportResolutionCallback = () => {\n console.log('Resolution changed and match viewport resolution is turned on, did you forget to override this function?');\n };\n // set play for video (and audio)\n this.videoElement.onclick = () => {\n if (this.audioElement != undefined && this.audioElement.paused) {\n this.audioElement.play();\n }\n if (this.videoElement.paused) {\n this.videoElement.play();\n }\n };\n this.videoElement.onloadedmetadata = () => {\n this.onVideoInitialized();\n };\n // set resize events to the windows if it is resized or its orientation is changed\n window.addEventListener('resize', () => this.resizePlayerStyle(), true);\n window.addEventListener('orientationchange', () => this.onOrientationChange());\n }\n destroy() {\n this.videoElement.src = '';\n this.videoElement.srcObject = null;\n this.videoElement.remove();\n if (this.audioElement) {\n this.audioElement.src = '';\n this.audioElement.srcObject = null;\n this.audioElement.remove();\n }\n }\n setAudioElement(audioElement) {\n this.audioElement = audioElement;\n }\n /**\n * Sets up the video element with any application config and plays the video element.\n * @returns A promise for if playing the video was successful or not.\n */\n play() {\n this.videoElement.muted = this.config.isFlagEnabled(Flags.StartVideoMuted);\n this.videoElement.autoplay = this.config.isFlagEnabled(Flags.AutoPlayVideo);\n return this.videoElement.play();\n }\n /**\n * @returns True if the video element is paused.\n */\n isPaused() {\n return this.videoElement.paused;\n }\n /**\n * @returns - whether the video element is playing.\n */\n isVideoReady() {\n return this.videoElement.readyState !== undefined && this.videoElement.readyState > 0;\n }\n /**\n * @returns True if the video element has a valid video source (srcObject).\n */\n hasVideoSource() {\n return this.videoElement.srcObject !== undefined && this.videoElement.srcObject !== null;\n }\n /**\n * Get the current context of the html video element\n * @returns - the current context of the video element\n */\n getVideoElement() {\n return this.videoElement;\n }\n /**\n * Get the current context of the html video elements parent\n * @returns - the current context of the video elements parent\n */\n getVideoParentElement() {\n var _a;\n return (_a = this.videoElement.parentElement) !== null && _a !== void 0 ? _a : undefined;\n }\n /**\n * Set the Video Elements src object tracks to enable\n * @param enabled - Enable Tracks on the Src Object\n */\n setVideoEnabled(enabled) {\n // this is a temporary hack until type scripts video element is updated to reflect the need for tracks on a html video element\n const videoElement = this.videoElement;\n videoElement.srcObject\n .getTracks()\n .forEach((track) => (track.enabled = enabled));\n }\n /**\n * An override for when the video has been initialized with a srcObject\n */\n onVideoInitialized() {\n // Default Functionality: Do Nothing\n }\n /**\n * On the orientation change of a window clear the timeout\n */\n onOrientationChange() {\n clearTimeout(this.orientationChangeTimeout);\n this.orientationChangeTimeout = window.setTimeout(() => {\n this.resizePlayerStyle();\n }, 500);\n }\n /**\n * Resizes the player style based on the window height and width\n * @returns - nil if requirements are satisfied\n */\n resizePlayerStyle() {\n const videoElementParent = this.getVideoParentElement();\n if (!videoElementParent) {\n return;\n }\n this.updateVideoStreamSize();\n if (videoElementParent.classList.contains('fixed-size')) {\n this.onResizePlayerCallback();\n return;\n }\n // controls for resizing the player\n this.resizePlayerStyleToFillParentElement();\n this.onResizePlayerCallback();\n }\n /**\n * Resizes the player element to fill the parent element\n */\n resizePlayerStyleToFillParentElement() {\n const videoElementParent = this.getVideoParentElement();\n //Video is not initialized yet so set videoElementParent to size of parent element\n const styleWidth = '100%';\n const styleHeight = '100%';\n const styleTop = 0;\n const styleLeft = 0;\n videoElementParent.setAttribute('style', 'top: ' +\n styleTop +\n 'px; left: ' +\n styleLeft +\n 'px; width: ' +\n styleWidth +\n '; height: ' +\n styleHeight +\n '; cursor: default;');\n }\n updateVideoStreamSize() {\n if (!this.config.isFlagEnabled(Flags.MatchViewportResolution)) {\n return;\n }\n const now = new Date().getTime();\n if (now - this.lastTimeResized > 300) {\n const videoElementParent = this.getVideoParentElement();\n if (!videoElementParent) {\n return;\n }\n this.onMatchViewportResolutionCallback(videoElementParent.clientWidth, videoElementParent.clientHeight);\n this.lastTimeResized = new Date().getTime();\n }\n else {\n Logger.Info('Resizing too often - skipping');\n clearTimeout(this.resizeTimeoutHandle);\n this.resizeTimeoutHandle = window.setTimeout(() => this.updateVideoStreamSize(), 100);\n }\n }\n}\n//# sourceMappingURL=VideoPlayer.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';\nexport class ToStreamerMessage {\n}\nexport class StreamMessageController {\n constructor() {\n this.toStreamerHandlers = new Map();\n this.fromStreamerHandlers = new Map();\n this.toStreamerMessages = new Map();\n this.fromStreamerMessages = new Map();\n }\n /**\n * Populate the Default message protocol\n */\n populateDefaultProtocol() {\n /*\n * Control Messages. Range = 0..49.\n */\n this.toStreamerMessages.set('IFrameRequest', {\n id: 0,\n structure: []\n });\n this.toStreamerMessages.set('RequestQualityControl', {\n id: 1,\n structure: []\n });\n this.toStreamerMessages.set('FpsRequest', {\n id: 2,\n structure: []\n });\n this.toStreamerMessages.set('AverageBitrateRequest', {\n id: 3,\n structure: []\n });\n this.toStreamerMessages.set('StartStreaming', {\n id: 4,\n structure: []\n });\n this.toStreamerMessages.set('StopStreaming', {\n id: 5,\n structure: []\n });\n this.toStreamerMessages.set('LatencyTest', {\n id: 6,\n structure: ['string']\n });\n this.toStreamerMessages.set('RequestInitialSettings', {\n id: 7,\n structure: []\n });\n this.toStreamerMessages.set('TestEcho', {\n id: 8,\n structure: []\n });\n this.toStreamerMessages.set('DataChannelLatencyTest', {\n id: 9,\n structure: []\n });\n /*\n * Input Messages. Range = 50..89.\n */\n // Generic Input Messages. Range = 50..59.\n this.toStreamerMessages.set('UIInteraction', {\n id: 50,\n structure: ['string']\n });\n this.toStreamerMessages.set('Command', {\n id: 51,\n structure: ['string']\n });\n this.toStreamerMessages.set('TextboxEntry', {\n id: 52,\n structure: ['string']\n });\n // Keyboard Input Message. Range = 60..69.\n this.toStreamerMessages.set('KeyDown', {\n id: 60,\n // keyCode isRepeat\n structure: ['uint8', 'uint8']\n });\n this.toStreamerMessages.set('KeyUp', {\n id: 61,\n // keyCode\n structure: ['uint8']\n });\n this.toStreamerMessages.set('KeyPress', {\n id: 62,\n // charcode\n structure: ['uint16']\n });\n // Mouse Input Messages. Range = 70..79.\n this.toStreamerMessages.set('MouseEnter', {\n id: 70,\n structure: []\n });\n this.toStreamerMessages.set('MouseLeave', {\n id: 71,\n structure: []\n });\n this.toStreamerMessages.set('MouseDown', {\n id: 72,\n // button x y\n structure: ['uint8', 'uint16', 'uint16']\n });\n this.toStreamerMessages.set('MouseUp', {\n id: 73,\n // button x y\n structure: ['uint8', 'uint16', 'uint16']\n });\n this.toStreamerMessages.set('MouseMove', {\n id: 74,\n // x y deltaX deltaY\n structure: ['uint16', 'uint16', 'int16', 'int16']\n });\n this.toStreamerMessages.set('MouseWheel', {\n id: 75,\n // delta x y\n structure: ['int16', 'uint16', 'uint16']\n });\n this.toStreamerMessages.set('MouseDouble', {\n id: 76,\n // button x y\n structure: ['uint8', 'uint16', 'uint16']\n });\n // Touch Input Messages. Range = 80..89.\n this.toStreamerMessages.set('TouchStart', {\n id: 80,\n // numtouches(1) x y idx force valid\n structure: ['uint8', 'uint16', 'uint16', 'uint8', 'uint8', 'uint8']\n });\n this.toStreamerMessages.set('TouchEnd', {\n id: 81,\n // numtouches(1) x y idx force valid\n structure: ['uint8', 'uint16', 'uint16', 'uint8', 'uint8', 'uint8']\n });\n this.toStreamerMessages.set('TouchMove', {\n id: 82,\n // numtouches(1) x y idx force valid\n structure: ['uint8', 'uint16', 'uint16', 'uint8', 'uint8', 'uint8']\n });\n // Gamepad Input Messages. Range = 90..99\n this.toStreamerMessages.set('GamepadConnected', {\n id: 93,\n structure: []\n });\n this.toStreamerMessages.set('GamepadButtonPressed', {\n id: 90,\n // ctrlerId button isRepeat\n structure: ['uint8', 'uint8', 'uint8']\n });\n this.toStreamerMessages.set('GamepadButtonReleased', {\n id: 91,\n // ctrlerId button isRepeat(0)\n structure: ['uint8', 'uint8', 'uint8']\n });\n this.toStreamerMessages.set('GamepadAnalog', {\n id: 92,\n // ctrlerId button analogValue\n structure: ['uint8', 'uint8', 'double']\n });\n this.toStreamerMessages.set('GamepadDisconnected', {\n id: 94,\n // ctrlerId\n structure: ['uint8']\n });\n this.fromStreamerMessages.set(0, 'QualityControlOwnership');\n this.fromStreamerMessages.set(1, 'Response');\n this.fromStreamerMessages.set(2, 'Command');\n this.fromStreamerMessages.set(3, 'FreezeFrame');\n this.fromStreamerMessages.set(4, 'UnfreezeFrame');\n this.fromStreamerMessages.set(5, 'VideoEncoderAvgQP');\n this.fromStreamerMessages.set(6, 'LatencyTest');\n this.fromStreamerMessages.set(7, 'InitialSettings');\n this.fromStreamerMessages.set(8, 'FileExtension');\n this.fromStreamerMessages.set(9, 'FileMimeType');\n this.fromStreamerMessages.set(10, 'FileContents');\n this.fromStreamerMessages.set(11, 'TestEcho');\n this.fromStreamerMessages.set(12, 'InputControlOwnership');\n this.fromStreamerMessages.set(13, 'GamepadResponse');\n this.fromStreamerMessages.set(14, 'DataChannelLatencyTest');\n this.fromStreamerMessages.set(255, 'Protocol');\n }\n /**\n * Register a message handler\n * @param messageDirection - the direction of the message; toStreamer or fromStreamer\n * @param messageType - the type of the message\n * @param messageHandler - the function or method to be executed when this handler is called\n */\n registerMessageHandler(messageDirection, messageType, messageHandler) {\n switch (messageDirection) {\n case MessageDirection.ToStreamer:\n this.toStreamerHandlers.set(messageType, messageHandler);\n break;\n case MessageDirection.FromStreamer:\n this.fromStreamerHandlers.set(messageType, messageHandler);\n break;\n default:\n Logger.Info(`Unknown message direction ${messageDirection}`);\n }\n }\n}\n/**\n * The enum for message directions\n */\nexport var MessageDirection;\n(function (MessageDirection) {\n MessageDirection[MessageDirection[\"ToStreamer\"] = 0] = \"ToStreamer\";\n MessageDirection[MessageDirection[\"FromStreamer\"] = 1] = \"FromStreamer\";\n})(MessageDirection || (MessageDirection = {}));\n//# sourceMappingURL=StreamMessageController.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';\nexport class ResponseController {\n constructor() {\n this.responseEventListeners = new Map();\n }\n /**\n * Add a response event listener to the response map\n * @param name - The name of the response\n * @param listener - The method to be activated when the response is selected\n */\n addResponseEventListener(name, listener) {\n this.responseEventListeners.set(name, listener);\n }\n /**\n * Remove a response event listener to the response map\n * @param name - The name of the response\n */\n removeResponseEventListener(name) {\n this.responseEventListeners.delete(name);\n }\n /**\n * Handle a response when receiving one form the streamer\n * @param message - Data received from the data channel with the command in question\n */\n onResponse(message) {\n Logger.Info('DataChannelReceiveMessageType.Response');\n const responses = new TextDecoder('utf-16').decode(message.slice(1));\n Logger.Info(responses);\n this.responseEventListeners.forEach((listener) => {\n listener(responses);\n });\n }\n}\n//# sourceMappingURL=ResponseController.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';\nexport class SendMessageController {\n /**\n * @param dataChannelSender - Data channel instance\n * @param toStreamerMessagesMapProvider - Stream Messages instance\n */\n constructor(dataChannelSender, toStreamerMessagesMapProvider) {\n this.dataChannelSender = dataChannelSender;\n this.toStreamerMessagesMapProvider = toStreamerMessagesMapProvider;\n }\n /**\n * Send a message to the streamer through the data channel\n * @param messageType - the type of message we are sending\n * @param messageData - the message data we are sending over the data channel\n * @returns - nil\n */\n sendMessageToStreamer(messageType, messageData) {\n if (messageData === undefined) {\n messageData = [];\n }\n const toStreamerMessages = this.toStreamerMessagesMapProvider.toStreamerMessages;\n const messageFormat = toStreamerMessages.get(messageType);\n if (messageFormat === undefined) {\n Logger.Error(`Attempted to send a message to the streamer with message type: ${messageType}, but the frontend hasn't been configured to send such a message. Check you've added the message type in your cpp`);\n return;\n }\n if (messageFormat.structure && messageData && messageFormat.structure.length !== messageData.length) {\n Logger.Error(`Provided message data doesn't match expected layout. Expected [ ${messageFormat.structure\n .map((element) => {\n switch (element) {\n case 'uint8':\n case 'uint16':\n case 'int16':\n case 'float':\n case 'double':\n default:\n return 'number';\n case 'string':\n return 'string';\n }\n })\n .toString()} ] but received [ ${messageData.map((element) => typeof element).toString()} ]`);\n return;\n }\n let byteLength = 0;\n const textEncoder = new TextEncoder();\n // One loop to calculate the length in bytes of all of the provided data\n messageData.forEach((element, idx) => {\n const type = messageFormat.structure[idx];\n switch (type) {\n case 'uint8':\n byteLength += 1;\n break;\n case 'uint16':\n byteLength += 2;\n break;\n case 'int16':\n byteLength += 2;\n break;\n case 'float':\n byteLength += 4;\n break;\n case 'double':\n byteLength += 8;\n break;\n case 'string':\n // 2 bytes for string length\n byteLength += 2;\n // 2 bytes per characters\n byteLength += 2 * textEncoder.encode(element).length;\n break;\n }\n });\n const data = new DataView(new ArrayBuffer(byteLength + 1));\n data.setUint8(0, messageFormat.id);\n let byteOffset = 1;\n messageData.forEach((element, idx) => {\n const type = messageFormat.structure[idx];\n switch (type) {\n case 'uint8':\n data.setUint8(byteOffset, element);\n byteOffset += 1;\n break;\n case 'uint16':\n data.setUint16(byteOffset, element, true);\n byteOffset += 2;\n break;\n case 'int16':\n data.setInt16(byteOffset, element, true);\n byteOffset += 2;\n break;\n case 'float':\n data.setFloat32(byteOffset, element, true);\n byteOffset += 4;\n break;\n case 'double':\n data.setFloat64(byteOffset, element, true);\n byteOffset += 8;\n break;\n case 'string':\n data.setUint16(byteOffset, element.length, true);\n byteOffset += 2;\n for (let i = 0; i < element.length; i++) {\n data.setUint16(byteOffset, element.charCodeAt(i), true);\n byteOffset += 2;\n }\n break;\n }\n });\n if (!this.dataChannelSender.canSend()) {\n Logger.Info(`Data channel cannot send yet, skipping sending message: ${messageType} - ${new Uint8Array(data.buffer)}`);\n return;\n }\n this.dataChannelSender.sendData(data.buffer);\n }\n}\n//# sourceMappingURL=SendMessageController.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nexport class ToStreamerMessagesController {\n /**\n * @param sendMessageController - Stream message controller instance\n */\n constructor(sendMessageController) {\n this.sendMessageController = sendMessageController;\n }\n /**\n * Send Request to Take Quality Control to the UE Instance\n */\n SendRequestQualityControl() {\n this.sendMessageController.sendMessageToStreamer('RequestQualityControl');\n }\n /**\n * Send Max FPS Request to the UE Instance\n */\n SendMaxFpsRequest() {\n this.sendMessageController.sendMessageToStreamer('FpsRequest');\n }\n /**\n * Send Average Bitrate Request to the UE Instance\n */\n SendAverageBitrateRequest() {\n this.sendMessageController.sendMessageToStreamer('AverageBitrateRequest');\n }\n /**\n * Send a Start Streaming Message to the UE Instance\n */\n SendStartStreaming() {\n this.sendMessageController.sendMessageToStreamer('StartStreaming');\n }\n /**\n * Send a Stop Streaming Message to the UE Instance\n */\n SendStopStreaming() {\n this.sendMessageController.sendMessageToStreamer('StopStreaming');\n }\n /**\n * Send a Request Initial Settings to the UE Instance\n */\n SendRequestInitialSettings() {\n this.sendMessageController.sendMessageToStreamer('RequestInitialSettings');\n }\n}\n//# sourceMappingURL=ToStreamerMessagesController.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';\n/**\n * A class for sending data channel messages\n */\nexport class DataChannelSender {\n /**\n * @param dataChannelProvider - Data channel object type\n */\n constructor(dataChannelProvider) {\n this.dataChannelProvider = dataChannelProvider;\n }\n canSend() {\n return (this.dataChannelProvider.getDataChannelInstance().dataChannel !== undefined &&\n this.dataChannelProvider.getDataChannelInstance().dataChannel.readyState == 'open');\n }\n /**\n * Send Data over the Data channel to the UE Instance\n * @param data - Message Data Array Buffer\n */\n sendData(data) {\n // reset the afk inactivity\n const dataChannelInstance = this.dataChannelProvider.getDataChannelInstance();\n if (dataChannelInstance.dataChannel.readyState == 'open') {\n dataChannelInstance.dataChannel.send(data);\n Logger.Info(`Message Sent: ${new Uint8Array(data)}`);\n this.resetAfkWarningTimerOnDataSend();\n }\n else {\n Logger.Error(`Message Failed: ${new Uint8Array(data)}`);\n }\n }\n /**\n * An override method for resetting the Afk warning timer when data is sent over the data channel\n */\n resetAfkWarningTimerOnDataSend() {\n // Base Functionality: Do Nothing\n }\n}\n//# sourceMappingURL=DataChannelSender.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\n/**\n * Converts coordinates from element relative coordinates to values normalized within the value range of a short (and back again)\n */\nexport class InputCoordTranslator {\n // we dont use a constructor here because the object is created and passed around to various locations\n // possibly before this method is called.\n reconfigure(playerSize, videoSize) {\n const playerAspectRatio = playerSize.height / playerSize.width;\n const videoAspectRatio = videoSize.height / videoSize.width;\n this.playerIsLarger = playerAspectRatio > videoAspectRatio;\n this.playerSize = playerSize;\n this.ratio = this.playerIsLarger\n ? playerAspectRatio / videoAspectRatio\n : videoAspectRatio / playerAspectRatio;\n }\n translateUnsigned(x, y) {\n const normalizedX = this.playerIsLarger\n ? x / this.playerSize.width\n : this.ratio * (x / this.playerSize.width - 0.5) + 0.5;\n const normalizedY = this.playerIsLarger\n ? this.ratio * (y / this.playerSize.height - 0.5) + 0.5\n : y / this.playerSize.height;\n if (normalizedX < 0.0 || normalizedX > 1.0 || normalizedY < 0.0 || normalizedY > 1.0) {\n return { inRange: false, x: 65535, y: 65535 };\n }\n else {\n return { inRange: true, x: normalizedX * 65536, y: normalizedY * 65536 };\n }\n }\n translateSigned(x, y) {\n const normalizedX = this.playerIsLarger\n ? x / (0.5 * this.playerSize.width)\n : (this.ratio * x) / (0.5 * this.playerSize.width);\n const normalizedY = this.playerIsLarger\n ? (this.ratio * y) / (0.5 * this.playerSize.height)\n : y / (0.5 * this.playerSize.height);\n return { x: normalizedX * 32767, y: normalizedY * 32767 };\n }\n untranslateUnsigned(x, y) {\n const normalizedX = this.playerIsLarger ? x / 65536 : (x / 65536 - 0.5) / this.ratio + 0.5;\n const normalizedY = this.playerIsLarger ? (y / 65536 - 0.5) / this.ratio + 0.5 : y / 65536;\n return { x: normalizedX * this.playerSize.width, y: normalizedY * this.playerSize.height };\n }\n}\n//# sourceMappingURL=InputCoordTranslator.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\n/**\n * A case insensitive, partial implementation of URLSearchParams\n */\nexport class IURLSearchParams {\n constructor(search) {\n this._urlParams = {};\n const urlParams = new URLSearchParams(search);\n for (const [name, value] of urlParams) {\n this._urlParams[name.toLowerCase()] = value;\n }\n }\n has(name) {\n return name.toLowerCase() in this._urlParams;\n }\n get(name) {\n if (this.has(name)) {\n return this._urlParams[name.toLowerCase()];\n }\n return null;\n }\n}\n//# sourceMappingURL=IURLSearchParams.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport { WebSocketTransport, Logger, SignallingProtocol, Messages, MessageHelpers, KeepaliveMonitor } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';\nimport { StreamController } from '../VideoPlayer/StreamController';\nimport { FreezeFrameController } from '../FreezeFrame/FreezeFrameController';\nimport { AFKController } from '../AFK/AFKController';\nimport { DataChannelController } from '../DataChannel/DataChannelController';\nimport { PeerConnectionController } from '../PeerConnectionController/PeerConnectionController';\nimport { Flags, ControlSchemeType, TextParameters, OptionParameters, NumericParameters } from '../Config/Config';\nimport { InitialSettings } from '../DataChannel/InitialSettings';\nimport { LatencyTestResults } from '../DataChannel/LatencyTestResults';\nimport { FileTemplate, FileUtil } from '../Util/FileUtil';\nimport { InputClassesFactory } from '../Inputs/InputClassesFactory';\nimport { VideoPlayer } from '../VideoPlayer/VideoPlayer';\nimport { StreamMessageController, MessageDirection } from '../UeInstanceMessage/StreamMessageController';\nimport { ResponseController } from '../UeInstanceMessage/ResponseController';\nimport { SendMessageController } from '../UeInstanceMessage/SendMessageController';\nimport { ToStreamerMessagesController } from '../UeInstanceMessage/ToStreamerMessagesController';\nimport { DataChannelSender } from '../DataChannel/DataChannelSender';\nimport { InputCoordTranslator } from '../Util/InputCoordTranslator';\nimport { DataChannelCloseEvent, DataChannelErrorEvent, DataChannelOpenEvent, HideFreezeFrameEvent, LoadFreezeFrameEvent, PlayStreamErrorEvent, PlayStreamEvent, PlayStreamRejectedEvent, ShowOnScreenKeyboardEvent, StreamerListMessageEvent, StreamerIDChangedMessageEvent } from '../Util/EventEmitter';\nimport { IURLSearchParams } from '../Util/IURLSearchParams';\nimport { BrowserUtils } from '../Util/BrowserUtils';\n/**\n * Entry point for the WebRTC Player\n */\nexport class WebRtcPlayerController {\n /**\n *\n * @param config - the frontend config object\n * @param pixelStreaming - the PixelStreaming object\n */\n constructor(config, pixelStreaming) {\n this.shouldShowPlayOverlay = true;\n this.autoJoinTimer = undefined;\n this.config = config;\n this.pixelStreaming = pixelStreaming;\n this.responseController = new ResponseController();\n this.file = new FileTemplate();\n this.sdpConstraints = {\n offerToReceiveAudio: true,\n offerToReceiveVideo: true\n };\n // set up the afk logic class and connect up its method for closing the signaling server\n this.afkController = new AFKController(this.config, this.pixelStreaming, this.onAfkTriggered.bind(this));\n this.afkController.onAFKTimedOutCallback = () => {\n this.closeSignalingServer('You have been disconnected due to inactivity.', false);\n };\n this.freezeFrameController = new FreezeFrameController(this.pixelStreaming.videoElementParent);\n this.videoPlayer = new VideoPlayer(this.pixelStreaming.videoElementParent, this.config);\n this.videoPlayer.onVideoInitialized = () => this.handleVideoInitialized();\n // When in match viewport resolution mode, when the browser viewport is resized we send a resize command back to UE.\n this.videoPlayer.onMatchViewportResolutionCallback = (width, height) => {\n const descriptor = {\n 'Resolution.Width': width,\n 'Resolution.Height': height\n };\n this.streamMessageController.toStreamerHandlers.get('Command')([JSON.stringify(descriptor)]);\n };\n // Every time video player is resized in browser we need to reinitialize the mouse coordinate conversion and freeze frame sizing logic.\n this.videoPlayer.onResizePlayerCallback = () => {\n this.setUpMouseAndFreezeFrame();\n };\n this.streamController = new StreamController(this.videoPlayer);\n this.coordinateConverter = new InputCoordTranslator();\n this.sendrecvDataChannelController = new DataChannelController();\n this.recvDataChannelController = new DataChannelController();\n this.registerDataChannelEventEmitters(this.sendrecvDataChannelController);\n this.registerDataChannelEventEmitters(this.recvDataChannelController);\n this.dataChannelSender = new DataChannelSender(this.sendrecvDataChannelController);\n this.dataChannelSender.resetAfkWarningTimerOnDataSend = () => this.afkController.resetAfkWarningTimer();\n this.streamMessageController = new StreamMessageController();\n // set up websocket methods\n this.transport = new WebSocketTransport(config.webSocketProtocols);\n this.protocol = new SignallingProtocol(this.transport);\n this.protocol.addListener(Messages.config.typeName, (msg) => this.handleOnConfigMessage(msg));\n this.protocol.addListener(Messages.ping.typeName, (msg) => this.handlePingMessage(msg));\n this.protocol.addListener(Messages.streamerList.typeName, (msg) => this.handleStreamerListMessage(msg));\n this.protocol.addListener(Messages.subscribeFailed.typeName, (msg) => this.handleSubscribeFailedMessage(msg));\n this.protocol.addListener(Messages.streamerIdChanged.typeName, (msg) => this.handleStreamerIDChangedMessage(msg));\n this.protocol.addListener(Messages.playerCount.typeName, (msg) => {\n const playerCountMessage = msg;\n this.pixelStreaming._onPlayerCount(playerCountMessage.count);\n });\n this.protocol.addListener(Messages.answer.typeName, (msg) => this.handleWebRtcAnswer(msg));\n this.protocol.addListener(Messages.offer.typeName, (msg) => this.handleWebRtcOffer(msg));\n this.protocol.addListener(Messages.peerDataChannels.typeName, (msg) => this.handleWebRtcSFUPeerDatachannels(msg));\n this.protocol.addListener(Messages.iceCandidate.typeName, (msg) => {\n const iceCandidateMessage = msg;\n this.handleIceCandidate(iceCandidateMessage.candidate);\n });\n this.protocol.transport.addListener('open', () => {\n const message = MessageHelpers.createMessage(Messages.listStreamers);\n this.protocol.sendMessage(message);\n this.reconnectAttempt = 0;\n this.isReconnecting = false;\n });\n this.protocol.transport.addListener('error', () => {\n // dont really need to do anything here since the close event should follow.\n Logger.Error(`Got a transport error.`);\n });\n this.protocol.transport.addListener('close', (event) => {\n // when we refresh the page during a stream we get the going away code.\n // in that case we don't want to reconnect since we're navigating away.\n // https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent/code\n // lists all the codes.\n const CODE_GOING_AWAY = 1001;\n const maxReconnectAttempts = this.config.getNumericSettingValue(NumericParameters.MaxReconnectAttempts);\n const attemptsLeft = this.reconnectAttempt < maxReconnectAttempts;\n const reconnectEnabled = this.forceReconnect || (this.enableAutoReconnect && maxReconnectAttempts > 0 && attemptsLeft);\n const willTryReconnect = reconnectEnabled && event.code != CODE_GOING_AWAY;\n const allowClickToReconnect = !willTryReconnect;\n const disconnectMessage = this.disconnectMessage ? this.disconnectMessage : event.reason;\n this.forceReconnect = false;\n // Reset the list of all possible codecs on disconnect so that if the next connection has \"NegotiateCodecs\" on\n // then all codecs can be negotiated\n this.config.getSettingOption(OptionParameters.PreferredCodec).options =\n BrowserUtils.getSupportedVideoCodecs();\n this.pixelStreaming._onDisconnect(disconnectMessage, allowClickToReconnect);\n this.afkController.stopAfkWarningTimer();\n // stop sending stats on interval if we have closed our connection\n if (this.statsTimerHandle && this.statsTimerHandle !== undefined) {\n window.clearInterval(this.statsTimerHandle);\n }\n // reset the stream quality icon.\n this.setVideoEncoderAvgQP(0);\n // unregister all input device event handlers on disconnect\n this.setTouchInputEnabled(false);\n this.setMouseInputEnabled(false);\n this.setKeyboardInputEnabled(false);\n this.setGamePadInputEnabled(false);\n if (willTryReconnect) {\n // need a small delay here to prevent reconnect spamming\n setTimeout(() => {\n this.reconnectAttempt++;\n this.doReconnect(event.reason);\n }, 2000);\n }\n });\n // set up the final webRtc player controller methods from within our application so a connection can be activated\n this.sendMessageController = new SendMessageController(this.dataChannelSender, this.streamMessageController);\n this.toStreamerMessagesController = new ToStreamerMessagesController(this.sendMessageController);\n this.registerMessageHandlers();\n this.streamMessageController.populateDefaultProtocol();\n this.inputClassesFactory = new InputClassesFactory(this.streamMessageController, this.videoPlayer, this.coordinateConverter);\n this.isUsingSFU = false;\n this.isUsingSVC = false;\n this.isQualityController = false;\n this.preferredCodec = '';\n this.enableAutoReconnect = true;\n this.forceReconnect = false;\n this.reconnectAttempt = 0;\n this.isReconnecting = false;\n this.config._addOnOptionSettingChangedListener(OptionParameters.StreamerId, (streamerid) => {\n if (streamerid === undefined || streamerid === '') {\n return;\n }\n // close the current peer connection and create a new one\n this.peerConnectionController.peerConnection.close();\n this.peerConnectionController.createPeerConnection(this.peerConfig, this.preferredCodec);\n this.subscribedStream = streamerid;\n const message = MessageHelpers.createMessage(Messages.subscribe, { streamerId: streamerid });\n this.protocol.sendMessage(message);\n });\n this.config._addOnOptionSettingChangedListener(OptionParameters.PreferredQuality, (preferredQuality) => {\n if (preferredQuality === undefined || preferredQuality === '') {\n return;\n }\n let message;\n if (this.isUsingSVC) {\n // User is using SVC so selected quality will be of the form SxTy(h). Just extract the x and y numbers\n message = MessageHelpers.createMessage(Messages.layerPreference, {\n spatialLayer: +preferredQuality[1] - 1,\n temporalLayer: +preferredQuality[3] - 1\n });\n }\n else {\n // User is not using SVC so the selected quality will be either Low, Medium or High so we extract the appropriate spatial layer index\n const allQualities = this.config.getSettingOption(OptionParameters.PreferredQuality).options;\n const qualityIndex = allQualities.indexOf(preferredQuality);\n message = MessageHelpers.createMessage(Messages.layerPreference, {\n spatialLayer: qualityIndex,\n temporalLayer: 0\n });\n }\n this.protocol.sendMessage(message);\n });\n this.setVideoEncoderAvgQP(-1);\n this.signallingUrlBuilder = () => {\n const signallingServerUrl = this.config.getTextSettingValue(TextParameters.SignallingServerUrl);\n return signallingServerUrl;\n };\n }\n /**\n * Destroys the video player and makes sure resources are freed. This helps to prevent the issue in chrome\n * where it refuses to make new video players.\n */\n destroyVideoPlayer() {\n this.videoPlayer.destroy();\n }\n /**\n * Handles when a message is received\n * @param event - Message Event\n */\n handleOnMessage(event) {\n const message = new Uint8Array(event.data);\n Logger.Info('Message incoming:' + message);\n //try {\n const messageType = this.streamMessageController.fromStreamerMessages.get(message[0]);\n this.streamMessageController.fromStreamerHandlers.get(messageType)(event.data);\n //} catch (e) {\n //Logger.Error(Logger.GetStackTrace(), `Custom data channel message with message type that is unknown to the Pixel Streaming protocol. Does your PixelStreamingProtocol need updating? The message type was: ${message[0]}`);\n //}\n }\n /**\n * Register message all handlers\n */\n registerMessageHandlers() {\n // From Streamer\n // Message events from the streamer have a data type of ArrayBuffer as we force this type in the DatachannelController\n this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, 'QualityControlOwnership', (data) => this.onQualityControlOwnership(data));\n this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, 'Response', (data) => this.responseController.onResponse(data));\n this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, 'Command', (data) => {\n this.onCommand(data);\n });\n this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, 'FreezeFrame', (data) => this.onFreezeFrameMessage(data));\n this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, 'UnfreezeFrame', () => this.invalidateFreezeFrameAndEnableVideo());\n this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, 'VideoEncoderAvgQP', (data) => this.handleVideoEncoderAvgQP(data));\n this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, 'LatencyTest', (data) => this.handleLatencyTestResult(data));\n this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, 'DataChannelLatencyTest', (data) => this.handleDataChannelLatencyTestResponse(data));\n this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, 'InitialSettings', (data) => this.handleInitialSettings(data));\n this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, 'FileExtension', (data) => this.onFileExtension(data));\n this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, 'FileMimeType', (data) => this.onFileMimeType(data));\n this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, 'FileContents', (data) => this.onFileContents(data));\n this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, 'TestEcho', () => {\n /* Do nothing */\n });\n this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, 'InputControlOwnership', (data) => this.onInputControlOwnership(data));\n this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, 'GamepadResponse', (data) => this.onGamepadResponse(data));\n this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, 'Multiplexed', () => {\n /* Do nothing as this message type is used only by the SFU */\n });\n this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, 'Protocol', (data) => this.onProtocolMessage(data));\n // To Streamer\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'IFrameRequest', () => this.sendMessageController.sendMessageToStreamer('IFrameRequest'));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'RequestQualityControl', () => this.sendMessageController.sendMessageToStreamer('RequestQualityControl'));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'FpsRequest', () => this.sendMessageController.sendMessageToStreamer('FpsRequest'));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'AverageBitrateRequest', () => this.sendMessageController.sendMessageToStreamer('AverageBitrateRequest'));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'StartStreaming', () => this.sendMessageController.sendMessageToStreamer('StartStreaming'));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'StopStreaming', () => this.sendMessageController.sendMessageToStreamer('StopStreaming'));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'LatencyTest', (data) => this.sendMessageController.sendMessageToStreamer('LatencyTest', data));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'RequestInitialSettings', () => this.sendMessageController.sendMessageToStreamer('RequestInitialSettings'));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'TestEcho', () => {\n /* Do nothing */\n });\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'UIInteraction', (data) => this.sendMessageController.sendMessageToStreamer('UIInteraction', data));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'Command', (data) => this.sendMessageController.sendMessageToStreamer('Command', data));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'TextboxEntry', (data) => this.sendMessageController.sendMessageToStreamer('TextboxEntry', data));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'KeyDown', (data) => this.sendMessageController.sendMessageToStreamer('KeyDown', data));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'KeyUp', (data) => this.sendMessageController.sendMessageToStreamer('KeyUp', data));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'KeyPress', (data) => this.sendMessageController.sendMessageToStreamer('KeyPress', data));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'MouseEnter', (data) => this.sendMessageController.sendMessageToStreamer('MouseEnter', data));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'MouseLeave', (data) => this.sendMessageController.sendMessageToStreamer('MouseLeave', data));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'MouseDown', (data) => this.sendMessageController.sendMessageToStreamer('MouseDown', data));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'MouseUp', (data) => this.sendMessageController.sendMessageToStreamer('MouseUp', data));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'MouseMove', (data) => this.sendMessageController.sendMessageToStreamer('MouseMove', data));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'MouseWheel', (data) => this.sendMessageController.sendMessageToStreamer('MouseWheel', data));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'MouseDouble', (data) => this.sendMessageController.sendMessageToStreamer('MouseDouble', data));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'TouchStart', (data) => this.sendMessageController.sendMessageToStreamer('TouchStart', data));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'TouchEnd', (data) => this.sendMessageController.sendMessageToStreamer('TouchEnd', data));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'TouchMove', (data) => this.sendMessageController.sendMessageToStreamer('TouchMove', data));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'GamepadConnected', () => this.sendMessageController.sendMessageToStreamer('GamepadConnected'));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'GamepadButtonPressed', (data) => this.sendMessageController.sendMessageToStreamer('GamepadButtonPressed', data));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'GamepadButtonReleased', (data) => this.sendMessageController.sendMessageToStreamer('GamepadButtonReleased', data));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'GamepadAnalog', (data) => this.sendMessageController.sendMessageToStreamer('GamepadAnalog', data));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'GamepadDisconnected', (data) => this.sendMessageController.sendMessageToStreamer('GamepadDisconnected', data));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'XREyeViews', (data) => this.sendMessageController.sendMessageToStreamer('XREyeViews', data));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'XRHMDTransform', (data) => this.sendMessageController.sendMessageToStreamer('XRHMDTransform', data));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'XRControllerTransform', (data) => this.sendMessageController.sendMessageToStreamer('XRControllerTransform', data));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'XRSystem', (data) => this.sendMessageController.sendMessageToStreamer('XRSystem', data));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'XRButtonTouched', (data) => this.sendMessageController.sendMessageToStreamer('XRButtonTouched', data));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'XRButtonTouchReleased', (data) => this.sendMessageController.sendMessageToStreamer('XRButtonTouchReleased', data));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'XRButtonPressed', (data) => this.sendMessageController.sendMessageToStreamer('XRButtonPressed', data));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'XRButtonReleased', (data) => this.sendMessageController.sendMessageToStreamer('XRButtonReleased', data));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'XRAnalog', (data) => this.sendMessageController.sendMessageToStreamer('XRAnalog', data));\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'ChannelRelayStatus', () => {\n /* Do nothing as this message type is used only by the SFU */\n });\n this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'Multiplexed', () => {\n /* Do nothing as this message type is used only by the SFU */\n });\n }\n /**\n * Activate the logic associated with a command from UE\n * @param message\n */\n onCommand(message) {\n Logger.Info('DataChannelReceiveMessageType.Command');\n const commandAsString = new TextDecoder('utf-16').decode(message.slice(1));\n Logger.Info('Data Channel Command: ' + commandAsString);\n const command = JSON.parse(commandAsString);\n // Handle \"onScreenKeyboard\" event\n if (command.command === 'onScreenKeyboard') {\n this.handleOnScreenKeyboardCommand(command);\n }\n }\n handleOnScreenKeyboardCommand(command) {\n var _a, _b, _c, _d;\n const data = {\n showOnScreenKeyboard: (_a = command.showOnScreenKeyboard) !== null && _a !== void 0 ? _a : true,\n x: (_b = command.x) !== null && _b !== void 0 ? _b : 0,\n y: (_c = command.y) !== null && _c !== void 0 ? _c : 0,\n contents: (_d = command.contents) !== null && _d !== void 0 ? _d : ''\n };\n this.pixelStreaming.dispatchEvent(new ShowOnScreenKeyboardEvent(data));\n }\n /**\n * Handles a protocol message received from the streamer\n * @param message the message data from the streamer\n */\n onProtocolMessage(message) {\n try {\n const protocolString = new TextDecoder('utf-16').decode(message.slice(1));\n const protocolJSON = JSON.parse(protocolString);\n if (!Object.prototype.hasOwnProperty.call(protocolJSON, 'Direction')) {\n Logger.Error('Malformed protocol received. Ensure the protocol message contains a direction');\n }\n const direction = protocolJSON.Direction;\n delete protocolJSON.Direction;\n Logger.Info(`Received new ${direction == MessageDirection.FromStreamer ? 'FromStreamer' : 'ToStreamer'} protocol. Updating existing protocol...`);\n Object.keys(protocolJSON).forEach((messageType) => {\n const message = protocolJSON[messageType];\n switch (direction) {\n case MessageDirection.ToStreamer:\n // Check that the message contains all the relevant params\n if (!Object.prototype.hasOwnProperty.call(message, 'id')) {\n Logger.Error(`ToStreamer->${messageType} protocol definition was malformed as it didn't contain at least an id\\n\n Definition was: ${JSON.stringify(message, null, 2)}`);\n // return in a forEach is equivalent to a continue in a normal for loop\n return;\n }\n // UE5.1 and UE5.2 don't send a structure for these message types, but they actually do have a structure so ignore updating them\n if (messageType === 'UIInteraction' ||\n messageType === 'Command' ||\n messageType === 'LatencyTest') {\n return;\n }\n if (this.streamMessageController.toStreamerHandlers.get(messageType)) {\n // If we've registered a handler for this message type we can add it to our supported messages. ie registerMessageHandler(...)\n this.streamMessageController.toStreamerMessages.set(messageType, message);\n }\n else {\n Logger.Error(`There was no registered handler for \"${messageType}\" - try adding one using registerMessageHandler(MessageDirection.ToStreamer, \"${messageType}\", myHandler)`);\n }\n break;\n case MessageDirection.FromStreamer:\n // Check that the message contains all the relevant params\n if (!Object.prototype.hasOwnProperty.call(message, 'id')) {\n Logger.Error(`FromStreamer->${messageType} protocol definition was malformed as it didn't contain at least an id\\n\n Definition was: ${JSON.stringify(message, null, 2)}`);\n // return in a forEach is equivalent to a continue in a normal for loop\n return;\n }\n if (this.streamMessageController.fromStreamerHandlers.get(messageType)) {\n // If we've registered a handler for this message type. ie registerMessageHandler(...)\n this.streamMessageController.fromStreamerMessages.set(message.id, messageType);\n }\n else {\n Logger.Error(`There was no registered handler for \"${message}\" - try adding one using registerMessageHandler(MessageDirection.FromStreamer, \"${messageType}\", myHandler)`);\n }\n break;\n default:\n Logger.Error(`Unknown direction: ${direction}`);\n }\n });\n // Once the protocol has been received, we can send our control messages\n this.toStreamerMessagesController.SendRequestInitialSettings();\n this.toStreamerMessagesController.SendRequestQualityControl();\n }\n catch (e) {\n Logger.Info(e);\n }\n }\n /**\n * Handles an input control message when it is received from the streamer\n * @param message The input control message\n */\n onInputControlOwnership(message) {\n const view = new Uint8Array(message);\n Logger.Info('DataChannelReceiveMessageType.InputControlOwnership');\n const inputControlOwnership = new Boolean(view[1]).valueOf();\n Logger.Info(`Received input controller message - will your input control the stream: ${inputControlOwnership}`);\n this.pixelStreaming._onInputControlOwnership(inputControlOwnership);\n }\n /**\n *\n * @param message\n */\n onGamepadResponse(message) {\n const responseString = new TextDecoder('utf-16').decode(message.slice(1));\n const responseJSON = JSON.parse(responseString);\n this.gamePadController.onGamepadResponseReceived(responseJSON.controllerId);\n }\n onAfkTriggered() {\n this.afkController.onAfkClick();\n // if the stream is paused play it, if we can\n if (this.videoPlayer.isPaused() && this.videoPlayer.hasVideoSource()) {\n this.playStream();\n }\n }\n /**\n * Set whether we should timeout when afk.\n * @param afkEnabled If true we timeout when idle for some given amount of time.\n */\n setAfkEnabled(afkEnabled) {\n if (afkEnabled) {\n this.onAfkTriggered();\n }\n else {\n this.afkController.stopAfkWarningTimer();\n }\n }\n /**\n * Attempt a reconnection to the signalling server. Manual trigger\n */\n tryReconnect(message) {\n this.forceReconnect = true;\n this.doReconnect(message);\n }\n /**\n * Does the actual reconnect work. Used by the auto reconnect feature to skip the manual flag.\n */\n doReconnect(message) {\n // if there is no webSocketController return immediately or this will not work\n if (!this.protocol) {\n Logger.Info('This player has no protocol connection.');\n return;\n }\n this.isReconnecting = true;\n // if the connection is open, first close it and force a reconnect.\n if (this.protocol.isConnected()) {\n if (!this.forceReconnect) {\n this.disconnectMessage = `${message} Reconnecting.`;\n }\n this.closeSignalingServer(message, true);\n }\n else {\n this.pixelStreaming._onWebRtcAutoConnect();\n this.connectToSignallingServer();\n }\n }\n /**\n * Loads a freeze frame if it is required otherwise shows the play overlay\n */\n loadFreezeFrameOrShowPlayOverlay() {\n this.pixelStreaming.dispatchEvent(new LoadFreezeFrameEvent({\n shouldShowPlayOverlay: this.shouldShowPlayOverlay,\n isValid: this.freezeFrameController.valid,\n jpegData: this.freezeFrameController.jpeg\n }));\n if (this.shouldShowPlayOverlay === true) {\n Logger.Info('showing play overlay');\n this.resizePlayerStyle();\n }\n else {\n Logger.Info('showing freeze frame');\n this.freezeFrameController.showFreezeFrame();\n }\n setTimeout(() => {\n this.videoPlayer.setVideoEnabled(false);\n }, this.freezeFrameController.freezeFrameDelay);\n }\n /**\n * Process the freeze frame and load it\n * @param message The freeze frame data in bytes\n */\n onFreezeFrameMessage(message) {\n Logger.Info('DataChannelReceiveMessageType.FreezeFrame');\n const view = new Uint8Array(message);\n this.freezeFrameController.processFreezeFrameMessage(view, () => this.loadFreezeFrameOrShowPlayOverlay());\n }\n /**\n * Enable the video after hiding a freeze frame\n */\n invalidateFreezeFrameAndEnableVideo() {\n Logger.Info('DataChannelReceiveMessageType.FreezeFrame');\n setTimeout(() => {\n this.pixelStreaming.dispatchEvent(new HideFreezeFrameEvent());\n this.freezeFrameController.hideFreezeFrame();\n }, this.freezeFrameController.freezeFrameDelay);\n if (this.videoPlayer.getVideoElement()) {\n this.videoPlayer.setVideoEnabled(true);\n }\n }\n /**\n * Prep datachannel data for processing file extension\n * @param data the file extension data\n */\n onFileExtension(data) {\n const view = new Uint8Array(data);\n FileUtil.setExtensionFromBytes(view, this.file);\n }\n /**\n * Prep datachannel data for processing the file mime type\n * @param data the file mime type data\n */\n onFileMimeType(data) {\n const view = new Uint8Array(data);\n FileUtil.setMimeTypeFromBytes(view, this.file);\n }\n /**\n * Prep datachannel data for processing the file contents\n * @param data the file contents data\n */\n onFileContents(data) {\n const view = new Uint8Array(data);\n FileUtil.setContentsFromBytes(view, this.file);\n }\n /**\n * Plays the stream audio and video source and sets up other pieces while the stream starts\n */\n playStream() {\n if (!this.videoPlayer.getVideoElement()) {\n const message = 'Could not play video stream because the video player was not initialized correctly.';\n this.pixelStreaming.dispatchEvent(new PlayStreamErrorEvent({ message }));\n Logger.Error(message);\n // close the connection\n this.closeSignalingServer('Stream not initialized correctly', false);\n return;\n }\n if (!this.videoPlayer.hasVideoSource()) {\n Logger.Warning('Cannot play stream, the video element has no srcObject to play.');\n return;\n }\n this.setTouchInputEnabled(this.config.isFlagEnabled(Flags.TouchInput));\n this.pixelStreaming.dispatchEvent(new PlayStreamEvent());\n if (this.streamController.audioElement.srcObject) {\n const startMuted = this.config.isFlagEnabled(Flags.StartVideoMuted);\n this.streamController.audioElement.muted = startMuted;\n if (startMuted) {\n this.playVideo();\n }\n else {\n this.streamController.audioElement\n .play()\n .then(() => {\n this.playVideo();\n })\n .catch((onRejectedReason) => {\n Logger.Info(onRejectedReason);\n Logger.Info('Browser does not support autoplaying video without interaction - to resolve this we are going to show the play button overlay.');\n this.pixelStreaming.dispatchEvent(new PlayStreamRejectedEvent({\n reason: onRejectedReason\n }));\n });\n }\n }\n else {\n this.playVideo();\n }\n this.shouldShowPlayOverlay = false;\n this.freezeFrameController.showFreezeFrame();\n }\n /**\n * Plays the video stream\n */\n playVideo() {\n // handle play() with promise as it is an asynchronous call\n this.videoPlayer.play().catch((onRejectedReason) => {\n if (this.streamController.audioElement.srcObject) {\n this.streamController.audioElement.pause();\n }\n Logger.Info(onRejectedReason);\n Logger.Info('Browser does not support autoplaying video without interaction - to resolve this we are going to show the play button overlay.');\n this.pixelStreaming.dispatchEvent(new PlayStreamRejectedEvent({ reason: onRejectedReason }));\n });\n }\n /**\n * Enable the video to play automatically if enableAutoplay is true\n */\n autoPlayVideoOrSetUpPlayOverlay() {\n if (this.config.isFlagEnabled(Flags.AutoPlayVideo)) {\n // attempt to play the video\n this.playStream();\n }\n this.resizePlayerStyle();\n }\n /**\n * Connect to the Signaling server\n */\n connectToSignallingServer() {\n this.locallyClosed = false;\n this.enableAutoReconnect = true;\n this.disconnectMessage = null;\n const signallingUrl = this.signallingUrlBuilder();\n this.protocol.connect(signallingUrl);\n const keepaliveDelay = this.config.getNumericSettingValue(NumericParameters.KeepaliveDelay);\n if (keepaliveDelay > 0) {\n this.keepalive = new KeepaliveMonitor(this.protocol, keepaliveDelay);\n this.keepalive.onTimeout = () => {\n // if the ping fails just disconnect\n Logger.Error(`Protocol timeout`);\n this.protocol.disconnect();\n };\n }\n }\n /**\n * This will start the handshake to the signalling server\n * @param peerConfig - RTC Configuration Options from the Signaling server\n * @remark RTC Peer Connection on Ice Candidate event have it handled by handle Send Ice Candidate\n */\n startSession(peerConfig) {\n this.peerConfig = peerConfig;\n // check for forcing turn\n if (this.config.isFlagEnabled(Flags.ForceTURN)) {\n // check for a turn server\n const hasTurnServer = this.checkTurnServerAvailability(peerConfig);\n // close and error if turn is forced and there is no turn server\n if (!hasTurnServer) {\n Logger.Info('No turn server was found in the Peer Connection Options. TURN cannot be forced, closing connection. Please use STUN instead');\n this.closeSignalingServer('TURN cannot be forced, closing connection. Please use STUN instead.', false);\n return;\n }\n }\n // set up the peer connection controller\n this.peerConnectionController = new PeerConnectionController(this.peerConfig, this.config, this.preferredCodec);\n // set up peer connection controller video stats\n this.peerConnectionController.onVideoStats = (event) => {\n this.handleVideoStats(event);\n };\n /* Set event handler for latency information is calculated, handle the event by propogating to the PixelStreaming API */\n this.peerConnectionController.onLatencyCalculated = (latencyInfo) => {\n this.pixelStreaming._onLatencyCalculated(latencyInfo);\n };\n /* When the Peer Connection wants to send an offer have it handled */\n this.peerConnectionController.onSendWebRTCOffer = (offer) => {\n this.handleSendWebRTCOffer(offer);\n };\n /* Set event handler for when local answer description is set */\n this.peerConnectionController.onSetLocalDescription = (answer) => {\n this.handleSendWebRTCAnswer(answer);\n };\n /* Set event handler for when remote offer description is set */\n this.peerConnectionController.onSetRemoteDescription = (offer) => {\n this.pixelStreaming._onWebRtcSdpOffer(offer);\n };\n /* When the Peer Connection ice candidate is added have it handled */\n this.peerConnectionController.onPeerIceCandidate = (peerConnectionIceEvent) => this.handleSendIceCandidate(peerConnectionIceEvent);\n /* When the Peer Connection has a data channel created for it by the browser, handle it */\n this.peerConnectionController.onDataChannel = (datachannelEvent) => this.handleDataChannel(datachannelEvent);\n // set up webRtc text overlays\n this.peerConnectionController.showTextOverlayConnecting = () => this.pixelStreaming._onWebRtcConnecting();\n this.peerConnectionController.showTextOverlaySetupFailure = () => this.pixelStreaming._onWebRtcFailed();\n let webRtcConnectedSent = false;\n this.peerConnectionController.onIceConnectionStateChange = () => {\n // Browsers emit \"connected\" when getting first connection and \"completed\" when finishing\n // candidate checking. However, sometimes browsers can skip \"connected\" and only emit \"completed\".\n // Therefore need to check both cases and emit onWebRtcConnected only once on the first hit.\n if (!webRtcConnectedSent &&\n ['connected', 'completed'].includes(this.peerConnectionController.peerConnection.iceConnectionState)) {\n this.pixelStreaming._onWebRtcConnected();\n webRtcConnectedSent = true;\n }\n };\n /* RTC Peer Connection on Track event -> handle on track */\n this.peerConnectionController.onTrack = (trackEvent) => this.streamController.handleOnTrack(trackEvent);\n }\n /**\n * Checks the peer connection options for a turn server and returns true or false\n */\n checkTurnServerAvailability(options) {\n // if iceServers is empty return false this should not be the general use case but is here incase\n if (!options.iceServers) {\n Logger.Info('A turn sever was not found');\n return false;\n }\n // loop through the ice servers to check for a turn url\n for (const iceServer of options.iceServers) {\n for (const url of iceServer.urls) {\n if (url.includes('turn')) {\n Logger.Info(`A turn sever was found at ${url}`);\n return true;\n }\n }\n }\n Logger.Info('A turn sever was not found');\n return false;\n }\n /**\n * Handles when a Config Message is received contains the Peer Connection Options required (STUN and TURN Server Info)\n * @param messageConfig - Config Message received from the signaling server\n */\n handleOnConfigMessage(messageConfig) {\n this.resizePlayerStyle();\n // Tell the WebRtcController to start a session with the peer options sent from the signaling server\n this.startSession(messageConfig.peerConnectionOptions);\n }\n handlePingMessage(pingMessage) {\n this.protocol.sendMessage(MessageHelpers.createMessage(Messages.pong, { time: pingMessage.time }));\n }\n /**\n * Handles when the signalling server gives us the list of streamer ids.\n */\n handleStreamerListMessage(messageStreamerList) {\n Logger.Info(`Got streamer list ${messageStreamerList.ids}`);\n let wantedStreamerId = '';\n // get the current selected streamer id option\n const streamerIDOption = this.config.getSettingOption(OptionParameters.StreamerId);\n const existingSelection = streamerIDOption.selected.toString().trim();\n if (existingSelection) {\n // default to selected option if it exists\n wantedStreamerId = streamerIDOption.selected;\n }\n // add the streamers to the UI\n const settingOptions = [...messageStreamerList.ids]; // copy the original messageStreamerList.ids\n settingOptions.unshift(''); // add an empty option at the top\n this.config.setOptionSettingOptions(OptionParameters.StreamerId, settingOptions);\n let autoSelectedStreamerId = '';\n const waitForStreamer = this.config.isFlagEnabled(Flags.WaitForStreamer);\n const reconnectLimit = this.config.getNumericSettingValue(NumericParameters.MaxReconnectAttempts);\n const reconnectDelay = this.config.getNumericSettingValue(NumericParameters.StreamerAutoJoinInterval);\n // first we figure out a wanted streamer id through various means\n const useUrlParams = this.config.useUrlParams;\n const urlParams = new IURLSearchParams(window.location.search);\n if (useUrlParams && urlParams.has(OptionParameters.StreamerId)) {\n // if we've set the streamer id on the url we only want that streamer id\n wantedStreamerId = urlParams.get(OptionParameters.StreamerId);\n }\n else if (this.subscribedStream) {\n // we were previously subscribed to a streamer, we want that\n wantedStreamerId = this.subscribedStream;\n }\n // now lets see if we can pick it.\n if (wantedStreamerId && messageStreamerList.ids.includes(wantedStreamerId)) {\n // if the wanted stream is in the list. we pick that\n autoSelectedStreamerId = wantedStreamerId;\n }\n else if ((!wantedStreamerId || !waitForStreamer) && messageStreamerList.ids.length == 1) {\n // otherwise, if we're not waiting for the wanted streamer and there's only one streamer, connect to it\n autoSelectedStreamerId = messageStreamerList.ids[0];\n }\n // if we found a streamer id to auto select, select it\n if (autoSelectedStreamerId) {\n this.reconnectAttempt = 0;\n this.isReconnecting = false;\n this.config.setOptionSettingValue(OptionParameters.StreamerId, autoSelectedStreamerId);\n }\n else {\n // no auto selected streamer.\n // if we're waiting for a streamer then try reconnecting\n if (waitForStreamer) {\n if (this.reconnectAttempt < reconnectLimit) {\n // still reconnects available\n this.reconnectAttempt++;\n this.isReconnecting = true;\n setTimeout(() => {\n this.protocol.sendMessage(MessageHelpers.createMessage(Messages.listStreamers));\n }, reconnectDelay);\n }\n else {\n // We've exhausted our reconnect attempts, return to main screen\n this.reconnectAttempt = 0;\n this.isReconnecting = false;\n this.enableAutoReconnect = false;\n }\n }\n }\n // dispatch this event finally\n this.pixelStreaming.dispatchEvent(new StreamerListMessageEvent({\n messageStreamerList,\n autoSelectedStreamerId,\n wantedStreamerId\n }));\n }\n handleSubscribeFailedMessage(subscribeFailedMessage) {\n this.reconnectAttempt = 0;\n this.isReconnecting = false;\n this.enableAutoReconnect = false;\n this.pixelStreaming._onSubscribeFailed(subscribeFailedMessage.message);\n }\n handleStreamerIDChangedMessage(streamerIDChangedMessage) {\n const newID = streamerIDChangedMessage.newID;\n // need to edit the selected streamer in the settings list\n const streamerListOptions = this.config.getSettingOption(OptionParameters.StreamerId);\n // temporarily prevent onChange from firing (it would try to subscribe to the streamer again)\n const oldOnChange = streamerListOptions.onChange;\n streamerListOptions.onChange = () => { };\n // change the selected entry.\n const streamerList = streamerListOptions.options;\n for (let i = 0; i < streamerList.length; ++i) {\n if (streamerList[i] == this.subscribedStream) {\n streamerList[i] = newID;\n break;\n }\n }\n // update the list\n streamerListOptions.options = streamerList;\n // update the selected entry\n streamerListOptions.selected = newID;\n // restore the old change notifier.\n streamerListOptions.onChange = oldOnChange;\n // remember which stream we're subscribe to\n this.subscribedStream = streamerIDChangedMessage.newID;\n // notify any listeners\n this.pixelStreaming.dispatchEvent(new StreamerIDChangedMessageEvent({\n newID\n }));\n }\n /**\n * Handle the RTC Answer from the signaling server\n * @param Answer - Answer SDP from the peer.\n */\n handleWebRtcAnswer(Answer) {\n Logger.Info(`Got answer sdp ${Answer.sdp}`);\n const sdpAnswer = {\n sdp: Answer.sdp,\n type: 'answer'\n };\n this.peerConnectionController.receiveAnswer(sdpAnswer);\n this.handlePostWebrtcNegotiation();\n }\n /**\n * Handle the RTC offer from a WebRTC peer (received through the signalling server).\n * @param Offer - Offer SDP from the peer.\n */\n handleWebRtcOffer(Offer) {\n Logger.Info(`Got offer sdp ${Offer.sdp}`);\n this.isUsingSFU = Offer.sfu ? Offer.sfu : false;\n this.isUsingSVC = Offer.scalabilityMode ? Offer.scalabilityMode != 'L1T1' : false;\n if (this.isUsingSFU || this.isUsingSVC) {\n // Disable negotiating with the sfu as the sfu only supports one codec at a time\n this.peerConnectionController.preferredCodec = '';\n }\n // NOTE: These two settings configurations are done outside of an if(this.isUsingSFU) so that users\n // can switch between a default and SFU stream and have the settings reconfigure appropriately\n const scalabilityMode = Offer.scalabilityMode ? Offer.scalabilityMode : 'L1T1';\n let availableQualities = ['Default'];\n if (this.isUsingSFU) {\n if (!this.isUsingSVC) {\n // User is using an SFU without any temporal scalability. Just offer easily readable names\n availableQualities = ['Low', 'Medium', 'High'];\n }\n else {\n // User is using SVC. Generate all available options.\n availableQualities = [];\n const maxSpatialLayers = +scalabilityMode[1];\n const maxTemporalLayers = +scalabilityMode[3];\n for (let s = 1; s <= maxSpatialLayers; s++) {\n for (let t = 1; t <= maxTemporalLayers; t++) {\n availableQualities.push(`S${s}T${t}`);\n }\n }\n }\n }\n // Update the possible video quality options\n this.config.setOptionSettingOptions(OptionParameters.PreferredQuality, availableQualities);\n // Update the selected video quality with the highest possible resolution\n this.config.setOptionSettingValue(OptionParameters.PreferredQuality, availableQualities.slice(-1)[0]);\n const sdpOffer = {\n sdp: Offer.sdp,\n type: 'offer'\n };\n this.peerConnectionController.receiveOffer(sdpOffer, this.config);\n this.handlePostWebrtcNegotiation();\n }\n /**\n * Handle when the SFU provides the peer with its data channels\n * @param DataChannels - The message from the SFU containing the data channels ids\n */\n handleWebRtcSFUPeerDatachannels(DataChannels) {\n const SendOptions = {\n ordered: true,\n negotiated: true,\n id: DataChannels.sendStreamId\n };\n const unidirectional = DataChannels.sendStreamId != DataChannels.recvStreamId;\n this.sendrecvDataChannelController.createDataChannel(this.peerConnectionController.peerConnection, unidirectional ? 'send-datachannel' : 'datachannel', SendOptions);\n if (unidirectional) {\n const RecvOptions = {\n ordered: true,\n negotiated: true,\n id: DataChannels.recvStreamId\n };\n this.recvDataChannelController.createDataChannel(this.peerConnectionController.peerConnection, 'recv-datachannel', RecvOptions);\n this.recvDataChannelController.handleOnOpen = () => this.protocol.sendMessage(MessageHelpers.createMessage(Messages.peerDataChannelsReady));\n // If we're uni-directional, only the recv data channel should handle incoming messages\n this.recvDataChannelController.handleOnMessage = (ev) => this.handleOnMessage(ev);\n }\n else {\n // else our primary datachannel is send/recv so it can handle incoming messages\n this.sendrecvDataChannelController.handleOnMessage = (ev) => this.handleOnMessage(ev);\n }\n }\n handlePostWebrtcNegotiation() {\n // start the afk warning timer as PS is now running\n this.afkController.startAfkWarningTimer();\n // show the overlay that we have negotiated a connection\n this.pixelStreaming._onWebRtcSdp();\n if (this.statsTimerHandle && this.statsTimerHandle !== undefined) {\n window.clearInterval(this.statsTimerHandle);\n }\n this.statsTimerHandle = window.setInterval(() => this.getStats(), 1000);\n /* */\n this.setMouseInputEnabled(this.config.isFlagEnabled(Flags.MouseInput));\n this.setKeyboardInputEnabled(this.config.isFlagEnabled(Flags.KeyboardInput));\n this.setGamePadInputEnabled(this.config.isFlagEnabled(Flags.GamepadInput));\n }\n /**\n * When an ice Candidate is received from the Signaling server add it to the Peer Connection Client\n * @param iceCandidate - Ice Candidate from Server\n */\n handleIceCandidate(iceCandidate) {\n Logger.Info('Web RTC Controller: onWebRtcIce');\n const candidate = new RTCIceCandidate(iceCandidate);\n this.peerConnectionController.handleOnIce(candidate);\n }\n /**\n * Send the ice Candidate to the signaling server via websocket\n * @param iceEvent - RTC Peer ConnectionIceEvent) {\n */\n handleSendIceCandidate(iceEvent) {\n Logger.Info('OnIceCandidate');\n if (iceEvent.candidate && iceEvent.candidate.candidate) {\n this.protocol.sendMessage(MessageHelpers.createMessage(Messages.iceCandidate, { candidate: iceEvent.candidate }));\n }\n }\n /**\n * Send the ice Candidate to the signaling server via websocket\n * @param iceEvent - RTC Peer ConnectionIceEvent) {\n */\n handleDataChannel(datachannelEvent) {\n Logger.Info('Data channel created for us by browser as we are a receiving peer.');\n this.sendrecvDataChannelController.dataChannel = datachannelEvent.channel;\n // Data channel was created for us, so we just need to setup its callbacks and array type\n this.sendrecvDataChannelController.setupDataChannel();\n this.sendrecvDataChannelController.handleOnMessage = (ev) => this.handleOnMessage(ev);\n }\n /**\n * Send the RTC Offer Session to the Signaling server via websocket\n * @param offer - RTC Session Description\n */\n handleSendWebRTCOffer(offer) {\n Logger.Info('Sending the offer to the Server');\n const extraParams = {\n sdp: offer.sdp,\n minBitrateBps: 1000 * this.config.getNumericSettingValue(NumericParameters.WebRTCMinBitrate),\n maxBitrateBps: 1000 * this.config.getNumericSettingValue(NumericParameters.WebRTCMaxBitrate)\n };\n this.protocol.sendMessage(MessageHelpers.createMessage(Messages.offer, extraParams));\n }\n /**\n * Send the RTC Offer Session to the Signaling server via websocket\n * @param answer - RTC Session Description\n */\n handleSendWebRTCAnswer(answer) {\n Logger.Info('Sending the answer to the Server');\n const extraParams = {\n sdp: answer.sdp,\n minBitrateBps: 1000 * this.config.getNumericSettingValue(NumericParameters.WebRTCMinBitrate),\n maxBitrateBps: 1000 * this.config.getNumericSettingValue(NumericParameters.WebRTCMaxBitrate)\n };\n this.protocol.sendMessage(MessageHelpers.createMessage(Messages.answer, extraParams));\n if (this.isUsingSFU) {\n this.protocol.sendMessage(MessageHelpers.createMessage(Messages.dataChannelRequest));\n }\n // Send answer back to Pixel Streaming main class for event dispatch\n this.pixelStreaming._onWebRtcSdpAnswer(answer);\n }\n /**\n * Set the freeze frame overlay to the player div\n */\n setUpMouseAndFreezeFrame() {\n // Calculating and normalizing positions depends on the width and height of the player.\n const playerElement = this.videoPlayer.getVideoParentElement();\n const videoElement = this.videoPlayer.getVideoElement();\n this.coordinateConverter.reconfigure({ width: playerElement.clientWidth, height: playerElement.clientHeight }, { width: videoElement.videoWidth, height: videoElement.videoHeight });\n this.freezeFrameController.freezeFrame.resize();\n }\n /**\n * Close the Connection to the signaling server\n */\n closeSignalingServer(message, allowReconnect) {\n var _a;\n this.locallyClosed = true;\n this.enableAutoReconnect = allowReconnect;\n this.disconnectMessage = message;\n (_a = this.protocol) === null || _a === void 0 ? void 0 : _a.disconnect(1000, message);\n }\n /**\n * Close the peer connection\n */\n closePeerConnection() {\n var _a;\n (_a = this.peerConnectionController) === null || _a === void 0 ? void 0 : _a.close();\n }\n /**\n * Close all connections\n */\n close() {\n this.closeSignalingServer('', false);\n this.closePeerConnection();\n }\n /**\n * Fires a Video Stats Event in the RTC Peer Connection\n */\n getStats() {\n this.peerConnectionController.generateStats();\n }\n /**\n * Send a Latency Test Request to the UE Instance\n */\n sendLatencyTest() {\n this.latencyStartTime = Date.now();\n this.streamMessageController.toStreamerHandlers.get('LatencyTest')([\n JSON.stringify({\n StartTime: this.latencyStartTime\n })\n ]);\n }\n /**\n * Send a Data Channel Latency Test Request to the UE Instance\n */\n sendDataChannelLatencyTest(descriptor) {\n this.streamMessageController.toStreamerHandlers.get('DataChannelLatencyTest')([\n JSON.stringify(descriptor)\n ]);\n }\n /**\n * Send the MinQP encoder setting to the UE Instance.\n * @param minQP - The lower bound for QP when encoding\n * valid values are (1-51) where:\n * 1 = Best quality but highest bitrate.\n * 51 = Worst quality but lowest bitrate.\n * By default the minQP is 1 meaning the encoder is free\n * to aim for the best quality it can on the given network link.\n */\n sendEncoderMinQP(minQP) {\n Logger.Info(`MinQP=${minQP}\\n`);\n if (minQP != null) {\n this.streamMessageController.toStreamerHandlers.get('Command')([\n JSON.stringify({\n 'Encoder.MinQP': minQP\n })\n ]);\n }\n }\n /**\n * Send the MaxQP encoder setting to the UE Instance.\n * @param maxQP - The upper bound for QP when encoding\n * valid values are (1-51) where:\n * 1 = Best quality but highest bitrate.\n * 51 = Worst quality but lowest bitrate.\n * By default the maxQP is 51 meaning the encoder is free\n * to drop quality as low as needed on the given network link.\n */\n sendEncoderMaxQP(maxQP) {\n Logger.Info(`MaxQP=${maxQP}\\n`);\n if (maxQP != null) {\n this.streamMessageController.toStreamerHandlers.get('Command')([\n JSON.stringify({\n 'Encoder.MaxQP': maxQP\n })\n ]);\n }\n }\n /**\n * Send the MinQuality encoder setting to the UE Instance.\n * @param minQuality - The lower bound for quality when encoding\n * valid values are (0-100) where:\n * 0 = Worst quality.\n * 100 = Best quality.\n */\n sendEncoderMinQuality(minQuality) {\n Logger.Info(`MinQuality=${minQuality}\\n`);\n if (minQuality != null) {\n this.streamMessageController.toStreamerHandlers.get('Command')([\n JSON.stringify({\n 'Encoder.MinQuality': minQuality\n })\n ]);\n }\n }\n /**\n * Send the MaxQuality encoder setting to the UE Instance.\n * @param maxQuality - The upper bound for quality when encoding\n * valid values are (0-100) where:\n * 0 = Worst quality.\n * 100 = Best quality.\n */\n sendEncoderMaxQuality(maxQuality) {\n Logger.Info(`MaxQuality=${maxQuality}\\n`);\n if (maxQuality != null) {\n this.streamMessageController.toStreamerHandlers.get('Command')([\n JSON.stringify({\n 'Encoder.MaxQuality': maxQuality\n })\n ]);\n }\n }\n /**\n * Send the { WebRTC.MinBitrate: SomeNumber }} command to UE to set\n * the minimum bitrate that we allow WebRTC to use\n * (note setting this too high in poor networks can be problematic).\n * @param minBitrate - The minimum bitrate we would like WebRTC to not fall below.\n */\n sendWebRTCMinBitrate(minBitrate) {\n Logger.Info(`WebRTC Min Bitrate=${minBitrate}`);\n if (minBitrate != null) {\n this.streamMessageController.toStreamerHandlers.get('Command')([\n JSON.stringify({\n 'WebRTC.MinBitrate': minBitrate\n })\n ]);\n }\n }\n /**\n * Send the { WebRTC.MaxBitrate: SomeNumber }} command to UE to set\n * the minimum bitrate that we allow WebRTC to use\n * (note setting this too low could result in blocky video).\n * @param minBitrate - The minimum bitrate we would like WebRTC to not fall below.\n */\n sendWebRTCMaxBitrate(maxBitrate) {\n Logger.Info(`WebRTC Max Bitrate=${maxBitrate}`);\n if (maxBitrate != null) {\n this.streamMessageController.toStreamerHandlers.get('Command')([\n JSON.stringify({\n 'WebRTC.MaxBitrate': maxBitrate\n })\n ]);\n }\n }\n /**\n * Send the { WebRTC.Fps: SomeNumber }} UE 5.0+\n * and { WebRTC.MaxFps } UE 4.27 command to set\n * the maximum fps we would like WebRTC to stream at.\n * @param fps - The maximum stream fps.\n */\n sendWebRTCFps(fps) {\n Logger.Info(`WebRTC FPS=${fps}`);\n if (fps != null) {\n this.streamMessageController.toStreamerHandlers.get('Command')([\n JSON.stringify({ 'WebRTC.Fps': fps })\n ]);\n /* TODO: Remove when UE 4.27 unsupported. */\n this.streamMessageController.toStreamerHandlers.get('Command')([\n JSON.stringify({ 'WebRTC.MaxFps': fps })\n ]);\n }\n }\n /**\n * Sends the UI Descriptor `stat fps` to the UE Instance\n */\n sendShowFps() {\n Logger.Info('---- Sending show stat to UE ----');\n this.streamMessageController.toStreamerHandlers.get('Command')([JSON.stringify({ 'stat.fps': '' })]);\n }\n /**\n * Send an Iframe request to the streamer\n */\n sendIframeRequest() {\n Logger.Info('---- Sending Request for an IFrame ----');\n this.streamMessageController.toStreamerHandlers.get('IFrameRequest')();\n }\n /**\n * Send a UIInteraction message\n */\n emitUIInteraction(descriptor) {\n Logger.Info('---- Sending custom UIInteraction message ----');\n this.streamMessageController.toStreamerHandlers.get('UIInteraction')([JSON.stringify(descriptor)]);\n }\n /**\n * Send a Command message\n */\n emitCommand(descriptor) {\n Logger.Info('---- Sending custom Command message ----');\n this.streamMessageController.toStreamerHandlers.get('Command')([JSON.stringify(descriptor)]);\n }\n /**\n * Send a console command message\n */\n emitConsoleCommand(command) {\n Logger.Info('---- Sending custom Command:ConsoleCommand message ----');\n this.streamMessageController.toStreamerHandlers.get('Command')([\n JSON.stringify({\n ConsoleCommand: command\n })\n ]);\n }\n /**\n * Sends a request to the UE Instance to have ownership of Quality\n */\n sendRequestQualityControlOwnership() {\n Logger.Info('---- Sending Request to Control Quality ----');\n this.toStreamerMessagesController.SendRequestQualityControl();\n }\n /**\n * Send a `TextBoxEntry` message back to UE.\n * @param contents The new contents of the UE side text box.\n */\n sendTextboxEntry(contents) {\n var _a;\n Logger.Info('---- Sending TextboxEntry message ----');\n (_a = this.streamMessageController.toStreamerHandlers.get('TextboxEntry')) === null || _a === void 0 ? void 0 : _a([contents]);\n }\n /**\n * Handles when a Latency Test Result are received from the UE Instance\n * @param message - Latency Test Timings\n */\n handleLatencyTestResult(message) {\n Logger.Info('DataChannelReceiveMessageType.latencyTest');\n const latencyAsString = new TextDecoder('utf-16').decode(message.slice(1));\n const latencyTestResults = new LatencyTestResults();\n Object.assign(latencyTestResults, JSON.parse(latencyAsString));\n latencyTestResults.processFields();\n latencyTestResults.testStartTimeMs = this.latencyStartTime;\n latencyTestResults.browserReceiptTimeMs = Date.now();\n latencyTestResults.latencyExcludingDecode = ~~(latencyTestResults.browserReceiptTimeMs - latencyTestResults.testStartTimeMs);\n latencyTestResults.testDuration = ~~(latencyTestResults.TransmissionTimeMs - latencyTestResults.ReceiptTimeMs);\n latencyTestResults.networkLatency = ~~(latencyTestResults.latencyExcludingDecode - latencyTestResults.testDuration);\n if (latencyTestResults.frameDisplayDeltaTimeMs && latencyTestResults.browserReceiptTimeMs) {\n latencyTestResults.endToEndLatency = ~~(latencyTestResults.frameDisplayDeltaTimeMs +\n latencyTestResults.networkLatency,\n +latencyTestResults.CaptureToSendMs);\n }\n this.pixelStreaming._onLatencyTestResult(latencyTestResults);\n }\n /**\n * Handles when a Data Channel Latency Test Response is received from the UE Instance\n * @param message - Data Channel Latency Test Response\n */\n handleDataChannelLatencyTestResponse(message) {\n Logger.Info('DataChannelReceiveMessageType.dataChannelLatencyResponse');\n const responseAsString = new TextDecoder('utf-16').decode(message.slice(1));\n const latencyTestResponse = JSON.parse(responseAsString);\n this.pixelStreaming._onDataChannelLatencyTestResponse(latencyTestResponse);\n }\n /**\n * Handles when the Encoder and Web RTC Settings are received from the UE Instance\n * @param message - Initial Encoder and Web RTC Settings\n */\n handleInitialSettings(message) {\n Logger.Info('DataChannelReceiveMessageType.InitialSettings');\n const payloadAsString = new TextDecoder('utf-16').decode(message.slice(1));\n const parsedInitialSettings = JSON.parse(payloadAsString);\n const initialSettings = new InitialSettings();\n if (parsedInitialSettings.Encoder) {\n initialSettings.EncoderSettings = parsedInitialSettings.Encoder;\n }\n if (parsedInitialSettings.WebRTC) {\n initialSettings.WebRTCSettings = parsedInitialSettings.WebRTC;\n }\n if (parsedInitialSettings.PixelStreaming) {\n initialSettings.PixelStreamingSettings = parsedInitialSettings.PixelStreaming;\n }\n if (parsedInitialSettings.ConfigOptions &&\n parsedInitialSettings.ConfigOptions.DefaultToHover !== undefined) {\n this.config.setFlagEnabled(Flags.HoveringMouseMode, !!parsedInitialSettings.ConfigOptions.DefaultToHover);\n }\n initialSettings.ueCompatible();\n Logger.Info(payloadAsString);\n this.pixelStreaming._onInitialSettings(initialSettings);\n }\n /**\n * Handles when the Quantization Parameter are received from the UE Instance\n * @param message - Encoders Quantization Parameter\n */\n handleVideoEncoderAvgQP(message) {\n Logger.Info('DataChannelReceiveMessageType.VideoEncoderAvgQP');\n const AvgQP = Number(new TextDecoder('utf-16').decode(message.slice(1)));\n this.setVideoEncoderAvgQP(AvgQP);\n }\n /**\n * Handles when the video element has been loaded with a srcObject\n */\n handleVideoInitialized() {\n this.pixelStreaming._onVideoInitialized();\n // either autoplay the video or set up the play overlay\n this.autoPlayVideoOrSetUpPlayOverlay();\n this.resizePlayerStyle();\n this.videoPlayer.updateVideoStreamSize();\n }\n /**\n * Flag set if the user has Quality Ownership\n * @param message - Does the current client have Quality Ownership\n */\n onQualityControlOwnership(message) {\n const view = new Uint8Array(message);\n Logger.Info('DataChannelReceiveMessageType.QualityControlOwnership');\n this.isQualityController = new Boolean(view[1]).valueOf();\n Logger.Info(`Received quality controller message, will control quality: ${this.isQualityController}`);\n this.pixelStreaming._onQualityControlOwnership(this.isQualityController);\n }\n /**\n * Handles when the Aggregated stats are Collected\n * @param stats - Aggregated Stats\n */\n handleVideoStats(stats) {\n this.pixelStreaming._onVideoStats(stats);\n }\n /**\n * To Resize the Video Player element\n */\n resizePlayerStyle() {\n this.videoPlayer.resizePlayerStyle();\n }\n setPreferredCodec(codec) {\n this.preferredCodec = codec;\n if (this.peerConnectionController) {\n this.peerConnectionController.preferredCodec = codec;\n this.peerConnectionController.updateCodecSelection = false;\n }\n }\n setVideoEncoderAvgQP(avgQP) {\n this.videoAvgQp = avgQP;\n this.pixelStreaming._onVideoEncoderAvgQP(this.videoAvgQp);\n }\n /**\n * enables/disables keyboard event listeners\n */\n setKeyboardInputEnabled(isEnabled) {\n var _a;\n (_a = this.keyboardController) === null || _a === void 0 ? void 0 : _a.unregister();\n if (isEnabled) {\n this.keyboardController = this.inputClassesFactory.registerKeyBoard(this.config);\n }\n }\n /**\n * enables/disables mouse event listeners\n */\n setMouseInputEnabled(isEnabled) {\n var _a;\n (_a = this.mouseController) === null || _a === void 0 ? void 0 : _a.unregister();\n if (isEnabled) {\n const mouseMode = this.config.isFlagEnabled(Flags.HoveringMouseMode)\n ? ControlSchemeType.HoveringMouse\n : ControlSchemeType.LockedMouse;\n this.mouseController = this.inputClassesFactory.registerMouse(mouseMode);\n }\n }\n /**\n * enables/disables touch event listeners\n */\n setTouchInputEnabled(isEnabled) {\n var _a;\n (_a = this.touchController) === null || _a === void 0 ? void 0 : _a.unregister();\n if (isEnabled) {\n this.touchController = this.inputClassesFactory.registerTouch(this.config.isFlagEnabled(Flags.FakeMouseWithTouches));\n }\n }\n /**\n * enables/disables game pad event listeners\n */\n setGamePadInputEnabled(isEnabled) {\n var _a;\n (_a = this.gamePadController) === null || _a === void 0 ? void 0 : _a.unregister();\n if (isEnabled) {\n this.gamePadController = this.inputClassesFactory.registerGamePad();\n }\n }\n registerDataChannelEventEmitters(dataChannel) {\n dataChannel.onOpen = (label, event) => this.pixelStreaming.dispatchEvent(new DataChannelOpenEvent({ label, event }));\n dataChannel.onClose = (label, event) => this.pixelStreaming.dispatchEvent(new DataChannelCloseEvent({ label, event }));\n dataChannel.onError = (label, event) => this.pixelStreaming.dispatchEvent(new DataChannelErrorEvent({ label, event }));\n }\n registerMessageHandler(name, direction, handler) {\n if (direction === MessageDirection.FromStreamer && typeof handler === 'undefined') {\n Logger.Warning(`Unable to register handler for ${name} as no handler was passed`);\n }\n this.streamMessageController.registerMessageHandler(direction, name, (data) => typeof handler === 'undefined' && direction === MessageDirection.ToStreamer\n ? this.sendMessageController.sendMessageToStreamer(name, data)\n : handler(data));\n }\n}\n//# sourceMappingURL=WebRtcPlayerController.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport { deepCopyGamepad } from './GamepadTypes';\n/**\n * The class that handles the functionality of XR gamepads and controllers.\n */\nexport class XRGamepadController {\n /**\n * @param toStreamerMessagesProvider - Stream message instance\n */\n constructor(toStreamerMessagesProvider) {\n this.toStreamerMessagesProvider = toStreamerMessagesProvider;\n this.controllers = [];\n }\n updateStatus(source, frame, refSpace) {\n if (source.gamepad) {\n const gamepadPose = frame.getPose(source.gripSpace, refSpace);\n if (!gamepadPose) {\n return;\n }\n let system = 0;\n if (source.profiles.includes('htc-vive')) {\n system = 1;\n }\n else if (source.profiles.includes('oculus-touch')) {\n system = 2;\n }\n // TODO (william.belcher): Add other profiles (Quest, Microsoft Mixed Reality, etc)\n this.toStreamerMessagesProvider.toStreamerHandlers.get('XRSystem')([system]);\n // Default: AnyHand (2)\n let handedness = 2;\n switch (source.handedness) {\n case 'left':\n handedness = 0;\n break;\n case 'right':\n handedness = 1;\n break;\n }\n // Send controller transform\n const matrix = gamepadPose.transform.matrix;\n const mat = [];\n for (let i = 0; i < 16; i++) {\n mat[i] = new Float32Array([matrix[i]])[0];\n }\n // prettier-ignore\n this.toStreamerMessagesProvider.toStreamerHandlers.get('XRControllerTransform')([\n mat[0], mat[4], mat[8], mat[12],\n mat[1], mat[5], mat[9], mat[13],\n mat[2], mat[6], mat[10], mat[14],\n mat[3], mat[7], mat[11], mat[15],\n handedness\n ]);\n // Handle controller buttons and axes\n if (this.controllers[handedness] === undefined) {\n this.controllers[handedness] = {\n prevState: undefined,\n currentState: undefined,\n id: undefined\n };\n this.controllers[handedness].prevState = deepCopyGamepad(source.gamepad);\n }\n this.controllers[handedness].currentState = deepCopyGamepad(source.gamepad);\n const controller = this.controllers[handedness];\n const currState = controller.currentState;\n const prevState = controller.prevState;\n // Iterate over buttons\n for (let i = 0; i < currState.buttons.length; i++) {\n const currButton = currState.buttons[i];\n const prevButton = prevState.buttons[i];\n if (currButton.pressed) {\n // press\n const isRepeat = prevButton.pressed ? 1 : 0;\n this.toStreamerMessagesProvider.toStreamerHandlers.get('XRButtonPressed')([\n handedness,\n i,\n isRepeat,\n currButton.value\n ]);\n }\n else if (prevButton.pressed) {\n this.toStreamerMessagesProvider.toStreamerHandlers.get('XRButtonReleased')([\n handedness,\n i,\n 0\n ]);\n }\n if (currButton.touched) {\n // touched\n const isRepeat = prevButton.touched ? 1 : 0;\n this.toStreamerMessagesProvider.toStreamerHandlers.get('XRButtonTouched')([\n handedness,\n i,\n isRepeat\n ]);\n }\n else if (prevButton.touched) {\n this.toStreamerMessagesProvider.toStreamerHandlers.get('XRButtonTouchReleased')([\n handedness,\n i,\n 0\n ]);\n }\n }\n // Iterate over gamepad axes\n for (let i = 0; i < currState.axes.length; i++) {\n const curAxisValue = currState.axes[i];\n const prevAxisValue = prevState.axes[i];\n // Only send axis update if there is a change\n if (curAxisValue != prevAxisValue) {\n this.toStreamerMessagesProvider.toStreamerHandlers.get('XRAnalog')([\n handedness,\n i,\n curAxisValue\n ]);\n }\n }\n this.controllers[handedness].prevState = currState;\n }\n }\n}\n//# sourceMappingURL=XRGamepadController.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';\nimport { XRGamepadController } from '../Inputs/XRGamepadController';\nimport { XrFrameEvent } from '../Util/EventEmitter';\nimport { Flags } from '../Config/Config';\nexport class WebXRController {\n constructor(webRtcPlayerController) {\n this.xrViewerPose = null;\n // Used for comparisons to ensure two numbers are close enough.\n this.EPSILON = 0.0000001;\n this.videoTexture = null;\n this.prevVideoWidth = 0;\n this.prevVideoHeight = 0;\n this.leftView = null;\n this.rightView = null;\n // Store the HMD data we have last sent (not all of it is needed every frame unless it changes)\n this.lastSentLeftEyeProj = null;\n this.lastSentRightEyeProj = null;\n this.lastSentRelativeLeftEyePos = null;\n this.lastSentRelativeRightEyePos = null;\n this.xrSession = null;\n this.webRtcController = webRtcPlayerController;\n this.xrGamepadController = new XRGamepadController(this.webRtcController.streamMessageController);\n this.onSessionEnded = new EventTarget();\n this.onSessionStarted = new EventTarget();\n this.onFrame = new EventTarget();\n }\n xrClicked() {\n if (!this.xrSession) {\n if (!navigator.xr) {\n Logger.Error('This browser does not support XR.');\n return;\n }\n navigator.xr\n /* Request immersive-vr session without any optional features. */\n .requestSession('immersive-vr', { optionalFeatures: [] })\n .then((session) => {\n this.onXrSessionStarted(session);\n });\n }\n else {\n this.xrSession.end();\n }\n }\n onXrSessionEnded() {\n Logger.Info('XR Session ended');\n this.xrSession = null;\n this.onSessionEnded.dispatchEvent(new Event('xrSessionEnded'));\n }\n initGL() {\n if (this.gl) {\n return;\n }\n const canvas = document.createElement('canvas');\n this.gl = canvas.getContext('webgl2', {\n xrCompatible: true\n });\n // Set our clear color\n this.gl.clearColor(0.0, 0.0, 0.0, 1);\n }\n initShaders() {\n // shader source code\n const vertexShaderSource = `\n attribute vec2 a_position;\n attribute vec2 a_texCoord;\n\n // varyings\n varying vec2 v_texCoord;\n\n void main() {\n gl_Position = vec4(a_position.x, a_position.y, 0, 1);\n // pass the texCoord to the fragment shader\n // The GPU will interpolate this value between points.\n v_texCoord = a_texCoord;\n }\n `;\n const fragmentShaderSource = `\n precision mediump float;\n\n // our texture\n uniform sampler2D u_image;\n\n // the texCoords passed in from the vertex shader.\n varying vec2 v_texCoord;\n\n void main() {\n gl_FragColor = texture2D(u_image, v_texCoord);\n }\n `;\n // setup vertex shader\n const vertexShader = this.gl.createShader(this.gl.VERTEX_SHADER);\n this.gl.shaderSource(vertexShader, vertexShaderSource);\n this.gl.compileShader(vertexShader);\n // setup fragment shader\n const fragmentShader = this.gl.createShader(this.gl.FRAGMENT_SHADER);\n this.gl.shaderSource(fragmentShader, fragmentShaderSource);\n this.gl.compileShader(fragmentShader);\n // setup GLSL program\n const shaderProgram = this.gl.createProgram();\n this.gl.attachShader(shaderProgram, vertexShader);\n this.gl.attachShader(shaderProgram, fragmentShader);\n this.gl.linkProgram(shaderProgram);\n this.gl.useProgram(shaderProgram);\n // look up where vertex data needs to go\n this.positionLocation = this.gl.getAttribLocation(shaderProgram, 'a_position');\n this.texcoordLocation = this.gl.getAttribLocation(shaderProgram, 'a_texCoord');\n }\n updateVideoTexture() {\n if (!this.videoTexture) {\n // Create our texture that we use in our shader\n // and bind it once because we never use any other texture.\n this.videoTexture = this.gl.createTexture();\n this.gl.bindTexture(this.gl.TEXTURE_2D, this.videoTexture);\n // Set the parameters so we can render any size image.\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_S, this.gl.CLAMP_TO_EDGE);\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_T, this.gl.CLAMP_TO_EDGE);\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_MIN_FILTER, this.gl.LINEAR);\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_MAG_FILTER, this.gl.LINEAR);\n }\n const videoHeight = this.webRtcController.videoPlayer.getVideoElement().videoHeight;\n const videoWidth = this.webRtcController.videoPlayer.getVideoElement().videoWidth;\n if (this.prevVideoHeight != videoHeight || this.prevVideoWidth != videoWidth) {\n // Do full update of texture if dimensions do not match\n this.gl.texImage2D(this.gl.TEXTURE_2D, 0, this.gl.RGBA, videoWidth, videoHeight, 0, this.gl.RGBA, this.gl.UNSIGNED_BYTE, this.webRtcController.videoPlayer.getVideoElement());\n }\n else {\n // If dimensions match just update the sub region\n this.gl.texSubImage2D(this.gl.TEXTURE_2D, 0, 0, 0, videoWidth, videoHeight, this.gl.RGBA, this.gl.UNSIGNED_BYTE, this.webRtcController.videoPlayer.getVideoElement());\n }\n // Update prev video width/height\n this.prevVideoHeight = videoHeight;\n this.prevVideoWidth = videoWidth;\n }\n initBuffers() {\n // Create out position buffer and its vertex shader attribute\n {\n // Create a buffer to put the the vertices of the plane we will draw the video stream onto\n this.positionBuffer = this.gl.createBuffer();\n // Bind the position buffer\n this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.positionBuffer);\n // Enable `positionLocation` to be used as vertex shader attribute\n this.gl.enableVertexAttribArray(this.positionLocation);\n // Note: positions are passed in clip-space coordinates [-1..1] so no need to convert in-shader\n // prettier-ignore\n this.gl.bufferData(this.gl.ARRAY_BUFFER, new Float32Array([\n -1.0, 1.0,\n 1.0, 1.0,\n -1.0, -1.0,\n -1.0, -1.0,\n 1.0, 1.0,\n 1.0, -1.0\n ]), this.gl.STATIC_DRAW);\n // Tell position attribute of the vertex shader how to get data out of the bound buffer (the positionBuffer)\n this.gl.vertexAttribPointer(this.positionLocation, 2 /*size*/, this.gl.FLOAT /*type*/, false /*normalize*/, 0 /*stride*/, 0 /*offset*/);\n }\n // Create our texture coordinate buffers for accessing our texture\n {\n this.texcoordBuffer = this.gl.createBuffer();\n // Bind the texture coordinate buffer\n this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.texcoordBuffer);\n // Enable `texcoordLocation` to be used as a vertex shader attribute\n this.gl.enableVertexAttribArray(this.texcoordLocation);\n // The texture coordinates to apply for rectangle we are drawing\n this.gl.bufferData(this.gl.ARRAY_BUFFER, new Float32Array([0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0]), this.gl.STATIC_DRAW);\n // Tell texture coordinate attribute of the vertex shader how to get data out of the bound buffer (the texcoordBuffer)\n this.gl.vertexAttribPointer(this.texcoordLocation, 2 /*size*/, this.gl.FLOAT /*type*/, false /*normalize*/, 0 /*stride*/, 0 /*offset*/);\n }\n }\n onXrSessionStarted(session) {\n Logger.Info('XR Session started');\n this.xrSession = session;\n this.xrSession.addEventListener('end', () => {\n this.onXrSessionEnded();\n });\n // Initialization\n this.initGL();\n this.initShaders();\n this.initBuffers();\n session.requestReferenceSpace('local').then((refSpace) => {\n this.xrRefSpace = refSpace;\n // Set up our base layer (i.e. a projection layer that fills the entire XR viewport).\n this.xrSession.updateRenderState({\n baseLayer: new XRWebGLLayer(this.xrSession, this.gl)\n });\n // Update target framerate to 90 fps if 90 fps is supported in this XR device\n if (this.xrSession.supportedFrameRates) {\n for (const frameRate of this.xrSession.supportedFrameRates) {\n if (frameRate == 90) {\n session.updateTargetFrameRate(90);\n }\n }\n }\n // Binding to each new frame to get latest XR updates\n this.xrSession.requestAnimationFrame(this.onXrFrame.bind(this));\n });\n this.onSessionStarted.dispatchEvent(new Event('xrSessionStarted'));\n }\n areArraysEqual(a, b) {\n return (a.length === b.length && a.every((element, index) => Math.abs(element - b[index]) <= this.EPSILON));\n }\n arePointsEqual(a, b) {\n return (Math.abs(a.x - b.x) >= this.EPSILON &&\n Math.abs(a.y - b.y) >= this.EPSILON &&\n Math.abs(a.z - b.z) >= this.EPSILON);\n }\n sendXRDataToUE() {\n if (this.leftView == null || this.rightView == null) {\n return;\n }\n // We selectively send either the `XREyeViews` or `XRHMDTransform`\n // messages over the datachannel. The reason for this selective sending is that\n // the `XREyeViews` is a much larger message and changes infrequently (e.g. only when user changes headset IPD).\n // Therefore, we only need to send it once on startup and then any time it changes.\n // The rest of the time we can send the `XRHMDTransform` message.\n let shouldSendEyeViews = this.lastSentLeftEyeProj == null ||\n this.lastSentRightEyeProj == null ||\n this.lastSentRelativeLeftEyePos == null ||\n this.lastSentRelativeRightEyePos == null;\n const leftEyeTrans = this.leftView.transform.matrix;\n const leftEyeProj = this.leftView.projectionMatrix;\n const rightEyeTrans = this.rightView.transform.matrix;\n const rightEyeProj = this.rightView.projectionMatrix;\n const hmdTrans = this.xrViewerPose.transform.matrix;\n // Check if projection matrices have changed\n if (!shouldSendEyeViews && this.lastSentLeftEyeProj != null && this.lastSentRightEyeProj != null) {\n const leftEyeProjUnchanged = this.areArraysEqual(leftEyeProj, this.lastSentLeftEyeProj);\n const rightEyeProjUnchanged = this.areArraysEqual(rightEyeProj, this.lastSentRightEyeProj);\n shouldSendEyeViews = leftEyeProjUnchanged == false || rightEyeProjUnchanged == false;\n }\n const leftEyeRelativePos = new DOMPointReadOnly(this.leftView.transform.position.x - this.xrViewerPose.transform.position.x, this.leftView.transform.position.y - this.xrViewerPose.transform.position.y, this.leftView.transform.position.z - this.xrViewerPose.transform.position.z, 1.0);\n const rightEyeRelativePos = new DOMPointReadOnly(this.leftView.transform.position.x - this.xrViewerPose.transform.position.x, this.leftView.transform.position.y - this.xrViewerPose.transform.position.y, this.leftView.transform.position.z - this.xrViewerPose.transform.position.z, 1.0);\n // Check if relative eye pos has changed (e.g IPD changed)\n if (!shouldSendEyeViews &&\n this.lastSentRelativeLeftEyePos != null &&\n this.lastSentRelativeRightEyePos != null) {\n const leftEyePosUnchanged = this.arePointsEqual(leftEyeRelativePos, this.lastSentRelativeLeftEyePos);\n const rightEyePosUnchanged = this.arePointsEqual(rightEyeRelativePos, this.lastSentRelativeRightEyePos);\n shouldSendEyeViews = leftEyePosUnchanged == false || rightEyePosUnchanged == false;\n // Note: We are not checking if EyeView rotation changes (as far as I know no HMD supports changing this value at runtime).\n }\n if (shouldSendEyeViews) {\n // send transform (4x4) and projection matrix (4x4) data for each eye (left first, then right)\n // prettier-ignore\n this.webRtcController.streamMessageController.toStreamerHandlers.get('XREyeViews')([\n // Left eye 4x4 transform matrix\n leftEyeTrans[0], leftEyeTrans[4], leftEyeTrans[8], leftEyeTrans[12],\n leftEyeTrans[1], leftEyeTrans[5], leftEyeTrans[9], leftEyeTrans[13],\n leftEyeTrans[2], leftEyeTrans[6], leftEyeTrans[10], leftEyeTrans[14],\n leftEyeTrans[3], leftEyeTrans[7], leftEyeTrans[11], leftEyeTrans[15],\n // Left eye 4x4 projection matrix\n leftEyeProj[0], leftEyeProj[4], leftEyeProj[8], leftEyeProj[12],\n leftEyeProj[1], leftEyeProj[5], leftEyeProj[9], leftEyeProj[13],\n leftEyeProj[2], leftEyeProj[6], leftEyeProj[10], leftEyeProj[14],\n leftEyeProj[3], leftEyeProj[7], leftEyeProj[11], leftEyeProj[15],\n // Right eye 4x4 transform matrix\n rightEyeTrans[0], rightEyeTrans[4], rightEyeTrans[8], rightEyeTrans[12],\n rightEyeTrans[1], rightEyeTrans[5], rightEyeTrans[9], rightEyeTrans[13],\n rightEyeTrans[2], rightEyeTrans[6], rightEyeTrans[10], rightEyeTrans[14],\n rightEyeTrans[3], rightEyeTrans[7], rightEyeTrans[11], rightEyeTrans[15],\n // right eye 4x4 projection matrix\n rightEyeProj[0], rightEyeProj[4], rightEyeProj[8], rightEyeProj[12],\n rightEyeProj[1], rightEyeProj[5], rightEyeProj[9], rightEyeProj[13],\n rightEyeProj[2], rightEyeProj[6], rightEyeProj[10], rightEyeProj[14],\n rightEyeProj[3], rightEyeProj[7], rightEyeProj[11], rightEyeProj[15],\n // HMD 4x4 transform\n hmdTrans[0], hmdTrans[4], hmdTrans[8], hmdTrans[12],\n hmdTrans[1], hmdTrans[5], hmdTrans[9], hmdTrans[13],\n hmdTrans[2], hmdTrans[6], hmdTrans[10], hmdTrans[14],\n hmdTrans[3], hmdTrans[7], hmdTrans[11], hmdTrans[15],\n ]);\n this.lastSentLeftEyeProj = leftEyeProj;\n this.lastSentRightEyeProj = rightEyeProj;\n this.lastSentRelativeLeftEyePos = leftEyeRelativePos;\n this.lastSentRelativeRightEyePos = rightEyeRelativePos;\n }\n else {\n // If we don't need to the entire eye views being sent just send the HMD transform\n this.webRtcController.streamMessageController.toStreamerHandlers.get('XRHMDTransform')([\n // HMD 4x4 transform\n hmdTrans[0],\n hmdTrans[4],\n hmdTrans[8],\n hmdTrans[12],\n hmdTrans[1],\n hmdTrans[5],\n hmdTrans[9],\n hmdTrans[13],\n hmdTrans[2],\n hmdTrans[6],\n hmdTrans[10],\n hmdTrans[14],\n hmdTrans[3],\n hmdTrans[7],\n hmdTrans[11],\n hmdTrans[15]\n ]);\n }\n }\n onXrFrame(time, frame) {\n this.xrViewerPose = frame.getViewerPose(this.xrRefSpace);\n if (this.xrViewerPose) {\n this.updateViews();\n if (this.leftView == null || this.rightView == null) {\n return;\n }\n this.sendXRDataToUE();\n this.updateVideoTexture();\n this.render();\n }\n if (this.webRtcController.config.isFlagEnabled(Flags.XRControllerInput)) {\n this.xrSession.inputSources.forEach((source, _index, _array) => {\n this.xrGamepadController.updateStatus(source, frame, this.xrRefSpace);\n }, this);\n }\n this.xrSession.requestAnimationFrame((time, frame) => this.onXrFrame(time, frame));\n this.onFrame.dispatchEvent(new XrFrameEvent({ time, frame }));\n }\n updateViews() {\n if (!this.xrViewerPose) {\n return;\n }\n for (const view of this.xrViewerPose.views) {\n if (view.eye === 'left') {\n this.leftView = view;\n }\n else if (view.eye === 'right') {\n this.rightView = view;\n }\n }\n }\n render() {\n if (!this.gl) {\n return;\n }\n // Bind the framebuffer to the base layer's framebuffer\n const glLayer = this.xrSession.renderState.baseLayer;\n this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, glLayer.framebuffer);\n // Set the relevant portion of clip space\n this.gl.viewport(0, 0, glLayer.framebufferWidth, glLayer.framebufferHeight);\n // Draw the rectangle we will show the video stream texture on\n this.gl.drawArrays(this.gl.TRIANGLES /*primitiveType*/, 0 /*offset*/, 6 /*count*/);\n }\n static isSessionSupported(mode) {\n if (location.protocol !== 'https:') {\n Logger.Info('WebXR requires https, if you want WebXR use https.');\n }\n // Wrap in try-catch because access to XR object can be denied due\n // to browser security permissions (e.g. streaming from an iframe)\n try {\n if (navigator.xr) {\n return navigator.xr.isSessionSupported(mode);\n }\n }\n catch (_a) {\n return Promise.resolve(false);\n }\n return Promise.resolve(false);\n }\n}\n//# sourceMappingURL=WebXRController.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nexport class DataChannelLatencyTestRecord {\n constructor(request) {\n this.seq = request.Seq;\n this.playerSentTimestamp = Date.now();\n this.requestFillerSize = request.Filler ? request.Filler.length : 0;\n }\n update(response) {\n this.playerReceivedTimestamp = Date.now();\n this.streamerReceivedTimestamp = response.ReceivedTimestamp;\n this.streamerSentTimestamp = response.SentTimestamp;\n this.responseFillerSize = response.Filler ? response.Filler.length : 0;\n }\n}\n//# sourceMappingURL=DataChannelLatencyTestResults.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';\nimport { DataChannelLatencyTestRecord } from './DataChannelLatencyTestResults';\nexport class DataChannelLatencyTestController {\n constructor(sink, callback) {\n this.intervalHandle = undefined;\n this.sink = sink;\n this.callback = callback;\n this.records = new Map();\n this.seq = 0;\n }\n start(config) {\n if (this.isRunning()) {\n return false;\n }\n this.startTime = Date.now();\n this.records.clear();\n this.intervalHandle = window.setInterval((() => {\n if (Date.now() - this.startTime >= config.duration) {\n this.stop();\n }\n else {\n this.sendRequest(config.requestSize, config.responseSize);\n }\n }).bind(this), Math.floor(1000 / config.rps));\n return true;\n }\n stop() {\n if (this.intervalHandle) {\n window.clearInterval(this.intervalHandle);\n this.intervalHandle = undefined;\n this.callback(this.produceResult());\n }\n }\n produceResult() {\n const resultRecords = new Map(this.records);\n return {\n records: resultRecords,\n dataChannelRtt: Math.ceil(Array.from(this.records.values()).reduce((acc, next) => {\n return acc + (next.playerReceivedTimestamp - next.playerSentTimestamp);\n }, 0) / this.records.size),\n playerToStreamerTime: Math.ceil(Array.from(this.records.values()).reduce((acc, next) => {\n return acc + (next.streamerReceivedTimestamp - next.playerSentTimestamp);\n }, 0) / this.records.size),\n streamerToPlayerTime: Math.ceil(Array.from(this.records.values()).reduce((acc, next) => {\n return acc + (next.playerReceivedTimestamp - next.streamerSentTimestamp);\n }, 0) / this.records.size),\n exportLatencyAsCSV: () => {\n let csv = 'Timestamp;RTT;PlayerToStreamer;StreamerToPlayer;\\n';\n resultRecords.forEach((record) => {\n csv += record.playerSentTimestamp + ';';\n csv += record.playerReceivedTimestamp - record.playerSentTimestamp + ';';\n csv += record.streamerReceivedTimestamp - record.playerSentTimestamp + ';';\n csv += record.playerReceivedTimestamp - record.streamerSentTimestamp + ';';\n csv += '\\n';\n });\n return csv;\n }\n };\n }\n isRunning() {\n return !!this.intervalHandle;\n }\n receive(response) {\n if (!this.isRunning()) {\n return;\n }\n if (!response) {\n Logger.Error('Undefined response from server');\n return;\n }\n const record = this.records.get(response.Seq);\n if (record) {\n record.update(response);\n }\n }\n sendRequest(requestSize, responseSize) {\n const request = this.createRequest(requestSize, responseSize);\n const record = new DataChannelLatencyTestRecord(request);\n this.records.set(record.seq, record);\n this.sink(request);\n }\n createRequest(requestSize, responseSize) {\n return {\n Seq: this.seq++,\n FillResponseSize: responseSize,\n Filler: requestSize ? 'A'.repeat(requestSize) : ''\n };\n }\n}\n//# sourceMappingURL=DataChannelLatencyTestController.js.map","// Copyright Epic Games, Inc. All Rights Reserved.\nimport { OptionParameters } from '../Config/Config';\nimport { WebRtcPlayerController } from '../WebRtcPlayer/WebRtcPlayerController';\nimport { Flags, NumericParameters } from '../Config/Config';\nimport { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';\nimport { PixelStreamingEventEmitter, InitialSettingsEvent, LatencyCalculatedEvent, LatencyTestResultEvent, StatsReceivedEvent, StreamLoadingEvent, StreamPreConnectEvent, StreamReconnectEvent, StreamPreDisconnectEvent, VideoEncoderAvgQPEvent, VideoInitializedEvent, WebRtcAutoConnectEvent, WebRtcConnectedEvent, WebRtcConnectingEvent, WebRtcDisconnectedEvent, WebRtcFailedEvent, WebRtcSdpEvent, DataChannelLatencyTestResponseEvent, DataChannelLatencyTestResultEvent, PlayerCountEvent, WebRtcTCPRelayDetectedEvent, SubscribeFailedEvent, WebRtcSdpOfferEvent, WebRtcSdpAnswerEvent } from '../Util/EventEmitter';\nimport { WebXRController } from '../WebXR/WebXRController';\nimport { MessageDirection } from '../UeInstanceMessage/StreamMessageController';\nimport { DataChannelLatencyTestController } from '../DataChannel/DataChannelLatencyTestController';\nimport { RTCUtils } from '../Util/RTCUtils';\nimport { IURLSearchParams } from '../Util/IURLSearchParams';\n/**\n * The key class for the browser side of a Pixel Streaming application, it includes:\n * WebRTC handling, XR support, input handling, and emitters for lifetime and state change events.\n * Users are encouraged to use this class as is, through composition, or extend it. In any case,\n * this will likely be the core of your Pixel Streaming experience in terms of functionality.\n */\nexport class PixelStreaming {\n /**\n * @param config - A newly instantiated config object\n * @param overrides - Parameters to override default behaviour\n * returns the base Pixel streaming object\n */\n constructor(config, overrides) {\n this.allowConsoleCommands = false;\n this.config = config;\n if (overrides === null || overrides === void 0 ? void 0 : overrides.videoElementParent) {\n this._videoElementParent = overrides.videoElementParent;\n }\n this._eventEmitter = new PixelStreamingEventEmitter();\n this.configureSettings();\n // setup WebRTC\n this.setWebRtcPlayerController(new WebRtcPlayerController(this.config, this));\n this._webXrController = new WebXRController(this._webRtcController);\n this._setupWebRtcTCPRelayDetection = this._setupWebRtcTCPRelayDetection.bind(this);\n // Add event listener for the webRtcConnected event\n this._eventEmitter.addEventListener('webRtcConnected', (_) => {\n // Bind to the stats received event\n this._eventEmitter.addEventListener('statsReceived', this._setupWebRtcTCPRelayDetection);\n });\n }\n /**\n * Gets the element that contains the video stream element.\n */\n get videoElementParent() {\n if (!this._videoElementParent) {\n this._videoElementParent = document.createElement('div');\n this._videoElementParent.id = 'videoElementParent';\n }\n return this._videoElementParent;\n }\n /**\n * Configure the settings with on change listeners and any additional per experience settings.\n */\n configureSettings() {\n this.config._addOnSettingChangedListener(Flags.IsQualityController, (wantsQualityController) => {\n // If the setting has been set to true (either programmatically or the user has flicked the toggle)\n // and we aren't currently quality controller, send the request\n if (wantsQualityController === true && !this._webRtcController.isQualityController) {\n this._webRtcController.sendRequestQualityControlOwnership();\n }\n });\n this.config._addOnSettingChangedListener(Flags.AFKDetection, (isAFKEnabled) => {\n this._webRtcController.setAfkEnabled(isAFKEnabled);\n });\n this.config._addOnSettingChangedListener(Flags.MatchViewportResolution, () => {\n this._webRtcController.videoPlayer.updateVideoStreamSize();\n });\n this.config._addOnSettingChangedListener(Flags.HoveringMouseMode, (isHoveringMouse) => {\n this.config.setFlagLabel(Flags.HoveringMouseMode, `Control Scheme: ${isHoveringMouse ? 'Hovering' : 'Locked'} Mouse`);\n this._webRtcController.setMouseInputEnabled(this.config.isFlagEnabled(Flags.MouseInput));\n });\n // user input\n this.config._addOnSettingChangedListener(Flags.KeyboardInput, (isEnabled) => {\n this._webRtcController.setKeyboardInputEnabled(isEnabled);\n });\n this.config._addOnSettingChangedListener(Flags.MouseInput, (isEnabled) => {\n this._webRtcController.setMouseInputEnabled(isEnabled);\n });\n this.config._addOnSettingChangedListener(Flags.FakeMouseWithTouches, (_isFakeMouseEnabled) => {\n this._webRtcController.setTouchInputEnabled(this.config.isFlagEnabled(Flags.TouchInput));\n });\n this.config._addOnSettingChangedListener(Flags.TouchInput, (isEnabled) => {\n this._webRtcController.setTouchInputEnabled(isEnabled);\n });\n this.config._addOnSettingChangedListener(Flags.GamepadInput, (isEnabled) => {\n this._webRtcController.setGamePadInputEnabled(isEnabled);\n });\n // direct qp settings\n this.config._addOnNumericSettingChangedListener(NumericParameters.MinQP, (newValue) => {\n Logger.Info('-------- Sending MinQP --------');\n this._webRtcController.sendEncoderMinQP(newValue);\n Logger.Info('-------------------------------------------');\n const quality = Math.trunc(100 * (1 - newValue / 51));\n this.config.setNumericSetting(NumericParameters.CompatQualityMax, quality);\n });\n this.config._addOnNumericSettingChangedListener(NumericParameters.MaxQP, (newValue) => {\n Logger.Info('-------- Sending MaxQP --------');\n this._webRtcController.sendEncoderMaxQP(newValue);\n Logger.Info('-------------------------------------------');\n const quality = Math.trunc(100 * (1 - newValue / 51));\n this.config.setNumericSetting(NumericParameters.CompatQualityMin, quality);\n });\n // direct quality factor settings\n this.config._addOnNumericSettingChangedListener(NumericParameters.MinQuality, (newValue) => {\n Logger.Info('-------- Sending MinQuality --------');\n this._webRtcController.sendEncoderMinQuality(newValue);\n Logger.Info('-------------------------------------------');\n this.config.setNumericSetting(NumericParameters.CompatQualityMin, newValue);\n });\n this.config._addOnNumericSettingChangedListener(NumericParameters.MaxQuality, (newValue) => {\n Logger.Info('-------- Sending MaxQuality --------');\n this._webRtcController.sendEncoderMaxQuality(newValue);\n Logger.Info('-------------------------------------------');\n this.config.setNumericSetting(NumericParameters.CompatQualityMax, newValue);\n });\n // new quality value that gets scaled to qp for legacy reasons\n this.config._addOnNumericSettingChangedListener(NumericParameters.CompatQualityMin, (newValue) => {\n newValue = 51 - (newValue / 100) * 51;\n Logger.Info('-------- Sending MinQP from quality value --------');\n this._webRtcController.sendEncoderMaxQP(newValue);\n Logger.Info('-------------------------------------------');\n });\n this.config._addOnNumericSettingChangedListener(NumericParameters.CompatQualityMax, (newValue) => {\n newValue = 51 - (newValue / 100) * 51;\n Logger.Info('-------- Sending MaxQP from quality value --------');\n this._webRtcController.sendEncoderMinQP(newValue);\n Logger.Info('-------------------------------------------');\n });\n // WebRTC settings\n this.config._addOnNumericSettingChangedListener(NumericParameters.WebRTCMinBitrate, (newValue) => {\n Logger.Info('-------- Sending web rtc settings --------');\n this._webRtcController.sendWebRTCMinBitrate(newValue * 1000 /* kbps to bps */);\n Logger.Info('-------------------------------------------');\n });\n this.config._addOnNumericSettingChangedListener(NumericParameters.WebRTCMaxBitrate, (newValue) => {\n Logger.Info('-------- Sending web rtc settings --------');\n this._webRtcController.sendWebRTCMaxBitrate(newValue * 1000 /* kbps to bps */);\n Logger.Info('-------------------------------------------');\n });\n this.config._addOnNumericSettingChangedListener(NumericParameters.WebRTCFPS, (newValue) => {\n Logger.Info('-------- Sending web rtc settings --------');\n this._webRtcController.sendWebRTCFps(newValue);\n Logger.Info('-------------------------------------------');\n });\n this.config._addOnOptionSettingChangedListener(OptionParameters.PreferredCodec, (newValue) => {\n if (this._webRtcController) {\n this._webRtcController.setPreferredCodec(newValue);\n }\n });\n this.config._registerOnChangeEvents(this._eventEmitter);\n }\n /**\n * Set the input control ownership\n * @param inputControlOwnership - does the user have input control ownership\n */\n _onInputControlOwnership(inputControlOwnership) {\n this._inputController = inputControlOwnership;\n }\n /**\n * Instantiate the WebRTCPlayerController interface to provide WebRTCPlayerController functionality within this class and set up anything that requires it\n * @param webRtcPlayerController - a WebRtcPlayerController controller instance\n */\n setWebRtcPlayerController(webRtcPlayerController) {\n this._webRtcController = webRtcPlayerController;\n this._webRtcController.setPreferredCodec(this.config.getSettingOption(OptionParameters.PreferredCodec).selected);\n this._webRtcController.resizePlayerStyle();\n // connect if auto connect flag is enabled\n this.checkForAutoConnect();\n }\n /**\n * Connect to signaling server.\n */\n connect() {\n this._eventEmitter.dispatchEvent(new StreamPreConnectEvent());\n this._webRtcController.connectToSignallingServer();\n }\n /**\n * Reconnects to the signaling server. If connection is up, disconnects first\n * before establishing a new connection\n */\n reconnect() {\n this._eventEmitter.dispatchEvent(new StreamReconnectEvent());\n this._webRtcController.tryReconnect('Reconnecting...');\n }\n /**\n * Disconnect from the signaling server and close open peer connections.\n */\n disconnect() {\n this._eventEmitter.dispatchEvent(new StreamPreDisconnectEvent());\n this._webRtcController.close();\n }\n /**\n * Play the stream. Can be called only after a peer connection has been established.\n */\n play() {\n this._onStreamLoading();\n this._webRtcController.playStream();\n }\n /**\n * Auto connect if AutoConnect flag is enabled\n */\n checkForAutoConnect() {\n // set up if the auto play will be used or regular click to start\n if (this.config.isFlagEnabled(Flags.AutoConnect)) {\n // if autoplaying show an info overlay while while waiting for the connection to begin\n this._onWebRtcAutoConnect();\n this._webRtcController.connectToSignallingServer();\n }\n }\n /**\n * Will unmute the microphone track which is sent to Unreal Engine.\n * By default, will only unmute an existing mic track.\n *\n * @param forceEnable Can be used for cases when this object wasn't initialized with a mic track.\n * If this parameter is true, the connection will be restarted with a microphone.\n * Warning: this takes some time, as a full renegotiation and reconnection will happen.\n */\n unmuteMicrophone(forceEnable = false) {\n // If there's an existing mic track, we just set muted state\n if (this.config.isFlagEnabled('UseMic')) {\n this.setMicrophoneMuted(false);\n return;\n }\n // If there's no pre-existing mic track, and caller is ok with full reset, we enable and reset\n if (forceEnable) {\n this.config.setFlagEnabled('UseMic', true);\n this.reconnect();\n return;\n }\n // If we prefer not to force a reconnection, just warn the user that this operation didn't happen\n Logger.Warning('Trying to unmute mic, but PixelStreaming was initialized with no microphone track. Call with forceEnable == true to re-connect with a mic track.');\n }\n muteMicrophone() {\n if (this.config.isFlagEnabled('UseMic')) {\n this.setMicrophoneMuted(true);\n return;\n }\n // If there wasn't a mic track, just let user know there's nothing to mute\n Logger.Info('Trying to mute mic, but PixelStreaming has no microphone track, so sending sound is already disabled.');\n }\n setMicrophoneMuted(mute) {\n var _a, _b, _c, _d;\n for (const transceiver of (_d = (_c = (_b = (_a = this._webRtcController) === null || _a === void 0 ? void 0 : _a.peerConnectionController) === null || _b === void 0 ? void 0 : _b.peerConnection) === null || _c === void 0 ? void 0 : _c.getTransceivers()) !== null && _d !== void 0 ? _d : []) {\n if (RTCUtils.canTransceiverSendAudio(transceiver)) {\n transceiver.sender.track.enabled = !mute;\n }\n }\n }\n /**\n * Will unmute the video track which is sent to Unreal Engine.\n * By default, will only unmute an existing video track.\n *\n * @param forceEnable Can be used for cases when this object wasn't initialized with a video track.\n * If this parameter is true, the connection will be restarted with a camera.\n * Warning: this takes some time, as a full renegotiation and reconnection will happen.\n */\n unmuteCamera(forceEnable = false) {\n // If there's an existing video track, we just set muted state\n if (this.config.isFlagEnabled('UseCamera')) {\n this.setCameraMuted(false);\n return;\n }\n // If there's no pre-existing video track, and caller is ok with full reset, we enable and reset\n if (forceEnable) {\n this.config.setFlagEnabled('UseCamera', true);\n this.reconnect();\n return;\n }\n // If we prefer not to force a reconnection, just warn the user that this operation didn't happen\n Logger.Warning('Trying to unmute video, but PixelStreaming was initialized with no video track. Call with forceEnable == true to re-connect with a video track.');\n }\n muteCamera() {\n if (this.config.isFlagEnabled('UseCamera')) {\n this.setCameraMuted(true);\n return;\n }\n // If there wasn't a mic track, just let user know there's nothing to mute\n Logger.Info('Trying to mute camera, but PixelStreaming has no video track, so sending video is already disabled.');\n }\n setCameraMuted(mute) {\n var _a, _b, _c, _d;\n for (const transceiver of (_d = (_c = (_b = (_a = this._webRtcController) === null || _a === void 0 ? void 0 : _a.peerConnectionController) === null || _b === void 0 ? void 0 : _b.peerConnection) === null || _c === void 0 ? void 0 : _c.getTransceivers()) !== null && _d !== void 0 ? _d : []) {\n if (RTCUtils.canTransceiverSendVideo(transceiver)) {\n transceiver.sender.track.enabled = !mute;\n }\n }\n }\n /**\n * Internal function to emit an event when auto connecting occurs\n */\n _onWebRtcAutoConnect() {\n this._eventEmitter.dispatchEvent(new WebRtcAutoConnectEvent());\n }\n /**\n * Internal function to emit an event for when SDP negotiation is fully finished.\n */\n _onWebRtcSdp() {\n this._eventEmitter.dispatchEvent(new WebRtcSdpEvent());\n }\n /**\n * Internal function to emit an SDP offer after it has been set.\n */\n _onWebRtcSdpOffer(offer) {\n this._eventEmitter.dispatchEvent(new WebRtcSdpOfferEvent({ sdp: offer }));\n }\n /**\n * Internal function to emit an SDP answer after it has been set.\n */\n _onWebRtcSdpAnswer(answer) {\n this._eventEmitter.dispatchEvent(new WebRtcSdpAnswerEvent({ sdp: answer }));\n }\n /**\n * Internal function call to emit a `latencyCalculated` event.\n */\n _onLatencyCalculated(latencyInfo) {\n this._eventEmitter.dispatchEvent(new LatencyCalculatedEvent({ latencyInfo }));\n }\n /**\n * Internal function to emits a StreamLoading event\n */\n _onStreamLoading() {\n this._eventEmitter.dispatchEvent(new StreamLoadingEvent());\n }\n /**\n * Event fired when the video is disconnected - emits given eventString or an override\n * message from webRtcController if one has been set\n * @param eventString - a string describing why the connection closed\n * @param allowClickToReconnect - true if we want to allow the user to retry the connection with a click\n */\n _onDisconnect(eventString, allowClickToReconnect) {\n this._eventEmitter.dispatchEvent(new WebRtcDisconnectedEvent({\n eventString: eventString,\n allowClickToReconnect: allowClickToReconnect\n }));\n }\n /**\n * Handles when Web Rtc is connecting\n */\n _onWebRtcConnecting() {\n this._eventEmitter.dispatchEvent(new WebRtcConnectingEvent());\n }\n /**\n * Handles when Web Rtc has connected\n */\n _onWebRtcConnected() {\n this._eventEmitter.dispatchEvent(new WebRtcConnectedEvent());\n }\n /**\n * Handles when Web Rtc fails to connect\n */\n _onWebRtcFailed() {\n this._eventEmitter.dispatchEvent(new WebRtcFailedEvent());\n }\n /**\n * Handle when the Video has been Initialized\n */\n _onVideoInitialized() {\n this._eventEmitter.dispatchEvent(new VideoInitializedEvent());\n this._videoStartTime = Date.now();\n }\n /**\n * Set up functionality to happen when receiving latency test results\n * @param latency - latency test results object\n */\n _onLatencyTestResult(latencyTimings) {\n this._eventEmitter.dispatchEvent(new LatencyTestResultEvent({ latencyTimings }));\n }\n _onDataChannelLatencyTestResponse(response) {\n this._eventEmitter.dispatchEvent(new DataChannelLatencyTestResponseEvent({ response }));\n }\n /**\n * Set up functionality to happen when receiving video statistics\n * @param videoStats - video statistics as a aggregate stats object\n */\n _onVideoStats(videoStats) {\n // Duration\n if (!this._videoStartTime || this._videoStartTime === undefined) {\n this._videoStartTime = Date.now();\n }\n videoStats.handleSessionStatistics(this._videoStartTime, this._inputController, this._webRtcController.videoAvgQp);\n this._eventEmitter.dispatchEvent(new StatsReceivedEvent({ aggregatedStats: videoStats }));\n }\n /**\n * Set up functionality to happen when calculating the average video encoder qp\n * @param QP - the quality number of the stream\n */\n _onVideoEncoderAvgQP(QP) {\n this._eventEmitter.dispatchEvent(new VideoEncoderAvgQPEvent({ avgQP: QP }));\n }\n /**\n * Set up functionality to happen when receiving and handling initial settings for the UE app\n * @param settings - initial UE app settings\n */\n _onInitialSettings(settings) {\n var _a;\n this._eventEmitter.dispatchEvent(new InitialSettingsEvent({ settings }));\n if (settings.PixelStreamingSettings) {\n this.allowConsoleCommands = (_a = settings.PixelStreamingSettings.AllowPixelStreamingCommands) !== null && _a !== void 0 ? _a : false;\n if (this.allowConsoleCommands === false) {\n Logger.Info('-AllowPixelStreamingCommands=false, sending arbitrary console commands from browser to UE is disabled.');\n }\n }\n const useUrlParams = this.config.useUrlParams;\n const urlParams = new IURLSearchParams(window.location.search);\n Logger.Info(`using URL parameters ${useUrlParams}`);\n if (settings.EncoderSettings) {\n // here we should either get Min/MaxQP from PS1\n // or Min/MaxQuality from PS2\n // we only want to set one set or the other as they converge in CompatQualityMin/Max and\n // we dont want to have them conflict with default values.\n if (settings.EncoderSettings.MinQP) {\n this.config.setNumericSetting(NumericParameters.MinQP, \n // If a setting is set in the URL, make sure we respect that value as opposed to what the application sends us\n useUrlParams && urlParams.has(NumericParameters.MinQP)\n ? Number.parseFloat(urlParams.get(NumericParameters.MinQP))\n : settings.EncoderSettings.MinQP || 0);\n this.config.setNumericSetting(NumericParameters.MaxQP, useUrlParams && urlParams.has(NumericParameters.MaxQP)\n ? Number.parseFloat(urlParams.get(NumericParameters.MaxQP))\n : settings.EncoderSettings.MaxQP || 51);\n }\n if (settings.EncoderSettings.MinQuality) {\n this.config.setNumericSetting(NumericParameters.MinQuality, \n // If a setting is set in the URL, make sure we respect that value as opposed to what the application sends us\n useUrlParams && urlParams.has(NumericParameters.MinQuality)\n ? Number.parseFloat(urlParams.get(NumericParameters.MinQuality))\n : settings.EncoderSettings.MinQuality || 0);\n this.config.setNumericSetting(NumericParameters.MaxQuality, useUrlParams && urlParams.has(NumericParameters.MaxQuality)\n ? Number.parseFloat(urlParams.get(NumericParameters.MaxQuality))\n : settings.EncoderSettings.MaxQuality || 100);\n }\n // these two are just used to converge quality and qp and behave slightly differently since they\n // shouldnt exist in EncoderSettings\n if (useUrlParams) {\n if (urlParams.has(NumericParameters.CompatQualityMin)) {\n this.config.setNumericSetting(NumericParameters.CompatQualityMin, Number.parseFloat(urlParams.get(NumericParameters.CompatQualityMin)));\n }\n if (urlParams.has(NumericParameters.CompatQualityMax)) {\n this.config.setNumericSetting(NumericParameters.CompatQualityMax, Number.parseFloat(urlParams.get(NumericParameters.CompatQualityMax)));\n }\n }\n }\n if (settings.WebRTCSettings) {\n this.config.setNumericSetting(NumericParameters.WebRTCMinBitrate, useUrlParams && urlParams.has(NumericParameters.WebRTCMinBitrate)\n ? Number.parseFloat(urlParams.get(NumericParameters.WebRTCMinBitrate))\n : settings.WebRTCSettings.MinBitrate / 1000 /* bps to kbps */);\n this.config.setNumericSetting(NumericParameters.WebRTCMaxBitrate, useUrlParams && urlParams.has(NumericParameters.WebRTCMaxBitrate)\n ? Number.parseFloat(urlParams.get(NumericParameters.WebRTCMaxBitrate))\n : settings.WebRTCSettings.MaxBitrate / 1000 /* bps to kbps */);\n this.config.setNumericSetting(NumericParameters.WebRTCFPS, useUrlParams && urlParams.has(NumericParameters.WebRTCFPS)\n ? Number.parseFloat(urlParams.get(NumericParameters.WebRTCFPS))\n : settings.WebRTCSettings.FPS);\n }\n }\n /**\n * Set up functionality to happen when setting quality control ownership of a stream\n * @param hasQualityOwnership - does this user have quality ownership of the stream true / false\n */\n _onQualityControlOwnership(hasQualityOwnership) {\n this.config.setFlagEnabled(Flags.IsQualityController, hasQualityOwnership);\n }\n _onPlayerCount(playerCount) {\n this._eventEmitter.dispatchEvent(new PlayerCountEvent({ count: playerCount }));\n }\n _onSubscribeFailed(message) {\n this._eventEmitter.dispatchEvent(new SubscribeFailedEvent({ message: message }));\n }\n // Sets up to emit the webrtc tcp relay detect event\n _setupWebRtcTCPRelayDetection(statsReceivedEvent) {\n // Get the active candidate pair\n const activeCandidatePair = statsReceivedEvent.data.aggregatedStats.getActiveCandidatePair();\n // Check if the active candidate pair is not null\n if (activeCandidatePair != null) {\n // Get the local candidate assigned to the active candidate pair\n const localCandidate = statsReceivedEvent.data.aggregatedStats.localCandidates.find((candidate) => candidate.id == activeCandidatePair.localCandidateId, null);\n // Check if the local candidate is not null, candidate type is relay and the relay protocol is tcp\n if (localCandidate != null &&\n localCandidate.candidateType == 'relay' &&\n localCandidate.relayProtocol == 'tcp') {\n // Send the web rtc tcp relay detected event\n this._eventEmitter.dispatchEvent(new WebRtcTCPRelayDetectedEvent());\n }\n // The check is completed and the stats listen event can be removed\n this._eventEmitter.removeEventListener('statsReceived', this._setupWebRtcTCPRelayDetection);\n }\n }\n /**\n * Request a connection latency test.\n * NOTE: There are plans to refactor all request* functions. Expect changes if you use this!\n * @returns\n */\n requestLatencyTest() {\n if (!this._webRtcController.videoPlayer.isVideoReady()) {\n return false;\n }\n this._webRtcController.sendLatencyTest();\n return true;\n }\n /**\n * Request a data channel latency test.\n * NOTE: There are plans to refactor all request* functions. Expect changes if you use this!\n */\n requestDataChannelLatencyTest(config) {\n if (!this._webRtcController.videoPlayer.isVideoReady()) {\n return false;\n }\n if (!this._dataChannelLatencyTestController) {\n this._dataChannelLatencyTestController = new DataChannelLatencyTestController(this._webRtcController.sendDataChannelLatencyTest.bind(this._webRtcController), (result) => {\n this._eventEmitter.dispatchEvent(new DataChannelLatencyTestResultEvent({ result }));\n });\n this.addEventListener('dataChannelLatencyTestResponse', ({ data: { response } }) => {\n this._dataChannelLatencyTestController.receive(response);\n });\n }\n return this._dataChannelLatencyTestController.start(config);\n }\n /**\n * Request for the UE application to show FPS counter.\n * NOTE: There are plans to refactor all request* functions. Expect changes if you use this!\n * @returns\n */\n requestShowFps() {\n if (!this._webRtcController.videoPlayer.isVideoReady()) {\n return false;\n }\n this._webRtcController.sendShowFps();\n return true;\n }\n /**\n * Request for a new IFrame from the UE application.\n * NOTE: There are plans to refactor all request* functions. Expect changes if you use this!\n * @returns\n */\n requestIframe() {\n if (!this._webRtcController.videoPlayer.isVideoReady()) {\n return false;\n }\n this._webRtcController.sendIframeRequest();\n return true;\n }\n /**\n * Send data to UE application. The data will be run through JSON.stringify() so e.g. strings\n * and any serializable plain JSON objects with no recurrence can be sent.\n * @returns true if succeeded, false if rejected\n */\n emitUIInteraction(descriptor) {\n if (!this._webRtcController.videoPlayer.isVideoReady()) {\n return false;\n }\n this._webRtcController.emitUIInteraction(descriptor);\n return true;\n }\n /**\n * Send a command to UE application. Blocks ConsoleCommand descriptors unless UE\n * has signaled that it allows console commands.\n * @returns true if succeeded, false if rejected\n */\n emitCommand(descriptor) {\n if (!this._webRtcController.videoPlayer.isVideoReady()) {\n return false;\n }\n if (!this.allowConsoleCommands && 'ConsoleCommand' in descriptor) {\n return false;\n }\n this._webRtcController.emitCommand(descriptor);\n return true;\n }\n /**\n * Send a console command to UE application. Only allowed if UE has signaled that it allows\n * console commands.\n * @returns true if succeeded, false if rejected\n */\n emitConsoleCommand(command) {\n if (!this.allowConsoleCommands || !this._webRtcController.videoPlayer.isVideoReady()) {\n return false;\n }\n this._webRtcController.emitConsoleCommand(command);\n return true;\n }\n /**\n * Sets the text contents of the currently focused UE text box widget.\n * @param contents The new contents of the UE text box.\n * @returns True if the message could be sent.\n */\n sendTextboxEntry(contents) {\n if (!this._webRtcController.videoPlayer.isVideoReady()) {\n return false;\n }\n this._webRtcController.sendTextboxEntry(contents);\n return true;\n }\n /**\n * Add a UE -> browser response event listener\n * @param name - The name of the response handler\n * @param listener - The method to be activated when a message is received\n */\n addResponseEventListener(name, listener) {\n this._webRtcController.responseController.addResponseEventListener(name, listener);\n }\n /**\n * Remove a UE -> browser response event listener\n * @param name - The name of the response handler\n */\n removeResponseEventListener(name) {\n this._webRtcController.responseController.removeResponseEventListener(name);\n }\n /**\n * Dispatch a new event.\n * @param e event\n * @returns\n */\n dispatchEvent(e) {\n return this._eventEmitter.dispatchEvent(e);\n }\n /**\n * Register an event handler.\n * @param type event name\n * @param listener event handler function\n */\n addEventListener(type, listener) {\n this._eventEmitter.addEventListener(type, listener);\n }\n /**\n * Remove an event handler.\n * @param type event name\n * @param listener event handler function\n */\n removeEventListener(type, listener) {\n this._eventEmitter.removeEventListener(type, listener);\n }\n /**\n * Enable/disable XR mode.\n */\n toggleXR() {\n this.webXrController.xrClicked();\n }\n /**\n * Pass in a function to generate a signalling server URL.\n * This function is useful if you need to programmatically construct your signalling server URL.\n * @param signallingUrlBuilderFunc A function that generates a signalling server url.\n */\n setSignallingUrlBuilder(signallingUrlBuilderFunc) {\n this._webRtcController.signallingUrlBuilder = signallingUrlBuilderFunc;\n }\n get webRtcController() {\n return this._webRtcController;\n }\n /**\n * Public getter for the websocket controller. Access to this property allows you to send\n * custom websocket messages.\n */\n get signallingProtocol() {\n return this._webRtcController.protocol;\n }\n /**\n * Public getter for the webXrController controller. Used for all XR features.\n */\n get webXrController() {\n return this._webXrController;\n }\n registerMessageHandler(name, direction, handler) {\n if (direction === MessageDirection.FromStreamer && typeof handler === 'undefined') {\n Logger.Warning(`Unable to register an undefined handler for ${name}`);\n return;\n }\n if (direction === MessageDirection.ToStreamer && typeof handler === 'undefined') {\n this._webRtcController.streamMessageController.registerMessageHandler(direction, name, (data) => this._webRtcController.sendMessageController.sendMessageToStreamer(name, data));\n }\n else {\n this._webRtcController.streamMessageController.registerMessageHandler(direction, name, (data) => handler(data));\n }\n }\n get toStreamerHandlers() {\n return this._webRtcController.streamMessageController.toStreamerHandlers;\n }\n isReconnecting() {\n return this._webRtcController.isReconnecting;\n }\n}\n//# sourceMappingURL=PixelStreaming.js.map","import { UERPC } from './core/ue-rpc'\r\nimport World from './addons/world'\r\nimport { Transform } from './addons/transform'\r\nimport { PerspectiveCamera } from './addons/camera'\r\nimport UERPCNode from './addons/node/ue-node'\r\nimport { Clock } from './addons/clock'\r\nimport { WeatherType } from './addons/tools/weather'\r\nimport { MeasurementType } from './addons/tools/measurement'\r\nimport * as Animation from './addons/animation'\r\nconst Core = {\r\n UERPC\r\n}\r\n\r\nconst Addons = {\r\n World,\r\n Transform,\r\n PerspectiveCamera,\r\n UERPCNode,\r\n WeatherType,\r\n MeasurementType,\r\n Animation: {\r\n ...Animation\r\n }\r\n}\r\n\r\nexport { Core, Addons }","/**\n * lil-gui\n * https://lil-gui.georgealways.com\n * @version 0.21.0\n * @author George Michael Brower\n * @license MIT\n */\n\n/**\n * Base class for all controllers.\n */\nclass Controller {\n\n\tconstructor( parent, object, property, className, elementType = 'div' ) {\n\n\t\t/**\n\t\t * The GUI that contains this controller.\n\t\t * @type {GUI}\n\t\t */\n\t\tthis.parent = parent;\n\n\t\t/**\n\t\t * The object this controller will modify.\n\t\t * @type {object}\n\t\t */\n\t\tthis.object = object;\n\n\t\t/**\n\t\t * The name of the property to control.\n\t\t * @type {string}\n\t\t */\n\t\tthis.property = property;\n\n\t\t/**\n\t\t * Used to determine if the controller is disabled.\n\t\t * Use `controller.disable( true|false )` to modify this value.\n\t\t * @type {boolean}\n\t\t */\n\t\tthis._disabled = false;\n\n\t\t/**\n\t\t * Used to determine if the Controller is hidden.\n\t\t * Use `controller.show()` or `controller.hide()` to change this.\n\t\t * @type {boolean}\n\t\t */\n\t\tthis._hidden = false;\n\n\t\t/**\n\t\t * The value of `object[ property ]` when the controller was created.\n\t\t * @type {any}\n\t\t */\n\t\tthis.initialValue = this.getValue();\n\n\t\t/**\n\t\t * The outermost container DOM element for this controller.\n\t\t * @type {HTMLElement}\n\t\t */\n\t\tthis.domElement = document.createElement( elementType );\n\t\tthis.domElement.classList.add( 'lil-controller' );\n\t\tthis.domElement.classList.add( className );\n\n\t\t/**\n\t\t * The DOM element that contains the controller's name.\n\t\t * @type {HTMLElement}\n\t\t */\n\t\tthis.$name = document.createElement( 'div' );\n\t\tthis.$name.classList.add( 'lil-name' );\n\n\t\tController.nextNameID = Controller.nextNameID || 0;\n\t\tthis.$name.id = `lil-gui-name-${++Controller.nextNameID}`;\n\n\t\t/**\n\t\t * The DOM element that contains the controller's \"widget\" (which differs by controller type).\n\t\t * @type {HTMLElement}\n\t\t */\n\t\tthis.$widget = document.createElement( 'div' );\n\t\tthis.$widget.classList.add( 'lil-widget' );\n\n\t\t/**\n\t\t * The DOM element that receives the disabled attribute when using disable().\n\t\t * @type {HTMLElement}\n\t\t */\n\t\tthis.$disable = this.$widget;\n\n\t\tthis.domElement.appendChild( this.$name );\n\t\tthis.domElement.appendChild( this.$widget );\n\n\t\t// Don't fire global key events while typing in a controller\n\t\tthis.domElement.addEventListener( 'keydown', e => e.stopPropagation() );\n\t\tthis.domElement.addEventListener( 'keyup', e => e.stopPropagation() );\n\n\t\tthis.parent.children.push( this );\n\t\tthis.parent.controllers.push( this );\n\n\t\tthis.parent.$children.appendChild( this.domElement );\n\n\t\tthis._listenCallback = this._listenCallback.bind( this );\n\n\t\tthis.name( property );\n\n\t}\n\n\t/**\n\t * Sets the name of the controller and its label in the GUI.\n\t * @param {string} name\n\t * @returns {this}\n\t */\n\tname( name ) {\n\t\t/**\n\t\t * The controller's name. Use `controller.name( 'Name' )` to modify this value.\n\t\t * @type {string}\n\t\t */\n\t\tthis._name = name;\n\t\tthis.$name.textContent = name;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Pass a function to be called whenever the value is modified by this controller.\n\t * The function receives the new value as its first parameter. The value of `this` will be the\n\t * controller.\n\t *\n\t * For function controllers, the `onChange` callback will be fired on click, after the function\n\t * executes.\n\t * @param {Function} callback\n\t * @returns {this}\n\t * @example\n\t * const controller = gui.add( object, 'property' );\n\t *\n\t * controller.onChange( function( v ) {\n\t * \tconsole.log( 'The value is now ' + v );\n\t * \tconsole.assert( this === controller );\n\t * } );\n\t */\n\tonChange( callback ) {\n\t\t/**\n\t\t * Used to access the function bound to `onChange` events. Don't modify this value directly.\n\t\t * Use the `controller.onChange( callback )` method instead.\n\t\t * @type {Function}\n\t\t */\n\t\tthis._onChange = callback;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Calls the onChange methods of this controller and its parent GUI.\n\t * @protected\n\t */\n\t_callOnChange() {\n\n\t\tthis.parent._callOnChange( this );\n\n\t\tif ( this._onChange !== undefined ) {\n\t\t\tthis._onChange.call( this, this.getValue() );\n\t\t}\n\n\t\tthis._changed = true;\n\n\t}\n\n\t/**\n\t * Pass a function to be called after this controller has been modified and loses focus.\n\t * @param {Function} callback\n\t * @returns {this}\n\t * @example\n\t * const controller = gui.add( object, 'property' );\n\t *\n\t * controller.onFinishChange( function( v ) {\n\t * \tconsole.log( 'Changes complete: ' + v );\n\t * \tconsole.assert( this === controller );\n\t * } );\n\t */\n\tonFinishChange( callback ) {\n\t\t/**\n\t\t * Used to access the function bound to `onFinishChange` events. Don't modify this value\n\t\t * directly. Use the `controller.onFinishChange( callback )` method instead.\n\t\t * @type {Function}\n\t\t */\n\t\tthis._onFinishChange = callback;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Should be called by Controller when its widgets lose focus.\n\t * @protected\n\t */\n\t_callOnFinishChange() {\n\n\t\tif ( this._changed ) {\n\n\t\t\tthis.parent._callOnFinishChange( this );\n\n\t\t\tif ( this._onFinishChange !== undefined ) {\n\t\t\t\tthis._onFinishChange.call( this, this.getValue() );\n\t\t\t}\n\n\t\t}\n\n\t\tthis._changed = false;\n\n\t}\n\n\t/**\n\t * Sets the controller back to its initial value.\n\t * @returns {this}\n\t */\n\treset() {\n\t\tthis.setValue( this.initialValue );\n\t\tthis._callOnFinishChange();\n\t\treturn this;\n\t}\n\n\t/**\n\t * Enables this controller.\n\t * @param {boolean} enabled\n\t * @returns {this}\n\t * @example\n\t * controller.enable();\n\t * controller.enable( false ); // disable\n\t * controller.enable( controller._disabled ); // toggle\n\t */\n\tenable( enabled = true ) {\n\t\treturn this.disable( !enabled );\n\t}\n\n\t/**\n\t * Disables this controller.\n\t * @param {boolean} disabled\n\t * @returns {this}\n\t * @example\n\t * controller.disable();\n\t * controller.disable( false ); // enable\n\t * controller.disable( !controller._disabled ); // toggle\n\t */\n\tdisable( disabled = true ) {\n\n\t\tif ( disabled === this._disabled ) return this;\n\n\t\tthis._disabled = disabled;\n\n\t\tthis.domElement.classList.toggle( 'lil-disabled', disabled );\n\t\tthis.$disable.toggleAttribute( 'disabled', disabled );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Shows the Controller after it's been hidden.\n\t * @param {boolean} show\n\t * @returns {this}\n\t * @example\n\t * controller.show();\n\t * controller.show( false ); // hide\n\t * controller.show( controller._hidden ); // toggle\n\t */\n\tshow( show = true ) {\n\n\t\tthis._hidden = !show;\n\n\t\tthis.domElement.style.display = this._hidden ? 'none' : '';\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Hides the Controller.\n\t * @returns {this}\n\t */\n\thide() {\n\t\treturn this.show( false );\n\t}\n\n\t/**\n\t * Changes this controller into a dropdown of options.\n\t *\n\t * Calling this method on an option controller will simply update the options. However, if this\n\t * controller was not already an option controller, old references to this controller are\n\t * destroyed, and a new controller is added to the end of the GUI.\n\t * @example\n\t * // safe usage\n\t *\n\t * gui.add( obj, 'prop1' ).options( [ 'a', 'b', 'c' ] );\n\t * gui.add( obj, 'prop2' ).options( { Big: 10, Small: 1 } );\n\t * gui.add( obj, 'prop3' );\n\t *\n\t * // danger\n\t *\n\t * const ctrl1 = gui.add( obj, 'prop1' );\n\t * gui.add( obj, 'prop2' );\n\t *\n\t * // calling options out of order adds a new controller to the end...\n\t * const ctrl2 = ctrl1.options( [ 'a', 'b', 'c' ] );\n\t *\n\t * // ...and ctrl1 now references a controller that doesn't exist\n\t * assert( ctrl2 !== ctrl1 )\n\t * @param {object|Array} options\n\t * @returns {Controller}\n\t */\n\toptions( options ) {\n\t\tconst controller = this.parent.add( this.object, this.property, options );\n\t\tcontroller.name( this._name );\n\t\tthis.destroy();\n\t\treturn controller;\n\t}\n\n\t/**\n\t * Sets the minimum value. Only works on number controllers.\n\t * @param {number} min\n\t * @returns {this}\n\t */\n\tmin( min ) {\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the maximum value. Only works on number controllers.\n\t * @param {number} max\n\t * @returns {this}\n\t */\n\tmax( max ) {\n\t\treturn this;\n\t}\n\n\t/**\n\t * Values set by this controller will be rounded to multiples of `step`. Only works on number\n\t * controllers.\n\t * @param {number} step\n\t * @returns {this}\n\t */\n\tstep( step ) {\n\t\treturn this;\n\t}\n\n\t/**\n\t * Rounds the displayed value to a fixed number of decimals, without affecting the actual value\n\t * like `step()`. Only works on number controllers.\n\t * @example\n\t * gui.add( object, 'property' ).listen().decimals( 4 );\n\t * @param {number} decimals\n\t * @returns {this}\n\t */\n\tdecimals( decimals ) {\n\t\treturn this;\n\t}\n\n\t/**\n\t * Calls `updateDisplay()` every animation frame. Pass `false` to stop listening.\n\t * @param {boolean} listen\n\t * @returns {this}\n\t */\n\tlisten( listen = true ) {\n\n\t\t/**\n\t\t * Used to determine if the controller is currently listening. Don't modify this value\n\t\t * directly. Use the `controller.listen( true|false )` method instead.\n\t\t * @type {boolean}\n\t\t */\n\t\tthis._listening = listen;\n\n\t\tif ( this._listenCallbackID !== undefined ) {\n\t\t\tcancelAnimationFrame( this._listenCallbackID );\n\t\t\tthis._listenCallbackID = undefined;\n\t\t}\n\n\t\tif ( this._listening ) {\n\t\t\tthis._listenCallback();\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t_listenCallback() {\n\n\t\tthis._listenCallbackID = requestAnimationFrame( this._listenCallback );\n\n\t\t// To prevent framerate loss, make sure the value has changed before updating the display.\n\t\t// Note: save() is used here instead of getValue() only because of ColorController. The !== operator\n\t\t// won't work for color objects or arrays, but ColorController.save() always returns a string.\n\n\t\tconst curValue = this.save();\n\n\t\tif ( curValue !== this._listenPrevValue ) {\n\t\t\tthis.updateDisplay();\n\t\t}\n\n\t\tthis._listenPrevValue = curValue;\n\n\t}\n\n\t/**\n\t * Returns `object[ property ]`.\n\t * @returns {any}\n\t */\n\tgetValue() {\n\t\treturn this.object[ this.property ];\n\t}\n\n\t/**\n\t * Sets the value of `object[ property ]`, invokes any `onChange` handlers and updates the display.\n\t * @param {any} value\n\t * @returns {this}\n\t */\n\tsetValue( value ) {\n\n\t\tif ( this.getValue() !== value ) {\n\n\t\t\tthis.object[ this.property ] = value;\n\t\t\tthis._callOnChange();\n\t\t\tthis.updateDisplay();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Updates the display to keep it in sync with the current value. Useful for updating your\n\t * controllers when their values have been modified outside of the GUI.\n\t * @returns {this}\n\t */\n\tupdateDisplay() {\n\t\treturn this;\n\t}\n\n\tload( value ) {\n\t\tthis.setValue( value );\n\t\tthis._callOnFinishChange();\n\t\treturn this;\n\t}\n\n\tsave() {\n\t\treturn this.getValue();\n\t}\n\n\t/**\n\t * Destroys this controller and removes it from the parent GUI.\n\t */\n\tdestroy() {\n\t\tthis.listen( false );\n\t\tthis.parent.children.splice( this.parent.children.indexOf( this ), 1 );\n\t\tthis.parent.controllers.splice( this.parent.controllers.indexOf( this ), 1 );\n\t\tthis.parent.$children.removeChild( this.domElement );\n\t}\n\n}\n\nclass BooleanController extends Controller {\n\n\tconstructor( parent, object, property ) {\n\n\t\tsuper( parent, object, property, 'lil-boolean', 'label' );\n\n\t\tthis.$input = document.createElement( 'input' );\n\t\tthis.$input.setAttribute( 'type', 'checkbox' );\n\t\tthis.$input.setAttribute( 'aria-labelledby', this.$name.id );\n\n\t\tthis.$widget.appendChild( this.$input );\n\n\t\tthis.$input.addEventListener( 'change', () => {\n\t\t\tthis.setValue( this.$input.checked );\n\t\t\tthis._callOnFinishChange();\n\t\t} );\n\n\t\tthis.$disable = this.$input;\n\n\t\tthis.updateDisplay();\n\n\t}\n\n\tupdateDisplay() {\n\t\tthis.$input.checked = this.getValue();\n\t\treturn this;\n\t}\n\n}\n\nfunction normalizeColorString( string ) {\n\n\tlet match, result;\n\n\tif ( match = string.match( /(#|0x)?([a-f0-9]{6})/i ) ) {\n\n\t\tresult = match[ 2 ];\n\n\t} else if ( match = string.match( /rgb\\(\\s*(\\d*)\\s*,\\s*(\\d*)\\s*,\\s*(\\d*)\\s*\\)/ ) ) {\n\n\t\tresult = parseInt( match[ 1 ] ).toString( 16 ).padStart( 2, 0 )\n\t\t\t+ parseInt( match[ 2 ] ).toString( 16 ).padStart( 2, 0 )\n\t\t\t+ parseInt( match[ 3 ] ).toString( 16 ).padStart( 2, 0 );\n\n\t} else if ( match = string.match( /^#?([a-f0-9])([a-f0-9])([a-f0-9])$/i ) ) {\n\n\t\tresult = match[ 1 ] + match[ 1 ] + match[ 2 ] + match[ 2 ] + match[ 3 ] + match[ 3 ];\n\n\t}\n\n\tif ( result ) {\n\t\treturn '#' + result;\n\t}\n\n\treturn false;\n\n}\n\nconst STRING = {\n\tisPrimitive: true,\n\tmatch: v => typeof v === 'string',\n\tfromHexString: normalizeColorString,\n\ttoHexString: normalizeColorString\n};\n\nconst INT = {\n\tisPrimitive: true,\n\tmatch: v => typeof v === 'number',\n\tfromHexString: string => parseInt( string.substring( 1 ), 16 ),\n\ttoHexString: value => '#' + value.toString( 16 ).padStart( 6, 0 )\n};\n\nconst ARRAY = {\n\tisPrimitive: false,\n\tmatch: v => Array.isArray( v ) || ArrayBuffer.isView( v ),\n\tfromHexString( string, target, rgbScale = 1 ) {\n\n\t\tconst int = INT.fromHexString( string );\n\n\t\ttarget[ 0 ] = ( int >> 16 & 255 ) / 255 * rgbScale;\n\t\ttarget[ 1 ] = ( int >> 8 & 255 ) / 255 * rgbScale;\n\t\ttarget[ 2 ] = ( int & 255 ) / 255 * rgbScale;\n\n\t},\n\ttoHexString( [ r, g, b ], rgbScale = 1 ) {\n\n\t\trgbScale = 255 / rgbScale;\n\n\t\tconst int = r * rgbScale << 16 ^\n\t\t\t g * rgbScale << 8 ^\n\t\t\t b * rgbScale << 0;\n\n\t\treturn INT.toHexString( int );\n\n\t}\n};\n\nconst OBJECT = {\n\tisPrimitive: false,\n\tmatch: v => Object( v ) === v,\n\tfromHexString( string, target, rgbScale = 1 ) {\n\n\t\tconst int = INT.fromHexString( string );\n\n\t\ttarget.r = ( int >> 16 & 255 ) / 255 * rgbScale;\n\t\ttarget.g = ( int >> 8 & 255 ) / 255 * rgbScale;\n\t\ttarget.b = ( int & 255 ) / 255 * rgbScale;\n\n\t},\n\ttoHexString( { r, g, b }, rgbScale = 1 ) {\n\n\t\trgbScale = 255 / rgbScale;\n\n\t\tconst int = r * rgbScale << 16 ^\n\t\t\t g * rgbScale << 8 ^\n\t\t\t b * rgbScale << 0;\n\n\t\treturn INT.toHexString( int );\n\n\t}\n};\n\nconst FORMATS = [ STRING, INT, ARRAY, OBJECT ];\n\nfunction getColorFormat( value ) {\n\treturn FORMATS.find( format => format.match( value ) );\n}\n\nclass ColorController extends Controller {\n\n\tconstructor( parent, object, property, rgbScale ) {\n\n\t\tsuper( parent, object, property, 'lil-color' );\n\n\t\tthis.$input = document.createElement( 'input' );\n\t\tthis.$input.setAttribute( 'type', 'color' );\n\t\tthis.$input.setAttribute( 'tabindex', -1 );\n\t\tthis.$input.setAttribute( 'aria-labelledby', this.$name.id );\n\n\t\tthis.$text = document.createElement( 'input' );\n\t\tthis.$text.setAttribute( 'type', 'text' );\n\t\tthis.$text.setAttribute( 'spellcheck', 'false' );\n\t\tthis.$text.setAttribute( 'aria-labelledby', this.$name.id );\n\n\t\tthis.$display = document.createElement( 'div' );\n\t\tthis.$display.classList.add( 'lil-display' );\n\n\t\tthis.$display.appendChild( this.$input );\n\t\tthis.$widget.appendChild( this.$display );\n\t\tthis.$widget.appendChild( this.$text );\n\n\t\tthis._format = getColorFormat( this.initialValue );\n\t\tthis._rgbScale = rgbScale;\n\n\t\tthis._initialValueHexString = this.save();\n\t\tthis._textFocused = false;\n\n\t\tthis.$input.addEventListener( 'input', () => {\n\t\t\tthis._setValueFromHexString( this.$input.value );\n\t\t} );\n\n\t\tthis.$input.addEventListener( 'blur', () => {\n\t\t\tthis._callOnFinishChange();\n\t\t} );\n\n\t\tthis.$text.addEventListener( 'input', () => {\n\t\t\tconst tryParse = normalizeColorString( this.$text.value );\n\t\t\tif ( tryParse ) {\n\t\t\t\tthis._setValueFromHexString( tryParse );\n\t\t\t}\n\t\t} );\n\n\t\tthis.$text.addEventListener( 'focus', () => {\n\t\t\tthis._textFocused = true;\n\t\t\tthis.$text.select();\n\t\t} );\n\n\t\tthis.$text.addEventListener( 'blur', () => {\n\t\t\tthis._textFocused = false;\n\t\t\tthis.updateDisplay();\n\t\t\tthis._callOnFinishChange();\n\t\t} );\n\n\t\tthis.$disable = this.$text;\n\n\t\tthis.updateDisplay();\n\n\t}\n\n\treset() {\n\t\tthis._setValueFromHexString( this._initialValueHexString );\n\t\treturn this;\n\t}\n\n\t_setValueFromHexString( value ) {\n\n\t\tif ( this._format.isPrimitive ) {\n\n\t\t\tconst newValue = this._format.fromHexString( value );\n\t\t\tthis.setValue( newValue );\n\n\t\t} else {\n\n\t\t\tthis._format.fromHexString( value, this.getValue(), this._rgbScale );\n\t\t\tthis._callOnChange();\n\t\t\tthis.updateDisplay();\n\n\t\t}\n\n\t}\n\n\tsave() {\n\t\treturn this._format.toHexString( this.getValue(), this._rgbScale );\n\t}\n\n\tload( value ) {\n\t\tthis._setValueFromHexString( value );\n\t\tthis._callOnFinishChange();\n\t\treturn this;\n\t}\n\n\tupdateDisplay() {\n\t\tthis.$input.value = this._format.toHexString( this.getValue(), this._rgbScale );\n\t\tif ( !this._textFocused ) {\n\t\t\tthis.$text.value = this.$input.value.substring( 1 );\n\t\t}\n\t\tthis.$display.style.backgroundColor = this.$input.value;\n\t\treturn this;\n\t}\n\n}\n\nclass FunctionController extends Controller {\n\n\tconstructor( parent, object, property ) {\n\n\t\tsuper( parent, object, property, 'lil-function' );\n\n\t\t// Buttons are the only case where widget contains name\n\t\tthis.$button = document.createElement( 'button' );\n\t\tthis.$button.appendChild( this.$name );\n\t\tthis.$widget.appendChild( this.$button );\n\n\t\tthis.$button.addEventListener( 'click', e => {\n\t\t\te.preventDefault();\n\t\t\tthis.getValue().call( this.object );\n\t\t\tthis._callOnChange();\n\t\t} );\n\n\t\t// enables :active pseudo class on mobile\n\t\tthis.$button.addEventListener( 'touchstart', () => {}, { passive: true } );\n\n\t\tthis.$disable = this.$button;\n\n\t}\n\n}\n\nclass NumberController extends Controller {\n\n\tconstructor( parent, object, property, min, max, step ) {\n\n\t\tsuper( parent, object, property, 'lil-number' );\n\n\t\tthis._initInput();\n\n\t\tthis.min( min );\n\t\tthis.max( max );\n\n\t\tconst stepExplicit = step !== undefined;\n\t\tthis.step( stepExplicit ? step : this._getImplicitStep(), stepExplicit );\n\n\t\tthis.updateDisplay();\n\n\t}\n\n\tdecimals( decimals ) {\n\t\tthis._decimals = decimals;\n\t\tthis.updateDisplay();\n\t\treturn this;\n\t}\n\n\tmin( min ) {\n\t\tthis._min = min;\n\t\tthis._onUpdateMinMax();\n\t\treturn this;\n\t}\n\n\tmax( max ) {\n\t\tthis._max = max;\n\t\tthis._onUpdateMinMax();\n\t\treturn this;\n\t}\n\n\tstep( step, explicit = true ) {\n\t\tthis._step = step;\n\t\tthis._stepExplicit = explicit;\n\t\treturn this;\n\t}\n\n\tupdateDisplay() {\n\n\t\tconst value = this.getValue();\n\n\t\tif ( this._hasSlider ) {\n\n\t\t\tlet percent = ( value - this._min ) / ( this._max - this._min );\n\t\t\tpercent = Math.max( 0, Math.min( percent, 1 ) );\n\n\t\t\tthis.$fill.style.width = percent * 100 + '%';\n\n\t\t}\n\n\t\tif ( !this._inputFocused ) {\n\t\t\tthis.$input.value = this._decimals === undefined ? value : value.toFixed( this._decimals );\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t_initInput() {\n\n\t\tthis.$input = document.createElement( 'input' );\n\t\tthis.$input.setAttribute( 'type', 'text' );\n\t\tthis.$input.setAttribute( 'aria-labelledby', this.$name.id );\n\n\t\t// On touch devices only, use input[type=number] to force a numeric keyboard.\n\t\t// Ideally we could use one input type everywhere, but [type=number] has quirks\n\t\t// on desktop, and [inputmode=decimal] has quirks on iOS.\n\t\t// See https://github.com/georgealways/lil-gui/pull/16\n\n\t\tconst isTouch = window.matchMedia( '(pointer: coarse)' ).matches;\n\n\t\tif ( isTouch ) {\n\t\t\tthis.$input.setAttribute( 'type', 'number' );\n\t\t\tthis.$input.setAttribute( 'step', 'any' );\n\t\t}\n\n\t\tthis.$widget.appendChild( this.$input );\n\n\t\tthis.$disable = this.$input;\n\n\t\tconst onInput = () => {\n\n\t\t\tlet value = parseFloat( this.$input.value );\n\n\t\t\tif ( isNaN( value ) ) return;\n\n\t\t\tif ( this._stepExplicit ) {\n\t\t\t\tvalue = this._snap( value );\n\t\t\t}\n\n\t\t\tthis.setValue( this._clamp( value ) );\n\n\t\t};\n\n\t\t// Keys & mouse wheel\n\t\t// ---------------------------------------------------------------------\n\n\t\tconst increment = delta => {\n\n\t\t\tconst value = parseFloat( this.$input.value );\n\n\t\t\tif ( isNaN( value ) ) return;\n\n\t\t\tthis._snapClampSetValue( value + delta );\n\n\t\t\t// Force the input to updateDisplay when it's focused\n\t\t\tthis.$input.value = this.getValue();\n\n\t\t};\n\n\t\tconst onKeyDown = e => {\n\t\t\t// Using `e.key` instead of `e.code` also catches NumpadEnter\n\t\t\tif ( e.key === 'Enter' ) {\n\t\t\t\tthis.$input.blur();\n\t\t\t}\n\t\t\tif ( e.code === 'ArrowUp' ) {\n\t\t\t\te.preventDefault();\n\t\t\t\tincrement( this._step * this._arrowKeyMultiplier( e ) );\n\t\t\t}\n\t\t\tif ( e.code === 'ArrowDown' ) {\n\t\t\t\te.preventDefault();\n\t\t\t\tincrement( this._step * this._arrowKeyMultiplier( e ) * -1 );\n\t\t\t}\n\t\t};\n\n\t\tconst onWheel = e => {\n\t\t\tif ( this._inputFocused ) {\n\t\t\t\te.preventDefault();\n\t\t\t\tincrement( this._step * this._normalizeMouseWheel( e ) );\n\t\t\t}\n\t\t};\n\n\t\t// Vertical drag\n\t\t// ---------------------------------------------------------------------\n\n\t\tlet testingForVerticalDrag = false,\n\t\t\tinitClientX,\n\t\t\tinitClientY,\n\t\t\tprevClientY,\n\t\t\tinitValue,\n\t\t\tdragDelta;\n\n\t\t// Once the mouse is dragged more than DRAG_THRESH px on any axis, we decide\n\t\t// on the user's intent: horizontal means highlight, vertical means drag.\n\t\tconst DRAG_THRESH = 5;\n\n\t\tconst onMouseDown = e => {\n\n\t\t\tinitClientX = e.clientX;\n\t\t\tinitClientY = prevClientY = e.clientY;\n\t\t\ttestingForVerticalDrag = true;\n\n\t\t\tinitValue = this.getValue();\n\t\t\tdragDelta = 0;\n\n\t\t\twindow.addEventListener( 'mousemove', onMouseMove );\n\t\t\twindow.addEventListener( 'mouseup', onMouseUp );\n\n\t\t};\n\n\t\tconst onMouseMove = e => {\n\n\t\t\tif ( testingForVerticalDrag ) {\n\n\t\t\t\tconst dx = e.clientX - initClientX;\n\t\t\t\tconst dy = e.clientY - initClientY;\n\n\t\t\t\tif ( Math.abs( dy ) > DRAG_THRESH ) {\n\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tthis.$input.blur();\n\t\t\t\t\ttestingForVerticalDrag = false;\n\t\t\t\t\tthis._setDraggingStyle( true, 'vertical' );\n\n\t\t\t\t} else if ( Math.abs( dx ) > DRAG_THRESH ) {\n\n\t\t\t\t\tonMouseUp();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// This isn't an else so that the first move counts towards dragDelta\n\t\t\tif ( !testingForVerticalDrag ) {\n\n\t\t\t\tconst dy = e.clientY - prevClientY;\n\n\t\t\t\tdragDelta -= dy * this._step * this._arrowKeyMultiplier( e );\n\n\t\t\t\t// Clamp dragDelta so we don't have 'dead space' after dragging past bounds.\n\t\t\t\t// We're okay with the fact that bounds can be undefined here.\n\t\t\t\tif ( initValue + dragDelta > this._max ) {\n\t\t\t\t\tdragDelta = this._max - initValue;\n\t\t\t\t} else if ( initValue + dragDelta < this._min ) {\n\t\t\t\t\tdragDelta = this._min - initValue;\n\t\t\t\t}\n\n\t\t\t\tthis._snapClampSetValue( initValue + dragDelta );\n\n\t\t\t}\n\n\t\t\tprevClientY = e.clientY;\n\n\t\t};\n\n\t\tconst onMouseUp = () => {\n\t\t\tthis._setDraggingStyle( false, 'vertical' );\n\t\t\tthis._callOnFinishChange();\n\t\t\twindow.removeEventListener( 'mousemove', onMouseMove );\n\t\t\twindow.removeEventListener( 'mouseup', onMouseUp );\n\t\t};\n\n\t\t// Focus state & onFinishChange\n\t\t// ---------------------------------------------------------------------\n\n\t\tconst onFocus = () => {\n\t\t\tthis._inputFocused = true;\n\t\t};\n\n\t\tconst onBlur = () => {\n\t\t\tthis._inputFocused = false;\n\t\t\tthis.updateDisplay();\n\t\t\tthis._callOnFinishChange();\n\t\t};\n\n\t\tthis.$input.addEventListener( 'input', onInput );\n\t\tthis.$input.addEventListener( 'keydown', onKeyDown );\n\t\tthis.$input.addEventListener( 'wheel', onWheel, { passive: false } );\n\t\tthis.$input.addEventListener( 'mousedown', onMouseDown );\n\t\tthis.$input.addEventListener( 'focus', onFocus );\n\t\tthis.$input.addEventListener( 'blur', onBlur );\n\n\t}\n\n\t_initSlider() {\n\n\t\tthis._hasSlider = true;\n\n\t\t// Build DOM\n\t\t// ---------------------------------------------------------------------\n\n\t\tthis.$slider = document.createElement( 'div' );\n\t\tthis.$slider.classList.add( 'lil-slider' );\n\n\t\tthis.$fill = document.createElement( 'div' );\n\t\tthis.$fill.classList.add( 'lil-fill' );\n\n\t\tthis.$slider.appendChild( this.$fill );\n\t\tthis.$widget.insertBefore( this.$slider, this.$input );\n\n\t\tthis.domElement.classList.add( 'lil-has-slider' );\n\n\t\t// Map clientX to value\n\t\t// ---------------------------------------------------------------------\n\n\t\tconst map = ( v, a, b, c, d ) => {\n\t\t\treturn ( v - a ) / ( b - a ) * ( d - c ) + c;\n\t\t};\n\n\t\tconst setValueFromX = clientX => {\n\t\t\tconst rect = this.$slider.getBoundingClientRect();\n\t\t\tlet value = map( clientX, rect.left, rect.right, this._min, this._max );\n\t\t\tthis._snapClampSetValue( value );\n\t\t};\n\n\t\t// Mouse drag\n\t\t// ---------------------------------------------------------------------\n\n\t\tconst mouseDown = e => {\n\t\t\tthis._setDraggingStyle( true );\n\t\t\tsetValueFromX( e.clientX );\n\t\t\twindow.addEventListener( 'mousemove', mouseMove );\n\t\t\twindow.addEventListener( 'mouseup', mouseUp );\n\t\t};\n\n\t\tconst mouseMove = e => {\n\t\t\tsetValueFromX( e.clientX );\n\t\t};\n\n\t\tconst mouseUp = () => {\n\t\t\tthis._callOnFinishChange();\n\t\t\tthis._setDraggingStyle( false );\n\t\t\twindow.removeEventListener( 'mousemove', mouseMove );\n\t\t\twindow.removeEventListener( 'mouseup', mouseUp );\n\t\t};\n\n\t\t// Touch drag\n\t\t// ---------------------------------------------------------------------\n\n\t\tlet testingForScroll = false, prevClientX, prevClientY;\n\n\t\tconst beginTouchDrag = e => {\n\t\t\te.preventDefault();\n\t\t\tthis._setDraggingStyle( true );\n\t\t\tsetValueFromX( e.touches[ 0 ].clientX );\n\t\t\ttestingForScroll = false;\n\t\t};\n\n\t\tconst onTouchStart = e => {\n\n\t\t\tif ( e.touches.length > 1 ) return;\n\n\t\t\t// If we're in a scrollable container, we should wait for the first\n\t\t\t// touchmove to see if the user is trying to slide or scroll.\n\t\t\tif ( this._hasScrollBar ) {\n\n\t\t\t\tprevClientX = e.touches[ 0 ].clientX;\n\t\t\t\tprevClientY = e.touches[ 0 ].clientY;\n\t\t\t\ttestingForScroll = true;\n\n\t\t\t} else {\n\n\t\t\t\t// Otherwise, we can set the value straight away on touchstart.\n\t\t\t\tbeginTouchDrag( e );\n\n\t\t\t}\n\n\t\t\twindow.addEventListener( 'touchmove', onTouchMove, { passive: false } );\n\t\t\twindow.addEventListener( 'touchend', onTouchEnd );\n\n\t\t};\n\n\t\tconst onTouchMove = e => {\n\n\t\t\tif ( testingForScroll ) {\n\n\t\t\t\tconst dx = e.touches[ 0 ].clientX - prevClientX;\n\t\t\t\tconst dy = e.touches[ 0 ].clientY - prevClientY;\n\n\t\t\t\tif ( Math.abs( dx ) > Math.abs( dy ) ) {\n\n\t\t\t\t\t// We moved horizontally, set the value and stop checking.\n\t\t\t\t\tbeginTouchDrag( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// This was, in fact, an attempt to scroll. Abort.\n\t\t\t\t\twindow.removeEventListener( 'touchmove', onTouchMove );\n\t\t\t\t\twindow.removeEventListener( 'touchend', onTouchEnd );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\te.preventDefault();\n\t\t\t\tsetValueFromX( e.touches[ 0 ].clientX );\n\n\t\t\t}\n\n\t\t};\n\n\t\tconst onTouchEnd = () => {\n\t\t\tthis._callOnFinishChange();\n\t\t\tthis._setDraggingStyle( false );\n\t\t\twindow.removeEventListener( 'touchmove', onTouchMove );\n\t\t\twindow.removeEventListener( 'touchend', onTouchEnd );\n\t\t};\n\n\t\t// Mouse wheel\n\t\t// ---------------------------------------------------------------------\n\n\t\t// We have to use a debounced function to call onFinishChange because\n\t\t// there's no way to tell when the user is \"done\" mouse-wheeling.\n\t\tconst callOnFinishChange = this._callOnFinishChange.bind( this );\n\t\tconst WHEEL_DEBOUNCE_TIME = 400;\n\t\tlet wheelFinishChangeTimeout;\n\n\t\tconst onWheel = e => {\n\n\t\t\t// ignore vertical wheels if there's a scrollbar\n\t\t\tconst isVertical = Math.abs( e.deltaX ) < Math.abs( e.deltaY );\n\t\t\tif ( isVertical && this._hasScrollBar ) return;\n\n\t\t\te.preventDefault();\n\n\t\t\t// set value\n\t\t\tconst delta = this._normalizeMouseWheel( e ) * this._step;\n\t\t\tthis._snapClampSetValue( this.getValue() + delta );\n\n\t\t\t// force the input to updateDisplay when it's focused\n\t\t\tthis.$input.value = this.getValue();\n\n\t\t\t// debounce onFinishChange\n\t\t\tclearTimeout( wheelFinishChangeTimeout );\n\t\t\twheelFinishChangeTimeout = setTimeout( callOnFinishChange, WHEEL_DEBOUNCE_TIME );\n\n\t\t};\n\n\t\tthis.$slider.addEventListener( 'mousedown', mouseDown );\n\t\tthis.$slider.addEventListener( 'touchstart', onTouchStart, { passive: false } );\n\t\tthis.$slider.addEventListener( 'wheel', onWheel, { passive: false } );\n\n\t}\n\n\t_setDraggingStyle( active, axis = 'horizontal' ) {\n\t\tif ( this.$slider ) {\n\t\t\tthis.$slider.classList.toggle( 'lil-active', active );\n\t\t}\n\t\tdocument.body.classList.toggle( 'lil-dragging', active );\n\t\tdocument.body.classList.toggle( `lil-${axis}`, active );\n\t}\n\n\t_getImplicitStep() {\n\n\t\tif ( this._hasMin && this._hasMax ) {\n\t\t\treturn ( this._max - this._min ) / 1000;\n\t\t}\n\n\t\treturn 0.1;\n\n\t}\n\n\t_onUpdateMinMax() {\n\n\t\tif ( !this._hasSlider && this._hasMin && this._hasMax ) {\n\n\t\t\t// If this is the first time we're hearing about min and max\n\t\t\t// and we haven't explicitly stated what our step is, let's\n\t\t\t// update that too.\n\t\t\tif ( !this._stepExplicit ) {\n\t\t\t\tthis.step( this._getImplicitStep(), false );\n\t\t\t}\n\n\t\t\tthis._initSlider();\n\t\t\tthis.updateDisplay();\n\n\t\t}\n\n\t}\n\n\t_normalizeMouseWheel( e ) {\n\n\t\tlet { deltaX, deltaY } = e;\n\n\t\t// Safari and Chrome report weird non-integral values for a notched wheel,\n\t\t// but still expose actual lines scrolled via wheelDelta. Notched wheels\n\t\t// should behave the same way as arrow keys.\n\t\tif ( Math.floor( e.deltaY ) !== e.deltaY && e.wheelDelta ) {\n\t\t\tdeltaX = 0;\n\t\t\tdeltaY = -e.wheelDelta / 120;\n\t\t\tdeltaY *= this._stepExplicit ? 1 : 10;\n\t\t}\n\n\t\tconst wheel = deltaX + -deltaY;\n\n\t\treturn wheel;\n\n\t}\n\n\t_arrowKeyMultiplier( e ) {\n\n\t\tlet mult = this._stepExplicit ? 1 : 10;\n\n\t\tif ( e.shiftKey ) {\n\t\t\tmult *= 10;\n\t\t} else if ( e.altKey ) {\n\t\t\tmult /= 10;\n\t\t}\n\n\t\treturn mult;\n\n\t}\n\n\t_snap( value ) {\n\n\t\t// Make the steps \"start\" at min or max.\n\t\tlet offset = 0;\n\t\tif ( this._hasMin ) {\n\t\t\toffset = this._min;\n\t\t} else if ( this._hasMax ) {\n\t\t\toffset = this._max;\n\t\t}\n\n\t\tvalue -= offset;\n\n\t\tvalue = Math.round( value / this._step ) * this._step;\n\n\t\tvalue += offset;\n\n\t\t// Used to prevent \"flyaway\" decimals like 1.00000000000001\n\t\tvalue = parseFloat( value.toPrecision( 15 ) );\n\n\t\treturn value;\n\n\t}\n\n\t_clamp( value ) {\n\t\t// either condition is false if min or max is undefined\n\t\tif ( value < this._min ) value = this._min;\n\t\tif ( value > this._max ) value = this._max;\n\t\treturn value;\n\t}\n\n\t_snapClampSetValue( value ) {\n\t\tthis.setValue( this._clamp( this._snap( value ) ) );\n\t}\n\n\tget _hasScrollBar() {\n\t\tconst root = this.parent.root.$children;\n\t\treturn root.scrollHeight > root.clientHeight;\n\t}\n\n\tget _hasMin() {\n\t\treturn this._min !== undefined;\n\t}\n\n\tget _hasMax() {\n\t\treturn this._max !== undefined;\n\t}\n\n}\n\nclass OptionController extends Controller {\n\n\tconstructor( parent, object, property, options ) {\n\n\t\tsuper( parent, object, property, 'lil-option' );\n\n\t\tthis.$select = document.createElement( 'select' );\n\t\tthis.$select.setAttribute( 'aria-labelledby', this.$name.id );\n\n\t\tthis.$display = document.createElement( 'div' );\n\t\tthis.$display.classList.add( 'lil-display' );\n\n\t\tthis.$select.addEventListener( 'change', () => {\n\t\t\tthis.setValue( this._values[ this.$select.selectedIndex ] );\n\t\t\tthis._callOnFinishChange();\n\t\t} );\n\n\t\tthis.$select.addEventListener( 'focus', () => {\n\t\t\tthis.$display.classList.add( 'lil-focus' );\n\t\t} );\n\n\t\tthis.$select.addEventListener( 'blur', () => {\n\t\t\tthis.$display.classList.remove( 'lil-focus' );\n\t\t} );\n\n\t\tthis.$widget.appendChild( this.$select );\n\t\tthis.$widget.appendChild( this.$display );\n\n\t\tthis.$disable = this.$select;\n\n\t\tthis.options( options );\n\n\t}\n\n\toptions( options ) {\n\n\t\tthis._values = Array.isArray( options ) ? options : Object.values( options );\n\t\tthis._names = Array.isArray( options ) ? options : Object.keys( options );\n\n\t\tthis.$select.replaceChildren();\n\n\t\tthis._names.forEach( name => {\n\t\t\tconst $option = document.createElement( 'option' );\n\t\t\t$option.textContent = name;\n\t\t\tthis.$select.appendChild( $option );\n\t\t} );\n\n\t\tthis.updateDisplay();\n\n\t\treturn this;\n\n\t}\n\n\tupdateDisplay() {\n\t\tconst value = this.getValue();\n\t\tconst index = this._values.indexOf( value );\n\t\tthis.$select.selectedIndex = index;\n\t\tthis.$display.textContent = index === -1 ? value : this._names[ index ];\n\t\treturn this;\n\t}\n\n}\n\nclass StringController extends Controller {\n\n\tconstructor( parent, object, property ) {\n\n\t\tsuper( parent, object, property, 'lil-string' );\n\n\t\tthis.$input = document.createElement( 'input' );\n\t\tthis.$input.setAttribute( 'type', 'text' );\n\t\tthis.$input.setAttribute( 'spellcheck', 'false' );\n\t\tthis.$input.setAttribute( 'aria-labelledby', this.$name.id );\n\n\t\tthis.$input.addEventListener( 'input', () => {\n\t\t\tthis.setValue( this.$input.value );\n\t\t} );\n\n\t\tthis.$input.addEventListener( 'keydown', e => {\n\t\t\tif ( e.code === 'Enter' ) {\n\t\t\t\tthis.$input.blur();\n\t\t\t}\n\t\t} );\n\n\t\tthis.$input.addEventListener( 'blur', () => {\n\t\t\tthis._callOnFinishChange();\n\t\t} );\n\n\t\tthis.$widget.appendChild( this.$input );\n\n\t\tthis.$disable = this.$input;\n\n\t\tthis.updateDisplay();\n\n\t}\n\n\tupdateDisplay() {\n\t\tthis.$input.value = this.getValue();\n\t\treturn this;\n\t}\n\n}\n\nvar stylesheet = `.lil-gui {\n font-family: var(--font-family);\n font-size: var(--font-size);\n line-height: 1;\n font-weight: normal;\n font-style: normal;\n text-align: left;\n color: var(--text-color);\n user-select: none;\n -webkit-user-select: none;\n touch-action: manipulation;\n --background-color: #1f1f1f;\n --text-color: #ebebeb;\n --title-background-color: #111111;\n --title-text-color: #ebebeb;\n --widget-color: #424242;\n --hover-color: #4f4f4f;\n --focus-color: #595959;\n --number-color: #2cc9ff;\n --string-color: #a2db3c;\n --font-size: 11px;\n --input-font-size: 11px;\n --font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Arial, sans-serif;\n --font-family-mono: Menlo, Monaco, Consolas, \"Droid Sans Mono\", monospace;\n --padding: 4px;\n --spacing: 4px;\n --widget-height: 20px;\n --title-height: calc(var(--widget-height) + var(--spacing) * 1.25);\n --name-width: 45%;\n --slider-knob-width: 2px;\n --slider-input-width: 27%;\n --color-input-width: 27%;\n --slider-input-min-width: 45px;\n --color-input-min-width: 45px;\n --folder-indent: 7px;\n --widget-padding: 0 0 0 3px;\n --widget-border-radius: 2px;\n --checkbox-size: calc(0.75 * var(--widget-height));\n --scrollbar-width: 5px;\n}\n.lil-gui, .lil-gui * {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n}\n.lil-gui.lil-root {\n width: var(--width, 245px);\n display: flex;\n flex-direction: column;\n background: var(--background-color);\n}\n.lil-gui.lil-root > .lil-title {\n background: var(--title-background-color);\n color: var(--title-text-color);\n}\n.lil-gui.lil-root > .lil-children {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.lil-gui.lil-root > .lil-children::-webkit-scrollbar {\n width: var(--scrollbar-width);\n height: var(--scrollbar-width);\n background: var(--background-color);\n}\n.lil-gui.lil-root > .lil-children::-webkit-scrollbar-thumb {\n border-radius: var(--scrollbar-width);\n background: var(--focus-color);\n}\n@media (pointer: coarse) {\n .lil-gui.lil-allow-touch-styles, .lil-gui.lil-allow-touch-styles .lil-gui {\n --widget-height: 28px;\n --padding: 6px;\n --spacing: 6px;\n --font-size: 13px;\n --input-font-size: 16px;\n --folder-indent: 10px;\n --scrollbar-width: 7px;\n --slider-input-min-width: 50px;\n --color-input-min-width: 65px;\n }\n}\n.lil-gui.lil-force-touch-styles, .lil-gui.lil-force-touch-styles .lil-gui {\n --widget-height: 28px;\n --padding: 6px;\n --spacing: 6px;\n --font-size: 13px;\n --input-font-size: 16px;\n --folder-indent: 10px;\n --scrollbar-width: 7px;\n --slider-input-min-width: 50px;\n --color-input-min-width: 65px;\n}\n.lil-gui.lil-auto-place, .lil-gui.autoPlace {\n max-height: 100%;\n position: fixed;\n top: 0;\n right: 15px;\n z-index: 1001;\n}\n\n.lil-controller {\n display: flex;\n align-items: center;\n padding: 0 var(--padding);\n margin: var(--spacing) 0;\n}\n.lil-controller.lil-disabled {\n opacity: 0.5;\n}\n.lil-controller.lil-disabled, .lil-controller.lil-disabled * {\n pointer-events: none !important;\n}\n.lil-controller > .lil-name {\n min-width: var(--name-width);\n flex-shrink: 0;\n white-space: pre;\n padding-right: var(--spacing);\n line-height: var(--widget-height);\n}\n.lil-controller .lil-widget {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n min-height: var(--widget-height);\n}\n.lil-controller.lil-string input {\n color: var(--string-color);\n}\n.lil-controller.lil-boolean {\n cursor: pointer;\n}\n.lil-controller.lil-color .lil-display {\n width: 100%;\n height: var(--widget-height);\n border-radius: var(--widget-border-radius);\n position: relative;\n}\n@media (hover: hover) {\n .lil-controller.lil-color .lil-display:hover:before {\n content: \" \";\n display: block;\n position: absolute;\n border-radius: var(--widget-border-radius);\n border: 1px solid #fff9;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n }\n}\n.lil-controller.lil-color input[type=color] {\n opacity: 0;\n width: 100%;\n height: 100%;\n cursor: pointer;\n}\n.lil-controller.lil-color input[type=text] {\n margin-left: var(--spacing);\n font-family: var(--font-family-mono);\n min-width: var(--color-input-min-width);\n width: var(--color-input-width);\n flex-shrink: 0;\n}\n.lil-controller.lil-option select {\n opacity: 0;\n position: absolute;\n width: 100%;\n max-width: 100%;\n}\n.lil-controller.lil-option .lil-display {\n position: relative;\n pointer-events: none;\n border-radius: var(--widget-border-radius);\n height: var(--widget-height);\n line-height: var(--widget-height);\n max-width: 100%;\n overflow: hidden;\n word-break: break-all;\n padding-left: 0.55em;\n padding-right: 1.75em;\n background: var(--widget-color);\n}\n@media (hover: hover) {\n .lil-controller.lil-option .lil-display.lil-focus {\n background: var(--focus-color);\n }\n}\n.lil-controller.lil-option .lil-display.lil-active {\n background: var(--focus-color);\n}\n.lil-controller.lil-option .lil-display:after {\n font-family: \"lil-gui\";\n content: \"↕\";\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n padding-right: 0.375em;\n}\n.lil-controller.lil-option .lil-widget,\n.lil-controller.lil-option select {\n cursor: pointer;\n}\n@media (hover: hover) {\n .lil-controller.lil-option .lil-widget:hover .lil-display {\n background: var(--hover-color);\n }\n}\n.lil-controller.lil-number input {\n color: var(--number-color);\n}\n.lil-controller.lil-number.lil-has-slider input {\n margin-left: var(--spacing);\n width: var(--slider-input-width);\n min-width: var(--slider-input-min-width);\n flex-shrink: 0;\n}\n.lil-controller.lil-number .lil-slider {\n width: 100%;\n height: var(--widget-height);\n background: var(--widget-color);\n border-radius: var(--widget-border-radius);\n padding-right: var(--slider-knob-width);\n overflow: hidden;\n cursor: ew-resize;\n touch-action: pan-y;\n}\n@media (hover: hover) {\n .lil-controller.lil-number .lil-slider:hover {\n background: var(--hover-color);\n }\n}\n.lil-controller.lil-number .lil-slider.lil-active {\n background: var(--focus-color);\n}\n.lil-controller.lil-number .lil-slider.lil-active .lil-fill {\n opacity: 0.95;\n}\n.lil-controller.lil-number .lil-fill {\n height: 100%;\n border-right: var(--slider-knob-width) solid var(--number-color);\n box-sizing: content-box;\n}\n\n.lil-dragging .lil-gui {\n --hover-color: var(--widget-color);\n}\n.lil-dragging * {\n cursor: ew-resize !important;\n}\n.lil-dragging.lil-vertical * {\n cursor: ns-resize !important;\n}\n\n.lil-gui .lil-title {\n height: var(--title-height);\n font-weight: 600;\n padding: 0 var(--padding);\n width: 100%;\n text-align: left;\n background: none;\n text-decoration-skip: objects;\n}\n.lil-gui .lil-title:before {\n font-family: \"lil-gui\";\n content: \"▾\";\n padding-right: 2px;\n display: inline-block;\n}\n.lil-gui .lil-title:active {\n background: var(--title-background-color);\n opacity: 0.75;\n}\n@media (hover: hover) {\n body:not(.lil-dragging) .lil-gui .lil-title:hover {\n background: var(--title-background-color);\n opacity: 0.85;\n }\n .lil-gui .lil-title:focus {\n text-decoration: underline var(--focus-color);\n }\n}\n.lil-gui.lil-root > .lil-title:focus {\n text-decoration: none !important;\n}\n.lil-gui.lil-closed > .lil-title:before {\n content: \"▸\";\n}\n.lil-gui.lil-closed > .lil-children {\n transform: translateY(-7px);\n opacity: 0;\n}\n.lil-gui.lil-closed:not(.lil-transition) > .lil-children {\n display: none;\n}\n.lil-gui.lil-transition > .lil-children {\n transition-duration: 300ms;\n transition-property: height, opacity, transform;\n transition-timing-function: cubic-bezier(0.2, 0.6, 0.35, 1);\n overflow: hidden;\n pointer-events: none;\n}\n.lil-gui .lil-children:empty:before {\n content: \"Empty\";\n padding: 0 var(--padding);\n margin: var(--spacing) 0;\n display: block;\n height: var(--widget-height);\n font-style: italic;\n line-height: var(--widget-height);\n opacity: 0.5;\n}\n.lil-gui.lil-root > .lil-children > .lil-gui > .lil-title {\n border: 0 solid var(--widget-color);\n border-width: 1px 0;\n transition: border-color 300ms;\n}\n.lil-gui.lil-root > .lil-children > .lil-gui.lil-closed > .lil-title {\n border-bottom-color: transparent;\n}\n.lil-gui + .lil-controller {\n border-top: 1px solid var(--widget-color);\n margin-top: 0;\n padding-top: var(--spacing);\n}\n.lil-gui .lil-gui .lil-gui > .lil-title {\n border: none;\n}\n.lil-gui .lil-gui .lil-gui > .lil-children {\n border: none;\n margin-left: var(--folder-indent);\n border-left: 2px solid var(--widget-color);\n}\n.lil-gui .lil-gui .lil-controller {\n border: none;\n}\n\n.lil-gui label, .lil-gui input, .lil-gui button {\n -webkit-tap-highlight-color: transparent;\n}\n.lil-gui input {\n border: 0;\n outline: none;\n font-family: var(--font-family);\n font-size: var(--input-font-size);\n border-radius: var(--widget-border-radius);\n height: var(--widget-height);\n background: var(--widget-color);\n color: var(--text-color);\n width: 100%;\n}\n@media (hover: hover) {\n .lil-gui input:hover {\n background: var(--hover-color);\n }\n .lil-gui input:active {\n background: var(--focus-color);\n }\n}\n.lil-gui input:disabled {\n opacity: 1;\n}\n.lil-gui input[type=text],\n.lil-gui input[type=number] {\n padding: var(--widget-padding);\n -moz-appearance: textfield;\n}\n.lil-gui input[type=text]:focus,\n.lil-gui input[type=number]:focus {\n background: var(--focus-color);\n}\n.lil-gui input[type=checkbox] {\n appearance: none;\n width: var(--checkbox-size);\n height: var(--checkbox-size);\n border-radius: var(--widget-border-radius);\n text-align: center;\n cursor: pointer;\n}\n.lil-gui input[type=checkbox]:checked:before {\n font-family: \"lil-gui\";\n content: \"✓\";\n font-size: var(--checkbox-size);\n line-height: var(--checkbox-size);\n}\n@media (hover: hover) {\n .lil-gui input[type=checkbox]:focus {\n box-shadow: inset 0 0 0 1px var(--focus-color);\n }\n}\n.lil-gui button {\n outline: none;\n cursor: pointer;\n font-family: var(--font-family);\n font-size: var(--font-size);\n color: var(--text-color);\n width: 100%;\n border: none;\n}\n.lil-gui .lil-controller button {\n height: var(--widget-height);\n text-transform: none;\n background: var(--widget-color);\n border-radius: var(--widget-border-radius);\n}\n@media (hover: hover) {\n .lil-gui .lil-controller button:hover {\n background: var(--hover-color);\n }\n .lil-gui .lil-controller button:focus {\n box-shadow: inset 0 0 0 1px var(--focus-color);\n }\n}\n.lil-gui .lil-controller button:active {\n background: var(--focus-color);\n}\n\n@font-face {\n font-family: \"lil-gui\";\n src: url(\"data:application/font-woff2;charset=utf-8;base64,d09GMgABAAAAAALkAAsAAAAABtQAAAKVAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHFQGYACDMgqBBIEbATYCJAMUCwwABCAFhAoHgQQbHAbIDiUFEYVARAAAYQTVWNmz9MxhEgodq49wYRUFKE8GWNiUBxI2LBRaVnc51U83Gmhs0Q7JXWMiz5eteLwrKwuxHO8VFxUX9UpZBs6pa5ABRwHA+t3UxUnH20EvVknRerzQgX6xC/GH6ZUvTcAjAv122dF28OTqCXrPuyaDER30YBA1xnkVutDDo4oCi71Ca7rrV9xS8dZHbPHefsuwIyCpmT7j+MnjAH5X3984UZoFFuJ0yiZ4XEJFxjagEBeqs+e1iyK8Xf/nOuwF+vVK0ur765+vf7txotUi0m3N0m/84RGSrBCNrh8Ee5GjODjF4gnWP+dJrH/Lk9k4oT6d+gr6g/wssA2j64JJGP6cmx554vUZnpZfn6ZfX2bMwPPrlANsB86/DiHjhl0OP+c87+gaJo/gY084s3HoYL/ZkWHTRfBXvvoHnnkHvngKun4KBE/ede7tvq3/vQOxDXB1/fdNz6XbPdcr0Vhpojj9dG+owuSKFsslCi1tgEjirjXdwMiov2EioadxmqTHUCIwo8NgQaeIasAi0fTYSPTbSmwbMOFduyh9wvBrESGY0MtgRjtgQR8Q1bRPohn2UoCRZf9wyYANMXFeJTysqAe0I4mrherOekFdKMrYvJjLvOIUM9SuwYB5DVZUwwVjJJOaUnZCmcEkIZZrKqNvRGRMvmFZsmhP4VMKCSXBhSqUBxgMS7h0cZvEd71AWkEhGWaeMFcNnpqyJkyXgYL7PQ1MoSq0wDAkRtJIijkZSmqYTiSImfLiSWXIZwhRh3Rug2X0kk1Dgj+Iu43u5p98ghopcpSo0Uyc8SnjlYX59WUeaMoDqmVD2TOWD9a4pCRAzf2ECgwGcrHjPOWY9bNxq/OL3I/QjwEAAAA=\") format(\"woff2\");\n}`;\n\nfunction _injectStyles( cssContent ) {\n\tconst injected = document.createElement( 'style' );\n\tinjected.innerHTML = cssContent;\n\tconst before = document.querySelector( 'head link[rel=stylesheet], head style' );\n\tif ( before ) {\n\t\tdocument.head.insertBefore( injected, before );\n\t} else {\n\t\tdocument.head.appendChild( injected );\n\t}\n}\n\n\nlet stylesInjected = false;\n\nclass GUI {\n\n\t/**\n\t * Creates a panel that holds controllers.\n\t * @example\n\t * new GUI();\n\t * new GUI( { container: document.getElementById( 'custom' ) } );\n\t *\n\t * @param {object} [options]\n\t * @param {boolean} [options.autoPlace=true]\n\t * Adds the GUI to `document.body` and fixes it to the top right of the page.\n\t *\n\t * @param {Node} [options.container]\n\t * Adds the GUI to this DOM element. Overrides `autoPlace`.\n\t *\n\t * @param {number} [options.width=245]\n\t * Width of the GUI in pixels, usually set when name labels become too long. Note that you can make\n\t * name labels wider in CSS with `.lil‑gui { ‑‑name‑width: 55% }`.\n\t *\n\t * @param {string} [options.title=Controls]\n\t * Name to display in the title bar.\n\t *\n\t * @param {boolean} [options.closeFolders=false]\n\t * Pass `true` to close all folders in this GUI by default.\n\t *\n\t * @param {boolean} [options.injectStyles=true]\n\t * Injects the default stylesheet into the page if this is the first GUI.\n\t * Pass `false` to use your own stylesheet.\n\t *\n\t * @param {number} [options.touchStyles=true]\n\t * Makes controllers larger on touch devices. Pass `false` to disable touch styles.\n\t *\n\t * @param {GUI} [options.parent]\n\t * Adds this GUI as a child in another GUI. Usually this is done for you by `addFolder()`.\n\t */\n\tconstructor( {\n\t\tparent,\n\t\tautoPlace = parent === undefined,\n\t\tcontainer,\n\t\twidth,\n\t\ttitle = 'Controls',\n\t\tcloseFolders = false,\n\t\tinjectStyles = true,\n\t\ttouchStyles = true\n\t} = {} ) {\n\n\t\t/**\n\t\t * The GUI containing this folder, or `undefined` if this is the root GUI.\n\t\t * @type {GUI}\n\t\t */\n\t\tthis.parent = parent;\n\n\t\t/**\n\t\t * The top level GUI containing this folder, or `this` if this is the root GUI.\n\t\t * @type {GUI}\n\t\t */\n\t\tthis.root = parent ? parent.root : this;\n\n\t\t/**\n\t\t * The list of controllers and folders contained by this GUI.\n\t\t * @type {Array<GUI|Controller>}\n\t\t */\n\t\tthis.children = [];\n\n\t\t/**\n\t\t * The list of controllers contained by this GUI.\n\t\t * @type {Array<Controller>}\n\t\t */\n\t\tthis.controllers = [];\n\n\t\t/**\n\t\t * The list of folders contained by this GUI.\n\t\t * @type {Array<GUI>}\n\t\t */\n\t\tthis.folders = [];\n\n\t\t/**\n\t\t * Used to determine if the GUI is closed. Use `gui.open()` or `gui.close()` to change this.\n\t\t * @type {boolean}\n\t\t */\n\t\tthis._closed = false;\n\n\t\t/**\n\t\t * Used to determine if the GUI is hidden. Use `gui.show()` or `gui.hide()` to change this.\n\t\t * @type {boolean}\n\t\t */\n\t\tthis._hidden = false;\n\n\t\t/**\n\t\t * The outermost container element.\n\t\t * @type {HTMLElement}\n\t\t */\n\t\tthis.domElement = document.createElement( 'div' );\n\t\tthis.domElement.classList.add( 'lil-gui' );\n\n\t\t/**\n\t\t * The DOM element that contains the title.\n\t\t * @type {HTMLElement}\n\t\t */\n\t\tthis.$title = document.createElement( 'button' );\n\t\tthis.$title.classList.add( 'lil-title' );\n\t\tthis.$title.setAttribute( 'aria-expanded', true );\n\n\t\tthis.$title.addEventListener( 'click', () => this.openAnimated( this._closed ) );\n\n\t\t// enables :active pseudo class on mobile\n\t\tthis.$title.addEventListener( 'touchstart', () => {}, { passive: true } );\n\n\t\t/**\n\t\t * The DOM element that contains children.\n\t\t * @type {HTMLElement}\n\t\t */\n\t\tthis.$children = document.createElement( 'div' );\n\t\tthis.$children.classList.add( 'lil-children' );\n\n\t\tthis.domElement.appendChild( this.$title );\n\t\tthis.domElement.appendChild( this.$children );\n\n\t\tthis.title( title );\n\n\t\tif ( this.parent ) {\n\n\t\t\tthis.parent.children.push( this );\n\t\t\tthis.parent.folders.push( this );\n\n\t\t\tthis.parent.$children.appendChild( this.domElement );\n\n\t\t\t// Stop the constructor early, everything onward only applies to root GUI's\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.domElement.classList.add( 'lil-root' );\n\n\t\tif ( touchStyles ) {\n\t\t\tthis.domElement.classList.add( 'lil-allow-touch-styles' );\n\t\t}\n\n\t\t// Inject stylesheet if we haven't done that yet\n\t\tif ( !stylesInjected && injectStyles ) {\n\t\t\t_injectStyles( stylesheet );\n\t\t\tstylesInjected = true;\n\t\t}\n\n\t\tif ( container ) {\n\n\t\t\tcontainer.appendChild( this.domElement );\n\n\t\t} else if ( autoPlace ) {\n\n\t\t\t// https://github.com/georgealways/lil-gui/pull/154\n\t\t\t// .autoPlace is deprecated in 0.21.0, but unlikely to conflict with user styles.\n\t\t\t// keeping it for backwards compatibility.\n\t\t\tthis.domElement.classList.add( 'lil-auto-place', 'autoPlace' );\n\t\t\tdocument.body.appendChild( this.domElement );\n\n\t\t}\n\n\t\tif ( width ) {\n\t\t\tthis.domElement.style.setProperty( '--width', width + 'px' );\n\t\t}\n\n\t\tthis._closeFolders = closeFolders;\n\n\t}\n\n\t/**\n\t * Adds a controller to the GUI, inferring controller type using the `typeof` operator.\n\t * @example\n\t * gui.add( object, 'property' );\n\t * gui.add( object, 'number', 0, 100, 1 );\n\t * gui.add( object, 'options', [ 1, 2, 3 ] );\n\t *\n\t * @param {object} object The object the controller will modify.\n\t * @param {string} property Name of the property to control.\n\t * @param {number|object|Array} [$1] Minimum value for number controllers, or the set of\n\t * selectable values for a dropdown.\n\t * @param {number} [max] Maximum value for number controllers.\n\t * @param {number} [step] Step value for number controllers.\n\t * @returns {Controller}\n\t */\n\tadd( object, property, $1, max, step ) {\n\n\t\tif ( Object( $1 ) === $1 ) {\n\n\t\t\treturn new OptionController( this, object, property, $1 );\n\n\t\t}\n\n\t\tconst initialValue = object[ property ];\n\n\t\tswitch ( typeof initialValue ) {\n\n\t\t\tcase 'number':\n\n\t\t\t\treturn new NumberController( this, object, property, $1, max, step );\n\n\t\t\tcase 'boolean':\n\n\t\t\t\treturn new BooleanController( this, object, property );\n\n\t\t\tcase 'string':\n\n\t\t\t\treturn new StringController( this, object, property );\n\n\t\t\tcase 'function':\n\n\t\t\t\treturn new FunctionController( this, object, property );\n\n\t\t}\n\n\t\tconsole.error( `gui.add failed\n\tproperty:`, property, `\n\tobject:`, object, `\n\tvalue:`, initialValue );\n\n\t}\n\n\t/**\n\t * Adds a color controller to the GUI.\n\t * @example\n\t * params = {\n\t * \tcssColor: '#ff00ff',\n\t * \trgbColor: { r: 0, g: 0.2, b: 0.4 },\n\t * \tcustomRange: [ 0, 127, 255 ],\n\t * };\n\t *\n\t * gui.addColor( params, 'cssColor' );\n\t * gui.addColor( params, 'rgbColor' );\n\t * gui.addColor( params, 'customRange', 255 );\n\t *\n\t * @param {object} object The object the controller will modify.\n\t * @param {string} property Name of the property to control.\n\t * @param {number} rgbScale Maximum value for a color channel when using an RGB color. You may\n\t * need to set this to 255 if your colors are too bright.\n\t * @returns {Controller}\n\t */\n\taddColor( object, property, rgbScale = 1 ) {\n\t\treturn new ColorController( this, object, property, rgbScale );\n\t}\n\n\t/**\n\t * Adds a folder to the GUI, which is just another GUI. This method returns\n\t * the nested GUI so you can add controllers to it.\n\t * @example\n\t * const folder = gui.addFolder( 'Position' );\n\t * folder.add( position, 'x' );\n\t * folder.add( position, 'y' );\n\t * folder.add( position, 'z' );\n\t *\n\t * @param {string} title Name to display in the folder's title bar.\n\t * @returns {GUI}\n\t */\n\taddFolder( title ) {\n\t\tconst folder = new GUI( { parent: this, title } );\n\t\tif ( this.root._closeFolders ) folder.close();\n\t\treturn folder;\n\t}\n\n\t/**\n\t * Recalls values that were saved with `gui.save()`.\n\t * @param {object} obj\n\t * @param {boolean} recursive Pass false to exclude folders descending from this GUI.\n\t * @returns {this}\n\t */\n\tload( obj, recursive = true ) {\n\n\t\tif ( obj.controllers ) {\n\n\t\t\tthis.controllers.forEach( c => {\n\n\t\t\t\tif ( c instanceof FunctionController ) return;\n\n\t\t\t\tif ( c._name in obj.controllers ) {\n\t\t\t\t\tc.load( obj.controllers[ c._name ] );\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t}\n\n\t\tif ( recursive && obj.folders ) {\n\n\t\t\tthis.folders.forEach( f => {\n\n\t\t\t\tif ( f._title in obj.folders ) {\n\t\t\t\t\tf.load( obj.folders[ f._title ] );\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns an object mapping controller names to values. The object can be passed to `gui.load()` to\n\t * recall these values.\n\t * @example\n\t * {\n\t * \tcontrollers: {\n\t * \t\tprop1: 1,\n\t * \t\tprop2: 'value',\n\t * \t\t...\n\t * \t},\n\t * \tfolders: {\n\t * \t\tfolderName1: { controllers, folders },\n\t * \t\tfolderName2: { controllers, folders }\n\t * \t\t...\n\t * \t}\n\t * }\n\t *\n\t * @param {boolean} recursive Pass false to exclude folders descending from this GUI.\n\t * @returns {object}\n\t */\n\tsave( recursive = true ) {\n\n\t\tconst obj = {\n\t\t\tcontrollers: {},\n\t\t\tfolders: {}\n\t\t};\n\n\t\tthis.controllers.forEach( c => {\n\n\t\t\tif ( c instanceof FunctionController ) return;\n\n\t\t\tif ( c._name in obj.controllers ) {\n\t\t\t\tthrow new Error( `Cannot save GUI with duplicate property \"${c._name}\"` );\n\t\t\t}\n\n\t\t\tobj.controllers[ c._name ] = c.save();\n\n\t\t} );\n\n\t\tif ( recursive ) {\n\n\t\t\tthis.folders.forEach( f => {\n\n\t\t\t\tif ( f._title in obj.folders ) {\n\t\t\t\t\tthrow new Error( `Cannot save GUI with duplicate folder \"${f._title}\"` );\n\t\t\t\t}\n\n\t\t\t\tobj.folders[ f._title ] = f.save();\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn obj;\n\n\t}\n\n\t/**\n\t * Opens a GUI or folder. GUI and folders are open by default.\n\t * @param {boolean} open Pass false to close.\n\t * @returns {this}\n\t * @example\n\t * gui.open(); // open\n\t * gui.open( false ); // close\n\t * gui.open( gui._closed ); // toggle\n\t */\n\topen( open = true ) {\n\n\t\tthis._setClosed( !open );\n\n\t\tthis.$title.setAttribute( 'aria-expanded', !this._closed );\n\t\tthis.domElement.classList.toggle( 'lil-closed', this._closed );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Closes the GUI.\n\t * @returns {this}\n\t */\n\tclose() {\n\t\treturn this.open( false );\n\t}\n\n\t_setClosed( closed ) {\n\t\tif ( this._closed === closed ) return;\n\t\tthis._closed = closed;\n\t\tthis._callOnOpenClose( this );\n\t}\n\n\t/**\n\t * Shows the GUI after it's been hidden.\n\t * @param {boolean} show\n\t * @returns {this}\n\t * @example\n\t * gui.show();\n\t * gui.show( false ); // hide\n\t * gui.show( gui._hidden ); // toggle\n\t */\n\tshow( show = true ) {\n\n\t\tthis._hidden = !show;\n\n\t\tthis.domElement.style.display = this._hidden ? 'none' : '';\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Hides the GUI.\n\t * @returns {this}\n\t */\n\thide() {\n\t\treturn this.show( false );\n\t}\n\n\topenAnimated( open = true ) {\n\n\t\t// set state immediately\n\t\tthis._setClosed( !open );\n\n\t\tthis.$title.setAttribute( 'aria-expanded', !this._closed );\n\n\t\t// wait for next frame to measure $children\n\t\trequestAnimationFrame( () => {\n\n\t\t\t// explicitly set initial height for transition\n\t\t\tconst initialHeight = this.$children.clientHeight;\n\t\t\tthis.$children.style.height = initialHeight + 'px';\n\n\t\t\tthis.domElement.classList.add( 'lil-transition' );\n\n\t\t\tconst onTransitionEnd = e => {\n\t\t\t\tif ( e.target !== this.$children ) return;\n\t\t\t\tthis.$children.style.height = '';\n\t\t\t\tthis.domElement.classList.remove( 'lil-transition' );\n\t\t\t\tthis.$children.removeEventListener( 'transitionend', onTransitionEnd );\n\t\t\t};\n\n\t\t\tthis.$children.addEventListener( 'transitionend', onTransitionEnd );\n\n\t\t\t// todo: this is wrong if children's scrollHeight makes for a gui taller than maxHeight\n\t\t\tconst targetHeight = !open ? 0 : this.$children.scrollHeight;\n\n\t\t\tthis.domElement.classList.toggle( 'lil-closed', !open );\n\n\t\t\trequestAnimationFrame( () => {\n\t\t\t\tthis.$children.style.height = targetHeight + 'px';\n\t\t\t} );\n\n\t\t} );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Change the title of this GUI.\n\t * @param {string} title\n\t * @returns {this}\n\t */\n\ttitle( title ) {\n\t\t/**\n\t\t * Current title of the GUI. Use `gui.title( 'Title' )` to modify this value.\n\t\t * @type {string}\n\t\t */\n\t\tthis._title = title;\n\t\tthis.$title.textContent = title;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Resets all controllers to their initial values.\n\t * @param {boolean} recursive Pass false to exclude folders descending from this GUI.\n\t * @returns {this}\n\t */\n\treset( recursive = true ) {\n\t\tconst controllers = recursive ? this.controllersRecursive() : this.controllers;\n\t\tcontrollers.forEach( c => c.reset() );\n\t\treturn this;\n\t}\n\n\t/**\n\t * Pass a function to be called whenever a controller in this GUI changes.\n\t * @param {function({object:object, property:string, value:any, controller:Controller})} callback\n\t * @returns {this}\n\t * @example\n\t * gui.onChange( event => {\n\t * \tevent.object // object that was modified\n\t * \tevent.property // string, name of property\n\t * \tevent.value // new value of controller\n\t * \tevent.controller // controller that was modified\n\t * } );\n\t */\n\tonChange( callback ) {\n\t\t/**\n\t\t * Used to access the function bound to `onChange` events. Don't modify this value\n\t\t * directly. Use the `gui.onChange( callback )` method instead.\n\t\t * @type {Function}\n\t\t */\n\t\tthis._onChange = callback;\n\t\treturn this;\n\t}\n\n\t_callOnChange( controller ) {\n\n\t\tif ( this.parent ) {\n\t\t\tthis.parent._callOnChange( controller );\n\t\t}\n\n\t\tif ( this._onChange !== undefined ) {\n\t\t\tthis._onChange.call( this, {\n\t\t\t\tobject: controller.object,\n\t\t\t\tproperty: controller.property,\n\t\t\t\tvalue: controller.getValue(),\n\t\t\t\tcontroller\n\t\t\t} );\n\t\t}\n\n\t}\n\n\t/**\n\t * Pass a function to be called whenever a controller in this GUI has finished changing.\n\t * @param {function({object:object, property:string, value:any, controller:Controller})} callback\n\t * @returns {this}\n\t * @example\n\t * gui.onFinishChange( event => {\n\t * \tevent.object // object that was modified\n\t * \tevent.property // string, name of property\n\t * \tevent.value // new value of controller\n\t * \tevent.controller // controller that was modified\n\t * } );\n\t */\n\tonFinishChange( callback ) {\n\t\t/**\n\t\t * Used to access the function bound to `onFinishChange` events. Don't modify this value\n\t\t * directly. Use the `gui.onFinishChange( callback )` method instead.\n\t\t * @type {Function}\n\t\t */\n\t\tthis._onFinishChange = callback;\n\t\treturn this;\n\t}\n\n\t_callOnFinishChange( controller ) {\n\n\t\tif ( this.parent ) {\n\t\t\tthis.parent._callOnFinishChange( controller );\n\t\t}\n\n\t\tif ( this._onFinishChange !== undefined ) {\n\t\t\tthis._onFinishChange.call( this, {\n\t\t\t\tobject: controller.object,\n\t\t\t\tproperty: controller.property,\n\t\t\t\tvalue: controller.getValue(),\n\t\t\t\tcontroller\n\t\t\t} );\n\t\t}\n\n\t}\n\n\t/**\n\t * Pass a function to be called when this GUI or its descendants are opened or closed.\n\t * @param {function(GUI)} callback\n\t * @returns {this}\n\t * @example\n\t * gui.onOpenClose( changedGUI => {\n\t * \tconsole.log( changedGUI._closed );\n\t * } );\n\t */\n\tonOpenClose( callback ) {\n\t\tthis._onOpenClose = callback;\n\t\treturn this;\n\t}\n\n\t_callOnOpenClose( changedGUI ) {\n\t\tif ( this.parent ) {\n\t\t\tthis.parent._callOnOpenClose( changedGUI );\n\t\t}\n\n\t\tif ( this._onOpenClose !== undefined ) {\n\t\t\tthis._onOpenClose.call( this, changedGUI );\n\t\t}\n\t}\n\n\t/**\n\t * Destroys all DOM elements and event listeners associated with this GUI.\n\t */\n\tdestroy() {\n\n\t\tif ( this.parent ) {\n\t\t\tthis.parent.children.splice( this.parent.children.indexOf( this ), 1 );\n\t\t\tthis.parent.folders.splice( this.parent.folders.indexOf( this ), 1 );\n\t\t}\n\n\t\tif ( this.domElement.parentElement ) {\n\t\t\tthis.domElement.parentElement.removeChild( this.domElement );\n\t\t}\n\n\t\tArray.from( this.children ).forEach( c => c.destroy() );\n\n\t}\n\n\t/**\n\t * Returns an array of controllers contained by this GUI and its descendents.\n\t * @returns {Controller[]}\n\t */\n\tcontrollersRecursive() {\n\t\tlet controllers = Array.from( this.controllers );\n\t\tthis.folders.forEach( f => {\n\t\t\tcontrollers = controllers.concat( f.controllersRecursive() );\n\t\t} );\n\t\treturn controllers;\n\t}\n\n\t/**\n\t * Returns an array of folders contained by this GUI and its descendents.\n\t * @returns {GUI[]}\n\t */\n\tfoldersRecursive() {\n\t\tlet folders = Array.from( this.folders );\n\t\tthis.folders.forEach( f => {\n\t\t\tfolders = folders.concat( f.foldersRecursive() );\n\t\t} );\n\t\treturn folders;\n\t}\n\n}\n\nexport { BooleanController, ColorController, Controller, FunctionController, GUI, NumberController, OptionController, StringController, GUI as default };\n","import {\n Config,\n Flags,\n NumericParameters,\n PixelStreaming\n} from '@epicgames-ps/lib-pixelstreamingfrontend-ue5.5'\nimport { Addons } from 'hj-gis-sdk'\nconst { World, PerspectiveCamera } = Addons\nexport async function initializeApp(url: string, parentElement: HTMLElement) {\n const config = new Config({\n initialSettings: {\n ss: url,\n StreamerId: '',\n AutoPlayVideo: true,\n StartVideoMuted: true,\n [Flags.HoveringMouseMode]: true,\n [Flags.TouchInput]: true,\n [Flags.FakeMouseWithTouches]: true\n\n /// 这是一些处理网络质量的参数 降低视频质量以减少网络带宽消耗带来的卡顿问题\n // [NumericParameters.WebRTCFPS]: 30, // 限制帧率为30fps\n // [NumericParameters.WebRTCMinBitrate]: 500, // 设置最小比特率为500kbps\n // [NumericParameters.WebRTCMaxBitrate]: 1000, // 设置最大比特率为2000kbps\n // [NumericParameters.MinQuality]: 0.3, // 设置最小质量为0.3\n // [NumericParameters.MaxQuality]: 0.6 // 设置最大质量为0.8\n }\n })\n const stream = new PixelStreaming(config, {\n videoElementParent: parentElement\n })\n stream.connect()\n let { resolve, promise } = Promise.withResolvers()\n stream.addEventListener('playStream', () => {\n console.log('PlayStreamEvent')\n resolve(null)\n })\n await promise\n let world = new World(stream)\n world.tools.matchView.excute()\n let camera = new PerspectiveCamera(world.rpc)\n camera.transform.position.set(0, 0, 0)\n\n return {\n world,\n camera\n }\n}\n"],"names":["Logger","TWO_PWR_32_DBL","defaultsRead","defaultsWrite","MessageHelpers.createMessage","Messages.ping","this","splitSections","parseRtpParameters","config","Messages.config","Messages.streamerList","Messages.subscribeFailed","Messages.streamerIdChanged","Messages.playerCount","Messages.answer","Messages.offer","Messages.peerDataChannels","Messages.iceCandidate","Messages.listStreamers","Messages.subscribe","Messages.layerPreference","Messages.pong","Messages.peerDataChannelsReady","offer","answer","Messages.dataChannelRequest","World","Transform","PerspectiveCamera","UERPCNode","WeatherType","MeasurementType","Animation"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA,MAAM,2BAA2B,CAAC;AAClC,IAAI,WAAW,CAAC,QAAQ,EAAE;AAC1B,QAAQ,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AACxB,QAAQ,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAClC,KAAK;AACL,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;AACtC;AACA,QAAQ,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AACxB,KAAK;AACL,IAAI,OAAO,CAAC,GAAG,IAAI,EAAE;AACrB,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAC1B,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,YAAY,SAAS,WAAW,CAAC;AAC9C,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,EAAE,CAAC;AAChB,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC;AACzC,KAAK;AACL,IAAI,sBAAsB,CAAC,SAAS,EAAE,QAAQ,EAAE;AAChD,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AACjD,YAAY,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAClE,YAAY,IAAI,SAAS,KAAK,SAAS,EAAE;AACzC,gBAAgB,OAAO,IAAI,CAAC;AAC5B,aAAa;AACb,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AACvD,gBAAgB,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAC/C,gBAAgB,IAAI,SAAS,CAAC,QAAQ,KAAK,QAAQ,EAAE;AACrD;AACA,oBAAoB,KAAK,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,oBAAoB,CAAC,CAAC;AACzF;AACA,oBAAoB,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,oBAAoB,MAAM;AAC1B,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL;AACA;AACA;AACA,IAAI,WAAW,CAAC,SAAS,EAAE,QAAQ,EAAE;AACrC,QAAQ,OAAO,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC5C,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE;AAC5B,QAAQ,IAAI,EAAE,CAAC;AACf;AACA;AACA,QAAQ,MAAM,oBAAoB,GAAG,IAAI,2BAA2B,CAAC,QAAQ,CAAC,CAAC;AAC/E,QAAQ,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;AAChE;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AAClD,YAAY,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,KAAK,EAAE,CAAC,CAAC;AAC7D,SAAS;AACT,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,eAAe;AAClC,aAAa,GAAG,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,CAAC,CAAC;AAC9I,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE;AAC9B,QAAQ,IAAI,EAAE,CAAC;AACf;AACA,QAAQ,MAAM,iBAAiB,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACjD;AACA;AACA,QAAQ,MAAM,oBAAoB,GAAG,IAAI,2BAA2B,CAAC,CAAC,GAAG,IAAI,KAAK;AAClF,YAAY,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC3B,YAAY,IAAI,CAAC,sBAAsB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC7D,SAAS,CAAC,CAAC;AACX,QAAQ,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,oBAAoB,EAAE,iBAAiB,CAAC,CAAC;AACnF;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AAClD,YAAY,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,KAAK,EAAE,CAAC,CAAC;AAC7D,SAAS;AACT,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,eAAe;AAClC,aAAa,GAAG,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,CAAC,CAAC;AAC9I,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,cAAc,CAAC,SAAS,EAAE,QAAQ,EAAE;AACxC,QAAQ,IAAI,CAAC,sBAAsB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACzD,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL;AACA;AACA;AACA,IAAI,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE;AAC7B,QAAQ,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACxD,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,kBAAkB,CAAC,SAAS,EAAE;AAClC,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AACjD,YAAY,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAClE,YAAY,IAAI,SAAS,KAAK,SAAS,EAAE;AACzC,gBAAgB,OAAO,IAAI,CAAC;AAC5B,aAAa;AACb;AACA,YAAY,KAAK,MAAM,YAAY,IAAI,SAAS,EAAE;AAClD,gBAAgB,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,YAAY,CAAC,oBAAoB,CAAC,CAAC;AACvF,aAAa;AACb;AACA,YAAY,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACnD,SAAS;AACT,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,EAAE;AAC7B,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AACjD,YAAY,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAClE,YAAY,IAAI,SAAS,KAAK,SAAS,EAAE;AACzC,gBAAgB,OAAO,KAAK,CAAC;AAC7B,aAAa;AACb;AACA,YAAY,KAAK,MAAM,YAAY,IAAI,SAAS,EAAE;AAClD,gBAAgB,YAAY,CAAC,oBAAoB,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AACnE,aAAa;AACb;AACA,YAAY,KAAK,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;AACtD,YAAY,OAAO,IAAI,CAAC;AACxB,SAAS;AACT,QAAQ,OAAO,KAAK,CAAC;AACrB,KAAK;AACL;;AC/OA;AAGA;AACA;AACA;AACO,MAAM,kBAAkB,SAAS,YAAY,CAAC;AACrD;AACA;AACA;AACA;AACA,IAAI,WAAW,CAAC,SAAS,EAAE;AAC3B,QAAQ,KAAK,EAAE,CAAC;AAChB,QAAQ,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;AAC/B,QAAQ,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AACnC,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,WAAW,CAAC,GAAG,EAAE;AACrB,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;AAC5B,YAAY,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrC,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,CAAC,aAAa,EAAE;AAC3B,QAAQA,YAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACnC,QAAQ,IAAI;AACZ,YAAY,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AAC1E,YAAY,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;AAC/D,YAAY,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC;AACjE,YAAY,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC1E,YAAY,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AAC9E,YAAY,IAAI,CAAC,SAAS,CAAC,eAAe,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;AAC1F,YAAY,OAAO,IAAI,CAAC;AACxB,SAAS;AACT,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAYA,YAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAChC,YAAY,OAAO,KAAK,CAAC;AACzB,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE;AAC7B,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;AAC5B,YAAY,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC/C,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,WAAW,GAAG;AAClB,QAAQ,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,MAAM,CAAC;AACjF,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,qBAAqB,CAAC,KAAK,EAAE;AACjC;AACA,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;AACnC,YAAY,OAAO;AACnB,SAAS;AACT;AACA,QAAQ,KAAK,CAAC,IAAI;AAClB,aAAa,IAAI,EAAE;AACnB,aAAa,IAAI,CAAC,CAAC,aAAa,KAAK;AACrC;AACA,YAAY,MAAM,kBAAkB,GAAG,IAAI,YAAY,CAAC,mBAAmB,EAAE;AAC7E,gBAAgB,IAAI,EAAE,aAAa;AACnC,aAAa,CAAC,CAAC;AACf;AACA,YAAY,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC;AACrD,SAAS,CAAC;AACV,aAAa,KAAK,CAAC,CAAC,KAAK,KAAK;AAC9B,YAAYA,YAAM,CAAC,KAAK,CAAC,CAAC,oDAAoD,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACjG,SAAS,CAAC,CAAC;AACX,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,eAAe,CAAC,KAAK,EAAE;AAC3B;AACA,QAAQ,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,YAAY,IAAI,EAAE;AACtD,YAAY,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;AAC9C,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;AAC5B,YAAY,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACvC,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,IAAI,YAAY,GAAG;AACnB,QAAQA,YAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;AACxE,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1B,KAAK;AACL;AACA;AACA;AACA,IAAI,aAAa,GAAG;AACpB;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC3B,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,aAAa,CAAC,KAAK,EAAE;AACzB,QAAQA,YAAM,CAAC,IAAI,CAAC,uDAAuD;AAC3E,YAAY,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;AACtC,YAAY,KAAK;AACjB,YAAY,KAAK,CAAC,MAAM,CAAC,CAAC;AAC1B,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAClC,KAAK;AACL;;AC9HA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,kBAAkB,SAAS,YAAY,CAAC;AACrD,IAAI,WAAW,kBAAkB,GAAG;AACpC,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,WAAW,CAAC,SAAS,EAAE;AAC3B,QAAQ,KAAK,EAAE,CAAC;AAChB,QAAQ,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AACnC,QAAQ,SAAS,CAAC,SAAS,GAAG,CAAC,GAAG,KAAK;AACvC,YAAY,IAAI,aAAa,CAAC;AAC9B,YAAY,IAAI;AAChB;AACA,gBAAgB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACnD,gBAAgBA,YAAM,CAAC,KAAK,CAAC,yBAAyB,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;AACnG,gBAAgB,aAAa,GAAG,UAAU,CAAC;AAC3C,aAAa;AACb,YAAY,OAAO,CAAC,EAAE;AACtB,gBAAgB,IAAI,CAAC,YAAY,KAAK,EAAE;AACxC,oBAAoBA,YAAM,CAAC,KAAK,CAAC,CAAC,6BAA6B,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACvF,iBAAiB;AACjB,qBAAqB;AACrB,oBAAoBA,YAAM,CAAC,KAAK,CAAC,CAAC,2DAA2D,CAAC,CAAC,CAAC;AAChG,iBAAiB;AACjB,gBAAgB,OAAO;AACvB,aAAa;AACb;AACA,YAAY,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AACrD,YAAY,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE;AAC/D;AACA;AACA,gBAAgB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;AACtD,aAAa;AACb,SAAS,CAAC;AACV,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,CAAC,GAAG,EAAE;AACjB,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC3C,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE;AAC7B,QAAQ,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAChD,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,WAAW,GAAG;AAClB,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;AAC5C,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,WAAW,CAAC,GAAG,EAAE;AACrB,QAAQ,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AACxD,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACxC,QAAQA,YAAM,CAAC,KAAK,CAAC,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;AAChF,KAAK;AACL;;ACvFA;AACA;AACA;AACA;AACO,SAAS,eAAe,CAAC,KAAK,EAAE;AACvC,IAAI,IAAI,CAAC,GAAG,OAAO,KAAK,CAAC;AACzB,IAAI,IAAI,CAAC,IAAI,QAAQ,EAAE;AACvB,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAChC,YAAY,OAAO,OAAO,CAAC;AAC3B,QAAQ,IAAI,KAAK,KAAK,IAAI;AAC1B,YAAY,OAAO,MAAM,CAAC;AAC1B,KAAK;AACL,IAAI,OAAO,CAAC,CAAC;AACb,CAAC;AACD;AACA;AACA;AACO,SAAS,YAAY,CAAC,KAAK,EAAE;AACpC,IAAI,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC/E;;ACnBA;AACA,IAAI,QAAQ,GAAG,kEAAkE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAC5F;AACA,IAAI,QAAQ,GAAG,EAAE,CAAC;AAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE;AACxC,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5C;AACA,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACpD,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,YAAY,CAAC,SAAS,EAAE;AACxC;AACA,IAAI,IAAI,EAAE,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;AACtC;AACA;AACA,IAAI,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG;AAC9C,QAAQ,EAAE,IAAI,CAAC,CAAC;AAChB,SAAS,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG;AACnD,QAAQ,EAAE,IAAI,CAAC,CAAC;AAChB,IAAI,IAAI,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,CAAC;AAC/C,IAAI,QAAQ,GAAG,CAAC;AAChB,IAAI,CAAC;AACL,IAAI,CAAC,GAAG,CAAC;AACT,KAAK;AACL,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/C,QAAQ,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,QAAQ,IAAI,CAAC,KAAK,SAAS,EAAE;AAC7B;AACA,YAAY,QAAQ,SAAS,CAAC,CAAC,CAAC;AAChC,gBAAgB,KAAK,GAAG;AACxB,oBAAoB,QAAQ,GAAG,CAAC,CAAC;AACjC,gBAAgB,KAAK,IAAI,CAAC;AAC1B,gBAAgB,KAAK,IAAI,CAAC;AAC1B,gBAAgB,KAAK,IAAI,CAAC;AAC1B,gBAAgB,KAAK,GAAG;AACxB,oBAAoB,SAAS;AAC7B,gBAAgB;AAChB,oBAAoB,MAAM,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC;AAC1D,aAAa;AACb,SAAS;AACT,QAAQ,QAAQ,QAAQ;AACxB,YAAY,KAAK,CAAC;AAClB,gBAAgB,CAAC,GAAG,CAAC,CAAC;AACtB,gBAAgB,QAAQ,GAAG,CAAC,CAAC;AAC7B,gBAAgB,MAAM;AACtB,YAAY,KAAK,CAAC;AAClB,gBAAgB,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC1D,gBAAgB,CAAC,GAAG,CAAC,CAAC;AACtB,gBAAgB,QAAQ,GAAG,CAAC,CAAC;AAC7B,gBAAgB,MAAM;AACtB,YAAY,KAAK,CAAC;AAClB,gBAAgB,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACjE,gBAAgB,CAAC,GAAG,CAAC,CAAC;AACtB,gBAAgB,QAAQ,GAAG,CAAC,CAAC;AAC7B,gBAAgB,MAAM;AACtB,YAAY,KAAK,CAAC;AAClB,gBAAgB,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACpD,gBAAgB,QAAQ,GAAG,CAAC,CAAC;AAC7B,gBAAgB,MAAM;AACtB,SAAS;AACT,KAAK;AACL,IAAI,IAAI,QAAQ,IAAI,CAAC;AACrB,QAAQ,MAAM,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC;AAC9C,IAAI,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACtC,CAAC;AACD;AACA;AACA;AACA;AACA;AACO,SAAS,YAAY,CAAC,KAAK,EAAE;AACpC,IAAI,IAAI,MAAM,GAAG,EAAE,EAAE,QAAQ,GAAG,CAAC;AACjC,IAAI,CAAC;AACL,IAAI,CAAC,GAAG,CAAC,CAAC;AACV,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC3C,QAAQ,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACrB,QAAQ,QAAQ,QAAQ;AACxB,YAAY,KAAK,CAAC;AAClB,gBAAgB,MAAM,IAAI,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3C,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACjC,gBAAgB,QAAQ,GAAG,CAAC,CAAC;AAC7B,gBAAgB,MAAM;AACtB,YAAY,KAAK,CAAC;AAClB,gBAAgB,MAAM,IAAI,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/C,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAClC,gBAAgB,QAAQ,GAAG,CAAC,CAAC;AAC7B,gBAAgB,MAAM;AACtB,YAAY,KAAK,CAAC;AAClB,gBAAgB,MAAM,IAAI,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/C,gBAAgB,MAAM,IAAI,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3C,gBAAgB,QAAQ,GAAG,CAAC,CAAC;AAC7B,gBAAgB,MAAM;AACtB,SAAS;AACT,KAAK;AACL;AACA,IAAI,IAAI,QAAQ,EAAE;AAClB,QAAQ,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC9B,QAAQ,MAAM,IAAI,GAAG,CAAC;AACtB,QAAQ,IAAI,QAAQ,IAAI,CAAC;AACzB,YAAY,MAAM,IAAI,GAAG,CAAC;AAC1B,KAAK;AACL,IAAI,OAAO,MAAM,CAAC;AAClB;;AChHA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,IAAI,mBAAmB,CAAC;AAC/B,CAAC,UAAU,mBAAmB,EAAE;AAChC;AACA;AACA;AACA;AACA,IAAI,mBAAmB,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;AACnE;AACA;AACA;AACA;AACA,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,KAAK;AACjF,QAAQ,IAAI,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;AACrH,QAAQ,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AACxD,KAAK,CAAC;AACN;AACA;AACA;AACA;AACA,IAAI,mBAAmB,CAAC,OAAO,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,KAAK;AACjE,QAAQ,KAAK,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC;AAC5E,YAAY,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC/C,KAAK,CAAC;AACN;AACA;AACA;AACA;AACA,IAAI,mBAAmB,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK;AACrD,QAAQ,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE;AACzB,YAAY,IAAI,GAAG,GAAG,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC1D,YAAY,OAAO,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,OAAO,CAAC,GAAG,GAAG,CAAC;AACtE,SAAS;AACT,QAAQ,OAAO,EAAE,CAAC;AAClB,KAAK,CAAC;AACN;AACA;AACA;AACA,IAAI,mBAAmB,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7G,IAAI,MAAM,EAAE,GAAG,CAAC,OAAO,KAAK,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1F,CAAC,EAAE,mBAAmB,KAAK,mBAAmB,GAAG,EAAE,CAAC,CAAC,CAAC;AAOtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,IAAI,QAAQ,CAAC;AACpB,CAAC,UAAU,QAAQ,EAAE;AACrB;AACA;AACA;AACA,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;AAChD;AACA;AACA;AACA;AACA,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,GAAG,iBAAiB,CAAC;AAClE;AACA;AACA;AACA;AACA,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC;AACxD;AACA;AACA;AACA;AACA,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC;AACpD;AACA;AACA;AACA;AACA,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;AAC9C,CAAC,EAAE,QAAQ,KAAK,QAAQ,GAAG,EAAE,CAAC,CAAC;;AC/F/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,YAAY,GAAG;AAC/B,IAAI,IAAI,OAAO,GAAG,CAAC,CAAC;AACpB,IAAI,IAAI,QAAQ,GAAG,CAAC,CAAC;AACrB,IAAI,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE;AAChD,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACrC,QAAQ,OAAO,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,KAAK,CAAC;AACvC,QAAQ,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE;AAC7B,YAAY,IAAI,CAAC,YAAY,EAAE,CAAC;AAChC,YAAY,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACvC,SAAS;AACT,KAAK;AACL,IAAI,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAC1C;AACA,IAAI,OAAO,IAAI,CAAC,UAAU,GAAG,IAAI,KAAK,EAAE,CAAC;AACzC;AACA,IAAI,QAAQ,GAAG,CAAC,UAAU,GAAG,IAAI,KAAK,CAAC,CAAC;AACxC,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,KAAK,CAAC,EAAE;AAClC,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;AAC5B,QAAQ,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACnC,KAAK;AACL,IAAI,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE;AACjD,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACrC,QAAQ,QAAQ,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,KAAK,CAAC;AACxC,QAAQ,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE;AAC7B,YAAY,IAAI,CAAC,YAAY,EAAE,CAAC;AAChC,YAAY,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACvC,SAAS;AACT,KAAK;AACL,IAAI,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;AACtC,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE;AAC7C,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACvC,QAAQ,MAAM,KAAK,GAAG,EAAE,KAAK,CAAC,CAAC;AAC/B,QAAQ,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AACzD,QAAQ,MAAM,IAAI,GAAG,CAAC,OAAO,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC;AAC7D,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,QAAQ,IAAI,CAAC,OAAO,EAAE;AACtB,YAAY,OAAO;AACnB,SAAS;AACT,KAAK;AACL,IAAI,MAAM,SAAS,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,IAAI,KAAK,CAAC,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC;AAChE,IAAI,MAAM,WAAW,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1C,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,GAAG,SAAS,GAAG,IAAI,GAAG,SAAS,IAAI,IAAI,CAAC,CAAC;AACpE,IAAI,IAAI,CAAC,WAAW,EAAE;AACtB,QAAQ,OAAO;AACf,KAAK;AACL,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACvC,QAAQ,MAAM,KAAK,GAAG,EAAE,KAAK,CAAC,CAAC;AAC/B,QAAQ,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9C,QAAQ,MAAM,IAAI,GAAG,CAAC,OAAO,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC;AAC7D,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,QAAQ,IAAI,CAAC,OAAO,EAAE;AACtB,YAAY,OAAO;AACnB,SAAS;AACT,KAAK;AACL,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,CAAC;AACnC,CAAC;AACD;AACA,MAAMC,gBAAc,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,eAAe,CAAC,GAAG,EAAE;AACrC;AACA,IAAI,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;AAC9B,IAAI,IAAI,KAAK;AACb,QAAQ,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3B;AACA;AACA;AACA,IAAI,MAAM,IAAI,GAAG,GAAG,CAAC;AACrB,IAAI,IAAI,OAAO,GAAG,CAAC,CAAC;AACpB,IAAI,IAAI,QAAQ,GAAG,CAAC,CAAC;AACrB,IAAI,SAAS,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE;AACrC;AACA,QAAQ,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;AACvD,QAAQ,QAAQ,IAAI,IAAI,CAAC;AACzB,QAAQ,OAAO,GAAG,OAAO,GAAG,IAAI,GAAG,QAAQ,CAAC;AAC5C;AACA,QAAQ,IAAI,OAAO,IAAIA,gBAAc,EAAE;AACvC,YAAY,QAAQ,GAAG,QAAQ,IAAI,CAAC,OAAO,GAAGA,gBAAc,IAAI,CAAC,CAAC,CAAC;AACnE,YAAY,OAAO,GAAG,OAAO,GAAGA,gBAAc,CAAC;AAC/C,SAAS;AACT,KAAK;AACL,IAAI,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAC1B,IAAI,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAC1B,IAAI,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AACzB,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AACpB,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AACtC,CAAC;AACD;AACA;AACA;AACA;AACA;AACO,SAAS,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE;AACjD;AACA;AACA,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,KAAK,QAAQ,EAAE;AACtC,QAAQ,OAAO,EAAE,IAAIA,gBAAc,GAAG,QAAQ,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;AAClE,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,GAAG,GAAG,OAAO,GAAG,QAAQ,CAAC;AACjC,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,KAAK,EAAE,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC;AACtE,IAAI,IAAI,IAAI,GAAG,CAAC,QAAQ,IAAI,EAAE,IAAI,MAAM,CAAC;AACzC;AACA;AACA;AACA,IAAI,IAAI,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,OAAO,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,CAAC;AAC1D,IAAI,IAAI,MAAM,GAAG,GAAG,IAAI,IAAI,GAAG,OAAO,CAAC,CAAC;AACxC,IAAI,IAAI,MAAM,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC;AAC5B;AACA,IAAI,IAAI,IAAI,GAAG,QAAQ,CAAC;AACxB,IAAI,IAAI,MAAM,IAAI,IAAI,EAAE;AACxB,QAAQ,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AAC5C,QAAQ,MAAM,IAAI,IAAI,CAAC;AACvB,KAAK;AACL,IAAI,IAAI,MAAM,IAAI,IAAI,EAAE;AACxB,QAAQ,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AAC5C,QAAQ,MAAM,IAAI,IAAI,CAAC;AACvB,KAAK;AACL;AACA,IAAI,SAAS,cAAc,CAAC,QAAQ,EAAE,gBAAgB,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;AACvD,QAAQ,IAAI,gBAAgB,EAAE;AAC9B,YAAY,OAAO,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;AAC7D,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,OAAO,cAAc,CAAC,MAAM,wBAAwB,CAAC,CAAC;AAC1D,QAAQ,cAAc,CAAC,MAAM,wBAAwB,MAAM,CAAC;AAC5D;AACA;AACA,QAAQ,cAAc,CAAC,MAAM,wBAAwB,CAAC,CAAC,CAAC;AACxD,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE;AAC5C,IAAI,IAAI,KAAK,IAAI,CAAC,EAAE;AACpB;AACA,QAAQ,OAAO,KAAK,GAAG,IAAI,EAAE;AAC7B,YAAY,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC;AAC9C,YAAY,KAAK,GAAG,KAAK,KAAK,CAAC,CAAC;AAChC,SAAS;AACT,QAAQ,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,KAAK;AACL,SAAS;AACT,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACpC,YAAY,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAC1C,YAAY,KAAK,GAAG,KAAK,IAAI,CAAC,CAAC;AAC/B,SAAS;AACT,QAAQ,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA;AACA;AACO,SAAS,YAAY,GAAG;AAC/B,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACjC,IAAI,IAAI,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC;AAC1B,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE;AACzB,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;AAC5B,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7B,IAAI,MAAM,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC;AAC9B,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE;AACzB,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;AAC5B,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7B,IAAI,MAAM,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,EAAE,CAAC;AAC/B,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE;AACzB,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;AAC5B,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7B,IAAI,MAAM,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,EAAE,CAAC;AAC/B,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE;AACzB,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;AAC5B,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL;AACA,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7B,IAAI,MAAM,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,EAAE,CAAC;AAC/B,IAAI,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,KAAK,SAAS,GAAG,EAAE,EAAE,SAAS,EAAE;AAC7E,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACjC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC;AACvB,QAAQ,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;AAC1C,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;AACxB;AACA,IAAI,OAAO,MAAM,KAAK,CAAC,CAAC;AACxB;;ACvQA,IAAI,EAAE,CAAC;AACA,SAAS,QAAQ,GAAG;AAC3B,IAAI,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,IAAI,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,KAAK,SAAS;AAC9C,WAAW,OAAO,EAAE,CAAC,WAAW,KAAK,UAAU;AAC/C,WAAW,OAAO,EAAE,CAAC,YAAY,KAAK,UAAU;AAChD,WAAW,OAAO,EAAE,CAAC,WAAW,KAAK,UAAU;AAC/C,WAAW,OAAO,EAAE,CAAC,YAAY,KAAK,UAAU,CAAC;AACjD,IAAI,EAAE,GAAG,EAAE,GAAG;AACd,QAAQ,GAAG,EAAE,MAAM,CAAC,sBAAsB,CAAC;AAC3C,QAAQ,GAAG,EAAE,MAAM,CAAC,qBAAqB,CAAC;AAC1C,QAAQ,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC;AACzB,QAAQ,IAAI,EAAE,MAAM,CAAC,sBAAsB,CAAC;AAC5C,QAAQ,CAAC,EAAE,MAAM;AACjB,QAAQ,CAAC,EAAE,EAAE;AACb,KAAK,GAAG,SAAS,CAAC;AAClB,CAAC;AACD,QAAQ,EAAE,CAAC;AACX,SAAS,QAAQ,CAAC,EAAE,EAAE;AACtB,IAAI,IAAI,CAAC,EAAE;AACX,QAAQ,MAAM,IAAI,KAAK,CAAC,uGAAuG,CAAC,CAAC;AACjI,CAAC;AACD;AACA,MAAM,cAAc,GAAG,YAAY,CAAC;AACpC;AACA,MAAM,cAAc,GAAG,WAAW,CAAC;AACnC,MAAM,aAAa,GAAG,WAAW,CAAC;AAClC;AACA,MAAM,YAAY,CAAC;AACnB;AACA;AACA;AACA,IAAI,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE;AACxB,QAAQ,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACzB,QAAQ,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACzB,KAAK;AACL;AACA;AACA;AACA,IAAI,MAAM,GAAG;AACb,QAAQ,OAAO,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;AAC5C,KAAK;AACL;AACA;AACA;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,IAAI,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,cAAc,IAAI,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AAChE,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC;AACzC,YAAY,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;AAC7D,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA;AACO,MAAM,OAAO,SAAS,YAAY,CAAC;AAC1C;AACA;AACA;AACA,IAAI,OAAO,IAAI,CAAC,KAAK,EAAE;AACvB,QAAQ,IAAI,EAAE;AACd;AACA,YAAY,QAAQ,OAAO,KAAK;AAChC,gBAAgB,KAAK,QAAQ;AAC7B,oBAAoB,IAAI,KAAK,IAAI,GAAG;AACpC,wBAAwB,OAAO,IAAI,CAAC,IAAI,CAAC;AACzC,oBAAoB,IAAI,KAAK,IAAI,EAAE;AACnC,wBAAwB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAChE,oBAAoB,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACxC,gBAAgB,KAAK,QAAQ;AAC7B,oBAAoB,IAAI,KAAK,KAAK,CAAC;AACnC,wBAAwB,OAAO,IAAI,CAAC,IAAI,CAAC;AACzC,oBAAoB,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACxC,gBAAgB,KAAK,QAAQ;AAC7B,oBAAoB,IAAI,CAAC,KAAK;AAC9B,wBAAwB,OAAO,IAAI,CAAC,IAAI,CAAC;AACzC,oBAAoB,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI;AACvC,wBAAwB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;AAClE,oBAAoB,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI;AACvC,wBAAwB,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;AAC3D,oBAAoB,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACtD,oBAAoB,OAAO,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACvF,aAAa;AACb;AACA,YAAY,QAAQ,OAAO,KAAK;AAChC,gBAAgB,KAAK,QAAQ;AAC7B,oBAAoB,IAAI,KAAK,IAAI,GAAG;AACpC,wBAAwB,OAAO,IAAI,CAAC,IAAI,CAAC;AACzC,oBAAoB,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;AACzC,oBAAoB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;AACnD,wBAAwB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAChE,oBAAoB,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;AACjE,oBAAoB,IAAI,KAAK;AAC7B,wBAAwB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;AAClE,oBAAoB,OAAO,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC/C,gBAAgB,KAAK,QAAQ;AAC7B,oBAAoB,IAAI,KAAK,IAAI,CAAC;AAClC,wBAAwB,OAAO,IAAI,CAAC,IAAI,CAAC;AACzC,oBAAoB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;AACpD,wBAAwB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAChE,oBAAoB,IAAI,KAAK,GAAG,CAAC;AACjC,wBAAwB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;AAClE,oBAAoB,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,cAAc,CAAC,CAAC;AACtE,aAAa;AACb,QAAQ,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,OAAO,KAAK,CAAC,CAAC;AACzD,KAAK;AACL;AACA;AACA;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,OAAO,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;AACjF,KAAK;AACL;AACA;AACA;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,QAAQ,CAAC,EAAE,CAAC,CAAC;AACrB,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACxC,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACxC,QAAQ,OAAO,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC1C,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA,OAAO,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACjC;AACA;AACA;AACA;AACO,MAAM,MAAM,SAAS,YAAY,CAAC;AACzC;AACA;AACA;AACA,IAAI,OAAO,IAAI,CAAC,KAAK,EAAE;AACvB,QAAQ,IAAI,EAAE;AACd;AACA,YAAY,QAAQ,OAAO,KAAK;AAChC,gBAAgB,KAAK,QAAQ;AAC7B,oBAAoB,IAAI,KAAK,IAAI,GAAG;AACpC,wBAAwB,OAAO,IAAI,CAAC,IAAI,CAAC;AACzC,oBAAoB,IAAI,KAAK,IAAI,EAAE;AACnC,wBAAwB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAChE,oBAAoB,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACxC,gBAAgB,KAAK,QAAQ;AAC7B,oBAAoB,IAAI,KAAK,KAAK,CAAC;AACnC,wBAAwB,OAAO,IAAI,CAAC,IAAI,CAAC;AACzC,oBAAoB,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACxC,gBAAgB,KAAK,QAAQ;AAC7B,oBAAoB,IAAI,CAAC,KAAK;AAC9B,wBAAwB,OAAO,IAAI,CAAC,IAAI,CAAC;AACzC,oBAAoB,IAAI,KAAK,GAAG,EAAE,CAAC,GAAG;AACtC,wBAAwB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;AACjE,oBAAoB,IAAI,KAAK,GAAG,EAAE,CAAC,GAAG;AACtC,wBAAwB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;AACjE,oBAAoB,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACrD,oBAAoB,OAAO,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACtF,aAAa;AACb;AACA,YAAY,QAAQ,OAAO,KAAK;AAChC,gBAAgB,KAAK,QAAQ;AAC7B,oBAAoB,IAAI,KAAK,IAAI,GAAG;AACpC,wBAAwB,OAAO,IAAI,CAAC,IAAI,CAAC;AACzC,oBAAoB,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;AACzC,oBAAoB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;AACnD,wBAAwB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAChE,oBAAoB,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;AACjE,oBAAoB,IAAI,KAAK,EAAE;AAC/B,wBAAwB,IAAI,EAAE,GAAG,aAAa,KAAK,EAAE,IAAI,aAAa,IAAI,EAAE,IAAI,CAAC,CAAC;AAClF,4BAA4B,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;AACrE,qBAAqB;AACrB,yBAAyB,IAAI,EAAE,IAAI,aAAa;AAChD,wBAAwB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;AACjE,oBAAoB,IAAI,GAAG,GAAG,IAAI,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACjD,oBAAoB,OAAO,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC;AACtD,gBAAgB,KAAK,QAAQ;AAC7B,oBAAoB,IAAI,KAAK,IAAI,CAAC;AAClC,wBAAwB,OAAO,IAAI,CAAC,IAAI,CAAC;AACzC,oBAAoB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;AACpD,wBAAwB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAChE,oBAAoB,OAAO,KAAK,GAAG,CAAC;AACpC,0BAA0B,IAAI,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,cAAc,CAAC;AACnE,0BAA0B,IAAI,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,GAAG,cAAc,CAAC,CAAC,MAAM,EAAE,CAAC;AAC/E,aAAa;AACb,QAAQ,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,OAAO,KAAK,CAAC,CAAC;AACzD,KAAK;AACL;AACA;AACA;AACA,IAAI,UAAU,GAAG;AACjB,QAAQ,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,aAAa,MAAM,CAAC,CAAC;AAC/C,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,MAAM,GAAG;AACb,QAAQ,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;AACxC,QAAQ,IAAI,EAAE;AACd,YAAY,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AACzB;AACA,YAAY,EAAE,IAAI,CAAC,CAAC;AACpB,QAAQ,OAAO,IAAI,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAClC,KAAK;AACL;AACA;AACA;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,IAAI,EAAE;AACd,YAAY,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC;AAC9C,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AAC/B,YAAY,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAClC,YAAY,OAAO,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACnD,SAAS;AACT,QAAQ,OAAO,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;AAC/C,KAAK;AACL;AACA;AACA;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,QAAQ,CAAC,EAAE,CAAC,CAAC;AACrB,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACxC,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACxC,QAAQ,OAAO,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACzC,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA,MAAM,CAAC,IAAI,GAAG,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;;ACpO9B,MAAMC,cAAY,GAAG;AACrB,IAAI,gBAAgB,EAAE,IAAI;AAC1B,IAAI,aAAa,EAAE,KAAK,IAAI,IAAI,YAAY,CAAC,KAAK,CAAC;AACnD,CAAC,CAAC;AACF;AACA;AACA;AACO,SAAS,iBAAiB,CAAC,OAAO,EAAE;AAC3C,IAAI,OAAO,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAEA,cAAY,CAAC,EAAE,OAAO,CAAC,GAAGA,cAAY,CAAC;AAC5F,CAAC;AACM,MAAM,YAAY,CAAC;AAC1B,IAAI,WAAW,CAAC,GAAG,EAAE,WAAW,EAAE;AAClC,QAAQ,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC;AACrC;AACA;AACA;AACA,QAAQ,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC;AACnC,QAAQ,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;AACvB,QAAQ,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;AAC9B,QAAQ,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;AACrB,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;AAC7E,QAAQ,IAAI,CAAC,WAAW,GAAG,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,KAAK,CAAC,GAAG,WAAW,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE;AACnH,YAAY,KAAK,EAAE,IAAI;AACvB,YAAY,SAAS,EAAE,IAAI;AAC3B,SAAS,CAAC,CAAC;AACX,KAAK;AACL;AACA;AACA;AACA,IAAI,GAAG,GAAG;AACV,QAAQ,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,GAAG,GAAG,KAAK,CAAC,EAAE,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC;AACzE,QAAQ,IAAI,OAAO,IAAI,CAAC,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,CAAC;AACxD,YAAY,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,OAAO,GAAG,aAAa,GAAG,QAAQ,CAAC,CAAC;AAC3F,QAAQ,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACnC,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACnB,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;AAC7B;AACA,QAAQ,QAAQ,QAAQ;AACxB,YAAY,KAAK,QAAQ,CAAC,MAAM;AAChC,gBAAgB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE;AACpD;AACA,iBAAiB;AACjB,gBAAgB,MAAM;AACtB,YAAY,KAAK,QAAQ,CAAC,KAAK;AAC/B,gBAAgB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAC9B,YAAY,KAAK,QAAQ,CAAC,KAAK;AAC/B,gBAAgB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAC9B,gBAAgB,MAAM;AACtB,YAAY,KAAK,QAAQ,CAAC,eAAe;AACzC,gBAAgB,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AACxC,gBAAgB,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC;AAChC,gBAAgB,MAAM;AACtB,YAAY,KAAK,QAAQ,CAAC,UAAU;AACpC;AACA;AACA,gBAAgB,IAAI,CAAC,CAAC;AACtB,gBAAgB,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,QAAQ,EAAE;AAClE,oBAAoB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjC,iBAAiB;AACjB,gBAAgB,MAAM;AACtB,YAAY;AACZ,gBAAgB,MAAM,IAAI,KAAK,CAAC,sBAAsB,GAAG,QAAQ,CAAC,CAAC;AACnE,SAAS;AACT,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;AAC5B,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,KAAK;AACL;AACA;AACA;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG;AAC/B,YAAY,MAAM,IAAI,UAAU,CAAC,eAAe,CAAC,CAAC;AAClD,KAAK;AACL;AACA;AACA;AACA,IAAI,KAAK,GAAG;AACZ,QAAQ,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACjC,KAAK;AACL;AACA;AACA;AACA,IAAI,MAAM,GAAG;AACb,QAAQ,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAChC;AACA,QAAQ,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;AACxC,KAAK;AACL;AACA;AACA;AACA,IAAI,KAAK,GAAG;AACZ,QAAQ,OAAO,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC9C,KAAK;AACL;AACA;AACA;AACA,IAAI,MAAM,GAAG;AACb,QAAQ,OAAO,IAAI,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC/C,KAAK;AACL;AACA;AACA;AACA,IAAI,MAAM,GAAG;AACb,QAAQ,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AACvC;AACA,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,QAAQ,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/C,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5B,QAAQ,OAAO,IAAI,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAClC,KAAK;AACL;AACA;AACA;AACA,IAAI,IAAI,GAAG;AACX,QAAQ,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AACvC,QAAQ,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACpC,KAAK;AACL;AACA;AACA;AACA,IAAI,OAAO,GAAG;AACd,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;AAC9D,KAAK;AACL;AACA;AACA;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;AAC7D,KAAK;AACL;AACA;AACA;AACA,IAAI,OAAO,GAAG;AACd,QAAQ,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC7D,KAAK;AACL;AACA;AACA;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC5D,KAAK;AACL;AACA;AACA;AACA,IAAI,KAAK,GAAG;AACZ,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;AAC/D,KAAK;AACL;AACA;AACA;AACA,IAAI,MAAM,GAAG;AACb,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;AAC/D,KAAK;AACL;AACA;AACA;AACA,IAAI,KAAK,GAAG;AACZ,QAAQ,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAChC,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;AAC7B,QAAQ,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC;AACxB,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;AAC5B,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,GAAG,CAAC,CAAC;AACrD,KAAK;AACL;AACA;AACA;AACA,IAAI,MAAM,GAAG;AACb,QAAQ,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AACrD,KAAK;AACL;;ACjLA;AACA;AACA;AACO,SAAS,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE;AACvC,IAAI,IAAI,CAAC,SAAS,EAAE;AACpB,QAAQ,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;AAC7B,KAAK;AACL,CAAC;AAOD,MAAM,WAAW,GAAG,sBAAsB,EAAE,WAAW,GAAG,CAAC,sBAAsB,EAAE,UAAU,GAAG,UAAU,EAAE,SAAS,GAAG,UAAU,EAAE,SAAS,GAAG,CAAC,UAAU,CAAC;AACrJ,SAAS,WAAW,CAAC,GAAG,EAAE;AACjC,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ;AAC/B,QAAQ,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,OAAO,GAAG,CAAC,CAAC;AACzD,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,SAAS,IAAI,GAAG,GAAG,SAAS;AACpE,QAAQ,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,GAAG,CAAC,CAAC;AAClD,CAAC;AACM,SAAS,YAAY,CAAC,GAAG,EAAE;AAClC,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ;AAC/B,QAAQ,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,OAAO,GAAG,CAAC,CAAC;AAC1D,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,UAAU,IAAI,GAAG,GAAG,CAAC;AAC7D,QAAQ,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,GAAG,CAAC,CAAC;AACnD,CAAC;AACM,SAAS,aAAa,CAAC,GAAG,EAAE;AACnC,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ;AAC/B,QAAQ,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,OAAO,GAAG,CAAC,CAAC;AAC3D,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC7B,QAAQ,OAAO;AACf,IAAI,IAAI,GAAG,GAAG,WAAW,IAAI,GAAG,GAAG,WAAW;AAC9C,QAAQ,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,GAAG,CAAC,CAAC;AACpD;;AC/BA,MAAMC,eAAa,GAAG;AACtB,IAAI,kBAAkB,EAAE,IAAI;AAC5B,IAAI,aAAa,EAAE,MAAM,IAAI,YAAY,EAAE;AAC3C,CAAC,CAAC;AACF;AACA;AACA;AACO,SAAS,kBAAkB,CAAC,OAAO,EAAE;AAC5C,IAAI,OAAO,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAEA,eAAa,CAAC,EAAE,OAAO,CAAC,GAAGA,eAAa,CAAC;AAC9F,CAAC;AACM,MAAM,YAAY,CAAC;AAC1B,IAAI,WAAW,CAAC,WAAW,EAAE;AAC7B;AACA;AACA;AACA,QAAQ,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AACxB,QAAQ,IAAI,CAAC,WAAW,GAAG,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,KAAK,CAAC,GAAG,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAC5G,QAAQ,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACzB,QAAQ,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;AACtB,KAAK;AACL;AACA;AACA;AACA,IAAI,MAAM,GAAG;AACb,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACnD,QAAQ,IAAI,GAAG,GAAG,CAAC,CAAC;AACpB,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE;AACnD,YAAY,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACzC,QAAQ,IAAI,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;AACxC,QAAQ,IAAI,MAAM,GAAG,CAAC,CAAC;AACvB,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrD,YAAY,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAC9C,YAAY,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC5C,SAAS;AACT,QAAQ,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACzB,QAAQ,OAAO,KAAK,CAAC;AACrB,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,GAAG;AACX,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAChE,QAAQ,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACzB,QAAQ,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;AACtB,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,IAAI,GAAG;AACX;AACA,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAClC;AACA,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;AACpC,QAAQ,IAAI,CAAC,IAAI;AACjB,YAAY,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;AAC/D,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAClC,QAAQ,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AAC5B;AACA,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AACtC,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC/B,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE;AACvB,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC;AACxD,KAAK;AACL;AACA;AACA;AACA,IAAI,GAAG,CAAC,KAAK,EAAE;AACf,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;AAC7B,YAAY,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACvD,YAAY,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;AAC1B,SAAS;AACT,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL;AACA;AACA;AACA,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,YAAY,CAAC,KAAK,CAAC,CAAC;AAC5B;AACA,QAAQ,OAAO,KAAK,GAAG,IAAI,EAAE;AAC7B,YAAY,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC;AACjD,YAAY,KAAK,GAAG,KAAK,KAAK,CAAC,CAAC;AAChC,SAAS;AACT,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7B,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL;AACA;AACA;AACA,IAAI,KAAK,CAAC,KAAK,EAAE;AACjB,QAAQ,WAAW,CAAC,KAAK,CAAC,CAAC;AAC3B,QAAQ,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACvC,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL;AACA;AACA;AACA,IAAI,IAAI,CAAC,KAAK,EAAE;AAChB,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACrC,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL;AACA;AACA;AACA,IAAI,KAAK,CAAC,KAAK,EAAE;AACjB,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AACtC,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC/B,KAAK;AACL;AACA;AACA;AACA,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnD,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AACtC,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC/B,KAAK;AACL;AACA;AACA;AACA,IAAI,KAAK,CAAC,KAAK,EAAE;AACjB,QAAQ,aAAa,CAAC,KAAK,CAAC,CAAC;AAC7B,QAAQ,IAAI,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;AACtC,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAC9D,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC/B,KAAK;AACL;AACA;AACA;AACA,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,IAAI,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;AACtC,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAC9D,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC/B,KAAK;AACL;AACA;AACA;AACA,IAAI,OAAO,CAAC,KAAK,EAAE;AACnB,QAAQ,YAAY,CAAC,KAAK,CAAC,CAAC;AAC5B,QAAQ,IAAI,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;AACtC,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAC7D,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC/B,KAAK;AACL;AACA;AACA;AACA,IAAI,QAAQ,CAAC,KAAK,EAAE;AACpB,QAAQ,WAAW,CAAC,KAAK,CAAC,CAAC;AAC3B,QAAQ,IAAI,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;AACtC,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAC5D,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC/B,KAAK;AACL;AACA;AACA;AACA,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,WAAW,CAAC,KAAK,CAAC,CAAC;AAC3B;AACA,QAAQ,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC;AACrD,QAAQ,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACvC,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL;AACA;AACA;AACA,IAAI,QAAQ,CAAC,KAAK,EAAE;AACpB,QAAQ,IAAI,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;AACtC,QAAQ,IAAI,IAAI,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9C,QAAQ,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtC,QAAQ,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACxC,QAAQ,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACxC,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC/B,KAAK;AACL;AACA;AACA;AACA,IAAI,OAAO,CAAC,KAAK,EAAE;AACnB,QAAQ,IAAI,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;AACtC,QAAQ,IAAI,IAAI,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9C,QAAQ,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvC,QAAQ,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACxC,QAAQ,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACxC,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC/B,KAAK;AACL;AACA;AACA;AACA,IAAI,KAAK,CAAC,KAAK,EAAE;AACjB,QAAQ,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtC,QAAQ,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL;AACA;AACA;AACA,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AACrC;AACA,QAAQ,IAAI,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC;AAC1G,QAAQ,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACxC,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL;AACA;AACA;AACA,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvC,QAAQ,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL;;AClOA,MAAM,aAAa,GAAG;AACtB,IAAI,iBAAiB,EAAE,KAAK;AAC5B,IAAI,aAAa,EAAE,KAAK;AACxB,IAAI,iBAAiB,EAAE,KAAK;AAC5B,IAAI,YAAY,EAAE,CAAC;AACnB,CAAC,EAAE,YAAY,GAAG;AAClB,IAAI,mBAAmB,EAAE,KAAK;AAC9B,CAAC,CAAC;AACF;AACA;AACA;AACO,SAAS,eAAe,CAAC,OAAO,EAAE;AACzC,IAAI,OAAO,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,GAAG,YAAY,CAAC;AAC5F,CAAC;AACD;AACA;AACA;AACO,SAAS,gBAAgB,CAAC,OAAO,EAAE;AAC1C,IAAI,OAAO,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,EAAE,OAAO,CAAC,GAAG,aAAa,CAAC;AAC9F;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC;;ACNlE;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,cAAc,CAAC,SAAS,EAAE;AAC1C,IAAI,IAAI,OAAO,GAAG,KAAK,CAAC;AACxB,IAAI,MAAM,EAAE,GAAG,EAAE,CAAC;AAClB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/C,QAAQ,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACvC,QAAQ,IAAI,IAAI,IAAI,GAAG,EAAE;AACzB,YAAY,OAAO,GAAG,IAAI,CAAC;AAC3B,SAAS;AACT,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAClC,YAAY,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,YAAY,OAAO,GAAG,IAAI,CAAC;AAC3B,SAAS;AACT,aAAa,IAAI,OAAO,EAAE;AAC1B,YAAY,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AACxC,YAAY,OAAO,GAAG,KAAK,CAAC;AAC5B,SAAS;AACT,aAAa,IAAI,CAAC,IAAI,CAAC,EAAE;AACzB,YAAY,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AACxC,SAAS;AACT,aAAa;AACb,YAAY,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,SAAS;AACT,KAAK;AACL,IAAI,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvB;;AC7BA;AACA;AACA;AACA;AACA;AACO,IAAI,UAAU,CAAC;AACtB,CAAC,UAAU,UAAU,EAAE;AACvB;AACA;AACA,IAAI,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;AACpD,IAAI,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;AAClD;AACA;AACA,IAAI,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;AAClD,IAAI,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;AACpD;AACA;AACA,IAAI,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;AAClD,IAAI,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC;AACtD,IAAI,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC;AACtD,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;AAChD,IAAI,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC;AACnD,IAAI,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC;AACrD;AACA,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,GAAG,UAAU,CAAC;AACzD,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,GAAG,UAAU,CAAC;AACzD,IAAI,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC;AACrD,IAAI,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC;AACrD,CAAC,EAAE,UAAU,KAAK,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,IAAI,QAAQ,CAAC;AACpB,CAAC,UAAU,QAAQ,EAAE;AACrB;AACA;AACA;AACA;AACA;AACA,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;AAChD;AACA;AACA;AACA;AACA;AACA,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;AAChD,CAAC,EAAE,QAAQ,KAAK,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,IAAI,UAAU,CAAC;AACtB,CAAC,UAAU,UAAU,EAAE;AACvB;AACA;AACA;AACA,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;AAC5C;AACA;AACA;AACA;AACA,IAAI,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;AACpD;AACA;AACA;AACA;AACA,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC;AACxD,CAAC,EAAE,UAAU,KAAK,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC;AACpC;AACA;AACA;AACO,SAAS,kBAAkB,CAAC,KAAK,EAAE;AAC1C,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACvB,IAAI,KAAK,CAAC,SAAS,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,SAAS,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACzG,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACvG,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC;AACtF,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC;AACzI,IAAI,OAAO,KAAK,CAAC;AACjB;;ACxHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,YAAY,CAAC,GAAG,EAAE;AAClC,IAAI,IAAI,OAAO,GAAG,IAAI,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE;AACpF,QAAQ,OAAO,KAAK,CAAC;AACrB,KAAK;AACL,IAAI,QAAQ,OAAO,GAAG,CAAC,SAAS;AAChC,QAAQ,KAAK,QAAQ;AACrB,YAAY,IAAI,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,SAAS;AAChD,gBAAgB,OAAO,KAAK,CAAC;AAC7B,YAAY,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;AAChD,QAAQ,KAAK,WAAW;AACxB,YAAY,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;AAChD,QAAQ;AACR,YAAY,OAAO,KAAK,CAAC;AACzB,KAAK;AACL;;ACvCA;AACO,MAAM,mBAAmB,CAAC;AACjC,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;AAC7E,KAAK;AACL,IAAI,OAAO,GAAG;AACd,QAAQ,IAAI,IAAI,CAAC,IAAI;AACrB,YAAY,OAAO;AACnB,QAAQ,MAAM,GAAG,GAAG,EAAE,EAAE,KAAK,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,CAAC;AAChD,QAAQ,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;AACvC,YAAY,IAAI,KAAK,CAAC,KAAK,EAAE;AAC7B,gBAAgB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AACnD,oBAAoB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC7C,oBAAoB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC1C,oBAAoB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC5C,iBAAiB;AACjB,aAAa;AACb,iBAAiB;AACjB,gBAAgB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC5C,gBAAgB,QAAQ,KAAK,CAAC,IAAI;AAClC,oBAAoB,KAAK,QAAQ,CAAC;AAClC,oBAAoB,KAAK,MAAM;AAC/B,wBAAwB,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM;AACtD,4BAA4B,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACtD,wBAAwB,MAAM;AAC9B,oBAAoB,KAAK,SAAS;AAClC,wBAAwB,IAAI,KAAK,CAAC,MAAM;AACxC,4BAA4B,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACtD,wBAAwB,MAAM;AAC9B,oBAAoB,KAAK,KAAK;AAC9B,wBAAwB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAClD,wBAAwB,MAAM;AAC9B,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,QAAQ,IAAI,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AAClE,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,qBAAqB,GAAG,KAAK,EAAE;AACtD,QAAQ,IAAI,KAAK,GAAG,CAAC;AACrB,YAAY,OAAO,IAAI,CAAC;AACxB,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,OAAO,IAAI,QAAQ;AACnF,YAAY,OAAO,KAAK,CAAC;AACzB,QAAQ,IAAI,CAAC,OAAO,EAAE,CAAC;AACvB,QAAQ,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AAC1D;AACA,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAClF,YAAY,OAAO,KAAK,CAAC;AACzB,QAAQ,IAAI,CAAC,qBAAqB,EAAE;AACpC;AACA,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACvD,gBAAgB,OAAO,KAAK,CAAC;AAC7B,SAAS;AACT;AACA;AACA,QAAQ,IAAI,KAAK,GAAG,CAAC,EAAE;AACvB,YAAY,OAAO,IAAI,CAAC;AACxB,SAAS;AACT;AACA,QAAQ,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;AACxC,YAAY,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AACxC,YAAY,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACpC,gBAAgB,OAAO,KAAK,CAAC;AAC7B,YAAY,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;AAC7C,gBAAgB,SAAS;AACzB,YAAY,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;AACjF,YAAY,IAAI,CAAC,KAAK;AACtB,gBAAgB,OAAO,KAAK,CAAC;AAC7B,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,CAAC;AACxF,gBAAgB,OAAO,KAAK,CAAC;AAC7B,SAAS;AACT;AACA,QAAQ,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;AACzC,YAAY,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;AACzC,gBAAgB,SAAS;AACzB,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,CAAC;AAC1F,gBAAgB,OAAO,KAAK,CAAC;AAC7B,SAAS;AACT,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL,IAAI,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE;AACpD,QAAQ,IAAI,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;AACpC,QAAQ,QAAQ,KAAK,CAAC,IAAI;AAC1B,YAAY,KAAK,QAAQ;AACzB,gBAAgB,IAAI,GAAG,KAAK,SAAS;AACrC,oBAAoB,OAAO,KAAK,CAAC,GAAG,CAAC;AACrC,gBAAgB,IAAI,QAAQ;AAC5B,oBAAoB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACtE,gBAAgB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1D,YAAY,KAAK,MAAM;AACvB,gBAAgB,IAAI,GAAG,KAAK,SAAS;AACrC,oBAAoB,OAAO,KAAK,CAAC,GAAG,CAAC;AACrC,gBAAgB,IAAI,QAAQ;AAC5B,oBAAoB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACtE,gBAAgB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;AAC1D,YAAY,KAAK,SAAS;AAC1B,gBAAgB,IAAI,GAAG,KAAK,SAAS;AACrC,oBAAoB,OAAO,IAAI,CAAC;AAChC,gBAAgB,IAAI,QAAQ;AAC5B,oBAAoB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,qBAAqB,EAAE,KAAK,CAAC,CAAC;AACvF,gBAAgB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,qBAAqB,EAAE,KAAK,CAAC,CAAC;AAClF,YAAY,KAAK,KAAK;AACtB,gBAAgB,IAAI,OAAO,GAAG,IAAI,QAAQ,IAAI,GAAG,KAAK,IAAI;AAC1D,oBAAoB,OAAO,KAAK,CAAC;AACjC,gBAAgB,IAAI,KAAK,GAAG,CAAC;AAC7B,oBAAoB,OAAO,IAAI,CAAC;AAChC,gBAAgB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;AACtD,oBAAoB,OAAO,KAAK,CAAC;AACjC,gBAAgB,QAAQ,KAAK,CAAC,CAAC,CAAC,IAAI;AACpC,oBAAoB,KAAK,QAAQ;AACjC,wBAAwB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7F,oBAAoB,KAAK,MAAM;AAC/B,wBAAwB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACzF,oBAAoB,KAAK,SAAS;AAClC,wBAAwB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,qBAAqB,EAAE,KAAK,CAAC,CAAC;AAC5G,iBAAiB;AACjB,gBAAgB,MAAM;AACtB,SAAS;AACT,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL,IAAI,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE;AACrD,QAAQ,IAAI,qBAAqB,EAAE;AACnC,YAAY,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACjD,SAAS;AACT,QAAQ,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACnC,KAAK;AACL,IAAI,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE;AACtD,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;AAC/B,YAAY,OAAO,KAAK,CAAC;AACzB,QAAQ,IAAI,KAAK,GAAG,CAAC;AACrB,YAAY,OAAO,IAAI,CAAC;AACxB,QAAQ,IAAI,qBAAqB,EAAE;AACnC,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE;AAC5D,gBAAgB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;AACzD,oBAAoB,OAAO,KAAK,CAAC;AACjC,SAAS;AACT,aAAa;AACb,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE;AAC5D,gBAAgB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;AAC/C,oBAAoB,OAAO,KAAK,CAAC;AACjC,SAAS;AACT,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL,IAAI,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE;AAChC,QAAQ,IAAI,OAAO,GAAG,OAAO,GAAG,CAAC;AACjC,QAAQ,QAAQ,IAAI;AACpB,YAAY,KAAK,UAAU,CAAC,MAAM,CAAC;AACnC,YAAY,KAAK,UAAU,CAAC,OAAO,CAAC;AACpC,YAAY,KAAK,UAAU,CAAC,KAAK,CAAC;AAClC,YAAY,KAAK,UAAU,CAAC,QAAQ,CAAC;AACrC,YAAY,KAAK,UAAU,CAAC,MAAM;AAClC,gBAAgB,QAAQ,QAAQ;AAChC,oBAAoB,KAAK,QAAQ,CAAC,MAAM;AACxC,wBAAwB,OAAO,OAAO,IAAI,QAAQ,CAAC;AACnD,oBAAoB,KAAK,QAAQ,CAAC,MAAM;AACxC,wBAAwB,OAAO,OAAO,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAClE,oBAAoB;AACpB,wBAAwB,OAAO,OAAO,IAAI,QAAQ,CAAC;AACnD,iBAAiB;AACjB,YAAY,KAAK,UAAU,CAAC,IAAI;AAChC,gBAAgB,OAAO,OAAO,IAAI,SAAS,CAAC;AAC5C,YAAY,KAAK,UAAU,CAAC,MAAM;AAClC,gBAAgB,OAAO,OAAO,IAAI,QAAQ,CAAC;AAC3C,YAAY,KAAK,UAAU,CAAC,KAAK;AACjC,gBAAgB,OAAO,GAAG,YAAY,UAAU,CAAC;AACjD,YAAY,KAAK,UAAU,CAAC,MAAM,CAAC;AACnC,YAAY,KAAK,UAAU,CAAC,KAAK;AACjC,gBAAgB,OAAO,OAAO,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC1D,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO,OAAO,IAAI,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AACpE,SAAS;AACT,KAAK;AACL,IAAI,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;AACxC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;AAC/B,YAAY,OAAO,KAAK,CAAC;AACzB,QAAQ,IAAI,KAAK,GAAG,CAAC;AACrB,YAAY,OAAO,IAAI,CAAC;AACxB,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;AAC9B,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE;AAC5D,gBAAgB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC;AACxD,oBAAoB,OAAO,KAAK,CAAC;AACjC,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL,IAAI,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE;AAC9B,QAAQ,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpC,QAAQ,QAAQ,IAAI;AACpB,YAAY,KAAK,UAAU,CAAC,KAAK,CAAC;AAClC,YAAY,KAAK,UAAU,CAAC,OAAO,CAAC;AACpC,YAAY,KAAK,UAAU,CAAC,QAAQ,CAAC;AACrC,YAAY,KAAK,UAAU,CAAC,MAAM,CAAC;AACnC,YAAY,KAAK,UAAU,CAAC,MAAM;AAClC,gBAAgB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAC7F,YAAY,KAAK,UAAU,CAAC,IAAI;AAChC,gBAAgB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAC/H,YAAY;AACZ,gBAAgB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;AACxE,SAAS;AACT,KAAK;AACL;;AChOA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE;AAClD,IAAI,QAAQ,IAAI;AAChB,QAAQ,KAAK,QAAQ,CAAC,MAAM;AAC5B,YAAY,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;AACnC,QAAQ,KAAK,QAAQ,CAAC,MAAM;AAC5B,YAAY,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;AACnC,QAAQ;AACR;AACA;AACA,YAAY,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;AACnC,KAAK;AACL;;ACbA;AACA;AACA;AACA;AACA;AACO,MAAM,oBAAoB,CAAC;AAClC,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,IAAI,OAAO,GAAG;AACd,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;AACrC,YAAY,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AAC3B,YAAY,MAAM,WAAW,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;AAC5F,YAAY,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE;AAC7C,gBAAgB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AAC9C,gBAAgB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;AAClD,gBAAgB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;AACnD,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA,IAAI,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;AAC5C,QAAQ,IAAI,CAAC,SAAS,EAAE;AACxB,YAAY,IAAI,IAAI,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;AAClD,YAAY,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,SAAS;AACrD,gBAAgB,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;AAC5C,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,kBAAkB,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AAChG,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE;AAClC,QAAQ,IAAI,CAAC,OAAO,EAAE,CAAC;AACvB,QAAQ,MAAM,aAAa,GAAG,EAAE,CAAC;AACjC,QAAQ,KAAK,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAClE,YAAY,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7C,YAAY,IAAI,CAAC,KAAK,EAAE;AACxB,gBAAgB,IAAI,CAAC,OAAO,CAAC,mBAAmB;AAChD,oBAAoB,MAAM,IAAI,KAAK,CAAC,CAAC,kCAAkC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACtI,gBAAgB,SAAS;AACzB,aAAa;AACb,YAAY,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;AAC9C;AACA,YAAY,IAAI,MAAM,CAAC;AACvB,YAAY,IAAI,KAAK,CAAC,KAAK,EAAE;AAC7B,gBAAgB,IAAI,SAAS,KAAK,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,2BAA2B,CAAC,EAAE;AACnH,oBAAoB,SAAS;AAC7B,iBAAiB;AACjB;AACA,gBAAgB,IAAI,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;AACvD,oBAAoB,MAAM,IAAI,KAAK,CAAC,CAAC,qCAAqC,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;AAC1I,gBAAgB,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAChD,gBAAgB,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG;AAChD,oBAAoB,SAAS,EAAE,SAAS;AACxC,iBAAiB,CAAC;AAClB,aAAa;AACb,iBAAiB;AACjB,gBAAgB,MAAM,GAAG,OAAO,CAAC;AACjC,aAAa;AACb;AACA,YAAY,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,EAAE;AACrC,gBAAgB,IAAI,SAAS,KAAK,IAAI,EAAE;AACxC,oBAAoB,SAAS;AAC7B,iBAAiB;AACjB;AACA,gBAAgB,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAC5E;AACA,gBAAgB,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AACnD;AACA,gBAAgB,KAAK,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AACpF,oBAAoB,IAAI,CAAC,MAAM,CAAC,YAAY,KAAK,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,YAAY,EAAE,IAAI,CAAC,CAAC;AACxF;AACA,oBAAoB,IAAI,GAAG,CAAC;AAC5B,oBAAoB,QAAQ,KAAK,CAAC,CAAC,CAAC,IAAI;AACxC,wBAAwB,KAAK,SAAS;AACtC,4BAA4B,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;AACtF,4BAA4B,MAAM;AAClC,wBAAwB,KAAK,MAAM;AACnC,4BAA4B,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAChH,4BAA4B,IAAI,GAAG,KAAK,KAAK;AAC7C,gCAAgC,SAAS;AACzC,4BAA4B,MAAM;AAClC,wBAAwB,KAAK,QAAQ;AACrC,4BAA4B,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AAC9F,4BAA4B,MAAM;AAClC,qBAAqB;AACrB,oBAAoB,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,SAAS,EAAE,KAAK,CAAC,IAAI,GAAG,YAAY,EAAE,YAAY,CAAC,CAAC;AAC5F;AACA,oBAAoB,IAAI,GAAG,GAAG,UAAU,CAAC;AACzC,oBAAoB,IAAI,KAAK,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI;AAClD,wBAAwB,GAAG,GAAG,GAAG,IAAI,MAAM,GAAG,IAAI,GAAG,GAAG,IAAI,OAAO,GAAG,KAAK,GAAG,GAAG,CAAC;AAClF,oBAAoB,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC5F,oBAAoB,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AACxC,iBAAiB;AACjB,aAAa;AACb,iBAAiB,IAAI,KAAK,CAAC,MAAM,EAAE;AACnC,gBAAgB,IAAI,SAAS,KAAK,IAAI;AACtC,oBAAoB,SAAS;AAC7B;AACA,gBAAgB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAC7E;AACA,gBAAgB,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AACnD;AACA,gBAAgB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;AAClD,oBAAoB,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACrE,oBAAoB,IAAI,GAAG,CAAC;AAC5B,oBAAoB,QAAQ,KAAK,CAAC,IAAI;AACtC,wBAAwB,KAAK,SAAS;AACtC,4BAA4B,GAAG,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAChF,4BAA4B,MAAM;AAClC,wBAAwB,KAAK,MAAM;AACnC,4BAA4B,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAC1G,4BAA4B,IAAI,GAAG,KAAK,KAAK;AAC7C,gCAAgC,SAAS;AACzC,4BAA4B,MAAM;AAClC,wBAAwB,KAAK,QAAQ;AACrC,4BAA4B,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AACtF,4BAA4B,MAAM;AAClC,qBAAqB;AACrB,oBAAoB,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAC1E,oBAAoB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvC,iBAAiB;AACjB,aAAa;AACb,iBAAiB;AACjB,gBAAgB,QAAQ,KAAK,CAAC,IAAI;AAClC,oBAAoB,KAAK,SAAS;AAClC,wBAAwB,IAAI,SAAS,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,IAAI,uBAAuB,EAAE;AACjG,4BAA4B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,KAAK,CAAC,IAAI,GAAG,iBAAiB,EAAE,IAAI,CAAC,CAAC;AACzG,4BAA4B,SAAS;AACrC,yBAAyB;AACzB,wBAAwB,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;AAC9G,wBAAwB,MAAM;AAC9B,oBAAoB,KAAK,MAAM;AAC/B,wBAAwB,IAAI,SAAS,KAAK,IAAI;AAC9C,4BAA4B,SAAS;AACrC,wBAAwB,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAC3G,wBAAwB,IAAI,GAAG,KAAK,KAAK;AACzC,4BAA4B,SAAS;AACrC,wBAAwB,MAAM,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC;AAChD,wBAAwB,MAAM;AAC9B,oBAAoB,KAAK,QAAQ;AACjC,wBAAwB,IAAI,SAAS,KAAK,IAAI;AAC9C,4BAA4B,SAAS;AACrC,wBAAwB,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AACjG,wBAAwB,MAAM;AAC9B,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,mBAAmB,EAAE;AACrD,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,2BAA2B;AAClD,YAAY,MAAM,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC,sBAAsB,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;AAC3J,QAAQ,IAAI,IAAI,KAAK,IAAI;AACzB;AACA,YAAY,OAAO,CAAC,CAAC;AACrB,QAAQ,QAAQ,OAAO,IAAI;AAC3B,YAAY,KAAK,QAAQ;AACzB,gBAAgB,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,sBAAsB,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,wCAAwC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3J,gBAAgB,OAAO,IAAI,CAAC;AAC5B,YAAY,KAAK,QAAQ;AACzB,gBAAgB,IAAI,aAAa,GAAG,IAAI,CAAC;AACzC,gBAAgB,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;AAC5E;AACA,oBAAoB,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACnE,gBAAgB,IAAI,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;AACxD,gBAAgB,IAAI,OAAO,UAAU,KAAK,WAAW,IAAI,mBAAmB,EAAE;AAC9E,oBAAoB,OAAO,KAAK,CAAC;AACjC,iBAAiB;AACjB,gBAAgB,MAAM,CAAC,OAAO,UAAU,IAAI,QAAQ,EAAE,CAAC,sBAAsB,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,mBAAmB,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/J,gBAAgB,OAAO,UAAU,CAAC;AAClC,SAAS;AACT,QAAQ,MAAM,CAAC,KAAK,EAAE,CAAC,sBAAsB,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,+BAA+B,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACjI,KAAK;AACL,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE;AAC5C,QAAQ,IAAI,CAAC,CAAC;AACd,QAAQ,IAAI;AACZ,YAAY,QAAQ,IAAI;AACxB;AACA;AACA,gBAAgB,KAAK,UAAU,CAAC,MAAM,CAAC;AACvC,gBAAgB,KAAK,UAAU,CAAC,KAAK;AACrC,oBAAoB,IAAI,IAAI,KAAK,IAAI;AACrC,wBAAwB,OAAO,EAAE,CAAC;AAClC,oBAAoB,IAAI,IAAI,KAAK,KAAK;AACtC,wBAAwB,OAAO,MAAM,CAAC,GAAG,CAAC;AAC1C,oBAAoB,IAAI,IAAI,KAAK,UAAU;AAC3C,wBAAwB,OAAO,MAAM,CAAC,iBAAiB,CAAC;AACxD,oBAAoB,IAAI,IAAI,KAAK,WAAW;AAC5C,wBAAwB,OAAO,MAAM,CAAC,iBAAiB,CAAC;AACxD,oBAAoB,IAAI,IAAI,KAAK,EAAE,EAAE;AACrC,wBAAwB,CAAC,GAAG,cAAc,CAAC;AAC3C,wBAAwB,MAAM;AAC9B,qBAAqB;AACrB,oBAAoB,IAAI,OAAO,IAAI,IAAI,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE;AACvF,wBAAwB,CAAC,GAAG,kBAAkB,CAAC;AAC/C,wBAAwB,MAAM;AAC9B,qBAAqB;AACrB,oBAAoB,IAAI,OAAO,IAAI,IAAI,QAAQ,IAAI,OAAO,IAAI,IAAI,QAAQ,EAAE;AAC5E,wBAAwB,MAAM;AAC9B,qBAAqB;AACrB,oBAAoB,IAAI,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7C,oBAAoB,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AAC7C,wBAAwB,CAAC,GAAG,cAAc,CAAC;AAC3C,wBAAwB,MAAM;AAC9B,qBAAqB;AACrB,oBAAoB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACjD;AACA,wBAAwB,CAAC,GAAG,oBAAoB,CAAC;AACjD,wBAAwB,MAAM;AAC9B,qBAAqB;AACrB,oBAAoB,IAAI,IAAI,IAAI,UAAU,CAAC,KAAK;AAChD,wBAAwB,aAAa,CAAC,KAAK,CAAC,CAAC;AAC7C,oBAAoB,OAAO,KAAK,CAAC;AACjC;AACA,gBAAgB,KAAK,UAAU,CAAC,KAAK,CAAC;AACtC,gBAAgB,KAAK,UAAU,CAAC,OAAO,CAAC;AACxC,gBAAgB,KAAK,UAAU,CAAC,QAAQ,CAAC;AACzC,gBAAgB,KAAK,UAAU,CAAC,MAAM,CAAC;AACvC,gBAAgB,KAAK,UAAU,CAAC,MAAM;AACtC,oBAAoB,IAAI,IAAI,KAAK,IAAI;AACrC,wBAAwB,OAAO,CAAC,CAAC;AACjC,oBAAoB,IAAI,KAAK,CAAC;AAC9B,oBAAoB,IAAI,OAAO,IAAI,IAAI,QAAQ;AAC/C,wBAAwB,KAAK,GAAG,IAAI,CAAC;AACrC,yBAAyB,IAAI,IAAI,KAAK,EAAE;AACxC,wBAAwB,CAAC,GAAG,cAAc,CAAC;AAC3C,yBAAyB,IAAI,OAAO,IAAI,IAAI,QAAQ,EAAE;AACtD,wBAAwB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;AAC9D,4BAA4B,CAAC,GAAG,kBAAkB,CAAC;AACnD;AACA,4BAA4B,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AACjD,qBAAqB;AACrB,oBAAoB,IAAI,KAAK,KAAK,SAAS;AAC3C,wBAAwB,MAAM;AAC9B,oBAAoB,IAAI,IAAI,IAAI,UAAU,CAAC,MAAM;AACjD,wBAAwB,YAAY,CAAC,KAAK,CAAC,CAAC;AAC5C;AACA,wBAAwB,WAAW,CAAC,KAAK,CAAC,CAAC;AAC3C,oBAAoB,OAAO,KAAK,CAAC;AACjC;AACA,gBAAgB,KAAK,UAAU,CAAC,KAAK,CAAC;AACtC,gBAAgB,KAAK,UAAU,CAAC,QAAQ,CAAC;AACzC,gBAAgB,KAAK,UAAU,CAAC,MAAM;AACtC,oBAAoB,IAAI,IAAI,KAAK,IAAI;AACrC,wBAAwB,OAAO,qBAAqB,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC5E,oBAAoB,IAAI,OAAO,IAAI,IAAI,QAAQ,IAAI,OAAO,IAAI,IAAI,QAAQ;AAC1E,wBAAwB,MAAM;AAC9B,oBAAoB,OAAO,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC9E,gBAAgB,KAAK,UAAU,CAAC,OAAO,CAAC;AACxC,gBAAgB,KAAK,UAAU,CAAC,MAAM;AACtC,oBAAoB,IAAI,IAAI,KAAK,IAAI;AACrC,wBAAwB,OAAO,qBAAqB,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7E,oBAAoB,IAAI,OAAO,IAAI,IAAI,QAAQ,IAAI,OAAO,IAAI,IAAI,QAAQ;AAC1E,wBAAwB,MAAM;AAC9B,oBAAoB,OAAO,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC/E;AACA,gBAAgB,KAAK,UAAU,CAAC,IAAI;AACpC,oBAAoB,IAAI,IAAI,KAAK,IAAI;AACrC,wBAAwB,OAAO,KAAK,CAAC;AACrC,oBAAoB,IAAI,OAAO,IAAI,KAAK,SAAS;AACjD,wBAAwB,MAAM;AAC9B,oBAAoB,OAAO,IAAI,CAAC;AAChC;AACA,gBAAgB,KAAK,UAAU,CAAC,MAAM;AACtC,oBAAoB,IAAI,IAAI,KAAK,IAAI;AACrC,wBAAwB,OAAO,EAAE,CAAC;AAClC,oBAAoB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAClD,wBAAwB,CAAC,GAAG,kBAAkB,CAAC;AAC/C,wBAAwB,MAAM;AAC9B,qBAAqB;AACrB,oBAAoB,IAAI;AACxB,wBAAwB,kBAAkB,CAAC,IAAI,CAAC,CAAC;AACjD,qBAAqB;AACrB,oBAAoB,OAAO,CAAC,EAAE;AAC9B,wBAAwB,CAAC,GAAG,cAAc,CAAC;AAC3C,wBAAwB,MAAM;AAC9B,qBAAqB;AACrB,oBAAoB,OAAO,IAAI,CAAC;AAChC;AACA;AACA,gBAAgB,KAAK,UAAU,CAAC,KAAK;AACrC,oBAAoB,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;AACpD,wBAAwB,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;AACjD,oBAAoB,IAAI,OAAO,IAAI,KAAK,QAAQ;AAChD,wBAAwB,MAAM;AAC9B,oBAAoB,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;AAC9C,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;AAC9B,SAAS;AACT,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AACnE,KAAK;AACL;;ACpTA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,oBAAoB,CAAC;AAClC,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;AAC7E,KAAK;AACL;AACA;AACA;AACA,IAAI,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE;AAC5B,QAAQ,MAAM,IAAI,GAAG,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;AAC1C,QAAQ,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;AACzC;AACA,YAAY,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAC9B,gBAAgB,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;AACpF,gBAAgB,IAAI,SAAS,KAAK,SAAS;AAC3C,oBAAoB,IAAI,CAAC,OAAO,CAAC,iBAAiB,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;AAC9F,gBAAgB,SAAS;AACzB,aAAa;AACb;AACA,YAAY,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC9C,YAAY,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS;AACnD,gBAAgB,SAAS;AACzB,YAAY,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,QAAQ,IAAI,KAAK,CAAC,IAAI,IAAI,MAAM;AACtE,kBAAkB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC;AACnG,YAAY,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;AAC3E,YAAY,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;AAC5C,YAAY,IAAI,CAAC,OAAO,CAAC,iBAAiB,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;AACtF,SAAS;AACT,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL,IAAI,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE;AACjC,QAAQ,IAAI,SAAS,GAAG,SAAS,CAAC;AAClC,QAAQ,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,EAAE;AACjC,YAAY,MAAM,CAAC,OAAO,KAAK,IAAI,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC;AAC/D,YAAY,MAAM,OAAO,GAAG,EAAE,CAAC;AAC/B,YAAY,QAAQ,KAAK,CAAC,CAAC,CAAC,IAAI;AAChC,gBAAgB,KAAK,QAAQ;AAC7B,oBAAoB,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAChF,wBAAwB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAChG,wBAAwB,MAAM,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC;AAClD,wBAAwB,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,GAAG,CAAC;AAC3D,qBAAqB;AACrB,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,SAAS;AAC9B,oBAAoB,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACpD,oBAAoB,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAChF,wBAAwB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC/F,wBAAwB,MAAM,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC;AAClD,wBAAwB,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,GAAG,CAAC;AAC3D,qBAAqB;AACrB,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,MAAM;AAC3B,oBAAoB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACjD,oBAAoB,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAChF,wBAAwB,MAAM,CAAC,UAAU,KAAK,SAAS,IAAI,OAAO,UAAU,IAAI,QAAQ,CAAC,CAAC;AAC1F,wBAAwB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;AACpH,wBAAwB,MAAM,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC;AAClD,wBAAwB,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,GAAG,CAAC;AAC3D,qBAAqB;AACrB,oBAAoB,MAAM;AAC1B,aAAa;AACb,YAAY,IAAI,OAAO,CAAC,iBAAiB,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC;AAC5E,gBAAgB,SAAS,GAAG,OAAO,CAAC;AACpC,SAAS;AACT,aAAa,IAAI,KAAK,CAAC,MAAM,EAAE;AAC/B,YAAY,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AACzC,YAAY,MAAM,OAAO,GAAG,EAAE,CAAC;AAC/B,YAAY,QAAQ,KAAK,CAAC,IAAI;AAC9B,gBAAgB,KAAK,QAAQ;AAC7B,oBAAoB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC3D,wBAAwB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAChG,wBAAwB,MAAM,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC;AAClD,wBAAwB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1C,qBAAqB;AACrB,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,MAAM;AAC3B,oBAAoB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;AAC/C,oBAAoB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC3D,wBAAwB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC;AACtF,wBAAwB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;AACtH,wBAAwB,MAAM,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC;AAClD,wBAAwB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1C,qBAAqB;AACrB,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,SAAS;AAC9B,oBAAoB,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;AAClD,oBAAoB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC3D,wBAAwB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC7F,wBAAwB,MAAM,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC;AAClD,wBAAwB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1C,qBAAqB;AACrB,oBAAoB,MAAM;AAC1B,aAAa;AACb;AACA,YAAY,IAAI,OAAO,CAAC,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,iBAAiB;AAC5F,gBAAgB,SAAS,GAAG,OAAO,CAAC;AACpC,SAAS;AACT,aAAa;AACb,YAAY,QAAQ,KAAK,CAAC,IAAI;AAC9B,gBAAgB,KAAK,QAAQ;AAC7B,oBAAoB,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAC9G,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,MAAM;AAC3B,oBAAoB,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;AACrI,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,SAAS;AAC9B,oBAAoB,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACpF,oBAAoB,MAAM;AAC1B,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,SAAS,CAAC;AACzB,KAAK;AACL;AACA;AACA;AACA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,EAAE,aAAa,EAAE;AAC7E,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,2BAA2B;AAClD,YAAY,OAAO,CAAC,iBAAiB,IAAI,CAAC,QAAQ,GAAG,SAAS,GAAG,IAAI,CAAC;AACtE,QAAQ,IAAI,KAAK,KAAK,SAAS,EAAE;AACjC,YAAY,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC7B,YAAY,OAAO,SAAS,CAAC;AAC7B,SAAS;AACT,QAAQ,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,QAAQ;AAC1D;AACA,YAAY,OAAO,SAAS,CAAC;AAC7B,QAAQ,MAAM,CAAC,OAAO,KAAK,IAAI,QAAQ,CAAC,CAAC;AACzC,QAAQ,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACxC,QAAQ,IAAI,aAAa,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC;AAC3D;AACA,YAAY,OAAO,KAAK,CAAC;AACzB,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC;AACnB;AACA,YAAY,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC5C,QAAQ,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC9B,KAAK;AACL,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE;AAC7C,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,OAAO,OAAO,CAAC,iBAAiB,GAAG,IAAI,GAAG,SAAS,CAAC;AAChE,QAAQ,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACtD,KAAK;AACL,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,EAAE;AAChE,QAAQ,IAAI,KAAK,KAAK,SAAS,EAAE;AACjC,YAAY,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC7B,YAAY,OAAO,SAAS,CAAC;AAC7B,SAAS;AACT,QAAQ,MAAM,EAAE,GAAG,iBAAiB,IAAI,QAAQ,CAAC;AACjD;AACA,QAAQ,QAAQ,IAAI;AACpB;AACA,YAAY,KAAK,UAAU,CAAC,KAAK,CAAC;AAClC,YAAY,KAAK,UAAU,CAAC,QAAQ,CAAC;AACrC,YAAY,KAAK,UAAU,CAAC,MAAM;AAClC,gBAAgB,IAAI,KAAK,KAAK,CAAC;AAC/B,oBAAoB,OAAO,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC;AAC9C,gBAAgB,WAAW,CAAC,KAAK,CAAC,CAAC;AACnC,gBAAgB,OAAO,KAAK,CAAC;AAC7B,YAAY,KAAK,UAAU,CAAC,OAAO,CAAC;AACpC,YAAY,KAAK,UAAU,CAAC,MAAM;AAClC,gBAAgB,IAAI,KAAK,KAAK,CAAC;AAC/B,oBAAoB,OAAO,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC;AAC9C,gBAAgB,YAAY,CAAC,KAAK,CAAC,CAAC;AACpC,gBAAgB,OAAO,KAAK,CAAC;AAC7B;AACA;AACA,YAAY,KAAK,UAAU,CAAC,KAAK;AACjC,gBAAgB,aAAa,CAAC,KAAK,CAAC,CAAC;AACrC,YAAY,KAAK,UAAU,CAAC,MAAM;AAClC,gBAAgB,IAAI,KAAK,KAAK,CAAC;AAC/B,oBAAoB,OAAO,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC;AAC9C,gBAAgB,MAAM,CAAC,OAAO,KAAK,IAAI,QAAQ,CAAC,CAAC;AACjD,gBAAgB,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;AACvC,oBAAoB,OAAO,KAAK,CAAC;AACjC,gBAAgB,IAAI,KAAK,KAAK,MAAM,CAAC,iBAAiB;AACtD,oBAAoB,OAAO,UAAU,CAAC;AACtC,gBAAgB,IAAI,KAAK,KAAK,MAAM,CAAC,iBAAiB;AACtD,oBAAoB,OAAO,WAAW,CAAC;AACvC,gBAAgB,OAAO,KAAK,CAAC;AAC7B;AACA,YAAY,KAAK,UAAU,CAAC,MAAM;AAClC,gBAAgB,IAAI,KAAK,KAAK,EAAE;AAChC,oBAAoB,OAAO,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC;AAC/C,gBAAgB,MAAM,CAAC,OAAO,KAAK,IAAI,QAAQ,CAAC,CAAC;AACjD,gBAAgB,OAAO,KAAK,CAAC;AAC7B;AACA,YAAY,KAAK,UAAU,CAAC,IAAI;AAChC,gBAAgB,IAAI,KAAK,KAAK,KAAK;AACnC,oBAAoB,OAAO,EAAE,GAAG,KAAK,GAAG,SAAS,CAAC;AAClD,gBAAgB,MAAM,CAAC,OAAO,KAAK,IAAI,SAAS,CAAC,CAAC;AAClD,gBAAgB,OAAO,KAAK,CAAC;AAC7B;AACA,YAAY,KAAK,UAAU,CAAC,MAAM,CAAC;AACnC,YAAY,KAAK,UAAU,CAAC,OAAO;AACnC,gBAAgB,MAAM,CAAC,OAAO,KAAK,IAAI,QAAQ,IAAI,OAAO,KAAK,IAAI,QAAQ,IAAI,OAAO,KAAK,IAAI,QAAQ,CAAC,CAAC;AACzG,gBAAgB,IAAI,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChD,gBAAgB,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;AACzC,oBAAoB,OAAO,SAAS,CAAC;AACrC,gBAAgB,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;AACxC;AACA,YAAY,KAAK,UAAU,CAAC,KAAK,CAAC;AAClC,YAAY,KAAK,UAAU,CAAC,QAAQ,CAAC;AACrC,YAAY,KAAK,UAAU,CAAC,MAAM;AAClC,gBAAgB,MAAM,CAAC,OAAO,KAAK,IAAI,QAAQ,IAAI,OAAO,KAAK,IAAI,QAAQ,IAAI,OAAO,KAAK,IAAI,QAAQ,CAAC,CAAC;AACzG,gBAAgB,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9C,gBAAgB,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;AACxC,oBAAoB,OAAO,SAAS,CAAC;AACrC,gBAAgB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;AACvC;AACA;AACA,YAAY,KAAK,UAAU,CAAC,KAAK;AACjC,gBAAgB,MAAM,CAAC,KAAK,YAAY,UAAU,CAAC,CAAC;AACpD,gBAAgB,IAAI,CAAC,KAAK,CAAC,UAAU;AACrC,oBAAoB,OAAO,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC;AAC/C,gBAAgB,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;AAC3C,SAAS;AACT,KAAK;AACL;;AC9NA;AACA;AACA;AACO,SAAS,uBAAuB,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC,MAAM,EAAE;AAC1E,IAAI,QAAQ,IAAI;AAChB,QAAQ,KAAK,UAAU,CAAC,IAAI;AAC5B,YAAY,OAAO,KAAK,CAAC;AACzB,QAAQ,KAAK,UAAU,CAAC,MAAM,CAAC;AAC/B,QAAQ,KAAK,UAAU,CAAC,OAAO;AAC/B,YAAY,OAAO,qBAAqB,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACjE,QAAQ,KAAK,UAAU,CAAC,KAAK,CAAC;AAC9B,QAAQ,KAAK,UAAU,CAAC,QAAQ,CAAC;AACjC,QAAQ,KAAK,UAAU,CAAC,MAAM;AAC9B,YAAY,OAAO,qBAAqB,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAChE,QAAQ,KAAK,UAAU,CAAC,MAAM,CAAC;AAC/B,QAAQ,KAAK,UAAU,CAAC,KAAK;AAC7B,YAAY,OAAO,GAAG,CAAC;AACvB,QAAQ,KAAK,UAAU,CAAC,KAAK;AAC7B,YAAY,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;AACrC,QAAQ,KAAK,UAAU,CAAC,MAAM;AAC9B,YAAY,OAAO,EAAE,CAAC;AACtB,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO,CAAC,CAAC;AACrB,KAAK;AACL;;AC5BA;AACA;AACA;AACA;AACA;AACO,MAAM,sBAAsB,CAAC;AACpC,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,IAAI,OAAO,GAAG;AACd,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAClC,YAAY,MAAM,WAAW,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;AAC5F,YAAY,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACvF,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE;AAC3C,QAAQ,IAAI,CAAC,OAAO,EAAE,CAAC;AACvB,QAAQ,MAAM,GAAG,GAAG,MAAM,KAAK,SAAS,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC5E,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC;AACA,YAAY,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,EAAE,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC/F,YAAY,IAAI,CAAC,KAAK,EAAE;AACxB,gBAAgB,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACjD,gBAAgB,IAAI,CAAC,IAAI,OAAO;AAChC,oBAAoB,MAAM,IAAI,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAClH,gBAAgB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9C,gBAAgB,IAAI,CAAC,KAAK,KAAK;AAC/B,oBAAoB,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACrH,gBAAgB,SAAS;AACzB,aAAa;AACb;AACA,YAAY,IAAI,MAAM,GAAG,OAAO,EAAE,QAAQ,GAAG,KAAK,CAAC,MAAM,EAAE,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;AACvF;AACA,YAAY,IAAI,KAAK,CAAC,KAAK,EAAE;AAC7B,gBAAgB,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC7C;AACA,gBAAgB,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS;AAClD,oBAAoB,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG;AACpD,wBAAwB,SAAS,EAAE,SAAS;AAC5C,qBAAqB,CAAC;AACtB,aAAa;AACb;AACA,YAAY,QAAQ,KAAK,CAAC,IAAI;AAC9B,gBAAgB,KAAK,QAAQ,CAAC;AAC9B,gBAAgB,KAAK,MAAM;AAC3B,oBAAoB,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,MAAM,GAAG,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;AAC9E,oBAAoB,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,QAAQ,GAAG,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC;AACzE,oBAAoB,IAAI,QAAQ,EAAE;AAClC,wBAAwB,IAAI,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AACpD,wBAAwB,IAAI,QAAQ,IAAI,QAAQ,CAAC,eAAe,IAAI,CAAC,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,UAAU,CAAC,KAAK,EAAE;AACrH,4BAA4B,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC;AACjE,4BAA4B,OAAO,MAAM,CAAC,GAAG,GAAG,CAAC;AACjD,gCAAgC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACpE,yBAAyB;AACzB;AACA,4BAA4B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAChE,qBAAqB;AACrB;AACA,wBAAwB,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACtE,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,SAAS;AAC9B,oBAAoB,IAAI,QAAQ,EAAE;AAClC,wBAAwB,IAAI,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AACpD,wBAAwB,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;AACjG,wBAAwB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtC,qBAAqB;AACrB;AACA,wBAAwB,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;AAC9H,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,KAAK;AAC1B,oBAAoB,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AACjF;AACA,oBAAoB,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;AACvD,oBAAoB,MAAM;AAC1B,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE;AACrC,QAAQ,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACrC,QAAQ,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AACtC,QAAQ,IAAI,GAAG,GAAG,SAAS,CAAC;AAC5B,QAAQ,IAAI,GAAG,GAAG,SAAS,CAAC;AAC5B,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,QAAQ,OAAO;AAC3B,gBAAgB,KAAK,CAAC;AACtB,oBAAoB,IAAI,KAAK,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI;AAClD,wBAAwB,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;AACvD;AACA;AACA,wBAAwB,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC5E,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,CAAC;AACtB,oBAAoB,QAAQ,KAAK,CAAC,CAAC,CAAC,IAAI;AACxC,wBAAwB,KAAK,QAAQ;AACrC,4BAA4B,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5E,4BAA4B,MAAM;AAClC,wBAAwB,KAAK,MAAM;AACnC,4BAA4B,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;AACjD,4BAA4B,MAAM;AAClC,wBAAwB,KAAK,SAAS;AACtC,4BAA4B,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;AACnG,4BAA4B,MAAM;AAClC,qBAAqB;AACrB,oBAAoB,MAAM;AAC1B,gBAAgB;AAChB,oBAAoB,MAAM,IAAI,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7I,aAAa;AACb,SAAS;AACT,QAAQ,IAAI,GAAG,KAAK,SAAS,EAAE;AAC/B,YAAY,IAAI,MAAM,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1D,YAAY,GAAG,GAAG,KAAK,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC;AAC1E,SAAS;AACT,QAAQ,IAAI,GAAG,KAAK,SAAS;AAC7B,YAAY,QAAQ,KAAK,CAAC,CAAC,CAAC,IAAI;AAChC,gBAAgB,KAAK,QAAQ;AAC7B,oBAAoB,GAAG,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,MAAM;AAC3B,oBAAoB,GAAG,GAAG,CAAC,CAAC;AAC5B,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,SAAS;AAC9B,oBAAoB,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;AAC/C,oBAAoB,MAAM;AAC1B,aAAa;AACb,QAAQ,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAC1B,KAAK;AACL,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE;AACnC,QAAQ,QAAQ,IAAI;AACpB,YAAY,KAAK,UAAU,CAAC,KAAK;AACjC,gBAAgB,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC;AACtC,YAAY,KAAK,UAAU,CAAC,MAAM;AAClC,gBAAgB,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC;AACvC,YAAY,KAAK,UAAU,CAAC,IAAI;AAChC,gBAAgB,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACrC,YAAY,KAAK,UAAU,CAAC,MAAM;AAClC,gBAAgB,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC;AACvC,YAAY,KAAK,UAAU,CAAC,KAAK;AACjC,gBAAgB,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC;AACtC,YAAY,KAAK,UAAU,CAAC,KAAK;AACjC,gBAAgB,OAAO,qBAAqB,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,QAAQ,CAAC,CAAC;AACvE,YAAY,KAAK,UAAU,CAAC,MAAM;AAClC,gBAAgB,OAAO,qBAAqB,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC;AACxE,YAAY,KAAK,UAAU,CAAC,OAAO;AACnC,gBAAgB,OAAO,qBAAqB,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AACzE,YAAY,KAAK,UAAU,CAAC,OAAO;AACnC,gBAAgB,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC;AACxC,YAAY,KAAK,UAAU,CAAC,KAAK;AACjC,gBAAgB,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC;AACtC,YAAY,KAAK,UAAU,CAAC,MAAM;AAClC,gBAAgB,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC;AACvC,YAAY,KAAK,UAAU,CAAC,QAAQ;AACpC,gBAAgB,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;AACzC,YAAY,KAAK,UAAU,CAAC,QAAQ;AACpC,gBAAgB,OAAO,qBAAqB,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC1E,YAAY,KAAK,UAAU,CAAC,MAAM;AAClC,gBAAgB,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC;AACvC,YAAY,KAAK,UAAU,CAAC,MAAM;AAClC,gBAAgB,OAAO,qBAAqB,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC;AACxE,SAAS;AACT,KAAK;AACL;;AC9KA;AACA;AACA;AACA;AACA;AACO,MAAM,sBAAsB,CAAC;AACpC,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,IAAI,OAAO,GAAG;AACd,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC1B,YAAY,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC;AAClF,YAAY,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AAClE,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,IAAI,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AACpC,QAAQ,IAAI,CAAC,OAAO,EAAE,CAAC;AACvB,QAAQ,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;AACzC,YAAY,IAAI,KAAK;AACrB,YAAY,WAAW;AACvB,YAAY,QAAQ,GAAG,KAAK,CAAC,MAAM,EAAE,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;AACjE;AACA,YAAY,IAAI,KAAK,CAAC,KAAK,EAAE;AAC7B,gBAAgB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACnD,gBAAgB,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;AACjD,oBAAoB,SAAS;AAC7B,gBAAgB,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;AACzC,gBAAgB,WAAW,GAAG,IAAI,CAAC;AACnC,aAAa;AACb,iBAAiB;AACjB,gBAAgB,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AAC3C,gBAAgB,WAAW,GAAG,KAAK,CAAC;AACpC,aAAa;AACb;AACA,YAAY,QAAQ,KAAK,CAAC,IAAI;AAC9B,gBAAgB,KAAK,QAAQ,CAAC;AAC9B,gBAAgB,KAAK,MAAM;AAC3B,oBAAoB,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,MAAM,GAAG,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;AAC9E,oBAAoB,IAAI,QAAQ,EAAE;AAClC,wBAAwB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AACrD,wBAAwB,IAAI,QAAQ,IAAI,UAAU,CAAC,MAAM;AACzD,4BAA4B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AACpE;AACA,4BAA4B,KAAK,MAAM,IAAI,IAAI,KAAK;AACpD,gCAAgC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC7E,qBAAqB;AACrB,yBAAyB,IAAI,KAAK,KAAK,SAAS;AAChD,wBAAwB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC1C;AACA,wBAAwB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;AAC1F,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,SAAS;AAC9B,oBAAoB,IAAI,QAAQ,EAAE;AAClC,wBAAwB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AACrD,wBAAwB,KAAK,MAAM,IAAI,IAAI,KAAK;AAChD,4BAA4B,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACrF,qBAAqB;AACrB,yBAAyB;AACzB,wBAAwB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AAClF,qBAAqB;AACrB,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,KAAK;AAC1B,oBAAoB,MAAM,CAAC,OAAO,KAAK,IAAI,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC;AACvE,oBAAoB,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;AAClE,wBAAwB,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACxE,oBAAoB,MAAM;AAC1B,aAAa;AACb,SAAS;AACT,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC3C,QAAQ,IAAI,CAAC,KAAK,KAAK;AACvB,YAAY,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAChG,KAAK;AACL,IAAI,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE;AACjD,QAAQ,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;AACvD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;AACtB;AACA;AACA,QAAQ,IAAI,QAAQ,GAAG,GAAG,CAAC;AAC3B,QAAQ,QAAQ,KAAK,CAAC,CAAC;AACvB,YAAY,KAAK,UAAU,CAAC,KAAK,CAAC;AAClC,YAAY,KAAK,UAAU,CAAC,OAAO,CAAC;AACpC,YAAY,KAAK,UAAU,CAAC,MAAM,CAAC;AACnC,YAAY,KAAK,UAAU,CAAC,QAAQ,CAAC;AACrC,YAAY,KAAK,UAAU,CAAC,MAAM;AAClC,gBAAgB,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAChD,gBAAgB,MAAM;AACtB,YAAY,KAAK,UAAU,CAAC,IAAI;AAChC,gBAAgB,MAAM,CAAC,GAAG,IAAI,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,CAAC;AACxD,gBAAgB,QAAQ,GAAG,GAAG,IAAI,MAAM,CAAC;AACzC,gBAAgB,MAAM;AACtB,SAAS;AACT;AACA,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AACxD;AACA,QAAQ,QAAQ,KAAK,CAAC,CAAC,CAAC,IAAI;AAC5B,YAAY,KAAK,QAAQ;AACzB,gBAAgB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAC/D,gBAAgB,MAAM;AACtB,YAAY,KAAK,MAAM;AACvB,gBAAgB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACtE,gBAAgB,MAAM;AACtB,YAAY,KAAK,SAAS;AAC1B,gBAAgB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AACrE,gBAAgB,MAAM;AACtB,SAAS;AACT,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;AACtB,KAAK;AACL,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;AACtD,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,OAAO;AACnB,QAAQ,OAAO,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;AAC1G,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;AACtB,KAAK;AACL;AACA;AACA;AACA,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE;AACtD,QAAQ,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACzE,QAAQ,IAAI,CAAC,SAAS,IAAI,WAAW,EAAE;AACvC,YAAY,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC1C,YAAY,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC;AAClC,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;AACzC,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM;AACzB,YAAY,OAAO;AACnB,QAAQ,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,KAAK,IAAI,IAAI,KAAK,UAAU,CAAC,MAAM,CAAC,CAAC;AACxE;AACA,QAAQ,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;AACtD;AACA,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;AACtB;AACA,QAAQ,IAAI,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAChD,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;AAC7C,YAAY,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC;AACA,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;AACtB,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE;AAC5B,QAAQ,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;AAChC,QAAQ,IAAI,CAAC,CAAC;AACd,QAAQ,IAAI,CAAC,GAAG,KAAK,KAAK,SAAS,CAAC;AACpC,QAAQ,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC;AAC5B,QAAQ,QAAQ,IAAI;AACpB,YAAY,KAAK,UAAU,CAAC,KAAK;AACjC,gBAAgB,CAAC,GAAG,OAAO,CAAC;AAC5B,gBAAgB,MAAM;AACtB,YAAY,KAAK,UAAU,CAAC,MAAM;AAClC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACvC,gBAAgB,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC;AAC7C,gBAAgB,CAAC,GAAG,QAAQ,CAAC;AAC7B,gBAAgB,MAAM;AACtB,YAAY,KAAK,UAAU,CAAC,IAAI;AAChC,gBAAgB,CAAC,GAAG,KAAK,KAAK,KAAK,CAAC;AACpC,gBAAgB,CAAC,GAAG,MAAM,CAAC;AAC3B,gBAAgB,MAAM;AACtB,YAAY,KAAK,UAAU,CAAC,MAAM;AAClC,gBAAgB,CAAC,GAAG,QAAQ,CAAC;AAC7B,gBAAgB,MAAM;AACtB,YAAY,KAAK,UAAU,CAAC,MAAM;AAClC,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;AACnC,gBAAgB,CAAC,GAAG,QAAQ,CAAC;AAC7B,gBAAgB,MAAM;AACtB,YAAY,KAAK,UAAU,CAAC,KAAK;AACjC,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;AACnC,gBAAgB,CAAC,GAAG,OAAO,CAAC;AAC5B,gBAAgB,MAAM;AACtB,YAAY,KAAK,UAAU,CAAC,KAAK;AACjC,gBAAgB,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;AACrD,gBAAgB,CAAC,GAAG,OAAO,CAAC;AAC5B,gBAAgB,MAAM;AACtB,YAAY,KAAK,UAAU,CAAC,MAAM;AAClC,gBAAgB,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;AACtD,gBAAgB,CAAC,GAAG,QAAQ,CAAC;AAC7B,gBAAgB,MAAM;AACtB,YAAY,KAAK,UAAU,CAAC,OAAO;AACnC,gBAAgB,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;AACtD,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;AACnC,gBAAgB,CAAC,GAAG,SAAS,CAAC;AAC9B,gBAAgB,MAAM;AACtB,YAAY,KAAK,UAAU,CAAC,KAAK;AACjC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;AAC3C,gBAAgB,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC;AAC7C,gBAAgB,CAAC,GAAG,OAAO,CAAC;AAC5B,gBAAgB,MAAM;AACtB,YAAY,KAAK,UAAU,CAAC,OAAO;AACnC,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;AACnC,gBAAgB,CAAC,GAAG,SAAS,CAAC;AAC9B,gBAAgB,MAAM;AACtB,YAAY,KAAK,UAAU,CAAC,QAAQ;AACpC,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;AACnC,gBAAgB,CAAC,GAAG,UAAU,CAAC;AAC/B,gBAAgB,MAAM;AACtB,YAAY,KAAK,UAAU,CAAC,QAAQ;AACpC,gBAAgB,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;AACrD,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;AACnC,gBAAgB,CAAC,GAAG,UAAU,CAAC;AAC/B,gBAAgB,MAAM;AACtB,YAAY,KAAK,UAAU,CAAC,MAAM;AAClC,gBAAgB,CAAC,GAAG,QAAQ,CAAC;AAC7B,gBAAgB,MAAM;AACtB,YAAY,KAAK,UAAU,CAAC,MAAM;AAClC,gBAAgB,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;AACrD,gBAAgB,CAAC,GAAG,QAAQ,CAAC;AAC7B,gBAAgB,MAAM;AACtB,SAAS;AACT,QAAQ,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9B,KAAK;AACL;;AClOA;AACA;AACA;AACA;AACO,SAAS,gBAAgB,CAAC,IAAI,EAAE;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB;AACrC,UAAU,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAC9C,UAAU,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACnE,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;AACnC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC;AACnC,QAAQ,IAAI,KAAK,CAAC,GAAG;AACrB,YAAY,SAAS;AACrB,QAAQ,IAAI,KAAK,CAAC,KAAK;AACvB,YAAY,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AACxD,aAAa,IAAI,KAAK,CAAC,MAAM;AAC7B,YAAY,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAC3B;AACA,YAAY,QAAQ,KAAK,CAAC,IAAI;AAC9B,gBAAgB,KAAK,QAAQ;AAC7B,oBAAoB,GAAG,CAAC,IAAI,CAAC,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1E,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,MAAM;AAC3B;AACA,oBAAoB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClC,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,KAAK;AAC1B,oBAAoB,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AACnC,oBAAoB,MAAM;AAC1B,aAAa;AACb,KAAK;AACL,IAAI,OAAO,GAAG,CAAC;AACf;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;AAC7D,IAAI,IAAI,UAAU;AAClB,IAAI,KAAK,GAAG,MAAM,EAAE,MAAM,CAAC;AAC3B,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;AACnC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC;AACnC,QAAQ,IAAI,KAAK,CAAC,KAAK,EAAE;AACzB,YAAY,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC7C,YAAY,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE;AAC9F,gBAAgB,SAAS;AACzB,aAAa;AACb,YAAY,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;AACrC,YAAY,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACzC,YAAY,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;AAC/C,YAAY,IAAI,UAAU,IAAI,SAAS,EAAE;AACzC,gBAAgB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;AACpC,gBAAgB,SAAS;AACzB,aAAa;AACb,SAAS;AACT,aAAa;AACb,YAAY,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;AACrC,YAAY,MAAM,GAAG,MAAM,CAAC;AAC5B,YAAY,IAAI,UAAU,IAAI,SAAS,EAAE;AACzC,gBAAgB,SAAS;AACzB,aAAa;AACb,SAAS;AACT,QAAQ,IAAI,KAAK,CAAC,MAAM;AACxB,YAAY,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;AACpD;AACA,QAAQ,QAAQ,KAAK,CAAC,IAAI;AAC1B,YAAY,KAAK,QAAQ,CAAC;AAC1B,YAAY,KAAK,MAAM;AACvB,gBAAgB,IAAI,KAAK,CAAC,MAAM;AAChC,oBAAoB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE;AAC9D,wBAAwB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AACxD;AACA,oBAAoB,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;AAC9C,gBAAgB,MAAM;AACtB,YAAY,KAAK,SAAS;AAC1B,gBAAgB,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;AAClC,gBAAgB,IAAI,KAAK,CAAC,MAAM;AAChC,oBAAoB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE;AAC9D,wBAAwB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE,qBAAqB,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,SAAS;AACnD,oBAAoB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACxD;AACA,oBAAoB,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;AAC7D,gBAAgB,MAAM;AACtB,YAAY,KAAK,KAAK;AACtB;AACA,gBAAgB,QAAQ,KAAK,CAAC,CAAC,CAAC,IAAI;AACpC,oBAAoB,KAAK,QAAQ,CAAC;AAClC,oBAAoB,KAAK,MAAM;AAC/B,wBAAwB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;AAChE,wBAAwB,MAAM;AAC9B,oBAAoB,KAAK,SAAS;AAClC,wBAAwB,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5C,wBAAwB,KAAK,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;AAC7D,4BAA4B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,wBAAwB,MAAM;AAC9B,iBAAiB;AACjB,gBAAgB,MAAM;AACtB,SAAS;AACT,KAAK;AACL;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE;AAC7C,IAAI,IAAI,CAAC,KAAK,CAAC;AACf,QAAQ,OAAO,IAAI,CAAC;AACpB,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB,QAAQ,OAAO,KAAK,CAAC;AACrB,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;AACnC,QAAQ,IAAI,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;AACxC,QAAQ,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;AAC3E,QAAQ,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;AAC3E,QAAQ,QAAQ,KAAK,CAAC,IAAI;AAC1B,YAAY,KAAK,MAAM,CAAC;AACxB,YAAY,KAAK,QAAQ;AACzB,gBAAgB,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,MAAM,GAAG,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;AAC1E,gBAAgB,IAAI,EAAE,KAAK,CAAC,MAAM;AAClC,sBAAsB,mBAAmB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC;AAC1D,sBAAsB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AACnD,oBAAoB,OAAO,KAAK,CAAC;AACjC,gBAAgB,MAAM;AACtB,YAAY,KAAK,KAAK;AACtB,gBAAgB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,SAAS;AAC/C,sBAAsB,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;AAC1F,sBAAsB,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,MAAM,GAAG,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3I,oBAAoB,OAAO,KAAK,CAAC;AACjC,gBAAgB,MAAM;AACtB,YAAY,KAAK,SAAS;AAC1B,gBAAgB,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;AAClC,gBAAgB,IAAI,EAAE,KAAK,CAAC,MAAM;AAClC,sBAAsB,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC;AACpD,sBAAsB,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC7C,oBAAoB,OAAO,KAAK,CAAC;AACjC,gBAAgB,MAAM;AACtB,SAAS;AACT,KAAK;AACL,IAAI,OAAO,IAAI,CAAC;AAChB,CAAC;AACD,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;AACnC,SAAS,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE;AACjC,IAAI,IAAI,CAAC,KAAK,CAAC;AACf,QAAQ,OAAO,IAAI,CAAC;AACpB,IAAI,IAAI,IAAI,KAAK,UAAU,CAAC,KAAK;AACjC,QAAQ,OAAO,KAAK,CAAC;AACrB,IAAI,IAAI,EAAE,GAAG,CAAC,CAAC;AACf,IAAI,IAAI,EAAE,GAAG,CAAC,CAAC;AACf,IAAI,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM;AAC/B,QAAQ,OAAO,KAAK,CAAC;AACrB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE;AACtC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAC1B,YAAY,OAAO,KAAK,CAAC;AACzB,IAAI,OAAO,IAAI,CAAC;AAChB,CAAC;AACD,SAAS,mBAAmB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE;AACzC,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;AAC7B,QAAQ,OAAO,KAAK,CAAC;AACrB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;AACrC,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,YAAY,OAAO,KAAK,CAAC;AACzB,IAAI,OAAO,IAAI,CAAC;AAChB,CAAC;AACD,SAAS,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE;AACnC,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;AAC7B,QAAQ,OAAO,KAAK,CAAC;AACrB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;AACrC,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,YAAY,OAAO,KAAK,CAAC;AACzB,IAAI,OAAO,IAAI,CAAC;AAChB;;AC1DA,MAAM,eAAe,GAAG,MAAM,CAAC,yBAAyB,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;AACpF,MAAM,qBAAqB,GAAG,eAAe,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;AACjE;AACA;AACA;AACA;AACO,MAAM,WAAW,CAAC;AACzB,IAAI,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;AACvC,QAAQ,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;AACpC,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC7B,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;AACrD,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC;AAC7E,QAAQ,qBAAqB,CAAC,KAAK,GAAG,IAAI,CAAC;AAC3C,QAAQ,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;AACrE,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC;AAC1D,QAAQ,IAAI,CAAC,aAAa,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;AAC5D,QAAQ,IAAI,CAAC,aAAa,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;AAC5D,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC;AAC7D,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC;AAC7D,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,IAAI,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAC7C,QAAQ,IAAI,KAAK,KAAK,SAAS,EAAE;AACjC,YAAY,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,CAAC,OAAO,EAAE;AACnB,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AACjC,QAAQ,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACpD,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;AACjB,QAAQ,OAAO,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5C,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,EAAE,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAC5C,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AACvD,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,YAAY,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACtD,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACtD,KAAK;AACL;AACA;AACA;AACA,IAAI,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE;AACjC,QAAQ,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACrD,KAAK;AACL;AACA;AACA;AACA,IAAI,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE;AAC9B,QAAQ,IAAI,GAAG,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC7C,QAAQ,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;AACtF,KAAK;AACL;AACA;AACA;AACA,IAAI,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE;AAC5B,QAAQ,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;AACrE,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE;AAClC,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACrC,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC7C,KAAK;AACL;AACA;AACA;AACA,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE;AAC7B,QAAQ,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1E,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE;AACnC,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAClD,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,YAAY,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAC7J,KAAK;AACL;AACA;AACA;AACA,IAAI,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE;AAC/B,QAAQ,IAAI,GAAG,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC9C,QAAQ,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,aAAa,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;AACpF,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE;AAC5C,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC9E,YAAY,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AACxF,YAAY,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC5D,YAAY,OAAO,OAAO,CAAC;AAC3B,SAAS;AACT,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,wBAAwB,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxG,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE;AACxC,QAAQ,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC1D,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD,QAAQ,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAC1D,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AACpF,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AACjE,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL;;ACxKA;AACA,MAAM,iBAAiB,SAAS,WAAW,CAAC;AAC5C,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,cAAc,EAAE;AAC9B,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC/E,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1E,QAAQ,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1B,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC/G,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,QAAQ,OAAO;AAC3B,gBAAgB,uBAAuB,CAAC;AACxC,oBAAoB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB;AAChB,oBAAoB,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACrD,oBAAoB,IAAI,CAAC,KAAK,OAAO;AACrC,wBAAwB,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5H,oBAAoB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,oBAAoB,IAAI,CAAC,KAAK,KAAK;AACnC,wBAAwB,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpH,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;AAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC3C,QAAQ,IAAI,CAAC,KAAK,KAAK;AACvB,YAAY,CAAC,CAAC,IAAI,IAAI,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1F,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AAC4B,IAAI,iBAAiB,GAAG;AACpD;AACA,MAAM,0BAA0B,SAAS,WAAW,CAAC;AACrD,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;AAC3C,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1E,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC/G,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,QAAQ,OAAO;AAC3B,gBAAgB;AAChB,oBAAoB,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACrD,oBAAoB,IAAI,CAAC,KAAK,OAAO;AACrC,wBAAwB,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5H,oBAAoB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,oBAAoB,IAAI,CAAC,KAAK,KAAK;AACnC,wBAAwB,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpH,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC3C,QAAQ,IAAI,CAAC,KAAK,KAAK;AACvB,YAAY,CAAC,CAAC,IAAI,IAAI,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1F,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,qBAAqB,GAAG,IAAI,0BAA0B,EAAE,CAAC;AACtE;AACA,MAAM,WAAW,SAAS,WAAW,CAAC;AACtC,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,QAAQ,EAAE;AACxB,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC/E,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,qBAAqB,EAAE;AACrG,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,wBAAwB;AACrG,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1E,QAAQ,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1B,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC/G,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,QAAQ,OAAO;AAC3B,gBAAgB,uBAAuB,CAAC;AACxC,oBAAoB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB,uDAAuD,CAAC;AACxE,oBAAoB,OAAO,CAAC,qBAAqB,GAAG,qBAAqB,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAC9J,oBAAoB,MAAM;AAC1B,gBAAgB,2CAA2C,CAAC;AAC5D,oBAAoB,OAAO,CAAC,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AAC9D,oBAAoB,MAAM;AAC1B,gBAAgB;AAChB,oBAAoB,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACrD,oBAAoB,IAAI,CAAC,KAAK,OAAO;AACrC,wBAAwB,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5H,oBAAoB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,oBAAoB,IAAI,CAAC,KAAK,KAAK;AACnC,wBAAwB,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpH,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;AAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE;AACA,QAAQ,IAAI,OAAO,CAAC,qBAAqB;AACzC,YAAY,qBAAqB,CAAC,mBAAmB,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;AACrJ;AACA,QAAQ,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS;AACjD,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;AACpF,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC3C,QAAQ,IAAI,CAAC,KAAK,KAAK;AACvB,YAAY,CAAC,CAAC,IAAI,IAAI,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1F,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;AACxC;AACA,MAAM,aAAa,SAAS,WAAW,CAAC;AACxC,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,UAAU,EAAE;AAC1B,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC/E,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1E,QAAQ,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1B,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC/G,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,QAAQ,OAAO;AAC3B,gBAAgB,uBAAuB,CAAC;AACxC,oBAAoB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB;AAChB,oBAAoB,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACrD,oBAAoB,IAAI,CAAC,KAAK,OAAO;AACrC,wBAAwB,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5H,oBAAoB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,oBAAoB,IAAI,CAAC,KAAK,KAAK;AACnC,wBAAwB,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpH,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;AAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC3C,QAAQ,IAAI,CAAC,KAAK,KAAK;AACvB,YAAY,CAAC,CAAC,IAAI,IAAI,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1F,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACwB,IAAI,aAAa,GAAG;AAC5C;AACA,MAAM,eAAe,SAAS,WAAW,CAAC;AAC1C,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,YAAY,EAAE;AAC5B,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC/E,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC7E,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,wBAAwB;AACrG,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1E,QAAQ,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1B,QAAQ,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;AACxB,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC/G,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,QAAQ,OAAO;AAC3B,gBAAgB,uBAAuB,CAAC;AACxC,oBAAoB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB,qBAAqB,CAAC;AACtC,oBAAoB,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACjD,oBAAoB,MAAM;AAC1B,gBAAgB,2CAA2C,CAAC;AAC5D,oBAAoB,OAAO,CAAC,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AAC9D,oBAAoB,MAAM;AAC1B,gBAAgB;AAChB,oBAAoB,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACrD,oBAAoB,IAAI,CAAC,KAAK,OAAO;AACrC,wBAAwB,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5H,oBAAoB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,oBAAoB,IAAI,CAAC,KAAK,KAAK;AACnC,wBAAwB,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpH,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;AAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE;AACA,QAAQ,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE;AAC7B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACvE;AACA,QAAQ,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS;AACjD,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;AACpF,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC3C,QAAQ,IAAI,CAAC,KAAK,KAAK;AACvB,YAAY,CAAC,CAAC,IAAI,IAAI,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1F,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AAC0B,IAAI,eAAe,GAAG;AAChD;AACA,MAAM,sBAAsB,SAAS,WAAW,CAAC;AACjD,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,mBAAmB,EAAE;AACnC,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC/E,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AACtF,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1E,QAAQ,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1B,QAAQ,OAAO,CAAC,WAAW,GAAG,EAAE,CAAC;AACjC,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC/G,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,QAAQ,OAAO;AAC3B,gBAAgB,uBAAuB,CAAC;AACxC,oBAAoB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB,8BAA8B,CAAC;AAC/C,oBAAoB,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AAC1D,oBAAoB,MAAM;AAC1B,gBAAgB;AAChB,oBAAoB,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACrD,oBAAoB,IAAI,CAAC,KAAK,OAAO;AACrC,wBAAwB,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5H,oBAAoB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,oBAAoB,IAAI,CAAC,KAAK,KAAK;AACnC,wBAAwB,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpH,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;AAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE;AACA,QAAQ,IAAI,OAAO,CAAC,WAAW,KAAK,EAAE;AACtC,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AAChF,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC3C,QAAQ,IAAI,CAAC,KAAK,KAAK;AACvB,YAAY,CAAC,CAAC,IAAI,IAAI,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1F,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACiC,IAAI,sBAAsB,GAAG;AAC9D;AACA,MAAM,sBAAsB,SAAS,WAAW,CAAC;AACjD,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,mBAAmB,EAAE;AACnC,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC/E,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAChF,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1E,QAAQ,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1B,QAAQ,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;AAC3B,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC/G,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,QAAQ,OAAO;AAC3B,gBAAgB,uBAAuB,CAAC;AACxC,oBAAoB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB,wBAAwB,CAAC;AACzC,oBAAoB,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACpD,oBAAoB,MAAM;AAC1B,gBAAgB;AAChB,oBAAoB,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACrD,oBAAoB,IAAI,CAAC,KAAK,OAAO;AACrC,wBAAwB,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5H,oBAAoB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,oBAAoB,IAAI,CAAC,KAAK,KAAK;AACnC,wBAAwB,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpH,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;AAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE;AACA,QAAQ,IAAI,OAAO,CAAC,KAAK,KAAK,EAAE;AAChC,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC1E,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC3C,QAAQ,IAAI,CAAC,KAAK,KAAK;AACvB,YAAY,CAAC,CAAC,IAAI,IAAI,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1F,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,iBAAiB,GAAG,IAAI,sBAAsB,EAAE,CAAC;AAC9D;AACA,MAAM,kBAAkB,SAAS,WAAW,CAAC;AAC7C,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,eAAe,EAAE;AAC/B,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC/E,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1E,QAAQ,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1B,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC/G,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,QAAQ,OAAO;AAC3B,gBAAgB,uBAAuB,CAAC;AACxC,oBAAoB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB;AAChB,oBAAoB,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACrD,oBAAoB,IAAI,CAAC,KAAK,OAAO;AACrC,wBAAwB,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5H,oBAAoB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,oBAAoB,IAAI,CAAC,KAAK,KAAK;AACnC,wBAAwB,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpH,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;AAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC3C,QAAQ,IAAI,CAAC,KAAK,KAAK;AACvB,YAAY,CAAC,CAAC,IAAI,IAAI,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1F,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,aAAa,GAAG,IAAI,kBAAkB,EAAE,CAAC;AACtD;AACA,MAAM,iBAAiB,SAAS,WAAW,CAAC;AAC5C,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,cAAc,EAAE;AAC9B,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC/E,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,0BAA0B,CAAC,EAAE,CAAC,wBAAwB;AACjH,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1E,QAAQ,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1B,QAAQ,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC;AACzB,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC/G,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,QAAQ,OAAO;AAC3B,gBAAgB,uBAAuB,CAAC;AACxC,oBAAoB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB,+BAA+B,CAAC;AAChD,oBAAoB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AACtD,oBAAoB,MAAM;AAC1B,gBAAgB;AAChB,oBAAoB,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACrD,oBAAoB,IAAI,CAAC,KAAK,OAAO;AACrC,wBAAwB,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5H,oBAAoB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,oBAAoB,IAAI,CAAC,KAAK,KAAK;AACnC,wBAAwB,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpH,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;AAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE;AACA,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE;AACnD,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3E,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC3C,QAAQ,IAAI,CAAC,KAAK,KAAK;AACvB,YAAY,CAAC,CAAC,IAAI,IAAI,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1F,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,YAAY,GAAG,IAAI,iBAAiB,EAAE,CAAC;AACpD;AACA,MAAM,cAAc,SAAS,WAAW,CAAC;AACzC,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,WAAW,EAAE;AAC3B,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC/E,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AACrF,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1E,QAAQ,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1B,QAAQ,OAAO,CAAC,UAAU,GAAG,EAAE,CAAC;AAChC,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC/G,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,QAAQ,OAAO;AAC3B,gBAAgB,uBAAuB,CAAC;AACxC,oBAAoB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB,6BAA6B,CAAC;AAC9C,oBAAoB,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACzD,oBAAoB,MAAM;AAC1B,gBAAgB;AAChB,oBAAoB,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACrD,oBAAoB,IAAI,CAAC,KAAK,OAAO;AACrC,wBAAwB,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5H,oBAAoB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,oBAAoB,IAAI,CAAC,KAAK,KAAK;AACnC,wBAAwB,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpH,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;AAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE;AACA,QAAQ,IAAI,OAAO,CAAC,UAAU,KAAK,EAAE;AACrC,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAC/E,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC3C,QAAQ,IAAI,CAAC,KAAK,KAAK;AACvB,YAAY,CAAC,CAAC,IAAI,IAAI,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1F,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,SAAS,GAAG,IAAI,cAAc,EAAE,CAAC;AAC9C;AACA,MAAM,gBAAgB,SAAS,WAAW,CAAC;AAC3C,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,aAAa,EAAE;AAC7B,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC/E,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1E,QAAQ,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1B,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC/G,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,QAAQ,OAAO;AAC3B,gBAAgB,uBAAuB,CAAC;AACxC,oBAAoB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB;AAChB,oBAAoB,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACrD,oBAAoB,IAAI,CAAC,KAAK,OAAO;AACrC,wBAAwB,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5H,oBAAoB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,oBAAoB,IAAI,CAAC,KAAK,KAAK;AACnC,wBAAwB,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpH,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;AAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC3C,QAAQ,IAAI,CAAC,KAAK,KAAK;AACvB,YAAY,CAAC,CAAC,IAAI,IAAI,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1F,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AAC2B,IAAI,gBAAgB,GAAG;AAClD;AACA,MAAM,oBAAoB,SAAS,WAAW,CAAC;AAC/C,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,iBAAiB,EAAE;AACjC,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC/E,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAClF,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1E,QAAQ,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1B,QAAQ,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC;AAC7B,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC/G,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,QAAQ,OAAO;AAC3B,gBAAgB,uBAAuB,CAAC;AACxC,oBAAoB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB,0BAA0B,CAAC;AAC3C,oBAAoB,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACtD,oBAAoB,MAAM;AAC1B,gBAAgB;AAChB,oBAAoB,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACrD,oBAAoB,IAAI,CAAC,KAAK,OAAO;AACrC,wBAAwB,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5H,oBAAoB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,oBAAoB,IAAI,CAAC,KAAK,KAAK;AACnC,wBAAwB,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpH,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;AAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE;AACA,QAAQ,IAAI,OAAO,CAAC,OAAO,KAAK,EAAE;AAClC,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC5E,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC3C,QAAQ,IAAI,CAAC,KAAK,KAAK;AACvB,YAAY,CAAC,CAAC,IAAI,IAAI,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1F,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,eAAe,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC1D;AACA,MAAM,oBAAoB,SAAS,WAAW,CAAC;AAC/C,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,iBAAiB,EAAE;AACjC,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC/E,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,sBAAsB;AACpF,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,sBAAsB;AAC5E,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AACnF,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1E,QAAQ,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1B,QAAQ,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC;AACpC,QAAQ,OAAO,CAAC,GAAG,GAAG,KAAK,CAAC;AAC5B,QAAQ,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAC;AAC9B,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC/G,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,QAAQ,OAAO;AAC3B,gBAAgB,uBAAuB,CAAC;AACxC,oBAAoB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB,4BAA4B,CAAC;AAC7C,oBAAoB,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;AACxD,oBAAoB,MAAM;AAC1B,gBAAgB,oBAAoB,CAAC;AACrC,oBAAoB,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;AAChD,oBAAoB,MAAM;AAC1B,gBAAgB,2BAA2B,CAAC;AAC5C,oBAAoB,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACvD,oBAAoB,MAAM;AAC1B,gBAAgB;AAChB,oBAAoB,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACrD,oBAAoB,IAAI,CAAC,KAAK,OAAO;AACrC,wBAAwB,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5H,oBAAoB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,oBAAoB,IAAI,CAAC,KAAK,KAAK;AACnC,wBAAwB,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpH,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;AAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE;AACA,QAAQ,IAAI,OAAO,CAAC,WAAW,KAAK,KAAK;AACzC,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AACrE;AACA,QAAQ,IAAI,OAAO,CAAC,GAAG,KAAK,KAAK;AACjC,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC7D;AACA,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,EAAE;AACnC,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC7E,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC3C,QAAQ,IAAI,CAAC,KAAK,KAAK;AACvB,YAAY,CAAC,CAAC,IAAI,IAAI,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1F,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AAC+B,IAAI,oBAAoB,GAAG;AAC1D;AACA,MAAM,uBAAuB,SAAS,WAAW,CAAC;AAClD,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,oBAAoB,EAAE;AACpC,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC/E,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AACnF,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1E,QAAQ,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1B,QAAQ,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAC;AAC9B,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC/G,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,QAAQ,OAAO;AAC3B,gBAAgB,uBAAuB,CAAC;AACxC,oBAAoB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB,2BAA2B,CAAC;AAC5C,oBAAoB,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACvD,oBAAoB,MAAM;AAC1B,gBAAgB;AAChB,oBAAoB,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACrD,oBAAoB,IAAI,CAAC,KAAK,OAAO;AACrC,wBAAwB,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5H,oBAAoB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,oBAAoB,IAAI,CAAC,KAAK,KAAK;AACnC,wBAAwB,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpH,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;AAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE;AACA,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,EAAE;AACnC,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC7E,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC3C,QAAQ,IAAI,CAAC,KAAK,KAAK;AACvB,YAAY,CAAC,CAAC,IAAI,IAAI,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1F,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACkC,IAAI,uBAAuB,GAAG;AAChE;AACA,MAAM,UAAU,SAAS,WAAW,CAAC;AACrC,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,OAAO,EAAE;AACvB,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC/E,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC9E,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC9F,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,sBAAsB;AACvF,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,sBAAsB;AAC7F,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,wBAAwB;AACrG,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1E,QAAQ,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1B,QAAQ,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC;AACzB,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC/G,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,QAAQ,OAAO;AAC3B,gBAAgB,uBAAuB,CAAC;AACxC,oBAAoB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB,sBAAsB,CAAC;AACvC,oBAAoB,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AAClD,oBAAoB,MAAM;AAC1B,gBAAgB,oCAAoC,CAAC;AACrD,oBAAoB,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACvD,oBAAoB,MAAM;AAC1B,gBAAgB,6BAA6B,CAAC;AAC9C,oBAAoB,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;AAChD,oBAAoB,MAAM;AAC1B,gBAAgB,mCAAmC,CAAC;AACpD,oBAAoB,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;AACtD,oBAAoB,MAAM;AAC1B,gBAAgB,2CAA2C,CAAC;AAC5D,oBAAoB,OAAO,CAAC,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AAC9D,oBAAoB,MAAM;AAC1B,gBAAgB;AAChB,oBAAoB,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACrD,oBAAoB,IAAI,CAAC,KAAK,OAAO;AACrC,wBAAwB,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5H,oBAAoB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,oBAAoB,IAAI,CAAC,KAAK,KAAK;AACnC,wBAAwB,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpH,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;AAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE;AACA,QAAQ,IAAI,OAAO,CAAC,GAAG,KAAK,EAAE;AAC9B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACxE;AACA,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS;AAC1C,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC7E;AACA,QAAQ,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS;AACrC,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC7D;AACA,QAAQ,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS;AAC3C,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACnE;AACA,QAAQ,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS;AACjD,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;AACpF,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC3C,QAAQ,IAAI,CAAC,KAAK,KAAK;AACvB,YAAY,CAAC,CAAC,IAAI,IAAI,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1F,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,KAAK,GAAG,IAAI,UAAU,EAAE,CAAC;AACtC;AACA,MAAM,WAAW,SAAS,WAAW,CAAC;AACtC,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,QAAQ,EAAE;AACxB,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC/E,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC9E,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC9F,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,uBAAuB;AAClG,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,uBAAuB;AAClG,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1E,QAAQ,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1B,QAAQ,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC;AACzB,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC/G,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,QAAQ,OAAO;AAC3B,gBAAgB,uBAAuB,CAAC;AACxC,oBAAoB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB,sBAAsB,CAAC;AACvC,oBAAoB,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AAClD,oBAAoB,MAAM;AAC1B,gBAAgB,oCAAoC,CAAC;AACrD,oBAAoB,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACvD,oBAAoB,MAAM;AAC1B,gBAAgB,wCAAwC,CAAC;AACzD,oBAAoB,OAAO,CAAC,aAAa,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;AAC3D,oBAAoB,MAAM;AAC1B,gBAAgB,wCAAwC,CAAC;AACzD,oBAAoB,OAAO,CAAC,aAAa,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;AAC3D,oBAAoB,MAAM;AAC1B,gBAAgB;AAChB,oBAAoB,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACrD,oBAAoB,IAAI,CAAC,KAAK,OAAO;AACrC,wBAAwB,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5H,oBAAoB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,oBAAoB,IAAI,CAAC,KAAK,KAAK;AACnC,wBAAwB,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpH,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;AAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE;AACA,QAAQ,IAAI,OAAO,CAAC,GAAG,KAAK,EAAE;AAC9B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACxE;AACA,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS;AAC1C,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC7E;AACA,QAAQ,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS;AAC/C,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AACxE;AACA,QAAQ,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS;AAC/C,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AACxE,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC3C,QAAQ,IAAI,CAAC,KAAK,KAAK;AACvB,YAAY,CAAC,CAAC,IAAI,IAAI,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1F,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;AACxC;AACA,MAAM,qBAAqB,SAAS,WAAW,CAAC;AAChD,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,kBAAkB,EAAE;AAClC,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AACpF,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AACjF,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,uBAAuB;AACvF,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,wBAAwB;AACtG,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1E,QAAQ,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC;AAC/B,QAAQ,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC;AAC5B,QAAQ,OAAO,CAAC,aAAa,GAAG,CAAC,CAAC;AAClC,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC/G,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,QAAQ,OAAO;AAC3B,gBAAgB,4BAA4B,CAAC;AAC7C,oBAAoB,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACxD,oBAAoB,MAAM;AAC1B,gBAAgB,yBAAyB,CAAC;AAC1C,oBAAoB,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACrD,oBAAoB,MAAM;AAC1B,gBAAgB,+BAA+B,CAAC;AAChD,oBAAoB,OAAO,CAAC,aAAa,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;AAC3D,oBAAoB,MAAM;AAC1B,gBAAgB,4CAA4C,CAAC;AAC7D,oBAAoB,OAAO,CAAC,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AAC/D,oBAAoB,MAAM;AAC1B,gBAAgB;AAChB,oBAAoB,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACrD,oBAAoB,IAAI,CAAC,KAAK,OAAO;AACrC,wBAAwB,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5H,oBAAoB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,oBAAoB,IAAI,CAAC,KAAK,KAAK;AACnC,wBAAwB,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpH,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD;AACA,QAAQ,IAAI,OAAO,CAAC,SAAS,KAAK,EAAE;AACpC,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAC9E;AACA,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE;AACjC,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC3E;AACA,QAAQ,IAAI,OAAO,CAAC,aAAa,KAAK,CAAC;AACvC,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AACxE;AACA,QAAQ,IAAI,OAAO,CAAC,gBAAgB,KAAK,SAAS;AAClD,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;AACrF,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC3C,QAAQ,IAAI,CAAC,KAAK,KAAK;AACvB,YAAY,CAAC,CAAC,IAAI,IAAI,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1F,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,gBAAgB,GAAG,IAAI,qBAAqB,EAAE,CAAC;AAC5D;AACA,MAAM,iBAAiB,SAAS,WAAW,CAAC;AAC5C,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,cAAc,EAAE;AAC9B,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC/E,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,gBAAgB,EAAE;AACpF,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC9F,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1E,QAAQ,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1B,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC/G,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,QAAQ,OAAO;AAC3B,gBAAgB,uBAAuB,CAAC;AACxC,oBAAoB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB,sCAAsC,CAAC;AACvD,oBAAoB,OAAO,CAAC,SAAS,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;AACjI,oBAAoB,MAAM;AAC1B,gBAAgB,oCAAoC,CAAC;AACrD,oBAAoB,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACvD,oBAAoB,MAAM;AAC1B,gBAAgB;AAChB,oBAAoB,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACrD,oBAAoB,IAAI,CAAC,KAAK,OAAO;AACrC,wBAAwB,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5H,oBAAoB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,oBAAoB,IAAI,CAAC,KAAK,KAAK;AACnC,wBAAwB,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpH,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;AAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE;AACA,QAAQ,IAAI,OAAO,CAAC,SAAS;AAC7B,YAAY,gBAAgB,CAAC,mBAAmB,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;AACpI;AACA,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS;AAC1C,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC7E,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC3C,QAAQ,IAAI,CAAC,KAAK,KAAK;AACvB,YAAY,CAAC,CAAC,IAAI,IAAI,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1F,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,YAAY,GAAG,IAAI,iBAAiB,EAAE,CAAC;AACpD;AACA,MAAM,qBAAqB,SAAS,WAAW,CAAC;AAChD,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,kBAAkB,EAAE;AAClC,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC/E,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AACnF,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC5F,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1E,QAAQ,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1B,QAAQ,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAC;AAC9B,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC/G,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,QAAQ,OAAO;AAC3B,gBAAgB,uBAAuB,CAAC;AACxC,oBAAoB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB,2BAA2B,CAAC;AAC5C,oBAAoB,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACvD,oBAAoB,MAAM;AAC1B,gBAAgB,kCAAkC,CAAC;AACnD,oBAAoB,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACrD,oBAAoB,MAAM;AAC1B,gBAAgB;AAChB,oBAAoB,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACrD,oBAAoB,IAAI,CAAC,KAAK,OAAO;AACrC,wBAAwB,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5H,oBAAoB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,oBAAoB,IAAI,CAAC,KAAK,KAAK;AACnC,wBAAwB,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpH,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;AAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE;AACA,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,EAAE;AACnC,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC7E;AACA,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;AACxC,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC3E,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC3C,QAAQ,IAAI,CAAC,KAAK,KAAK;AACvB,YAAY,CAAC,CAAC,IAAI,IAAI,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1F,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACgC,IAAI,qBAAqB,GAAG;AAC5D;AACA,MAAM,SAAS,SAAS,WAAW,CAAC;AACpC,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,MAAM,EAAE;AACtB,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC/E,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,uBAAuB;AAC9E,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1E,QAAQ,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1B,QAAQ,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;AACzB,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC/G,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,QAAQ,OAAO;AAC3B,gBAAgB,uBAAuB,CAAC;AACxC,oBAAoB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB,sBAAsB,CAAC;AACvC,oBAAoB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;AAClD,oBAAoB,MAAM;AAC1B,gBAAgB;AAChB,oBAAoB,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACrD,oBAAoB,IAAI,CAAC,KAAK,OAAO;AACrC,wBAAwB,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5H,oBAAoB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,oBAAoB,IAAI,CAAC,KAAK,KAAK;AACnC,wBAAwB,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpH,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;AAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC;AAC9B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC/D,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC3C,QAAQ,IAAI,CAAC,KAAK,KAAK;AACvB,YAAY,CAAC,CAAC,IAAI,IAAI,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1F,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;AACpC;AACA,MAAM,SAAS,SAAS,WAAW,CAAC;AACpC,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,MAAM,EAAE;AACtB,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC/E,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,uBAAuB;AAC9E,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1E,QAAQ,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1B,QAAQ,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;AACzB,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC/G,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,QAAQ,OAAO;AAC3B,gBAAgB,uBAAuB,CAAC;AACxC,oBAAoB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB,sBAAsB,CAAC;AACvC,oBAAoB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;AAClD,oBAAoB,MAAM;AAC1B,gBAAgB;AAChB,oBAAoB,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACrD,oBAAoB,IAAI,CAAC,KAAK,OAAO;AACrC,wBAAwB,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5H,oBAAoB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,oBAAoB,IAAI,CAAC,KAAK,KAAK;AACnC,wBAAwB,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpH,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;AAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC;AAC9B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC/D,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC3C,QAAQ,IAAI,CAAC,KAAK,KAAK;AACvB,YAAY,CAAC,CAAC,IAAI,IAAI,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1F,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;AACpC;AACA,MAAM,yBAAyB,SAAS,WAAW,CAAC;AACpD,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,sBAAsB,EAAE;AACtC,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC/E,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1E,QAAQ,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1B,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC/G,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,QAAQ,OAAO;AAC3B,gBAAgB,uBAAuB,CAAC;AACxC,oBAAoB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB;AAChB,oBAAoB,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACrD,oBAAoB,IAAI,CAAC,KAAK,OAAO;AACrC,wBAAwB,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5H,oBAAoB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,oBAAoB,IAAI,CAAC,KAAK,KAAK;AACnC,wBAAwB,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpH,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;AAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC3C,QAAQ,IAAI,CAAC,KAAK,KAAK;AACvB,YAAY,CAAC,CAAC,IAAI,IAAI,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1F,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACoC,IAAI,yBAAyB,GAAG;AACpE;AACA,MAAM,oBAAoB,SAAS,WAAW,CAAC;AAC/C,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,iBAAiB,EAAE;AACjC,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC/E,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,uBAAuB;AACtF,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,uBAAuB;AACvF,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AACnF,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1E,QAAQ,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1B,QAAQ,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC;AACjC,QAAQ,OAAO,CAAC,aAAa,GAAG,CAAC,CAAC;AAClC,QAAQ,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAC;AAC9B,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC/G,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,QAAQ,OAAO;AAC3B,gBAAgB,uBAAuB,CAAC;AACxC,oBAAoB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB,8BAA8B,CAAC;AAC/C,oBAAoB,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;AAC1D,oBAAoB,MAAM;AAC1B,gBAAgB,+BAA+B,CAAC;AAChD,oBAAoB,OAAO,CAAC,aAAa,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;AAC3D,oBAAoB,MAAM;AAC1B,gBAAgB,2BAA2B,CAAC;AAC5C,oBAAoB,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACvD,oBAAoB,MAAM;AAC1B,gBAAgB;AAChB,oBAAoB,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACrD,oBAAoB,IAAI,CAAC,KAAK,OAAO;AACrC,wBAAwB,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5H,oBAAoB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,oBAAoB,IAAI,CAAC,KAAK,KAAK;AACnC,wBAAwB,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpH,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;AAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE;AACA,QAAQ,IAAI,OAAO,CAAC,YAAY,KAAK,CAAC;AACtC,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AACvE;AACA,QAAQ,IAAI,OAAO,CAAC,aAAa,KAAK,CAAC;AACvC,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AACxE;AACA,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,EAAE;AACnC,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC7E,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC3C,QAAQ,IAAI,CAAC,KAAK,KAAK;AACvB,YAAY,CAAC,CAAC,IAAI,IAAI,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1F,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,eAAe,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC1D;AACA,MAAM,uBAAuB,SAAS,WAAW,CAAC;AAClD,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,oBAAoB,EAAE;AACpC,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC/E,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1E,QAAQ,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1B,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC/G,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,QAAQ,OAAO;AAC3B,gBAAgB,uBAAuB,CAAC;AACxC,oBAAoB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB;AAChB,oBAAoB,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACrD,oBAAoB,IAAI,CAAC,KAAK,OAAO;AACrC,wBAAwB,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5H,oBAAoB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,oBAAoB,IAAI,CAAC,KAAK,KAAK;AACnC,wBAAwB,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpH,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;AAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC3C,QAAQ,IAAI,CAAC,KAAK,KAAK;AACvB,YAAY,CAAC,CAAC,IAAI,IAAI,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1F,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,kBAAkB,GAAG,IAAI,uBAAuB,EAAE,CAAC;AAChE;AACA,MAAM,qBAAqB,SAAS,WAAW,CAAC;AAChD,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,kBAAkB,EAAE;AAClC,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC/E,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AACnF,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,uBAAuB;AACtF,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,uBAAuB;AACtF,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1E,QAAQ,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1B,QAAQ,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAC;AAC9B,QAAQ,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC;AACjC,QAAQ,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC;AACjC,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC/G,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,QAAQ,OAAO;AAC3B,gBAAgB,uBAAuB,CAAC;AACxC,oBAAoB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB,2BAA2B,CAAC;AAC5C,oBAAoB,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACvD,oBAAoB,MAAM;AAC1B,gBAAgB,8BAA8B,CAAC;AAC/C,oBAAoB,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;AAC1D,oBAAoB,MAAM;AAC1B,gBAAgB,8BAA8B,CAAC;AAC/C,oBAAoB,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;AAC1D,oBAAoB,MAAM;AAC1B,gBAAgB;AAChB,oBAAoB,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACrD,oBAAoB,IAAI,CAAC,KAAK,OAAO;AACrC,wBAAwB,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5H,oBAAoB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,oBAAoB,IAAI,CAAC,KAAK,KAAK;AACnC,wBAAwB,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpH,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;AAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE;AACA,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,EAAE;AACnC,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC7E;AACA,QAAQ,IAAI,OAAO,CAAC,YAAY,KAAK,CAAC;AACtC,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AACvE;AACA,QAAQ,IAAI,OAAO,CAAC,YAAY,KAAK,CAAC;AACtC,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AACvE,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC3C,QAAQ,IAAI,CAAC,KAAK,KAAK;AACvB,YAAY,CAAC,CAAC,IAAI,IAAI,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1F,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,gBAAgB,GAAG,IAAI,qBAAqB,EAAE,CAAC;AAC5D;AACA,MAAM,0BAA0B,SAAS,WAAW,CAAC;AACrD,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,uBAAuB,EAAE;AACvC,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC/E,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1E,QAAQ,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1B,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC/G,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,QAAQ,OAAO;AAC3B,gBAAgB,uBAAuB,CAAC;AACxC,oBAAoB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB;AAChB,oBAAoB,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACrD,oBAAoB,IAAI,CAAC,KAAK,OAAO;AACrC,wBAAwB,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5H,oBAAoB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,oBAAoB,IAAI,CAAC,KAAK,KAAK;AACnC,wBAAwB,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpH,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;AAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC3C,QAAQ,IAAI,CAAC,KAAK,KAAK;AACvB,YAAY,CAAC,CAAC,IAAI,IAAI,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1F,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,qBAAqB,GAAG,IAAI,0BAA0B,EAAE,CAAC;AACtE;AACA,MAAM,yBAAyB,SAAS,WAAW,CAAC;AACpD,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,sBAAsB,EAAE;AACtC,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC/E,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAChF,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,uBAAuB;AACtF,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,uBAAuB;AACtF,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1E,QAAQ,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1B,QAAQ,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;AAC3B,QAAQ,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC;AACjC,QAAQ,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC;AACjC,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC/G,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,QAAQ,OAAO;AAC3B,gBAAgB,uBAAuB,CAAC;AACxC,oBAAoB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB,wBAAwB,CAAC;AACzC,oBAAoB,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACpD,oBAAoB,MAAM;AAC1B,gBAAgB,8BAA8B,CAAC;AAC/C,oBAAoB,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;AAC1D,oBAAoB,MAAM;AAC1B,gBAAgB,8BAA8B,CAAC;AAC/C,oBAAoB,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;AAC1D,oBAAoB,MAAM;AAC1B,gBAAgB;AAChB,oBAAoB,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACrD,oBAAoB,IAAI,CAAC,KAAK,OAAO;AACrC,wBAAwB,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5H,oBAAoB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,oBAAoB,IAAI,CAAC,KAAK,KAAK;AACnC,wBAAwB,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpH,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;AAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE;AACA,QAAQ,IAAI,OAAO,CAAC,KAAK,KAAK,EAAE;AAChC,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC1E;AACA,QAAQ,IAAI,OAAO,CAAC,YAAY,KAAK,CAAC;AACtC,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AACvE;AACA,QAAQ,IAAI,OAAO,CAAC,YAAY,KAAK,CAAC;AACtC,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AACvE,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC3C,QAAQ,IAAI,CAAC,KAAK,KAAK;AACvB,YAAY,CAAC,CAAC,IAAI,IAAI,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1F,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACoC,IAAI,yBAAyB,GAAG;AACpE;AACA,MAAM,mBAAmB,SAAS,WAAW,CAAC;AAC9C,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,gBAAgB,EAAE;AAChC,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC/E,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1E,QAAQ,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1B,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC/G,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,QAAQ,OAAO;AAC3B,gBAAgB,uBAAuB,CAAC;AACxC,oBAAoB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB;AAChB,oBAAoB,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACrD,oBAAoB,IAAI,CAAC,KAAK,OAAO;AACrC,wBAAwB,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5H,oBAAoB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,oBAAoB,IAAI,CAAC,KAAK,KAAK;AACnC,wBAAwB,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpH,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;AAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC3C,QAAQ,IAAI,CAAC,KAAK,KAAK;AACvB,YAAY,CAAC,CAAC,IAAI,IAAI,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1F,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AAC8B,IAAI,mBAAmB,GAAG;AACxD;AACA,MAAM,kBAAkB,SAAS,WAAW,CAAC;AAC7C,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,eAAe,EAAE;AAC/B,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC/E,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1E,QAAQ,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1B,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC/G,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,QAAQ,OAAO;AAC3B,gBAAgB,uBAAuB,CAAC;AACxC,oBAAoB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB;AAChB,oBAAoB,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACrD,oBAAoB,IAAI,CAAC,KAAK,OAAO;AACrC,wBAAwB,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5H,oBAAoB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,oBAAoB,IAAI,CAAC,KAAK,KAAK;AACnC,wBAAwB,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpH,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;AAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC3C,QAAQ,IAAI,CAAC,KAAK,KAAK;AACvB,YAAY,CAAC,CAAC,IAAI,IAAI,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1F,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AAC6B,IAAI,kBAAkB,GAAG;AACtD;AACA,MAAM,gBAAgB,SAAS,WAAW,CAAC;AAC3C,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,aAAa,EAAE;AAC7B,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC/E,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,uBAAuB;AAC/E,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1E,QAAQ,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1B,QAAQ,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;AAC1B,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC/G,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,QAAQ,OAAO;AAC3B,gBAAgB,uBAAuB,CAAC;AACxC,oBAAoB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB,uBAAuB,CAAC;AACxC,oBAAoB,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB;AAChB,oBAAoB,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACrD,oBAAoB,IAAI,CAAC,KAAK,OAAO;AACrC,wBAAwB,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5H,oBAAoB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,oBAAoB,IAAI,CAAC,KAAK,KAAK;AACnC,wBAAwB,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpH,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;AAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE;AACA,QAAQ,IAAI,OAAO,CAAC,KAAK,KAAK,CAAC;AAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAChE,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC3C,QAAQ,IAAI,CAAC,KAAK,KAAK;AACvB,YAAY,CAAC,CAAC,IAAI,IAAI,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1F,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,WAAW,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAClD;AACA,MAAM,UAAU,SAAS,WAAW,CAAC;AACrC,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,OAAO,EAAE;AACvB,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC/E,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,wBAAwB;AAC/E,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1E,QAAQ,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1B,QAAQ,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1B,QAAQ,IAAI,KAAK,KAAK,SAAS;AAC/B,YAAY,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;AACxD,QAAQ,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC/G,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,QAAQ,OAAO;AAC3B,gBAAgB,uBAAuB,CAAC;AACxC,oBAAoB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB,uBAAuB,CAAC;AACxC,oBAAoB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB;AAChB,oBAAoB,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACrD,oBAAoB,IAAI,CAAC,KAAK,OAAO;AACrC,wBAAwB,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5H,oBAAoB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,oBAAoB,IAAI,CAAC,KAAK,KAAK;AACnC,wBAAwB,CAAC,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpH,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;AAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;AAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC3C,QAAQ,IAAI,CAAC,KAAK,KAAK;AACvB,YAAY,CAAC,CAAC,IAAI,IAAI,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1F,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACqB,IAAI,UAAU;;AC3uDnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE;AACnD,IAAI,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;AACzC,IAAI,OAAO,CAAC,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC;AACxC,IAAI,IAAI,MAAM,EAAE;AAChB,QAAQ,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAClD,KAAK;AACL,IAAI,OAAO,OAAO,CAAC;AACnB;;ACjBA;AAGA;AACA;AACA;AACA;AACA;AACO,MAAM,gBAAgB,CAAC;AAC9B;AACA;AACA;AACA,IAAI,IAAI,GAAG,GAAG;AACd,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC;AACxB,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE;AACnC,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAC3B,QAAQ,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;AACrB,QAAQ,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACjC,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAC/B,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9D,QAAQ,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAClE,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;AACrB,KAAK;AACL,IAAI,KAAK,GAAG;AACZ,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAC1B,QAAQ,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAClD,QAAQ,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AAClF,KAAK;AACL,IAAI,IAAI,GAAG;AACX,QAAQ,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACtC,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACnD,KAAK;AACL,IAAI,aAAa,GAAG;AACpB,QAAQ,IAAI,EAAE,CAAC;AACf;AACA,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE;AAClC,YAAY,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrF,YAAY,OAAO;AACnB,SAAS;AACT;AACA,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAC3B,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,CAACC,aAA4B,CAACC,IAAa,EAAE,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC/G,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE;AACjC;AACA;AACA,QAAQ,IAAI,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;AACvD,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAC1B,KAAK;AACL;;ACxDA;AACO,MAAM,QAAQ,CAAC;AACtB,IAAI,OAAO,4BAA4B,CAAC,GAAG,EAAE,GAAG,EAAE;AAClD;AACA;AACA;AACA,QAAQ,MAAM,OAAO,GAAG,GAAG;AAC3B,aAAa,KAAK,CAAC,IAAI,CAAC;AACxB,aAAa,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAC3D,aAAa,GAAG,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACzE,aAAa,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAClC,aAAa,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,KAAK,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC;AAC3E,QAAQ,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACvD,QAAQ,MAAM,UAAU,GAAG,WAAW,GAAG,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,MAAM,CAAC;AACrE,QAAQ,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK;AAChE,YAAY,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;AACpE,SAAS,CAAC,CAAC;AACX,QAAQ,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;AAC7C;AACA,QAAQ,QAAQ,WAAW;AAC3B,YAAY,QAAQ;AACpB,iBAAiB,GAAG,CAAC,CAAC,YAAY,KAAK,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,YAAY,GAAG,UAAU,GAAG,YAAY,CAAC;AACrH,iBAAiB,IAAI,CAAC,EAAE,CAAC,EAAE;AAC3B,KAAK;AACL;;ACxBA;AAEA;AACA;AACA;AACO,MAAM,gBAAgB,CAAC;AAC9B;AACA;AACA;AACA,IAAI,WAAW,CAAC,oBAAoB,EAAE;AACtC,QAAQ,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;AACzD,QAAQ,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC5D,QAAQ,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACrE,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,aAAa,CAAC,aAAa,EAAE;AACjC,QAAQL,YAAM,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9E;AACA;AACA,QAAQ,IAAI,aAAa,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,UAAU,EAAE;AAC3F,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,eAAe,EAAE,CAAC;AACzE,QAAQ,IAAI,aAAa,CAAC,KAAK,EAAE;AACjC,YAAYA,YAAM,CAAC,IAAI,CAAC,cAAc;AACtC,gBAAgB,aAAa,CAAC,KAAK,CAAC,IAAI;AACxC,gBAAgB,MAAM;AACtB,gBAAgB,aAAa,CAAC,KAAK,CAAC,EAAE;AACtC,gBAAgB,cAAc;AAC9B,gBAAgB,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AAChD,SAAS;AACT,QAAQ,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,IAAI,OAAO,EAAE;AACjD,YAAY,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5D,YAAY,OAAO;AACnB,SAAS;AACT,aAAa,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,IAAI,OAAO;AACpD,YAAY,YAAY,CAAC,SAAS,KAAK,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AACjE,YAAY,YAAY,CAAC,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC9D,YAAYA,YAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;AACtE,YAAY,OAAO;AACnB,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,gBAAgB,EAAE;AACvC,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,eAAe,EAAE,CAAC;AACzE;AACA,QAAQ,IAAI,YAAY,CAAC,SAAS,IAAI,gBAAgB,EAAE;AACxD,YAAY,OAAO;AACnB,SAAS;AACT;AACA,aAAa,IAAI,YAAY,CAAC,SAAS,IAAI,YAAY,CAAC,SAAS,KAAK,gBAAgB,EAAE;AACxF;AACA,YAAY,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,gBAAgB,CAAC;AAC3D,YAAYA,YAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;AACpF,SAAS;AACT,KAAK;AACL;;AC9DA;AACA;AACA;AACA;AACO,MAAM,WAAW,CAAC;AACzB;AACA;AACA;AACA;AACA,IAAI,WAAW,CAAC,OAAO,EAAE;AACzB,QAAQ,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;AACnC,QAAQ,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;AAClC,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAC/B;AACA,QAAQ,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACzD,QAAQ,IAAI,CAAC,WAAW,CAAC,EAAE,GAAG,aAAa,CAAC;AAC5C,QAAQ,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;AAChD,QAAQ,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;AACtD,QAAQ,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;AACrD,QAAQ,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;AAC7C;AACA,QAAQ,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC1D,QAAQ,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;AACtD;AACA,QAAQ,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACxD,QAAQ,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACnD,KAAK;AACL;AACA;AACA;AACA,IAAI,iBAAiB,GAAG;AACxB,QAAQ,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;AACjD,KAAK;AACL;AACA;AACA;AACA,IAAI,iBAAiB,GAAG;AACxB,QAAQ,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;AAChD,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,wBAAwB,CAAC,IAAI,EAAE;AACnC,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC/F,QAAQ,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,yBAAyB,GAAG,MAAM,CAAC;AACnE,KAAK;AACL;AACA;AACA;AACA,IAAI,iCAAiC,GAAG;AACxC,QAAQ,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;AACjE,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;AAC/D,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;AACtB,KAAK;AACL;AACA;AACA;AACA,IAAI,MAAM,GAAG;AACb,QAAQ,IAAI,IAAI,CAAC,gBAAgB,KAAK,CAAC,IAAI,IAAI,CAAC,iBAAiB,KAAK,CAAC,EAAE;AACzE,YAAY,IAAI,YAAY,GAAG,CAAC,CAAC;AACjC,YAAY,IAAI,aAAa,GAAG,CAAC,CAAC;AAClC,YAAY,IAAI,UAAU,GAAG,CAAC,CAAC;AAC/B,YAAY,IAAI,WAAW,GAAG,CAAC,CAAC;AAChC,YAAY,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;AAC3F,YAAY,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC;AACpF,YAAY,IAAI,iBAAiB,GAAG,gBAAgB,EAAE;AACtD,gBAAgB,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AACxD,gBAAgB,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,gBAAgB,CAAC,CAAC;AACxF,gBAAgB,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,aAAa,IAAI,GAAG,CAAC,CAAC;AAC3F,gBAAgB,WAAW,GAAG,CAAC,CAAC;AAChC,aAAa;AACb,iBAAiB;AACjB,gBAAgB,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,gBAAgB,CAAC,CAAC;AACxF,gBAAgB,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;AAC1D,gBAAgB,UAAU,GAAG,CAAC,CAAC;AAC/B,gBAAgB,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,YAAY,IAAI,GAAG,CAAC,CAAC;AAC1F,aAAa;AACb,YAAY,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;AAC3E,YAAY,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;AAC7E,YAAY,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;AACnD,YAAY,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC;AAClD,YAAY,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,GAAG,YAAY,GAAG,IAAI,CAAC;AAChE,YAAY,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,GAAG,aAAa,GAAG,IAAI,CAAC;AAClE,YAAY,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,GAAG,WAAW,GAAG,IAAI,CAAC;AAC9D,YAAY,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,GAAG,UAAU,GAAG,IAAI,CAAC;AAC5D,SAAS;AACT,KAAK;AACL;;ACxFA;AAGA;AACA;AACA;AACO,MAAM,qBAAqB,CAAC;AACnC;AACA;AACA;AACA;AACA,IAAI,WAAW,CAAC,OAAO,EAAE;AACzB,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AAC/B,QAAQ,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;AACtB,QAAQ,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;AAC9B,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAC3B,QAAQ,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;AACnC,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;AACpD,KAAK;AACL;AACA;AACA;AACA,IAAI,eAAe,GAAG;AACtB,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE;AACxB,YAAY,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE,CAAC;AACjD,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,IAAI,eAAe,GAAG;AACtB,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAC3B,QAAQ,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE,CAAC;AAC7C,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,wBAAwB,CAAC,IAAI,EAAE,cAAc,EAAE;AACnD,QAAQ,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;AACxD,QAAQ,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,GAAG,MAAM;AACrD,YAAY,IAAI,CAAC,WAAW,CAAC,iCAAiC,EAAE,CAAC;AACjE,YAAY,cAAc,EAAE,CAAC;AAC7B,SAAS,CAAC;AACV,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,yBAAyB,CAAC,IAAI,EAAE,cAAc,EAAE;AACpD;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AAC7B,YAAY,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AAClC,YAAY,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAC/B,YAAY,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;AAC1B,YAAY,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;AAClC,SAAS;AACT;AACA,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC5E;AACA,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5C;AACA,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE;AACvB,YAAY,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AAC7E,YAAY,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACnC,YAAY,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAClD,YAAY,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AAC7B,SAAS;AACT;AACA,aAAa;AACb,YAAY,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;AAClC,YAAY,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AAClC,YAAYA,YAAM,CAAC,IAAI,CAAC,CAAC,sCAAsC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClG,SAAS;AACT;AACA,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,EAAE;AAC5C,YAAY,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACnC,YAAY,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAC9B,YAAYA,YAAM,CAAC,IAAI,CAAC,CAAC,+BAA+B,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACvE,YAAY,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;AACrE,SAAS;AACT;AACA,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE;AAC/C,YAAYA,YAAM,CAAC,KAAK,CAAC,CAAC,8CAA8C,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3G,YAAY,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;AAClC,YAAY,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACnC,SAAS;AACT,KAAK;AACL;;AC1FA;AACA;AACA;AACA;AACO,MAAM,WAAW,CAAC;AACzB,IAAI,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,uBAAuB,GAAG,MAAM;AAC7F;AACA,KAAK,EAAE;AACP,QAAQ,IAAI,CAAC,cAAc,EAAE,CAAC;AAC9B,QAAQ,IAAI,CAAC,QAAQ,GAAG,uBAAuB,CAAC;AAChD,QAAQ,IAAI,CAAC,YAAY,GAAG,MAAM;AAClC;AACA,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;AACrB,QAAQ,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AACvC,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAC3B,QAAQ,IAAI,CAAC,KAAK,GAAG,mBAAmB,CAAC;AACzC,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE;AACvB,QAAQ,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;AAC9B,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvC,KAAK;AACL;AACA;AACA;AACA,IAAI,IAAI,KAAK,GAAG;AAChB,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC;AAC3B,KAAK;AACL;AACA;AACA;AACA,IAAI,IAAI,KAAK,GAAG;AAChB,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC;AAC3B,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE;AACvB,QAAQ,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;AAC9B,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACzC,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvC,KAAK;AACL;AACA;AACA;AACA,IAAI,eAAe,GAAG;AACtB,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE;AAC/B;AACA,YAAY,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC1E,YAAY,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACxD,YAAY,IAAI,GAAG,GAAG,KAAK,CAAC;AAC5B,YAAY,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,SAAS,EAAE;AACpD,gBAAgB,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE;AACjE,oBAAoB,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AACrD,oBAAoB,GAAG,GAAG,IAAI,CAAC;AAC/B,oBAAoB,MAAM;AAC1B,iBAAiB;AACjB,aAAa;AACb,YAAY,IAAI,CAAC,GAAG,EAAE;AACtB,gBAAgB,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;AACpD,aAAa;AACb,YAAY,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5I,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,IAAI,gBAAgB,GAAG;AACvB,QAAQ,OAAO,EAAE,CAAC;AAClB,KAAK;AACL,IAAI,cAAc,GAAG;AACrB,QAAQ,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AAC7B,QAAQ,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACnE,QAAQ,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE;AAC5C,YAAY,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,KAAK,CAAC;AACxD,SAAS;AACT,KAAK;AACL,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,OAAO,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC;AACrD,KAAK;AACL,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;AACpC,YAAY,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AACvD,SAAS;AACT,QAAQ,OAAO,EAAE,CAAC;AAClB,KAAK;AACL;;AC3FA;AAEA;AACA;AACA;AACO,MAAM,WAAW,SAAS,WAAW,CAAC;AAC7C,IAAI,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,uBAAuB,GAAG,MAAM;AACxG;AACA,KAAK,EAAE;AACP,QAAQ,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,uBAAuB,CAAC,CAAC;AACjF,QAAQ,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;AACzD,YAAY,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;AACzC,SAAS;AACT,aAAa;AACb;AACA,YAAY,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC3D,YAAY,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,WAAW,EAAE,IAAI,OAAO,CAAC;AAC9D,SAAS;AACT,QAAQ,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACzC,KAAK;AACL,IAAI,gBAAgB,GAAG;AACvB,QAAQ,OAAO,IAAI,CAAC,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC;AAC5C,KAAK;AACL;AACA;AACA;AACA,IAAI,MAAM,GAAG;AACb,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,KAAK;AACL;AACA;AACA;AACA,IAAI,IAAI,IAAI,GAAG;AACf,QAAQ,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5B,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;AACtB,QAAQ,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;AAC7B,KAAK;AACL;;AC1CA;AAEA;AACA;AACA;AACO,MAAM,aAAa,SAAS,WAAW,CAAC;AAC/C,IAAI,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,aAAa,EAAE,YAAY,EAAE,uBAAuB,GAAG,MAAM;AAC/G;AACA,KAAK,EAAE;AACP,QAAQ,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,uBAAuB,CAAC,CAAC;AAC9E,QAAQ,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;AACxB,QAAQ,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;AACxB;AACA,QAAQ,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;AACzD,YAAY,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC;AACxC,SAAS;AACT,aAAa;AACb,YAAY,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7E,YAAY,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,aAAa,GAAG,WAAW,CAAC;AAClF,SAAS;AACT,QAAQ,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACzC,KAAK;AACL,IAAI,gBAAgB,GAAG;AACvB,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;AACtC,KAAK;AACL;AACA;AACA;AACA,IAAI,IAAI,MAAM,CAAC,SAAS,EAAE;AAC1B,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC3C,KAAK;AACL;AACA;AACA;AACA,IAAI,IAAI,MAAM,GAAG;AACjB,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC;AAC1B,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,CAAC,QAAQ,EAAE;AACpB,QAAQ,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;AACpD,YAAY,OAAO,QAAQ,CAAC;AAC5B,SAAS;AACT,aAAa,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;AACpC,YAAY,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACjD,SAAS;AACT,aAAa,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;AACpC,YAAY,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACjD,SAAS;AACT,aAAa;AACb,YAAY,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACtE,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,IAAI,GAAG,GAAG;AACd,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC;AACzB,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,IAAI,GAAG,GAAG;AACd,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC;AACzB,KAAK;AACL;AACA;AACA;AACA,IAAI,oBAAoB,CAAC,aAAa,EAAE;AACxC,QAAQ,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC;AACtC,KAAK;AACL;;AC5EA;AAEA;AACA;AACA;AACO,MAAM,WAAW,SAAS,WAAW,CAAC;AAC7C,IAAI,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,uBAAuB,GAAG,MAAM;AACxG;AACA,KAAK,EAAE;AACP,QAAQ,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,uBAAuB,CAAC,CAAC;AACjF,QAAQ,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;AACzD,YAAY,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;AACzC,SAAS;AACT,aAAa;AACb;AACA,YAAY,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAClD,SAAS;AACT,QAAQ,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACzC,KAAK;AACL,IAAI,gBAAgB,GAAG;AACvB,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC;AACzB,KAAK;AACL;AACA;AACA;AACA,IAAI,IAAI,IAAI,GAAG;AACf,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC;AAC1B,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;AACtB,QAAQ,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;AAC7B,KAAK;AACL;;ACnCA;AAGA;AACA;AACA;AACO,MAAM,aAAa,SAAS,WAAW,CAAC;AAC/C,IAAI,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,YAAY,EAAE,uBAAuB,GAAG,UAAU,KAAK,EAAE;AAC5H;AACA,QAAQ,OAAO,KAAK,CAAC;AACrB,KAAK,EAAE,uBAAuB,GAAG,MAAM;AACvC;AACA,KAAK,EAAE;AACP,QAAQ,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,uBAAuB,CAAC,CAAC;AACjF,QAAQ,IAAI,CAAC,iBAAiB,GAAG,uBAAuB,CAAC;AACzD,QAAQ,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;AACvD,cAAc,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC/D,cAAc,gBAAgB,CAAC;AAC/B,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC,GAAG,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC;AAC1F,QAAQ,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC;AACtC,QAAQ,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACzC,KAAK;AACL,IAAI,gBAAgB,GAAG;AACvB,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC;AAC7B,KAAK;AACL;AACA;AACA;AACA,IAAI,oBAAoB,CAAC,aAAa,EAAE;AACxC,QAAQ,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC;AACtC,KAAK;AACL;AACA;AACA;AACA,IAAI,IAAI,OAAO,GAAG;AAClB,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC;AAC7B,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE;AACxB,QAAQ,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;AAC/B,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzC,KAAK;AACL;AACA;AACA;AACA,IAAI,IAAI,QAAQ,GAAG;AACnB,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC;AAC1B,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE;AACxB,QAAQ,IAAI,KAAK,KAAK,SAAS,EAAE;AACjC,YAAY,OAAO;AACnB,SAAS;AACT;AACA,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC1C,YAAY,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAC/B,SAAS;AACT,aAAa;AACb,YAAYA,YAAM,CAAC,KAAK,CAAC,CAAC,eAAe,EAAE,KAAK,CAAC,6BAA6B,EAAE,IAAI,CAAC,EAAE,CAAC,sCAAsC,CAAC,CAAC,CAAC;AACjI,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,gBAAgB,CAAC,KAAK,EAAE;AAChC,QAAQ,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;AACvC,KAAK;AACL;;AC3EA;AACA;AACA;AACA;AACO,MAAM,uBAAuB,SAAS,KAAK,CAAC;AACnD,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,KAAK,CAAC,oBAAoB,CAAC,CAAC;AACpC,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,qBAAqB,SAAS,KAAK,CAAC;AACjD,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,KAAK,CAAC,kBAAkB,CAAC,CAAC;AAClC,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,yBAAyB,SAAS,KAAK,CAAC;AACrD,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,sBAAsB,CAAC,CAAC;AACtC,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,gBAAgB,SAAS,KAAK,CAAC;AAC5C,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,aAAa,CAAC,CAAC;AAC7B,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,sBAAsB,SAAS,KAAK,CAAC;AAClD,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,KAAK,CAAC,mBAAmB,CAAC,CAAC;AACnC,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,cAAc,SAAS,KAAK,CAAC;AAC1C,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,WAAW,CAAC,CAAC;AAC3B,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAChD,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,KAAK,CAAC,iBAAiB,CAAC,CAAC;AACjC,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,mBAAmB,SAAS,KAAK,CAAC;AAC/C,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,KAAK,CAAC,gBAAgB,CAAC,CAAC;AAChC,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,sBAAsB,SAAS,KAAK,CAAC;AAClD,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,mBAAmB,CAAC,CAAC;AACnC,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,qBAAqB,SAAS,KAAK,CAAC;AACjD,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,kBAAkB,CAAC,CAAC;AAClC,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAChD,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,iBAAiB,CAAC,CAAC;AACjC,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,iBAAiB,SAAS,KAAK,CAAC;AAC7C,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,cAAc,CAAC,CAAC;AAC9B,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,uBAAuB,SAAS,KAAK,CAAC;AACnD,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,KAAK,CAAC,oBAAoB,CAAC,CAAC;AACpC,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAChD,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,KAAK,CAAC,iBAAiB,CAAC,CAAC;AACjC,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,qBAAqB,SAAS,KAAK,CAAC;AACjD,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,KAAK,CAAC,kBAAkB,CAAC,CAAC;AAClC,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,qBAAqB,SAAS,KAAK,CAAC;AACjD,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,KAAK,CAAC,kBAAkB,CAAC,CAAC;AAClC,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,qBAAqB,SAAS,KAAK,CAAC;AACjD,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,kBAAkB,CAAC,CAAC;AAClC,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,kBAAkB,SAAS,KAAK,CAAC;AAC9C,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,eAAe,CAAC,CAAC;AAC/B,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,qBAAqB,SAAS,KAAK,CAAC;AACjD,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,eAAe,CAAC,CAAC;AAC/B,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,wBAAwB,SAAS,KAAK,CAAC;AACpD,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,kBAAkB,CAAC,CAAC;AAClC,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAChD,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,iBAAiB,CAAC,CAAC;AACjC,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAChD,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,KAAK,CAAC,iBAAiB,CAAC,CAAC;AACjC,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,eAAe,SAAS,KAAK,CAAC;AAC3C,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,YAAY,CAAC,CAAC;AAC5B,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA;AACO,MAAM,uBAAuB,SAAS,KAAK,CAAC;AACnD,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,KAAK,CAAC,oBAAoB,CAAC,CAAC;AACpC,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAChD,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,KAAK,CAAC,iBAAiB,CAAC,CAAC;AACjC,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAChD,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,iBAAiB,CAAC,CAAC;AACjC,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,kBAAkB,SAAS,KAAK,CAAC;AAC9C,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,KAAK,CAAC,eAAe,CAAC,CAAC;AAC/B,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,wBAAwB,SAAS,KAAK,CAAC;AACpD,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,KAAK,CAAC,qBAAqB,CAAC,CAAC;AACrC,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,6BAA6B,SAAS,KAAK,CAAC;AACzD,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,KAAK,CAAC,0BAA0B,CAAC,CAAC;AAC1C,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,sBAAsB,SAAS,KAAK,CAAC;AAClD,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,KAAK,CAAC,mBAAmB,CAAC,CAAC;AACnC,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,sBAAsB,SAAS,KAAK,CAAC;AAClD,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,KAAK,CAAC,mBAAmB,CAAC,CAAC;AACnC,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,yBAAyB,SAAS,KAAK,CAAC;AACrD,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,KAAK,CAAC,sBAAsB,CAAC,CAAC;AACtC,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA;AACO,MAAM,mCAAmC,SAAS,KAAK,CAAC;AAC/D,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,KAAK,CAAC,gCAAgC,CAAC,CAAC;AAChD,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,iCAAiC,SAAS,KAAK,CAAC;AAC7D,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,KAAK,CAAC,8BAA8B,CAAC,CAAC;AAC9C,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,CAAC;AACM,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAChD,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,KAAK,CAAC,iBAAiB,CAAC,CAAC;AACjC,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAChD,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,KAAK,CAAC,iBAAiB,CAAC,CAAC;AACjC,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAChD,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,KAAK,CAAC,iBAAiB,CAAC,CAAC;AACjC,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,CAAC;AAiBD;AACA;AACA;AACO,MAAM,YAAY,SAAS,KAAK,CAAC;AACxC,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,KAAK,CAAC,SAAS,CAAC,CAAC;AACzB,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,gBAAgB,SAAS,KAAK,CAAC;AAC5C,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,KAAK,CAAC,aAAa,CAAC,CAAC;AAC7B,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,2BAA2B,SAAS,KAAK,CAAC;AACvD,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,wBAAwB,CAAC,CAAC;AACxC,KAAK;AACL,CAAC;AACM,MAAM,0BAA0B,SAAS,WAAW,CAAC;AAC5D;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,CAAC,CAAC,EAAE;AACrB,QAAQ,OAAO,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AACtC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE;AACrC,QAAQ,KAAK,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC/C,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE;AACxC,QAAQ,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAClD,KAAK;AACL;;AClYA;AAEO,MAAM,YAAY,CAAC;AAC1B,IAAI,OAAO,uBAAuB,GAAG;AACrC,QAAQ,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAC1C;AACA,QAAQ,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE;AAC7C,YAAYA,YAAM,CAAC,OAAO,CAAC,iHAAiH,CAAC,CAAC;AAC9I,YAAY,sBAAsB,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;AACvH,YAAY,OAAO,sBAAsB,CAAC;AAC1C,SAAS;AACT,QAAQ,MAAM,OAAO,GAAG,oBAAoB,CAAC;AAC7C,QAAQ,MAAM,YAAY,GAAG,cAAc,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;AACrE,QAAQ,IAAI,CAAC,YAAY,EAAE;AAC3B,YAAY,sBAAsB,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;AACvH,YAAY,OAAO,sBAAsB,CAAC;AAC1C,SAAS;AACT,QAAQ,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK;AAC/C,YAAY,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;AACvF,YAAY,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5C,YAAY,IAAI,KAAK,KAAK,IAAI,EAAE;AAChC,gBAAgB,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACjD,aAAa;AACb,SAAS,CAAC,CAAC;AACX,QAAQ,OAAO,sBAAsB,CAAC;AACtC,KAAK;AACL;;AC1BA;AAQA;AACA;AACA;AACA;AACO,MAAM,KAAK,CAAC;AACnB,CAAC;AACD,KAAK,CAAC,WAAW,GAAG,aAAa,CAAC;AAClC,KAAK,CAAC,aAAa,GAAG,eAAe,CAAC;AACtC,KAAK,CAAC,YAAY,GAAG,eAAe,CAAC;AACrC,KAAK,CAAC,iBAAiB,GAAG,eAAe,CAAC;AAC1C,KAAK,CAAC,cAAc,GAAG,gBAAgB,CAAC;AACxC,KAAK,CAAC,SAAS,GAAG,WAAW,CAAC;AAC9B,KAAK,CAAC,oBAAoB,GAAG,sBAAsB,CAAC;AACpD,KAAK,CAAC,mBAAmB,GAAG,iBAAiB,CAAC;AAC9C,KAAK,CAAC,uBAAuB,GAAG,kBAAkB,CAAC;AACnD,KAAK,CAAC,eAAe,GAAG,iBAAiB,CAAC;AAC1C,KAAK,CAAC,mBAAmB,GAAG,qBAAqB,CAAC;AAClD,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC;AACxB,KAAK,CAAC,oBAAoB,GAAG,sBAAsB,CAAC;AACpD,KAAK,CAAC,SAAS,GAAG,WAAW,CAAC;AAC9B,KAAK,CAAC,aAAa,GAAG,eAAe,CAAC;AACtC,KAAK,CAAC,UAAU,GAAG,YAAY,CAAC;AAChC,KAAK,CAAC,UAAU,GAAG,YAAY,CAAC;AAChC,KAAK,CAAC,YAAY,GAAG,cAAc,CAAC;AACpC,KAAK,CAAC,iBAAiB,GAAG,mBAAmB,CAAC;AAC9C,KAAK,CAAC,eAAe,GAAG,iBAAiB,CAAC;AAC1C,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC;AACxB,KAAK,CAAC,oBAAoB,GAAG,sBAAsB,CAAC;AAC7C,MAAM,QAAQ,GAAG,CAAC,EAAE,KAAK,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AACrG;AACA;AACA;AACA;AACO,MAAM,iBAAiB,CAAC;AAC/B,CAAC;AACD,iBAAiB,CAAC,cAAc,GAAG,YAAY,CAAC;AAChD,iBAAiB,CAAC,gBAAgB,GAAG,cAAc,CAAC;AACpD,iBAAiB,CAAC,KAAK,GAAG,OAAO,CAAC;AAClC,iBAAiB,CAAC,KAAK,GAAG,OAAO,CAAC;AAClC,iBAAiB,CAAC,UAAU,GAAG,YAAY,CAAC;AAC5C,iBAAiB,CAAC,UAAU,GAAG,YAAY,CAAC;AAC5C,iBAAiB,CAAC,gBAAgB,GAAG,kBAAkB,CAAC;AACxD,iBAAiB,CAAC,gBAAgB,GAAG,kBAAkB,CAAC;AACxD,iBAAiB,CAAC,SAAS,GAAG,WAAW,CAAC;AAC1C,iBAAiB,CAAC,gBAAgB,GAAG,kBAAkB,CAAC;AACxD,iBAAiB,CAAC,gBAAgB,GAAG,kBAAkB,CAAC;AACxD,iBAAiB,CAAC,oBAAoB,GAAG,sBAAsB,CAAC;AAChE,iBAAiB,CAAC,wBAAwB,GAAG,0BAA0B,CAAC;AACxE,iBAAiB,CAAC,cAAc,GAAG,gBAAgB,CAAC;AAC7C,MAAM,WAAW,GAAG,CAAC,EAAE,KAAK,MAAM,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AAChI;AACA;AACA;AACA;AACO,MAAM,cAAc,CAAC;AAC5B,CAAC;AACD,cAAc,CAAC,mBAAmB,GAAG,IAAI,CAAC;AACnC,MAAM,QAAQ,GAAG,CAAC,EAAE,KAAK,MAAM,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AACvH;AACA;AACA;AACA;AACO,MAAM,gBAAgB,CAAC;AAC9B,CAAC;AACD,gBAAgB,CAAC,cAAc,GAAG,gBAAgB,CAAC;AACnD,gBAAgB,CAAC,UAAU,GAAG,YAAY,CAAC;AAC3C,gBAAgB,CAAC,gBAAgB,GAAG,kBAAkB,CAAC;AAChD,MAAM,UAAU,GAAG,CAAC,EAAE,KAAK,MAAM,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AACtH,MAAM,MAAM,CAAC;AACpB;AACA,IAAI,WAAW,CAAC,MAAM,GAAG,EAAE,EAAE;AAC7B;AACA,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;AAC/B;AACA,QAAQ,IAAI,CAAC,iBAAiB,GAAG,IAAI,GAAG,EAAE,CAAC;AAC3C;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;AACxC;AACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,EAAE,CAAC;AAC1C,QAAQ,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,kBAAkB,EAAE,GAAG,MAAM,CAAC;AAC7E,QAAQ,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,YAAY,CAAC;AAC5C,QAAQ,IAAI,CAAC,mBAAmB,GAAG,kBAAkB,CAAC;AACtD,QAAQ,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;AAC1E,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,IAAI,YAAY,GAAG;AACvB,QAAQ,OAAO,IAAI,CAAC,aAAa,CAAC;AAClC,KAAK;AACL;AACA;AACA;AACA,IAAI,IAAI,kBAAkB,GAAG;AAC7B,QAAQ,OAAO,IAAI,CAAC,mBAAmB,CAAC;AACxC,KAAK;AACL;AACA;AACA;AACA,IAAI,uBAAuB,CAAC,YAAY,EAAE,QAAQ,EAAE;AACpD;AACA;AACA;AACA,QAAQ,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,mBAAmB,EAAE,IAAI,WAAW,CAAC,cAAc,CAAC,mBAAmB,EAAE,gBAAgB,EAAE,8BAA8B,EAAE,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,mBAAmB,CAAC;AACxQ,cAAc,QAAQ,CAAC,cAAc,CAAC,mBAAmB,CAAC;AAC1D,cAAc,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,GAAG,QAAQ,GAAG,OAAO;AAClE,gBAAgB,MAAM,CAAC,QAAQ,CAAC,QAAQ;AACxC;AACA,iBAAiB,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,EAAE;AAC7E,sBAAsB,EAAE;AACxB,sBAAsB,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;AAClE,QAAQ,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,aAAa,CAAC,gBAAgB,CAAC,UAAU,EAAE,aAAa,EAAE,mCAAmC,EAAE,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC;AACzP,cAAc,QAAQ,CAAC,gBAAgB,CAAC,UAAU,CAAC;AACnD,cAAc,EAAE,EAAE,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC;AACzG,cAAc,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;AACrD,cAAc,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;AACxC,QAAQ,MAAM,oBAAoB,GAAG,YAAY;AACjD,YAAY,MAAM,WAAW,GAAG,YAAY,CAAC,uBAAuB,EAAE,CAAC;AACvE;AACA,YAAY,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,EAAE;AACzC,gBAAgB,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;AACtC,aAAa;AACb,iBAAiB,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7C,gBAAgB,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AACpD,gBAAgB,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE;AACjD,oBAAoB,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AAClD,wBAAwB,OAAO,KAAK,CAAC;AACrC,qBAAqB;AACrB,iBAAiB;AACjB,gBAAgB,OAAO,YAAY,CAAC;AACpC,aAAa;AACb,YAAYA,YAAM,CAAC,KAAK,CAAC,mEAAmE,CAAC,CAAC;AAC9F,YAAY,OAAO,EAAE,CAAC;AACtB,SAAS,CAAC;AACV,QAAQ,MAAM,qCAAqC,GAAG,UAAU,cAAc,EAAE;AAChF,YAAY,MAAM,sBAAsB,GAAG,YAAY,CAAC,uBAAuB,EAAE,CAAC;AAClF;AACA;AACA,YAAY,IAAI,sBAAsB,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;AACjE,gBAAgB,OAAO,cAAc,CAAC;AACtC,aAAa;AACb;AACA,YAAY,KAAK,MAAM,YAAY,IAAI,sBAAsB,EAAE;AAC/D,gBAAgB,IAAI,YAAY,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE;AAC7D,oBAAoB,OAAO,YAAY,CAAC;AACxC,iBAAiB;AACjB,aAAa;AACb;AACA,YAAY,OAAO,cAAc,CAAC;AAClC,SAAS,CAAC;AACV;AACA;AACA;AACA,QAAQ,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,aAAa,CAAC,gBAAgB,CAAC,cAAc,EAAE,iBAAiB,EAAE,yDAAyD,EAAE,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,cAAc,CAAC;AAC/R,cAAc,qCAAqC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;AAC9F,cAAc,oBAAoB,EAAE,EAAE,YAAY,CAAC,uBAAuB,EAAE,EAAE,YAAY,EAAE,qCAAqC,CAAC,CAAC,CAAC;AACpI,QAAQ,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,IAAI,aAAa,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,mBAAmB,EAAE,0EAA0E,EAAE,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,gBAAgB,CAAC;AACxT,cAAc,QAAQ,CAAC,gBAAgB,CAAC,gBAAgB,CAAC;AACzD,cAAc,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;AACrD;AACA;AACA;AACA,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,WAAW,EAAE,wBAAwB,EAAE,qGAAqG,EAAE,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC;AAC3R,cAAc,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC;AACzC,cAAc,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;AACpC,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,aAAa,EAAE,iBAAiB,EAAE,yFAAyF,EAAE,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC;AAC9Q,cAAc,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC;AAC3C,cAAc,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;AACnC,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,gBAAgB,EAAE,uEAAuE,EAAE,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;AACtO,cAAc,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;AACpC,cAAc,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;AACpC,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,oBAAoB,EAAE,0BAA0B,EAAE,yEAAyE,EAAE,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,oBAAoB,CAAC;AAC5R,cAAc,QAAQ,CAAC,KAAK,CAAC,oBAAoB,CAAC;AAClD,cAAc,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;AACnC,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,YAAY,EAAE,kEAAkE,EAAE,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;AACtO,cAAc,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC;AACvC,cAAc,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;AACpC,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,eAAe,EAAE,mBAAmB,EAAE,iCAAiC,EAAE,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,eAAe,CAAC;AAC9N,cAAc,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC;AAC7C,cAAc,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;AACpC,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,wHAAwH,EAAE,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,mBAAmB,CAAC;AACrU,cAAc,QAAQ,CAAC,KAAK,CAAC,mBAAmB,CAAC;AACjD,cAAc,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;AACnC,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,mBAAmB,EAAE,wBAAwB,EAAE,2CAA2C,EAAE,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,mBAAmB,CAAC;AACzP,cAAc,QAAQ,CAAC,KAAK,CAAC,mBAAmB,CAAC;AACjD,cAAc,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;AACnC,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE,kBAAkB,EAAE,gDAAgD,EAAE,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,cAAc,CAAC;AACzO,cAAc,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC;AAC5C,cAAc,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;AACpC,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,YAAY,EAAE,4CAA4C,EAAE,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;AAChN,cAAc,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC;AACvC,cAAc,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;AACpC,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,YAAY,EAAE,aAAa,EAAE,qDAAqD,EAAE,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC;AACnO,cAAc,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC;AAC1C,cAAc,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;AACpC,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,uBAAuB,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,uBAAuB,EAAE,2BAA2B,EAAE,mHAAmH,EAAE,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,uBAAuB,CAAC;AAChV,cAAc,QAAQ,CAAC,KAAK,CAAC,uBAAuB,CAAC;AACrD,cAAc,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;AACpC,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,iBAAiB,EAAE,8BAA8B,EAAE,uIAAuI,EAAE,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,iBAAiB,CAAC;AACrV,cAAc,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC;AAC/C,cAAc,KAAK,EAAE,YAAY,EAAE,CAAC,eAAe,EAAE,OAAO,KAAK;AACjE,YAAY,OAAO,CAAC,KAAK,GAAG,CAAC,gBAAgB,EAAE,eAAe,GAAG,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC/F,SAAS,CAAC,CAAC,CAAC;AACZ,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,oBAAoB,EAAE,yBAAyB,EAAE,2IAA2I,EAAE,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,oBAAoB,CAAC;AAC7V,cAAc,QAAQ,CAAC,KAAK,CAAC,oBAAoB,CAAC;AAClD,cAAc,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;AACpC,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,aAAa,EAAE,gBAAgB,EAAE,8CAA8C,EAAE,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC;AAClO,cAAc,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC;AAC3C,cAAc,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;AACnC,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE,aAAa,EAAE,2CAA2C,EAAE,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC;AACnN,cAAc,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC;AACxC,cAAc,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;AACnC,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE,aAAa,EAAE,2CAA2C,EAAE,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC;AACnN,cAAc,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC;AACxC,cAAc,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;AACnC,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,YAAY,EAAE,eAAe,EAAE,6CAA6C,EAAE,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC;AAC7N,cAAc,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC;AAC1C,cAAc,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;AACnC,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,iBAAiB,EAAE,qBAAqB,EAAE,mDAAmD,EAAE,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,iBAAiB,CAAC;AACxP,cAAc,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC;AAC/C,cAAc,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;AACnC,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,eAAe,EAAE,mBAAmB,EAAE,kEAAkE,EAAE,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,eAAe,CAAC;AAC/P,cAAc,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC;AAC7C,cAAc,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;AACnC,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,qBAAqB,EAAE,kCAAkC,EAAE,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;AACtM,cAAc,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;AACpC,cAAc,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;AACpC,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,oBAAoB,EAAE,yBAAyB,EAAE,mDAAmD,EAAE,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,oBAAoB,CAAC;AACrQ,cAAc,QAAQ,CAAC,KAAK,CAAC,oBAAoB,CAAC;AAClD,cAAc,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;AACpC;AACA;AACA;AACA,QAAQ,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,iBAAiB,CAAC,cAAc,EAAE,IAAI,aAAa,CAAC,iBAAiB,CAAC,cAAc,EAAE,aAAa,EAAE,2FAA2F,EAAE,CAAC,UAAU,IAAI,UAAU,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,cAAc,CAAC;AAC1V,cAAc,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC;AACxD,cAAc,GAAG,YAAY,YAAY,CAAC,CAAC,CAAC;AAC5C,QAAQ,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,IAAI,aAAa,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,eAAe,EAAE,8FAA8F,EAAE,EAAE,UAAU,IAAI,UAAU,EAAE,YAAY,YAAY,CAAC,CAAC,CAAC;AACrS,QAAQ,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,IAAI,aAAa,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,gBAAgB,EAAE,wFAAwF,EAAE,CAAC,UAAU,GAAG,UAAU,QAAQ;AACjR,YAAY,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,oBAAoB,CAAC;AAClG,cAAc,QAAQ,CAAC,iBAAiB,CAAC,oBAAoB,CAAC;AAC9D,cAAc,CAAC,YAAY,YAAY,CAAC,CAAC,CAAC;AAC1C,QAAQ,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,aAAa,CAAC,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,2GAA2G,EAAE,CAAC,UAAU,EAAE,UAAU,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,KAAK,CAAC;AACxU,cAAc,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAC/C,cAAc,CAAC,YAAY,YAAY,CAAC,CAAC,CAAC;AAC1C,QAAQ,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,aAAa,CAAC,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,2GAA2G,EAAE,CAAC,UAAU,EAAE,UAAU,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,KAAK,CAAC;AACxU,cAAc,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAC/C,cAAc,EAAE,YAAY,YAAY,CAAC,CAAC,CAAC;AAC3C,QAAQ,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,iBAAiB,CAAC,UAAU,EAAE,IAAI,aAAa,CAAC,iBAAiB,CAAC,UAAU,EAAE,aAAa,EAAE,+FAA+F,EAAE,CAAC,UAAU,GAAG,UAAU,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC;AACjV,cAAc,QAAQ,CAAC,iBAAiB,CAAC,UAAU,CAAC;AACpD,cAAc,CAAC,YAAY,YAAY,CAAC,CAAC,CAAC;AAC1C,QAAQ,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,iBAAiB,CAAC,UAAU,EAAE,IAAI,aAAa,CAAC,iBAAiB,CAAC,UAAU,EAAE,aAAa,EAAE,+FAA+F,EAAE,CAAC,UAAU,GAAG,UAAU,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC;AACjV,cAAc,QAAQ,CAAC,iBAAiB,CAAC,UAAU,CAAC;AACpD,cAAc,GAAG,YAAY,YAAY,CAAC,CAAC,CAAC;AAC5C,QAAQ,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,IAAI,aAAa,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,aAAa,EAAE,8DAA8D,EAAE,CAAC,UAAU,GAAG,UAAU,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,gBAAgB,CAAC;AAClU,cAAc,QAAQ,CAAC,iBAAiB,CAAC,gBAAgB,CAAC;AAC1D,cAAc,CAAC,YAAY,YAAY,CAAC,CAAC,CAAC;AAC1C,QAAQ,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,IAAI,aAAa,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,aAAa,EAAE,8DAA8D,EAAE,CAAC,UAAU,GAAG,UAAU,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,gBAAgB,CAAC;AAClU,cAAc,QAAQ,CAAC,iBAAiB,CAAC,gBAAgB,CAAC;AAC1D,cAAc,GAAG,YAAY,YAAY,CAAC,CAAC,CAAC;AAC5C,QAAQ,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,iBAAiB,CAAC,SAAS,EAAE,IAAI,aAAa,CAAC,iBAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,6DAA6D,EAAE,CAAC,UAAU,GAAG,UAAU,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,SAAS,CAAC;AACxS,cAAc,QAAQ,CAAC,iBAAiB,CAAC,SAAS,CAAC;AACnD,cAAc,EAAE,YAAY,YAAY,CAAC,CAAC,CAAC;AAC3C,QAAQ,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,IAAI,aAAa,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,oBAAoB,EAAE,6CAA6C,EAAE,CAAC,UAAU,MAAM,UAAU,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,gBAAgB,CAAC;AAC3T,cAAc,QAAQ,CAAC,iBAAiB,CAAC,gBAAgB,CAAC;AAC1D,cAAc,CAAC,YAAY,YAAY,CAAC,CAAC,CAAC;AAC1C,QAAQ,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,IAAI,aAAa,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,oBAAoB,EAAE,6CAA6C,EAAE,CAAC,UAAU,MAAM,UAAU,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,gBAAgB,CAAC;AAC3T,cAAc,QAAQ,CAAC,iBAAiB,CAAC,gBAAgB,CAAC;AAC1D,cAAc,CAAC,YAAY,YAAY,CAAC,CAAC,CAAC;AAC1C,QAAQ,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,iBAAiB,CAAC,wBAAwB,EAAE,IAAI,aAAa,CAAC,iBAAiB,CAAC,wBAAwB,EAAE,kCAAkC,EAAE,+DAA+D,EAAE,GAAG,UAAU,MAAM,UAAU,QAAQ;AACvR,YAAY,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,wBAAwB,CAAC;AACtG,cAAc,QAAQ,CAAC,iBAAiB,CAAC,wBAAwB,CAAC;AAClE,cAAc,IAAI,YAAY,YAAY,CAAC,CAAC,CAAC;AAC7C,QAAQ,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,iBAAiB,CAAC,cAAc,EAAE,IAAI,aAAa,CAAC,iBAAiB,CAAC,cAAc,EAAE,4BAA4B,EAAE,yDAAyD,EAAE,CAAC,UAAU,MAAM,UAAU,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,cAAc,CAAC;AACzU,cAAc,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC;AACxD,cAAc,KAAK,YAAY,YAAY,CAAC,CAAC,CAAC;AAC9C,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,mCAAmC,CAAC,EAAE,EAAE,iBAAiB,EAAE;AAC/D,QAAQ,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AAC5C,YAAY,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;AACnF,SAAS;AACT,KAAK;AACL,IAAI,kCAAkC,CAAC,EAAE,EAAE,iBAAiB,EAAE;AAC9D,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AAC3C,YAAY,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;AAClF,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,sBAAsB,CAAC,EAAE,EAAE;AAC/B,QAAQ,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AAC5C,YAAY,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;AACzD,SAAS;AACT,aAAa;AACb,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,2CAA2C,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAChF,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,mBAAmB,CAAC,EAAE,EAAE;AAC5B,QAAQ,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACzC,YAAY,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC;AACrD,SAAS;AACT,aAAa;AACb,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,2CAA2C,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAChF,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,iBAAiB,CAAC,EAAE,EAAE,KAAK,EAAE;AACjC,QAAQ,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AAC5C,YAAY,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC;AAC1D,SAAS;AACT,aAAa;AACb,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,2CAA2C,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAChF,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,4BAA4B,CAAC,EAAE,EAAE,gBAAgB,EAAE;AACvD,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AAChC,YAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,GAAG,gBAAgB,CAAC;AAC3D,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,gCAAgC,CAAC,EAAE,EAAE,gBAAgB,EAAE;AAC3D,QAAQ,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACzC,YAAY,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,GAAG,gBAAgB,CAAC;AACpE,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,EAAE,EAAE;AACzB,QAAQ,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC7C,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,CAAC,EAAE,EAAE;AACtB,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;AACvC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,cAAc,CAAC,EAAE,EAAE,WAAW,EAAE;AACpC,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACjC,YAAYA,YAAM,CAAC,OAAO,CAAC,CAAC,0BAA0B,EAAE,EAAE,CAAC,6CAA6C,CAAC,CAAC,CAAC;AAC3G,SAAS;AACT,aAAa;AACb,YAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,WAAW,CAAC;AAClD,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,cAAc,CAAC,EAAE,EAAE,YAAY,EAAE;AACrC,QAAQ,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AAC1C,YAAYA,YAAM,CAAC,OAAO,CAAC,CAAC,+BAA+B,EAAE,EAAE,CAAC,sDAAsD,CAAC,CAAC,CAAC;AACzH,SAAS;AACT,aAAa;AACb,YAAY,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,YAAY,CAAC;AAC5D,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,uBAAuB,CAAC,EAAE,EAAE,cAAc,EAAE;AAChD,QAAQ,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AAC5C,YAAYA,YAAM,CAAC,OAAO,CAAC,CAAC,+BAA+B,EAAE,EAAE,CAAC,wDAAwD,CAAC,CAAC,CAAC;AAC3H,SAAS;AACT,aAAa;AACb,YAAY,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,cAAc,CAAC;AACnE,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,qBAAqB,CAAC,EAAE,EAAE,YAAY,EAAE;AAC5C,QAAQ,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AAC5C,YAAYA,YAAM,CAAC,OAAO,CAAC,CAAC,+BAA+B,EAAE,EAAE,CAAC,sDAAsD,CAAC,CAAC,CAAC;AACzH,SAAS;AACT,aAAa;AACb,YAAY,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChE,YAAY,MAAM,eAAe,GAAG,aAAa,CAAC,OAAO,CAAC;AAC1D,YAAY,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;AACzD,gBAAgB,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACnD,gBAAgB,aAAa,CAAC,OAAO,GAAG,eAAe,CAAC;AACxD,aAAa;AACb,YAAY,aAAa,CAAC,QAAQ,GAAG,YAAY,CAAC;AAClD,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE;AAC5B,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACjC,YAAYA,YAAM,CAAC,OAAO,CAAC,CAAC,iCAAiC,EAAE,EAAE,CAAC,6CAA6C,CAAC,CAAC,CAAC;AAClH,SAAS;AACT,aAAa;AACb,YAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;AAC7C,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,WAAW,CAAC,QAAQ,EAAE;AAC1B,QAAQ,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AACjD,YAAY,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC/B,gBAAgB,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AACxD,aAAa;AACb,iBAAiB,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE;AACvC,gBAAgB,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3D,aAAa;AACb,iBAAiB,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE;AACpC,gBAAgB,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AACxD,aAAa;AACb,iBAAiB,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE;AACtC,gBAAgB,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,WAAW,GAAG;AAClB,QAAQ,MAAM,QAAQ,GAAG,EAAE,CAAC;AAC5B,QAAQ,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE;AACzD,YAAY,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;AACvC,SAAS;AACT,QAAQ,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE;AACrE,YAAY,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;AACzC,SAAS;AACT,QAAQ,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE;AAClE,YAAY,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;AACvC,SAAS;AACT,QAAQ,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,EAAE;AACpE,YAAY,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC;AAC3C,SAAS;AACT,QAAQ,OAAO,QAAQ,CAAC;AACxB,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/C,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,eAAe,GAAG;AACtB,QAAQ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;AACxD,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,kBAAkB,GAAG;AACzB,QAAQ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC;AAC3D,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,iBAAiB,GAAG;AACxB,QAAQ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;AAC1D,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,uBAAuB,CAAC,YAAY,EAAE;AAC1C,QAAQ,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE;AAC7C,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC7C,YAAY,IAAI,IAAI,EAAE;AACtB,gBAAgB,IAAI,CAAC,YAAY,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC,aAAa,CAAC,IAAI,oBAAoB,CAAC;AACtG,oBAAoB,EAAE,EAAE,IAAI,CAAC,EAAE;AAC/B,oBAAoB,IAAI,EAAE,MAAM;AAChC,oBAAoB,KAAK,EAAE,QAAQ;AACnC,oBAAoB,MAAM,EAAE,IAAI;AAChC,iBAAiB,CAAC,CAAC,CAAC;AACpB,aAAa;AACb,SAAS;AACT,QAAQ,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE;AACzD,YAAY,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC3D,YAAY,IAAI,MAAM,EAAE;AACxB,gBAAgB,MAAM,CAAC,YAAY,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC,aAAa,CAAC,IAAI,oBAAoB,CAAC;AACxG,oBAAoB,EAAE,EAAE,MAAM,CAAC,EAAE;AACjC,oBAAoB,IAAI,EAAE,QAAQ;AAClC,oBAAoB,KAAK,EAAE,QAAQ;AACnC,oBAAoB,MAAM,EAAE,MAAM;AAClC,iBAAiB,CAAC,CAAC,CAAC;AACpB,aAAa;AACb,SAAS;AACT,QAAQ,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE;AACtD,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACtD,YAAY,IAAI,IAAI,EAAE;AACtB,gBAAgB,IAAI,CAAC,YAAY,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC,aAAa,CAAC,IAAI,oBAAoB,CAAC;AACtG,oBAAoB,EAAE,EAAE,IAAI,CAAC,EAAE;AAC/B,oBAAoB,IAAI,EAAE,MAAM;AAChC,oBAAoB,KAAK,EAAE,QAAQ;AACnC,oBAAoB,MAAM,EAAE,IAAI;AAChC,iBAAiB,CAAC,CAAC,CAAC;AACpB,aAAa;AACb,SAAS;AACT,QAAQ,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE;AACxD,YAAY,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC1D,YAAY,IAAI,MAAM,EAAE;AACxB,gBAAgB,MAAM,CAAC,YAAY,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC,aAAa,CAAC,IAAI,oBAAoB,CAAC;AACxG,oBAAoB,EAAE,EAAE,MAAM,CAAC,EAAE;AACjC,oBAAoB,IAAI,EAAE,QAAQ;AAClC,oBAAoB,KAAK,EAAE,QAAQ;AACnC,oBAAoB,MAAM,EAAE,MAAM;AAClC,iBAAiB,CAAC,CAAC,CAAC;AACpB,aAAa;AACb,SAAS;AACT,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,IAAI,iBAAiB,CAAC;AAC7B,CAAC,UAAU,iBAAiB,EAAE;AAC9B,IAAI,iBAAiB,CAAC,iBAAiB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC;AAC5E,IAAI,iBAAiB,CAAC,iBAAiB,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,eAAe,CAAC;AAChF,CAAC,EAAE,iBAAiB,KAAK,iBAAiB,GAAG,EAAE,CAAC,CAAC;;AC3jBjD;AAIO,MAAM,aAAa,CAAC;AAC3B,IAAI,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE;AACtD;AACA,QAAQ,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AAC5B,QAAQ,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;AACrC,QAAQ,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AACnC,QAAQ,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;AAC3B,QAAQ,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;AACxC,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AAC7B,QAAQ,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;AAC7C,QAAQ,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACzC,QAAQ,IAAI,CAAC,qBAAqB,GAAG,MAAM;AAC3C,YAAY,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;AAClF,SAAS,CAAC;AACV,KAAK;AACL;AACA;AACA;AACA,IAAI,UAAU,GAAG;AACjB,QAAQ,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAC3C,QAAQ,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,eAAe,EAAE;AACjD,YAAY,IAAI,CAAC,oBAAoB,EAAE,CAAC;AACxC,YAAY,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,yBAAyB,EAAE,CAAC,CAAC;AAC/E,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,IAAI,oBAAoB,GAAG;AAC3B,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,cAAc,CAAC,GAAG,CAAC;AACpF,YAAY,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;AAC3D,YAAY,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AAC/B,SAAS;AACT,aAAa;AACb,YAAY,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AAChC,SAAS;AACT,QAAQ,IAAI,CAAC,oBAAoB,EAAE,CAAC;AACpC,KAAK;AACL;AACA;AACA;AACA,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AAC5B,QAAQ,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;AACrC,QAAQ,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACrC,QAAQ,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAC3C,KAAK;AACL;AACA;AACA;AACA,IAAI,oBAAoB,GAAG;AAC3B,QAAQ,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AAC5B,KAAK;AACL;AACA;AACA;AACA,IAAI,oBAAoB,GAAG;AAC3B,QAAQ,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;AAC1E,YAAY,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACzC,YAAY,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,CAAC;AACpJ,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,IAAI,gBAAgB,GAAG;AACvB;AACA,QAAQ,IAAI,CAAC,oBAAoB,EAAE,CAAC;AACpC;AACA,QAAQ,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,uBAAuB,CAAC;AACtE,YAAY,SAAS,EAAE,IAAI,CAAC,SAAS;AACrC,YAAY,UAAU,EAAE,IAAI,CAAC,YAAY;AACzC,SAAS,CAAC,CAAC,CAAC;AACZ;AACA,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;AAChG,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AACpC,QAAQ,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,qBAAqB,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AACpG;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE;AACjE;AACA,YAAY,IAAI,QAAQ,CAAC,eAAe,EAAE;AAC1C,gBAAgB,QAAQ,CAAC,eAAe,EAAE,CAAC;AAC3C,aAAa;AACb,SAAS;AACT;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,MAAM;AAChD,YAAY,IAAI,CAAC,SAAS,EAAE,CAAC;AAC7B,YAAY,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,EAAE;AACrC;AACA,gBAAgB,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC;AAC1E,gBAAgB,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAC7C,gBAAgBA,YAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;AAC5E;AACA,gBAAgB,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC3C,aAAa;AACb,iBAAiB;AACjB,gBAAgB,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,qBAAqB,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AAC5G,aAAa;AACb,SAAS,EAAE,IAAI,CAAC,CAAC;AACjB,KAAK;AACL;;ACxGA;AAEA;AACA;AACA;AACO,MAAM,qBAAqB,CAAC;AACnC,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;AAC5C,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,sBAAsB,GAAG;AAC7B,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iBAAiB,CAAC,cAAc,EAAE,KAAK,EAAE,kBAAkB,EAAE;AACjE,QAAQ,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;AAC7C,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAC3B,QAAQ,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;AACrD,QAAQ,IAAI,kBAAkB,IAAI,IAAI,EAAE;AACxC,YAAY,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;AACzC,YAAY,IAAI,CAAC,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC;AACnD,SAAS;AACT,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACtG,QAAQ,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAChC,KAAK;AACL,IAAI,gBAAgB,GAAG;AACvB;AACA,QAAQ,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,aAAa,CAAC;AACpD,QAAQ,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AAChE,QAAQ,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AAClE,QAAQ,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;AACtE,QAAQ,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AAClE,KAAK;AACL;AACA;AACA;AACA,IAAI,YAAY,CAAC,EAAE,EAAE;AACrB,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQA,YAAM,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;AAC5D,QAAQ,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC/F,KAAK;AACL;AACA;AACA;AACA,IAAI,aAAa,CAAC,EAAE,EAAE;AACtB,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQA,YAAM,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;AAC5D,QAAQ,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAChG,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,eAAe,CAAC,KAAK,EAAE;AAC3B;AACA,QAAQA,YAAM,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACtE,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,aAAa,CAAC,KAAK,EAAE;AACzB,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQA,YAAM,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACpE,QAAQ,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACnG,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE;AACtB;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE;AACvB;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE;AACvB;AACA,KAAK;AACL;;ACrGA;AACA;AACA;AACA;AACO,MAAM,iBAAiB,CAAC;AAC/B,CAAC;AACD;AACA;AACA;AACO,MAAM,iBAAiB,CAAC;AAC/B;;ACVA;AACA;AACA;AACA;AACO,MAAM,gBAAgB,CAAC;AAC9B;;ACLA;AACA;AACA;AACA;AACO,MAAM,aAAa,CAAC;AAC3B;;ACLA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,gBAAgB,CAAC;AAC9B,CAAC;AACD;AACA;AACA;AACA;AACA;AACO,MAAM,sBAAsB,CAAC;AACpC;;ACdA;AACA;AACA;AACA;AACO,MAAM,YAAY,CAAC;AAC1B;;ACLA;AACA;AACA;AACA;AACO,MAAM,WAAW,CAAC;AACzB;;ACLA;AAQA;AACA;AACA;AACO,MAAM,eAAe,CAAC;AAC7B,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAC;AACzD,QAAQ,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAC;AACzD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;AACvD,QAAQ,IAAI,CAAC,kBAAkB,GAAG,IAAI,gBAAgB,EAAE,CAAC;AACzD,QAAQ,IAAI,CAAC,kBAAkB,GAAG,IAAI,gBAAgB,EAAE,CAAC;AACzD,QAAQ,IAAI,CAAC,wBAAwB,GAAG,IAAI,sBAAsB,EAAE,CAAC;AACrE,QAAQ,IAAI,CAAC,wBAAwB,GAAG,IAAI,sBAAsB,EAAE,CAAC;AACrE,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;AAC/C,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAC7C,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;AAChC,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,YAAY,CAAC,cAAc,EAAE;AACjC,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,KAAK,EAAE,CAAC;AAC3C,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI,KAAK,EAAE,CAAC;AAC5C,QAAQ,IAAI,CAAC,cAAc,GAAG,IAAI,KAAK,EAAE,CAAC;AAC1C,QAAQ,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AACzC,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AACnC,YAAY,QAAQ,IAAI;AACxB,gBAAgB,KAAK,gBAAgB;AACrC,oBAAoB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,aAAa;AAClC,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,OAAO;AAC5B,oBAAoB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC3C,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,cAAc;AACnC,oBAAoB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AACjD,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,aAAa;AAClC,oBAAoB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAChD,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,iBAAiB;AACtC,oBAAoB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;AACpD,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,cAAc;AACnC,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,eAAe;AACpC,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,cAAc;AACnC,oBAAoB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;AACnD,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,iBAAiB;AACtC,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,kBAAkB;AACvC,oBAAoB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;AACrD,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,oBAAoB;AACzC,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,qBAAqB;AAC1C,oBAAoB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;AACpD,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,OAAO;AAC5B,oBAAoB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC3C,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,WAAW;AAChC,oBAAoB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC/C,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,QAAQ;AAC7B,oBAAoB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAC5C,oBAAoB,MAAM;AAC1B,gBAAgB;AAChB,oBAAoBA,YAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;AACxD,oBAAoBA,YAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtC,oBAAoB,MAAM;AAC1B,aAAa;AACb,SAAS,CAAC,CAAC;AACX,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,CAAC,IAAI,EAAE;AACvB,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAChC,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,mBAAmB,CAAC,IAAI,EAAE;AAC9B;AACA,QAAQ,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvC,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,iBAAiB,CAAC,IAAI,EAAE;AAC5B,QAAQ,IAAI,CAAC,gBAAgB,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;AACjE,QAAQ,IAAI,CAAC,gBAAgB,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACzD,QAAQ,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC;AACjF,QAAQ,IAAI,CAAC,gBAAgB,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;AAC3C,QAAQ,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACjD,QAAQ,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;AACvE,QAAQ,IAAI,CAAC,gBAAgB,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;AAC/D,QAAQ,IAAI,CAAC,gBAAgB,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AACvD,QAAQ,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACjD,QAAQ,IAAI,CAAC,gBAAgB,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACzD,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,oBAAoB,CAAC,IAAI,EAAE;AAC/B,QAAQ,MAAM,cAAc,GAAG,IAAI,aAAa,EAAE,CAAC;AACnD,QAAQ,cAAc,CAAC,KAAK,GAAG,iBAAiB,CAAC;AACjD,QAAQ,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC9C,QAAQ,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AACxC,QAAQ,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAChD,QAAQ,cAAc,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;AAC1D,QAAQ,cAAc,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;AACpC,QAAQ,cAAc,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;AAC1D,QAAQ,cAAc,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AACtD,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAClD,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,qBAAqB,CAAC,IAAI,EAAE;AAChC,QAAQ,MAAM,eAAe,GAAG,IAAI,aAAa,EAAE,CAAC;AACpD,QAAQ,eAAe,CAAC,KAAK,GAAG,kBAAkB,CAAC;AACnD,QAAQ,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC/C,QAAQ,eAAe,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AACzC,QAAQ,eAAe,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AACjD,QAAQ,eAAe,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;AACrC,QAAQ,eAAe,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;AAC3D,QAAQ,eAAe,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;AAC3D,QAAQ,eAAe,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AACvD,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACpD,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,IAAI,EAAE;AAC3B,QAAQ,QAAQ,IAAI,CAAC,IAAI;AACzB,YAAY,KAAK,OAAO;AACxB;AACA,gBAAgB,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa;AAC7E,oBAAoB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE;AACvE,oBAAoB,IAAI,CAAC,iBAAiB,CAAC,OAAO;AAClD,wBAAwB,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC;AACxF,6BAA6B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;AAChF,oBAAoB,IAAI,CAAC,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAChG,iBAAiB;AACjB;AACA,gBAAgB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACxC,oBAAoB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5D,iBAAiB;AACjB,gBAAgB,MAAM;AACtB,YAAY,KAAK,OAAO;AACxB,gBAAgB,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa;AAC7E,oBAAoB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE;AACvE,oBAAoB,IAAI,CAAC,iBAAiB,CAAC,OAAO;AAClD,wBAAwB,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC;AACxF,6BAA6B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;AAChF,oBAAoB,IAAI,CAAC,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAChG,iBAAiB;AACjB;AACA,gBAAgB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACxC,oBAAoB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5D,iBAAiB;AACjB,gBAAgB,MAAM;AACtB,YAAY;AACZ,gBAAgBA,YAAM,CAAC,KAAK,CAAC,CAAC,sCAAsC,EAAE,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;AACzG,gBAAgB,MAAM;AACtB,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,mBAAmB,CAAC,IAAI,EAAE;AAC9B,QAAQ,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;AAC7G,QAAQ,kBAAkB,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAChD,QAAQ,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAClD,QAAQ,kBAAkB,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACtD,QAAQ,kBAAkB,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AAC1D,QAAQ,kBAAkB,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;AACxD,QAAQ,kBAAkB,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;AAC9D,QAAQ,kBAAkB,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;AAClE,QAAQ,kBAAkB,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;AAClE,QAAQ,kBAAkB,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;AACxC,QAAQ,kBAAkB,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;AACpE,QAAQ,kBAAkB,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AAC5C,QAAQ,kBAAkB,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;AAC9D,QAAQ,kBAAkB,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AAC1C,QAAQ,kBAAkB,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACtD,QAAQ,kBAAkB,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AAC1D,QAAQ,kBAAkB,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAC9C,QAAQ,kBAAkB,CAAC,0BAA0B,GAAG,IAAI,CAAC,0BAA0B,CAAC;AACxF,QAAQ,kBAAkB,CAAC,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,CAAC;AAClF,QAAQ,kBAAkB,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AACpD,QAAQ,kBAAkB,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAC;AAChF,QAAQ,kBAAkB,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AAC1C,QAAQ,kBAAkB,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;AAClE,QAAQ,kBAAkB,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AAC5C,QAAQ,kBAAkB,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;AAC9D,QAAQ,kBAAkB,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACtD,QAAQ,kBAAkB,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;AAClE,QAAQ,kBAAkB,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAC;AAChF,QAAQ,kBAAkB,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC;AAC5E,QAAQ,kBAAkB,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AAC1D,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,oBAAoB,CAAC,IAAI,EAAE;AAC/B,QAAQ,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,CAAC;AAC1H,QAAQ,mBAAmB,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACvD,QAAQ,mBAAmB,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AACnD,QAAQ,mBAAmB,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;AACzC,QAAQ,mBAAmB,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AAC7C,QAAQ,mBAAmB,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AACnD,QAAQ,mBAAmB,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AAC3D,QAAQ,mBAAmB,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;AACnE,QAAQ,mBAAmB,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AAC3D,QAAQ,mBAAmB,CAAC,yBAAyB,GAAG,IAAI,CAAC,yBAAyB,CAAC;AACvF,QAAQ,mBAAmB,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AAC7C,QAAQ,mBAAmB,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACvD,QAAQ,mBAAmB,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;AACzE,QAAQ,mBAAmB,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AAC3D,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB;AACA,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,KAAK,IAAI,CAAC,eAAe,KAAK,aAAa,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE;AACxG,YAAY,IAAI,CAAC,iBAAiB,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;AACtE,YAAY,IAAI,CAAC,iBAAiB,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;AACxE,YAAY,IAAI,CAAC,iBAAiB,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AAClE,YAAY,IAAI,CAAC,iBAAiB,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;AAChE,SAAS;AACT,KAAK;AACL,IAAI,eAAe,CAAC,IAAI,EAAE;AAC1B,QAAQ,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AACnC,KAAK;AACL,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC;AAChC,QAAQ,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACvC,KAAK;AACL,IAAI,uBAAuB,CAAC,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE;AAChF,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC;AACtD,QAAQ,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC/F,QAAQ,MAAM,mBAAmB,GAAG,eAAe,KAAK,IAAI,GAAG,cAAc,GAAG,eAAe,GAAG,MAAM,GAAG,OAAO,CAAC;AACnH,QAAQ,IAAI,CAAC,YAAY,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;AACpE,QAAQ,IAAI,CAAC,YAAY,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;AAChE,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,QAAQ,CAAC,KAAK,EAAE;AACpB,QAAQ,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC5D,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,sBAAsB,GAAG;AAC7B,QAAQ,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE;AAC/C,YAAY,OAAO,IAAI,CAAC;AACxB,SAAS;AACT;AACA,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE;AACjC;AACA,YAAY,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,aAAa,KAAK,aAAa,CAAC,EAAE,KAAK,IAAI,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAC;AAC/I,YAAY,IAAI,YAAY,KAAK,SAAS,EAAE;AAC5C,gBAAgB,OAAO,IAAI,CAAC;AAC5B,aAAa;AACb,iBAAiB;AACjB,gBAAgB,OAAO,YAAY,CAAC;AACpC,aAAa;AACb,SAAS;AACT;AACA,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,aAAa,KAAK,aAAa,CAAC,QAAQ,CAAC,CAAC;AACjG,QAAQ,IAAI,YAAY,KAAK,SAAS,EAAE;AACxC,YAAY,OAAO,IAAI,CAAC;AACxB,SAAS;AACT,aAAa;AACb,YAAY,OAAO,YAAY,CAAC;AAChC,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;AC9SA;EACA,MAAM,QAAQ,GAAG,EAAE,CAAA;;AAEnB;AACA;EACA,QAAQ,CAAC,kBAAkB,GAAG,WAAW;AACzC,IAAE,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;GACnD,CAAA;;AAED;AACA,EAAA,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,kBAAkB,EAAE,CAAA;;AAEnD;AACA,EAAA,QAAQ,CAAC,UAAU,GAAG,SAAS,IAAI,EAAE;AACrC,IAAE,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;GACxD,CAAA;AACD;AACA,EAAA,QAAQ,CAAC,aAAa,GAAG,SAAS,IAAI,EAAE;IACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;AAClC,IAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,CAAC,KAAK,GAAG,CAAC;MAC1C,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,CAAA;GACvC,CAAA;;AAED;AACA,EAAA,QAAQ,CAAC,cAAc,GAAG,SAAS,IAAI,EAAE;IACvC,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;AAC/C,IAAE,OAAO,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAA;GAC/B,CAAA;;AAED;AACA,EAAA,QAAQ,CAAC,gBAAgB,GAAG,SAAS,IAAI,EAAE;IACzC,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;IAC7C,QAAQ,CAAC,KAAK,EAAE,CAAA;AAClB,IAAE,OAAO,QAAQ,CAAA;GAChB,CAAA;;AAED;AACA,EAAA,QAAQ,CAAC,WAAW,GAAG,SAAS,IAAI,EAAE,MAAM,EAAE;IAC5C,OAAO,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;GAC5E,CAAA;;AAED;AACA;AACA;AACA;AACA,EAAA,QAAQ,CAAC,cAAc,GAAG,SAAS,IAAI,EAAE;AACzC,IAAE,IAAI,KAAK,CAAA;AACX;IACE,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;AAC1C,MAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AACzC,KAAG,MAAM;AACT,MAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AACzC,KAAA;;IAEE,MAAM,SAAS,GAAG;AACpB,MAAI,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;MACpB,SAAS,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;MACtD,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;MAChC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACpC,MAAI,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;AAChB,MAAI,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;MACjB,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAChC;AACA,MAAI,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;KACf,CAAA;;AAEH,IAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AAC5C,MAAI,QAAQ,KAAK,CAAC,CAAC,CAAC;AACpB,QAAM,KAAK,OAAO;UACV,SAAS,CAAC,cAAc,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;UACvC,MAAA;AACR,QAAM,KAAK,OAAO;AAClB,UAAQ,SAAS,CAAC,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;UAClD,MAAA;AACR,QAAM,KAAK,SAAS;UACZ,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;UAChC,MAAA;AACR,QAAM,KAAK,OAAO;UACV,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;UAC/B,SAAS,CAAC,gBAAgB,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;UACzC,MAAA;QACF;UACE,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;AAC/C,YAAU,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;AAC5C,WAAA;UACQ,MAAA;AACR,OAAA;AACA,KAAA;AACA,IAAE,OAAO,SAAS,CAAA;GACjB,CAAA;;AAED;AACA;AACA,EAAA,QAAQ,CAAC,cAAc,GAAG,SAAS,SAAS,EAAE;IAC5C,MAAM,GAAG,GAAG,EAAE,CAAA;AAChB,IAAE,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;;AAEhC,IAAE,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAA;AACvC,IAAE,IAAI,SAAS,KAAK,KAAK,EAAE;AAC3B,MAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACf,KAAG,MAAM,IAAI,SAAS,KAAK,MAAM,EAAE;AACnC,MAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACf,KAAG,MAAM;AACT,MAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;AACvB,KAAA;IACE,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAA;AAC5C,IAAE,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;IAC5B,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,EAAE,CAAC,CAAA;AAC7C,IAAE,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;;AAE1B,IAAE,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAA;AAC7B,IAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AACjB,IAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAChB,IAAE,IAAI,IAAI,KAAK,MAAM,IAAI,SAAS,CAAC,cAAc;QAC3C,SAAS,CAAC,WAAW,EAAE;AAC7B,MAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AACrB,MAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAA;AACtC,MAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AACrB,MAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;AACnC,KAAA;AACA,IAAE,IAAI,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE;AACvE,MAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;AACvB,MAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;AAC/B,KAAA;IACE,IAAI,SAAS,CAAC,gBAAgB,IAAI,SAAS,CAAC,KAAK,EAAE;AACrD,MAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;MACjB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,IAAI,SAAS,CAAC,KAAK,CAAC,CAAA;AAC3D,KAAA;IACE,OAAO,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;GACpC,CAAA;;AAED;AACA;AACA;AACA,EAAA,QAAQ,CAAC,eAAe,GAAG,SAAS,IAAI,EAAE;IACxC,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;GACrC,CAAA;;AAED;AACA;AACA,EAAA,QAAQ,CAAC,WAAW,GAAG,SAAS,IAAI,EAAE;AACtC,IAAE,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACxC,MAAM,MAAM,GAAG;MACb,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC;KACzC,CAAA;;IAED,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;;AAE7B,IAAE,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;AACxB,IAAE,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1C,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAA;AACnE;AACA,IAAE,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAA;AACtC,IAAE,OAAO,MAAM,CAAA;GACd,CAAA;;AAED;AACA;AACA,EAAA,QAAQ,CAAC,WAAW,GAAG,SAAS,KAAK,EAAE;AACvC,IAAE,IAAI,EAAE,GAAG,KAAK,CAAC,WAAW,CAAA;AAC5B,IAAE,IAAI,KAAK,CAAC,oBAAoB,KAAK,SAAS,EAAE;AAChD,MAAI,EAAE,GAAG,KAAK,CAAC,oBAAoB,CAAA;AACnC,KAAA;IACE,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,WAAW,IAAI,CAAC,CAAA;AAC3D,IAAE,OAAO,WAAW,GAAG,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,IAAI,GAAG,GAAG,GAAG,KAAK,CAAC,SAAS;SAC7D,QAAQ,KAAK,CAAC,GAAG,GAAG,GAAG,QAAQ,GAAG,EAAE,CAAC,GAAG,MAAM,CAAA;GACpD,CAAA;;AAED;AACA;AACA;AACA,EAAA,QAAQ,CAAC,WAAW,GAAG,SAAS,IAAI,EAAE;AACtC,IAAE,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AAC5C,IAAE,OAAO;MACL,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;MAC1B,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU;AAC9E,MAAI,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AACjB,MAAI,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;KACrC,CAAA;GACF,CAAA;;AAED;AACA;AACA,EAAA,QAAQ,CAAC,WAAW,GAAG,SAAS,eAAe,EAAE;IAC/C,OAAO,WAAW,IAAI,eAAe,CAAC,EAAE,IAAI,eAAe,CAAC,WAAW,CAAC;AAC1E,SAAO,eAAe,CAAC,SAAS,IAAI,eAAe,CAAC,SAAS,KAAK,UAAA;YACxD,GAAG,GAAG,eAAe,CAAC,SAAA;AAChC,YAAU,EAAE,CAAC;AACb,QAAM,GAAG,GAAG,eAAe,CAAC,GAAG;SACxB,eAAe,CAAC,UAAU,GAAG,GAAG,GAAG,eAAe,CAAC,UAAU,GAAG,EAAE,CAAC;AAC1E,QAAM,MAAM,CAAA;GACX,CAAA;;AAED;AACA;AACA;AACA;AACA;AACA,EAAA,QAAQ,CAAC,SAAS,GAAG,SAAS,IAAI,EAAE;IAClC,MAAM,MAAM,GAAG,EAAE,CAAA;AACnB,IAAE,IAAI,EAAE,CAAA;IACN,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AAChE,IAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,MAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AACnC,MAAI,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;AAChC,KAAA;AACA,IAAE,OAAO,MAAM,CAAA;GACd,CAAA;;AAED;AACA,EAAA,QAAQ,CAAC,SAAS,GAAG,SAAS,KAAK,EAAE;IACnC,IAAI,IAAI,GAAG,EAAE,CAAA;AACf,IAAE,IAAI,EAAE,GAAG,KAAK,CAAC,WAAW,CAAA;AAC5B,IAAE,IAAI,KAAK,CAAC,oBAAoB,KAAK,SAAS,EAAE;AAChD,MAAI,EAAE,GAAG,KAAK,CAAC,oBAAoB,CAAA;AACnC,KAAA;AACA,IAAE,IAAI,KAAK,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE;MAC5D,MAAM,MAAM,GAAG,EAAE,CAAA;AACrB,MAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI;QAC7C,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE;AACjD,UAAQ,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;AAC1D,SAAO,MAAM;AACb,UAAQ,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAC1B,SAAA;AACA,OAAK,CAAC,CAAA;AACN,MAAI,IAAI,IAAI,SAAS,GAAG,EAAE,GAAG,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAA;AAC5D,KAAA;AACA,IAAE,OAAO,IAAI,CAAA;GACZ,CAAA;;AAED;AACA;AACA,EAAA,QAAQ,CAAC,WAAW,GAAG,SAAS,IAAI,EAAE;IACpC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AAChE,IAAE,OAAO;AACT,MAAI,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE;AACvB,MAAI,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;KAC3B,CAAA;GACF,CAAA;;AAED;AACA,EAAA,QAAQ,CAAC,WAAW,GAAG,SAAS,KAAK,EAAE;IACrC,IAAI,KAAK,GAAG,EAAE,CAAA;AAChB,IAAE,IAAI,EAAE,GAAG,KAAK,CAAC,WAAW,CAAA;AAC5B,IAAE,IAAI,KAAK,CAAC,oBAAoB,KAAK,SAAS,EAAE;AAChD,MAAI,EAAE,GAAG,KAAK,CAAC,oBAAoB,CAAA;AACnC,KAAA;IACE,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE;AACvD;AACA,MAAI,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,IAAI;QAC/B,KAAK,IAAI,YAAY,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,IAAI;AAChD,SAAO,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC;AACrE,YAAU,MAAM,CAAA;AAChB,OAAK,CAAC,CAAA;AACN,KAAA;AACA,IAAE,OAAO,KAAK,CAAA;GACb,CAAA;;AAED;AACA;AACA,EAAA,QAAQ,CAAC,cAAc,GAAG,SAAS,IAAI,EAAE;IACvC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,KAAK,GAAG;AAChB,MAAI,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;KAC1C,CAAA;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;AACrC,IAAE,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;AAClB,MAAI,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAA;MAC/C,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;AAC3C,KAAG,MAAM;MACL,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;AAC5C,KAAA;AACA,IAAE,OAAO,KAAK,CAAA;GACb,CAAA;;AAED;AACA;AACA,EAAA,QAAQ,CAAC,cAAc,GAAG,SAAS,IAAI,EAAE;AACzC,IAAE,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AAC7C,IAAE,OAAO;AACT,MAAI,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE;AAC5B,MAAI,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;KAC7C,CAAA;GACF,CAAA;;AAED;AACA;AACA,EAAA,QAAQ,CAAC,MAAM,GAAG,SAAS,YAAY,EAAE;AACzC,IAAE,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3D,IAAI,GAAG,EAAE;AACX,MAAI,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;AAC3B,KAAA;GACC,CAAA;;AAED;AACA,EAAA,QAAQ,CAAC,gBAAgB,GAAG,SAAS,IAAI,EAAE;AAC3C,IAAE,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AAC7C,IAAE,OAAO;MACL,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;MACjC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;KAC9B,CAAA;GACF,CAAA;;AAED;AACA;AACA;AACA,EAAA,QAAQ,CAAC,iBAAiB,GAAG,SAAS,YAAY,EAAE,WAAW,EAAE;IAC/D,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,YAAY,GAAG,WAAW;AAC/D,MAAI,gBAAgB,CAAC,CAAA;AACrB;AACA,IAAE,OAAO;MACL,IAAI,EAAE,MAAM;MACZ,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC;KACnD,CAAA;GACF,CAAA;;AAED;AACA,EAAA,QAAQ,CAAC,mBAAmB,GAAG,SAAS,MAAM,EAAE,SAAS,EAAE;AAC3D,IAAE,IAAI,GAAG,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAA;AAC3C,IAAE,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,IAAI;AACpC,MAAI,GAAG,IAAI,gBAAgB,GAAG,EAAE,CAAC,SAAS,GAAG,GAAG,GAAG,EAAE,CAAC,KAAK,GAAG,MAAM,CAAA;AACpE,KAAG,CAAC,CAAA;AACJ,IAAE,OAAO,GAAG,CAAA;GACX,CAAA;;AAED;AACA;AACA,EAAA,QAAQ,CAAC,eAAe,GAAG,SAAS,IAAI,EAAE;AAC1C,IAAE,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AAC5C,IAAE,OAAO;MACL,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC/B,MAAI,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;AACzB,MAAI,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;AACvB,MAAI,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;KAC9B,CAAA;GACF,CAAA;;AAED,EAAA,QAAQ,CAAC,eAAe,GAAG,SAAS,UAAU,EAAE;AAChD,IAAE,OAAO,WAAW,GAAG,UAAU,CAAC,GAAG,GAAG,GAAG;AAC3C,MAAI,UAAU,CAAC,WAAW,GAAG,GAAG;AAChC,OAAK,OAAO,UAAU,CAAC,SAAS,KAAK,QAAA;AACrC,UAAQ,QAAQ,CAAC,oBAAoB,CAAC,UAAU,CAAC,SAAS,CAAA;UAClD,UAAU,CAAC,SAAS,CAAC;AAC7B,OAAK,UAAU,CAAC,aAAa,GAAG,GAAG,GAAG,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AAC9E,MAAI,MAAM,CAAA;GACT,CAAA;;AAED;AACA;AACA,EAAA,QAAQ,CAAC,oBAAoB,GAAG,SAAS,SAAS,EAAE;IAClD,IAAI,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;AAC1C,MAAI,OAAO,IAAI,CAAA;AACf,KAAA;AACA,IAAE,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AACjD,IAAE,OAAO;MACL,SAAS,EAAE,QAAQ;AACvB,MAAI,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AACrB,MAAI,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;MAClB,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS;MACvD,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS;KACzD,CAAA;GACF,CAAA;;AAED,EAAA,QAAQ,CAAC,oBAAoB,GAAG,SAAS,SAAS,EAAE;AACpD,IAAE,OAAO,SAAS,CAAC,SAAS,GAAG,GAAA;QACzB,SAAS,CAAC,OAAO;OAClB,SAAS,CAAC,QAAQ,GAAG,GAAG,GAAG,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAC;AACxD,OAAK,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,SAAA;UAC7B,GAAG,GAAG,SAAS,CAAC,QAAQ,GAAG,GAAG,GAAG,SAAS,CAAC,SAAA;AACnD,UAAQ,EAAE,CAAC,CAAA;GACV,CAAA;;AAED;AACA,EAAA,QAAQ,CAAC,mBAAmB,GAAG,SAAS,YAAY,EAAE,WAAW,EAAE;IACjE,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,YAAY,GAAG,WAAW;AAC/D,MAAI,WAAW,CAAC,CAAA;IACd,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAA;GAC3C,CAAA;;AAED;AACA;AACA;AACA,EAAA,QAAQ,CAAC,gBAAgB,GAAG,SAAS,YAAY,EAAE,WAAW,EAAE;IAC9D,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,YAAY,GAAG,WAAW;AAC/D,MAAI,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;IACpB,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,YAAY,GAAG,WAAW;AAC7D,MAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;AACpB,IAAE,IAAI,EAAE,KAAK,IAAI,GAAG,CAAC,EAAE;AACvB,MAAI,OAAO,IAAI,CAAA;AACf,KAAA;AACA,IAAE,OAAO;AACT,MAAI,gBAAgB,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;AACzC,MAAI,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;KAC5B,CAAA;GACF,CAAA;;AAED;AACA,EAAA,QAAQ,CAAC,kBAAkB,GAAG,SAAS,MAAM,EAAE;IAC7C,IAAI,GAAG,GAAG,cAAc,GAAG,MAAM,CAAC,gBAAgB,GAAG,MAAM;AAC7D,QAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAA;AAC7C,IAAE,IAAI,MAAM,CAAC,OAAO,EAAE;MAClB,GAAG,IAAI,gBAAgB,CAAA;AAC3B,KAAA;AACA,IAAE,OAAO,GAAG,CAAA;GACX,CAAA;;AAED;AACA,EAAA,QAAQ,CAAC,kBAAkB,GAAG,SAAS,YAAY,EAAE;IACnD,MAAM,WAAW,GAAG;MAClB,MAAM,EAAE,EAAE;MACV,gBAAgB,EAAE,EAAE;MACpB,aAAa,EAAE,EAAE;MACjB,IAAI,EAAE,EAAE;KACT,CAAA;IACD,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;IAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AACnC,IAAE,WAAW,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;AAChC,IAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,MAAI,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;AACvB,MAAI,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW;QACrC,YAAY,EAAE,WAAW,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;MAC1C,IAAI,UAAU,EAAE;QACd,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;AACpD,QAAM,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW;AACxC,UAAQ,YAAY,EAAE,SAAS,GAAG,EAAE,GAAG,GAAG,CAAC,CAAA;AAC3C;AACA,QAAM,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;AACzE,QAAM,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,WAAW;AAC/C,UAAQ,YAAY,EAAE,YAAY,GAAG,EAAE,GAAG,GAAG,CAAA;AAC7C,WAAS,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;AAClC,QAAM,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AACpC;AACA,QAAM,QAAQ,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE;AACtC,UAAQ,KAAK,KAAK,CAAA;AAClB,UAAQ,KAAK,QAAQ;AACrB,YAAU,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;YACxD,MAAA;AAGV,SAAA;AACA,OAAA;AACA,KAAA;AACA,IAAE,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI;AAClE,MAAI,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAA;AACjE,KAAG,CAAC,CAAA;IACF,MAAM,cAAc,GAAG,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,cAAc,CAAA;AAC1E,OAAK,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;AAC9B,IAAE,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI;AACtC,MAAI,cAAc,CAAC,OAAO,CAAC,EAAE,GAAG;QAC1B,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,IAAI;AACpE,UAAQ,OAAO,gBAAgB,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI;AAChD,YAAU,gBAAgB,CAAC,SAAS,KAAK,EAAE,CAAC,SAAS,CAAA;AACrD,SAAO,CAAC,CAAA;QACF,IAAI,CAAC,SAAS,EAAE;AACtB,UAAQ,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACnC,SAAA;AACA,OAAK,CAAC,CAAA;AACN,KAAG,CAAC,CAAA;AACJ;AACA,IAAE,OAAO,WAAW,CAAA;GACnB,CAAA;;AAED;AACA;AACA,EAAA,QAAQ,CAAC,mBAAmB,GAAG,SAAS,IAAI,EAAE,IAAI,EAAE;IAClD,IAAI,GAAG,GAAG,EAAE,CAAA;;AAEd;AACA,IAAE,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,CAAA;AAC1B,IAAE,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;IAC1C,GAAG,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,IAAI,mBAAmB,CAAC,GAAG,GAAG,CAAA;IACxD,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI;AAClC,MAAI,IAAI,KAAK,CAAC,oBAAoB,KAAK,SAAS,EAAE;QAC5C,OAAO,KAAK,CAAC,oBAAoB,CAAA;AACvC,OAAA;MACI,OAAO,KAAK,CAAC,WAAW,CAAA;AAC5B,KAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAA;;IAErB,GAAG,IAAI,sBAAsB,CAAA;IAC7B,GAAG,IAAI,6BAA6B,CAAA;;AAEtC;AACA,IAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI;AAC/B,MAAI,GAAG,IAAI,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;AACtC,MAAI,GAAG,IAAI,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;AACpC,MAAI,GAAG,IAAI,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;AACtC,KAAG,CAAC,CAAA;IACF,IAAI,QAAQ,GAAG,CAAC,CAAA;AAClB,IAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI;AAC/B,MAAI,IAAI,KAAK,CAAC,QAAQ,GAAG,QAAQ,EAAE;AACnC,QAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAA;AAC/B,OAAA;AACA,KAAG,CAAC,CAAA;AACJ,IAAE,IAAI,QAAQ,GAAG,CAAC,EAAE;AACpB,MAAI,GAAG,IAAI,aAAa,GAAG,QAAQ,GAAG,MAAM,CAAA;AAC5C,KAAA;;AAEA,IAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAC7B,MAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,IAAI;AAC/C,QAAM,GAAG,IAAI,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;AAC5C,OAAK,CAAC,CAAA;AACN,KAAA;AACA;AACA,IAAE,OAAO,GAAG,CAAA;GACX,CAAA;;AAED;AACA;AACA,EAAA,QAAQ,CAAC,0BAA0B,GAAG,SAAS,YAAY,EAAE;IAC3D,MAAM,kBAAkB,GAAG,EAAE,CAAA;IAC7B,MAAM,WAAW,GAAG,QAAQ,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAA;AAC/D,IAAE,MAAM,MAAM,GAAG,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;AAChE,IAAE,MAAM,SAAS,GAAG,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;;AAEtE;IACE,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,SAAS,CAAA;OACvD,GAAG,CAAC,IAAI,IAAI,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;OACzC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,KAAK,OAAO,CAAC,CAAA;AACjD,IAAE,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AACvD,IAAE,IAAI,aAAa,CAAA;;IAEjB,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,kBAAkB,CAAA;OAChE,GAAG,CAAC,IAAI,IAAI;AACjB,QAAM,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AACjD,QAAM,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA;AAClD,OAAK,CAAC,CAAA;IACJ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE;MAC1E,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC/B,KAAA;;AAEA,IAAE,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI;AACtC,MAAI,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE;QAC9D,IAAI,QAAQ,GAAG;UACb,IAAI,EAAE,WAAW;UACjB,gBAAgB,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC;SACrD,CAAA;AACP,QAAM,IAAI,WAAW,IAAI,aAAa,EAAE;UAChC,QAAQ,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,CAAA;AAC5C,SAAA;AACA,QAAM,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACjC,IAAI,MAAM,EAAE;AAClB,UAAQ,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAA;UAC/C,QAAQ,CAAC,GAAG,GAAG;YACb,IAAI,EAAE,WAAW;AAC3B,YAAU,SAAS,EAAE,SAAS,GAAG,YAAY,GAAG,KAAK;WAC5C,CAAA;AACT,UAAQ,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AACzC,SAAA;AACA,OAAA;AACA,KAAG,CAAC,CAAA;IACF,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,EAAE;MAClD,kBAAkB,CAAC,IAAI,CAAC;QACtB,IAAI,EAAE,WAAW;AACvB,OAAK,CAAC,CAAA;AACN,KAAA;;AAEA;IACE,IAAI,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;AAC1D,IAAE,IAAI,SAAS,CAAC,MAAM,EAAE;AACxB,MAAI,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;AAC/C,QAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AACzD,OAAK,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACpD;AACA,QAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,IAAA;AACnE,eAAa,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;AACzB,OAAK,MAAM;QACL,SAAS,GAAG,SAAS,CAAA;AAC3B,OAAA;AACA,MAAI,kBAAkB,CAAC,OAAO,CAAC,MAAM,IAAI;AACzC,QAAM,MAAM,CAAC,UAAU,GAAG,SAAS,CAAA;AACnC,OAAK,CAAC,CAAA;AACN,KAAA;AACA,IAAE,OAAO,kBAAkB,CAAA;GAC1B,CAAA;;AAED;AACA,EAAA,QAAQ,CAAC,mBAAmB,GAAG,SAAS,YAAY,EAAE;IACpD,MAAM,cAAc,GAAG,EAAE,CAAA;;AAE3B;AACA;IACE,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,SAAS,CAAA;OAC5D,GAAG,CAAC,IAAI,IAAI,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;AAC9C,OAAK,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9C,IAAI,UAAU,EAAE;AAClB,MAAI,cAAc,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAA;AAC3C,MAAI,cAAc,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAA;AACzC,KAAA;;AAEA;AACA;IACE,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,cAAc,CAAC,CAAA;IAChE,cAAc,CAAC,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;IAC7C,cAAc,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,CAAA;;AAE9C;AACA;IACE,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,YAAY,CAAC,CAAA;IAC5D,cAAc,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAA;;AAErC,IAAE,OAAO,cAAc,CAAA;GACtB,CAAA;;AAED,EAAA,QAAQ,CAAC,mBAAmB,GAAG,SAAS,cAAc,EAAE;IACtD,IAAI,GAAG,GAAG,EAAE,CAAA;AACd,IAAE,IAAI,cAAc,CAAC,WAAW,EAAE;MAC9B,GAAG,IAAI,kBAAkB,CAAA;AAC7B,KAAA;AACA,IAAE,IAAI,cAAc,CAAC,GAAG,EAAE;MACtB,GAAG,IAAI,gBAAgB,CAAA;AAC3B,KAAA;IACE,IAAI,cAAc,CAAC,IAAI,KAAK,SAAS,IAAI,cAAc,CAAC,KAAK,EAAE;AACjE,MAAI,GAAG,IAAI,SAAS,GAAG,cAAc,CAAC,IAAI;AAC1C,QAAM,SAAS,GAAG,cAAc,CAAC,KAAK,GAAG,MAAM,CAAA;AAC/C,KAAA;AACA,IAAE,OAAO,GAAG,CAAA;GACX,CAAA;;;AAGD;AACA;AACA,EAAA,QAAQ,CAAC,SAAS,GAAG,SAAS,YAAY,EAAE;AAC5C,IAAE,IAAI,KAAK,CAAA;IACT,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;AAC5D,IAAE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACzB,MAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AAC3C,MAAI,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AAC9C,KAAA;IACE,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,SAAS,CAAA;OACvD,GAAG,CAAC,IAAI,IAAI,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;OACzC,MAAM,CAAC,SAAS,IAAI,SAAS,CAAC,SAAS,KAAK,MAAM,CAAC,CAAA;AACxD,IAAE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACxB,MAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AACrC,MAAI,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AAC9C,KAAA;GACC,CAAA;;AAED;AACA;AACA;AACA,EAAA,QAAQ,CAAC,oBAAoB,GAAG,SAAS,YAAY,EAAE;IACrD,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;IAC/C,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,qBAAqB,CAAC,CAAA;AAC/E,IAAE,IAAI,cAAc,CAAA;AACpB,IAAE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,MAAI,cAAc,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;AAC/D,KAAA;AACA,IAAE,IAAI,KAAK,CAAC,cAAc,CAAC,EAAE;MACzB,cAAc,GAAG,KAAK,CAAA;AAC1B,KAAA;IACE,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,cAAc,CAAC,CAAA;AACrE,IAAE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,MAAI,OAAO;AACX,QAAM,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;AACnD,QAAM,QAAQ,EAAE,KAAK,CAAC,GAAG;AACzB,QAAM,cAAc;OACf,CAAA;AACL,KAAA;IACE,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,YAAY,CAAC,CAAA;AACvE,IAAE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,MAAI,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAA;SACzB,SAAS,CAAC,EAAE,CAAA;SACZ,KAAK,CAAC,GAAG,CAAC,CAAA;AACjB,MAAI,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAClC,QAAM,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AACxB,QAAM,cAAc;OACf,CAAA;AACL,KAAA;GACC,CAAA;;AAED;AACA;AACA;AACA;AACA;AACA,EAAA,QAAQ,CAAC,oBAAoB,GAAG,SAAS,KAAK,EAAE,IAAI,EAAE;IACpD,IAAI,MAAM,GAAG,EAAE,CAAA;AACjB,IAAE,IAAI,KAAK,CAAC,QAAQ,KAAK,WAAW,EAAE;AACtC,MAAI,MAAM,GAAG;AACb,QAAM,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,GAAG,MAAM;AAC/E,QAAM,sBAAsB;AAC5B,QAAM,cAAc,GAAG,IAAI,CAAC,IAAI,GAAG,MAAM;OACpC,CAAA;AACL,KAAG,MAAM;AACT,MAAI,MAAM,GAAG;AACb,QAAM,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,MAAM;AAC3E,QAAM,sBAAsB;AAC5B,QAAM,YAAY,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,GAAG,YAAY;OAC9D,CAAA;AACL,KAAA;AACA,IAAE,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE;MACrC,MAAM,CAAC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,CAAA;AACrE,KAAA;AACA,IAAE,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;GACvB,CAAA;;AAED;AACA;AACA;AACA;EACA,QAAQ,CAAC,iBAAiB,GAAG,WAAW;AACxC,IAAE,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;GAC9C,CAAA;;AAED;AACA;AACA;AACA;AACA;EACA,QAAQ,CAAC,uBAAuB,GAAG,SAAS,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE;AACvE,IAAE,IAAI,SAAS,CAAA;IACb,MAAM,OAAO,GAAG,OAAO,KAAK,SAAS,GAAG,OAAO,GAAG,CAAC,CAAA;IACnD,IAAI,MAAM,EAAE;MACV,SAAS,GAAG,MAAM,CAAA;AACtB,KAAG,MAAM;AACT,MAAI,SAAS,GAAG,QAAQ,CAAC,iBAAiB,EAAE,CAAA;AAC5C,KAAA;AACA,IAAE,MAAM,IAAI,GAAG,QAAQ,IAAI,mBAAmB,CAAA;AAC9C;AACA,IAAE,OAAO,SAAS;QACZ,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,SAAS,GAAG,GAAG,GAAG,OAAO;AACnD,UAAQ,uBAAuB;AAC/B,QAAM,SAAS;AACf,QAAM,WAAW,CAAA;GAChB,CAAA;;AAED;AACA,EAAA,QAAQ,CAAC,YAAY,GAAG,SAAS,YAAY,EAAE,WAAW,EAAE;AAC5D;IACE,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;AACjD,IAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,MAAI,QAAQ,KAAK,CAAC,CAAC,CAAC;AACpB,QAAM,KAAK,YAAY,CAAA;AACvB,QAAM,KAAK,YAAY,CAAA;AACvB,QAAM,KAAK,YAAY,CAAA;AACvB,QAAM,KAAK,YAAY;UACf,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;AAEpC;AACA,OAAA;AACA,KAAA;IACE,IAAI,WAAW,EAAE;AACnB,MAAI,OAAO,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,CAAA;AAC7C,KAAA;AACA,IAAE,OAAO,UAAU,CAAA;GAClB,CAAA;;AAED,EAAA,QAAQ,CAAC,OAAO,GAAG,SAAS,YAAY,EAAE;IACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;IAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACjC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;GAC7B,CAAA;;AAED,EAAA,QAAQ,CAAC,UAAU,GAAG,SAAS,YAAY,EAAE;AAC7C,IAAE,OAAO,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAA;GAC7C,CAAA;;AAED,EAAA,QAAQ,CAAC,UAAU,GAAG,SAAS,YAAY,EAAE;IAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;AACjD,IAAE,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AAChD,IAAE,OAAO;AACT,MAAI,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;MACd,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAChC,MAAI,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AACtB,MAAI,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;KAC9B,CAAA;GACF,CAAA;;AAED,EAAA,QAAQ,CAAC,UAAU,GAAG,SAAS,YAAY,EAAE;AAC7C,IAAE,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AAC1D,IAAE,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AAC5C,IAAE,OAAO;AACT,MAAI,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AACtB,MAAI,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;MACnB,cAAc,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC1C,MAAI,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AACrB,MAAI,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;AACzB,MAAI,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;KAClB,CAAA;GACF,CAAA;;AAED;AACA,EAAA,QAAQ,CAAC,UAAU,GAAG,SAAS,IAAI,EAAE;IACnC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACrD,MAAI,OAAO,KAAK,CAAA;AAChB,KAAA;IACE,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;AACzC,IAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;MACrC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AAC3D,QAAM,OAAO,KAAK,CAAA;AAClB,OAAA;AACA;AACA,KAAA;AACA,IAAE,OAAO,IAAI,CAAA;GACZ,CAAA;;AAED;EACgC;AAChC,IAAE,iBAAiB,QAAQ,CAAA;AAC3B,GAAA;;;;;;;ACnyBA;AACO,MAAM,QAAQ,CAAC;AACtB,IAAI,OAAO,kBAAkB,CAAC,WAAW,EAAE;AAC3C,QAAQ,OAAO,IAAI,CAAC,0BAA0B,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;AACzG,KAAK;AACL,IAAI,OAAO,0BAA0B,CAAC,WAAW,EAAE;AACnD,QAAQ,QAAQ,CAAC,CAAC,WAAW;AAC7B,aAAa,WAAW,CAAC,SAAS,KAAK,UAAU,IAAI,WAAW,CAAC,SAAS,KAAK,UAAU,CAAC;AAC1F,YAAY,WAAW,CAAC,QAAQ;AAChC,YAAY,WAAW,CAAC,QAAQ,CAAC,KAAK;AACtC,YAAY,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;AACzD,KAAK;AACL,IAAI,OAAO,uBAAuB,CAAC,WAAW,EAAE;AAChD,QAAQ,QAAQ,CAAC,CAAC,WAAW;AAC7B,aAAa,WAAW,CAAC,SAAS,KAAK,UAAU,IAAI,WAAW,CAAC,SAAS,KAAK,UAAU,CAAC;AAC1F,YAAY,WAAW,CAAC,MAAM;AAC9B,YAAY,WAAW,CAAC,MAAM,CAAC,KAAK;AACpC,YAAY,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;AACvD,KAAK;AACL,IAAI,OAAO,kBAAkB,CAAC,WAAW,EAAE;AAC3C,QAAQ,OAAO,IAAI,CAAC,0BAA0B,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;AACzG,KAAK;AACL,IAAI,OAAO,0BAA0B,CAAC,WAAW,EAAE;AACnD,QAAQ,QAAQ,CAAC,CAAC,WAAW;AAC7B,aAAa,WAAW,CAAC,SAAS,KAAK,UAAU,IAAI,WAAW,CAAC,SAAS,KAAK,UAAU,CAAC;AAC1F,YAAY,WAAW,CAAC,QAAQ;AAChC,YAAY,WAAW,CAAC,QAAQ,CAAC,KAAK;AACtC,YAAY,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;AACzD,KAAK;AACL,IAAI,OAAO,uBAAuB,CAAC,WAAW,EAAE;AAChD,QAAQ,QAAQ,CAAC,CAAC,WAAW;AAC7B,aAAa,WAAW,CAAC,SAAS,KAAK,UAAU,IAAI,WAAW,CAAC,SAAS,KAAK,UAAU,CAAC;AAC1F,YAAY,WAAW,CAAC,MAAM;AAC9B,YAAY,WAAW,CAAC,MAAM,CAAC,KAAK;AACpC,YAAY,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;AACvD,KAAK;AACL;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,mBAAmB,CAAC;AAC1B,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,eAAe,CAAC;AAC7B,CAAC;AACD;AACA;AACA;AACO,MAAM,iBAAiB,CAAC;AAC/B,IAAI,WAAW,GAAG;AAClB;AACA;AACA;AACA,QAAQ,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC;AAChD,KAAK;AACL,IAAI,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE;AAChC,QAAQ,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAC9C,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC3C,QAAQ,IAAI,KAAK,IAAI,IAAI,EAAE;AAC3B,YAAY,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC;AACtC;AACA,YAAY,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;AACnE,YAAY,IAAI,aAAa,IAAI,IAAI,EAAE;AACvC,gBAAgB,MAAM,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;AAC1F,gBAAgB,IAAI,eAAe,KAAK,IAAI,EAAE;AAC9C,oBAAoB,WAAW,CAAC,eAAe,GAAG,eAAe,CAAC;AAClE,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA,QAAQ,IAAI,KAAK,CAAC,iBAAiB,CAAC,oBAAoB,KAAK,SAAS;AACtE,YAAY,KAAK,CAAC,iBAAiB,CAAC,aAAa,KAAK,SAAS,EAAE;AACjE,YAAY,WAAW,CAAC,wBAAwB;AAChD,gBAAgB,CAAC,KAAK,CAAC,iBAAiB,CAAC,oBAAoB,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,IAAI,IAAI,CAAC;AAC9G,SAAS;AACT;AACA,QAAQ,IAAI,KAAK,CAAC,iBAAiB,CAAC,iBAAiB,KAAK,SAAS;AACnE,YAAY,KAAK,CAAC,iBAAiB,CAAC,wBAAwB,KAAK,SAAS,EAAE;AAC5E,YAAY,WAAW,CAAC,0BAA0B;AAClD,gBAAgB,CAAC,KAAK,CAAC,iBAAiB,CAAC,iBAAiB;AAC1D,oBAAoB,KAAK,CAAC,iBAAiB,CAAC,wBAAwB;AACpE,oBAAoB,IAAI,CAAC;AACzB,SAAS;AACT;AACA,QAAQ,IAAI,KAAK,CAAC,iBAAiB,CAAC,aAAa,KAAK,SAAS;AAC/D,YAAY,KAAK,CAAC,iBAAiB,CAAC,eAAe,KAAK,SAAS,EAAE;AACnE,YAAY,WAAW,CAAC,sBAAsB;AAC9C,gBAAgB,CAAC,KAAK,CAAC,iBAAiB,CAAC,eAAe,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,IAAI,IAAI,CAAC;AACzG,SAAS;AACT;AACA,QAAQ,IAAI,KAAK,CAAC,iBAAiB,CAAC,iBAAiB,KAAK,SAAS;AACnE,YAAY,KAAK,CAAC,iBAAiB,CAAC,kCAAkC,KAAK,SAAS,EAAE;AACtF,YAAY,WAAW,CAAC,sBAAsB;AAC9C,gBAAgB,CAAC,KAAK,CAAC,iBAAiB,CAAC,iBAAiB;AAC1D,oBAAoB,KAAK,CAAC,iBAAiB,CAAC,kCAAkC;AAC9E,oBAAoB,IAAI,CAAC;AACzB,SAAS;AACT;AACA,QAAQ,IAAI,KAAK,CAAC,iBAAiB,CAAC,mBAAmB,KAAK,SAAS;AACrE,YAAY,KAAK,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE;AACpE,YAAY,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;AAC/G,SAAS;AACT;AACA,QAAQ,IAAI,WAAW,CAAC,WAAW,KAAK,SAAS;AACjD,YAAY,WAAW,CAAC,WAAW,CAAC,sBAAsB,KAAK,SAAS;AACxE,YAAY,WAAW,CAAC,wBAAwB,KAAK,SAAS;AAC9D,YAAY,WAAW,CAAC,KAAK,KAAK,SAAS,EAAE;AAC7C,YAAY,WAAW,CAAC,iBAAiB;AACzC,gBAAgB,WAAW,CAAC,WAAW,CAAC,sBAAsB;AAC9D,oBAAoB,WAAW,CAAC,KAAK,GAAG,GAAG;AAC3C,oBAAoB,WAAW,CAAC,wBAAwB,CAAC;AACzD,SAAS;AACT;AACA,QAAQ,IAAI,WAAW,CAAC,eAAe,IAAI,SAAS;AACpD,YAAY,WAAW,CAAC,wBAAwB,KAAK,SAAS;AAC9D,YAAY,WAAW,CAAC,KAAK,KAAK,SAAS,EAAE;AAC7C,YAAY,WAAW,CAAC,iBAAiB;AACzC,gBAAgB,WAAW,CAAC,eAAe,GAAG,WAAW,CAAC,KAAK,GAAG,GAAG,GAAG,WAAW,CAAC,wBAAwB,CAAC;AAC7G,SAAS;AACT,QAAQ,OAAO,WAAW,CAAC;AAC3B,KAAK;AACL,IAAI,sBAAsB,CAAC,mBAAmB,EAAE;AAChD,QAAQ,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;AACjD,QAAQ,MAAM,aAAa,GAAG,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC7D;AACA;AACA,QAAQ,IAAI,aAAa,CAAC,MAAM,KAAK,EAAE,EAAE;AACzC,YAAY,UAAU,CAAC,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,YAAY,UAAU,CAAC,gBAAgB,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5E,YAAY,UAAU,CAAC,oBAAoB,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AAChF,YAAY,UAAU,CAAC,qBAAqB,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AACjF,YAAY,UAAU,CAAC,yBAAyB,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AACrF,YAAY,UAAU,CAAC,kBAAkB,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9E,YAAY,UAAU,CAAC,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7E,YAAY,UAAU,CAAC,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7E,YAAY,UAAU,CAAC,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,YAAY,UAAU,CAAC,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AACzE,YAAY,UAAU,CAAC,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;AACxE,YAAY,UAAU,CAAC,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;AACzE,YAAY,UAAU,CAAC,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;AACvE,YAAY,UAAU,CAAC,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AAC1E,YAAY,UAAU,CAAC,kBAAkB,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AACnF;AACA,YAAY,UAAU,CAAC,gBAAgB,GAAG,UAAU,CAAC,qBAAqB,GAAG,UAAU,CAAC,oBAAoB,CAAC;AAC7G,YAAY,UAAU,CAAC,kBAAkB;AACzC,gBAAgB,UAAU,CAAC,yBAAyB,GAAG,UAAU,CAAC,qBAAqB,CAAC;AACxF,YAAY,UAAU,CAAC,cAAc,GAAG,UAAU,CAAC,kBAAkB,GAAG,UAAU,CAAC,yBAAyB,CAAC;AAC7G,YAAY,UAAU,CAAC,sBAAsB,GAAG,UAAU,CAAC,kBAAkB,GAAG,UAAU,CAAC,gBAAgB,CAAC;AAC5G,SAAS;AACT,QAAQ,OAAO,UAAU,CAAC;AAC1B,KAAK;AACL,IAAI,sBAAsB,CAAC,KAAK,EAAE,aAAa,EAAE;AACjD;AACA;AACA;AACA,QAAQ,MAAM,sBAAsB,GAAG,aAAa,CAAC,gBAAgB,GAAG,aAAa,CAAC,uBAAuB,CAAC;AAC9G,QAAQ,IAAI,mBAAmB,GAAG,IAAI,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAC;AACjF;AACA,QAAQ,IAAI,mBAAmB,IAAI,IAAI,EAAE;AACzC,YAAY,IAAI,IAAI,CAAC,2BAA2B,IAAI,IAAI,EAAE;AAC1D,gBAAgB,mBAAmB,GAAG,IAAI,CAAC,2BAA2B,CAAC;AACvE,aAAa;AACb,iBAAiB;AACjB,gBAAgB,OAAO,IAAI,CAAC;AAC5B,aAAa;AACb,SAAS;AACT,aAAa;AACb,YAAY,IAAI,CAAC,2BAA2B,GAAG,mBAAmB,CAAC;AACnE,SAAS;AACT;AACA,QAAQ,MAAM,uBAAuB,GAAG,sBAAsB,GAAG,mBAAmB,CAAC;AACrF;AACA,QAAQ,MAAM,OAAO,GAAG,aAAa,CAAC;AACtC,QAAQ,MAAM,oBAAoB,GAAG,uBAAuB,GAAG,OAAO,CAAC;AACvE,QAAQ,MAAM,aAAa,GAAG,aAAa,CAAC,SAAS,GAAG,oBAAoB,CAAC;AAC7E,QAAQ,OAAO,aAAa,CAAC;AAC7B,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,SAAS,EAAE;AAChC;AACA,QAAQ,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;AACpF,QAAQ,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;AAC1C;AACA;AACA;AACA,YAAY,MAAM,OAAO,GAAG,QAAQ;AACpC,iBAAiB,yBAAyB,EAAE;AAC5C,iBAAiB,MAAM,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC,CAAC;AAC3D,YAAY,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;AACvC,gBAAgB,IAAI,GAAG,CAAC,gBAAgB,KAAK,SAAS;AACtD,oBAAoB,GAAG,CAAC,uBAAuB,KAAK,SAAS;AAC7D,oBAAoB,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE;AACjD,oBAAoB,MAAM,UAAU,GAAG,IAAI,mBAAmB,EAAE,CAAC;AACjE,oBAAoB,UAAU,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;AACzD,oBAAoB,UAAU,CAAC,gBAAgB,GAAG,GAAG,CAAC,gBAAgB,CAAC;AACvE,oBAAoB,UAAU,CAAC,uBAAuB,GAAG,GAAG,CAAC,uBAAuB,CAAC;AACrF,oBAAoB,OAAO,UAAU,CAAC;AACtC,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL,IAAI,kCAAkC,CAAC,KAAK,EAAE;AAC9C;AACA;AACA,QAAQ,MAAM,2BAA2B,GAAG,KAAK,CAAC,wBAAwB,KAAK,SAAS;AACxF,YAAY,KAAK,CAAC,wBAAwB,CAAC,SAAS,KAAK,SAAS;AAClE,YAAY,KAAK,CAAC,wBAAwB,CAAC,eAAe,KAAK,SAAS,CAAC;AACzE;AACA;AACA,QAAQ,IAAI,CAAC,2BAA2B,EAAE;AAC1C,YAAY,OAAO,IAAI,CAAC;AACxB,SAAS;AACT,QAAQ,MAAM,2BAA2B,GAAG,KAAK,CAAC,wBAAwB,CAAC,SAAS,CAAC;AACrF,QAAQ,MAAM,wBAAwB,GAAG,KAAK,CAAC,wBAAwB,CAAC,eAAe,CAAC;AACxF,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC3C,QAAQ,IAAI,2BAA2B,KAAK,SAAS;AACrD,YAAY,wBAAwB,KAAK,SAAS;AAClD,YAAY,KAAK,KAAK,IAAI,EAAE;AAC5B,YAAY,MAAM,WAAW,GAAG,KAAK,GAAG,GAAG,CAAC;AAC5C,YAAY,OAAO,2BAA2B,IAAI,wBAAwB,GAAG,WAAW,CAAC,CAAC;AAC1F,SAAS;AACT;AACA,aAAa;AACb,YAAY,OAAO,IAAI,CAAC;AACxB,SAAS;AACT,KAAK;AACL,IAAI,QAAQ,CAAC,KAAK,EAAE;AACpB;AACA,QAAQ,MAAM,mBAAmB,GAAG,KAAK,CAAC,sBAAsB,EAAE,CAAC;AACnE,QAAQ,IAAI,CAAC,CAAC,mBAAmB,IAAI,mBAAmB,CAAC,oBAAoB,KAAK,SAAS,EAAE;AAC7F,YAAY,MAAM,aAAa,GAAG,mBAAmB,CAAC,oBAAoB,CAAC;AAC3E,YAAY,OAAO,aAAa,GAAG,IAAI,CAAC;AACxC,SAAS;AACT;AACA,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,wBAAwB;AAC5C,YAAY,KAAK,CAAC,wBAAwB,CAAC,kBAAkB,KAAK,SAAS;AAC3E,YAAY,KAAK,CAAC,wBAAwB,CAAC,yBAAyB,KAAK,SAAS;AAClF,YAAY,KAAK,CAAC,wBAAwB,CAAC,yBAAyB,GAAG,CAAC,EAAE;AAC1E,YAAY,MAAM,aAAa,GAAG,KAAK,CAAC,wBAAwB,CAAC,kBAAkB;AACnF,gBAAgB,KAAK,CAAC,wBAAwB,CAAC,yBAAyB,CAAC;AACzE,YAAY,OAAO,aAAa,GAAG,IAAI,CAAC;AACxC,SAAS;AACT;AACA,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,wBAAwB;AAC5C,YAAY,KAAK,CAAC,wBAAwB,CAAC,kBAAkB,KAAK,SAAS;AAC3E,YAAY,KAAK,CAAC,wBAAwB,CAAC,yBAAyB,KAAK,SAAS;AAClF,YAAY,KAAK,CAAC,wBAAwB,CAAC,yBAAyB,GAAG,CAAC,EAAE;AAC1E,YAAY,MAAM,aAAa,GAAG,KAAK,CAAC,wBAAwB,CAAC,kBAAkB;AACnF,gBAAgB,KAAK,CAAC,wBAAwB,CAAC,yBAAyB,CAAC;AACzE,YAAY,OAAO,aAAa,GAAG,IAAI,CAAC;AACxC,SAAS;AACT,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA;AACA;AACO,MAAM,WAAW,CAAC;AACzB,IAAI,WAAW,GAAG;AAClB;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;AACzC;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,6BAA6B,GAAG,SAAS,CAAC;AACvD;AACA,QAAQ,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;AAC/B;AACA,QAAQ,IAAI,CAAC,wBAAwB,GAAG,SAAS,CAAC;AAClD;AACA,QAAQ,IAAI,CAAC,0BAA0B,GAAG,SAAS,CAAC;AACpD;AACA,QAAQ,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;AAChD;AACA,QAAQ,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;AAChD;AACA,QAAQ,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;AAC3C;AACA,QAAQ,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;AACrC,KAAK;AACL;;AC1RA;AACA,IAAI,SAAS,GAAG,CAACM,SAAI,IAAIA,SAAI,CAAC,SAAS,KAAK,UAAU,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE;AACzF,IAAI,SAAS,KAAK,CAAC,KAAK,EAAE,EAAE,OAAO,KAAK,YAAY,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,UAAU,OAAO,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;AAChH,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,EAAE,UAAU,OAAO,EAAE,MAAM,EAAE;AAC/D,QAAQ,SAAS,SAAS,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;AACnG,QAAQ,SAAS,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;AACtG,QAAQ,SAAS,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,EAAE;AACtH,QAAQ,IAAI,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9E,KAAK,CAAC,CAAC;AACP,CAAC,CAAC;AAQK,MAAM,eAAe,GAAG,+DAA+D,CAAC;AAC/F;AACA;AACA;AACO,MAAM,wBAAwB,CAAC;AACtC;AACA;AACA;AACA;AACA;AACA,IAAI,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE;AACjD,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AAC7B,QAAQ,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;AAC3D,QAAQ,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAC;AACzD,KAAK;AACL,IAAI,oBAAoB,CAAC,OAAO,EAAE,cAAc,EAAE;AAClD;AACA,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;AACxD,YAAY,OAAO,CAAC,kBAAkB,GAAG,OAAO,CAAC;AACjD,YAAYN,YAAM,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAC;AACzG,SAAS;AACT;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC7D,QAAQ,IAAI,CAAC,cAAc,CAAC,sBAAsB,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;AAC9F,QAAQ,IAAI,CAAC,cAAc,CAAC,0BAA0B,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAAC;AACzG,QAAQ,IAAI,CAAC,cAAc,CAAC,yBAAyB,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,6BAA6B,CAAC,EAAE,CAAC,CAAC;AACvG,QAAQ,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AACrE,QAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;AACjF,QAAQ,IAAI,CAAC,cAAc,CAAC,aAAa,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;AAC/E,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;AACrD,QAAQ,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;AAC7C,QAAQ,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;AACzC,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE;AACtC,QAAQ,OAAO,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa;AAC5D,YAAYA,YAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACxC,YAAY,MAAM,qBAAqB,GAAG,QAAQ,CAAC,QAAQ,KAAK,WAAW,IAAI,QAAQ,CAAC,QAAQ,KAAK,WAAW,CAAC;AACjH,YAAY,MAAM,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC;AACrE,YAAY,IAAI,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC5D,YAAY,IAAI,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAClE,YAAY,IAAI,CAAC,MAAM,IAAI,SAAS,KAAK,EAAE,qBAAqB,IAAI,iBAAiB,CAAC,EAAE;AACxF,gBAAgB,MAAM,GAAG,KAAK,CAAC;AAC/B,gBAAgB,SAAS,GAAG,KAAK,CAAC;AAClC,gBAAgBA,YAAM,CAAC,KAAK,CAAC,kIAAkI,CAAC,CAAC;AACjK,gBAAgBA,YAAM,CAAC,KAAK,CAAC,8IAA8I,CAAC,CAAC;AAC7K,aAAa;AACb,YAAY,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,OAAO,CAAC,MAAM;AACzE,gBAAgB,IAAI,EAAE,CAAC;AACvB,gBAAgB,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK;AAC7H,oBAAoB,IAAI,EAAE,CAAC;AAC3B,oBAAoB,IAAI,CAAC,yBAAyB,EAAE,CAAC;AACrD,oBAAoB,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACjE,oBAAoB,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAClH,oBAAoB,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAClD,iBAAiB,CAAC,CAAC,KAAK,CAAC,MAAM;AAC/B,oBAAoB,IAAI,CAAC,2BAA2B,EAAE,CAAC;AACvD,iBAAiB,CAAC,CAAC;AACnB,aAAa,CAAC,CAAC;AACf,SAAS,CAAC,CAAC;AACX,KAAK;AACL;AACA;AACA;AACA,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE;AAChC,QAAQ,OAAO,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa;AAC5D,YAAY,IAAI,EAAE,CAAC;AACnB,YAAYA,YAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACzC;AACA;AACA;AACA,YAAY,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AAClC;AACA,gBAAgB,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,0FAA0F,EAAE,EAAE,CAAC,CAAC;AAC9I,aAAa;AACb,YAAY,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM;AACtH;AACA,gBAAgB,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;AACnD,gBAAgB,MAAM,qBAAqB,GAAG,QAAQ,CAAC,QAAQ,KAAK,WAAW,IAAI,QAAQ,CAAC,QAAQ,KAAK,WAAW,CAAC;AACrH,gBAAgB,MAAM,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC;AACzE,gBAAgB,IAAI,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAChE,gBAAgB,IAAI,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACtE,gBAAgB,IAAI,CAAC,MAAM,IAAI,SAAS,KAAK,EAAE,qBAAqB,IAAI,iBAAiB,CAAC,EAAE;AAC5F,oBAAoB,MAAM,GAAG,KAAK,CAAC;AACnC,oBAAoB,SAAS,GAAG,KAAK,CAAC;AACtC,oBAAoBA,YAAM,CAAC,KAAK,CAAC,kIAAkI,CAAC,CAAC;AACrK,oBAAoBA,YAAM,CAAC,KAAK,CAAC,8IAA8I,CAAC,CAAC;AACjL,iBAAiB;AACjB;AACA,gBAAgB,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,gCAAgC,CAAC,KAAK,CAAC,CAAC,CAAC;AACnI,gBAAgB,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,OAAO,CAAC,MAAM;AAC7E,oBAAoB,IAAI,EAAE,CAAC;AAC3B,oBAAoB,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK;AACvH,wBAAwB,IAAI,EAAE,CAAC;AAC/B,wBAAwB,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACvE,wBAAwB,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC9H,qBAAqB,CAAC,CAAC,IAAI,CAAC,MAAM;AAClC,wBAAwB,IAAI,EAAE,CAAC;AAC/B,wBAAwB,IAAI,CAAC,qBAAqB,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,uBAAuB,CAAC,CAAC;AAC/I,qBAAqB,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK;AACtC,wBAAwBA,YAAM,CAAC,KAAK,CAAC,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACvE,qBAAqB,CAAC,CAAC;AACvB,iBAAiB,CAAC,CAAC;AACnB,aAAa,CAAC,CAAC;AACf,SAAS,CAAC,CAAC;AACX,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,aAAa,CAAC,MAAM,EAAE;AAC1B,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;AACxG;AACA,QAAQ,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,gCAAgC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5H,KAAK;AACL;AACA;AACA;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK;AAC3D,YAAY,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;AACzD,YAAY,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACpD;AACA,YAAY,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,CAAC;AAC3H,YAAY,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;AAClD;AACA,YAAY,IAAI,IAAI,CAAC,oBAAoB,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,OAAO,EAAE;AAC/F;AACA,gBAAgB,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACnH,gBAAgB,IAAI,UAAU,KAAK,SAAS,EAAE;AAC9C,oBAAoB,OAAO;AAC3B,iBAAiB;AACjB,gBAAgB,MAAM,cAAc,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACjF,gBAAgB,IAAI,aAAa,GAAG,cAAc,CAAC;AACnD,gBAAgB,IAAI,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;AACpF,oBAAoB,aAAa,GAAG,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACzF,iBAAiB;AACjB,gBAAgB,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC;AAC/G;AACA,gBAAgB,IAAI,gBAAgB,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;AAC9D,oBAAoB,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;AACtG,oBAAoB,OAAO;AAC3B,iBAAiB;AACjB;AACA,gBAAgB,MAAM,YAAY,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChH,gBAAgB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7C,oBAAoB,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AACxG,oBAAoB,OAAO;AAC3B,iBAAiB;AACjB,aAAa;AACb,SAAS,CAAC,CAAC;AACX,KAAK;AACL;AACA;AACA;AACA,IAAI,KAAK,GAAG;AACZ,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE;AACjC,YAAY,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;AACxC,YAAY,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AACvC,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE;AAC1B,QAAQ,IAAI,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,iDAAiD,EAAE,iEAAiE,CAAC,CAAC;AAC1J;AACA,QAAQ,IAAI,QAAQ,GAAG,2BAA2B,CAAC;AACnD,QAAQ,IAAI,MAAM,EAAE;AACpB;AACA,YAAY,QAAQ,IAAI,6BAA6B,CAAC;AACtD,SAAS;AACT;AACA,QAAQ,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,WAAW,GAAG,WAAW,CAAC;AAChG;AACA,QAAQ,QAAQ,IAAI,gBAAgB,CAAC;AACrC;AACA,QAAQ,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;AAClE;AACA;AACA;AACA,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;AACxF,YAAY,SAAS,GAAG,QAAQ,CAAC,4BAA4B,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;AAC1F,SAAS;AACT,QAAQ,OAAO,SAAS,CAAC;AACzB,KAAK;AACL,IAAI,SAAS,GAAG;AAChB,QAAQ,OAAO,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC1D,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,WAAW,CAAC,YAAY,EAAE;AAC9B,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQA,YAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;AAClD;AACA,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;AACxD;AACA,YAAY,IAAI,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AAC7D,gBAAgBA,YAAM,CAAC,IAAI,CAAC,CAAC,0DAA0D,EAAE,YAAY,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACnN,gBAAgB,OAAO;AACvB,aAAa;AACb,SAAS;AACT,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;AACzG,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,uBAAuB,CAAC,KAAK,EAAE;AACnC,QAAQA,YAAM,CAAC,IAAI,CAAC,0BAA0B,GAAG,KAAK,CAAC,CAAC;AACxD,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,8BAA8B,CAAC,KAAK,EAAE;AAC1C,QAAQA,YAAM,CAAC,IAAI,CAAC,+BAA+B,GAAG,KAAK,CAAC,CAAC;AAC7D,QAAQ,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;AAC/C,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,6BAA6B,CAAC,KAAK,EAAE;AACzC,QAAQA,YAAM,CAAC,IAAI,CAAC,8BAA8B,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5E,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,aAAa,CAAC,KAAK,EAAE;AACzB,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,UAAU,EAAE;AAC3E,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,OAAO,EAAE;AACzC,YAAY,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;AAC1C,SAAS;AACT,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,OAAO,EAAE;AACzC,YAAY,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;AAC1C,SAAS;AACT,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC5B,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,kBAAkB,CAAC,KAAK,EAAE;AAC9B,QAAQ,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACvC,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,iBAAiB,CAAC,KAAK,EAAE;AAC7B,QAAQ,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAClC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,CAAC,UAAU,EAAE;AACxB;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,0BAA0B,CAAC,KAAK,EAAE;AACtC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,kBAAkB,CAAC,sBAAsB,EAAE;AAC/C;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,CAAC,gBAAgB,EAAE;AACpC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,gCAAgC,CAAC,GAAG,EAAE;AAC1C;AACA,QAAQ,MAAM,kBAAkB,GAAG,IAAI,KAAK,EAAE,CAAC;AAC/C,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;AAC3D,QAAQ,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC;AACvG,QAAQ,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE;AAC3C;AACA,YAAY,IAAI,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AACpD,gBAAgB,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACjD,gBAAgB,SAAS;AACzB,aAAa;AACb;AACA,iBAAiB;AACjB,gBAAgB,MAAM,oBAAoB,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAChE,gBAAgB,MAAM,WAAW,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;AAC5D,gBAAgB,KAAK,MAAM,YAAY,IAAI,gBAAgB,EAAE;AAC7D,oBAAoB,IAAI,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;AAC5D;AACA,wBAAwB,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC9D,wBAAwB,MAAM;AAC9B,qBAAqB;AACrB,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,kBAAkB,CAAC;AAClC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE;AAC9C,QAAQ,OAAO,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa;AAC5D,YAAY,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAC/C,YAAY,IAAI,gBAAgB,GAAG,KAAK,CAAC;AACzC,YAAY,KAAK,MAAM,WAAW,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,eAAe,EAAE,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;AACvK,gBAAgB,IAAI,WAAW;AAC/B,oBAAoB,WAAW,CAAC,QAAQ;AACxC,oBAAoB,WAAW,CAAC,QAAQ,CAAC,KAAK;AAC9C,oBAAoB,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;AACjE,oBAAoB,gBAAgB,GAAG,IAAI,CAAC;AAC5C,oBAAoB,MAAM;AAC1B,iBAAiB;AACjB,aAAa;AACb;AACA,YAAY,IAAI,CAAC,SAAS,EAAE;AAC5B,gBAAgB,IAAI,CAAC,gBAAgB,EAAE;AACvC,oBAAoB,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;AAC1I,iBAAiB;AACjB,aAAa;AACb,iBAAiB;AACjB,gBAAgB,MAAM,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;AAC9D,aAAa;AACb,YAAY,IAAI,cAAc,CAAC,eAAe,IAAI,IAAI,CAAC,cAAc,IAAI,EAAE,EAAE;AAC7E,gBAAgB,KAAK,MAAM,WAAW,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,eAAe,EAAE,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;AAC3K,oBAAoB,IAAI,WAAW;AACnC,wBAAwB,WAAW,CAAC,QAAQ;AAC5C,wBAAwB,WAAW,CAAC,QAAQ,CAAC,KAAK;AAClD,wBAAwB,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO;AACnE,wBAAwB,WAAW,CAAC,mBAAmB,EAAE;AACzD;AACA,wBAAwB,MAAM,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACjF,wBAAwB,MAAM,8BAA8B,GAAG;AAC/D,4BAA4B,QAAQ,EAAE,QAAQ,GAAG,iBAAiB,CAAC,CAAC,CAAC;AACrE,4BAA4B,SAAS,EAAE,KAAK;AAC5C,4BAA4B,WAAW,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,EAAE;AACzF,yBAAyB,CAAC;AAC1B;AACA,wBAAwB,MAAM,kBAAkB,GAAG,CAAC,8BAA8B,CAAC,CAAC;AACpF;AACA,wBAAwB,cAAc,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,qBAAqB,KAAK;AAC1G;AACA,4BAA4B,IAAI,qBAAqB,CAAC,QAAQ,IAAI,8BAA8B,CAAC,QAAQ,EAAE;AAC3G,gCAAgC,kBAAkB,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAC/E,6BAA6B;AAC7B,iCAAiC,IAAI,CAAC,qBAAqB,KAAK,IAAI,IAAI,qBAAqB,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,qBAAqB,CAAC,WAAW;AACrJ,iCAAiC,8BAA8B,KAAK,IAAI,IAAI,8BAA8B,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,8BAA8B,CAAC,WAAW,CAAC,EAAE;AAC9K,gCAAgC,kBAAkB,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAC/E,6BAA6B;AAC7B,yBAAyB,CAAC,CAAC;AAC3B,wBAAwB,KAAK,MAAM,KAAK,IAAI,kBAAkB,EAAE;AAChE,4BAA4B,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,WAAW,MAAM,SAAS,IAAI,KAAK,CAAC,WAAW,KAAK,EAAE,EAAE;AAC7I;AACA,gCAAgC,OAAO,KAAK,CAAC,WAAW,CAAC;AACzD,6BAA6B;AAC7B,yBAAyB;AACzB,wBAAwB,WAAW,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;AAC5E,qBAAqB;AACrB,iBAAiB;AACjB,aAAa;AACb,YAAY,IAAI,gBAAgB,GAAG,KAAK,CAAC;AACzC,YAAY,KAAK,MAAM,WAAW,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,eAAe,EAAE,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;AACvK,gBAAgB,IAAI,WAAW;AAC/B,oBAAoB,WAAW,CAAC,QAAQ;AACxC,oBAAoB,WAAW,CAAC,QAAQ,CAAC,KAAK;AAC9C,oBAAoB,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;AACjE,oBAAoB,gBAAgB,GAAG,IAAI,CAAC;AAC5C,oBAAoB,MAAM;AAC1B,iBAAiB;AACjB,aAAa;AACb;AACA,YAAY,IAAI,CAAC,MAAM,EAAE;AACzB,gBAAgB,IAAI,CAAC,gBAAgB,EAAE;AACvC,oBAAoB,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE;AAC/G,wBAAwB,SAAS,EAAE,UAAU;AAC7C,qBAAqB,CAAC,CAAC;AACvB,iBAAiB;AACjB,aAAa;AACb,iBAAiB;AACjB,gBAAgB,MAAM,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;AAC9D,aAAa;AACb,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,gBAAgB,CAAC,gBAAgB,EAAE;AACvC,QAAQ,OAAO,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa;AAC5D,YAAY,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAC/B;AACA,YAAY,MAAM,gBAAgB,GAAG;AACrC,gBAAgB,KAAK,EAAE,IAAI;AAC3B,aAAa,CAAC;AACd;AACA,YAAY,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;AACvF,YAAY,IAAI,MAAM,EAAE;AACxB,gBAAgB,IAAI,gBAAgB,EAAE;AACtC,oBAAoB,KAAK,MAAM,WAAW,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,eAAe,EAAE,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;AAC/K,wBAAwB,IAAI,QAAQ,CAAC,0BAA0B,CAAC,WAAW,CAAC,EAAE;AAC9E,4BAA4B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,SAAS,EAAE,EAAE;AACpE,gCAAgC,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,OAAO,EAAE;AACzE,oCAAoC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC3E,oCAAoC,WAAW,CAAC,SAAS,GAAG,UAAU,CAAC;AACvE,iCAAiC;AACjC,6BAA6B;AAC7B,yBAAyB;AACzB,qBAAqB;AACrB,iBAAiB;AACjB,qBAAqB;AACrB,oBAAoB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,SAAS,EAAE,EAAE;AAC5D,wBAAwB,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,OAAO,EAAE;AACjE,4BAA4B,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE;AACrH,gCAAgC,SAAS,EAAE,UAAU;AACrD,6BAA6B,CAAC,CAAC;AAC/B,yBAAyB;AACzB,qBAAqB;AACrB,iBAAiB;AACjB,aAAa;AACb,iBAAiB;AACjB,gBAAgB,IAAI,CAAC,gBAAgB,EAAE;AACvC,oBAAoB,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;AAC1I,iBAAiB;AACjB,aAAa;AACb,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,gBAAgB,CAAC,gBAAgB,EAAE;AACvC,QAAQ,OAAO,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa;AAC5D,YAAY,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAC/B;AACA,YAAY,MAAM,YAAY,GAAG;AACjC,gBAAgB,eAAe,EAAE,KAAK;AACtC,gBAAgB,YAAY,EAAE,CAAC;AAC/B,gBAAgB,gBAAgB,EAAE,KAAK;AACvC,gBAAgB,OAAO,EAAE,CAAC;AAC1B,gBAAgB,gBAAgB,EAAE,KAAK;AACvC,gBAAgB,UAAU,EAAE,KAAK;AACjC,gBAAgB,UAAU,EAAE,EAAE;AAC9B,gBAAgB,MAAM,EAAE,GAAG;AAC3B,aAAa,CAAC;AACd;AACA,YAAY,MAAM,gBAAgB,GAAG;AACrC,gBAAgB,KAAK,EAAE,KAAK;AAC5B,gBAAgB,KAAK,EAAE,YAAY;AACnC,aAAa,CAAC;AACd;AACA,YAAY,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;AACvF,YAAY,IAAI,MAAM,EAAE;AACxB,gBAAgB,IAAI,gBAAgB,EAAE;AACtC,oBAAoB,KAAK,MAAM,WAAW,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,eAAe,EAAE,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;AAC/K,wBAAwB,IAAI,QAAQ,CAAC,0BAA0B,CAAC,WAAW,CAAC,EAAE;AAC9E,4BAA4B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,SAAS,EAAE,EAAE;AACpE,gCAAgC,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,OAAO,EAAE;AACzE,oCAAoC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC3E,oCAAoC,WAAW,CAAC,SAAS,GAAG,UAAU,CAAC;AACvE,iCAAiC;AACjC,6BAA6B;AAC7B,yBAAyB;AACzB,qBAAqB;AACrB,iBAAiB;AACjB,qBAAqB;AACrB,oBAAoB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,SAAS,EAAE,EAAE;AAC5D,wBAAwB,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,OAAO,EAAE;AACjE,4BAA4B,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE;AACrH,gCAAgC,SAAS,EAAE,UAAU;AACrD,6BAA6B,CAAC,CAAC;AAC/B,yBAAyB;AACzB,qBAAqB;AACrB,iBAAiB;AACjB,aAAa;AACb,iBAAiB;AACjB,gBAAgB,IAAI,CAAC,gBAAgB,EAAE;AACvC,oBAAoB,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE;AAC/G,wBAAwB,SAAS,EAAE,UAAU;AAC7C,qBAAqB,CAAC,CAAC;AACvB,iBAAiB;AACjB,aAAa;AACb,SAAS,CAAC,CAAC;AACX,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,CAAC,KAAK,EAAE;AACxB;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,mBAAmB,CAAC,WAAW,EAAE;AACrC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,iBAAiB,CAAC,KAAK,EAAE;AAC7B;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,sBAAsB,CAAC,KAAK,EAAE;AAClC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,qBAAqB,CAAC,MAAM,EAAE;AAClC;AACA,KAAK;AACL;AACA;AACA;AACA,IAAI,yBAAyB,GAAG;AAChC;AACA,KAAK;AACL;AACA;AACA;AACA,IAAI,2BAA2B,GAAG;AAClC;AACA,KAAK;AACL,IAAI,oBAAoB,CAAC,qBAAqB,EAAE;AAChD;AACA,QAAQ,IAAI,CAAC,cAAc,CAAC,eAAe;AAC3C,YAAY,OAAO,CAAC,0BAA0B,CAAC,CAAC;AAChD,QAAQ,MAAM,iBAAiB,GAAG,EAAE,CAAC;AACrC,QAAQ,MAAM,QAAQ,GAAGO,wBAAa,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;AAClE;AACA,QAAQ,QAAQ,CAAC,KAAK,EAAE,CAAC;AACzB,QAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC,YAAY,KAAK;AAC3C,YAAY,MAAM,EAAE,MAAM,EAAE,GAAGC,6BAAkB,CAAC,YAAY,CAAC,CAAC;AAChE;AACA,YAAY,MAAM,OAAO,GAAG,oBAAoB,CAAC;AACjD,YAAY,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;AAClC,gBAAgB,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI;AAClC,oBAAoB,GAAG;AACvB,oBAAoB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC;AACnD,yBAAyB,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC9D,yBAAyB,IAAI,CAAC,GAAG,CAAC,CAAC;AACnC,gBAAgB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChD,gBAAgB,IAAI,KAAK,KAAK,IAAI,EAAE;AACpC,oBAAoB,IAAI,CAAC,CAAC,IAAI,IAAI,KAAK,EAAE;AACzC;AACA,wBAAwB,CAAC,CAAC,UAAU,GAAG;AACvC,4BAA4B,YAAY,EAAE,GAAG;AAC7C,yBAAyB,CAAC;AAC1B,qBAAqB;AACrB,oBAAoB,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI;AAC3C,wBAAwB,GAAG;AAC3B,wBAAwB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC;AACvD,6BAA6B,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAClE,6BAA6B,IAAI,CAAC,GAAG,CAAC,CAAC;AACvC,oBAAoB,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACrD,iBAAiB;AACjB,aAAa,CAAC,CAAC;AACf,SAAS,CAAC,CAAC;AACX,QAAQ,OAAO,iBAAiB,CAAC;AACjC,KAAK;AACL;;ACrmBA;AACA;AACA;AACA;AACO,MAAM,eAAe,CAAC;AAC7B,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,sBAAsB,GAAG,IAAI,sBAAsB,EAAE,CAAC;AACnE,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;AACrD,QAAQ,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;AACnD,KAAK;AACL;AACA;AACA;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,IAAI,EAAE;AAChD,YAAY,IAAI,CAAC,cAAc,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;AACjE,SAAS;AACT,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,sBAAsB,CAAC;AACpC,CAAC;AACD;AACA;AACA;AACO,MAAM,eAAe,CAAC;AAC7B,CAAC;AACD;AACA;AACA;AACO,MAAM,cAAc,CAAC;AAC5B;;ACjCA;AAEA;AACA;AACA;AACO,MAAM,kBAAkB,CAAC;AAChC,IAAI,WAAW,GAAG;AAClB;AACA,QAAQ,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAClC,QAAQ,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;AACvC;AACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AACrC,QAAQ,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AACtC,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AACpC,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AACrC;AACA,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC7B,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AACpC;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;AACjC,QAAQ,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;AACtC;AACA,QAAQ,IAAI,CAAC,sBAAsB,GAAG,CAAC,CAAC;AACxC,QAAQ,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;AAC9B;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;AAChC,QAAQ,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;AACpC,QAAQ,IAAI,CAAC,uBAAuB,GAAG,CAAC,CAAC;AACzC,QAAQ,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;AACjC;AACA,QAAQ,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;AAC/B,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,wBAAwB,CAAC,WAAW,EAAE;AAC1C,QAAQ,IAAI,IAAI,CAAC,uBAAuB,IAAI,CAAC,EAAE;AAC/C,YAAY,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AACnE,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,KAAK,IAAI,CAAC,eAAe,IAAI,IAAI,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,EAAE;AACtG,YAAYR,YAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AACpG,YAAY,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC;AACzE,SAAS;AACT,QAAQ,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI;AACxC,aAAa,IAAI,CAAC,gBAAgB,IAAI,IAAI,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,EAAE;AAC/E,YAAYA,YAAM,CAAC,IAAI,CAAC,CAAC,8BAA8B,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAC/G,YAAY,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAClF,SAAS;AACT,KAAK;AACL;;ACvDA;AAEA;AACA;AACA;AACO,MAAM,QAAQ,CAAC;AACtB;AACA;AACA;AACA;AACA,IAAI,OAAO,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE;AAC7C;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AAC7B,YAAY,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AAC/B,YAAY,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AAChC,YAAY,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AAClC,YAAY,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAC/B,YAAY,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAC5B,YAAY,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AAC3B,YAAY,IAAI,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AACvD,YAAYA,YAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;AACxD,SAAS;AACT,QAAQ,MAAM,iBAAiB,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAClF,QAAQA,YAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACvC,QAAQ,IAAI,CAAC,SAAS,GAAG,iBAAiB,CAAC;AAC3C,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,OAAO,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE;AAC5C;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AAC7B,YAAY,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AAC/B,YAAY,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AAChC,YAAY,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AAClC,YAAY,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAC/B,YAAY,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAC5B,YAAY,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AAC3B,YAAY,IAAI,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AACvD,YAAYA,YAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;AACxD,SAAS;AACT,QAAQ,MAAM,YAAY,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7E,QAAQA,YAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAClC,QAAQ,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC;AACrC,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,OAAO,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE;AAC5C;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS;AAC3B,YAAY,OAAO;AACnB,QAAQ,MAAM,QAAQ,GAAG,CAAC,CAAC;AAC3B,QAAQ,MAAM,OAAO,GAAG,CAAC,CAAC;AAC1B,QAAQ,MAAM,cAAc,GAAG,EAAE,GAAG,IAAI,CAAC;AACzC,QAAQ,MAAM,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;AAC9C,QAAQ,MAAM,cAAc,GAAG,cAAc,GAAG,UAAU,CAAC;AAC3D;AACA,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;AAC1H;AACA,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AACjD;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAClC;AACA,QAAQA,YAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC/E,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE;AAC9C,YAAY,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACnC,YAAY,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAC9B,YAAYA,YAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AAClD,YAAY,MAAM,gBAAgB,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC;AAChF,YAAY,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,cAAc,IAAI,gBAAgB,CAAC,CAAC;AAClG,YAAYA,YAAM,CAAC,IAAI,CAAC,CAAC,0BAA0B,EAAE,eAAe,CAAC,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AACjD,YAAY,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACnC,YAAYA,YAAM,CAAC,KAAK,CAAC,CAAC,sCAAsC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACrG,SAAS;AACT,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,YAAY,CAAC;AAC1B,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AAC3B,QAAQ,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AAC5B,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AAC/B,QAAQ,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACxB,QAAQ,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AACvB,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAC3B,KAAK;AACL;;AC1GA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,eAAe,CAAC;AAC7B,CAAC;AACD,eAAe,CAAC,SAAS,GAAG,CAAC,CAAC;AAC9B,eAAe,CAAC,KAAK,GAAG,EAAE,CAAC;AAC3B,eAAe,CAAC,OAAO,GAAG,EAAE,CAAC;AAC7B,eAAe,CAAC,GAAG,GAAG,EAAE,CAAC;AACzB,eAAe,CAAC,UAAU,GAAG,GAAG,CAAC;AACjC,eAAe,CAAC,YAAY,GAAG,GAAG,CAAC;AACnC,eAAe,CAAC,QAAQ,GAAG,GAAG;;ACd9B;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC;AAC3C,IAAI,MAAM,EAAE,EAAE;AACd,IAAI,MAAM,EAAE,EAAE;AACd,IAAI,MAAM,EAAE,EAAE;AACd,IAAI,MAAM,EAAE,EAAE;AACd,IAAI,MAAM,EAAE,EAAE;AACd,IAAI,MAAM,EAAE,EAAE;AACd,IAAI,MAAM,EAAE,EAAE;AACd,IAAI,MAAM,EAAE,EAAE;AACd,IAAI,MAAM,EAAE,EAAE;AACd,IAAI,MAAM,EAAE,EAAE;AACd,IAAI,MAAM,EAAE,EAAE;AACd,IAAI,KAAK,EAAE,GAAG;AACd,IAAI,KAAK,EAAE,GAAG;AACd,IAAI,SAAS,EAAE,CAAC;AAChB,IAAI,GAAG,EAAE,CAAC;AACV,IAAI,IAAI,EAAE,EAAE;AACZ,IAAI,IAAI,EAAE,EAAE;AACZ,IAAI,IAAI,EAAE,EAAE;AACZ,IAAI,IAAI,EAAE,EAAE;AACZ,IAAI,IAAI,EAAE,EAAE;AACZ,IAAI,IAAI,EAAE,EAAE;AACZ,IAAI,IAAI,EAAE,EAAE;AACZ,IAAI,IAAI,EAAE,EAAE;AACZ,IAAI,IAAI,EAAE,EAAE;AACZ,IAAI,IAAI,EAAE,EAAE;AACZ,IAAI,WAAW,EAAE,GAAG;AACpB,IAAI,YAAY,EAAE,GAAG;AACrB,IAAI,KAAK,EAAE,EAAE;AACb,IAAI,WAAW,EAAE,EAAE;AACnB,IAAI,IAAI,EAAE,EAAE;AACZ,IAAI,IAAI,EAAE,EAAE;AACZ,IAAI,IAAI,EAAE,EAAE;AACZ,IAAI,IAAI,EAAE,EAAE;AACZ,IAAI,IAAI,EAAE,EAAE;AACZ,IAAI,IAAI,EAAE,EAAE;AACZ,IAAI,IAAI,EAAE,EAAE;AACZ,IAAI,IAAI,EAAE,EAAE;AACZ,IAAI,IAAI,EAAE,EAAE;AACZ,IAAI,SAAS,EAAE,GAAG;AAClB,IAAI,KAAK,EAAE,GAAG;AACd,IAAI,SAAS,EAAE,GAAG;AAClB,IAAI,SAAS,EAAE,EAAE;AACjB,IAAI,SAAS,EAAE,GAAG;AAClB,IAAI,IAAI,EAAE,EAAE;AACZ,IAAI,IAAI,EAAE,EAAE;AACZ,IAAI,IAAI,EAAE,EAAE;AACZ,IAAI,IAAI,EAAE,EAAE;AACZ,IAAI,IAAI,EAAE,EAAE;AACZ,IAAI,IAAI,EAAE,EAAE;AACZ,IAAI,IAAI,EAAE,EAAE;AACZ,IAAI,KAAK,EAAE,GAAG;AACd,IAAI,MAAM,EAAE,GAAG;AACf,IAAI,KAAK,EAAE,GAAG;AACd,IAAI,UAAU,EAAE,GAAG;AACnB,IAAI,OAAO,EAAE,EAAE;AACf,IAAI,KAAK,EAAE,EAAE;AACb,IAAI,QAAQ,EAAE,EAAE;AAChB,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,GAAG,EAAE,GAAG;AACZ,IAAI,GAAG,EAAE,GAAG;AACZ,IAAI,GAAG,EAAE,GAAG;AACZ,IAAI,KAAK,EAAE,EAAE;AACb,IAAI,UAAU,EAAE,GAAG;AACnB,IAAI,YAAY,EAAE,GAAG;AACrB,IAAI,cAAc,EAAE,GAAG;AACvB,IAAI,cAAc,EAAE,GAAG;AACvB,IAAI,SAAS,EAAE,GAAG;AAClB,IAAI,aAAa,EAAE,GAAG;AACtB,IAAI,OAAO,EAAE,GAAG;AAChB,IAAI,OAAO,EAAE,GAAG;AAChB,IAAI,OAAO,EAAE,GAAG;AAChB,IAAI,OAAO,EAAE,GAAG;AAChB,IAAI,OAAO,EAAE,GAAG;AAChB,IAAI,OAAO,EAAE,GAAG;AAChB,IAAI,OAAO,EAAE,EAAE;AACf,IAAI,OAAO,EAAE,EAAE;AACf,IAAI,OAAO,EAAE,EAAE;AACf,IAAI,OAAO,EAAE,EAAE;AACf,IAAI,OAAO,EAAE,GAAG;AAChB,IAAI,YAAY,EAAE,GAAG;AACrB,IAAI,QAAQ,EAAE,GAAG;AACjB,IAAI,IAAI,EAAE,EAAE;AACZ,IAAI,GAAG,EAAE,EAAE;AACX,IAAI,OAAO,EAAE,EAAE;AACf,IAAI,SAAS,EAAE,EAAE;AACjB,IAAI,UAAU,EAAE,EAAE;AAClB,IAAI,SAAS,EAAE,EAAE;AACjB,IAAI,MAAM,EAAE,EAAE;AACd,IAAI,QAAQ,EAAE,EAAE;AAChB,IAAI,MAAM,EAAE,EAAE;AACd,IAAI,MAAM,EAAE,EAAE;AACd,IAAI,WAAW,EAAE,EAAE;AACnB,CAAC,CAAC;;AC5GF;AAKA;AACA;AACA;AACO,MAAM,kBAAkB,CAAC;AAChC,IAAI,WAAW,CAAC,uBAAuB,EAAE,MAAM,EAAE,UAAU,EAAE;AAC7D,QAAQ,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;AAC/D,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AAC7B,QAAQ,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AACrC,QAAQ,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjE,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7D,QAAQ,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnE,KAAK;AACL,IAAI,QAAQ,GAAG;AACf,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACrE,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AACjE;AACA,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACvE,KAAK;AACL,IAAI,UAAU,GAAG;AACjB,QAAQ,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACxE,QAAQ,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AACpE,QAAQ,QAAQ,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;AAC1E,KAAK;AACL,IAAI,eAAe,CAAC,aAAa,EAAE;AACnC,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AACvD,QAAQ,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,GAAG,EAAE;AACzC,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,MAAM,kBAAkB,GAAG,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC;AACnF,QAAQ,CAAC,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzJ,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;AAC3D,QAAQ,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACjC;AACA;AACA;AACA;AACA,QAAQ,IAAI,OAAO,KAAK,eAAe,CAAC,SAAS,EAAE;AACnD,YAAY,IAAI,CAAC,gBAAgB,CAAC,IAAI,aAAa,CAAC,UAAU,EAAE;AAChE,gBAAgB,QAAQ,EAAE,eAAe,CAAC,SAAS;AACnD,gBAAgB,OAAO,EAAE,eAAe,CAAC,SAAS;AAClD,aAAa,CAAC,CAAC,CAAC;AAChB,SAAS;AACT,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE;AACvG,YAAY,aAAa,CAAC,cAAc,EAAE,CAAC;AAC3C,SAAS;AACT,KAAK;AACL,IAAI,aAAa,CAAC,aAAa,EAAE;AACjC,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AACvD,QAAQ,IAAI,CAAC,OAAO,EAAE;AACtB,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,MAAM,kBAAkB,GAAG,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC;AACnF,QAAQ,CAAC,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAClG,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE;AACvG,YAAY,aAAa,CAAC,cAAc,EAAE,CAAC;AAC3C,SAAS;AACT,KAAK;AACL,IAAI,gBAAgB,CAAC,aAAa,EAAE;AACpC,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AACvD,QAAQ,IAAI,CAAC,OAAO,EAAE;AACtB,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,MAAM,kBAAkB,GAAG,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC;AACnF,QAAQ,CAAC,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACrG,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,UAAU,CAAC,aAAa,EAAE;AAC9B;AACA;AACA,QAAQ,IAAI,EAAE,SAAS,IAAI,aAAa,CAAC,EAAE;AAC3C;AACA;AACA,YAAY,MAAM,KAAK,GAAG,aAAa,CAAC;AACxC;AACA,YAAY,IAAI,KAAK,CAAC,IAAI,IAAI,aAAa,EAAE;AAC7C,gBAAgB,OAAO,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACjD,aAAa;AACb,iBAAiB;AACjB,gBAAgBA,YAAM,CAAC,OAAO,CAAC,CAAC,iBAAiB,EAAE,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC,CAAC;AACrH,gBAAgB,OAAO,IAAI,CAAC;AAC5B,aAAa;AACb,SAAS;AACT;AACA,QAAQ,IAAI,aAAa,CAAC,OAAO,KAAK,eAAe,CAAC,KAAK,IAAI,aAAa,CAAC,IAAI,KAAK,YAAY,EAAE;AACpG,YAAY,OAAO,eAAe,CAAC,UAAU,CAAC;AAC9C,SAAS;AACT,aAAa,IAAI,aAAa,CAAC,OAAO,KAAK,eAAe,CAAC,OAAO;AAClE,YAAY,aAAa,CAAC,IAAI,KAAK,cAAc,EAAE;AACnD,YAAY,OAAO,eAAe,CAAC,YAAY,CAAC;AAChD,SAAS;AACT,aAAa,IAAI,aAAa,CAAC,OAAO,KAAK,eAAe,CAAC,GAAG,IAAI,aAAa,CAAC,IAAI,KAAK,UAAU,EAAE;AACrG,YAAY,OAAO,eAAe,CAAC,QAAQ,CAAC;AAC5C,SAAS;AACT,aAAa;AACb,YAAY,OAAO,aAAa,CAAC,OAAO,CAAC;AACzC,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,mBAAmB,CAAC,OAAO,EAAE;AACjC;AACA,QAAQ,OAAO,CAAC,OAAO,IAAI,GAAG,IAAI,OAAO,IAAI,GAAG,KAAK,OAAO,KAAK,CAAC,CAAC;AACnE,KAAK;AACL;;ACrHA;AACA;AACA;AACA;AACA;AACO,MAAM,WAAW,CAAC;AACzB,CAAC;AACD,WAAW,CAAC,UAAU,GAAG,CAAC,CAAC;AAC3B,WAAW,CAAC,eAAe,GAAG,CAAC,CAAC;AAChC,WAAW,CAAC,eAAe,GAAG,CAAC,CAAC;AAChC,WAAW,CAAC,YAAY,GAAG,CAAC,CAAC;AAC7B,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC;AAC5B;AACA;AACA;AACA;AACO,MAAM,gBAAgB,CAAC;AAC9B,CAAC;AACD,gBAAgB,CAAC,aAAa,GAAG,CAAC,CAAC;AACnC,gBAAgB,CAAC,eAAe,GAAG,CAAC,CAAC;AACrC,gBAAgB,CAAC,eAAe,GAAG,CAAC,CAAC;AACrC,gBAAgB,CAAC,YAAY,GAAG,CAAC,CAAC;AAClC,gBAAgB,CAAC,WAAW,GAAG,EAAE,CAAC;;ACtBlC;AAEA;AACA;AACA;AACA;AACO,MAAM,eAAe,CAAC;AAC7B,IAAI,WAAW,CAAC,uBAAuB,EAAE,WAAW,EAAE,mBAAmB,EAAE,UAAU,EAAE;AACvF,QAAQ,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;AAC/D,QAAQ,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;AACvD,QAAQ,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AACvC,QAAQ,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AACrC,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5D,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5D,KAAK;AACL,IAAI,QAAQ,GAAG;AACf,QAAQ,IAAI,CAAC,gCAAgC,EAAE,CAAC;AAChD,KAAK;AACL,IAAI,UAAU,GAAG;AACjB,QAAQ,IAAI,CAAC,kCAAkC,EAAE,CAAC;AAClD,KAAK;AACL,IAAI,gCAAgC,GAAG;AACvC,QAAQ,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC;AAC5E,QAAQ,kBAAkB,KAAK,IAAI,IAAI,kBAAkB,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AACxJ,QAAQ,kBAAkB,KAAK,IAAI,IAAI,kBAAkB,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AACxJ,KAAK;AACL,IAAI,kCAAkC,GAAG;AACzC,QAAQ,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC;AAC5E,QAAQ,kBAAkB,KAAK,IAAI,IAAI,kBAAkB,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,kBAAkB,CAAC,mBAAmB,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AAC3J,QAAQ,kBAAkB,KAAK,IAAI,IAAI,kBAAkB,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,kBAAkB,CAAC,mBAAmB,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AAC3J,KAAK;AACL,IAAI,YAAY,CAAC,KAAK,EAAE;AACxB,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE;AAC9C,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC;AAC3H,QAAQ,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAChE,KAAK;AACL,IAAI,YAAY,CAAC,KAAK,EAAE;AACxB,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE;AAC9C,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC;AAC3H,QAAQ,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAClE,KAAK;AACL,IAAI,mBAAmB,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE;AACvC,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvE,QAAQ,IAAI,OAAO,GAAG,gBAAgB,CAAC,aAAa,EAAE;AACtD,YAAY,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACvE,SAAS;AACT,QAAQ,IAAI,OAAO,GAAG,gBAAgB,CAAC,eAAe,EAAE;AACxD,YAAY,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5E,SAAS;AACT,QAAQ,IAAI,OAAO,GAAG,gBAAgB,CAAC,eAAe,EAAE;AACxD,YAAY,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5E,SAAS;AACT,QAAQ,IAAI,OAAO,GAAG,gBAAgB,CAAC,YAAY,EAAE;AACrD,YAAY,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACzE,SAAS;AACT,QAAQ,IAAI,OAAO,GAAG,gBAAgB,CAAC,WAAW,EAAE;AACpD,YAAY,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACxE,SAAS;AACT,KAAK;AACL,IAAI,iBAAiB,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE;AACrC,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE;AAC9C,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvE,QAAQ,IAAI,OAAO,GAAG,gBAAgB,CAAC,aAAa,EAAE;AACtD,YAAY,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACzE,SAAS;AACT,QAAQ,IAAI,OAAO,GAAG,gBAAgB,CAAC,eAAe,EAAE;AACxD,YAAY,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9E,SAAS;AACT,QAAQ,IAAI,OAAO,GAAG,gBAAgB,CAAC,eAAe,EAAE;AACxD,YAAY,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9E,SAAS;AACT,QAAQ,IAAI,OAAO,GAAG,gBAAgB,CAAC,YAAY,EAAE;AACrD,YAAY,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3E,SAAS;AACT,QAAQ,IAAI,OAAO,GAAG,gBAAgB,CAAC,WAAW,EAAE;AACpD,YAAY,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1E,SAAS;AACT,KAAK;AACL,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE;AAChC,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACxI,KAAK;AACL,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE;AAC9B,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvE,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAClJ,KAAK;AACL;;AC/FA;AAGA;AACA;AACA;AACO,MAAM,qBAAqB,SAAS,eAAe,CAAC;AAC3D,IAAI,WAAW,CAAC,uBAAuB,EAAE,WAAW,EAAE,mBAAmB,EAAE,UAAU,EAAE;AACvF,QAAQ,KAAK,CAAC,uBAAuB,EAAE,WAAW,EAAE,mBAAmB,EAAE,UAAU,CAAC,CAAC;AACrF,QAAQ,IAAI,CAAC,kBAAkB,GAAG,WAAW,CAAC,qBAAqB,EAAE,CAAC;AACtE,QAAQ,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;AAC3E,QAAQ,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC5E,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAC1F,QAAQ,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnE,QAAQ,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3E,QAAQ,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3D,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/D,QAAQ,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvE,QAAQ,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjE,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/D,KAAK;AACL,IAAI,QAAQ,GAAG;AACf,QAAQ,KAAK,CAAC,QAAQ,EAAE,CAAC;AACzB,QAAQ,IAAI,CAAC,kBAAkB,CAAC,kBAAkB;AAClD,YAAY,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC;AACxG,QAAQ,QAAQ,CAAC,eAAe,GAAG,QAAQ,CAAC,eAAe,IAAI,QAAQ,CAAC,kBAAkB,CAAC;AAC3F,QAAQ,IAAI,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,EAAE;AACxD,YAAY,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAC1F,SAAS;AACT,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC;AACvF,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,sBAAsB,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC;AAC1F,QAAQ,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;AACxF,QAAQ,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACpF,QAAQ,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AACrF,QAAQ,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;AAC3F,KAAK;AACL,IAAI,UAAU,GAAG;AACjB,QAAQ,MAAM,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,IAAI,QAAQ,CAAC,qBAAqB,CAAC;AACjG,QAAQ,IAAI,QAAQ,CAAC,eAAe,IAAI,kBAAkB,KAAK,IAAI,CAAC,kBAAkB,EAAE;AACxF,YAAY,QAAQ,CAAC,eAAe,EAAE,CAAC;AACvC,SAAS;AACT,QAAQ,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;AACzF,QAAQ,QAAQ,CAAC,mBAAmB,CAAC,mBAAmB,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC;AAC1F,QAAQ,QAAQ,CAAC,mBAAmB,CAAC,sBAAsB,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC;AAC7F,QAAQ,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAC5E,QAAQ,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAC3F,QAAQ,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACvF,QAAQ,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AACxF,QAAQ,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;AAC9F,QAAQ,KAAK,CAAC,UAAU,EAAE,CAAC;AAC3B,KAAK;AACL,IAAI,aAAa,GAAG;AACpB,QAAQ,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,EAAE,CAAC;AACrD,KAAK;AACL,IAAI,iBAAiB,GAAG;AACxB,QAAQ,MAAM,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,IAAI,QAAQ,CAAC,qBAAqB,CAAC;AACjG,QAAQ,IAAI,kBAAkB,KAAK,IAAI,CAAC,kBAAkB,EAAE;AAC5D,YAAYA,YAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAC1C,YAAY,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAC7E,SAAS;AACT,aAAa;AACb,YAAYA,YAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;AACnE,YAAY,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAChF;AACA;AACA;AACA,YAAY,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;AAC/D,YAAY,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK;AACxC,gBAAgB,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACpF,aAAa,CAAC,CAAC;AACf,SAAS;AACT,KAAK;AACL,IAAI,WAAW,CAAC,KAAK,EAAE;AACvB,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE;AAC9C,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AACzE,YAAY,KAAK,CAAC,MAAM;AACxB;AACA;AACA,YAAY,IAAI,CAAC,eAAe,CAAC,CAAC;AAClC,YAAY,IAAI,CAAC,eAAe,CAAC,CAAC;AAClC,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,SAAS,CAAC,KAAK,EAAE;AACrB,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE;AAC9C,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACvE,YAAY,KAAK,CAAC,MAAM;AACxB;AACA;AACA,YAAY,IAAI,CAAC,eAAe,CAAC,CAAC;AAClC,YAAY,IAAI,CAAC,eAAe,CAAC,CAAC;AAClC,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,WAAW,CAAC,KAAK,EAAE;AACvB,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE;AAC9C,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC,WAAW,CAAC;AAChF,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC,YAAY,CAAC;AAClF,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC;AAClC,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC;AAClC,QAAQ,OAAO,IAAI,CAAC,CAAC,GAAG,UAAU,EAAE;AACpC,YAAY,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC;AACjC,SAAS;AACT,QAAQ,OAAO,IAAI,CAAC,CAAC,GAAG,WAAW,EAAE;AACrC,YAAY,IAAI,CAAC,CAAC,IAAI,WAAW,CAAC;AAClC,SAAS;AACT,QAAQ,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE;AAC3B,YAAY,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC;AACjC,SAAS;AACT,QAAQ,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE;AAC3B,YAAY,IAAI,CAAC,CAAC,IAAI,WAAW,CAAC;AAClC,SAAS;AACT,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAC1F,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;AACjG,QAAQ,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AACzE,YAAY,IAAI,CAAC,eAAe,CAAC,CAAC;AAClC,YAAY,IAAI,CAAC,eAAe,CAAC,CAAC;AAClC,YAAY,KAAK,CAAC,CAAC;AACnB,YAAY,KAAK,CAAC,CAAC;AACnB,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,YAAY,CAAC,KAAK,EAAE;AACxB,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE;AAC9C,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAC1E,YAAY,KAAK,CAAC,UAAU;AAC5B;AACA;AACA,YAAY,IAAI,CAAC,eAAe,CAAC,CAAC;AAClC,YAAY,IAAI,CAAC,eAAe,CAAC,CAAC;AAClC,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,eAAe,CAAC,KAAK,EAAE;AAC3B,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE;AAC9C,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAC3E,YAAY,KAAK,CAAC,MAAM;AACxB;AACA;AACA,YAAY,IAAI,CAAC,eAAe,CAAC,CAAC;AAClC,YAAY,IAAI,CAAC,eAAe,CAAC,CAAC;AAClC,SAAS,CAAC,CAAC;AACX,KAAK;AACL;;ACpJA;AACA;AACA;AACO,MAAM,uBAAuB,SAAS,eAAe,CAAC;AAC7D,IAAI,WAAW,CAAC,uBAAuB,EAAE,WAAW,EAAE,mBAAmB,EAAE,UAAU,EAAE;AACvF,QAAQ,KAAK,CAAC,uBAAuB,EAAE,WAAW,EAAE,mBAAmB,EAAE,UAAU,CAAC,CAAC;AACrF,QAAQ,IAAI,CAAC,kBAAkB,GAAG,WAAW,CAAC,qBAAqB,EAAE,CAAC;AACtE,QAAQ,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3D,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/D,QAAQ,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvE,QAAQ,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjE,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/D,QAAQ,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnE,KAAK;AACL,IAAI,QAAQ,GAAG;AACf,QAAQ,KAAK,CAAC,QAAQ,EAAE,CAAC;AACzB,QAAQ,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;AACxF,QAAQ,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;AACxF,QAAQ,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACpF,QAAQ,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAC5F,QAAQ,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AACrF,QAAQ,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;AAC3F,KAAK;AACL,IAAI,UAAU,GAAG;AACjB,QAAQ,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAC3F,QAAQ,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAC3F,QAAQ,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACvF,QAAQ,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAC/F,QAAQ,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AACxF,QAAQ,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;AAC9F,QAAQ,KAAK,CAAC,UAAU,EAAE,CAAC;AAC3B,KAAK;AACL,IAAI,WAAW,CAAC,KAAK,EAAE;AACvB,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE;AAC9C,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/F,QAAQ,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3G,QAAQ,KAAK,CAAC,cAAc,EAAE,CAAC;AAC/B,KAAK;AACL,IAAI,SAAS,CAAC,KAAK,EAAE;AACrB,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE;AAC9C,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/F,QAAQ,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACzG,QAAQ,KAAK,CAAC,cAAc,EAAE,CAAC;AAC/B,KAAK;AACL,IAAI,aAAa,CAAC,KAAK,EAAE;AACzB,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE;AAC9C,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,KAAK,CAAC,cAAc,EAAE,CAAC;AAC/B,KAAK;AACL,IAAI,WAAW,CAAC,KAAK,EAAE;AACvB,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE;AAC9C,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/F,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;AACjG,QAAQ,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AACzE,YAAY,KAAK,CAAC,CAAC;AACnB,YAAY,KAAK,CAAC,CAAC;AACnB,YAAY,KAAK,CAAC,CAAC;AACnB,YAAY,KAAK,CAAC,CAAC;AACnB,SAAS,CAAC,CAAC;AACX,QAAQ,KAAK,CAAC,cAAc,EAAE,CAAC;AAC/B,KAAK;AACL,IAAI,YAAY,CAAC,KAAK,EAAE;AACxB,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE;AAC9C,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/F,QAAQ,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAC1E,YAAY,KAAK,CAAC,UAAU;AAC5B,YAAY,KAAK,CAAC,CAAC;AACnB,YAAY,KAAK,CAAC,CAAC;AACnB,SAAS,CAAC,CAAC;AACX,QAAQ,KAAK,CAAC,cAAc,EAAE,CAAC;AAC/B,KAAK;AACL,IAAI,eAAe,CAAC,KAAK,EAAE;AAC3B,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE;AAC9C,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/F,QAAQ,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7G,KAAK;AACL;;ACxFA;AAEA;AACA;AACA;AACO,MAAM,eAAe,CAAC;AAC7B,IAAI,WAAW,CAAC,uBAAuB,EAAE,WAAW,EAAE,mBAAmB,EAAE;AAC3E,QAAQ,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACtD,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;AACnC,QAAQ,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;AAChC,QAAQ,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;AAC/D,QAAQ,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AACvC,QAAQ,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;AACvD,QAAQ,IAAI,CAAC,kBAAkB,GAAG,WAAW,CAAC,eAAe,EAAE,CAAC;AAChE,QAAQ,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjE,QAAQ,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7D,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/D,KAAK;AACL,IAAI,QAAQ,GAAG;AACf,QAAQ,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC1F,QAAQ,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACtF,QAAQ,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;AACxF,KAAK;AACL,IAAI,UAAU,GAAG;AACjB,QAAQ,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,YAAY,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC7F,QAAQ,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACzF,QAAQ,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAC3F,KAAK;AACL,IAAI,aAAa,CAAC,KAAK,EAAE;AACzB,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;AAC1C,QAAQ,IAAI,MAAM,KAAK,SAAS,EAAE;AAClC,YAAYA,YAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;AACvD,SAAS;AACT,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AACrD,KAAK;AACL,IAAI,WAAW,CAAC,KAAK,EAAE;AACvB,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;AAChE;AACA,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE;AAC1C,YAAY,OAAO,CAAC,GAAG,CAAC,CAAC;AACzB,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AAChD,KAAK;AACL,IAAI,YAAY,CAAC,UAAU,EAAE;AAC7B,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE;AAC9C,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnE,YAAY,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,SAAS;AACT,QAAQ,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC;AACpE,QAAQ,UAAU,CAAC,cAAc,EAAE,CAAC;AACpC,KAAK;AACL,IAAI,UAAU,CAAC,UAAU,EAAE;AAC3B,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE;AAC9C,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC;AAClE;AACA,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnE,YAAY,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,SAAS;AACT,QAAQ,UAAU,CAAC,cAAc,EAAE,CAAC;AACpC,KAAK;AACL,IAAI,WAAW,CAAC,UAAU,EAAE;AAC5B,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE;AAC9C,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;AAC5D,QAAQ,UAAU,CAAC,cAAc,EAAE,CAAC;AACpC,KAAK;AACL,IAAI,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE;AACjC,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE;AAC9C,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC,qBAAqB,EAAE,CAAC;AACxF,QAAQ,MAAM,kBAAkB,GAAG,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC;AACnF,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACjD,YAAY,MAAM,UAAU,GAAG,CAAC,CAAC;AACjC,YAAY,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AACrC,YAAY,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;AAClD,YAAY,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;AACjD,YAAYA,YAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjF,YAAY,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3E,YAAY,QAAQ,IAAI;AACxB,gBAAgB,KAAK,YAAY;AACjC,oBAAoB,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AACzD,wBAAwB,UAAU;AAClC,wBAAwB,KAAK,CAAC,CAAC;AAC/B,wBAAwB,KAAK,CAAC,CAAC;AAC/B,wBAAwB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC;AAC5D,wBAAwB,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;AAC/E,wBAAwB,KAAK,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC;AAC7C,qBAAqB,CAAC,CAAC;AACvB,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,UAAU;AAC/B,oBAAoB,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AACvD,wBAAwB,UAAU;AAClC,wBAAwB,KAAK,CAAC,CAAC;AAC/B,wBAAwB,KAAK,CAAC,CAAC;AAC/B,wBAAwB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC;AAC5D,wBAAwB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,KAAK;AACvD,wBAAwB,KAAK,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC;AAC7C,qBAAqB,CAAC,CAAC;AACvB,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,WAAW;AAChC,oBAAoB,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AACxD,wBAAwB,UAAU;AAClC,wBAAwB,KAAK,CAAC,CAAC;AAC/B,wBAAwB,KAAK,CAAC,CAAC;AAC/B,wBAAwB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC;AAC5D,wBAAwB,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;AAC/E,wBAAwB,KAAK,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC;AAC7C,qBAAqB,CAAC,CAAC;AACvB,oBAAoB,MAAM;AAC1B,aAAa;AACb,SAAS;AACT,KAAK;AACL;;ACtHA;AAEA;AACA;AACA;AACO,MAAM,mBAAmB,CAAC;AACjC,IAAI,WAAW,CAAC,uBAAuB,EAAE,WAAW,EAAE,mBAAmB,EAAE;AAC3E,QAAQ,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;AAC/D,QAAQ,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AACvC,QAAQ,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;AACvD,QAAQ,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjE,QAAQ,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7D,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/D,QAAQ,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC,qBAAqB,EAAE,CAAC;AAC7G,KAAK;AACL,IAAI,QAAQ,GAAG;AACf,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC3E,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACvE,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;AACzE,KAAK;AACL,IAAI,UAAU,GAAG;AACjB,QAAQ,QAAQ,CAAC,mBAAmB,CAAC,YAAY,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC9E,QAAQ,QAAQ,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;AAC1E,QAAQ,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAC5E,KAAK;AACL,IAAI,YAAY,CAAC,KAAK,EAAE;AACxB,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE;AACrG,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,EAAE;AAC1C,YAAY,MAAM,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AACxD,YAAY,IAAI,CAAC,eAAe,GAAG;AACnC,gBAAgB,EAAE,EAAE,WAAW,CAAC,UAAU;AAC1C,gBAAgB,CAAC,EAAE,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC,4BAA4B,CAAC,IAAI;AAC/E,gBAAgB,CAAC,EAAE,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC,4BAA4B,CAAC,GAAG;AAC9E,aAAa,CAAC;AACd,YAAY,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC;AAChF,YAAY,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AACzE,YAAY,kBAAkB,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;AACzD,YAAY,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AACrH,YAAY,MAAM,kBAAkB,GAAG,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC;AACvF,YAAY,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5F,SAAS;AACT,QAAQ,KAAK,CAAC,cAAc,EAAE,CAAC;AAC/B,KAAK;AACL,IAAI,UAAU,CAAC,UAAU,EAAE;AAC3B,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,EAAE;AAC9E,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC;AAC5E,QAAQ,MAAM,kBAAkB,GAAG,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC;AACnF,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnE,YAAY,MAAM,KAAK,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AACvD,YAAY,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE;AAC9D,gBAAgB,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC;AACjF,gBAAgB,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC;AAChF,gBAAgB,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/E,gBAAgB,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9F,gBAAgB,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AACvE,gBAAgB,kBAAkB,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;AAC7D,gBAAgB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC5C,gBAAgB,MAAM;AACtB,aAAa;AACb,SAAS;AACT,QAAQ,UAAU,CAAC,cAAc,EAAE,CAAC;AACpC,KAAK;AACL,IAAI,WAAW,CAAC,UAAU,EAAE;AAC5B,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,EAAE;AAC9E,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,MAAM,kBAAkB,GAAG,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC;AACnF,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC5D,YAAY,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAChD,YAAY,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE;AAC9D,gBAAgB,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC;AACjF,gBAAgB,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC;AAChF,gBAAgB,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/E,gBAAgB,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAC/H,gBAAgB,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1F,gBAAgB,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC;AAC3C,gBAAgB,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC;AAC3C,gBAAgB,MAAM;AACtB,aAAa;AACb,SAAS;AACT,QAAQ,UAAU,CAAC,cAAc,EAAE,CAAC;AACpC,KAAK;AACL;;ACtFA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,eAAe,CAAC,OAAO,EAAE;AACzC,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;AACrC,QAAQ,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;AACtE,YAAY,OAAO,EAAE,CAAC,CAAC,OAAO;AAC9B,YAAY,OAAO,EAAE,CAAC,CAAC,OAAO;AAC9B,YAAY,KAAK,EAAE,CAAC,CAAC,KAAK;AAC1B,SAAS,CAAC,CAAC,CAAC;AACZ,QAAQ,IAAI,EAAE,OAAO,CAAC,IAAI;AAC1B,KAAK,CAAC,CAAC,CAAC;AACR;;AChBA;AAEA;AACA;AACA;AACO,IAAI,aAAa,CAAC;AACzB,CAAC,UAAU,aAAa,EAAE;AAC1B,IAAI,aAAa,CAAC,aAAa,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC,GAAG,0BAA0B,CAAC;AAC9F,IAAI,aAAa,CAAC,aAAa,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,GAAG,yBAAyB,CAAC;AAC5F,IAAI,aAAa,CAAC,aAAa,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,GAAG,wBAAwB,CAAC;AAC1F,IAAI,aAAa,CAAC,aAAa,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,GAAG,uBAAuB,CAAC;AACxF,IAAI,aAAa,CAAC,aAAa,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC;AACtE,IAAI,aAAa,CAAC,aAAa,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,eAAe,CAAC;AACxE,IAAI,aAAa,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC;AACpE,IAAI,aAAa,CAAC,aAAa,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC;AACtE,IAAI,aAAa,CAAC,aAAa,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC;AACtE,IAAI,aAAa,CAAC,aAAa,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,gBAAgB,CAAC;AAC1E,IAAI,aAAa,CAAC,aAAa,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC,GAAG,iBAAiB,CAAC;AAC7E,IAAI,aAAa,CAAC,aAAa,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,GAAG,kBAAkB,CAAC;AAC/E,IAAI,aAAa,CAAC,aAAa,CAAC,sBAAsB,CAAC,GAAG,EAAE,CAAC,GAAG,sBAAsB,CAAC;AACvF,IAAI,aAAa,CAAC,aAAa,CAAC,yBAAyB,CAAC,GAAG,EAAE,CAAC,GAAG,yBAAyB,CAAC;AAC7F,IAAI,aAAa,CAAC,aAAa,CAAC,uBAAuB,CAAC,GAAG,EAAE,CAAC,GAAG,uBAAuB,CAAC;AACzF,IAAI,aAAa,CAAC,aAAa,CAAC,wBAAwB,CAAC,GAAG,EAAE,CAAC,GAAG,wBAAwB,CAAC;AAC3F,IAAI,aAAa,CAAC,aAAa,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,GAAG,cAAc,CAAC;AACvE;AACA,IAAI,aAAa,CAAC,aAAa,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,GAAG,qBAAqB,CAAC;AACpF,IAAI,aAAa,CAAC,aAAa,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,GAAG,mBAAmB,CAAC;AAChF,IAAI,aAAa,CAAC,aAAa,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,GAAG,sBAAsB,CAAC;AACtF,IAAI,aAAa,CAAC,aAAa,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,GAAG,oBAAoB,CAAC;AAClF,CAAC,EAAE,aAAa,KAAK,aAAa,GAAG,EAAE,CAAC,CAAC,CAAC;AAC1C;AACA;AACA;AACO,MAAM,iBAAiB,CAAC;AAC/B,IAAI,WAAW,CAAC,uBAAuB,EAAE;AACzC,QAAQ,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;AAC/D,QAAQ,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7E,QAAQ,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnF,QAAQ,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnE,QAAQ,IAAI,CAAC,qBAAqB,GAAG,CAAC,MAAM,CAAC,wBAAwB;AACrE,YAAY,MAAM,CAAC,2BAA2B;AAC9C,YAAY,MAAM,CAAC,qBAAqB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACvD,KAAK;AACL,IAAI,QAAQ,GAAG;AACf,QAAQ,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC3E,QAAQ,MAAM,aAAa,GAAG,MAAM,CAAC;AACrC,QAAQ,IAAI,cAAc,IAAI,aAAa,EAAE;AAC7C,YAAY,MAAM,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC;AACzF,YAAY,MAAM,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;AAC/F,SAAS;AACT,aAAa,IAAI,oBAAoB,IAAI,aAAa,EAAE;AACxD,YAAY,MAAM,CAAC,gBAAgB,CAAC,wBAAwB,EAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC;AAC/F,YAAY,MAAM,CAAC,gBAAgB,CAAC,2BAA2B,EAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;AACrG,SAAS;AACT,QAAQ,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AAC9B,QAAQ,IAAI,SAAS,CAAC,WAAW,EAAE;AACnC,YAAY,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,WAAW,EAAE,EAAE;AAC3D,gBAAgB,IAAI,OAAO,EAAE;AAC7B,oBAAoB,IAAI,CAAC,kBAAkB,CAAC,IAAI,YAAY,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AAC/F,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL,IAAI,UAAU,GAAG;AACjB,QAAQ,MAAM,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC;AACxF,QAAQ,MAAM,CAAC,mBAAmB,CAAC,qBAAqB,EAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;AAC9F,QAAQ,MAAM,CAAC,mBAAmB,CAAC,wBAAwB,EAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC;AAC9F,QAAQ,MAAM,CAAC,mBAAmB,CAAC,2BAA2B,EAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;AACpG,QAAQ,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE;AACnD,YAAY,IAAI,UAAU,IAAI,UAAU,CAAC,EAAE,KAAK,SAAS,EAAE;AAC3D,gBAAgB,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5G,aAAa;AACb,SAAS;AACT,QAAQ,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AAC9B,KAAK;AACL,IAAI,yBAAyB,CAAC,SAAS,EAAE;AACzC,QAAQ,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE;AACnD,YAAY,IAAI,UAAU,IAAI,UAAU,CAAC,EAAE,KAAK,SAAS,EAAE;AAC3D,gBAAgB,UAAU,CAAC,EAAE,GAAG,SAAS,CAAC;AAC1C,gBAAgB,MAAM;AACtB,aAAa;AACb,SAAS;AACT,KAAK;AACL,IAAI,kBAAkB,CAAC,KAAK,EAAE;AAC9B,QAAQ,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AACtC,QAAQ,MAAM,aAAa,GAAG;AAC9B,YAAY,YAAY,EAAE,eAAe,CAAC,OAAO,CAAC;AAClD,YAAY,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC;AAC/C,YAAY,EAAE,EAAE,SAAS;AACzB,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC;AACxD,QAAQ,MAAM,CAAC,qBAAqB,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;AAChE,QAAQ,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC;AAClF,KAAK;AACL,IAAI,qBAAqB,CAAC,KAAK,EAAE;AACjC,QAAQ,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AACtC,QAAQ,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAClE,QAAQ,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC/C,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,UAAU,KAAK,UAAU,KAAK,SAAS,CAAC,CAAC;AAC7F,QAAQ,IAAI,iBAAiB,CAAC,EAAE,KAAK,SAAS,EAAE;AAChD,YAAY,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;AACvF,gBAAgB,iBAAiB,CAAC,EAAE;AACpC,aAAa,CAAC,CAAC;AACf,SAAS;AACT,KAAK;AACL,IAAI,YAAY,GAAG;AACnB,QAAQ,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW;AAC9C,cAAc,SAAS,CAAC,WAAW,EAAE;AACrC,cAAc,SAAS,CAAC,iBAAiB;AACzC,kBAAkB,SAAS,CAAC,iBAAiB,EAAE;AAC/C,kBAAkB,EAAE,CAAC;AACrB,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAClD,YAAY,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE;AAClF,gBAAgB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC/E,aAAa;AACb,SAAS;AACT,KAAK;AACL,IAAI,YAAY,GAAG;AACnB,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;AAC5B,QAAQ,MAAM,kBAAkB,GAAG,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC;AACnF;AACA,QAAQ,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE;AACnD,YAAY,IAAI,CAAC,UAAU,EAAE;AAC7B,gBAAgB,SAAS;AACzB,aAAa;AACb;AACA,YAAY,MAAM,YAAY,GAAG,UAAU,CAAC,EAAE,KAAK,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC;AACpH,YAAY,MAAM,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC;AACzD,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7E,gBAAgB,MAAM,aAAa,GAAG,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACzE,gBAAgB,MAAM,cAAc,GAAG,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACvE,gBAAgB,IAAI,aAAa,CAAC,OAAO,EAAE;AAC3C;AACA,oBAAoB,IAAI,CAAC,IAAI,aAAa,CAAC,WAAW,EAAE;AACxD;AACA,wBAAwB,kBAAkB,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AACxG,qBAAqB;AACrB,yBAAyB,IAAI,CAAC,IAAI,aAAa,CAAC,YAAY,EAAE;AAC9D;AACA,wBAAwB,kBAAkB,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AACxG,qBAAqB;AACrB,yBAAyB;AACzB,wBAAwB,kBAAkB,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;AACvE,4BAA4B,YAAY;AACxC,4BAA4B,CAAC;AAC7B,4BAA4B,cAAc,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC;AAC1D,yBAAyB,CAAC,CAAC;AAC3B,qBAAqB;AACrB,iBAAiB;AACjB,qBAAqB,IAAI,CAAC,aAAa,CAAC,OAAO,IAAI,cAAc,CAAC,OAAO,EAAE;AAC3E;AACA,oBAAoB,IAAI,CAAC,IAAI,aAAa,CAAC,WAAW,EAAE;AACxD;AACA,wBAAwB,kBAAkB,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACtF,qBAAqB;AACrB,yBAAyB,IAAI,CAAC,IAAI,aAAa,CAAC,YAAY,EAAE;AAC9D;AACA,wBAAwB,kBAAkB,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACtF,qBAAqB;AACrB,yBAAyB;AACzB,wBAAwB,kBAAkB,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9F,qBAAqB;AACrB,iBAAiB;AACjB,aAAa;AACb;AACA,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AAClE;AACA,gBAAgB,MAAM,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE;AACA;AACA,gBAAgB,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3E;AACA,gBAAgB,kBAAkB,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAClF,gBAAgB,kBAAkB,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAClF,aAAa;AACb,YAAY,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AACzE,YAAY,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,SAAS,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;AACxF,SAAS;AACT,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AACzC,YAAY,IAAI,CAAC,qBAAqB,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;AAClE,SAAS;AACT,KAAK;AACL,IAAI,cAAc,CAAC,CAAC,EAAE;AACtB;AACA;AACA,QAAQ,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE;AACnD,YAAY,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,EAAE,KAAK,SAAS,EAAE;AAC5D,gBAAgB,SAAS;AACzB,aAAa;AACb,YAAY,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;AACxG,SAAS;AACT,KAAK;AACL;;AChMA;AASA;AACA;AACA;AACO,MAAM,mBAAmB,CAAC;AACjC;AACA;AACA;AACA;AACA;AACA,IAAI,WAAW,CAAC,0BAA0B,EAAE,oBAAoB,EAAE,mBAAmB,EAAE;AACvF,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;AAC3C,QAAQ,IAAI,CAAC,0BAA0B,GAAG,0BAA0B,CAAC;AACrE,QAAQ,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;AACzD,QAAQ,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;AACvD,KAAK;AACL;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,MAAM,EAAE;AAC7B,QAAQA,YAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;AAChD,QAAQ,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,0BAA0B,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACpH,QAAQ,kBAAkB,CAAC,QAAQ,EAAE,CAAC;AACtC,QAAQ,OAAO,kBAAkB,CAAC;AAClC,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,aAAa,CAAC,aAAa,EAAE;AACjC,QAAQA,YAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;AAC7C,QAAQ,IAAI,eAAe,CAAC;AAC5B,QAAQ,IAAI,aAAa,IAAI,iBAAiB,CAAC,aAAa,EAAE;AAC9D,YAAY,eAAe,GAAG,IAAI,uBAAuB,CAAC,IAAI,CAAC,0BAA0B,EAAE,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACjK,SAAS;AACT,aAAa;AACb,YAAY,eAAe,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,0BAA0B,EAAE,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAC/J,SAAS;AACT,QAAQ,eAAe,CAAC,QAAQ,EAAE,CAAC;AACnC,QAAQ,OAAO,eAAe,CAAC;AAC/B,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,aAAa,CAAC,cAAc,EAAE;AAClC,QAAQA,YAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AACzC,QAAQ,IAAI,eAAe,CAAC;AAC5B,QAAQ,IAAI,cAAc,EAAE;AAC5B,YAAY,eAAe,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,0BAA0B,EAAE,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAC5I,SAAS;AACT,aAAa;AACb,YAAY,eAAe,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,0BAA0B,EAAE,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;AACxI,SAAS;AACT,QAAQ,eAAe,CAAC,QAAQ,EAAE,CAAC;AACnC,QAAQ,OAAO,eAAe,CAAC;AAC/B,KAAK;AACL;AACA;AACA;AACA,IAAI,eAAe,GAAG;AACtB,QAAQA,YAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AACzC,QAAQ,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;AACzF,QAAQ,iBAAiB,CAAC,QAAQ,EAAE,CAAC;AACrC,QAAQ,OAAO,iBAAiB,CAAC;AACjC,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,MAAM,UAAU,CAAC;AACxB,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AAC7B,QAAQ,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AAC7B,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC;AAC/B,KAAK;AACL;;AC1FA;AAGA;AACA;AACA;AACO,MAAM,WAAW,CAAC;AACzB;AACA;AACA;AACA;AACA,IAAI,WAAW,CAAC,kBAAkB,EAAE,MAAM,EAAE;AAC5C,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AACpD,QAAQ,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC5D,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AAC7B,QAAQ,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,gBAAgB,CAAC;AAChD,QAAQ,IAAI,CAAC,YAAY,CAAC,uBAAuB,GAAG,IAAI,CAAC;AACzD,QAAQ,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC;AAC7C,QAAQ,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;AAC/C,QAAQ,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;AAChD,QAAQ,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;AACtD,QAAQ,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC;AACtD,QAAQ,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC1D,QAAQ,IAAI,CAAC,sBAAsB,GAAG,MAAM;AAC5C,YAAY,OAAO,CAAC,GAAG,CAAC,iFAAiF,CAAC,CAAC;AAC3G,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,iCAAiC,GAAG,MAAM;AACvD,YAAY,OAAO,CAAC,GAAG,CAAC,0GAA0G,CAAC,CAAC;AACpI,SAAS,CAAC;AACV;AACA,QAAQ,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,MAAM;AAC1C,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;AAC5E,gBAAgB,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;AACzC,aAAa;AACb,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;AAC1C,gBAAgB,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;AACzC,aAAa;AACb,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,YAAY,CAAC,gBAAgB,GAAG,MAAM;AACnD,YAAY,IAAI,CAAC,kBAAkB,EAAE,CAAC;AACtC,SAAS,CAAC;AACV;AACA,QAAQ,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,iBAAiB,EAAE,EAAE,IAAI,CAAC,CAAC;AAChF,QAAQ,MAAM,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;AACvF,KAAK;AACL,IAAI,OAAO,GAAG;AACd,QAAQ,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,EAAE,CAAC;AACnC,QAAQ,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC;AAC3C,QAAQ,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;AACnC,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE;AAC/B,YAAY,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,EAAE,CAAC;AACvC,YAAY,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC;AAC/C,YAAY,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;AACvC,SAAS;AACT,KAAK;AACL,IAAI,eAAe,CAAC,YAAY,EAAE;AAClC,QAAQ,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACzC,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,IAAI,GAAG;AACX,QAAQ,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AACnF,QAAQ,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;AACpF,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;AACxC,KAAK;AACL;AACA;AACA;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;AACxC,KAAK;AACL;AACA;AACA;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,CAAC,CAAC;AAC9F,KAAK;AACL;AACA;AACA;AACA,IAAI,cAAc,GAAG;AACrB,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,KAAK,IAAI,CAAC;AACjG,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,eAAe,GAAG;AACtB,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC;AACjC,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,qBAAqB,GAAG;AAC5B,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;AACjG,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,eAAe,CAAC,OAAO,EAAE;AAC7B;AACA,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;AAC/C,QAAQ,YAAY,CAAC,SAAS;AAC9B,aAAa,SAAS,EAAE;AACxB,aAAa,OAAO,CAAC,CAAC,KAAK,MAAM,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;AAC3D,KAAK;AACL;AACA;AACA;AACA,IAAI,kBAAkB,GAAG;AACzB;AACA,KAAK;AACL;AACA;AACA;AACA,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,YAAY,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AACpD,QAAQ,IAAI,CAAC,wBAAwB,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM;AAChE,YAAY,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACrC,SAAS,EAAE,GAAG,CAAC,CAAC;AAChB,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,iBAAiB,GAAG;AACxB,QAAQ,MAAM,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAChE,QAAQ,IAAI,CAAC,kBAAkB,EAAE;AACjC,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,IAAI,CAAC,qBAAqB,EAAE,CAAC;AACrC,QAAQ,IAAI,kBAAkB,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;AACjE,YAAY,IAAI,CAAC,sBAAsB,EAAE,CAAC;AAC1C,YAAY,OAAO;AACnB,SAAS;AACT;AACA,QAAQ,IAAI,CAAC,oCAAoC,EAAE,CAAC;AACpD,QAAQ,IAAI,CAAC,sBAAsB,EAAE,CAAC;AACtC,KAAK;AACL;AACA;AACA;AACA,IAAI,oCAAoC,GAAG;AAC3C,QAAQ,MAAM,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAChE;AACA,QAAQ,MAAM,UAAU,GAAG,MAAM,CAAC;AAClC,QAAQ,MAAM,WAAW,GAAG,MAAM,CAAC;AACnC,QAAQ,MAAM,QAAQ,GAAG,CAAC,CAAC;AAC3B,QAAQ,MAAM,SAAS,GAAG,CAAC,CAAC;AAC5B,QAAQ,kBAAkB,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO;AACxD,YAAY,QAAQ;AACpB,YAAY,YAAY;AACxB,YAAY,SAAS;AACrB,YAAY,aAAa;AACzB,YAAY,UAAU;AACtB,YAAY,YAAY;AACxB,YAAY,WAAW;AACvB,YAAY,oBAAoB,CAAC,CAAC;AAClC,KAAK;AACL,IAAI,qBAAqB,GAAG;AAC5B,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,uBAAuB,CAAC,EAAE;AACvE,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AACzC,QAAQ,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,GAAG,GAAG,EAAE;AAC9C,YAAY,MAAM,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;AACpE,YAAY,IAAI,CAAC,kBAAkB,EAAE;AACrC,gBAAgB,OAAO;AACvB,aAAa;AACb,YAAY,IAAI,CAAC,iCAAiC,CAAC,kBAAkB,CAAC,WAAW,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC;AACpH,YAAY,IAAI,CAAC,eAAe,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AACxD,SAAS;AACT,aAAa;AACb,YAAYA,YAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;AACzD,YAAY,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AACnD,YAAY,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,qBAAqB,EAAE,EAAE,GAAG,CAAC,CAAC;AAClG,SAAS;AACT,KAAK;AACL;;ACvLA;AAIO,MAAM,uBAAuB,CAAC;AACrC,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,kBAAkB,GAAG,IAAI,GAAG,EAAE,CAAC;AAC5C,QAAQ,IAAI,CAAC,oBAAoB,GAAG,IAAI,GAAG,EAAE,CAAC;AAC9C,QAAQ,IAAI,CAAC,kBAAkB,GAAG,IAAI,GAAG,EAAE,CAAC;AAC5C,QAAQ,IAAI,CAAC,oBAAoB,GAAG,IAAI,GAAG,EAAE,CAAC;AAC9C,KAAK;AACL;AACA;AACA;AACA,IAAI,uBAAuB,GAAG;AAC9B;AACA;AACA;AACA,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,eAAe,EAAE;AACrD,YAAY,EAAE,EAAE,CAAC;AACjB,YAAY,SAAS,EAAE,EAAE;AACzB,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,uBAAuB,EAAE;AAC7D,YAAY,EAAE,EAAE,CAAC;AACjB,YAAY,SAAS,EAAE,EAAE;AACzB,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,EAAE;AAClD,YAAY,EAAE,EAAE,CAAC;AACjB,YAAY,SAAS,EAAE,EAAE;AACzB,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,uBAAuB,EAAE;AAC7D,YAAY,EAAE,EAAE,CAAC;AACjB,YAAY,SAAS,EAAE,EAAE;AACzB,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,gBAAgB,EAAE;AACtD,YAAY,EAAE,EAAE,CAAC;AACjB,YAAY,SAAS,EAAE,EAAE;AACzB,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,eAAe,EAAE;AACrD,YAAY,EAAE,EAAE,CAAC;AACjB,YAAY,SAAS,EAAE,EAAE;AACzB,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,aAAa,EAAE;AACnD,YAAY,EAAE,EAAE,CAAC;AACjB,YAAY,SAAS,EAAE,CAAC,QAAQ,CAAC;AACjC,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,wBAAwB,EAAE;AAC9D,YAAY,EAAE,EAAE,CAAC;AACjB,YAAY,SAAS,EAAE,EAAE;AACzB,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,EAAE;AAChD,YAAY,EAAE,EAAE,CAAC;AACjB,YAAY,SAAS,EAAE,EAAE;AACzB,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,wBAAwB,EAAE;AAC9D,YAAY,EAAE,EAAE,CAAC;AACjB,YAAY,SAAS,EAAE,EAAE;AACzB,SAAS,CAAC,CAAC;AACX;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,eAAe,EAAE;AACrD,YAAY,EAAE,EAAE,EAAE;AAClB,YAAY,SAAS,EAAE,CAAC,QAAQ,CAAC;AACjC,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,EAAE;AAC/C,YAAY,EAAE,EAAE,EAAE;AAClB,YAAY,SAAS,EAAE,CAAC,QAAQ,CAAC;AACjC,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,cAAc,EAAE;AACpD,YAAY,EAAE,EAAE,EAAE;AAClB,YAAY,SAAS,EAAE,CAAC,QAAQ,CAAC;AACjC,SAAS,CAAC,CAAC;AACX;AACA,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,EAAE;AAC/C,YAAY,EAAE,EAAE,EAAE;AAClB;AACA,YAAY,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;AACzC,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,EAAE;AAC7C,YAAY,EAAE,EAAE,EAAE;AAClB;AACA,YAAY,SAAS,EAAE,CAAC,OAAO,CAAC;AAChC,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,EAAE;AAChD,YAAY,EAAE,EAAE,EAAE;AAClB;AACA,YAAY,SAAS,EAAE,CAAC,QAAQ,CAAC;AACjC,SAAS,CAAC,CAAC;AACX;AACA,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,EAAE;AAClD,YAAY,EAAE,EAAE,EAAE;AAClB,YAAY,SAAS,EAAE,EAAE;AACzB,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,EAAE;AAClD,YAAY,EAAE,EAAE,EAAE;AAClB,YAAY,SAAS,EAAE,EAAE;AACzB,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,EAAE;AACjD,YAAY,EAAE,EAAE,EAAE;AAClB;AACA,YAAY,SAAS,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACpD,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,EAAE;AAC/C,YAAY,EAAE,EAAE,EAAE;AAClB;AACA,YAAY,SAAS,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACpD,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,EAAE;AACjD,YAAY,EAAE,EAAE,EAAE;AAClB;AACA,YAAY,SAAS,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC;AAC7D,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,EAAE;AAClD,YAAY,EAAE,EAAE,EAAE;AAClB;AACA,YAAY,SAAS,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACpD,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,aAAa,EAAE;AACnD,YAAY,EAAE,EAAE,EAAE;AAClB;AACA,YAAY,SAAS,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACpD,SAAS,CAAC,CAAC;AACX;AACA,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,EAAE;AAClD,YAAY,EAAE,EAAE,EAAE;AAClB;AACA,YAAY,SAAS,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AAC/E,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,EAAE;AAChD,YAAY,EAAE,EAAE,EAAE;AAClB;AACA,YAAY,SAAS,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AAC/E,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,EAAE;AACjD,YAAY,EAAE,EAAE,EAAE;AAClB;AACA,YAAY,SAAS,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AAC/E,SAAS,CAAC,CAAC;AACX;AACA,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,kBAAkB,EAAE;AACxD,YAAY,EAAE,EAAE,EAAE;AAClB,YAAY,SAAS,EAAE,EAAE;AACzB,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,sBAAsB,EAAE;AAC5D,YAAY,EAAE,EAAE,EAAE;AAClB;AACA,YAAY,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AAClD,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,uBAAuB,EAAE;AAC7D,YAAY,EAAE,EAAE,EAAE;AAClB;AACA,YAAY,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AAClD,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,eAAe,EAAE;AACrD,YAAY,EAAE,EAAE,EAAE;AAClB;AACA,YAAY,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC;AACnD,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,qBAAqB,EAAE;AAC3D,YAAY,EAAE,EAAE,EAAE;AAClB;AACA,YAAY,SAAS,EAAE,CAAC,OAAO,CAAC;AAChC,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,yBAAyB,CAAC,CAAC;AACpE,QAAQ,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AACrD,QAAQ,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AACpD,QAAQ,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;AACxD,QAAQ,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;AAC1D,QAAQ,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;AAC9D,QAAQ,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;AACxD,QAAQ,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;AAC5D,QAAQ,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;AAC1D,QAAQ,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;AACzD,QAAQ,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;AAC1D,QAAQ,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;AACtD,QAAQ,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,EAAE,uBAAuB,CAAC,CAAC;AACnE,QAAQ,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC;AAC7D,QAAQ,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,EAAE,wBAAwB,CAAC,CAAC;AACpE,QAAQ,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;AACvD,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,sBAAsB,CAAC,gBAAgB,EAAE,WAAW,EAAE,cAAc,EAAE;AAC1E,QAAQ,QAAQ,gBAAgB;AAChC,YAAY,KAAK,gBAAgB,CAAC,UAAU;AAC5C,gBAAgB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AACzE,gBAAgB,MAAM;AACtB,YAAY,KAAK,gBAAgB,CAAC,YAAY;AAC9C,gBAAgB,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AAC3E,gBAAgB,MAAM;AACtB,YAAY;AACZ,gBAAgBA,YAAM,CAAC,IAAI,CAAC,CAAC,0BAA0B,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAC7E,SAAS;AACT,KAAK;AACL,CAAC;AACD;AACA;AACA;AACO,IAAI,gBAAgB,CAAC;AAC5B,CAAC,UAAU,gBAAgB,EAAE;AAC7B,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC;AACxE,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC;AAC5E,CAAC,EAAE,gBAAgB,KAAK,gBAAgB,GAAG,EAAE,CAAC,CAAC;;AChN/C;AAEO,MAAM,kBAAkB,CAAC;AAChC,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,sBAAsB,GAAG,IAAI,GAAG,EAAE,CAAC;AAChD,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,wBAAwB,CAAC,IAAI,EAAE,QAAQ,EAAE;AAC7C,QAAQ,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACxD,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,2BAA2B,CAAC,IAAI,EAAE;AACtC,QAAQ,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACjD,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,UAAU,CAAC,OAAO,EAAE;AACxB,QAAQA,YAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;AAC9D,QAAQ,MAAM,SAAS,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7E,QAAQA,YAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC/B,QAAQ,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK;AAC1D,YAAY,QAAQ,CAAC,SAAS,CAAC,CAAC;AAChC,SAAS,CAAC,CAAC;AACX,KAAK;AACL;;ACjCA;AAEO,MAAM,qBAAqB,CAAC;AACnC;AACA;AACA;AACA;AACA,IAAI,WAAW,CAAC,iBAAiB,EAAE,6BAA6B,EAAE;AAClE,QAAQ,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;AACnD,QAAQ,IAAI,CAAC,6BAA6B,GAAG,6BAA6B,CAAC;AAC3E,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,qBAAqB,CAAC,WAAW,EAAE,WAAW,EAAE;AACpD,QAAQ,IAAI,WAAW,KAAK,SAAS,EAAE;AACvC,YAAY,WAAW,GAAG,EAAE,CAAC;AAC7B,SAAS;AACT,QAAQ,MAAM,kBAAkB,GAAG,IAAI,CAAC,6BAA6B,CAAC,kBAAkB,CAAC;AACzF,QAAQ,MAAM,aAAa,GAAG,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAClE,QAAQ,IAAI,aAAa,KAAK,SAAS,EAAE;AACzC,YAAYA,YAAM,CAAC,KAAK,CAAC,CAAC,+DAA+D,EAAE,WAAW,CAAC,iHAAiH,CAAC,CAAC,CAAC;AAC3N,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,IAAI,aAAa,CAAC,SAAS,IAAI,WAAW,IAAI,aAAa,CAAC,SAAS,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM,EAAE;AAC7G,YAAYA,YAAM,CAAC,KAAK,CAAC,CAAC,gEAAgE,EAAE,aAAa,CAAC,SAAS;AACnH,iBAAiB,GAAG,CAAC,CAAC,OAAO,KAAK;AAClC,gBAAgB,QAAQ,OAAO;AAC/B,oBAAoB,KAAK,OAAO,CAAC;AACjC,oBAAoB,KAAK,QAAQ,CAAC;AAClC,oBAAoB,KAAK,OAAO,CAAC;AACjC,oBAAoB,KAAK,OAAO,CAAC;AACjC,oBAAoB,KAAK,QAAQ,CAAC;AAClC,oBAAoB;AACpB,wBAAwB,OAAO,QAAQ,CAAC;AACxC,oBAAoB,KAAK,QAAQ;AACjC,wBAAwB,OAAO,QAAQ,CAAC;AACxC,iBAAiB;AACjB,aAAa,CAAC;AACd,iBAAiB,QAAQ,EAAE,CAAC,kBAAkB,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,OAAO,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7G,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,IAAI,UAAU,GAAG,CAAC,CAAC;AAC3B,QAAQ,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAC9C;AACA,QAAQ,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,KAAK;AAC9C,YAAY,MAAM,IAAI,GAAG,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AACtD,YAAY,QAAQ,IAAI;AACxB,gBAAgB,KAAK,OAAO;AAC5B,oBAAoB,UAAU,IAAI,CAAC,CAAC;AACpC,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,QAAQ;AAC7B,oBAAoB,UAAU,IAAI,CAAC,CAAC;AACpC,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,OAAO;AAC5B,oBAAoB,UAAU,IAAI,CAAC,CAAC;AACpC,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,OAAO;AAC5B,oBAAoB,UAAU,IAAI,CAAC,CAAC;AACpC,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,QAAQ;AAC7B,oBAAoB,UAAU,IAAI,CAAC,CAAC;AACpC,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,QAAQ;AAC7B;AACA,oBAAoB,UAAU,IAAI,CAAC,CAAC;AACpC;AACA,oBAAoB,UAAU,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;AACzE,oBAAoB,MAAM;AAC1B,aAAa;AACb,SAAS,CAAC,CAAC;AACX,QAAQ,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,WAAW,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;AACnE,QAAQ,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;AAC3C,QAAQ,IAAI,UAAU,GAAG,CAAC,CAAC;AAC3B,QAAQ,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,KAAK;AAC9C,YAAY,MAAM,IAAI,GAAG,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AACtD,YAAY,QAAQ,IAAI;AACxB,gBAAgB,KAAK,OAAO;AAC5B,oBAAoB,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACvD,oBAAoB,UAAU,IAAI,CAAC,CAAC;AACpC,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,QAAQ;AAC7B,oBAAoB,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAC9D,oBAAoB,UAAU,IAAI,CAAC,CAAC;AACpC,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,OAAO;AAC5B,oBAAoB,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAC7D,oBAAoB,UAAU,IAAI,CAAC,CAAC;AACpC,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,OAAO;AAC5B,oBAAoB,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAC/D,oBAAoB,UAAU,IAAI,CAAC,CAAC;AACpC,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,QAAQ;AAC7B,oBAAoB,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAC/D,oBAAoB,UAAU,IAAI,CAAC,CAAC;AACpC,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,QAAQ;AAC7B,oBAAoB,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACrE,oBAAoB,UAAU,IAAI,CAAC,CAAC;AACpC,oBAAoB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7D,wBAAwB,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAChF,wBAAwB,UAAU,IAAI,CAAC,CAAC;AACxC,qBAAqB;AACrB,oBAAoB,MAAM;AAC1B,aAAa;AACb,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE;AAC/C,YAAYA,YAAM,CAAC,IAAI,CAAC,CAAC,wDAAwD,EAAE,WAAW,CAAC,GAAG,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACnI,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACrD,KAAK;AACL;;ACpHA;AACO,MAAM,4BAA4B,CAAC;AAC1C;AACA;AACA;AACA,IAAI,WAAW,CAAC,qBAAqB,EAAE;AACvC,QAAQ,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;AAC3D,KAAK;AACL;AACA;AACA;AACA,IAAI,yBAAyB,GAAG;AAChC,QAAQ,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,uBAAuB,CAAC,CAAC;AAClF,KAAK;AACL;AACA;AACA;AACA,IAAI,iBAAiB,GAAG;AACxB,QAAQ,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;AACvE,KAAK;AACL;AACA;AACA;AACA,IAAI,yBAAyB,GAAG;AAChC,QAAQ,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,uBAAuB,CAAC,CAAC;AAClF,KAAK;AACL;AACA;AACA;AACA,IAAI,kBAAkB,GAAG;AACzB,QAAQ,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;AAC3E,KAAK;AACL;AACA;AACA;AACA,IAAI,iBAAiB,GAAG;AACxB,QAAQ,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC;AAC1E,KAAK;AACL;AACA;AACA;AACA,IAAI,0BAA0B,GAAG;AACjC,QAAQ,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,wBAAwB,CAAC,CAAC;AACnF,KAAK;AACL;;AC5CA;AAEA;AACA;AACA;AACO,MAAM,iBAAiB,CAAC;AAC/B;AACA;AACA;AACA,IAAI,WAAW,CAAC,mBAAmB,EAAE;AACrC,QAAQ,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;AACvD,KAAK;AACL,IAAI,OAAO,GAAG;AACd,QAAQ,QAAQ,IAAI,CAAC,mBAAmB,CAAC,sBAAsB,EAAE,CAAC,WAAW,KAAK,SAAS;AAC3F,YAAY,IAAI,CAAC,mBAAmB,CAAC,sBAAsB,EAAE,CAAC,WAAW,CAAC,UAAU,IAAI,MAAM,EAAE;AAChG,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,QAAQ,CAAC,IAAI,EAAE;AACnB;AACA,QAAQ,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,sBAAsB,EAAE,CAAC;AACtF,QAAQ,IAAI,mBAAmB,CAAC,WAAW,CAAC,UAAU,IAAI,MAAM,EAAE;AAClE,YAAY,mBAAmB,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvD,YAAYA,YAAM,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACjE,YAAY,IAAI,CAAC,8BAA8B,EAAE,CAAC;AAClD,SAAS;AACT,aAAa;AACb,YAAYA,YAAM,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,IAAI,8BAA8B,GAAG;AACrC;AACA,KAAK;AACL;;ACtCA;AACA;AACA;AACA;AACO,MAAM,oBAAoB,CAAC;AAClC;AACA;AACA,IAAI,WAAW,CAAC,UAAU,EAAE,SAAS,EAAE;AACvC,QAAQ,MAAM,iBAAiB,GAAG,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC;AACvE,QAAQ,MAAM,gBAAgB,GAAG,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC;AACpE,QAAQ,IAAI,CAAC,cAAc,GAAG,iBAAiB,GAAG,gBAAgB,CAAC;AACnE,QAAQ,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AACrC,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc;AACxC,cAAc,iBAAiB,GAAG,gBAAgB;AAClD,cAAc,gBAAgB,GAAG,iBAAiB,CAAC;AACnD,KAAK;AACL,IAAI,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE;AAC5B,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc;AAC/C,cAAc,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK;AACvC,cAAc,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AACnE,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc;AAC/C,cAAc,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG;AACnE,cAAc,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;AACzC,QAAQ,IAAI,WAAW,GAAG,GAAG,IAAI,WAAW,GAAG,GAAG,IAAI,WAAW,GAAG,GAAG,IAAI,WAAW,GAAG,GAAG,EAAE;AAC9F,YAAY,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;AAC1D,SAAS;AACT,aAAa;AACb,YAAY,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,WAAW,GAAG,KAAK,EAAE,CAAC,EAAE,WAAW,GAAG,KAAK,EAAE,CAAC;AACrF,SAAS;AACT,KAAK;AACL,IAAI,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE;AAC1B,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc;AAC/C,cAAc,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AAC/C,cAAc,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAC/D,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc;AAC/C,cAAc,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;AAC/D,cAAc,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACjD,QAAQ,OAAO,EAAE,CAAC,EAAE,WAAW,GAAG,KAAK,EAAE,CAAC,EAAE,WAAW,GAAG,KAAK,EAAE,CAAC;AAClE,KAAK;AACL,IAAI,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE;AAC9B,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;AACnG,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;AACnG,QAAQ,OAAO,EAAE,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;AACnG,KAAK;AACL;;AC5CA;AACA;AACA;AACA;AACO,MAAM,gBAAgB,CAAC;AAC9B,IAAI,WAAW,CAAC,MAAM,EAAE;AACxB,QAAQ,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AAC7B,QAAQ,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;AACtD,QAAQ,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,SAAS,EAAE;AAC/C,YAAY,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,KAAK,CAAC;AACxD,SAAS;AACT,KAAK;AACL,IAAI,GAAG,CAAC,IAAI,EAAE;AACd,QAAQ,OAAO,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC;AACrD,KAAK;AACL,IAAI,GAAG,CAAC,IAAI,EAAE;AACd,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAC5B,YAAY,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AACvD,SAAS;AACT,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL;;ACrBA;AAsBA;AACA;AACA;AACO,MAAM,sBAAsB,CAAC;AACpC;AACA;AACA;AACA;AACA;AACA,IAAI,WAAW,CAACS,QAAM,EAAE,cAAc,EAAE;AACxC,QAAQ,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;AAC1C,QAAQ,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;AACvC,QAAQ,IAAI,CAAC,MAAM,GAAGA,QAAM,CAAC;AAC7B,QAAQ,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;AAC7C,QAAQ,IAAI,CAAC,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAC3D,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,YAAY,EAAE,CAAC;AACvC,QAAQ,IAAI,CAAC,cAAc,GAAG;AAC9B,YAAY,mBAAmB,EAAE,IAAI;AACrC,YAAY,mBAAmB,EAAE,IAAI;AACrC,SAAS,CAAC;AACV;AACA,QAAQ,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACjH,QAAQ,IAAI,CAAC,aAAa,CAAC,qBAAqB,GAAG,MAAM;AACzD,YAAY,IAAI,CAAC,oBAAoB,CAAC,+CAA+C,EAAE,KAAK,CAAC,CAAC;AAC9F,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,qBAAqB,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;AACvG,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAChG,QAAQ,IAAI,CAAC,WAAW,CAAC,kBAAkB,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;AAClF;AACA,QAAQ,IAAI,CAAC,WAAW,CAAC,iCAAiC,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK;AAChF,YAAY,MAAM,UAAU,GAAG;AAC/B,gBAAgB,kBAAkB,EAAE,KAAK;AACzC,gBAAgB,mBAAmB,EAAE,MAAM;AAC3C,aAAa,CAAC;AACd,YAAY,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACzG,SAAS,CAAC;AACV;AACA,QAAQ,IAAI,CAAC,WAAW,CAAC,sBAAsB,GAAG,MAAM;AACxD,YAAY,IAAI,CAAC,wBAAwB,EAAE,CAAC;AAC5C,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACvE,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC9D,QAAQ,IAAI,CAAC,6BAA6B,GAAG,IAAI,qBAAqB,EAAE,CAAC;AACzE,QAAQ,IAAI,CAAC,yBAAyB,GAAG,IAAI,qBAAqB,EAAE,CAAC;AACrE,QAAQ,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;AAClF,QAAQ,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;AAC9E,QAAQ,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;AAC3F,QAAQ,IAAI,CAAC,iBAAiB,CAAC,8BAA8B,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,CAAC;AAChH,QAAQ,IAAI,CAAC,uBAAuB,GAAG,IAAI,uBAAuB,EAAE,CAAC;AACrE;AACA,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,kBAAkB,CAACA,QAAM,CAAC,kBAAkB,CAAC,CAAC;AAC3E,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC/D,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,CAACC,MAAe,CAAC,QAAQ,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC;AACtG,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,CAACL,IAAa,CAAC,QAAQ,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;AAChG,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,CAACM,YAAqB,CAAC,QAAQ,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,CAAC;AAChH,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,CAACC,eAAwB,CAAC,QAAQ,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC,CAAC;AACtH,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,CAACC,iBAA0B,CAAC,QAAQ,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,8BAA8B,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1H,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,CAACC,WAAoB,CAAC,QAAQ,EAAE,CAAC,GAAG,KAAK;AAC1E,YAAY,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC3C,YAAY,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACzE,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,CAACC,MAAe,CAAC,QAAQ,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;AACnG,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,CAACC,KAAc,CAAC,QAAQ,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;AACjG,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,CAACC,gBAAyB,CAAC,QAAQ,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,+BAA+B,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1H,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,CAACC,YAAqB,CAAC,QAAQ,EAAE,CAAC,GAAG,KAAK;AAC3E,YAAY,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAC5C,YAAY,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;AACnE,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM;AAC1D,YAAY,MAAM,OAAO,GAAGd,aAA4B,CAACe,aAAsB,CAAC,CAAC;AACjF,YAAY,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAC/C,YAAY,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;AACtC,YAAY,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AACxC,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM;AAC3D;AACA,YAAYnB,YAAM,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC;AACnD,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,KAAK,KAAK;AAChE;AACA;AACA;AACA;AACA,YAAY,MAAM,eAAe,GAAG,IAAI,CAAC;AACzC,YAAY,MAAM,oBAAoB,GAAG,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,CAAC;AACpH,YAAY,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,GAAG,oBAAoB,CAAC;AAC9E,YAAY,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,mBAAmB,IAAI,oBAAoB,GAAG,CAAC,IAAI,YAAY,CAAC,CAAC;AACnI,YAAY,MAAM,gBAAgB,GAAG,gBAAgB,IAAI,KAAK,CAAC,IAAI,IAAI,eAAe,CAAC;AACvF,YAAY,MAAM,qBAAqB,GAAG,CAAC,gBAAgB,CAAC;AAC5D,YAAY,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,MAAM,CAAC;AACrG,YAAY,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AACxC;AACA;AACA,YAAY,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,OAAO;AACjF,gBAAgB,YAAY,CAAC,uBAAuB,EAAE,CAAC;AACvD,YAAY,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,CAAC;AACxF,YAAY,IAAI,CAAC,aAAa,CAAC,mBAAmB,EAAE,CAAC;AACrD;AACA,YAAY,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE;AAC9E,gBAAgB,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAC5D,aAAa;AACb;AACA,YAAY,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;AACzC;AACA,YAAY,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;AAC7C,YAAY,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;AAC7C,YAAY,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;AAChD,YAAY,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;AAC/C,YAAY,IAAI,gBAAgB,EAAE;AAClC;AACA,gBAAgB,UAAU,CAAC,MAAM;AACjC,oBAAoB,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC5C,oBAAoB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACnD,iBAAiB,EAAE,IAAI,CAAC,CAAC;AACzB,aAAa;AACb,SAAS,CAAC,CAAC;AACX;AACA,QAAQ,IAAI,CAAC,qBAAqB,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;AACrH,QAAQ,IAAI,CAAC,4BAA4B,GAAG,IAAI,4BAA4B,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;AACzG,QAAQ,IAAI,CAAC,uBAAuB,EAAE,CAAC;AACvC,QAAQ,IAAI,CAAC,uBAAuB,CAAC,uBAAuB,EAAE,CAAC;AAC/D,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,uBAAuB,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;AACrI,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AAChC,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AAChC,QAAQ,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;AACzC,QAAQ,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;AACjC,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;AACxC,QAAQ,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AACpC,QAAQ,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;AAClC,QAAQ,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AACpC,QAAQ,IAAI,CAAC,MAAM,CAAC,kCAAkC,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,UAAU,KAAK;AACpG,YAAY,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,EAAE,EAAE;AAC/D,gBAAgB,OAAO;AACvB,aAAa;AACb;AACA,YAAY,IAAI,CAAC,wBAAwB,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;AACjE,YAAY,IAAI,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;AACrG,YAAY,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC;AAC/C,YAAY,MAAM,OAAO,GAAGI,aAA4B,CAACgB,SAAkB,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;AACzG,YAAY,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAC/C,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,MAAM,CAAC,kCAAkC,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,gBAAgB,KAAK;AAChH,YAAY,IAAI,gBAAgB,KAAK,SAAS,IAAI,gBAAgB,KAAK,EAAE,EAAE;AAC3E,gBAAgB,OAAO;AACvB,aAAa;AACb,YAAY,IAAI,OAAO,CAAC;AACxB,YAAY,IAAI,IAAI,CAAC,UAAU,EAAE;AACjC;AACA,gBAAgB,OAAO,GAAGhB,aAA4B,CAACiB,eAAwB,EAAE;AACjF,oBAAoB,YAAY,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC;AAC1D,oBAAoB,aAAa,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC;AAC3D,iBAAiB,CAAC,CAAC;AACnB,aAAa;AACb,iBAAiB;AACjB;AACA,gBAAgB,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC;AAC7G,gBAAgB,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAC5E,gBAAgB,OAAO,GAAGjB,aAA4B,CAACiB,eAAwB,EAAE;AACjF,oBAAoB,YAAY,EAAE,YAAY;AAC9C,oBAAoB,aAAa,EAAE,CAAC;AACpC,iBAAiB,CAAC,CAAC;AACnB,aAAa;AACb,YAAY,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAC/C,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;AACtC,QAAQ,IAAI,CAAC,oBAAoB,GAAG,MAAM;AAC1C,YAAY,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;AAC5G,YAAY,OAAO,mBAAmB,CAAC;AACvC,SAAS,CAAC;AACV,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,kBAAkB,GAAG;AACzB,QAAQ,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;AACnC,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,eAAe,CAAC,KAAK,EAAE;AAC3B,QAAQ,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACnD,QAAQrB,YAAM,CAAC,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,CAAC;AACnD;AACA,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9F,QAAQ,IAAI,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACvF;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,IAAI,uBAAuB,GAAG;AAC9B;AACA;AACA,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,YAAY,EAAE,yBAAyB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC;AACtK,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,YAAY,EAAE,UAAU,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3J,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,YAAY,EAAE,SAAS,EAAE,CAAC,IAAI,KAAK;AAChH,YAAY,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACjC,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,YAAY,EAAE,aAAa,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;AACrJ,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,YAAY,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC,mCAAmC,EAAE,CAAC,CAAC;AAC9J,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,YAAY,EAAE,mBAAmB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9J,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,YAAY,EAAE,aAAa,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC;AACxJ,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,YAAY,EAAE,wBAAwB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,oCAAoC,CAAC,IAAI,CAAC,CAAC,CAAC;AAChL,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,YAAY,EAAE,iBAAiB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1J,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,YAAY,EAAE,eAAe,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;AAClJ,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,YAAY,EAAE,cAAc,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;AAChJ,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,YAAY,EAAE,cAAc,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;AAChJ,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,YAAY,EAAE,UAAU,EAAE,MAAM;AAC7G;AACA,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,YAAY,EAAE,uBAAuB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC;AAClK,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,YAAY,EAAE,iBAAiB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;AACtJ,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,YAAY,EAAE,aAAa,EAAE,MAAM;AAChH;AACA,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,YAAY,EAAE,UAAU,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/I;AACA,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC,CAAC;AACnL,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,uBAAuB,EAAE,MAAM,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,uBAAuB,CAAC,CAAC,CAAC;AACnM,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC,CAAC;AAC7K,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,uBAAuB,EAAE,MAAM,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,uBAAuB,CAAC,CAAC,CAAC;AACnM,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,gBAAgB,EAAE,MAAM,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACrL,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC,CAAC;AACnL,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,aAAa,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC;AACzL,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,wBAAwB,EAAE,MAAM,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,wBAAwB,CAAC,CAAC,CAAC;AACrM,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM;AAC3G;AACA,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,eAAe,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC;AAC7L,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;AACjL,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,cAAc,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC;AAC3L,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;AACjL,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;AAC7K,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;AACnL,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;AACvL,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;AACvL,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;AACrL,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;AACjL,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;AACrL,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;AACvL,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,aAAa,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC;AACzL,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;AACvL,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;AACnL,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;AACrL,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,kBAAkB,EAAE,MAAM,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,CAAC,CAAC;AACzL,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,sBAAsB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC,CAAC;AAC3M,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,uBAAuB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC,CAAC;AAC7M,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,eAAe,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC;AAC7L,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,qBAAqB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC,CAAC;AACzM,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;AACvL,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,gBAAgB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/L,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,uBAAuB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC,CAAC;AAC7M,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;AACnL,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,iBAAiB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC,CAAC;AACjM,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,uBAAuB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC,CAAC;AAC7M,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,iBAAiB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC,CAAC;AACjM,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,kBAAkB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC,CAAC;AACnM,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;AACnL,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,oBAAoB,EAAE,MAAM;AACrH;AACA,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,UAAU,EAAE,aAAa,EAAE,MAAM;AAC9G;AACA,SAAS,CAAC,CAAC;AACX,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,SAAS,CAAC,OAAO,EAAE;AACvB,QAAQA,YAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;AAC7D,QAAQ,MAAM,eAAe,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACnF,QAAQA,YAAM,CAAC,IAAI,CAAC,wBAAwB,GAAG,eAAe,CAAC,CAAC;AAChE,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AACpD;AACA,QAAQ,IAAI,OAAO,CAAC,OAAO,KAAK,kBAAkB,EAAE;AACpD,YAAY,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC;AACxD,SAAS;AACT,KAAK;AACL,IAAI,6BAA6B,CAAC,OAAO,EAAE;AAC3C,QAAQ,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAC3B,QAAQ,MAAM,IAAI,GAAG;AACrB,YAAY,oBAAoB,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,oBAAoB,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI;AAC3G,YAAY,CAAC,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;AAClE,YAAY,CAAC,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;AAClE,YAAY,QAAQ,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,QAAQ,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;AACjF,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/E,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,iBAAiB,CAAC,OAAO,EAAE;AAC/B,QAAQ,IAAI;AACZ,YAAY,MAAM,cAAc,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACtF,YAAY,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;AAC5D,YAAY,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,EAAE;AAClF,gBAAgBA,YAAM,CAAC,KAAK,CAAC,+EAA+E,CAAC,CAAC;AAC9G,aAAa;AACb,YAAY,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC;AACrD,YAAY,OAAO,YAAY,CAAC,SAAS,CAAC;AAC1C,YAAYA,YAAM,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,SAAS,IAAI,gBAAgB,CAAC,YAAY,GAAG,cAAc,GAAG,YAAY,CAAC,wCAAwC,CAAC,CAAC,CAAC;AAC9J,YAAY,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,KAAK;AAC/D,gBAAgB,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;AAC1D,gBAAgB,QAAQ,SAAS;AACjC,oBAAoB,KAAK,gBAAgB,CAAC,UAAU;AACpD;AACA,wBAAwB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;AAClF,4BAA4BA,YAAM,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,WAAW,CAAC;AACpE,2DAA2D,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjG;AACA,4BAA4B,OAAO;AACnC,yBAAyB;AACzB;AACA,wBAAwB,IAAI,WAAW,KAAK,eAAe;AAC3D,4BAA4B,WAAW,KAAK,SAAS;AACrD,4BAA4B,WAAW,KAAK,aAAa,EAAE;AAC3D,4BAA4B,OAAO;AACnC,yBAAyB;AACzB,wBAAwB,IAAI,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;AAC9F;AACA,4BAA4B,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AACtG,yBAAyB;AACzB,6BAA6B;AAC7B,4BAA4BA,YAAM,CAAC,KAAK,CAAC,CAAC,qCAAqC,EAAE,WAAW,CAAC,8EAA8E,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;AACzM,yBAAyB;AACzB,wBAAwB,MAAM;AAC9B,oBAAoB,KAAK,gBAAgB,CAAC,YAAY;AACtD;AACA,wBAAwB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;AAClF,4BAA4BA,YAAM,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,WAAW,CAAC;AACtE,4CAA4C,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClF;AACA,4BAA4B,OAAO;AACnC,yBAAyB;AACzB,wBAAwB,IAAI,IAAI,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;AAChG;AACA,4BAA4B,IAAI,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;AAC3G,yBAAyB;AACzB,6BAA6B;AAC7B,4BAA4BA,YAAM,CAAC,KAAK,CAAC,CAAC,qCAAqC,EAAE,OAAO,CAAC,gFAAgF,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;AACvM,yBAAyB;AACzB,wBAAwB,MAAM;AAC9B,oBAAoB;AACpB,wBAAwBA,YAAM,CAAC,KAAK,CAAC,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AACxE,iBAAiB;AACjB,aAAa,CAAC,CAAC;AACf;AACA,YAAY,IAAI,CAAC,4BAA4B,CAAC,0BAA0B,EAAE,CAAC;AAC3E,YAAY,IAAI,CAAC,4BAA4B,CAAC,yBAAyB,EAAE,CAAC;AAC1E,SAAS;AACT,QAAQ,OAAO,CAAC,EAAE;AAClB,YAAYA,YAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3B,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,uBAAuB,CAAC,OAAO,EAAE;AACrC,QAAQ,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;AAC7C,QAAQA,YAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;AAC3E,QAAQ,MAAM,qBAAqB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AACrE,QAAQA,YAAM,CAAC,IAAI,CAAC,CAAC,wEAAwE,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;AACxH,QAAQ,IAAI,CAAC,cAAc,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,CAAC;AAC5E,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,iBAAiB,CAAC,OAAO,EAAE;AAC/B,QAAQ,MAAM,cAAc,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAClF,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;AACxD,QAAQ,IAAI,CAAC,iBAAiB,CAAC,yBAAyB,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;AACpF,KAAK;AACL,IAAI,cAAc,GAAG;AACrB,QAAQ,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC;AACxC;AACA,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,EAAE;AAC9E,YAAY,IAAI,CAAC,UAAU,EAAE,CAAC;AAC9B,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,aAAa,CAAC,UAAU,EAAE;AAC9B,QAAQ,IAAI,UAAU,EAAE;AACxB,YAAY,IAAI,CAAC,cAAc,EAAE,CAAC;AAClC,SAAS;AACT,aAAa;AACb,YAAY,IAAI,CAAC,aAAa,CAAC,mBAAmB,EAAE,CAAC;AACrD,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,IAAI,YAAY,CAAC,OAAO,EAAE;AAC1B,QAAQ,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AACnC,QAAQ,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAClC,KAAK;AACL;AACA;AACA;AACA,IAAI,WAAW,CAAC,OAAO,EAAE;AACzB;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC5B,YAAYA,YAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;AACnE,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AACnC;AACA,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE;AACzC,YAAY,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACtC,gBAAgB,IAAI,CAAC,iBAAiB,GAAG,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;AACpE,aAAa;AACb,YAAY,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACrD,SAAS;AACT,aAAa;AACb,YAAY,IAAI,CAAC,cAAc,CAAC,oBAAoB,EAAE,CAAC;AACvD,YAAY,IAAI,CAAC,yBAAyB,EAAE,CAAC;AAC7C,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,IAAI,gCAAgC,GAAG;AACvC,QAAQ,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,oBAAoB,CAAC;AACnE,YAAY,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;AAC7D,YAAY,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,KAAK;AACrD,YAAY,QAAQ,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI;AACrD,SAAS,CAAC,CAAC,CAAC;AACZ,QAAQ,IAAI,IAAI,CAAC,qBAAqB,KAAK,IAAI,EAAE;AACjD,YAAYA,YAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAChD,YAAY,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACrC,SAAS;AACT,aAAa;AACb,YAAYA,YAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAChD,YAAY,IAAI,CAAC,qBAAqB,CAAC,eAAe,EAAE,CAAC;AACzD,SAAS;AACT,QAAQ,UAAU,CAAC,MAAM;AACzB,YAAY,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AACpD,SAAS,EAAE,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;AACxD,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,oBAAoB,CAAC,OAAO,EAAE;AAClC,QAAQA,YAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;AACjE,QAAQ,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;AAC7C,QAAQ,IAAI,CAAC,qBAAqB,CAAC,yBAAyB,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,gCAAgC,EAAE,CAAC,CAAC;AAClH,KAAK;AACL;AACA;AACA;AACA,IAAI,mCAAmC,GAAG;AAC1C,QAAQA,YAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;AACjE,QAAQ,UAAU,CAAC,MAAM;AACzB,YAAY,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC;AAC1E,YAAY,IAAI,CAAC,qBAAqB,CAAC,eAAe,EAAE,CAAC;AACzD,SAAS,EAAE,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;AACxD,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE;AAChD,YAAY,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACnD,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,eAAe,CAAC,IAAI,EAAE;AAC1B,QAAQ,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1C,QAAQ,QAAQ,CAAC,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACxD,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,cAAc,CAAC,IAAI,EAAE;AACzB,QAAQ,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1C,QAAQ,QAAQ,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACvD,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,cAAc,CAAC,IAAI,EAAE;AACzB,QAAQ,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1C,QAAQ,QAAQ,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACvD,KAAK;AACL;AACA;AACA;AACA,IAAI,UAAU,GAAG;AACjB,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE;AACjD,YAAY,MAAM,OAAO,GAAG,qFAAqF,CAAC;AAClH,YAAY,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,oBAAoB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AACrF,YAAYA,YAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAClC;AACA,YAAY,IAAI,CAAC,oBAAoB,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;AACjF,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,EAAE;AAChD,YAAYA,YAAM,CAAC,OAAO,CAAC,iEAAiE,CAAC,CAAC;AAC9F,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/E,QAAQ,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC;AACjE,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,SAAS,EAAE;AAC1D,YAAY,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AAChF,YAAY,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,KAAK,GAAG,UAAU,CAAC;AAClE,YAAY,IAAI,UAAU,EAAE;AAC5B,gBAAgB,IAAI,CAAC,SAAS,EAAE,CAAC;AACjC,aAAa;AACb,iBAAiB;AACjB,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,YAAY;AAClD,qBAAqB,IAAI,EAAE;AAC3B,qBAAqB,IAAI,CAAC,MAAM;AAChC,oBAAoB,IAAI,CAAC,SAAS,EAAE,CAAC;AACrC,iBAAiB,CAAC;AAClB,qBAAqB,KAAK,CAAC,CAAC,gBAAgB,KAAK;AACjD,oBAAoBA,YAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAClD,oBAAoBA,YAAM,CAAC,IAAI,CAAC,gIAAgI,CAAC,CAAC;AAClK,oBAAoB,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,uBAAuB,CAAC;AAClF,wBAAwB,MAAM,EAAE,gBAAgB;AAChD,qBAAqB,CAAC,CAAC,CAAC;AACxB,iBAAiB,CAAC,CAAC;AACnB,aAAa;AACb,SAAS;AACT,aAAa;AACb,YAAY,IAAI,CAAC,SAAS,EAAE,CAAC;AAC7B,SAAS;AACT,QAAQ,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;AAC3C,QAAQ,IAAI,CAAC,qBAAqB,CAAC,eAAe,EAAE,CAAC;AACrD,KAAK;AACL;AACA;AACA;AACA,IAAI,SAAS,GAAG;AAChB;AACA,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,gBAAgB,KAAK;AAC5D,YAAY,IAAI,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,SAAS,EAAE;AAC9D,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;AAC3D,aAAa;AACb,YAAYA,YAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAC1C,YAAYA,YAAM,CAAC,IAAI,CAAC,gIAAgI,CAAC,CAAC;AAC1J,YAAY,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,uBAAuB,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC;AACzG,SAAS,CAAC,CAAC;AACX,KAAK;AACL;AACA;AACA;AACA,IAAI,+BAA+B,GAAG;AACtC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE;AAC5D;AACA,YAAY,IAAI,CAAC,UAAU,EAAE,CAAC;AAC9B,SAAS;AACT,QAAQ,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACjC,KAAK;AACL;AACA;AACA;AACA,IAAI,yBAAyB,GAAG;AAChC,QAAQ,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;AACnC,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;AACxC,QAAQ,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AACtC,QAAQ,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC1D,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AAC7C,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;AACpG,QAAQ,IAAI,cAAc,GAAG,CAAC,EAAE;AAChC,YAAY,IAAI,CAAC,SAAS,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;AACjF,YAAY,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,MAAM;AAC7C;AACA,gBAAgBA,YAAM,CAAC,KAAK,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACjD,gBAAgB,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;AAC3C,aAAa,CAAC;AACd,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,CAAC,UAAU,EAAE;AAC7B,QAAQ,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AACrC;AACA,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;AACxD;AACA,YAAY,MAAM,aAAa,GAAG,IAAI,CAAC,2BAA2B,CAAC,UAAU,CAAC,CAAC;AAC/E;AACA,YAAY,IAAI,CAAC,aAAa,EAAE;AAChC,gBAAgBA,YAAM,CAAC,IAAI,CAAC,6HAA6H,CAAC,CAAC;AAC3J,gBAAgB,IAAI,CAAC,oBAAoB,CAAC,qEAAqE,EAAE,KAAK,CAAC,CAAC;AACxH,gBAAgB,OAAO;AACvB,aAAa;AACb,SAAS;AACT;AACA,QAAQ,IAAI,CAAC,wBAAwB,GAAG,IAAI,wBAAwB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;AACxH;AACA,QAAQ,IAAI,CAAC,wBAAwB,CAAC,YAAY,GAAG,CAAC,KAAK,KAAK;AAChE,YAAY,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACzC,SAAS,CAAC;AACV;AACA,QAAQ,IAAI,CAAC,wBAAwB,CAAC,mBAAmB,GAAG,CAAC,WAAW,KAAK;AAC7E,YAAY,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;AAClE,SAAS,CAAC;AACV;AACA,QAAQ,IAAI,CAAC,wBAAwB,CAAC,iBAAiB,GAAG,CAAC,KAAK,KAAK;AACrE,YAAY,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;AAC9C,SAAS,CAAC;AACV;AACA,QAAQ,IAAI,CAAC,wBAAwB,CAAC,qBAAqB,GAAG,CAAC,MAAM,KAAK;AAC1E,YAAY,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;AAChD,SAAS,CAAC;AACV;AACA,QAAQ,IAAI,CAAC,wBAAwB,CAAC,sBAAsB,GAAG,CAAC,KAAK,KAAK;AAC1E,YAAY,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AACzD,SAAS,CAAC;AACV;AACA,QAAQ,IAAI,CAAC,wBAAwB,CAAC,kBAAkB,GAAG,CAAC,sBAAsB,KAAK,IAAI,CAAC,sBAAsB,CAAC,sBAAsB,CAAC,CAAC;AAC3I;AACA,QAAQ,IAAI,CAAC,wBAAwB,CAAC,aAAa,GAAG,CAAC,gBAAgB,KAAK,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;AACrH;AACA,QAAQ,IAAI,CAAC,wBAAwB,CAAC,yBAAyB,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,mBAAmB,EAAE,CAAC;AAClH,QAAQ,IAAI,CAAC,wBAAwB,CAAC,2BAA2B,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC;AAChH,QAAQ,IAAI,mBAAmB,GAAG,KAAK,CAAC;AACxC,QAAQ,IAAI,CAAC,wBAAwB,CAAC,0BAA0B,GAAG,MAAM;AACzE;AACA;AACA;AACA,YAAY,IAAI,CAAC,mBAAmB;AACpC,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,wBAAwB,CAAC,cAAc,CAAC,kBAAkB,CAAC,EAAE;AACtH,gBAAgB,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE,CAAC;AACzD,gBAAgB,mBAAmB,GAAG,IAAI,CAAC;AAC3C,aAAa;AACb,SAAS,CAAC;AACV;AACA,QAAQ,IAAI,CAAC,wBAAwB,CAAC,OAAO,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;AAChH,KAAK;AACL;AACA;AACA;AACA,IAAI,2BAA2B,CAAC,OAAO,EAAE;AACzC;AACA,QAAQ,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;AACjC,YAAYA,YAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;AACtD,YAAY,OAAO,KAAK,CAAC;AACzB,SAAS;AACT;AACA,QAAQ,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,UAAU,EAAE;AACpD,YAAY,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE;AAC9C,gBAAgB,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC1C,oBAAoBA,YAAM,CAAC,IAAI,CAAC,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACpE,oBAAoB,OAAO,IAAI,CAAC;AAChC,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,QAAQA,YAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;AAClD,QAAQ,OAAO,KAAK,CAAC;AACrB,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,qBAAqB,CAAC,aAAa,EAAE;AACzC,QAAQ,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACjC;AACA,QAAQ,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;AAC/D,KAAK;AACL,IAAI,iBAAiB,CAAC,WAAW,EAAE;AACnC,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,CAACI,aAA4B,CAACkB,IAAa,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAC3G,KAAK;AACL;AACA;AACA;AACA,IAAI,yBAAyB,CAAC,mBAAmB,EAAE;AACnD,QAAQtB,YAAM,CAAC,IAAI,CAAC,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACpE,QAAQ,IAAI,gBAAgB,GAAG,EAAE,CAAC;AAClC;AACA,QAAQ,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;AAC3F,QAAQ,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;AAC9E,QAAQ,IAAI,iBAAiB,EAAE;AAC/B;AACA,YAAY,gBAAgB,GAAG,gBAAgB,CAAC,QAAQ,CAAC;AACzD,SAAS;AACT;AACA,QAAQ,MAAM,cAAc,GAAG,CAAC,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;AAC5D,QAAQ,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACnC,QAAQ,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;AACzF,QAAQ,IAAI,sBAAsB,GAAG,EAAE,CAAC;AACxC,QAAQ,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AACjF,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,CAAC;AAC1G,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,wBAAwB,CAAC,CAAC;AAC9G;AACA,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;AACtD,QAAQ,MAAM,SAAS,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACvE,QAAQ,IAAI,YAAY,IAAI,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE;AACxE;AACA,YAAY,gBAAgB,GAAG,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;AAC1E,SAAS;AACT,aAAa,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACxC;AACA,YAAY,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;AACrD,SAAS;AACT;AACA,QAAQ,IAAI,gBAAgB,IAAI,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE;AACpF;AACA,YAAY,sBAAsB,GAAG,gBAAgB,CAAC;AACtD,SAAS;AACT,aAAa,IAAI,CAAC,CAAC,gBAAgB,IAAI,CAAC,eAAe,KAAK,mBAAmB,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE;AACjG;AACA,YAAY,sBAAsB,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAChE,SAAS;AACT;AACA,QAAQ,IAAI,sBAAsB,EAAE;AACpC,YAAY,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;AACtC,YAAY,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AACxC,YAAY,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,UAAU,EAAE,sBAAsB,CAAC,CAAC;AACnG,SAAS;AACT,aAAa;AACb;AACA;AACA,YAAY,IAAI,eAAe,EAAE;AACjC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,GAAG,cAAc,EAAE;AAC5D;AACA,oBAAoB,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC5C,oBAAoB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC/C,oBAAoB,UAAU,CAAC,MAAM;AACrC,wBAAwB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAACI,aAA4B,CAACe,aAAsB,CAAC,CAAC,CAAC;AACxG,qBAAqB,EAAE,cAAc,CAAC,CAAC;AACvC,iBAAiB;AACjB,qBAAqB;AACrB;AACA,oBAAoB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;AAC9C,oBAAoB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAChD,oBAAoB,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;AACrD,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA,QAAQ,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,wBAAwB,CAAC;AACvE,YAAY,mBAAmB;AAC/B,YAAY,sBAAsB;AAClC,YAAY,gBAAgB;AAC5B,SAAS,CAAC,CAAC,CAAC;AACZ,KAAK;AACL,IAAI,4BAA4B,CAAC,sBAAsB,EAAE;AACzD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;AAClC,QAAQ,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AACpC,QAAQ,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;AACzC,QAAQ,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAC/E,KAAK;AACL,IAAI,8BAA8B,CAAC,wBAAwB,EAAE;AAC7D,QAAQ,MAAM,KAAK,GAAG,wBAAwB,CAAC,KAAK,CAAC;AACrD;AACA,QAAQ,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;AAC9F;AACA,QAAQ,MAAM,WAAW,GAAG,mBAAmB,CAAC,QAAQ,CAAC;AACzD,QAAQ,mBAAmB,CAAC,QAAQ,GAAG,MAAM,GAAG,CAAC;AACjD;AACA,QAAQ,MAAM,YAAY,GAAG,mBAAmB,CAAC,OAAO,CAAC;AACzD,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AACtD,YAAY,IAAI,YAAY,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAC1D,gBAAgB,YAAY,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AACxC,gBAAgB,MAAM;AACtB,aAAa;AACb,SAAS;AACT;AACA,QAAQ,mBAAmB,CAAC,OAAO,GAAG,YAAY,CAAC;AACnD;AACA,QAAQ,mBAAmB,CAAC,QAAQ,GAAG,KAAK,CAAC;AAC7C;AACA,QAAQ,mBAAmB,CAAC,QAAQ,GAAG,WAAW,CAAC;AACnD;AACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,wBAAwB,CAAC,KAAK,CAAC;AAC/D;AACA,QAAQ,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,6BAA6B,CAAC;AAC5E,YAAY,KAAK;AACjB,SAAS,CAAC,CAAC,CAAC;AACZ,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,kBAAkB,CAAC,MAAM,EAAE;AAC/B,QAAQnB,YAAM,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACpD,QAAQ,MAAM,SAAS,GAAG;AAC1B,YAAY,GAAG,EAAE,MAAM,CAAC,GAAG;AAC3B,YAAY,IAAI,EAAE,QAAQ;AAC1B,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;AAC/D,QAAQ,IAAI,CAAC,2BAA2B,EAAE,CAAC;AAC3C,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,iBAAiB,CAAC,KAAK,EAAE;AAC7B,QAAQA,YAAM,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAClD,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;AACxD,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,eAAe,IAAI,MAAM,GAAG,KAAK,CAAC;AAC1F,QAAQ,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE;AAChD;AACA,YAAY,IAAI,CAAC,wBAAwB,CAAC,cAAc,GAAG,EAAE,CAAC;AAC9D,SAAS;AACT;AACA;AACA,QAAQ,MAAM,eAAe,GAAG,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,eAAe,GAAG,MAAM,CAAC;AACvF,QAAQ,IAAI,kBAAkB,GAAG,CAAC,SAAS,CAAC,CAAC;AAC7C,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;AAC7B,YAAY,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAClC;AACA,gBAAgB,kBAAkB,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC/D,aAAa;AACb,iBAAiB;AACjB;AACA,gBAAgB,kBAAkB,GAAG,EAAE,CAAC;AACxC,gBAAgB,MAAM,gBAAgB,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAC7D,gBAAgB,MAAM,iBAAiB,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAC9D,gBAAgB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,gBAAgB,EAAE,CAAC,EAAE,EAAE;AAC5D,oBAAoB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,iBAAiB,EAAE,CAAC,EAAE,EAAE;AACjE,wBAAwB,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9D,qBAAqB;AACrB,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA,QAAQ,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;AACnG;AACA,QAAQ,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9G,QAAQ,MAAM,QAAQ,GAAG;AACzB,YAAY,GAAG,EAAE,KAAK,CAAC,GAAG;AAC1B,YAAY,IAAI,EAAE,OAAO;AACzB,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,wBAAwB,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1E,QAAQ,IAAI,CAAC,2BAA2B,EAAE,CAAC;AAC3C,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,+BAA+B,CAAC,YAAY,EAAE;AAClD,QAAQ,MAAM,WAAW,GAAG;AAC5B,YAAY,OAAO,EAAE,IAAI;AACzB,YAAY,UAAU,EAAE,IAAI;AAC5B,YAAY,EAAE,EAAE,YAAY,CAAC,YAAY;AACzC,SAAS,CAAC;AACV,QAAQ,MAAM,cAAc,GAAG,YAAY,CAAC,YAAY,IAAI,YAAY,CAAC,YAAY,CAAC;AACtF,QAAQ,IAAI,CAAC,6BAA6B,CAAC,iBAAiB,CAAC,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,cAAc,GAAG,kBAAkB,GAAG,aAAa,EAAE,WAAW,CAAC,CAAC;AAC7K,QAAQ,IAAI,cAAc,EAAE;AAC5B,YAAY,MAAM,WAAW,GAAG;AAChC,gBAAgB,OAAO,EAAE,IAAI;AAC7B,gBAAgB,UAAU,EAAE,IAAI;AAChC,gBAAgB,EAAE,EAAE,YAAY,CAAC,YAAY;AAC7C,aAAa,CAAC;AACd,YAAY,IAAI,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,kBAAkB,EAAE,WAAW,CAAC,CAAC;AAC5I,YAAY,IAAI,CAAC,yBAAyB,CAAC,YAAY,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAACI,aAA4B,CAACmB,qBAA8B,CAAC,CAAC,CAAC;AACxJ;AACA,YAAY,IAAI,CAAC,yBAAyB,CAAC,eAAe,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;AAC9F,SAAS;AACT,aAAa;AACb;AACA,YAAY,IAAI,CAAC,6BAA6B,CAAC,eAAe,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;AAClG,SAAS;AACT,KAAK;AACL,IAAI,2BAA2B,GAAG;AAClC;AACA,QAAQ,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,CAAC;AAClD;AACA,QAAQ,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;AAC3C,QAAQ,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE;AAC1E,YAAY,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACxD,SAAS;AACT,QAAQ,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC;AAChF;AACA,QAAQ,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/E,QAAQ,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;AACrF,QAAQ,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;AACnF,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,kBAAkB,CAAC,YAAY,EAAE;AACrC,QAAQvB,YAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;AACvD,QAAQ,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,YAAY,CAAC,CAAC;AAC5D,QAAQ,IAAI,CAAC,wBAAwB,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AAC7D,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,sBAAsB,CAAC,QAAQ,EAAE;AACrC,QAAQA,YAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACtC,QAAQ,IAAI,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE;AAChE,YAAY,IAAI,CAAC,QAAQ,CAAC,WAAW,CAACI,aAA4B,CAACc,YAAqB,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AAC9H,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,iBAAiB,CAAC,gBAAgB,EAAE;AACxC,QAAQlB,YAAM,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC;AAC1F,QAAQ,IAAI,CAAC,6BAA6B,CAAC,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC;AAClF;AACA,QAAQ,IAAI,CAAC,6BAA6B,CAAC,gBAAgB,EAAE,CAAC;AAC9D,QAAQ,IAAI,CAAC,6BAA6B,CAAC,eAAe,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;AAC9F,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,qBAAqB,CAACwB,OAAK,EAAE;AACjC,QAAQxB,YAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;AACvD,QAAQ,MAAM,WAAW,GAAG;AAC5B,YAAY,GAAG,EAAEwB,OAAK,CAAC,GAAG;AAC1B,YAAY,aAAa,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,gBAAgB,CAAC;AACxG,YAAY,aAAa,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,gBAAgB,CAAC;AACxG,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,CAACpB,aAA4B,CAACY,KAAc,EAAE,WAAW,CAAC,CAAC,CAAC;AAC7F,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,sBAAsB,CAACS,QAAM,EAAE;AACnC,QAAQzB,YAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;AACxD,QAAQ,MAAM,WAAW,GAAG;AAC5B,YAAY,GAAG,EAAEyB,QAAM,CAAC,GAAG;AAC3B,YAAY,aAAa,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,gBAAgB,CAAC;AACxG,YAAY,aAAa,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,gBAAgB,CAAC;AACxG,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,CAACrB,aAA4B,CAACW,MAAe,EAAE,WAAW,CAAC,CAAC,CAAC;AAC9F,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;AAC7B,YAAY,IAAI,CAAC,QAAQ,CAAC,WAAW,CAACX,aAA4B,CAACsB,kBAA2B,CAAC,CAAC,CAAC;AACjG,SAAS;AACT;AACA,QAAQ,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAACD,QAAM,CAAC,CAAC;AACvD,KAAK;AACL;AACA;AACA;AACA,IAAI,wBAAwB,GAAG;AAC/B;AACA,QAAQ,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC;AACvE,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC;AAChE,QAAQ,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,CAAC,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;AAC7L,QAAQ,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;AACxD,KAAK;AACL;AACA;AACA;AACA,IAAI,oBAAoB,CAAC,OAAO,EAAE,cAAc,EAAE;AAClD,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAClC,QAAQ,IAAI,CAAC,mBAAmB,GAAG,cAAc,CAAC;AAClD,QAAQ,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC;AACzC,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC/F,KAAK;AACL;AACA;AACA;AACA,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,wBAAwB,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC;AAC7F,KAAK;AACL;AACA;AACA;AACA,IAAI,KAAK,GAAG;AACZ,QAAQ,IAAI,CAAC,oBAAoB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AAC7C,QAAQ,IAAI,CAAC,mBAAmB,EAAE,CAAC;AACnC,KAAK;AACL;AACA;AACA;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,IAAI,CAAC,wBAAwB,CAAC,aAAa,EAAE,CAAC;AACtD,KAAK;AACL;AACA;AACA;AACA,IAAI,eAAe,GAAG;AACtB,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC3C,QAAQ,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAC3E,YAAY,IAAI,CAAC,SAAS,CAAC;AAC3B,gBAAgB,SAAS,EAAE,IAAI,CAAC,gBAAgB;AAChD,aAAa,CAAC;AACd,SAAS,CAAC,CAAC;AACX,KAAK;AACL;AACA;AACA;AACA,IAAI,0BAA0B,CAAC,UAAU,EAAE;AAC3C,QAAQ,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;AACtF,YAAY,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AACtC,SAAS,CAAC,CAAC;AACX,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,KAAK,EAAE;AAC5B,QAAQzB,YAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AACxC,QAAQ,IAAI,KAAK,IAAI,IAAI,EAAE;AAC3B,YAAY,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC3E,gBAAgB,IAAI,CAAC,SAAS,CAAC;AAC/B,oBAAoB,eAAe,EAAE,KAAK;AAC1C,iBAAiB,CAAC;AAClB,aAAa,CAAC,CAAC;AACf,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,KAAK,EAAE;AAC5B,QAAQA,YAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AACxC,QAAQ,IAAI,KAAK,IAAI,IAAI,EAAE;AAC3B,YAAY,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC3E,gBAAgB,IAAI,CAAC,SAAS,CAAC;AAC/B,oBAAoB,eAAe,EAAE,KAAK;AAC1C,iBAAiB,CAAC;AAClB,aAAa,CAAC,CAAC;AACf,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,qBAAqB,CAAC,UAAU,EAAE;AACtC,QAAQA,YAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;AAClD,QAAQ,IAAI,UAAU,IAAI,IAAI,EAAE;AAChC,YAAY,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC3E,gBAAgB,IAAI,CAAC,SAAS,CAAC;AAC/B,oBAAoB,oBAAoB,EAAE,UAAU;AACpD,iBAAiB,CAAC;AAClB,aAAa,CAAC,CAAC;AACf,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,qBAAqB,CAAC,UAAU,EAAE;AACtC,QAAQA,YAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;AAClD,QAAQ,IAAI,UAAU,IAAI,IAAI,EAAE;AAChC,YAAY,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC3E,gBAAgB,IAAI,CAAC,SAAS,CAAC;AAC/B,oBAAoB,oBAAoB,EAAE,UAAU;AACpD,iBAAiB,CAAC;AAClB,aAAa,CAAC,CAAC;AACf,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,oBAAoB,CAAC,UAAU,EAAE;AACrC,QAAQA,YAAM,CAAC,IAAI,CAAC,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;AACxD,QAAQ,IAAI,UAAU,IAAI,IAAI,EAAE;AAChC,YAAY,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC3E,gBAAgB,IAAI,CAAC,SAAS,CAAC;AAC/B,oBAAoB,mBAAmB,EAAE,UAAU;AACnD,iBAAiB,CAAC;AAClB,aAAa,CAAC,CAAC;AACf,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,oBAAoB,CAAC,UAAU,EAAE;AACrC,QAAQA,YAAM,CAAC,IAAI,CAAC,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;AACxD,QAAQ,IAAI,UAAU,IAAI,IAAI,EAAE;AAChC,YAAY,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC3E,gBAAgB,IAAI,CAAC,SAAS,CAAC;AAC/B,oBAAoB,mBAAmB,EAAE,UAAU;AACnD,iBAAiB,CAAC;AAClB,aAAa,CAAC,CAAC;AACf,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,CAAC,GAAG,EAAE;AACvB,QAAQA,YAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACzC,QAAQ,IAAI,GAAG,IAAI,IAAI,EAAE;AACzB,YAAY,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC3E,gBAAgB,IAAI,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC;AACrD,aAAa,CAAC,CAAC;AACf;AACA,YAAY,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC3E,gBAAgB,IAAI,CAAC,SAAS,CAAC,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC;AACxD,aAAa,CAAC,CAAC;AACf,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,IAAI,WAAW,GAAG;AAClB,QAAQA,YAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;AAC7D,QAAQ,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7G,KAAK;AACL;AACA;AACA;AACA,IAAI,iBAAiB,GAAG;AACxB,QAAQA,YAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;AAClE,QAAQ,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;AAC/E,KAAK;AACL;AACA;AACA;AACA,IAAI,iBAAiB,CAAC,UAAU,EAAE;AAClC,QAAQA,YAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;AAC1E,QAAQ,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC3G,KAAK;AACL;AACA;AACA;AACA,IAAI,WAAW,CAAC,UAAU,EAAE;AAC5B,QAAQA,YAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;AACpE,QAAQ,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACrG,KAAK;AACL;AACA;AACA;AACA,IAAI,kBAAkB,CAAC,OAAO,EAAE;AAChC,QAAQA,YAAM,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;AACnF,QAAQ,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACvE,YAAY,IAAI,CAAC,SAAS,CAAC;AAC3B,gBAAgB,cAAc,EAAE,OAAO;AACvC,aAAa,CAAC;AACd,SAAS,CAAC,CAAC;AACX,KAAK;AACL;AACA;AACA;AACA,IAAI,kCAAkC,GAAG;AACzC,QAAQA,YAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;AACvE,QAAQ,IAAI,CAAC,4BAA4B,CAAC,yBAAyB,EAAE,CAAC;AACtE,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,QAAQ,EAAE;AAC/B,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQA,YAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;AACjE,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACvI,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,uBAAuB,CAAC,OAAO,EAAE;AACrC,QAAQA,YAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;AACjE,QAAQ,MAAM,eAAe,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACnF,QAAQ,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAC5D,QAAQ,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;AACvE,QAAQ,kBAAkB,CAAC,aAAa,EAAE,CAAC;AAC3C,QAAQ,kBAAkB,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC;AACnE,QAAQ,kBAAkB,CAAC,oBAAoB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC7D,QAAQ,kBAAkB,CAAC,sBAAsB,GAAG,CAAC,EAAE,kBAAkB,CAAC,oBAAoB,GAAG,kBAAkB,CAAC,eAAe,CAAC,CAAC;AACrI,QAAQ,kBAAkB,CAAC,YAAY,GAAG,CAAC,EAAE,kBAAkB,CAAC,kBAAkB,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;AACvH,QAAQ,kBAAkB,CAAC,cAAc,GAAG,CAAC,EAAE,kBAAkB,CAAC,sBAAsB,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC;AAC5H,QAAQ,IAAI,kBAAkB,CAAC,uBAAuB,IAAI,kBAAkB,CAAC,oBAAoB,EAAE;AACnG,YAAY,kBAAkB,CAAC,eAAe,GAAG,CAAC,EAAE,kBAAkB,CAAC,uBAAuB;AAC9F,gBAAgB,kBAAkB,CAAC,cAAc;AACjD,gBAAgB,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;AACrD,SAAS;AACT,QAAQ,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;AACrE,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,oCAAoC,CAAC,OAAO,EAAE;AAClD,QAAQA,YAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;AAChF,QAAQ,MAAM,gBAAgB,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACpF,QAAQ,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;AACjE,QAAQ,IAAI,CAAC,cAAc,CAAC,iCAAiC,CAAC,mBAAmB,CAAC,CAAC;AACnF,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,qBAAqB,CAAC,OAAO,EAAE;AACnC,QAAQA,YAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;AACrE,QAAQ,MAAM,eAAe,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACnF,QAAQ,MAAM,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AAClE,QAAQ,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;AACtD,QAAQ,IAAI,qBAAqB,CAAC,OAAO,EAAE;AAC3C,YAAY,eAAe,CAAC,eAAe,GAAG,qBAAqB,CAAC,OAAO,CAAC;AAC5E,SAAS;AACT,QAAQ,IAAI,qBAAqB,CAAC,MAAM,EAAE;AAC1C,YAAY,eAAe,CAAC,cAAc,GAAG,qBAAqB,CAAC,MAAM,CAAC;AAC1E,SAAS;AACT,QAAQ,IAAI,qBAAqB,CAAC,cAAc,EAAE;AAClD,YAAY,eAAe,CAAC,sBAAsB,GAAG,qBAAqB,CAAC,cAAc,CAAC;AAC1F,SAAS;AACT,QAAQ,IAAI,qBAAqB,CAAC,aAAa;AAC/C,YAAY,qBAAqB,CAAC,aAAa,CAAC,cAAc,KAAK,SAAS,EAAE;AAC9E,YAAY,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,qBAAqB,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;AACtH,SAAS;AACT,QAAQ,eAAe,CAAC,YAAY,EAAE,CAAC;AACvC,QAAQA,YAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACrC,QAAQ,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;AAChE,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,uBAAuB,CAAC,OAAO,EAAE;AACrC,QAAQA,YAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;AACvE,QAAQ,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjF,QAAQ,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;AACzC,KAAK;AACL;AACA;AACA;AACA,IAAI,sBAAsB,GAAG;AAC7B,QAAQ,IAAI,CAAC,cAAc,CAAC,mBAAmB,EAAE,CAAC;AAClD;AACA,QAAQ,IAAI,CAAC,+BAA+B,EAAE,CAAC;AAC/C,QAAQ,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACjC,QAAQ,IAAI,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC;AACjD,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,yBAAyB,CAAC,OAAO,EAAE;AACvC,QAAQ,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;AAC7C,QAAQA,YAAM,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;AAC7E,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AAClE,QAAQA,YAAM,CAAC,IAAI,CAAC,CAAC,2DAA2D,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;AAC9G,QAAQ,IAAI,CAAC,cAAc,CAAC,0BAA0B,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AACjF,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,KAAK,EAAE;AAC5B,QAAQ,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACjD,KAAK;AACL;AACA;AACA;AACA,IAAI,iBAAiB,GAAG;AACxB,QAAQ,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE,CAAC;AAC7C,KAAK;AACL,IAAI,iBAAiB,CAAC,KAAK,EAAE;AAC7B,QAAQ,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AACpC,QAAQ,IAAI,IAAI,CAAC,wBAAwB,EAAE;AAC3C,YAAY,IAAI,CAAC,wBAAwB,CAAC,cAAc,GAAG,KAAK,CAAC;AACjE,YAAY,IAAI,CAAC,wBAAwB,CAAC,oBAAoB,GAAG,KAAK,CAAC;AACvE,SAAS;AACT,KAAK;AACL,IAAI,oBAAoB,CAAC,KAAK,EAAE;AAChC,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AAChC,QAAQ,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAClE,KAAK;AACL;AACA;AACA;AACA,IAAI,uBAAuB,CAAC,SAAS,EAAE;AACvC,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,kBAAkB,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;AAC5F,QAAQ,IAAI,SAAS,EAAE;AACvB,YAAY,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7F,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,IAAI,oBAAoB,CAAC,SAAS,EAAE;AACpC,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,eAAe,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;AACzF,QAAQ,IAAI,SAAS,EAAE;AACvB,YAAY,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,iBAAiB,CAAC;AAChF,kBAAkB,iBAAiB,CAAC,aAAa;AACjD,kBAAkB,iBAAiB,CAAC,WAAW,CAAC;AAChD,YAAY,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;AACrF,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,IAAI,oBAAoB,CAAC,SAAS,EAAE;AACpC,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,eAAe,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;AACzF,QAAQ,IAAI,SAAS,EAAE;AACvB,YAAY,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;AACjI,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,IAAI,sBAAsB,CAAC,SAAS,EAAE;AACtC,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,iBAAiB,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;AAC3F,QAAQ,IAAI,SAAS,EAAE;AACvB,YAAY,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,CAAC,eAAe,EAAE,CAAC;AAChF,SAAS;AACT,KAAK;AACL,IAAI,gCAAgC,CAAC,WAAW,EAAE;AAClD,QAAQ,WAAW,CAAC,MAAM,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,oBAAoB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAC7H,QAAQ,WAAW,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,qBAAqB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAC/H,QAAQ,WAAW,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,qBAAqB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAC/H,KAAK;AACL,IAAI,sBAAsB,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE;AACrD,QAAQ,IAAI,SAAS,KAAK,gBAAgB,CAAC,YAAY,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;AAC3F,YAAYA,YAAM,CAAC,OAAO,CAAC,CAAC,+BAA+B,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;AAC9F,SAAS;AACT,QAAQ,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,OAAO,KAAK,WAAW,IAAI,SAAS,KAAK,gBAAgB,CAAC,UAAU;AAClK,cAAc,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC;AAC1E,cAAc,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7B,KAAK;AACL;;AC31CA;AAEA;AACA;AACA;AACO,MAAM,mBAAmB,CAAC;AACjC;AACA;AACA;AACA,IAAI,WAAW,CAAC,0BAA0B,EAAE;AAC5C,QAAQ,IAAI,CAAC,0BAA0B,GAAG,0BAA0B,CAAC;AACrE,QAAQ,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AAC9B,KAAK;AACL,IAAI,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE;AAC1C,QAAQ,IAAI,MAAM,CAAC,OAAO,EAAE;AAC5B,YAAY,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC1E,YAAY,IAAI,CAAC,WAAW,EAAE;AAC9B,gBAAgB,OAAO;AACvB,aAAa;AACb,YAAY,IAAI,MAAM,GAAG,CAAC,CAAC;AAC3B,YAAY,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AACtD,gBAAgB,MAAM,GAAG,CAAC,CAAC;AAC3B,aAAa;AACb,iBAAiB,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;AAC/D,gBAAgB,MAAM,GAAG,CAAC,CAAC;AAC3B,aAAa;AACb;AACA,YAAY,IAAI,CAAC,0BAA0B,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACzF;AACA,YAAY,IAAI,UAAU,GAAG,CAAC,CAAC;AAC/B,YAAY,QAAQ,MAAM,CAAC,UAAU;AACrC,gBAAgB,KAAK,MAAM;AAC3B,oBAAoB,UAAU,GAAG,CAAC,CAAC;AACnC,oBAAoB,MAAM;AAC1B,gBAAgB,KAAK,OAAO;AAC5B,oBAAoB,UAAU,GAAG,CAAC,CAAC;AACnC,oBAAoB,MAAM;AAC1B,aAAa;AACb;AACA,YAAY,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC;AACxD,YAAY,MAAM,GAAG,GAAG,EAAE,CAAC;AAC3B,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;AACzC,gBAAgB,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,aAAa;AACb;AACA,YAAY,IAAI,CAAC,0BAA0B,CAAC,kBAAkB,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;AAC5F,gBAAgB,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AAC/C,gBAAgB,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AAC/C,gBAAgB,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AAChD,gBAAgB,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AAChD,gBAAgB,UAAU;AAC1B,aAAa,CAAC,CAAC;AACf;AACA,YAAY,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,SAAS,EAAE;AAC5D,gBAAgB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG;AAC/C,oBAAoB,SAAS,EAAE,SAAS;AACxC,oBAAoB,YAAY,EAAE,SAAS;AAC3C,oBAAoB,EAAE,EAAE,SAAS;AACjC,iBAAiB,CAAC;AAClB,gBAAgB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACzF,aAAa;AACb,YAAY,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACxF,YAAY,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;AAC5D,YAAY,MAAM,SAAS,GAAG,UAAU,CAAC,YAAY,CAAC;AACtD,YAAY,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;AACnD;AACA,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/D,gBAAgB,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACxD,gBAAgB,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACxD,gBAAgB,IAAI,UAAU,CAAC,OAAO,EAAE;AACxC;AACA,oBAAoB,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AAChE,oBAAoB,IAAI,CAAC,0BAA0B,CAAC,kBAAkB,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAC9F,wBAAwB,UAAU;AAClC,wBAAwB,CAAC;AACzB,wBAAwB,QAAQ;AAChC,wBAAwB,UAAU,CAAC,KAAK;AACxC,qBAAqB,CAAC,CAAC;AACvB,iBAAiB;AACjB,qBAAqB,IAAI,UAAU,CAAC,OAAO,EAAE;AAC7C,oBAAoB,IAAI,CAAC,0BAA0B,CAAC,kBAAkB,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;AAC/F,wBAAwB,UAAU;AAClC,wBAAwB,CAAC;AACzB,wBAAwB,CAAC;AACzB,qBAAqB,CAAC,CAAC;AACvB,iBAAiB;AACjB,gBAAgB,IAAI,UAAU,CAAC,OAAO,EAAE;AACxC;AACA,oBAAoB,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AAChE,oBAAoB,IAAI,CAAC,0BAA0B,CAAC,kBAAkB,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAC9F,wBAAwB,UAAU;AAClC,wBAAwB,CAAC;AACzB,wBAAwB,QAAQ;AAChC,qBAAqB,CAAC,CAAC;AACvB,iBAAiB;AACjB,qBAAqB,IAAI,UAAU,CAAC,OAAO,EAAE;AAC7C,oBAAoB,IAAI,CAAC,0BAA0B,CAAC,kBAAkB,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;AACpG,wBAAwB,UAAU;AAClC,wBAAwB,CAAC;AACzB,wBAAwB,CAAC;AACzB,qBAAqB,CAAC,CAAC;AACvB,iBAAiB;AACjB,aAAa;AACb;AACA,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC5D,gBAAgB,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACvD,gBAAgB,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxD;AACA,gBAAgB,IAAI,YAAY,IAAI,aAAa,EAAE;AACnD,oBAAoB,IAAI,CAAC,0BAA0B,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AACvF,wBAAwB,UAAU;AAClC,wBAAwB,CAAC;AACzB,wBAAwB,YAAY;AACpC,qBAAqB,CAAC,CAAC;AACvB,iBAAiB;AACjB,aAAa;AACb,YAAY,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC;AAC/D,SAAS;AACT,KAAK;AACL;;ACvHA;AAKO,MAAM,eAAe,CAAC;AAC7B,IAAI,WAAW,CAAC,sBAAsB,EAAE;AACxC,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACjC;AACA,QAAQ,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;AACjC,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACjC,QAAQ,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;AAChC,QAAQ,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;AACjC,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC7B,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AAC9B;AACA,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;AACxC,QAAQ,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;AACzC,QAAQ,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC;AAC/C,QAAQ,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC;AAChD,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AAC9B,QAAQ,IAAI,CAAC,gBAAgB,GAAG,sBAAsB,CAAC;AACvD,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,CAAC;AAC1G,QAAQ,IAAI,CAAC,cAAc,GAAG,IAAI,WAAW,EAAE,CAAC;AAChD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI,WAAW,EAAE,CAAC;AAClD,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;AACzC,KAAK;AACL,IAAI,SAAS,GAAG;AAChB,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AAC7B,YAAY,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE;AAC/B,gBAAgBA,YAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;AAClE,gBAAgB,OAAO;AACvB,aAAa;AACb,YAAY,SAAS,CAAC,EAAE;AACxB;AACA,iBAAiB,cAAc,CAAC,cAAc,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC;AACzE,iBAAiB,IAAI,CAAC,CAAC,OAAO,KAAK;AACnC,gBAAgB,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACjD,aAAa,CAAC,CAAC;AACf,SAAS;AACT,aAAa;AACb,YAAY,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;AACjC,SAAS;AACT,KAAK;AACL,IAAI,gBAAgB,GAAG;AACvB,QAAQA,YAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACxC,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AAC9B,QAAQ,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACvE,KAAK;AACL,IAAI,MAAM,GAAG;AACb,QAAQ,IAAI,IAAI,CAAC,EAAE,EAAE;AACrB,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AACxD,QAAQ,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE;AAC9C,YAAY,YAAY,EAAE,IAAI;AAC9B,SAAS,CAAC,CAAC;AACX;AACA,QAAQ,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AAC7C,KAAK;AACL,IAAI,WAAW,GAAG;AAClB;AACA,QAAQ,MAAM,kBAAkB,GAAG,CAAC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,CAAC,CAAC;AACV,QAAQ,MAAM,oBAAoB,GAAG,CAAC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,CAAC,CAAC;AACV;AACA,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;AACzE,QAAQ,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;AAC/D,QAAQ,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;AAC5C;AACA,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC;AAC7E,QAAQ,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,oBAAoB,CAAC,CAAC;AACnE,QAAQ,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;AAC9C;AACA,QAAQ,MAAM,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;AACtD,QAAQ,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;AAC1D,QAAQ,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;AAC5D,QAAQ,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;AAC3C,QAAQ,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAC1C;AACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;AACvF,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;AACvF,KAAK;AACL,IAAI,kBAAkB,GAAG;AACzB,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAChC;AACA;AACA,YAAY,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;AACxD,YAAY,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AACvE;AACA,YAAY,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;AACrG,YAAY,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;AACrG,YAAY,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AAClG,YAAY,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AAClG,SAAS;AACT,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC,WAAW,CAAC;AAC5F,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC,UAAU,CAAC;AAC1F,QAAQ,IAAI,IAAI,CAAC,eAAe,IAAI,WAAW,IAAI,IAAI,CAAC,cAAc,IAAI,UAAU,EAAE;AACtF;AACA,YAAY,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC,CAAC;AAC1L,SAAS;AACT,aAAa;AACb;AACA,YAAY,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC,CAAC;AAClL,SAAS;AACT;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC;AAC3C,QAAQ,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC;AACzC,KAAK;AACL,IAAI,WAAW,GAAG;AAClB;AACA,QAAQ;AACR;AACA,YAAY,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;AACzD;AACA,YAAY,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;AAC1E;AACA,YAAY,IAAI,CAAC,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACnE;AACA;AACA,YAAY,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,YAAY,CAAC;AACtE,gBAAgB,CAAC,GAAG,EAAE,GAAG;AACzB,gBAAgB,GAAG,EAAE,GAAG;AACxB,gBAAgB,CAAC,GAAG,EAAE,CAAC,GAAG;AAC1B,gBAAgB,CAAC,GAAG,EAAE,CAAC,GAAG;AAC1B,gBAAgB,GAAG,EAAE,GAAG;AACxB,gBAAgB,GAAG,EAAE,CAAC,GAAG;AACzB,aAAa,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;AACrC;AACA,YAAY,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC,KAAK,WAAW,KAAK,gBAAgB,CAAC,aAAa,CAAC,YAAY,CAAC;AACpJ,SAAS;AACT;AACA,QAAQ;AACR,YAAY,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;AACzD;AACA,YAAY,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;AAC1E;AACA,YAAY,IAAI,CAAC,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACnE;AACA,YAAY,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;AAC1J;AACA,YAAY,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC,KAAK,WAAW,KAAK,gBAAgB,CAAC,aAAa,CAAC,YAAY,CAAC;AACpJ,SAAS;AACT,KAAK;AACL,IAAI,kBAAkB,CAAC,OAAO,EAAE;AAChC,QAAQA,YAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC1C,QAAQ,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;AACjC,QAAQ,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM;AACrD,YAAY,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACpC,SAAS,CAAC,CAAC;AACX;AACA,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;AACtB,QAAQ,IAAI,CAAC,WAAW,EAAE,CAAC;AAC3B,QAAQ,IAAI,CAAC,WAAW,EAAE,CAAC;AAC3B,QAAQ,OAAO,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK;AAClE,YAAY,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;AACvC;AACA,YAAY,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC;AAC7C,gBAAgB,SAAS,EAAE,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC;AACpE,aAAa,CAAC,CAAC;AACf;AACA,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE;AACpD,gBAAgB,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE;AAC5E,oBAAoB,IAAI,SAAS,IAAI,EAAE,EAAE;AACzC,wBAAwB,OAAO,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;AAC1D,qBAAqB;AACrB,iBAAiB;AACjB,aAAa;AACb;AACA,YAAY,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5E,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAC3E,KAAK;AACL,IAAI,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE;AACzB,QAAQ,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE;AACpH,KAAK;AACL,IAAI,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE;AACzB,QAAQ,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO;AACnD,YAAY,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO;AAC/C,YAAY,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;AACjD,KAAK;AACL,IAAI,cAAc,GAAG;AACrB,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE;AAC7D,YAAY,OAAO;AACnB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,IAAI,IAAI;AACjE,YAAY,IAAI,CAAC,oBAAoB,IAAI,IAAI;AAC7C,YAAY,IAAI,CAAC,0BAA0B,IAAI,IAAI;AACnD,YAAY,IAAI,CAAC,2BAA2B,IAAI,IAAI,CAAC;AACrD,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC;AAC5D,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;AAC3D,QAAQ,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC;AAC9D,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;AAC7D,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC;AAC5D;AACA,QAAQ,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,EAAE;AAC1G,YAAY,MAAM,oBAAoB,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;AACpG,YAAY,MAAM,qBAAqB,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AACvG,YAAY,kBAAkB,GAAG,oBAAoB,IAAI,KAAK,IAAI,qBAAqB,IAAI,KAAK,CAAC;AACjG,SAAS;AACT,QAAQ,MAAM,kBAAkB,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACpS,QAAQ,MAAM,mBAAmB,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACrS;AACA,QAAQ,IAAI,CAAC,kBAAkB;AAC/B,YAAY,IAAI,CAAC,0BAA0B,IAAI,IAAI;AACnD,YAAY,IAAI,CAAC,2BAA2B,IAAI,IAAI,EAAE;AACtD,YAAY,MAAM,mBAAmB,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC;AACjH,YAAY,MAAM,oBAAoB,GAAG,IAAI,CAAC,cAAc,CAAC,mBAAmB,EAAE,IAAI,CAAC,2BAA2B,CAAC,CAAC;AACpH,YAAY,kBAAkB,GAAG,mBAAmB,IAAI,KAAK,IAAI,oBAAoB,IAAI,KAAK,CAAC;AAC/F;AACA,SAAS;AACT,QAAQ,IAAI,kBAAkB,EAAE;AAChC;AACA;AACA,YAAY,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAC/F;AACA,gBAAgB,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC;AACnF,gBAAgB,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC;AACnF,gBAAgB,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC;AACpF,gBAAgB,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC;AACpF;AACA,gBAAgB,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC;AAC/E,gBAAgB,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC;AAC/E,gBAAgB,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC;AAChF,gBAAgB,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC;AAChF;AACA,gBAAgB,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC;AACvF,gBAAgB,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC;AACvF,gBAAgB,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC;AACxF,gBAAgB,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC;AACxF;AACA,gBAAgB,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC;AACnF,gBAAgB,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC;AACnF,gBAAgB,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC;AACpF,gBAAgB,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC;AACpF;AACA,gBAAgB,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;AACnE,gBAAgB,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;AACnE,gBAAgB,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;AACpE,gBAAgB,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;AACpE,aAAa,CAAC,CAAC;AACf,YAAY,IAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC;AACnD,YAAY,IAAI,CAAC,oBAAoB,GAAG,YAAY,CAAC;AACrD,YAAY,IAAI,CAAC,0BAA0B,GAAG,kBAAkB,CAAC;AACjE,YAAY,IAAI,CAAC,2BAA2B,GAAG,mBAAmB,CAAC;AACnE,SAAS;AACT,aAAa;AACb;AACA,YAAY,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AACnG;AACA,gBAAgB,QAAQ,CAAC,CAAC,CAAC;AAC3B,gBAAgB,QAAQ,CAAC,CAAC,CAAC;AAC3B,gBAAgB,QAAQ,CAAC,CAAC,CAAC;AAC3B,gBAAgB,QAAQ,CAAC,EAAE,CAAC;AAC5B,gBAAgB,QAAQ,CAAC,CAAC,CAAC;AAC3B,gBAAgB,QAAQ,CAAC,CAAC,CAAC;AAC3B,gBAAgB,QAAQ,CAAC,CAAC,CAAC;AAC3B,gBAAgB,QAAQ,CAAC,EAAE,CAAC;AAC5B,gBAAgB,QAAQ,CAAC,CAAC,CAAC;AAC3B,gBAAgB,QAAQ,CAAC,CAAC,CAAC;AAC3B,gBAAgB,QAAQ,CAAC,EAAE,CAAC;AAC5B,gBAAgB,QAAQ,CAAC,EAAE,CAAC;AAC5B,gBAAgB,QAAQ,CAAC,CAAC,CAAC;AAC3B,gBAAgB,QAAQ,CAAC,CAAC,CAAC;AAC3B,gBAAgB,QAAQ,CAAC,EAAE,CAAC;AAC5B,gBAAgB,QAAQ,CAAC,EAAE,CAAC;AAC5B,aAAa,CAAC,CAAC;AACf,SAAS;AACT,KAAK;AACL,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE;AAC3B,QAAQ,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACjE,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE;AAC/B,YAAY,IAAI,CAAC,WAAW,EAAE,CAAC;AAC/B,YAAY,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE;AACjE,gBAAgB,OAAO;AACvB,aAAa;AACb,YAAY,IAAI,CAAC,cAAc,EAAE,CAAC;AAClC,YAAY,IAAI,CAAC,kBAAkB,EAAE,CAAC;AACtC,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC;AAC1B,SAAS;AACT,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE;AACjF,YAAY,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK;AAC5E,gBAAgB,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACtF,aAAa,EAAE,IAAI,CAAC,CAAC;AACrB,SAAS;AACT,QAAQ,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAC3F,QAAQ,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACtE,KAAK;AACL,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAChC,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AACpD,YAAY,IAAI,IAAI,CAAC,GAAG,KAAK,MAAM,EAAE;AACrC,gBAAgB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrC,aAAa;AACb,iBAAiB,IAAI,IAAI,CAAC,GAAG,KAAK,OAAO,EAAE;AAC3C,gBAAgB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtC,aAAa;AACb,SAAS;AACT,KAAK;AACL,IAAI,MAAM,GAAG;AACb,QAAQ,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;AACtB,YAAY,OAAO;AACnB,SAAS;AACT;AACA,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC;AAC7D,QAAQ,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;AAC1E;AACA,QAAQ,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,gBAAgB,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;AACpF;AACA,QAAQ,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,oBAAoB,CAAC,aAAa,CAAC,WAAW,CAAC;AAC3F,KAAK;AACL,IAAI,OAAO,kBAAkB,CAAC,IAAI,EAAE;AACpC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ,EAAE;AAC5C,YAAYA,YAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;AAC9E,SAAS;AACT;AACA;AACA,QAAQ,IAAI;AACZ,YAAY,IAAI,SAAS,CAAC,EAAE,EAAE;AAC9B,gBAAgB,OAAO,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAC7D,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,EAAE,EAAE;AACnB,YAAY,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC1C,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACtC,KAAK;AACL;;ACtWA;AACO,MAAM,4BAA4B,CAAC;AAC1C,IAAI,WAAW,CAAC,OAAO,EAAE;AACzB,QAAQ,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;AAC/B,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC9C,QAAQ,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAC5E,KAAK;AACL,IAAI,MAAM,CAAC,QAAQ,EAAE;AACrB,QAAQ,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAClD,QAAQ,IAAI,CAAC,yBAAyB,GAAG,QAAQ,CAAC,iBAAiB,CAAC;AACpE,QAAQ,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC,aAAa,CAAC;AAC5D,QAAQ,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAC/E,KAAK;AACL;;ACbA;AAGO,MAAM,gCAAgC,CAAC;AAC9C,IAAI,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE;AAChC,QAAQ,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;AACxC,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,QAAQ,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACjC,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;AACjC,QAAQ,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;AACrB,KAAK;AACL,IAAI,KAAK,CAAC,MAAM,EAAE;AAClB,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AAC9B,YAAY,OAAO,KAAK,CAAC;AACzB,SAAS;AACT,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACpC,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AAC7B,QAAQ,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM;AACxD,YAAY,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,QAAQ,EAAE;AAChE,gBAAgB,IAAI,CAAC,IAAI,EAAE,CAAC;AAC5B,aAAa;AACb,iBAAiB;AACjB,gBAAgB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;AAC1E,aAAa;AACb,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACtD,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL,IAAI,IAAI,GAAG;AACX,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE;AACjC,YAAY,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACtD,YAAY,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;AAC5C,YAAY,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;AAChD,SAAS;AACT,KAAK;AACL,IAAI,aAAa,GAAG;AACpB,QAAQ,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACpD,QAAQ,OAAO;AACf,YAAY,OAAO,EAAE,aAAa;AAClC,YAAY,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK;AAC9F,gBAAgB,OAAO,GAAG,IAAI,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC;AACvF,aAAa,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AACtC,YAAY,oBAAoB,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK;AACpG,gBAAgB,OAAO,GAAG,IAAI,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC;AACzF,aAAa,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AACtC,YAAY,oBAAoB,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK;AACpG,gBAAgB,OAAO,GAAG,IAAI,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC;AACzF,aAAa,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AACtC,YAAY,kBAAkB,EAAE,MAAM;AACtC,gBAAgB,IAAI,GAAG,GAAG,oDAAoD,CAAC;AAC/E,gBAAgB,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK;AAClD,oBAAoB,GAAG,IAAI,MAAM,CAAC,mBAAmB,GAAG,GAAG,CAAC;AAC5D,oBAAoB,GAAG,IAAI,MAAM,CAAC,uBAAuB,GAAG,MAAM,CAAC,mBAAmB,GAAG,GAAG,CAAC;AAC7F,oBAAoB,GAAG,IAAI,MAAM,CAAC,yBAAyB,GAAG,MAAM,CAAC,mBAAmB,GAAG,GAAG,CAAC;AAC/F,oBAAoB,GAAG,IAAI,MAAM,CAAC,uBAAuB,GAAG,MAAM,CAAC,qBAAqB,GAAG,GAAG,CAAC;AAC/F,oBAAoB,GAAG,IAAI,IAAI,CAAC;AAChC,iBAAiB,CAAC,CAAC;AACnB,gBAAgB,OAAO,GAAG,CAAC;AAC3B,aAAa;AACb,SAAS,CAAC;AACV,KAAK;AACL,IAAI,SAAS,GAAG;AAChB,QAAQ,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;AACrC,KAAK;AACL,IAAI,OAAO,CAAC,QAAQ,EAAE;AACtB,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;AAC/B,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,IAAI,CAAC,QAAQ,EAAE;AACvB,YAAYA,YAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;AAC3D,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACtD,QAAQ,IAAI,MAAM,EAAE;AACpB,YAAY,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACpC,SAAS;AACT,KAAK;AACL,IAAI,WAAW,CAAC,WAAW,EAAE,YAAY,EAAE;AAC3C,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;AACtE,QAAQ,MAAM,MAAM,GAAG,IAAI,4BAA4B,CAAC,OAAO,CAAC,CAAC;AACjE,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAC7C,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC3B,KAAK;AACL,IAAI,aAAa,CAAC,WAAW,EAAE,YAAY,EAAE;AAC7C,QAAQ,OAAO;AACf,YAAY,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;AAC3B,YAAY,gBAAgB,EAAE,YAAY;AAC1C,YAAY,MAAM,EAAE,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE;AAC9D,SAAS,CAAC;AACV,KAAK;AACL;;ACzFA;AAWA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,cAAc,CAAC;AAC5B;AACA;AACA;AACA;AACA;AACA,IAAI,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE;AACnC,QAAQ,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;AAC1C,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AAC7B,QAAQ,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,SAAS,CAAC,kBAAkB,EAAE;AAChG,YAAY,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC,kBAAkB,CAAC;AACpE,SAAS;AACT,QAAQ,IAAI,CAAC,aAAa,GAAG,IAAI,0BAA0B,EAAE,CAAC;AAC9D,QAAQ,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACjC;AACA,QAAQ,IAAI,CAAC,yBAAyB,CAAC,IAAI,sBAAsB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AACtF,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAC5E,QAAQ,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3F;AACA,QAAQ,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,CAAC,CAAC,KAAK;AACtE;AACA,YAAY,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,eAAe,EAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;AACrG,SAAS,CAAC,CAAC;AACX,KAAK;AACL;AACA;AACA;AACA,IAAI,IAAI,kBAAkB,GAAG;AAC7B,QAAQ,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;AACvC,YAAY,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACrE,YAAY,IAAI,CAAC,mBAAmB,CAAC,EAAE,GAAG,oBAAoB,CAAC;AAC/D,SAAS;AACT,QAAQ,OAAO,IAAI,CAAC,mBAAmB,CAAC;AACxC,KAAK;AACL;AACA;AACA;AACA,IAAI,iBAAiB,GAAG;AACxB,QAAQ,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,sBAAsB,KAAK;AACxG;AACA;AACA,YAAY,IAAI,sBAAsB,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,EAAE;AAChG,gBAAgB,IAAI,CAAC,iBAAiB,CAAC,kCAAkC,EAAE,CAAC;AAC5E,aAAa;AACb,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,YAAY,KAAK;AACvF,YAAY,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;AAC/D,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,KAAK,CAAC,uBAAuB,EAAE,MAAM;AACtF,YAAY,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC;AACvE,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,eAAe,KAAK;AAC/F,YAAY,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,gBAAgB,EAAE,eAAe,GAAG,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AAClI,YAAY,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;AACrG,SAAS,CAAC,CAAC;AACX;AACA,QAAQ,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,SAAS,KAAK;AACrF,YAAY,IAAI,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;AACtE,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,SAAS,KAAK;AAClF,YAAY,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;AACnE,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC,mBAAmB,KAAK;AACtG,YAAY,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;AACrG,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,SAAS,KAAK;AAClF,YAAY,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;AACnE,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,SAAS,KAAK;AACpF,YAAY,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;AACrE,SAAS,CAAC,CAAC;AACX;AACA,QAAQ,IAAI,CAAC,MAAM,CAAC,mCAAmC,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC,QAAQ,KAAK;AAC/F,YAAYA,YAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;AAC7D,YAAY,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AAC9D,YAAYA,YAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;AACvE,YAAY,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC;AAClE,YAAY,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;AACvF,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,MAAM,CAAC,mCAAmC,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC,QAAQ,KAAK;AAC/F,YAAYA,YAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;AAC7D,YAAY,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AAC9D,YAAYA,YAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;AACvE,YAAY,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC;AAClE,YAAY,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;AACvF,SAAS,CAAC,CAAC;AACX;AACA,QAAQ,IAAI,CAAC,MAAM,CAAC,mCAAmC,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAC,QAAQ,KAAK;AACpG,YAAYA,YAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;AAClE,YAAY,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;AACnE,YAAYA,YAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;AACvE,YAAY,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;AACxF,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,MAAM,CAAC,mCAAmC,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAC,QAAQ,KAAK;AACpG,YAAYA,YAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;AAClE,YAAY,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;AACnE,YAAYA,YAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;AACvE,YAAY,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;AACxF,SAAS,CAAC,CAAC;AACX;AACA,QAAQ,IAAI,CAAC,MAAM,CAAC,mCAAmC,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAC,QAAQ,KAAK;AAC1G,YAAY,QAAQ,GAAG,EAAE,GAAG,CAAC,QAAQ,GAAG,GAAG,IAAI,EAAE,CAAC;AAClD,YAAYA,YAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;AAChF,YAAY,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AAC9D,YAAYA,YAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;AACvE,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,MAAM,CAAC,mCAAmC,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAC,QAAQ,KAAK;AAC1G,YAAY,QAAQ,GAAG,EAAE,GAAG,CAAC,QAAQ,GAAG,GAAG,IAAI,EAAE,CAAC;AAClD,YAAYA,YAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;AAChF,YAAY,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AAC9D,YAAYA,YAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;AACvE,SAAS,CAAC,CAAC;AACX;AACA,QAAQ,IAAI,CAAC,MAAM,CAAC,mCAAmC,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAC,QAAQ,KAAK;AAC1G,YAAYA,YAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;AACxE,YAAY,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,QAAQ,GAAG,IAAI,mBAAmB,CAAC;AAC3F,YAAYA,YAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;AACvE,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,MAAM,CAAC,mCAAmC,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAC,QAAQ,KAAK;AAC1G,YAAYA,YAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;AACxE,YAAY,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,QAAQ,GAAG,IAAI,mBAAmB,CAAC;AAC3F,YAAYA,YAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;AACvE,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,MAAM,CAAC,mCAAmC,CAAC,iBAAiB,CAAC,SAAS,EAAE,CAAC,QAAQ,KAAK;AACnG,YAAYA,YAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;AACxE,YAAY,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC3D,YAAYA,YAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;AACvE,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,MAAM,CAAC,kCAAkC,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC,QAAQ,KAAK;AACtG,YAAY,IAAI,IAAI,CAAC,iBAAiB,EAAE;AACxC,gBAAgB,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AACnE,aAAa;AACb,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAChE,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,wBAAwB,CAAC,qBAAqB,EAAE;AACpD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,qBAAqB,CAAC;AACtD,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,yBAAyB,CAAC,sBAAsB,EAAE;AACtD,QAAQ,IAAI,CAAC,iBAAiB,GAAG,sBAAsB,CAAC;AACxD,QAAQ,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC;AACzH,QAAQ,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,CAAC;AACnD;AACA,QAAQ,IAAI,CAAC,mBAAmB,EAAE,CAAC;AACnC,KAAK;AACL;AACA;AACA;AACA,IAAI,OAAO,GAAG;AACd,QAAQ,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,qBAAqB,EAAE,CAAC,CAAC;AACtE,QAAQ,IAAI,CAAC,iBAAiB,CAAC,yBAAyB,EAAE,CAAC;AAC3D,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,SAAS,GAAG;AAChB,QAAQ,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC;AACrE,QAAQ,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;AAC/D,KAAK;AACL;AACA;AACA;AACA,IAAI,UAAU,GAAG;AACjB,QAAQ,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,wBAAwB,EAAE,CAAC,CAAC;AACzE,QAAQ,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;AACvC,KAAK;AACL;AACA;AACA;AACA,IAAI,IAAI,GAAG;AACX,QAAQ,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAChC,QAAQ,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAC;AAC5C,KAAK;AACL;AACA;AACA;AACA,IAAI,mBAAmB,GAAG;AAC1B;AACA,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;AAC1D;AACA,YAAY,IAAI,CAAC,oBAAoB,EAAE,CAAC;AACxC,YAAY,IAAI,CAAC,iBAAiB,CAAC,yBAAyB,EAAE,CAAC;AAC/D,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,WAAW,GAAG,KAAK,EAAE;AAC1C;AACA,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE;AACjD,YAAY,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAC3C,YAAY,OAAO;AACnB,SAAS;AACT;AACA,QAAQ,IAAI,WAAW,EAAE;AACzB,YAAY,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACvD,YAAY,IAAI,CAAC,SAAS,EAAE,CAAC;AAC7B,YAAY,OAAO;AACnB,SAAS;AACT;AACA,QAAQA,YAAM,CAAC,OAAO,CAAC,kJAAkJ,CAAC,CAAC;AAC3K,KAAK;AACL,IAAI,cAAc,GAAG;AACrB,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE;AACjD,YAAY,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAC1C,YAAY,OAAO;AACnB,SAAS;AACT;AACA,QAAQA,YAAM,CAAC,IAAI,CAAC,uGAAuG,CAAC,CAAC;AAC7H,KAAK;AACL,IAAI,kBAAkB,CAAC,IAAI,EAAE;AAC7B,QAAQ,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAC3B,QAAQ,KAAK,MAAM,WAAW,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,iBAAiB,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,wBAAwB,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,cAAc,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,eAAe,EAAE,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;AAC5S,YAAY,IAAI,QAAQ,CAAC,uBAAuB,CAAC,WAAW,CAAC,EAAE;AAC/D,gBAAgB,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC;AACzD,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,CAAC,WAAW,GAAG,KAAK,EAAE;AACtC;AACA,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE;AACpD,YAAY,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AACvC,YAAY,OAAO;AACnB,SAAS;AACT;AACA,QAAQ,IAAI,WAAW,EAAE;AACzB,YAAY,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AAC1D,YAAY,IAAI,CAAC,SAAS,EAAE,CAAC;AAC7B,YAAY,OAAO;AACnB,SAAS;AACT;AACA,QAAQA,YAAM,CAAC,OAAO,CAAC,iJAAiJ,CAAC,CAAC;AAC1K,KAAK;AACL,IAAI,UAAU,GAAG;AACjB,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE;AACpD,YAAY,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AACtC,YAAY,OAAO;AACnB,SAAS;AACT;AACA,QAAQA,YAAM,CAAC,IAAI,CAAC,qGAAqG,CAAC,CAAC;AAC3H,KAAK;AACL,IAAI,cAAc,CAAC,IAAI,EAAE;AACzB,QAAQ,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAC3B,QAAQ,KAAK,MAAM,WAAW,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,iBAAiB,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,wBAAwB,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,cAAc,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,eAAe,EAAE,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;AAC5S,YAAY,IAAI,QAAQ,CAAC,uBAAuB,CAAC,WAAW,CAAC,EAAE;AAC/D,gBAAgB,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC;AACzD,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,IAAI,oBAAoB,GAAG;AAC3B,QAAQ,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,sBAAsB,EAAE,CAAC,CAAC;AACvE,KAAK;AACL;AACA;AACA;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC;AAC/D,KAAK;AACL;AACA;AACA;AACA,IAAI,iBAAiB,CAAC,KAAK,EAAE;AAC7B,QAAQ,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,mBAAmB,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAClF,KAAK;AACL;AACA;AACA;AACA,IAAI,kBAAkB,CAAC,MAAM,EAAE;AAC/B,QAAQ,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,oBAAoB,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AACpF,KAAK;AACL;AACA;AACA;AACA,IAAI,oBAAoB,CAAC,WAAW,EAAE;AACtC,QAAQ,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,sBAAsB,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;AACtF,KAAK;AACL;AACA;AACA;AACA,IAAI,gBAAgB,GAAG;AACvB,QAAQ,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,kBAAkB,EAAE,CAAC,CAAC;AACnE,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,CAAC,WAAW,EAAE,qBAAqB,EAAE;AACtD,QAAQ,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,uBAAuB,CAAC;AACrE,YAAY,WAAW,EAAE,WAAW;AACpC,YAAY,qBAAqB,EAAE,qBAAqB;AACxD,SAAS,CAAC,CAAC,CAAC;AACZ,KAAK;AACL;AACA;AACA;AACA,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,qBAAqB,EAAE,CAAC,CAAC;AACtE,KAAK;AACL;AACA;AACA;AACA,IAAI,kBAAkB,GAAG;AACzB,QAAQ,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC;AACrE,KAAK;AACL;AACA;AACA;AACA,IAAI,eAAe,GAAG;AACtB,QAAQ,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;AAClE,KAAK;AACL;AACA;AACA;AACA,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,qBAAqB,EAAE,CAAC,CAAC;AACtE,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC1C,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,oBAAoB,CAAC,cAAc,EAAE;AACzC,QAAQ,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,sBAAsB,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;AACzF,KAAK;AACL,IAAI,iCAAiC,CAAC,QAAQ,EAAE;AAChD,QAAQ,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,mCAAmC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AAChG,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,aAAa,CAAC,UAAU,EAAE;AAC9B;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE;AACzE,YAAY,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC9C,SAAS;AACT,QAAQ,UAAU,CAAC,uBAAuB,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;AAC3H,QAAQ,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,kBAAkB,CAAC,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;AAClG,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,oBAAoB,CAAC,EAAE,EAAE;AAC7B,QAAQ,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,sBAAsB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AACpF,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,kBAAkB,CAAC,QAAQ,EAAE;AACjC,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,oBAAoB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACjF,QAAQ,IAAI,QAAQ,CAAC,sBAAsB,EAAE;AAC7C,YAAY,IAAI,CAAC,oBAAoB,GAAG,CAAC,EAAE,GAAG,QAAQ,CAAC,sBAAsB,CAAC,2BAA2B,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;AAClJ,YAAY,IAAI,IAAI,CAAC,oBAAoB,KAAK,KAAK,EAAE;AACrD,gBAAgBA,YAAM,CAAC,IAAI,CAAC,wGAAwG,CAAC,CAAC;AACtI,aAAa;AACb,SAAS;AACT,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;AACtD,QAAQ,MAAM,SAAS,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACvE,QAAQA,YAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;AAC5D,QAAQ,IAAI,QAAQ,CAAC,eAAe,EAAE;AACtC;AACA;AACA;AACA;AACA,YAAY,IAAI,QAAQ,CAAC,eAAe,CAAC,KAAK,EAAE;AAChD,gBAAgB,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,KAAK;AACrE;AACA,gBAAgB,YAAY,IAAI,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACtE,sBAAsB,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAC/E,sBAAsB,QAAQ,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;AAC3D,gBAAgB,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,KAAK,EAAE,YAAY,IAAI,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAC7H,sBAAsB,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAC/E,sBAAsB,QAAQ,CAAC,eAAe,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AAC5D,aAAa;AACb,YAAY,IAAI,QAAQ,CAAC,eAAe,CAAC,UAAU,EAAE;AACrD,gBAAgB,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,UAAU;AAC1E;AACA,gBAAgB,YAAY,IAAI,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,UAAU,CAAC;AAC3E,sBAAsB,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;AACpF,sBAAsB,QAAQ,CAAC,eAAe,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC;AAChE,gBAAgB,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,UAAU,EAAE,YAAY,IAAI,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,UAAU,CAAC;AACvI,sBAAsB,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;AACpF,sBAAsB,QAAQ,CAAC,eAAe,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC;AAClE,aAAa;AACb;AACA;AACA,YAAY,IAAI,YAAY,EAAE;AAC9B,gBAAgB,IAAI,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,EAAE;AACvE,oBAAoB,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAC5J,iBAAiB;AACjB,gBAAgB,IAAI,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,EAAE;AACvE,oBAAoB,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAC5J,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,QAAQ,IAAI,QAAQ,CAAC,cAAc,EAAE;AACrC,YAAY,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,YAAY,IAAI,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,gBAAgB,CAAC;AAC/I,kBAAkB,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;AACtF,kBAAkB,QAAQ,CAAC,cAAc,CAAC,UAAU,GAAG,IAAI,mBAAmB,CAAC;AAC/E,YAAY,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,YAAY,IAAI,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,gBAAgB,CAAC;AAC/I,kBAAkB,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;AACtF,kBAAkB,QAAQ,CAAC,cAAc,CAAC,UAAU,GAAG,IAAI,mBAAmB,CAAC;AAC/E,YAAY,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,SAAS,EAAE,YAAY,IAAI,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,SAAS,CAAC;AACjI,kBAAkB,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;AAC/E,kBAAkB,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AAC/C,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,0BAA0B,CAAC,mBAAmB,EAAE;AACpD,QAAQ,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,CAAC;AACnF,KAAK;AACL,IAAI,cAAc,CAAC,WAAW,EAAE;AAChC,QAAQ,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,gBAAgB,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;AACvF,KAAK;AACL,IAAI,kBAAkB,CAAC,OAAO,EAAE;AAChC,QAAQ,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,oBAAoB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AACzF,KAAK;AACL;AACA,IAAI,6BAA6B,CAAC,kBAAkB,EAAE;AACtD;AACA,QAAQ,MAAM,mBAAmB,GAAG,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,sBAAsB,EAAE,CAAC;AACrG;AACA,QAAQ,IAAI,mBAAmB,IAAI,IAAI,EAAE;AACzC;AACA,YAAY,MAAM,cAAc,GAAG,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,EAAE,IAAI,mBAAmB,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;AAC3K;AACA,YAAY,IAAI,cAAc,IAAI,IAAI;AACtC,gBAAgB,cAAc,CAAC,aAAa,IAAI,OAAO;AACvD,gBAAgB,cAAc,CAAC,aAAa,IAAI,KAAK,EAAE;AACvD;AACA,gBAAgB,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,2BAA2B,EAAE,CAAC,CAAC;AACpF,aAAa;AACb;AACA,YAAY,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,eAAe,EAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;AACxG,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,kBAAkB,GAAG;AACzB,QAAQ,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE;AAChE,YAAY,OAAO,KAAK,CAAC;AACzB,SAAS;AACT,QAAQ,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,CAAC;AACjD,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,6BAA6B,CAAC,MAAM,EAAE;AAC1C,QAAQ,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE;AAChE,YAAY,OAAO,KAAK,CAAC;AACzB,SAAS;AACT,QAAQ,IAAI,CAAC,IAAI,CAAC,iCAAiC,EAAE;AACrD,YAAY,IAAI,CAAC,iCAAiC,GAAG,IAAI,gCAAgC,CAAC,IAAI,CAAC,iBAAiB,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,MAAM,KAAK;AACtL,gBAAgB,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,iCAAiC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AACpG,aAAa,CAAC,CAAC;AACf,YAAY,IAAI,CAAC,gBAAgB,CAAC,gCAAgC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,KAAK;AAChG,gBAAgB,IAAI,CAAC,iCAAiC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACzE,aAAa,CAAC,CAAC;AACf,SAAS;AACT,QAAQ,OAAO,IAAI,CAAC,iCAAiC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACpE,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,cAAc,GAAG;AACrB,QAAQ,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE;AAChE,YAAY,OAAO,KAAK,CAAC;AACzB,SAAS;AACT,QAAQ,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;AAC7C,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE;AAChE,YAAY,OAAO,KAAK,CAAC;AACzB,SAAS;AACT,QAAQ,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,CAAC;AACnD,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,iBAAiB,CAAC,UAAU,EAAE;AAClC,QAAQ,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE;AAChE,YAAY,OAAO,KAAK,CAAC;AACzB,SAAS;AACT,QAAQ,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;AAC7D,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,WAAW,CAAC,UAAU,EAAE;AAC5B,QAAQ,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE;AAChE,YAAY,OAAO,KAAK,CAAC;AACzB,SAAS;AACT,QAAQ,IAAI,CAAC,IAAI,CAAC,oBAAoB,IAAI,gBAAgB,IAAI,UAAU,EAAE;AAC1E,YAAY,OAAO,KAAK,CAAC;AACzB,SAAS;AACT,QAAQ,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;AACvD,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,kBAAkB,CAAC,OAAO,EAAE;AAChC,QAAQ,IAAI,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE;AAC9F,YAAY,OAAO,KAAK,CAAC;AACzB,SAAS;AACT,QAAQ,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC3D,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,QAAQ,EAAE;AAC/B,QAAQ,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE;AAChE,YAAY,OAAO,KAAK,CAAC;AACzB,SAAS;AACT,QAAQ,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AAC1D,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,wBAAwB,CAAC,IAAI,EAAE,QAAQ,EAAE;AAC7C,QAAQ,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC3F,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,2BAA2B,CAAC,IAAI,EAAE;AACtC,QAAQ,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;AACpF,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,CAAC,CAAC,EAAE;AACrB,QAAQ,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AACnD,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE;AACrC,QAAQ,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC5D,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE;AACxC,QAAQ,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC/D,KAAK;AACL;AACA;AACA;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;AACzC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,uBAAuB,CAAC,wBAAwB,EAAE;AACtD,QAAQ,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,GAAG,wBAAwB,CAAC;AAC/E,KAAK;AACL,IAAI,IAAI,gBAAgB,GAAG;AAC3B,QAAQ,OAAO,IAAI,CAAC,iBAAiB,CAAC;AACtC,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,IAAI,kBAAkB,GAAG;AAC7B,QAAQ,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;AAC/C,KAAK;AACL;AACA;AACA;AACA,IAAI,IAAI,eAAe,GAAG;AAC1B,QAAQ,OAAO,IAAI,CAAC,gBAAgB,CAAC;AACrC,KAAK;AACL,IAAI,sBAAsB,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE;AACrD,QAAQ,IAAI,SAAS,KAAK,gBAAgB,CAAC,YAAY,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;AAC3F,YAAYA,YAAM,CAAC,OAAO,CAAC,CAAC,4CAA4C,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAClF,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,IAAI,SAAS,KAAK,gBAAgB,CAAC,UAAU,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;AACzF,YAAY,IAAI,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAC7L,SAAS;AACT,aAAa;AACb,YAAY,IAAI,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5H,SAAS;AACT,KAAK;AACL,IAAI,IAAI,kBAAkB,GAAG;AAC7B,QAAQ,OAAO,IAAI,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,kBAAkB,CAAC;AACjF,KAAK;AACL,IAAI,cAAc,GAAG;AACrB,QAAQ,OAAO,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC;AACrD,KAAK;AACL;;ACzpBK,MAAC,MAAM,GAAG;AACf,SAAE2B,WAAK;AACP,aAAEC,eAAS;AACX,qBAAEC,uBAAiB;AACnB,aAAEC,eAAS;AACX,eAAEC,iBAAW;AACb,mBAAEC,qBAAe;AACjB,EAAE,SAAS,EAAE;AACb,IAAI,GAAGC,eAAS;AAChB,GAAG;AACH;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,UAAU,CAAC;AACjB;AACA,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,GAAG,KAAK,GAAG;AACzE;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACvB;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACvB;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACvB;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AACtC;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC;AAC1D,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE,gBAAgB,EAAE,CAAC;AACpD,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC;AAC7C;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC;AAC/C,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC;AACzC;AACA,EAAE,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,IAAI,CAAC,CAAC;AACrD,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,aAAa,EAAE,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;AAC5D;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC;AACjD,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,YAAY,EAAE,CAAC;AAC7C;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC;AAC/B;AACA,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;AAC5C,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AAC9C;AACA;AACA,EAAE,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC;AAC1E,EAAE,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC;AACxE;AACA,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;AACpC,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;AACvC;AACA,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;AACvD;AACA,EAAE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;AAC3D;AACA,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;AACxB;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,IAAI,EAAE,IAAI,GAAG;AACd;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AACpB,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;AAChC,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,QAAQ,EAAE,QAAQ,GAAG;AACtB;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC5B,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA;AACA;AACA;AACA;AACA,CAAC,aAAa,GAAG;AACjB;AACA,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;AACpC;AACA,EAAE,KAAK,IAAI,CAAC,SAAS,KAAK,SAAS,GAAG;AACtC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;AAChD,GAAG;AACH;AACA,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACvB;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,cAAc,EAAE,QAAQ,GAAG;AAC5B;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;AAClC,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA;AACA;AACA;AACA;AACA,CAAC,mBAAmB,GAAG;AACvB;AACA,EAAE,KAAK,IAAI,CAAC,QAAQ,GAAG;AACvB;AACA,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,IAAI,EAAE,CAAC;AAC3C;AACA,GAAG,KAAK,IAAI,CAAC,eAAe,KAAK,SAAS,GAAG;AAC7C,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;AACvD,IAAI;AACJ;AACA,GAAG;AACH;AACA,EAAE,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AACxB;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA,CAAC,KAAK,GAAG;AACT,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;AACrC,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC7B,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,GAAG;AAC1B,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;AAClC,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,OAAO,EAAE,QAAQ,GAAG,IAAI,GAAG;AAC5B;AACA,EAAE,KAAK,QAAQ,KAAK,IAAI,CAAC,SAAS,GAAG,OAAO,IAAI,CAAC;AACjD;AACA,EAAE,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC5B;AACA,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC;AAC/D,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AACxD;AACA,EAAE,OAAO,IAAI,CAAC;AACd;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG;AACrB;AACA,EAAE,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC;AACvB;AACA,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,MAAM,GAAG,EAAE,CAAC;AAC7D;AACA,EAAE,OAAO,IAAI,CAAC;AACd;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA,CAAC,IAAI,GAAG;AACR,EAAE,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AAC5B,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,OAAO,EAAE,OAAO,GAAG;AACpB,EAAE,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;AAC5E,EAAE,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;AAChC,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AACjB,EAAE,OAAO,UAAU,CAAC;AACpB,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,GAAG,EAAE,GAAG,GAAG;AACZ,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,GAAG,EAAE,GAAG,GAAG;AACZ,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,IAAI,EAAE,IAAI,GAAG;AACd,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,QAAQ,EAAE,QAAQ,GAAG;AACtB,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;AAC3B;AACA,EAAE,KAAK,IAAI,CAAC,iBAAiB,KAAK,SAAS,GAAG;AAC9C,GAAG,oBAAoB,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAClD,GAAG,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;AACtC,GAAG;AACH;AACA,EAAE,KAAK,IAAI,CAAC,UAAU,GAAG;AACzB,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AAC1B,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC;AACd;AACA,EAAE;AACF;AACA,CAAC,eAAe,GAAG;AACnB;AACA,EAAE,IAAI,CAAC,iBAAiB,GAAG,qBAAqB,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;AACzE;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC/B;AACA,EAAE,KAAK,QAAQ,KAAK,IAAI,CAAC,gBAAgB,GAAG;AAC5C,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AACxB,GAAG;AACH;AACA,EAAE,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;AACnC;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA,CAAC,QAAQ,GAAG;AACZ,EAAE,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AACtC,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,QAAQ,EAAE,KAAK,GAAG;AACnB;AACA,EAAE,KAAK,IAAI,CAAC,QAAQ,EAAE,KAAK,KAAK,GAAG;AACnC;AACA,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC;AACxC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AACxB,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AACxB;AACA,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC;AACd;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,aAAa,GAAG;AACjB,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,IAAI,EAAE,KAAK,GAAG;AACf,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC;AACzB,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC7B,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,IAAI,GAAG;AACR,EAAE,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;AACzB,EAAE;AACF;AACA;AACA;AACA;AACA,CAAC,OAAO,GAAG;AACX,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;AACvB,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;AACzE,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;AAC/E,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;AACvD,EAAE;AACF;AACA,CAAC;AACD;AACA,MAAM,iBAAiB,SAAS,UAAU,CAAC;AAC3C;AACA,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG;AACzC;AACA,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC;AAC5D;AACA,EAAE,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,EAAE,OAAO,EAAE,CAAC;AAClD,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AACjD,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;AAC/D;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAC1C;AACA,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,QAAQ,EAAE,MAAM;AAChD,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;AACxC,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC9B,GAAG,EAAE,CAAC;AACN;AACA,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;AAC9B;AACA,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;AACvB;AACA,EAAE;AACF;AACA,CAAC,aAAa,GAAG;AACjB,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AACxC,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC;AACD;AACA,SAAS,oBAAoB,EAAE,MAAM,GAAG;AACxC;AACA,CAAC,IAAI,KAAK,EAAE,MAAM,CAAC;AACnB;AACA,CAAC,KAAK,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,uBAAuB,EAAE,GAAG;AACxD;AACA,EAAE,MAAM,GAAG,KAAK,EAAE,CAAC,EAAE,CAAC;AACtB;AACA,EAAE,MAAM,KAAK,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,4CAA4C,EAAE,GAAG;AACpF;AACA,EAAE,MAAM,GAAG,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE;AACjE,KAAK,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE;AAC3D,KAAK,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC5D;AACA,EAAE,MAAM,KAAK,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,qCAAqC,EAAE,GAAG;AAC7E;AACA,EAAE,MAAM,GAAG,KAAK,EAAE,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,EAAE,CAAC;AACvF;AACA,EAAE;AACF;AACA,CAAC,KAAK,MAAM,GAAG;AACf,EAAE,OAAO,GAAG,GAAG,MAAM,CAAC;AACtB,EAAE;AACF;AACA,CAAC,OAAO,KAAK,CAAC;AACd;AACA,CAAC;AACD;AACA,MAAM,MAAM,GAAG;AACf,CAAC,WAAW,EAAE,IAAI;AAClB,CAAC,KAAK,EAAE,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;AAClC,CAAC,aAAa,EAAE,oBAAoB;AACpC,CAAC,WAAW,EAAE,oBAAoB;AAClC,CAAC,CAAC;AACF;AACA,MAAM,GAAG,GAAG;AACZ,CAAC,WAAW,EAAE,IAAI;AAClB,CAAC,KAAK,EAAE,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;AAClC,CAAC,aAAa,EAAE,MAAM,IAAI,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE;AAC/D,CAAC,WAAW,EAAE,KAAK,IAAI,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE;AAClE,CAAC,CAAC;AACF;AACA,MAAM,KAAK,GAAG;AACd,CAAC,WAAW,EAAE,KAAK;AACnB,CAAC,KAAK,EAAE,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE;AAC1D,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,CAAC,GAAG;AAC/C;AACA,EAAE,MAAM,GAAG,GAAG,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC;AAC1C;AACA,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,KAAK,GAAG,GAAG,QAAQ,CAAC;AACrD,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,KAAK,GAAG,GAAG,QAAQ,CAAC;AACpD,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,QAAQ,CAAC;AAC/C;AACA,EAAE;AACF,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,GAAG,CAAC,GAAG;AAC1C;AACA,EAAE,QAAQ,GAAG,GAAG,GAAG,QAAQ,CAAC;AAC5B;AACA,EAAE,MAAM,GAAG,GAAG,CAAC,GAAG,QAAQ,IAAI,EAAE;AAChC,IAAI,CAAC,GAAG,QAAQ,IAAI,CAAC;AACrB,IAAI,CAAC,GAAG,QAAQ,IAAI,CAAC,CAAC;AACtB;AACA,EAAE,OAAO,GAAG,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC;AAChC;AACA,EAAE;AACF,CAAC,CAAC;AACF;AACA,MAAM,MAAM,GAAG;AACf,CAAC,WAAW,EAAE,KAAK;AACnB,CAAC,KAAK,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC;AAC9B,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,CAAC,GAAG;AAC/C;AACA,EAAE,MAAM,GAAG,GAAG,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC;AAC1C;AACA,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,KAAK,GAAG,GAAG,QAAQ,CAAC;AAClD,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,KAAK,GAAG,GAAG,QAAQ,CAAC;AACjD,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,QAAQ,CAAC;AAC5C;AACA,EAAE;AACF,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,GAAG,CAAC,GAAG;AAC1C;AACA,EAAE,QAAQ,GAAG,GAAG,GAAG,QAAQ,CAAC;AAC5B;AACA,EAAE,MAAM,GAAG,GAAG,CAAC,GAAG,QAAQ,IAAI,EAAE;AAChC,IAAI,CAAC,GAAG,QAAQ,IAAI,CAAC;AACrB,IAAI,CAAC,GAAG,QAAQ,IAAI,CAAC,CAAC;AACtB;AACA,EAAE,OAAO,GAAG,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC;AAChC;AACA,EAAE;AACF,CAAC,CAAC;AACF;AACA,MAAM,OAAO,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC/C;AACA,SAAS,cAAc,EAAE,KAAK,GAAG;AACjC,CAAC,OAAO,OAAO,CAAC,IAAI,EAAE,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;AACxD,CAAC;AACD;AACA,MAAM,eAAe,SAAS,UAAU,CAAC;AACzC;AACA,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG;AACnD;AACA,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AACjD;AACA,EAAE,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,EAAE,OAAO,EAAE,CAAC;AAClD,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC9C,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC;AAC7C,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;AAC/D;AACA,EAAE,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,aAAa,EAAE,OAAO,EAAE,CAAC;AACjD,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC5C,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;AACnD,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;AAC9D;AACA,EAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC;AAClD,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,aAAa,EAAE,CAAC;AAC/C;AACA,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAC3C,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC5C,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;AACzC;AACA,EAAE,IAAI,CAAC,OAAO,GAAG,cAAc,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;AACrD,EAAE,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC5B;AACA,EAAE,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC5C,EAAE,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC5B;AACA,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,OAAO,EAAE,MAAM;AAC/C,GAAG,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;AACpD,GAAG,EAAE,CAAC;AACN;AACA,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,EAAE,MAAM;AAC9C,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC9B,GAAG,EAAE,CAAC;AACN;AACA,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,OAAO,EAAE,MAAM;AAC9C,GAAG,MAAM,QAAQ,GAAG,oBAAoB,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AAC7D,GAAG,KAAK,QAAQ,GAAG;AACnB,IAAI,IAAI,CAAC,sBAAsB,EAAE,QAAQ,EAAE,CAAC;AAC5C,IAAI;AACJ,GAAG,EAAE,CAAC;AACN;AACA,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,OAAO,EAAE,MAAM;AAC9C,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AAC5B,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AACvB,GAAG,EAAE,CAAC;AACN;AACA,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,MAAM,EAAE,MAAM;AAC7C,GAAG,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC7B,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AACxB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC9B,GAAG,EAAE,CAAC;AACN;AACA,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;AAC7B;AACA,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;AACvB;AACA,EAAE;AACF;AACA,CAAC,KAAK,GAAG;AACT,EAAE,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,sBAAsB,EAAE,CAAC;AAC7D,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,sBAAsB,EAAE,KAAK,GAAG;AACjC;AACA,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG;AAClC;AACA,GAAG,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC;AACxD,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAC7B;AACA,GAAG,MAAM;AACT;AACA,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;AACxE,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AACxB,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AACxB;AACA,GAAG;AACH;AACA,EAAE;AACF;AACA,CAAC,IAAI,GAAG;AACR,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;AACrE,EAAE;AACF;AACA,CAAC,IAAI,EAAE,KAAK,GAAG;AACf,EAAE,IAAI,CAAC,sBAAsB,EAAE,KAAK,EAAE,CAAC;AACvC,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC7B,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,aAAa,GAAG;AACjB,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;AAClF,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,GAAG;AAC5B,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC;AACvD,GAAG;AACH,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AAC1D,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC;AACD;AACA,MAAM,kBAAkB,SAAS,UAAU,CAAC;AAC5C;AACA,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG;AACzC;AACA,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;AACpD;AACA;AACA,EAAE,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAC;AACpD,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;AACzC,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AAC3C;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,OAAO,EAAE,CAAC,IAAI;AAC/C,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC;AACtB,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AACvC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AACxB,GAAG,EAAE,CAAC;AACN;AACA;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;AAC7E;AACA,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC;AAC/B;AACA,EAAE;AACF;AACA,CAAC;AACD;AACA,MAAM,gBAAgB,SAAS,UAAU,CAAC;AAC1C;AACA,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG;AACzD;AACA,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AAClD;AACA,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;AACpB;AACA,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;AAClB,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;AAClB;AACA,EAAE,MAAM,YAAY,GAAG,IAAI,KAAK,SAAS,CAAC;AAC1C,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE,EAAE,YAAY,EAAE,CAAC;AAC3E;AACA,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;AACvB;AACA,EAAE;AACF;AACA,CAAC,QAAQ,EAAE,QAAQ,GAAG;AACtB,EAAE,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC5B,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;AACvB,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,GAAG,EAAE,GAAG,GAAG;AACZ,EAAE,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;AAClB,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;AACzB,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,GAAG,EAAE,GAAG,GAAG;AACZ,EAAE,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;AAClB,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;AACzB,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG;AAC/B,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AACpB,EAAE,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;AAChC,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,aAAa,GAAG;AACjB;AACA,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChC;AACA,EAAE,KAAK,IAAI,CAAC,UAAU,GAAG;AACzB;AACA,GAAG,IAAI,OAAO,GAAG,EAAE,KAAK,GAAG,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACnE,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;AACnD;AACA,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,GAAG,GAAG,GAAG,GAAG,CAAC;AAChD;AACA,GAAG;AACH;AACA,EAAE,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG;AAC7B,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;AAC9F,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC;AACd;AACA,EAAE;AACF;AACA,CAAC,UAAU,GAAG;AACd;AACA,EAAE,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,EAAE,OAAO,EAAE,CAAC;AAClD,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC7C,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,mBAAmB,EAAE,CAAC,OAAO,CAAC;AACnE;AACA,EAAE,KAAK,OAAO,GAAG;AACjB,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAChD,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAC7C,GAAG;AACH;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAC1C;AACA,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;AAC9B;AACA,EAAE,MAAM,OAAO,GAAG,MAAM;AACxB;AACA,GAAG,IAAI,KAAK,GAAG,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;AAC/C;AACA,GAAG,KAAK,KAAK,EAAE,KAAK,EAAE,GAAG,OAAO;AAChC;AACA,GAAG,KAAK,IAAI,CAAC,aAAa,GAAG;AAC7B,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;AAChC,IAAI;AACJ;AACA,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;AACzC;AACA,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA,EAAE,MAAM,SAAS,GAAG,KAAK,IAAI;AAC7B;AACA,GAAG,MAAM,KAAK,GAAG,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;AACjD;AACA,GAAG,KAAK,KAAK,EAAE,KAAK,EAAE,GAAG,OAAO;AAChC;AACA,GAAG,IAAI,CAAC,kBAAkB,EAAE,KAAK,GAAG,KAAK,EAAE,CAAC;AAC5C;AACA;AACA,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AACvC;AACA,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,SAAS,GAAG,CAAC,IAAI;AACzB;AACA,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,OAAO,GAAG;AAC5B,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,IAAI;AACJ,GAAG,KAAK,CAAC,CAAC,IAAI,KAAK,SAAS,GAAG;AAC/B,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;AACvB,IAAI,SAAS,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC,EAAE,EAAE,CAAC;AAC5D,IAAI;AACJ,GAAG,KAAK,CAAC,CAAC,IAAI,KAAK,WAAW,GAAG;AACjC,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;AACvB,IAAI,SAAS,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;AACjE,IAAI;AACJ,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,OAAO,GAAG,CAAC,IAAI;AACvB,GAAG,KAAK,IAAI,CAAC,aAAa,GAAG;AAC7B,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;AACvB,IAAI,SAAS,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC,EAAE,EAAE,CAAC;AAC7D,IAAI;AACJ,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA,EAAE,IAAI,sBAAsB,GAAG,KAAK;AACpC,GAAG,WAAW;AACd,GAAG,WAAW;AACd,GAAG,WAAW;AACd,GAAG,SAAS;AACZ,GAAG,SAAS,CAAC;AACb;AACA;AACA;AACA,EAAE,MAAM,WAAW,GAAG,CAAC,CAAC;AACxB;AACA,EAAE,MAAM,WAAW,GAAG,CAAC,IAAI;AAC3B;AACA,GAAG,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC;AAC3B,GAAG,WAAW,GAAG,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC;AACzC,GAAG,sBAAsB,GAAG,IAAI,CAAC;AACjC;AACA,GAAG,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC/B,GAAG,SAAS,GAAG,CAAC,CAAC;AACjB;AACA,GAAG,MAAM,CAAC,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AACvD,GAAG,MAAM,CAAC,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AACnD;AACA,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,WAAW,GAAG,CAAC,IAAI;AAC3B;AACA,GAAG,KAAK,sBAAsB,GAAG;AACjC;AACA,IAAI,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,GAAG,WAAW,CAAC;AACvC,IAAI,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,GAAG,WAAW,CAAC;AACvC;AACA,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,WAAW,GAAG;AACxC;AACA,KAAK,CAAC,CAAC,cAAc,EAAE,CAAC;AACxB,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AACxB,KAAK,sBAAsB,GAAG,KAAK,CAAC;AACpC,KAAK,IAAI,CAAC,iBAAiB,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAChD;AACA,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,WAAW,GAAG;AAC/C;AACA,KAAK,SAAS,EAAE,CAAC;AACjB;AACA,KAAK;AACL;AACA,IAAI;AACJ;AACA;AACA,GAAG,KAAK,CAAC,sBAAsB,GAAG;AAClC;AACA,IAAI,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,GAAG,WAAW,CAAC;AACvC;AACA,IAAI,SAAS,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC,EAAE,CAAC;AACjE;AACA;AACA;AACA,IAAI,KAAK,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI,GAAG;AAC7C,KAAK,SAAS,GAAG,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;AACvC,KAAK,MAAM,KAAK,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI,GAAG;AACpD,KAAK,SAAS,GAAG,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;AACvC,KAAK;AACL;AACA,IAAI,IAAI,CAAC,kBAAkB,EAAE,SAAS,GAAG,SAAS,EAAE,CAAC;AACrD;AACA,IAAI;AACJ;AACA,GAAG,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC;AAC3B;AACA,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,SAAS,GAAG,MAAM;AAC1B,GAAG,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAC/C,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC9B,GAAG,MAAM,CAAC,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AAC1D,GAAG,MAAM,CAAC,mBAAmB,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AACtD,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,GAAG,MAAM;AACxB,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC7B,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,MAAM,GAAG,MAAM;AACvB,GAAG,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;AAC9B,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AACxB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC9B,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACnD,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AACvD,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC;AACvE,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AAC3D,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACnD,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACjD;AACA,EAAE;AACF;AACA,CAAC,WAAW,GAAG;AACf;AACA,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACzB;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC;AACjD,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,YAAY,EAAE,CAAC;AAC7C;AACA,EAAE,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC;AAC/C,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC;AACzC;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;AACzC,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AACzD;AACA,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE,gBAAgB,EAAE,CAAC;AACpD;AACA;AACA;AACA;AACA,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM;AACnC,GAAG,OAAO,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AAChD,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,aAAa,GAAG,OAAO,IAAI;AACnC,GAAG,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;AACrD,GAAG,IAAI,KAAK,GAAG,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;AAC3E,GAAG,IAAI,CAAC,kBAAkB,EAAE,KAAK,EAAE,CAAC;AACpC,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA,EAAE,MAAM,SAAS,GAAG,CAAC,IAAI;AACzB,GAAG,IAAI,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC;AAClC,GAAG,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;AAC9B,GAAG,MAAM,CAAC,gBAAgB,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;AACrD,GAAG,MAAM,CAAC,gBAAgB,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AACjD,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,SAAS,GAAG,CAAC,IAAI;AACzB,GAAG,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;AAC9B,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,OAAO,GAAG,MAAM;AACxB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC9B,GAAG,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,CAAC;AACnC,GAAG,MAAM,CAAC,mBAAmB,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;AACxD,GAAG,MAAM,CAAC,mBAAmB,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AACpD,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA,EAAE,IAAI,gBAAgB,GAAG,KAAK,EAAE,WAAW,EAAE,WAAW,CAAC;AACzD;AACA,EAAE,MAAM,cAAc,GAAG,CAAC,IAAI;AAC9B,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC;AACtB,GAAG,IAAI,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC;AAClC,GAAG,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;AAC3C,GAAG,gBAAgB,GAAG,KAAK,CAAC;AAC5B,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,YAAY,GAAG,CAAC,IAAI;AAC5B;AACA,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,OAAO;AACtC;AACA;AACA;AACA,GAAG,KAAK,IAAI,CAAC,aAAa,GAAG;AAC7B;AACA,IAAI,WAAW,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC;AACzC,IAAI,WAAW,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC;AACzC,IAAI,gBAAgB,GAAG,IAAI,CAAC;AAC5B;AACA,IAAI,MAAM;AACV;AACA;AACA,IAAI,cAAc,EAAE,CAAC,EAAE,CAAC;AACxB;AACA,IAAI;AACJ;AACA,GAAG,MAAM,CAAC,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC;AAC3E,GAAG,MAAM,CAAC,gBAAgB,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;AACrD;AACA,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,WAAW,GAAG,CAAC,IAAI;AAC3B;AACA,GAAG,KAAK,gBAAgB,GAAG;AAC3B;AACA,IAAI,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,OAAO,GAAG,WAAW,CAAC;AACpD,IAAI,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,OAAO,GAAG,WAAW,CAAC;AACpD;AACA,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG;AAC3C;AACA;AACA,KAAK,cAAc,EAAE,CAAC,EAAE,CAAC;AACzB;AACA,KAAK,MAAM;AACX;AACA;AACA,KAAK,MAAM,CAAC,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AAC5D,KAAK,MAAM,CAAC,mBAAmB,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;AAC1D;AACA,KAAK;AACL;AACA,IAAI,MAAM;AACV;AACA,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;AACvB,IAAI,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;AAC5C;AACA,IAAI;AACJ;AACA,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,UAAU,GAAG,MAAM;AAC3B,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC9B,GAAG,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,CAAC;AACnC,GAAG,MAAM,CAAC,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AAC1D,GAAG,MAAM,CAAC,mBAAmB,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;AACxD,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;AACnE,EAAE,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAClC,EAAE,IAAI,wBAAwB,CAAC;AAC/B;AACA,EAAE,MAAM,OAAO,GAAG,CAAC,IAAI;AACvB;AACA;AACA,GAAG,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAClE,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC,aAAa,GAAG,OAAO;AAClD;AACA,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC;AACtB;AACA;AACA,GAAG,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;AAC7D,GAAG,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,KAAK,EAAE,CAAC;AACtD;AACA;AACA,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AACvC;AACA;AACA,GAAG,YAAY,EAAE,wBAAwB,EAAE,CAAC;AAC5C,GAAG,wBAAwB,GAAG,UAAU,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,CAAC;AACpF;AACA,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;AAC1D,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC;AAClF,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC;AACxE;AACA,EAAE;AACF;AACA,CAAC,iBAAiB,EAAE,MAAM,EAAE,IAAI,GAAG,YAAY,GAAG;AAClD,EAAE,KAAK,IAAI,CAAC,OAAO,GAAG;AACtB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;AACzD,GAAG;AACH,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;AAC3D,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;AAC1D,EAAE;AACF;AACA,CAAC,gBAAgB,GAAG;AACpB;AACA,EAAE,KAAK,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,GAAG;AACtC,GAAG,OAAO,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC;AAC3C,GAAG;AACH;AACA,EAAE,OAAO,GAAG,CAAC;AACb;AACA,EAAE;AACF;AACA,CAAC,eAAe,GAAG;AACnB;AACA,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,GAAG;AAC1D;AACA;AACA;AACA;AACA,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG;AAC9B,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,CAAC;AAChD,IAAI;AACJ;AACA,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACtB,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AACxB;AACA,GAAG;AACH;AACA,EAAE;AACF;AACA,CAAC,oBAAoB,EAAE,CAAC,GAAG;AAC3B;AACA,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;AAC7B;AACA;AACA;AACA;AACA,EAAE,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,UAAU,GAAG;AAC7D,GAAG,MAAM,GAAG,CAAC,CAAC;AACd,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC;AAChC,GAAG,MAAM,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,EAAE,CAAC;AACzC,GAAG;AACH;AACA,EAAE,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC;AACjC;AACA,EAAE,OAAO,KAAK,CAAC;AACf;AACA,EAAE;AACF;AACA,CAAC,mBAAmB,EAAE,CAAC,GAAG;AAC1B;AACA,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,EAAE,CAAC;AACzC;AACA,EAAE,KAAK,CAAC,CAAC,QAAQ,GAAG;AACpB,GAAG,IAAI,IAAI,EAAE,CAAC;AACd,GAAG,MAAM,KAAK,CAAC,CAAC,MAAM,GAAG;AACzB,GAAG,IAAI,IAAI,EAAE,CAAC;AACd,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC;AACd;AACA,EAAE;AACF;AACA,CAAC,KAAK,EAAE,KAAK,GAAG;AAChB;AACA;AACA,EAAE,IAAI,MAAM,GAAG,CAAC,CAAC;AACjB,EAAE,KAAK,IAAI,CAAC,OAAO,GAAG;AACtB,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;AACtB,GAAG,MAAM,KAAK,IAAI,CAAC,OAAO,GAAG;AAC7B,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;AACtB,GAAG;AACH;AACA,EAAE,KAAK,IAAI,MAAM,CAAC;AAClB;AACA,EAAE,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;AACxD;AACA,EAAE,KAAK,IAAI,MAAM,CAAC;AAClB;AACA;AACA,EAAE,KAAK,GAAG,UAAU,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC;AAChD;AACA,EAAE,OAAO,KAAK,CAAC;AACf;AACA,EAAE;AACF;AACA,CAAC,MAAM,EAAE,KAAK,GAAG;AACjB;AACA,EAAE,KAAK,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;AAC7C,EAAE,KAAK,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;AAC7C,EAAE,OAAO,KAAK,CAAC;AACf,EAAE;AACF;AACA,CAAC,kBAAkB,EAAE,KAAK,GAAG;AAC7B,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACtD,EAAE;AACF;AACA,CAAC,IAAI,aAAa,GAAG;AACrB,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;AAC1C,EAAE,OAAO,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;AAC/C,EAAE;AACF;AACA,CAAC,IAAI,OAAO,GAAG;AACf,EAAE,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;AACjC,EAAE;AACF;AACA,CAAC,IAAI,OAAO,GAAG;AACf,EAAE,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;AACjC,EAAE;AACF;AACA,CAAC;AACD;AACA,MAAM,gBAAgB,SAAS,UAAU,CAAC;AAC1C;AACA,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG;AAClD;AACA,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AAClD;AACA,EAAE,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAC;AACpD,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;AAChE;AACA,EAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC;AAClD,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,aAAa,EAAE,CAAC;AAC/C;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,QAAQ,EAAE,MAAM;AACjD,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;AAC/D,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC9B,GAAG,EAAE,CAAC;AACN;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,OAAO,EAAE,MAAM;AAChD,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,WAAW,EAAE,CAAC;AAC9C,GAAG,EAAE,CAAC;AACN;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,EAAE,MAAM;AAC/C,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC;AACjD,GAAG,EAAE,CAAC;AACN;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AAC3C,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC5C;AACA,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC;AAC/B;AACA,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;AAC1B;AACA,EAAE;AACF;AACA,CAAC,OAAO,EAAE,OAAO,GAAG;AACpB;AACA,EAAE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;AAC/E,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;AAC5E;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;AACjC;AACA,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI;AAC/B,GAAG,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAC;AACtD,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;AAC9B,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;AACvC,GAAG,EAAE,CAAC;AACN;AACA,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;AACvB;AACA,EAAE,OAAO,IAAI,CAAC;AACd;AACA,EAAE;AACF;AACA,CAAC,aAAa,GAAG;AACjB,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChC,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;AAC9C,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,KAAK,CAAC;AACrC,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,KAAK,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;AAC1E,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC;AACD;AACA,MAAM,gBAAgB,SAAS,UAAU,CAAC;AAC1C;AACA,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG;AACzC;AACA,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AAClD;AACA,EAAE,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,EAAE,OAAO,EAAE,CAAC;AAClD,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC7C,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;AACpD,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;AAC/D;AACA,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,OAAO,EAAE,MAAM;AAC/C,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;AACtC,GAAG,EAAE,CAAC;AACN;AACA,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,SAAS,EAAE,CAAC,IAAI;AAChD,GAAG,KAAK,CAAC,CAAC,IAAI,KAAK,OAAO,GAAG;AAC7B,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,IAAI;AACJ,GAAG,EAAE,CAAC;AACN;AACA,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,EAAE,MAAM;AAC9C,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC9B,GAAG,EAAE,CAAC;AACN;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAC1C;AACA,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;AAC9B;AACA,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;AACvB;AACA,EAAE;AACF;AACA,CAAC,aAAa,GAAG;AACjB,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AACtC,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC;AACD;AACA,IAAI,UAAU,GAAG,CAAC;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,CAAC;AACH;AACA,SAAS,aAAa,EAAE,UAAU,GAAG;AACrC,CAAC,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,EAAE,OAAO,EAAE,CAAC;AACpD,CAAC,QAAQ,CAAC,SAAS,GAAG,UAAU,CAAC;AACjC,CAAC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,EAAE,uCAAuC,EAAE,CAAC;AAClF,CAAC,KAAK,MAAM,GAAG;AACf,EAAE,QAAQ,CAAC,IAAI,CAAC,YAAY,EAA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"}
|