@openziti/ziti-console-lib 0.4.6 → 0.4.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/assets/images/visualizer/node-click.png +0 -0
  2. package/assets/styles/ziti.css +1 -0
  3. package/assets/svgs/cursor-pointer.svg +1 -0
  4. package/esm2022/lib/features/confirm/confirm.component.mjs +6 -4
  5. package/esm2022/lib/features/data-table/data-table-filter.service.mjs +2 -2
  6. package/esm2022/lib/features/data-table/data-table.component.mjs +13 -1
  7. package/esm2022/lib/features/data-table/table-filter-bar/filter-bar.component.mjs +4 -2
  8. package/esm2022/lib/features/data-table/table-hidden-columns-bar/hidden-columns-bar.component.mjs +3 -3
  9. package/esm2022/lib/features/dynamic-widgets/forwarding-config/forwarding-config.service.mjs +4 -4
  10. package/esm2022/lib/features/extendable/extensions-noop.service.mjs +3 -1
  11. package/esm2022/lib/features/preview-list/preview-list.component.mjs +48 -26
  12. package/esm2022/lib/features/projectable-forms/configuration/configuration-form.component.mjs +7 -5
  13. package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.component.mjs +6 -6
  14. package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.mjs +11 -10
  15. package/esm2022/lib/features/projectable-forms/identity/identity-form.component.mjs +6 -6
  16. package/esm2022/lib/features/projectable-forms/projectable-form.class.mjs +35 -9
  17. package/esm2022/lib/features/projectable-forms/service/service-form.component.mjs +8 -8
  18. package/esm2022/lib/features/projectable-forms/service/service-form.service.mjs +37 -31
  19. package/esm2022/lib/features/projectable-forms/service/simple-service/simple-service.component.mjs +89 -2
  20. package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.mjs +12 -11
  21. package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.component.mjs +7 -6
  22. package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.component.mjs +441 -259
  23. package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.helper.mjs +180 -63
  24. package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.treenodeprocessor.mjs +307 -118
  25. package/esm2022/lib/pages/configurations/configurations-page.service.mjs +2 -1
  26. package/esm2022/lib/pages/identities/identities-page.component.mjs +4 -4
  27. package/esm2022/lib/pages/identities/identities-page.service.mjs +11 -1
  28. package/esm2022/lib/pages/service-policies/service-policies-page.component.mjs +3 -3
  29. package/esm2022/lib/services/ziti-controller-data.service.mjs +8 -4
  30. package/esm2022/lib/shared/list-page-component.class.mjs +6 -4
  31. package/esm2022/public-api.mjs +2 -1
  32. package/fesm2022/openziti-ziti-console-lib.mjs +1228 -565
  33. package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
  34. package/lib/features/confirm/confirm.component.d.ts +2 -0
  35. package/lib/features/confirm/confirm.component.d.ts.map +1 -1
  36. package/lib/features/data-table/data-table-filter.service.d.ts +2 -0
  37. package/lib/features/data-table/data-table-filter.service.d.ts.map +1 -1
  38. package/lib/features/data-table/data-table.component.d.ts.map +1 -1
  39. package/lib/features/data-table/table-filter-bar/filter-bar.component.d.ts.map +1 -1
  40. package/lib/features/extendable/extensions-noop.service.d.ts +2 -0
  41. package/lib/features/extendable/extensions-noop.service.d.ts.map +1 -1
  42. package/lib/features/preview-list/preview-list.component.d.ts +10 -5
  43. package/lib/features/preview-list/preview-list.component.d.ts.map +1 -1
  44. package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts +2 -1
  45. package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts.map +1 -1
  46. package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts +2 -1
  47. package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts.map +1 -1
  48. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts +2 -1
  49. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts.map +1 -1
  50. package/lib/features/projectable-forms/identity/identity-form.component.d.ts +2 -1
  51. package/lib/features/projectable-forms/identity/identity-form.component.d.ts.map +1 -1
  52. package/lib/features/projectable-forms/projectable-form.class.d.ts +6 -1
  53. package/lib/features/projectable-forms/projectable-form.class.d.ts.map +1 -1
  54. package/lib/features/projectable-forms/service/service-form.component.d.ts +2 -1
  55. package/lib/features/projectable-forms/service/service-form.component.d.ts.map +1 -1
  56. package/lib/features/projectable-forms/service/service-form.service.d.ts +6 -3
  57. package/lib/features/projectable-forms/service/service-form.service.d.ts.map +1 -1
  58. package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts +2 -0
  59. package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts.map +1 -1
  60. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts +2 -1
  61. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts.map +1 -1
  62. package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts +2 -1
  63. package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts.map +1 -1
  64. package/lib/features/visualizer/network-visualizer/network-visualizer.component.d.ts +36 -20
  65. package/lib/features/visualizer/network-visualizer/network-visualizer.component.d.ts.map +1 -1
  66. package/lib/features/visualizer/network-visualizer/network-visualizer.helper.d.ts +42 -1
  67. package/lib/features/visualizer/network-visualizer/network-visualizer.helper.d.ts.map +1 -1
  68. package/lib/features/visualizer/network-visualizer/network-visualizer.treenodeprocessor.d.ts +6 -2
  69. package/lib/features/visualizer/network-visualizer/network-visualizer.treenodeprocessor.d.ts.map +1 -1
  70. package/lib/pages/configurations/configurations-page.service.d.ts.map +1 -1
  71. package/lib/pages/identities/identities-page.component.d.ts +1 -1
  72. package/lib/pages/identities/identities-page.component.d.ts.map +1 -1
  73. package/lib/pages/identities/identities-page.service.d.ts.map +1 -1
  74. package/lib/services/ziti-controller-data.service.d.ts.map +1 -1
  75. package/lib/shared/list-page-component.class.d.ts +3 -1
  76. package/lib/shared/list-page-component.class.d.ts.map +1 -1
  77. package/package.json +1 -1
  78. package/public-api.d.ts +1 -0
  79. package/public-api.d.ts.map +1 -1
@@ -14,6 +14,13 @@ export class Service {
14
14
  this.contextMenu = 'Yes';
15
15
  }
16
16
  }
17
+ export class Config {
18
+ constructor() {
19
+ this.rootNode = 'No';
20
+ this.children = [];
21
+ this.contextMenu = 'Yes';
22
+ }
23
+ }
17
24
  export class Group {
18
25
  constructor(idv, s, g) {
19
26
  this.id = idv;
@@ -58,16 +65,118 @@ export class ERouter {
58
65
  }
59
66
  export class Children {
60
67
  constructor() {
68
+ this.rootNode = 'No';
69
+ this.firstChild = 'No';
61
70
  this.type = 'Children';
62
71
  this.children = [];
63
72
  }
64
73
  }
65
74
  class NetworkVisualizerHelper {
66
- getResourceTreeObj(networkName, networkStatus, services, endpoints, appwans, edgerouters, edgeRouterPolicies, serviceEdgeRouterPolicies,
75
+ constructor() {
76
+ this.uniqIId = 0;
77
+ }
78
+ createUniqId() {
79
+ return ++this.uniqIId;
80
+ }
81
+ createEdgeRouterNode(er, isRootNode = 'Yes') {
82
+ const erOb = new ERouter();
83
+ // erOb.id = createId();
84
+ erOb.uuid = er.id;
85
+ erOb.name = er.name;
86
+ erOb.verified = er.isVerified ? 'Yes' : 'No';
87
+ //erOb.version = er.productVersion;
88
+ erOb.online = er.isOnline ? 'Yes' : 'No';
89
+ erOb.disabled = er.disabled ? 'Yes' : 'No';
90
+ erOb.type = 'Edge Router';
91
+ erOb.rootNode = isRootNode;
92
+ erOb.tunnelerEnabled = er.tunnelerEnabled ? er.tunnelerEnabled : 'No';
93
+ erOb.syncStatus = er.syncStatus ? er.syncStatus : 'No';
94
+ erOb.createdAt = er.createdAt;
95
+ erOb.updatedAt = er.updatedAt;
96
+ return erOb;
97
+ }
98
+ createServiceEdgeRouterPolicyNode(rawObj, isRootNode = 'Yes') {
99
+ const serviceerpolicy = new ServiceERPolicy();
100
+ // serviceerpolicy.id = createId();
101
+ serviceerpolicy.uuid = rawObj.id;
102
+ serviceerpolicy.name = rawObj.name;
103
+ serviceerpolicy.type = 'Service Router Policy';
104
+ serviceerpolicy.rootNode = isRootNode;
105
+ return serviceerpolicy;
106
+ }
107
+ createEdgeRouterPolicyNode(rawObj, isRootNode = 'Yes') {
108
+ const erpolicy = new ERPolicy();
109
+ // erpolicy.id = createId();
110
+ erpolicy.uuid = rawObj.id;
111
+ erpolicy.name = rawObj.name;
112
+ erpolicy.type = 'Router Policy';
113
+ erpolicy.rootNode = isRootNode;
114
+ erpolicy.isSystem = rawObj.isSystem;
115
+ erpolicy.semantic = rawObj.semantic;
116
+ return erpolicy;
117
+ }
118
+ createServicePolicyNode(rawObj, isRootNode = 'Yes') {
119
+ const bindGrp = new Group(43423, 'Bind-Policies', 'Bind Service Policy');
120
+ const dialGrp = new Group(43545, 'Dial-Policies', 'Dial Service Policy');
121
+ const spolicy = new ServicePolicy();
122
+ // spolicy.id = createId();
123
+ spolicy.id = 87956;
124
+ spolicy.uuid = rawObj.id;
125
+ spolicy.name = rawObj.name;
126
+ spolicy.type = 'Service Policy';
127
+ spolicy.rootNode = isRootNode;
128
+ spolicy.clickProcess = "Not Yet";
129
+ if (rawObj.type === 'Bind') {
130
+ bindGrp.children.push(spolicy);
131
+ return bindGrp;
132
+ }
133
+ else {
134
+ dialGrp.children.push(spolicy);
135
+ return dialGrp;
136
+ }
137
+ }
138
+ createIdentityNode(rawObj, isRootNode = 'Yes') {
139
+ const endpoint = new Identity();
140
+ endpoint.rootNode = isRootNode;
141
+ // endpoint.id = createId();
142
+ endpoint.id = 5432;
143
+ endpoint.uuid = rawObj.id;
144
+ endpoint.name = rawObj.name;
145
+ endpoint.online = rawObj.hasApiSession === true ? 'Yes' : 'No';
146
+ endpoint.type = 'Identity';
147
+ endpoint.createdAt = rawObj.createdAt;
148
+ endpoint.updatedAt = rawObj.updatedAt;
149
+ endpoint.status = rawObj.sdkInfo !== null ? 'Registered' : 'Not Registered';
150
+ if (rawObj.sdkInfo) {
151
+ endpoint.os = rawObj.sdkInfo.type ? rawObj.sdkInfo.type : rawObj.sdkInfo.appId;
152
+ endpoint.osVersion = rawObj.sdkInfo.version;
153
+ }
154
+ if (rawObj.authPolicy && rawObj.authPolicy.name.includes("BrowZer")) {
155
+ endpoint.type = 'BrowZer Identity';
156
+ }
157
+ return endpoint;
158
+ }
159
+ createServiceNode(rawObj, isRootNode = 'Yes') {
160
+ const serviceobj = new Service();
161
+ // serviceobj.id = createId();
162
+ serviceobj.name = rawObj.name;
163
+ serviceobj.uuid = rawObj.id;
164
+ serviceobj.type = 'Service';
165
+ serviceobj.rootNode = isRootNode;
166
+ const attributeswithName = [];
167
+ // attributeswithName.push('@' + rawObj.name);
168
+ rawObj && rawObj.roleAttributes && rawObj.roleAttributes.find((srattr) => {
169
+ attributeswithName.push(srattr);
170
+ });
171
+ return serviceobj;
172
+ }
173
+ getResourceTreeObj(networkName, networkStatus, services, identities, servicePolicies, edgerouters, edgeRouterPolicies, serviceEdgeRouterPolicies,
67
174
  // networkProductVersion,
68
- uniqId, logger) {
175
+ services_totalCount, identities_totalCount, edgerouters_totalCount, service_policies_totalCount, edge_router_policies_totalCount, service_router_policies_totalCount, uniqId, logger, ...args) {
176
+ this.uniqIId = uniqId;
69
177
  function createId() {
70
178
  ++uniqId;
179
+ // ++this.uniqIId;
71
180
  return uniqId;
72
181
  }
73
182
  class RootJson {
@@ -77,13 +186,16 @@ class NetworkVisualizerHelper {
77
186
  this.children = [];
78
187
  this.contextMenu = 'Yes';
79
188
  this.type = 'Network';
189
+ this.rootNode = 'No';
80
190
  }
81
191
  }
82
192
  const rootJson = new RootJson();
83
193
  rootJson.name = 'Network';
84
194
  rootJson.status = 'Provisioned';
85
- function processIdentitiesForTree(identitiesChildren, edgerouters, endpoints, appwans, services, edgeRouterPolicies, nx, ny) {
86
- identitiesChildren.name = identitiesChildren.name + ' (' + ny + ')';
195
+ function processIdentitiesForTree(identitiesChildren, identities, nx, ny) {
196
+ if (args[2] === false)
197
+ return identitiesChildren;
198
+ // identitiesChildren.name = identitiesChildren.name + ' (' + ny + ')';
87
199
  const unregisteredGrp = new Group(createId(), 'Identities[Unregistered]', 'Identities that are not registered');
88
200
  const abcdGrp = new Group(createId(), 'Identities [A-D]', 'Identity name starts with A to D');
89
201
  const efghGrp = new Group(createId(), 'Identities [E-H]', 'Identity name starts with E to H');
@@ -98,16 +210,20 @@ class NetworkVisualizerHelper {
98
210
  const endpoint = new Identity();
99
211
  endpoint.rootNode = 'Yes';
100
212
  endpoint.id = createId();
101
- endpoint.uuid = endpoints[j].id;
102
- endpoint.name = endpoints[j].name;
103
- endpoint.online = endpoints[j].hasApiSession === true ? 'Yes' : 'No';
213
+ endpoint.uuid = identities[j].id;
214
+ endpoint.name = identities[j].name;
215
+ endpoint.online = identities[j].hasApiSession === true ? 'Yes' : 'No';
104
216
  endpoint.type = 'Identity';
105
- endpoint.status = endpoints[j].osRelease !== null ? 'Registered' : 'Not Registered';
106
- if (endpoints[j].osRelease === null && endpoints[j].type && endpoints[j].type.includes('browzer')) {
107
- endpoint.status = 'Registered';
108
- // endpoint.type = 'Browzer Endpoint';
217
+ endpoint.createdAt = identities[j].createdAt;
218
+ endpoint.updatedAt = identities[j].updatedAt;
219
+ endpoint.status = identities[j].sdkInfo !== null ? 'Registered' : 'Not Registered';
220
+ if (identities[j].sdkInfo) {
221
+ endpoint.os = identities[j].sdkInfo.type ? identities[j].sdkInfo.type : identities[j].sdkInfo.appId;
222
+ endpoint.osVersion = identities[j].sdkInfo.version;
223
+ }
224
+ if (identities[j].authPolicy && identities[j].authPolicy.name.includes("BrowZer")) {
225
+ endpoint.type = 'BrowZer Identity';
109
226
  }
110
- endpoint.os = endpoints[j].os;
111
227
  const cha = endpoint.name.charAt(0).toLowerCase();
112
228
  if (endpoint.status === 'Not Registered') {
113
229
  unregisteredGrp.children.push(endpoint);
@@ -234,22 +350,24 @@ class NetworkVisualizerHelper {
234
350
  for (let j = i; j < lastElement; j++) {
235
351
  chld.children.push(oneTo9Grp.children[j]);
236
352
  }
237
- chld.name = chld.name + ' (' + chld.children.length + ')';
353
+ // chld.name = chld.name + ' (' + chld.children.length + ')';
238
354
  identitiesChildren.children.push(chld);
239
355
  i = i + 80;
240
356
  }
241
357
  }
242
358
  return identitiesChildren;
243
359
  }
244
- function processServicePoliciesForTree(servicePolicyChildren, edgerouters, identities, servicePolicies, services, edgeRouterPolicies, nx, ny) {
245
- const bindGrp = new Group(createId(), 'BindPolicies', 'Bind Service Policy');
246
- const dialGrp = new Group(createId(), 'DialPolicies', 'Dial Service Policy');
360
+ function processServicePoliciesForTree(servicePolicyChildren, servicePolicies, nx, ny) {
361
+ if (args[0] === false)
362
+ return servicePolicyChildren;
363
+ const bindGrp = new Group(createId(), 'Bind-Policies', 'Bind Service Policy');
364
+ const dialGrp = new Group(createId(), 'Dial-Policies', 'Dial Service Policy');
247
365
  servicePolicies.forEach((sp) => {
248
366
  const spolicy = new ServicePolicy();
249
367
  spolicy.id = createId();
250
368
  spolicy.uuid = sp.id;
251
369
  spolicy.name = sp.name;
252
- spolicy.type = 'ServicePolicy';
370
+ spolicy.type = 'Service Policy';
253
371
  spolicy.rootNode = 'Yes';
254
372
  if (sp.type === 'Bind') {
255
373
  bindGrp.children.push(spolicy);
@@ -262,7 +380,6 @@ class NetworkVisualizerHelper {
262
380
  servicePolicyChildren.children.push(bindGrp);
263
381
  dialGrp.name = dialGrp.name + '(' + dialGrp.children.length + ')';
264
382
  servicePolicyChildren.children.push(dialGrp);
265
- servicePolicyChildren.name = servicePolicyChildren.name + ' (' + (bindGrp.children.length + dialGrp.children.length) + ')';
266
383
  return servicePolicyChildren;
267
384
  }
268
385
  function serviceGrouping(servicesChildren, servicestree) {
@@ -419,10 +536,12 @@ class NetworkVisualizerHelper {
419
536
  oneTo9Grp.name = oneTo9Grp.name + '(' + oneTo9Grp.children.length + ')';
420
537
  servicesChildren.children.push(oneTo9Grp);
421
538
  }
422
- servicesChildren.name = servicesChildren.name + '(' + servicestree.length + ')';
539
+ // servicesChildren.name = servicesChildren.name + '(' + servicestree.length + ')';
423
540
  return servicesChildren;
424
541
  }
425
- function processServicesForTree(servicesChildren, edgerouters, endpoints, appwans, services, edgeRouterPolicies, nx, ny) {
542
+ function processServicesForTree(servicesChildren, services, nx, ny) {
543
+ if (args[1] === false)
544
+ return servicesChildren;
426
545
  const servicestree = [];
427
546
  for (let i = nx; i < ny; i++) {
428
547
  const serviceobj = new Service();
@@ -467,7 +586,9 @@ class NetworkVisualizerHelper {
467
586
  } // end for loop
468
587
  return serviceGrouping(servicesChildren, servicestree);
469
588
  } // end of processServicesForTree
470
- function processEdgeRouterPoliciesForTree(edgeRouterPoliciesChildren, edgerouters, endpoints, appwans, services, edgeRouterPolicies, nx, ny) {
589
+ function processEdgeRouterPoliciesForTree(edgeRouterPoliciesChildren, edgeRouterPolicies, nx, ny) {
590
+ if (args[4] === false)
591
+ return edgeRouterPoliciesChildren;
471
592
  for (let i = nx; i < ny; i++) {
472
593
  const erpolicy = new ERPolicy();
473
594
  erpolicy.id = createId();
@@ -475,11 +596,15 @@ class NetworkVisualizerHelper {
475
596
  erpolicy.name = edgeRouterPolicies[i].name;
476
597
  erpolicy.type = 'Router Policy';
477
598
  erpolicy.rootNode = 'Yes';
599
+ erpolicy.isSystem = edgeRouterPolicies[i].isSystem;
600
+ erpolicy.semantic = edgeRouterPolicies[i].semantic;
478
601
  edgeRouterPoliciesChildren.children.push(erpolicy);
479
602
  } // end of main for loop
480
603
  return edgeRouterPoliciesChildren;
481
604
  } // end
482
- function processServiceEdgeRouterPoliciesForTree(serviceEdgeRouterPoliciesChildren, edgerouters, endpoints, appwans, services, edgeRouterPolicies, serviceEdgeRouterPolicies, nx, ny) {
605
+ function processServiceEdgeRouterPoliciesForTree(serviceEdgeRouterPoliciesChildren, serviceEdgeRouterPolicies, nx, ny) {
606
+ if (args[5] === false)
607
+ return serviceEdgeRouterPoliciesChildren;
483
608
  for (let i = nx; i < ny; i++) {
484
609
  const serviceerpolicy = new ServiceERPolicy();
485
610
  serviceerpolicy.id = createId();
@@ -491,7 +616,9 @@ class NetworkVisualizerHelper {
491
616
  } // end of main for loop
492
617
  return serviceEdgeRouterPoliciesChildren;
493
618
  } // end
494
- function processEdgeroutersForTree(edgerouterChildren, edgerouters, endpoints, appwans, services, edgeRouterPolicies, nx, ny) {
619
+ function processEdgeroutersForTree(edgerouterChildren, edgerouters, nx, ny) {
620
+ if (args[3] === false)
621
+ return edgerouterChildren;
495
622
  for (let i = nx; i < ny; i++) {
496
623
  const erOb = new ERouter();
497
624
  erOb.id = createId();
@@ -505,60 +632,50 @@ class NetworkVisualizerHelper {
505
632
  erOb.disabled = er.disabled ? 'Yes' : 'No';
506
633
  erOb.type = 'Edge Router';
507
634
  erOb.rootNode = 'Yes';
508
- if (er.hostId !== null) {
509
- // erOb.provider = findProviderNameForHostId(er.hostId);
510
- }
511
- else if (er.status === 'ERROR') {
512
- erOb.provider = 'N/A';
513
- }
514
- else {
515
- erOb.provider = 'Private DC';
516
- }
635
+ erOb.tunnelerEnabled = er.tunnelerEnabled ? er.tunnelerEnabled : 'No';
636
+ erOb.syncStatus = er.syncStatus ? er.syncStatus : 'No';
637
+ erOb.createdAt = er.createdAt;
638
+ erOb.updatedAt = er.updatedAt;
517
639
  edgerouterChildren.children.push(erOb);
518
640
  }
519
641
  } // end main for loop
520
642
  return edgerouterChildren;
521
643
  }
522
644
  // createId() generates node Id 1,2,3,4,5 for the following five nodes. this id is used to search capability.
523
- let appwansChildren = new Children();
524
- appwansChildren.id = createId();
525
- appwansChildren.name = 'Service Policies';
645
+ let servicPoliciesChildren = new Children();
646
+ servicPoliciesChildren.id = createId();
647
+ servicPoliciesChildren.firstChild = 'Yes';
648
+ servicPoliciesChildren.name = 'Service Policies(' + service_policies_totalCount + ')';
526
649
  let servicesChildren = new Children();
527
650
  servicesChildren.id = createId();
528
- servicesChildren.name = 'Services';
529
- let endpointsChildren = new Children();
530
- endpointsChildren.id = createId();
531
- endpointsChildren.name = 'Identities';
651
+ servicesChildren.firstChild = 'Yes';
652
+ servicesChildren.name = 'Services(' + services_totalCount + ')';
653
+ let identitiesChildren = new Children();
654
+ identitiesChildren.id = createId();
655
+ identitiesChildren.firstChild = 'Yes';
656
+ identitiesChildren.name = 'Identities(' + identities_totalCount + ')';
532
657
  let edgerouterChildren = new Children();
533
658
  edgerouterChildren.id = createId();
534
- edgerouterChildren.name = 'Edge Routers';
659
+ edgerouterChildren.firstChild = 'Yes';
660
+ edgerouterChildren.name = 'Edge Routers(' + edgerouters_totalCount + ')';
535
661
  let edgeRouterPoliciesChildren = new Children();
536
662
  edgeRouterPoliciesChildren.id = createId();
537
- edgeRouterPoliciesChildren.name = 'Edge Router Policies';
663
+ edgeRouterPoliciesChildren.firstChild = 'Yes';
664
+ edgeRouterPoliciesChildren.name = 'Edge Router Policies(' + edge_router_policies_totalCount + ')';
538
665
  let serviceEdgeRouterPolicesChildren = new Children();
539
666
  serviceEdgeRouterPolicesChildren.id = createId();
540
- serviceEdgeRouterPolicesChildren.name = 'Service Edge Router Policies';
541
- servicesChildren = processServicesForTree(servicesChildren, edgerouters, endpoints, appwans, services, edgeRouterPolicies, 0, services.length);
542
- edgerouterChildren = processEdgeroutersForTree(edgerouterChildren, edgerouters, endpoints, appwans, services, edgeRouterPolicies, 0, edgerouters.length);
543
- if (edgerouterChildren) {
544
- edgerouterChildren.name = edgerouterChildren.name + ' (' + edgerouterChildren.children.length + ')';
545
- }
546
- appwansChildren = processServicePoliciesForTree(appwansChildren, edgerouters, endpoints, appwans, services, edgeRouterPolicies, 0, appwans.length);
547
- edgeRouterPoliciesChildren = processEdgeRouterPoliciesForTree(edgeRouterPoliciesChildren, edgerouters, endpoints, appwans, services, edgeRouterPolicies, 0, edgeRouterPolicies.length);
548
- if (edgeRouterPoliciesChildren) {
549
- edgeRouterPoliciesChildren.name =
550
- 'Edge Router Policies (' + edgeRouterPoliciesChildren.children.length + ')';
551
- }
552
- endpointsChildren = processIdentitiesForTree(endpointsChildren, edgerouters, endpoints, appwans, services, edgeRouterPolicies, 0, endpoints.length);
553
- //serviceEdgeRouterPolicies
554
- serviceEdgeRouterPolicesChildren = processServiceEdgeRouterPoliciesForTree(serviceEdgeRouterPolicesChildren, edgerouters, endpoints, appwans, services, edgeRouterPolicies, serviceEdgeRouterPolicies, 0, serviceEdgeRouterPolicies.length);
555
- if (edgeRouterPoliciesChildren) {
556
- serviceEdgeRouterPolicesChildren.name =
557
- 'Service Edge Router Policies (' + serviceEdgeRouterPolicesChildren.children.length + ')';
558
- }
559
- rootJson.children.push(appwansChildren);
667
+ serviceEdgeRouterPolicesChildren.firstChild = 'Yes';
668
+ serviceEdgeRouterPolicesChildren.name = 'Service Edge Router Policies(' + service_router_policies_totalCount + ')';
669
+ servicesChildren = processServicesForTree(servicesChildren, services, 0, services.length);
670
+ edgerouterChildren = processEdgeroutersForTree(edgerouterChildren, edgerouters, 0, edgerouters.length);
671
+ servicPoliciesChildren = processServicePoliciesForTree(servicPoliciesChildren, servicePolicies, 0, servicePolicies.length);
672
+ edgeRouterPoliciesChildren = processEdgeRouterPoliciesForTree(edgeRouterPoliciesChildren, edgeRouterPolicies, 0, edgeRouterPolicies.length);
673
+ identitiesChildren = processIdentitiesForTree(identitiesChildren, identities, 0, identities.length);
674
+ //serviceRouterPolicies
675
+ serviceEdgeRouterPolicesChildren = processServiceEdgeRouterPoliciesForTree(serviceEdgeRouterPolicesChildren, serviceEdgeRouterPolicies, 0, serviceEdgeRouterPolicies.length);
676
+ rootJson.children.push(servicPoliciesChildren);
560
677
  rootJson.children.push(servicesChildren);
561
- rootJson.children.push(endpointsChildren);
678
+ rootJson.children.push(identitiesChildren);
562
679
  rootJson.children.push(edgerouterChildren);
563
680
  rootJson.children.push(edgeRouterPoliciesChildren);
564
681
  rootJson.children.push(serviceEdgeRouterPolicesChildren);
@@ -575,4 +692,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
575
692
  providedIn: 'root',
576
693
  }]
577
694
  }] });
578
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay12aXN1YWxpemVyLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy92aXN1YWxpemVyL25ldHdvcmstdmlzdWFsaXplci9uZXR3b3JrLXZpc3VhbGl6ZXIuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRzNDLE1BQU0sT0FBTyxRQUFRO0lBa0JqQjtRQUNJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxPQUFPO0lBa0JoQjtRQUNJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxLQUFLO0lBT2QsWUFBWSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7UUFDZCxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNkLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7UUFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDdkIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLGFBQWE7SUFTdEI7UUFDSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxH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R0FBRyxLQUFLLEdBQUcsRUFBRTtvQkFDakUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ25DO3FCQUFNLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRTtvQkFDakUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ25DO3FCQUFNLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRTtvQkFDakUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ25DO3FCQUFNLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRTtvQkFDakUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ25DO3FCQUFNLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxFQUFFO29CQUNuQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDakM7cUJBQU0sSUFDSCxHQUFHLEtBQUssR0FBRztvQkFDWCxHQUFHLEtBQUssR0FBRztvQkFDWCxHQUFHLEtBQUssR0FBRztvQkFDWCxHQUFHLEtBQUssR0FBRztvQkFDWCxHQUFHLEtBQUssR0FBRztvQkFDWCxHQUFHLEtBQUssR0FBRztvQkFDWCxHQUFHLEtBQUssR0FBRztvQkFDWCxHQUFHLEtBQUssR0FBRztvQkFDWCxHQUFHLEtBQUssR0FBRztvQkFDWCxHQUFHLEtBQUssR0FBRyxFQUNiO29CQUNFLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEs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RyxLQUFLLEdBQUcsRUFBRTtvQkFDakUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQ3JDO3FCQUFNLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRTtvQkFDakUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQ3JDO3FCQUFNLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRTtvQkFDakUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQ3JDO3FCQUFNLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRTtvQkFDakUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQ3JDO3FCQUFNLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxFQUFFO29CQUNuQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDbkM7cUJBQU0sSUFDSCxHQUFHLEtBQUssR0FBRztvQkFDWCxHQUFHLEtBQUssR0FBRztvQkFDWCxHQUFHLEtBQUssR0FBRztvQkFDWCxHQUFHLEtBQUssR0FBRztvQkFDWCxHQUFHLEtBQUssR0FBRztvQkFDWCxHQUFHLEtBQUssR0FBRztvQkFDWCxHQUFHLEtBQUssR0FBRztvQkFDWCxHQUFHLEtBQUssR0FBRztvQkFDWCxHQUFHLEtBQUssR0FBRztvQkFDWCxHQUFHLEtBQUssR0FBRyxFQUNiO29CQUNFLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FB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LE1BQU0sR0FBRyxHQUFHLENBQUM7U0FDakc7UUFFRCxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN4QyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDMUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMzQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ25ELFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDekQsUUFBUSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFekIsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQzsrR0F2cUJRLHVCQUF1QjttSEFBdkIsdUJBQXVCLGNBRnBCLE1BQU07O1NBRVQsdUJBQXVCOzRGQUF2Qix1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuZXhwb3J0IGNsYXNzIElkZW50aXR5IHtcbiAgICBpZDtcbiAgICB1dWlkO1xuICAgIG5hbWU7XG4gICAgc3RhdHVzO1xuICAgIHR5cGU7XG4gICAgcm9vdE5vZGU7XG4gICAgc2VydmVyRWdyZXNzUHJvdG9jb2w7XG4gICAgc2VydmVyRWdyZXNzSG9zdDtcbiAgICBzZXJ2ZXJFZ3Jlc3NQb3J0O1xuICAgIHBvc3R1cmVDaGVja3M7XG4gICAgZXZlbnRzO1xuICAgIG9zO1xuICAgIHV0aWxpemF0aW9uO1xuICAgIGNoaWxkcmVuO1xuICAgIGNvbnRleHRNZW51O1xuICAgIG9ubGluZTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnJvb3ROb2RlID0gJ05vJztcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgICAgICB0aGlzLmNvbnRleHRNZW51ID0gJ1llcyc7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2VydmljZSB7XG4gICAgaWQ7XG4gICAgdXVpZDtcbiAgICBuYW1lO1xuICAgIGludGVyY2VwdF9ob3N0O1xuICAgIGludGVyY2VwdF9wb3J0O1xuICAgIGVuY3J5cHRlZDtcbiAgICByb290Tm9kZTtcbiAgICBzZXJ2ZXJFZ3Jlc3NIb3N0O1xuICAgIHNlcnZlckVncmVzc1BvcnQ7XG4gICAgc3RhdHVzO1xuICAgIHByb3RvY29sO1xuICAgIHR5cGU7XG4gICAgY2hpbGRyZW47XG4gICAgYXR0cmlidXRlcztcbiAgICB1dGlsaXphdGlvbjtcbiAgICBjb250ZXh0TWVudTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnJvb3ROb2RlID0gJ05vJztcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgICAgICB0aGlzLmNvbnRleHRNZW51ID0gJ1llcyc7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR3JvdXAge1xuICAgIGlkO1xuICAgIG5hbWU7XG4gICAgdHlwZTtcbiAgICBncm91cDtcbiAgICBjaGlsZHJlbjtcblxuICAgIGNvbnN0cnVjdG9yKGlkdiwgcywgZykge1xuICAgICAgICB0aGlzLmlkID0gaWR2O1xuICAgICAgICB0aGlzLm5hbWUgPSBzO1xuICAgICAgICB0aGlzLmdyb3VwID0gZztcbiAgICAgICAgdGhpcy50eXBlID0gJ0dyb3VwJztcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNlcnZpY2VQb2xpY3kge1xuICAgIGlkO1xuICAgIHV1aWQ7XG4gICAgbmFtZTtcbiAgICB0eXBlO1xuICAgIHJvb3ROb2RlO1xuICAgIGNoaWxkcmVuO1xuICAgIGNvbnRleHRNZW51O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucm9vdE5vZGUgPSAnTm8nO1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgICAgIHRoaXMuY29udGV4dE1lbnUgPSAnWWVzJztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBdHRyaWJ1dGUge1xuICAgIGlkO1xuICAgIG5hbWU7XG4gICAgdHlwZTtcbiAgICBjaGlsZHJlbjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRVJQb2xpY3kge1xuICAgIGlkO1xuICAgIHV1aWQ7XG4gICAgbmFtZTtcbiAgICBzdGF0dXM7XG4gICAgc2l6ZTtcbiAgICB0eXBlO1xuICAgIHJvb3ROb2RlO1xuICAgIGNoaWxkcmVuO1xuICAgIGNvbnRleHRNZW51O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucm9vdE5vZGUgPSAnTm8nO1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgICAgIHRoaXMuY29udGV4dE1lbnUgPSAnWWVzJztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXJ2aWNlRVJQb2xpY3kge1xuICAgIGlkO1xuICAgIHV1aWQ7XG4gICAgbmFtZTtcbiAgICBzdGF0dXM7XG4gICAgc2l6ZTtcbiAgICB0eXBlO1xuICAgIHJvb3ROb2RlO1xuICAgIGNoaWxkcmVuO1xuICAgIGNvbnRleHRNZW51O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucm9vdE5vZGUgPSAnTm8nO1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgICAgIHRoaXMuY29udGV4dE1lbnUgPSAnWWVzJztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFUm91dGVyIHtcbiAgICBpZDtcbiAgICB1dWlkO1xuICAgIG5hbWU7XG4gICAgdmVyaWZpZWQ7XG4gICAgc2l6ZTtcbiAgICB0eXBlO1xuICAgIHByb3ZpZGVyO1xuICAgIHJvb3ROb2RlO1xuICAgIHNlcnZlckVncmVzc1Byb3RvY29sO1xuICAgIHNlcnZlckVncmVzc0hvc3Q7XG4gICAgc2VydmVyRWdyZXNzUG9ydDtcbiAgICBjaGlsZHJlbjtcbiAgICB1dGlsaXphdGlvbjtcbiAgICBjb250ZXh0TWVudTtcbiAgICBvbmxpbmU7XG4gICAgZGlzYWJsZWQ7XG4gICAgdmVyc2lvbjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnJvb3ROb2RlID0gJ05vJztcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgICAgICB0aGlzLmNvbnRleHRNZW51ID0gJ1llcyc7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2hpbGRyZW4ge1xuICAgIGlkO1xuICAgIG5hbWU7XG4gICAgc3RhdHVzO1xuICAgIHNpemU7XG4gICAgdHlwZTtcbiAgICBjaGlsZHJlbjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnR5cGUgPSAnQ2hpbGRyZW4nO1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgfVxufVxuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBOZXR3b3JrVmlzdWFsaXplckhlbHBlciB7XG5cbiAgICBwdWJsaWMgZ2V0UmVzb3VyY2VUcmVlT2JqKFxuICAgICAgICBuZXR3b3JrTmFtZSxcbiAgICAgICAgbmV0d29ya1N0YXR1cyxcbiAgICAgICAgc2VydmljZXMsXG4gICAgICAgIGVuZHBvaW50cyxcbiAgICAgICAgYXBwd2FucyxcbiAgICAgICAgZWRnZXJvdXRlcnMsXG4gICAgICAgIGVkZ2VSb3V0ZXJQb2xpY2llcyxcbiAgICAgICAgc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llcyxcbiAgICAgICAgLy8gbmV0d29ya1Byb2R1Y3RWZXJzaW9uLFxuICAgICAgICB1bmlxSWQsXG4gICAgICAgIGxvZ2dlclxuICAgICkge1xuICAgICAgICBmdW5jdGlvbiBjcmVhdGVJZCgpIHtcbiAgICAgICAgICAgICsrdW5pcUlkO1xuICAgICAgICAgICAgcmV0dXJuIHVuaXFJZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsYXNzIFJvb3RKc29uIHtcbiAgICAgICAgICAgIGlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgICAgIG5hbWU7XG4gICAgICAgICAgICBsYXN0SWQgPSAwO1xuICAgICAgICAgICAgY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgIGNvbnRleHRNZW51ID0gJ1llcyc7XG4gICAgICAgICAgICB0eXBlID0gJ05ldHdvcmsnO1xuICAgICAgICAgICAvLyB2ZXJzaW9uID0gbmV0d29ya1Byb2R1Y3RWZXJzaW9uO1xuICAgICAgICAgICAgc3RhdHVzO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgcm9vdEpzb24gPSBuZXcgUm9vdEpzb24oKTtcbiAgICAgICAgcm9vdEpzb24ubmFtZSA9ICdOZXR3b3JrJztcbiAgICAgICAgcm9vdEpzb24uc3RhdHVzID0gJ1Byb3Zpc2lvbmVkJztcblxuICAgICAgICBmdW5jdGlvbiBwcm9jZXNzSWRlbnRpdGllc0ZvclRyZWUoXG4gICAgICAgICAgICBpZGVudGl0aWVzQ2hpbGRyZW4sXG4gICAgICAgICAgICBlZGdlcm91dGVycyxcbiAgICAgICAgICAgIGVuZHBvaW50cyxcbiAgICAgICAgICAgIGFwcHdhbnMsXG4gICAgICAgICAgICBzZXJ2aWNlcyxcbiAgICAgICAgICAgIGVkZ2VSb3V0ZXJQb2xpY2llcyxcbiAgICAgICAgICAgIG54LFxuICAgICAgICAgICAgbnlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZGVudGl0aWVzQ2hpbGRyZW4ubmFtZSA9IGlkZW50aXRpZXNDaGlsZHJlbi5uYW1lICsgJyAoJyArIG55ICsgJyknO1xuICAgICAgICAgICAgY29uc3QgdW5yZWdpc3RlcmVkR3JwID0gbmV3IEdyb3VwKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUlkKCksXG4gICAgICAgICAgICAgICAgJ0lkZW50aXRpZXNbVW5yZWdpc3RlcmVkXScsXG4gICAgICAgICAgICAgICAgJ0lkZW50aXRpZXMgdGhhdCBhcmUgbm90IHJlZ2lzdGVyZWQnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgYWJjZEdycCA9IG5ldyBHcm91cChjcmVhdGVJZCgpLCAnSWRlbnRpdGllcyBbQS1EXScsICdJZGVudGl0eSBuYW1lIHN0YXJ0cyB3aXRoIEEgdG8gRCcpO1xuICAgICAgICAgICAgY29uc3QgZWZnaEdycCA9IG5ldyBHcm91cChjcmVhdGVJZCgpLCAnSWRlbnRpdGllcyBbRS1IXScsICdJZGVudGl0eSBuYW1lIHN0YXJ0cyB3aXRoIEUgdG8gSCcpO1xuICAgICAgICAgICAgY29uc3QgaWprbEdycCA9IG5ldyBHcm91cChjcmVhdGVJZCgpLCAnSWRlbnRpdGllcyBbSS1MXScsICdJZGVudGl0eSBuYW1lIHN0YXJ0cyB3aXRoIEkgdG8gTCcpO1xuICAgICAgICAgICAgY29uc3QgbW5vcEdycCA9IG5ldyBHcm91cChjcmVhdGVJZCgpLCAnSWRlbnRpdGllcyBbTS1QXScsICdJZGVudGl0eSBuYW1lIHN0YXJ0cyB3aXRoIE0gdG8gUCcpO1xuICAgICAgICAgICAgY29uc3QgcXJzdEdycCA9IG5ldyBHcm91cChjcmVhdGVJZCgpLCAnSWRlbnRpdGllcyBbUS1UXScsICdJZGVudGl0eSBuYW1lIHN0YXJ0cyB3aXRoIFEgdG8gVCcpO1xuICAgICAgICAgICAgY29uc3QgdXZ3eEdycCA9IG5ldyBHcm91cChjcmVhdGVJZCgpLCAnSWRlbnRpdGllcyBbVS1YXScsICdJZGVudGl0eSBuYW1lIHN0YXJ0cyB3aXRoIFUgdG8gWCcpO1xuICAgICAgICAgICAgY29uc3QgeXpHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgJ0lkZW50aXRpZXMgW1ktWl0nLCAnSWRlbnRpdHkgbmFtZSBzdGFydHMgd2l0aCBZIGFuZCBaJyk7XG4gICAgICAgICAgICBjb25zdCBvbmVUbzlHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgJ0lkZW50aXRpZXMgWzEtOV0nLCAnSWRlbnRpdHkgbmFtZSBzdGFydHMgd2l0aCAwIHRvIDknKTtcbiAgICAgICAgICAgIGNvbnN0IHNwZWNpYWxDaGFyR3JwID0gbmV3IEdyb3VwKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUlkKCksXG4gICAgICAgICAgICAgICAgJ0lkZW50aXRpZXMgW290aGVyc10nLFxuICAgICAgICAgICAgICAgICdJZGVudGl0eSBuYW1lIHN0YXJ0cyB3aXRoIHNwZWNpYWwgY2hhcmFjdGVycydcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGogPSBueDsgaiA8IG55OyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRwb2ludCA9IG5ldyBJZGVudGl0eSgpO1xuICAgICAgICAgICAgICAgIGVuZHBvaW50LnJvb3ROb2RlID0gJ1llcyc7XG4gICAgICAgICAgICAgICAgZW5kcG9pbnQuaWQgPSBjcmVhdGVJZCgpO1xuICAgICAgICAgICAgICAgIGVuZHBvaW50LnV1aWQgPSBlbmRwb2ludHNbal0uaWQ7XG4gICAgICAgICAgICAgICAgZW5kcG9pbnQubmFtZSA9IGVuZHBvaW50c1tqXS5uYW1lO1xuICAgICAgICAgICAgICAgIGVuZHBvaW50Lm9ubGluZSA9IGVuZHBvaW50c1tqXS5oYXNBcGlTZXNzaW9uID09PSB0cnVlID8gJ1llcycgOiAnTm8nO1xuICAgICAgICAgICAgICAgIGVuZHBvaW50LnR5cGUgPSAnSWRlbnRpdHknO1xuICAgICAgICAgICAgICAgIGVuZHBvaW50LnN0YXR1cyA9IGVuZHBvaW50c1tqXS5vc1JlbGVhc2UgIT09IG51bGwgPyAnUmVnaXN0ZXJlZCcgOiAnTm90IFJlZ2lzdGVyZWQnO1xuICAgICAgICAgICAgICAgIGlmIChlbmRwb2ludHNbal0ub3NSZWxlYXNlID09PSBudWxsICYmIGVuZHBvaW50c1tqXS50eXBlICYmIGVuZHBvaW50c1tqXS50eXBlLmluY2x1ZGVzKCdicm93emVyJykpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQuc3RhdHVzID0gJ1JlZ2lzdGVyZWQnO1xuICAgICAgICAgICAgICAgICAgICAvLyBlbmRwb2ludC50eXBlID0gJ0Jyb3d6ZXIgRW5kcG9pbnQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbmRwb2ludC5vcyA9IGVuZHBvaW50c1tqXS5vcztcblxuICAgICAgICAgICAgICAgIGNvbnN0IGNoYSA9IGVuZHBvaW50Lm5hbWUuY2hhckF0KDApLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKGVuZHBvaW50LnN0YXR1cyA9PT0gJ05vdCBSZWdpc3RlcmVkJykge1xuICAgICAgICAgICAgICAgICAgICB1bnJlZ2lzdGVyZWRHcnAuY2hpbGRyZW4ucHVzaChlbmRwb2ludCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICdhJyB8fCBjaGEgPT09ICdiJyB8fCBjaGEgPT09ICdjJyB8fCBjaGEgPT09ICdkJykge1xuICAgICAgICAgICAgICAgICAgICBhYmNkR3JwLmNoaWxkcmVuLnB1c2goZW5kcG9pbnQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhID09PSAnZScgfHwgY2hhID09PSAnZicgfHwgY2hhID09PSAnZycgfHwgY2hhID09PSAnaCcpIHtcbiAgICAgICAgICAgICAgICAgICAgZWZnaEdycC5jaGlsZHJlbi5wdXNoKGVuZHBvaW50KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoYSA9PT0gJ2knIHx8IGNoYSA9PT0gJ2onIHx8IGNoYSA9PT0gJ2snIHx8IGNoYSA9PT0gJ2wnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlqa2xHcnAuY2hpbGRyZW4ucHVzaChlbmRwb2ludCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICdtJyB8fCBjaGEgPT09ICduJyB8fCBjaGEgPT09ICdvJyB8fCBjaGEgPT09ICdwJykge1xuICAgICAgICAgICAgICAgICAgICBtbm9wR3JwLmNoaWxkcmVuLnB1c2goZW5kcG9pbnQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhID09PSAncScgfHwgY2hhID09PSAncicgfHwgY2hhID09PSAncycgfHwgY2hhID09PSAndCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcXJzdEdycC5jaGlsZHJlbi5wdXNoKGVuZHBvaW50KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoYSA9PT0gJ3UnIHx8IGNoYSA9PT0gJ3YnIHx8IGNoYSA9PT0gJ3cnIHx8IGNoYSA9PT0gJ3gnKSB7XG4gICAgICAgICAgICAgICAgICAgIHV2d3hHcnAuY2hpbGRyZW4ucHVzaChlbmRwb2ludCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICd5JyB8fCBjaGEgPT09ICd6Jykge1xuICAgICAgICAgICAgICAgICAgICB5ekdycC5jaGlsZHJlbi5wdXNoKGVuZHBvaW50KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICcwJyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICcxJyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICcyJyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICczJyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICc0JyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICc1JyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICc2JyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICc3JyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICc4JyB8fFxuICAgICAgICAgICAgICAgICAgICBjaGEgPT09ICc5J1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBvbmVUbzlHcnAuY2hpbGRyZW4ucHVzaChlbmRwb2ludCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3BlY2lhbENoYXJHcnAuY2hpbGRyZW4ucHVzaChlbmRwb2ludCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAvLyBlbmQgb2YgbWFpbiBmb3IgbG9vcFxuXG4gICAgICAgICAgICBpZiAodW5yZWdpc3RlcmVkR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB1bnJlZ2lzdGVyZWRHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB1bnJlZ2lzdGVyZWRHcnAubmFtZSA9IHVucmVnaXN0ZXJlZEdycC5uYW1lICsgJygnICsgdW5yZWdpc3RlcmVkR3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgICAgICBpZGVudGl0aWVzQ2hpbGRyZW4uY2hpbGRyZW4ucHVzaCh1bnJlZ2lzdGVyZWRHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFiY2RHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGFiY2RHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhYmNkR3JwLm5hbWUgPSBhYmNkR3JwLm5hbWUgKyAnICgnICsgYWJjZEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgaWRlbnRpdGllc0NoaWxkcmVuLmNoaWxkcmVuLnB1c2goYWJjZEdycCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlZmdoR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBlZmdoR3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZWZnaEdycC5uYW1lID0gZWZnaEdycC5uYW1lICsgJyAoJyArIGVmZ2hHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgIGlkZW50aXRpZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKGVmZ2hHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlqa2xHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGlqa2xHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpamtsR3JwLm5hbWUgPSBpamtsR3JwLm5hbWUgKyAnICgnICsgaWprbEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgaWRlbnRpdGllc0NoaWxkcmVuLmNoaWxkcmVuLnB1c2goaWprbEdycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobW5vcEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgbW5vcEdycC5jaGlsZHJlbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIG1ub3BHcnAubmFtZSA9IG1ub3BHcnAubmFtZSArICcgKCcgKyBtbm9wR3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgICAgICBpZGVudGl0aWVzQ2hpbGRyZW4uY2hpbGRyZW4ucHVzaChtbm9wR3JwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChxcnN0R3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBxcnN0R3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcXJzdEdycC5uYW1lID0gcXJzdEdycC5uYW1lICsgJyAoJyArIHFyc3RHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgIGlkZW50aXRpZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHFyc3RHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHV2d3hHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHV2d3hHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB1dnd4R3JwLm5hbWUgPSB1dnd4R3JwLm5hbWUgKyAnICgnICsgdXZ3eEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgaWRlbnRpdGllc0NoaWxkcmVuLmNoaWxkcmVuLnB1c2godXZ3eEdycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoeXpHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHl6R3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgeXpHcnAubmFtZSA9IHl6R3JwLm5hbWUgKyAnICgnICsgeXpHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgIGlkZW50aXRpZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHl6R3JwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNwZWNpYWxDaGFyR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBzcGVjaWFsQ2hhckdycC5uYW1lID0gc3BlY2lhbENoYXJHcnAubmFtZSArICcgKCcgKyBzcGVjaWFsQ2hhckdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgaWRlbnRpdGllc0NoaWxkcmVuLmNoaWxkcmVuLnB1c2goc3BlY2lhbENoYXJHcnApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob25lVG85R3JwLmNoaWxkcmVuLmxlbmd0aCA+IDAgJiYgb25lVG85R3JwLmNoaWxkcmVuLmxlbmd0aCA8PSAxMDApIHtcbiAgICAgICAgICAgICAgICBvbmVUbzlHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBvbmVUbzlHcnAubmFtZSA9IG9uZVRvOUdycC5uYW1lICsgJyAoJyArIG9uZVRvOUdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgaWRlbnRpdGllc0NoaWxkcmVuLmNoaWxkcmVuLnB1c2gob25lVG85R3JwKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob25lVG85R3JwLmNoaWxkcmVuLmxlbmd0aCA+IDEwMCkge1xuICAgICAgICAgICAgICAgIG9uZVRvOUdycC5jaGlsZHJlbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb25lVG85R3JwLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RFbGVtZW50ID0gaSArIDgwIDwgb25lVG85R3JwLmNoaWxkcmVuLmxlbmd0aCA/IGkgKyA4MCA6IG9uZVRvOUdycC5jaGlsZHJlbi5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lUyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAnSWRlbnRpdGllcyBbJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBvbmVUbzlHcnAuY2hpbGRyZW5baV0ubmFtZS5zdWJzdHJpbmcoMCwgNCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJy0nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uZVRvOUdycC5jaGlsZHJlbltsYXN0RWxlbWVudF0ubmFtZS5zdWJzdHJpbmcoMCwgNCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ10nO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGxkID0gbmV3IEdyb3VwKFxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlSWQoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0lkZW50aXR5IG5hbWUgc3RhcnRzIHdpdGggJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lVG85R3JwLmNoaWxkcmVuW2ldLm5hbWUuc3Vic3RyaW5nKDAsIDQpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIFRvICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZVRvOUdycC5jaGlsZHJlbltsYXN0RWxlbWVudF0ubmFtZS5zdWJzdHJpbmcoMCwgNClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IGk7IGogPCBsYXN0RWxlbWVudDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGxkLmNoaWxkcmVuLnB1c2gob25lVG85R3JwLmNoaWxkcmVuW2pdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjaGxkLm5hbWUgPSBjaGxkLm5hbWUgKyAnICgnICsgY2hsZC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgICAgIGlkZW50aXRpZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKGNobGQpO1xuICAgICAgICAgICAgICAgICAgICBpID0gaSArIDgwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGlkZW50aXRpZXNDaGlsZHJlbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NTZXJ2aWNlUG9saWNpZXNGb3JUcmVlKFxuICAgICAgICAgICAgc2VydmljZVBvbGljeUNoaWxkcmVuLFxuICAgICAgICAgICAgZWRnZXJvdXRlcnMsXG4gICAgICAgICAgICBpZGVudGl0aWVzLFxuICAgICAgICAgICAgc2VydmljZVBvbGljaWVzLFxuICAgICAgICAgICAgc2VydmljZXMsXG4gICAgICAgICAgICBlZGdlUm91dGVyUG9saWNpZXMsXG4gICAgICAgICAgICBueCxcbiAgICAgICAgICAgIG55XG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGJpbmRHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgJ0JpbmRQb2xpY2llcycsICdCaW5kIFNlcnZpY2UgUG9saWN5Jyk7XG4gICAgICAgICAgY29uc3QgZGlhbEdycCA9IG5ldyBHcm91cChjcmVhdGVJZCgpLCAnRGlhbFBvbGljaWVzJywgJ0RpYWwgU2VydmljZSBQb2xpY3knKTtcblxuICAgICAgICAgIHNlcnZpY2VQb2xpY2llcy5mb3JFYWNoKCAoc3ApID0+IHtcblxuICAgICAgICAgICAgY29uc3Qgc3BvbGljeSA9IG5ldyBTZXJ2aWNlUG9saWN5KCk7XG4gICAgICAgICAgICAgICAgc3BvbGljeS5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgICAgc3BvbGljeS51dWlkID0gc3AuaWQ7XG4gICAgICAgICAgICAgICAgc3BvbGljeS5uYW1lID0gc3AubmFtZTtcbiAgICAgICAgICAgICAgICBzcG9saWN5LnR5cGUgPSAnU2VydmljZVBvbGljeSc7XG4gICAgICAgICAgICAgICAgc3BvbGljeS5yb290Tm9kZSA9ICdZZXMnO1xuICAgICAgICAgICAgICAgIGlmKHNwLnR5cGU9PT0nQmluZCcpIHtcbiAgICAgICAgICAgICAgICAgIGJpbmRHcnAuY2hpbGRyZW4ucHVzaChzcG9saWN5KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgZGlhbEdycC5jaGlsZHJlbi5wdXNoKHNwb2xpY3kpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gKTtcblxuICAgICAgICAgIGJpbmRHcnAubmFtZSA9IGJpbmRHcnAubmFtZSArICcoJysgYmluZEdycC5jaGlsZHJlbi5sZW5ndGggKycpJztcbiAgICAgICAgICBzZXJ2aWNlUG9saWN5Q2hpbGRyZW4uY2hpbGRyZW4ucHVzaChiaW5kR3JwKTtcbiAgICAgICAgICBkaWFsR3JwLm5hbWUgPSBkaWFsR3JwLm5hbWUgKyAnKCcrIGRpYWxHcnAuY2hpbGRyZW4ubGVuZ3RoICsnKSc7XG4gICAgICAgICAgc2VydmljZVBvbGljeUNoaWxkcmVuLmNoaWxkcmVuLnB1c2goZGlhbEdycCk7XG4gICAgICAgICAgICBzZXJ2aWNlUG9saWN5Q2hpbGRyZW4ubmFtZSA9IHNlcnZpY2VQb2xpY3lDaGlsZHJlbi5uYW1lICsgJyAoJyArIChiaW5kR3JwLmNoaWxkcmVuLmxlbmd0aCArIGRpYWxHcnAuY2hpbGRyZW4ubGVuZ3RoKSArICcpJztcbiAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlUG9saWN5Q2hpbGRyZW47XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBzZXJ2aWNlR3JvdXBpbmcoc2VydmljZXNDaGlsZHJlbiwgc2VydmljZXN0cmVlKSB7XG4gICAgICAgICAgICBjb25zdCBwcm90b2NvbFJEUEdycCA9IG5ldyBHcm91cChcbiAgICAgICAgICAgICAgICBjcmVhdGVJZCgpLFxuICAgICAgICAgICAgICAgICdTZXJ2aWNlcyBbcHJvdG9jb2wtUkRQXScsXG4gICAgICAgICAgICAgICAgJ1NlcnZpY2VzIGNyZWF0ZWQgZm9yIFJEUCBwcm90b2NvbCdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBwcm90b2NvbEhUVFBTR3JwID0gbmV3IEdyb3VwKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUlkKCksXG4gICAgICAgICAgICAgICAgJ1NlcnZpY2VzIFtwcm90b2NvbC1IVFRQU10nLFxuICAgICAgICAgICAgICAgICdTZXJ2aWNlIGNyZWF0ZWQgZm9yIEhUVFBTIHByb3RvY29sJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IHByb3RvY29sSFRUUEdycCA9IG5ldyBHcm91cChcbiAgICAgICAgICAgICAgICBjcmVhdGVJZCgpLFxuICAgICAgICAgICAgICAgICdTZXJ2aWNlcyBbcHJvdG9jb2wtSFRUUF0nLFxuICAgICAgICAgICAgICAgICdTZXJ2aWNlIGNyZWF0ZWQgZm9yIEhUVFAgcHJvdG9jb2wnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgcHJvdG9jb2xGVFBHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgJ1NlcnZpY2VzIFtwcm90b2NvbC1GVFBdJywgJ1NlcnZpY2UgY3JlYXRlZCBmb3IgRlRQIHByb3RvY29sJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGFiY2RHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgJ1NlcnZpY2VzIFtBLURdJywgJ1NlcnZpY2UgbmFtZSBzdGFydHMgd2l0aCBBIHRvIEQnKTtcbiAgICAgICAgICAgIGNvbnN0IGVmZ2hHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgJ1NlcnZpY2VzIFtFLUhdJywgJ1NlcnZpY2UgbmFtZSBzdGFydHMgd2l0aCBFIHRvIEgnKTtcbiAgICAgICAgICAgIGNvbnN0IGlqa2xHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgJ1NlcnZpY2VzIFtJLUxdJywgJ1NlcnZpY2UgbmFtZSBzdGFydHMgd2l0aCBJIHRvIEwnKTtcbiAgICAgICAgICAgIGNvbnN0IG1ub3BHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgJ1NlcnZpY2VzIFtNLVBdJywgJ1NlcnZpY2UgbmFtZSBzdGFydHMgd2l0aCBNIHRvIFAnKTtcbiAgICAgICAgICAgIGNvbnN0IHFyc3RHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgJ1NlcnZpY2VzIFtRLVRdJywgJ1NlcnZpY2UgbmFtZSBzdGFydHMgd2l0aCBRIHRvIFQnKTtcbiAgICAgICAgICAgIGNvbnN0IHV2d3hHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgJ1NlcnZpY2VzIFtVLVhdJywgJ1NlcnZpY2UgbmFtZSBzdGFydHMgd2l0aCBVIHRvIFgnKTtcbiAgICAgICAgICAgIGNvbnN0IHl6R3JwID0gbmV3IEdyb3VwKGNyZWF0ZUlkKCksICdTZXJ2aWNlcyBbWS1aXScsICdTZXJ2aWNlIG5hbWUgc3RhcnRzIHdpdGggWSBhbmQgWicpO1xuICAgICAgICAgICAgY29uc3Qgb25lVG85R3JwID0gbmV3IEdyb3VwKGNyZWF0ZUlkKCksICdTZXJ2aWNlcyBbMS05XScsICdTZXJ2aWNlIG5hbWUgc3RhcnRzIHdpdGggMCB0byA5Jyk7XG4gICAgICAgICAgICBjb25zdCBzcGVjaWFsQ2hhckdycCA9IG5ldyBHcm91cChcbiAgICAgICAgICAgICAgICBjcmVhdGVJZCgpLFxuICAgICAgICAgICAgICAgICdTZXJ2aWNlcyBbb3RoZXJzXScsXG4gICAgICAgICAgICAgICAgJ1NlcnZpY2UgbmFtZSBzdGFydHMgd2l0aCBzcGVjaWFsIGNoYXJhY3RlcnMnXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlcnZpY2VzdHJlZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VvYmogPSBzZXJ2aWNlc3RyZWVbaV07XG4gICAgICAgICAgICAgICAgY29uc3QgY2hhID0gc2VydmljZW9iai5uYW1lLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHNlcnZpY2VvYmoucHJvdG9jb2wgPT09ICdyZHAnKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3RvY29sUkRQR3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZXJ2aWNlb2JqLnByb3RvY29sID09PSAnaHR0cHMnKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3RvY29sSFRUUFNHcnAuY2hpbGRyZW4ucHVzaChzZXJ2aWNlb2JqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlcnZpY2VvYmoucHJvdG9jb2wgPT09ICdodHRwJykge1xuICAgICAgICAgICAgICAgICAgICBwcm90b2NvbEhUVFBHcnAuY2hpbGRyZW4ucHVzaChzZXJ2aWNlb2JqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlcnZpY2VvYmoucHJvdG9jb2wgPT09ICdmdHAnKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3RvY29sRlRQR3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICdhJyB8fCBjaGEgPT09ICdiJyB8fCBjaGEgPT09ICdjJyB8fCBjaGEgPT09ICdkJykge1xuICAgICAgICAgICAgICAgICAgICBhYmNkR3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICdlJyB8fCBjaGEgPT09ICdmJyB8fCBjaGEgPT09ICdnJyB8fCBjaGEgPT09ICdoJykge1xuICAgICAgICAgICAgICAgICAgICBlZmdoR3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICdpJyB8fCBjaGEgPT09ICdqJyB8fCBjaGEgPT09ICdrJyB8fCBjaGEgPT09ICdsJykge1xuICAgICAgICAgICAgICAgICAgICBpamtsR3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICdtJyB8fCBjaGEgPT09ICduJyB8fCBjaGEgPT09ICdvJyB8fCBjaGEgPT09ICdwJykge1xuICAgICAgICAgICAgICAgICAgICBtbm9wR3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICdxJyB8fCBjaGEgPT09ICdyJyB8fCBjaGEgPT09ICdzJyB8fCBjaGEgPT09ICd0Jykge1xuICAgICAgICAgICAgICAgICAgICBxcnN0R3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICd1JyB8fCBjaGEgPT09ICd2JyB8fCBjaGEgPT09ICd3JyB8fCBjaGEgPT09ICd4Jykge1xuICAgICAgICAgICAgICAgICAgICB1dnd4R3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICd5JyB8fCBjaGEgPT09ICd6Jykge1xuICAgICAgICAgICAgICAgICAgICB5ekdycC5jaGlsZHJlbi5wdXNoKHNlcnZpY2VvYmopO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGNoYSA9PT0gJzAnIHx8XG4gICAgICAgICAgICAgICAgICAgIGNoYSA9PT0gJzEnIHx8XG4gICAgICAgICAgICAgICAgICAgIGNoYSA9PT0gJzInIHx8XG4gICAgICAgICAgICAgICAgICAgIGNoYSA9PT0gJzMnIHx8XG4gICAgICAgICAgICAgICAgICAgIGNoYSA9PT0gJzQnIHx8XG4gICAgICAgICAgICAgICAgICAgIGNoYSA9PT0gJzUnIHx8XG4gICAgICAgICAgICAgICAgICAgIGNoYSA9PT0gJzYnIHx8XG4gICAgICAgICAgICAgICAgICAgIGNoYSA9PT0gJzcnIHx8XG4gICAgICAgICAgICAgICAgICAgIGNoYSA9PT0gJzgnIHx8XG4gICAgICAgICAgICAgICAgICAgIGNoYSA9PT0gJzknXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIG9uZVRvOUdycC5jaGlsZHJlbi5wdXNoKHNlcnZpY2VvYmopO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNwZWNpYWxDaGFyR3JwLmNoaWxkcmVuLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAvLyBlbmQgbWFpbiBmb3IgbG9vcFxuXG4gICAgICAgICAgICBpZiAocHJvdG9jb2xSRFBHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHByb3RvY29sUkRQR3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcHJvdG9jb2xSRFBHcnAubmFtZSA9IHByb3RvY29sUkRQR3JwLm5hbWUgKyAnKCcgKyBwcm90b2NvbFJEUEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHByb3RvY29sUkRQR3JwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzcGVjaWFsQ2hhckdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgc3BlY2lhbENoYXJHcnAubmFtZSA9IHNwZWNpYWxDaGFyR3JwLm5hbWUgKyAnKCcgKyBzcGVjaWFsQ2hhckdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHNwZWNpYWxDaGFyR3JwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm90b2NvbEhUVFBTR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBwcm90b2NvbEhUVFBTR3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcHJvdG9jb2xIVFRQU0dycC5uYW1lID0gcHJvdG9jb2xIVFRQU0dycC5uYW1lICsgJygnICsgcHJvdG9jb2xIVFRQU0dycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHByb3RvY29sSFRUUFNHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3RvY29sSFRUUEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcHJvdG9jb2xIVFRQR3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcHJvdG9jb2xIVFRQR3JwLm5hbWUgPSBwcm90b2NvbEhUVFBHcnAubmFtZSArICcoJyArIHByb3RvY29sSFRUUEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHByb3RvY29sSFRUUEdycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvdG9jb2xGVFBHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHByb3RvY29sRlRQR3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcHJvdG9jb2xGVFBHcnAubmFtZSA9IHByb3RvY29sRlRQR3JwLm5hbWUgKyAnKCcgKyBwcm90b2NvbEZUUEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHByb3RvY29sRlRQR3JwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhYmNkR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBhYmNkR3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYWJjZEdycC5uYW1lID0gYWJjZEdycC5uYW1lICsgJygnICsgYWJjZEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKGFiY2RHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVmZ2hHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGVmZ2hHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBlZmdoR3JwLm5hbWUgPSBlZmdoR3JwLm5hbWUgKyAnKCcgKyBlZmdoR3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuLmNoaWxkcmVuLnB1c2goZWZnaEdycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaWprbEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWprbEdycC5jaGlsZHJlbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlqa2xHcnAubmFtZSA9IGlqa2xHcnAubmFtZSArICcoJyArIGlqa2xHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4uY2hpbGRyZW4ucHVzaChpamtsR3JwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtbm9wR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBtbm9wR3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgbW5vcEdycC5uYW1lID0gbW5vcEdycC5uYW1lICsgJygnICsgbW5vcEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKG1ub3BHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHFyc3RHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHFyc3RHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBxcnN0R3JwLm5hbWUgPSBxcnN0R3JwLm5hbWUgKyAnKCcgKyBxcnN0R3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuLmNoaWxkcmVuLnB1c2gocXJzdEdycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodXZ3eEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdXZ3eEdycC5jaGlsZHJlbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHV2d3hHcnAubmFtZSA9IHV2d3hHcnAubmFtZSArICcoJyArIHV2d3hHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4uY2hpbGRyZW4ucHVzaCh1dnd4R3JwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh5ekdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgeXpHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB5ekdycC5uYW1lID0geXpHcnAubmFtZSArICcoJyArIHl6R3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuLmNoaWxkcmVuLnB1c2goeXpHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9uZVRvOUdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgb25lVG85R3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgb25lVG85R3JwLm5hbWUgPSBvbmVUbzlHcnAubmFtZSArICcoJyArIG9uZVRvOUdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKG9uZVRvOUdycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuLm5hbWUgPSBzZXJ2aWNlc0NoaWxkcmVuLm5hbWUgKyAnKCcgKyBzZXJ2aWNlc3RyZWUubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2VzQ2hpbGRyZW47XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBwcm9jZXNzU2VydmljZXNGb3JUcmVlKFxuICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbixcbiAgICAgICAgICAgIGVkZ2Vyb3V0ZXJzLFxuICAgICAgICAgICAgZW5kcG9pbnRzLFxuICAgICAgICAgICAgYXBwd2FucyxcbiAgICAgICAgICAgIHNlcnZpY2VzLFxuICAgICAgICAgICAgZWRnZVJvdXRlclBvbGljaWVzLFxuICAgICAgICAgICAgbngsXG4gICAgICAgICAgICBueVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VzdHJlZSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IG54OyBpIDwgbnk7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VvYmogPSBuZXcgU2VydmljZSgpO1xuICAgICAgICAgICAgICAgIHNlcnZpY2VvYmouaWQgPSBjcmVhdGVJZCgpO1xuICAgICAgICAgICAgICAgIHNlcnZpY2VvYmoubmFtZSA9IHNlcnZpY2VzW2ldLm5hbWU7XG4gICAgICAgICAgICAgICAgc2VydmljZW9iai51dWlkID0gc2VydmljZXNbaV0uaWQ7XG4gICAgICAgICAgICAgICAgc2VydmljZW9iai50eXBlID0gJ1NlcnZpY2UnO1xuICAgICAgICAgICAgICAgIHNlcnZpY2VvYmoucm9vdE5vZGUgPSAnWWVzJztcblxuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXN3aXRoTmFtZSA9IFtdO1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXN3aXRoTmFtZS5wdXNoKCdAJyArIHNlcnZpY2VzW2ldLm5hbWUpO1xuICAgICAgICAgICAgICAgIHNlcnZpY2VzW2ldICYmIHNlcnZpY2VzW2ldLnJvbGVBdHRyaWJ1dGVzICYmIHNlcnZpY2VzW2ldLnJvbGVBdHRyaWJ1dGVzLmZpbmQoKHNyYXR0cikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzd2l0aE5hbWUucHVzaChzcmF0dHIpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgbGV0IGlzSXRSRFBQcm90b2NvbEF0dHIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBsZXQgaXNJdEhUVFBQcm90b2NvbEF0dHIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBsZXQgaXNJdEhUVFBTUHJvdG9jb2xBdHRyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbGV0IGlzSXRGVFBQcm90b2NvbEF0dHIgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgYXR0cmlidXRlc3dpdGhOYW1lLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJPYiA9IG5ldyBBdHRyaWJ1dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgYXR0ck9iLmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICAgICAgYXR0ck9iLm5hbWUgPSBhdHRyaWJ1dGVzd2l0aE5hbWVba107XG4gICAgICAgICAgICAgICAgICAgIGF0dHJPYi50eXBlID0gJ1NlcnZpY2UgQXR0cmlidXRlJztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXR0TmFtZSA9IGF0dHJpYnV0ZXN3aXRoTmFtZVtrXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNJdFJEUFByb3RvY29sQXR0ciA9PT0gZmFsc2UgJiYgYXR0TmFtZS5pbmNsdWRlcygncmRwJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VvYmoucHJvdG9jb2wgPSAncmRwJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzSXRSRFBQcm90b2NvbEF0dHIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0l0SFRUUFNQcm90b2NvbEF0dHIgPT09IGZhbHNlICYmIGF0dE5hbWUuaW5jbHVkZXMoJ2h0dHBzJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VvYmoucHJvdG9jb2wgPSAnaHR0cHMnO1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNJdEhUVFBTUHJvdG9jb2xBdHRyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNJdEhUVFBTUHJvdG9jb2xBdHRyID09PSBmYWxzZSAmJiBpc0l0SFRUUFByb3RvY29sQXR0ciA9PT0gZmFsc2UgJiYgYXR0TmFtZS5pbmNsdWRlcygnaHR0cCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlb2JqLnByb3RvY29sID0gJ2h0dHAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNJdEhUVFBQcm90b2NvbEF0dHIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0l0RlRQUHJvdG9jb2xBdHRyID09PSBmYWxzZSAmJiBhdHROYW1lLmluY2x1ZGVzKCdmdHAnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZW9iai5wcm90b2NvbCA9ICdmdHAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNJdEZUUFByb3RvY29sQXR0ciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IC8vIGVuZCBpbm5lciBmb3IgbG9vcFxuXG4gICAgICAgICAgICAgICAgc2VydmljZXN0cmVlLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICB9IC8vIGVuZCBmb3IgbG9vcFxuXG4gICAgICAgICAgICByZXR1cm4gc2VydmljZUdyb3VwaW5nKHNlcnZpY2VzQ2hpbGRyZW4sIHNlcnZpY2VzdHJlZSk7XG4gICAgICAgIH0gLy8gZW5kIG9mIHByb2Nlc3NTZXJ2aWNlc0ZvclRyZWVcblxuICAgICAgICBmdW5jdGlvbiBwcm9jZXNzRWRnZVJvdXRlclBvbGljaWVzRm9yVHJlZShcbiAgICAgICAgICAgIGVkZ2VSb3V0ZXJQb2xpY2llc0NoaWxkcmVuLFxuICAgICAgICAgICAgZWRnZXJvdXRlcnMsXG4gICAgICAgICAgICBlbmRwb2ludHMsXG4gICAgICAgICAgICBhcHB3YW5zLFxuICAgICAgICAgICAgc2VydmljZXMsXG4gICAgICAgICAgICBlZGdlUm91dGVyUG9saWNpZXMsXG4gICAgICAgICAgICBueCxcbiAgICAgICAgICAgIG55XG4gICAgICAgICkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IG54OyBpIDwgbnk7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycG9saWN5ID0gbmV3IEVSUG9saWN5KCk7XG4gICAgICAgICAgICAgICAgZXJwb2xpY3kuaWQgPSBjcmVhdGVJZCgpO1xuICAgICAgICAgICAgICAgIGVycG9saWN5LnV1aWQgPSBlZGdlUm91dGVyUG9saWNpZXNbaV0uaWQ7XG4gICAgICAgICAgICAgICAgZXJwb2xpY3kubmFtZSA9IGVkZ2VSb3V0ZXJQb2xpY2llc1tpXS5uYW1lO1xuICAgICAgICAgICAgICAgIGVycG9saWN5LnR5cGUgPSAnUm91dGVyIFBvbGljeSc7XG4gICAgICAgICAgICAgICAgZXJwb2xpY3kucm9vdE5vZGUgPSAnWWVzJztcbiAgICAgICAgICAgICAgICBlZGdlUm91dGVyUG9saWNpZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKGVycG9saWN5KTtcbiAgICAgICAgICAgIH0gLy8gZW5kIG9mIG1haW4gZm9yIGxvb3BcbiAgICAgICAgICAgIHJldHVybiBlZGdlUm91dGVyUG9saWNpZXNDaGlsZHJlbjtcbiAgICAgICAgfSAvLyBlbmRcblxuICAgICAgICBmdW5jdGlvbiBwcm9jZXNzU2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llc0ZvclRyZWUoXG4gICAgICAgICAgICBzZXJ2aWNlRWRnZVJvdXRlclBvbGljaWVzQ2hpbGRyZW4sXG4gICAgICAgICAgICBlZGdlcm91dGVycyxcbiAgICAgICAgICAgIGVuZHBvaW50cyxcbiAgICAgICAgICAgIGFwcHdhbnMsXG4gICAgICAgICAgICBzZXJ2aWNlcyxcbiAgICAgICAgICAgIGVkZ2VSb3V0ZXJQb2xpY2llcyxcbiAgICAgICAgICAgIHNlcnZpY2VFZGdlUm91dGVyUG9saWNpZXMsXG4gICAgICAgICAgICBueCxcbiAgICAgICAgICAgIG55XG4gICAgICAgICkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IG54OyBpIDwgbnk7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VlcnBvbGljeSA9IG5ldyBTZXJ2aWNlRVJQb2xpY3koKTtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlZXJwb2xpY3kuaWQgPSBjcmVhdGVJZCgpO1xuICAgICAgICAgICAgICAgIHNlcnZpY2VlcnBvbGljeS51dWlkID0gc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llc1tpXS5pZDtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlZXJwb2xpY3kubmFtZSA9IHNlcnZpY2VFZGdlUm91dGVyUG9saWNpZXNbaV0ubmFtZTtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlZXJwb2xpY3kudHlwZSA9ICdTZXJ2aWNlIFJvdXRlciBQb2xpY3knO1xuICAgICAgICAgICAgICAgIHNlcnZpY2VlcnBvbGljeS5yb290Tm9kZSA9ICdZZXMnO1xuICAgICAgICAgICAgICAgIHNlcnZpY2VFZGdlUm91dGVyUG9saWNpZXNDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHNlcnZpY2VlcnBvbGljeSk7XG4gICAgICAgICAgICB9IC8vIGVuZCBvZiBtYWluIGZvciBsb29wXG4gICAgICAgICAgICByZXR1cm4gc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llc0NoaWxkcmVuO1xuICAgICAgICB9IC8vIGVuZFxuXG4gICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NFZGdlcm91dGVyc0ZvclRyZWUoXG4gICAgICAgICAgICBlZGdlcm91dGVyQ2hpbGRyZW4sXG4gICAgICAgICAgICBlZGdlcm91dGVycyxcbiAgICAgICAgICAgIGVuZHBvaW50cyxcbiAgICAgICAgICAgIGFwcHdhbnMsXG4gICAgICAgICAgICBzZXJ2aWNlcyxcbiAgICAgICAgICAgIGVkZ2VSb3V0ZXJQb2xpY2llcyxcbiAgICAgICAgICAgIG54LFxuICAgICAgICAgICAgbnlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gbng7IGkgPCBueTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJPYiA9IG5ldyBFUm91dGVyKCk7XG4gICAgICAgICAgICAgICAgZXJPYi5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXIgPSBlZGdlcm91dGVyc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJPYi51dWlkID0gZXIuaWQ7XG4gICAgICAgICAgICAgICAgICAgIGVyT2IubmFtZSA9IGVyLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgIGVyT2IudmVyaWZpZWQgPSBlci5pc1ZlcmlmaWVkPyAnWWVzJzogJ05vJztcbiAgICAgICAgICAgICAgICAgICAgLy9lck9iLnZlcnNpb24gPSBlci5wcm9kdWN0VmVyc2lvbjtcbiAgICAgICAgICAgICAgICAgICAgZXJPYi5vbmxpbmUgPSBlci5pc09ubGluZT8gJ1llcyc6ICdObyc7XG4gICAgICAgICAgICAgICAgICAgIGVyT2IuZGlzYWJsZWQgPSBlci5kaXNhYmxlZD8gJ1llcyc6ICdObyc7XG4gICAgICAgICAgICAgICAgICAgIGVyT2IudHlwZSA9ICdFZGdlIFJvdXRlcic7XG4gICAgICAgICAgICAgICAgICAgIGVyT2Iucm9vdE5vZGUgPSAnWWVzJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyLmhvc3RJZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAvLyBlck9iLnByb3ZpZGVyID0gZmluZFByb3ZpZGVyTmFtZUZvckhvc3RJZChlci5ob3N0SWQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVyLnN0YXR1cyA9PT0gJ0VSUk9SJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJPYi5wcm92aWRlciA9ICdOL0EnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJPYi5wcm92aWRlciA9ICdQcml2YXRlIERDJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGVkZ2Vyb3V0ZXJDaGlsZHJlbi5jaGlsZHJlbi5wdXNoKGVyT2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gLy8gZW5kIG1haW4gZm9yIGxvb3BcbiAgICAgICAgICAgIHJldHVybiBlZGdlcm91dGVyQ2hpbGRyZW47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjcmVhdGVJZCgpIGdlbmVyYXRlcyBub2RlIElkIDEsMiwzLDQsNSBmb3IgdGhlIGZvbGxvd2luZyBmaXZlIG5vZGVzLiB0aGlzIGlkIGlzIHVzZWQgdG8gc2VhcmNoIGNhcGFiaWxpdHkuXG4gICAgICAgIGxldCBhcHB3YW5zQ2hpbGRyZW4gPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgICAgYXBwd2Fuc0NoaWxkcmVuLmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgYXBwd2Fuc0NoaWxkcmVuLm5hbWUgPSAnU2VydmljZSBQb2xpY2llcyc7XG5cbiAgICAgICAgbGV0IHNlcnZpY2VzQ2hpbGRyZW4gPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgICAgc2VydmljZXNDaGlsZHJlbi5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4ubmFtZSA9ICdTZXJ2aWNlcyc7XG5cbiAgICAgICAgbGV0IGVuZHBvaW50c0NoaWxkcmVuID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgIGVuZHBvaW50c0NoaWxkcmVuLmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgZW5kcG9pbnRzQ2hpbGRyZW4ubmFtZSA9ICdJZGVudGl0aWVzJztcblxuICAgICAgICBsZXQgZWRnZXJvdXRlckNoaWxkcmVuID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgIGVkZ2Vyb3V0ZXJDaGlsZHJlbi5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgIGVkZ2Vyb3V0ZXJDaGlsZHJlbi5uYW1lID0gJ0VkZ2UgUm91dGVycyc7XG5cbiAgICAgICAgbGV0IGVkZ2VSb3V0ZXJQb2xpY2llc0NoaWxkcmVuID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgIGVkZ2VSb3V0ZXJQb2xpY2llc0NoaWxkcmVuLmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgZWRnZVJvdXRlclBvbGljaWVzQ2hpbGRyZW4ubmFtZSA9ICdFZGdlIFJvdXRlciBQb2xpY2llcyc7XG5cbiAgICAgICAgbGV0IHNlcnZpY2VFZGdlUm91dGVyUG9saWNlc0NoaWxkcmVuID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgIHNlcnZpY2VFZGdlUm91dGVyUG9saWNlc0NoaWxkcmVuLmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2VzQ2hpbGRyZW4ubmFtZSA9ICdTZXJ2aWNlIEVkZ2UgUm91dGVyIFBvbGljaWVzJztcblxuICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuID0gcHJvY2Vzc1NlcnZpY2VzRm9yVHJlZShcbiAgICAgICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4sXG4gICAgICAgICAgICBlZGdlcm91dGVycyxcbiAgICAgICAgICAgIGVuZHBvaW50cyxcbiAgICAgICAgICAgIGFwcHdhbnMsXG4gICAgICAgICAgICBzZXJ2aWNlcyxcbiAgICAgICAgICAgIGVkZ2VSb3V0ZXJQb2xpY2llcyxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBzZXJ2aWNlcy5sZW5ndGhcbiAgICAgICAgKTtcblxuICAgICAgICBlZGdlcm91dGVyQ2hpbGRyZW4gPSBwcm9jZXNzRWRnZXJvdXRlcnNGb3JUcmVlKFxuICAgICAgICAgICAgZWRnZXJvdXRlckNoaWxkcmVuLFxuICAgICAgICAgICAgZWRnZXJvdXRlcnMsXG4gICAgICAgICAgICBlbmRwb2ludHMsXG4gICAgICAgICAgICBhcHB3YW5zLFxuICAgICAgICAgICAgc2VydmljZXMsXG4gICAgICAgICAgICBlZGdlUm91dGVyUG9saWNpZXMsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgZWRnZXJvdXRlcnMubGVuZ3RoXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGVkZ2Vyb3V0ZXJDaGlsZHJlbikge1xuICAgICAgICAgICAgZWRnZXJvdXRlckNoaWxkcmVuLm5hbWUgPSBlZGdlcm91dGVyQ2hpbGRyZW4ubmFtZSArICcgKCcgKyBlZGdlcm91dGVyQ2hpbGRyZW4uY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICB9XG5cbiAgICAgICAgYXBwd2Fuc0NoaWxkcmVuID0gcHJvY2Vzc1NlcnZpY2VQb2xpY2llc0ZvclRyZWUoXG4gICAgICAgICAgICBhcHB3YW5zQ2hpbGRyZW4sXG4gICAgICAgICAgICBlZGdlcm91dGVycyxcbiAgICAgICAgICAgIGVuZHBvaW50cyxcbiAgICAgICAgICAgIGFwcHdhbnMsXG4gICAgICAgICAgICBzZXJ2aWNlcyxcbiAgICAgICAgICAgIGVkZ2VSb3V0ZXJQb2xpY2llcyxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBhcHB3YW5zLmxlbmd0aFxuICAgICAgICApO1xuXG4gICAgICAgIGVkZ2VSb3V0ZXJQb2xpY2llc0NoaWxkcmVuID0gcHJvY2Vzc0VkZ2VSb3V0ZXJQb2xpY2llc0ZvclRyZWUoXG4gICAgICAgICAgICBlZGdlUm91dGVyUG9saWNpZXNDaGlsZHJlbixcbiAgICAgICAgICAgIGVkZ2Vyb3V0ZXJzLFxuICAgICAgICAgICAgZW5kcG9pbnRzLFxuICAgICAgICAgICAgYXBwd2FucyxcbiAgICAgICAgICAgIHNlcnZpY2VzLFxuICAgICAgICAgICAgZWRnZVJvdXRlclBvbGljaWVzLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIGVkZ2VSb3V0ZXJQb2xpY2llcy5sZW5ndGhcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoZWRnZVJvdXRlclBvbGljaWVzQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGVkZ2VSb3V0ZXJQb2xpY2llc0NoaWxkcmVuLm5hbWUgPVxuICAgICAgICAgICAgICAgICdFZGdlIFJvdXRlciBQb2xpY2llcyAoJyArIGVkZ2VSb3V0ZXJQb2xpY2llc0NoaWxkcmVuLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgfVxuXG4gICAgICAgIGVuZHBvaW50c0NoaWxkcmVuID0gcHJvY2Vzc0lkZW50aXRpZXNGb3JUcmVlKFxuICAgICAgICAgICAgZW5kcG9pbnRzQ2hpbGRyZW4sXG4gICAgICAgICAgICBlZGdlcm91dGVycyxcbiAgICAgICAgICAgIGVuZHBvaW50cyxcbiAgICAgICAgICAgIGFwcHdhbnMsXG4gICAgICAgICAgICBzZXJ2aWNlcyxcbiAgICAgICAgICAgIGVkZ2VSb3V0ZXJQb2xpY2llcyxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBlbmRwb2ludHMubGVuZ3RoXG4gICAgICAgICk7XG5cbiAgICAgICAgLy9zZXJ2aWNlRWRnZVJvdXRlclBvbGljaWVzXG4gICAgICAgIHNlcnZpY2VFZGdlUm91dGVyUG9saWNlc0NoaWxkcmVuID0gcHJvY2Vzc1NlcnZpY2VFZGdlUm91dGVyUG9saWNpZXNGb3JUcmVlKFxuICAgICAgICAgICAgc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2VzQ2hpbGRyZW4sXG4gICAgICAgICAgICBlZGdlcm91dGVycyxcbiAgICAgICAgICAgIGVuZHBvaW50cyxcbiAgICAgICAgICAgIGFwcHdhbnMsXG4gICAgICAgICAgICBzZXJ2aWNlcyxcbiAgICAgICAgICAgIGVkZ2VSb3V0ZXJQb2xpY2llcyxcbiAgICAgICAgICAgIHNlcnZpY2VFZGdlUm91dGVyUG9saWNpZXMsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llcy5sZW5ndGhcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoZWRnZVJvdXRlclBvbGljaWVzQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHNlcnZpY2VFZGdlUm91dGVyUG9saWNlc0NoaWxkcmVuLm5hbWUgPVxuICAgICAgICAgICAgICAgICdTZXJ2aWNlIEVkZ2UgUm91dGVyIFBvbGljaWVzICgnICsgc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2VzQ2hpbGRyZW4uY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICB9XG5cbiAgICAgICAgcm9vdEpzb24uY2hpbGRyZW4ucHVzaChhcHB3YW5zQ2hpbGRyZW4pO1xuICAgICAgICByb290SnNvbi5jaGlsZHJlbi5wdXNoKHNlcnZpY2VzQ2hpbGRyZW4pO1xuICAgICAgICByb290SnNvbi5jaGlsZHJlbi5wdXNoKGVuZHBvaW50c0NoaWxkcmVuKTtcbiAgICAgICAgcm9vdEpzb24uY2hpbGRyZW4ucHVzaChlZGdlcm91dGVyQ2hpbGRyZW4pO1xuICAgICAgICByb290SnNvbi5jaGlsZHJlbi5wdXNoKGVkZ2VSb3V0ZXJQb2xpY2llc0NoaWxkcmVuKTtcbiAgICAgICAgcm9vdEpzb24uY2hpbGRyZW4ucHVzaChzZXJ2aWNlRWRnZVJvdXRlclBvbGljZXNDaGlsZHJlbik7XG4gICAgICAgIHJvb3RKc29uLmxhc3RJZCA9IHVuaXFJZDtcblxuICAgICAgICByZXR1cm4gcm9vdEpzb247XG4gICAgfVxuXG59XG4iXX0=
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==