@sectester/repeater 0.28.0 → 0.29.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/package.json +5 -8
- package/src/api/DefaultRepeatersManager.js +1 -1
- package/src/api/DefaultRepeatersManager.js.map +1 -1
- package/src/api/commands/CreateRepeaterRequest.d.ts +1 -1
- package/src/api/commands/CreateRepeaterRequest.js +2 -2
- package/src/api/commands/CreateRepeaterRequest.js.map +1 -1
- package/src/api/commands/DeleteRepeaterRequest.d.ts +1 -1
- package/src/api/commands/DeleteRepeaterRequest.js +2 -2
- package/src/api/commands/DeleteRepeaterRequest.js.map +1 -1
- package/src/api/commands/GetRepeaterRequest.d.ts +1 -1
- package/src/api/commands/GetRepeaterRequest.js +2 -2
- package/src/api/commands/GetRepeaterRequest.js.map +1 -1
- package/src/register.js +0 -17
- package/src/register.js.map +1 -1
- package/src/api/ExecuteRequestEventHandler.d.ts +0 -24
- package/src/api/ExecuteRequestEventHandler.js +0 -37
- package/src/api/ExecuteRequestEventHandler.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sectester/repeater",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.29.0",
|
|
4
4
|
"description": "Package for managing repeaters, which are mandatory for scanning targets on a local network.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -35,21 +35,18 @@
|
|
|
35
35
|
"onprem"
|
|
36
36
|
],
|
|
37
37
|
"peerDependencies": {
|
|
38
|
-
"@sectester/bus": ">=0.16.0 <1.0.0",
|
|
39
38
|
"@sectester/core": ">=0.16.0 <1.0.0"
|
|
40
39
|
},
|
|
41
40
|
"main": "./src/index.js",
|
|
42
41
|
"typings": "./src/index.d.ts",
|
|
43
42
|
"dependencies": {
|
|
44
|
-
"
|
|
43
|
+
"axios": "^0.26.1",
|
|
45
44
|
"uuid": "^8.3.2",
|
|
45
|
+
"reflect-metadata": "^0.1.13",
|
|
46
46
|
"tsyringe": "^4.6.0",
|
|
47
|
-
"chalk": "^4.1.2",
|
|
48
|
-
"form-data": "^4.0.0",
|
|
49
|
-
"axios": "^0.26.1",
|
|
50
|
-
"amqp-connection-manager": "^4.1.13",
|
|
51
47
|
"axios-rate-limit": "^1.3.0",
|
|
52
|
-
"
|
|
48
|
+
"form-data": "^4.0.0",
|
|
49
|
+
"chalk": "^4.1.2",
|
|
53
50
|
"socket.io-msgpack-parser": "^3.0.2",
|
|
54
51
|
"socket.io-client": "^4.7.5",
|
|
55
52
|
"iconv-lite": "^0.6.3",
|
|
@@ -26,7 +26,7 @@ let DefaultRepeatersManager = class DefaultRepeatersManager {
|
|
|
26
26
|
}
|
|
27
27
|
return { repeaterId: repeater.id };
|
|
28
28
|
}
|
|
29
|
-
|
|
29
|
+
deleteRepeater(repeaterId) {
|
|
30
30
|
return this.commandDispatcher.execute(new commands_1.DeleteRepeaterRequest({ repeaterId }));
|
|
31
31
|
}
|
|
32
32
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultRepeatersManager.js","sourceRoot":"","sources":["../../../../../packages/repeater/src/api/DefaultRepeatersManager.ts"],"names":[],"mappings":";;;;AACA,yCAIoB;AACpB,uCAA8C;AAC9C,0CAAoD;AAGpD,IAAa,uBAAuB,GAApC,MAAa,uBAAuB;IAClC,YAEmB,iBAAoC;QAApC,sBAAiB,GAAjB,iBAAiB,CAAmB;IACpD,CAAC;IAEG,KAAK,CAAC,WAAW,CACtB,UAAkB;QAElB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CACnD,IAAI,6BAAkB,CAAC,UAAU,CAAC,CACnC,CAAC;QAEF,IAAI,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,EAAE,CAAA,EAAE;YACjB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;SACzC;QAED,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC;IACrC,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,EAC1B,SAAS,EACT,GAAG,OAAO,EAKX;QACC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CACnD,IAAI,gCAAqB,CAAC;YACxB,GAAG,OAAO;YACV,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClD,CAAC,CACH,CAAC;QACF,IAAI,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,EAAE,CAAA,EAAE;YACjB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;SAClD;QAED,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC;IACrC,CAAC;IAEM,
|
|
1
|
+
{"version":3,"file":"DefaultRepeatersManager.js","sourceRoot":"","sources":["../../../../../packages/repeater/src/api/DefaultRepeatersManager.ts"],"names":[],"mappings":";;;;AACA,yCAIoB;AACpB,uCAA8C;AAC9C,0CAAoD;AAGpD,IAAa,uBAAuB,GAApC,MAAa,uBAAuB;IAClC,YAEmB,iBAAoC;QAApC,sBAAiB,GAAjB,iBAAiB,CAAmB;IACpD,CAAC;IAEG,KAAK,CAAC,WAAW,CACtB,UAAkB;QAElB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CACnD,IAAI,6BAAkB,CAAC,UAAU,CAAC,CACnC,CAAC;QAEF,IAAI,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,EAAE,CAAA,EAAE;YACjB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;SACzC;QAED,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC;IACrC,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,EAC1B,SAAS,EACT,GAAG,OAAO,EAKX;QACC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CACnD,IAAI,gCAAqB,CAAC;YACxB,GAAG,OAAO;YACV,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClD,CAAC,CACH,CAAC;QACF,IAAI,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,EAAE,CAAA,EAAE;YACjB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;SAClD;QAED,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC;IACrC,CAAC;IAEM,cAAc,CAAC,UAAkB;QACtC,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,CACnC,IAAI,gCAAqB,CAAC,EAAE,UAAU,EAAE,CAAC,CAC1C,CAAC;IACJ,CAAC;CACF,CAAA;AA9CY,uBAAuB;IADnC,IAAA,qBAAU,GAAE;IAGR,mBAAA,IAAA,iBAAM,EAAC,wBAAiB,CAAC,CAAA;;GAFjB,uBAAuB,CA8CnC;AA9CY,0DAAuB"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.CreateRepeaterRequest = void 0;
|
|
4
|
-
const
|
|
5
|
-
class CreateRepeaterRequest extends
|
|
4
|
+
const core_1 = require("@sectester/core");
|
|
5
|
+
class CreateRepeaterRequest extends core_1.HttpRequest {
|
|
6
6
|
constructor(payload) {
|
|
7
7
|
super({
|
|
8
8
|
payload,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateRepeaterRequest.js","sourceRoot":"","sources":["../../../../../../packages/repeater/src/api/commands/CreateRepeaterRequest.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"CreateRepeaterRequest.js","sourceRoot":"","sources":["../../../../../../packages/repeater/src/api/commands/CreateRepeaterRequest.ts"],"names":[],"mappings":";;;AAAA,0CAA8C;AAY9C,MAAa,qBAAsB,SAAQ,kBAG1C;IACC,YAAY,OAAqC;QAC/C,KAAK,CAAC;YACJ,OAAO;YACP,GAAG,EAAE,mBAAmB;YACxB,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;IACL,CAAC;CACF;AAXD,sDAWC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DeleteRepeaterRequest = void 0;
|
|
4
|
-
const
|
|
5
|
-
class DeleteRepeaterRequest extends
|
|
4
|
+
const core_1 = require("@sectester/core");
|
|
5
|
+
class DeleteRepeaterRequest extends core_1.HttpRequest {
|
|
6
6
|
constructor(payload) {
|
|
7
7
|
super({
|
|
8
8
|
url: `/api/v1/repeaters/${payload.repeaterId}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeleteRepeaterRequest.js","sourceRoot":"","sources":["../../../../../../packages/repeater/src/api/commands/DeleteRepeaterRequest.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"DeleteRepeaterRequest.js","sourceRoot":"","sources":["../../../../../../packages/repeater/src/api/commands/DeleteRepeaterRequest.ts"],"names":[],"mappings":";;;AAAA,0CAA8C;AAE9C,MAAa,qBAAsB,SAAQ,kBAAW;IACpD,YAAY,OAA+B;QACzC,KAAK,CAAC;YACJ,GAAG,EAAE,qBAAqB,OAAO,CAAC,UAAU,EAAE;YAC9C,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,SAAS;YAClB,WAAW,EAAE,KAAK;SACnB,CAAC,CAAC;IACL,CAAC;CACF;AATD,sDASC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.GetRepeaterRequest = void 0;
|
|
4
|
-
const
|
|
5
|
-
class GetRepeaterRequest extends
|
|
4
|
+
const core_1 = require("@sectester/core");
|
|
5
|
+
class GetRepeaterRequest extends core_1.HttpRequest {
|
|
6
6
|
constructor(repeaterId) {
|
|
7
7
|
super({
|
|
8
8
|
url: `/api/v1/repeaters/${repeaterId}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GetRepeaterRequest.js","sourceRoot":"","sources":["../../../../../../packages/repeater/src/api/commands/GetRepeaterRequest.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"GetRepeaterRequest.js","sourceRoot":"","sources":["../../../../../../packages/repeater/src/api/commands/GetRepeaterRequest.ts"],"names":[],"mappings":";;;AAAA,0CAA8C;AAQ9C,MAAa,kBAAmB,SAAQ,kBAGvC;IACC,YAAY,UAAkB;QAC5B,KAAK,CAAC;YACJ,GAAG,EAAE,qBAAqB,UAAU,EAAE;YACtC,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,SAAS;SACnB,CAAC,CAAC;IACL,CAAC;CACF;AAXD,gDAWC"}
|
package/src/register.js
CHANGED
|
@@ -6,7 +6,6 @@ const api_1 = require("./api");
|
|
|
6
6
|
const utils_1 = require("./utils");
|
|
7
7
|
const tsyringe_1 = require("tsyringe");
|
|
8
8
|
const core_1 = require("@sectester/core");
|
|
9
|
-
const bus_1 = require("@sectester/bus");
|
|
10
9
|
tsyringe_1.container.register(request_runner_1.RequestRunner, {
|
|
11
10
|
useClass: request_runner_1.HttpRequestRunner
|
|
12
11
|
});
|
|
@@ -38,22 +37,6 @@ tsyringe_1.container.register(lib_1.RepeaterFactory, {
|
|
|
38
37
|
return new lib_1.RepeaterFactory(childContainer.resolve(core_1.Configuration));
|
|
39
38
|
}
|
|
40
39
|
});
|
|
41
|
-
tsyringe_1.container.register(bus_1.RMQEventBusConfig, {
|
|
42
|
-
useFactory: (0, tsyringe_1.instancePerContainerCachingFactory)((childContainer) => ({
|
|
43
|
-
exchange: 'EventBus',
|
|
44
|
-
appQueue: 'app',
|
|
45
|
-
clientQueue: `agent:${childContainer.resolve(lib_1.RepeaterId)}`
|
|
46
|
-
}))
|
|
47
|
-
});
|
|
48
|
-
tsyringe_1.container.register(core_1.EventBus, {
|
|
49
|
-
useFactory: (childContainer) => {
|
|
50
|
-
const connectionManager = childContainer.resolve(bus_1.RMQConnectionManager);
|
|
51
|
-
const logger = childContainer.resolve(core_1.Logger);
|
|
52
|
-
const retryStrategy = childContainer.resolve(core_1.RetryStrategy);
|
|
53
|
-
const eventBusConfig = childContainer.resolve(bus_1.RMQEventBusConfig);
|
|
54
|
-
return new bus_1.RMQEventBus(childContainer, logger, retryStrategy, eventBusConfig, connectionManager);
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
40
|
tsyringe_1.container.register(lib_1.DefaultRepeaterServerOptions, {
|
|
58
41
|
useFactory: (childContainer) => {
|
|
59
42
|
const configuration = childContainer.resolve(core_1.Configuration);
|
package/src/register.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../../../packages/repeater/src/register.ts"],"names":[],"mappings":";;AAAA,+
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../../../packages/repeater/src/register.ts"],"names":[],"mappings":";;AAAA,+BAOe;AACf,qDAI0B;AAC1B,+BAAkE;AAClE,mCAA4D;AAC5D,uCAA0D;AAC1D,0CAAgD;AAEhD,oBAAS,CAAC,QAAQ,CAAC,8BAAa,EAAE;IAChC,QAAQ,EAAE,kCAAiB;CAC5B,CAAC,CAAC;AAEH,oBAAS,CAAC,QAAQ,CAAC,qCAAoB,EAAE;IACvC,QAAQ,EAAE;QACR,OAAO,EAAE,KAAK;QACd,gBAAgB,EAAE,GAAG;QACrB,eAAe,EAAE,KAAK;QACtB,YAAY,EAAE;YACZ,WAAW;YACX,YAAY;YACZ,UAAU;YACV,iBAAiB;YACjB,eAAe;YACf,UAAU;YACV,wBAAwB;YACxB,0BAA0B;YAC1B,kBAAkB;YAClB,iBAAiB;YACjB,mCAAmC;YACnC,qBAAqB;YACrB,qBAAqB;YACrB,qBAAqB;SACtB;KACF;CACF,CAAC,CAAC;AAEH,oBAAS,CAAC,QAAQ,CAAC,qBAAe,EAAE;IAClC,UAAU,CAAC,cAAmC;QAC5C,OAAO,IAAI,qBAAe,CAAC,cAAc,CAAC,OAAO,CAAC,oBAAa,CAAC,CAAC,CAAC;IACpE,CAAC;CACF,CAAC,CAAC;AAEH,oBAAS,CAAC,QAAQ,CAAC,kCAA4B,EAAE;IAC/C,UAAU,EAAE,CAAC,cAAmC,EAAE,EAAE;QAClD,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,CAAgB,oBAAa,CAAC,CAAC;QAE3E,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;YAC9B,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAC;SACH;QAED,OAAO;YACL,GAAG,EAAE,GAAG,aAAa,CAAC,GAAG,eAAe;YACxC,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,KAAK;YACtC,cAAc,EAAE,KAAK;SACtB,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,oBAAS,CAAC,QAAQ,CAAC,oBAAY,EAAE,EAAE,QAAQ,EAAE,2BAAmB,EAAE,CAAC,CAAC;AACpE,oBAAS,CAAC,QAAQ,CAAC,oBAAc,EAAE,EAAE,QAAQ,EAAE,2BAAqB,EAAE,CAAC,CAAC;AACxE,oBAAS,CAAC,QAAQ,CAAC,sBAAgB,EAAE,EAAE,QAAQ,EAAE,6BAAuB,EAAE,CAAC,CAAC;AAC5E,oBAAS,CAAC,QAAQ,CAAC,sBAAgB,EAAE,EAAE,QAAQ,EAAE,6BAAuB,EAAE,CAAC,CAAC"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { Protocol } from '../models';
|
|
2
|
-
import { RequestRunner } from '../request-runner';
|
|
3
|
-
import { EventHandler } from '@sectester/core';
|
|
4
|
-
export interface ExecuteRequestPayload {
|
|
5
|
-
readonly protocol: Protocol;
|
|
6
|
-
readonly url: string;
|
|
7
|
-
readonly headers: Record<string, string | string[]>;
|
|
8
|
-
readonly method?: string;
|
|
9
|
-
readonly body?: string;
|
|
10
|
-
readonly correlation_id_regex?: string;
|
|
11
|
-
}
|
|
12
|
-
export interface ExecuteRequestResult {
|
|
13
|
-
readonly protocol: Protocol;
|
|
14
|
-
readonly body?: string;
|
|
15
|
-
readonly headers?: Record<string, string | string[] | undefined>;
|
|
16
|
-
readonly status_code?: number;
|
|
17
|
-
readonly error_code?: string;
|
|
18
|
-
readonly message?: string;
|
|
19
|
-
}
|
|
20
|
-
export declare class ExecuteRequestEventHandler implements EventHandler<ExecuteRequestPayload, ExecuteRequestResult> {
|
|
21
|
-
private readonly requestRunners;
|
|
22
|
-
constructor(requestRunners: RequestRunner[]);
|
|
23
|
-
handle(event: ExecuteRequestPayload): Promise<ExecuteRequestResult>;
|
|
24
|
-
}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ExecuteRequestEventHandler = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const request_runner_1 = require("../request-runner");
|
|
6
|
-
const core_1 = require("@sectester/core");
|
|
7
|
-
const tsyringe_1 = require("tsyringe");
|
|
8
|
-
let ExecuteRequestEventHandler = class ExecuteRequestEventHandler {
|
|
9
|
-
constructor(requestRunners) {
|
|
10
|
-
this.requestRunners = requestRunners;
|
|
11
|
-
}
|
|
12
|
-
async handle(event) {
|
|
13
|
-
const { protocol } = event;
|
|
14
|
-
const runner = this.requestRunners.find(x => x.protocol === protocol);
|
|
15
|
-
if (!runner) {
|
|
16
|
-
throw new Error(`Unsupported protocol "${protocol}"`);
|
|
17
|
-
}
|
|
18
|
-
const response = await runner.run(new request_runner_1.Request({ ...event }));
|
|
19
|
-
const { statusCode, message, errorCode, body, headers } = response;
|
|
20
|
-
return {
|
|
21
|
-
protocol,
|
|
22
|
-
body,
|
|
23
|
-
headers,
|
|
24
|
-
message,
|
|
25
|
-
status_code: statusCode,
|
|
26
|
-
error_code: errorCode
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
ExecuteRequestEventHandler = tslib_1.__decorate([
|
|
31
|
-
(0, tsyringe_1.scoped)(tsyringe_1.Lifecycle.ContainerScoped),
|
|
32
|
-
(0, core_1.bind)('ExecuteScript'),
|
|
33
|
-
tslib_1.__param(0, (0, tsyringe_1.injectAll)(request_runner_1.RequestRunner)),
|
|
34
|
-
tslib_1.__metadata("design:paramtypes", [Array])
|
|
35
|
-
], ExecuteRequestEventHandler);
|
|
36
|
-
exports.ExecuteRequestEventHandler = ExecuteRequestEventHandler;
|
|
37
|
-
//# sourceMappingURL=ExecuteRequestEventHandler.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ExecuteRequestEventHandler.js","sourceRoot":"","sources":["../../../../../packages/repeater/src/api/ExecuteRequestEventHandler.ts"],"names":[],"mappings":";;;;AACA,sDAAqE;AACrE,0CAAqD;AACrD,uCAAwD;AAsBxD,IAAa,0BAA0B,GAAvC,MAAa,0BAA0B;IAGrC,YAEmB,cAA+B;QAA/B,mBAAc,GAAd,cAAc,CAAiB;IAC/C,CAAC;IAEG,KAAK,CAAC,MAAM,CACjB,KAA4B;QAE5B,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;QAE3B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;QAEtE,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,GAAG,CAAC,CAAC;SACvD;QAED,MAAM,QAAQ,GAAa,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,wBAAO,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;QAEvE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC;QAEnE,OAAO;YACL,QAAQ;YACR,IAAI;YACJ,OAAO;YACP,OAAO;YACP,WAAW,EAAE,UAAU;YACvB,UAAU,EAAE,SAAS;SACtB,CAAC;IACJ,CAAC;CACF,CAAA;AAhCY,0BAA0B;IAFtC,IAAA,iBAAM,EAAC,oBAAS,CAAC,eAAe,CAAC;IACjC,IAAA,WAAI,EAAC,eAAe,CAAC;IAKjB,mBAAA,IAAA,oBAAS,EAAC,8BAAa,CAAC,CAAA;;GAJhB,0BAA0B,CAgCtC;AAhCY,gEAA0B"}
|