myanmar-nrc-validator 1.0.12 โ 1.0.13
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 +57 -12
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/utils/parser.d.ts +1 -0
- package/dist/utils/parser.d.ts.map +1 -1
- package/dist/utils/parser.js +9 -0
- package/dist/utils/parser.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,17 +3,19 @@
|
|
|
3
3
|
|
|
4
4
|
# myanmar-nrc-validator ๐ฒ๐ฒ
|
|
5
5
|
|
|
6
|
-
A
|
|
6
|
+
A comprehensive, robust, and zero-dependency (except Zod) TypeScript/JavaScript library for validating, parsing, formatting, and handling Myanmar National Registration Card (NRC) numbers, state regions, and citizen types. Supports both English and Myanmar text formats, along with a powerful CLI tool.
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
## Features โจ
|
|
11
11
|
|
|
12
|
-
* **Validation**: Accurately validates Myanmar NRC numbers
|
|
13
|
-
* **Parsing**: Extracts structured data (State, Township, Citizen Type, and Numbers) from NRC strings.
|
|
14
|
-
* **Formatting**:
|
|
12
|
+
* **Validation**: Accurately validates complete Myanmar NRC numbers, state codes, and township codes.
|
|
13
|
+
* **Parsing**: Extracts structured data (State Number, Township Code, Citizen Type, and ID Numbers) from NRC strings.
|
|
14
|
+
* **Formatting**: Seamlessly converts NRC strings between Myanmar script and English format (`en` / `mm`).
|
|
15
|
+
* **Citizen Types & Regions**: Built-in utilities to retrieve Myanmar states, townships, and citizen types (`getStates`, `getStateTownships`, `getCitizenTypes`, etc.).
|
|
16
|
+
* **Composition**: Easily construct/compose valid NRC strings using `composeNRC`.
|
|
15
17
|
* **Zod Integration**: Provides built-in Zod schemas for form validation (e.g., in Express, NestJS, or React forms).
|
|
16
|
-
* **CLI Support**: Quickly check NRC numbers straight from your terminal
|
|
18
|
+
* **CLI Support**: Quickly check and parse NRC numbers straight from your terminal using `npx myanmar-nrc-validator` or `npx nrc`.
|
|
17
19
|
|
|
18
20
|
---
|
|
19
21
|
|
|
@@ -30,7 +32,7 @@ npm install myanmar-nrc-validator
|
|
|
30
32
|
|
|
31
33
|
## CLI Usage ๐ป
|
|
32
34
|
|
|
33
|
-
You can test or
|
|
35
|
+
You can test, validate, or parse NRC numbers directly from your terminal using `npx`:
|
|
34
36
|
|
|
35
37
|
```bash
|
|
36
38
|
npx myanmar-nrc-validator "12/UKAMA(N)123456"
|
|
@@ -39,7 +41,7 @@ npx myanmar-nrc-validator "12/UKAMA(N)123456"
|
|
|
39
41
|
|
|
40
42
|
|
|
41
43
|
```bash
|
|
42
|
-
npx
|
|
44
|
+
npx nrc "แแ/แฅแแ(แแญแฏแแบ)แแแแแ
แ"
|
|
43
45
|
|
|
44
46
|
```
|
|
45
47
|
|
|
@@ -60,12 +62,12 @@ console.log(validateNRC("99/XYZ(N)123456")); // false (Invalid state/township)
|
|
|
60
62
|
|
|
61
63
|
```
|
|
62
64
|
|
|
63
|
-
### 2. Parse NRC (`parseNRC`)
|
|
65
|
+
### 2. Parse NRC & Get Citizen Type (`parseNRC`, `getCitizenType`)
|
|
64
66
|
|
|
65
|
-
Extracts detailed information from an NRC string.
|
|
67
|
+
Extracts detailed information and citizen types from an NRC string.
|
|
66
68
|
|
|
67
69
|
```typescript
|
|
68
|
-
import { parseNRC } from "myanmar-nrc-validator";
|
|
70
|
+
import { parseNRC, getCitizenType } from "myanmar-nrc-validator";
|
|
69
71
|
|
|
70
72
|
const result = parseNRC("แแ/แฅแแ(แแญแฏแแบ)แแแแแ
แ");
|
|
71
73
|
console.log(result);
|
|
@@ -79,6 +81,9 @@ Output:
|
|
|
79
81
|
}
|
|
80
82
|
*/
|
|
81
83
|
|
|
84
|
+
const citizenType = getCitizenType("12/UKAMA(N)123456");
|
|
85
|
+
console.log(citizenType); // แแญแฏแแบ (or N based on input)
|
|
86
|
+
|
|
82
87
|
```
|
|
83
88
|
|
|
84
89
|
### 3. Format NRC (`formatNRC`)
|
|
@@ -98,7 +103,43 @@ console.log(formatNRC("12/UKAMA(N)123456", "mm"));
|
|
|
98
103
|
|
|
99
104
|
```
|
|
100
105
|
|
|
101
|
-
### 4.
|
|
106
|
+
### 4. Regions and Citizen Types Helpers (`getStates`, `getStateTownships`, `getCitizenTypes`)
|
|
107
|
+
|
|
108
|
+
Quickly access states, corresponding townships, and valid citizen categories.
|
|
109
|
+
|
|
110
|
+
```typescript
|
|
111
|
+
import { getStates, getStateTownships, getCitizenTypes } from "myanmar-nrc-validator";
|
|
112
|
+
|
|
113
|
+
// Get all 14 states & regions
|
|
114
|
+
console.log(getStates());
|
|
115
|
+
|
|
116
|
+
// Get townships for a specific state (e.g., Yangon -> "12")
|
|
117
|
+
console.log(getStateTownships("12"));
|
|
118
|
+
|
|
119
|
+
// Get all available citizen types (แแญแฏแแบ, แงแแทแบ, แแผแฏ, etc.)
|
|
120
|
+
console.log(getCitizenTypes());
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### 5. Compose NRC (`composeNRC`)
|
|
125
|
+
|
|
126
|
+
Build an NRC string programmatically from parts.
|
|
127
|
+
|
|
128
|
+
```typescript
|
|
129
|
+
import { composeNRC } from "myanmar-nrc-validator";
|
|
130
|
+
|
|
131
|
+
const nrc = composeNRC({
|
|
132
|
+
stateNumber: "12",
|
|
133
|
+
townshipCode: "แฅแแ",
|
|
134
|
+
citizenType: "แแญแฏแแบ",
|
|
135
|
+
number: "123456",
|
|
136
|
+
format: "mm"
|
|
137
|
+
});
|
|
138
|
+
console.log(nrc); // แแ/แฅแแ(แแญแฏแแบ)แแแแแ
แ
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### 6. Zod Schema Validation (`nrcStringSchema`)
|
|
102
143
|
|
|
103
144
|
Useful for API validation (e.g., with Zod, NestJS, Express, or React Hook Form).
|
|
104
145
|
|
|
@@ -119,4 +160,8 @@ if (validationResult.success) {
|
|
|
119
160
|
|
|
120
161
|
## License ๐
|
|
121
162
|
|
|
122
|
-
[MIT](https://www.google.com/search?q=LICENSE) ยฉ Aung Phyo Khant
|
|
163
|
+
[MIT](https://www.google.com/search?q=LICENSE) ยฉ Aung Phyo Khant
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
แแฎ `README.md` แแญแฏแแบแแฑแธแแญแฏ แแแทแบ project แแฒแ README.md แแฒแแพแฌ แแฐแธแแแทแบแแญแฏแแบแแญแฏแท แแแซแแผแฎ แแแบแแปแฌแ แกแฌแธแแฏแถแธแกแแแบแแผแฑแแฝแฌแธแแซแแผแฎแแฑแฌแบ!
|
package/dist/index.d.ts
CHANGED
|
@@ -6,8 +6,13 @@ export declare const CITIZENSHIP_TYPES: Record<string, {
|
|
|
6
6
|
en: string;
|
|
7
7
|
mm: string;
|
|
8
8
|
}>;
|
|
9
|
+
export declare function getCitizenTypes(): {
|
|
10
|
+
code: string;
|
|
11
|
+
en: string;
|
|
12
|
+
mm: string;
|
|
13
|
+
}[];
|
|
9
14
|
export { validateNRC, isValidTownship } from "./utils/validator.js";
|
|
10
|
-
export { parseNRC } from "./utils/parser.js";
|
|
15
|
+
export { parseNRC, getCitizenType } from "./utils/parser.js";
|
|
11
16
|
export type { ParsedNRC } from "./utils/parser.js";
|
|
12
17
|
export { composeNRC } from "./utils/composer.js";
|
|
13
18
|
export type { ComposeOptions, CitizenType } from "./utils/composer.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa,EAAiB,MAAM,CAC/C,MAAM,EACN;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAC3B,CAAC;AACF,eAAO,MAAM,iBAAiB,EAAkC,MAAM,CACpE,MAAM,EACN;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAC3B,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa,EAAiB,MAAM,CAC/C,MAAM,EACN;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAC3B,CAAC;AACF,eAAO,MAAM,iBAAiB,EAAkC,MAAM,CACpE,MAAM,EACN;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAC3B,CAAC;AAEF,wBAAgB,eAAe;;;;IAM9B;AAED,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC7D,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,8 +2,15 @@ import statesData from "./data/states.json" with { type: "json" };
|
|
|
2
2
|
import citizenTypesData from "./data/citizen-types.json" with { type: "json" };
|
|
3
3
|
export const STATE_REGIONS = statesData;
|
|
4
4
|
export const CITIZENSHIP_TYPES = citizenTypesData;
|
|
5
|
+
export function getCitizenTypes() {
|
|
6
|
+
return Object.entries(CITIZENSHIP_TYPES).map(([code, info]) => ({
|
|
7
|
+
code,
|
|
8
|
+
en: info.en,
|
|
9
|
+
mm: info.mm,
|
|
10
|
+
}));
|
|
11
|
+
}
|
|
5
12
|
export { validateNRC, isValidTownship } from "./utils/validator.js";
|
|
6
|
-
export { parseNRC } from "./utils/parser.js";
|
|
13
|
+
export { parseNRC, getCitizenType } from "./utils/parser.js";
|
|
7
14
|
export { composeNRC } from "./utils/composer.js";
|
|
8
15
|
export { getStates, getStateTownships } from "./utils/regions.js";
|
|
9
16
|
export { formatNRC } from "./utils/formatter.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,oBAAoB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAClE,OAAO,gBAAgB,MAAM,2BAA2B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAE/E,MAAM,CAAC,MAAM,aAAa,GAAG,UAG5B,CAAC;AACF,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAGhC,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,oBAAoB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAClE,OAAO,gBAAgB,MAAM,2BAA2B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAE/E,MAAM,CAAC,MAAM,aAAa,GAAG,UAG5B,CAAC;AACF,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAGhC,CAAC;AAEF,MAAM,UAAU,eAAe;IAC7B,OAAO,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9D,IAAI;QACJ,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,EAAE,EAAE,IAAI,CAAC,EAAE;KACZ,CAAC,CAAC,CAAC;AACN,CAAC;AAED,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE7D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/utils/parser.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/utils/parser.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAuC5D"}
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/utils/parser.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAuC5D;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ/D"}
|
package/dist/utils/parser.js
CHANGED
|
@@ -32,4 +32,13 @@ export function parseNRC(nrcString) {
|
|
|
32
32
|
raw: nrcString.trim(),
|
|
33
33
|
};
|
|
34
34
|
}
|
|
35
|
+
export function getCitizenType(nrcString) {
|
|
36
|
+
if (!nrcString)
|
|
37
|
+
return null;
|
|
38
|
+
const match = nrcString.match(/\(([^)]+)\)/);
|
|
39
|
+
if (match && match[1]) {
|
|
40
|
+
return match[1].trim();
|
|
41
|
+
}
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
35
44
|
//# sourceMappingURL=parser.js.map
|
package/dist/utils/parser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/utils/parser.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,qBAAqB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE/E,MAAM,aAAa,GAAG,UAAwD,CAAC;AAY/E,MAAM,UAAU,QAAQ,CAAC,SAAiB;IACxC,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,eAAe,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAErD,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GACT,iEAAiE,CAAC;IACpE,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEtC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,SAAS,GAAW,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACxC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAExB,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAEjE,OAAO;QACL,SAAS;QACT,WAAW,EAAE,SAAS,CAAC,EAAE;QACzB,WAAW,EAAE,SAAS,CAAC,EAAE;QACzB,QAAQ;QACR,IAAI;QACJ,MAAM;QACN,GAAG,EAAE,SAAS,CAAC,IAAI,EAAE;KACtB,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/utils/parser.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,qBAAqB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE/E,MAAM,aAAa,GAAG,UAAwD,CAAC;AAY/E,MAAM,UAAU,QAAQ,CAAC,SAAiB;IACxC,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,eAAe,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAErD,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GACT,iEAAiE,CAAC;IACpE,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEtC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,SAAS,GAAW,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACxC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAExB,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAEjE,OAAO;QACL,SAAS;QACT,WAAW,EAAE,SAAS,CAAC,EAAE;QACzB,WAAW,EAAE,SAAS,CAAC,EAAE;QACzB,QAAQ;QACR,IAAI;QACJ,MAAM;QACN,GAAG,EAAE,SAAS,CAAC,IAAI,EAAE;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC7C,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|