@ramiidv/arca-fecred 0.3.0 → 0.4.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.
@@ -1,250 +0,0 @@
1
- import { ArcaValidationError, formatDate, validateCBU, validateCuit } from '@ramiidv/arca-common';
2
- import { EstadoComprobante, EstadoCtaCte, OpcionTransferencia, RolCtaCte, TipoCancelacion, TipoFechaFiltro, } from './constants.js';
3
- function invalid(field, message, value) {
4
- throw new ArcaValidationError(`${field}: ${message}`, [{ field, message, value }], field);
5
- }
6
- function rethrowAs(field, value, fn) {
7
- try {
8
- return fn();
9
- }
10
- catch (e) {
11
- if (e instanceof ArcaValidationError) {
12
- const message = e.details[0]?.message ?? e.message;
13
- throw new ArcaValidationError(`${field}: ${message}`, [{ field, message, value }], field, { cause: e });
14
- }
15
- throw e;
16
- }
17
- }
18
- /** CUIT (`CuitSimpleType`) validado con dígito verificador, como 11 dígitos. */
19
- export function cuitParam(value, field) {
20
- if (typeof value !== 'string' && typeof value !== 'number')
21
- invalid(field, 'es requerido (number o string)', value);
22
- return rethrowAs(field, value, () => validateCuit(value));
23
- }
24
- /** `xsd:date` (`YYYY-MM-DD`). Acepta `Date` (fecha de Argentina), `YYYY-MM-DD` o `YYYYMMDD`. */
25
- export function dateParam(value, field) {
26
- if (!(value instanceof Date) && typeof value !== 'string')
27
- invalid(field, 'es requerida (Date o string)', value);
28
- const d = rethrowAs(field, value, () => formatDate(value));
29
- return `${d.slice(0, 4)}-${d.slice(4, 6)}-${d.slice(6, 8)}`;
30
- }
31
- /** Entero dentro de un rango (`xsd:short`, `PuntoVentaSimpleType`, etc.). */
32
- export function intParam(value, field, min, max) {
33
- if (typeof value !== 'number' || !Number.isInteger(value) || value < min || value > max) {
34
- invalid(field, `debe ser un entero entre ${min} y ${max}`, value);
35
- }
36
- return value;
37
- }
38
- const SHORT_MAX = 32767;
39
- /** Código `xsd:short` no negativo. */
40
- export function codeParam(value, field) {
41
- return intParam(value, field, 0, SHORT_MAX);
42
- }
43
- /** `xsd:long` positivo (ej: `codCtaCte`), como string de dígitos. */
44
- export function longParam(value, field) {
45
- if (typeof value === 'number') {
46
- if (!Number.isSafeInteger(value) || value <= 0)
47
- invalid(field, 'debe ser un entero positivo', value);
48
- return String(value);
49
- }
50
- if (typeof value === 'string' && /^\d{1,18}$/.test(value.trim()) && !/^0+$/.test(value.trim())) {
51
- return value.trim().replace(/^0+/, '');
52
- }
53
- return invalid(field, 'debe ser un entero positivo', value);
54
- }
55
- const IMPORTE_MAX = 9999999999999.99;
56
- /**
57
- * `ImporteSimpleType`: decimal con 2 decimales (redondeado), entre
58
- * -9999999999999.99 y 9999999999999.99. Con `allowNegative = false` rechaza negativos.
59
- */
60
- export function importeParam(value, field, allowNegative = false) {
61
- if (typeof value !== 'number' || !Number.isFinite(value))
62
- invalid(field, 'debe ser un número finito', value);
63
- const rounded = Math.round(value * 100) / 100;
64
- if (Math.abs(rounded) > IMPORTE_MAX)
65
- invalid(field, 'excede el máximo del XSD (13 enteros, 2 decimales)', value);
66
- if (!allowNegative && rounded < 0)
67
- invalid(field, 'no puede ser negativo', value);
68
- return rounded.toFixed(2);
69
- }
70
- /** `PorcentajeSimpleType`: 0 a 100. */
71
- export function porcentajeParam(value, field) {
72
- if (typeof value !== 'number' || !Number.isFinite(value) || value < 0 || value > 100) {
73
- invalid(field, 'debe ser un número entre 0 y 100', value);
74
- }
75
- return String(Math.round(value * 100) / 100);
76
- }
77
- /** Cotización (`xsd:decimal`), positiva; se envía con hasta 6 decimales. */
78
- export function cotizacionParam(value, field) {
79
- if (typeof value !== 'number' || !Number.isFinite(value) || value <= 0) {
80
- invalid(field, 'debe ser un número positivo', value);
81
- }
82
- return String(Math.round(value * 1e6) / 1e6);
83
- }
84
- /** String con longitud acotada (ej: `Texto250SimpleType` = 3..250). */
85
- export function textParam(value, field, min, max) {
86
- if (typeof value !== 'string')
87
- invalid(field, 'es requerido (string)', value);
88
- const t = value.trim();
89
- if (t.length < min || t.length > max)
90
- invalid(field, `debe tener entre ${min} y ${max} caracteres`, value);
91
- return t;
92
- }
93
- /** `xsd:string` no vacío. */
94
- export function nonEmptyParam(value, field) {
95
- if (typeof value !== 'string' || value.trim().length === 0)
96
- invalid(field, 'es requerido (string no vacío)', value);
97
- return value.trim();
98
- }
99
- /** Valor de una enumeración del XSD. */
100
- export function enumParam(value, field, values) {
101
- const allowed = Object.values(values);
102
- if (typeof value !== 'string' || !allowed.includes(value)) {
103
- invalid(field, `debe ser uno de: ${allowed.join(', ')}`, value);
104
- }
105
- return value;
106
- }
107
- export const rolParam = (v, field = 'rol') => enumParam(v, field, RolCtaCte);
108
- export const estadoCtaCteParam = (v, field = 'estadoCtaCte') => enumParam(v, field, EstadoCtaCte);
109
- export const estadoCmpParam = (v, field = 'estadoCmp') => enumParam(v, field, EstadoComprobante);
110
- export const opcionTransferenciaParam = (v, field = 'opcionTransferencia') => enumParam(v, field, OpcionTransferencia);
111
- export const tipoCancelacionParam = (v, field = 'tipoCancelacion') => enumParam(v, field, TipoCancelacion);
112
- /** `SiNoSimpleType`. */
113
- export function siNoParam(value, field) {
114
- if (typeof value !== 'boolean')
115
- invalid(field, 'debe ser boolean', value);
116
- return value ? 'S' : 'N';
117
- }
118
- /** `CBUSimpleType` (22 dígitos, con dígitos verificadores). */
119
- export function cbuParam(value, field) {
120
- if (typeof value !== 'string')
121
- invalid(field, 'es requerido (string de 22 dígitos)', value);
122
- return rethrowAs(field, value, () => validateCBU(value));
123
- }
124
- function arrayParam(value, field, required) {
125
- if (value === undefined && !required)
126
- return undefined;
127
- if (!Array.isArray(value) || value.length === 0)
128
- invalid(field, 'debe ser un array con al menos un elemento', value);
129
- return value;
130
- }
131
- // ---------------------------------------------------------------------------
132
- // Tipos compuestos
133
- // ---------------------------------------------------------------------------
134
- /** `IdComprobanteType`. */
135
- export function idComprobanteParam(value, field) {
136
- if (!value || typeof value !== 'object')
137
- invalid(field, 'es requerido', value);
138
- return {
139
- CUITEmisor: cuitParam(value.cuitEmisor, `${field}.cuitEmisor`),
140
- codTipoCmp: codeParam(value.codTipoCmp, `${field}.codTipoCmp`),
141
- ptoVta: intParam(value.ptoVta, `${field}.ptoVta`, 1, 99999),
142
- nroCmp: intParam(value.nroCmp, `${field}.nroCmp`, 1, 99999999),
143
- };
144
- }
145
- /** `IdCtaCteType` (choice `codCtaCte` | `idFactura`). */
146
- export function idCtaCteParam(value, field = 'idCtaCte') {
147
- if (!value || typeof value !== 'object')
148
- invalid(field, 'es requerido ({ codCtaCte } o { idFactura })', value);
149
- const hasCod = value.codCtaCte !== undefined;
150
- const hasFactura = value.idFactura !== undefined;
151
- if (hasCod === hasFactura)
152
- invalid(field, 'debe tener exactamente uno de codCtaCte o idFactura', value);
153
- return hasCod
154
- ? { codCtaCte: longParam(value.codCtaCte, `${field}.codCtaCte`) }
155
- : { idFactura: idComprobanteParam(value.idFactura, `${field}.idFactura`) };
156
- }
157
- /** `FiltroFechaType`. */
158
- export function fechaParam(value, field = 'fecha') {
159
- if (!value || typeof value !== 'object')
160
- invalid(field, 'es requerido ({ tipo, desde, hasta })', value);
161
- const tipo = enumParam(value.tipo, `${field}.tipo`, TipoFechaFiltro);
162
- const desde = dateParam(value.desde, `${field}.desde`);
163
- const hasta = dateParam(value.hasta, `${field}.hasta`);
164
- if (desde > hasta)
165
- invalid(`${field}.hasta`, 'debe ser igual o posterior a desde', value);
166
- return { tipo, desde, hasta };
167
- }
168
- /** `ArrayMotivosRechazoType`. */
169
- export function motivosRechazoParam(value, field = 'motivos') {
170
- const motivos = arrayParam(value, field, true);
171
- return {
172
- motivoRechazo: motivos.map((m, i) => ({
173
- codMotivo: codeParam(m?.codMotivo, `${field}[${i}].codMotivo`),
174
- descMotivo: textParam(m?.descMotivo, `${field}[${i}].descMotivo`, 3, 250),
175
- justificacion: textParam(m?.justificacion, `${field}[${i}].justificacion`, 3, 250),
176
- })),
177
- };
178
- }
179
- /** `ArrayCodigosDescripcionesType` para formas de cancelación. */
180
- export function formasCancelacionParam(value, field = 'formasCancelacion', required = true) {
181
- const formas = arrayParam(value, field, required);
182
- if (!formas)
183
- return undefined;
184
- return {
185
- codigoDescripcion: formas.map((f, i) => ({
186
- codigo: codeParam(f?.codigo, `${field}[${i}].codigo`),
187
- descripcion: nonEmptyParam(f?.descripcion, `${field}[${i}].descripcion`),
188
- })),
189
- };
190
- }
191
- /** `ArrayConfirmarNotasType`. */
192
- export function confirmarNotasParam(value, field = 'confirmarNotasDC') {
193
- const notas = arrayParam(value, field, false);
194
- if (!notas)
195
- return undefined;
196
- return {
197
- confirmarNota: notas.map((n, i) => ({
198
- acepta: siNoParam(n?.acepta, `${field}[${i}].acepta`),
199
- idNota: idComprobanteParam(n?.idNota, `${field}[${i}].idNota`),
200
- })),
201
- };
202
- }
203
- /** `ArrayRetencionesType`. */
204
- export function retencionesParam(value, field = 'retenciones') {
205
- const rets = arrayParam(value, field, false);
206
- if (!rets)
207
- return undefined;
208
- return {
209
- retencion: rets.map((r, i) => {
210
- const out = {
211
- codTipo: codeParam(r?.codTipo, `${field}[${i}].codTipo`),
212
- importe: importeParam(r?.importe, `${field}[${i}].importe`),
213
- porcentaje: porcentajeParam(r?.porcentaje, `${field}[${i}].porcentaje`),
214
- };
215
- if (r.descMotivo !== undefined)
216
- out.descMotivo = textParam(r.descMotivo, `${field}[${i}].descMotivo`, 3, 250);
217
- return out;
218
- }),
219
- };
220
- }
221
- /** `ArrayAjustesOperacionType`. */
222
- export function ajustesParam(value, field = 'ajustesOperacion') {
223
- const ajustes = arrayParam(value, field, false);
224
- if (!ajustes)
225
- return undefined;
226
- return {
227
- ajuste: ajustes.map((a, i) => ({
228
- codigo: codeParam(a?.codigo, `${field}[${i}].codigo`),
229
- importe: importeParam(a?.importe, `${field}[${i}].importe`, true),
230
- })),
231
- };
232
- }
233
- /** `CuentaEnAgenteType`. */
234
- export function ctaAgenteParam(value, field = 'ctaAgente') {
235
- if (!value || typeof value !== 'object')
236
- invalid(field, 'es requerido', value);
237
- const out = { cuitAgente: cuitParam(value.cuitAgente, `${field}.cuitAgente`) };
238
- if (value.razonSocialAgente !== undefined) {
239
- out.razonSocialAgente = nonEmptyParam(value.razonSocialAgente, `${field}.razonSocialAgente`);
240
- }
241
- out.idCuenta = textParam(value.idCuenta, `${field}.idCuenta`, 3, 20);
242
- if (value.denominacion !== undefined)
243
- out.denominacion = textParam(value.denominacion, `${field}.denominacion`, 3, 250);
244
- return out;
245
- }
246
- /** Código de moneda (`xsd:string`; ej: `PES`, `DOL`). */
247
- export function monedaParam(value, field = 'codMoneda') {
248
- return nonEmptyParam(value, field);
249
- }
250
- //# sourceMappingURL=validation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAClG,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,SAAS,EACT,eAAe,EACf,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAmBxB,SAAS,OAAO,CAAC,KAAa,EAAE,OAAe,EAAE,KAAc;IAC7D,MAAM,IAAI,mBAAmB,CAAC,GAAG,KAAK,KAAK,OAAO,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AAC5F,CAAC;AAED,SAAS,SAAS,CAAI,KAAa,EAAE,KAAc,EAAE,EAAW;IAC9D,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,mBAAmB,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC;YACnD,MAAM,IAAI,mBAAmB,CAAC,GAAG,KAAK,KAAK,OAAO,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1G,CAAC;QACD,MAAM,CAAC,CAAC;IACV,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,SAAS,CAAC,KAAc,EAAE,KAAa;IACrD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,CAAC,KAAK,EAAE,gCAAgC,EAAE,KAAK,CAAC,CAAC;IACpH,OAAO,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,SAAS,CAAC,KAAc,EAAE,KAAa;IACrD,IAAI,CAAC,CAAC,KAAK,YAAY,IAAI,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,CAAC,KAAK,EAAE,8BAA8B,EAAE,KAAK,CAAC,CAAC;IACjH,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3D,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAC9D,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,QAAQ,CAAC,KAAc,EAAE,KAAa,EAAE,GAAW,EAAE,GAAW;IAC9E,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;QACxF,OAAO,CAAC,KAAK,EAAE,4BAA4B,GAAG,MAAM,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,SAAS,GAAG,KAAK,CAAC;AAExB,sCAAsC;AACtC,MAAM,UAAU,SAAS,CAAC,KAAc,EAAE,KAAa;IACrD,OAAO,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;AAC9C,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,SAAS,CAAC,KAAc,EAAE,KAAa;IACrD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;YAAE,OAAO,CAAC,KAAK,EAAE,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACrG,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/F,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,OAAO,CAAC,KAAK,EAAE,6BAA6B,EAAE,KAAK,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,WAAW,GAAG,gBAAgB,CAAC;AAErC;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,KAAc,EAAE,KAAa,EAAE,aAAa,GAAG,KAAK;IAC/E,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,KAAK,EAAE,2BAA2B,EAAE,KAAK,CAAC,CAAC;IAC7G,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IAC9C,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,WAAW;QAAE,OAAO,CAAC,KAAK,EAAE,oDAAoD,EAAE,KAAK,CAAC,CAAC;IACjH,IAAI,CAAC,aAAa,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,CAAC,KAAK,EAAE,uBAAuB,EAAE,KAAK,CAAC,CAAC;IAClF,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,eAAe,CAAC,KAAc,EAAE,KAAa;IAC3D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;QACrF,OAAO,CAAC,KAAK,EAAE,kCAAkC,EAAE,KAAK,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAC/C,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,eAAe,CAAC,KAAc,EAAE,KAAa;IAC3D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACvE,OAAO,CAAC,KAAK,EAAE,6BAA6B,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAC/C,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,SAAS,CAAC,KAAc,EAAE,KAAa,EAAE,GAAW,EAAE,GAAW;IAC/E,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,CAAC,KAAK,EAAE,uBAAuB,EAAE,KAAK,CAAC,CAAC;IAC9E,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IACvB,IAAI,CAAC,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,MAAM,GAAG,GAAG;QAAE,OAAO,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM,GAAG,aAAa,EAAE,KAAK,CAAC,CAAC;IAC3G,OAAO,CAAC,CAAC;AACX,CAAC;AAED,6BAA6B;AAC7B,MAAM,UAAU,aAAa,CAAC,KAAc,EAAE,KAAa;IACzD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,KAAK,EAAE,gCAAgC,EAAE,KAAK,CAAC,CAAC;IACpH,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,SAAS,CAAmB,KAAc,EAAE,KAAa,EAAE,MAAyB;IAClG,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAU,CAAC,EAAE,CAAC;QAC/D,OAAO,CAAC,KAAK,EAAE,oBAAoB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,KAAU,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAU,EAAE,KAAK,GAAG,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AACtF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAU,EAAE,KAAK,GAAG,cAAc,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;AAC3G,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAU,EAAE,KAAK,GAAG,WAAW,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;AAC1G,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAU,EAAE,KAAK,GAAG,qBAAqB,EAAE,EAAE,CACpF,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC;AAC3C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAU,EAAE,KAAK,GAAG,iBAAiB,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;AAEpH,wBAAwB;AACxB,MAAM,UAAU,SAAS,CAAC,KAAc,EAAE,KAAa;IACrD,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,CAAC,KAAK,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAC;IAC1E,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AAC3B,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,QAAQ,CAAC,KAAc,EAAE,KAAa;IACpD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,CAAC,KAAK,EAAE,qCAAqC,EAAE,KAAK,CAAC,CAAC;IAC5F,OAAO,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,UAAU,CAAI,KAAc,EAAE,KAAa,EAAE,QAAiB;IACrE,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IACvD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,KAAK,EAAE,4CAA4C,EAAE,KAAK,CAAC,CAAC;IACrH,OAAO,KAAY,CAAC;AACtB,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,2BAA2B;AAC3B,MAAM,UAAU,kBAAkB,CAAC,KAAqC,EAAE,KAAa;IACrF,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;IAC/E,OAAO;QACL,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,KAAK,aAAa,CAAC;QAC9D,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,KAAK,aAAa,CAAC;QAC9D,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,KAAK,SAAS,EAAE,CAAC,EAAE,KAAK,CAAC;QAC3D,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,KAAK,SAAS,EAAE,CAAC,EAAE,QAAQ,CAAC;KAC/D,CAAC;AACJ,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,aAAa,CAAC,KAAgC,EAAE,KAAK,GAAG,UAAU;IAChF,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,CAAC,KAAK,EAAE,8CAA8C,EAAE,KAAK,CAAC,CAAC;IAC/G,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC;IAC7C,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC;IACjD,IAAI,MAAM,KAAK,UAAU;QAAE,OAAO,CAAC,KAAK,EAAE,qDAAqD,EAAE,KAAK,CAAC,CAAC;IACxG,OAAO,MAAM;QACX,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,KAAK,YAAY,CAAC,EAAE;QACjE,CAAC,CAAC,EAAE,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,KAAK,YAAY,CAAC,EAAE,CAAC;AAC/E,CAAC;AAED,yBAAyB;AACzB,MAAM,UAAU,UAAU,CAAC,KAA8B,EAAE,KAAK,GAAG,OAAO;IACxE,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,CAAC,KAAK,EAAE,uCAAuC,EAAE,KAAK,CAAC,CAAC;IACxG,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,EAAE,eAAe,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,KAAK,QAAQ,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,KAAK,QAAQ,CAAC,CAAC;IACvD,IAAI,KAAK,GAAG,KAAK;QAAE,OAAO,CAAC,GAAG,KAAK,QAAQ,EAAE,oCAAoC,EAAE,KAAK,CAAC,CAAC;IAC1F,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAChC,CAAC;AAED,iCAAiC;AACjC,MAAM,UAAU,mBAAmB,CAAC,KAAkC,EAAE,KAAK,GAAG,SAAS;IACvF,MAAM,OAAO,GAAG,UAAU,CAAgB,KAAK,EAAE,KAAK,EAAE,IAAI,CAAE,CAAC;IAC/D,OAAO;QACL,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACpC,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,IAAI,CAAC,aAAa,CAAC;YAC9D,UAAU,EAAE,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC,EAAE,GAAG,CAAC;YACzE,aAAa,EAAE,SAAS,CAAC,CAAC,EAAE,aAAa,EAAE,GAAG,KAAK,IAAI,CAAC,iBAAiB,EAAE,CAAC,EAAE,GAAG,CAAC;SACnF,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,sBAAsB,CACpC,KAA0C,EAC1C,KAAK,GAAG,mBAAmB,EAC3B,QAAQ,GAAG,IAAI;IAEf,MAAM,MAAM,GAAG,UAAU,CAAwB,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACzE,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,OAAO;QACL,iBAAiB,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACvC,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC,UAAU,CAAC;YACrD,WAAW,EAAE,aAAa,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,KAAK,IAAI,CAAC,eAAe,CAAC;SACzE,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,iCAAiC;AACjC,MAAM,UAAU,mBAAmB,CAAC,KAAyC,EAAE,KAAK,GAAG,kBAAkB;IACvG,MAAM,KAAK,GAAG,UAAU,CAAuB,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACpE,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,OAAO;QACL,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAClC,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC,UAAU,CAAC;YACrD,MAAM,EAAE,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC,UAAU,CAAC;SAC/D,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,gBAAgB,CAAC,KAAmC,EAAE,KAAK,GAAG,aAAa;IACzF,MAAM,IAAI,GAAG,UAAU,CAAiB,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAC7D,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,OAAO;QACL,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC3B,MAAM,GAAG,GAAQ;gBACf,OAAO,EAAE,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC,WAAW,CAAC;gBACxD,OAAO,EAAE,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC,WAAW,CAAC;gBAC3D,UAAU,EAAE,eAAe,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,KAAK,IAAI,CAAC,cAAc,CAAC;aACxE,CAAC;YACF,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS;gBAAE,GAAG,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,GAAG,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;YAC9G,OAAO,GAAG,CAAC;QACb,CAAC,CAAC;KACH,CAAC;AACJ,CAAC;AAED,mCAAmC;AACnC,MAAM,UAAU,YAAY,CAAC,KAAoC,EAAE,KAAK,GAAG,kBAAkB;IAC3F,MAAM,OAAO,GAAG,UAAU,CAAkB,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACjE,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7B,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC,UAAU,CAAC;YACrD,OAAO,EAAE,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;SAClE,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,4BAA4B;AAC5B,MAAM,UAAU,cAAc,CAAC,KAAsC,EAAE,KAAK,GAAG,WAAW;IACxF,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;IAC/E,MAAM,GAAG,GAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,KAAK,aAAa,CAAC,EAAE,CAAC;IACpF,IAAI,KAAK,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;QAC1C,GAAG,CAAC,iBAAiB,GAAG,aAAa,CAAC,KAAK,CAAC,iBAAiB,EAAE,GAAG,KAAK,oBAAoB,CAAC,CAAC;IAC/F,CAAC;IACD,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,KAAK,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACrE,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS;QAAE,GAAG,CAAC,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,KAAK,eAAe,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IACxH,OAAO,GAAG,CAAC;AACb,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,WAAW,CAAC,KAAc,EAAE,KAAK,GAAG,WAAW;IAC7D,OAAO,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACrC,CAAC"}