@remnawave/xtls-sdk 0.0.4 → 0.0.6

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.
Files changed (85) hide show
  1. package/package.json +1 -1
  2. package/build/scripts/export-protos.d.ts +0 -2
  3. package/build/scripts/export-protos.d.ts.map +0 -1
  4. package/build/scripts/export-protos.js +0 -122
  5. package/build/src/xray-protos/app/dns/config.d.ts +0 -93
  6. package/build/src/xray-protos/app/dns/config.d.ts.map +0 -1
  7. package/build/src/xray-protos/app/dns/config.js +0 -707
  8. package/build/src/xray-protos/app/dns/fakedns/fakedns.d.ts +0 -30
  9. package/build/src/xray-protos/app/dns/fakedns/fakedns.d.ts.map +0 -1
  10. package/build/src/xray-protos/app/dns/fakedns/fakedns.js +0 -152
  11. package/build/src/xray-protos/app/observatory/burst/config.d.ts +0 -41
  12. package/build/src/xray-protos/app/observatory/burst/config.d.ts.map +0 -1
  13. package/build/src/xray-protos/app/observatory/burst/config.js +0 -223
  14. package/build/src/xray-protos/app/observatory/command/command.d.ts +0 -53
  15. package/build/src/xray-protos/app/observatory/command/command.d.ts.map +0 -1
  16. package/build/src/xray-protos/app/observatory/command/command.js +0 -166
  17. package/build/src/xray-protos/app/observatory/config.d.ts +0 -106
  18. package/build/src/xray-protos/app/observatory/config.d.ts.map +0 -1
  19. package/build/src/xray-protos/app/observatory/config.js +0 -628
  20. package/build/src/xray-protos/app/router/command/command.d.ts +0 -222
  21. package/build/src/xray-protos/app/router/command/command.d.ts.map +0 -1
  22. package/build/src/xray-protos/app/router/command/command.js +0 -1235
  23. package/build/src/xray-protos/app/router/config.d.ts +0 -176
  24. package/build/src/xray-protos/app/router/config.d.ts.map +0 -1
  25. package/build/src/xray-protos/app/router/config.js +0 -1484
  26. package/build/src/xray-protos/transport/internet/grpc/config.d.ts +0 -29
  27. package/build/src/xray-protos/transport/internet/grpc/config.d.ts.map +0 -1
  28. package/build/src/xray-protos/transport/internet/grpc/config.js +0 -186
  29. package/build/src/xray-protos/transport/internet/grpc/encoding/stream.d.ts +0 -62
  30. package/build/src/xray-protos/transport/internet/grpc/encoding/stream.d.ts.map +0 -1
  31. package/build/src/xray-protos/transport/internet/grpc/encoding/stream.js +0 -164
  32. package/build/src/xray-protos/transport/internet/headers/dns/config.d.ts +0 -22
  33. package/build/src/xray-protos/transport/internet/headers/dns/config.d.ts.map +0 -1
  34. package/build/src/xray-protos/transport/internet/headers/dns/config.js +0 -68
  35. package/build/src/xray-protos/transport/internet/headers/http/config.d.ts +0 -80
  36. package/build/src/xray-protos/transport/internet/headers/http/config.d.ts.map +0 -1
  37. package/build/src/xray-protos/transport/internet/headers/http/config.js +0 -544
  38. package/build/src/xray-protos/transport/internet/headers/noop/config.d.ts +0 -25
  39. package/build/src/xray-protos/transport/internet/headers/noop/config.d.ts.map +0 -1
  40. package/build/src/xray-protos/transport/internet/headers/noop/config.js +0 -90
  41. package/build/src/xray-protos/transport/internet/headers/srtp/config.d.ts +0 -27
  42. package/build/src/xray-protos/transport/internet/headers/srtp/config.d.ts.map +0 -1
  43. package/build/src/xray-protos/transport/internet/headers/srtp/config.js +0 -154
  44. package/build/src/xray-protos/transport/internet/headers/tls/config.d.ts +0 -21
  45. package/build/src/xray-protos/transport/internet/headers/tls/config.d.ts.map +0 -1
  46. package/build/src/xray-protos/transport/internet/headers/tls/config.js +0 -51
  47. package/build/src/xray-protos/transport/internet/headers/utp/config.d.ts +0 -22
  48. package/build/src/xray-protos/transport/internet/headers/utp/config.d.ts.map +0 -1
  49. package/build/src/xray-protos/transport/internet/headers/utp/config.js +0 -68
  50. package/build/src/xray-protos/transport/internet/headers/wechat/config.d.ts +0 -21
  51. package/build/src/xray-protos/transport/internet/headers/wechat/config.d.ts.map +0 -1
  52. package/build/src/xray-protos/transport/internet/headers/wechat/config.js +0 -51
  53. package/build/src/xray-protos/transport/internet/headers/wireguard/config.d.ts +0 -21
  54. package/build/src/xray-protos/transport/internet/headers/wireguard/config.d.ts.map +0 -1
  55. package/build/src/xray-protos/transport/internet/headers/wireguard/config.js +0 -51
  56. package/build/src/xray-protos/transport/internet/http/config.d.ts +0 -28
  57. package/build/src/xray-protos/transport/internet/http/config.d.ts.map +0 -1
  58. package/build/src/xray-protos/transport/internet/http/config.js +0 -155
  59. package/build/src/xray-protos/transport/internet/httpupgrade/config.d.ts +0 -34
  60. package/build/src/xray-protos/transport/internet/httpupgrade/config.d.ts.map +0 -1
  61. package/build/src/xray-protos/transport/internet/httpupgrade/config.js +0 -235
  62. package/build/src/xray-protos/transport/internet/kcp/config.d.ts +0 -82
  63. package/build/src/xray-protos/transport/internet/kcp/config.d.ts.map +0 -1
  64. package/build/src/xray-protos/transport/internet/kcp/config.js +0 -639
  65. package/build/src/xray-protos/transport/internet/reality/config.d.ts +0 -38
  66. package/build/src/xray-protos/transport/internet/reality/config.d.ts.map +0 -1
  67. package/build/src/xray-protos/transport/internet/reality/config.js +0 -376
  68. package/build/src/xray-protos/transport/internet/splithttp/config.d.ts +0 -55
  69. package/build/src/xray-protos/transport/internet/splithttp/config.d.ts.map +0 -1
  70. package/build/src/xray-protos/transport/internet/splithttp/config.js +0 -536
  71. package/build/src/xray-protos/transport/internet/tcp/config.d.ts +0 -24
  72. package/build/src/xray-protos/transport/internet/tcp/config.d.ts.map +0 -1
  73. package/build/src/xray-protos/transport/internet/tcp/config.js +0 -89
  74. package/build/src/xray-protos/transport/internet/tls/config.d.ts +0 -87
  75. package/build/src/xray-protos/transport/internet/tls/config.d.ts.map +0 -1
  76. package/build/src/xray-protos/transport/internet/tls/config.js +0 -555
  77. package/build/src/xray-protos/transport/internet/udp/config.d.ts +0 -21
  78. package/build/src/xray-protos/transport/internet/udp/config.d.ts.map +0 -1
  79. package/build/src/xray-protos/transport/internet/udp/config.js +0 -51
  80. package/build/src/xray-protos/transport/internet/websocket/config.d.ts +0 -35
  81. package/build/src/xray-protos/transport/internet/websocket/config.d.ts.map +0 -1
  82. package/build/src/xray-protos/transport/internet/websocket/config.js +0 -235
  83. package/build/tests/stats.spec.d.ts +0 -2
  84. package/build/tests/stats.spec.d.ts.map +0 -1
  85. package/build/tests/stats.spec.js +0 -86
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remnawave/xtls-sdk",
3
- "version": "0.0.4",
3
+ "version": "0.0.6",
4
4
  "description": "A Typescript SDK for XRAY (XTLS) Core GRPC Api",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=export-protos.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"export-protos.d.ts","sourceRoot":"","sources":["../../scripts/export-protos.ts"],"names":[],"mappings":""}
@@ -1,122 +0,0 @@
1
- "use strict";
2
- /* eslint-disable no-console */
3
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
- if (k2 === undefined) k2 = k;
5
- var desc = Object.getOwnPropertyDescriptor(m, k);
6
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
- desc = { enumerable: true, get: function() { return m[k]; } };
8
- }
9
- Object.defineProperty(o, k2, desc);
10
- }) : (function(o, m, k, k2) {
11
- if (k2 === undefined) k2 = k;
12
- o[k2] = m[k];
13
- }));
14
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
- Object.defineProperty(o, "default", { enumerable: true, value: v });
16
- }) : function(o, v) {
17
- o["default"] = v;
18
- });
19
- var __importStar = (this && this.__importStar) || function (mod) {
20
- if (mod && mod.__esModule) return mod;
21
- var result = {};
22
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
23
- __setModuleDefault(result, mod);
24
- return result;
25
- };
26
- Object.defineProperty(exports, "__esModule", { value: true });
27
- const fs = __importStar(require("node:fs"));
28
- const path = __importStar(require("node:path"));
29
- const tar = __importStar(require("tar"));
30
- const node_child_process_1 = require("node:child_process");
31
- const node_util_1 = require("node:util");
32
- const VERSION = '24.11.11';
33
- const TEMP_DIR = path.join(__dirname, 'temp-xray-core');
34
- const TARGET_URL = `https://github.com/XTLS/Xray-core/archive/refs/tags/v${VERSION}.tar.gz`;
35
- const PROTO_DIR = path.join(__dirname, '../src/xray-protos');
36
- const execAsync = (0, node_util_1.promisify)(node_child_process_1.exec);
37
- async function downloadTarGz(url, dest) {
38
- const response = await fetch(url);
39
- if (!response.ok)
40
- throw new Error(`Failed to download file: ${response.statusText}`);
41
- const buffer = await response.arrayBuffer();
42
- fs.writeFileSync(dest, Buffer.from(buffer));
43
- console.log(`Core extracted to ${dest}`);
44
- }
45
- async function extractProtoFiles(tarPath) {
46
- await tar.x({
47
- file: tarPath,
48
- cwd: TEMP_DIR,
49
- strip: 1,
50
- });
51
- console.log('Core extracted');
52
- const protoFiles = findProtoFiles(TEMP_DIR);
53
- return protoFiles;
54
- }
55
- function findProtoFiles(dir, fileList = []) {
56
- const files = fs.readdirSync(dir);
57
- for (const file of files) {
58
- const filePath = path.join(dir, file);
59
- const stat = fs.statSync(filePath);
60
- if (stat.isDirectory()) {
61
- findProtoFiles(filePath, fileList);
62
- }
63
- else if (path.extname(file) === '.proto') {
64
- fileList.push(filePath);
65
- }
66
- }
67
- return fileList;
68
- }
69
- async function generateTsFromProto(protoFile) {
70
- try {
71
- console.log(protoFile);
72
- const dir = path.join(__dirname, '../src/xray-protos');
73
- const command = [
74
- 'protoc',
75
- `--plugin=./node_modules/.bin/protoc-gen-ts_proto`,
76
- `--ts_proto_out=${dir}`,
77
- `--ts_proto_opt=outputServices=generic-definitions,useExactTypes=false`,
78
- `--ts_proto_opt=outputServices=nice-grpc`,
79
- `--ts_proto_opt=outputTypeRegistry=true`,
80
- `--ts_proto_opt=outputEncodeMethods=true`,
81
- `--ts_proto_opt=outputJsonMethods=true`,
82
- `--ts_proto_opt=lowerCaseServiceMethods=true`,
83
- `--proto_path=${path.join(__dirname, '../scripts/temp-xray-core')}`,
84
- protoFile,
85
- ].join(' ');
86
- console.log(`Generating TypeScript for: ${protoFile}`);
87
- const { stdout, stderr } = await execAsync(command);
88
- if (stderr) {
89
- console.error(`Error for ${protoFile}:`, stderr);
90
- }
91
- if (stdout) {
92
- console.log(`Output for ${protoFile}:`, stdout);
93
- }
94
- }
95
- catch (error) {
96
- console.error(`Failed to generate TypeScript for ${protoFile}:`, error);
97
- }
98
- }
99
- async function main() {
100
- try {
101
- if (!fs.existsSync(TEMP_DIR)) {
102
- fs.mkdirSync(TEMP_DIR);
103
- }
104
- if (!fs.existsSync(PROTO_DIR)) {
105
- fs.mkdirSync(PROTO_DIR, { recursive: true });
106
- }
107
- const tarPath = path.join(TEMP_DIR, `xray-core-${VERSION}.tar.gz`);
108
- await downloadTarGz(TARGET_URL, tarPath);
109
- const protoFiles = await extractProtoFiles(tarPath);
110
- for (const protoFile of protoFiles) {
111
- await generateTsFromProto(protoFile);
112
- }
113
- }
114
- catch (error) {
115
- console.error('Произошла ошибка:', error);
116
- }
117
- finally {
118
- fs.rmSync(TEMP_DIR, { recursive: true, force: true });
119
- console.log('Temp directory removed');
120
- }
121
- }
122
- main();
@@ -1,93 +0,0 @@
1
- import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
2
- import { Endpoint } from "../../common/net/destination";
3
- import { GeoIP } from "../router/config";
4
- export declare const protobufPackage = "xray.app.dns";
5
- export declare enum DomainMatchingType {
6
- Full = 0,
7
- Subdomain = 1,
8
- Keyword = 2,
9
- Regex = 3,
10
- UNRECOGNIZED = -1
11
- }
12
- export declare function domainMatchingTypeFromJSON(object: any): DomainMatchingType;
13
- export declare function domainMatchingTypeToJSON(object: DomainMatchingType): string;
14
- export declare enum QueryStrategy {
15
- USE_IP = 0,
16
- USE_IP4 = 1,
17
- USE_IP6 = 2,
18
- UNRECOGNIZED = -1
19
- }
20
- export declare function queryStrategyFromJSON(object: any): QueryStrategy;
21
- export declare function queryStrategyToJSON(object: QueryStrategy): string;
22
- export interface NameServer {
23
- $type: "xray.app.dns.NameServer";
24
- address: Endpoint | undefined;
25
- clientIp: Uint8Array;
26
- skipFallback: boolean;
27
- prioritizedDomain: NameServer_PriorityDomain[];
28
- geoip: GeoIP[];
29
- originalRules: NameServer_OriginalRule[];
30
- queryStrategy: QueryStrategy;
31
- }
32
- export interface NameServer_PriorityDomain {
33
- $type: "xray.app.dns.NameServer.PriorityDomain";
34
- type: DomainMatchingType;
35
- domain: string;
36
- }
37
- export interface NameServer_OriginalRule {
38
- $type: "xray.app.dns.NameServer.OriginalRule";
39
- rule: string;
40
- size: number;
41
- }
42
- export interface Config {
43
- $type: "xray.app.dns.Config";
44
- /**
45
- * NameServer list used by this DNS client.
46
- * A special value 'localhost' as a domain address can be set to use DNS on local system.
47
- */
48
- nameServer: NameServer[];
49
- /**
50
- * Client IP for EDNS client subnet. Must be 4 bytes (IPv4) or 16 bytes
51
- * (IPv6).
52
- */
53
- clientIp: Uint8Array;
54
- staticHosts: Config_HostMapping[];
55
- /** Tag is the inbound tag of DNS client. */
56
- tag: string;
57
- /** DisableCache disables DNS cache */
58
- disableCache: boolean;
59
- queryStrategy: QueryStrategy;
60
- disableFallback: boolean;
61
- disableFallbackIfMatch: boolean;
62
- }
63
- export interface Config_HostMapping {
64
- $type: "xray.app.dns.Config.HostMapping";
65
- type: DomainMatchingType;
66
- domain: string;
67
- ip: Uint8Array[];
68
- /**
69
- * ProxiedDomain indicates the mapped domain has the same IP address on this
70
- * domain. Xray will use this domain for IP queries.
71
- */
72
- proxiedDomain: string;
73
- }
74
- export declare const NameServer: MessageFns<NameServer, "xray.app.dns.NameServer">;
75
- export declare const NameServer_PriorityDomain: MessageFns<NameServer_PriorityDomain, "xray.app.dns.NameServer.PriorityDomain">;
76
- export declare const NameServer_OriginalRule: MessageFns<NameServer_OriginalRule, "xray.app.dns.NameServer.OriginalRule">;
77
- export declare const Config: MessageFns<Config, "xray.app.dns.Config">;
78
- export declare const Config_HostMapping: MessageFns<Config_HostMapping, "xray.app.dns.Config.HostMapping">;
79
- type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;
80
- export type DeepPartial<T> = T extends Builtin ? T : T extends globalThis.Array<infer U> ? globalThis.Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : T extends {} ? {
81
- [K in Exclude<keyof T, "$type">]?: DeepPartial<T[K]>;
82
- } : Partial<T>;
83
- export interface MessageFns<T, V extends string> {
84
- readonly $type: V;
85
- encode(message: T, writer?: BinaryWriter): BinaryWriter;
86
- decode(input: BinaryReader | Uint8Array, length?: number): T;
87
- fromJSON(object: any): T;
88
- toJSON(message: T): unknown;
89
- create(base?: DeepPartial<T>): T;
90
- fromPartial(object: DeepPartial<T>): T;
91
- }
92
- export {};
93
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../../src/xray-protos/app/dns/config.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAExD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,eAAO,MAAM,eAAe,iBAAiB,CAAC;AAE9C,oBAAY,kBAAkB;IAC5B,IAAI,IAAI;IACR,SAAS,IAAI;IACb,OAAO,IAAI;IACX,KAAK,IAAI;IACT,YAAY,KAAK;CAClB;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,GAAG,GAAG,kBAAkB,CAmB1E;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAc3E;AAED,oBAAY,aAAa;IACvB,MAAM,IAAI;IACV,OAAO,IAAI;IACX,OAAO,IAAI;IACX,YAAY,KAAK;CAClB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,GAAG,GAAG,aAAa,CAgBhE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAYjE;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,yBAAyB,CAAC;IACjC,OAAO,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC9B,QAAQ,EAAE,UAAU,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,EAAE,yBAAyB,EAAE,CAAC;IAC/C,KAAK,EAAE,KAAK,EAAE,CAAC;IACf,aAAa,EAAE,uBAAuB,EAAE,CAAC;IACzC,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,wCAAwC,CAAC;IAChD,IAAI,EAAE,kBAAkB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,sCAAsC,CAAC;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,qBAAqB,CAAC;IAC7B;;;OAGG;IACH,UAAU,EAAE,UAAU,EAAE,CAAC;IACzB;;;OAGG;IACH,QAAQ,EAAE,UAAU,CAAC;IACrB,WAAW,EAAE,kBAAkB,EAAE,CAAC;IAClC,4CAA4C;IAC5C,GAAG,EAAE,MAAM,CAAC;IACZ,sCAAsC;IACtC,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,aAAa,CAAC;IAC7B,eAAe,EAAE,OAAO,CAAC;IACzB,sBAAsB,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,iCAAiC,CAAC;IACzC,IAAI,EAAE,kBAAkB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,UAAU,EAAE,CAAC;IACjB;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAC;CACvB;AAeD,eAAO,MAAM,UAAU,EAAE,UAAU,CAAC,UAAU,EAAE,yBAAyB,CA+JxE,CAAC;AAQF,eAAO,MAAM,yBAAyB,EAAE,UAAU,CAChD,yBAAyB,EACzB,wCAAwC,CA0EzC,CAAC;AAQF,eAAO,MAAM,uBAAuB,EAAE,UAAU,CAAC,uBAAuB,EAAE,sCAAsC,CAyE/G,CAAC;AAkBF,eAAO,MAAM,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,qBAAqB,CA+K5D,CAAC;AAQF,eAAO,MAAM,kBAAkB,EAAE,UAAU,CAAC,kBAAkB,EAAE,iCAAiC,CAyGhG,CAAC;AA6BF,KAAK,OAAO,GAAG,IAAI,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAEpF,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,OAAO,GAAG,CAAC,GAC9C,CAAC,SAAS,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GACtE,CAAC,SAAS,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAChE,CAAC,SAAS,EAAE,GAAG;KAAG,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GACvE,OAAO,CAAC,CAAC,CAAC,CAAC;AAMf,MAAM,WAAW,UAAU,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM;IAC7C,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,YAAY,CAAC;IACxD,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;IAC7D,QAAQ,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;IACzB,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;IAC5B,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACjC,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;CACxC"}