react-native-telpo 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 +300 -0
- package/lib/commonjs/index.js +40 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/nfc/index.js +322 -0
- package/lib/commonjs/nfc/index.js.map +1 -0
- package/lib/commonjs/printer/index.js +379 -0
- package/lib/commonjs/printer/index.js.map +1 -0
- package/lib/commonjs/scanner/index.js +301 -0
- package/lib/commonjs/scanner/index.js.map +1 -0
- package/lib/commonjs/types/index.js +37 -0
- package/lib/commonjs/types/index.js.map +1 -0
- package/lib/module/index.js +27 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/nfc/index.js +317 -0
- package/lib/module/nfc/index.js.map +1 -0
- package/lib/module/printer/index.js +374 -0
- package/lib/module/printer/index.js.map +1 -0
- package/lib/module/scanner/index.js +294 -0
- package/lib/module/scanner/index.js.map +1 -0
- package/lib/module/types/index.js +38 -0
- package/lib/module/types/index.js.map +1 -0
- package/lib/typescript/index.d.ts +21 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/nfc/index.d.ts +83 -0
- package/lib/typescript/nfc/index.d.ts.map +1 -0
- package/lib/typescript/printer/index.d.ts +91 -0
- package/lib/typescript/printer/index.d.ts.map +1 -0
- package/lib/typescript/scanner/index.d.ts +81 -0
- package/lib/typescript/scanner/index.d.ts.map +1 -0
- package/lib/typescript/types/index.d.ts +114 -0
- package/lib/typescript/types/index.d.ts.map +1 -0
- package/package.json +104 -0
- package/src/index.ts +55 -0
- package/src/nfc/index.ts +362 -0
- package/src/printer/index.ts +432 -0
- package/src/scanner/index.tsx +397 -0
- package/src/types/index.ts +161 -0
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TelpoNfc
|
|
3
|
+
*
|
|
4
|
+
* Wraps react-native-nfc-manager to provide a clean, typed API
|
|
5
|
+
* for reading NFC/contactless card UIDs on Telpo T20 and TPS320.
|
|
6
|
+
*
|
|
7
|
+
* Supports: ISO 14443-A/B (NfcA, NfcB), IsoDep, Mifare Classic,
|
|
8
|
+
* Mifare Ultralight, and NDEF tags.
|
|
9
|
+
*
|
|
10
|
+
* Returns the raw card UID as a hex string — you handle validation.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { TelpoErrorCode } from '../types';
|
|
14
|
+
|
|
15
|
+
// Lazy-loaded to prevent crash if peer dep is missing
|
|
16
|
+
let NfcManager;
|
|
17
|
+
let NfcTechEnum;
|
|
18
|
+
let NfcEvents;
|
|
19
|
+
function loadNfcLib() {
|
|
20
|
+
try {
|
|
21
|
+
const lib = require('react-native-nfc-manager');
|
|
22
|
+
NfcManager = lib.default;
|
|
23
|
+
NfcTechEnum = lib.NfcTech;
|
|
24
|
+
NfcEvents = lib.NfcEvents;
|
|
25
|
+
} catch {
|
|
26
|
+
throw buildError(TelpoErrorCode.NFC_NOT_SUPPORTED, 'Peer dependency react-native-nfc-manager is not installed. Run: npm install react-native-nfc-manager');
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// ── Helpers ───────────────────────────────────────────────────────────────────
|
|
31
|
+
|
|
32
|
+
function buildError(code, message, raw) {
|
|
33
|
+
return {
|
|
34
|
+
code,
|
|
35
|
+
message,
|
|
36
|
+
raw
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function wrapSuccess(data) {
|
|
40
|
+
return {
|
|
41
|
+
success: true,
|
|
42
|
+
data
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function wrapError(error) {
|
|
46
|
+
return {
|
|
47
|
+
success: false,
|
|
48
|
+
error
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Convert a byte array to a colon-separated hex string.
|
|
54
|
+
* e.g. [0x04, 0xAB, 0x12] → "04:AB:12"
|
|
55
|
+
*/
|
|
56
|
+
function bytesToHex(bytes) {
|
|
57
|
+
return bytes.map(b => b.toString(16).padStart(2, '0').toUpperCase()).join(':');
|
|
58
|
+
}
|
|
59
|
+
function mapTech(tech) {
|
|
60
|
+
// Map our type to the NfcTech enum values from the library
|
|
61
|
+
const map = {
|
|
62
|
+
NfcA: 'NfcA',
|
|
63
|
+
NfcB: 'NfcB',
|
|
64
|
+
IsoDep: 'IsoDep',
|
|
65
|
+
MifareClassic: 'MifareClassic',
|
|
66
|
+
MifareUltralight: 'MifareUltralight',
|
|
67
|
+
Ndef: 'Ndef'
|
|
68
|
+
};
|
|
69
|
+
return map[tech];
|
|
70
|
+
}
|
|
71
|
+
function detectTechnology(tag) {
|
|
72
|
+
if (tag.techTypes?.includes('android.nfc.tech.MifareClassic')) return 'MifareClassic';
|
|
73
|
+
if (tag.techTypes?.includes('android.nfc.tech.MifareUltralight')) return 'MifareUltralight';
|
|
74
|
+
if (tag.techTypes?.includes('android.nfc.tech.IsoDep')) return 'IsoDep';
|
|
75
|
+
if (tag.techTypes?.includes('android.nfc.tech.NfcB')) return 'NfcB';
|
|
76
|
+
if (tag.techTypes?.includes('android.nfc.tech.Ndef')) return 'Ndef';
|
|
77
|
+
return 'NfcA';
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// ── State ─────────────────────────────────────────────────────────────────────
|
|
81
|
+
|
|
82
|
+
let _started = false;
|
|
83
|
+
let _listening = false;
|
|
84
|
+
|
|
85
|
+
// ── Module ────────────────────────────────────────────────────────────────────
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* TelpoNfc
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* // One-time setup (call in your app root or screen init)
|
|
92
|
+
* await TelpoNfc.init();
|
|
93
|
+
*
|
|
94
|
+
* // Start listening for a card tap — resolves immediately on tap
|
|
95
|
+
* const result = await TelpoNfc.readTag();
|
|
96
|
+
* if (result.success) {
|
|
97
|
+
* console.log(result.data.uid); // "04:AB:12:CD:EF:01:23"
|
|
98
|
+
* }
|
|
99
|
+
*
|
|
100
|
+
* // For continuous listening (e.g. validator gate)
|
|
101
|
+
* TelpoNfc.startListening((result) => {
|
|
102
|
+
* if (result.success) {
|
|
103
|
+
* handleCard(result.data.uid);
|
|
104
|
+
* }
|
|
105
|
+
* });
|
|
106
|
+
* // Later:
|
|
107
|
+
* TelpoNfc.stopListening();
|
|
108
|
+
*/
|
|
109
|
+
export const TelpoNfc = {
|
|
110
|
+
get _started() {
|
|
111
|
+
return _started;
|
|
112
|
+
},
|
|
113
|
+
set _started(value) {
|
|
114
|
+
_started = value;
|
|
115
|
+
},
|
|
116
|
+
get _listening() {
|
|
117
|
+
return _listening;
|
|
118
|
+
},
|
|
119
|
+
set _listening(value) {
|
|
120
|
+
_listening = value;
|
|
121
|
+
},
|
|
122
|
+
/**
|
|
123
|
+
* Initialise NFC and verify it is supported and enabled on the device.
|
|
124
|
+
* Call once on app start or screen mount.
|
|
125
|
+
*/
|
|
126
|
+
async init() {
|
|
127
|
+
try {
|
|
128
|
+
loadNfcLib();
|
|
129
|
+
} catch (e) {
|
|
130
|
+
return wrapError(e);
|
|
131
|
+
}
|
|
132
|
+
try {
|
|
133
|
+
const supported = await NfcManager.isSupported();
|
|
134
|
+
if (!supported) {
|
|
135
|
+
return wrapError(buildError(TelpoErrorCode.NFC_NOT_SUPPORTED, 'NFC is not supported on this device.'));
|
|
136
|
+
}
|
|
137
|
+
if (!_started) {
|
|
138
|
+
await NfcManager.start();
|
|
139
|
+
_started = true;
|
|
140
|
+
}
|
|
141
|
+
const enabled = await NfcManager.isEnabled();
|
|
142
|
+
if (!enabled) {
|
|
143
|
+
return wrapError(buildError(TelpoErrorCode.NFC_DISABLED, 'NFC is disabled. Please enable NFC in device settings.'));
|
|
144
|
+
}
|
|
145
|
+
return wrapSuccess(undefined);
|
|
146
|
+
} catch (e) {
|
|
147
|
+
return wrapError(buildError(TelpoErrorCode.NFC_NOT_SUPPORTED, 'Failed to initialise NFC', e));
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
/**
|
|
151
|
+
* Wait for a single NFC tag tap and resolve with its UID.
|
|
152
|
+
* Rejects if cancelled or an error occurs.
|
|
153
|
+
*
|
|
154
|
+
* This is the recommended approach for a "tap once" validation flow.
|
|
155
|
+
*
|
|
156
|
+
* @param options.technologies NFC technologies to accept (default: all)
|
|
157
|
+
* @param timeoutMs Auto-cancel after N ms (default: no timeout)
|
|
158
|
+
*/
|
|
159
|
+
async readTag(options = {}, timeoutMs) {
|
|
160
|
+
if (!_started) {
|
|
161
|
+
const initResult = await TelpoNfc.init();
|
|
162
|
+
if (!initResult.success) return initResult;
|
|
163
|
+
}
|
|
164
|
+
if (_listening) {
|
|
165
|
+
return wrapError(buildError(TelpoErrorCode.NFC_ALREADY_LISTENING, 'NFC is already in continuous-listen mode. Call stopListening() first.'));
|
|
166
|
+
}
|
|
167
|
+
const techs = (options.technologies ?? ['NfcA', 'NfcB', 'IsoDep', 'MifareClassic', 'MifareUltralight', 'Ndef']).map(mapTech).map(t => NfcTechEnum[t]).filter(Boolean);
|
|
168
|
+
let timeoutHandle = null;
|
|
169
|
+
try {
|
|
170
|
+
const tagPromise = new Promise(async (resolve, reject) => {
|
|
171
|
+
try {
|
|
172
|
+
await NfcManager.requestTechnology(techs);
|
|
173
|
+
const rawTag = await NfcManager.getTag();
|
|
174
|
+
if (!rawTag) {
|
|
175
|
+
reject(buildError(TelpoErrorCode.NFC_READ_FAILED, 'No tag data returned.'));
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
const uid = rawTag.id ? bytesToHex(rawTag.id) : 'UNKNOWN';
|
|
179
|
+
const technology = detectTechnology(rawTag);
|
|
180
|
+
resolve({
|
|
181
|
+
uid,
|
|
182
|
+
technology,
|
|
183
|
+
raw: rawTag
|
|
184
|
+
});
|
|
185
|
+
} catch (e) {
|
|
186
|
+
if (e?.message?.includes('Cancel') || e?.message?.includes('cancel')) {
|
|
187
|
+
reject(buildError(TelpoErrorCode.NFC_SCAN_CANCELLED, 'NFC scan was cancelled.'));
|
|
188
|
+
} else {
|
|
189
|
+
reject(buildError(TelpoErrorCode.NFC_READ_FAILED, 'Failed to read NFC tag', e));
|
|
190
|
+
}
|
|
191
|
+
} finally {
|
|
192
|
+
await NfcManager.cancelTechnologyRequest().catch(() => null);
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
let tag;
|
|
196
|
+
if (timeoutMs) {
|
|
197
|
+
tag = await Promise.race([tagPromise, new Promise((_, reject) => {
|
|
198
|
+
timeoutHandle = setTimeout(() => {
|
|
199
|
+
NfcManager.cancelTechnologyRequest().catch(() => null);
|
|
200
|
+
reject(buildError(TelpoErrorCode.NFC_SCAN_CANCELLED, `NFC scan timed out after ${timeoutMs}ms.`));
|
|
201
|
+
}, timeoutMs);
|
|
202
|
+
})]);
|
|
203
|
+
} else {
|
|
204
|
+
tag = await tagPromise;
|
|
205
|
+
}
|
|
206
|
+
return wrapSuccess(tag);
|
|
207
|
+
} catch (e) {
|
|
208
|
+
const err = e;
|
|
209
|
+
if (err.code) return wrapError(err);
|
|
210
|
+
return wrapError(buildError(TelpoErrorCode.NFC_READ_FAILED, 'Unexpected NFC error', e));
|
|
211
|
+
} finally {
|
|
212
|
+
if (timeoutHandle !== null) clearTimeout(timeoutHandle);
|
|
213
|
+
}
|
|
214
|
+
},
|
|
215
|
+
/**
|
|
216
|
+
* Start continuous NFC listening — ideal for a validation gate that
|
|
217
|
+
* must handle many card taps without user interaction.
|
|
218
|
+
*
|
|
219
|
+
* The callback fires every time a card is tapped.
|
|
220
|
+
* Call `stopListening()` to end the session.
|
|
221
|
+
*
|
|
222
|
+
* @example
|
|
223
|
+
* TelpoNfc.startListening((result) => {
|
|
224
|
+
* if (result.success) {
|
|
225
|
+
* console.log('Card UID:', result.data.uid);
|
|
226
|
+
* }
|
|
227
|
+
* }, { technologies: ['NfcA', 'IsoDep'] });
|
|
228
|
+
*/
|
|
229
|
+
startListening(onTag, options = {}) {
|
|
230
|
+
if (!_started) {
|
|
231
|
+
// Auto-init in background; errors surface via callback
|
|
232
|
+
TelpoNfc.init().then(initResult => {
|
|
233
|
+
if (!initResult.success) {
|
|
234
|
+
onTag(initResult);
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
_startEventLoop(onTag, options);
|
|
238
|
+
});
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
_startEventLoop(onTag, options);
|
|
242
|
+
},
|
|
243
|
+
/**
|
|
244
|
+
* Stop continuous NFC listening started by `startListening()`.
|
|
245
|
+
*/
|
|
246
|
+
async stopListening() {
|
|
247
|
+
_listening = false;
|
|
248
|
+
if (!NfcManager) return;
|
|
249
|
+
NfcManager.setEventListener(NfcEvents.DiscoverTag, null);
|
|
250
|
+
NfcManager.setEventListener(NfcEvents.SessionClosed, null);
|
|
251
|
+
try {
|
|
252
|
+
await NfcManager.unregisterTagEvent();
|
|
253
|
+
} catch {
|
|
254
|
+
// Ignore — may already be unregistered
|
|
255
|
+
}
|
|
256
|
+
},
|
|
257
|
+
/**
|
|
258
|
+
* Whether NFC is supported and enabled on this device.
|
|
259
|
+
* Returns false if not initialised yet.
|
|
260
|
+
*/
|
|
261
|
+
async isAvailable() {
|
|
262
|
+
try {
|
|
263
|
+
loadNfcLib();
|
|
264
|
+
const supported = await NfcManager.isSupported();
|
|
265
|
+
if (!supported) return false;
|
|
266
|
+
return await NfcManager.isEnabled();
|
|
267
|
+
} catch {
|
|
268
|
+
return false;
|
|
269
|
+
}
|
|
270
|
+
},
|
|
271
|
+
/** Whether the continuous listener is currently active. */
|
|
272
|
+
isListening() {
|
|
273
|
+
return _listening;
|
|
274
|
+
},
|
|
275
|
+
/** Whether NfcManager has been started. */
|
|
276
|
+
isStarted() {
|
|
277
|
+
return _started;
|
|
278
|
+
}
|
|
279
|
+
};
|
|
280
|
+
|
|
281
|
+
// ── Internal event loop for startListening ───────────────────────────────────
|
|
282
|
+
|
|
283
|
+
function _startEventLoop(onTag, _options) {
|
|
284
|
+
if (_listening) {
|
|
285
|
+
onTag(wrapError(buildError(TelpoErrorCode.NFC_ALREADY_LISTENING, 'NFC listener is already active.')));
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
_listening = true;
|
|
289
|
+
const _handleTag = rawTag => {
|
|
290
|
+
if (!rawTag) {
|
|
291
|
+
onTag(wrapError(buildError(TelpoErrorCode.NFC_READ_FAILED, 'Empty tag received.')));
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
const uid = rawTag.id ? bytesToHex(rawTag.id) : 'UNKNOWN';
|
|
295
|
+
const technology = detectTechnology(rawTag);
|
|
296
|
+
onTag(wrapSuccess({
|
|
297
|
+
uid,
|
|
298
|
+
technology,
|
|
299
|
+
raw: rawTag
|
|
300
|
+
}));
|
|
301
|
+
};
|
|
302
|
+
const _handleClose = () => {
|
|
303
|
+
if (_listening) {
|
|
304
|
+
// Session closed unexpectedly — restart
|
|
305
|
+
NfcManager.registerTagEvent().catch(() => {
|
|
306
|
+
_listening = false;
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
};
|
|
310
|
+
NfcManager.setEventListener(NfcEvents.DiscoverTag, _handleTag);
|
|
311
|
+
NfcManager.setEventListener(NfcEvents.SessionClosed, _handleClose);
|
|
312
|
+
NfcManager.registerTagEvent().catch(e => {
|
|
313
|
+
_listening = false;
|
|
314
|
+
onTag(wrapError(buildError(TelpoErrorCode.NFC_READ_FAILED, 'Failed to register NFC tag event', e)));
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["TelpoErrorCode","NfcManager","NfcTechEnum","NfcEvents","loadNfcLib","lib","require","default","NfcTech","buildError","NFC_NOT_SUPPORTED","code","message","raw","wrapSuccess","data","success","wrapError","error","bytesToHex","bytes","map","b","toString","padStart","toUpperCase","join","mapTech","tech","NfcA","NfcB","IsoDep","MifareClassic","MifareUltralight","Ndef","detectTechnology","tag","techTypes","includes","_started","_listening","TelpoNfc","value","init","e","supported","isSupported","start","enabled","isEnabled","NFC_DISABLED","undefined","readTag","options","timeoutMs","initResult","NFC_ALREADY_LISTENING","techs","technologies","t","filter","Boolean","timeoutHandle","tagPromise","Promise","resolve","reject","requestTechnology","rawTag","getTag","NFC_READ_FAILED","uid","id","technology","NFC_SCAN_CANCELLED","cancelTechnologyRequest","catch","race","_","setTimeout","err","clearTimeout","startListening","onTag","then","_startEventLoop","stopListening","setEventListener","DiscoverTag","SessionClosed","unregisterTagEvent","isAvailable","isListening","isStarted","_options","_handleTag","_handleClose","registerTagEvent"],"sourceRoot":"..\\..\\..\\src","sources":["nfc/index.ts"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAEEA,cAAc,QAKT,UAAU;;AAEjB;AACA,IAAIC,UAAe;AACnB,IAAIC,WAAgB;AACpB,IAAIC,SAAc;AAElB,SAASC,UAAUA,CAAA,EAAS;EAC1B,IAAI;IACF,MAAMC,GAAG,GAAGC,OAAO,CAAC,0BAA0B,CAAC;IAC/CL,UAAU,GAAGI,GAAG,CAACE,OAAO;IACxBL,WAAW,GAAGG,GAAG,CAACG,OAAO;IACzBL,SAAS,GAAGE,GAAG,CAACF,SAAS;EAC3B,CAAC,CAAC,MAAM;IACN,MAAMM,UAAU,CACdT,cAAc,CAACU,iBAAiB,EAChC,sGACF,CAAC;EACH;AACF;;AAEA;;AAEA,SAASD,UAAUA,CAACE,IAAoB,EAAEC,OAAe,EAAEC,GAAa,EAAc;EACpF,OAAO;IAAEF,IAAI;IAAEC,OAAO;IAAEC;EAAI,CAAC;AAC/B;AAEA,SAASC,WAAWA,CAAIC,IAAO,EAAkB;EAC/C,OAAO;IAAEC,OAAO,EAAE,IAAI;IAAED;EAAK,CAAC;AAChC;AAEA,SAASE,SAASA,CAAIC,KAAiB,EAAkB;EACvD,OAAO;IAAEF,OAAO,EAAE,KAAK;IAAEE;EAAM,CAAC;AAClC;;AAEA;AACA;AACA;AACA;AACA,SAASC,UAAUA,CAACC,KAAe,EAAU;EAC3C,OAAOA,KAAK,CAACC,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAACC,QAAQ,CAAC,EAAE,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAACC,WAAW,CAAC,CAAC,CAAC,CAACC,IAAI,CAAC,GAAG,CAAC;AAClF;AAEA,SAASC,OAAOA,CAACC,IAAmB,EAAU;EAC5C;EACA,MAAMP,GAAkC,GAAG;IACzCQ,IAAI,EAAE,MAAM;IACZC,IAAI,EAAE,MAAM;IACZC,MAAM,EAAE,QAAQ;IAChBC,aAAa,EAAE,eAAe;IAC9BC,gBAAgB,EAAE,kBAAkB;IACpCC,IAAI,EAAE;EACR,CAAC;EACD,OAAOb,GAAG,CAACO,IAAI,CAAC;AAClB;AAEA,SAASO,gBAAgBA,CAACC,GAAwB,EAAiB;EACjE,IAAIA,GAAG,CAACC,SAAS,EAAEC,QAAQ,CAAC,gCAAgC,CAAC,EAAE,OAAO,eAAe;EACrF,IAAIF,GAAG,CAACC,SAAS,EAAEC,QAAQ,CAAC,mCAAmC,CAAC,EAAE,OAAO,kBAAkB;EAC3F,IAAIF,GAAG,CAACC,SAAS,EAAEC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,OAAO,QAAQ;EACvE,IAAIF,GAAG,CAACC,SAAS,EAAEC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,MAAM;EACnE,IAAIF,GAAG,CAACC,SAAS,EAAEC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,MAAM;EACnE,OAAO,MAAM;AACf;;AAEA;;AAEA,IAAIC,QAAQ,GAAG,KAAK;AACpB,IAAIC,UAAU,GAAG,KAAK;;AAEtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,QAAQ,GAAG;EACtB,IAAIF,QAAQA,CAAA,EAAY;IACtB,OAAOA,QAAQ;EACjB,CAAC;EACD,IAAIA,QAAQA,CAACG,KAAc,EAAE;IAC3BH,QAAQ,GAAGG,KAAK;EAClB,CAAC;EAED,IAAIF,UAAUA,CAAA,EAAY;IACxB,OAAOA,UAAU;EACnB,CAAC;EACD,IAAIA,UAAUA,CAACE,KAAc,EAAE;IAC7BF,UAAU,GAAGE,KAAK;EACpB,CAAC;EAED;AACF;AACA;AACA;EACE,MAAMC,IAAIA,CAAA,EAA+B;IACvC,IAAI;MACFvC,UAAU,CAAC,CAAC;IACd,CAAC,CAAC,OAAOwC,CAAM,EAAE;MACf,OAAO3B,SAAS,CAAC2B,CAAe,CAAC;IACnC;IAEA,IAAI;MACF,MAAMC,SAAkB,GAAG,MAAM5C,UAAU,CAAC6C,WAAW,CAAC,CAAC;MACzD,IAAI,CAACD,SAAS,EAAE;QACd,OAAO5B,SAAS,CAACR,UAAU,CAACT,cAAc,CAACU,iBAAiB,EAAE,sCAAsC,CAAC,CAAC;MACxG;MAEA,IAAI,CAAC6B,QAAQ,EAAE;QACb,MAAMtC,UAAU,CAAC8C,KAAK,CAAC,CAAC;QACxBR,QAAQ,GAAG,IAAI;MACjB;MAEA,MAAMS,OAAgB,GAAG,MAAM/C,UAAU,CAACgD,SAAS,CAAC,CAAC;MACrD,IAAI,CAACD,OAAO,EAAE;QACZ,OAAO/B,SAAS,CAACR,UAAU,CAACT,cAAc,CAACkD,YAAY,EAAE,wDAAwD,CAAC,CAAC;MACrH;MAEA,OAAOpC,WAAW,CAACqC,SAAS,CAAC;IAC/B,CAAC,CAAC,OAAOP,CAAC,EAAE;MACV,OAAO3B,SAAS,CAACR,UAAU,CAACT,cAAc,CAACU,iBAAiB,EAAE,0BAA0B,EAAEkC,CAAC,CAAC,CAAC;IAC/F;EACF,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAMQ,OAAOA,CAACC,OAAmB,GAAG,CAAC,CAAC,EAAEC,SAAkB,EAAgC;IACxF,IAAI,CAACf,QAAQ,EAAE;MACb,MAAMgB,UAAU,GAAG,MAAMd,QAAQ,CAACE,IAAI,CAAC,CAAC;MACxC,IAAI,CAACY,UAAU,CAACvC,OAAO,EAAE,OAAOuC,UAAU;IAC5C;IAEA,IAAIf,UAAU,EAAE;MACd,OAAOvB,SAAS,CACdR,UAAU,CAACT,cAAc,CAACwD,qBAAqB,EAAE,uEAAuE,CAC1H,CAAC;IACH;IAEA,MAAMC,KAAK,GAAG,CAACJ,OAAO,CAACK,YAAY,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAC3GrC,GAAG,CAACM,OAAO,CAAC,CACZN,GAAG,CAAEsC,CAAC,IAAKzD,WAAW,CAACyD,CAAC,CAAC,CAAC,CAC1BC,MAAM,CAACC,OAAO,CAAC;IAElB,IAAIC,aAAmD,GAAG,IAAI;IAE9D,IAAI;MACF,MAAMC,UAA2B,GAAG,IAAIC,OAAO,CAAC,OAAOC,OAAO,EAAEC,MAAM,KAAK;QACzE,IAAI;UACF,MAAMjE,UAAU,CAACkE,iBAAiB,CAACV,KAAK,CAAC;UACzC,MAAMW,MAAM,GAAG,MAAMnE,UAAU,CAACoE,MAAM,CAAC,CAAC;UAExC,IAAI,CAACD,MAAM,EAAE;YACXF,MAAM,CAACzD,UAAU,CAACT,cAAc,CAACsE,eAAe,EAAE,uBAAuB,CAAC,CAAC;YAC3E;UACF;UAEA,MAAMC,GAAG,GAAGH,MAAM,CAACI,EAAE,GAAGrD,UAAU,CAACiD,MAAM,CAACI,EAAE,CAAC,GAAG,SAAS;UACzD,MAAMC,UAAU,GAAGtC,gBAAgB,CAACiC,MAAM,CAAC;UAE3CH,OAAO,CAAC;YAAEM,GAAG;YAAEE,UAAU;YAAE5D,GAAG,EAAEuD;UAAO,CAAC,CAAC;QAC3C,CAAC,CAAC,OAAOxB,CAAM,EAAE;UACf,IAAIA,CAAC,EAAEhC,OAAO,EAAE0B,QAAQ,CAAC,QAAQ,CAAC,IAAIM,CAAC,EAAEhC,OAAO,EAAE0B,QAAQ,CAAC,QAAQ,CAAC,EAAE;YACpE4B,MAAM,CAACzD,UAAU,CAACT,cAAc,CAAC0E,kBAAkB,EAAE,yBAAyB,CAAC,CAAC;UAClF,CAAC,MAAM;YACLR,MAAM,CAACzD,UAAU,CAACT,cAAc,CAACsE,eAAe,EAAE,wBAAwB,EAAE1B,CAAC,CAAC,CAAC;UACjF;QACF,CAAC,SAAS;UACR,MAAM3C,UAAU,CAAC0E,uBAAuB,CAAC,CAAC,CAACC,KAAK,CAAC,MAAM,IAAI,CAAC;QAC9D;MACF,CAAC,CAAC;MAEF,IAAIxC,GAAW;MAEf,IAAIkB,SAAS,EAAE;QACblB,GAAG,GAAG,MAAM4B,OAAO,CAACa,IAAI,CAAC,CACvBd,UAAU,EACV,IAAIC,OAAO,CAAQ,CAACc,CAAC,EAAEZ,MAAM,KAAK;UAChCJ,aAAa,GAAGiB,UAAU,CAAC,MAAM;YAC/B9E,UAAU,CAAC0E,uBAAuB,CAAC,CAAC,CAACC,KAAK,CAAC,MAAM,IAAI,CAAC;YACtDV,MAAM,CAACzD,UAAU,CAACT,cAAc,CAAC0E,kBAAkB,EAAE,4BAA4BpB,SAAS,KAAK,CAAC,CAAC;UACnG,CAAC,EAAEA,SAAS,CAAC;QACf,CAAC,CAAC,CACH,CAAC;MACJ,CAAC,MAAM;QACLlB,GAAG,GAAG,MAAM2B,UAAU;MACxB;MAEA,OAAOjD,WAAW,CAACsB,GAAG,CAAC;IACzB,CAAC,CAAC,OAAOQ,CAAC,EAAE;MACV,MAAMoC,GAAG,GAAGpC,CAAe;MAC3B,IAAIoC,GAAG,CAACrE,IAAI,EAAE,OAAOM,SAAS,CAAC+D,GAAG,CAAC;MACnC,OAAO/D,SAAS,CAACR,UAAU,CAACT,cAAc,CAACsE,eAAe,EAAE,sBAAsB,EAAE1B,CAAC,CAAC,CAAC;IACzF,CAAC,SAAS;MACR,IAAIkB,aAAa,KAAK,IAAI,EAAEmB,YAAY,CAACnB,aAAa,CAAC;IACzD;EACF,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEoB,cAAcA,CACZC,KAA4C,EAC5C9B,OAAmB,GAAG,CAAC,CAAC,EAClB;IACN,IAAI,CAACd,QAAQ,EAAE;MACb;MACAE,QAAQ,CAACE,IAAI,CAAC,CAAC,CAACyC,IAAI,CAAE7B,UAAU,IAAK;QACnC,IAAI,CAACA,UAAU,CAACvC,OAAO,EAAE;UACvBmE,KAAK,CAAC5B,UAAiC,CAAC;UACxC;QACF;QACA8B,eAAe,CAACF,KAAK,EAAE9B,OAAO,CAAC;MACjC,CAAC,CAAC;MACF;IACF;IAEAgC,eAAe,CAACF,KAAK,EAAE9B,OAAO,CAAC;EACjC,CAAC;EAED;AACF;AACA;EACE,MAAMiC,aAAaA,CAAA,EAAkB;IACnC9C,UAAU,GAAG,KAAK;IAElB,IAAI,CAACvC,UAAU,EAAE;IAEjBA,UAAU,CAACsF,gBAAgB,CAACpF,SAAS,CAACqF,WAAW,EAAE,IAAI,CAAC;IACxDvF,UAAU,CAACsF,gBAAgB,CAACpF,SAAS,CAACsF,aAAa,EAAE,IAAI,CAAC;IAE1D,IAAI;MACF,MAAMxF,UAAU,CAACyF,kBAAkB,CAAC,CAAC;IACvC,CAAC,CAAC,MAAM;MACN;IAAA;EAEJ,CAAC;EAED;AACF;AACA;AACA;EACE,MAAMC,WAAWA,CAAA,EAAqB;IACpC,IAAI;MACFvF,UAAU,CAAC,CAAC;MACZ,MAAMyC,SAAS,GAAG,MAAM5C,UAAU,CAAC6C,WAAW,CAAC,CAAC;MAChD,IAAI,CAACD,SAAS,EAAE,OAAO,KAAK;MAC5B,OAAO,MAAM5C,UAAU,CAACgD,SAAS,CAAC,CAAC;IACrC,CAAC,CAAC,MAAM;MACN,OAAO,KAAK;IACd;EACF,CAAC;EAED;EACA2C,WAAWA,CAAA,EAAY;IACrB,OAAOpD,UAAU;EACnB,CAAC;EAED;EACAqD,SAASA,CAAA,EAAY;IACnB,OAAOtD,QAAQ;EACjB;AACF,CAAC;;AAED;;AAEA,SAAS8C,eAAeA,CACtBF,KAA4C,EAC5CW,QAAoB,EACd;EACN,IAAItD,UAAU,EAAE;IACd2C,KAAK,CAAClE,SAAS,CAACR,UAAU,CAACT,cAAc,CAACwD,qBAAqB,EAAE,iCAAiC,CAAC,CAAC,CAAC;IACrG;EACF;EAEAhB,UAAU,GAAG,IAAI;EAEjB,MAAMuD,UAAU,GAAI3B,MAA2B,IAAK;IAClD,IAAI,CAACA,MAAM,EAAE;MACXe,KAAK,CAAClE,SAAS,CAACR,UAAU,CAACT,cAAc,CAACsE,eAAe,EAAE,qBAAqB,CAAC,CAAC,CAAC;MACnF;IACF;IAEA,MAAMC,GAAG,GAAGH,MAAM,CAACI,EAAE,GAAGrD,UAAU,CAACiD,MAAM,CAACI,EAAE,CAAC,GAAG,SAAS;IACzD,MAAMC,UAAU,GAAGtC,gBAAgB,CAACiC,MAAM,CAAC;IAE3Ce,KAAK,CAACrE,WAAW,CAAS;MAAEyD,GAAG;MAAEE,UAAU;MAAE5D,GAAG,EAAEuD;IAAO,CAAC,CAAC,CAAC;EAC9D,CAAC;EAED,MAAM4B,YAAY,GAAGA,CAAA,KAAM;IACzB,IAAIxD,UAAU,EAAE;MACd;MACAvC,UAAU,CAACgG,gBAAgB,CAAC,CAAC,CAACrB,KAAK,CAAC,MAAM;QACxCpC,UAAU,GAAG,KAAK;MACpB,CAAC,CAAC;IACJ;EACF,CAAC;EAEDvC,UAAU,CAACsF,gBAAgB,CAACpF,SAAS,CAACqF,WAAW,EAAEO,UAAU,CAAC;EAC9D9F,UAAU,CAACsF,gBAAgB,CAACpF,SAAS,CAACsF,aAAa,EAAEO,YAAY,CAAC;EAElE/F,UAAU,CAACgG,gBAAgB,CAAC,CAAC,CAACrB,KAAK,CAAEhC,CAAU,IAAK;IAClDJ,UAAU,GAAG,KAAK;IAClB2C,KAAK,CAAClE,SAAS,CAACR,UAAU,CAACT,cAAc,CAACsE,eAAe,EAAE,kCAAkC,EAAE1B,CAAC,CAAC,CAAC,CAAC;EACrG,CAAC,CAAC;AACJ","ignoreList":[]}
|