contable 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/client/client.d.ts +1 -0
  2. package/dist/client/client.js +63 -140
  3. package/dist/client/menu.d.ts +0 -0
  4. package/dist/client/redux-formulario.d.ts +477 -0
  5. package/dist/client/redux-formulario.js +236 -289
  6. package/dist/client/render-components.d.ts +66 -0
  7. package/dist/client/render-components.js +293 -426
  8. package/dist/client/render-formulario.d.ts +1 -0
  9. package/dist/client/render-formulario.js +4 -4
  10. package/dist/client/render-general.d.ts +124 -0
  11. package/dist/client/render-general.js +38 -63
  12. package/dist/client/render-handlers.d.ts +1 -0
  13. package/dist/client/render-handlers.js +14 -54
  14. package/dist/client/tipos.d.ts +119 -0
  15. package/dist/client/tsconfig.json +3 -1
  16. package/dist/server/app-contable.d.ts +233 -0
  17. package/dist/server/app-contable.js +5 -2
  18. package/dist/server/def-config.d.ts +1 -0
  19. package/dist/server/procedures-contable.d.ts +3 -0
  20. package/dist/server/server-contable.d.ts +1 -0
  21. package/dist/server/table-categorias_producto.d.ts +2 -0
  22. package/dist/server/table-clientes.d.ts +2 -0
  23. package/dist/server/table-condicion_iva.d.ts +2 -0
  24. package/dist/server/table-estados_pedido.d.ts +2 -0
  25. package/dist/server/table-estados_presupuesto.d.ts +2 -0
  26. package/dist/server/table-insumos.d.ts +2 -0
  27. package/dist/server/table-items_pedido.d.ts +2 -0
  28. package/dist/server/table-items_presupuesto.d.ts +2 -0
  29. package/dist/server/table-iva_productos.d.ts +2 -0
  30. package/dist/server/table-parametros.d.ts +2 -0
  31. package/dist/server/table-pedidos.d.ts +2 -0
  32. package/dist/server/table-pedidos_pendientes.d.ts +2 -0
  33. package/dist/server/table-pedidos_vencidos.d.ts +2 -0
  34. package/dist/server/table-presupuestos.d.ts +2 -0
  35. package/dist/server/table-productos.d.ts +2 -0
  36. package/dist/server/table-productos_clientes.d.ts +2 -0
  37. package/dist/server/table-productos_generales.d.ts +2 -0
  38. package/dist/server/table-productos_insumos.d.ts +2 -0
  39. package/dist/server/table-usuarios.d.ts +2 -0
  40. package/dist/server/types-contable.d.ts +29 -0
  41. package/dist/unlogged/adapt.d.ts +0 -0
  42. package/dist/unlogged/tsconfig.json +1 -1
  43. package/dist/unlogged/unlogged.d.ts +1 -0
  44. package/dist/unlogged/unlogged.js +83 -170
  45. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ export {};
@@ -1,39 +1,3 @@
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
- var __generator = (this && this.__generator) || function (thisArg, body) {
11
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
12
- return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
- function verb(n) { return function (v) { return step([n, v]); }; }
14
- function step(op) {
15
- if (f) throw new TypeError("Generator is already executing.");
16
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
- if (y = 0, t) op = [op[0] & 2, t.value];
19
- switch (op[0]) {
20
- case 0: case 1: t = op; break;
21
- case 4: _.label++; return { value: op[1], done: false };
22
- case 5: _.label++; y = op[1]; op = [0]; continue;
23
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
- default:
25
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
- if (t[2]) _.ops.pop();
30
- _.trys.pop(); continue;
31
- }
32
- op = body.call(thisArg, _);
33
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
- }
36
- };
37
1
  (function (factory) {
38
2
  if (typeof module === "object" && typeof module.exports === "object") {
39
3
  var v = factory(require, exports);
@@ -45,19 +9,19 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
45
9
  })(function (require, exports) {
46
10
  "use strict";
47
11
  Object.defineProperty(exports, "__esModule", { value: true });
48
- var js_to_html_1 = require("js-to-html");
49
- var myOwn = require("myOwn");
50
- var TypedControls = require("typed-controls");
51
- var redux_formulario_1 = require("./redux-formulario");
12
+ const js_to_html_1 = require("js-to-html");
13
+ const myOwn = require("myOwn");
14
+ const TypedControls = require("typed-controls");
15
+ const redux_formulario_1 = require("./redux-formulario");
52
16
  var my = myOwn;
53
17
  myOwn.wScreens.tablero = function (_addrParams) {
54
18
  var mainLayout = document.getElementById('main_layout');
55
- mainLayout.appendChild(js_to_html_1.html.h1("Tablero de control").create());
56
- ['vencidos', 'pendientes'].forEach(function (element) {
57
- mainLayout.appendChild(js_to_html_1.html.h2("Pedidos ".concat(element)).create());
19
+ mainLayout.appendChild(js_to_html_1.html.h1(`Tablero de control`).create());
20
+ ['vencidos', 'pendientes'].forEach((element) => {
21
+ mainLayout.appendChild(js_to_html_1.html.h2(`Pedidos ${element}`).create());
58
22
  var myDiv = js_to_html_1.html.div().create();
59
23
  mainLayout.appendChild(myDiv);
60
- my.tableGrid("pedidos_".concat(element), myDiv, {});
24
+ my.tableGrid(`pedidos_${element}`, myDiv, {});
61
25
  });
62
26
  };
63
27
  my.clientSides.verCliente = {
@@ -66,83 +30,62 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
66
30
  var td = depot.rowControls[fieldName];
67
31
  var boton = js_to_html_1.html.button({}, 'ver').create();
68
32
  td.appendChild(boton);
69
- td.onclick = function () {
70
- return __awaiter(this, void 0, void 0, function () {
71
- return __generator(this, function (_a) {
72
- desplegarCliente(depot);
73
- return [2 /*return*/];
74
- });
75
- });
33
+ td.onclick = async function () {
34
+ desplegarCliente(depot);
76
35
  };
77
36
  },
78
37
  };
79
38
  function colorearEstado(depot, pedidoOpresupuestoString) {
80
- depot.rowControls['estado'].style.backgroundColor = depot.rowControls["estados_".concat(pedidoOpresupuestoString, "__color")].getTypedValue();
39
+ depot.rowControls['estado'].style.backgroundColor = depot.rowControls[`estados_${pedidoOpresupuestoString}__color`].getTypedValue();
81
40
  }
82
41
  my.clientSides.accionesPresupuesto = {
83
- prepare: function () { return null; },
42
+ prepare: () => null,
84
43
  update: function (depot, fieldName) {
85
- var _this = this;
86
- var td = depot.rowControls[fieldName];
44
+ let td = depot.rowControls[fieldName];
87
45
  td.innerHTML = '';
88
46
  colorearEstado(depot, 'presupuesto');
89
- var td = depot.rowControls[fieldName];
90
- var boton = my.createForkeableButton({ menuType: 'presupuesto', name: "gestionar,presupuesto", label: "abrir" }, {});
47
+ let td = depot.rowControls[fieldName];
48
+ let boton = my.createForkeableButton({ menuType: 'presupuesto', name: `gestionar,presupuesto`, label: "abrir" }, {});
91
49
  boton.href = boton.href + '&' + 'presupuesto' + '=' + depot.row.presupuesto.toString();
92
50
  td.appendChild(boton);
93
- var puedeEditarPresupuesto = depot.rowControls['estados_presupuesto__permite_editar'].getTypedValue();
51
+ let puedeEditarPresupuesto = depot.rowControls['estados_presupuesto__permite_editar'].getTypedValue();
94
52
  if (puedeEditarPresupuesto) {
95
- var boton_1 = my.createForkeableButton({ menuType: 'pedido', name: 'gestionar,pedido', label: "aceptar" }, {});
96
- boton_1.href = boton_1.href + '&presupuesto=' + depot.row['presupuesto'].toString();
97
- td.appendChild(boton_1);
53
+ let boton = my.createForkeableButton({ menuType: 'pedido', name: 'gestionar,pedido', label: "aceptar" }, {});
54
+ boton.href = boton.href + '&presupuesto=' + depot.row['presupuesto'].toString();
55
+ td.appendChild(boton);
98
56
  }
99
- var presupuesto = depot.rowControls['presupuesto'].getTypedValue();
100
- ['anular', 'rechazar'].forEach(function (accion) {
57
+ let presupuesto = depot.rowControls['presupuesto'].getTypedValue();
58
+ ['anular', 'rechazar'].forEach((accion) => {
101
59
  if (puedeEditarPresupuesto) {
102
- var boton_2 = js_to_html_1.html.button({}, accion).create();
103
- boton_2.onclick = function () { return __awaiter(_this, void 0, void 0, function () {
104
- var err_1, grid;
105
- return __generator(this, function (_a) {
106
- switch (_a.label) {
107
- case 0: return [4 /*yield*/, confirmPromise("\u00BFest\u00E1 por ".concat(accion, " el presupuesto? Esta acci\u00F3n no se podr\u00E1 deshacer"))];
108
- case 1:
109
- _a.sent();
110
- _a.label = 2;
111
- case 2:
112
- _a.trys.push([2, 4, 5, 7]);
113
- return [4 /*yield*/, my.ajax["presupuesto_".concat(accion)]({
114
- presupuesto: presupuesto
115
- })];
116
- case 3:
117
- _a.sent();
118
- return [3 /*break*/, 7];
119
- case 4:
120
- err_1 = _a.sent();
121
- alertPromise(err_1.message);
122
- return [3 /*break*/, 7];
123
- case 5:
124
- grid = depot.manager;
125
- return [4 /*yield*/, grid.retrieveRowAndRefresh(depot)];
126
- case 6:
127
- _a.sent();
128
- return [7 /*endfinally*/];
129
- case 7: return [2 /*return*/];
130
- }
131
- });
132
- }); };
133
- td.appendChild(boton_2);
60
+ let boton = js_to_html_1.html.button({}, accion).create();
61
+ boton.onclick = async () => {
62
+ await confirmPromise(`¿está por ${accion} el presupuesto? Esta acción no se podrá deshacer`);
63
+ try {
64
+ await my.ajax[`presupuesto_${accion}`]({
65
+ presupuesto
66
+ });
67
+ }
68
+ catch (err) {
69
+ alertPromise(err.message);
70
+ }
71
+ finally {
72
+ let grid = depot.manager;
73
+ await grid.retrieveRowAndRefresh(depot);
74
+ }
75
+ };
76
+ td.appendChild(boton);
134
77
  }
135
78
  });
136
79
  },
137
80
  };
138
81
  my.clientSides.accionesPedido = {
139
- prepare: function () { return null; },
82
+ prepare: () => null,
140
83
  update: function (depot, fieldName) {
141
- var td = depot.rowControls[fieldName];
84
+ let td = depot.rowControls[fieldName];
142
85
  td.innerHTML = '';
143
86
  colorearEstado(depot, 'pedido');
144
- var td = depot.rowControls[fieldName];
145
- var boton = my.createForkeableButton({ menuType: 'pedido', name: "gestionar,pedido", label: "abrir" }, {});
87
+ let td = depot.rowControls[fieldName];
88
+ let boton = my.createForkeableButton({ menuType: 'pedido', name: `gestionar,pedido`, label: "abrir" }, {});
146
89
  boton.href = boton.href + '&' + 'pedido' + '=' + depot.row.pedido.toString();
147
90
  td.appendChild(boton);
148
91
  }
@@ -150,39 +93,31 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
150
93
  myOwn.wScreens.presupuestos = function (_addrParams) {
151
94
  var mainLayout = document.getElementById('main_layout');
152
95
  var myDiv = js_to_html_1.html.div().create();
153
- var boton = my.createForkeableButton({ menuType: 'presupuesto', name: 'gestionar,presupuesto', label: 'nuevo' }, {});
96
+ let boton = my.createForkeableButton({ menuType: 'presupuesto', name: 'gestionar,presupuesto', label: 'nuevo' }, {});
154
97
  mainLayout.appendChild(boton);
155
98
  mainLayout.appendChild(myDiv);
156
- boton.onclick = function () {
157
- return __awaiter(this, void 0, void 0, function () {
158
- return __generator(this, function (_a) {
159
- my.removeSessionVar(redux_formulario_1.STORAGE_STATE_NAME);
160
- return [2 /*return*/];
161
- });
162
- });
99
+ boton.onclick = async function () {
100
+ my.removeSessionVar(redux_formulario_1.STORAGE_STATE_NAME);
163
101
  };
164
102
  my.tableGrid('presupuestos', myDiv, {});
165
103
  };
166
104
  myOwn.wScreens.pedidos = function (_addrParams) {
167
105
  var mainLayout = document.getElementById('main_layout');
168
106
  var myDiv = js_to_html_1.html.div().create();
169
- var boton = my.createForkeableButton({ menuType: 'pedido', name: 'gestionar,pedido', label: 'nuevo' }, {});
107
+ let boton = my.createForkeableButton({ menuType: 'pedido', name: 'gestionar,pedido', label: 'nuevo' }, {});
170
108
  //var boton = html.button({},'nuevo').create();
171
109
  mainLayout.appendChild(boton);
172
110
  mainLayout.appendChild(myDiv);
173
- boton.onclick = function () {
174
- return __awaiter(this, void 0, void 0, function () {
175
- return __generator(this, function (_a) {
176
- my.removeSessionVar(redux_formulario_1.STORAGE_STATE_NAME);
177
- return [2 /*return*/];
178
- });
179
- });
111
+ boton.onclick = async function () {
112
+ my.removeSessionVar(redux_formulario_1.STORAGE_STATE_NAME);
113
+ //history.replaceState(null, null, location.origin+location.pathname+my.menuSeparator+'i=gestionar,pedido');
114
+ //my.showPage();
180
115
  };
181
116
  my.tableGrid('pedidos', myDiv, {});
182
117
  };
183
- var validateHexaColor = function (string) { return /^#[0-9A-F]{6}$/i.test(string); };
118
+ var validateHexaColor = (string) => /^#[0-9A-F]{6}$/i.test(string);
184
119
  myOwn.clientSides.parsearColor = {
185
- update: function (depot, fieldName) {
120
+ update: (depot, fieldName) => {
186
121
  var myColor = depot.rowControls['color'].getTypedValue();
187
122
  var isValidColor = validateHexaColor(myColor);
188
123
  if (myColor && !isValidColor) {
@@ -190,41 +125,29 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
190
125
  depot.rowControls['color'].setTypedValue(null, true);
191
126
  }
192
127
  var colorInput = js_to_html_1.html.input({ type: "color", value: isValidColor ? myColor : '#ffffff' }).create();
193
- colorInput.onchange = function () {
128
+ colorInput.onchange = () => {
194
129
  depot.rowControls['color'].setTypedValue(colorInput.value, true);
195
130
  };
196
131
  depot.rowControls[fieldName].innerHTML = '';
197
132
  depot.rowControls[fieldName].appendChild(colorInput);
198
133
  },
199
- prepare: function (depot, fieldName) { }
134
+ prepare: (depot, fieldName) => { }
200
135
  };
201
136
  my.clientSides.clonarProducto = {
202
137
  update: false,
203
138
  prepare: function (depot, fieldName) {
204
- var _a = depot.row, producto = _a.producto, nombre = _a.nombre;
139
+ var { producto, nombre } = depot.row;
205
140
  var td = depot.rowControls[fieldName];
206
141
  var boton = js_to_html_1.html.button({}, 'clonar').create();
207
142
  td.appendChild(boton);
208
- td.onclick = function () {
209
- return __awaiter(this, void 0, void 0, function () {
210
- var result, newDepot;
211
- return __generator(this, function (_a) {
212
- switch (_a.label) {
213
- case 0: return [4 /*yield*/, confirmPromise("confirma clonado de producto (".concat(producto, ") \"").concat(nombre, "\"?"))];
214
- case 1:
215
- _a.sent();
216
- return [4 /*yield*/, my.ajax.producto_clonar({
217
- producto: producto,
218
- })];
219
- case 2:
220
- result = _a.sent();
221
- newDepot = depot.manager.createRowInsertElements(depot);
222
- newDepot.manager.depotRefresh(newDepot, { updatedRow: result.productoNuevo, sendedForUpdate: {} });
223
- newDepot.manager.retrieveRowAndRefresh(newDepot);
224
- return [2 /*return*/];
225
- }
226
- });
143
+ td.onclick = async function () {
144
+ await confirmPromise(`confirma clonado de producto (${producto}) "${nombre}"?`);
145
+ var result = await my.ajax.producto_clonar({
146
+ producto,
227
147
  });
148
+ var newDepot = depot.manager.createRowInsertElements(depot);
149
+ newDepot.manager.depotRefresh(newDepot, { updatedRow: result.productoNuevo, sendedForUpdate: {} });
150
+ newDepot.manager.retrieveRowAndRefresh(newDepot);
228
151
  };
229
152
  },
230
153
  };
@@ -256,4 +179,4 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
256
179
  // }
257
180
  // },
258
181
  //}
259
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC9jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFBQSx5Q0FBeUM7SUFDekMsNkJBQStCO0lBQy9CLDhDQUFnRDtJQUVoRCx1REFBd0Q7SUFHeEQsSUFBSSxFQUFFLEdBQUMsS0FBSyxDQUFDO0lBRWIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUMsVUFBUyxXQUFXO1FBQ3ZDLElBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFFLENBQUM7UUFDekQsVUFBVSxDQUFDLFdBQVcsQ0FBQyxpQkFBSSxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDL0QsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUMsT0FBYztZQUM5QyxVQUFVLENBQUMsV0FBVyxDQUFDLGlCQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFXLE9BQU8sQ0FBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUMvRCxJQUFJLEtBQUssR0FBRyxpQkFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hDLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxrQkFBVyxPQUFPLENBQUUsRUFBQyxLQUFLLEVBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDLENBQUM7SUFFRixFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRztRQUN4QixNQUFNLEVBQUUsS0FBSztRQUNiLE9BQU8sRUFBRSxVQUFVLEtBQUssRUFBRSxTQUFTO1lBQy9CLElBQUksRUFBRSxHQUFHLEtB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LFFBQVEsRUFBQyxFQUFDLFVBQVUsRUFBQyxNQUFNLENBQUMsYUFBYSxFQUFFLGVBQWUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDO2dDQUM5RixRQUFRLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFBOzs7OzthQUNuRCxDQUFDO1FBQ04sQ0FBQztLQUNKLENBQUE7SUFFRCxLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsaUJBQWlCO1FBQ3BELGFBQWEsQ0FBQyxRQUFRLEdBQUMsS0FBSyxDQUFDO0lBQ2pDLENBQUMsQ0FBQyxDQUFDOztBQUVILGlCQUFpQjtBQUNqQiw0QkFBNEI7QUFDNUIsb0JBQW9CO0FBQ3BCLDRDQUE0QztBQUM1QyxnREFBZ0Q7QUFDaEQseURBQXlEO0FBQ3pELGdDQUFnQztBQUNoQyxzQ0FBc0M7QUFDdEMsZ0NBQWdDO0FBQ2hDLDZFQUE2RTtBQUM3RSxxREFBcUQ7QUFDckQsd0NBQXdDO0FBQ3hDLHNDQUFzQztBQUN0QyxpQkFBaUI7QUFDakIsMkNBQTJDO0FBQzNDLDZDQUE2QztBQUM3Qyx1REFBdUQ7QUFDdkQsd0NBQXdDO0FBQ3hDLGdDQUFnQztBQUNoQyxpQkFBaUI7QUFDakIsbUNBQW1DO0FBQ25DLFdBQVc7QUFDWCxRQUFRO0FBQ1IsR0FBRyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aHRtbCwgSHRtbFRhZ30gZnJvbSBcImpzLXRvLWh0bWxcIjtcclxuaW1wb3J0ICogYXMgbXlPd24gZnJvbSBcIm15T3duXCI7XHJcbmltcG9ydCAqIGFzIFR5cGVkQ29udHJvbHMgZnJvbSBcInR5cGVkLWNvbnRyb2xzXCI7XHJcbmltcG9ydCAqIGFzIGxpa2VBciBmcm9tIFwibGlrZS1hclwiO1xyXG5pbXBvcnQgeyBTVE9SQUdFX1NUQVRFX05BTUUgfSBmcm9tIFwiLi9yZWR1eC1mb3JtdWxhcmlvXCI7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCJAbWF0ZXJpYWwtdWkvY29yZVwiO1xyXG5cclxudmFyIG15PW15T3duO1xyXG5cclxubXlPd24ud1NjcmVlbnMudGFibGVybz1mdW5jdGlvbihfYWRkclBhcmFtcyl7XHJcbiAgICB2YXIgbWFpbkxheW91dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpITtcclxuICAgIG1haW5MYXlvdXQuYXBwZW5kQ2hpbGQoaHRtbC5oMShgVGFibGVybyBkZSBjb250cm9sYCkuY3JlYXRlKCkpO1xyXG4gICAgWyd2ZW5jaWRvcycsICdwZW5kaWVudGVzJ10uZm9yRWFjaCgoZWxlbWVudDpzdHJpbmcpPT57XHJcbiAgICAgICAgbWFpbkxheW91dC5hcHBlbmRDaGlsZChodG1sLmgyKGBQZWRpZG9zICR7ZWxlbWVudH1gKS5jcmVhdGUoKSk7XHJcbiAgICAgICAgdmFyIG15RGl2ID0gaHRtbC5kaXYoKS5jcmVhdGUoKTtcclxuICAgICAgICBtYWluTGF5b3V0LmFwcGVuZENoaWxkKG15RGl2KTtcclxuICAgICAgICBteS50YWJsZUdyaWQoYHBlZGlkb3NfJHtlbGVtZW50fWAsbXlEaXYse30pO1xyXG4gICAgfSlcclxufTtcclxuXHJcbm15LmNsaWVudFNpZGVzLnZlckNsaWVudGUgPSB7XHJcbiAgICB1cGRhdGU6IGZhbHNlLFxyXG4gICAgcHJlcGFyZTogZnVuY3Rpb24gKGRlcG90LCBmaWVsZE5hbWUpIHtcclxuICAgICAgICB2YXIgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgICAgIHZhciBib3RvbiA9IGh0bWwuYnV0dG9uKHt9LCd2ZXInKS5jcmVhdGUoKTtcclxuICAgICAgICB0ZC5hcHBlbmRDaGlsZChib3Rvbik7XHJcbiAgICAgICAgdGQub25jbGljaz1hc3luYyBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBkZXNwbGVnYXJDbGllbnRlKGRlcG90KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG59XHJcblxyXG5mdW5jdGlvbiBjb2xvcmVhckVzdGFkbyhkZXBvdCxwZWRpZG9PcHJlc3VwdWVzdG9TdHJpbmc6J3BlZGlkbyd8J3ByZXN1cHVlc3RvJyApe1xyXG4gICAgZGVwb3Qucm93Q29udHJvbHNbJ2VzdGFkbyddLnN0eWxlLmJhY2tncm91bmRDb2xvcj1kZXBvdC5yb3dDb250cm9sc1tgZXN0YWRvc18ke3BlZGlkb09wcmVzdXB1ZXN0b1N0cmluZ31fX2NvbG9yYF0uZ2V0VHlwZWRWYWx1ZSgpO1xyXG59XHJcblxyXG5teS5jbGllbnRTaWRlcy5hY2Npb25lc1ByZXN1cHVlc3RvID0ge1xyXG4gICAgcHJlcGFyZTogKCk9Pm51bGwsXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChkZXBvdCwgZmllbGROYW1lKSB7XHJcbiAgICAgICAgbGV0IHRkID0gZGVwb3Qucm93Q29udHJvbHNbZmllbGROYW1lXTtcclxuICAgICAgICB0ZC5pbm5lckhUTUw9Jyc7XHJcbiAgICAgICAgY29sb3JlYXJFc3RhZG8oZGVwb3QsICdwcmVzdXB1ZXN0bycpO1xyXG4gICAgICAgIGxldCB0ZCA9IGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV07XHJcbiAgICAgICAgbGV0IGJvdG9uID0gbXkuY3JlYXRlRm9ya2VhYmxlQnV0dG9uKHttZW51VHlwZToncHJlc3VwdWVzdG8nLCBuYW1lOmBnZXN0aW9uYXIscHJlc3VwdWVzdG9gICwgbGFiZWw6XCJhYnJpclwifSwge30pO1xyXG4gICAgICAgIGJvdG9uLmhyZWYgPSBib3Rvbi5ocmVmICsgJyYnKyAncHJlc3VwdWVzdG8nKyc9JytkZXBvdC5yb3cucHJlc3VwdWVzdG8udG9TdHJpbmcoKVxyXG4gICAgICAgIHRkLmFwcGVuZENoaWxkKGJvdG9uKTtcclxuICAgICAgICBsZXQgcHVlZGVFZGl0YXJQcmVzdXB1ZXN0byA9IGRlcG90LnJvd0NvbnRyb2xzWydlc3RhZG9zX3ByZXN1cHVlc3RvX19wZXJtaXRlX2VkaXRhciddLmdldFR5cGVkVmFsdWUoKTtcclxuICAgICAgICBpZihwdWVkZUVkaXRhclByZXN1cHVlc3RvKXtcclxuICAgICAgICAgICAgbGV0IGJvdG9uID0gbXkuY3JlYXRlRm9ya2VhYmxlQnV0dG9uKHttZW51VHlwZToncGVkaWRvJywgbmFtZTonZ2VzdGlvbmFyLHBlZGlkbycsIGxhYmVsOlwiYWNlcHRhclwifSwge30pO1xyXG4gICAgICAgICAgICBib3Rvbi5ocmVmID0gYm90b24uaHJlZiArICcmcHJlc3VwdWVzdG89JytkZXBvdC5yb3dbJ3ByZXN1cHVlc3RvJ10udG9TdHJpbmcoKVxyXG4gICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZChib3Rvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBwcmVzdXB1ZXN0byA9IGRlcG90LnJvd0NvbnRyb2xzWydwcmVzdXB1ZXN0byddLmdldFR5cGVkVmFsdWUoKTtcclxuICAgICAgICBbJ2FudWxhcicsICdyZWNoYXphciddLmZvckVhY2goKGFjY2lvbik9PntcclxuICAgICAgICAgICAgaWYocHVlZGVFZGl0YXJQcmVzdXB1ZXN0byl7XHJcbiAgICAgICAgICAgICAgICBsZXQgYm90b24gPSBodG1sLmJ1dHRvbih7fSxhY2Npb24pLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgYm90b24ub25jbGljayA9IGFzeW5jICgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgY29uZmlybVByb21pc2UoYMK/ZXN0w6EgcG9yICR7YWNjaW9ufSBlbCBwcmVzdXB1ZXN0bz8gRXN0YSBhY2Npw7NuIG5vIHNlIHBvZHLDoSBkZXNoYWNlcmApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgbXkuYWpheFtgcHJlc3VwdWVzdG9fJHthY2Npb259YF0oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc3VwdWVzdG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0UHJvbWlzZShlcnIubWVzc2FnZSlcclxuICAgICAgICAgICAgICAgICAgICB9ZmluYWxseXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGdyaWQ9ZGVwb3QubWFuYWdlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZ3JpZC5yZXRyaWV2ZVJvd0FuZFJlZnJlc2goZGVwb3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZChib3Rvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfSxcclxufVxyXG5cclxubXkuY2xpZW50U2lkZXMuYWNjaW9uZXNQZWRpZG8gPSB7XHJcbiAgICBwcmVwYXJlOiAoKT0+bnVsbCxcclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKGRlcG90LCBmaWVsZE5hbWUpIHtcclxuICAgICAgICBsZXQgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgICAgIHRkLmlubmVySFRNTD0nJztcclxuICAgICAgICBjb2xvcmVhckVzdGFkbyhkZXBvdCwgJ3BlZGlkbycpO1xyXG4gICAgICAgIGxldCB0ZCA9IGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV07XHJcbiAgICAgICAgbGV0IGJvdG9uID0gbXkuY3JlYXRlRm9ya2VhYmxlQnV0dG9uKHttZW51VHlwZToncGVkaWRvJywgbmFtZTpgZ2VzdGlvbmFyLHBlZGlkb2AgLCBsYWJlbDpcImFicmlyXCJ9LCB7fSk7XHJcbiAgICAgICAgYm90b24uaHJlZiA9IGJvdG9uLmhyZWYgKyAnJicrICdwZWRpZG8nKyc9JytkZXBvdC5yb3cucGVkaWRvLnRvU3RyaW5nKClcclxuICAgICAgICB0ZC5hcHBlbmRDaGlsZChib3Rvbik7XHJcbiAgICB9XHJcbn1cclxuXHJcbm15T3duLndTY3JlZW5zLnByZXN1cHVlc3Rvcz1mdW5jdGlvbihfYWRkclBhcmFtcyl7XHJcbiAgICB2YXIgbWFpbkxheW91dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpITtcclxuICAgIHZhciBteURpdiA9IGh0bWwuZGl2KCkuY3JlYXRlKCk7XHJcbiAgICBsZXQgYm90b24gPSBteS5jcmVhdGVGb3JrZWFibGVCdXR0b24oe21lbnVUeXBlOidwcmVzdXB1ZXN0bycsIG5hbWU6J2dlc3Rpb25hcixwcmVzdXB1ZXN0bycsIGxhYmVsOidudWV2byd9LHt9KTtcclxuICAgIG1haW5MYXlvdXQuYXBwZW5kQ2hpbGQoYm90b24pO1xyXG4gICAgbWFpbkxheW91dC5hcHBlbmRDaGlsZChteURpdik7XHJcbiAgICBib3Rvbi5vbmNsaWNrPWFzeW5jIGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgbXkucmVtb3ZlU2Vzc2lvblZhcihTVE9SQUdFX1NUQVRFX05BTUUpO1xyXG4gICAgfVxyXG4gICAgbXkudGFibGVHcmlkKCdwcmVzdXB1ZXN0b3MnLG15RGl2LHt9KTtcclxufTtcclxuXHJcbm15T3duLndTY3JlZW5zLnBlZGlkb3M9ZnVuY3Rpb24oX2FkZHJQYXJhbXMpe1xyXG4gICAgdmFyIG1haW5MYXlvdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbl9sYXlvdXQnKSE7XHJcbiAgICB2YXIgbXlEaXYgPSBodG1sLmRpdigpLmNyZWF0ZSgpO1xyXG4gICAgbGV0IGJvdG9uID0gbXkuY3JlYXRlRm9ya2VhYmxlQnV0dG9uKHttZW51VHlwZToncGVkaWRvJywgbmFtZTonZ2VzdGlvbmFyLHBlZGlkbycsIGxhYmVsOidudWV2byd9LHt9KTtcclxuICAgIC8vdmFyIGJvdG9uID0gaHRtbC5idXR0b24oe30sJ251ZXZvJykuY3JlYXRlKCk7XHJcbiAgICBtYWluTGF5b3V0LmFwcGVuZENoaWxkKGJvdG9uKTtcclxuICAgIG1haW5MYXlvdXQuYXBwZW5kQ2hpbGQobXlEaXYpO1xyXG4gICAgYm90b24ub25jbGljaz1hc3luYyBmdW5jdGlvbigpe1xyXG4gICAgICAgIG15LnJlbW92ZVNlc3Npb25WYXIoU1RPUkFHRV9TVEFURV9OQU1FKTtcclxuICAgICAgICAvL2hpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsIG51bGwsIGxvY2F0aW9uLm9yaWdpbitsb2NhdGlvbi5wYXRobmFtZStteS5tZW51U2VwYXJhdG9yKydpPWdlc3Rpb25hcixwZWRpZG8nKTtcclxuICAgICAgICAvL215LnNob3dQYWdlKCk7XHJcbiAgICB9XHJcbiAgICBteS50YWJsZUdyaWQoJ3BlZGlkb3MnLG15RGl2LHt9KTtcclxufTtcclxuXHJcbnZhciB2YWxpZGF0ZUhleGFDb2xvcj0oc3RyaW5nOnN0cmluZyk9PiAvXiNbMC05QS1GXXs2fSQvaS50ZXN0KHN0cmluZyk7XHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5wYXJzZWFyQ29sb3I9e1xyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSk9PntcclxuICAgICAgICB2YXIgbXlDb2xvciA9IGRlcG90LnJvd0NvbnRyb2xzWydjb2xvciddLmdldFR5cGVkVmFsdWUoKTtcclxuICAgICAgICB2YXIgaXNWYWxpZENvbG9yPXZhbGlkYXRlSGV4YUNvbG9yKG15Q29sb3IpO1xyXG4gICAgICAgIGlmKG15Q29sb3IgJiYgIWlzVmFsaWRDb2xvcil7XHJcbiAgICAgICAgICAgIGFsZXJ0UHJvbWlzZShcImNvbG9yIGludsOhbGlkbyFcIik7XHJcbiAgICAgICAgICAgIGRlcG90LnJvd0NvbnRyb2xzWydjb2xvciddLnNldFR5cGVkVmFsdWUobnVsbCwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjb2xvcklucHV0ID0gaHRtbC5pbnB1dCh7dHlwZTpcImNvbG9yXCIsIHZhbHVlOmlzVmFsaWRDb2xvcj9teUNvbG9yOicjZmZmZmZmJ30pLmNyZWF0ZSgpO1xyXG4gICAgICAgIGNvbG9ySW5wdXQub25jaGFuZ2U9KCk9PntcclxuICAgICAgICAgICAgZGVwb3Qucm93Q29udHJvbHNbJ2NvbG9yJ10uc2V0VHlwZWRWYWx1ZShjb2xvcklucHV0LnZhbHVlLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVwb3Qucm93Q29udHJvbHNbZmllbGROYW1lXS5pbm5lckhUTUw9Jyc7XHJcbiAgICAgICAgZGVwb3Qucm93Q29udHJvbHNbZmllbGROYW1lXS5hcHBlbmRDaGlsZChjb2xvcklucHV0KTtcclxuICAgIH0sXHJcbiAgICBwcmVwYXJlOiAoZGVwb3QsIGZpZWxkTmFtZSk9Pnt9XHJcbn1cclxuXHJcbm15LmNsaWVudFNpZGVzLmNsb25hclByb2R1Y3RvID0ge1xyXG4gICAgdXBkYXRlOiBmYWxzZSxcclxuICAgIHByZXBhcmU6IGZ1bmN0aW9uIChkZXBvdCwgZmllbGROYW1lKSB7XHJcbiAgICAgICAgdmFyIHtwcm9kdWN0bywgbm9tYnJlfSA9IGRlcG90LnJvdztcclxuICAgICAgICB2YXIgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgICAgIHZhciBib3RvbiA9IGh0bWwuYnV0dG9uKHt9LCdjbG9uYXInKS5jcmVhdGUoKTtcclxuICAgICAgICB0ZC5hcHBlbmRDaGlsZChib3Rvbik7XHJcbiAgICAgICAgdGQub25jbGljaz1hc3luYyBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBhd2FpdCBjb25maXJtUHJvbWlzZShgY29uZmlybWEgY2xvbmFkbyBkZSBwcm9kdWN0byAoJHtwcm9kdWN0b30pIFwiJHtub21icmV9XCI/YCk7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBteS5hamF4LnByb2R1Y3RvX2Nsb25hcih7XHJcbiAgICAgICAgICAgICAgICBwcm9kdWN0byxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHZhciBuZXdEZXBvdCA9IGRlcG90Lm1hbmFnZXIuY3JlYXRlUm93SW5zZXJ0RWxlbWVudHMoZGVwb3QpO1xyXG4gICAgICAgICAgICBuZXdEZXBvdC5tYW5hZ2VyLmRlcG90UmVmcmVzaChuZXdEZXBvdCx7dXBkYXRlZFJvdzpyZXN1bHQucHJvZHVjdG9OdWV2bywgc2VuZGVkRm9yVXBkYXRlOnt9fSk7XHJcbiAgICAgICAgICAgIG5ld0RlcG90Lm1hbmFnZXIucmV0cmlldmVSb3dBbmRSZWZyZXNoKG5ld0RlcG90KSAgICAgICAgXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbn1cclxuXHJcbm15T3duLmF1dG9TZXR1cEZ1bmN0aW9ucy5wdXNoKGZ1bmN0aW9uIGF1dG9TZXR1cE15VGFibGVzKCl7XHJcbiAgICBUeXBlZENvbnRyb2xzLnNob3dMdXBhPWZhbHNlO1xyXG59KTtcclxuXHJcbi8vRUpFTVBMTyBHVUFSREFSXHJcbi8vbXkuY2xpZW50U2lkZXMuZ3VhcmRhciA9IHtcclxuLy8gICAgdXBkYXRlOiBmYWxzZSxcclxuLy8gICAgcHJlcGFyZTogZnVuY3Rpb24gKGRlcG90LCBmaWVsZE5hbWUpIHtcclxuLy8gICAgICAgIHZhciB0ZCA9IGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV07XHJcbi8vICAgICAgICB2YXIgYm90b24gPSBodG1sLmJ1dHRvbih7fSwnZ3VhcmRhcicpLmNyZWF0ZSgpO1xyXG4vLyAgICAgICAgdGQuYXBwZW5kQ2hpbGQoYm90b24pO1xyXG4vLyAgICAgICAgdGQub25jbGljaz1hc3luYyBmdW5jdGlvbigpe1xyXG4vLyAgICAgICAgICAgIHZhciBwa1ZhbHVlcyA9IHt9O1xyXG4vLyAgICAgICAgICAgIHBrVmFsdWVzWydjb2RpZ28nXT1kZXBvdC5yb3dDb250cm9sc1snY29kaWdvJ10uZ2V0VHlwZWRWYWx1ZSgpO1xyXG4vLyAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBteS5hamF4Lm9iamVjdF9nZXQoe1xyXG4vLyAgICAgICAgICAgICAgICB0YWJsZW5hbWU6ICdjbGllbnRlcycsXHJcbi8vICAgICAgICAgICAgICAgIHBrX3ZhbHVlczogcGtWYWx1ZXMsXHJcbi8vICAgICAgICAgICAgfSk7XHJcbi8vICAgICAgICAgICAgcmVzdWx0LmN1aXRfZG5pID0gJzEyMzQ1Njc4JztcclxuLy8gICAgICAgICAgICByZXN1bHQubWFpbCA9ICdtYW51ZWxAMTIzLmNvbSc7XHJcbi8vICAgICAgICAgICAgdmFyIHJlc3VsdDIgPSBhd2FpdCBteS5hamF4Lm9iamVjdF9zYXZlKHtcclxuLy8gICAgICAgICAgICAgICAgdGFibGVuYW1lOiAnY2xpZW50ZXMnLFxyXG4vLyAgICAgICAgICAgICAgICBkYXRvczogcmVzdWx0LFxyXG4vLyAgICAgICAgICAgIH0pO1xyXG4vLyAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdDIpO1xyXG4vLyAgICAgICAgfVxyXG4vLyAgICB9LFxyXG4vL30iXX0=
182
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC9jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUFBQSwyQ0FBeUM7SUFDekMsK0JBQStCO0lBQy9CLGdEQUFnRDtJQUVoRCx5REFBd0Q7SUFHeEQsSUFBSSxFQUFFLEdBQUMsS0FBSyxDQUFDO0lBRWIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUMsVUFBUyxXQUFXO1FBQ3ZDLElBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFFLENBQUM7UUFDekQsVUFBVSxDQUFDLFdBQVcsQ0FBQyxpQkFBSSxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDL0QsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBYyxFQUFDLEVBQUU7WUFDakQsVUFBVSxDQUFDLFdBQVcsQ0FBQyxpQkFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUMvRCxJQUFJLEtBQUssR0FBRyxpQkFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hDLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxXQUFXLE9BQU8sRUFBRSxFQUFDLEtBQUssRUFBQyxFQUFFLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUMsQ0FBQztJQUVGLEVBQUUsQ0FBQyxXQUFXLENBQUMsVUFBVSxHQUFHO1FBQ3hCLE1BQU0sRUFBRSxLQUFLO1FBQ2IsT0FBTyxFQUFFLFVBQVUsS0FBSyxFQUFFLFNBQVM7WUFDL0IsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMs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QU8sQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFDLEVBQUMsVUFBVSxFQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsZUFBZSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUM7Z0JBQzlGLFFBQVEsQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDcEQsQ0FBQyxDQUFDO1FBQ04sQ0FBQztLQUNKLENBQUE7SUFFRCxLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsaUJBQWlCO1FBQ3BELGFBQWEsQ0FBQyxRQUFRLEdBQUMsS0FBSyxDQUFDO0lBQ2pDLENBQUMsQ0FBQyxDQUFDOztBQUVILGlCQUFpQjtBQUNqQiw0QkFBNEI7QUFDNUIsb0JBQW9CO0FBQ3BCLDRDQUE0QztBQUM1QyxnREFBZ0Q7QUFDaEQseURBQXlEO0FBQ3pELGdDQUFnQztBQUNoQyxzQ0FBc0M7QUFDdEMsZ0NBQWdDO0FBQ2hDLDZFQUE2RTtBQUM3RSxxREFBcUQ7QUFDckQsd0NBQXdDO0FBQ3hDLHNDQUFzQztBQUN0QyxpQkFBaUI7QUFDakIsMkNBQTJDO0FBQzNDLDZDQUE2QztBQUM3Qyx1REFBdUQ7QUFDdkQsd0NBQXdDO0FBQ3hDLGdDQUFnQztBQUNoQyxpQkFBaUI7QUFDakIsbUNBQW1DO0FBQ25DLFdBQVc7QUFDWCxRQUFRO0FBQ1IsR0FBRyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aHRtbCwgSHRtbFRhZ30gZnJvbSBcImpzLXRvLWh0bWxcIjtcclxuaW1wb3J0ICogYXMgbXlPd24gZnJvbSBcIm15T3duXCI7XHJcbmltcG9ydCAqIGFzIFR5cGVkQ29udHJvbHMgZnJvbSBcInR5cGVkLWNvbnRyb2xzXCI7XHJcbmltcG9ydCAqIGFzIGxpa2VBciBmcm9tIFwibGlrZS1hclwiO1xyXG5pbXBvcnQgeyBTVE9SQUdFX1NUQVRFX05BTUUgfSBmcm9tIFwiLi9yZWR1eC1mb3JtdWxhcmlvXCI7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCJAbWF0ZXJpYWwtdWkvY29yZVwiO1xyXG5cclxudmFyIG15PW15T3duO1xyXG5cclxubXlPd24ud1NjcmVlbnMudGFibGVybz1mdW5jdGlvbihfYWRkclBhcmFtcyl7XHJcbiAgICB2YXIgbWFpbkxheW91dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpITtcclxuICAgIG1haW5MYXlvdXQuYXBwZW5kQ2hpbGQoaHRtbC5oMShgVGFibGVybyBkZSBjb250cm9sYCkuY3JlYXRlKCkpO1xyXG4gICAgWyd2ZW5jaWRvcycsICdwZW5kaWVudGVzJ10uZm9yRWFjaCgoZWxlbWVudDpzdHJpbmcpPT57XHJcbiAgICAgICAgbWFpbkxheW91dC5hcHBlbmRDaGlsZChodG1sLmgyKGBQZWRpZG9zICR7ZWxlbWVudH1gKS5jcmVhdGUoKSk7XHJcbiAgICAgICAgdmFyIG15RGl2ID0gaHRtbC5kaXYoKS5jcmVhdGUoKTtcclxuICAgICAgICBtYWluTGF5b3V0LmFwcGVuZENoaWxkKG15RGl2KTtcclxuICAgICAgICBteS50YWJsZUdyaWQoYHBlZGlkb3NfJHtlbGVtZW50fWAsbXlEaXYse30pO1xyXG4gICAgfSlcclxufTtcclxuXHJcbm15LmNsaWVudFNpZGVzLnZlckNsaWVudGUgPSB7XHJcbiAgICB1cGRhdGU6IGZhbHNlLFxyXG4gICAgcHJlcGFyZTogZnVuY3Rpb24gKGRlcG90LCBmaWVsZE5hbWUpIHtcclxuICAgICAgICB2YXIgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgICAgIHZhciBib3RvbiA9IGh0bWwuYnV0dG9uKHt9LCd2ZXInKS5jcmVhdGUoKTtcclxuICAgICAgICB0ZC5hcHBlbmRDaGlsZChib3Rvbik7XHJcbiAgICAgICAgdGQub25jbGljaz1hc3luYyBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBkZXNwbGVnYXJDbGllbnRlKGRlcG90KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG59XHJcblxyXG5mdW5jdGlvbiBjb2xvcmVhckVzdGFkbyhkZXBvdCxwZWRpZG9PcHJlc3VwdWVzdG9TdHJpbmc6J3BlZGlkbyd8J3ByZXN1cHVlc3RvJyApe1xyXG4gICAgZGVwb3Qucm93Q29udHJvbHNbJ2VzdGFkbyddLnN0eWxlLmJhY2tncm91bmRDb2xvcj1kZXBvdC5yb3dDb250cm9sc1tgZXN0YWRvc18ke3BlZGlkb09wcmVzdXB1ZXN0b1N0cmluZ31fX2NvbG9yYF0uZ2V0VHlwZWRWYWx1ZSgpO1xyXG59XHJcblxyXG5teS5jbGllbnRTaWRlcy5hY2Npb25lc1ByZXN1cHVlc3RvID0ge1xyXG4gICAgcHJlcGFyZTogKCk9Pm51bGwsXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChkZXBvdCwgZmllbGROYW1lKSB7XHJcbiAgICAgICAgbGV0IHRkID0gZGVwb3Qucm93Q29udHJvbHNbZmllbGROYW1lXTtcclxuICAgICAgICB0ZC5pbm5lckhUTUw9Jyc7XHJcbiAgICAgICAgY29sb3JlYXJFc3RhZG8oZGVwb3QsICdwcmVzdXB1ZXN0bycpO1xyXG4gICAgICAgIGxldCB0ZCA9IGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV07XHJcbiAgICAgICAgbGV0IGJvdG9uID0gbXkuY3JlYXRlRm9ya2VhYmxlQnV0dG9uKHttZW51VHlwZToncHJlc3VwdWVzdG8nLCBuYW1lOmBnZXN0aW9uYXIscHJlc3VwdWVzdG9gICwgbGFiZWw6XCJhYnJpclwifSwge30pO1xyXG4gICAgICAgIGJvdG9uLmhyZWYgPSBib3Rvbi5ocmVmICsgJyYnKyAncHJlc3VwdWVzdG8nKyc9JytkZXBvdC5yb3cucHJlc3VwdWVzdG8udG9TdHJpbmcoKVxyXG4gICAgICAgIHRkLmFwcGVuZENoaWxkKGJvdG9uKTtcclxuICAgICAgICBsZXQgcHVlZGVFZGl0YXJQcmVzdXB1ZXN0byA9IGRlcG90LnJvd0NvbnRyb2xzWydlc3RhZG9zX3ByZXN1cHVlc3RvX19wZXJtaXRlX2VkaXRhciddLmdldFR5cGVkVmFsdWUoKTtcclxuICAgICAgICBpZihwdWVkZUVkaXRhclByZXN1cHVlc3RvKXtcclxuICAgICAgICAgICAgbGV0IGJvdG9uID0gbXkuY3JlYXRlRm9ya2VhYmxlQnV0dG9uKHttZW51VHlwZToncGVkaWRvJywgbmFtZTonZ2VzdGlvbmFyLHBlZGlkbycsIGxhYmVsOlwiYWNlcHRhclwifSwge30pO1xyXG4gICAgICAgICAgICBib3Rvbi5ocmVmID0gYm90b24uaHJlZiArICcmcHJlc3VwdWVzdG89JytkZXBvdC5yb3dbJ3ByZXN1cHVlc3RvJ10udG9TdHJpbmcoKVxyXG4gICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZChib3Rvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBwcmVzdXB1ZXN0byA9IGRlcG90LnJvd0NvbnRyb2xzWydwcmVzdXB1ZXN0byddLmdldFR5cGVkVmFsdWUoKTtcclxuICAgICAgICBbJ2FudWxhcicsICdyZWNoYXphciddLmZvckVhY2goKGFjY2lvbik9PntcclxuICAgICAgICAgICAgaWYocHVlZGVFZGl0YXJQcmVzdXB1ZXN0byl7XHJcbiAgICAgICAgICAgICAgICBsZXQgYm90b24gPSBodG1sLmJ1dHRvbih7fSxhY2Npb24pLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgYm90b24ub25jbGljayA9IGFzeW5jICgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgY29uZmlybVByb21pc2UoYMK/ZXN0w6EgcG9yICR7YWNjaW9ufSBlbCBwcmVzdXB1ZXN0bz8gRXN0YSBhY2Npw7NuIG5vIHNlIHBvZHLDoSBkZXNoYWNlcmApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgbXkuYWpheFtgcHJlc3VwdWVzdG9fJHthY2Npb259YF0oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc3VwdWVzdG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0UHJvbWlzZShlcnIubWVzc2FnZSlcclxuICAgICAgICAgICAgICAgICAgICB9ZmluYWxseXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGdyaWQ9ZGVwb3QubWFuYWdlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZ3JpZC5yZXRyaWV2ZVJvd0FuZFJlZnJlc2goZGVwb3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZChib3Rvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfSxcclxufVxyXG5cclxubXkuY2xpZW50U2lkZXMuYWNjaW9uZXNQZWRpZG8gPSB7XHJcbiAgICBwcmVwYXJlOiAoKT0+bnVsbCxcclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKGRlcG90LCBmaWVsZE5hbWUpIHtcclxuICAgICAgICBsZXQgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgICAgIHRkLmlubmVySFRNTD0nJztcclxuICAgICAgICBjb2xvcmVhckVzdGFkbyhkZXBvdCwgJ3BlZGlkbycpO1xyXG4gICAgICAgIGxldCB0ZCA9IGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV07XHJcbiAgICAgICAgbGV0IGJvdG9uID0gbXkuY3JlYXRlRm9ya2VhYmxlQnV0dG9uKHttZW51VHlwZToncGVkaWRvJywgbmFtZTpgZ2VzdGlvbmFyLHBlZGlkb2AgLCBsYWJlbDpcImFicmlyXCJ9LCB7fSk7XHJcbiAgICAgICAgYm90b24uaHJlZiA9IGJvdG9uLmhyZWYgKyAnJicrICdwZWRpZG8nKyc9JytkZXBvdC5yb3cucGVkaWRvLnRvU3RyaW5nKClcclxuICAgICAgICB0ZC5hcHBlbmRDaGlsZChib3Rvbik7XHJcbiAgICB9XHJcbn1cclxuXHJcbm15T3duLndTY3JlZW5zLnByZXN1cHVlc3Rvcz1mdW5jdGlvbihfYWRkclBhcmFtcyl7XHJcbiAgICB2YXIgbWFpbkxheW91dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpITtcclxuICAgIHZhciBteURpdiA9IGh0bWwuZGl2KCkuY3JlYXRlKCk7XHJcbiAgICBsZXQgYm90b24gPSBteS5jcmVhdGVGb3JrZWFibGVCdXR0b24oe21lbnVUeXBlOidwcmVzdXB1ZXN0bycsIG5hbWU6J2dlc3Rpb25hcixwcmVzdXB1ZXN0bycsIGxhYmVsOidudWV2byd9LHt9KTtcclxuICAgIG1haW5MYXlvdXQuYXBwZW5kQ2hpbGQoYm90b24pO1xyXG4gICAgbWFpbkxheW91dC5hcHBlbmRDaGlsZChteURpdik7XHJcbiAgICBib3Rvbi5vbmNsaWNrPWFzeW5jIGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgbXkucmVtb3ZlU2Vzc2lvblZhcihTVE9SQUdFX1NUQVRFX05BTUUpO1xyXG4gICAgfVxyXG4gICAgbXkudGFibGVHcmlkKCdwcmVzdXB1ZXN0b3MnLG15RGl2LHt9KTtcclxufTtcclxuXHJcbm15T3duLndTY3JlZW5zLnBlZGlkb3M9ZnVuY3Rpb24oX2FkZHJQYXJhbXMpe1xyXG4gICAgdmFyIG1haW5MYXlvdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbl9sYXlvdXQnKSE7XHJcbiAgICB2YXIgbXlEaXYgPSBodG1sLmRpdigpLmNyZWF0ZSgpO1xyXG4gICAgbGV0IGJvdG9uID0gbXkuY3JlYXRlRm9ya2VhYmxlQnV0dG9uKHttZW51VHlwZToncGVkaWRvJywgbmFtZTonZ2VzdGlvbmFyLHBlZGlkbycsIGxhYmVsOidudWV2byd9LHt9KTtcclxuICAgIC8vdmFyIGJvdG9uID0gaHRtbC5idXR0b24oe30sJ251ZXZvJykuY3JlYXRlKCk7XHJcbiAgICBtYWluTGF5b3V0LmFwcGVuZENoaWxkKGJvdG9uKTtcclxuICAgIG1haW5MYXlvdXQuYXBwZW5kQ2hpbGQobXlEaXYpO1xyXG4gICAgYm90b24ub25jbGljaz1hc3luYyBmdW5jdGlvbigpe1xyXG4gICAgICAgIG15LnJlbW92ZVNlc3Npb25WYXIoU1RPUkFHRV9TVEFURV9OQU1FKTtcclxuICAgICAgICAvL2hpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsIG51bGwsIGxvY2F0aW9uLm9yaWdpbitsb2NhdGlvbi5wYXRobmFtZStteS5tZW51U2VwYXJhdG9yKydpPWdlc3Rpb25hcixwZWRpZG8nKTtcclxuICAgICAgICAvL215LnNob3dQYWdlKCk7XHJcbiAgICB9XHJcbiAgICBteS50YWJsZUdyaWQoJ3BlZGlkb3MnLG15RGl2LHt9KTtcclxufTtcclxuXHJcbnZhciB2YWxpZGF0ZUhleGFDb2xvcj0oc3RyaW5nOnN0cmluZyk9PiAvXiNbMC05QS1GXXs2fSQvaS50ZXN0KHN0cmluZyk7XHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5wYXJzZWFyQ29sb3I9e1xyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSk9PntcclxuICAgICAgICB2YXIgbXlDb2xvciA9IGRlcG90LnJvd0NvbnRyb2xzWydjb2xvciddLmdldFR5cGVkVmFsdWUoKTtcclxuICAgICAgICB2YXIgaXNWYWxpZENvbG9yPXZhbGlkYXRlSGV4YUNvbG9yKG15Q29sb3IpO1xyXG4gICAgICAgIGlmKG15Q29sb3IgJiYgIWlzVmFsaWRDb2xvcil7XHJcbiAgICAgICAgICAgIGFsZXJ0UHJvbWlzZShcImNvbG9yIGludsOhbGlkbyFcIik7XHJcbiAgICAgICAgICAgIGRlcG90LnJvd0NvbnRyb2xzWydjb2xvciddLnNldFR5cGVkVmFsdWUobnVsbCwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjb2xvcklucHV0ID0gaHRtbC5pbnB1dCh7dHlwZTpcImNvbG9yXCIsIHZhbHVlOmlzVmFsaWRDb2xvcj9teUNvbG9yOicjZmZmZmZmJ30pLmNyZWF0ZSgpO1xyXG4gICAgICAgIGNvbG9ySW5wdXQub25jaGFuZ2U9KCk9PntcclxuICAgICAgICAgICAgZGVwb3Qucm93Q29udHJvbHNbJ2NvbG9yJ10uc2V0VHlwZWRWYWx1ZShjb2xvcklucHV0LnZhbHVlLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVwb3Qucm93Q29udHJvbHNbZmllbGROYW1lXS5pbm5lckhUTUw9Jyc7XHJcbiAgICAgICAgZGVwb3Qucm93Q29udHJvbHNbZmllbGROYW1lXS5hcHBlbmRDaGlsZChjb2xvcklucHV0KTtcclxuICAgIH0sXHJcbiAgICBwcmVwYXJlOiAoZGVwb3QsIGZpZWxkTmFtZSk9Pnt9XHJcbn1cclxuXHJcbm15LmNsaWVudFNpZGVzLmNsb25hclByb2R1Y3RvID0ge1xyXG4gICAgdXBkYXRlOiBmYWxzZSxcclxuICAgIHByZXBhcmU6IGZ1bmN0aW9uIChkZXBvdCwgZmllbGROYW1lKSB7XHJcbiAgICAgICAgdmFyIHtwcm9kdWN0bywgbm9tYnJlfSA9IGRlcG90LnJvdztcclxuICAgICAgICB2YXIgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgICAgIHZhciBib3RvbiA9IGh0bWwuYnV0dG9uKHt9LCdjbG9uYXInKS5jcmVhdGUoKTtcclxuICAgICAgICB0ZC5hcHBlbmRDaGlsZChib3Rvbik7XHJcbiAgICAgICAgdGQub25jbGljaz1hc3luYyBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBhd2FpdCBjb25maXJtUHJvbWlzZShgY29uZmlybWEgY2xvbmFkbyBkZSBwcm9kdWN0byAoJHtwcm9kdWN0b30pIFwiJHtub21icmV9XCI/YCk7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBteS5hamF4LnByb2R1Y3RvX2Nsb25hcih7XHJcbiAgICAgICAgICAgICAgICBwcm9kdWN0byxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHZhciBuZXdEZXBvdCA9IGRlcG90Lm1hbmFnZXIuY3JlYXRlUm93SW5zZXJ0RWxlbWVudHMoZGVwb3QpO1xyXG4gICAgICAgICAgICBuZXdEZXBvdC5tYW5hZ2VyLmRlcG90UmVmcmVzaChuZXdEZXBvdCx7dXBkYXRlZFJvdzpyZXN1bHQucHJvZHVjdG9OdWV2bywgc2VuZGVkRm9yVXBkYXRlOnt9fSk7XHJcbiAgICAgICAgICAgIG5ld0RlcG90Lm1hbmFnZXIucmV0cmlldmVSb3dBbmRSZWZyZXNoKG5ld0RlcG90KSAgICAgICAgXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbn1cclxuXHJcbm15T3duLmF1dG9TZXR1cEZ1bmN0aW9ucy5wdXNoKGZ1bmN0aW9uIGF1dG9TZXR1cE15VGFibGVzKCl7XHJcbiAgICBUeXBlZENvbnRyb2xzLnNob3dMdXBhPWZhbHNlO1xyXG59KTtcclxuXHJcbi8vRUpFTVBMTyBHVUFSREFSXHJcbi8vbXkuY2xpZW50U2lkZXMuZ3VhcmRhciA9IHtcclxuLy8gICAgdXBkYXRlOiBmYWxzZSxcclxuLy8gICAgcHJlcGFyZTogZnVuY3Rpb24gKGRlcG90LCBmaWVsZE5hbWUpIHtcclxuLy8gICAgICAgIHZhciB0ZCA9IGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV07XHJcbi8vICAgICAgICB2YXIgYm90b24gPSBodG1sLmJ1dHRvbih7fSwnZ3VhcmRhcicpLmNyZWF0ZSgpO1xyXG4vLyAgICAgICAgdGQuYXBwZW5kQ2hpbGQoYm90b24pO1xyXG4vLyAgICAgICAgdGQub25jbGljaz1hc3luYyBmdW5jdGlvbigpe1xyXG4vLyAgICAgICAgICAgIHZhciBwa1ZhbHVlcyA9IHt9O1xyXG4vLyAgICAgICAgICAgIHBrVmFsdWVzWydjb2RpZ28nXT1kZXBvdC5yb3dDb250cm9sc1snY29kaWdvJ10uZ2V0VHlwZWRWYWx1ZSgpO1xyXG4vLyAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBteS5hamF4Lm9iamVjdF9nZXQoe1xyXG4vLyAgICAgICAgICAgICAgICB0YWJsZW5hbWU6ICdjbGllbnRlcycsXHJcbi8vICAgICAgICAgICAgICAgIHBrX3ZhbHVlczogcGtWYWx1ZXMsXHJcbi8vICAgICAgICAgICAgfSk7XHJcbi8vICAgICAgICAgICAgcmVzdWx0LmN1aXRfZG5pID0gJzEyMzQ1Njc4JztcclxuLy8gICAgICAgICAgICByZXN1bHQubWFpbCA9ICdtYW51ZWxAMTIzLmNvbSc7XHJcbi8vICAgICAgICAgICAgdmFyIHJlc3VsdDIgPSBhd2FpdCBteS5hamF4Lm9iamVjdF9zYXZlKHtcclxuLy8gICAgICAgICAgICAgICAgdGFibGVuYW1lOiAnY2xpZW50ZXMnLFxyXG4vLyAgICAgICAgICAgICAgICBkYXRvczogcmVzdWx0LFxyXG4vLyAgICAgICAgICAgIH0pO1xyXG4vLyAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdDIpO1xyXG4vLyAgICAgICAgfVxyXG4vLyAgICB9LFxyXG4vL30iXX0=
File without changes