@sinoia/hubdoc-tools 1.3.4 → 1.3.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 (43) hide show
  1. package/dist/plugins/alfresco/index.d.ts +26 -0
  2. package/dist/plugins/alfresco/index.d.ts.map +1 -0
  3. package/dist/plugins/alfresco/index.js +405 -0
  4. package/dist/plugins/alfresco/index.js.map +1 -0
  5. package/dist/plugins/aws-s3/index.d.ts +23 -0
  6. package/dist/plugins/aws-s3/index.d.ts.map +1 -0
  7. package/dist/plugins/aws-s3/index.js +383 -0
  8. package/dist/plugins/aws-s3/index.js.map +1 -0
  9. package/dist/plugins/azure-blob/index.d.ts +23 -0
  10. package/dist/plugins/azure-blob/index.d.ts.map +1 -0
  11. package/dist/plugins/azure-blob/index.js +340 -0
  12. package/dist/plugins/azure-blob/index.js.map +1 -0
  13. package/dist/plugins/box/index.d.ts +26 -0
  14. package/dist/plugins/box/index.d.ts.map +1 -0
  15. package/dist/plugins/box/index.js +387 -0
  16. package/dist/plugins/box/index.js.map +1 -0
  17. package/dist/plugins/dropbox/index.d.ts +27 -0
  18. package/dist/plugins/dropbox/index.d.ts.map +1 -0
  19. package/dist/plugins/dropbox/index.js +375 -0
  20. package/dist/plugins/dropbox/index.js.map +1 -0
  21. package/dist/plugins/googledrive/index.d.ts +27 -0
  22. package/dist/plugins/googledrive/index.d.ts.map +1 -0
  23. package/dist/plugins/googledrive/index.js +383 -0
  24. package/dist/plugins/googledrive/index.js.map +1 -0
  25. package/dist/plugins/nuxeo/index.d.ts +24 -0
  26. package/dist/plugins/nuxeo/index.d.ts.map +1 -0
  27. package/dist/plugins/nuxeo/index.js +405 -0
  28. package/dist/plugins/nuxeo/index.js.map +1 -0
  29. package/dist/plugins/onedrive/index.d.ts +25 -0
  30. package/dist/plugins/onedrive/index.d.ts.map +1 -0
  31. package/dist/plugins/onedrive/index.js +362 -0
  32. package/dist/plugins/onedrive/index.js.map +1 -0
  33. package/dist/plugins/opentext/index.d.ts +26 -0
  34. package/dist/plugins/opentext/index.d.ts.map +1 -0
  35. package/dist/plugins/opentext/index.js +440 -0
  36. package/dist/plugins/opentext/index.js.map +1 -0
  37. package/dist/plugins/sharepoint/index.d.ts +27 -0
  38. package/dist/plugins/sharepoint/index.d.ts.map +1 -0
  39. package/dist/plugins/sharepoint/index.js +397 -0
  40. package/dist/plugins/sharepoint/index.js.map +1 -0
  41. package/package.json +7 -2
  42. package/plugins/aws-s3/index.ts +2 -2
  43. package/plugins/sharepoint/index.ts +1 -1
@@ -0,0 +1,26 @@
1
+ import { DocumentSourcePlugin, DocumentSource, PluginConfig, ScanResult, PluginImportOptions, PluginExportOptions, ImportResult, ExportResult } from '../../src/types/plugins';
2
+ export default class AlfrescoPlugin implements DocumentSourcePlugin {
3
+ readonly name = "alfresco";
4
+ readonly version = "1.0.0";
5
+ readonly description = "Alfresco ECM document source";
6
+ readonly supportedOperations: readonly ["import", "export", "both"];
7
+ private config?;
8
+ private apiClient?;
9
+ private readonly apiVersion;
10
+ testConnection(config: PluginConfig): Promise<boolean>;
11
+ scan(config: PluginConfig, options?: PluginImportOptions): Promise<ScanResult>;
12
+ private scanNode;
13
+ import(config: PluginConfig, sources: DocumentSource[], targetDir: string, options?: PluginImportOptions): Promise<ImportResult[]>;
14
+ private importSingle;
15
+ export?(config: PluginConfig, localSources: DocumentSource[], options?: PluginExportOptions): Promise<ExportResult[]>;
16
+ private getSiteDocumentLibraryId;
17
+ private createFolderStructure;
18
+ getConfigSchema(): Record<string, any>;
19
+ initialize(config: PluginConfig): Promise<void>;
20
+ destroy(): Promise<void>;
21
+ private createApiClient;
22
+ private getNodePath;
23
+ private shouldIncludeSource;
24
+ private sleep;
25
+ }
26
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../plugins/alfresco/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,YAAY,EACZ,UAAU,EACV,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACb,MAAM,yBAAyB,CAAC;AA2CjC,MAAM,CAAC,OAAO,OAAO,cAAe,YAAW,oBAAoB;IACjE,QAAQ,CAAC,IAAI,cAAc;IAC3B,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,WAAW,kCAAkC;IACtD,QAAQ,CAAC,mBAAmB,wCAAyC;IAErE,OAAO,CAAC,MAAM,CAAC,CAAiB;IAChC,OAAO,CAAC,SAAS,CAAC,CAAgB;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyB;IAE9C,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAWtD,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;YAyEtE,QAAQ;IAwDhB,MAAM,CACV,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,cAAc,EAAE,EACzB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,YAAY,EAAE,CAAC;YAuBZ,YAAY;IA4CpB,MAAM,CAAC,CACX,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,cAAc,EAAE,EAC9B,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,YAAY,EAAE,CAAC;YA8DZ,wBAAwB;YAqBxB,qBAAqB;IAoCnC,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IA4ChC,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAU/C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,mBAAmB;IAqB3B,OAAO,CAAC,KAAK;CAGd"}
@@ -0,0 +1,405 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const axios_1 = __importDefault(require("axios"));
7
+ const fs_extra_1 = __importDefault(require("fs-extra"));
8
+ const path_1 = __importDefault(require("path"));
9
+ class AlfrescoPlugin {
10
+ constructor() {
11
+ this.name = 'alfresco';
12
+ this.version = '1.0.0';
13
+ this.description = 'Alfresco ECM document source';
14
+ this.supportedOperations = ['import', 'export', 'both'];
15
+ this.apiVersion = 'alfresco/versions/1';
16
+ }
17
+ async testConnection(config) {
18
+ try {
19
+ const client = this.createApiClient(config);
20
+ const response = await client.get('/people/-me-');
21
+ return response.status === 200;
22
+ }
23
+ catch (error) {
24
+ console.error(`Alfresco connection test failed: ${error.message}`);
25
+ return false;
26
+ }
27
+ }
28
+ async scan(config, options) {
29
+ this.config = config;
30
+ this.apiClient = this.createApiClient(this.config);
31
+ const sources = [];
32
+ const errors = [];
33
+ let totalSize = 0;
34
+ try {
35
+ const limit = this.config.limit || options?.limit;
36
+ console.log(`🔍 Scanning Alfresco repository${limit ? ` (limit: ${limit})` : ''}...`);
37
+ // Determine starting node ID
38
+ let startingNodeId = this.config.folderId || '-root-';
39
+ // If siteId is provided, get the document library
40
+ if (this.config.siteId) {
41
+ startingNodeId = await this.getSiteDocumentLibraryId(this.config.siteId);
42
+ }
43
+ const nodes = await this.scanNode(startingNodeId);
44
+ let processedCount = 0;
45
+ for (const node of nodes) {
46
+ if (node.isFile && node.content) {
47
+ const source = {
48
+ id: node.id,
49
+ name: node.name,
50
+ path: this.getNodePath(node),
51
+ size: node.content.sizeInBytes,
52
+ mimeType: node.content.mimeType,
53
+ lastModified: new Date(node.modifiedAt),
54
+ metadata: {
55
+ alfrescoId: node.id,
56
+ nodeType: node.nodeType,
57
+ createdAt: node.createdAt,
58
+ createdBy: node.createdByUser.displayName,
59
+ modifiedBy: node.modifiedByUser.displayName,
60
+ properties: node.properties
61
+ }
62
+ };
63
+ // Apply filters
64
+ if (this.shouldIncludeSource(source, options)) {
65
+ sources.push(source);
66
+ totalSize += source.size;
67
+ processedCount++;
68
+ // Check limit
69
+ if (limit && processedCount >= limit) {
70
+ console.log(`📏 Reached limit of ${limit} files`);
71
+ break;
72
+ }
73
+ }
74
+ }
75
+ }
76
+ return {
77
+ sources,
78
+ totalCount: sources.length,
79
+ totalSize,
80
+ errors
81
+ };
82
+ }
83
+ catch (error) {
84
+ return {
85
+ sources: [],
86
+ totalCount: 0,
87
+ totalSize: 0,
88
+ errors: [`Alfresco scan failed: ${error.message}`]
89
+ };
90
+ }
91
+ }
92
+ async scanNode(nodeId, parentPath = '') {
93
+ if (!this.apiClient)
94
+ throw new Error('API client not initialized');
95
+ const allNodes = [];
96
+ let skipCount = 0;
97
+ const maxItems = 100;
98
+ try {
99
+ while (true) {
100
+ const response = await this.apiClient.get(`/nodes/${nodeId}/children`, {
101
+ params: {
102
+ skipCount,
103
+ maxItems,
104
+ include: 'properties,path',
105
+ fields: 'id,name,nodeType,isFolder,isFile,createdAt,modifiedAt,createdByUser,modifiedByUser,content,properties,path'
106
+ }
107
+ });
108
+ const nodes = response.data.list.entries.map((entry) => {
109
+ const node = entry.entry;
110
+ // Add full path information
111
+ node.fullPath = parentPath ? `${parentPath}/${node.name}` : node.name;
112
+ return node;
113
+ });
114
+ // Process files immediately
115
+ const files = nodes.filter(node => node.isFile);
116
+ allNodes.push(...files);
117
+ // Recursively process folders if includeFolders is enabled or not specified
118
+ if (this.config?.includeFolders !== false) {
119
+ const folders = nodes.filter(node => node.isFolder);
120
+ for (const folder of folders) {
121
+ const folderPath = parentPath ? `${parentPath}/${folder.name}` : folder.name;
122
+ const subNodes = await this.scanNode(folder.id, folderPath);
123
+ allNodes.push(...subNodes);
124
+ }
125
+ }
126
+ // Check if there are more items
127
+ if (nodes.length < maxItems) {
128
+ break;
129
+ }
130
+ skipCount += maxItems;
131
+ }
132
+ return allNodes;
133
+ }
134
+ catch (error) {
135
+ if (error.response?.status === 404) {
136
+ console.warn(`Warning: Node not found: ${nodeId}`);
137
+ return [];
138
+ }
139
+ throw error;
140
+ }
141
+ }
142
+ async import(config, sources, targetDir, options) {
143
+ this.config = config;
144
+ this.apiClient = this.createApiClient(this.config);
145
+ const results = [];
146
+ const batchSize = options?.batchSize || 5;
147
+ // Process in batches to respect API limits
148
+ for (let i = 0; i < sources.length; i += batchSize) {
149
+ const batch = sources.slice(i, i + batchSize);
150
+ for (const source of batch) {
151
+ const result = await this.importSingle(source, targetDir);
152
+ results.push(result);
153
+ // Small delay to respect rate limits
154
+ await this.sleep(200);
155
+ }
156
+ }
157
+ return results;
158
+ }
159
+ async importSingle(source, targetDir) {
160
+ try {
161
+ if (!this.apiClient)
162
+ throw new Error('API client not initialized');
163
+ const targetPath = path_1.default.join(targetDir, source.path);
164
+ const targetDirectory = path_1.default.dirname(targetPath);
165
+ await fs_extra_1.default.ensureDir(targetDirectory);
166
+ // Download file content from Alfresco
167
+ const response = await this.apiClient.get(`/nodes/${source.id}/content`, {
168
+ responseType: 'stream'
169
+ });
170
+ const writer = fs_extra_1.default.createWriteStream(targetPath);
171
+ response.data.pipe(writer);
172
+ return new Promise((resolve) => {
173
+ writer.on('finish', () => {
174
+ resolve({
175
+ success: true,
176
+ source,
177
+ localPath: targetPath,
178
+ bytesTransferred: source.size
179
+ });
180
+ });
181
+ writer.on('error', (error) => {
182
+ resolve({
183
+ success: false,
184
+ source,
185
+ error: error.message
186
+ });
187
+ });
188
+ });
189
+ }
190
+ catch (error) {
191
+ return {
192
+ success: false,
193
+ source,
194
+ error: error.message
195
+ };
196
+ }
197
+ }
198
+ async export(config, localSources, options) {
199
+ this.config = config;
200
+ this.apiClient = this.createApiClient(this.config);
201
+ const results = [];
202
+ // Determine target folder ID
203
+ let targetFolderId = this.config.folderId || '-root-';
204
+ if (this.config.siteId) {
205
+ targetFolderId = await this.getSiteDocumentLibraryId(this.config.siteId);
206
+ }
207
+ for (const source of localSources) {
208
+ try {
209
+ // Determine target folder for this document
210
+ let actualTargetFolderId = targetFolderId;
211
+ if (options?.preserveStructure && source.path.includes('/')) {
212
+ const folderPath = path_1.default.dirname(source.path);
213
+ actualTargetFolderId = await this.createFolderStructure(folderPath, targetFolderId);
214
+ }
215
+ // Read local file
216
+ const fileContent = await fs_extra_1.default.readFile(source.id);
217
+ // Normalize filename to NFC to handle accented characters consistently across platforms
218
+ const fileName = (options?.preserveStructure ? path_1.default.basename(source.path) : source.name).normalize('NFC');
219
+ // Upload file to Alfresco
220
+ const FormData = require('form-data');
221
+ const form = new FormData();
222
+ form.append('filedata', fileContent, fileName);
223
+ form.append('name', fileName);
224
+ form.append('nodeType', 'cm:content');
225
+ const response = await this.apiClient.post(`/nodes/${actualTargetFolderId}/children`, form, {
226
+ headers: {
227
+ ...form.getHeaders()
228
+ }
229
+ });
230
+ const targetPath = options?.preserveStructure ? source.path : source.name;
231
+ results.push({
232
+ success: true,
233
+ targetPath,
234
+ source,
235
+ bytesTransferred: source.size
236
+ });
237
+ }
238
+ catch (error) {
239
+ results.push({
240
+ success: false,
241
+ targetPath: options?.targetPath || '',
242
+ source,
243
+ error: error.message
244
+ });
245
+ }
246
+ }
247
+ return results;
248
+ }
249
+ async getSiteDocumentLibraryId(siteId) {
250
+ if (!this.apiClient)
251
+ throw new Error('API client not initialized');
252
+ try {
253
+ const response = await this.apiClient.get(`/sites/${siteId}/containers`);
254
+ const containers = response.data.list.entries;
255
+ const documentLibrary = containers.find((container) => container.entry.folderId === 'documentLibrary');
256
+ if (!documentLibrary) {
257
+ throw new Error(`Document library not found for site: ${siteId}`);
258
+ }
259
+ return documentLibrary.entry.id;
260
+ }
261
+ catch (error) {
262
+ throw new Error(`Failed to get document library for site ${siteId}: ${error.message}`);
263
+ }
264
+ }
265
+ async createFolderStructure(folderPath, parentId) {
266
+ if (!this.apiClient)
267
+ throw new Error('API client not initialized');
268
+ const parts = folderPath.split('/').filter(part => part.length > 0);
269
+ let currentParentId = parentId;
270
+ for (const folderName of parts) {
271
+ // Check if folder already exists
272
+ try {
273
+ const response = await this.apiClient.get(`/nodes/${currentParentId}/children`, {
274
+ params: {
275
+ where: `(name='${folderName}' AND nodeType='cm:folder')`,
276
+ maxItems: 1
277
+ }
278
+ });
279
+ const existingFolder = response.data.list.entries[0];
280
+ if (existingFolder) {
281
+ currentParentId = existingFolder.entry.id;
282
+ }
283
+ else {
284
+ // Create new folder
285
+ const createResponse = await this.apiClient.post(`/nodes/${currentParentId}/children`, {
286
+ name: folderName,
287
+ nodeType: 'cm:folder'
288
+ });
289
+ currentParentId = createResponse.data.entry.id;
290
+ }
291
+ }
292
+ catch (error) {
293
+ throw new Error(`Failed to create folder structure: ${error.message}`);
294
+ }
295
+ }
296
+ return currentParentId;
297
+ }
298
+ getConfigSchema() {
299
+ return {
300
+ type: 'object',
301
+ properties: {
302
+ baseUrl: {
303
+ type: 'string',
304
+ description: 'Alfresco base URL (e.g., http://localhost:8080/alfresco)',
305
+ required: true
306
+ },
307
+ username: {
308
+ type: 'string',
309
+ description: 'Alfresco username',
310
+ required: true
311
+ },
312
+ password: {
313
+ type: 'string',
314
+ description: 'Alfresco password',
315
+ required: true
316
+ },
317
+ siteId: {
318
+ type: 'string',
319
+ description: 'Alfresco site ID to scan (optional, uses repository root if not specified)',
320
+ required: false
321
+ },
322
+ folderId: {
323
+ type: 'string',
324
+ description: 'Starting folder ID (optional, uses site document library or root)',
325
+ required: false
326
+ },
327
+ includeFolders: {
328
+ type: 'boolean',
329
+ description: 'Include subfolders in scan (default: true)',
330
+ default: true
331
+ },
332
+ limit: {
333
+ type: 'number',
334
+ description: 'Maximum number of documents to scan (useful for testing)',
335
+ required: false
336
+ }
337
+ },
338
+ required: ['baseUrl', 'username', 'password']
339
+ };
340
+ }
341
+ async initialize(config) {
342
+ this.config = config;
343
+ if (!this.config.baseUrl || !this.config.username || !this.config.password) {
344
+ throw new Error('Alfresco base URL, username, and password are required');
345
+ }
346
+ this.apiClient = this.createApiClient(this.config);
347
+ }
348
+ async destroy() {
349
+ this.config = undefined;
350
+ this.apiClient = undefined;
351
+ }
352
+ createApiClient(config) {
353
+ const baseURL = `${config.baseUrl.replace(/\/$/, '')}/api/-default-/public/${this.apiVersion}`;
354
+ return axios_1.default.create({
355
+ baseURL,
356
+ auth: {
357
+ username: config.username,
358
+ password: config.password
359
+ },
360
+ headers: {
361
+ 'Content-Type': 'application/json'
362
+ },
363
+ timeout: 30000
364
+ });
365
+ }
366
+ getNodePath(node) {
367
+ // Use the full path if available from scanning
368
+ if (node.fullPath) {
369
+ return node.fullPath;
370
+ }
371
+ // Construct path from path collection
372
+ if (node.path && node.path.isComplete) {
373
+ const pathParts = node.path.elements
374
+ .filter(element => element.name !== 'Company Home') // Skip root element
375
+ .map(element => element.name);
376
+ pathParts.push(node.name);
377
+ return pathParts.join('/');
378
+ }
379
+ return node.name;
380
+ }
381
+ shouldIncludeSource(source, options) {
382
+ // Apply size filter
383
+ if (options?.filters?.maxSize && source.size > options.filters.maxSize) {
384
+ return false;
385
+ }
386
+ // Apply date range filter
387
+ if (options?.filters?.dateRange) {
388
+ const { from, to } = options.filters.dateRange;
389
+ if (from && source.lastModified < from)
390
+ return false;
391
+ if (to && source.lastModified > to)
392
+ return false;
393
+ }
394
+ // Apply MIME type filter
395
+ if (options?.filters?.mimeTypes && !options.filters.mimeTypes.includes(source.mimeType)) {
396
+ return false;
397
+ }
398
+ return true;
399
+ }
400
+ sleep(ms) {
401
+ return new Promise(resolve => setTimeout(resolve, ms));
402
+ }
403
+ }
404
+ exports.default = AlfrescoPlugin;
405
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../plugins/alfresco/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { DocumentSourcePlugin, DocumentSource, PluginConfig, ScanResult, PluginImportOptions, PluginExportOptions, ImportResult, ExportResult } from '../../src/types/plugins';
2
+ export default class S3Plugin implements DocumentSourcePlugin {
3
+ readonly name = "s3";
4
+ readonly version = "1.0.0";
5
+ readonly description = "AWS S3 document source";
6
+ readonly supportedOperations: readonly ["import", "export", "both"];
7
+ private config?;
8
+ private s3Client?;
9
+ testConnection(config: PluginConfig): Promise<boolean>;
10
+ scan(config: PluginConfig, options?: PluginImportOptions): Promise<ScanResult>;
11
+ import(config: PluginConfig, sources: DocumentSource[], targetDir: string, options?: PluginImportOptions): Promise<ImportResult[]>;
12
+ private importSingle;
13
+ export?(config: PluginConfig, localSources: DocumentSource[], options?: PluginExportOptions): Promise<ExportResult[]>;
14
+ private listAllObjects;
15
+ getConfigSchema(): Record<string, any>;
16
+ initialize(config: PluginConfig): Promise<void>;
17
+ destroy(): Promise<void>;
18
+ private createS3Client;
19
+ private getMimeType;
20
+ private shouldIncludeSource;
21
+ private sleep;
22
+ }
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../plugins/aws-s3/index.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,YAAY,EACZ,UAAU,EACV,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACb,MAAM,yBAAyB,CAAC;AAqBjC,MAAM,CAAC,OAAO,OAAO,QAAS,YAAW,oBAAoB;IAC3D,QAAQ,CAAC,IAAI,QAAQ;IACrB,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,WAAW,4BAA4B;IAChD,QAAQ,CAAC,mBAAmB,wCAAyC;IAErE,OAAO,CAAC,MAAM,CAAC,CAAW;IAC1B,OAAO,CAAC,QAAQ,CAAC,CAAW;IAEtB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBtD,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;IA8D9E,MAAM,CACV,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,cAAc,EAAE,EACzB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,YAAY,EAAE,CAAC;YAuBZ,YAAY;IAyEpB,MAAM,CAAC,CACX,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,cAAc,EAAE,EAC9B,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,YAAY,EAAE,CAAC;YA4DZ,cAAc;IA0C5B,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IA4ChC,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB/C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B,OAAO,CAAC,cAAc;IAkBtB,OAAO,CAAC,WAAW;IA0BnB,OAAO,CAAC,mBAAmB;IAqB3B,OAAO,CAAC,KAAK;CAGd"}