@ramiidv/arca-agro 0.1.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 ramiidv
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,270 @@
1
+ # @ramiidv/arca-agro
2
+
3
+ SDK para los servicios web agropecuarios de ARCA (ex AFIP), Argentina. Integra tres servicios en un solo paquete:
4
+
5
+ - **WSCPE** - Carta de Porte Electrónica (transporte de granos por vía automotor)
6
+ - **WSCTG** - Código de Trazabilidad de Granos (seguimiento del transporte)
7
+ - **WSLPG** - Liquidación Primaria de Granos (liquidaciones y certificaciones)
8
+
9
+ ## Instalación
10
+
11
+ ```bash
12
+ npm install @ramiidv/arca-agro @ramiidv/arca-common
13
+ ```
14
+
15
+ ## Requisitos
16
+
17
+ - Node.js >= 18
18
+ - Certificado digital y clave privada emitidos por ARCA
19
+ - Autorización en los servicios `wscpe`, `wsctg` y/o `wslpg` en WSAA
20
+
21
+ ## Inicio rápido
22
+
23
+ ```ts
24
+ import { ArcaAgro } from '@ramiidv/arca-agro';
25
+ import fs from 'node:fs';
26
+
27
+ const agro = new ArcaAgro({
28
+ cuit: 20123456789,
29
+ cert: fs.readFileSync('cert.pem', 'utf-8'),
30
+ key: fs.readFileSync('key.pem', 'utf-8'),
31
+ production: false, // true para producción
32
+ });
33
+ ```
34
+
35
+ La autenticación WSAA se maneja automáticamente. Los tokens se cachean y renuevan según sea necesario.
36
+
37
+ ## WSCPE - Carta de Porte Electrónica
38
+
39
+ ```ts
40
+ // Autorizar una carta de porte
41
+ const resultado = await agro.cpe.autorizarCPEAutomotor({
42
+ cuitTitularCartaPorte: 20123456789,
43
+ sucursal: 1,
44
+ nroOrden: 1,
45
+ codTipoCartaPorte: 1,
46
+ codGrano: 23, // soja
47
+ codLocalidadProcedencia: 10001,
48
+ codProvProcedencia: 1,
49
+ codLocalidadDestino: 20001,
50
+ codProvDestino: 12,
51
+ cuitDestino: 30111222333,
52
+ plantaDestino: 1,
53
+ pesoNeto: 30000,
54
+ pesoBruto: 32000,
55
+ pesoTara: 2000,
56
+ patente: 'ABC123',
57
+ cuitTransportista: 20999888777,
58
+ fechaEmision: '2026-03-31',
59
+ });
60
+
61
+ // Confirmar arribo
62
+ await agro.cpe.confirmadoArriboCPE({
63
+ nroCTG: resultado.nroCTG!,
64
+ nroCartaPorte: resultado.nroCartaPorte!,
65
+ cuitDestino: 30111222333,
66
+ pesoNeto: 29800,
67
+ fechaArribo: '2026-04-01',
68
+ });
69
+
70
+ // Consultar CPEs
71
+ const cpes = await agro.cpe.consultarCPE({
72
+ fechaDesde: '2026-03-01',
73
+ fechaHasta: '2026-03-31',
74
+ codGrano: 23,
75
+ });
76
+
77
+ // Rechazar / Anular
78
+ await agro.cpe.rechazoCPE({ nroCTG: 12345, nroCartaPorte: 67890, codMotivo: 1 });
79
+ await agro.cpe.anularCPE({ nroCTG: 12345, nroCartaPorte: 67890, codMotivo: 2 });
80
+
81
+ // Obtener constancia PDF (base64)
82
+ const pdfBase64 = await agro.cpe.consultarConstanciaCPEPDF(12345);
83
+
84
+ // Obtener siguiente número de orden
85
+ const nroOrden = await agro.cpe.siguienteNroOrden(1);
86
+
87
+ // Estado del servicio
88
+ const status = await agro.cpe.dummy();
89
+ ```
90
+
91
+ ## WSCTG - Código de Trazabilidad de Granos
92
+
93
+ ```ts
94
+ // Solicitar un CTG
95
+ const ctg = await agro.ctg.solicitarCTGInicial({
96
+ nroCartaPorte: 67890,
97
+ codEspecie: 23,
98
+ cuitDestino: 30111222333,
99
+ cuitDestinatario: 30111222333,
100
+ codLocalidadOrigen: 10001,
101
+ codLocalidadDestino: 20001,
102
+ codCosecha: 2526,
103
+ pesoNeto: 30000,
104
+ });
105
+
106
+ // Confirmar arribo
107
+ await agro.ctg.confirmarArribo({
108
+ nroCTG: ctg.nroCTG!,
109
+ nroCartaPorte: 67890,
110
+ cuitDestino: 30111222333,
111
+ pesoNeto: 29800,
112
+ fechaArribo: '2026-04-01',
113
+ });
114
+
115
+ // Consultar CTGs
116
+ const ctgs = await agro.ctg.consultarCTG({
117
+ fechaDesde: '2026-03-01',
118
+ fechaHasta: '2026-03-31',
119
+ });
120
+
121
+ // Exportar a Excel (base64)
122
+ const excelBase64 = await agro.ctg.consultarCTGExcel({
123
+ fechaDesde: '2026-03-01',
124
+ fechaHasta: '2026-03-31',
125
+ });
126
+
127
+ // Rechazar / Anular
128
+ await agro.ctg.rechazarCTG({ nroCTG: 123, nroCartaPorte: 456, codMotivo: 1 });
129
+ await agro.ctg.anularCTG({ nroCTG: 123, nroCartaPorte: 456, codMotivo: 2 });
130
+
131
+ // CTGs activos
132
+ const activos = await agro.ctg.obtenerCTGActivos();
133
+
134
+ // Constancia PDF (base64)
135
+ const pdf = await agro.ctg.consultarConstanciaCTGPDF(12345);
136
+
137
+ // Estado del servicio
138
+ const status = await agro.ctg.dummy();
139
+ ```
140
+
141
+ ## WSLPG - Liquidación Primaria de Granos
142
+
143
+ ```ts
144
+ // Autorizar una liquidación
145
+ const liq = await agro.lpg.liquidacionAutorizar({
146
+ cuitComprador: 30111222333,
147
+ cuitVendedor: 20123456789,
148
+ codGrano: 23,
149
+ pesoNeto: 30000,
150
+ precioRefTn: 350000,
151
+ });
152
+
153
+ // Consultar liquidaciones
154
+ const liquidaciones = await agro.lpg.liquidacionConsultar({
155
+ fechaDesde: '2026-03-01',
156
+ fechaHasta: '2026-03-31',
157
+ });
158
+
159
+ // Anular liquidación
160
+ await agro.lpg.liquidacionAnular(1, 100);
161
+
162
+ // Ajuste unificado
163
+ await agro.lpg.liquidacionAjustarUnificado({
164
+ nroOrdenOriginal: 100,
165
+ ptoEmisionOriginal: 1,
166
+ tipoAjuste: 'credito',
167
+ liquidacion: { pesoNeto: 29500 },
168
+ });
169
+
170
+ // Autorizar certificación
171
+ const cert = await agro.lpg.certificacionAutorizar({
172
+ tipoCertificacion: 1,
173
+ cuitDepositante: 20123456789,
174
+ codGrano: 23,
175
+ pesoNeto: 30000,
176
+ });
177
+
178
+ // Anular certificación
179
+ await agro.lpg.certificacionAnular(1, cert.nroCertificacion!);
180
+
181
+ // Consultar parámetros (tipos de grano, grados, puertos, etc.)
182
+ const granos = await agro.lpg.consultarParametros('tipoGranoConsultar');
183
+
184
+ // Estado del servicio
185
+ const status = await agro.lpg.dummy();
186
+ ```
187
+
188
+ ## Verificar todos los servicios
189
+
190
+ ```ts
191
+ const status = await agro.serverStatus();
192
+ // { cpe: { appserver, dbserver, authserver }, ctg: { ... }, lpg: { ... } }
193
+ ```
194
+
195
+ ## Clientes de bajo nivel
196
+
197
+ Para control total sobre la autenticación, se pueden usar los clientes individuales directamente:
198
+
199
+ ```ts
200
+ import { CpeClient, CtgClient, LpgClient } from '@ramiidv/arca-agro';
201
+ import { WsaaClient } from '@ramiidv/arca-common';
202
+
203
+ const wsaa = new WsaaClient({ cert, key, production: false });
204
+ const cpeClient = new CpeClient(false, { timeoutMs: 60000 });
205
+
206
+ const ticket = await wsaa.getAccessTicket('wscpe');
207
+ const auth = { Token: ticket.token, Sign: ticket.sign, Cuit: 20123456789 };
208
+
209
+ const resultado = await cpeClient.autorizarCPEAutomotor(auth, { ... });
210
+ ```
211
+
212
+ ## Eventos
213
+
214
+ ```ts
215
+ agro.on('auth:login', (e) => console.log(`Login ${e.service} en ${e.durationMs}ms`));
216
+ agro.on('request:end', (e) => console.log(`${e.method} completado en ${e.durationMs}ms`));
217
+ agro.on('request:retry', (e) => console.warn(`Reintento #${e.attempt}: ${e.error}`));
218
+ agro.on('request:error', (e) => console.error(`Error en ${e.method}: ${e.error}`));
219
+ ```
220
+
221
+ ## Manejo de errores
222
+
223
+ ```ts
224
+ import {
225
+ ArcaAuthError,
226
+ ArcaSoapError,
227
+ ArcaServiceError,
228
+ } from '@ramiidv/arca-agro';
229
+
230
+ try {
231
+ await agro.cpe.autorizarCPEAutomotor({ ... });
232
+ } catch (error) {
233
+ if (error instanceof ArcaServiceError) {
234
+ // Errores de negocio (datos inválidos, CPE rechazada, etc.)
235
+ console.error('Errores:', error.errors);
236
+ } else if (error instanceof ArcaSoapError) {
237
+ // Error de comunicación SOAP / HTTP
238
+ console.error('Error SOAP:', error.message, error.statusCode);
239
+ } else if (error instanceof ArcaAuthError) {
240
+ // Error de autenticación WSAA
241
+ console.error('Error auth:', error.message);
242
+ }
243
+ }
244
+ ```
245
+
246
+ ## Configuración
247
+
248
+ | Opción | Tipo | Default | Descripción |
249
+ |--------|------|---------|-------------|
250
+ | `cuit` | `number` | **requerido** | CUIT del contribuyente |
251
+ | `cert` | `string` | **requerido** | Certificado X.509 en formato PEM |
252
+ | `key` | `string` | **requerido** | Clave privada en formato PEM |
253
+ | `production` | `boolean` | `false` | Usar entorno de producción |
254
+ | `tokenTTLMinutes` | `number` | `720` | Tiempo de vida del token WSAA (minutos) |
255
+ | `requestTimeoutMs` | `number` | `30000` | Timeout para requests HTTP (ms) |
256
+ | `retries` | `number` | `1` | Reintentos en errores transitorios |
257
+ | `retryDelayMs` | `number` | `1000` | Delay base entre reintentos (ms) |
258
+ | `onEvent` | `function` | `undefined` | Callback para eventos del SDK |
259
+
260
+ ## Endpoints
261
+
262
+ | Servicio | Homologación | Producción |
263
+ |----------|-------------|------------|
264
+ | WSCPE | `https://fwshomo.afip.gov.ar/wscpe/services/soap` | `https://serviciosjava.afip.gob.ar/wscpe/services/soap` |
265
+ | WSCTG | `https://fwshomo.afip.gov.ar/wsctg/services/CTGService_v4.0` | `https://serviciosjava.afip.gob.ar/wsctg/services/CTGService_v4.0` |
266
+ | WSLPG | `https://fwshomo.afip.gov.ar/wslpg/LpgService` | `https://serviciosjava.afip.gob.ar/wslpg/LpgService` |
267
+
268
+ ## Licencia
269
+
270
+ MIT
@@ -0,0 +1,163 @@
1
+ import type { ArcaEvent, ServerStatus } from '@ramiidv/arca-common';
2
+ import { CpeClient } from './cpe-client.js';
3
+ import { CtgClient } from './ctg-client.js';
4
+ import { LpgClient } from './lpg-client.js';
5
+ import type { ArcaAgroConfig, AgroAuth, CartaPorteAutomotor, CartaPorteResult, ConsultaCPEParams, ConsultaCPEPorDestinoParams, ConfirmadoArriboCPEParams, RechazoAnulacionCPEParams, EditarCPEParams, ContingenciaCPEParams, SolicitudCTG, CTGResult, ConsultaCTGParams, ConfirmarArriboCTGParams, RechazoCTGParams, AnulacionCTGParams, CTGActivosResult, Liquidacion, LiquidacionResult, ConsultaLiquidacionParams, AjusteUnificadoParams, Certificacion, CertificacionResult, LpgParameterQueryParams } from './types.js';
6
+ /**
7
+ * Orquestador principal para los servicios agropecuarios de ARCA.
8
+ * Expone los tres servicios (WSCPE, WSCTG, WSLPG) con autenticación automática.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * const agro = new ArcaAgro({
13
+ * cuit: 20123456789,
14
+ * cert: fs.readFileSync('cert.pem', 'utf-8'),
15
+ * key: fs.readFileSync('key.pem', 'utf-8'),
16
+ * production: false,
17
+ * });
18
+ *
19
+ * // Carta de Porte
20
+ * const cpe = await agro.cpe.autorizarCPEAutomotor({ ... });
21
+ *
22
+ * // CTG
23
+ * const ctg = await agro.ctg.solicitarCTGInicial({ ... });
24
+ *
25
+ * // Liquidaciones
26
+ * const liq = await agro.lpg.liquidacionAutorizar({ ... });
27
+ * ```
28
+ */
29
+ export declare class ArcaAgro {
30
+ private readonly wsaa;
31
+ private readonly cpeClient;
32
+ private readonly ctgClient;
33
+ private readonly lpgClient;
34
+ private readonly cuit;
35
+ private readonly production;
36
+ private readonly emitter;
37
+ private readonly onEventCb?;
38
+ /** Acceso a los servicios de Carta de Porte Electrónica (WSCPE). */
39
+ readonly cpe: ArcaAgroCpe;
40
+ /** Acceso a los servicios de Código de Trazabilidad de Granos (WSCTG). */
41
+ readonly ctg: ArcaAgroCtg;
42
+ /** Acceso a los servicios de Liquidación Primaria de Granos (WSLPG). */
43
+ readonly lpg: ArcaAgroLpg;
44
+ constructor(config: ArcaAgroConfig);
45
+ /**
46
+ * Suscribirse a eventos del SDK.
47
+ *
48
+ * @example
49
+ * ```ts
50
+ * agro.on('request:end', (e) => console.log(`${e.method} took ${e.durationMs}ms`));
51
+ * agro.on('auth:login', (e) => console.log(`Login ${e.service} in ${e.durationMs}ms`));
52
+ * ```
53
+ */
54
+ on(event: ArcaEvent['type'], handler: (event: ArcaEvent) => void): this;
55
+ /** Desuscribirse de un evento. */
56
+ off(event: ArcaEvent['type'], handler: (event: ArcaEvent) => void): this;
57
+ /** @internal */
58
+ getAuth(service: string): Promise<AgroAuth>;
59
+ /** @internal */
60
+ getCpeClient(): CpeClient;
61
+ /** @internal */
62
+ getCtgClient(): CtgClient;
63
+ /** @internal */
64
+ getLpgClient(): LpgClient;
65
+ /** Verifica el estado de los servidores de los 3 servicios agro. */
66
+ serverStatus(): Promise<{
67
+ cpe: ServerStatus;
68
+ ctg: ServerStatus;
69
+ lpg: ServerStatus;
70
+ }>;
71
+ /** Invalida los tickets de acceso cacheados para todos los servicios agro. */
72
+ clearAuthCache(): void;
73
+ }
74
+ /**
75
+ * Namespace con métodos de Carta de Porte Electrónica (WSCPE).
76
+ * Se accede a través de `agro.cpe.*`.
77
+ */
78
+ declare class ArcaAgroCpe {
79
+ private readonly agro;
80
+ constructor(agro: ArcaAgro);
81
+ private auth;
82
+ private client;
83
+ /** Autoriza una CPE para transporte automotor. */
84
+ autorizarCPEAutomotor(cpe: CartaPorteAutomotor): Promise<CartaPorteResult>;
85
+ /** Confirma el arribo de una CPE en destino. */
86
+ confirmadoArriboCPE(params: ConfirmadoArriboCPEParams): Promise<CartaPorteResult>;
87
+ /** Rechaza una CPE. */
88
+ rechazoCPE(params: RechazoAnulacionCPEParams): Promise<CartaPorteResult>;
89
+ /** Anula una CPE. */
90
+ anularCPE(params: RechazoAnulacionCPEParams): Promise<CartaPorteResult>;
91
+ /** Edita campos de una CPE previamente autorizada. */
92
+ editarCPE(params: EditarCPEParams): Promise<CartaPorteResult>;
93
+ /** Informa una contingencia sobre una CPE. */
94
+ informarContingencia(params: ContingenciaCPEParams): Promise<CartaPorteResult>;
95
+ /** Consulta CPEs según criterios de búsqueda. */
96
+ consultarCPE(params: ConsultaCPEParams): Promise<CartaPorteResult[]>;
97
+ /** Consulta CPEs por destino. */
98
+ consultarCPEPorDestino(params: ConsultaCPEPorDestinoParams): Promise<CartaPorteResult[]>;
99
+ /** Consulta el último número de orden utilizado para una sucursal. */
100
+ consultarUltNroOrden(sucursal: number): Promise<number>;
101
+ /** Obtiene el siguiente número de orden (último + 1). */
102
+ siguienteNroOrden(sucursal: number): Promise<number>;
103
+ /** Obtiene la constancia PDF de una CPE en base64. */
104
+ consultarConstanciaCPEPDF(nroCTG: number): Promise<string>;
105
+ /** Verifica el estado de los servidores del WSCPE. */
106
+ dummy(): Promise<ServerStatus>;
107
+ }
108
+ /**
109
+ * Namespace con métodos de Código de Trazabilidad de Granos (WSCTG).
110
+ * Se accede a través de `agro.ctg.*`.
111
+ */
112
+ declare class ArcaAgroCtg {
113
+ private readonly agro;
114
+ constructor(agro: ArcaAgro);
115
+ private auth;
116
+ private client;
117
+ /** Solicita un CTG inicial para el transporte de granos. */
118
+ solicitarCTGInicial(solicitud: SolicitudCTG): Promise<CTGResult>;
119
+ /** Confirma el arribo de un CTG en destino. */
120
+ confirmarArribo(params: ConfirmarArriboCTGParams): Promise<CTGResult>;
121
+ /** Rechaza un CTG. */
122
+ rechazarCTG(params: RechazoCTGParams): Promise<CTGResult>;
123
+ /** Anula un CTG. */
124
+ anularCTG(params: AnulacionCTGParams): Promise<CTGResult>;
125
+ /** Consulta CTGs según criterios de búsqueda. */
126
+ consultarCTG(params: ConsultaCTGParams): Promise<CTGResult[]>;
127
+ /** Consulta CTGs y retorna el resultado en formato Excel (base64). */
128
+ consultarCTGExcel(params: ConsultaCTGParams): Promise<string>;
129
+ /** Obtiene la constancia PDF de un CTG en base64. */
130
+ consultarConstanciaCTGPDF(nroCTG: number): Promise<string>;
131
+ /** Obtiene los CTGs activos (pendientes). */
132
+ obtenerCTGActivos(): Promise<CTGActivosResult>;
133
+ /** Verifica el estado de los servidores del WSCTG. */
134
+ dummy(): Promise<ServerStatus>;
135
+ }
136
+ /**
137
+ * Namespace con métodos de Liquidación Primaria de Granos (WSLPG).
138
+ * Se accede a través de `agro.lpg.*`.
139
+ */
140
+ declare class ArcaAgroLpg {
141
+ private readonly agro;
142
+ constructor(agro: ArcaAgro);
143
+ private auth;
144
+ private client;
145
+ /** Autoriza una liquidación primaria de granos. */
146
+ liquidacionAutorizar(liquidacion: Liquidacion): Promise<LiquidacionResult>;
147
+ /** Consulta liquidaciones previamente autorizadas. */
148
+ liquidacionConsultar(params: ConsultaLiquidacionParams): Promise<LiquidacionResult[]>;
149
+ /** Anula una liquidación previamente autorizada. */
150
+ liquidacionAnular(ptoEmision: number, nroOrden: number): Promise<LiquidacionResult>;
151
+ /** Ajusta una liquidación mediante ajuste unificado. */
152
+ liquidacionAjustarUnificado(params: AjusteUnificadoParams): Promise<LiquidacionResult>;
153
+ /** Autoriza una certificación de granos. */
154
+ certificacionAutorizar(certificacion: Certificacion): Promise<CertificacionResult>;
155
+ /** Anula una certificación previamente autorizada. */
156
+ certificacionAnular(tipoCertificacion: number, nroCertificacion: number): Promise<CertificacionResult>;
157
+ /** Consulta parámetros del WSLPG (tipos de grano, grados, puertos, etc.). */
158
+ consultarParametros(tipoParametro: string, params?: LpgParameterQueryParams): Promise<Record<string, unknown>[]>;
159
+ /** Verifica el estado de los servidores del WSLPG. */
160
+ dummy(): Promise<ServerStatus>;
161
+ }
162
+ export {};
163
+ //# sourceMappingURL=arca-agro.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arca-agro.d.ts","sourceRoot":"","sources":["../src/arca-agro.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,KAAK,EACV,cAAc,EACd,QAAQ,EACR,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,EACzB,eAAe,EACf,qBAAqB,EACrB,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,wBAAwB,EACxB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,EACrB,aAAa,EACb,mBAAmB,EACnB,uBAAuB,EACxB,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAU;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAA6B;IAExD,oEAAoE;IACpE,SAAgB,GAAG,EAAE,WAAW,CAAC;IACjC,0EAA0E;IAC1E,SAAgB,GAAG,EAAE,WAAW,CAAC;IACjC,wEAAwE;IACxE,SAAgB,GAAG,EAAE,WAAW,CAAC;gBAErB,MAAM,EAAE,cAAc;IAwClC;;;;;;;;OAQG;IACH,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,GAAG,IAAI;IAKvE,kCAAkC;IAClC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,GAAG,IAAI;IASxE,gBAAgB;IACV,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IASjD,gBAAgB;IAChB,YAAY,IAAI,SAAS;IAEzB,gBAAgB;IAChB,YAAY,IAAI,SAAS;IAEzB,gBAAgB;IAChB,YAAY,IAAI,SAAS;IAMzB,oEAAoE;IAC9D,YAAY,IAAI,OAAO,CAAC;QAC5B,GAAG,EAAE,YAAY,CAAC;QAClB,GAAG,EAAE,YAAY,CAAC;QAClB,GAAG,EAAE,YAAY,CAAC;KACnB,CAAC;IAaF,8EAA8E;IAC9E,cAAc,IAAI,IAAI;CAKvB;AAMD;;;GAGG;AACH,cAAM,WAAW;IACH,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,QAAQ;IAE3C,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,MAAM;IAEd,kDAAkD;IAC5C,qBAAqB,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAKhF,gDAAgD;IAC1C,mBAAmB,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAIvF,uBAAuB;IACjB,UAAU,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAI9E,qBAAqB;IACf,SAAS,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAI7E,sDAAsD;IAChD,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAInE,8CAA8C;IACxC,oBAAoB,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAIpF,iDAAiD;IAC3C,YAAY,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAI1E,iCAAiC;IAC3B,sBAAsB,CAAC,MAAM,EAAE,2BAA2B,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAI9F,sEAAsE;IAChE,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI7D,yDAAyD;IACnD,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK1D,sDAAsD;IAChD,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIhE,sDAAsD;IAChD,KAAK,IAAI,OAAO,CAAC,YAAY,CAAC;CAGrC;AAMD;;;GAGG;AACH,cAAM,WAAW;IACH,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,QAAQ;IAE3C,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,MAAM;IAEd,4DAA4D;IACtD,mBAAmB,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;IAKtE,+CAA+C;IACzC,eAAe,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,SAAS,CAAC;IAI3E,sBAAsB;IAChB,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC;IAI/D,oBAAoB;IACd,SAAS,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC;IAI/D,iDAAiD;IAC3C,YAAY,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAInE,sEAAsE;IAChE,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IAInE,qDAAqD;IAC/C,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIhE,6CAA6C;IACvC,iBAAiB,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAIpD,sDAAsD;IAChD,KAAK,IAAI,OAAO,CAAC,YAAY,CAAC;CAGrC;AAMD;;;GAGG;AACH,cAAM,WAAW;IACH,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,QAAQ;IAE3C,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,MAAM;IAEd,mDAAmD;IAC7C,oBAAoB,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAKhF,sDAAsD;IAChD,oBAAoB,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAI3F,oDAAoD;IAC9C,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIzF,wDAAwD;IAClD,2BAA2B,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAI5F,4CAA4C;IACtC,sBAAsB,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAIxF,sDAAsD;IAChD,mBAAmB,CAAC,iBAAiB,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAI5G,6EAA6E;IACvE,mBAAmB,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAItH,sDAAsD;IAChD,KAAK,IAAI,OAAO,CAAC,YAAY,CAAC;CAGrC"}