@theia/plugin-ext 1.65.0-next.19 → 1.65.0-next.39
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/lib/common/plugin-protocol.d.ts +5 -5
- package/lib/common/plugin-protocol.d.ts.map +1 -1
- package/lib/common/plugin-protocol.js.map +1 -1
- package/lib/hosted/browser/hosted-plugin.d.ts +1 -1
- package/lib/hosted/browser/hosted-plugin.d.ts.map +1 -1
- package/lib/hosted/browser/hosted-plugin.js +1 -1
- package/lib/hosted/browser/hosted-plugin.js.map +1 -1
- package/lib/hosted/node/scanners/scanner-theia.d.ts +41 -0
- package/lib/hosted/node/scanners/scanner-theia.d.ts.map +1 -1
- package/lib/hosted/node/scanners/scanner-theia.js +38 -5
- package/lib/hosted/node/scanners/scanner-theia.js.map +1 -1
- package/lib/main/browser/custom-editors/custom-editor-opener.d.ts +2 -1
- package/lib/main/browser/custom-editors/custom-editor-opener.d.ts.map +1 -1
- package/lib/main/browser/custom-editors/custom-editor-opener.js.map +1 -1
- package/lib/main/browser/custom-editors/custom-editors-main.d.ts +1 -1
- package/lib/main/browser/custom-editors/custom-editors-main.d.ts.map +1 -1
- package/lib/main/browser/custom-editors/custom-editors-main.js +2 -2
- package/lib/main/browser/custom-editors/custom-editors-main.js.map +1 -1
- package/lib/main/browser/custom-editors/plugin-custom-editor-registry.d.ts +2 -1
- package/lib/main/browser/custom-editors/plugin-custom-editor-registry.d.ts.map +1 -1
- package/lib/main/browser/custom-editors/plugin-custom-editor-registry.js +1 -1
- package/lib/main/browser/custom-editors/plugin-custom-editor-registry.js.map +1 -1
- package/lib/main/browser/debug/debug-main.js +1 -1
- package/lib/main/browser/debug/debug-main.js.map +1 -1
- package/lib/main/browser/debug/plugin-debug-session-factory.d.ts +1 -1
- package/lib/main/browser/debug/plugin-debug-session-factory.d.ts.map +1 -1
- package/lib/main/browser/menus/menus-contribution-handler.d.ts.map +1 -1
- package/lib/main/browser/menus/menus-contribution-handler.js +1 -1
- package/lib/main/browser/menus/menus-contribution-handler.js.map +1 -1
- package/lib/main/browser/menus/vscode-theia-menu-mappings.d.ts.map +1 -1
- package/lib/main/browser/menus/vscode-theia-menu-mappings.js +1 -0
- package/lib/main/browser/menus/vscode-theia-menu-mappings.js.map +1 -1
- package/lib/main/browser/plugin-contribution-handler.d.ts +2 -3
- package/lib/main/browser/plugin-contribution-handler.d.ts.map +1 -1
- package/lib/main/browser/plugin-contribution-handler.js +11 -28
- package/lib/main/browser/plugin-contribution-handler.js.map +1 -1
- package/lib/main/browser/plugin-ext-argument-processor.d.ts +12 -0
- package/lib/main/browser/plugin-ext-argument-processor.d.ts.map +1 -0
- package/lib/main/browser/plugin-ext-argument-processor.js +41 -0
- package/lib/main/browser/plugin-ext-argument-processor.js.map +1 -0
- package/lib/main/browser/plugin-ext-frontend-module.d.ts.map +1 -1
- package/lib/main/browser/plugin-ext-frontend-module.js +7 -1
- package/lib/main/browser/plugin-ext-frontend-module.js.map +1 -1
- package/lib/main/browser/preference-registry-main.d.ts +1 -1
- package/lib/main/browser/preference-registry-main.d.ts.map +1 -1
- package/lib/main/browser/preference-registry-main.js +10 -8
- package/lib/main/browser/preference-registry-main.js.map +1 -1
- package/lib/main/browser/view/plugin-view-registry.d.ts.map +1 -1
- package/lib/main/browser/view/plugin-view-registry.js +3 -0
- package/lib/main/browser/view/plugin-view-registry.js.map +1 -1
- package/lib/main/browser/view/tree-views-main.js +1 -1
- package/lib/main/browser/view/tree-views-main.js.map +1 -1
- package/lib/main/browser/webview/webview-frontend-preference-contribution.d.ts +5 -0
- package/lib/main/browser/webview/webview-frontend-preference-contribution.d.ts.map +1 -0
- package/lib/main/browser/webview/webview-frontend-preference-contribution.js +40 -0
- package/lib/main/browser/webview/webview-frontend-preference-contribution.js.map +1 -0
- package/lib/main/browser/webview/webview-theme-data-provider.d.ts +1 -1
- package/lib/main/browser/webview/webview-theme-data-provider.d.ts.map +1 -1
- package/lib/main/browser/webview/webview-theme-data-provider.js +1 -1
- package/lib/main/browser/webview/webview-theme-data-provider.js.map +1 -1
- package/lib/main/browser/webview/webview.d.ts +1 -1
- package/lib/main/browser/webview/webview.d.ts.map +1 -1
- package/lib/main/browser/webview/webview.js +1 -1
- package/lib/main/browser/webview/webview.js.map +1 -1
- package/lib/main/browser/workspace-main.js +3 -3
- package/lib/main/browser/workspace-main.js.map +1 -1
- package/lib/main/{browser/webview → common}/webview-preferences.d.ts +1 -1
- package/lib/main/common/webview-preferences.d.ts.map +1 -0
- package/lib/main/{browser/webview → common}/webview-preferences.js +1 -12
- package/lib/main/common/webview-preferences.js.map +1 -0
- package/lib/main/node/plugin-ext-backend-module.d.ts.map +1 -1
- package/lib/main/node/plugin-ext-backend-module.js +2 -0
- package/lib/main/node/plugin-ext-backend-module.js.map +1 -1
- package/lib/plugin/plugin-context.js +1 -1
- package/lib/plugin/plugin-context.js.map +1 -1
- package/lib/plugin/status-bar/status-bar-item.d.ts +3 -1
- package/lib/plugin/status-bar/status-bar-item.d.ts.map +1 -1
- package/lib/plugin/status-bar/status-bar-item.js +46 -1
- package/lib/plugin/status-bar/status-bar-item.js.map +1 -1
- package/lib/plugin/status-bar-message-registry.d.ts +3 -1
- package/lib/plugin/status-bar-message-registry.d.ts.map +1 -1
- package/lib/plugin/status-bar-message-registry.js +3 -2
- package/lib/plugin/status-bar-message-registry.js.map +1 -1
- package/package.json +29 -29
- package/src/common/plugin-protocol.ts +5 -5
- package/src/hosted/browser/hosted-plugin.ts +1 -1
- package/src/hosted/node/scanners/scanner-theia.ts +87 -5
- package/src/main/browser/custom-editors/custom-editor-opener.tsx +2 -2
- package/src/main/browser/custom-editors/custom-editors-main.ts +1 -1
- package/src/main/browser/custom-editors/plugin-custom-editor-registry.ts +2 -2
- package/src/main/browser/debug/debug-main.ts +1 -1
- package/src/main/browser/debug/plugin-debug-session-factory.ts +1 -1
- package/src/main/browser/menus/menus-contribution-handler.ts +2 -2
- package/src/main/browser/menus/vscode-theia-menu-mappings.ts +2 -1
- package/src/main/browser/plugin-contribution-handler.ts +14 -30
- package/src/main/browser/plugin-ext-argument-processor.ts +39 -0
- package/src/main/browser/plugin-ext-frontend-module.ts +9 -2
- package/src/main/browser/preference-registry-main.ts +9 -7
- package/src/main/browser/view/plugin-view-registry.ts +3 -0
- package/src/main/browser/view/tree-views-main.ts +1 -1
- package/src/main/browser/webview/pre/main.js +13 -10
- package/src/main/browser/webview/webview-frontend-preference-contribution.ts +37 -0
- package/src/main/browser/webview/webview-theme-data-provider.ts +1 -1
- package/src/main/browser/webview/webview.ts +1 -1
- package/src/main/browser/workspace-main.ts +2 -2
- package/src/main/{browser/webview → common}/webview-preferences.ts +3 -16
- package/src/main/node/plugin-ext-backend-module.ts +2 -0
- package/src/plugin/plugin-context.ts +1 -1
- package/src/plugin/status-bar/status-bar-item.ts +54 -0
- package/src/plugin/status-bar-message-registry.ts +3 -2
- package/lib/main/browser/webview/webview-preferences.d.ts.map +0 -1
- package/lib/main/browser/webview/webview-preferences.js.map +0 -1
|
@@ -15,20 +15,16 @@
|
|
|
15
15
|
// *****************************************************************************
|
|
16
16
|
|
|
17
17
|
import { interfaces } from '@theia/core/shared/inversify';
|
|
18
|
-
import { FrontendApplicationConfigProvider } from '@theia/core/lib/browser/frontend-application-config-provider';
|
|
19
18
|
import {
|
|
20
19
|
createPreferenceProxy,
|
|
20
|
+
PreferenceContribution,
|
|
21
21
|
PreferenceProxy,
|
|
22
|
+
PreferenceSchema,
|
|
22
23
|
PreferenceService,
|
|
23
|
-
|
|
24
|
-
PreferenceSchema
|
|
25
|
-
} from '@theia/core/lib/browser/preferences';
|
|
24
|
+
} from '@theia/core/lib/common/preferences';
|
|
26
25
|
import { nls } from '@theia/core/lib/common/nls';
|
|
27
26
|
|
|
28
|
-
const frontendConfig = FrontendApplicationConfigProvider.get();
|
|
29
|
-
|
|
30
27
|
export const WebviewConfigSchema: PreferenceSchema = {
|
|
31
|
-
type: 'object',
|
|
32
28
|
properties: {
|
|
33
29
|
'webview.trace': {
|
|
34
30
|
type: 'string',
|
|
@@ -39,15 +35,6 @@ export const WebviewConfigSchema: PreferenceSchema = {
|
|
|
39
35
|
}
|
|
40
36
|
};
|
|
41
37
|
|
|
42
|
-
if (frontendConfig.securityWarnings) {
|
|
43
|
-
WebviewConfigSchema.properties['webview.warnIfUnsecure'] = {
|
|
44
|
-
scope: 'application',
|
|
45
|
-
type: 'boolean',
|
|
46
|
-
description: nls.localize('theia/plugin-ext/webviewWarnIfUnsecure', 'Warns users that webviews are currently deployed unsecurely.'),
|
|
47
|
-
default: true,
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
|
|
51
38
|
export interface WebviewConfiguration {
|
|
52
39
|
'webview.trace': 'off' | 'on' | 'verbose'
|
|
53
40
|
'webview.warnIfUnsecure'?: boolean
|
|
@@ -46,6 +46,7 @@ import { PluginRemoteCliContribution } from './plugin-remote-cli-contribution';
|
|
|
46
46
|
import { RemoteCliContribution } from '@theia/core/lib/node/remote/remote-cli-contribution';
|
|
47
47
|
import { PluginRemoteCopyContribution } from './plugin-remote-copy-contribution';
|
|
48
48
|
import { RemoteCopyContribution } from '@theia/core/lib/node/remote/remote-copy-contribution';
|
|
49
|
+
import { bindWebviewPreferences } from '../common/webview-preferences';
|
|
49
50
|
|
|
50
51
|
export function bindMainBackend(bind: interfaces.Bind, unbind: interfaces.Unbind, isBound: interfaces.IsBound, rebind: interfaces.Rebind): void {
|
|
51
52
|
bind(PluginApiContribution).toSelf().inSingletonScope();
|
|
@@ -102,5 +103,6 @@ export function bindMainBackend(bind: interfaces.Bind, unbind: interfaces.Unbind
|
|
|
102
103
|
bind(BackendApplicationContribution).toService(WebviewBackendSecurityWarnings);
|
|
103
104
|
|
|
104
105
|
rebind(LocalizationServerImpl).to(PluginLocalizationServer).inSingletonScope();
|
|
106
|
+
bindWebviewPreferences(bind);
|
|
105
107
|
|
|
106
108
|
}
|
|
@@ -333,7 +333,7 @@ export function createAPIFactory(
|
|
|
333
333
|
const notebookRenderers = rpc.set(MAIN_RPC_CONTEXT.NOTEBOOK_RENDERERS_EXT, new NotebookRenderersExtImpl(rpc, notebooksExt));
|
|
334
334
|
const notebookKernels = rpc.set(MAIN_RPC_CONTEXT.NOTEBOOK_KERNELS_EXT, new NotebookKernelsExtImpl(rpc, notebooksExt, commandRegistry, webviewExt, workspaceExt));
|
|
335
335
|
const notebookDocuments = rpc.set(MAIN_RPC_CONTEXT.NOTEBOOK_DOCUMENTS_EXT, new NotebookDocumentsExtImpl(notebooksExt));
|
|
336
|
-
const statusBarMessageRegistryExt = new StatusBarMessageRegistryExt(rpc);
|
|
336
|
+
const statusBarMessageRegistryExt = new StatusBarMessageRegistryExt(rpc, commandRegistry);
|
|
337
337
|
const terminalExt = rpc.set(MAIN_RPC_CONTEXT.TERMINAL_EXT, new TerminalServiceExtImpl(rpc));
|
|
338
338
|
const outputChannelRegistryExt = rpc.set(MAIN_RPC_CONTEXT.OUTPUT_CHANNEL_REGISTRY_EXT, new OutputChannelRegistryExtImpl(rpc));
|
|
339
339
|
const treeViewsExt = rpc.set(MAIN_RPC_CONTEXT.TREE_VIEWS_EXT, new TreeViewsExtImpl(rpc, commandRegistry));
|
|
@@ -17,6 +17,9 @@ import * as theia from '@theia/plugin';
|
|
|
17
17
|
import { ThemeColor, StatusBarAlignment } from '../types-impl';
|
|
18
18
|
import { StatusBarMessageRegistryMain } from '../../common/plugin-api-rpc';
|
|
19
19
|
import { UUID } from '@theia/core/shared/@lumino/coreutils';
|
|
20
|
+
import { CommandRegistryImpl } from '../command-registry';
|
|
21
|
+
import { MarkdownString } from '../markdown-string';
|
|
22
|
+
import { DisposableCollection } from '@theia/core/lib/common/disposable';
|
|
20
23
|
|
|
21
24
|
export class StatusBarItemImpl implements theia.StatusBarItem {
|
|
22
25
|
|
|
@@ -45,6 +48,7 @@ export class StatusBarItemImpl implements theia.StatusBarItem {
|
|
|
45
48
|
_proxy: StatusBarMessageRegistryMain;
|
|
46
49
|
|
|
47
50
|
constructor(_proxy: StatusBarMessageRegistryMain,
|
|
51
|
+
private readonly commandRegistry: CommandRegistryImpl,
|
|
48
52
|
alignment: StatusBarAlignment = StatusBarAlignment.Left,
|
|
49
53
|
priority: number = 0,
|
|
50
54
|
id = StatusBarItemImpl.nextId()) {
|
|
@@ -105,6 +109,56 @@ export class StatusBarItemImpl implements theia.StatusBarItem {
|
|
|
105
109
|
}
|
|
106
110
|
|
|
107
111
|
public set tooltip(tooltip: string | theia.MarkdownString | undefined) {
|
|
112
|
+
if (tooltip && MarkdownString.isMarkdownString(tooltip)) {
|
|
113
|
+
const markdownTooltip = tooltip;
|
|
114
|
+
const content = markdownTooltip.value;
|
|
115
|
+
// Find all command links in the markdown content
|
|
116
|
+
const regex = /\[([^\]]+)\]\(command:([^?\s\)]+)(?:\?([^\s\)]+))?([^\)]*)\)/g;
|
|
117
|
+
let match;
|
|
118
|
+
let updatedContent = content;
|
|
119
|
+
|
|
120
|
+
while ((match = regex.exec(content)) !== null) {
|
|
121
|
+
const linkText = match[1];
|
|
122
|
+
const commandId = match[2];
|
|
123
|
+
const argsEncoded = match[3]; // This captures the encoded arguments
|
|
124
|
+
const tooltipPart = match[4] || ''; // This captures any tooltip or additional content after the command and args
|
|
125
|
+
|
|
126
|
+
let args: unknown[] = [];
|
|
127
|
+
if (argsEncoded) {
|
|
128
|
+
try {
|
|
129
|
+
const decoded = decodeURIComponent(argsEncoded);
|
|
130
|
+
args = JSON.parse(decoded);
|
|
131
|
+
} catch (e) {
|
|
132
|
+
console.error('Failed to parse command arguments:', e);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
const safeCommand = this.commandRegistry.converter.toSafeCommand(
|
|
137
|
+
{
|
|
138
|
+
command: commandId,
|
|
139
|
+
title: linkText,
|
|
140
|
+
arguments: Array.isArray(args) ? args : [args]
|
|
141
|
+
},
|
|
142
|
+
new DisposableCollection()
|
|
143
|
+
);
|
|
144
|
+
|
|
145
|
+
if (safeCommand?.id) {
|
|
146
|
+
let newArgsPart = '';
|
|
147
|
+
if (safeCommand.arguments && safeCommand.arguments.length > 0) {
|
|
148
|
+
newArgsPart = `?${encodeURIComponent(JSON.stringify(safeCommand.arguments))}`;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const argsPart = argsEncoded ? `?${argsEncoded}` : '';
|
|
152
|
+
const originalLink = `[${linkText}](command:${commandId}${argsPart}${tooltipPart})`;
|
|
153
|
+
const safeLink = `[${linkText}](command:${safeCommand.id}${newArgsPart}${tooltipPart})`;
|
|
154
|
+
updatedContent = updatedContent.replace(originalLink, safeLink);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
if (updatedContent !== content) {
|
|
159
|
+
markdownTooltip.value = updatedContent;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
108
162
|
this._tooltip = tooltip;
|
|
109
163
|
this.update();
|
|
110
164
|
}
|
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
} from '../common/plugin-api-rpc';
|
|
21
21
|
import { RPCProtocol } from '../common/rpc-protocol';
|
|
22
22
|
import { StatusBarItemImpl } from './status-bar/status-bar-item';
|
|
23
|
+
import { CommandRegistryImpl } from './command-registry';
|
|
23
24
|
|
|
24
25
|
/*---------------------------------------------------------------------------------------------
|
|
25
26
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
@@ -32,7 +33,7 @@ export class StatusBarMessageRegistryExt {
|
|
|
32
33
|
|
|
33
34
|
protected readonly statusMessage: StatusBarMessage;
|
|
34
35
|
|
|
35
|
-
constructor(rpc: RPCProtocol) {
|
|
36
|
+
constructor(rpc: RPCProtocol, readonly commandRegistry: CommandRegistryImpl) {
|
|
36
37
|
this.proxy = rpc.getProxy(Ext.STATUS_BAR_MESSAGE_REGISTRY_MAIN);
|
|
37
38
|
this.statusMessage = new StatusBarMessage(this);
|
|
38
39
|
}
|
|
@@ -58,7 +59,7 @@ export class StatusBarMessageRegistryExt {
|
|
|
58
59
|
}
|
|
59
60
|
|
|
60
61
|
createStatusBarItem(alignment?: StatusBarAlignment, priority?: number, id?: string): StatusBarItem {
|
|
61
|
-
return new StatusBarItemImpl(this.proxy, alignment, priority, id);
|
|
62
|
+
return new StatusBarItemImpl(this.proxy, this.commandRegistry, alignment, priority, id);
|
|
62
63
|
}
|
|
63
64
|
|
|
64
65
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webview-preferences.d.ts","sourceRoot":"","sources":["../../../../src/main/browser/webview/webview-preferences.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,OAAO,EAEH,eAAe,EACf,iBAAiB,EAEjB,gBAAgB,EACnB,MAAM,qCAAqC,CAAC;AAK7C,eAAO,MAAM,mBAAmB,EAAE,gBAUjC,CAAC;AAWF,MAAM,WAAW,oBAAoB;IACjC,eAAe,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,CAAA;IACzC,wBAAwB,CAAC,EAAE,OAAO,CAAA;CACrC;AAED,eAAO,MAAM,6BAA6B,eAA0C,CAAC;AACrF,eAAO,MAAM,kBAAkB,eAA+B,CAAC;AAC/D,MAAM,MAAM,kBAAkB,GAAG,eAAe,CAAC,oBAAoB,CAAC,CAAC;AAEvE,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,iBAAiB,EAAE,MAAM,GAAE,gBAAsC,GAAG,kBAAkB,CAE3I;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,GAAG,IAAI,CAQlE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webview-preferences.js","sourceRoot":"","sources":["../../../../src/main/browser/webview/webview-preferences.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAGhF,uHAAiH;AACjH,qEAM6C;AAC7C,oDAAiD;AAEjD,MAAM,cAAc,GAAG,wEAAiC,CAAC,GAAG,EAAE,CAAC;AAElD,QAAA,mBAAmB,GAAqB;IACjD,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACR,eAAe,EAAE;YACb,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC;YAC9B,WAAW,EAAE,SAAG,CAAC,QAAQ,CAAC,+BAA+B,EAAE,+CAA+C,CAAC;YAC3G,OAAO,EAAE,KAAK;SACjB;KACJ;CACJ,CAAC;AAEF,IAAI,cAAc,CAAC,gBAAgB,EAAE,CAAC;IAClC,2BAAmB,CAAC,UAAU,CAAC,wBAAwB,CAAC,GAAG;QACvD,KAAK,EAAE,aAAa;QACpB,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,SAAG,CAAC,QAAQ,CAAC,wCAAwC,EAAE,8DAA8D,CAAC;QACnI,OAAO,EAAE,IAAI;KAChB,CAAC;AACN,CAAC;AAOY,QAAA,6BAA6B,GAAG,MAAM,CAAC,+BAA+B,CAAC,CAAC;AACxE,QAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAG/D,SAAgB,wBAAwB,CAAC,WAA8B,EAAE,SAA2B,2BAAmB;IACnH,OAAO,IAAA,mCAAqB,EAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC;AAFD,4DAEC;AAED,SAAgB,sBAAsB,CAAC,IAAqB;IACxD,IAAI,CAAC,0BAAkB,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;QAC1C,MAAM,WAAW,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAoB,+BAAiB,CAAC,CAAC;QAC5E,MAAM,YAAY,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAyB,qCAA6B,CAAC,CAAC;QAC9F,OAAO,wBAAwB,CAAC,WAAW,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACtB,IAAI,CAAC,qCAA6B,CAAC,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,2BAAmB,EAAE,CAAC,CAAC;IACrF,IAAI,CAAC,oCAAsB,CAAC,CAAC,SAAS,CAAC,qCAA6B,CAAC,CAAC;AAC1E,CAAC;AARD,wDAQC"}
|