dmencu 2.2.16 → 3.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/dist/client/client/client.d.ts +4 -1
- package/dist/client/client/client.js +165 -271
- package/dist/client/unlogged/abrir-formulario.d.ts +1 -8
- package/dist/client/unlogged/abrir-formulario.js +7 -48
- package/dist/client/unlogged/bypass-formulario.d.ts +2 -2
- package/dist/client/unlogged/bypass-formulario.js +26 -14
- package/dist/client/unlogged/redux-formulario.d.ts +141 -92
- package/dist/client/unlogged/redux-formulario.js +36 -85
- package/dist/client/unlogged/render-config.d.ts +52 -0
- package/dist/client/unlogged/render-config.js +161 -0
- package/dist/client/unlogged/render-formulario.d.ts +139 -0
- package/dist/client/unlogged/render-formulario.js +2045 -0
- package/dist/client/unlogged/render-formulario.tsx +610 -234
- package/dist/client/unlogged/render-general.d.ts +147 -0
- package/dist/client/unlogged/render-general.js +254 -0
- package/dist/client/unlogged/render-general.tsx +9 -3
- package/dist/client/unlogged/render-init.d.ts +17 -0
- package/dist/client/unlogged/render-init.js +127 -0
- package/dist/client/unlogged/tipos.d.ts +6 -4
- package/dist/client/unlogged/tipos.js +1 -1
- package/dist/server/server/app-dmencu.d.ts +8 -2
- package/dist/server/server/app-dmencu.js +20 -9
- package/dist/server/server/procedures-dmencu.d.ts +1 -1
- package/dist/server/server/procedures-dmencu.js +24 -21
- package/dist/server/server/table-sincronizaciones.js +3 -2
- package/dist/server/unlogged/tipos.d.ts +6 -4
- package/dist/server/unlogged/tipos.js +1 -1
- package/dist/unlogged/unlogged/abrir-formulario.d.ts +1 -8
- package/dist/unlogged/unlogged/abrir-formulario.js +7 -48
- package/dist/unlogged/unlogged/bypass-formulario.d.ts +2 -2
- package/dist/unlogged/unlogged/bypass-formulario.js +26 -14
- package/dist/unlogged/unlogged/redux-formulario.d.ts +141 -92
- package/dist/unlogged/unlogged/redux-formulario.js +36 -85
- package/dist/unlogged/unlogged/render-config.d.ts +52 -0
- package/dist/unlogged/unlogged/render-config.js +161 -0
- package/dist/unlogged/unlogged/render-formulario.d.ts +57 -10
- package/dist/unlogged/unlogged/render-formulario.js +365 -171
- package/dist/unlogged/unlogged/render-formulario.tsx +610 -234
- package/dist/unlogged/unlogged/render-general.d.ts +10 -0
- package/dist/unlogged/unlogged/render-general.js +8 -4
- package/dist/unlogged/unlogged/render-general.tsx +9 -3
- package/dist/unlogged/unlogged/render-init.d.ts +17 -0
- package/dist/unlogged/unlogged/render-init.js +127 -0
- package/dist/unlogged/unlogged/tipos.d.ts +6 -4
- package/dist/unlogged/unlogged/tipos.js +1 -1
- package/dist/unlogged/unlogged/unlogged.js +234 -50
- package/package.json +1 -1
|
@@ -13,27 +13,23 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
13
13
|
if (v !== undefined) module.exports = v;
|
|
14
14
|
}
|
|
15
15
|
else if (typeof define === "function" && define.amd) {
|
|
16
|
-
define(["require", "exports", "redux", "./tipos", "redux-typed-reducer", "like-ar", "
|
|
16
|
+
define(["require", "exports", "redux", "./tipos", "redux-typed-reducer", "like-ar", "json4all", "./render-config"], factory);
|
|
17
17
|
}
|
|
18
18
|
})(function (require, exports) {
|
|
19
19
|
"use strict";
|
|
20
20
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
21
|
exports.dispatchers = void 0;
|
|
22
22
|
exports.replaceSpecialWords = replaceSpecialWords;
|
|
23
|
-
exports.gotoSincronizar = gotoSincronizar;
|
|
24
|
-
exports.gotoCampo = gotoCampo;
|
|
25
23
|
exports.gotoConsistir = gotoConsistir;
|
|
26
|
-
exports.
|
|
27
|
-
exports.
|
|
28
|
-
exports.dmTraerDatosFormulario = dmTraerDatosFormulario;
|
|
24
|
+
exports.adaptarEstructura = adaptarEstructura;
|
|
25
|
+
exports.crearStoreFormulario = crearStoreFormulario;
|
|
29
26
|
const redux_1 = require("redux");
|
|
30
27
|
const tipos_1 = require("./tipos");
|
|
31
28
|
const redux_typed_reducer_1 = require("redux-typed-reducer");
|
|
32
29
|
const likeAr = require("like-ar");
|
|
33
|
-
const bestGlobals = require("best-globals");
|
|
34
30
|
const JSON4all = require("json4all");
|
|
31
|
+
const render_config_1 = require("./render-config");
|
|
35
32
|
var my = myOwn;
|
|
36
|
-
const LOCAL_STORAGE_STATE_NAME = 'hdr-state';
|
|
37
33
|
function forPkToUrl(forPk, pilaForPk) {
|
|
38
34
|
var addrParams = myOwn.UriSearchToObject(location.hash || location.search || '');
|
|
39
35
|
myOwn.replaceAddrParams(Object.assign(Object.assign({}, addrParams), { state_forPk: forPk == null ? 'null' : (0, tipos_1.toPlainForPk)(forPk), state_pilaForPk: pilaForPk.map(tipos_1.toPlainForPk).join('|') }));
|
|
@@ -42,6 +38,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
42
38
|
MODO_DESPLIEGUE: (payload) => function (state) {
|
|
43
39
|
return Object.assign(Object.assign({}, state), { opciones: Object.assign(Object.assign({}, state.opciones), { modoDespliegue: payload.modoDespliegue }) });
|
|
44
40
|
},
|
|
41
|
+
CAMBIAR_MODO_DM: (payload) => function (state) {
|
|
42
|
+
return Object.assign(Object.assign({}, state), { opciones: Object.assign(Object.assign({}, state.opciones), { modoDM: payload.modoDM }) });
|
|
43
|
+
},
|
|
45
44
|
CAMBIAR_FORMULARIO: (payload) => function (state) {
|
|
46
45
|
var forPk = payload.forPk;
|
|
47
46
|
var pilaForPk = payload.apilarVuelta ? (state.opciones.forPk == null ? [] : [...state.opciones.pilaForPk, state.opciones.forPk]) : state.opciones.pilaForPk;
|
|
@@ -56,23 +55,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
56
55
|
return Object.assign(Object.assign({}, state), { opciones: Object.assign(Object.assign({}, state.opciones), { forPk,
|
|
57
56
|
pilaForPk }) });
|
|
58
57
|
},
|
|
59
|
-
ESTADO_CARGA: (_payload) => function (state) {
|
|
60
|
-
return state;
|
|
61
|
-
//DESACTIVADO
|
|
62
|
-
//return {
|
|
63
|
-
// ...state,
|
|
64
|
-
// datos:{
|
|
65
|
-
// ...state.datos,
|
|
66
|
-
// cargas:{
|
|
67
|
-
// ...state.datos.cargas,
|
|
68
|
-
// [payload.idCarga]: {
|
|
69
|
-
// ...state.datos.cargas[payload.idCarga],
|
|
70
|
-
// estado_carga: payload.estado_carga
|
|
71
|
-
// }
|
|
72
|
-
// }
|
|
73
|
-
// }
|
|
74
|
-
//}
|
|
75
|
-
},
|
|
76
58
|
VOLVER_HDR: (_payload) => function (state) {
|
|
77
59
|
var forPk = null;
|
|
78
60
|
var pilaForPk = [];
|
|
@@ -81,17 +63,15 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
81
63
|
pilaForPk }) });
|
|
82
64
|
},
|
|
83
65
|
SET_OPCION: (payload) => function (state) {
|
|
84
|
-
return Object.assign(Object.assign({}, state), { opciones: Object.assign(Object.assign({}, state.opciones), {
|
|
66
|
+
return Object.assign(Object.assign({}, state), { opciones: Object.assign(Object.assign({}, state.opciones), {
|
|
67
|
+
//si cambia de pantalla por acá reseteo el aviso por las dudas
|
|
68
|
+
avisoPersistente: payload.opcion == 'pantallaActual' ? null : state.opciones.avisoPersistente, [payload.opcion]: payload.valor }) });
|
|
85
69
|
},
|
|
86
70
|
RESET_OPCIONES: (_payload) => function (state) {
|
|
87
|
-
return Object.assign(Object.assign({}, state), { opciones: Object.assign(Object.assign({}, state.opciones), { forPk: null }) });
|
|
71
|
+
return Object.assign(Object.assign({}, state), { opciones: Object.assign(Object.assign({}, state.opciones), { pantallaActual: 'hdr', avisoPersistente: null, forPk: null }) });
|
|
88
72
|
},
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
return state;
|
|
92
|
-
return Object.assign(Object.assign({}, state), {
|
|
93
|
-
// @ts-ignore copio los datos iniciales
|
|
94
|
-
datos: bestGlobals.deepCopy(state.modo.demo) });
|
|
73
|
+
SET_PANTALLA_ACTUAL: (payload) => function (state) {
|
|
74
|
+
return Object.assign(Object.assign({}, state), { opciones: Object.assign(Object.assign({}, state.opciones), { pantallaActual: payload.pantalla, avisoPersistente: payload.avisoPersistente || null }) });
|
|
95
75
|
},
|
|
96
76
|
CONFIRMAR_BORRAR_RESPUESTA: (payload) => function (state) {
|
|
97
77
|
return Object.assign(Object.assign({}, state), { opciones: Object.assign(Object.assign({}, state.opciones), { forPk: payload.forPk, modoBorrarRespuesta: payload.variable }) });
|
|
@@ -219,58 +199,34 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
219
199
|
return simplificatedChars[matched.toLowerCase()];
|
|
220
200
|
});
|
|
221
201
|
}
|
|
222
|
-
function gotoSincronizar() {
|
|
223
|
-
history.replaceState(null, '', `${location.origin + location.pathname}/../menu#i=sincronizar`);
|
|
224
|
-
location.reload();
|
|
225
|
-
}
|
|
226
|
-
function gotoCampo() {
|
|
227
|
-
history.replaceState(null, '', `${location.origin + location.pathname}/../campo`);
|
|
228
|
-
location.reload();
|
|
229
|
-
}
|
|
230
202
|
function gotoConsistir(operativo, tarea, enc) {
|
|
231
203
|
// TODO-2023-03: probar con esto:
|
|
232
204
|
history.replaceState(null, '', `${location.origin + location.pathname}/../menu#w=consistir_encuesta&up=${JSON4all.toUrl({ operativo, tarea, enc })}&autoproced=true`);
|
|
233
205
|
// history.replaceState(null, '', `${location.origin+location.pathname}/../menu#w=consistir_encuesta&up={"operativo":"${operativo}","tarea":"${tarea}","encuesta":${encuesta}}&autoproced=true`);
|
|
234
206
|
location.reload();
|
|
235
207
|
}
|
|
236
|
-
function
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
// casillerosOriginales['F:F2_personas']=casillerosOriginales['F:F2'].childs.find(casillero=>casillero.data.casillero=='LP');
|
|
254
|
-
var mainForm;
|
|
255
|
-
//@ts-ignore
|
|
256
|
-
var casillerosTodosFormularios = likeAr(casillerosOriginales).map((casillerosJerarquizados, idFormulario) => {
|
|
257
|
-
var casillerosAplanados = aplanarLaCurva(casillerosJerarquizados);
|
|
258
|
-
if (casillerosAplanados.tipoc == 'F' && casillerosAplanados.formulario_principal) {
|
|
259
|
-
mainForm = idFormulario;
|
|
260
|
-
}
|
|
261
|
-
return {
|
|
262
|
-
casilleros: casillerosAplanados,
|
|
263
|
-
estructuraRowValidator: generarEstructuraRowValidator(casillerosAplanados, idFormulario)
|
|
264
|
-
};
|
|
265
|
-
}).plain();
|
|
266
|
-
estructura.formularios = casillerosTodosFormularios;
|
|
267
|
-
return estructura;
|
|
268
|
-
});
|
|
208
|
+
function adaptarEstructura(estructuraBackend) {
|
|
209
|
+
var estructura = estructuraBackend;
|
|
210
|
+
var casillerosOriginales = estructura.formularios;
|
|
211
|
+
var mainForm;
|
|
212
|
+
//@ts-ignore
|
|
213
|
+
var casillerosTodosFormularios = likeAr(casillerosOriginales).map((casillerosJerarquizados, idFormulario) => {
|
|
214
|
+
var casillerosAplanados = aplanarLaCurva(casillerosJerarquizados);
|
|
215
|
+
if (casillerosAplanados.tipoc == 'F' && casillerosAplanados.formulario_principal) {
|
|
216
|
+
mainForm = idFormulario;
|
|
217
|
+
}
|
|
218
|
+
return {
|
|
219
|
+
casilleros: casillerosAplanados,
|
|
220
|
+
estructuraRowValidator: generarEstructuraRowValidator(casillerosAplanados, idFormulario)
|
|
221
|
+
};
|
|
222
|
+
}).plain();
|
|
223
|
+
estructura.formularios = casillerosTodosFormularios;
|
|
224
|
+
return estructura;
|
|
269
225
|
}
|
|
270
|
-
function
|
|
226
|
+
function crearStoreFormulario(opts) {
|
|
271
227
|
return __awaiter(this, void 0, void 0, function* () {
|
|
272
|
-
var getCasoState = ()
|
|
273
|
-
var setCasoState = (
|
|
228
|
+
var getCasoState = (0, render_config_1.getFormRenderer)().getCasoState.bind((0, render_config_1.getFormRenderer)());
|
|
229
|
+
var setCasoState = (0, render_config_1.getFormRenderer)().setCasoState.bind((0, render_config_1.getFormRenderer)());
|
|
274
230
|
var loadState = function loadState() {
|
|
275
231
|
return __awaiter(this, void 0, void 0, function* () {
|
|
276
232
|
var casoState = getCasoState();
|
|
@@ -282,15 +238,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
282
238
|
modoDirecto: false,
|
|
283
239
|
conCampoOpciones: false,
|
|
284
240
|
saltoAutomatico: true,
|
|
285
|
-
bienvenido: true,
|
|
286
241
|
modoBorrarRespuesta: null,
|
|
242
|
+
pantallaActual: 'hdr',
|
|
243
|
+
avisoPersistente: null
|
|
287
244
|
}, // poner los valores por defecto más abajo
|
|
288
|
-
modo: {
|
|
289
|
-
//@ts-ignore es un booleano pero pongo ahí los datos de demo!
|
|
290
|
-
demo:
|
|
291
|
-
// @ts-ignore
|
|
292
|
-
myOwn.config.config.ambiente == 'test' || myOwn.config.config.ambiente == 'demo',
|
|
293
|
-
}
|
|
294
245
|
};
|
|
295
246
|
if (casoState) {
|
|
296
247
|
initialState = Object.assign(Object.assign({}, initialState), { opciones: casoState.opciones });
|
|
@@ -330,4 +281,4 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
330
281
|
});
|
|
331
282
|
}
|
|
332
283
|
});
|
|
333
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgtZm9ybXVsYXJpby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91bmxvZ2dlZC9yZWR1eC1mb3JtdWxhcmlvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQTJTQSxrREFjQztJQUVELDBDQUdDO0lBRUQsOEJBR0M7SUFFRCxzQ0FLQztJQUVELDBDQUVDO0lBWUQsMENBdUJDO0lBRUQsd0RBNkRDO0lBaGJELGlDQUFvQztJQUNwQyxtQ0FXaUI7SUFDakIsNkRBQW9GO0lBQ3BGLGtDQUFrQztJQUNsQyw0Q0FBNEM7SUFDNUMscUNBQXFDO0lBSXJDLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQztJQUVmLE1BQU0sd0JBQXdCLEdBQUcsV0FBVyxDQUFDO0lBRTdDLFNBQVMsVUFBVSxDQUFDLEtBQW1CLEVBQUUsU0FBa0I7UUFDdkQsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNqRixLQUFLLENBQUMsaUJBQWlCLGlDQUNoQixVQUFVLEtBQ2IsV0FBVyxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBQSxvQkFBWSxFQUFDLEtBQUssQ0FBQyxFQUN6RCxlQUFlLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxvQkFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUN4RCxDQUFDO0lBQ1AsQ0FBQztJQUVELElBQUksUUFBUSxHQUFHO1FBQ1gsZUFBZSxFQUFFLENBQUMsT0FBMkMsRUFBRSxFQUFFLENBQzdELFVBQVUsS0FBZ0I7WUFDdEIsdUNBQ08sS0FBSyxLQUNSLFFBQVEsa0NBQ0QsS0FBSyxDQUFDLFFBQVEsS0FDakIsY0FBYyxFQUFFLE9BQU8sQ0FBQyxjQUFjLE9BRTdDO1FBQ0wsQ0FB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LENBQUM7b0JBQ0QsT0FBTyxZQUFZLENBQUM7Z0JBQ3hCLENBQUM7YUFBQSxDQUFBO1lBQ0QsSUFBSSxTQUFTLEdBQUcsU0FBUyxTQUFTLENBQUMsS0FBZ0I7Z0JBQy9DLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QixDQUFDLENBQUE7WUFDRCw0QkFBNEI7WUFDNUIsSUFBSSxZQUFZLEdBQWMsTUFBTSxTQUFTLEVBQUUsQ0FBQztZQUNoRCxNQUFNLFVBQVUsR0FBRyxJQUFBLG1DQUFhLEVBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQ3pELGdDQUFnQztZQUNoQywrQkFBK0I7WUFDL0Isb0JBQW9CO1lBQ3BCLE1BQU0sS0FBSyxHQUFHLElBQUEsbUJBQVcsRUFBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDcEQsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzVCLEtBQUssQ0FBQyxTQUFTLENBQUM7Z0JBQ1osU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ2hDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsd0JBQXdCO1lBQ3hCLHNCQUFzQjtZQUN0QixPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO0tBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVTdG9yZSB9IGZyb20gXCJyZWR1eFwiO1xyXG5pbXBvcnQge1xyXG4gICAgQ2FzaWxsZXJvc0ltcGxlbWVudGFkb3MsIENhc29TdGF0ZSxcclxuICAgIEVzdGFkb0NhcmdhLCBFc3RydWN0dXJhUm93VmFsaWRhdG9yLFxyXG4gICAgRm9ybXVsYXJpbywgRm9yUGssIEZvclBrUmFpeixcclxuICAgIElkQ2FyZ2EsIElkRGVzdGlubywgSWRGb3JtdWxhcmlvLCBJZFZhcmlhYmxlLCBJZE9wZXJhdGl2byxcclxuICAgIE1vZG9EZXNwbGllZ3VlLFxyXG4gICAgT3BjaW9uLFxyXG4gICAgdG9QbGFpbkZvclBrLFxyXG4gICAgSWRGaW4sXHJcbiAgICBJZEVuYyxcclxuICAgIElkVGFyZWEsXHJcbn0gZnJvbSBcIi4vdGlwb3NcIjtcclxuaW1wb3J0IHsgY3JlYXRlUmVkdWNlciwgY3JlYXRlRGlzcGF0Y2hlcnMsIEFjdGlvbnNGcm9tIH0gZnJvbSBcInJlZHV4LXR5cGVkLXJlZHVjZXJcIjtcclxuaW1wb3J0ICogYXMgbGlrZUFyIGZyb20gXCJsaWtlLWFyXCI7XHJcbmltcG9ydCAqIGFzIGJlc3RHbG9iYWxzIGZyb20gXCJiZXN0LWdsb2JhbHNcIjtcclxuaW1wb3J0ICogYXMgSlNPTjRhbGwgZnJvbSBcImpzb240YWxsXCI7XHJcblxyXG5pbXBvcnQgeyBPcGNpb24gYXMgUm93VmFsaWRhdG9yT3BjaW9uIH0gZnJvbSBcInJvdy12YWxpZGF0b3JcIjtcclxuXHJcbnZhciBteSA9IG15T3duO1xyXG5cclxuY29uc3QgTE9DQUxfU1RPUkFHRV9TVEFURV9OQU1FID0gJ2hkci1zdGF0ZSc7XHJcblxyXG5mdW5jdGlvbiBmb3JQa1RvVXJsKGZvclBrOiBGb3JQayB8IG51bGwsIHBpbGFGb3JQazogRm9yUGtbXSkge1xyXG4gICAgdmFyIGFkZHJQYXJhbXMgPSBteU93bi5VcmlTZWFyY2hUb09iamVjdChsb2NhdGlvbi5oYXNoIHx8IGxvY2F0aW9uLnNlYXJjaCB8fCAnJyk7XHJcbiAgICBteU93bi5yZXBsYWNlQWRkclBhcmFtcyh7XHJcbiAgICAgICAgLi4uYWRkclBhcmFtcyxcclxuICAgICAgICBzdGF0ZV9mb3JQazogZm9yUGsgPT0gbnVsbCA/ICdudWxsJyA6IHRvUGxhaW5Gb3JQayhmb3JQayksXHJcbiAgICAgICAgc3RhdGVfcGlsYUZvclBrOiBwaWxhRm9yUGsubWFwKHRvUGxhaW5Gb3JQaykuam9pbignfCcpXHJcbiAgICB9KTtcclxufVxyXG5cclxudmFyIHJlZHVjZXJzID0ge1xyXG4gICAgTU9ET19ERVNQTElFR1VFOiAocGF5bG9hZDogeyBtb2RvRGVzcGxpZWd1ZTogTW9kb0Rlc3BsaWVndWUgfSkgPT5cclxuICAgICAgICBmdW5jdGlvbiAoc3RhdGU6IENhc29TdGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBvcGNpb25lczoge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLm9wY2lvbmVzLFxyXG4gICAgICAgICAgICAgICAgICAgIG1vZG9EZXNwbGllZ3VlOiBwYXlsb2FkLm1vZG9EZXNwbGllZ3VlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgQ0FNQklBUl9GT1JNVUxBUklPOiAocGF5bG9hZDogeyBmb3JQazogRm9yUGssIGFwaWxhclZ1ZWx0YTogYm9vbGVhbiB9KSA9PlxyXG4gICAgICAgIGZ1bmN0aW9uIChzdGF0ZTogQ2Fzb1N0YXRlKSB7XHJcbiAgICAgICAgICAgIHZhciBmb3JQayA9IHBheWxvYWQuZm9yUGs7XHJcbiAgICAgICAgICAgIHZhciBwaWxhRm9yUGsgPSBwYXlsb2FkLmFwaWxhclZ1ZWx0YSA/IChcclxuICAgICAgICAgICAgICAgIHN0YXRlLm9wY2lvbmVzLmZvclBrID09IG51bGwgPyBbXSA6IFsuLi5zdGF0ZS5vcGNpb25lcy5waWxhRm9yUGssIHN0YXRlLm9wY2lvbmVzLmZvclBrXVxyXG4gICAgICAgICAgICApIDogc3RhdGUub3BjaW9uZXMucGlsYUZvclBrO1xyXG4gICAgICAgICAgICBmb3JQa1RvVXJsKGZvclBrLCBwaWxhRm9yUGspO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBvcGNpb25lczoge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLm9wY2lvbmVzLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvclBrLFxyXG4gICAgICAgICAgICAgICAgICAgIHBpbGFGb3JQa1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgIFZPTFZFUl9ERV9GT1JNVUxBUklPOiAoeyBtYWduaXR1ZFJldHJvY2VzbyB9OiB7IG1hZ25pdHVkUmV0cm9jZXNvOiBudW1iZXIgfSkgPT5cclxuICAgICAgICBmdW5jdGlvbiAoc3RhdGU6IENhc29TdGF0ZSkge1xyXG4gICAgICAgICAgICB2YXIgZm9yUGsgPSBzdGF0ZS5vcGNpb25lcy5waWxhRm9yUGtbc3RhdGUub3BjaW9uZXMucGlsYUZvclBrLmxlbmd0aCAtIG1hZ25pdHVkUmV0cm9jZXNvXSB8fCBudWxsO1xyXG4gICAgICAgICAgICB2YXIgcGlsYUZvclBrID0gc3RhdGUub3BjaW9uZXMucGlsYUZvclBrLnNsaWNlKDAsIHN0YXRlLm9wY2lvbmVzLnBpbGFGb3JQay5sZW5ndGggLSBtYWduaXR1ZFJldHJvY2Vzbyk7XHJcbiAgICAgICAgICAgIGZvclBrVG9VcmwoZm9yUGssIHBpbGFGb3JQayk7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcclxuICAgICAgICAgICAgICAgIG9wY2lvbmVzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGUub3BjaW9uZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yUGssXHJcbiAgICAgICAgICAgICAgICAgICAgcGlsYUZvclBrXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgRVNUQURPX0NBUkdBOiAoX3BheWxvYWQ6IHsgaWRDYXJnYTogSWRDYXJnYSwgZXN0YWRvX2NhcmdhOiBFc3RhZG9DYXJnYSB9KSA9PlxyXG4gICAgICAgIGZ1bmN0aW9uIChzdGF0ZTogQ2Fzb1N0YXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZVxyXG4gICAgICAgICAgICAvL0RFU0FDVElWQURPXHJcbiAgICAgICAgICAgIC8vcmV0dXJuIHtcclxuICAgICAgICAgICAgLy8gICAgLi4uc3RhdGUsXHJcbiAgICAgICAgICAgIC8vICAgIGRhdG9zOntcclxuICAgICAgICAgICAgLy8gICAgICAgIC4uLnN0YXRlLmRhdG9zLFxyXG4gICAgICAgICAgICAvLyAgICAgICAgY2FyZ2FzOntcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAuLi5zdGF0ZS5kYXRvcy5jYXJnYXMsXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgW3BheWxvYWQuaWRDYXJnYV06IHtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgLi4uc3RhdGUuZGF0b3MuY2FyZ2FzW3BheWxvYWQuaWRDYXJnYV0sXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgIGVzdGFkb19jYXJnYTogcGF5bG9hZC5lc3RhZG9fY2FyZ2FcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vICAgIH1cclxuICAgICAgICAgICAgLy99XHJcbiAgICAgICAgfSxcclxuICAgIFZPTFZFUl9IRFI6IChfcGF5bG9hZDoge30pID0+XHJcbiAgICAgICAgZnVuY3Rpb24gKHN0YXRlOiBDYXNvU3RhdGUpIHtcclxuICAgICAgICAgICAgdmFyIGZvclBrID0gbnVsbDtcclxuICAgICAgICAgICAgdmFyIHBpbGFGb3JQazogRm9yUGtbXSA9IFtdO1xyXG4gICAgICAgICAgICBmb3JQa1RvVXJsKGZvclBrLCBwaWxhRm9yUGspO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBvcGNpb25lczoge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLm9wY2lvbmVzLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvclBrLFxyXG4gICAgICAgICAgICAgICAgICAgIHBpbGFGb3JQa1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgIFNFVF9PUENJT046IChwYXlsb2FkOiB7IG9wY2lvbjoga2V5b2YgQ2Fzb1N0YXRlWydvcGNpb25lcyddLCB2YWxvcjogYW55IH0pID0+XHJcbiAgICAgICAgZnVuY3Rpb24gKHN0YXRlOiBDYXNvU3RhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxyXG4gICAgICAgICAgICAgICAgb3BjaW9uZXM6IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZS5vcGNpb25lcyxcclxuICAgICAgICAgICAgICAgICAgICBbcGF5bG9hZC5vcGNpb25dOiBwYXlsb2FkLnZhbG9yXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgUkVTRVRfT1BDSU9ORVM6IChfcGF5bG9hZDoge30pID0+XHJcbiAgICAgICAgZnVuY3Rpb24gKHN0YXRlOiBDYXNvU3RhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxyXG4gICAgICAgICAgICAgICAgb3BjaW9uZXM6IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZS5vcGNpb25lcyxcclxuICAgICAgICAgICAgICAgICAgICBmb3JQazogbnVsbFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgIFJFSU5JQ0lBUl9ERU1POiAoX3BheWxvYWQ6IHt9KSA9PlxyXG4gICAgICAgIGZ1bmN0aW9uIChzdGF0ZTogQ2Fzb1N0YXRlKSB7XHJcbiAgICAgICAgICAgIGlmICghc3RhdGUubW9kby5kZW1vKSByZXR1cm4gc3RhdGU7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcclxuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgY29waW8gbG9zIGRhdG9zIGluaWNpYWxlc1xyXG4gICAgICAgICAgICAgICAgZGF0b3M6IGJlc3RHbG9iYWxzLmRlZXBDb3B5KHN0YXRlLm1vZG8uZGVtbylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICBDT05GSVJNQVJfQk9SUkFSX1JFU1BVRVNUQTogKHBheWxvYWQ6IHsgZm9yUGs6IEZvclBrLCB2YXJpYWJsZTogSWRWYXJpYWJsZSB8IG51bGwgfSkgPT5cclxuICAgICAgICBmdW5jdGlvbiAoc3RhdGU6IENhc29TdGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBvcGNpb25lczoge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLm9wY2lvbmVzLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvclBrOiBwYXlsb2FkLmZvclBrLFxyXG4gICAgICAgICAgICAgICAgICAgIG1vZG9Cb3JyYXJSZXNwdWVzdGE6IHBheWxvYWQudmFyaWFibGVcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEFjdGlvbkZvcm11bGFyaW9TdGF0ZSA9IEFjdGlvbnNGcm9tPHR5cGVvZiByZWR1Y2Vycz47XHJcbi8qIEZJTiBBQ0NJT05FUyAqL1xyXG5cclxuZXhwb3J0IGNvbnN0IGRpc3BhdGNoZXJzID0gY3JlYXRlRGlzcGF0Y2hlcnMocmVkdWNlcnMpO1xyXG5cclxuaW50ZXJmYWNlIElEYXRhU2VwYXJhZGE8VCBleHRlbmRzIHsgdGlwb2M6IHN0cmluZyB9PiB7XHJcbiAgICBkYXRhOiBULFxyXG4gICAgY2hpbGRzOiBJRGF0YVNlcGFyYWRhPFQ+W11cclxufVxyXG5cclxudHlwZSBJRGF0YUNvbkNhc2lsbGVyb3M8VD4gPSBUICYge1xyXG4gICAgY2FzaWxsZXJvczogcmVhZG9ubHkgSURhdGFDb25DYXNpbGxlcm9zPFQ+W11cclxufVxyXG5cclxuY29uc3QgY2FzaWxsZXJvVmFjaW8gPSB7XHJcbiAgICBzYWx0bzogbnVsbCwgZGVzcGxpZWd1ZTogbnVsbCwgYWNsYXJhY2lvbjogbnVsbCwgdmVyX2lkOiBudWxsLCBjYXNpbGxlcm9zOiBbXSwgbGVlcjogbnVsbCxcclxuICAgIGRlc3BsaWVndWVFbmNhYmV6YWRvOiBudWxsLCBkZXNwbGllZ3VlQ29udGVuaWRvOiBudWxsLCBkZXNwbGllZ3VlT2N1bHRhOiBudWxsLCBkZXNwbGllZ3VlVGlwb0lucHV0OiBudWxsXHJcbn1cclxuXHJcbmNvbnN0IG9wY2lvbmVzU2lObzogT3BjaW9uW10gPSBbXHJcbiAgICB7IC4uLmNhc2lsbGVyb1ZhY2lvLCBjYXNpbGxlcm86IDEsIHRpcG9jOiAnTycsIG5vbWJyZTogJ1PDrScgfSxcclxuICAgIHsgLi4uY2FzaWxsZXJvVmFjaW8sIGNhc2lsbGVybzogMiwgdGlwb2M6ICdPJywgbm9tYnJlOiAnTm8nIH0sXHJcbl1cclxuXHJcbnR5cGUgQ2FyYWNlcml6YWNpb25Fc3RhZG9Sb3dWYWxpZGF0b3IgPSB7XHJcbiAgICBjb3JyZWN0bzogYm9vbGVhbixcclxuICAgIGNvblZhbG9yOiBib29sZWFuIHwgbnVsbCwgLy8gbnVsbCA9IHVua25vd25cclxufVxyXG5cclxuZnVuY3Rpb24gYXBsYW5hckxhQ3VydmE8VCBleHRlbmRzIHsgdGlwb2M6IHN0cmluZywgZGVzcGxpZWd1ZT86IHN0cmluZyB9PihjYXNpbGxlcm9zRGF0YTogSURhdGFTZXBhcmFkYTxUPik6IElEYXRhQ29uQ2FzaWxsZXJvczxUIHwgT3BjaW9uPiB7XHJcbiAgICB2YXIgZGF0YSA9IGNhc2lsbGVyb3NEYXRhLmRhdGFcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uZGF0YSxcclxuICAgICAgICBkZXNwbGllZ3VlQ29udGVuaWRvOiBkYXRhLmRlc3BsaWVndWU/LmluY2x1ZGVzKCdob3Jpem9udGFsJykgPyAnaG9yaXpvbnRhbCcgOiBkYXRhLmRlc3BsaWVndWU/LmluY2x1ZGVzKCd2ZXJ0aWNhbCcpID8gJ3ZlcnRpY2FsJyA6IG51bGwsXHJcbiAgICAgICAgZGVzcGxpZWd1ZUVuY2FiZXphZG86IGRhdGEuZGVzcGxpZWd1ZT8uaW5jbHVkZXMoJ2xhdGVyYWwnKSA/ICdsYXRlcmFsJyA6IGRhdGEuZGVzcGxpZWd1ZT8uaW5jbHVkZXMoJ3N1cGVyaW9yJykgPyAnc3VwZXJpb3InIDogbnVsbCxcclxuICAgICAgICBkZXNwbGllZ3VlT2N1bHRhOiBkYXRhLmRlc3BsaWVndWU/LmluY2x1ZGVzKCdvY3VsdGFyJykgPz8gbnVsbCxcclxuICAgICAgICBkZXNwbGllZ3VlVGlwb0lucHV0OiBkYXRhLmRlc3BsaWVndWU/LmluY2x1ZGVzKCd0ZWxlZm9ubycpID8gJ3RlbCcgOiBudWxsLFxyXG4gICAgICAgIGNhc2lsbGVyb3M6ICFjYXNpbGxlcm9zRGF0YS5jaGlsZHMubGVuZ3RoICYmIGNhc2lsbGVyb3NEYXRhLmRhdGEudGlwb2MgPT0gJ09NJyA/IG9wY2lvbmVzU2lObyA6XHJcbiAgICAgICAgICAgIGNhc2lsbGVyb3NEYXRhLmNoaWxkcy5tYXAoY2FzaWxsZXJvID0+IGFwbGFuYXJMYUN1cnZhKGNhc2lsbGVybykpXHJcbiAgICB9XHJcbn1cclxuXHJcbi8vIHR5cGUgQW55UmVmPFQgZXh0ZW5kcyB7fT49W1QsIGtleW9mIFRdO1xyXG5cclxuZnVuY3Rpb24gcmVsbGVuYXJWYXJpYWJsZXNZT3BjaW9uZXMoaWRGb3JtdWxhcmlvOiBJZEZvcm11bGFyaW8sIGVzdHJ1Y3R1cmE6IEVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3IsIGNhc2lsbGVybzogQ2FzaWxsZXJvc0ltcGxlbWVudGFkb3MsIHVuaWRhZEFuYWxpc2lzPzogc3RyaW5nIHwgbnVsbCxcclxuICAgIHN1Ym9yZGluYWRhVmFyPzogSWRWYXJpYWJsZSwgc3Vib3JkaW5hZGFWYWxvcj86IGFueVxyXG4pIHtcclxuICAgIGlmIChjYXNpbGxlcm8udmFyX25hbWUgIT0gbnVsbCB8fCBjYXNpbGxlcm8udGlwb2MgPT0gJ0ZJTFRSTycpIHtcclxuICAgICAgICB2YXIgdmFyX25hbWU6IElkVmFyaWFibGVcclxuICAgICAgICBpZiAoY2FzaWxsZXJvLnRpcG9jID09ICdGSUxUUk8nKSB7XHJcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgcG9uZ28gY29tbyBub21icmUgZGUgdmFyaWFibGUgZWwgZmlsdHJvO1xyXG4gICAgICAgICAgICB2YXJfbmFtZSA9IGNhc2lsbGVyby5jYXNpbGxlcm87XHJcbiAgICAgICAgfSBlbHNlIGlmIChjYXNpbGxlcm8udmFyX25hbWUuZW5kc1dpdGgoJyEnKSkge1xyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlIGxhcyB2YXJpYWJsZXMgZXNwZWpvIHNvbiBsYXMgcXVlIHRlcm1pbmFuIGVuICFcclxuICAgICAgICAgICAgdmFyX25hbWUgPSBjYXNpbGxlcm8udmFyX25hbWVfZXNwZWNpYWwucmVwbGFjZSgvISskLywgJycpO1xyXG4gICAgICAgICAgICBjYXNpbGxlcm8udmFyX25hbWUgPSB2YXJfbmFtZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXJfbmFtZSA9IGNhc2lsbGVyby52YXJfbmFtZVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgdmFyaWFibGVEZWYgPSB7XHJcbiAgICAgICAgICAgIHRpcG86IGNhc2lsbGVyby50aXBvYyA9PSAnRklMVFJPJyA/ICdmaWx0cm8nIDogY2FzaWxsZXJvLnRpcG9jID09ICdPTScgfHwgY2FzaWxsZXJvLnRpcG92YXIgPT0gJ3NpX25vJyA/ICdvcGNpb25lcycgOiBjYXNpbGxlcm8udGlwb3ZhcixcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBvcHRhdGl2byBwb2Ryw61hIG5vIGV4aXN0aXIsIHF1ZWRhcsOhIG51bGwuXHJcbiAgICAgICAgICAgIG9wdGF0aXZhOiBjYXNpbGxlcm8ub3B0YXRpdm8hLFxyXG4gICAgICAgICAgICBvcGNpb25lczogKGNhc2lsbGVyby50aXBvYyA9PSAnT00nIHx8IGNhc2lsbGVyby50aXBvdmFyID09ICdvcGNpb25lcycgfHwgY2FzaWxsZXJvLnRpcG92YXIgPT0gJ3NpX25vJyA/XHJcbiAgICAgICAgICAgICAgICBsaWtlQXIuY3JlYXRlSW5kZXgoY2FzaWxsZXJvLmNhc2lsbGVyb3MsICdjYXNpbGxlcm8nKSA6IHt9KSBhcyB1bmtub3duIGFzIHsgW2tleTogc3RyaW5nXTogUm93VmFsaWRhdG9yT3BjaW9uPElkVmFyaWFibGU+IH0sXHJcbiAgICAgICAgICAgIHNhbHRvOiBjYXNpbGxlcm8uc2FsdG8gYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICAgICAgc2FsdG9Oc05yOiAnc2FsdG9fbnNfbmMnIGluIGNhc2lsbGVybyAmJiBjYXNpbGxlcm8uc2FsdG9fbnNfbmMgfHwgbnVsbCxcclxuICAgICAgICAgICAgZnVuY2lvbkhhYmlsaXRhcjogY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMsXHJcbiAgICAgICAgICAgIGZ1bmNpb25BdXRvSW5ncmVzYXI6IGNhc2lsbGVyby5leHByZXNpb25fYXV0b2luZ3Jlc2FyX2pzLFxyXG4gICAgICAgICAgICBjYWxjdWxhZGE6XHJcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlIC8vIFRPRE8uIEF2ZXJpZ3VhciBzaSBsYXMgcHJlZ3VudGFzIHkgZmlsdHJvcyBwdWVkZW4gdGVuZXIgdW5pZGFkIGRlIGFuw6FsaXNpc1xyXG4gICAgICAgICAgICAgICAgY2FzaWxsZXJvLnVuaWRhZF9hbmFsaXNpcyAmJiBjYXNpbGxlcm8udW5pZGFkX2FuYWxpc2lzICE9IHVuaWRhZEFuYWxpc2lzXHJcbiAgICAgICAgICAgICAgICB8fCBjYXNpbGxlcm8uY2FsY3VsYWRhLFxyXG4gICAgICAgICAgICBsaWJyZTogY2FzaWxsZXJvLmxpYnJlXHJcbiAgICAgICAgfSBhcyAodHlwZW9mIGVzdHJ1Y3R1cmEudmFyaWFibGVzKVtJZFZhcmlhYmxlXVxyXG4gICAgICAgIGlmIChzdWJvcmRpbmFkYVZhbG9yICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB2YXJpYWJsZURlZi5zdWJvcmRpbmFkYVZhciA9IHN1Ym9yZGluYWRhVmFyO1xyXG4gICAgICAgICAgICB2YXJpYWJsZURlZi5zdWJvcmRpbmFkYVZhbG9yID0gc3Vib3JkaW5hZGFWYWxvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZXN0cnVjdHVyYS52YXJpYWJsZXNbdmFyX25hbWVdID0gdmFyaWFibGVEZWY7XHJcbiAgICB9IGVsc2UgaWYgKGNhc2lsbGVyby50aXBvYyA9PSAnQkYnKSB7XHJcbiAgICAgICAgLy8gdmFyIHZhcl9uYW1lID0gJyRCLkY6JytjYXNpbGxlcm8uc2FsdG8gYXMgSWRWYXJpYWJsZTsgICAgLy9vcmlnaW5hbFxyXG4gICAgICAgIHZhciBzYWx0b05vbWJyZSA9IGNhc2lsbGVyby5zYWx0byEuc3Vic3RyKDAsIDIpID09ICdGOicgPyBjYXNpbGxlcm8uc2FsdG8hLnNsaWNlKDIpIDogY2FzaWxsZXJvLnNhbHRvO1xyXG4gICAgICAgIGNvbnN0IHJlcXVpZXJlQWdyZWdhciA9IGNhc2lsbGVyby51bmlkYWRfYW5hbGlzaXMgJiYgY2FzaWxsZXJvLnVuaWRhZF9hbmFsaXNpcyAhPT0gdW5pZGFkQW5hbGlzaXNcclxuICAgICAgICBjYXNpbGxlcm8udmFyX25hbWVzX0JGID0gY2FzaWxsZXJvLnZhcl9uYW1lc19CRiB8fCBbXTtcclxuXHJcbiAgICAgICAgaWYgKHJlcXVpZXJlQWdyZWdhcikge1xyXG4gICAgICAgICAgICB2YXIgbmV3VmFyTmFtZUFncmVnYXIgPSAnJEIuRjonICsgc2FsdG9Ob21icmUgKyAnX2FncmVnYXInIGFzIElkVmFyaWFibGU7XHJcbiAgICAgICAgICAgIGNhc2lsbGVyby52YXJfbmFtZXNfQkYucHVzaChuZXdWYXJOYW1lQWdyZWdhcik7XHJcbiAgICAgICAgICAgIGVzdHJ1Y3R1cmEudmFyaWFibGVzW25ld1Zhck5hbWVBZ3JlZ2FyXSA9IHtcclxuICAgICAgICAgICAgICAgIHRpcG92YXI6ICdvcGNpb25lcycsXHJcbiAgICAgICAgICAgICAgICBjYXNpbGxlcm9zOiBbeyB0aXBvYzogJ08nLCBjYXNpbGxlcm86IDEsIG5vbWJyZTogJ3NpJyB9XSBhcyBPcGNpb25bXSwgLy8gc2UgdXNhIHBhcmEgcXVlIG5vIHNlYSBsaWJyZSB5IGVsIHJvd1ZhbGlkYXRvciBsYSB2ZWFcclxuICAgICAgICAgICAgfSBhcyBWYXJpYWJsZTtcclxuICAgICAgICAgICAgY2FzaWxsZXJvLnByaW1lcmFfdmFyaWFibGUgPSBuZXdWYXJOYW1lQWdyZWdhcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG5ld1Zhck5hbWUgPSAnJEIuRjonICsgc2FsdG9Ob21icmUgYXMgSWRWYXJpYWJsZTtcclxuICAgICAgICBjYXNpbGxlcm8udmFyX25hbWVzX0JGLnB1c2gobmV3VmFyTmFtZSlcclxuICAgICAgICBlc3RydWN0dXJhLnZhcmlhYmxlc1tuZXdWYXJOYW1lXSA9IHtcclxuICAgICAgICAgICAgdGlwb3ZhcjogJ29wY2lvbmVzJyxcclxuICAgICAgICAgICAgY2FzaWxsZXJvczogW3sgdGlwb2M6ICdPJywgY2FzaWxsZXJvOiAxLCBub21icmU6ICdzaScgfV0gYXMgT3BjaW9uW10sIC8vIHNlIHVzYSBwYXJhIHF1ZSBubyBzZWEgbGlicmUgeSBlbCByb3dWYWxpZGF0b3IgbGEgdmVhXHJcbiAgICAgICAgfSBhcyBWYXJpYWJsZTtcclxuICAgICAgICBjYXNpbGxlcm8ucHJpbWVyYV92YXJpYWJsZSA9IGNhc2lsbGVyby5wcmltZXJhX3ZhcmlhYmxlIHx8IG5ld1Zhck5hbWU7XHJcblxyXG4gICAgfVxyXG4gICAgaWYgKGNhc2lsbGVyby5jYXNpbGxlcm9zKSB7XHJcbiAgICAgICAgY2FzaWxsZXJvLmNhc2lsbGVyb3MuZm9yRWFjaCgoY2FzaWxsZXJvSGlqbzogQ2FzaWxsZXJvc0ltcGxlbWVudGFkb3MpID0+XHJcbiAgICAgICAgICAgIHJlbGxlbmFyVmFyaWFibGVzWU9wY2lvbmVzKGlkRm9ybXVsYXJpbywgZXN0cnVjdHVyYSwgY2FzaWxsZXJvSGlqbywgdW5pZGFkQW5hbGlzaXMsIGNhc2lsbGVyby52YXJfbmFtZSA/IGNhc2lsbGVyby52YXJfbmFtZSA6IGNhc2lsbGVyby50aXBvYyA9PSAnTycgPyBzdWJvcmRpbmFkYVZhciA6IHVuZGVmaW5lZCwgY2FzaWxsZXJvLnRpcG9jID09ICdPJyA/IGNhc2lsbGVyby5jYXNpbGxlcm8gOiB1bmRlZmluZWQpXHJcbiAgICAgICAgKVxyXG4gICAgfVxyXG59XHJcblxyXG50eXBlIFJlZ2lzdHJvRGVzdGlub3MgPSB7IFtkZXN0aW5vIGluIElkRGVzdGlub106IElkVmFyaWFibGUgfCBudWxsIH07XHJcblxyXG5mdW5jdGlvbiBvYnRlbmVyRGVzdGlub3NDYXNpbGxlcm9zKGNhc2lsbGVybzogQ2FzaWxsZXJvc0ltcGxlbWVudGFkb3MsIGRlc3Rpbm9zPzogUmVnaXN0cm9EZXN0aW5vcyk6IFJlZ2lzdHJvRGVzdGlub3Mge1xyXG4gICAgaWYgKGRlc3Rpbm9zID09IG51bGwpIHJldHVybiBvYnRlbmVyRGVzdGlub3NDYXNpbGxlcm9zKGNhc2lsbGVybywge30gYXMgUmVnaXN0cm9EZXN0aW5vcyk7XHJcbiAgICBpZiAoY2FzaWxsZXJvLnRpcG9jID09ICdGSUxUUk8nKSB7XHJcbiAgICAgICAgZGVzdGlub3NbY2FzaWxsZXJvLmNhc2lsbGVyb10gPSBjYXNpbGxlcm8uY2FzaWxsZXJvIGFzIElkVmFyaWFibGU7XHJcbiAgICB9IGVsc2UgaWYgKGNhc2lsbGVyby50aXBvYyAhPSAnRicgJiYgY2FzaWxsZXJvLnRpcG9jICE9ICdPJyAmJiBjYXNpbGxlcm8udGlwb2MgIT0gJ09NJykge1xyXG4gICAgICAgIGRlc3Rpbm9zW2Nhc2lsbGVyby5jYXNpbGxlcm9dID0gY2FzaWxsZXJvLnByaW1lcmFfdmFyaWFibGUgfHwgbnVsbFxyXG4gICAgfVxyXG4gICAgaWYgKGNhc2lsbGVyby5jYXNpbGxlcm9zKSB7XHJcbiAgICAgICAgY2FzaWxsZXJvLmNhc2lsbGVyb3MuZm9yRWFjaChjID0+IG9idGVuZXJEZXN0aW5vc0Nhc2lsbGVyb3MoYywgZGVzdGlub3MpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkZXN0aW5vcztcclxufVxyXG5cclxuZnVuY3Rpb24gcmVsbGVuYXJEZXN0aW5vcyhlc3RydWN0dXJhOiBFc3RydWN0dXJhUm93VmFsaWRhdG9yLCBkZXN0aW5vczogUmVnaXN0cm9EZXN0aW5vcyk6IEVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3Ige1xyXG4gICAgZnVuY3Rpb24gb2J0ZW5lckRlc3Rpbm8oaWRWYXJpYWJsZVF1ZVRpZW5lVW5EZXN0aW5vOiBJZFZhcmlhYmxlIHwgbnVsbCB8IHVuZGVmaW5lZCB8IElkRmluKTogSWRWYXJpYWJsZSB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiBpZFZhcmlhYmxlUXVlVGllbmVVbkRlc3Rpbm8gPT0gJ2ZpbicgYXMgSWRWYXJpYWJsZSA/ICdmaW4nIGFzIElkVmFyaWFibGUgOiBpZFZhcmlhYmxlUXVlVGllbmVVbkRlc3Rpbm8gIT0gbnVsbCAmJiBkZXN0aW5vc1tpZFZhcmlhYmxlUXVlVGllbmVVbkRlc3Rpbm8gYXMgSWREZXN0aW5vXSB8fCBudWxsXHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIC4uLmVzdHJ1Y3R1cmEsXHJcbiAgICAgICAgdmFyaWFibGVzOiBsaWtlQXIoZXN0cnVjdHVyYS52YXJpYWJsZXMpLm1hcCh2YXJpYWJsZURlZiA9PiAoe1xyXG4gICAgICAgICAgICAuLi52YXJpYWJsZURlZixcclxuICAgICAgICAgICAgc2FsdG86IG9idGVuZXJEZXN0aW5vKHZhcmlhYmxlRGVmLnNhbHRvKSxcclxuICAgICAgICAgICAgc2FsdG9Oc05yOiBvYnRlbmVyRGVzdGlubyh2YXJpYWJsZURlZi5zYWx0b05zTnIpLFxyXG4gICAgICAgICAgICBvcGNpb25lczogdmFyaWFibGVEZWYub3BjaW9uZXMgIT0gbnVsbCA/IGxpa2VBcih2YXJpYWJsZURlZi5vcGNpb25lcykubWFwKG9wY2lvbkRlZiA9PiAoeyBzYWx0bzogb2J0ZW5lckRlc3Rpbm8ob3BjaW9uRGVmLnNhbHRvKSB9KSkucGxhaW4oKSA6IHVuZGVmaW5lZFxyXG4gICAgICAgIH0pKS5wbGFpbigpXHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdlbmVyYXJFc3RydWN0dXJhUm93VmFsaWRhdG9yKGNhc2lsbGVybzogQ2FzaWxsZXJvc0ltcGxlbWVudGFkb3MsIGlkRm9ybXVsYXJpbzogSWRGb3JtdWxhcmlvKTogRXN0cnVjdHVyYVJvd1ZhbGlkYXRvciB7XHJcbiAgICB2YXIgZXN0cnVjdHVyYUluY29tcGxldGE6IEVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3IgPSB7IHZhcmlhYmxlczoge30sIG1hcmNhRmluOiAnZmluJyB9IGFzIHVua25vd24gYXMgRXN0cnVjdHVyYVJvd1ZhbGlkYXRvcjtcclxuICAgIHJlbGxlbmFyVmFyaWFibGVzWU9wY2lvbmVzKGlkRm9ybXVsYXJpbywgZXN0cnVjdHVyYUluY29tcGxldGEsIGNhc2lsbGVybyxcclxuICAgICAgICAvLyBAdHMtaWdub3JlIHZlciBzaSBjdWFscXVpZXIgY29zYSBwdWVkZSB0ZW5lciB1bmlkYWRfYW5hbGlzaXNcclxuICAgICAgICBjYXNpbGxlcm8udW5pZGFkX2FuYWxpc2lzXHJcbiAgICApO1xyXG4gICAgdmFyIGRlc3Rpbm9zID0gb2J0ZW5lckRlc3Rpbm9zQ2FzaWxsZXJvcyhjYXNpbGxlcm8pO1xyXG4gICAgcmV0dXJuIHJlbGxlbmFyRGVzdGlub3MoZXN0cnVjdHVyYUluY29tcGxldGEsIGRlc3Rpbm9zKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VTcGVjaWFsV29yZHModGV4dDogc3RyaW5nLCBub21icmU6IHN0cmluZywgYXBlbGxpZG86IHN0cmluZywgcmVzdWx0YWRvOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgZnVuY3Rpb24gY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHRleHQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0ZXh0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGV4dC5zbGljZSgxKTtcclxuICAgIH1cclxuICAgIHZhciBzaW1wbGlmaWNhdGVkQ2hhcnM6IHsgW2s6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG4gICAgICAgIFwiI25vbWJyZVwiOiBjYXBpdGFsaXplRmlyc3RMZXR0ZXIobm9tYnJlKSxcclxuICAgICAgICBcIiNhcGVsbGlkb1wiOiBjYXBpdGFsaXplRmlyc3RMZXR0ZXIoYXBlbGxpZG8pLFxyXG4gICAgICAgIFwiI3Jlc3VsdGFkb1wiOiByZXN1bHRhZG8sXHJcbiAgICB9O1xyXG4gICAgdmFyIHJlID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhzaW1wbGlmaWNhdGVkQ2hhcnMpLmpvaW4oXCJ8XCIpLCBcImdpXCIpO1xyXG5cclxuICAgIHJldHVybiB0ZXh0LnJlcGxhY2UocmUsIGZ1bmN0aW9uIChtYXRjaGVkKSB7XHJcbiAgICAgICAgcmV0dXJuIHNpbXBsaWZpY2F0ZWRDaGFyc1ttYXRjaGVkLnRvTG93ZXJDYXNlKCldO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnb3RvU2luY3Jvbml6YXIoKSB7XHJcbiAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCAnJywgYCR7bG9jYXRpb24ub3JpZ2luICsgbG9jYXRpb24ucGF0aG5hbWV9Ly4uL21lbnUjaT1zaW5jcm9uaXphcmApO1xyXG4gICAgbG9jYXRpb24ucmVsb2FkKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnb3RvQ2FtcG8oKSB7XHJcbiAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCAnJywgYCR7bG9jYXRpb24ub3JpZ2luICsgbG9jYXRpb24ucGF0aG5hbWV9Ly4uL2NhbXBvYCk7XHJcbiAgICBsb2NhdGlvbi5yZWxvYWQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdvdG9Db25zaXN0aXIob3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IElkVGFyZWEsIGVuYzogSWRFbmMpIHtcclxuICAgIC8vIFRPRE8tMjAyMy0wMzogcHJvYmFyIGNvbiBlc3RvOlxyXG4gICAgaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwgJycsIGAke2xvY2F0aW9uLm9yaWdpbiArIGxvY2F0aW9uLnBhdGhuYW1lfS8uLi9tZW51I3c9Y29uc2lzdGlyX2VuY3Vlc3RhJnVwPSR7SlNPTjRhbGwudG9VcmwoeyBvcGVyYXRpdm8sIHRhcmVhLCBlbmMgfSl9JmF1dG9wcm9jZWQ9dHJ1ZWApO1xyXG4gICAgLy8gaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwgJycsIGAke2xvY2F0aW9uLm9yaWdpbitsb2NhdGlvbi5wYXRobmFtZX0vLi4vbWVudSN3PWNvbnNpc3Rpcl9lbmN1ZXN0YSZ1cD17XCJvcGVyYXRpdm9cIjpcIiR7b3BlcmF0aXZvfVwiLFwidGFyZWFcIjpcIiR7dGFyZWF9XCIsXCJlbmN1ZXN0YVwiOiR7ZW5jdWVzdGF9fSZhdXRvcHJvY2VkPXRydWVgKTtcclxuICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FjaGVWZXJzaW9uKCkge1xyXG4gICAgcmV0dXJuIG15LmdldExvY2FsVmFyKCdhcHAtY2FjaGUtdmVyc2lvbicpO1xyXG59XHJcblxyXG52YXIgcmVkaXJlY3RJZk5vdExvZ2dlZCA9IGZ1bmN0aW9uIHJlZGlyZWN0SWZOb3RMb2dnZWQoZXJyOiBFcnJvcikge1xyXG4gICAgaWYgKGVyci5tZXNzYWdlID09IG15Lm1lc3NhZ2VzLm5vdExvZ2dlZCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCAnJywgYCR7bG9jYXRpb24ub3JpZ2luICsgbG9jYXRpb24ucGF0aG5hbWV9Ly4uL2xvZ2luJHtsb2NhdGlvbi5oYXNofWApO1xyXG4gICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICB9LCAxNTAwKVxyXG5cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRyYWVyRXN0cnVjdHVyYShwYXJhbXM6IHsgb3BlcmF0aXZvOiBzdHJpbmcgfSkge1xyXG4gICAgdmFyIGVzdHJ1Y3R1cmEgPSBhd2FpdCBteS5hamF4Lm9wZXJhdGl2b19lc3RydWN0dXJhX2NvbXBsZXRhKHBhcmFtcyk7XHJcbiAgICB2YXIgY2FzaWxsZXJvc09yaWdpbmFsZXM6IHt9ID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvcztcclxuICAgIC8vVE9ETzogR0VORVJBTElaQVJcclxuICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgLy8gY2FzaWxsZXJvc09yaWdpbmFsZXNbJ0Y6RjJfcGVyc29uYXMnXT1jYXNpbGxlcm9zT3JpZ2luYWxlc1snRjpGMiddLmNoaWxkcy5maW5kKGNhc2lsbGVybz0+Y2FzaWxsZXJvLmRhdGEuY2FzaWxsZXJvPT0nTFAnKTtcclxuICAgIHZhciBtYWluRm9ybTogSWRGb3JtdWxhcmlvIHwgdW5kZWZpbmVkO1xyXG4gICAgLy9AdHMtaWdub3JlXHJcbiAgICB2YXIgY2FzaWxsZXJvc1RvZG9zRm9ybXVsYXJpb3M6IHsgW2YgaW4gSWRGb3JtdWxhcmlvXTogeyBjYXNpbGxlcm9zOiBGb3JtdWxhcmlvLCBlc3RydWN0dXJhUm93VmFsaWRhdG9yOiBFc3RydWN0dXJhUm93VmFsaWRhdG9yIH0gfSA9XHJcbiAgICAgICAgbGlrZUFyKGNhc2lsbGVyb3NPcmlnaW5hbGVzKS5tYXAoXHJcbiAgICAgICAgICAgIChjYXNpbGxlcm9zSmVyYXJxdWl6YWRvczogYW55LCBpZEZvcm11bGFyaW8pID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBjYXNpbGxlcm9zQXBsYW5hZG9zOiBDYXNpbGxlcm9zSW1wbGVtZW50YWRvcyA9IGFwbGFuYXJMYUN1cnZhKGNhc2lsbGVyb3NKZXJhcnF1aXphZG9zKTtcclxuICAgICAgICAgICAgICAgIGlmIChjYXNpbGxlcm9zQXBsYW5hZG9zLnRpcG9jID09ICdGJyAmJiBjYXNpbGxlcm9zQXBsYW5hZG9zLmZvcm11bGFyaW9fcHJpbmNpcGFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFpbkZvcm0gPSBpZEZvcm11bGFyaW87XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyb3M6IGNhc2lsbGVyb3NBcGxhbmFkb3MsXHJcbiAgICAgICAgICAgICAgICAgICAgZXN0cnVjdHVyYVJvd1ZhbGlkYXRvcjogZ2VuZXJhckVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3IoY2FzaWxsZXJvc0FwbGFuYWRvcywgaWRGb3JtdWxhcmlvKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKS5wbGFpbigpO1xyXG4gICAgZXN0cnVjdHVyYS5mb3JtdWxhcmlvcyA9IGNhc2lsbGVyb3NUb2Rvc0Zvcm11bGFyaW9zXHJcbiAgICByZXR1cm4gZXN0cnVjdHVyYTtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRtVHJhZXJEYXRvc0Zvcm11bGFyaW8ob3B0czogeyBvcGVyYXRpdm8/OiBJZE9wZXJhdGl2bywgbW9kb0RlbW86IGJvb2xlYW4sIGZvclBrUmFpej86IEZvclBrUmFpeiB9KSB7XHJcbiAgICB2YXIgZ2V0Q2Fzb1N0YXRlID0gKCk6IENhc29TdGF0ZSA9PiBteU93bi5nZXRMb2NhbFZhcihMT0NBTF9TVE9SQUdFX1NUQVRFX05BTUUpO1xyXG4gICAgdmFyIHNldENhc29TdGF0ZSA9IChjYXNvU3RhdGU6IENhc29TdGF0ZSkgPT4gbXlPd24uc2V0TG9jYWxWYXIoTE9DQUxfU1RPUkFHRV9TVEFURV9OQU1FLCBjYXNvU3RhdGUpO1xyXG5cclxuICAgIHZhciBsb2FkU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBsb2FkU3RhdGUoKTogUHJvbWlzZTxDYXNvU3RhdGU+IHtcclxuICAgICAgICB2YXIgY2Fzb1N0YXRlOiBDYXNvU3RhdGUgfCBudWxsID0gZ2V0Q2Fzb1N0YXRlKCk7XHJcbiAgICAgICAgdmFyIGluaXRpYWxTdGF0ZSA9IHtcclxuICAgICAgICAgICAgb3BjaW9uZXM6IHtcclxuICAgICAgICAgICAgICAgIGZvclBrOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgcGlsYUZvclBrOiBbXSxcclxuICAgICAgICAgICAgICAgIG1vZG9EZXNwbGllZ3VlOiAncmVsZXZhbWllbnRvJyxcclxuICAgICAgICAgICAgICAgIG1vZG9EaXJlY3RvOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGNvbkNhbXBvT3BjaW9uZXM6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgc2FsdG9BdXRvbWF0aWNvOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgYmllbnZlbmlkbzogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIG1vZG9Cb3JyYXJSZXNwdWVzdGE6IG51bGwsXHJcbiAgICAgICAgICAgIH0gYXMgQ2Fzb1N0YXRlW1wib3BjaW9uZXNcIl0sIC8vIHBvbmVyIGxvcyB2YWxvcmVzIHBvciBkZWZlY3RvIG3DoXMgYWJham9cclxuICAgICAgICAgICAgbW9kbzoge1xyXG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlIGVzIHVuIGJvb2xlYW5vIHBlcm8gcG9uZ28gYWjDrSBsb3MgZGF0b3MgZGUgZGVtbyFcclxuICAgICAgICAgICAgICAgIGRlbW86XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgIG15T3duLmNvbmZpZy5jb25maWcuYW1iaWVudGUgPT0gJ3Rlc3QnIHx8IG15T3duLmNvbmZpZy5jb25maWcuYW1iaWVudGUgPT0gJ2RlbW8nLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBhcyBDYXNvU3RhdGU7XHJcbiAgICAgICAgaWYgKGNhc29TdGF0ZSkge1xyXG4gICAgICAgICAgICBpbml0aWFsU3RhdGUgPSB7XHJcbiAgICAgICAgICAgICAgICAuLi5pbml0aWFsU3RhdGUsXHJcbiAgICAgICAgICAgICAgICBvcGNpb25lczogY2Fzb1N0YXRlLm9wY2lvbmVzLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcHRzLmZvclBrUmFpeikge1xyXG4gICAgICAgICAgICBpbml0aWFsU3RhdGUub3BjaW9uZXMuZm9yUGsgPSBvcHRzLmZvclBrUmFpejtcclxuICAgICAgICAgICAgaW5pdGlhbFN0YXRlLm9wY2lvbmVzLm1vZG9EaXJlY3RvID0gISFvcHRzLmZvclBrUmFpejtcclxuICAgICAgICAgICAgaW5pdGlhbFN0YXRlLm9wY2lvbmVzLnBpbGFGb3JQayA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYWRkclBhcmFtcyA9IG15T3duLlVyaVNlYXJjaFRvT2JqZWN0KGxvY2F0aW9uLmhhc2ggfHwgbG9jYXRpb24uc2VhcmNoIHx8ICcnKTtcclxuICAgICAgICBpZiAoYWRkclBhcmFtcy5zdGF0ZV9mb3JQaykge1xyXG4gICAgICAgICAgICBpbml0aWFsU3RhdGUub3BjaW9uZXMuZm9yUGsgPSBKU09OLnBhcnNlKGFkZHJQYXJhbXMuc3RhdGVfZm9yUGspO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYWRkclBhcmFtcy5zdGF0ZV9waWxhRm9yUGspIHtcclxuICAgICAgICAgICAgaW5pdGlhbFN0YXRlLm9wY2lvbmVzLnBpbGFGb3JQayA9IChhZGRyUGFyYW1zLnN0YXRlX3BpbGFGb3JQayBhcyBzdHJpbmcpLnNwbGl0KCd8JykubWFwKGogPT4gSlNPTjRhbGwucGFyc2UoaikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaW5pdGlhbFN0YXRlO1xyXG4gICAgfVxyXG4gICAgdmFyIHNhdmVTdGF0ZSA9IGZ1bmN0aW9uIHNhdmVTdGF0ZShzdGF0ZTogQ2Fzb1N0YXRlKSB7XHJcbiAgICAgICAgc2V0Q2Fzb1N0YXRlKHN0YXRlKTtcclxuICAgIH1cclxuICAgIC8qIERFRklOSUNJT04gQ09OVFJPTEFET1IgKi9cclxuICAgIHZhciBpbml0aWFsU3RhdGU6IENhc29TdGF0ZSA9IGF3YWl0IGxvYWRTdGF0ZSgpO1xyXG4gICAgY29uc3QgaGRyUmVkdWNlciA9IGNyZWF0ZVJlZHVjZXIocmVkdWNlcnMsIGluaXRpYWxTdGF0ZSk7XHJcbiAgICAvKiBGSU4gREVGSU5JQ0lPTiBDT05UUk9MQURPUiAqL1xyXG4gICAgLyogQ0FSR0EgWSBHVUFSREFETyBERSBTVEFURSAqL1xyXG4gICAgLyogQ1JFQUNJT04gU1RPUkUgKi9cclxuICAgIGNvbnN0IHN0b3JlID0gY3JlYXRlU3RvcmUoaGRyUmVkdWNlciwgaW5pdGlhbFN0YXRlKTtcclxuICAgIHNhdmVTdGF0ZShzdG9yZS5nZXRTdGF0ZSgpKTtcclxuICAgIHN0b3JlLnN1YnNjcmliZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgc2F2ZVN0YXRlKHN0b3JlLmdldFN0YXRlKCkpO1xyXG4gICAgfSk7XHJcbiAgICAvKiBGSU4gQ1JFQUNJT04gU1RPUkUgKi9cclxuICAgIC8vSERSIENPTiBTVE9SRSBDUkVBRE9cclxuICAgIHJldHVybiBzdG9yZTtcclxufSJdfQ==
|
|
284
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgtZm9ybXVsYXJpby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91bmxvZ2dlZC9yZWR1eC1mb3JtdWxhcmlvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQTJTQSxrREFjQztJQUVELHNDQUtDO0lBRUQsOENBb0JDO0lBRUQsb0RBd0RDO0lBaFpELGlDQUFvQztJQUNwQyxtQ0FjaUI7SUFDakIsNkRBQW9GO0lBQ3BGLGtDQUFrQztJQUVsQyxxQ0FBcUM7SUFHckMsbURBQWtEO0lBRWxELElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQztJQUVmLFNBQVMsVUFBVSxDQUFDLEtBQW1CLEVBQUUsU0FBa0I7UUFDdkQsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNqRixLQUFLLENBQUMsaUJBQWlCLGlDQUNoQixVQUFVLEtBQ2IsV0FBVyxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBQSxvQkFBWSxFQUFDLEtBQUssQ0FBQyxFQUN6RCxlQUFlLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxvQkFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUN4RCxDQUFDO0lBQ1AsQ0FBQztJQUVELElBQUksUUFBUSxHQUFHO1FBQ1gsZUFBZSxFQUFFLENBQUMsT0FBMkMsRUFBRSxFQUFFLENBQzdELFVBQVUsS0FBZ0I7WUFDdEIsdUNBQ08sS0FBSyxLQUNSLFFBQVEsa0NBQ0QsS0FBSyxDQUFDLFFBQVEsS0FDakIsY0FBYyxFQUFFLE9BQU8sQ0FBQyxjQUFjLE9BRTdDO1FBQ0wsQ0FBQztRQUNMLGVBQWUsRUFBRSxDQUFDLE9BQTJCLEVBQUUsRUFBRSxDQUM3QyxVQUFVLEtBQWdCO1lBQ3RCLHVDQUNP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UyxDQUFDLEtBQWdCO2dCQUMvQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEIsQ0FBQyxDQUFBO1lBQ0QsNEJBQTRCO1lBQzVCLElBQUksWUFBWSxHQUFjLE1BQU0sU0FBUyxFQUFFLENBQUM7WUFDaEQsTUFBTSxVQUFVLEdBQUcsSUFBQSxtQ0FBYSxFQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUN6RCxnQ0FBZ0M7WUFDaEMsK0JBQStCO1lBQy9CLG9CQUFvQjtZQUNwQixNQUFNLEtBQUssR0FBRyxJQUFBLG1CQUFXLEVBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQ3BELFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUM1QixLQUFLLENBQUMsU0FBUyxDQUFDO2dCQUNaLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNoQyxDQUFDLENBQUMsQ0FBQztZQUNILHdCQUF3QjtZQUN4QixzQkFBc0I7WUFDdEIsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztLQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlU3RvcmUgfSBmcm9tIFwicmVkdXhcIjtcclxuaW1wb3J0IHtcclxuICAgIENhc2lsbGVyb3NJbXBsZW1lbnRhZG9zLCBDYXNvU3RhdGUsXHJcbiAgICBFc3RhZG9DYXJnYSwgRXN0cnVjdHVyYVJvd1ZhbGlkYXRvcixcclxuICAgIEZvcm11bGFyaW8sIEZvclBrLCBGb3JQa1JhaXosXHJcbiAgICBJZENhcmdhLCBJZERlc3Rpbm8sIElkRm9ybXVsYXJpbywgSWRWYXJpYWJsZSwgSWRPcGVyYXRpdm8sXHJcbiAgICBNb2RvRGVzcGxpZWd1ZSxcclxuICAgIE9wY2lvbixcclxuICAgIHRvUGxhaW5Gb3JQayxcclxuICAgIElkRmluLFxyXG4gICAgSWRFbmMsXHJcbiAgICBJZFRhcmVhLFxyXG4gICAgRXN0cnVjdHVyYSxcclxuICAgIE1vZG9ETSxcclxuICAgIFBhbnRhbGxhTmF2ZWdhY2lvbixcclxufSBmcm9tIFwiLi90aXBvc1wiO1xyXG5pbXBvcnQgeyBjcmVhdGVSZWR1Y2VyLCBjcmVhdGVEaXNwYXRjaGVycywgQWN0aW9uc0Zyb20gfSBmcm9tIFwicmVkdXgtdHlwZWQtcmVkdWNlclwiO1xyXG5pbXBvcnQgKiBhcyBsaWtlQXIgZnJvbSBcImxpa2UtYXJcIjtcclxuaW1wb3J0ICogYXMgYmVzdEdsb2JhbHMgZnJvbSBcImJlc3QtZ2xvYmFsc1wiO1xyXG5pbXBvcnQgKiBhcyBKU09ONGFsbCBmcm9tIFwianNvbjRhbGxcIjtcclxuXHJcbmltcG9ydCB7IE9wY2lvbiBhcyBSb3dWYWxpZGF0b3JPcGNpb24gfSBmcm9tIFwicm93LXZhbGlkYXRvclwiO1xyXG5pbXBvcnQgeyBnZXRGb3JtUmVuZGVyZXIgfSBmcm9tIFwiLi9yZW5kZXItY29uZmlnXCI7XHJcblxyXG52YXIgbXkgPSBteU93bjtcclxuXHJcbmZ1bmN0aW9uIGZvclBrVG9VcmwoZm9yUGs6IEZvclBrIHwgbnVsbCwgcGlsYUZvclBrOiBGb3JQa1tdKSB7XHJcbiAgICB2YXIgYWRkclBhcmFtcyA9IG15T3duLlVyaVNlYXJjaFRvT2JqZWN0KGxvY2F0aW9uLmhhc2ggfHwgbG9jYXRpb24uc2VhcmNoIHx8ICcnKTtcclxuICAgIG15T3duLnJlcGxhY2VBZGRyUGFyYW1zKHtcclxuICAgICAgICAuLi5hZGRyUGFyYW1zLFxyXG4gICAgICAgIHN0YXRlX2ZvclBrOiBmb3JQayA9PSBudWxsID8gJ251bGwnIDogdG9QbGFpbkZvclBrKGZvclBrKSxcclxuICAgICAgICBzdGF0ZV9waWxhRm9yUGs6IHBpbGFGb3JQay5tYXAodG9QbGFpbkZvclBrKS5qb2luKCd8JylcclxuICAgIH0pO1xyXG59XHJcblxyXG52YXIgcmVkdWNlcnMgPSB7XHJcbiAgICBNT0RPX0RFU1BMSUVHVUU6IChwYXlsb2FkOiB7IG1vZG9EZXNwbGllZ3VlOiBNb2RvRGVzcGxpZWd1ZSB9KSA9PlxyXG4gICAgICAgIGZ1bmN0aW9uIChzdGF0ZTogQ2Fzb1N0YXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcclxuICAgICAgICAgICAgICAgIG9wY2lvbmVzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGUub3BjaW9uZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgbW9kb0Rlc3BsaWVndWU6IHBheWxvYWQubW9kb0Rlc3BsaWVndWVcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICBDQU1CSUFSX01PRE9fRE06IChwYXlsb2FkOiB7IG1vZG9ETTogTW9kb0RNIH0pID0+XHJcbiAgICAgICAgZnVuY3Rpb24gKHN0YXRlOiBDYXNvU3RhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxyXG4gICAgICAgICAgICAgICAgb3BjaW9uZXM6IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZS5vcGNpb25lcyxcclxuICAgICAgICAgICAgICAgICAgICBtb2RvRE06IHBheWxvYWQubW9kb0RNXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgQ0FNQklBUl9GT1JNVUxBUklPOiAocGF5bG9hZDogeyBmb3JQazogRm9yUGssIGFwaWxhclZ1ZWx0YTogYm9vbGVhbiB9KSA9PlxyXG4gICAgICAgIGZ1bmN0aW9uIChzdGF0ZTogQ2Fzb1N0YXRlKSB7XHJcbiAgICAgICAgICAgIHZhciBmb3JQayA9IHBheWxvYWQuZm9yUGs7XHJcbiAgICAgICAgICAgIHZhciBwaWxhRm9yUGsgPSBwYXlsb2FkLmFwaWxhclZ1ZWx0YSA/IChcclxuICAgICAgICAgICAgICAgIHN0YXRlLm9wY2lvbmVzLmZvclBrID09IG51bGwgPyBbXSA6IFsuLi5zdGF0ZS5vcGNpb25lcy5waWxhRm9yUGssIHN0YXRlLm9wY2lvbmVzLmZvclBrXVxyXG4gICAgICAgICAgICApIDogc3RhdGUub3BjaW9uZXMucGlsYUZvclBrO1xyXG4gICAgICAgICAgICBmb3JQa1RvVXJsKGZvclBrLCBwaWxhRm9yUGspO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBvcGNpb25lczoge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLm9wY2lvbmVzLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvclBrLFxyXG4gICAgICAgICAgICAgICAgICAgIHBpbGFGb3JQa1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgIFZPTFZFUl9ERV9GT1JNVUxBUklPOiAoeyBtYWduaXR1ZFJldHJvY2VzbyB9OiB7IG1hZ25pdHVkUmV0cm9jZXNvOiBudW1iZXIgfSkgPT5cclxuICAgICAgICBmdW5jdGlvbiAoc3RhdGU6IENhc29TdGF0ZSkge1xyXG4gICAgICAgICAgICB2YXIgZm9yUGsgPSBzdGF0ZS5vcGNpb25lcy5waWxhRm9yUGtbc3RhdGUub3BjaW9uZXMucGlsYUZvclBrLmxlbmd0aCAtIG1hZ25pdHVkUmV0cm9jZXNvXSB8fCBudWxsO1xyXG4gICAgICAgICAgICB2YXIgcGlsYUZvclBrID0gc3RhdGUub3BjaW9uZXMucGlsYUZvclBrLnNsaWNlKDAsIHN0YXRlLm9wY2lvbmVzLnBpbGFGb3JQay5sZW5ndGggLSBtYWduaXR1ZFJldHJvY2Vzbyk7XHJcbiAgICAgICAgICAgIGZvclBrVG9VcmwoZm9yUGssIHBpbGFGb3JQayk7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcclxuICAgICAgICAgICAgICAgIG9wY2lvbmVzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGUub3BjaW9uZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yUGssXHJcbiAgICAgICAgICAgICAgICAgICAgcGlsYUZvclBrXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgVk9MVkVSX0hEUjogKF9wYXlsb2FkOiB7fSkgPT5cclxuICAgICAgICBmdW5jdGlvbiAoc3RhdGU6IENhc29TdGF0ZSkge1xyXG4gICAgICAgICAgICB2YXIgZm9yUGsgPSBudWxsO1xyXG4gICAgICAgICAgICB2YXIgcGlsYUZvclBrOiBGb3JQa1tdID0gW107XHJcbiAgICAgICAgICAgIGZvclBrVG9VcmwoZm9yUGssIHBpbGFGb3JQayk7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcclxuICAgICAgICAgICAgICAgIG9wY2lvbmVzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGUub3BjaW9uZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yUGssXHJcbiAgICAgICAgICAgICAgICAgICAgcGlsYUZvclBrXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgU0VUX09QQ0lPTjogKHBheWxvYWQ6IHsgb3BjaW9uOiBrZXlvZiBDYXNvU3RhdGVbJ29wY2lvbmVzJ10sIHZhbG9yOiBhbnkgfSkgPT5cclxuICAgICAgICBmdW5jdGlvbiAoc3RhdGU6IENhc29TdGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBvcGNpb25lczoge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLm9wY2lvbmVzLFxyXG4gICAgICAgICAgICAgICAgICAgIC8vc2kgY2FtYmlhIGRlIHBhbnRhbGxhIHBvciBhY8OhIHJlc2V0ZW8gZWwgYXZpc28gcG9yIGxhcyBkdWRhc1xyXG4gICAgICAgICAgICAgICAgICAgIGF2aXNvUGVyc2lzdGVudGU6IHBheWxvYWQub3BjaW9uID09ICdwYW50YWxsYUFjdHVhbCcgPyBudWxsIDogc3RhdGUub3BjaW9uZXMuYXZpc29QZXJzaXN0ZW50ZSxcclxuICAgICAgICAgICAgICAgICAgICBbcGF5bG9hZC5vcGNpb25dOiBwYXlsb2FkLnZhbG9yXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgUkVTRVRfT1BDSU9ORVM6IChfcGF5bG9hZDoge30pID0+XHJcbiAgICAgICAgZnVuY3Rpb24gKHN0YXRlOiBDYXNvU3RhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxyXG4gICAgICAgICAgICAgICAgb3BjaW9uZXM6IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZS5vcGNpb25lcyxcclxuICAgICAgICAgICAgICAgICAgICBwYW50YWxsYUFjdHVhbDogJ2hkcicsXHJcbiAgICAgICAgICAgICAgICAgICAgYXZpc29QZXJzaXN0ZW50ZTogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb3JQazogbnVsbFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgIFNFVF9QQU5UQUxMQV9BQ1RVQUw6IChwYXlsb2FkOiB7IHBhbnRhbGxhOiBQYW50YWxsYU5hdmVnYWNpb24sIGF2aXNvUGVyc2lzdGVudGU6IHsgdGlwbzogJ2luZm8nIHwgJ3N1Y2Nlc3MnIHwgJ2Vycm9yJywgbWVuc2FqZTogc3RyaW5nIH0gfCBudWxsIH0pID0+XHJcbiAgICAgICAgZnVuY3Rpb24gKHN0YXRlOiBDYXNvU3RhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxyXG4gICAgICAgICAgICAgICAgb3BjaW9uZXM6IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZS5vcGNpb25lcyxcclxuICAgICAgICAgICAgICAgICAgICBwYW50YWxsYUFjdHVhbDogcGF5bG9hZC5wYW50YWxsYSxcclxuICAgICAgICAgICAgICAgICAgICBhdmlzb1BlcnNpc3RlbnRlOiBwYXlsb2FkLmF2aXNvUGVyc2lzdGVudGUgfHwgbnVsbFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgIENPTkZJUk1BUl9CT1JSQVJfUkVTUFVFU1RBOiAocGF5bG9hZDogeyBmb3JQazogRm9yUGssIHZhcmlhYmxlOiBJZFZhcmlhYmxlIHwgbnVsbCB9KSA9PlxyXG4gICAgICAgIGZ1bmN0aW9uIChzdGF0ZTogQ2Fzb1N0YXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcclxuICAgICAgICAgICAgICAgIG9wY2lvbmVzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGUub3BjaW9uZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yUGs6IHBheWxvYWQuZm9yUGssXHJcbiAgICAgICAgICAgICAgICAgICAgbW9kb0JvcnJhclJlc3B1ZXN0YTogcGF5bG9hZC52YXJpYWJsZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgQWN0aW9uRm9ybXVsYXJpb1N0YXRlID0gQWN0aW9uc0Zyb208dHlwZW9mIHJlZHVjZXJzPjtcclxuLyogRklOIEFDQ0lPTkVTICovXHJcblxyXG5leHBvcnQgY29uc3QgZGlzcGF0Y2hlcnMgPSBjcmVhdGVEaXNwYXRjaGVycyhyZWR1Y2Vycyk7XHJcblxyXG5pbnRlcmZhY2UgSURhdGFTZXBhcmFkYTxUIGV4dGVuZHMgeyB0aXBvYzogc3RyaW5nIH0+IHtcclxuICAgIGRhdGE6IFQsXHJcbiAgICBjaGlsZHM6IElEYXRhU2VwYXJhZGE8VD5bXVxyXG59XHJcblxyXG50eXBlIElEYXRhQ29uQ2FzaWxsZXJvczxUPiA9IFQgJiB7XHJcbiAgICBjYXNpbGxlcm9zOiByZWFkb25seSBJRGF0YUNvbkNhc2lsbGVyb3M8VD5bXVxyXG59XHJcblxyXG5jb25zdCBjYXNpbGxlcm9WYWNpbyA9IHtcclxuICAgIHNhbHRvOiBudWxsLCBkZXNwbGllZ3VlOiBudWxsLCBhY2xhcmFjaW9uOiBudWxsLCB2ZXJfaWQ6IG51bGwsIGNhc2lsbGVyb3M6IFtdLCBsZWVyOiBudWxsLFxyXG4gICAgZGVzcGxpZWd1ZUVuY2FiZXphZG86IG51bGwsIGRlc3BsaWVndWVDb250ZW5pZG86IG51bGwsIGRlc3BsaWVndWVPY3VsdGE6IG51bGwsIGRlc3BsaWVndWVUaXBvSW5wdXQ6IG51bGxcclxufVxyXG5cclxuY29uc3Qgb3BjaW9uZXNTaU5vOiBPcGNpb25bXSA9IFtcclxuICAgIHsgLi4uY2FzaWxsZXJvVmFjaW8sIGNhc2lsbGVybzogMSwgdGlwb2M6ICdPJywgbm9tYnJlOiAnU8OtJyB9LFxyXG4gICAgeyAuLi5jYXNpbGxlcm9WYWNpbywgY2FzaWxsZXJvOiAyLCB0aXBvYzogJ08nLCBub21icmU6ICdObycgfSxcclxuXVxyXG5cclxudHlwZSBDYXJhY2VyaXphY2lvbkVzdGFkb1Jvd1ZhbGlkYXRvciA9IHtcclxuICAgIGNvcnJlY3RvOiBib29sZWFuLFxyXG4gICAgY29uVmFsb3I6IGJvb2xlYW4gfCBudWxsLCAvLyBudWxsID0gdW5rbm93blxyXG59XHJcblxyXG5mdW5jdGlvbiBhcGxhbmFyTGFDdXJ2YTxUIGV4dGVuZHMgeyB0aXBvYzogc3RyaW5nLCBkZXNwbGllZ3VlPzogc3RyaW5nIH0+KGNhc2lsbGVyb3NEYXRhOiBJRGF0YVNlcGFyYWRhPFQ+KTogSURhdGFDb25DYXNpbGxlcm9zPFQgfCBPcGNpb24+IHtcclxuICAgIHZhciBkYXRhID0gY2FzaWxsZXJvc0RhdGEuZGF0YVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICAuLi5kYXRhLFxyXG4gICAgICAgIGRlc3BsaWVndWVDb250ZW5pZG86IGRhdGEuZGVzcGxpZWd1ZT8uaW5jbHVkZXMoJ2hvcml6b250YWwnKSA/ICdob3Jpem9udGFsJyA6IGRhdGEuZGVzcGxpZWd1ZT8uaW5jbHVkZXMoJ3ZlcnRpY2FsJykgPyAndmVydGljYWwnIDogbnVsbCxcclxuICAgICAgICBkZXNwbGllZ3VlRW5jYWJlemFkbzogZGF0YS5kZXNwbGllZ3VlPy5pbmNsdWRlcygnbGF0ZXJhbCcpID8gJ2xhdGVyYWwnIDogZGF0YS5kZXNwbGllZ3VlPy5pbmNsdWRlcygnc3VwZXJpb3InKSA/ICdzdXBlcmlvcicgOiBudWxsLFxyXG4gICAgICAgIGRlc3BsaWVndWVPY3VsdGE6IGRhdGEuZGVzcGxpZWd1ZT8uaW5jbHVkZXMoJ29jdWx0YXInKSA/PyBudWxsLFxyXG4gICAgICAgIGRlc3BsaWVndWVUaXBvSW5wdXQ6IGRhdGEuZGVzcGxpZWd1ZT8uaW5jbHVkZXMoJ3RlbGVmb25vJykgPyAndGVsJyA6IG51bGwsXHJcbiAgICAgICAgY2FzaWxsZXJvczogIWNhc2lsbGVyb3NEYXRhLmNoaWxkcy5sZW5ndGggJiYgY2FzaWxsZXJvc0RhdGEuZGF0YS50aXBvYyA9PSAnT00nID8gb3BjaW9uZXNTaU5vIDpcclxuICAgICAgICAgICAgY2FzaWxsZXJvc0RhdGEuY2hpbGRzLm1hcChjYXNpbGxlcm8gPT4gYXBsYW5hckxhQ3VydmEoY2FzaWxsZXJvKSlcclxuICAgIH1cclxufVxyXG5cclxuLy8gdHlwZSBBbnlSZWY8VCBleHRlbmRzIHt9Pj1bVCwga2V5b2YgVF07XHJcblxyXG5mdW5jdGlvbiByZWxsZW5hclZhcmlhYmxlc1lPcGNpb25lcyhpZEZvcm11bGFyaW86IElkRm9ybXVsYXJpbywgZXN0cnVjdHVyYTogRXN0cnVjdHVyYVJvd1ZhbGlkYXRvciwgY2FzaWxsZXJvOiBDYXNpbGxlcm9zSW1wbGVtZW50YWRvcywgdW5pZGFkQW5hbGlzaXM/OiBzdHJpbmcgfCBudWxsLFxyXG4gICAgc3Vib3JkaW5hZGFWYXI/OiBJZFZhcmlhYmxlLCBzdWJvcmRpbmFkYVZhbG9yPzogYW55XHJcbikge1xyXG4gICAgaWYgKGNhc2lsbGVyby52YXJfbmFtZSAhPSBudWxsIHx8IGNhc2lsbGVyby50aXBvYyA9PSAnRklMVFJPJykge1xyXG4gICAgICAgIHZhciB2YXJfbmFtZTogSWRWYXJpYWJsZVxyXG4gICAgICAgIGlmIChjYXNpbGxlcm8udGlwb2MgPT0gJ0ZJTFRSTycpIHtcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBwb25nbyBjb21vIG5vbWJyZSBkZSB2YXJpYWJsZSBlbCBmaWx0cm87XHJcbiAgICAgICAgICAgIHZhcl9uYW1lID0gY2FzaWxsZXJvLmNhc2lsbGVybztcclxuICAgICAgICB9IGVsc2UgaWYgKGNhc2lsbGVyby52YXJfbmFtZS5lbmRzV2l0aCgnIScpKSB7XHJcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgbGFzIHZhcmlhYmxlcyBlc3Blam8gc29uIGxhcyBxdWUgdGVybWluYW4gZW4gIVxyXG4gICAgICAgICAgICB2YXJfbmFtZSA9IGNhc2lsbGVyby52YXJfbmFtZV9lc3BlY2lhbC5yZXBsYWNlKC8hKyQvLCAnJyk7XHJcbiAgICAgICAgICAgIGNhc2lsbGVyby52YXJfbmFtZSA9IHZhcl9uYW1lO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhcl9uYW1lID0gY2FzaWxsZXJvLnZhcl9uYW1lXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB2YXJpYWJsZURlZiA9IHtcclxuICAgICAgICAgICAgdGlwbzogY2FzaWxsZXJvLnRpcG9jID09ICdGSUxUUk8nID8gJ2ZpbHRybycgOiBjYXNpbGxlcm8udGlwb2MgPT0gJ09NJyB8fCBjYXNpbGxlcm8udGlwb3ZhciA9PSAnc2lfbm8nID8gJ29wY2lvbmVzJyA6IGNhc2lsbGVyby50aXBvdmFyLFxyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlIG9wdGF0aXZvIHBvZHLDrWEgbm8gZXhpc3RpciwgcXVlZGFyw6EgbnVsbC5cclxuICAgICAgICAgICAgb3B0YXRpdmE6IGNhc2lsbGVyby5vcHRhdGl2byEsXHJcbiAgICAgICAgICAgIG9wY2lvbmVzOiAoY2FzaWxsZXJvLnRpcG9jID09ICdPTScgfHwgY2FzaWxsZXJvLnRpcG92YXIgPT0gJ29wY2lvbmVzJyB8fCBjYXNpbGxlcm8udGlwb3ZhciA9PSAnc2lfbm8nID9cclxuICAgICAgICAgICAgICAgIGxpa2VBci5jcmVhdGVJbmRleChjYXNpbGxlcm8uY2FzaWxsZXJvcywgJ2Nhc2lsbGVybycpIDoge30pIGFzIHVua25vd24gYXMgeyBba2V5OiBzdHJpbmddOiBSb3dWYWxpZGF0b3JPcGNpb248SWRWYXJpYWJsZT4gfSxcclxuICAgICAgICAgICAgc2FsdG86IGNhc2lsbGVyby5zYWx0byBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgICAgICBzYWx0b05zTnI6ICdzYWx0b19uc19uYycgaW4gY2FzaWxsZXJvICYmIGNhc2lsbGVyby5zYWx0b19uc19uYyB8fCBudWxsLFxyXG4gICAgICAgICAgICBmdW5jaW9uSGFiaWxpdGFyOiBjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyxcclxuICAgICAgICAgICAgZnVuY2lvbkF1dG9JbmdyZXNhcjogY2FzaWxsZXJvLmV4cHJlc2lvbl9hdXRvaW5ncmVzYXJfanMsXHJcbiAgICAgICAgICAgIGNhbGN1bGFkYTpcclxuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgLy8gVE9ETy4gQXZlcmlndWFyIHNpIGxhcyBwcmVndW50YXMgeSBmaWx0cm9zIHB1ZWRlbiB0ZW5lciB1bmlkYWQgZGUgYW7DoWxpc2lzXHJcbiAgICAgICAgICAgICAgICBjYXNpbGxlcm8udW5pZGFkX2FuYWxpc2lzICYmIGNhc2lsbGVyby51bmlkYWRfYW5hbGlzaXMgIT0gdW5pZGFkQW5hbGlzaXNcclxuICAgICAgICAgICAgICAgIHx8IGNhc2lsbGVyby5jYWxjdWxhZGEsXHJcbiAgICAgICAgICAgIGxpYnJlOiBjYXNpbGxlcm8ubGlicmVcclxuICAgICAgICB9IGFzICh0eXBlb2YgZXN0cnVjdHVyYS52YXJpYWJsZXMpW0lkVmFyaWFibGVdXHJcbiAgICAgICAgaWYgKHN1Ym9yZGluYWRhVmFsb3IgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHZhcmlhYmxlRGVmLnN1Ym9yZGluYWRhVmFyID0gc3Vib3JkaW5hZGFWYXI7XHJcbiAgICAgICAgICAgIHZhcmlhYmxlRGVmLnN1Ym9yZGluYWRhVmFsb3IgPSBzdWJvcmRpbmFkYVZhbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlc3RydWN0dXJhLnZhcmlhYmxlc1t2YXJfbmFtZV0gPSB2YXJpYWJsZURlZjtcclxuICAgIH0gZWxzZSBpZiAoY2FzaWxsZXJvLnRpcG9jID09ICdCRicpIHtcclxuICAgICAgICAvLyB2YXIgdmFyX25hbWUgPSAnJEIuRjonK2Nhc2lsbGVyby5zYWx0byBhcyBJZFZhcmlhYmxlOyAgICAvL29yaWdpbmFsXHJcbiAgICAgICAgdmFyIHNhbHRvTm9tYnJlID0gY2FzaWxsZXJvLnNhbHRvIS5zdWJzdHIoMCwgMikgPT0gJ0Y6JyA/IGNhc2lsbGVyby5zYWx0byEuc2xpY2UoMikgOiBjYXNpbGxlcm8uc2FsdG87XHJcbiAgICAgICAgY29uc3QgcmVxdWllcmVBZ3JlZ2FyID0gY2FzaWxsZXJvLnVuaWRhZF9hbmFsaXNpcyAmJiBjYXNpbGxlcm8udW5pZGFkX2FuYWxpc2lzICE9PSB1bmlkYWRBbmFsaXNpc1xyXG4gICAgICAgIGNhc2lsbGVyby52YXJfbmFtZXNfQkYgPSBjYXNpbGxlcm8udmFyX25hbWVzX0JGIHx8IFtdO1xyXG5cclxuICAgICAgICBpZiAocmVxdWllcmVBZ3JlZ2FyKSB7XHJcbiAgICAgICAgICAgIHZhciBuZXdWYXJOYW1lQWdyZWdhciA9ICckQi5GOicgKyBzYWx0b05vbWJyZSArICdfYWdyZWdhcicgYXMgSWRWYXJpYWJsZTtcclxuICAgICAgICAgICAgY2FzaWxsZXJvLnZhcl9uYW1lc19CRi5wdXNoKG5ld1Zhck5hbWVBZ3JlZ2FyKTtcclxuICAgICAgICAgICAgZXN0cnVjdHVyYS52YXJpYWJsZXNbbmV3VmFyTmFtZUFncmVnYXJdID0ge1xyXG4gICAgICAgICAgICAgICAgdGlwb3ZhcjogJ29wY2lvbmVzJyxcclxuICAgICAgICAgICAgICAgIGNhc2lsbGVyb3M6IFt7IHRpcG9jOiAnTycsIGNhc2lsbGVybzogMSwgbm9tYnJlOiAnc2knIH1dIGFzIE9wY2lvbltdLCAvLyBzZSB1c2EgcGFyYSBxdWUgbm8gc2VhIGxpYnJlIHkgZWwgcm93VmFsaWRhdG9yIGxhIHZlYVxyXG4gICAgICAgICAgICB9IGFzIFZhcmlhYmxlO1xyXG4gICAgICAgICAgICBjYXNpbGxlcm8ucHJpbWVyYV92YXJpYWJsZSA9IG5ld1Zhck5hbWVBZ3JlZ2FyO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbmV3VmFyTmFtZSA9ICckQi5GOicgKyBzYWx0b05vbWJyZSBhcyBJZFZhcmlhYmxlO1xyXG4gICAgICAgIGNhc2lsbGVyby52YXJfbmFtZXNfQkYucHVzaChuZXdWYXJOYW1lKVxyXG4gICAgICAgIGVzdHJ1Y3R1cmEudmFyaWFibGVzW25ld1Zhck5hbWVdID0ge1xyXG4gICAgICAgICAgICB0aXBvdmFyOiAnb3BjaW9uZXMnLFxyXG4gICAgICAgICAgICBjYXNpbGxlcm9zOiBbeyB0aXBvYzogJ08nLCBjYXNpbGxlcm86IDEsIG5vbWJyZTogJ3NpJyB9XSBhcyBPcGNpb25bXSwgLy8gc2UgdXNhIHBhcmEgcXVlIG5vIHNlYSBsaWJyZSB5IGVsIHJvd1ZhbGlkYXRvciBsYSB2ZWFcclxuICAgICAgICB9IGFzIFZhcmlhYmxlO1xyXG4gICAgICAgIGNhc2lsbGVyby5wcmltZXJhX3ZhcmlhYmxlID0gY2FzaWxsZXJvLnByaW1lcmFfdmFyaWFibGUgfHwgbmV3VmFyTmFtZTtcclxuXHJcbiAgICB9XHJcbiAgICBpZiAoY2FzaWxsZXJvLmNhc2lsbGVyb3MpIHtcclxuICAgICAgICBjYXNpbGxlcm8uY2FzaWxsZXJvcy5mb3JFYWNoKChjYXNpbGxlcm9IaWpvOiBDYXNpbGxlcm9zSW1wbGVtZW50YWRvcykgPT5cclxuICAgICAgICAgICAgcmVsbGVuYXJWYXJpYWJsZXNZT3BjaW9uZXMoaWRGb3JtdWxhcmlvLCBlc3RydWN0dXJhLCBjYXNpbGxlcm9IaWpvLCB1bmlkYWRBbmFsaXNpcywgY2FzaWxsZXJvLnZhcl9uYW1lID8gY2FzaWxsZXJvLnZhcl9uYW1lIDogY2FzaWxsZXJvLnRpcG9jID09ICdPJyA/IHN1Ym9yZGluYWRhVmFyIDogdW5kZWZpbmVkLCBjYXNpbGxlcm8udGlwb2MgPT0gJ08nID8gY2FzaWxsZXJvLmNhc2lsbGVybyA6IHVuZGVmaW5lZClcclxuICAgICAgICApXHJcbiAgICB9XHJcbn1cclxuXHJcbnR5cGUgUmVnaXN0cm9EZXN0aW5vcyA9IHsgW2Rlc3Rpbm8gaW4gSWREZXN0aW5vXTogSWRWYXJpYWJsZSB8IG51bGwgfTtcclxuXHJcbmZ1bmN0aW9uIG9idGVuZXJEZXN0aW5vc0Nhc2lsbGVyb3MoY2FzaWxsZXJvOiBDYXNpbGxlcm9zSW1wbGVtZW50YWRvcywgZGVzdGlub3M/OiBSZWdpc3Ryb0Rlc3Rpbm9zKTogUmVnaXN0cm9EZXN0aW5vcyB7XHJcbiAgICBpZiAoZGVzdGlub3MgPT0gbnVsbCkgcmV0dXJuIG9idGVuZXJEZXN0aW5vc0Nhc2lsbGVyb3MoY2FzaWxsZXJvLCB7fSBhcyBSZWdpc3Ryb0Rlc3Rpbm9zKTtcclxuICAgIGlmIChjYXNpbGxlcm8udGlwb2MgPT0gJ0ZJTFRSTycpIHtcclxuICAgICAgICBkZXN0aW5vc1tjYXNpbGxlcm8uY2FzaWxsZXJvXSA9IGNhc2lsbGVyby5jYXNpbGxlcm8gYXMgSWRWYXJpYWJsZTtcclxuICAgIH0gZWxzZSBpZiAoY2FzaWxsZXJvLnRpcG9jICE9ICdGJyAmJiBjYXNpbGxlcm8udGlwb2MgIT0gJ08nICYmIGNhc2lsbGVyby50aXBvYyAhPSAnT00nKSB7XHJcbiAgICAgICAgZGVzdGlub3NbY2FzaWxsZXJvLmNhc2lsbGVyb10gPSBjYXNpbGxlcm8ucHJpbWVyYV92YXJpYWJsZSB8fCBudWxsXHJcbiAgICB9XHJcbiAgICBpZiAoY2FzaWxsZXJvLmNhc2lsbGVyb3MpIHtcclxuICAgICAgICBjYXNpbGxlcm8uY2FzaWxsZXJvcy5mb3JFYWNoKGMgPT4gb2J0ZW5lckRlc3Rpbm9zQ2FzaWxsZXJvcyhjLCBkZXN0aW5vcykpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRlc3Rpbm9zO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZWxsZW5hckRlc3Rpbm9zKGVzdHJ1Y3R1cmE6IEVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3IsIGRlc3Rpbm9zOiBSZWdpc3Ryb0Rlc3Rpbm9zKTogRXN0cnVjdHVyYVJvd1ZhbGlkYXRvciB7XHJcbiAgICBmdW5jdGlvbiBvYnRlbmVyRGVzdGlubyhpZFZhcmlhYmxlUXVlVGllbmVVbkRlc3Rpbm86IElkVmFyaWFibGUgfCBudWxsIHwgdW5kZWZpbmVkIHwgSWRGaW4pOiBJZFZhcmlhYmxlIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIGlkVmFyaWFibGVRdWVUaWVuZVVuRGVzdGlubyA9PSAnZmluJyBhcyBJZFZhcmlhYmxlID8gJ2ZpbicgYXMgSWRWYXJpYWJsZSA6IGlkVmFyaWFibGVRdWVUaWVuZVVuRGVzdGlubyAhPSBudWxsICYmIGRlc3Rpbm9zW2lkVmFyaWFibGVRdWVUaWVuZVVuRGVzdGlubyBhcyBJZERlc3Rpbm9dIHx8IG51bGxcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uZXN0cnVjdHVyYSxcclxuICAgICAgICB2YXJpYWJsZXM6IGxpa2VBcihlc3RydWN0dXJhLnZhcmlhYmxlcykubWFwKHZhcmlhYmxlRGVmID0+ICh7XHJcbiAgICAgICAgICAgIC4uLnZhcmlhYmxlRGVmLFxyXG4gICAgICAgICAgICBzYWx0bzogb2J0ZW5lckRlc3Rpbm8odmFyaWFibGVEZWYuc2FsdG8pLFxyXG4gICAgICAgICAgICBzYWx0b05zTnI6IG9idGVuZXJEZXN0aW5vKHZhcmlhYmxlRGVmLnNhbHRvTnNOciksXHJcbiAgICAgICAgICAgIG9wY2lvbmVzOiB2YXJpYWJsZURlZi5vcGNpb25lcyAhPSBudWxsID8gbGlrZUFyKHZhcmlhYmxlRGVmLm9wY2lvbmVzKS5tYXAob3BjaW9uRGVmID0+ICh7IHNhbHRvOiBvYnRlbmVyRGVzdGlubyhvcGNpb25EZWYuc2FsdG8pIH0pKS5wbGFpbigpIDogdW5kZWZpbmVkXHJcbiAgICAgICAgfSkpLnBsYWluKClcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2VuZXJhckVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3IoY2FzaWxsZXJvOiBDYXNpbGxlcm9zSW1wbGVtZW50YWRvcywgaWRGb3JtdWxhcmlvOiBJZEZvcm11bGFyaW8pOiBFc3RydWN0dXJhUm93VmFsaWRhdG9yIHtcclxuICAgIHZhciBlc3RydWN0dXJhSW5jb21wbGV0YTogRXN0cnVjdHVyYVJvd1ZhbGlkYXRvciA9IHsgdmFyaWFibGVzOiB7fSwgbWFyY2FGaW46ICdmaW4nIH0gYXMgdW5rbm93biBhcyBFc3RydWN0dXJhUm93VmFsaWRhdG9yO1xyXG4gICAgcmVsbGVuYXJWYXJpYWJsZXNZT3BjaW9uZXMoaWRGb3JtdWxhcmlvLCBlc3RydWN0dXJhSW5jb21wbGV0YSwgY2FzaWxsZXJvLFxyXG4gICAgICAgIC8vIEB0cy1pZ25vcmUgdmVyIHNpIGN1YWxxdWllciBjb3NhIHB1ZWRlIHRlbmVyIHVuaWRhZF9hbmFsaXNpc1xyXG4gICAgICAgIGNhc2lsbGVyby51bmlkYWRfYW5hbGlzaXNcclxuICAgICk7XHJcbiAgICB2YXIgZGVzdGlub3MgPSBvYnRlbmVyRGVzdGlub3NDYXNpbGxlcm9zKGNhc2lsbGVybyk7XHJcbiAgICByZXR1cm4gcmVsbGVuYXJEZXN0aW5vcyhlc3RydWN0dXJhSW5jb21wbGV0YSwgZGVzdGlub3MpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVNwZWNpYWxXb3Jkcyh0ZXh0OiBzdHJpbmcsIG5vbWJyZTogc3RyaW5nLCBhcGVsbGlkbzogc3RyaW5nLCByZXN1bHRhZG86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBmdW5jdGlvbiBjYXBpdGFsaXplRmlyc3RMZXR0ZXIodGV4dDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRleHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0ZXh0LnNsaWNlKDEpO1xyXG4gICAgfVxyXG4gICAgdmFyIHNpbXBsaWZpY2F0ZWRDaGFyczogeyBbazogc3RyaW5nXTogc3RyaW5nIH0gPSB7XHJcbiAgICAgICAgXCIjbm9tYnJlXCI6IGNhcGl0YWxpemVGaXJzdExldHRlcihub21icmUpLFxyXG4gICAgICAgIFwiI2FwZWxsaWRvXCI6IGNhcGl0YWxpemVGaXJzdExldHRlcihhcGVsbGlkbyksXHJcbiAgICAgICAgXCIjcmVzdWx0YWRvXCI6IHJlc3VsdGFkbyxcclxuICAgIH07XHJcbiAgICB2YXIgcmUgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKHNpbXBsaWZpY2F0ZWRDaGFycykuam9pbihcInxcIiksIFwiZ2lcIik7XHJcblxyXG4gICAgcmV0dXJuIHRleHQucmVwbGFjZShyZSwgZnVuY3Rpb24gKG1hdGNoZWQpIHtcclxuICAgICAgICByZXR1cm4gc2ltcGxpZmljYXRlZENoYXJzW21hdGNoZWQudG9Mb3dlckNhc2UoKV07XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdvdG9Db25zaXN0aXIob3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IElkVGFyZWEsIGVuYzogSWRFbmMpIHtcclxuICAgIC8vIFRPRE8tMjAyMy0wMzogcHJvYmFyIGNvbiBlc3RvOlxyXG4gICAgaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwgJycsIGAke2xvY2F0aW9uLm9yaWdpbiArIGxvY2F0aW9uLnBhdGhuYW1lfS8uLi9tZW51I3c9Y29uc2lzdGlyX2VuY3Vlc3RhJnVwPSR7SlNPTjRhbGwudG9VcmwoeyBvcGVyYXRpdm8sIHRhcmVhLCBlbmMgfSl9JmF1dG9wcm9jZWQ9dHJ1ZWApO1xyXG4gICAgLy8gaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwgJycsIGAke2xvY2F0aW9uLm9yaWdpbitsb2NhdGlvbi5wYXRobmFtZX0vLi4vbWVudSN3PWNvbnNpc3Rpcl9lbmN1ZXN0YSZ1cD17XCJvcGVyYXRpdm9cIjpcIiR7b3BlcmF0aXZvfVwiLFwidGFyZWFcIjpcIiR7dGFyZWF9XCIsXCJlbmN1ZXN0YVwiOiR7ZW5jdWVzdGF9fSZhdXRvcHJvY2VkPXRydWVgKTtcclxuICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWRhcHRhckVzdHJ1Y3R1cmEoZXN0cnVjdHVyYUJhY2tlbmQ6YW55KSB7XHJcbiAgICB2YXIgZXN0cnVjdHVyYTogRXN0cnVjdHVyYSA9IGVzdHJ1Y3R1cmFCYWNrZW5kO1xyXG4gICAgdmFyIGNhc2lsbGVyb3NPcmlnaW5hbGVzOiB7fSA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3M7XHJcbiAgICB2YXIgbWFpbkZvcm06IElkRm9ybXVsYXJpbyB8IHVuZGVmaW5lZDtcclxuICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgdmFyIGNhc2lsbGVyb3NUb2Rvc0Zvcm11bGFyaW9zOiB7IFtmIGluIElkRm9ybXVsYXJpb106IHsgY2FzaWxsZXJvczogRm9ybXVsYXJpbywgZXN0cnVjdHVyYVJvd1ZhbGlkYXRvcjogRXN0cnVjdHVyYVJvd1ZhbGlkYXRvciB9IH0gPVxyXG4gICAgICAgIGxpa2VBcihjYXNpbGxlcm9zT3JpZ2luYWxlcykubWFwKFxyXG4gICAgICAgICAgICAoY2FzaWxsZXJvc0plcmFycXVpemFkb3M6IGFueSwgaWRGb3JtdWxhcmlvKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2FzaWxsZXJvc0FwbGFuYWRvczogQ2FzaWxsZXJvc0ltcGxlbWVudGFkb3MgPSBhcGxhbmFyTGFDdXJ2YShjYXNpbGxlcm9zSmVyYXJxdWl6YWRvcyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2FzaWxsZXJvc0FwbGFuYWRvcy50aXBvYyA9PSAnRicgJiYgY2FzaWxsZXJvc0FwbGFuYWRvcy5mb3JtdWxhcmlvX3ByaW5jaXBhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1haW5Gb3JtID0gaWRGb3JtdWxhcmlvO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm9zOiBjYXNpbGxlcm9zQXBsYW5hZG9zLFxyXG4gICAgICAgICAgICAgICAgICAgIGVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3I6IGdlbmVyYXJFc3RydWN0dXJhUm93VmFsaWRhdG9yKGNhc2lsbGVyb3NBcGxhbmFkb3MsIGlkRm9ybXVsYXJpbylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICkucGxhaW4oKTtcclxuICAgIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MgPSBjYXNpbGxlcm9zVG9kb3NGb3JtdWxhcmlvc1xyXG4gICAgcmV0dXJuIGVzdHJ1Y3R1cmE7XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhclN0b3JlRm9ybXVsYXJpbyhvcHRzOiB7IG9wZXJhdGl2bz86IElkT3BlcmF0aXZvLCBmb3JQa1JhaXo/OiBGb3JQa1JhaXogfSkge1xyXG4gICAgdmFyIGdldENhc29TdGF0ZSA9IGdldEZvcm1SZW5kZXJlcigpLmdldENhc29TdGF0ZS5iaW5kKGdldEZvcm1SZW5kZXJlcigpKTtcclxuICAgIHZhciBzZXRDYXNvU3RhdGUgPSBnZXRGb3JtUmVuZGVyZXIoKS5zZXRDYXNvU3RhdGUuYmluZChnZXRGb3JtUmVuZGVyZXIoKSk7XHJcblxyXG4gICAgdmFyIGxvYWRTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIGxvYWRTdGF0ZSgpOiBQcm9taXNlPENhc29TdGF0ZT4ge1xyXG4gICAgICAgIHZhciBjYXNvU3RhdGU6IENhc29TdGF0ZSB8IG51bGwgPSBnZXRDYXNvU3RhdGUoKTtcclxuICAgICAgICB2YXIgaW5pdGlhbFN0YXRlID0ge1xyXG4gICAgICAgICAgICBvcGNpb25lczoge1xyXG4gICAgICAgICAgICAgICAgZm9yUGs6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBwaWxhRm9yUGs6IFtdLFxyXG4gICAgICAgICAgICAgICAgbW9kb0Rlc3BsaWVndWU6ICdyZWxldmFtaWVudG8nLFxyXG4gICAgICAgICAgICAgICAgbW9kb0RpcmVjdG86IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgY29uQ2FtcG9PcGNpb25lczogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBzYWx0b0F1dG9tYXRpY286IHRydWUsXHJcbiAgICAgICAgICAgICAgICBtb2RvQm9ycmFyUmVzcHVlc3RhOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgcGFudGFsbGFBY3R1YWw6ICdoZHInLFxyXG4gICAgICAgICAgICAgICAgYXZpc29QZXJzaXN0ZW50ZTogbnVsbFxyXG4gICAgICAgICAgICB9IGFzIENhc29TdGF0ZVtcIm9wY2lvbmVzXCJdLCAvLyBwb25lciBsb3MgdmFsb3JlcyBwb3IgZGVmZWN0byBtw6FzIGFiYWpvXHJcbiAgICAgICAgfSBhcyBDYXNvU3RhdGU7XHJcbiAgICAgICAgaWYgKGNhc29TdGF0ZSkge1xyXG4gICAgICAgICAgICBpbml0aWFsU3RhdGUgPSB7XHJcbiAgICAgICAgICAgICAgICAuLi5pbml0aWFsU3RhdGUsXHJcbiAgICAgICAgICAgICAgICBvcGNpb25lczogY2Fzb1N0YXRlLm9wY2lvbmVzXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdHMuZm9yUGtSYWl6KSB7XHJcbiAgICAgICAgICAgIGluaXRpYWxTdGF0ZS5vcGNpb25lcy5mb3JQayA9IG9wdHMuZm9yUGtSYWl6O1xyXG4gICAgICAgICAgICBpbml0aWFsU3RhdGUub3BjaW9uZXMubW9kb0RpcmVjdG8gPSAhIW9wdHMuZm9yUGtSYWl6O1xyXG4gICAgICAgICAgICBpbml0aWFsU3RhdGUub3BjaW9uZXMucGlsYUZvclBrID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBhZGRyUGFyYW1zID0gbXlPd24uVXJpU2VhcmNoVG9PYmplY3QobG9jYXRpb24uaGFzaCB8fCBsb2NhdGlvbi5zZWFyY2ggfHwgJycpO1xyXG4gICAgICAgIGlmIChhZGRyUGFyYW1zLnN0YXRlX2ZvclBrKSB7XHJcbiAgICAgICAgICAgIGluaXRpYWxTdGF0ZS5vcGNpb25lcy5mb3JQayA9IEpTT04ucGFyc2UoYWRkclBhcmFtcy5zdGF0ZV9mb3JQayk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhZGRyUGFyYW1zLnN0YXRlX3BpbGFGb3JQaykge1xyXG4gICAgICAgICAgICBpbml0aWFsU3RhdGUub3BjaW9uZXMucGlsYUZvclBrID0gKGFkZHJQYXJhbXMuc3RhdGVfcGlsYUZvclBrIGFzIHN0cmluZykuc3BsaXQoJ3wnKS5tYXAoaiA9PiBKU09ONGFsbC5wYXJzZShqKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XHJcbiAgICB9XHJcbiAgICB2YXIgc2F2ZVN0YXRlID0gZnVuY3Rpb24gc2F2ZVN0YXRlKHN0YXRlOiBDYXNvU3RhdGUpIHtcclxuICAgICAgICBzZXRDYXNvU3RhdGUoc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgLyogREVGSU5JQ0lPTiBDT05UUk9MQURPUiAqL1xyXG4gICAgdmFyIGluaXRpYWxTdGF0ZTogQ2Fzb1N0YXRlID0gYXdhaXQgbG9hZFN0YXRlKCk7XHJcbiAgICBjb25zdCBoZHJSZWR1Y2VyID0gY3JlYXRlUmVkdWNlcihyZWR1Y2VycywgaW5pdGlhbFN0YXRlKTtcclxuICAgIC8qIEZJTiBERUZJTklDSU9OIENPTlRST0xBRE9SICovXHJcbiAgICAvKiBDQVJHQSBZIEdVQVJEQURPIERFIFNUQVRFICovXHJcbiAgICAvKiBDUkVBQ0lPTiBTVE9SRSAqL1xyXG4gICAgY29uc3Qgc3RvcmUgPSBjcmVhdGVTdG9yZShoZHJSZWR1Y2VyLCBpbml0aWFsU3RhdGUpO1xyXG4gICAgc2F2ZVN0YXRlKHN0b3JlLmdldFN0YXRlKCkpO1xyXG4gICAgc3RvcmUuc3Vic2NyaWJlKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBzYXZlU3RhdGUoc3RvcmUuZ2V0U3RhdGUoKSk7XHJcbiAgICB9KTtcclxuICAgIC8qIEZJTiBDUkVBQ0lPTiBTVE9SRSAqL1xyXG4gICAgLy9IRFIgQ09OIFNUT1JFIENSRUFET1xyXG4gICAgcmV0dXJuIHN0b3JlO1xyXG59Il19
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { CasoState, DatosByPassPersistibles, ModoDM, Estructura, ForPkRaiz } from './tipos';
|
|
2
|
+
export interface FormularioConfig {
|
|
3
|
+
getCasoState(): CasoState;
|
|
4
|
+
setCasoState(state: CasoState): void;
|
|
5
|
+
getUltimoValorPkRaiz(): string;
|
|
6
|
+
setUltimoValorPkRaiz(value: string): void;
|
|
7
|
+
getAppCacheVersion(): string;
|
|
8
|
+
setAppCacheVersion(value: string): void;
|
|
9
|
+
getModoDM(): ModoDM;
|
|
10
|
+
setModoDM(modo: ModoDM): void;
|
|
11
|
+
getIdperLogueado(): string;
|
|
12
|
+
getUsernameLogueado(): string;
|
|
13
|
+
leerDatos(): Promise<DatosByPassPersistibles | null>;
|
|
14
|
+
persistirDatos(datos: DatosByPassPersistibles): Promise<void>;
|
|
15
|
+
leerEstructura(): Promise<Estructura | null>;
|
|
16
|
+
persistirEstructura(estructura: Estructura): Promise<void>;
|
|
17
|
+
onSincronizar(persistentes: DatosByPassPersistibles | null, cambiaModoDM: boolean): Promise<DatosByPassPersistibles>;
|
|
18
|
+
onLogout(): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
type CargarMotorFn = (opts: {
|
|
21
|
+
forPkRaiz?: ForPkRaiz;
|
|
22
|
+
}) => Promise<void>;
|
|
23
|
+
export declare function registrarCargarMotor(fn: CargarMotorFn): void;
|
|
24
|
+
export declare class FormRenderer implements FormularioConfig {
|
|
25
|
+
private static instance;
|
|
26
|
+
private config;
|
|
27
|
+
private constructor();
|
|
28
|
+
static initialize(config: FormularioConfig): FormRenderer;
|
|
29
|
+
updateConfig(partialConfig: Partial<FormularioConfig>): void;
|
|
30
|
+
cargarMotor(opts?: {
|
|
31
|
+
forPkRaiz?: ForPkRaiz;
|
|
32
|
+
}): Promise<void>;
|
|
33
|
+
getCasoState(): CasoState;
|
|
34
|
+
setCasoState(state: CasoState): void;
|
|
35
|
+
getUltimoValorPkRaiz(): string;
|
|
36
|
+
setUltimoValorPkRaiz(value: string): void;
|
|
37
|
+
getAppCacheVersion(): string;
|
|
38
|
+
setAppCacheVersion(value: string): void;
|
|
39
|
+
getModoDM(): ModoDM;
|
|
40
|
+
setModoDM(modo: ModoDM): void;
|
|
41
|
+
getIdperLogueado(): string;
|
|
42
|
+
getUsernameLogueado(): string;
|
|
43
|
+
leerDatos(): Promise<DatosByPassPersistibles | null>;
|
|
44
|
+
persistirDatos(datos: DatosByPassPersistibles): Promise<void>;
|
|
45
|
+
leerEstructura(): Promise<Estructura | null>;
|
|
46
|
+
persistirEstructura(estructura: Estructura): Promise<void>;
|
|
47
|
+
onSincronizar(persistentes: DatosByPassPersistibles | null, cambiaModoDM: boolean): Promise<DatosByPassPersistibles>;
|
|
48
|
+
onLogout(): Promise<void>;
|
|
49
|
+
}
|
|
50
|
+
export declare function createFormRenderer(partialConfig: Partial<FormularioConfig>): FormRenderer;
|
|
51
|
+
export declare function getFormRenderer(): FormRenderer;
|
|
52
|
+
export {};
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
(function (factory) {
|
|
11
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
12
|
+
var v = factory(require, exports);
|
|
13
|
+
if (v !== undefined) module.exports = v;
|
|
14
|
+
}
|
|
15
|
+
else if (typeof define === "function" && define.amd) {
|
|
16
|
+
define(["require", "exports"], factory);
|
|
17
|
+
}
|
|
18
|
+
})(function (require, exports) {
|
|
19
|
+
"use strict";
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.FormRenderer = void 0;
|
|
22
|
+
exports.registrarCargarMotor = registrarCargarMotor;
|
|
23
|
+
exports.createFormRenderer = createFormRenderer;
|
|
24
|
+
exports.getFormRenderer = getFormRenderer;
|
|
25
|
+
let cargarMotorFn = null;
|
|
26
|
+
function registrarCargarMotor(fn) {
|
|
27
|
+
cargarMotorFn = fn;
|
|
28
|
+
}
|
|
29
|
+
class FormRenderer {
|
|
30
|
+
constructor(config) {
|
|
31
|
+
this.config = config;
|
|
32
|
+
}
|
|
33
|
+
static initialize(config) {
|
|
34
|
+
FormRenderer.instance = new FormRenderer(config);
|
|
35
|
+
return FormRenderer.instance;
|
|
36
|
+
}
|
|
37
|
+
updateConfig(partialConfig) {
|
|
38
|
+
this.config = Object.assign(Object.assign({}, this.config), partialConfig);
|
|
39
|
+
}
|
|
40
|
+
cargarMotor() {
|
|
41
|
+
return __awaiter(this, arguments, void 0, function* (opts = {}) {
|
|
42
|
+
if (!cargarMotorFn) {
|
|
43
|
+
throw new Error('cargarMotor no registrado. Asegúrese de importar render-formulario antes de llamar a cargarMotor.');
|
|
44
|
+
}
|
|
45
|
+
return cargarMotorFn(opts);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
getCasoState() {
|
|
49
|
+
return this.config.getCasoState();
|
|
50
|
+
}
|
|
51
|
+
setCasoState(state) {
|
|
52
|
+
this.config.setCasoState(state);
|
|
53
|
+
}
|
|
54
|
+
getUltimoValorPkRaiz() {
|
|
55
|
+
return this.config.getUltimoValorPkRaiz();
|
|
56
|
+
}
|
|
57
|
+
setUltimoValorPkRaiz(value) {
|
|
58
|
+
this.config.setUltimoValorPkRaiz(value);
|
|
59
|
+
}
|
|
60
|
+
getAppCacheVersion() {
|
|
61
|
+
return this.config.getAppCacheVersion();
|
|
62
|
+
}
|
|
63
|
+
setAppCacheVersion(value) {
|
|
64
|
+
this.config.setAppCacheVersion(value);
|
|
65
|
+
}
|
|
66
|
+
getModoDM() {
|
|
67
|
+
return this.config.getModoDM();
|
|
68
|
+
}
|
|
69
|
+
setModoDM(modo) {
|
|
70
|
+
this.config.setModoDM(modo);
|
|
71
|
+
}
|
|
72
|
+
getIdperLogueado() {
|
|
73
|
+
return this.config.getIdperLogueado();
|
|
74
|
+
}
|
|
75
|
+
getUsernameLogueado() {
|
|
76
|
+
return this.config.getUsernameLogueado();
|
|
77
|
+
}
|
|
78
|
+
leerDatos() {
|
|
79
|
+
return this.config.leerDatos();
|
|
80
|
+
}
|
|
81
|
+
persistirDatos(datos) {
|
|
82
|
+
return this.config.persistirDatos(datos);
|
|
83
|
+
}
|
|
84
|
+
leerEstructura() {
|
|
85
|
+
return this.config.leerEstructura();
|
|
86
|
+
}
|
|
87
|
+
persistirEstructura(estructura) {
|
|
88
|
+
return this.config.persistirEstructura(estructura);
|
|
89
|
+
}
|
|
90
|
+
onSincronizar(persistentes, cambiaModoDM) {
|
|
91
|
+
return this.config.onSincronizar(persistentes, cambiaModoDM);
|
|
92
|
+
}
|
|
93
|
+
onLogout() {
|
|
94
|
+
return this.config.onLogout();
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
exports.FormRenderer = FormRenderer;
|
|
98
|
+
function createFormRenderer(partialConfig) {
|
|
99
|
+
return FormRenderer.initialize(Object.assign(Object.assign({}, defaultThrowConfig), partialConfig));
|
|
100
|
+
}
|
|
101
|
+
function getFormRenderer() {
|
|
102
|
+
// @ts-ignore accedemos a private static desde la función exportada para mantener simplicidad o simplemente usamos una propiedad en la clase.
|
|
103
|
+
if (!FormRenderer['instance']) {
|
|
104
|
+
throw new Error('FormRenderer no inicializada');
|
|
105
|
+
}
|
|
106
|
+
return FormRenderer['instance'];
|
|
107
|
+
}
|
|
108
|
+
// Config base: todos los métodos lanzan error descriptivo.
|
|
109
|
+
// render-init.ts provee la implementación recomendada por defecto (localStorage/sessionStorage).
|
|
110
|
+
const defaultThrowConfig = {
|
|
111
|
+
getCasoState() {
|
|
112
|
+
throw new Error('getCasoState no implementado');
|
|
113
|
+
},
|
|
114
|
+
setCasoState(_state) {
|
|
115
|
+
throw new Error('setCasoState no implementado');
|
|
116
|
+
},
|
|
117
|
+
getUltimoValorPkRaiz() {
|
|
118
|
+
throw new Error('getUltimoValorPkRaiz no implementado');
|
|
119
|
+
},
|
|
120
|
+
setUltimoValorPkRaiz(_value) {
|
|
121
|
+
throw new Error('setUltimoValorPkRaiz no implementado');
|
|
122
|
+
},
|
|
123
|
+
getAppCacheVersion() {
|
|
124
|
+
throw new Error('getAppCacheVersion no implementado');
|
|
125
|
+
},
|
|
126
|
+
setAppCacheVersion(_value) {
|
|
127
|
+
throw new Error('setAppCacheVersion no implementado');
|
|
128
|
+
},
|
|
129
|
+
getModoDM() {
|
|
130
|
+
throw new Error('getModoDM no implementado');
|
|
131
|
+
},
|
|
132
|
+
setModoDM(_modo) {
|
|
133
|
+
throw new Error('setModoDM no implementado');
|
|
134
|
+
},
|
|
135
|
+
getIdperLogueado() {
|
|
136
|
+
throw new Error('getIdperLogueado no implementado');
|
|
137
|
+
},
|
|
138
|
+
getUsernameLogueado() {
|
|
139
|
+
throw new Error('getUsernameLogueado no implementado');
|
|
140
|
+
},
|
|
141
|
+
leerDatos() {
|
|
142
|
+
throw new Error('leerDatos no implementado');
|
|
143
|
+
},
|
|
144
|
+
persistirDatos(_datos) {
|
|
145
|
+
throw new Error('persistirDatos no implementado');
|
|
146
|
+
},
|
|
147
|
+
leerEstructura() {
|
|
148
|
+
throw new Error('leerEstructura no implementado');
|
|
149
|
+
},
|
|
150
|
+
persistirEstructura(_estructura) {
|
|
151
|
+
throw new Error('persistirEstructura no implementado');
|
|
152
|
+
},
|
|
153
|
+
onSincronizar(_persistentes, _cambiaModoDM) {
|
|
154
|
+
throw new Error('onSincronizar no implementado. Debe proveerse una implementación al llamar createFormRenderer({ sincronizar: ... })');
|
|
155
|
+
},
|
|
156
|
+
onLogout() {
|
|
157
|
+
throw new Error('onLogout no implementado');
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
});
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91bmxvZ2dlZC9yZW5kZXItY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQXdDQSxvREFFQztJQTJGRCxnREFJQztJQUVELDBDQU1DO0lBM0dELElBQUksYUFBYSxHQUF5QixJQUFJLENBQUM7SUFFL0MsU0FBZ0Isb0JBQW9CLENBQUMsRUFBaUI7UUFDbEQsYUFBYSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsTUFBYSxZQUFZO1FBSXJCLFlBQW9CLE1BQXdCO1lBQ3hDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLENBQUM7UUFFTSxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQXdCO1lBQzdDLFlBQVksQ0FBQyxRQUFRLEdBQUcsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakQsT0FBTyxZQUFZLENBQUMsUUFBUSxDQUFDO1FBQ2pDLENBQUM7UUFFTSxZQUFZLENBQUMsYUFBd0M7WUFDeEQsSUFBSSxDQUFDLE1BQU0sbUNBQVEsSUFBSSxDQUFDLE1BQU0sR0FBSyxhQUFhLENBQUUsQ0FBQztRQUN2RCxDQUFDO1FBRUssV0FBVztpRUFBQyxPQUFrQyxFQUFFO2dCQUNsRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUdBQW1HLENBQUMsQ0FBQztnQkFDekgsQ0FBQztnQkFDRCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQixDQUFDO1NBQUE7UUFFRCxZQUFZO1lBQ1IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RDLENBQUM7UUFFRCxZQUFZLENBQUMsS0FBZ0I7WUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMs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QWM7WUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1FBQzFELENBQUM7UUFDRCxTQUFTO1lBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFDRCxTQUFTLENBQUMsS0FBYTtZQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDakQsQ0FBQztRQUNELGdCQUFnQjtZQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBQ0QsbUJBQW1CO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1FBQzNELENBQUM7UUFDRCxTQUFTO1lBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFDRCxjQUFjLENBQUMsTUFBK0I7WUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFDRCxjQUFjO1lBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFDRCxtQkFBbUIsQ0FBQyxXQUF1QjtZQUN2QyxNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUNELGFBQWEsQ0FBQyxhQUE2QyxFQUFFLGFBQXNCO1lBQy9FLE1BQU0sSUFBSSxLQUFLLENBQUMscUhBQXFILENBQUMsQ0FBQztRQUMzSSxDQUFDO1FBQ0QsUUFBUTtZQUNKLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUNoRCxDQUFDO0tBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENhc29TdGF0ZSwgRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMsIE1vZG9ETSwgRXN0cnVjdHVyYSwgRm9yUGtSYWl6IH0gZnJvbSAnLi90aXBvcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybXVsYXJpb0NvbmZpZyB7XG4gICAgZ2V0Q2Fzb1N0YXRlKCk6IENhc29TdGF0ZTtcbiAgICBzZXRDYXNvU3RhdGUoc3RhdGU6IENhc29TdGF0ZSk6IHZvaWQ7XG5cbiAgICBnZXRVbHRpbW9WYWxvclBrUmFpeigpOiBzdHJpbmc7XG4gICAgc2V0VWx0aW1vVmFsb3JQa1JhaXoodmFsdWU6IHN0cmluZyk6IHZvaWQ7XG5cbiAgICBnZXRBcHBDYWNoZVZlcnNpb24oKTogc3RyaW5nO1xuICAgIHNldEFwcENhY2hlVmVyc2lvbih2YWx1ZTogc3RyaW5nKTogdm9pZDtcblxuICAgIGdldE1vZG9ETSgpOiBNb2RvRE07XG4gICAgc2V0TW9kb0RNKG1vZG86IE1vZG9ETSk6IHZvaWQ7XG4gICAgICAgIFxuICAgIGdldElkcGVyTG9ndWVhZG8oKTogc3RyaW5nO1xuICAgIGdldFVzZXJuYW1lTG9ndWVhZG8oKTogc3RyaW5nO1xuXG4gICAgbGVlckRhdG9zKCk6IFByb21pc2U8RGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMgfCBudWxsPjtcblxuICAgIHBlcnNpc3RpckRhdG9zKFxuICAgICAgICBkYXRvczogRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXNcbiAgICApOiBQcm9taXNlPHZvaWQ+O1xuXG4gICAgbGVlckVzdHJ1Y3R1cmEoKTogUHJvbWlzZTxFc3RydWN0dXJhIHwgbnVsbD47XG5cbiAgICBwZXJzaXN0aXJFc3RydWN0dXJhKFxuICAgICAgICBlc3RydWN0dXJhOiBFc3RydWN0dXJhXG4gICAgKTogUHJvbWlzZTx2b2lkPjtcblxuICAgIG9uU2luY3Jvbml6YXIocGVyc2lzdGVudGVzOiBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyB8IG51bGwsIGNhbWJpYU1vZG9ETTogYm9vbGVhbik6IFByb21pc2U8RGF0b3NCeVBhc3NQZXJzaXN0aWJsZXM+O1xuICAgIFxuICAgIG9uTG9nb3V0KCk6IFByb21pc2U8dm9pZD47XG59XG5cbi8vIEZ1bmNpw7NuIGRlIGNhcmdhIGVuIG1lbW9yaWEsIHJlZ2lzdHJhZGEgZGVzZGUgcmVuZGVyLWZvcm11bGFyaW8gcGFyYSBldml0YXJcbi8vIGRlcGVuZGVuY2lhIGNpcmN1bGFyIChieXBhc3MtZm9ybXVsYXJpbyDihpIgcmVuZGVyLWNvbmZpZykuXG50eXBlIENhcmdhck1vdG9yRm4gPSAob3B0czogeyBmb3JQa1JhaXo/OiBGb3JQa1JhaXogfSkgPT4gUHJvbWlzZTx2b2lkPjtcbmxldCBjYXJnYXJNb3RvckZuOiBDYXJnYXJNb3RvckZuIHwgbnVsbCA9IG51bGw7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RyYXJDYXJnYXJNb3RvcihmbjogQ2FyZ2FyTW90b3JGbikge1xuICAgIGNhcmdhck1vdG9yRm4gPSBmbjtcbn1cblxuZXhwb3J0IGNsYXNzIEZvcm1SZW5kZXJlciBpbXBsZW1lbnRzIEZvcm11bGFyaW9Db25maWcge1xuICAgIHByaXZhdGUgc3RhdGljIGluc3RhbmNlOiBGb3JtUmVuZGVyZXI7XG4gICAgcHJpdmF0ZSBjb25maWc6IEZvcm11bGFyaW9Db25maWc7XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKGNvbmZpZzogRm9ybXVsYXJpb0NvbmZpZykge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGluaXRpYWxpemUoY29uZmlnOiBGb3JtdWxhcmlvQ29uZmlnKTogRm9ybVJlbmRlcmVyIHtcbiAgICAgICAgRm9ybVJlbmRlcmVyLmluc3RhbmNlID0gbmV3IEZvcm1SZW5kZXJlcihjb25maWcpO1xuICAgICAgICByZXR1cm4gRm9ybVJlbmRlcmVyLmluc3RhbmNlO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVDb25maWcocGFydGlhbENvbmZpZzogUGFydGlhbDxGb3JtdWxhcmlvQ29uZmlnPik6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IHsgLi4udGhpcy5jb25maWcsIC4uLnBhcnRpYWxDb25maWcgfTtcbiAgICB9XG5cbiAgICBhc3luYyBjYXJnYXJNb3RvcihvcHRzOiB7IGZvclBrUmFpej86IEZvclBrUmFpeiB9ID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCFjYXJnYXJNb3RvckZuKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhcmdhck1vdG9yIG5vIHJlZ2lzdHJhZG8uIEFzZWfDunJlc2UgZGUgaW1wb3J0YXIgcmVuZGVyLWZvcm11bGFyaW8gYW50ZXMgZGUgbGxhbWFyIGEgY2FyZ2FyTW90b3IuJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhcmdhck1vdG9yRm4ob3B0cyk7XG4gICAgfVxuXG4gICAgZ2V0Q2Fzb1N0YXRlKCk6IENhc29TdGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5nZXRDYXNvU3RhdGUoKTtcbiAgICB9XG5cbiAgICBzZXRDYXNvU3RhdGUoc3RhdGU6IENhc29TdGF0ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbmZpZy5zZXRDYXNvU3RhdGUoc3RhdGUpO1xuICAgIH1cblxuICAgIGdldFVsdGltb1ZhbG9yUGtSYWl6KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5nZXRVbHRpbW9WYWxvclBrUmFpeigpO1xuICAgIH1cblxuICAgIHNldFVsdGltb1ZhbG9yUGtSYWl6KHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb25maWcuc2V0VWx0aW1vVmFsb3JQa1JhaXoodmFsdWUpO1xuICAgIH1cblxuICAgIGdldEFwcENhY2hlVmVyc2lvbigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWcuZ2V0QXBwQ2FjaGVWZXJzaW9uKCk7XG4gICAgfVxuXG4gICAgc2V0QXBwQ2FjaGVWZXJzaW9uKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb25maWcuc2V0QXBwQ2FjaGVWZXJzaW9uKHZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXRNb2RvRE0oKTogTW9kb0RNIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLmdldE1vZG9ETSgpO1xuICAgIH1cblxuICAgIHNldE1vZG9ETShtb2RvOiBNb2RvRE0pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb25maWcuc2V0TW9kb0RNKG1vZG8pO1xuICAgIH1cblxuICAgIGdldElkcGVyTG9ndWVhZG8oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLmdldElkcGVyTG9ndWVhZG8oKTtcbiAgICB9XG5cbiAgICBnZXRVc2VybmFtZUxvZ3VlYWRvKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5nZXRVc2VybmFtZUxvZ3VlYWRvKCk7XG4gICAgfVxuXG4gICAgbGVlckRhdG9zKCk6IFByb21pc2U8RGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMgfCBudWxsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5sZWVyRGF0b3MoKTtcbiAgICB9XG5cbiAgICBwZXJzaXN0aXJEYXRvcyhkYXRvczogRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLnBlcnNpc3RpckRhdG9zKGRhdG9zKTtcbiAgICB9XG5cbiAgICBsZWVyRXN0cnVjdHVyYSgpOiBQcm9taXNlPEVzdHJ1Y3R1cmEgfCBudWxsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5sZWVyRXN0cnVjdHVyYSgpO1xuICAgIH1cblxuICAgIHBlcnNpc3RpckVzdHJ1Y3R1cmEoZXN0cnVjdHVyYTogRXN0cnVjdHVyYSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWcucGVyc2lzdGlyRXN0cnVjdHVyYShlc3RydWN0dXJhKTtcbiAgICB9XG5cbiAgICBvblNpbmNyb25pemFyKHBlcnNpc3RlbnRlczogRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMgfCBudWxsLCBjYW1iaWFNb2RvRE06IGJvb2xlYW4pOiBQcm9taXNlPERhdG9zQnlQYXNzUGVyc2lzdGlibGVzPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5vblNpbmNyb25pemFyKHBlcnNpc3RlbnRlcywgY2FtYmlhTW9kb0RNKTtcbiAgICB9XG5cbiAgICBvbkxvZ291dCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLm9uTG9nb3V0KCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRm9ybVJlbmRlcmVyKFxuICAgIHBhcnRpYWxDb25maWc6IFBhcnRpYWw8Rm9ybXVsYXJpb0NvbmZpZz5cbik6IEZvcm1SZW5kZXJlciB7XG4gICAgcmV0dXJuIEZvcm1SZW5kZXJlci5pbml0aWFsaXplKHsgLi4uZGVmYXVsdFRocm93Q29uZmlnLCAuLi5wYXJ0aWFsQ29uZmlnIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybVJlbmRlcmVyKCk6IEZvcm1SZW5kZXJlciB7XG4gICAgLy8gQHRzLWlnbm9yZSBhY2NlZGVtb3MgYSBwcml2YXRlIHN0YXRpYyBkZXNkZSBsYSBmdW5jacOzbiBleHBvcnRhZGEgcGFyYSBtYW50ZW5lciBzaW1wbGljaWRhZCBvIHNpbXBsZW1lbnRlIHVzYW1vcyB1bmEgcHJvcGllZGFkIGVuIGxhIGNsYXNlLlxuICAgIGlmICghRm9ybVJlbmRlcmVyWydpbnN0YW5jZSddKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRm9ybVJlbmRlcmVyIG5vIGluaWNpYWxpemFkYScpO1xuICAgIH1cbiAgICByZXR1cm4gRm9ybVJlbmRlcmVyWydpbnN0YW5jZSddO1xufVxuXG4vLyBDb25maWcgYmFzZTogdG9kb3MgbG9zIG3DqXRvZG9zIGxhbnphbiBlcnJvciBkZXNjcmlwdGl2by5cbi8vIHJlbmRlci1pbml0LnRzIHByb3ZlZSBsYSBpbXBsZW1lbnRhY2nDs24gcmVjb21lbmRhZGEgcG9yIGRlZmVjdG8gKGxvY2FsU3RvcmFnZS9zZXNzaW9uU3RvcmFnZSkuXG5jb25zdCBkZWZhdWx0VGhyb3dDb25maWc6IEZvcm11bGFyaW9Db25maWcgPSB7XG4gICAgZ2V0Q2Fzb1N0YXRlKCk6IENhc29TdGF0ZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZ2V0Q2Fzb1N0YXRlIG5vIGltcGxlbWVudGFkbycpO1xuICAgIH0sXG4gICAgc2V0Q2Fzb1N0YXRlKF9zdGF0ZTogQ2Fzb1N0YXRlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc2V0Q2Fzb1N0YXRlIG5vIGltcGxlbWVudGFkbycpO1xuICAgIH0sXG4gICAgZ2V0VWx0aW1vVmFsb3JQa1JhaXooKTogc3RyaW5nIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRVbHRpbW9WYWxvclBrUmFpeiBubyBpbXBsZW1lbnRhZG8nKTtcbiAgICB9LFxuICAgIHNldFVsdGltb1ZhbG9yUGtSYWl6KF92YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc2V0VWx0aW1vVmFsb3JQa1JhaXogbm8gaW1wbGVtZW50YWRvJyk7XG4gICAgfSxcbiAgICBnZXRBcHBDYWNoZVZlcnNpb24oKTogc3RyaW5nIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRBcHBDYWNoZVZlcnNpb24gbm8gaW1wbGVtZW50YWRvJyk7XG4gICAgfSxcbiAgICBzZXRBcHBDYWNoZVZlcnNpb24oX3ZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZXRBcHBDYWNoZVZlcnNpb24gbm8gaW1wbGVtZW50YWRvJyk7XG4gICAgfSxcbiAgICBnZXRNb2RvRE0oKTogTW9kb0RNIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRNb2RvRE0gbm8gaW1wbGVtZW50YWRvJyk7XG4gICAgfSxcbiAgICBzZXRNb2RvRE0oX21vZG86IE1vZG9ETSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldE1vZG9ETSBubyBpbXBsZW1lbnRhZG8nKTtcbiAgICB9LFxuICAgIGdldElkcGVyTG9ndWVhZG8oKTogc3RyaW5nIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRJZHBlckxvZ3VlYWRvIG5vIGltcGxlbWVudGFkbycpO1xuICAgIH0sXG4gICAgZ2V0VXNlcm5hbWVMb2d1ZWFkbygpOiBzdHJpbmcge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2dldFVzZXJuYW1lTG9ndWVhZG8gbm8gaW1wbGVtZW50YWRvJyk7XG4gICAgfSxcbiAgICBsZWVyRGF0b3MoKTogUHJvbWlzZTxEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyB8IG51bGw+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdsZWVyRGF0b3Mgbm8gaW1wbGVtZW50YWRvJyk7XG4gICAgfSxcbiAgICBwZXJzaXN0aXJEYXRvcyhfZGF0b3M6IERhdG9zQnlQYXNzUGVyc2lzdGlibGVzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncGVyc2lzdGlyRGF0b3Mgbm8gaW1wbGVtZW50YWRvJyk7XG4gICAgfSxcbiAgICBsZWVyRXN0cnVjdHVyYSgpOiBQcm9taXNlPEVzdHJ1Y3R1cmEgfCBudWxsPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbGVlckVzdHJ1Y3R1cmEgbm8gaW1wbGVtZW50YWRvJyk7XG4gICAgfSxcbiAgICBwZXJzaXN0aXJFc3RydWN0dXJhKF9lc3RydWN0dXJhOiBFc3RydWN0dXJhKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncGVyc2lzdGlyRXN0cnVjdHVyYSBubyBpbXBsZW1lbnRhZG8nKTtcbiAgICB9LFxuICAgIG9uU2luY3Jvbml6YXIoX3BlcnNpc3RlbnRlczogRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMgfCBudWxsLCBfY2FtYmlhTW9kb0RNOiBib29sZWFuKTogUHJvbWlzZTxEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcz4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ29uU2luY3Jvbml6YXIgbm8gaW1wbGVtZW50YWRvLiBEZWJlIHByb3ZlZXJzZSB1bmEgaW1wbGVtZW50YWNpw7NuIGFsIGxsYW1hciBjcmVhdGVGb3JtUmVuZGVyZXIoeyBzaW5jcm9uaXphcjogLi4uIH0pJyk7XG4gICAgfSxcbiAgICBvbkxvZ291dCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvbkxvZ291dCBubyBpbXBsZW1lbnRhZG8nKTtcbiAgICB9LFxufTsiXX0=
|