@openziti/ziti-console-lib 0.6.8 → 0.7.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/assets/scripts/components/codemirror/codemirror.css +25 -25
- package/assets/scripts/components/codemirror/modes/addons/show-hint.css +8 -8
- package/assets/scripts/components/column.css +28 -28
- package/assets/scripts/components/leaflet/leaflet.css +94 -94
- package/assets/scripts/components/network/vis-network.css +209 -209
- package/assets/scripts/components/network/vis-network.min.css +1 -1
- package/assets/styles/chart.min.css +1 -1
- package/assets/styles/dark.css +2 -2
- package/assets/styles/datetimepicker.css +1 -1
- package/assets/styles/forms.css +119 -119
- package/assets/styles/global.scss +233 -232
- package/assets/styles/growler.css +50 -50
- package/assets/styles/header.css +65 -65
- package/assets/styles/navigation.css +45 -45
- package/assets/styles/select2.css +84 -84
- package/assets/styles/spectrum.css +79 -79
- package/assets/styles/tables.css +118 -118
- package/assets/styles/tooltip.css +18 -18
- package/assets/styles/ziti.css +728 -728
- package/esm2022/lib/features/card/card.component.mjs +2 -2
- package/esm2022/lib/features/card-list/card-list.component.mjs +2 -2
- package/esm2022/lib/features/confirm/confirm.component.mjs +2 -2
- package/esm2022/lib/features/creation-summary-dialog/creation-summary-dialog.component.mjs +2 -2
- package/esm2022/lib/features/data-table/cells/table-cell-menu/table-cell-menu.component.mjs +2 -2
- package/esm2022/lib/features/data-table/cells/table-cell-name/table-cell-name.component.mjs +2 -2
- package/esm2022/lib/features/data-table/cells/table-cell-select/table-cell-select.component.mjs +2 -2
- package/esm2022/lib/features/data-table/column-headers/table-column-default/table-column-default.component.mjs +2 -2
- package/esm2022/lib/features/data-table/column-headers/table-column-filter/table-column-filter.component.mjs +2 -2
- package/esm2022/lib/features/data-table/column-headers/table-column-menu/table-column-menu.component.mjs +2 -2
- package/esm2022/lib/features/data-table/column-headers/table-column-select/table-column-select.component.mjs +2 -2
- package/esm2022/lib/features/data-table/data-table.component.mjs +12 -29
- package/esm2022/lib/features/data-table/table-filter-bar/filter-bar.component.mjs +2 -2
- package/esm2022/lib/features/data-table/table-hidden-columns-bar/hidden-columns-bar.component.mjs +2 -2
- package/esm2022/lib/features/dynamic-widgets/checkbox-list/checkbox-list-input.component.mjs +2 -2
- package/esm2022/lib/features/dynamic-widgets/forwarding-config/forwarding-config.component.mjs +2 -2
- package/esm2022/lib/features/dynamic-widgets/number/number-input.component.mjs +2 -2
- package/esm2022/lib/features/dynamic-widgets/object/object.component.mjs +2 -2
- package/esm2022/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.mjs +2 -2
- package/esm2022/lib/features/dynamic-widgets/selector/selector-input.component.mjs +2 -2
- package/esm2022/lib/features/dynamic-widgets/string/string-input.component.mjs +2 -2
- package/esm2022/lib/features/json-view/json-view.component.mjs +2 -2
- package/esm2022/lib/features/list-page-features/list-page-form/list-page-form.component.mjs +2 -2
- package/esm2022/lib/features/list-page-features/list-page-header/list-page-header.component.mjs +2 -2
- package/esm2022/lib/features/loading-indicator/loading-indicator.component.mjs +2 -2
- package/esm2022/lib/features/messaging/growler.component.mjs +2 -2
- package/esm2022/lib/features/multi-action-button/multi-action-button.component.mjs +2 -2
- package/esm2022/lib/features/no-items/no-items.component.mjs +2 -2
- package/esm2022/lib/features/overrides/overrides.component.mjs +2 -2
- package/esm2022/lib/features/preview-list/preview-list.component.mjs +2 -2
- package/esm2022/lib/features/preview-selections/preview-selections.component.mjs +2 -2
- package/esm2022/lib/features/projectable-forms/auth-policy/auth-policy-form.component.mjs +2 -2
- package/esm2022/lib/features/projectable-forms/configuration/configuration-form.component.mjs +2 -2
- package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.component.mjs +2 -2
- package/esm2022/lib/features/projectable-forms/form-field-container/form-field-container.component.mjs +2 -2
- package/esm2022/lib/features/projectable-forms/form-field-toggle/form-field-toggle.component.mjs +2 -2
- package/esm2022/lib/features/projectable-forms/form-header/form-header.component.mjs +2 -2
- package/esm2022/lib/features/projectable-forms/identity/identity-form.component.mjs +3 -3
- package/esm2022/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.mjs +18 -3
- package/esm2022/lib/features/projectable-forms/service/service-form.component.mjs +2 -2
- package/esm2022/lib/features/projectable-forms/service/simple-service/simple-service.component.mjs +2 -2
- package/esm2022/lib/features/projectable-forms/terminator/terminator-form.component.mjs +2 -2
- package/esm2022/lib/features/qr-code/qr-code.component.mjs +2 -2
- package/esm2022/lib/features/reset-enrollment/reset-enrollment.component.mjs +2 -2
- package/esm2022/lib/features/side-modal/side-modal.component.mjs +2 -2
- package/esm2022/lib/features/sidebars/side-banner/side-banner.component.mjs +2 -2
- package/esm2022/lib/features/sidebars/side-navbar/side-navbar.component.mjs +2 -2
- package/esm2022/lib/features/sidebars/side-toolbar/side-toolbar.component.mjs +2 -2
- package/esm2022/lib/features/tag-selector/tag-selector.component.mjs +2 -2
- package/esm2022/lib/features/visualizer/identity-service-path/identity-service-path.component.mjs +2 -2
- package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.component.mjs +20 -7
- package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.helper.mjs +162 -265
- package/esm2022/lib/pages/edge-routers/edge-routers-page.component.mjs +2 -2
- package/esm2022/lib/pages/identities/identities-page.component.mjs +10 -3
- package/esm2022/lib/pages/jwt-signers/jwt-signers-page.component.mjs +2 -2
- package/esm2022/lib/pages/services/services-page.component.mjs +2 -2
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/openziti-ziti-console-lib.mjs +320 -405
- package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
- package/lib/features/data-table/data-table.component.d.ts +1 -0
- package/lib/features/data-table/data-table.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts +1 -0
- package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts.map +1 -1
- package/lib/features/visualizer/network-visualizer/network-visualizer.component.d.ts +1 -0
- package/lib/features/visualizer/network-visualizer/network-visualizer.component.d.ts.map +1 -1
- package/lib/features/visualizer/network-visualizer/network-visualizer.helper.d.ts.map +1 -1
- package/lib/pages/identities/identities-page.component.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -164,7 +164,6 @@ class NetworkVisualizerHelper {
|
|
|
164
164
|
serviceobj.type = 'Service';
|
|
165
165
|
serviceobj.rootNode = isRootNode;
|
|
166
166
|
const attributeswithName = [];
|
|
167
|
-
// attributeswithName.push('@' + rawObj.name);
|
|
168
167
|
rawObj && rawObj.roleAttributes && rawObj.roleAttributes.find((srattr) => {
|
|
169
168
|
attributeswithName.push(srattr);
|
|
170
169
|
});
|
|
@@ -195,17 +194,7 @@ class NetworkVisualizerHelper {
|
|
|
195
194
|
function processIdentitiesForTree(identitiesChildren, identities, nx, ny) {
|
|
196
195
|
if (args[2] === false)
|
|
197
196
|
return identitiesChildren;
|
|
198
|
-
|
|
199
|
-
const unregisteredGrp = new Group(createId(), 'Identities[Unregistered]', 'Identities that are not registered');
|
|
200
|
-
const abcdGrp = new Group(createId(), 'Identities [A-D]', 'Identity name starts with A to D');
|
|
201
|
-
const efghGrp = new Group(createId(), 'Identities [E-H]', 'Identity name starts with E to H');
|
|
202
|
-
const ijklGrp = new Group(createId(), 'Identities [I-L]', 'Identity name starts with I to L');
|
|
203
|
-
const mnopGrp = new Group(createId(), 'Identities [M-P]', 'Identity name starts with M to P');
|
|
204
|
-
const qrstGrp = new Group(createId(), 'Identities [Q-T]', 'Identity name starts with Q to T');
|
|
205
|
-
const uvwxGrp = new Group(createId(), 'Identities [U-X]', 'Identity name starts with U to X');
|
|
206
|
-
const yzGrp = new Group(createId(), 'Identities [Y-Z]', 'Identity name starts with Y and Z');
|
|
207
|
-
const oneTo9Grp = new Group(createId(), 'Identities [1-9]', 'Identity name starts with 0 to 9');
|
|
208
|
-
const specialCharGrp = new Group(createId(), 'Identities [others]', 'Identity name starts with special characters');
|
|
197
|
+
const obj_array = [];
|
|
209
198
|
for (let j = nx; j < ny; j++) {
|
|
210
199
|
const endpoint = new Identity();
|
|
211
200
|
endpoint.rootNode = 'Yes';
|
|
@@ -224,30 +213,100 @@ class NetworkVisualizerHelper {
|
|
|
224
213
|
if (identities[j].authPolicy && identities[j].authPolicy.name.includes("BrowZer")) {
|
|
225
214
|
endpoint.type = 'BrowZer Identity';
|
|
226
215
|
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
216
|
+
obj_array.push(endpoint);
|
|
217
|
+
} // end of main for loop
|
|
218
|
+
return grouping('Identitie', identitiesChildren, obj_array);
|
|
219
|
+
}
|
|
220
|
+
function subGrouping(name, mainGroup) {
|
|
221
|
+
const pageSize = 50;
|
|
222
|
+
mainGroup.children.sort(function (a, b) {
|
|
223
|
+
return a.name.localeCompare(b.name);
|
|
224
|
+
});
|
|
225
|
+
if (mainGroup.children.length > pageSize) {
|
|
226
|
+
const children = [];
|
|
227
|
+
let pageNo = 0;
|
|
228
|
+
for (let i = 0; i < mainGroup.children.length; i++) {
|
|
229
|
+
const lastElement = (i + pageSize) < mainGroup.children.length ? (i + pageSize) : (mainGroup.children.length);
|
|
230
|
+
const nameS = name + 's [' +
|
|
231
|
+
mainGroup.children[i].name.substring(0, 4) +
|
|
232
|
+
' - ' +
|
|
233
|
+
mainGroup.children[lastElement - 1].name.substring(0, 4) +
|
|
234
|
+
']';
|
|
235
|
+
const chld = new Group(createId(), nameS, name + ' name starts with ' +
|
|
236
|
+
mainGroup.children[i].name.substring(0, 4) +
|
|
237
|
+
' To ' +
|
|
238
|
+
mainGroup.children[lastElement - 1].name.substring(0, 4));
|
|
239
|
+
let j = 0;
|
|
240
|
+
for (j = i; j < lastElement; j++) {
|
|
241
|
+
i++;
|
|
242
|
+
chld.children.push(mainGroup.children[j]);
|
|
243
|
+
}
|
|
244
|
+
--i;
|
|
245
|
+
chld.name = chld.name + ' (' + chld.children.length + ')';
|
|
246
|
+
children.push(chld);
|
|
247
|
+
}
|
|
248
|
+
mainGroup.children = children;
|
|
249
|
+
}
|
|
250
|
+
return mainGroup;
|
|
251
|
+
}
|
|
252
|
+
function grouping(name, children, objectsArray) {
|
|
253
|
+
let protocolRDPGrp, protocolHTTPSGrp, protocolHTTPGrp, protocolFTPGrp, unregisteredGrp;
|
|
254
|
+
if (name === 'Service') {
|
|
255
|
+
protocolRDPGrp = new Group(createId(), 'Services [protocol-RDP]', 'Services created for RDP protocol');
|
|
256
|
+
protocolHTTPSGrp = new Group(createId(), 'Services [protocol-HTTPS]', 'Service created for HTTPS protocol');
|
|
257
|
+
protocolHTTPGrp = new Group(createId(), 'Services [protocol-HTTP]', 'Service created for HTTP protocol');
|
|
258
|
+
protocolFTPGrp = new Group(createId(), 'Services [protocol-FTP]', 'Service created for FTP protocol');
|
|
259
|
+
}
|
|
260
|
+
if (name === 'Identitie') {
|
|
261
|
+
unregisteredGrp = new Group(createId(), 'Identities[Unregistered]', 'Identities that are not registered');
|
|
262
|
+
}
|
|
263
|
+
const abcdGrp = new Group(createId(), name + 's [A-D]', name + ' name starts with A to D');
|
|
264
|
+
const efghGrp = new Group(createId(), name + 's [E-H]', name + ' name starts with E to H');
|
|
265
|
+
const ijklGrp = new Group(createId(), name + 's [I-L]', name + ' name starts with I to L');
|
|
266
|
+
const mnopGrp = new Group(createId(), name + 's [M-P]', name + ' name starts with M to P');
|
|
267
|
+
const qrstGrp = new Group(createId(), name + 's [Q-T]', name + ' name starts with Q to T');
|
|
268
|
+
const uvwxGrp = new Group(createId(), name + 's [U-X]', name + ' name starts with U to X');
|
|
269
|
+
const yzGrp = new Group(createId(), name + 's [Y-Z]', name + ' name starts with Y and Z');
|
|
270
|
+
const oneTo9Grp = new Group(createId(), name + 's [1-9]', name + ' name starts with 0 to 9');
|
|
271
|
+
const specialCharGrp = new Group(createId(), name + 's [others]', name + ' name starts with special characters');
|
|
272
|
+
for (let i = 0; i < objectsArray.length; i++) {
|
|
273
|
+
const obj = objectsArray[i];
|
|
274
|
+
const cha = obj.name.charAt(0).toLowerCase();
|
|
275
|
+
if (name === 'Identitie' && obj.status === 'Not Registered') {
|
|
276
|
+
unregisteredGrp.children.push(obj);
|
|
277
|
+
}
|
|
278
|
+
else if (name === 'Service' && obj.protocol === 'rdp') {
|
|
279
|
+
protocolRDPGrp.children.push(obj);
|
|
280
|
+
}
|
|
281
|
+
else if (name === 'Service' && obj.protocol === 'https') {
|
|
282
|
+
protocolHTTPSGrp.children.push(obj);
|
|
283
|
+
}
|
|
284
|
+
else if (name === 'Service' && obj.protocol === 'http') {
|
|
285
|
+
protocolHTTPGrp.children.push(obj);
|
|
286
|
+
}
|
|
287
|
+
else if (name === 'Service' && obj.protocol === 'ftp') {
|
|
288
|
+
protocolFTPGrp.children.push(obj);
|
|
230
289
|
}
|
|
231
290
|
else if (cha === 'a' || cha === 'b' || cha === 'c' || cha === 'd') {
|
|
232
|
-
abcdGrp.children.push(
|
|
291
|
+
abcdGrp.children.push(obj);
|
|
233
292
|
}
|
|
234
293
|
else if (cha === 'e' || cha === 'f' || cha === 'g' || cha === 'h') {
|
|
235
|
-
efghGrp.children.push(
|
|
294
|
+
efghGrp.children.push(obj);
|
|
236
295
|
}
|
|
237
296
|
else if (cha === 'i' || cha === 'j' || cha === 'k' || cha === 'l') {
|
|
238
|
-
ijklGrp.children.push(
|
|
297
|
+
ijklGrp.children.push(obj);
|
|
239
298
|
}
|
|
240
299
|
else if (cha === 'm' || cha === 'n' || cha === 'o' || cha === 'p') {
|
|
241
|
-
mnopGrp.children.push(
|
|
300
|
+
mnopGrp.children.push(obj);
|
|
242
301
|
}
|
|
243
302
|
else if (cha === 'q' || cha === 'r' || cha === 's' || cha === 't') {
|
|
244
|
-
qrstGrp.children.push(
|
|
303
|
+
qrstGrp.children.push(obj);
|
|
245
304
|
}
|
|
246
305
|
else if (cha === 'u' || cha === 'v' || cha === 'w' || cha === 'x') {
|
|
247
|
-
uvwxGrp.children.push(
|
|
306
|
+
uvwxGrp.children.push(obj);
|
|
248
307
|
}
|
|
249
308
|
else if (cha === 'y' || cha === 'z') {
|
|
250
|
-
yzGrp.children.push(
|
|
309
|
+
yzGrp.children.push(obj);
|
|
251
310
|
}
|
|
252
311
|
else if (cha === '0' ||
|
|
253
312
|
cha === '1' ||
|
|
@@ -259,103 +318,93 @@ class NetworkVisualizerHelper {
|
|
|
259
318
|
cha === '7' ||
|
|
260
319
|
cha === '8' ||
|
|
261
320
|
cha === '9') {
|
|
262
|
-
oneTo9Grp.children.push(
|
|
321
|
+
oneTo9Grp.children.push(obj);
|
|
263
322
|
}
|
|
264
323
|
else {
|
|
265
|
-
specialCharGrp.children.push(
|
|
324
|
+
specialCharGrp.children.push(obj);
|
|
266
325
|
}
|
|
267
|
-
} // end
|
|
268
|
-
if (
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
326
|
+
} // end main for loop
|
|
327
|
+
if (name === 'Service') {
|
|
328
|
+
if (protocolRDPGrp.children.length > 0) {
|
|
329
|
+
protocolRDPGrp.children.sort(function (a, b) {
|
|
330
|
+
return a.name.localeCompare(b.name);
|
|
331
|
+
});
|
|
332
|
+
protocolRDPGrp.name = protocolRDPGrp.name + '(' + protocolRDPGrp.children.length + ')';
|
|
333
|
+
children.children.push(protocolRDPGrp);
|
|
334
|
+
}
|
|
335
|
+
if (protocolHTTPSGrp.children.length > 0) {
|
|
336
|
+
protocolHTTPSGrp.children.sort(function (a, b) {
|
|
337
|
+
return a.name.localeCompare(b.name);
|
|
338
|
+
});
|
|
339
|
+
protocolHTTPSGrp.name = protocolHTTPSGrp.name + '(' + protocolHTTPSGrp.children.length + ')';
|
|
340
|
+
children.children.push(protocolHTTPSGrp);
|
|
341
|
+
}
|
|
342
|
+
if (protocolHTTPGrp.children.length > 0) {
|
|
343
|
+
protocolHTTPGrp.children.sort(function (a, b) {
|
|
344
|
+
return a.name.localeCompare(b.name);
|
|
345
|
+
});
|
|
346
|
+
protocolHTTPGrp.name = protocolHTTPGrp.name + '(' + protocolHTTPGrp.children.length + ')';
|
|
347
|
+
children.children.push(protocolHTTPGrp);
|
|
348
|
+
}
|
|
349
|
+
if (protocolFTPGrp.children.length > 0) {
|
|
350
|
+
protocolFTPGrp.children.sort(function (a, b) {
|
|
351
|
+
return a.name.localeCompare(b.name);
|
|
352
|
+
});
|
|
353
|
+
protocolFTPGrp.name = protocolFTPGrp.name + '(' + protocolFTPGrp.children.length + ')';
|
|
354
|
+
children.children.push(protocolFTPGrp);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
if (name === 'Identitie' && unregisteredGrp.children.length > 0) {
|
|
272
358
|
unregisteredGrp.name = unregisteredGrp.name + '(' + unregisteredGrp.children.length + ')';
|
|
273
|
-
|
|
359
|
+
children.children.push(unregisteredGrp);
|
|
360
|
+
subGrouping(name, unregisteredGrp);
|
|
361
|
+
}
|
|
362
|
+
if (specialCharGrp.children.length > 0) {
|
|
363
|
+
specialCharGrp.name = specialCharGrp.name + '(' + specialCharGrp.children.length + ')';
|
|
364
|
+
children.children.push(specialCharGrp);
|
|
365
|
+
subGrouping(name, specialCharGrp);
|
|
274
366
|
}
|
|
275
367
|
if (abcdGrp.children.length > 0) {
|
|
276
|
-
abcdGrp.
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
abcdGrp.name = abcdGrp.name + ' (' + abcdGrp.children.length + ')';
|
|
280
|
-
identitiesChildren.children.push(abcdGrp);
|
|
368
|
+
abcdGrp.name = abcdGrp.name + '(' + abcdGrp.children.length + ')';
|
|
369
|
+
children.children.push(abcdGrp);
|
|
370
|
+
subGrouping(name, abcdGrp);
|
|
281
371
|
}
|
|
282
372
|
if (efghGrp.children.length > 0) {
|
|
283
|
-
efghGrp.
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
efghGrp.name = efghGrp.name + ' (' + efghGrp.children.length + ')';
|
|
287
|
-
identitiesChildren.children.push(efghGrp);
|
|
373
|
+
efghGrp.name = efghGrp.name + '(' + efghGrp.children.length + ')';
|
|
374
|
+
children.children.push(efghGrp);
|
|
375
|
+
subGrouping(name, efghGrp);
|
|
288
376
|
}
|
|
289
377
|
if (ijklGrp.children.length > 0) {
|
|
290
|
-
ijklGrp.
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
ijklGrp.name = ijklGrp.name + ' (' + ijklGrp.children.length + ')';
|
|
294
|
-
identitiesChildren.children.push(ijklGrp);
|
|
378
|
+
ijklGrp.name = ijklGrp.name + '(' + ijklGrp.children.length + ')';
|
|
379
|
+
children.children.push(ijklGrp);
|
|
380
|
+
subGrouping(name, ijklGrp);
|
|
295
381
|
}
|
|
296
382
|
if (mnopGrp.children.length > 0) {
|
|
297
|
-
mnopGrp.
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
mnopGrp.name = mnopGrp.name + ' (' + mnopGrp.children.length + ')';
|
|
301
|
-
identitiesChildren.children.push(mnopGrp);
|
|
383
|
+
mnopGrp.name = mnopGrp.name + '(' + mnopGrp.children.length + ')';
|
|
384
|
+
children.children.push(mnopGrp);
|
|
385
|
+
subGrouping(name, mnopGrp);
|
|
302
386
|
}
|
|
303
387
|
if (qrstGrp.children.length > 0) {
|
|
304
|
-
qrstGrp.
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
qrstGrp.name = qrstGrp.name + ' (' + qrstGrp.children.length + ')';
|
|
308
|
-
identitiesChildren.children.push(qrstGrp);
|
|
388
|
+
qrstGrp.name = qrstGrp.name + '(' + qrstGrp.children.length + ')';
|
|
389
|
+
children.children.push(qrstGrp);
|
|
390
|
+
subGrouping(name, qrstGrp);
|
|
309
391
|
}
|
|
310
392
|
if (uvwxGrp.children.length > 0) {
|
|
311
|
-
uvwxGrp.
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
uvwxGrp.name = uvwxGrp.name + ' (' + uvwxGrp.children.length + ')';
|
|
315
|
-
identitiesChildren.children.push(uvwxGrp);
|
|
393
|
+
uvwxGrp.name = uvwxGrp.name + '(' + uvwxGrp.children.length + ')';
|
|
394
|
+
children.children.push(uvwxGrp);
|
|
395
|
+
subGrouping(name, uvwxGrp);
|
|
316
396
|
}
|
|
317
397
|
if (yzGrp.children.length > 0) {
|
|
318
|
-
yzGrp.
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
yzGrp.name = yzGrp.name + ' (' + yzGrp.children.length + ')';
|
|
322
|
-
identitiesChildren.children.push(yzGrp);
|
|
323
|
-
}
|
|
324
|
-
if (specialCharGrp.children.length > 0) {
|
|
325
|
-
specialCharGrp.name = specialCharGrp.name + ' (' + specialCharGrp.children.length + ')';
|
|
326
|
-
identitiesChildren.children.push(specialCharGrp);
|
|
327
|
-
}
|
|
328
|
-
if (oneTo9Grp.children.length > 0 && oneTo9Grp.children.length <= 100) {
|
|
329
|
-
oneTo9Grp.children.sort(function (a, b) {
|
|
330
|
-
return a.name.localeCompare(b.name);
|
|
331
|
-
});
|
|
332
|
-
oneTo9Grp.name = oneTo9Grp.name + ' (' + oneTo9Grp.children.length + ')';
|
|
333
|
-
identitiesChildren.children.push(oneTo9Grp);
|
|
398
|
+
yzGrp.name = yzGrp.name + '(' + yzGrp.children.length + ')';
|
|
399
|
+
children.children.push(yzGrp);
|
|
400
|
+
subGrouping(name, yzGrp);
|
|
334
401
|
}
|
|
335
|
-
|
|
336
|
-
oneTo9Grp.
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
for (let i = 0; i < oneTo9Grp.children.length; i++) {
|
|
340
|
-
const lastElement = i + 80 < oneTo9Grp.children.length ? i + 80 : oneTo9Grp.children.length - 1;
|
|
341
|
-
const nameS = 'Identities [' +
|
|
342
|
-
oneTo9Grp.children[i].name.substring(0, 4) +
|
|
343
|
-
'-' +
|
|
344
|
-
oneTo9Grp.children[lastElement].name.substring(0, 4) +
|
|
345
|
-
']';
|
|
346
|
-
const chld = new Group(createId(), nameS, 'Identity name starts with ' +
|
|
347
|
-
oneTo9Grp.children[i].name.substring(0, 4) +
|
|
348
|
-
' To ' +
|
|
349
|
-
oneTo9Grp.children[lastElement].name.substring(0, 4));
|
|
350
|
-
for (let j = i; j < lastElement; j++) {
|
|
351
|
-
chld.children.push(oneTo9Grp.children[j]);
|
|
352
|
-
}
|
|
353
|
-
// chld.name = chld.name + ' (' + chld.children.length + ')';
|
|
354
|
-
identitiesChildren.children.push(chld);
|
|
355
|
-
i = i + 80;
|
|
356
|
-
}
|
|
402
|
+
if (oneTo9Grp.children.length > 0) {
|
|
403
|
+
oneTo9Grp.name = oneTo9Grp.name + '(' + oneTo9Grp.children.length + ')';
|
|
404
|
+
children.children.push(oneTo9Grp);
|
|
405
|
+
subGrouping(name, oneTo9Grp);
|
|
357
406
|
}
|
|
358
|
-
return
|
|
407
|
+
return children;
|
|
359
408
|
}
|
|
360
409
|
function processServicePoliciesForTree(servicePolicyChildren, servicePolicies, nx, ny) {
|
|
361
410
|
if (args[0] === false)
|
|
@@ -378,167 +427,12 @@ class NetworkVisualizerHelper {
|
|
|
378
427
|
});
|
|
379
428
|
bindGrp.name = bindGrp.name + '(' + bindGrp.children.length + ')';
|
|
380
429
|
servicePolicyChildren.children.push(bindGrp);
|
|
430
|
+
subGrouping('Bind-Policie', bindGrp);
|
|
381
431
|
dialGrp.name = dialGrp.name + '(' + dialGrp.children.length + ')';
|
|
382
432
|
servicePolicyChildren.children.push(dialGrp);
|
|
433
|
+
subGrouping('Dial-Policie', dialGrp);
|
|
383
434
|
return servicePolicyChildren;
|
|
384
435
|
}
|
|
385
|
-
function serviceGrouping(servicesChildren, servicestree) {
|
|
386
|
-
const protocolRDPGrp = new Group(createId(), 'Services [protocol-RDP]', 'Services created for RDP protocol');
|
|
387
|
-
const protocolHTTPSGrp = new Group(createId(), 'Services [protocol-HTTPS]', 'Service created for HTTPS protocol');
|
|
388
|
-
const protocolHTTPGrp = new Group(createId(), 'Services [protocol-HTTP]', 'Service created for HTTP protocol');
|
|
389
|
-
const protocolFTPGrp = new Group(createId(), 'Services [protocol-FTP]', 'Service created for FTP protocol');
|
|
390
|
-
const abcdGrp = new Group(createId(), 'Services [A-D]', 'Service name starts with A to D');
|
|
391
|
-
const efghGrp = new Group(createId(), 'Services [E-H]', 'Service name starts with E to H');
|
|
392
|
-
const ijklGrp = new Group(createId(), 'Services [I-L]', 'Service name starts with I to L');
|
|
393
|
-
const mnopGrp = new Group(createId(), 'Services [M-P]', 'Service name starts with M to P');
|
|
394
|
-
const qrstGrp = new Group(createId(), 'Services [Q-T]', 'Service name starts with Q to T');
|
|
395
|
-
const uvwxGrp = new Group(createId(), 'Services [U-X]', 'Service name starts with U to X');
|
|
396
|
-
const yzGrp = new Group(createId(), 'Services [Y-Z]', 'Service name starts with Y and Z');
|
|
397
|
-
const oneTo9Grp = new Group(createId(), 'Services [1-9]', 'Service name starts with 0 to 9');
|
|
398
|
-
const specialCharGrp = new Group(createId(), 'Services [others]', 'Service name starts with special characters');
|
|
399
|
-
for (let i = 0; i < servicestree.length; i++) {
|
|
400
|
-
const serviceobj = servicestree[i];
|
|
401
|
-
const cha = serviceobj.name.charAt(0).toLowerCase();
|
|
402
|
-
if (serviceobj.protocol === 'rdp') {
|
|
403
|
-
protocolRDPGrp.children.push(serviceobj);
|
|
404
|
-
}
|
|
405
|
-
else if (serviceobj.protocol === 'https') {
|
|
406
|
-
protocolHTTPSGrp.children.push(serviceobj);
|
|
407
|
-
}
|
|
408
|
-
else if (serviceobj.protocol === 'http') {
|
|
409
|
-
protocolHTTPGrp.children.push(serviceobj);
|
|
410
|
-
}
|
|
411
|
-
else if (serviceobj.protocol === 'ftp') {
|
|
412
|
-
protocolFTPGrp.children.push(serviceobj);
|
|
413
|
-
}
|
|
414
|
-
else if (cha === 'a' || cha === 'b' || cha === 'c' || cha === 'd') {
|
|
415
|
-
abcdGrp.children.push(serviceobj);
|
|
416
|
-
}
|
|
417
|
-
else if (cha === 'e' || cha === 'f' || cha === 'g' || cha === 'h') {
|
|
418
|
-
efghGrp.children.push(serviceobj);
|
|
419
|
-
}
|
|
420
|
-
else if (cha === 'i' || cha === 'j' || cha === 'k' || cha === 'l') {
|
|
421
|
-
ijklGrp.children.push(serviceobj);
|
|
422
|
-
}
|
|
423
|
-
else if (cha === 'm' || cha === 'n' || cha === 'o' || cha === 'p') {
|
|
424
|
-
mnopGrp.children.push(serviceobj);
|
|
425
|
-
}
|
|
426
|
-
else if (cha === 'q' || cha === 'r' || cha === 's' || cha === 't') {
|
|
427
|
-
qrstGrp.children.push(serviceobj);
|
|
428
|
-
}
|
|
429
|
-
else if (cha === 'u' || cha === 'v' || cha === 'w' || cha === 'x') {
|
|
430
|
-
uvwxGrp.children.push(serviceobj);
|
|
431
|
-
}
|
|
432
|
-
else if (cha === 'y' || cha === 'z') {
|
|
433
|
-
yzGrp.children.push(serviceobj);
|
|
434
|
-
}
|
|
435
|
-
else if (cha === '0' ||
|
|
436
|
-
cha === '1' ||
|
|
437
|
-
cha === '2' ||
|
|
438
|
-
cha === '3' ||
|
|
439
|
-
cha === '4' ||
|
|
440
|
-
cha === '5' ||
|
|
441
|
-
cha === '6' ||
|
|
442
|
-
cha === '7' ||
|
|
443
|
-
cha === '8' ||
|
|
444
|
-
cha === '9') {
|
|
445
|
-
oneTo9Grp.children.push(serviceobj);
|
|
446
|
-
}
|
|
447
|
-
else {
|
|
448
|
-
specialCharGrp.children.push(serviceobj);
|
|
449
|
-
}
|
|
450
|
-
} // end main for loop
|
|
451
|
-
if (protocolRDPGrp.children.length > 0) {
|
|
452
|
-
protocolRDPGrp.children.sort(function (a, b) {
|
|
453
|
-
return a.name.localeCompare(b.name);
|
|
454
|
-
});
|
|
455
|
-
protocolRDPGrp.name = protocolRDPGrp.name + '(' + protocolRDPGrp.children.length + ')';
|
|
456
|
-
servicesChildren.children.push(protocolRDPGrp);
|
|
457
|
-
}
|
|
458
|
-
if (specialCharGrp.children.length > 0) {
|
|
459
|
-
specialCharGrp.name = specialCharGrp.name + '(' + specialCharGrp.children.length + ')';
|
|
460
|
-
servicesChildren.children.push(specialCharGrp);
|
|
461
|
-
}
|
|
462
|
-
if (protocolHTTPSGrp.children.length > 0) {
|
|
463
|
-
protocolHTTPSGrp.children.sort(function (a, b) {
|
|
464
|
-
return a.name.localeCompare(b.name);
|
|
465
|
-
});
|
|
466
|
-
protocolHTTPSGrp.name = protocolHTTPSGrp.name + '(' + protocolHTTPSGrp.children.length + ')';
|
|
467
|
-
servicesChildren.children.push(protocolHTTPSGrp);
|
|
468
|
-
}
|
|
469
|
-
if (protocolHTTPGrp.children.length > 0) {
|
|
470
|
-
protocolHTTPGrp.children.sort(function (a, b) {
|
|
471
|
-
return a.name.localeCompare(b.name);
|
|
472
|
-
});
|
|
473
|
-
protocolHTTPGrp.name = protocolHTTPGrp.name + '(' + protocolHTTPGrp.children.length + ')';
|
|
474
|
-
servicesChildren.children.push(protocolHTTPGrp);
|
|
475
|
-
}
|
|
476
|
-
if (protocolFTPGrp.children.length > 0) {
|
|
477
|
-
protocolFTPGrp.children.sort(function (a, b) {
|
|
478
|
-
return a.name.localeCompare(b.name);
|
|
479
|
-
});
|
|
480
|
-
protocolFTPGrp.name = protocolFTPGrp.name + '(' + protocolFTPGrp.children.length + ')';
|
|
481
|
-
servicesChildren.children.push(protocolFTPGrp);
|
|
482
|
-
}
|
|
483
|
-
if (abcdGrp.children.length > 0) {
|
|
484
|
-
abcdGrp.children.sort(function (a, b) {
|
|
485
|
-
return a.name.localeCompare(b.name);
|
|
486
|
-
});
|
|
487
|
-
abcdGrp.name = abcdGrp.name + '(' + abcdGrp.children.length + ')';
|
|
488
|
-
servicesChildren.children.push(abcdGrp);
|
|
489
|
-
}
|
|
490
|
-
if (efghGrp.children.length > 0) {
|
|
491
|
-
efghGrp.children.sort(function (a, b) {
|
|
492
|
-
return a.name.localeCompare(b.name);
|
|
493
|
-
});
|
|
494
|
-
efghGrp.name = efghGrp.name + '(' + efghGrp.children.length + ')';
|
|
495
|
-
servicesChildren.children.push(efghGrp);
|
|
496
|
-
}
|
|
497
|
-
if (ijklGrp.children.length > 0) {
|
|
498
|
-
ijklGrp.children.sort(function (a, b) {
|
|
499
|
-
return a.name.localeCompare(b.name);
|
|
500
|
-
});
|
|
501
|
-
ijklGrp.name = ijklGrp.name + '(' + ijklGrp.children.length + ')';
|
|
502
|
-
servicesChildren.children.push(ijklGrp);
|
|
503
|
-
}
|
|
504
|
-
if (mnopGrp.children.length > 0) {
|
|
505
|
-
mnopGrp.children.sort(function (a, b) {
|
|
506
|
-
return a.name.localeCompare(b.name);
|
|
507
|
-
});
|
|
508
|
-
mnopGrp.name = mnopGrp.name + '(' + mnopGrp.children.length + ')';
|
|
509
|
-
servicesChildren.children.push(mnopGrp);
|
|
510
|
-
}
|
|
511
|
-
if (qrstGrp.children.length > 0) {
|
|
512
|
-
qrstGrp.children.sort(function (a, b) {
|
|
513
|
-
return a.name.localeCompare(b.name);
|
|
514
|
-
});
|
|
515
|
-
qrstGrp.name = qrstGrp.name + '(' + qrstGrp.children.length + ')';
|
|
516
|
-
servicesChildren.children.push(qrstGrp);
|
|
517
|
-
}
|
|
518
|
-
if (uvwxGrp.children.length > 0) {
|
|
519
|
-
uvwxGrp.children.sort(function (a, b) {
|
|
520
|
-
return a.name.localeCompare(b.name);
|
|
521
|
-
});
|
|
522
|
-
uvwxGrp.name = uvwxGrp.name + '(' + uvwxGrp.children.length + ')';
|
|
523
|
-
servicesChildren.children.push(uvwxGrp);
|
|
524
|
-
}
|
|
525
|
-
if (yzGrp.children.length > 0) {
|
|
526
|
-
yzGrp.children.sort(function (a, b) {
|
|
527
|
-
return a.name.localeCompare(b.name);
|
|
528
|
-
});
|
|
529
|
-
yzGrp.name = yzGrp.name + '(' + yzGrp.children.length + ')';
|
|
530
|
-
servicesChildren.children.push(yzGrp);
|
|
531
|
-
}
|
|
532
|
-
if (oneTo9Grp.children.length > 0) {
|
|
533
|
-
oneTo9Grp.children.sort(function (a, b) {
|
|
534
|
-
return a.name.localeCompare(b.name);
|
|
535
|
-
});
|
|
536
|
-
oneTo9Grp.name = oneTo9Grp.name + '(' + oneTo9Grp.children.length + ')';
|
|
537
|
-
servicesChildren.children.push(oneTo9Grp);
|
|
538
|
-
}
|
|
539
|
-
// servicesChildren.name = servicesChildren.name + '(' + servicestree.length + ')';
|
|
540
|
-
return servicesChildren;
|
|
541
|
-
}
|
|
542
436
|
function processServicesForTree(servicesChildren, services, nx, ny) {
|
|
543
437
|
if (args[1] === false)
|
|
544
438
|
return servicesChildren;
|
|
@@ -584,11 +478,12 @@ class NetworkVisualizerHelper {
|
|
|
584
478
|
} // end inner for loop
|
|
585
479
|
servicestree.push(serviceobj);
|
|
586
480
|
} // end for loop
|
|
587
|
-
return
|
|
481
|
+
return grouping('Service', servicesChildren, servicestree);
|
|
588
482
|
} // end of processServicesForTree
|
|
589
483
|
function processEdgeRouterPoliciesForTree(edgeRouterPoliciesChildren, edgeRouterPolicies, nx, ny) {
|
|
590
484
|
if (args[4] === false)
|
|
591
485
|
return edgeRouterPoliciesChildren;
|
|
486
|
+
const policies_Array = [];
|
|
592
487
|
for (let i = nx; i < ny; i++) {
|
|
593
488
|
const erpolicy = new ERPolicy();
|
|
594
489
|
erpolicy.id = createId();
|
|
@@ -598,9 +493,9 @@ class NetworkVisualizerHelper {
|
|
|
598
493
|
erpolicy.rootNode = 'Yes';
|
|
599
494
|
erpolicy.isSystem = edgeRouterPolicies[i].isSystem;
|
|
600
495
|
erpolicy.semantic = edgeRouterPolicies[i].semantic;
|
|
601
|
-
|
|
496
|
+
policies_Array.push(erpolicy);
|
|
602
497
|
} // end of main for loop
|
|
603
|
-
return edgeRouterPoliciesChildren;
|
|
498
|
+
return grouping('RouterPolicies', edgeRouterPoliciesChildren, policies_Array);
|
|
604
499
|
} // end
|
|
605
500
|
function processServiceEdgeRouterPoliciesForTree(serviceEdgeRouterPoliciesChildren, serviceEdgeRouterPolicies, nx, ny) {
|
|
606
501
|
if (args[5] === false)
|
|
@@ -616,9 +511,10 @@ class NetworkVisualizerHelper {
|
|
|
616
511
|
} // end of main for loop
|
|
617
512
|
return serviceEdgeRouterPoliciesChildren;
|
|
618
513
|
} // end
|
|
619
|
-
function
|
|
514
|
+
function processEdgeRoutersForTree(routersChildren, edgerouters, nx, ny) {
|
|
620
515
|
if (args[3] === false)
|
|
621
|
-
return
|
|
516
|
+
return routersChildren;
|
|
517
|
+
const er_objects = [];
|
|
622
518
|
for (let i = nx; i < ny; i++) {
|
|
623
519
|
const erOb = new ERouter();
|
|
624
520
|
erOb.id = createId();
|
|
@@ -636,10 +532,11 @@ class NetworkVisualizerHelper {
|
|
|
636
532
|
erOb.syncStatus = er.syncStatus ? er.syncStatus : 'No';
|
|
637
533
|
erOb.createdAt = er.createdAt;
|
|
638
534
|
erOb.updatedAt = er.updatedAt;
|
|
639
|
-
|
|
535
|
+
er_objects.push(erOb);
|
|
640
536
|
}
|
|
641
537
|
} // end main for loop
|
|
642
|
-
return
|
|
538
|
+
// return routersChildren;
|
|
539
|
+
return grouping('Router', routersChildren, er_objects);
|
|
643
540
|
}
|
|
644
541
|
// createId() generates node Id 1,2,3,4,5 for the following five nodes. this id is used to search capability.
|
|
645
542
|
let servicPoliciesChildren = new Children();
|
|
@@ -667,7 +564,7 @@ class NetworkVisualizerHelper {
|
|
|
667
564
|
serviceEdgeRouterPolicesChildren.firstChild = 'Yes';
|
|
668
565
|
serviceEdgeRouterPolicesChildren.name = 'Service Edge Router Policies(' + service_router_policies_totalCount + ')';
|
|
669
566
|
servicesChildren = processServicesForTree(servicesChildren, services, 0, services.length);
|
|
670
|
-
edgerouterChildren =
|
|
567
|
+
edgerouterChildren = processEdgeRoutersForTree(edgerouterChildren, edgerouters, 0, edgerouters.length);
|
|
671
568
|
servicPoliciesChildren = processServicePoliciesForTree(servicPoliciesChildren, servicePolicies, 0, servicePolicies.length);
|
|
672
569
|
edgeRouterPoliciesChildren = processEdgeRouterPoliciesForTree(edgeRouterPoliciesChildren, edgeRouterPolicies, 0, edgeRouterPolicies.length);
|
|
673
570
|
identitiesChildren = processIdentitiesForTree(identitiesChildren, identities, 0, identities.length);
|
|
@@ -692,4 +589,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
692
589
|
providedIn: 'root',
|
|
693
590
|
}]
|
|
694
591
|
}] });
|
|
695
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay12aXN1YWxpemVyLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy92aXN1YWxpemVyL25ldHdvcmstdmlzdWFsaXplci9uZXR3b3JrLXZpc3VhbGl6ZXIuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRzNDLE1BQU0sT0FBTyxRQUFRO0lBb0JqQjtRQUNJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxPQUFPO0lBb0JoQjtRQUNJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7Q0FDSjtBQUNELE1BQU0sT0FBTyxNQUFNO0lBUWpCO1FBQ0ksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDN0IsQ0FBQztDQUNGO0FBQ0QsTUFBTSxPQUFPLEtBQUs7SUFPZCxZQUFZLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztRQUNkLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxH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SUFBSSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDekQsUUFBUSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFekIsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQzsrR0FodUJRLHVCQUF1QjttSEFBdkIsdUJBQXVCLGNBRnBCLE1BQU07O1NBRVQsdUJBQXVCOzRGQUF2Qix1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuZXhwb3J0IGNsYXNzIElkZW50aXR5IHtcbiAgICBpZDtcbiAgICB1dWlkO1xuICAgIG5hbWU7XG4gICAgc3RhdHVzO1xuICAgIHR5cGU7XG4gICAgcm9vdE5vZGU7XG4gICAgc2VydmVyRWdyZXNzUHJvdG9jb2w7XG4gICAgc2VydmVyRWdyZXNzSG9zdDtcbiAgICBzZXJ2ZXJFZ3Jlc3NQb3J0O1xuICAgIHBvc3R1cmVDaGVja3M7XG4gICAgZXZlbnRzO1xuICAgIG9zO1xuICAgIHV0aWxpemF0aW9uO1xuICAgIGNoaWxkcmVuO1xuICAgIGNvbnRleHRNZW51O1xuICAgIG9ubGluZTtcbiAgICBvc1ZlcnNpb247XG4gICAgY3JlYXRlZEF0O1xuICAgIHVwZGF0ZWRBdDtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5yb290Tm9kZSA9ICdObyc7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgdGhpcy5jb250ZXh0TWVudSA9ICdZZXMnO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNlcnZpY2Uge1xuICAgIGlkO1xuICAgIHV1aWQ7XG4gICAgbmFtZTtcbiAgICBpbnRlcmNlcHRfaG9zdDtcbiAgICBpbnRlcmNlcHRfcG9ydDtcbiAgICBlbmNyeXB0ZWQ7XG4gICAgcm9vdE5vZGU7XG4gICAgc2VydmVyRWdyZXNzSG9zdDtcbiAgICBzZXJ2ZXJFZ3Jlc3NQb3J0O1xuICAgIHN0YXR1cztcbiAgICBwcm90b2NvbDtcbiAgICB0eXBlO1xuICAgIGNoaWxkcmVuO1xuICAgIGF0dHJpYnV0ZXM7XG4gICAgdXRpbGl6YXRpb247XG4gICAgY29udGV4dE1lbnU7XG4gICAgY3JlYXRlZEF0O1xuICAgIHVwZGF0ZWRBdDtcbiAgICBpbnRlcmNlcHQ7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucm9vdE5vZGUgPSAnTm8nO1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgICAgIHRoaXMuY29udGV4dE1lbnUgPSAnWWVzJztcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQ29uZmlnIHtcbiAgdXVpZDtcbiAgaWQ7XG4gIG5hbWU7XG4gIGRhdGE7XG4gIGNoaWxkcmVuO1xuICBjb250ZXh0TWVudTtcbiAgcm9vdE5vZGU7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgICAgdGhpcy5yb290Tm9kZSA9ICdObyc7XG4gICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgICB0aGlzLmNvbnRleHRNZW51ID0gJ1llcyc7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBHcm91cCB7XG4gICAgaWQ7XG4gICAgbmFtZTtcbiAgICB0eXBlO1xuICAgIGdyb3VwO1xuICAgIGNoaWxkcmVuO1xuXG4gICAgY29uc3RydWN0b3IoaWR2LCBzLCBnKSB7XG4gICAgICAgIHRoaXMuaWQgPSBpZHY7XG4gICAgICAgIHRoaXMubmFtZSA9IHM7XG4gICAgICAgIHRoaXMuZ3JvdXAgPSBnO1xuICAgICAgICB0aGlzLnR5cGUgPSAnR3JvdXAnO1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2VydmljZVBvbGljeSB7XG4gICAgaWQ7XG4gICAgdXVpZDtcbiAgICBuYW1lO1xuICAgIHR5cGU7XG4gICAgcm9vdE5vZGU7XG4gICAgY2hpbGRyZW47XG4gICAgY29udGV4dE1lbnU7XG4gICAgY3JlYXRlZEF0O1xuICAgIHVwZGF0ZWRBdDtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnJvb3ROb2RlID0gJ05vJztcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgICAgICB0aGlzLmNvbnRleHRNZW51ID0gJ1llcyc7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXR0cmlidXRlIHtcbiAgICBpZDtcbiAgICBuYW1lO1xuICAgIHR5cGU7XG4gICAgY2hpbGRyZW47XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVSUG9saWN5IHtcbiAgICBpZDtcbiAgICB1dWlkO1xuICAgIG5hbWU7XG4gICAgc3RhdHVzO1xuICAgIHNpemU7XG4gICAgdHlwZTtcbiAgICBzZW1hbnRpYztcbiAgICBpc1N5c3RlbTtcbiAgICByb290Tm9kZTtcbiAgICBjaGlsZHJlbjtcbiAgICBjb250ZXh0TWVudTtcbiAgICBjcmVhdGVkQXQ7XG4gICAgdXBkYXRlZEF0O1xuICAgIGRhdGE7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucm9vdE5vZGUgPSAnTm8nO1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgICAgIHRoaXMuY29udGV4dE1lbnUgPSAnWWVzJztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXJ2aWNlRVJQb2xpY3kge1xuICAgIGlkO1xuICAgIHV1aWQ7XG4gICAgbmFtZTtcbiAgICBzdGF0dXM7XG4gICAgc2l6ZTtcbiAgICB0eXBlO1xuICAgIHJvb3ROb2RlO1xuICAgIGNoaWxkcmVuO1xuICAgIGNvbnRleHRNZW51O1xuICAgIGNyZWF0ZWRBdDtcbiAgICB1cGRhdGVkQXQ7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5yb290Tm9kZSA9ICdObyc7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgdGhpcy5jb250ZXh0TWVudSA9ICdZZXMnO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVSb3V0ZXIge1xuICAgIGlkO1xuICAgIHV1aWQ7XG4gICAgbmFtZTtcbiAgICB2ZXJpZmllZDtcbiAgICBzaXplO1xuICAgIHR5cGU7XG4gICAgcHJvdmlkZXI7XG4gICAgcm9vdE5vZGU7XG4gICAgc2VydmVyRWdyZXNzUHJvdG9jb2w7XG4gICAgc2VydmVyRWdyZXNzSG9zdDtcbiAgICBzZXJ2ZXJFZ3Jlc3NQb3J0O1xuICAgIGNoaWxkcmVuO1xuICAgIHV0aWxpemF0aW9uO1xuICAgIGNvbnRleHRNZW51O1xuICAgIG9ubGluZTtcbiAgICBkaXNhYmxlZDtcbiAgICB2ZXJzaW9uO1xuICAgIHR1bm5lbGVyRW5hYmxlZDtcbiAgICBzeW5jU3RhdHVzO1xuICAgIGNyZWF0ZWRBdDtcbiAgICB1cGRhdGVkQXQ7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5yb290Tm9kZSA9ICdObyc7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgdGhpcy5jb250ZXh0TWVudSA9ICdZZXMnO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENoaWxkcmVuIHtcbiAgICBpZDtcbiAgICBuYW1lO1xuICAgIHN0YXR1cztcbiAgICBzaXplO1xuICAgIHR5cGU7XG4gICAgY2hpbGRyZW47XG4gICAgZGF0YTogQ2hpbGRyZW47XG4gICAgcm9vdE5vZGUgPSAnTm8nO1xuICAgIGZpcnN0Q2hpbGQgPSAnTm8nO1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnR5cGUgPSAnQ2hpbGRyZW4nO1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgfVxufVxuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBOZXR3b3JrVmlzdWFsaXplckhlbHBlciB7XG5cbiAgIHVuaXFJSWQ6YW55ID0wO1xuXG4gY3JlYXRlVW5pcUlkKCkge1xuICAgcmV0dXJuICsrdGhpcy51bmlxSUlkO1xuIH1cbiAgcHVibGljIGNyZWF0ZUVkZ2VSb3V0ZXJOb2RlKGVyLCBpc1Jvb3ROb2RlID0gJ1llcycpIHtcbiAgICAgIGNvbnN0IGVyT2IgPSBuZXcgRVJvdXRlcigpO1xuICAgICAgLy8gZXJPYi5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgICBlck9iLnV1aWQgPSBlci5pZDtcbiAgICAgICAgIGVyT2IubmFtZSA9IGVyLm5hbWU7XG4gICAgICAgICBlck9iLnZlcmlmaWVkID0gZXIuaXNWZXJpZmllZD8gJ1llcyc6ICdObyc7XG4gICAgICAgICAvL2VyT2IudmVyc2lvbiA9IGVyLnByb2R1Y3RWZXJzaW9uO1xuICAgICAgICAgZXJPYi5vbmxpbmUgPSBlci5pc09ubGluZT8gJ1llcyc6ICdObyc7XG4gICAgICAgICBlck9iLmRpc2FibGVkID0gZXIuZGlzYWJsZWQ/ICdZZXMnOiAnTm8nO1xuICAgICAgICAgZXJPYi50eXBlID0gJ0VkZ2UgUm91dGVyJztcbiAgICAgICAgIGVyT2Iucm9vdE5vZGUgPSBpc1Jvb3ROb2RlO1xuICAgICAgICAgZXJPYi50dW5uZWxlckVuYWJsZWQgPSBlci50dW5uZWxlckVuYWJsZWQ/IGVyLnR1bm5lbGVyRW5hYmxlZDogJ05vJztcbiAgICAgICAgIGVyT2Iuc3luY1N0YXR1cyA9IGVyLnN5bmNTdGF0dXM/IGVyLnN5bmNTdGF0dXM6J05vJztcbiAgICAgICAgIGVyT2IuY3JlYXRlZEF0ID0gZXIuY3JlYXRlZEF0O1xuICAgICAgICAgZXJPYi51cGRhdGVkQXQgPSBlci51cGRhdGVkQXQ7XG4gICByZXR1cm4gZXJPYjtcbiAgfVxuICBwdWJsaWMgY3JlYXRlU2VydmljZUVkZ2VSb3V0ZXJQb2xpY3lOb2RlKHJhd09iaiwgaXNSb290Tm9kZSA9ICdZZXMnKSB7XG4gICAgIGNvbnN0IHNlcnZpY2VlcnBvbGljeSA9IG5ldyBTZXJ2aWNlRVJQb2xpY3koKTtcbiAgICAgLy8gc2VydmljZWVycG9saWN5LmlkID0gY3JlYXRlSWQoKTtcbiAgICAgc2VydmljZWVycG9saWN5LnV1aWQgPSByYXdPYmouaWQ7XG4gICAgIHNlcnZpY2VlcnBvbGljeS5uYW1lID0gcmF3T2JqLm5hbWU7XG4gICAgIHNlcnZpY2VlcnBvbGljeS50eXBlID0gJ1NlcnZpY2UgUm91dGVyIFBvbGljeSc7XG4gICAgIHNlcnZpY2VlcnBvbGljeS5yb290Tm9kZSA9IGlzUm9vdE5vZGU7XG4gICAgcmV0dXJuIHNlcnZpY2VlcnBvbGljeTtcbiAgfVxuICBwdWJsaWMgY3JlYXRlRWRnZVJvdXRlclBvbGljeU5vZGUocmF3T2JqLCBpc1Jvb3ROb2RlID0gJ1llcycpIHtcbiAgICBjb25zdCBlcnBvbGljeSA9IG5ldyBFUlBvbGljeSgpO1xuICAgICAvLyBlcnBvbGljeS5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICBlcnBvbGljeS51dWlkID0gcmF3T2JqLmlkO1xuICAgICAgZXJwb2xpY3kubmFtZSA9IHJhd09iai5uYW1lO1xuICAgICAgZXJwb2xpY3kudHlwZSA9ICdSb3V0ZXIgUG9saWN5JztcbiAgICAgIGVycG9saWN5LnJvb3ROb2RlID0gaXNSb290Tm9kZTtcbiAgICAgIGVycG9saWN5LmlzU3lzdGVtID0gcmF3T2JqLmlzU3lzdGVtO1xuICAgICAgZXJwb2xpY3kuc2VtYW50aWMgPSByYXdPYmouc2VtYW50aWM7XG4gICByZXR1cm4gZXJwb2xpY3k7XG4gIH1cbiAgcHVibGljIGNyZWF0ZVNlcnZpY2VQb2xpY3lOb2RlKHJhd09iaiwgaXNSb290Tm9kZSA9ICdZZXMnKSB7XG4gICAgY29uc3QgYmluZEdycCA9IG5ldyBHcm91cCg0MzQyMywgJ0JpbmQtUG9saWNpZXMnLCAnQmluZCBTZXJ2aWNlIFBvbGljeScpO1xuICAgIGNvbnN0IGRpYWxHcnAgPSBuZXcgR3JvdXAoNDM1NDUsICdEaWFsLVBvbGljaWVzJywgJ0RpYWwgU2VydmljZSBQb2xpY3knKTtcblxuICAgIGNvbnN0IHNwb2xpY3k6YW55ID0gbmV3IFNlcnZpY2VQb2xpY3koKTtcbiAgICAgICAvLyBzcG9saWN5LmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICBzcG9saWN5LmlkID0gODc5NTY7XG4gICAgICAgIHNwb2xpY3kudXVpZCA9IHJhd09iai5pZDtcbiAgICAgICAgc3BvbGljeS5uYW1lID0gcmF3T2JqLm5hbWU7XG4gICAgICAgIHNwb2xpY3kudHlwZSA9ICdTZXJ2aWNlIFBvbGljeSc7XG4gICAgICAgIHNwb2xpY3kucm9vdE5vZGUgPSBpc1Jvb3ROb2RlO1xuICAgICAgICBzcG9saWN5LmNsaWNrUHJvY2VzcyA9IFwiTm90IFlldFwiO1xuICAgICAgaWYocmF3T2JqLnR5cGU9PT0nQmluZCcpIHtcbiAgICAgICAgYmluZEdycC5jaGlsZHJlbi5wdXNoKHNwb2xpY3kpO1xuICAgICAgICByZXR1cm4gYmluZEdycDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpYWxHcnAuY2hpbGRyZW4ucHVzaChzcG9saWN5KTtcbiAgICAgICAgcmV0dXJuIGRpYWxHcnA7XG4gICAgICB9XG4gIH1cbiAgcHVibGljIGNyZWF0ZUlkZW50aXR5Tm9kZShyYXdPYmosIGlzUm9vdE5vZGUgPSAnWWVzJykge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gbmV3IElkZW50aXR5KCk7XG4gICAgICAgICAgICBlbmRwb2ludC5yb290Tm9kZSA9IGlzUm9vdE5vZGU7XG4gICAgICAgICAgIC8vIGVuZHBvaW50LmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgICAgIGVuZHBvaW50LmlkID0gNTQzMjtcbiAgICAgICAgICAgIGVuZHBvaW50LnV1aWQgPSByYXdPYmouaWQ7XG4gICAgICAgICAgICBlbmRwb2ludC5uYW1lID0gcmF3T2JqLm5hbWU7XG4gICAgICAgICAgICBlbmRwb2ludC5vbmxpbmUgPSByYXdPYmouaGFzQXBpU2Vzc2lvbiA9PT0gdHJ1ZSA/ICdZZXMnIDogJ05vJztcbiAgICAgICAgICAgIGVuZHBvaW50LnR5cGUgPSAnSWRlbnRpdHknO1xuICAgICAgICAgICAgZW5kcG9pbnQuY3JlYXRlZEF0ID0gcmF3T2JqLmNyZWF0ZWRBdDtcbiAgICAgICAgICAgIGVuZHBvaW50LnVwZGF0ZWRBdCA9IHJhd09iai51cGRhdGVkQXQ7XG4gICAgICAgICAgICBlbmRwb2ludC5zdGF0dXMgPSByYXdPYmouc2RrSW5mbyAhPT0gbnVsbCA/ICdSZWdpc3RlcmVkJyA6ICdOb3QgUmVnaXN0ZXJlZCc7XG4gICAgICAgICAgICAgIGlmIChyYXdPYmouc2RrSW5mbykge1xuICAgICAgICAgICAgICAgICAgZW5kcG9pbnQub3MgPSByYXdPYmouc2RrSW5mby50eXBlPyByYXdPYmouc2RrSW5mby50eXBlOiByYXdPYmouc2RrSW5mby5hcHBJZDtcbiAgICAgICAgICAgICAgICAgIGVuZHBvaW50Lm9zVmVyc2lvbiA9IHJhd09iai5zZGtJbmZvLnZlcnNpb247XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHJhd09iai5hdXRoUG9saWN5ICYmIHJhd09iai5hdXRoUG9saWN5Lm5hbWUuaW5jbHVkZXMoXCJCcm93WmVyXCIpKSB7XG4gICAgICAgICAgICAgICAgIGVuZHBvaW50LnR5cGUgPSAnQnJvd1plciBJZGVudGl0eSc7XG4gICAgICAgICAgICAgIH1cbiAgICByZXR1cm4gICBlbmRwb2ludDtcbiAgfVxuICBwdWJsaWMgY3JlYXRlU2VydmljZU5vZGUocmF3T2JqLCBpc1Jvb3ROb2RlID0gJ1llcycpIHtcbiAgICAgIGNvbnN0IHNlcnZpY2VvYmogPSBuZXcgU2VydmljZSgpO1xuICAgICAgIC8vIHNlcnZpY2VvYmouaWQgPSBjcmVhdGVJZCgpO1xuICAgICAgICBzZXJ2aWNlb2JqLm5hbWUgPSByYXdPYmoubmFtZTtcbiAgICAgICAgc2VydmljZW9iai51dWlkID0gcmF3T2JqLmlkO1xuICAgICAgICBzZXJ2aWNlb2JqLnR5cGUgPSAnU2VydmljZSc7XG4gICAgICAgIHNlcnZpY2VvYmoucm9vdE5vZGUgPSBpc1Jvb3ROb2RlO1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzd2l0aE5hbWUgPSBbXTtcbiAgICAgICAvLyAgIGF0dHJpYnV0ZXN3aXRoTmFtZS5wdXNoKCdAJyArIHJhd09iai5uYW1lKTtcbiAgICAgICAgcmF3T2JqICYmIHJhd09iai5yb2xlQXR0cmlidXRlcyAmJiByYXdPYmoucm9sZUF0dHJpYnV0ZXMuZmluZCgoc3JhdHRyKSA9PiB7XG4gICAgICAgICAgIGF0dHJpYnV0ZXN3aXRoTmFtZS5wdXNoKHNyYXR0cik7XG4gICAgICAgIH0pO1xuICAgIHJldHVybiBzZXJ2aWNlb2JqO1xuICB9XG5cbiAgICBwdWJsaWMgZ2V0UmVzb3VyY2VUcmVlT2JqKFxuICAgICAgICBuZXR3b3JrTmFtZSxcbiAgICAgICAgbmV0d29ya1N0YXR1cyxcbiAgICAgICAgc2VydmljZXMsXG4gICAgICAgIGlkZW50aXRpZXMsXG4gICAgICAgIHNlcnZpY2VQb2xpY2llcyxcbiAgICAgICAgZWRnZXJvdXRlcnMsXG4gICAgICAgIGVkZ2VSb3V0ZXJQb2xpY2llcyxcbiAgICAgICAgc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llcyxcbiAgICAgICAgLy8gbmV0d29ya1Byb2R1Y3RWZXJzaW9uLFxuICAgICAgICBzZXJ2aWNlc190b3RhbENvdW50LCBpZGVudGl0aWVzX3RvdGFsQ291bnQsIGVkZ2Vyb3V0ZXJzX3RvdGFsQ291bnQsXG4gICAgICAgIHNlcnZpY2VfcG9saWNpZXNfdG90YWxDb3VudCwgZWRnZV9yb3V0ZXJfcG9saWNpZXNfdG90YWxDb3VudCxcbiAgICAgICAgc2VydmljZV9yb3V0ZXJfcG9saWNpZXNfdG90YWxDb3VudCxcbiAgICAgICAgdW5pcUlkLFxuICAgICAgICBsb2dnZXIsXG4gICAgICAgIC4uLmFyZ3M6IGFueVxuICAgICkge1xuICAgICAgIHRoaXMudW5pcUlJZCA9IHVuaXFJZDtcblxuICAgICAgICBmdW5jdGlvbiBjcmVhdGVJZCgpIHtcbiAgICAgICAgICAgICsrdW5pcUlkO1xuICAgICAgICAgIC8vICArK3RoaXMudW5pcUlJZDtcbiAgICAgICAgICAgIHJldHVybiB1bmlxSWQ7XG4gICAgICAgIH1cblxuICAgICAgICBjbGFzcyBSb290SnNvbiB7XG4gICAgICAgICAgICBpZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgICAgICBuYW1lO1xuICAgICAgICAgICAgbGFzdElkID0gMDtcbiAgICAgICAgICAgIGNoaWxkcmVuID0gW107XG4gICAgICAgICAgICBjb250ZXh0TWVudSA9ICdZZXMnO1xuICAgICAgICAgICAgdHlwZSA9ICdOZXR3b3JrJztcbiAgICAgICAgICAgIHJvb3ROb2RlID0gJ05vJztcbiAgICAgICAgICAgLy8gdmVyc2lvbiA9IG5ldHdvcmtQcm9kdWN0VmVyc2lvbjtcbiAgICAgICAgICAgIHN0YXR1cztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJvb3RKc29uID0gbmV3IFJvb3RKc29uKCk7XG4gICAgICAgIHJvb3RKc29uLm5hbWUgPSAnTmV0d29yayc7XG4gICAgICAgIHJvb3RKc29uLnN0YXR1cyA9ICdQcm92aXNpb25lZCc7XG4gICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NJZGVudGl0aWVzRm9yVHJlZShcbiAgICAgICAgICAgIGlkZW50aXRpZXNDaGlsZHJlbixcbiAgICAgICAgICAgIGlkZW50aXRpZXMsXG4gICAgICAgICAgICBueCxcbiAgICAgICAgICAgIG55XG4gICAgICAgICkge1xuICAgICAgICAgIGlmKGFyZ3NbMl09PT1mYWxzZSkgcmV0dXJuIGlkZW50aXRpZXNDaGlsZHJlbjtcbiAgICAgICAgICAgLy8gaWRlbnRpdGllc0NoaWxkcmVuLm5hbWUgPSBpZGVudGl0aWVzQ2hpbGRyZW4ubmFtZSArICcgKCcgKyBueSArICcpJztcbiAgICAgICAgICAgIGNvbnN0IHVucmVnaXN0ZXJlZEdycCA9IG5ldyBHcm91cChcbiAgICAgICAgICAgICAgICBjcmVhdGVJZCgpLFxuICAgICAgICAgICAgICAgICdJZGVudGl0aWVzW1VucmVnaXN0ZXJlZF0nLFxuICAgICAgICAgICAgICAgICdJZGVudGl0aWVzIHRoYXQgYXJlIG5vdCByZWdpc3RlcmVkJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGFiY2RHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgJ0lkZW50aXRpZXMgW0EtRF0nLCAnSWRlbnRpdHkgbmFtZSBzdGFydHMgd2l0aCBBIHRvIEQnKTtcbiAgICAgICAgICAgIGNvbnN0IGVmZ2hHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgJ0lkZW50aXRpZXMgW0UtSF0nLCAnSWRlbnRpdHkgbmFtZSBzdGFydHMgd2l0aCBFIHRvIEgnKTtcbiAgICAgICAgICAgIGNvbnN0IGlqa2xHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgJ0lkZW50aXRpZXMgW0ktTF0nLCAnSWRlbnRpdHkgbmFtZSBzdGFydHMgd2l0aCBJIHRvIEwnKTtcbiAgICAgICAgICAgIGNvbnN0IG1ub3BHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgJ0lkZW50aXRpZXMgW00tUF0nLCAnSWRlbnRpdHkgbmFtZSBzdGFydHMgd2l0aCBNIHRvIFAnKTtcbiAgICAgICAgICAgIGNvbnN0IHFyc3RHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgJ0lkZW50aXRpZXMgW1EtVF0nLCAnSWRlbnRpdHkgbmFtZSBzdGFydHMgd2l0aCBRIHRvIFQnKTtcbiAgICAgICAgICAgIGNvbnN0IHV2d3hHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgJ0lkZW50aXRpZXMgW1UtWF0nLCAnSWRlbnRpdHkgbmFtZSBzdGFydHMgd2l0aCBVIHRvIFgnKTtcbiAgICAgICAgICAgIGNvbnN0IHl6R3JwICAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgJ0lkZW50aXRpZXMgW1ktWl0nLCAnSWRlbnRpdHkgbmFtZSBzdGFydHMgd2l0aCBZIGFuZCBaJyk7XG4gICAgICAgICAgICBjb25zdCBvbmVUbzlHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgJ0lkZW50aXRpZXMgWzEtOV0nLCAnSWRlbnRpdHkgbmFtZSBzdGFydHMgd2l0aCAwIHRvIDknKTtcbiAgICAgICAgICAgIGNvbnN0IHNwZWNpYWxDaGFyR3JwID0gbmV3IEdyb3VwKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUlkKCksXG4gICAgICAgICAgICAgICAgJ0lkZW50aXRpZXMgW290aGVyc10nLFxuICAgICAgICAgICAgICAgICdJZGVudGl0eSBuYW1lIHN0YXJ0cyB3aXRoIHNwZWNpYWwgY2hhcmFjdGVycydcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGogPSBueDsgaiA8IG55OyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRwb2ludCA9IG5ldyBJZGVudGl0eSgpO1xuICAgICAgICAgICAgICAgIGVuZHBvaW50LnJvb3ROb2RlID0gJ1llcyc7XG4gICAgICAgICAgICAgICAgZW5kcG9pbnQuaWQgPSBjcmVhdGVJZCgpO1xuICAgICAgICAgICAgICAgIGVuZHBvaW50LnV1aWQgPSBpZGVudGl0aWVzW2pdLmlkO1xuICAgICAgICAgICAgICAgIGVuZHBvaW50Lm5hbWUgPSBpZGVudGl0aWVzW2pdLm5hbWU7XG4gICAgICAgICAgICAgICAgZW5kcG9pbnQub25saW5lID0gaWRlbnRpdGllc1tqXS5oYXNBcGlTZXNzaW9uID09PSB0cnVlID8gJ1llcycgOiAnTm8nO1xuICAgICAgICAgICAgICAgIGVuZHBvaW50LnR5cGUgPSAnSWRlbnRpdHknO1xuICAgICAgICAgICAgICAgIGVuZHBvaW50LmNyZWF0ZWRBdCA9IGlkZW50aXRpZXNbal0uY3JlYXRlZEF0O1xuICAgICAgICAgICAgICAgIGVuZHBvaW50LnVwZGF0ZWRBdCA9IGlkZW50aXRpZXNbal0udXBkYXRlZEF0O1xuICAgICAgICAgICAgICAgIGVuZHBvaW50LnN0YXR1cyA9IGlkZW50aXRpZXNbal0uc2RrSW5mbyAhPT0gbnVsbCA/ICdSZWdpc3RlcmVkJyA6ICdOb3QgUmVnaXN0ZXJlZCc7XG4gICAgICAgICAgICAgICAgaWYgKGlkZW50aXRpZXNbal0uc2RrSW5mbykge1xuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC5vcyA9IGlkZW50aXRpZXNbal0uc2RrSW5mby50eXBlPyBpZGVudGl0aWVzW2pdLnNka0luZm8udHlwZTogaWRlbnRpdGllc1tqXS5zZGtJbmZvLmFwcElkO1xuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC5vc1ZlcnNpb24gPSBpZGVudGl0aWVzW2pdLnNka0luZm8udmVyc2lvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlkZW50aXRpZXNbal0uYXV0aFBvbGljeSAmJiBpZGVudGl0aWVzW2pdLmF1dGhQb2xpY3kubmFtZS5pbmNsdWRlcyhcIkJyb3daZXJcIikpIHtcbiAgICAgICAgICAgICAgICAgICBlbmRwb2ludC50eXBlID0gJ0Jyb3daZXIgSWRlbnRpdHknO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGNoYSA9IGVuZHBvaW50Lm5hbWUuY2hhckF0KDApLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKGVuZHBvaW50LnN0YXR1cyA9PT0gJ05vdCBSZWdpc3RlcmVkJykge1xuICAgICAgICAgICAgICAgICAgICB1bnJlZ2lzdGVyZWRHcnAuY2hpbGRyZW4ucHVzaChlbmRwb2ludCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICdhJyB8fCBjaGEgPT09ICdiJyB8fCBjaGEgPT09ICdjJyB8fCBjaGEgPT09ICdkJykge1xuICAgICAgICAgICAgICAgICAgICBhYmNkR3JwLmNoaWxkcmVuLnB1c2goZW5kcG9pbnQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhID09PSAnZScgfHwgY2hhID09PSAnZicgfHwgY2hhID09PSAnZycgfHwgY2hhID09PSAnaCcpIHtcbiAgICAgICAgICAgICAgICAgICAgZWZnaEdycC5jaGlsZHJlbi5wdXNoKGVuZHBvaW50KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoYSA9PT0gJ2knIHx8IGNoYSA9PT0gJ2onIHx8IGNoYSA9PT0gJ2snIHx8IGNoYSA9PT0gJ2wnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlqa2xHcnAuY2hpbGRyZW4ucHVzaChlbmRwb2ludCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICdtJyB8fCBjaGEgPT09ICduJyB8fCBjaGEgPT09ICdvJyB8fCBjaGEgPT09ICdwJykge1xuICAgICAgICAgICAgICAgICAgICBtbm9wR3JwLmNoaWxkcmVuLnB1c2goZW5kcG9pbnQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhID09PSAncScgfHwgY2hhID09PSAncicgfHwgY2hhID09PSAncycgfHwgY2hhID09PSAndCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcXJzdEdycC5jaGlsZHJlbi5wdXNoKGVuZHBvaW50KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoYSA9PT0gJ3UnIHx8IGNoYSA9PT0gJ3YnIHx8IGNoYSA9PT0gJ3cnIHx8IGNoYSA9PT0gJ3gnKSB7XG4gICAgICAgICAgICAgICAgICAgIHV2d3hHcnAuY2hpbGRyZW4ucHVzaChlbmRwb2ludCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICd5JyB8fCBjaGEgPT09ICd6Jykge1xuICAgICAgICAgICAgICAgICAgICB5ekdycC5jaGlsZHJlbi5wdXNoKGVuZHBvaW50KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICcwJyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICcxJyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICcyJyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICczJyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICc0JyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICc1JyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICc2JyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICc3JyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICc4JyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICc5J1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBvbmVUbzlHcnAuY2hpbGRyZW4ucHVzaChlbmRwb2ludCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3BlY2lhbENoYXJHcnAuY2hpbGRyZW4ucHVzaChlbmRwb2ludCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAvLyBlbmQgb2YgbWFpbiBmb3IgbG9vcFxuXG4gICAgICAgICAgICBpZiAodW5yZWdpc3RlcmVkR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB1bnJlZ2lzdGVyZWRHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB1bnJlZ2lzdGVyZWRHcnAubmFtZSA9IHVucmVnaXN0ZXJlZEdycC5uYW1lICsgJygnICsgdW5yZWdpc3RlcmVkR3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgICAgICBpZGVudGl0aWVzQ2hpbGRyZW4uY2hpbGRyZW4ucHVzaCh1bnJlZ2lzdGVyZWRHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFiY2RHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGFiY2RHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhYmNkR3JwLm5hbWUgPSBhYmNkR3JwLm5hbWUgKyAnICgnICsgYWJjZEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgaWRlbnRpdGllc0NoaWxkcmVuLmNoaWxkcmVuLnB1c2goYWJjZEdycCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlZmdoR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBlZmdoR3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZWZnaEdycC5uYW1lID0gZWZnaEdycC5uYW1lICsgJyAoJyArIGVmZ2hHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgIGlkZW50aXRpZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKGVmZ2hHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlqa2xHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGlqa2xHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpamtsR3JwLm5hbWUgPSBpamtsR3JwLm5hbWUgKyAnICgnICsgaWprbEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgaWRlbnRpdGllc0NoaWxkcmVuLmNoaWxkcmVuLnB1c2goaWprbEdycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobW5vcEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgbW5vcEdycC5jaGlsZHJlbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIG1ub3BHcnAubmFtZSA9IG1ub3BHcnAubmFtZSArICcgKCcgKyBtbm9wR3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgICAgICBpZGVudGl0aWVzQ2hpbGRyZW4uY2hpbGRyZW4ucHVzaChtbm9wR3JwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChxcnN0R3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBxcnN0R3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcXJzdEdycC5uYW1lID0gcXJzdEdycC5uYW1lICsgJyAoJyArIHFyc3RHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgIGlkZW50aXRpZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHFyc3RHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHV2d3hHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHV2d3hHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB1dnd4R3JwLm5hbWUgPSB1dnd4R3JwLm5hbWUgKyAnICgnICsgdXZ3eEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgaWRlbnRpdGllc0NoaWxkcmVuLmNoaWxkcmVuLnB1c2godXZ3eEdycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoeXpHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHl6R3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgeXpHcnAubmFtZSA9IHl6R3JwLm5hbWUgKyAnICgnICsgeXpHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgIGlkZW50aXRpZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHl6R3JwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNwZWNpYWxDaGFyR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBzcGVjaWFsQ2hhckdycC5uYW1lID0gc3BlY2lhbENoYXJHcnAubmFtZSArICcgKCcgKyBzcGVjaWFsQ2hhckdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgaWRlbnRpdGllc0NoaWxkcmVuLmNoaWxkcmVuLnB1c2goc3BlY2lhbENoYXJHcnApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob25lVG85R3JwLmNoaWxkcmVuLmxlbmd0aCA+IDAgJiYgb25lVG85R3JwLmNoaWxkcmVuLmxlbmd0aCA8PSAxMDApIHtcbiAgICAgICAgICAgICAgICBvbmVUbzlHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBvbmVUbzlHcnAubmFtZSA9IG9uZVRvOUdycC5uYW1lICsgJyAoJyArIG9uZVRvOUdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgaWRlbnRpdGllc0NoaWxkcmVuLmNoaWxkcmVuLnB1c2gob25lVG85R3JwKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob25lVG85R3JwLmNoaWxkcmVuLmxlbmd0aCA+IDEwMCkge1xuICAgICAgICAgICAgICAgIG9uZVRvOUdycC5jaGlsZHJlbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb25lVG85R3JwLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RFbGVtZW50ID0gaSArIDgwIDwgb25lVG85R3JwLmNoaWxkcmVuLmxlbmd0aCA/IGkgKyA4MCA6IG9uZVRvOUdycC5jaGlsZHJlbi5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lUyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAnSWRlbnRpdGllcyBbJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBvbmVUbzlHcnAuY2hpbGRyZW5baV0ubmFtZS5zdWJzdHJpbmcoMCwgNCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJy0nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uZVRvOUdycC5jaGlsZHJlbltsYXN0RWxlbWVudF0ubmFtZS5zdWJzdHJpbmcoMCwgNCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ10nO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGxkID0gbmV3IEdyb3VwKFxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlSWQoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0lkZW50aXR5IG5hbWUgc3RhcnRzIHdpdGggJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lVG85R3JwLmNoaWxkcmVuW2ldLm5hbWUuc3Vic3RyaW5nKDAsIDQpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIFRvICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZVRvOUdycC5jaGlsZHJlbltsYXN0RWxlbWVudF0ubmFtZS5zdWJzdHJpbmcoMCwgNClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IGk7IGogPCBsYXN0RWxlbWVudDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGxkLmNoaWxkcmVuLnB1c2gob25lVG85R3JwLmNoaWxkcmVuW2pdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgIC8vIGNobGQubmFtZSA9IGNobGQubmFtZSArICcgKCcgKyBjaGxkLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgICAgICAgICAgaWRlbnRpdGllc0NoaWxkcmVuLmNoaWxkcmVuLnB1c2goY2hsZCk7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBpICsgODA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gaWRlbnRpdGllc0NoaWxkcmVuO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc1NlcnZpY2VQb2xpY2llc0ZvclRyZWUoXG4gICAgICAgICAgICBzZXJ2aWNlUG9saWN5Q2hpbGRyZW4sXG4gICAgICAgICAgICBzZXJ2aWNlUG9saWNpZXMsXG4gICAgICAgICAgICBueCxcbiAgICAgICAgICAgIG55XG4gICAgICAgICkge1xuICAgICAgICAgIGlmKGFyZ3NbMF09PT1mYWxzZSkgcmV0dXJuIHNlcnZpY2VQb2xpY3lDaGlsZHJlbjtcblxuICAgICAgICAgIGNvbnN0IGJpbmRHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgJ0JpbmQtUG9saWNpZXMnLCAnQmluZCBTZXJ2aWNlIFBvbGljeScpO1xuICAgICAgICAgIGNvbnN0IGRpYWxHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgJ0RpYWwtUG9saWNpZXMnLCAnRGlhbCBTZXJ2aWNlIFBvbGljeScpO1xuXG4gICAgICAgICAgc2VydmljZVBvbGljaWVzLmZvckVhY2goIChzcCkgPT4ge1xuXG4gICAgICAgICAgICBjb25zdCBzcG9saWN5ID0gbmV3IFNlcnZpY2VQb2xpY3koKTtcbiAgICAgICAgICAgICAgICBzcG9saWN5LmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICBzcG9saWN5LnV1aWQgPSBzcC5pZDtcbiAgICAgICAgICAgICAgICBzcG9saWN5Lm5hbWUgPSBzcC5uYW1lO1xuICAgICAgICAgICAgICAgIHNwb2xpY3kudHlwZSA9ICdTZXJ2aWNlIFBvbGljeSc7XG4gICAgICAgICAgICAgICAgc3BvbGljeS5yb290Tm9kZSA9ICdZZXMnO1xuICAgICAgICAgICAgICAgIGlmKHNwLnR5cGU9PT0nQmluZCcpIHtcbiAgICAgICAgICAgICAgICAgIGJpbmRHcnAuY2hpbGRyZW4ucHVzaChzcG9saWN5KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgZGlhbEdycC5jaGlsZHJlbi5wdXNoKHNwb2xpY3kpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gKTtcblxuICAgICAgICAgICBiaW5kR3JwLm5hbWUgPSBiaW5kR3JwLm5hbWUgKyAnKCcrIGJpbmRHcnAuY2hpbGRyZW4ubGVuZ3RoICsnKSc7XG4gICAgICAgICAgIHNlcnZpY2VQb2xpY3lDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKGJpbmRHcnApO1xuICAgICAgICAgICBkaWFsR3JwLm5hbWUgPSBkaWFsR3JwLm5hbWUgKyAnKCcrIGRpYWxHcnAuY2hpbGRyZW4ubGVuZ3RoICsnKSc7XG4gICAgICAgICAgIHNlcnZpY2VQb2xpY3lDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKGRpYWxHcnApO1xuICAgICAgICAgIHJldHVybiBzZXJ2aWNlUG9saWN5Q2hpbGRyZW47XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBzZXJ2aWNlR3JvdXBpbmcoc2VydmljZXNDaGlsZHJlbiwgc2VydmljZXN0cmVlKSB7XG4gICAgICAgICAgICBjb25zdCBwcm90b2NvbFJEUEdycCA9IG5ldyBHcm91cChcbiAgICAgICAgICAgICAgICBjcmVhdGVJZCgpLFxuICAgICAgICAgICAgICAgICdTZXJ2aWNlcyBbcHJvdG9jb2wtUkRQXScsXG4gICAgICAgICAgICAgICAgJ1NlcnZpY2VzIGNyZWF0ZWQgZm9yIFJEUCBwcm90b2NvbCdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBwcm90b2NvbEhUVFBTR3JwID0gbmV3IEdyb3VwKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUlkKCksXG4gICAgICAgICAgICAgICAgJ1NlcnZpY2VzIFtwcm90b2NvbC1IVFRQU10nLFxuICAgICAgICAgICAgICAgICdTZXJ2aWNlIGNyZWF0ZWQgZm9yIEhUVFBTIHByb3RvY29sJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IHByb3RvY29sSFRUUEdycCA9IG5ldyBHcm91cChcbiAgICAgICAgICAgICAgICBjcmVhdGVJZCgpLFxuICAgICAgICAgICAgICAgICdTZXJ2aWNlcyBbcHJvdG9jb2wtSFRUUF0nLFxuICAgICAgICAgICAgICAgICdTZXJ2aWNlIGNyZWF0ZWQgZm9yIEhUVFAgcHJvdG9jb2wnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgcHJvdG9jb2xGVFBHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgJ1NlcnZpY2VzIFtwcm90b2NvbC1GVFBdJywgJ1NlcnZpY2UgY3JlYXRlZCBmb3IgRlRQIHByb3RvY29sJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGFiY2RHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgJ1NlcnZpY2VzIFtBLURdJywgJ1NlcnZpY2UgbmFtZSBzdGFydHMgd2l0aCBBIHRvIEQnKTtcbiAgICAgICAgICAgIGNvbnN0IGVmZ2hHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgJ1NlcnZpY2VzIFtFLUhdJywgJ1NlcnZpY2UgbmFtZSBzdGFydHMgd2l0aCBFIHRvIEgnKTtcbiAgICAgICAgICAgIGNvbnN0IGlqa2xHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgJ1NlcnZpY2VzIFtJLUxdJywgJ1NlcnZpY2UgbmFtZSBzdGFydHMgd2l0aCBJIHRvIEwnKTtcbiAgICAgICAgICAgIGNvbnN0IG1ub3BHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgJ1NlcnZpY2VzIFtNLVBdJywgJ1NlcnZpY2UgbmFtZSBzdGFydHMgd2l0aCBNIHRvIFAnKTtcbiAgICAgICAgICAgIGNvbnN0IHFyc3RHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgJ1NlcnZpY2VzIFtRLVRdJywgJ1NlcnZpY2UgbmFtZSBzdGFydHMgd2l0aCBRIHRvIFQnKTtcbiAgICAgICAgICAgIGNvbnN0IHV2d3hHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgJ1NlcnZpY2VzIFtVLVhdJywgJ1NlcnZpY2UgbmFtZSBzdGFydHMgd2l0aCBVIHRvIFgnKTtcbiAgICAgICAgICAgIGNvbnN0IHl6R3JwID0gbmV3IEdyb3VwKGNyZWF0ZUlkKCksICdTZXJ2aWNlcyBbWS1aXScsICdTZXJ2aWNlIG5hbWUgc3RhcnRzIHdpdGggWSBhbmQgWicpO1xuICAgICAgICAgICAgY29uc3Qgb25lVG85R3JwID0gbmV3IEdyb3VwKGNyZWF0ZUlkKCksICdTZXJ2aWNlcyBbMS05XScsICdTZXJ2aWNlIG5hbWUgc3RhcnRzIHdpdGggMCB0byA5Jyk7XG4gICAgICAgICAgICBjb25zdCBzcGVjaWFsQ2hhckdycCA9IG5ldyBHcm91cChcbiAgICAgICAgICAgICAgICBjcmVhdGVJZCgpLFxuICAgICAgICAgICAgICAgICdTZXJ2aWNlcyBbb3RoZXJzXScsXG4gICAgICAgICAgICAgICAgJ1NlcnZpY2UgbmFtZSBzdGFydHMgd2l0aCBzcGVjaWFsIGNoYXJhY3RlcnMnXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlcnZpY2VzdHJlZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VvYmogPSBzZXJ2aWNlc3RyZWVbaV07XG4gICAgICAgICAgICAgICAgY29uc3QgY2hhID0gc2VydmljZW9iai5uYW1lLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHNlcnZpY2VvYmoucHJvdG9jb2wgPT09ICdyZHAnKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3RvY29sUkRQR3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZXJ2aWNlb2JqLnByb3RvY29sID09PSAnaHR0cHMnKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3RvY29sSFRUUFNHcnAuY2hpbGRyZW4ucHVzaChzZXJ2aWNlb2JqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlcnZpY2VvYmoucHJvdG9jb2wgPT09ICdodHRwJykge1xuICAgICAgICAgICAgICAgICAgICBwcm90b2NvbEhUVFBHcnAuY2hpbGRyZW4ucHVzaChzZXJ2aWNlb2JqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlcnZpY2VvYmoucHJvdG9jb2wgPT09ICdmdHAnKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3RvY29sRlRQR3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICdhJyB8fCBjaGEgPT09ICdiJyB8fCBjaGEgPT09ICdjJyB8fCBjaGEgPT09ICdkJykge1xuICAgICAgICAgICAgICAgICAgICBhYmNkR3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICdlJyB8fCBjaGEgPT09ICdmJyB8fCBjaGEgPT09ICdnJyB8fCBjaGEgPT09ICdoJykge1xuICAgICAgICAgICAgICAgICAgICBlZmdoR3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICdpJyB8fCBjaGEgPT09ICdqJyB8fCBjaGEgPT09ICdrJyB8fCBjaGEgPT09ICdsJykge1xuICAgICAgICAgICAgICAgICAgICBpamtsR3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICdtJyB8fCBjaGEgPT09ICduJyB8fCBjaGEgPT09ICdvJyB8fCBjaGEgPT09ICdwJykge1xuICAgICAgICAgICAgICAgICAgICBtbm9wR3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICdxJyB8fCBjaGEgPT09ICdyJyB8fCBjaGEgPT09ICdzJyB8fCBjaGEgPT09ICd0Jykge1xuICAgICAgICAgICAgICAgICAgICBxcnN0R3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICd1JyB8fCBjaGEgPT09ICd2JyB8fCBjaGEgPT09ICd3JyB8fCBjaGEgPT09ICd4Jykge1xuICAgICAgICAgICAgICAgICAgICB1dnd4R3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICd5JyB8fCBjaGEgPT09ICd6Jykge1xuICAgICAgICAgICAgICAgICAgICB5ekdycC5jaGlsZHJlbi5wdXNoKHNlcnZpY2VvYmopO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGNoYSA9PT0gJzAnIHx8XG4gICAgICAgICAgICAgICAgICAgIGNoYSA9PT0gJzEnIHx8XG4gICAgICAgICAgICAgICAgICAgIGNoYSA9PT0gJzInIHx8XG4gICAgICAgICAgICAgICAgICAgIGNoYSA9PT0gJzMnIHx8XG4gICAgICAgICAgICAgICAgICAgIGNoYSA9PT0gJzQnIHx8XG4gICAgICAgICAgICAgICAgICAgIGNoYSA9PT0gJzUnIHx8XG4gICAgICAgICAgICAgICAgICAgIGNoYSA9PT0gJzYnIHx8XG4gICAgICAgICAgICAgICAgICAgIGNoYSA9PT0gJzcnIHx8XG4gICAgICAgICAgICAgICAgICAgIGNoYSA9PT0gJzgnIHx8XG4gICAgICAgICAgICAgICAgICAgIGNoYSA9PT0gJzknXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIG9uZVRvOUdycC5jaGlsZHJlbi5wdXNoKHNlcnZpY2VvYmopO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNwZWNpYWxDaGFyR3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAvLyBlbmQgbWFpbiBmb3IgbG9vcFxuXG4gICAgICAgICAgICBpZiAocHJvdG9jb2xSRFBHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHByb3RvY29sUkRQR3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcHJvdG9jb2xSRFBHcnAubmFtZSA9IHByb3RvY29sUkRQR3JwLm5hbWUgKyAnKCcgKyBwcm90b2NvbFJEUEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHByb3RvY29sUkRQR3JwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzcGVjaWFsQ2hhckdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgc3BlY2lhbENoYXJHcnAubmFtZSA9IHNwZWNpYWxDaGFyR3JwLm5hbWUgKyAnKCcgKyBzcGVjaWFsQ2hhckdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHNwZWNpYWxDaGFyR3JwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm90b2NvbEhUVFBTR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBwcm90b2NvbEhUVFBTR3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcHJvdG9jb2xIVFRQU0dycC5uYW1lID0gcHJvdG9jb2xIVFRQU0dycC5uYW1lICsgJygnICsgcHJvdG9jb2xIVFRQU0dycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHByb3RvY29sSFRUUFNHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3RvY29sSFRUUEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcHJvdG9jb2xIVFRQR3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcHJvdG9jb2xIVFRQR3JwLm5hbWUgPSBwcm90b2NvbEhUVFBHcnAubmFtZSArICcoJyArIHByb3RvY29sSFRUUEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHByb3RvY29sSFRUUEdycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvdG9jb2xGVFBHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHByb3RvY29sRlRQR3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcHJvdG9jb2xGVFBHcnAubmFtZSA9IHByb3RvY29sRlRQR3JwLm5hbWUgKyAnKCcgKyBwcm90b2NvbEZUUEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHByb3RvY29sRlRQR3JwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhYmNkR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBhYmNkR3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYWJjZEdycC5uYW1lID0gYWJjZEdycC5uYW1lICsgJygnICsgYWJjZEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKGFiY2RHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVmZ2hHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGVmZ2hHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBlZmdoR3JwLm5hbWUgPSBlZmdoR3JwLm5hbWUgKyAnKCcgKyBlZmdoR3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuLmNoaWxkcmVuLnB1c2goZWZnaEdycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaWprbEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWprbEdycC5jaGlsZHJlbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlqa2xHcnAubmFtZSA9IGlqa2xHcnAubmFtZSArICcoJyArIGlqa2xHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4uY2hpbGRyZW4ucHVzaChpamtsR3JwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtbm9wR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBtbm9wR3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgbW5vcEdycC5uYW1lID0gbW5vcEdycC5uYW1lICsgJygnICsgbW5vcEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKG1ub3BHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHFyc3RHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHFyc3RHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBxcnN0R3JwLm5hbWUgPSBxcnN0R3JwLm5hbWUgKyAnKCcgKyBxcnN0R3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuLmNoaWxkcmVuLnB1c2gocXJzdEdycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodXZ3eEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdXZ3eEdycC5jaGlsZHJlbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHV2d3hHcnAubmFtZSA9IHV2d3hHcnAubmFtZSArICcoJyArIHV2d3hHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4uY2hpbGRyZW4ucHVzaCh1dnd4R3JwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh5ekdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgeXpHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB5ekdycC5uYW1lID0geXpHcnAubmFtZSArICcoJyArIHl6R3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuLmNoaWxkcmVuLnB1c2goeXpHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9uZVRvOUdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgb25lVG85R3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgb25lVG85R3JwLm5hbWUgPSBvbmVUbzlHcnAubmFtZSArICcoJyArIG9uZVRvOUdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKG9uZVRvOUdycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgIC8vICBzZXJ2aWNlc0NoaWxkcmVuLm5hbWUgPSBzZXJ2aWNlc0NoaWxkcmVuLm5hbWUgKyAnKCcgKyBzZXJ2aWNlc3RyZWUubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2VzQ2hpbGRyZW47XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBwcm9jZXNzU2VydmljZXNGb3JUcmVlKFxuICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbixcbiAgICAgICAgICAgIHNlcnZpY2VzLFxuICAgICAgICAgICAgbngsXG4gICAgICAgICAgICBueVxuICAgICAgICApIHtcbiAgICAgICAgICBpZihhcmdzWzFdPT09ZmFsc2UpIHJldHVybiBzZXJ2aWNlc0NoaWxkcmVuO1xuICAgICAgICAgICAgY29uc3Qgc2VydmljZXN0cmVlID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gbng7IGkgPCBueTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VydmljZW9iaiA9IG5ldyBTZXJ2aWNlKCk7XG4gICAgICAgICAgICAgICAgc2VydmljZW9iai5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgICAgc2VydmljZW9iai5uYW1lID0gc2VydmljZXNbaV0ubmFtZTtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlb2JqLnV1aWQgPSBzZXJ2aWNlc1tpXS5pZDtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlb2JqLnR5cGUgPSAnU2VydmljZSc7XG4gICAgICAgICAgICAgICAgc2VydmljZW9iai5yb290Tm9kZSA9ICdZZXMnO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlc3dpdGhOYW1lID0gW107XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlc3dpdGhOYW1lLnB1c2goJ0AnICsgc2VydmljZXNbaV0ubmFtZSk7XG4gICAgICAgICAgICAgICAgc2VydmljZXNbaV0gJiYgc2VydmljZXNbaV0ucm9sZUF0dHJpYnV0ZXMgJiYgc2VydmljZXNbaV0ucm9sZUF0dHJpYnV0ZXMuZmluZCgoc3JhdHRyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXN3aXRoTmFtZS5wdXNoKHNyYXR0cik7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgaXNJdFJEUFByb3RvY29sQXR0ciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCBpc0l0SFRUUFByb3RvY29sQXR0ciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCBpc0l0SFRUUFNQcm90b2NvbEF0dHIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBsZXQgaXNJdEZUUFByb3RvY29sQXR0ciA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBhdHRyaWJ1dGVzd2l0aE5hbWUubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXR0ck9iID0gbmV3IEF0dHJpYnV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBhdHRyT2IuaWQgPSBjcmVhdGVJZCgpO1xuICAgICAgICAgICAgICAgICAgICBhdHRyT2IubmFtZSA9IGF0dHJpYnV0ZXN3aXRoTmFtZVtrXTtcbiAgICAgICAgICAgICAgICAgICAgYXR0ck9iLnR5cGUgPSAnU2VydmljZSBBdHRyaWJ1dGUnO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhdHROYW1lID0gYXR0cmlidXRlc3dpdGhOYW1lW2tdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0l0UkRQUHJvdG9jb2xBdHRyID09PSBmYWxzZSAmJiBhdHROYW1lLmluY2x1ZGVzKCdyZHAnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZW9iai5wcm90b2NvbCA9ICdyZHAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNJdFJEUFByb3RvY29sQXR0ciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzSXRIVFRQU1Byb3RvY29sQXR0ciA9PT0gZmFsc2UgJiYgYXR0TmFtZS5pbmNsdWRlcygnaHR0cHMnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZW9iai5wcm90b2NvbCA9ICdodHRwcyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0l0SFRUUFNQcm90b2NvbEF0dHIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0l0SFRUUFNQcm90b2NvbEF0dHIgPT09IGZhbHNlICYmIGlzSXRIVFRQUHJvdG9jb2xBdHRyID09PSBmYWxzZSAmJiBhdHROYW1lLmluY2x1ZGVzKCdodHRwJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VvYmoucHJvdG9jb2wgPSAnaHR0cCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0l0SFRUUFByb3RvY29sQXR0ciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzSXRGVFBQcm90b2NvbEF0dHIgPT09IGZhbHNlICYmIGF0dE5hbWUuaW5jbHVkZXMoJ2Z0cCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlb2JqLnByb3RvY29sID0gJ2Z0cCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0l0RlRQUHJvdG9jb2xBdHRyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gLy8gZW5kIGlubmVyIGZvciBsb29wXG5cbiAgICAgICAgICAgICAgICBzZXJ2aWNlc3RyZWUucHVzaChzZXJ2aWNlb2JqKTtcbiAgICAgICAgICAgIH0gLy8gZW5kIGZvciBsb29wXG5cbiAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlR3JvdXBpbmcoc2VydmljZXNDaGlsZHJlbiwgc2VydmljZXN0cmVlKTtcbiAgICAgICAgfSAvLyBlbmQgb2YgcHJvY2Vzc1NlcnZpY2VzRm9yVHJlZVxuXG4gICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NFZGdlUm91dGVyUG9saWNpZXNGb3JUcmVlKFxuICAgICAgICAgICAgZWRnZVJvdXRlclBvbGljaWVzQ2hpbGRyZW4sXG4gICAgICAgICAgICBlZGdlUm91dGVyUG9saWNpZXMsXG4gICAgICAgICAgICBueCxcbiAgICAgICAgICAgIG55XG4gICAgICAgICkge1xuICAgICAgICAgIGlmKGFyZ3NbNF09PT1mYWxzZSkgcmV0dXJuIGVkZ2VSb3V0ZXJQb2xpY2llc0NoaWxkcmVuO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IG54OyBpIDwgbnk7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycG9saWN5ID0gbmV3IEVSUG9saWN5KCk7XG4gICAgICAgICAgICAgICAgZXJwb2xpY3kuaWQgPSBjcmVhdGVJZCgpO1xuICAgICAgICAgICAgICAgIGVycG9saWN5LnV1aWQgPSBlZGdlUm91dGVyUG9saWNpZXNbaV0uaWQ7XG4gICAgICAgICAgICAgICAgZXJwb2xpY3kubmFtZSA9IGVkZ2VSb3V0ZXJQb2xpY2llc1tpXS5uYW1lO1xuICAgICAgICAgICAgICAgIGVycG9saWN5LnR5cGUgPSAnUm91dGVyIFBvbGljeSc7XG4gICAgICAgICAgICAgICAgZXJwb2xpY3kucm9vdE5vZGUgPSAnWWVzJztcbiAgICAgICAgICAgICAgICBlcnBvbGljeS5pc1N5c3RlbSA9IGVkZ2VSb3V0ZXJQb2xpY2llc1tpXS5pc1N5c3RlbTtcbiAgICAgICAgICAgICAgICBlcnBvbGljeS5zZW1hbnRpYyA9IGVkZ2VSb3V0ZXJQb2xpY2llc1tpXS5zZW1hbnRpYztcbiAgICAgICAgICAgICAgICBlZGdlUm91dGVyUG9saWNpZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKGVycG9saWN5KTtcbiAgICAgICAgICAgIH0gLy8gZW5kIG9mIG1haW4gZm9yIGxvb3BcbiAgICAgICAgICAgIHJldHVybiBlZGdlUm91dGVyUG9saWNpZXNDaGlsZHJlbjtcbiAgICAgICAgfSAvLyBlbmRcblxuICAgICAgICBmdW5jdGlvbiBwcm9jZXNzU2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llc0ZvclRyZWUoXG4gICAgICAgICAgICBzZXJ2aWNlRWRnZVJvdXRlclBvbGljaWVzQ2hpbGRyZW4sXG4gICAgICAgICAgICBzZXJ2aWNlRWRnZVJvdXRlclBvbGljaWVzLFxuICAgICAgICAgICAgbngsXG4gICAgICAgICAgICBueVxuICAgICAgICApIHtcbiAgICAgICAgaWYoYXJnc1s1XT09PWZhbHNlKSByZXR1cm4gc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llc0NoaWxkcmVuO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IG54OyBpIDwgbnk7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VlcnBvbGljeSA9IG5ldyBTZXJ2aWNlRVJQb2xpY3koKTtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlZXJwb2xpY3kuaWQgPSBjcmVhdGVJZCgpO1xuICAgICAgICAgICAgICAgIHNlcnZpY2VlcnBvbGljeS51dWlkID0gc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llc1tpXS5pZDtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlZXJwb2xpY3kubmFtZSA9IHNlcnZpY2VFZGdlUm91dGVyUG9saWNpZXNbaV0ubmFtZTtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlZXJwb2xpY3kudHlwZSA9ICdTZXJ2aWNlIFJvdXRlciBQb2xpY3knO1xuICAgICAgICAgICAgICAgIHNlcnZpY2VlcnBvbGljeS5yb290Tm9kZSA9ICdZZXMnO1xuICAgICAgICAgICAgICAgIHNlcnZpY2VFZGdlUm91dGVyUG9saWNpZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHNlcnZpY2VlcnBvbGljeSk7XG4gICAgICAgICAgICB9IC8vIGVuZCBvZiBtYWluIGZvciBsb29wXG4gICAgICAgICAgICByZXR1cm4gc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llc0NoaWxkcmVuO1xuICAgICAgICB9IC8vIGVuZFxuXG4gICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NFZGdlcm91dGVyc0ZvclRyZWUoXG4gICAgICAgICAgICBlZGdlcm91dGVyQ2hpbGRyZW4sXG4gICAgICAgICAgICBlZGdlcm91dGVycyxcbiAgICAgICAgICAgIG54LFxuICAgICAgICAgICAgbnlcbiAgICAgICAgKSB7XG4gICAgICAgIGlmKGFyZ3NbM109PT1mYWxzZSkgcmV0dXJuIGVkZ2Vyb3V0ZXJDaGlsZHJlbjtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBueDsgaSA8IG55OyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlck9iID0gbmV3IEVSb3V0ZXIoKTtcbiAgICAgICAgICAgICAgICBlck9iLmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlciA9IGVkZ2Vyb3V0ZXJzW2ldO1xuICAgICAgICAgICAgICAgIGlmIChlcikge1xuICAgICAgICAgICAgICAgICAgICBlck9iLnV1aWQgPSBlci5pZDtcbiAgICAgICAgICAgICAgICAgICAgZXJPYi5uYW1lID0gZXIubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgZXJPYi52ZXJpZmllZCA9IGVyLmlzVmVyaWZpZWQ/ICdZZXMnOiAnTm8nO1xuICAgICAgICAgICAgICAgICAgICAvL2VyT2IudmVyc2lvbiA9IGVyLnByb2R1Y3RWZXJzaW9uO1xuICAgICAgICAgICAgICAgICAgICBlck9iLm9ubGluZSA9IGVyLmlzT25saW5lPyAnWWVzJzogJ05vJztcbiAgICAgICAgICAgICAgICAgICAgZXJPYi5kaXNhYmxlZCA9IGVyLmRpc2FibGVkPyAnWWVzJzogJ05vJztcbiAgICAgICAgICAgICAgICAgICAgZXJPYi50eXBlID0gJ0VkZ2UgUm91dGVyJztcbiAgICAgICAgICAgICAgICAgICAgZXJPYi5yb290Tm9kZSA9ICdZZXMnO1xuICAgICAgICAgICAgICAgICAgICBlck9iLnR1bm5lbGVyRW5hYmxlZCA9IGVyLnR1bm5lbGVyRW5hYmxlZD8gZXIudHVubmVsZXJFbmFibGVkOiAnTm8nO1xuICAgICAgICAgICAgICAgICAgICBlck9iLnN5bmNTdGF0dXMgPSBlci5zeW5jU3RhdHVzPyBlci5zeW5jU3RhdHVzOidObyc7XG4gICAgICAgICAgICAgICAgICAgIGVyT2IuY3JlYXRlZEF0ID0gZXIuY3JlYXRlZEF0O1xuICAgICAgICAgICAgICAgICAgICBlck9iLnVwZGF0ZWRBdCA9IGVyLnVwZGF0ZWRBdDtcblxuICAgICAgICAgICAgICAgICAgICBlZGdlcm91dGVyQ2hpbGRyZW4uY2hpbGRyZW4ucHVzaChlck9iKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IC8vIGVuZCBtYWluIGZvciBsb29wXG4gICAgICAgICAgICByZXR1cm4gZWRnZXJvdXRlckNoaWxkcmVuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY3JlYXRlSWQoKSBnZW5lcmF0ZXMgbm9kZSBJZCAxLDIsMyw0LDUgZm9yIHRoZSBmb2xsb3dpbmcgZml2ZSBub2Rlcy4gdGhpcyBpZCBpcyB1c2VkIHRvIHNlYXJjaCBjYXBhYmlsaXR5LlxuICAgICAgICBsZXQgc2VydmljUG9saWNpZXNDaGlsZHJlbiA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICBzZXJ2aWNQb2xpY2llc0NoaWxkcmVuLmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgc2VydmljUG9saWNpZXNDaGlsZHJlbi5maXJzdENoaWxkID0gJ1llcyc7XG4gICAgICAgIHNlcnZpY1BvbGljaWVzQ2hpbGRyZW4ubmFtZSA9ICdTZXJ2aWNlIFBvbGljaWVzKCcrIHNlcnZpY2VfcG9saWNpZXNfdG90YWxDb3VudCArJyknO1xuXG4gICAgICAgIGxldCBzZXJ2aWNlc0NoaWxkcmVuID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4uaWQgPSBjcmVhdGVJZCgpO1xuICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuLmZpcnN0Q2hpbGQgPSAnWWVzJztcbiAgICAgICAgc2VydmljZXNDaGlsZHJlbi5uYW1lID0gJ1NlcnZpY2VzKCcrIHNlcnZpY2VzX3RvdGFsQ291bnQgKycpJztcblxuICAgICAgICBsZXQgaWRlbnRpdGllc0NoaWxkcmVuID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgIGlkZW50aXRpZXNDaGlsZHJlbi5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgIGlkZW50aXRpZXNDaGlsZHJlbi5maXJzdENoaWxkID0gJ1llcyc7XG4gICAgICAgIGlkZW50aXRpZXNDaGlsZHJlbi5uYW1lID0gJ0lkZW50aXRpZXMoJysgaWRlbnRpdGllc190b3RhbENvdW50ICsnKSc7XG5cbiAgICAgICAgbGV0IGVkZ2Vyb3V0ZXJDaGlsZHJlbiA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICBlZGdlcm91dGVyQ2hpbGRyZW4uaWQgPSBjcmVhdGVJZCgpO1xuICAgICAgICBlZGdlcm91dGVyQ2hpbGRyZW4uZmlyc3RDaGlsZCA9ICdZZXMnO1xuICAgICAgICBlZGdlcm91dGVyQ2hpbGRyZW4ubmFtZSA9ICdFZGdlIFJvdXRlcnMoJysgZWRnZXJvdXRlcnNfdG90YWxDb3VudCArJyknO1xuXG4gICAgICAgIGxldCBlZGdlUm91dGVyUG9saWNpZXNDaGlsZHJlbiA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICBlZGdlUm91dGVyUG9saWNpZXNDaGlsZHJlbi5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgIGVkZ2VSb3V0ZXJQb2xpY2llc0NoaWxkcmVuLmZpcnN0Q2hpbGQgPSAnWWVzJztcbiAgICAgICAgZWRnZVJvdXRlclBvbGljaWVzQ2hpbGRyZW4ubmFtZSA9ICdFZGdlIFJvdXRlciBQb2xpY2llcygnKyBlZGdlX3JvdXRlcl9wb2xpY2llc190b3RhbENvdW50ICsnKSc7XG5cbiAgICAgICAgbGV0IHNlcnZpY2VFZGdlUm91dGVyUG9saWNlc0NoaWxkcmVuID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgIHNlcnZpY2VFZGdlUm91dGVyUG9saWNlc0NoaWxkcmVuLmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2VzQ2hpbGRyZW4uZmlyc3RDaGlsZCA9ICdZZXMnO1xuICAgICAgICBzZXJ2aWNlRWRnZVJvdXRlclBvbGljZXNDaGlsZHJlbi5uYW1lID0gJ1NlcnZpY2UgRWRnZSBSb3V0ZXIgUG9saWNpZXMoJysgc2VydmljZV9yb3V0ZXJfcG9saWNpZXNfdG90YWxDb3VudCArJyknO1xuXG4gICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4gPSBwcm9jZXNzU2VydmljZXNGb3JUcmVlKFxuICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbixcbiAgICAgICAgICAgIHNlcnZpY2VzLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHNlcnZpY2VzLmxlbmd0aFxuICAgICAgICApO1xuXG4gICAgICAgIGVkZ2Vyb3V0ZXJDaGlsZHJlbiA9IHByb2Nlc3NFZGdlcm91dGVyc0ZvclRyZWUoXG4gICAgICAgICAgICBlZGdlcm91dGVyQ2hpbGRyZW4sXG4gICAgICAgICAgICBlZGdlcm91dGVycyxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBlZGdlcm91dGVycy5sZW5ndGhcbiAgICAgICAgKTtcblxuICAgICAgICBzZXJ2aWNQb2xpY2llc0NoaWxkcmVuID0gcHJvY2Vzc1NlcnZpY2VQb2xpY2llc0ZvclRyZWUoXG4gICAgICAgICAgICBzZXJ2aWNQb2xpY2llc0NoaWxkcmVuLFxuICAgICAgICAgICAgc2VydmljZVBvbGljaWVzLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHNlcnZpY2VQb2xpY2llcy5sZW5ndGhcbiAgICAgICAgKTtcblxuICAgICAgICBlZGdlUm91dGVyUG9saWNpZXNDaGlsZHJlbiA9IHByb2Nlc3NFZGdlUm91dGVyUG9saWNpZXNGb3JUcmVlKFxuICAgICAgICAgICAgZWRnZVJvdXRlclBvbGljaWVzQ2hpbGRyZW4sXG4gICAgICAgICAgICBlZGdlUm91dGVyUG9saWNpZXMsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgZWRnZVJvdXRlclBvbGljaWVzLmxlbmd0aFxuICAgICAgICApO1xuXG5cbiAgICAgICAgaWRlbnRpdGllc0NoaWxkcmVuID0gcHJvY2Vzc0lkZW50aXRpZXNGb3JUcmVlKFxuICAgICAgICAgICAgaWRlbnRpdGllc0NoaWxkcmVuLFxuICAgICAgICAgICAgaWRlbnRpdGllcyxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBpZGVudGl0aWVzLmxlbmd0aFxuICAgICAgICApO1xuXG4gICAgICAgIC8vc2VydmljZVJvdXRlclBvbGljaWVzXG4gICAgICAgIHNlcnZpY2VFZGdlUm91dGVyUG9saWNlc0NoaWxkcmVuID0gcHJvY2Vzc1NlcnZpY2VFZGdlUm91dGVyUG9saWNpZXNGb3JUcmVlKFxuICAgICAgICAgICAgc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2VzQ2hpbGRyZW4sXG4gICAgICAgICAgICBzZXJ2aWNlRWRnZVJvdXRlclBvbGljaWVzLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHNlcnZpY2VFZGdlUm91dGVyUG9saWNpZXMubGVuZ3RoXG4gICAgICAgICk7XG5cbiAgICAgICAgcm9vdEpzb24uY2hpbGRyZW4ucHVzaChzZXJ2aWNQb2xpY2llc0NoaWxkcmVuKTtcbiAgICAgICAgcm9vdEpzb24uY2hpbGRyZW4ucHVzaChzZXJ2aWNlc0NoaWxkcmVuKTtcbiAgICAgICAgcm9vdEpzb24uY2hpbGRyZW4ucHVzaChpZGVudGl0aWVzQ2hpbGRyZW4pO1xuICAgICAgICByb290SnNvbi5jaGlsZHJlbi5wdXNoKGVkZ2Vyb3V0ZXJDaGlsZHJlbik7XG4gICAgICAgIHJvb3RKc29uLmNoaWxkcmVuLnB1c2goZWRnZVJvdXRlclBvbGljaWVzQ2hpbGRyZW4pO1xuICAgICAgICByb290SnNvbi5jaGlsZHJlbi5wdXNoKHNlcnZpY2VFZGdlUm91dGVyUG9saWNlc0NoaWxkcmVuKTtcbiAgICAgICAgcm9vdEpzb24ubGFzdElkID0gdW5pcUlkO1xuXG4gICAgICAgIHJldHVybiByb290SnNvbjtcbiAgICB9XG5cbn1cbiJdfQ==
|
|
592
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay12aXN1YWxpemVyLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy92aXN1YWxpemVyL25ldHdvcmstdmlzdWFsaXplci9uZXR3b3JrLXZpc3VhbGl6ZXIuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRzNDLE1BQU0sT0FBTyxRQUFRO0lBb0JqQjtRQUNJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxPQUFPO0lBb0JoQjtRQUNJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7Q0FDSjtBQUNELE1BQU0sT0FBTyxNQUFNO0lBUWpCO1FBQ0ksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDN0IsQ0FBQztDQUNGO0FBQ0QsTUFBTSxPQUFPLEtBQUs7SUFPZCxZQUFZLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztRQUNkLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxH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QUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxFQUFFO29CQUNqRSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDOUI7cUJBQU0sSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxFQUFFO29CQUNqRSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDOUI7cUJBQU0sSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxFQUFFO29CQUNqRSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDOUI7cUJBQU0sSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxFQUFFO29CQUNqRSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDOUI7cUJBQU0sSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxFQUFFO29CQUNqRSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDOUI7cUJBQU0sSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLEVBQUU7b0JBQ25DLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUM1QjtxQkFBTSxJQUNILEdBQUcsS0FBSyxHQUFHO29CQUNYLEdBQUcsS0FBSyxHQUFHO29CQUNYLEdBQUcsS0FBSyxHQUFHO29CQUNYLEdBQUcsS0FBSyxHQUFHO29CQUNYLEdB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LEVBQ2hDLHlCQUF5QixFQUN6QixDQUFDLEVBQ0QseUJBQXlCLENBQUMsTUFBTSxDQUNuQyxDQUFDO1FBRUYsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUMvQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDM0MsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMzQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ25ELFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDekQsUUFBUSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFekIsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQzsrR0FobkJRLHVCQUF1QjttSEFBdkIsdUJBQXVCLGNBRnBCLE1BQU07O1NBRVQsdUJBQXVCOzRGQUF2Qix1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuZXhwb3J0IGNsYXNzIElkZW50aXR5IHtcbiAgICBpZDtcbiAgICB1dWlkO1xuICAgIG5hbWU7XG4gICAgc3RhdHVzO1xuICAgIHR5cGU7XG4gICAgcm9vdE5vZGU7XG4gICAgc2VydmVyRWdyZXNzUHJvdG9jb2w7XG4gICAgc2VydmVyRWdyZXNzSG9zdDtcbiAgICBzZXJ2ZXJFZ3Jlc3NQb3J0O1xuICAgIHBvc3R1cmVDaGVja3M7XG4gICAgZXZlbnRzO1xuICAgIG9zO1xuICAgIHV0aWxpemF0aW9uO1xuICAgIGNoaWxkcmVuO1xuICAgIGNvbnRleHRNZW51O1xuICAgIG9ubGluZTtcbiAgICBvc1ZlcnNpb247XG4gICAgY3JlYXRlZEF0O1xuICAgIHVwZGF0ZWRBdDtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5yb290Tm9kZSA9ICdObyc7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgdGhpcy5jb250ZXh0TWVudSA9ICdZZXMnO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNlcnZpY2Uge1xuICAgIGlkO1xuICAgIHV1aWQ7XG4gICAgbmFtZTtcbiAgICBpbnRlcmNlcHRfaG9zdDtcbiAgICBpbnRlcmNlcHRfcG9ydDtcbiAgICBlbmNyeXB0ZWQ7XG4gICAgcm9vdE5vZGU7XG4gICAgc2VydmVyRWdyZXNzSG9zdDtcbiAgICBzZXJ2ZXJFZ3Jlc3NQb3J0O1xuICAgIHN0YXR1cztcbiAgICBwcm90b2NvbDtcbiAgICB0eXBlO1xuICAgIGNoaWxkcmVuO1xuICAgIGF0dHJpYnV0ZXM7XG4gICAgdXRpbGl6YXRpb247XG4gICAgY29udGV4dE1lbnU7XG4gICAgY3JlYXRlZEF0O1xuICAgIHVwZGF0ZWRBdDtcbiAgICBpbnRlcmNlcHQ7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucm9vdE5vZGUgPSAnTm8nO1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgICAgIHRoaXMuY29udGV4dE1lbnUgPSAnWWVzJztcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQ29uZmlnIHtcbiAgdXVpZDtcbiAgaWQ7XG4gIG5hbWU7XG4gIGRhdGE7XG4gIGNoaWxkcmVuO1xuICBjb250ZXh0TWVudTtcbiAgcm9vdE5vZGU7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgICAgdGhpcy5yb290Tm9kZSA9ICdObyc7XG4gICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgICB0aGlzLmNvbnRleHRNZW51ID0gJ1llcyc7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBHcm91cCB7XG4gICAgaWQ7XG4gICAgbmFtZTtcbiAgICB0eXBlO1xuICAgIGdyb3VwO1xuICAgIGNoaWxkcmVuO1xuXG4gICAgY29uc3RydWN0b3IoaWR2LCBzLCBnKSB7XG4gICAgICAgIHRoaXMuaWQgPSBpZHY7XG4gICAgICAgIHRoaXMubmFtZSA9IHM7XG4gICAgICAgIHRoaXMuZ3JvdXAgPSBnO1xuICAgICAgICB0aGlzLnR5cGUgPSAnR3JvdXAnO1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2VydmljZVBvbGljeSB7XG4gICAgaWQ7XG4gICAgdXVpZDtcbiAgICBuYW1lO1xuICAgIHR5cGU7XG4gICAgcm9vdE5vZGU7XG4gICAgY2hpbGRyZW47XG4gICAgY29udGV4dE1lbnU7XG4gICAgY3JlYXRlZEF0O1xuICAgIHVwZGF0ZWRBdDtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnJvb3ROb2RlID0gJ05vJztcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgICAgICB0aGlzLmNvbnRleHRNZW51ID0gJ1llcyc7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXR0cmlidXRlIHtcbiAgICBpZDtcbiAgICBuYW1lO1xuICAgIHR5cGU7XG4gICAgY2hpbGRyZW47XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVSUG9saWN5IHtcbiAgICBpZDtcbiAgICB1dWlkO1xuICAgIG5hbWU7XG4gICAgc3RhdHVzO1xuICAgIHNpemU7XG4gICAgdHlwZTtcbiAgICBzZW1hbnRpYztcbiAgICBpc1N5c3RlbTtcbiAgICByb290Tm9kZTtcbiAgICBjaGlsZHJlbjtcbiAgICBjb250ZXh0TWVudTtcbiAgICBjcmVhdGVkQXQ7XG4gICAgdXBkYXRlZEF0O1xuICAgIGRhdGE7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucm9vdE5vZGUgPSAnTm8nO1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgICAgIHRoaXMuY29udGV4dE1lbnUgPSAnWWVzJztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXJ2aWNlRVJQb2xpY3kge1xuICAgIGlkO1xuICAgIHV1aWQ7XG4gICAgbmFtZTtcbiAgICBzdGF0dXM7XG4gICAgc2l6ZTtcbiAgICB0eXBlO1xuICAgIHJvb3ROb2RlO1xuICAgIGNoaWxkcmVuO1xuICAgIGNvbnRleHRNZW51O1xuICAgIGNyZWF0ZWRBdDtcbiAgICB1cGRhdGVkQXQ7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5yb290Tm9kZSA9ICdObyc7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgdGhpcy5jb250ZXh0TWVudSA9ICdZZXMnO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVSb3V0ZXIge1xuICAgIGlkO1xuICAgIHV1aWQ7XG4gICAgbmFtZTtcbiAgICB2ZXJpZmllZDtcbiAgICBzaXplO1xuICAgIHR5cGU7XG4gICAgcHJvdmlkZXI7XG4gICAgcm9vdE5vZGU7XG4gICAgc2VydmVyRWdyZXNzUHJvdG9jb2w7XG4gICAgc2VydmVyRWdyZXNzSG9zdDtcbiAgICBzZXJ2ZXJFZ3Jlc3NQb3J0O1xuICAgIGNoaWxkcmVuO1xuICAgIHV0aWxpemF0aW9uO1xuICAgIGNvbnRleHRNZW51O1xuICAgIG9ubGluZTtcbiAgICBkaXNhYmxlZDtcbiAgICB2ZXJzaW9uO1xuICAgIHR1bm5lbGVyRW5hYmxlZDtcbiAgICBzeW5jU3RhdHVzO1xuICAgIGNyZWF0ZWRBdDtcbiAgICB1cGRhdGVkQXQ7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5yb290Tm9kZSA9ICdObyc7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgdGhpcy5jb250ZXh0TWVudSA9ICdZZXMnO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENoaWxkcmVuIHtcbiAgICBpZDtcbiAgICBuYW1lO1xuICAgIHN0YXR1cztcbiAgICBzaXplO1xuICAgIHR5cGU7XG4gICAgY2hpbGRyZW47XG4gICAgZGF0YTogQ2hpbGRyZW47XG4gICAgcm9vdE5vZGUgPSAnTm8nO1xuICAgIGZpcnN0Q2hpbGQgPSAnTm8nO1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnR5cGUgPSAnQ2hpbGRyZW4nO1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgfVxufVxuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBOZXR3b3JrVmlzdWFsaXplckhlbHBlciB7XG5cbiAgIHVuaXFJSWQ6YW55ID0wO1xuXG4gY3JlYXRlVW5pcUlkKCkge1xuICAgcmV0dXJuICsrdGhpcy51bmlxSUlkO1xuIH1cbiAgcHVibGljIGNyZWF0ZUVkZ2VSb3V0ZXJOb2RlKGVyLCBpc1Jvb3ROb2RlID0gJ1llcycpIHtcbiAgICAgIGNvbnN0IGVyT2IgPSBuZXcgRVJvdXRlcigpO1xuICAgICAgLy8gZXJPYi5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgICBlck9iLnV1aWQgPSBlci5pZDtcbiAgICAgICAgIGVyT2IubmFtZSA9IGVyLm5hbWU7XG4gICAgICAgICBlck9iLnZlcmlmaWVkID0gZXIuaXNWZXJpZmllZD8gJ1llcyc6ICdObyc7XG4gICAgICAgICAvL2VyT2IudmVyc2lvbiA9IGVyLnByb2R1Y3RWZXJzaW9uO1xuICAgICAgICAgZXJPYi5vbmxpbmUgPSBlci5pc09ubGluZT8gJ1llcyc6ICdObyc7XG4gICAgICAgICBlck9iLmRpc2FibGVkID0gZXIuZGlzYWJsZWQ/ICdZZXMnOiAnTm8nO1xuICAgICAgICAgZXJPYi50eXBlID0gJ0VkZ2UgUm91dGVyJztcbiAgICAgICAgIGVyT2Iucm9vdE5vZGUgPSBpc1Jvb3ROb2RlO1xuICAgICAgICAgZXJPYi50dW5uZWxlckVuYWJsZWQgPSBlci50dW5uZWxlckVuYWJsZWQ/IGVyLnR1bm5lbGVyRW5hYmxlZDogJ05vJztcbiAgICAgICAgIGVyT2Iuc3luY1N0YXR1cyA9IGVyLnN5bmNTdGF0dXM/IGVyLnN5bmNTdGF0dXM6J05vJztcbiAgICAgICAgIGVyT2IuY3JlYXRlZEF0ID0gZXIuY3JlYXRlZEF0O1xuICAgICAgICAgZXJPYi51cGRhdGVkQXQgPSBlci51cGRhdGVkQXQ7XG4gICByZXR1cm4gZXJPYjtcbiAgfVxuICBwdWJsaWMgY3JlYXRlU2VydmljZUVkZ2VSb3V0ZXJQb2xpY3lOb2RlKHJhd09iaiwgaXNSb290Tm9kZSA9ICdZZXMnKSB7XG4gICAgIGNvbnN0IHNlcnZpY2VlcnBvbGljeSA9IG5ldyBTZXJ2aWNlRVJQb2xpY3koKTtcbiAgICAgLy8gc2VydmljZWVycG9saWN5LmlkID0gY3JlYXRlSWQoKTtcbiAgICAgc2VydmljZWVycG9saWN5LnV1aWQgPSByYXdPYmouaWQ7XG4gICAgIHNlcnZpY2VlcnBvbGljeS5uYW1lID0gcmF3T2JqLm5hbWU7XG4gICAgIHNlcnZpY2VlcnBvbGljeS50eXBlID0gJ1NlcnZpY2UgUm91dGVyIFBvbGljeSc7XG4gICAgIHNlcnZpY2VlcnBvbGljeS5yb290Tm9kZSA9IGlzUm9vdE5vZGU7XG4gICAgcmV0dXJuIHNlcnZpY2VlcnBvbGljeTtcbiAgfVxuICBwdWJsaWMgY3JlYXRlRWRnZVJvdXRlclBvbGljeU5vZGUocmF3T2JqLCBpc1Jvb3ROb2RlID0gJ1llcycpIHtcbiAgICBjb25zdCBlcnBvbGljeSA9IG5ldyBFUlBvbGljeSgpO1xuICAgICAvLyBlcnBvbGljeS5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICBlcnBvbGljeS51dWlkID0gcmF3T2JqLmlkO1xuICAgICAgZXJwb2xpY3kubmFtZSA9IHJhd09iai5uYW1lO1xuICAgICAgZXJwb2xpY3kudHlwZSA9ICdSb3V0ZXIgUG9saWN5JztcbiAgICAgIGVycG9saWN5LnJvb3ROb2RlID0gaXNSb290Tm9kZTtcbiAgICAgIGVycG9saWN5LmlzU3lzdGVtID0gcmF3T2JqLmlzU3lzdGVtO1xuICAgICAgZXJwb2xpY3kuc2VtYW50aWMgPSByYXdPYmouc2VtYW50aWM7XG4gICByZXR1cm4gZXJwb2xpY3k7XG4gIH1cbiAgcHVibGljIGNyZWF0ZVNlcnZpY2VQb2xpY3lOb2RlKHJhd09iaiwgaXNSb290Tm9kZSA9ICdZZXMnKSB7XG4gICAgY29uc3QgYmluZEdycCA9IG5ldyBHcm91cCg0MzQyMywgJ0JpbmQtUG9saWNpZXMnLCAnQmluZCBTZXJ2aWNlIFBvbGljeScpO1xuICAgIGNvbnN0IGRpYWxHcnAgPSBuZXcgR3JvdXAoNDM1NDUsICdEaWFsLVBvbGljaWVzJywgJ0RpYWwgU2VydmljZSBQb2xpY3knKTtcblxuICAgIGNvbnN0IHNwb2xpY3k6YW55ID0gbmV3IFNlcnZpY2VQb2xpY3koKTtcbiAgICAgICAvLyBzcG9saWN5LmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICBzcG9saWN5LmlkID0gODc5NTY7XG4gICAgICAgIHNwb2xpY3kudXVpZCA9IHJhd09iai5pZDtcbiAgICAgICAgc3BvbGljeS5uYW1lID0gcmF3T2JqLm5hbWU7XG4gICAgICAgIHNwb2xpY3kudHlwZSA9ICdTZXJ2aWNlIFBvbGljeSc7XG4gICAgICAgIHNwb2xpY3kucm9vdE5vZGUgPSBpc1Jvb3ROb2RlO1xuICAgICAgICBzcG9saWN5LmNsaWNrUHJvY2VzcyA9IFwiTm90IFlldFwiO1xuICAgICAgaWYocmF3T2JqLnR5cGU9PT0nQmluZCcpIHtcbiAgICAgICAgYmluZEdycC5jaGlsZHJlbi5wdXNoKHNwb2xpY3kpO1xuICAgICAgICByZXR1cm4gYmluZEdycDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpYWxHcnAuY2hpbGRyZW4ucHVzaChzcG9saWN5KTtcbiAgICAgICAgcmV0dXJuIGRpYWxHcnA7XG4gICAgICB9XG4gIH1cbiAgcHVibGljIGNyZWF0ZUlkZW50aXR5Tm9kZShyYXdPYmosIGlzUm9vdE5vZGUgPSAnWWVzJykge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gbmV3IElkZW50aXR5KCk7XG4gICAgICAgICAgICBlbmRwb2ludC5yb290Tm9kZSA9IGlzUm9vdE5vZGU7XG4gICAgICAgICAgIC8vIGVuZHBvaW50LmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgICAgIGVuZHBvaW50LmlkID0gNTQzMjtcbiAgICAgICAgICAgIGVuZHBvaW50LnV1aWQgPSByYXdPYmouaWQ7XG4gICAgICAgICAgICBlbmRwb2ludC5uYW1lID0gcmF3T2JqLm5hbWU7XG4gICAgICAgICAgICBlbmRwb2ludC5vbmxpbmUgPSByYXdPYmouaGFzQXBpU2Vzc2lvbiA9PT0gdHJ1ZSA/ICdZZXMnIDogJ05vJztcbiAgICAgICAgICAgIGVuZHBvaW50LnR5cGUgPSAnSWRlbnRpdHknO1xuICAgICAgICAgICAgZW5kcG9pbnQuY3JlYXRlZEF0ID0gcmF3T2JqLmNyZWF0ZWRBdDtcbiAgICAgICAgICAgIGVuZHBvaW50LnVwZGF0ZWRBdCA9IHJhd09iai51cGRhdGVkQXQ7XG4gICAgICAgICAgICBlbmRwb2ludC5zdGF0dXMgPSByYXdPYmouc2RrSW5mbyAhPT0gbnVsbCA/ICdSZWdpc3RlcmVkJyA6ICdOb3QgUmVnaXN0ZXJlZCc7XG4gICAgICAgICAgICAgIGlmIChyYXdPYmouc2RrSW5mbykge1xuICAgICAgICAgICAgICAgICAgZW5kcG9pbnQub3MgPSByYXdPYmouc2RrSW5mby50eXBlPyByYXdPYmouc2RrSW5mby50eXBlOiByYXdPYmouc2RrSW5mby5hcHBJZDtcbiAgICAgICAgICAgICAgICAgIGVuZHBvaW50Lm9zVmVyc2lvbiA9IHJhd09iai5zZGtJbmZvLnZlcnNpb247XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHJhd09iai5hdXRoUG9saWN5ICYmIHJhd09iai5hdXRoUG9saWN5Lm5hbWUuaW5jbHVkZXMoXCJCcm93WmVyXCIpKSB7XG4gICAgICAgICAgICAgICAgIGVuZHBvaW50LnR5cGUgPSAnQnJvd1plciBJZGVudGl0eSc7XG4gICAgICAgICAgICAgIH1cbiAgICByZXR1cm4gICBlbmRwb2ludDtcbiAgfVxuICBwdWJsaWMgY3JlYXRlU2VydmljZU5vZGUocmF3T2JqLCBpc1Jvb3ROb2RlID0gJ1llcycpIHtcbiAgICAgIGNvbnN0IHNlcnZpY2VvYmogPSBuZXcgU2VydmljZSgpO1xuICAgICAgIC8vIHNlcnZpY2VvYmouaWQgPSBjcmVhdGVJZCgpO1xuICAgICAgICBzZXJ2aWNlb2JqLm5hbWUgPSByYXdPYmoubmFtZTtcbiAgICAgICAgc2VydmljZW9iai51dWlkID0gcmF3T2JqLmlkO1xuICAgICAgICBzZXJ2aWNlb2JqLnR5cGUgPSAnU2VydmljZSc7XG4gICAgICAgIHNlcnZpY2VvYmoucm9vdE5vZGUgPSBpc1Jvb3ROb2RlO1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzd2l0aE5hbWUgPSBbXTtcbiAgICAgICAgcmF3T2JqICYmIHJhd09iai5yb2xlQXR0cmlidXRlcyAmJiByYXdPYmoucm9sZUF0dHJpYnV0ZXMuZmluZCgoc3JhdHRyKSA9PiB7XG4gICAgICAgICAgIGF0dHJpYnV0ZXN3aXRoTmFtZS5wdXNoKHNyYXR0cik7XG4gICAgICAgIH0pO1xuICAgIHJldHVybiBzZXJ2aWNlb2JqO1xuICB9XG5cbiAgICBwdWJsaWMgZ2V0UmVzb3VyY2VUcmVlT2JqKFxuICAgICAgICBuZXR3b3JrTmFtZSxcbiAgICAgICAgbmV0d29ya1N0YXR1cyxcbiAgICAgICAgc2VydmljZXMsXG4gICAgICAgIGlkZW50aXRpZXMsXG4gICAgICAgIHNlcnZpY2VQb2xpY2llcyxcbiAgICAgICAgZWRnZXJvdXRlcnMsXG4gICAgICAgIGVkZ2VSb3V0ZXJQb2xpY2llcyxcbiAgICAgICAgc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llcyxcbiAgICAgICAgLy8gbmV0d29ya1Byb2R1Y3RWZXJzaW9uLFxuICAgICAgICBzZXJ2aWNlc190b3RhbENvdW50LCBpZGVudGl0aWVzX3RvdGFsQ291bnQsIGVkZ2Vyb3V0ZXJzX3RvdGFsQ291bnQsXG4gICAgICAgIHNlcnZpY2VfcG9saWNpZXNfdG90YWxDb3VudCwgZWRnZV9yb3V0ZXJfcG9saWNpZXNfdG90YWxDb3VudCxcbiAgICAgICAgc2VydmljZV9yb3V0ZXJfcG9saWNpZXNfdG90YWxDb3VudCxcbiAgICAgICAgdW5pcUlkLFxuICAgICAgICBsb2dnZXIsXG4gICAgICAgIC4uLmFyZ3M6IGFueVxuICAgICkge1xuICAgICAgIHRoaXMudW5pcUlJZCA9IHVuaXFJZDtcblxuICAgICAgICBmdW5jdGlvbiBjcmVhdGVJZCgpIHtcbiAgICAgICAgICAgICsrdW5pcUlkO1xuICAgICAgICAgIC8vICArK3RoaXMudW5pcUlJZDtcbiAgICAgICAgICAgIHJldHVybiB1bmlxSWQ7XG4gICAgICAgIH1cblxuICAgICAgICBjbGFzcyBSb290SnNvbiB7XG4gICAgICAgICAgICBpZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgICAgICBuYW1lO1xuICAgICAgICAgICAgbGFzdElkID0gMDtcbiAgICAgICAgICAgIGNoaWxkcmVuID0gW107XG4gICAgICAgICAgICBjb250ZXh0TWVudSA9ICdZZXMnO1xuICAgICAgICAgICAgdHlwZSA9ICdOZXR3b3JrJztcbiAgICAgICAgICAgIHJvb3ROb2RlID0gJ05vJztcbiAgICAgICAgICAgLy8gdmVyc2lvbiA9IG5ldHdvcmtQcm9kdWN0VmVyc2lvbjtcbiAgICAgICAgICAgIHN0YXR1cztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJvb3RKc29uID0gbmV3IFJvb3RKc29uKCk7XG4gICAgICAgIHJvb3RKc29uLm5hbWUgPSAnTmV0d29yayc7XG4gICAgICAgIHJvb3RKc29uLnN0YXR1cyA9ICdQcm92aXNpb25lZCc7XG5cbiAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc0lkZW50aXRpZXNGb3JUcmVlKFxuICAgICAgICAgICAgaWRlbnRpdGllc0NoaWxkcmVuLFxuICAgICAgICAgICAgaWRlbnRpdGllcyxcbiAgICAgICAgICAgIG54LFxuICAgICAgICAgICAgbnlcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYoYXJnc1syXT09PWZhbHNlKSByZXR1cm4gaWRlbnRpdGllc0NoaWxkcmVuO1xuICAgICAgICAgICAgY29uc3Qgb2JqX2FycmF5ID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gbng7IGogPCBueTsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kcG9pbnQgPSBuZXcgSWRlbnRpdHkoKTtcbiAgICAgICAgICAgICAgICBlbmRwb2ludC5yb290Tm9kZSA9ICdZZXMnO1xuICAgICAgICAgICAgICAgIGVuZHBvaW50LmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICBlbmRwb2ludC51dWlkID0gaWRlbnRpdGllc1tqXS5pZDtcbiAgICAgICAgICAgICAgICBlbmRwb2ludC5uYW1lID0gaWRlbnRpdGllc1tqXS5uYW1lO1xuICAgICAgICAgICAgICAgIGVuZHBvaW50Lm9ubGluZSA9IGlkZW50aXRpZXNbal0uaGFzQXBpU2Vzc2lvbiA9PT0gdHJ1ZSA/ICdZZXMnIDogJ05vJztcbiAgICAgICAgICAgICAgICBlbmRwb2ludC50eXBlID0gJ0lkZW50aXR5JztcbiAgICAgICAgICAgICAgICBlbmRwb2ludC5jcmVhdGVkQXQgPSBpZGVudGl0aWVzW2pdLmNyZWF0ZWRBdDtcbiAgICAgICAgICAgICAgICBlbmRwb2ludC51cGRhdGVkQXQgPSBpZGVudGl0aWVzW2pdLnVwZGF0ZWRBdDtcbiAgICAgICAgICAgICAgICBlbmRwb2ludC5zdGF0dXMgPSBpZGVudGl0aWVzW2pdLnNka0luZm8gIT09IG51bGwgPyAnUmVnaXN0ZXJlZCcgOiAnTm90IFJlZ2lzdGVyZWQnO1xuICAgICAgICAgICAgICAgIGlmIChpZGVudGl0aWVzW2pdLnNka0luZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQub3MgPSBpZGVudGl0aWVzW2pdLnNka0luZm8udHlwZT8gaWRlbnRpdGllc1tqXS5zZGtJbmZvLnR5cGU6IGlkZW50aXRpZXNbal0uc2RrSW5mby5hcHBJZDtcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQub3NWZXJzaW9uID0gaWRlbnRpdGllc1tqXS5zZGtJbmZvLnZlcnNpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpZGVudGl0aWVzW2pdLmF1dGhQb2xpY3kgJiYgaWRlbnRpdGllc1tqXS5hdXRoUG9saWN5Lm5hbWUuaW5jbHVkZXMoXCJCcm93WmVyXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgZW5kcG9pbnQudHlwZSA9ICdCcm93WmVyIElkZW50aXR5JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb2JqX2FycmF5LnB1c2goZW5kcG9pbnQpO1xuICAgICAgICAgICAgfSAvLyBlbmQgb2YgbWFpbiBmb3IgbG9vcFxuICAgICAgICAgIHJldHVybiBncm91cGluZygnSWRlbnRpdGllJywgaWRlbnRpdGllc0NoaWxkcmVuLCBvYmpfYXJyYXkpO1xuXG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc3ViR3JvdXBpbmcobmFtZSwgbWFpbkdyb3VwKSB7XG4gICAgICAgICAgIGNvbnN0IHBhZ2VTaXplID0gNTA7XG4gICAgICAgICAgIG1haW5Hcm91cC5jaGlsZHJlbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKG1haW5Hcm91cC5jaGlsZHJlbi5sZW5ndGggPiBwYWdlU2l6ZSkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW46YW55ID0gW107XG4gICAgICAgICAgICBsZXQgcGFnZU5vID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWFpbkdyb3VwLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdEVsZW1lbnQgPSAoaSArIHBhZ2VTaXplKSA8IG1haW5Hcm91cC5jaGlsZHJlbi5sZW5ndGg/IChpICsgcGFnZVNpemUpIDogKG1haW5Hcm91cC5jaGlsZHJlbi5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWVTID1cbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgKyAncyBbJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBtYWluR3JvdXAuY2hpbGRyZW5baV0ubmFtZS5zdWJzdHJpbmcoMCwgNCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyAtICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFpbkdyb3VwLmNoaWxkcmVuW2xhc3RFbGVtZW50LTFdLm5hbWUuc3Vic3RyaW5nKDAsIDQpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICddJztcbiAgICAgICAgICAgICAgICBjb25zdCBjaGxkID0gbmV3IEdyb3VwKFxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlSWQoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArICcgbmFtZSBzdGFydHMgd2l0aCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICBtYWluR3JvdXAuY2hpbGRyZW5baV0ubmFtZS5zdWJzdHJpbmcoMCwgNCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICcgVG8gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgbWFpbkdyb3VwLmNoaWxkcmVuW2xhc3RFbGVtZW50LTFdLm5hbWUuc3Vic3RyaW5nKDAsIDQpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBqID0gMDtcbiAgICAgICAgICAgICAgICBmb3IgKGogPSBpOyBqIDwgbGFzdEVsZW1lbnQ7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICAgY2hsZC5jaGlsZHJlbi5wdXNoKG1haW5Hcm91cC5jaGlsZHJlbltqXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAtLWk7XG4gICAgICAgICAgICAgICAgICBjaGxkLm5hbWUgPSBjaGxkLm5hbWUgKyAnICgnICsgY2hsZC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGNobGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWFpbkdyb3VwLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBtYWluR3JvdXA7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBncm91cGluZyhuYW1lLCBjaGlsZHJlbiwgb2JqZWN0c0FycmF5KSB7XG4gICAgICAgICAgbGV0IHByb3RvY29sUkRQR3JwLCBwcm90b2NvbEhUVFBTR3JwLCBwcm90b2NvbEhUVFBHcnAsIHByb3RvY29sRlRQR3JwLCB1bnJlZ2lzdGVyZWRHcnA7XG5cbiAgICAgICAgICBpZiAobmFtZSA9PT0gJ1NlcnZpY2UnKSB7XG4gICAgICAgICAgICAgcHJvdG9jb2xSRFBHcnAgPSBuZXcgR3JvdXAoXG4gICAgICAgICAgICAgICAgY3JlYXRlSWQoKSxcbiAgICAgICAgICAgICAgICAnU2VydmljZXMgW3Byb3RvY29sLVJEUF0nLFxuICAgICAgICAgICAgICAgICdTZXJ2aWNlcyBjcmVhdGVkIGZvciBSRFAgcHJvdG9jb2wnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgIHByb3RvY29sSFRUUFNHcnAgPSBuZXcgR3JvdXAoXG4gICAgICAgICAgICAgICAgY3JlYXRlSWQoKSxcbiAgICAgICAgICAgICAgICAnU2VydmljZXMgW3Byb3RvY29sLUhUVFBTXScsXG4gICAgICAgICAgICAgICAgJ1NlcnZpY2UgY3JlYXRlZCBmb3IgSFRUUFMgcHJvdG9jb2wnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgIHByb3RvY29sSFRUUEdycCA9IG5ldyBHcm91cChcbiAgICAgICAgICAgICAgICBjcmVhdGVJZCgpLFxuICAgICAgICAgICAgICAgICdTZXJ2aWNlcyBbcHJvdG9jb2wtSFRUUF0nLFxuICAgICAgICAgICAgICAgICdTZXJ2aWNlIGNyZWF0ZWQgZm9yIEhUVFAgcHJvdG9jb2wnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgIHByb3RvY29sRlRQR3JwID0gbmV3IEdyb3VwKGNyZWF0ZUlkKCksICdTZXJ2aWNlcyBbcHJvdG9jb2wtRlRQXScsICdTZXJ2aWNlIGNyZWF0ZWQgZm9yIEZUUCBwcm90b2NvbCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAgaWYgKG5hbWUgPT09ICdJZGVudGl0aWUnKSB7XG4gICAgICAgICAgICAgdW5yZWdpc3RlcmVkR3JwID0gbmV3IEdyb3VwKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVJZCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnSWRlbnRpdGllc1tVbnJlZ2lzdGVyZWRdJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0lkZW50aXRpZXMgdGhhdCBhcmUgbm90IHJlZ2lzdGVyZWQnXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFiY2RHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgbmFtZSArICdzIFtBLURdJywgbmFtZSArJyBuYW1lIHN0YXJ0cyB3aXRoIEEgdG8gRCcpO1xuICAgICAgICAgICAgY29uc3QgZWZnaEdycCA9IG5ldyBHcm91cChjcmVhdGVJZCgpLCBuYW1lICsgJ3MgW0UtSF0nLCBuYW1lICsnIG5hbWUgc3RhcnRzIHdpdGggRSB0byBIJyk7XG4gICAgICAgICAgICBjb25zdCBpamtsR3JwID0gbmV3IEdyb3VwKGNyZWF0ZUlkKCksIG5hbWUgKyAncyBbSS1MXScsIG5hbWUgKycgbmFtZSBzdGFydHMgd2l0aCBJIHRvIEwnKTtcbiAgICAgICAgICAgIGNvbnN0IG1ub3BHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgbmFtZSArICdzIFtNLVBdJywgbmFtZSArJyBuYW1lIHN0YXJ0cyB3aXRoIE0gdG8gUCcpO1xuICAgICAgICAgICAgY29uc3QgcXJzdEdycCA9IG5ldyBHcm91cChjcmVhdGVJZCgpLCBuYW1lICsgJ3MgW1EtVF0nLCBuYW1lICsnIG5hbWUgc3RhcnRzIHdpdGggUSB0byBUJyk7XG4gICAgICAgICAgICBjb25zdCB1dnd4R3JwID0gbmV3IEdyb3VwKGNyZWF0ZUlkKCksIG5hbWUgKyAncyBbVS1YXScsIG5hbWUgKycgbmFtZSBzdGFydHMgd2l0aCBVIHRvIFgnKTtcbiAgICAgICAgICAgIGNvbnN0IHl6R3JwID0gbmV3IEdyb3VwKGNyZWF0ZUlkKCksICAgbmFtZSArICdzIFtZLVpdJywgbmFtZSArJyBuYW1lIHN0YXJ0cyB3aXRoIFkgYW5kIFonKTtcbiAgICAgICAgICAgIGNvbnN0IG9uZVRvOUdycCA9IG5ldyBHcm91cChjcmVhdGVJZCgpLCBuYW1lICsgJ3MgWzEtOV0nLCBuYW1lICsnIG5hbWUgc3RhcnRzIHdpdGggMCB0byA5Jyk7XG4gICAgICAgICAgICBjb25zdCBzcGVjaWFsQ2hhckdycCA9IG5ldyBHcm91cChcbiAgICAgICAgICAgICAgICBjcmVhdGVJZCgpLFxuICAgICAgICAgICAgICAgIG5hbWUgKyAncyBbb3RoZXJzXScsXG4gICAgICAgICAgICAgICAgbmFtZSArICcgbmFtZSBzdGFydHMgd2l0aCBzcGVjaWFsIGNoYXJhY3RlcnMnXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9iamVjdHNBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9iaiA9IG9iamVjdHNBcnJheVtpXTtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGEgPSBvYmoubmFtZS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ0lkZW50aXRpZScgJiYgb2JqLnN0YXR1cyA9PT0gJ05vdCBSZWdpc3RlcmVkJykge1xuICAgICAgICAgICAgICAgICAgICB1bnJlZ2lzdGVyZWRHcnAuY2hpbGRyZW4ucHVzaChvYmopO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ1NlcnZpY2UnICYmIG9iai5wcm90b2NvbCA9PT0gJ3JkcCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2xSRFBHcnAuY2hpbGRyZW4ucHVzaChvYmopO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ1NlcnZpY2UnICYmIG9iai5wcm90b2NvbCA9PT0gJ2h0dHBzJykge1xuICAgICAgICAgICAgICAgICAgICBwcm90b2NvbEhUVFBTR3JwLmNoaWxkcmVuLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdTZXJ2aWNlJyAmJiBvYmoucHJvdG9jb2wgPT09ICdodHRwJykge1xuICAgICAgICAgICAgICAgICAgICBwcm90b2NvbEhUVFBHcnAuY2hpbGRyZW4ucHVzaChvYmopO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ1NlcnZpY2UnICYmICBvYmoucHJvdG9jb2wgPT09ICdmdHAnKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3RvY29sRlRQR3JwLmNoaWxkcmVuLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoYSA9PT0gJ2EnIHx8IGNoYSA9PT0gJ2InIHx8IGNoYSA9PT0gJ2MnIHx8IGNoYSA9PT0gJ2QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGFiY2RHcnAuY2hpbGRyZW4ucHVzaChvYmopO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhID09PSAnZScgfHwgY2hhID09PSAnZicgfHwgY2hhID09PSAnZycgfHwgY2hhID09PSAnaCcpIHtcbiAgICAgICAgICAgICAgICAgICAgZWZnaEdycC5jaGlsZHJlbi5wdXNoKG9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICdpJyB8fCBjaGEgPT09ICdqJyB8fCBjaGEgPT09ICdrJyB8fCBjaGEgPT09ICdsJykge1xuICAgICAgICAgICAgICAgICAgICBpamtsR3JwLmNoaWxkcmVuLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoYSA9PT0gJ20nIHx8IGNoYSA9PT0gJ24nIHx8IGNoYSA9PT0gJ28nIHx8IGNoYSA9PT0gJ3AnKSB7XG4gICAgICAgICAgICAgICAgICAgIG1ub3BHcnAuY2hpbGRyZW4ucHVzaChvYmopO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhID09PSAncScgfHwgY2hhID09PSAncicgfHwgY2hhID09PSAncycgfHwgY2hhID09PSAndCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcXJzdEdycC5jaGlsZHJlbi5wdXNoKG9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICd1JyB8fCBjaGEgPT09ICd2JyB8fCBjaGEgPT09ICd3JyB8fCBjaGEgPT09ICd4Jykge1xuICAgICAgICAgICAgICAgICAgICB1dnd4R3JwLmNoaWxkcmVuLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoYSA9PT0gJ3knIHx8IGNoYSA9PT0gJ3onKSB7XG4gICAgICAgICAgICAgICAgICAgIHl6R3JwLmNoaWxkcmVuLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICcwJyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICcxJyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICcyJyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICczJyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICc0JyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICc1JyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICc2JyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICc3JyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICc4JyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICc5J1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBvbmVUbzlHcnAuY2hpbGRyZW4ucHVzaChvYmopO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNwZWNpYWxDaGFyR3JwLmNoaWxkcmVuLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IC8vIGVuZCBtYWluIGZvciBsb29wXG5cbiAgICAgICAgICBpZiAobmFtZSA9PT0gJ1NlcnZpY2UnKSB7XG4gICAgICAgICAgICBpZiAocHJvdG9jb2xSRFBHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHByb3RvY29sUkRQR3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcHJvdG9jb2xSRFBHcnAubmFtZSA9IHByb3RvY29sUkRQR3JwLm5hbWUgKyAnKCcgKyBwcm90b2NvbFJEUEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4uY2hpbGRyZW4ucHVzaChwcm90b2NvbFJEUEdycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvdG9jb2xIVFRQU0dycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcHJvdG9jb2xIVFRQU0dycC5jaGlsZHJlbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHByb3RvY29sSFRUUFNHcnAubmFtZSA9IHByb3RvY29sSFRUUFNHcnAubmFtZSArICcoJyArIHByb3RvY29sSFRUUFNHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLmNoaWxkcmVuLnB1c2gocHJvdG9jb2xIVFRQU0dycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvdG9jb2xIVFRQR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBwcm90b2NvbEhUVFBHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBwcm90b2NvbEhUVFBHcnAubmFtZSA9IHByb3RvY29sSFRUUEdycC5uYW1lICsgJygnICsgcHJvdG9jb2xIVFRQR3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHByb3RvY29sSFRUUEdycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvdG9jb2xGVFBHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHByb3RvY29sRlRQR3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcHJvdG9jb2xGVFBHcnAubmFtZSA9IHByb3RvY29sRlRQR3JwLm5hbWUgKyAnKCcgKyBwcm90b2NvbEZUUEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4uY2hpbGRyZW4ucHVzaChwcm90b2NvbEZUUEdycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdJZGVudGl0aWUnICYmIHVucmVnaXN0ZXJlZEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdW5yZWdpc3RlcmVkR3JwLm5hbWUgPSB1bnJlZ2lzdGVyZWRHcnAubmFtZSArICcoJyArIHVucmVnaXN0ZXJlZEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4uY2hpbGRyZW4ucHVzaCh1bnJlZ2lzdGVyZWRHcnApO1xuICAgICAgICAgICAgICAgIHN1Ykdyb3VwaW5nKG5hbWUsIHVucmVnaXN0ZXJlZEdycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3BlY2lhbENoYXJHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHNwZWNpYWxDaGFyR3JwLm5hbWUgPSBzcGVjaWFsQ2hhckdycC5uYW1lICsgJygnICsgc3BlY2lhbENoYXJHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLmNoaWxkcmVuLnB1c2goc3BlY2lhbENoYXJHcnApO1xuICAgICAgICAgICAgICAgIHN1Ykdyb3VwaW5nKG5hbWUsIHNwZWNpYWxDaGFyR3JwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhYmNkR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBhYmNkR3JwLm5hbWUgPSBhYmNkR3JwLm5hbWUgKyAnKCcgKyBhYmNkR3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5jaGlsZHJlbi5wdXNoKGFiY2RHcnApO1xuICAgICAgICAgICAgICAgIHN1Ykdyb3VwaW5nKG5hbWUsIGFiY2RHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVmZ2hHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGVmZ2hHcnAubmFtZSA9IGVmZ2hHcnAubmFtZSArICcoJyArIGVmZ2hHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLmNoaWxkcmVuLnB1c2goZWZnaEdycCk7XG4gICAgICAgICAgICAgICAgc3ViR3JvdXBpbmcobmFtZSwgZWZnaEdycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaWprbEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWprbEdycC5uYW1lID0gaWprbEdycC5uYW1lICsgJygnICsgaWprbEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4uY2hpbGRyZW4ucHVzaChpamtsR3JwKTtcbiAgICAgICAgICAgICAgICBzdWJHcm91cGluZyhuYW1lLCBpamtsR3JwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtbm9wR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBtbm9wR3JwLm5hbWUgPSBtbm9wR3JwLm5hbWUgKyAnKCcgKyBtbm9wR3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5jaGlsZHJlbi5wdXNoKG1ub3BHcnApO1xuICAgICAgICAgICAgICAgIHN1Ykdyb3VwaW5nKG5hbWUsIG1ub3BHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHFyc3RHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHFyc3RHcnAubmFtZSA9IHFyc3RHcnAubmFtZSArICcoJyArIHFyc3RHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLmNoaWxkcmVuLnB1c2gocXJzdEdycCk7XG4gICAgICAgICAgICAgICAgc3ViR3JvdXBpbmcobmFtZSwgcXJzdEdycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodXZ3eEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdXZ3eEdycC5uYW1lID0gdXZ3eEdycC5uYW1lICsgJygnICsgdXZ3eEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4uY2hpbGRyZW4ucHVzaCh1dnd4R3JwKTtcbiAgICAgICAgICAgICAgICBzdWJHcm91cGluZyhuYW1lLCB1dnd4R3JwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh5ekdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgeXpHcnAubmFtZSA9IHl6R3JwLm5hbWUgKyAnKCcgKyB5ekdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4uY2hpbGRyZW4ucHVzaCh5ekdycCk7XG4gICAgICAgICAgICAgICAgc3ViR3JvdXBpbmcobmFtZSwgeXpHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9uZVRvOUdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgb25lVG85R3JwLm5hbWUgPSBvbmVUbzlHcnAubmFtZSArICcoJyArIG9uZVRvOUdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4uY2hpbGRyZW4ucHVzaChvbmVUbzlHcnApO1xuICAgICAgICAgICAgICAgIHN1Ykdyb3VwaW5nKG5hbWUsIG9uZVRvOUdycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBwcm9jZXNzU2VydmljZVBvbGljaWVzRm9yVHJlZShcbiAgICAgICAgICAgIHNlcnZpY2VQb2xpY3lDaGlsZHJlbixcbiAgICAgICAgICAgIHNlcnZpY2VQb2xpY2llcyxcbiAgICAgICAgICAgIG54LFxuICAgICAgICAgICAgbnlcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYoYXJnc1swXT09PWZhbHNlKSByZXR1cm4gc2VydmljZVBvbGljeUNoaWxkcmVuO1xuXG4gICAgICAgICAgY29uc3QgYmluZEdycCA9IG5ldyBHcm91cChjcmVhdGVJZCgpLCAnQmluZC1Qb2xpY2llcycsICdCaW5kIFNlcnZpY2UgUG9saWN5Jyk7XG4gICAgICAgICAgY29uc3QgZGlhbEdycCA9IG5ldyBHcm91cChjcmVhdGVJZCgpLCAnRGlhbC1Qb2xpY2llcycsICdEaWFsIFNlcnZpY2UgUG9saWN5Jyk7XG5cbiAgICAgICAgICBzZXJ2aWNlUG9saWNpZXMuZm9yRWFjaCggKHNwKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzcG9saWN5ID0gbmV3IFNlcnZpY2VQb2xpY3koKTtcbiAgICAgICAgICAgICAgICBzcG9saWN5LmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICBzcG9saWN5LnV1aWQgPSBzcC5pZDtcbiAgICAgICAgICAgICAgICBzcG9saWN5Lm5hbWUgPSBzcC5uYW1lO1xuICAgICAgICAgICAgICAgIHNwb2xpY3kudHlwZSA9ICdTZXJ2aWNlIFBvbGljeSc7XG4gICAgICAgICAgICAgICAgc3BvbGljeS5yb290Tm9kZSA9ICdZZXMnO1xuICAgICAgICAgICAgICAgIGlmKHNwLnR5cGU9PT0nQmluZCcpIHtcbiAgICAgICAgICAgICAgICAgIGJpbmRHcnAuY2hpbGRyZW4ucHVzaChzcG9saWN5KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgZGlhbEdycC5jaGlsZHJlbi5wdXNoKHNwb2xpY3kpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICB9ICk7XG5cbiAgICAgICAgICAgYmluZEdycC5uYW1lID0gYmluZEdycC5uYW1lICsgJygnKyBiaW5kR3JwLmNoaWxkcmVuLmxlbmd0aCArJyknO1xuICAgICAgICAgICBzZXJ2aWNlUG9saWN5Q2hpbGRyZW4uY2hpbGRyZW4ucHVzaChiaW5kR3JwKTtcbiAgICAgICAgICAgc3ViR3JvdXBpbmcoJ0JpbmQtUG9saWNpZScsIGJpbmRHcnApO1xuICAgICAgICAgICBkaWFsR3JwLm5hbWUgPSBkaWFsR3JwLm5hbWUgKyAnKCcrIGRpYWxHcnAuY2hpbGRyZW4ubGVuZ3RoICsnKSc7XG4gICAgICAgICAgIHNlcnZpY2VQb2xpY3lDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKGRpYWxHcnApO1xuICAgICAgICAgICBzdWJHcm91cGluZygnRGlhbC1Qb2xpY2llJywgZGlhbEdycCk7XG4gICAgICAgICAgcmV0dXJuIHNlcnZpY2VQb2xpY3lDaGlsZHJlbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NTZXJ2aWNlc0ZvclRyZWUoXG4gICAgICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuLFxuICAgICAgICAgICAgc2VydmljZXMsXG4gICAgICAgICAgICBueCxcbiAgICAgICAgICAgIG55XG4gICAgICAgICkge1xuICAgICAgICAgIGlmKGFyZ3NbMV09PT1mYWxzZSkgcmV0dXJuIHNlcnZpY2VzQ2hpbGRyZW47XG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlc3RyZWUgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBueDsgaSA8IG55OyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZXJ2aWNlb2JqID0gbmV3IFNlcnZpY2UoKTtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlb2JqLmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlb2JqLm5hbWUgPSBzZXJ2aWNlc1tpXS5uYW1lO1xuICAgICAgICAgICAgICAgIHNlcnZpY2VvYmoudXVpZCA9IHNlcnZpY2VzW2ldLmlkO1xuICAgICAgICAgICAgICAgIHNlcnZpY2VvYmoudHlwZSA9ICdTZXJ2aWNlJztcbiAgICAgICAgICAgICAgICBzZXJ2aWNlb2JqLnJvb3ROb2RlID0gJ1llcyc7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzd2l0aE5hbWUgPSBbXTtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzd2l0aE5hbWUucHVzaCgnQCcgKyBzZXJ2aWNlc1tpXS5uYW1lKTtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlc1tpXSAmJiBzZXJ2aWNlc1tpXS5yb2xlQXR0cmlidXRlcyAmJiBzZXJ2aWNlc1tpXS5yb2xlQXR0cmlidXRlcy5maW5kKChzcmF0dHIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc3dpdGhOYW1lLnB1c2goc3JhdHRyKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGxldCBpc0l0UkRQUHJvdG9jb2xBdHRyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbGV0IGlzSXRIVFRQUHJvdG9jb2xBdHRyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbGV0IGlzSXRIVFRQU1Byb3RvY29sQXR0ciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCBpc0l0RlRQUHJvdG9jb2xBdHRyID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGF0dHJpYnV0ZXN3aXRoTmFtZS5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhdHRyT2IgPSBuZXcgQXR0cmlidXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJPYi5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJPYi5uYW1lID0gYXR0cmlidXRlc3dpdGhOYW1lW2tdO1xuICAgICAgICAgICAgICAgICAgICBhdHRyT2IudHlwZSA9ICdTZXJ2aWNlIEF0dHJpYnV0ZSc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0dE5hbWUgPSBhdHRyaWJ1dGVzd2l0aE5hbWVba10udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzSXRSRFBQcm90b2NvbEF0dHIgPT09IGZhbHNlICYmIGF0dE5hbWUuaW5jbHVkZXMoJ3JkcCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlb2JqLnByb3RvY29sID0gJ3JkcCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0l0UkRQUHJvdG9jb2xBdHRyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNJdEhUVFBTUHJvdG9jb2xBdHRyID09PSBmYWxzZSAmJiBhdHROYW1lLmluY2x1ZGVzKCdodHRwcycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlb2JqLnByb3RvY29sID0gJ2h0dHBzJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzSXRIVFRQU1Byb3RvY29sQXR0ciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzSXRIVFRQU1Byb3RvY29sQXR0ciA9PT0gZmFsc2UgJiYgaXNJdEhUVFBQcm90b2NvbEF0dHIgPT09IGZhbHNlICYmIGF0dE5hbWUuaW5jbHVkZXMoJ2h0dHAnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZW9iai5wcm90b2NvbCA9ICdodHRwJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzSXRIVFRQUHJvdG9jb2xBdHRyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNJdEZUUFByb3RvY29sQXR0ciA9PT0gZmFsc2UgJiYgYXR0TmFtZS5pbmNsdWRlcygnZnRwJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VvYmoucHJvdG9jb2wgPSAnZnRwJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzSXRGVFBQcm90b2NvbEF0dHIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSAvLyBlbmQgaW5uZXIgZm9yIGxvb3BcbiAgICAgICAgICAgICAgICBzZXJ2aWNlc3RyZWUucHVzaChzZXJ2aWNlb2JqKTtcbiAgICAgICAgICAgIH0gLy8gZW5kIGZvciBsb29wXG4gICAgICAgICAgICByZXR1cm4gZ3JvdXBpbmcoJ1NlcnZpY2UnLCBzZXJ2aWNlc0NoaWxkcmVuLCBzZXJ2aWNlc3RyZWUpO1xuICAgICAgICB9IC8vIGVuZCBvZiBwcm9jZXNzU2VydmljZXNGb3JUcmVlXG5cbiAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc0VkZ2VSb3V0ZXJQb2xpY2llc0ZvclRyZWUoXG4gICAgICAgICAgICBlZGdlUm91dGVyUG9saWNpZXNDaGlsZHJlbixcbiAgICAgICAgICAgIGVkZ2VSb3V0ZXJQb2xpY2llcyxcbiAgICAgICAgICAgIG54LFxuICAgICAgICAgICAgbnlcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYoYXJnc1s0XT09PWZhbHNlKSByZXR1cm4gZWRnZVJvdXRlclBvbGljaWVzQ2hpbGRyZW47XG4gICAgICAgICAgY29uc3QgcG9saWNpZXNfQXJyYXkgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBueDsgaSA8IG55OyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnBvbGljeSA9IG5ldyBFUlBvbGljeSgpO1xuICAgICAgICAgICAgICAgIGVycG9saWN5LmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICBlcnBvbGljeS51dWlkID0gZWRnZVJvdXRlclBvbGljaWVzW2ldLmlkO1xuICAgICAgICAgICAgICAgIGVycG9saWN5Lm5hbWUgPSBlZGdlUm91dGVyUG9saWNpZXNbaV0ubmFtZTtcbiAgICAgICAgICAgICAgICBlcnBvbGljeS50eXBlID0gJ1JvdXRlciBQb2xpY3knO1xuICAgICAgICAgICAgICAgIGVycG9saWN5LnJvb3ROb2RlID0gJ1llcyc7XG4gICAgICAgICAgICAgICAgZXJwb2xpY3kuaXNTeXN0ZW0gPSBlZGdlUm91dGVyUG9saWNpZXNbaV0uaXNTeXN0ZW07XG4gICAgICAgICAgICAgICAgZXJwb2xpY3kuc2VtYW50aWMgPSBlZGdlUm91dGVyUG9saWNpZXNbaV0uc2VtYW50aWM7XG4gICAgICAgICAgICAgICAgcG9saWNpZXNfQXJyYXkucHVzaChlcnBvbGljeSk7XG4gICAgICAgICAgICB9IC8vIGVuZCBvZiBtYWluIGZvciBsb29wXG4gICAgICAgICAgICByZXR1cm4gZ3JvdXBpbmcoJ1JvdXRlclBvbGljaWVzJyxlZGdlUm91dGVyUG9saWNpZXNDaGlsZHJlbixwb2xpY2llc19BcnJheSk7XG4gICAgICAgIH0gLy8gZW5kXG5cbiAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc1NlcnZpY2VFZGdlUm91dGVyUG9saWNpZXNGb3JUcmVlKFxuICAgICAgICAgICAgc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llc0NoaWxkcmVuLFxuICAgICAgICAgICAgc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llcyxcbiAgICAgICAgICAgIG54LFxuICAgICAgICAgICAgbnlcbiAgICAgICAgKSB7XG4gICAgICAgIGlmKGFyZ3NbNV09PT1mYWxzZSkgcmV0dXJuIHNlcnZpY2VFZGdlUm91dGVyUG9saWNpZXNDaGlsZHJlbjtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBueDsgaSA8IG55OyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZXJ2aWNlZXJwb2xpY3kgPSBuZXcgU2VydmljZUVSUG9saWN5KCk7XG4gICAgICAgICAgICAgICAgc2VydmljZWVycG9saWN5LmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlZXJwb2xpY3kudXVpZCA9IHNlcnZpY2VFZGdlUm91dGVyUG9saWNpZXNbaV0uaWQ7XG4gICAgICAgICAgICAgICAgc2VydmljZWVycG9saWN5Lm5hbWUgPSBzZXJ2aWNlRWRnZVJvdXRlclBvbGljaWVzW2ldLm5hbWU7XG4gICAgICAgICAgICAgICAgc2VydmljZWVycG9saWN5LnR5cGUgPSAnU2VydmljZSBSb3V0ZXIgUG9saWN5JztcbiAgICAgICAgICAgICAgICBzZXJ2aWNlZXJwb2xpY3kucm9vdE5vZGUgPSAnWWVzJztcbiAgICAgICAgICAgICAgICBzZXJ2aWNlRWRnZVJvdXRlclBvbGljaWVzQ2hpbGRyZW4uY2hpbGRyZW4ucHVzaChzZXJ2aWNlZXJwb2xpY3kpO1xuICAgICAgICAgICAgfSAvLyBlbmQgb2YgbWFpbiBmb3IgbG9vcFxuICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2VFZGdlUm91dGVyUG9saWNpZXNDaGlsZHJlbjtcbiAgICAgICAgfSAvLyBlbmRcblxuICAgICAgICBmdW5jdGlvbiBwcm9jZXNzRWRnZVJvdXRlcnNGb3JUcmVlKFxuICAgICAgICAgICAgcm91dGVyc0NoaWxkcmVuLFxuICAgICAgICAgICAgZWRnZXJvdXRlcnMsXG4gICAgICAgICAgICBueCxcbiAgICAgICAgICAgIG55XG4gICAgICAgICkge1xuICAgICAgICBpZihhcmdzWzNdPT09ZmFsc2UpIHJldHVybiByb3V0ZXJzQ2hpbGRyZW47XG5cbiAgICAgICAgICAgIGNvbnN0IGVyX29iamVjdHMgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBueDsgaSA8IG55OyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlck9iID0gbmV3IEVSb3V0ZXIoKTtcbiAgICAgICAgICAgICAgICBlck9iLmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlciA9IGVkZ2Vyb3V0ZXJzW2ldO1xuICAgICAgICAgICAgICAgIGlmIChlcikge1xuICAgICAgICAgICAgICAgICAgICBlck9iLnV1aWQgPSBlci5pZDtcbiAgICAgICAgICAgICAgICAgICAgZXJPYi5uYW1lID0gZXIubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgZXJPYi52ZXJpZmllZCA9IGVyLmlzVmVyaWZpZWQ/ICdZZXMnOiAnTm8nO1xuICAgICAgICAgICAgICAgICAgICAvL2VyT2IudmVyc2lvbiA9IGVyLnByb2R1Y3RWZXJzaW9uO1xuICAgICAgICAgICAgICAgICAgICBlck9iLm9ubGluZSA9IGVyLmlzT25saW5lPyAnWWVzJzogJ05vJztcbiAgICAgICAgICAgICAgICAgICAgZXJPYi5kaXNhYmxlZCA9IGVyLmRpc2FibGVkPyAnWWVzJzogJ05vJztcbiAgICAgICAgICAgICAgICAgICAgZXJPYi50eXBlID0gJ0VkZ2UgUm91dGVyJztcbiAgICAgICAgICAgICAgICAgICAgZXJPYi5yb290Tm9kZSA9ICdZZXMnO1xuICAgICAgICAgICAgICAgICAgICBlck9iLnR1bm5lbGVyRW5hYmxlZCA9IGVyLnR1bm5lbGVyRW5hYmxlZD8gZXIudHVubmVsZXJFbmFibGVkOiAnTm8nO1xuICAgICAgICAgICAgICAgICAgICBlck9iLnN5bmNTdGF0dXMgPSBlci5zeW5jU3RhdHVzPyBlci5zeW5jU3RhdHVzOidObyc7XG4gICAgICAgICAgICAgICAgICAgIGVyT2IuY3JlYXRlZEF0ID0gZXIuY3JlYXRlZEF0O1xuICAgICAgICAgICAgICAgICAgICBlck9iLnVwZGF0ZWRBdCA9IGVyLnVwZGF0ZWRBdDtcbiAgICAgICAgICAgICAgICAgICAgZXJfb2JqZWN0cy5wdXNoKGVyT2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gLy8gZW5kIG1haW4gZm9yIGxvb3BcbiAgICAgICAgICAgLy8gcmV0dXJuIHJvdXRlcnNDaGlsZHJlbjtcbiAgICAgICAgICAgcmV0dXJuIGdyb3VwaW5nKCdSb3V0ZXInLCByb3V0ZXJzQ2hpbGRyZW4sIGVyX29iamVjdHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY3JlYXRlSWQoKSBnZW5lcmF0ZXMgbm9kZSBJZCAxLDIsMyw0LDUgZm9yIHRoZSBmb2xsb3dpbmcgZml2ZSBub2Rlcy4gdGhpcyBpZCBpcyB1c2VkIHRvIHNlYXJjaCBjYXBhYmlsaXR5LlxuICAgICAgICBsZXQgc2VydmljUG9saWNpZXNDaGlsZHJlbiA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICBzZXJ2aWNQb2xpY2llc0NoaWxkcmVuLmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgc2VydmljUG9saWNpZXNDaGlsZHJlbi5maXJzdENoaWxkID0gJ1llcyc7XG4gICAgICAgIHNlcnZpY1BvbGljaWVzQ2hpbGRyZW4ubmFtZSA9ICdTZXJ2aWNlIFBvbGljaWVzKCcrIHNlcnZpY2VfcG9saWNpZXNfdG90YWxDb3VudCArJyknO1xuXG4gICAgICAgIGxldCBzZXJ2aWNlc0NoaWxkcmVuID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4uaWQgPSBjcmVhdGVJZCgpO1xuICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuLmZpcnN0Q2hpbGQgPSAnWWVzJztcbiAgICAgICAgc2VydmljZXNDaGlsZHJlbi5uYW1lID0gJ1NlcnZpY2VzKCcrIHNlcnZpY2VzX3RvdGFsQ291bnQgKycpJztcblxuICAgICAgICBsZXQgaWRlbnRpdGllc0NoaWxkcmVuID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgIGlkZW50aXRpZXNDaGlsZHJlbi5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgIGlkZW50aXRpZXNDaGlsZHJlbi5maXJzdENoaWxkID0gJ1llcyc7XG4gICAgICAgIGlkZW50aXRpZXNDaGlsZHJlbi5uYW1lID0gJ0lkZW50aXRpZXMoJysgaWRlbnRpdGllc190b3RhbENvdW50ICsnKSc7XG5cbiAgICAgICAgbGV0IGVkZ2Vyb3V0ZXJDaGlsZHJlbiA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICBlZGdlcm91dGVyQ2hpbGRyZW4uaWQgPSBjcmVhdGVJZCgpO1xuICAgICAgICBlZGdlcm91dGVyQ2hpbGRyZW4uZmlyc3RDaGlsZCA9ICdZZXMnO1xuICAgICAgICBlZGdlcm91dGVyQ2hpbGRyZW4ubmFtZSA9ICdFZGdlIFJvdXRlcnMoJysgZWRnZXJvdXRlcnNfdG90YWxDb3VudCArJyknO1xuXG4gICAgICAgIGxldCBlZGdlUm91dGVyUG9saWNpZXNDaGlsZHJlbiA9IG5ldyBDaGlsZHJlbigpO1xuICAgICAgICBlZGdlUm91dGVyUG9saWNpZXNDaGlsZHJlbi5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgIGVkZ2VSb3V0ZXJQb2xpY2llc0NoaWxkcmVuLmZpcnN0Q2hpbGQgPSAnWWVzJztcbiAgICAgICAgZWRnZVJvdXRlclBvbGljaWVzQ2hpbGRyZW4ubmFtZSA9ICdFZGdlIFJvdXRlciBQb2xpY2llcygnKyBlZGdlX3JvdXRlcl9wb2xpY2llc190b3RhbENvdW50ICsnKSc7XG5cbiAgICAgICAgbGV0IHNlcnZpY2VFZGdlUm91dGVyUG9saWNlc0NoaWxkcmVuID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgIHNlcnZpY2VFZGdlUm91dGVyUG9saWNlc0NoaWxkcmVuLmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2VzQ2hpbGRyZW4uZmlyc3RDaGlsZCA9ICdZZXMnO1xuICAgICAgICBzZXJ2aWNlRWRnZVJvdXRlclBvbGljZXNDaGlsZHJlbi5uYW1lID0gJ1NlcnZpY2UgRWRnZSBSb3V0ZXIgUG9saWNpZXMoJysgc2VydmljZV9yb3V0ZXJfcG9saWNpZXNfdG90YWxDb3VudCArJyknO1xuXG4gICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4gPSBwcm9jZXNzU2VydmljZXNGb3JUcmVlKFxuICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbixcbiAgICAgICAgICAgIHNlcnZpY2VzLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHNlcnZpY2VzLmxlbmd0aFxuICAgICAgICApO1xuXG4gICAgICAgIGVkZ2Vyb3V0ZXJDaGlsZHJlbiA9IHByb2Nlc3NFZGdlUm91dGVyc0ZvclRyZWUoXG4gICAgICAgICAgICBlZGdlcm91dGVyQ2hpbGRyZW4sXG4gICAgICAgICAgICBlZGdlcm91dGVycyxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBlZGdlcm91dGVycy5sZW5ndGhcbiAgICAgICAgKTtcblxuICAgICAgICBzZXJ2aWNQb2xpY2llc0NoaWxkcmVuID0gcHJvY2Vzc1NlcnZpY2VQb2xpY2llc0ZvclRyZWUoXG4gICAgICAgICAgICBzZXJ2aWNQb2xpY2llc0NoaWxkcmVuLFxuICAgICAgICAgICAgc2VydmljZVBvbGljaWVzLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHNlcnZpY2VQb2xpY2llcy5sZW5ndGhcbiAgICAgICAgKTtcblxuICAgICAgICBlZGdlUm91dGVyUG9saWNpZXNDaGlsZHJlbiA9IHByb2Nlc3NFZGdlUm91dGVyUG9saWNpZXNGb3JUcmVlKFxuICAgICAgICAgICAgZWRnZVJvdXRlclBvbGljaWVzQ2hpbGRyZW4sXG4gICAgICAgICAgICBlZGdlUm91dGVyUG9saWNpZXMsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgZWRnZVJvdXRlclBvbGljaWVzLmxlbmd0aFxuICAgICAgICApO1xuXG4gICAgICAgIGlkZW50aXRpZXNDaGlsZHJlbiA9IHByb2Nlc3NJZGVudGl0aWVzRm9yVHJlZShcbiAgICAgICAgICAgIGlkZW50aXRpZXNDaGlsZHJlbixcbiAgICAgICAgICAgIGlkZW50aXRpZXMsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgaWRlbnRpdGllcy5sZW5ndGhcbiAgICAgICAgKTtcbiAgICAgICAgLy9zZXJ2aWNlUm91dGVyUG9saWNpZXNcbiAgICAgICAgc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2VzQ2hpbGRyZW4gPSBwcm9jZXNzU2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llc0ZvclRyZWUoXG4gICAgICAgICAgICBzZXJ2aWNlRWRnZVJvdXRlclBvbGljZXNDaGlsZHJlbixcbiAgICAgICAgICAgIHNlcnZpY2VFZGdlUm91dGVyUG9saWNpZXMsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llcy5sZW5ndGhcbiAgICAgICAgKTtcblxuICAgICAgICByb290SnNvbi5jaGlsZHJlbi5wdXNoKHNlcnZpY1BvbGljaWVzQ2hpbGRyZW4pO1xuICAgICAgICByb290SnNvbi5jaGlsZHJlbi5wdXNoKHNlcnZpY2VzQ2hpbGRyZW4pO1xuICAgICAgICByb290SnNvbi5jaGlsZHJlbi5wdXNoKGlkZW50aXRpZXNDaGlsZHJlbik7XG4gICAgICAgIHJvb3RKc29uLmNoaWxkcmVuLnB1c2goZWRnZXJvdXRlckNoaWxkcmVuKTtcbiAgICAgICAgcm9vdEpzb24uY2hpbGRyZW4ucHVzaChlZGdlUm91dGVyUG9saWNpZXNDaGlsZHJlbik7XG4gICAgICAgIHJvb3RKc29uLmNoaWxkcmVuLnB1c2goc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2VzQ2hpbGRyZW4pO1xuICAgICAgICByb290SnNvbi5sYXN0SWQgPSB1bmlxSWQ7XG5cbiAgICAgICAgcmV0dXJuIHJvb3RKc29uO1xuICAgIH1cblxufVxuIl19
|