sela-core 1.0.0
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 +93 -0
- package/bin/sela.js +3 -0
- package/dist/cli/ErrorHandler.d.ts +10 -0
- package/dist/cli/ErrorHandler.d.ts.map +1 -0
- package/dist/cli/ErrorHandler.js +70 -0
- package/dist/cli/commands/bulk.d.ts +3 -0
- package/dist/cli/commands/bulk.d.ts.map +1 -0
- package/dist/cli/commands/bulk.js +140 -0
- package/dist/cli/commands/find.d.ts +3 -0
- package/dist/cli/commands/find.d.ts.map +1 -0
- package/dist/cli/commands/find.js +51 -0
- package/dist/cli/commands/init.d.ts +3 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +133 -0
- package/dist/cli/commands/list.d.ts +3 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +56 -0
- package/dist/cli/commands/refactor.d.ts +3 -0
- package/dist/cli/commands/refactor.d.ts.map +1 -0
- package/dist/cli/commands/refactor.js +30 -0
- package/dist/cli/commands/status.d.ts +3 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +51 -0
- package/dist/cli/commands/sync.d.ts +3 -0
- package/dist/cli/commands/sync.d.ts.map +1 -0
- package/dist/cli/commands/sync.js +123 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +42 -0
- package/dist/cli/ui/DnaTable.d.ts +3 -0
- package/dist/cli/ui/DnaTable.d.ts.map +1 -0
- package/dist/cli/ui/DnaTable.js +70 -0
- package/dist/cli/ui/LocatorPicker.d.ts +8 -0
- package/dist/cli/ui/LocatorPicker.d.ts.map +1 -0
- package/dist/cli/ui/LocatorPicker.js +33 -0
- package/dist/cli/ui/ProgressReporter.d.ts +11 -0
- package/dist/cli/ui/ProgressReporter.d.ts.map +1 -0
- package/dist/cli/ui/ProgressReporter.js +33 -0
- package/dist/cli/ui/RefactorWizard.d.ts +26 -0
- package/dist/cli/ui/RefactorWizard.d.ts.map +1 -0
- package/dist/cli/ui/RefactorWizard.js +269 -0
- package/dist/config/ConfigLoader.d.ts +15 -0
- package/dist/config/ConfigLoader.d.ts.map +1 -0
- package/dist/config/ConfigLoader.js +174 -0
- package/dist/config/SelaConfig.d.ts +67 -0
- package/dist/config/SelaConfig.d.ts.map +1 -0
- package/dist/config/SelaConfig.js +57 -0
- package/dist/config/defineConfig.d.ts +3 -0
- package/dist/config/defineConfig.d.ts.map +1 -0
- package/dist/config/defineConfig.js +9 -0
- package/dist/engine/FixwrightEngine.d.ts +24 -0
- package/dist/engine/FixwrightEngine.d.ts.map +1 -0
- package/dist/engine/FixwrightEngine.js +403 -0
- package/dist/engine/HealingRegistry.d.ts +40 -0
- package/dist/engine/HealingRegistry.d.ts.map +1 -0
- package/dist/engine/HealingRegistry.js +98 -0
- package/dist/engine/singleton.d.ts +3 -0
- package/dist/engine/singleton.d.ts.map +1 -0
- package/dist/engine/singleton.js +5 -0
- package/dist/fixtures/expectProxy.d.ts +12 -0
- package/dist/fixtures/expectProxy.d.ts.map +1 -0
- package/dist/fixtures/expectProxy.js +228 -0
- package/dist/fixtures/index.d.ts +6 -0
- package/dist/fixtures/index.d.ts.map +1 -0
- package/dist/fixtures/index.js +688 -0
- package/dist/fixtures/moduleExpect.d.ts +2 -0
- package/dist/fixtures/moduleExpect.d.ts.map +1 -0
- package/dist/fixtures/moduleExpect.js +46 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/services/ASTSourceUpdater.d.ts +79 -0
- package/dist/services/ASTSourceUpdater.d.ts.map +1 -0
- package/dist/services/ASTSourceUpdater.js +3177 -0
- package/dist/services/ArgumentTypeAnalyzer.d.ts +26 -0
- package/dist/services/ArgumentTypeAnalyzer.d.ts.map +1 -0
- package/dist/services/ArgumentTypeAnalyzer.js +92 -0
- package/dist/services/BlastRadiusAnalyzer.d.ts +15 -0
- package/dist/services/BlastRadiusAnalyzer.d.ts.map +1 -0
- package/dist/services/BlastRadiusAnalyzer.js +103 -0
- package/dist/services/ChainValidator.d.ts +76 -0
- package/dist/services/ChainValidator.d.ts.map +1 -0
- package/dist/services/ChainValidator.js +569 -0
- package/dist/services/CrossFileHealer.d.ts +6 -0
- package/dist/services/CrossFileHealer.d.ts.map +1 -0
- package/dist/services/CrossFileHealer.js +134 -0
- package/dist/services/DefinitionTracer.d.ts +41 -0
- package/dist/services/DefinitionTracer.d.ts.map +1 -0
- package/dist/services/DefinitionTracer.js +350 -0
- package/dist/services/DnaEditorService.d.ts +31 -0
- package/dist/services/DnaEditorService.d.ts.map +1 -0
- package/dist/services/DnaEditorService.js +198 -0
- package/dist/services/DnaIndexService.d.ts +24 -0
- package/dist/services/DnaIndexService.d.ts.map +1 -0
- package/dist/services/DnaIndexService.js +131 -0
- package/dist/services/HealingAdvisory.d.ts +22 -0
- package/dist/services/HealingAdvisory.d.ts.map +1 -0
- package/dist/services/HealingAdvisory.js +42 -0
- package/dist/services/HealthReportService.d.ts +10 -0
- package/dist/services/HealthReportService.d.ts.map +1 -0
- package/dist/services/HealthReportService.js +84 -0
- package/dist/services/InitializerUpdater.d.ts +16 -0
- package/dist/services/InitializerUpdater.d.ts.map +1 -0
- package/dist/services/InitializerUpdater.js +37 -0
- package/dist/services/IntentAuditor.d.ts +39 -0
- package/dist/services/IntentAuditor.d.ts.map +1 -0
- package/dist/services/IntentAuditor.js +302 -0
- package/dist/services/LLMService.d.ts +100 -0
- package/dist/services/LLMService.d.ts.map +1 -0
- package/dist/services/LLMService.js +439 -0
- package/dist/services/SafetyGuard.d.ts +65 -0
- package/dist/services/SafetyGuard.d.ts.map +1 -0
- package/dist/services/SafetyGuard.js +524 -0
- package/dist/services/SnapshotService.d.ts +11 -0
- package/dist/services/SnapshotService.d.ts.map +1 -0
- package/dist/services/SnapshotService.js +349 -0
- package/dist/services/SourceLinkService.d.ts +26 -0
- package/dist/services/SourceLinkService.d.ts.map +1 -0
- package/dist/services/SourceLinkService.js +156 -0
- package/dist/services/SourceUpdater.d.ts +45 -0
- package/dist/services/SourceUpdater.d.ts.map +1 -0
- package/dist/services/SourceUpdater.js +1021 -0
- package/dist/services/TemplateDiffService.d.ts +25 -0
- package/dist/services/TemplateDiffService.d.ts.map +1 -0
- package/dist/services/TemplateDiffService.js +331 -0
- package/dist/services/types.d.ts +59 -0
- package/dist/services/types.d.ts.map +1 -0
- package/dist/services/types.js +2 -0
- package/dist/storage/SnapshotManager.d.ts +5 -0
- package/dist/storage/SnapshotManager.d.ts.map +1 -0
- package/dist/storage/SnapshotManager.js +31 -0
- package/dist/types/index.d.ts +95 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/utils/DOMUtils.d.ts +33 -0
- package/dist/utils/DOMUtils.d.ts.map +1 -0
- package/dist/utils/DOMUtils.js +179 -0
- package/dist/utils/StackUtils.d.ts +11 -0
- package/dist/utils/StackUtils.d.ts.map +1 -0
- package/dist/utils/StackUtils.js +120 -0
- package/dist/vendor/enquirer.d.ts +33 -0
- package/dist/vendor/enquirer.d.ts.map +1 -0
- package/dist/vendor/enquirer.js +11 -0
- package/package.json +67 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moduleExpect.d.ts","sourceRoot":"","sources":["../../src/fixtures/moduleExpect.ts"],"names":[],"mappings":"AAsCA,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,GAAG,CAO1C"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Standalone module-level expect for `import { expect } from 'sela'` usage.
|
|
3
|
+
// Creates a per-call healing expect using the shared engine singleton.
|
|
4
|
+
// Falls back to raw Playwright expect for non-Locator values.
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.expect = expect;
|
|
7
|
+
const test_1 = require("@playwright/test");
|
|
8
|
+
const singleton_js_1 = require("../engine/singleton.js");
|
|
9
|
+
const expectProxy_js_1 = require("./expectProxy.js");
|
|
10
|
+
function extractPage(value) {
|
|
11
|
+
if (!value || typeof value !== 'object')
|
|
12
|
+
return null;
|
|
13
|
+
// Fixwright locator proxy exposes _fixwrightPage directly
|
|
14
|
+
const proxied = value._fixwrightPage;
|
|
15
|
+
if (proxied)
|
|
16
|
+
return proxied;
|
|
17
|
+
// Playwright public API: Locator.page()
|
|
18
|
+
if (typeof value.page === 'function') {
|
|
19
|
+
try {
|
|
20
|
+
return value.page();
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
function getCallerFile() {
|
|
29
|
+
const lines = new Error().stack?.split('\n') ?? [];
|
|
30
|
+
for (let i = 3; i < lines.length; i++) {
|
|
31
|
+
if (/\.(spec|test)\.[jt]sx?/.test(lines[i])) {
|
|
32
|
+
const m = lines[i].match(/\((.+?):\d+:\d+\)/);
|
|
33
|
+
if (m)
|
|
34
|
+
return m[1];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return '';
|
|
38
|
+
}
|
|
39
|
+
function expect(value) {
|
|
40
|
+
const page = extractPage(value);
|
|
41
|
+
if (page) {
|
|
42
|
+
const filePath = getCallerFile();
|
|
43
|
+
return (0, expectProxy_js_1.createHealingExpect)(singleton_js_1.sharedEngine, page, filePath, 0)(value);
|
|
44
|
+
}
|
|
45
|
+
return (0, test_1.expect)(value);
|
|
46
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type * from '@playwright/test';
|
|
2
|
+
export { chromium, firefox, webkit, devices, selectors } from '@playwright/test';
|
|
3
|
+
export { test } from './fixtures/index.js';
|
|
4
|
+
export { expect } from './fixtures/moduleExpect.js';
|
|
5
|
+
export { defineConfig } from './config/defineConfig.js';
|
|
6
|
+
export type { SelaConfig, ResolvedConfig } from './config/SelaConfig.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,mBAAmB,kBAAkB,CAAC;AAGtC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAIjF,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAI3C,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Sela — AI self-healing Playwright wrapper
|
|
3
|
+
//
|
|
4
|
+
// Drop-in replacement for @playwright/test:
|
|
5
|
+
// import { test, expect } from 'sela'
|
|
6
|
+
//
|
|
7
|
+
// All Playwright primitives are re-exported. Only `test` and `expect`
|
|
8
|
+
// are overridden with Sela's healing versions.
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.defineConfig = exports.expect = exports.test = exports.selectors = exports.devices = exports.webkit = exports.firefox = exports.chromium = void 0;
|
|
11
|
+
// Playwright value exports (launchers, devices, etc.)
|
|
12
|
+
var test_1 = require("@playwright/test");
|
|
13
|
+
Object.defineProperty(exports, "chromium", { enumerable: true, get: function () { return test_1.chromium; } });
|
|
14
|
+
Object.defineProperty(exports, "firefox", { enumerable: true, get: function () { return test_1.firefox; } });
|
|
15
|
+
Object.defineProperty(exports, "webkit", { enumerable: true, get: function () { return test_1.webkit; } });
|
|
16
|
+
Object.defineProperty(exports, "devices", { enumerable: true, get: function () { return test_1.devices; } });
|
|
17
|
+
Object.defineProperty(exports, "selectors", { enumerable: true, get: function () { return test_1.selectors; } });
|
|
18
|
+
// Sela's extended test — includes DNA capture, trace collection,
|
|
19
|
+
// locator proxy, and fixture-scoped healing expect
|
|
20
|
+
var index_js_1 = require("./fixtures/index.js");
|
|
21
|
+
Object.defineProperty(exports, "test", { enumerable: true, get: function () { return index_js_1.test; } });
|
|
22
|
+
// Sela's healing expect — works standalone (import { expect } from 'sela')
|
|
23
|
+
// Detects page from locator, falls back to raw PW expect for non-locators
|
|
24
|
+
var moduleExpect_js_1 = require("./fixtures/moduleExpect.js");
|
|
25
|
+
Object.defineProperty(exports, "expect", { enumerable: true, get: function () { return moduleExpect_js_1.expect; } });
|
|
26
|
+
// Config DSL — defineConfig() provides TypeScript inference for sela.config.ts
|
|
27
|
+
var defineConfig_js_1 = require("./config/defineConfig.js");
|
|
28
|
+
Object.defineProperty(exports, "defineConfig", { enumerable: true, get: function () { return defineConfig_js_1.defineConfig; } });
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { SelectorSegment } from "./LLMService";
|
|
2
|
+
import { AdvisoryBuffer } from "./HealingAdvisory";
|
|
3
|
+
import type { SmartChainSegment } from "./LLMService";
|
|
4
|
+
export interface ASTUpdateResult {
|
|
5
|
+
success: boolean;
|
|
6
|
+
reason: string;
|
|
7
|
+
strategy: string;
|
|
8
|
+
lineUpdated?: number;
|
|
9
|
+
cascadeFixed?: number;
|
|
10
|
+
/** The normalized locator string that was written to disk. Single source of truth for runtime. */
|
|
11
|
+
healedLocatorString?: string;
|
|
12
|
+
/** Populated by semantic dispatch: where the definition was mutated. */
|
|
13
|
+
definitionSite?: {
|
|
14
|
+
file: string;
|
|
15
|
+
line: number;
|
|
16
|
+
};
|
|
17
|
+
/** Number of test functions referencing the mutated constant (blast radius). */
|
|
18
|
+
blastRadius?: number;
|
|
19
|
+
}
|
|
20
|
+
interface CallerContext {
|
|
21
|
+
filePath: string;
|
|
22
|
+
line: number;
|
|
23
|
+
}
|
|
24
|
+
export declare class ASTSourceUpdater {
|
|
25
|
+
private project;
|
|
26
|
+
readonly advisoryBuffer: AdvisoryBuffer;
|
|
27
|
+
flushAdvisories(): void;
|
|
28
|
+
constructor();
|
|
29
|
+
private readonly WRAPPER_IDENTIFIERS;
|
|
30
|
+
private readonly STRUCTURAL_ROLES;
|
|
31
|
+
private readonly INTERACTIVE_ROLES;
|
|
32
|
+
update(caller: CallerContext, oldSelector: string, newSelector: string, aiSegments?: SelectorSegment[], fullSelectorContext?: string, contentChange?: {
|
|
33
|
+
oldText: string;
|
|
34
|
+
newText: string;
|
|
35
|
+
}, smartChainSegments?: SmartChainSegment[], originalChainHint?: SmartChainSegment[]): ASTUpdateResult;
|
|
36
|
+
private strategySmartChain;
|
|
37
|
+
private attemptPartialChainHeal;
|
|
38
|
+
private strategyChainCollapse;
|
|
39
|
+
private runStrategyG;
|
|
40
|
+
private strategyFrameUpstream;
|
|
41
|
+
private strategyDeepSymbolResolution;
|
|
42
|
+
private strategyInlineSemanticFix;
|
|
43
|
+
private strategyTemplateLiteral;
|
|
44
|
+
private strategySemanticFragmentScan;
|
|
45
|
+
private findMatchingChainTail;
|
|
46
|
+
private replaceChainTailOnly;
|
|
47
|
+
private applySemanticFix;
|
|
48
|
+
/**
|
|
49
|
+
* Guard: returns false when replacing oldNode with proposedNewText would
|
|
50
|
+
* substitute a hardcoded string literal for an Identifier or
|
|
51
|
+
* PropertyAccessExpression — which is the definition-site mutation bug.
|
|
52
|
+
* All other replacements are allowed.
|
|
53
|
+
*/
|
|
54
|
+
private static isSafeReplacement;
|
|
55
|
+
private replaceCallArgument;
|
|
56
|
+
private semanticToInternal;
|
|
57
|
+
private performCascadeHeal;
|
|
58
|
+
private fixPropertyAccessDefinition;
|
|
59
|
+
private isBlockedByStructuralWall;
|
|
60
|
+
private identifySuspectIdentifier;
|
|
61
|
+
private getEnclosingStatement;
|
|
62
|
+
private findNodeAtLine;
|
|
63
|
+
private findCallExpressionsInRange;
|
|
64
|
+
private replaceFrameLocatorArg;
|
|
65
|
+
private replaceStringLiteralInRange;
|
|
66
|
+
private updateObjectProperty;
|
|
67
|
+
private lineToOffset;
|
|
68
|
+
resolveFilePath(raw: string): string | null;
|
|
69
|
+
private semanticDispatch;
|
|
70
|
+
private handleIdentifierArg;
|
|
71
|
+
private handlePropertyAccessArg;
|
|
72
|
+
private handleTemplateLiteralArg;
|
|
73
|
+
private traceSpanExpression;
|
|
74
|
+
private handleCallExpressionArg;
|
|
75
|
+
private validateFileSyntax;
|
|
76
|
+
private broadcastAndReturn;
|
|
77
|
+
}
|
|
78
|
+
export {};
|
|
79
|
+
//# sourceMappingURL=ASTSourceUpdater.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ASTSourceUpdater.d.ts","sourceRoot":"","sources":["../../src/services/ASTSourceUpdater.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAQ/C,OAAO,EAAE,cAAc,EAAgB,MAAM,mBAAmB,CAAC;AAOjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAMtD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kGAAkG;IAClG,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,wEAAwE;IACxE,cAAc,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,gFAAgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,aAAa;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAg5DD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAU;IACzB,QAAQ,CAAC,cAAc,iBAAwB;IAE/C,eAAe,IAAI,IAAI;;IAiBvB,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAcjC;IAEH,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CA8B9B;IAEH,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAuB/B;IAMH,MAAM,CACJ,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,eAAe,EAAE,EAC9B,mBAAmB,CAAC,EAAE,MAAM,EAC5B,aAAa,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EACpD,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,EACxC,iBAAiB,CAAC,EAAE,iBAAiB,EAAE,GACtC,eAAe;IA8PlB,OAAO,CAAC,kBAAkB;IAsM1B,OAAO,CAAC,uBAAuB;IA6F/B,OAAO,CAAC,qBAAqB;IAyF7B,OAAO,CAAC,YAAY;IAkDpB,OAAO,CAAC,qBAAqB;IA0G7B,OAAO,CAAC,4BAA4B;IAoRpC,OAAO,CAAC,yBAAyB;IAsGjC,OAAO,CAAC,uBAAuB;IA4E/B,OAAO,CAAC,4BAA4B;IA4EpC,OAAO,CAAC,qBAAqB;IA6B7B,OAAO,CAAC,oBAAoB;IAwB5B,OAAO,CAAC,gBAAgB;IAwBxB;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAUhC,OAAO,CAAC,mBAAmB;IAuC3B,OAAO,CAAC,kBAAkB;IA2B1B,OAAO,CAAC,kBAAkB;IAuB1B,OAAO,CAAC,2BAA2B;IAsCnC,OAAO,CAAC,yBAAyB;IAqCjC,OAAO,CAAC,yBAAyB;IA+CjC,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,0BAA0B;IAmBlC,OAAO,CAAC,sBAAsB;IA2B9B,OAAO,CAAC,2BAA2B;IAoCnC,OAAO,CAAC,oBAAoB;IA2B5B,OAAO,CAAC,YAAY;IAUpB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAa3C,OAAO,CAAC,gBAAgB;IAkExB,OAAO,CAAC,mBAAmB;IAiF3B,OAAO,CAAC,uBAAuB;IAiF/B,OAAO,CAAC,wBAAwB;IAkFhC,OAAO,CAAC,mBAAmB;IA8C3B,OAAO,CAAC,uBAAuB;IAoF/B,OAAO,CAAC,kBAAkB;IAwB1B,OAAO,CAAC,kBAAkB;CAgB3B"}
|