@ya-modbus/device-profiler 0.7.2 → 0.8.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.
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../src/cli.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAIxD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAG/C;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,uBAAuB;IACvB,SAAS,EAAE,SAAS,CAAA;IACpB,4BAA4B;IAC5B,IAAI,EAAE,YAAY,CAAA;IAClB,gCAAgC;IAChC,YAAY,EAAE,MAAM,CAAA;IACpB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAA;IAClB,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkC/E"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../src/cli.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAKxD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAG/C;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,uBAAuB;IACvB,SAAS,EAAE,SAAS,CAAA;IACpB,4BAA4B;IAC5B,IAAI,EAAE,YAAY,CAAA;IAClB,gCAAgC;IAChC,YAAY,EAAE,MAAM,CAAA;IACpB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAA;IAClB,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,oDAAoD;IACpD,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IACzB,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmD/E"}
@@ -2,7 +2,8 @@
2
2
  * CLI orchestrator for register scanning
3
3
  */
4
4
  import { formatProgress, formatSummary } from './console-formatter.js';
5
- import { PROGRESS_UPDATE_INTERVAL_MS } from './constants.js';
5
+ import { DEFAULT_BATCH_SIZE, PROGRESS_UPDATE_INTERVAL_MS } from './constants.js';
6
+ import { formatJSON } from './json-formatter.js';
6
7
  import { scanRegisters } from './register-scanner.js';
7
8
  /**
8
9
  * Run a register profile scan with console output
@@ -10,11 +11,14 @@ import { scanRegisters } from './register-scanner.js';
10
11
  * @param options - Scan configuration
11
12
  */
12
13
  export async function runProfileScan(options) {
13
- const { transport, type, startAddress, endAddress, batchSize } = options;
14
+ const { transport, type, startAddress, endAddress, batchSize, format = 'table', port } = options;
14
15
  const results = [];
16
+ const isJsonFormat = format === 'json';
15
17
  try {
16
- console.log(`Scanning ${type} registers from ${startAddress} to ${endAddress}...`);
17
- console.log();
18
+ if (!isJsonFormat) {
19
+ console.log(`Scanning ${type} registers from ${startAddress} to ${endAddress}...`);
20
+ console.log();
21
+ }
18
22
  let lastProgressUpdate = 0;
19
23
  await scanRegisters({
20
24
  transport,
@@ -23,20 +27,33 @@ export async function runProfileScan(options) {
23
27
  endAddress,
24
28
  ...(batchSize !== undefined && { batchSize }),
25
29
  onProgress: (current, total) => {
26
- const now = Date.now();
27
- if (now - lastProgressUpdate >= PROGRESS_UPDATE_INTERVAL_MS || current === total) {
28
- process.stdout.write(`\r${formatProgress(current, total)}`);
29
- lastProgressUpdate = now;
30
+ if (!isJsonFormat) {
31
+ const now = Date.now();
32
+ if (now - lastProgressUpdate >= PROGRESS_UPDATE_INTERVAL_MS || current === total) {
33
+ process.stdout.write(`\r${formatProgress(current, total)}`);
34
+ lastProgressUpdate = now;
35
+ }
30
36
  }
31
37
  },
32
38
  onResult: (result) => {
33
39
  results.push(result);
34
40
  },
35
41
  });
36
- console.log('\n');
37
- console.log('Scan complete!');
38
- console.log();
39
- console.log(formatSummary(results));
42
+ if (isJsonFormat) {
43
+ console.log(formatJSON(results, {
44
+ type,
45
+ startAddress,
46
+ endAddress,
47
+ batchSize: batchSize ?? DEFAULT_BATCH_SIZE,
48
+ port: port ?? '',
49
+ }));
50
+ }
51
+ else {
52
+ console.log('\n');
53
+ console.log('Scan complete!');
54
+ console.log();
55
+ console.log(formatSummary(results));
56
+ }
40
57
  }
41
58
  finally {
42
59
  await transport.close();
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/cli.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACtE,OAAO,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAA;AAE5D,OAAO,EAAE,aAAa,EAAmB,MAAM,uBAAuB,CAAA;AAkBtE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAA2B;IAC9D,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;IACxE,MAAM,OAAO,GAAiB,EAAE,CAAA;IAEhC,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,mBAAmB,YAAY,OAAO,UAAU,KAAK,CAAC,CAAA;QAClF,OAAO,CAAC,GAAG,EAAE,CAAA;QAEb,IAAI,kBAAkB,GAAG,CAAC,CAAA;QAC1B,MAAM,aAAa,CAAC;YAClB,SAAS;YACT,IAAI;YACJ,YAAY;YACZ,UAAU;YACV,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,CAAC;YAC7C,UAAU,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;gBAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;gBACtB,IAAI,GAAG,GAAG,kBAAkB,IAAI,2BAA2B,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;oBACjF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;oBAC3D,kBAAkB,GAAG,GAAG,CAAA;gBAC1B,CAAC;YACH,CAAC;YACD,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;gBACnB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YACtB,CAAC;SACF,CAAC,CAAA;QAEF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACjB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;QAC7B,OAAO,CAAC,GAAG,EAAE,CAAA;QACb,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAA;IACrC,CAAC;YAAS,CAAC;QACT,MAAM,SAAS,CAAC,KAAK,EAAE,CAAA;IACzB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/cli.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACtE,OAAO,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAA;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAEhD,OAAO,EAAE,aAAa,EAAmB,MAAM,uBAAuB,CAAA;AAsBtE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAA2B;IAC9D,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;IAChG,MAAM,OAAO,GAAiB,EAAE,CAAA;IAChC,MAAM,YAAY,GAAG,MAAM,KAAK,MAAM,CAAA;IAEtC,IAAI,CAAC;QACH,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,mBAAmB,YAAY,OAAO,UAAU,KAAK,CAAC,CAAA;YAClF,OAAO,CAAC,GAAG,EAAE,CAAA;QACf,CAAC;QAED,IAAI,kBAAkB,GAAG,CAAC,CAAA;QAC1B,MAAM,aAAa,CAAC;YAClB,SAAS;YACT,IAAI;YACJ,YAAY;YACZ,UAAU;YACV,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,CAAC;YAC7C,UAAU,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;gBAC7B,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;oBACtB,IAAI,GAAG,GAAG,kBAAkB,IAAI,2BAA2B,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;wBACjF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;wBAC3D,kBAAkB,GAAG,GAAG,CAAA;oBAC1B,CAAC;gBACH,CAAC;YACH,CAAC;YACD,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;gBACnB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YACtB,CAAC;SACF,CAAC,CAAA;QAEF,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CACT,UAAU,CAAC,OAAO,EAAE;gBAClB,IAAI;gBACJ,YAAY;gBACZ,UAAU;gBACV,SAAS,EAAE,SAAS,IAAI,kBAAkB;gBAC1C,IAAI,EAAE,IAAI,IAAI,EAAE;aACjB,CAAC,CACH,CAAA;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACjB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;YAC7B,OAAO,CAAC,GAAG,EAAE,CAAA;YACb,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAA;QACrC,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,SAAS,CAAC,KAAK,EAAE,CAAA;IACzB,CAAC;AACH,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * JSON output formatter for device profiler
3
+ */
4
+ import type { RegisterType } from './read-tester.js';
5
+ import type { ScanResult } from './register-scanner.js';
6
+ /**
7
+ * Options for JSON formatter
8
+ */
9
+ export interface JSONFormatterOptions {
10
+ /** Register type scanned */
11
+ type: RegisterType;
12
+ /** Start address of scan */
13
+ startAddress: number;
14
+ /** End address of scan */
15
+ endAddress: number;
16
+ /** Batch size used for scanning */
17
+ batchSize: number;
18
+ /** Connection port (serial or TCP) */
19
+ port: string;
20
+ }
21
+ /**
22
+ * Format scan results as JSON
23
+ *
24
+ * @param results - Array of scan results
25
+ * @param options - Scan configuration metadata
26
+ * @returns Formatted JSON string with 2-space indentation
27
+ */
28
+ export declare function formatJSON(results: ReadonlyArray<ScanResult>, options: JSONFormatterOptions): string;
29
+ //# sourceMappingURL=json-formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-formatter.d.ts","sourceRoot":"","sources":["../../../src/json-formatter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAEvD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,4BAA4B;IAC5B,IAAI,EAAE,YAAY,CAAA;IAClB,4BAA4B;IAC5B,YAAY,EAAE,MAAM,CAAA;IACpB,0BAA0B;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAA;IACjB,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,aAAa,CAAC,UAAU,CAAC,EAClC,OAAO,EAAE,oBAAoB,GAC5B,MAAM,CAuCR"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * JSON output formatter for device profiler
3
+ */
4
+ /**
5
+ * Format scan results as JSON
6
+ *
7
+ * @param results - Array of scan results
8
+ * @param options - Scan configuration metadata
9
+ * @returns Formatted JSON string with 2-space indentation
10
+ */
11
+ export function formatJSON(results, options) {
12
+ // Calculate summary statistics
13
+ const successful = results.filter((r) => r.success).length;
14
+ const failed = results.length - successful;
15
+ const totalTimeMs = results.reduce((sum, r) => sum + r.timing, 0);
16
+ const averageTimeMs = results.length > 0 ? Math.round((totalTimeMs / results.length) * 100) / 100 : 0;
17
+ // Build output object
18
+ const output = {
19
+ timestamp: new Date().toISOString(),
20
+ scan: {
21
+ type: options.type,
22
+ startAddress: options.startAddress,
23
+ endAddress: options.endAddress,
24
+ batchSize: options.batchSize,
25
+ },
26
+ connection: {
27
+ port: options.port,
28
+ },
29
+ results: results.map((result) => ({
30
+ address: result.address,
31
+ type: result.type,
32
+ success: result.success,
33
+ value: result.value ? result.value.readUInt16BE(0) : null,
34
+ timing: result.timing,
35
+ ...(result.error && { error: result.error }),
36
+ ...(result.errorType && { errorType: result.errorType }),
37
+ })),
38
+ summary: {
39
+ total: results.length,
40
+ successful,
41
+ failed,
42
+ totalTimeMs,
43
+ averageTimeMs,
44
+ },
45
+ };
46
+ return JSON.stringify(output, null, 2);
47
+ }
48
+ //# sourceMappingURL=json-formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-formatter.js","sourceRoot":"","sources":["../../../src/json-formatter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAqBH;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CACxB,OAAkC,EAClC,OAA6B;IAE7B,+BAA+B;IAC/B,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAA;IAC1D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,UAAU,CAAA;IAC1C,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACjE,MAAM,aAAa,GACjB,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAEjF,sBAAsB;IACtB,MAAM,MAAM,GAAG;QACb,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,IAAI,EAAE;YACJ,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B;QACD,UAAU,EAAE;YACV,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB;QACD,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAChC,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;YACzD,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;YAC5C,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;SACzD,CAAC,CAAC;QACH,OAAO,EAAE;YACP,KAAK,EAAE,OAAO,CAAC,MAAM;YACrB,UAAU;YACV,MAAM;YACN,WAAW;YACX,aAAa;SACd;KACF,CAAA;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;AACxC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../../src/program.ts"],"names":[],"mappings":";AAEA;;GAEG;AAIH,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAA;AAsB3C,eAAO,MAAM,OAAO,SAAgB,CAAA"}
1
+ {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../../src/program.ts"],"names":[],"mappings":";AAEA;;GAEG;AAIH,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAA;AAuB3C,eAAO,MAAM,OAAO,SAAgB,CAAA"}
@@ -26,6 +26,9 @@ program
26
26
  .option('--data-bits <bits>', 'Data bits for RTU', parseNumber, 8)
27
27
  .option('--stop-bits <bits>', 'Stop bits for RTU', parseNumber, 1)
28
28
  .option('--timeout <ms>', 'Response timeout in milliseconds', parseNumber, 1000)
29
+ .addOption(new Option('-f, --format <format>', 'Output format: table or json')
30
+ .choices(['table', 'json'])
31
+ .default('table'))
29
32
  .action(async (options) => {
30
33
  try {
31
34
  const registerType = options.type === 'input' ? RegisterType.Input : RegisterType.Holding;
@@ -65,6 +68,8 @@ program
65
68
  startAddress: options.start,
66
69
  endAddress: options.end,
67
70
  batchSize: options.batch,
71
+ format: options.format,
72
+ port: options.port,
68
73
  });
69
74
  }
70
75
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"program.js","sourceRoot":"","sources":["../../../src/program.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../../../src/program.ts"],"names":[],"mappings":";AAEA;;GAEG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAE3C,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAiB/C,MAAM,WAAW,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;AAElE,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAEpC,OAAO;KACJ,IAAI,CAAC,mBAAmB,CAAC;KACzB,WAAW,CAAC,oDAAoD,CAAC;KACjE,OAAO,CAAC,OAAO,CAAC;KAChB,cAAc,CAAC,eAAe,EAAE,mDAAmD,CAAC;KACpF,cAAc,CAAC,iBAAiB,EAAE,yBAAyB,EAAE,WAAW,CAAC;KACzE,MAAM,CAAC,eAAe,EAAE,iCAAiC,EAAE,SAAS,CAAC;KACrE,MAAM,CAAC,mBAAmB,EAAE,wBAAwB,EAAE,WAAW,EAAE,CAAC,CAAC;KACrE,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,EAAE,WAAW,EAAE,GAAG,CAAC;KACnE,MAAM,CAAC,gBAAgB,EAAE,sBAAsB,EAAE,WAAW,EAAE,EAAE,CAAC;KACjE,MAAM,CAAC,eAAe,EAAE,mBAAmB,EAAE,WAAW,EAAE,IAAI,CAAC;KAC/D,SAAS,CACR,IAAI,MAAM,CAAC,mBAAmB,EAAE,gBAAgB,CAAC;KAC9C,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;KAChC,OAAO,CAAC,MAAM,CAAC,CACnB;KACA,MAAM,CAAC,oBAAoB,EAAE,mBAAmB,EAAE,WAAW,EAAE,CAAC,CAAC;KACjE,MAAM,CAAC,oBAAoB,EAAE,mBAAmB,EAAE,WAAW,EAAE,CAAC,CAAC;KACjE,MAAM,CAAC,gBAAgB,EAAE,kCAAkC,EAAE,WAAW,EAAE,IAAI,CAAC;KAC/E,SAAS,CACR,IAAI,MAAM,CAAC,uBAAuB,EAAE,8BAA8B,CAAC;KAChE,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;KAC1B,OAAO,CAAC,OAAO,CAAC,CACpB;KACA,MAAM,CAAC,KAAK,EAAE,OAAmB,EAAE,EAAE;IACpC,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAA;QAEzF,IAAI,SAAsD,CAAA;QAE1D,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACrC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YACrB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YACxB,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAA;YACnE,CAAC;YACD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;YAClC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,QAAQ,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAC;gBACtD,MAAM,IAAI,KAAK,CACb,wBAAwB,OAAO,qBAAqB,QAAQ,QAAQ,QAAQ,EAAE,CAC/E,CAAA;YACH,CAAC;YACD,SAAS,GAAG,MAAM,eAAe,CAAC;gBAChC,IAAI;gBACJ,IAAI;gBACJ,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,MAAM,eAAe,CAAC;gBAChC,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,QAAQ,EAAE,OAAO,CAAC,IAAI;gBACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CAAC,CAAA;QACJ,CAAC;QAED,MAAM,cAAc,CAAC;YACnB,SAAS;YACT,IAAI,EAAE,YAAY;YAClB,YAAY,EAAE,OAAO,CAAC,KAAK;YAC3B,UAAU,EAAE,OAAO,CAAC,GAAG;YACvB,SAAS,EAAE,OAAO,CAAC,KAAK;YACxB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;QAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC,CAAC,CAAA"}