vcomply-workflow-engine 3.4.22 → 3.4.24

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 (101) hide show
  1. package/esm2020/lib/add-multiple-responsibility/add-multiple-responsibility.component.mjs +2 -4
  2. package/esm2020/lib/add-multiple-risk/add-multiple-risk.component.mjs +2 -3
  3. package/esm2020/lib/formgroup/cs-select/cs-select.component.mjs +5 -5
  4. package/esm2020/lib/formgroup/cs-switch/cs-switch.component.mjs +1 -4
  5. package/esm2020/lib/log-an-issue/log-an-issue.component.mjs +1 -11
  6. package/esm2020/lib/more-option/more-option.component.mjs +5 -6
  7. package/esm2020/lib/pipes/filter.pipe.mjs +1 -2
  8. package/esm2020/lib/pipes/search.pipe.mjs +3 -5
  9. package/esm2020/lib/sharedComponents/approval-workflow/approval-create-form/approval-create-form.component.mjs +3 -7
  10. package/esm2020/lib/sharedComponents/approval-workflow/approval-workflow-list/approval-workflow-list.component.mjs +1 -5
  11. package/esm2020/lib/sharedComponents/approval-workflow/approval-workflow.component.mjs +1 -7
  12. package/esm2020/lib/sharedComponents/assessment-editor/create-assessment-container/create-assessment-container.component.mjs +80 -36
  13. package/esm2020/lib/sharedComponents/assessment-list/assessment-list.component.mjs +27 -21
  14. package/esm2020/lib/sharedComponents/assessment-preview/preview/preview.component.mjs +7 -4
  15. package/esm2020/lib/sharedComponents/audit-category-list/audit-category-list.component.mjs +3 -4
  16. package/esm2020/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.mjs +3 -9
  17. package/esm2020/lib/sharedComponents/bulk-view/bulk-view.component.mjs +9 -7
  18. package/esm2020/lib/sharedComponents/category-multiselect/category-multi-select.component.mjs +6 -8
  19. package/esm2020/lib/sharedComponents/checkpoint/checkpoints/checkpoints.component.mjs +93 -27
  20. package/esm2020/lib/sharedComponents/checkpoint/checkpoints-questions/checkpoints-questions.component.mjs +11 -9
  21. package/esm2020/lib/sharedComponents/checkpoint-policy/checkpoints-policy-container/checkpoints-policy-container.component.mjs +13 -12
  22. package/esm2020/lib/sharedComponents/checkpoint-policy/checkpoints-policy-questions/checkpoints-policy-questions.component.mjs +28 -19
  23. package/esm2020/lib/sharedComponents/floating-bar/floating-bar.component.mjs +8 -8
  24. package/esm2020/lib/sharedComponents/format-and-evidence/format-and-evidence.component.mjs +35 -37
  25. package/esm2020/lib/sharedComponents/framework-list/parent-table/parent-table.component.mjs +7 -7
  26. package/esm2020/lib/sharedComponents/frequency/frequency-biannual/frequency-biannual.component.mjs +1 -12
  27. package/esm2020/lib/sharedComponents/frequency/frequency-container/frequency-container.component.mjs +1 -3
  28. package/esm2020/lib/sharedComponents/frequency/frequency-daily/frequency-daily.component.mjs +1 -13
  29. package/esm2020/lib/sharedComponents/frequency/frequency-due-date/frequency-due-date.component.mjs +1 -7
  30. package/esm2020/lib/sharedComponents/frequency/frequency-lifecycle/frequency-lifecycle.component.mjs +1 -26
  31. package/esm2020/lib/sharedComponents/frequency/frequency-monthly/frequency-monthly.component.mjs +1 -15
  32. package/esm2020/lib/sharedComponents/frequency/frequency-one-time/frequency-one-time.component.mjs +1 -14
  33. package/esm2020/lib/sharedComponents/frequency/frequency-ongoing/frequency-ongoing.component.mjs +14 -8
  34. package/esm2020/lib/sharedComponents/frequency/frequency-quarterly/frequency-quarterly.component.mjs +1 -13
  35. package/esm2020/lib/sharedComponents/frequency/frequency-radio-list/frequency-radio-list.component.mjs +1 -2
  36. package/esm2020/lib/sharedComponents/frequency/frequency-random/frequency-random.component.mjs +1 -18
  37. package/esm2020/lib/sharedComponents/frequency/frequency-top/frequency-top.component.mjs +2 -2
  38. package/esm2020/lib/sharedComponents/frequency/frequency-weekly/frequency-weekly.component.mjs +1 -12
  39. package/esm2020/lib/sharedComponents/frequency/frequency.service.mjs +2 -11
  40. package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-annual/frequency-dialog-annual.component.mjs +1 -2
  41. package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-biannual/frequency-dialog-biannual.component.mjs +1 -2
  42. package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-monthly/frequency-dialog-monthly.component.mjs +1 -2
  43. package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-one-time/frequency-dialog-one-time.component.mjs +1 -2
  44. package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-quarterly/frequency-dialog-quarterly.component.mjs +1 -2
  45. package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-radio-list/frequency-dialog-radio-list.component.mjs +1 -2
  46. package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-top/frequency-dialog-top.component.mjs +2 -2
  47. package/esm2020/lib/sharedComponents/group-users-list/group-users-list.component.mjs +1 -3
  48. package/esm2020/lib/sharedComponents/link-program/link-program/link-program.component.mjs +48 -38
  49. package/esm2020/lib/sharedComponents/link-program/restapi.service.mjs +31 -16
  50. package/esm2020/lib/sharedComponents/no-data/no-data.component.mjs +2 -4
  51. package/esm2020/lib/sharedComponents/owner-list/owner-list.component.mjs +12 -10
  52. package/esm2020/lib/sharedComponents/program-listing/program-listing.component.mjs +127 -58
  53. package/esm2020/lib/sharedComponents/radio-list-with-pagination/radio-list.component.mjs +4 -7
  54. package/esm2020/lib/sharedComponents/risk-classification/risk-classification.component.mjs +11 -6
  55. package/esm2020/lib/sharedComponents/select-approvers/select-approvers.component.mjs +1 -2
  56. package/esm2020/lib/sharedComponents/users-radio-list/users-radio-list.component.mjs +2 -3
  57. package/esm2020/lib/ui-kit/formgroup/cs-switch/cs-switch.component.mjs +1 -4
  58. package/esm2020/lib/ui-kit/popover/popover-longpress.directive.mjs +1 -3
  59. package/esm2020/lib/ui-kit/popover/popover.component.mjs +26 -12
  60. package/esm2020/lib/ui-kit/tooltip/tooltip.directive.mjs +8 -5
  61. package/esm2020/lib/workflow/shared/components/attributes/attributes.component.mjs +1 -2
  62. package/esm2020/lib/workflow/shared/components/edit-mode/edit-mode.component.mjs +1 -4
  63. package/esm2020/lib/workflow/shared/components/grc-object-list/grc-object-list.component.mjs +1 -2
  64. package/esm2020/lib/workflow/shared/components/list-popup/list-popup.component.mjs +1 -4
  65. package/esm2020/lib/workflow/shared/components/table-card/table-card.component.mjs +4 -8
  66. package/esm2020/lib/workflow-assessment/import-an-assessment/import-an-assessment.component.mjs +245 -108
  67. package/esm2020/lib/workflow-assessment/workflow-assessment.component.mjs +2 -4
  68. package/esm2020/lib/workflow-compliance/workflow-compliance.component.mjs +10 -8
  69. package/esm2020/lib/workflow-engine-container/workflow-engine-container.component.mjs +1 -5
  70. package/esm2020/lib/workflow-policy/workflow-policy.component.mjs +5 -5
  71. package/esm2020/lib/workflow-program/create-program-ui/assessment-picker/assessment-picker.component.mjs +45 -45
  72. package/esm2020/lib/workflow-program/create-program-ui/define-framework-listing/define-framework-listing.component.mjs +43 -25
  73. package/esm2020/lib/workflow-program/create-program-ui/define-framework-listing/pipes/sub-cat-indeter.pipe.mjs +4 -4
  74. package/esm2020/lib/workflow-program/create-program-ui/floating-bar/floating-bar.component.mjs +1 -2
  75. package/esm2020/lib/workflow-program/create-program-ui/pagination/pagination/pagination.component.mjs +25 -14
  76. package/esm2020/lib/workflow-program/create-program-ui/pipes/assessment-resolver.pipe.mjs +6 -3
  77. package/esm2020/lib/workflow-program/create-program-ui/role-list/role-list.component.mjs +25 -19
  78. package/esm2020/lib/workflow-program/create-program-ui/user-group-list/user-group-list.component.mjs +1 -4
  79. package/esm2020/lib/workflow-program/workflow-program.component.mjs +232 -110
  80. package/esm2020/lib/workflow-services/add-risk.service.mjs +1 -2
  81. package/esm2020/lib/workflow-services/assessment.service.mjs +1 -5
  82. package/esm2020/lib/workflow-services/programs.service.mjs +173 -57
  83. package/fesm2015/vcomply-workflow-engine.mjs +1380 -938
  84. package/fesm2015/vcomply-workflow-engine.mjs.map +1 -1
  85. package/fesm2020/vcomply-workflow-engine.mjs +1390 -943
  86. package/fesm2020/vcomply-workflow-engine.mjs.map +1 -1
  87. package/lib/formgroup/cs-switch/cs-switch.component.d.ts +2 -3
  88. package/lib/sharedComponents/assessment-list/assessment-list.component.d.ts +4 -5
  89. package/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.d.ts +2 -3
  90. package/lib/sharedComponents/bulk-view/bulk-view.component.d.ts +2 -3
  91. package/lib/sharedComponents/frequency/frequency-lifecycle/frequency-lifecycle.component.d.ts +2 -4
  92. package/lib/sharedComponents/frequency/frequency-ongoing/frequency-ongoing.component.d.ts +1 -1
  93. package/lib/sharedComponents/link-program/restapi.service.d.ts +3 -3
  94. package/lib/sharedComponents/no-data/no-data.component.d.ts +2 -4
  95. package/lib/ui-kit/formgroup/cs-switch/cs-switch.component.d.ts +2 -3
  96. package/lib/workflow/shared/components/edit-mode/edit-mode.component.d.ts +2 -3
  97. package/lib/workflow/shared/components/list-popup/list-popup.component.d.ts +2 -3
  98. package/lib/workflow/shared/components/table-card/table-card.component.d.ts +2 -5
  99. package/lib/workflow-program/create-program-ui/assessment-picker/assessment-picker.component.d.ts +8 -9
  100. package/lib/workflow-program/create-program-ui/pagination/pagination/pagination.component.d.ts +2 -4
  101. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  import { HttpParams } from '@angular/common/http';
2
- import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
+ import { Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "../../workflow-services/responsibility.service";
5
5
  import * as i2 from "@angular/common";
@@ -26,7 +26,7 @@ export class ProgramListingComponent {
26
26
  this.mode = 'CREATE';
27
27
  this.previousSelectedValues = {
28
28
  program: {},
29
- categories: []
29
+ categories: [],
30
30
  };
31
31
  this.programData = {
32
32
  data: [],
@@ -59,7 +59,7 @@ export class ProgramListingComponent {
59
59
  totalPages: 0,
60
60
  totalRecords: 0,
61
61
  currentPage: 1,
62
- selectedCategories: []
62
+ selectedCategories: [],
63
63
  };
64
64
  this.showCategories = false;
65
65
  this.searchString = '';
@@ -90,11 +90,9 @@ export class ProgramListingComponent {
90
90
  this.programSubTab = 'PROGRAMS';
91
91
  }
92
92
  set getSelectedCategories(category) {
93
- console.log('selectedCategoriesselectedCategories', category);
94
93
  this.selectedCategories = category;
95
94
  this.tempSelectedCategories = JSON.stringify(category);
96
95
  }
97
- ;
98
96
  set getLinkedProgram(program) {
99
97
  this.selectedProgramsDetail = [];
100
98
  this.selectedProgramsId = [];
@@ -103,7 +101,9 @@ export class ProgramListingComponent {
103
101
  this.selectedProgramsDetail.forEach((ele) => {
104
102
  this.selectedProgramsId.push(ele?._id);
105
103
  this.getSelectedProgramCount(true, ele?.programType);
106
- (ele?.isViewOnlyProgram) ? this.viewOnlyProgramsCategoryId?.push(ele?.category_id) : null;
104
+ ele?.isViewOnlyProgram
105
+ ? this.viewOnlyProgramsCategoryId?.push(ele?.category_id)
106
+ : null;
107
107
  });
108
108
  }
109
109
  ngOnInit() {
@@ -149,7 +149,9 @@ export class ProgramListingComponent {
149
149
  this.getProgramsCount();
150
150
  this.previousSelectedValues = {
151
151
  programs: this.currentProgram,
152
- categories: (this.selectedCategories.length) ? [...new Set(this.selectedCategories)] : [],
152
+ categories: this.selectedCategories.length
153
+ ? [...new Set(this.selectedCategories)]
154
+ : [],
153
155
  };
154
156
  this.preservePreviousDetails();
155
157
  }
@@ -161,7 +163,9 @@ export class ProgramListingComponent {
161
163
  if (this.responsibilityId) {
162
164
  params = params.append('reportId', this.responsibilityId);
163
165
  }
164
- this.responsibilityService.getProgramsList(params, this.selectedProgramsId).subscribe({
166
+ this.responsibilityService
167
+ .getProgramsList(params, this.selectedProgramsId)
168
+ .subscribe({
165
169
  next: (res) => {
166
170
  const allCategories = res.data;
167
171
  this.categoryData.selectedCategories = allCategories.filter((ele) => this.selectedCategories.includes(ele.category_id));
@@ -169,9 +173,9 @@ export class ProgramListingComponent {
169
173
  this.selectedIds.push(element.category_id);
170
174
  });
171
175
  },
172
- error: err => {
176
+ error: (err) => {
173
177
  console.error(err);
174
- }
178
+ },
175
179
  });
176
180
  }
177
181
  handleSearch(event) {
@@ -194,7 +198,9 @@ export class ProgramListingComponent {
194
198
  // this.getSelectedProgramCount(event, program?.programType);
195
199
  if (event) {
196
200
  if (!this.feature.isFeatureEnabled('ff_deprecate_primary_program_flag')) {
197
- Object.keys(this.currentProgram ?? {}).length ? null : this.currentProgram = program;
201
+ Object.keys(this.currentProgram ?? {}).length
202
+ ? null
203
+ : (this.currentProgram = program);
198
204
  }
199
205
  // this.currentProgram = program;
200
206
  this.selectedIds = [];
@@ -227,7 +233,8 @@ export class ProgramListingComponent {
227
233
  this.selectedProgramsId?.splice(indexOfId, 1);
228
234
  }
229
235
  this.isPrimaryUnchecked = false;
230
- if (this.currentProgram && this.currentProgram?.category_id === program?.category_id) {
236
+ if (this.currentProgram &&
237
+ this.currentProgram?.category_id === program?.category_id) {
231
238
  // this.primaryConfirmationMessage = 'You cannot deselect this Program since this is the <em>Primary Program</em> for this responsibility. To proceed, first select another Program as the <em>Primary Program</em>.';
232
239
  this.isPrimaryConfirmation = true;
233
240
  this.isPrimaryUnchecked = true;
@@ -260,7 +267,8 @@ export class ProgramListingComponent {
260
267
  if (!event) {
261
268
  this.currentProgram = {};
262
269
  }
263
- this.primaryConfirmationMessage = 'Once confirmed, the <em>Primary Program</em> for this responsibility will be changed. Hence, all the default settings related to the new <em>Primary Program</em> will now apply to this responsibility.';
270
+ this.primaryConfirmationMessage =
271
+ 'Once confirmed, the <em>Primary Program</em> for this responsibility will be changed. Hence, all the default settings related to the new <em>Primary Program</em> will now apply to this responsibility.';
264
272
  this.isPrimaryConfirmation = true;
265
273
  }
266
274
  if (event && !this.currentProgram) {
@@ -276,7 +284,8 @@ export class ProgramListingComponent {
276
284
  */
277
285
  updatePrimaryProgram(event) {
278
286
  if (event && this.isPrimaryUnchecked) {
279
- const indexOfProgram = this.selectedProgramsDetail?.findIndex((el) => el?.category_id === JSON.parse(this.tempPrimaryProgram ?? {})?.category_id);
287
+ const indexOfProgram = this.selectedProgramsDetail?.findIndex((el) => el?.category_id ===
288
+ JSON.parse(this.tempPrimaryProgram ?? {})?.category_id);
280
289
  if (indexOfProgram !== -1) {
281
290
  this.selectedProgramsDetail?.splice(indexOfProgram, 1);
282
291
  }
@@ -288,13 +297,19 @@ export class ProgramListingComponent {
288
297
  this.currentProgram = {};
289
298
  }
290
299
  else if (!event && this.isPrimaryUnchecked) {
291
- this.updateSelectedPrograms(true, this.tempPrimaryProgram?.length ? JSON.parse(this.tempPrimaryProgram ?? {}) : {});
292
- this.currentProgram = this.tempPrimaryProgram?.length ? JSON.parse(this.tempPrimaryProgram ?? {}) : {};
300
+ this.updateSelectedPrograms(true, this.tempPrimaryProgram?.length
301
+ ? JSON.parse(this.tempPrimaryProgram ?? {})
302
+ : {});
303
+ this.currentProgram = this.tempPrimaryProgram?.length
304
+ ? JSON.parse(this.tempPrimaryProgram ?? {})
305
+ : {};
293
306
  this.isPrimaryConfirmation = false;
294
307
  }
295
308
  else if (event) {
296
309
  // this.currentProgram = this.isPrimaryUnchecked ? {} : JSON.parse(this.tempPrimaryProgram);
297
- this.updateSelectedPrograms(this.isPrimaryUnchecked ? false : true, this.tempPrimaryProgram?.length ? JSON.parse(this.tempPrimaryProgram ?? {}) : {});
310
+ this.updateSelectedPrograms(this.isPrimaryUnchecked ? false : true, this.tempPrimaryProgram?.length
311
+ ? JSON.parse(this.tempPrimaryProgram ?? {})
312
+ : {});
298
313
  this.isPrimaryConfirmation = false;
299
314
  }
300
315
  else {
@@ -302,7 +317,9 @@ export class ProgramListingComponent {
302
317
  this.currentProgram = {};
303
318
  // this.updateSelectedPrograms(false, JSON.parse(currentPrimary)?? {});
304
319
  this.updateSelectedPrograms(true, JSON.parse(currentPrimary) ?? {});
305
- this.currentProgram = this.tempPrimaryProgram?.length ? JSON.parse(this.tempPrimaryProgram ?? {}) : {};
320
+ this.currentProgram = this.tempPrimaryProgram?.length
321
+ ? JSON.parse(this.tempPrimaryProgram ?? {})
322
+ : {};
306
323
  this.isPrimaryConfirmation = false;
307
324
  }
308
325
  this.isPrimaryUnchecked = false;
@@ -325,7 +342,9 @@ export class ProgramListingComponent {
325
342
  if (this.responsibilityId) {
326
343
  params = params.append('reportId', this.responsibilityId);
327
344
  }
328
- this.responsibilityService.getProgramsList(params, this.selectedProgramsId).subscribe({
345
+ this.responsibilityService
346
+ .getProgramsList(params, this.selectedProgramsId)
347
+ .subscribe({
329
348
  next: (res) => {
330
349
  const allCategories = res.data;
331
350
  this.categoryData.selectedCategories = res.data;
@@ -334,10 +353,10 @@ export class ProgramListingComponent {
334
353
  });
335
354
  this.loader = false;
336
355
  },
337
- error: err => {
356
+ error: (err) => {
338
357
  console.error(err);
339
358
  this.loader = false;
340
- }
359
+ },
341
360
  });
342
361
  }
343
362
  }
@@ -347,7 +366,8 @@ export class ProgramListingComponent {
347
366
  }
348
367
  }
349
368
  checkCategoriesSelection() {
350
- if (this.categoryData.selectedCategories.length == this.categoryData.totalRecords) {
369
+ if (this.categoryData.selectedCategories.length ==
370
+ this.categoryData.totalRecords) {
351
371
  return 'checked';
352
372
  }
353
373
  else if (!this.categoryData.selectedCategories.length) {
@@ -375,9 +395,11 @@ export class ProgramListingComponent {
375
395
  if (!this.hideProgramsList) {
376
396
  this.showCategories = false;
377
397
  if (this.previousSelectedValues?.program?._id == this.currentProgram) {
378
- this.categoryData.selectedCategories = [...new Set(this.previousSelectedValues.categories)];
398
+ this.categoryData.selectedCategories = [
399
+ ...new Set(this.previousSelectedValues.categories),
400
+ ];
379
401
  this.selectedIds = [];
380
- this.categoryData.selectedCategories.forEach(element => {
402
+ this.categoryData.selectedCategories.forEach((element) => {
381
403
  this.selectedIds.push(element);
382
404
  });
383
405
  }
@@ -440,18 +462,25 @@ export class ProgramListingComponent {
440
462
  this.programData.to = res.to;
441
463
  this.programData.totalPages = res.totalPages;
442
464
  this.programData.totalRecords = res.totalRecords;
443
- this.programData.AllInternalControlsProgramsCount = res.AllInternalControlsProgramsCount;
465
+ this.programData.AllInternalControlsProgramsCount =
466
+ res.AllInternalControlsProgramsCount;
444
467
  this.programData.AllOthersProgramsCount = res.AllOthersProgramsCount;
445
- this.programData.AllRegulationProgramsCount = res.AllRegulationProgramsCount;
446
- this.programData.AllStandardProgramsCount = res.AllStandardProgramsCount;
447
- this.programData.AllProgramsCount = res?.AllProgramsCount ? res?.AllProgramsCount : 0;
448
- this.programData.AllViewOnlyProgramCount = res?.AllViewOnlyProgramCount ? res?.AllViewOnlyProgramCount : 0;
468
+ this.programData.AllRegulationProgramsCount =
469
+ res.AllRegulationProgramsCount;
470
+ this.programData.AllStandardProgramsCount =
471
+ res.AllStandardProgramsCount;
472
+ this.programData.AllProgramsCount = res?.AllProgramsCount
473
+ ? res?.AllProgramsCount
474
+ : 0;
475
+ this.programData.AllViewOnlyProgramCount = res?.AllViewOnlyProgramCount
476
+ ? res?.AllViewOnlyProgramCount
477
+ : 0;
449
478
  this.loader = false;
450
479
  },
451
- error: err => {
480
+ error: (err) => {
452
481
  console.error(err);
453
482
  this.loader = false;
454
- }
483
+ },
455
484
  });
456
485
  }
457
486
  getProgramsCount(paramsObject) {
@@ -466,16 +495,20 @@ export class ProgramListingComponent {
466
495
  }
467
496
  this.responsibilityService.getProgramsListCount(params).subscribe({
468
497
  next: (res) => {
469
- this.programTabDataCount.allRegulationProgramsCount = res?.AllRegulationProgramsCount;
470
- this.programTabDataCount.allStandardProgramsCount = res?.AllStandardProgramsCount;
471
- this.programTabDataCount.allInternalControlsProgramsCount = res?.AllInternalControlsProgramsCount;
472
- this.programTabDataCount.allOthersProgramsCount = res?.AllOthersProgramsCount;
498
+ this.programTabDataCount.allRegulationProgramsCount =
499
+ res?.AllRegulationProgramsCount;
500
+ this.programTabDataCount.allStandardProgramsCount =
501
+ res?.AllStandardProgramsCount;
502
+ this.programTabDataCount.allInternalControlsProgramsCount =
503
+ res?.AllInternalControlsProgramsCount;
504
+ this.programTabDataCount.allOthersProgramsCount =
505
+ res?.AllOthersProgramsCount;
473
506
  this.programCountLoader = false;
474
507
  },
475
- error: err => {
508
+ error: (err) => {
476
509
  console.error(err);
477
510
  this.programCountLoader = false;
478
- }
511
+ },
479
512
  });
480
513
  }
481
514
  getCategoriesList(queryObject) {
@@ -489,25 +522,28 @@ export class ProgramListingComponent {
489
522
  if (this.responsibilityId) {
490
523
  params = params.append('reportId', this.responsibilityId);
491
524
  }
492
- this.responsibilityService.getProgramsList(params, [...new Set(this.selectedProgramsId)]).subscribe({
525
+ this.responsibilityService
526
+ .getProgramsList(params, [...new Set(this.selectedProgramsId)])
527
+ .subscribe({
493
528
  next: (res) => {
494
529
  this.categoryData.data = res.data;
495
530
  this.categoryData.from = res.from;
496
531
  this.categoryData.to = res.to;
497
532
  this.categoryData.totalPages = res.totalPages;
498
533
  this.categoryData.totalRecords = res.totalRecords;
499
- this.selectedSubCategoryIds = res?.selectedSubCategoryIds?.length ? res?.selectedSubCategoryIds : [];
534
+ this.selectedSubCategoryIds = res?.selectedSubCategoryIds?.length
535
+ ? res?.selectedSubCategoryIds
536
+ : [];
500
537
  this.loader = false;
501
538
  },
502
- error: err => {
539
+ error: (err) => {
503
540
  console.error(err);
504
541
  this.loader = false;
505
- }
542
+ },
506
543
  });
507
544
  this.showCategories = true;
508
545
  }
509
- saveProgram() {
510
- }
546
+ saveProgram() { }
511
547
  selectCategory(mode, category) {
512
548
  if (mode) {
513
549
  this.selectedIds.push(category.category_id);
@@ -530,11 +566,22 @@ export class ProgramListingComponent {
530
566
  this.selectedIds.splice(index, 1);
531
567
  }
532
568
  close() {
533
- const currentProgram = this.preservePrimaryProgram?.length ? JSON.parse(this.preservePrimaryProgram) : {};
534
- const selectedProgramsId = this.preservedProgramsId?.length ? JSON.parse(this.preservedProgramsId) : undefined;
535
- const selectedProgramsDetail = this.preservedSelectedPrograms?.length ? JSON.parse(this.preservedSelectedPrograms) : [];
536
- if (this.preservePrimaryProgram?.length && this.preservedSelectedPrograms?.length) {
537
- this.saveSelectedProgram.emit({ program: currentProgram, categories: JSON.parse(this.tempSelectedCategories), linkedProgram: selectedProgramsDetail });
569
+ const currentProgram = this.preservePrimaryProgram?.length
570
+ ? JSON.parse(this.preservePrimaryProgram)
571
+ : {};
572
+ const selectedProgramsId = this.preservedProgramsId?.length
573
+ ? JSON.parse(this.preservedProgramsId)
574
+ : undefined;
575
+ const selectedProgramsDetail = this.preservedSelectedPrograms?.length
576
+ ? JSON.parse(this.preservedSelectedPrograms)
577
+ : [];
578
+ if (this.preservePrimaryProgram?.length &&
579
+ this.preservedSelectedPrograms?.length) {
580
+ this.saveSelectedProgram.emit({
581
+ program: currentProgram,
582
+ categories: JSON.parse(this.tempSelectedCategories),
583
+ linkedProgram: selectedProgramsDetail,
584
+ });
538
585
  }
539
586
  // this.saveSelectedProgram.emit({program: currentProgram, categories: this.selectedIds, linkedProgram: selectedProgramsDetail });
540
587
  this.closeEvent.emit();
@@ -545,14 +592,22 @@ export class ProgramListingComponent {
545
592
  }
546
593
  else {
547
594
  const selectedCategoryIds = this.selectedIds.concat(this.selectedSubCategoryIds);
548
- this.saveSelectedProgram.emit({ program: this.currentProgram, categories: [...new Set(selectedCategoryIds)], linkedProgram: this.selectedProgramsDetail });
595
+ this.saveSelectedProgram.emit({
596
+ program: this.currentProgram,
597
+ categories: [...new Set(selectedCategoryIds)],
598
+ linkedProgram: this.selectedProgramsDetail,
599
+ });
549
600
  // this.saveSelectedProgram.emit({ program: this.currentProgram, categories: this.selectedIds });
550
601
  }
551
602
  }
552
603
  saveChanges(value) {
553
604
  if (value) {
554
605
  const selectedCategoryIds = this.selectedIds.concat(this.selectedSubCategoryIds);
555
- this.saveSelectedProgram.emit({ program: this.currentProgram, categories: [...new Set(selectedCategoryIds)], linkedProgram: this.selectedProgramsDetail });
606
+ this.saveSelectedProgram.emit({
607
+ program: this.currentProgram,
608
+ categories: [...new Set(selectedCategoryIds)],
609
+ linkedProgram: this.selectedProgramsDetail,
610
+ });
556
611
  // this.saveSelectedProgram.emit({ program: this.currentProgram, categories: this.selectedIds });
557
612
  }
558
613
  else {
@@ -587,16 +642,24 @@ export class ProgramListingComponent {
587
642
  // switch (this.currentProgram.programType) {
588
643
  switch (programType) {
589
644
  case 0:
590
- event ? this.programData.SelectedOthersProgramsCount++ : this.programData.SelectedOthersProgramsCount--;
645
+ event
646
+ ? this.programData.SelectedOthersProgramsCount++
647
+ : this.programData.SelectedOthersProgramsCount--;
591
648
  break;
592
649
  case 1:
593
- event ? this.programData.SelectedRegulationProgramsCount++ : this.programData.SelectedRegulationProgramsCount--;
650
+ event
651
+ ? this.programData.SelectedRegulationProgramsCount++
652
+ : this.programData.SelectedRegulationProgramsCount--;
594
653
  break;
595
654
  case 2:
596
- event ? this.programData.SelectedStandardProgramsCount++ : this.programData.SelectedStandardProgramsCount--;
655
+ event
656
+ ? this.programData.SelectedStandardProgramsCount++
657
+ : this.programData.SelectedStandardProgramsCount--;
597
658
  break;
598
659
  case 3:
599
- event ? this.programData.SelectedInternalControlsProgramsCount++ : this.programData.SelectedInternalControlsProgramsCount--;
660
+ event
661
+ ? this.programData.SelectedInternalControlsProgramsCount++
662
+ : this.programData.SelectedInternalControlsProgramsCount--;
600
663
  break;
601
664
  }
602
665
  }
@@ -617,9 +680,15 @@ export class ProgramListingComponent {
617
680
  */
618
681
  preservePreviousDetails() {
619
682
  if (this.selectedProgram[0]?.length || this.currentProgram) {
620
- this.preservePrimaryProgram = this.selectedProgram?.length ? JSON.stringify(this.selectedProgram[0]) : {};
621
- this.preservedProgramsId = this.selectedProgramsId?.length ? JSON.stringify(this.selectedProgramsId) : [];
622
- this.preservedSelectedPrograms = this.selectedProgramsDetail ? JSON.stringify(this.selectedProgramsDetail) : [];
683
+ this.preservePrimaryProgram = this.selectedProgram?.length
684
+ ? JSON.stringify(this.selectedProgram[0])
685
+ : {};
686
+ this.preservedProgramsId = this.selectedProgramsId?.length
687
+ ? JSON.stringify(this.selectedProgramsId)
688
+ : [];
689
+ this.preservedSelectedPrograms = this.selectedProgramsDetail
690
+ ? JSON.stringify(this.selectedProgramsDetail)
691
+ : [];
623
692
  }
624
693
  else {
625
694
  this.selectedProgramsDetail = [];
@@ -667,4 +736,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
667
736
  }], closeEvent: [{
668
737
  type: Output
669
738
  }] } });
670
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbS1saXN0aW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3NoYXJlZENvbXBvbmVudHMvcHJvZ3JhbS1saXN0aW5nL3Byb2dyYW0tbGlzdGluZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92eC13b3JrZmxvdy1lbmdpbmUvc3JjL2xpYi9zaGFyZWRDb21wb25lbnRzL3Byb2dyYW0tbGlzdGluZy9wcm9ncmFtLWxpc3RpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7Ozs7QUFTMUYsTUFBTSxPQUFPLHVCQUF1QjtJQW1IbEMsWUFBb0IscUJBQTRDO1FBQTVDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFsSGhFLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixXQUFNLEdBQUcsS0FBSyxDQUFDO1FBSU4sZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUNqQywyQ0FBMkM7UUFFM0MsK0JBQTBCLEdBQVUsRUFBRSxDQUFDO1FBQ3ZDLHVCQUFrQixHQUFVLEVBQUUsQ0FBQztRQUMvQiwyQkFBc0IsR0FBUSxFQUFFLENBQUM7UUFPeEIscUJBQWdCLEdBQUcsRUFBRSxDQUFDO1FBSXRCLFNBQUksR0FBVyxRQUFRLENBQUM7UUFvQmpDLDJCQUFzQixHQUFLO1lBQ3pCLE9BQU8sRUFBQyxFQUFFO1lBQ1YsVUFBVSxFQUFDLEVBQUU7U0FDZCxDQUFBO1FBQ0QsZ0JBQVcsR0FBZ0I7WUFDekIsSUFB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Z0JBRUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDc0IsYUFBYTtzQkFBeEMsU0FBUzt1QkFBQyxlQUFlO2dCQUNHLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQU1DLGdCQUFnQjtzQkFBM0MsS0FBSzt1QkFBQyxlQUFlO2dCQWdGWixtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSZXNwb25zaWJpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi8uLi93b3JrZmxvdy1zZXJ2aWNlcy9yZXNwb25zaWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgY2F0ZWdvcnlMaXN0LCBwcm9ncmFtTGlzdCB9IGZyb20gJy4vcHJvZ3JhbS1saXN0LW1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXByb2dyYW0tbGlzdGluZycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb2dyYW0tbGlzdGluZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcHJvZ3JhbS1saXN0aW5nLmNvbXBvbmVudC5sZXNzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFByb2dyYW1MaXN0aW5nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBhbmltYXRpb24gPSBmYWxzZTtcclxuICBzdWJMaXN0ID0gZmFsc2U7XHJcbiAgbG9hZGVyID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHJvZ3JhbXNMaXN0OiBhbnk7XHJcbiAgLy8gQElucHV0KCkgYWxsUHJvZ3JhbXM6IGFueVtdID0gW107XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRQcm9ncmFtITogYW55O1xyXG4gIEBJbnB1dCgpIG9wZW5lZEZyb206IHN0cmluZyA9ICcnO1xyXG4gIC8vIEBJbnB1dCgpIHNlbGVjdGVkQ2F0ZWdvcmllczogYW55W10gPSBbXTtcclxuXHJcbiAgdmlld09ubHlQcm9ncmFtc0NhdGVnb3J5SWQ6IGFueVtdID0gW107XHJcbiAgc2VsZWN0ZWRDYXRlZ29yaWVzOiBhbnlbXSA9IFtdO1xyXG4gIHRlbXBTZWxlY3RlZENhdGVnb3JpZXM6IGFueSA9IFtdO1xyXG4gIEBJbnB1dCgnc2VsZWN0ZWRDYXRlZ29yaWVzJykgc2V0IGdldFNlbGVjdGVkQ2F0ZWdvcmllcyhjYXRlZ29yeTogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZygnc2VsZWN0ZWRDYXRlZ29yaWVzc2VsZWN0ZWRDYXRlZ29yaWVzJyxjYXRlZ29yeSlcclxuICAgIHRoaXMuc2VsZWN0ZWRDYXRlZ29yaWVzID0gY2F0ZWdvcnk7XHJcbiAgICB0aGlzLnRlbXBTZWxlY3RlZENhdGVnb3JpZXMgPSBKU09OLnN0cmluZ2lmeShjYXRlZ29yeSk7XHJcbiAgICBcclxuICB9O1xyXG4gIEBJbnB1dCgpIHJlc3BvbnNpYmlsaXR5SWQgPSAnJztcclxuICBASW5wdXQoKSBmZWF0dXJlITogYW55O1xyXG5cclxuICBASW5wdXQoKSBoaWRlUHJvZ3JhbXNMaXN0ITogYW55O1xyXG4gIEBJbnB1dCgpIG1vZGU6IHN0cmluZyA9ICdDUkVBVEUnO1xyXG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaFByb2dyYW0nKSBzZWFyY2hQcm9ncmFtITogYW55O1xyXG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaENhdGVnb3J5Jykgc2VhcmNoQ2F0ZWdvcnkhOiBhbnk7XHJcblxyXG4gIHByZXNlcnZlZFNlbGVjdGVkUHJvZ3JhbXM6IGFueTtcclxuICBwcmVzZXJ2ZWRQcm9ncmFtc0lkOiBhbnk7XHJcbiAgcHJlc2VydmVQcmltYXJ5UHJvZ3JhbTogYW55O1xyXG4gIFxyXG4gIEBJbnB1dCgnbGlua2VkUHJvZ3JhbScpIHNldCBnZXRMaW5rZWRQcm9ncmFtKHByb2dyYW06IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsID0gW107XHJcbiAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNJZCA9IFtdO1xyXG4gICAgdGhpcy52aWV3T25seVByb2dyYW1zQ2F0ZWdvcnlJZCA9IFtdO1xyXG4gICAgdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsID0gcHJvZ3JhbTtcclxuICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0RldGFpbC5mb3JFYWNoKCAoZWxlOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW1zSWQucHVzaChlbGU/Ll9pZCk7XHJcbiAgICAgIHRoaXMuZ2V0U2VsZWN0ZWRQcm9ncmFtQ291bnQodHJ1ZSAsIGVsZT8ucHJvZ3JhbVR5cGUpO1xyXG4gICAgICAoZWxlPy5pc1ZpZXdPbmx5UHJvZ3JhbSkgPyB0aGlzLnZpZXdPbmx5UHJvZ3JhbXNDYXRlZ29yeUlkPy5wdXNoKGVsZT8uY2F0ZWdvcnlfaWQpIDogbnVsbDtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwcmV2aW91c1NlbGVjdGVkVmFsdWVzOmFueT17XHJcbiAgICBwcm9ncmFtOnt9LFxyXG4gICAgY2F0ZWdvcmllczpbXVxyXG4gIH1cclxuICBwcm9ncmFtRGF0YTogcHJvZ3JhbUxpc3QgPSB7XHJcbiAgICBkYXRhOiBbXSxcclxuICAgIGZyb206IDAsXHJcbiAgICB0bzogMCxcclxuICAgIHRvdGFsUGFnZXM6IDAsXHJcbiAgICB0b3RhbFJlY29yZHM6IDAsXHJcbiAgICBjdXJyZW50UGFnZTogMSxcclxuICAgIEFsbEludGVybmFsQ29udHJvbHNQcm9ncmFtc0NvdW50OiAwLFxyXG4gICAgQWxsT3RoZXJzUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIEFsbFJlZ3VsYXRpb25Qcm9ncmFtc0NvdW50OiAwLFxyXG4gICAgQWxsU3RhbmRhcmRQcm9ncmFtc0NvdW50OiAwLFxyXG4gICAgU2VsZWN0ZWRJbnRlcm5hbENvbnRyb2xzUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIFNlbGVjdGVkT3RoZXJzUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIFNlbGVjdGVkUmVndWxhdGlvblByb2dyYW1zQ291bnQ6IDAsXHJcbiAgICBTZWxlY3RlZFN0YW5kYXJkUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIEFsbFByb2dyYW1zQ291bnQ6MCxcclxuICAgIEFsbFZpZXdPbmx5UHJvZ3JhbUNvdW50OiAwLFxyXG4gIH1cclxuXHJcbiAgcHJvZ3JhbVRhYkRhdGFDb3VudDogYW55ID0ge1xyXG4gICAgYWxsSW50ZXJuYWxDb250cm9sc1Byb2dyYW1zQ291bnQ6IDAsXHJcbiAgICBhbGxPdGhlcnNQcm9ncmFtc0NvdW50OiAwLFxyXG4gICAgYWxsUmVndWxhdGlvblByb2dyYW1zQ291bnQ6IDAsXHJcbiAgICBhbGxTdGFuZGFyZFByb2dyYW1zQ291bnQ6IDAsXHJcbiAgfVxyXG5cclxuICBjYXRlZ29yeURhdGE6IGNhdGVnb3J5TGlzdCA9IHtcclxuICAgIGRhdGE6IFtdLFxyXG4gICAgZnJvbTogMCxcclxuICAgIHRvOiAwLFxyXG4gICAgdG90YWxQYWdlczogMCxcclxuICAgIHRvdGFsUmVjb3JkczogMCxcclxuICAgIGN1cnJlbnRQYWdlOiAxLFxyXG4gICAgc2VsZWN0ZWRDYXRlZ29yaWVzOiBbXVxyXG4gIH1cclxuXHJcbiAgc2hvd0NhdGVnb3JpZXMgPSBmYWxzZTtcclxuICBjdXJyZW50UHJvZ3JhbSE6IGFueTtcclxuICBzZWFyY2hTdHJpbmc6IHN0cmluZyA9ICcnO1xyXG4gIGNhdGVnb3J5U2VhcmNoU3RyaW5nOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgYWN0aXZlVGFiOiAncmVndWxhdGlvbnMnIHwgJ3N0YW5kYXJkcycgfCAnaW50ZXJuYWxfY29udHJvbHMnIHwgJ290aGVycycgPSAncmVndWxhdGlvbnMnXHJcbiAgc2VsZWN0ZWRJZHM6IGFueVtdID0gW107XHJcbiAgY2F0ZWdvcnlMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGJsb2NrV2lkdGg6IGFueTtcclxuXHJcbiAgcHJvZ3JhbVR5cGVPYmplY3QgPSB7XHJcbiAgICByZWd1bGF0aW9uczogMSxcclxuICAgIHN0YW5kYXJkczogMixcclxuICAgIGludGVybmFsX2NvbnRyb2xzOiAzLFxyXG4gICAgb3RoZXJzOiAwLFxyXG4gIH1cclxuXHJcbiAgZGlzcGxheUNvbmZpcm1hdGlvbk1lc3NhZ2U6Ym9vbGVhbj1mYWxzZVxyXG4gIHRlbXBQcmltYXJ5UHJvZ3JhbTogYW55ID0ge307XHJcbiAgcHJpbWFyeUNvbmZpcm1hdGlvbk1lc3NhZ2U6IHN0cmluZyA9IGBPbmNlIGNvbmZpcm1lZCwgdGhlIDxlbT5QcmltYXJ5IFByb2dyYW08L2VtPiBmb3IgdGhpcyByZXNwb25zaWJpbGl0eSB3aWxsIGJlIGNoYW5nZWQuIEhlbmNlLCBhbGwgdGhlIGRlZmF1bHQgc2V0dGluZ3MgcmVsYXRlZCB0byB0aGUgbmV3IDxlbT5QcmltYXJ5IFByb2dyYW08L2VtPiB3aWxsIG5vdyBhcHBseSB0byB0aGlzIHJlc3BvbnNpYmlsaXR5LmA7XHJcbiAgaXNQcmltYXJ5Q29uZmlybWF0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNVbmNoZWNrZWRQcm9ncmFtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNQcmltYXJ5VW5jaGVja2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRQcm9ncmFtc0RldGFpbDogYW55ID0gW107XHJcbiAgc2VsZWN0ZWRQcm9ncmFtc0lkOiBhbnkgPSBbXTtcclxuICBwcm9ncmFtQ291bnRMb2FkZXIgPSBmYWxzZTtcclxuICBkZXByZWNhdGVQcmltYXJ5UHJvZ3JhbUZsYWcgPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIHNhdmVTZWxlY3RlZFByb2dyYW0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNsb3NlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgYWxsQ2F0ZWdvcmllczogYW55W10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZXNwb25zaWJpbGl0eVNlcnZpY2U6IFJlc3BvbnNpYmlsaXR5U2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlcHJlY2F0ZVByaW1hcnlQcm9ncmFtRmxhZyA9IHRoaXMuZmVhdHVyZS5pc0ZlYXR1cmVFbmFibGVkKCdmZl9kZXByZWNhdGVfcHJpbWFyeV9wcm9ncmFtX2ZsYWcnKVxyXG4gICAgdGhpcy5hbmltYXRpb24gPSB0cnVlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuYW5pbWF0aW9uID0gZmFsc2U7XHJcbiAgICB9LCAzMDApO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRQcm9ncmFtICYmIHRoaXMuc2VsZWN0ZWRQcm9ncmFtWzBdKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFByb2dyYW0gPSB0aGlzLnNlbGVjdGVkUHJvZ3JhbVswXTtcclxuICAgICAgaWYodGhpcy5tb2RlID09PSAnRURJVCcgfHwgdGhpcy5vcGVuZWRGcm9tID09PSAnUFJPR1JBTV9XT1JLUk9PTScpIHtcclxuICAgICAgICB0aGlzLnZpZXdPbmx5UHJvZ3JhbXNDYXRlZ29yeUlkPy5wdXNoKHRoaXMuY3VycmVudFByb2dyYW0/LmNhdGVnb3J5X2lkKTtcclxuICAgICAgfVxyXG4gICAgICBzd2l0Y2ggKHRoaXMuY3VycmVudFByb2dyYW0/LnByb2dyYW1UeXBlKSB7XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgdGhpcy5hY3RpdmVUYWIgPSAnb3RoZXJzJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgIHRoaXMuYWN0aXZlVGFiID0gJ3JlZ3VsYXRpb25zJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgIHRoaXMuYWN0aXZlVGFiID0gJ3N0YW5kYXJkcyc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICB0aGlzLmFjdGl2ZVRhYiA9ICdpbnRlcm5hbF9jb250cm9scyc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgdGhpcy5hY3RpdmVUYWIgPSAncmVndWxhdGlvbnMnO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5nZXRTZWxlY3RlZFByb2dyYW1Db3VudCgpO1xyXG4gICAgICAvLyBpZiAodGhpcy5zZWxlY3RlZENhdGVnb3JpZXM/Lmxlbmd0aCAmJiB0aGlzLmN1cnJlbnRQcm9ncmFtKSB7XHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZUNhdGVnb3JpZXMoKTtcclxuICAgICAgLy8gfVxyXG4gICAgfVxyXG4gXHJcbiAgICBpZiAodGhpcy5oaWRlUHJvZ3JhbXNMaXN0KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0lkPy5wdXNoKHRoaXMuc2VsZWN0ZWRQcm9ncmFtWzBdPy5faWQpO1xyXG4gICAgICB0aGlzLmdldENhdGVnb3JpZXNMaXN0KCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdldFByb2dyYW1zTGlzdCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5nZXRQcm9ncmFtc0NvdW50KCk7XHJcbiBcclxuICAgIHRoaXMucHJldmlvdXNTZWxlY3RlZFZhbHVlcz17XHJcbiAgICAgIHByb2dyYW1zOiB0aGlzLmN1cnJlbnRQcm9ncmFtLFxyXG4gICAgICBjYXRlZ29yaWVzOih0aGlzLnNlbGVjdGVkQ2F0ZWdvcmllcy5sZW5ndGgpPyAgWy4uLm5ldyBTZXQodGhpcy5zZWxlY3RlZENhdGVnb3JpZXMpXTpbXSxcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByZXNlcnZlUHJldmlvdXNEZXRhaWxzKCk7XHJcbiAgfVxyXG4gIHBvcHVsYXRlQ2F0ZWdvcmllcygpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBbXTtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgLy8gcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncHJvZ3JhbV9pZCcsIHRoaXMuY3VycmVudFByb2dyYW0uX2lkKTtcclxuICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ2lzUGFnaW5hdGlvbicsIGZhbHNlKTtcclxuICAgIGlmKHRoaXMucmVzcG9uc2liaWxpdHlJZCkge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdyZXBvcnRJZCcsdGhpcy5yZXNwb25zaWJpbGl0eUlkKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5nZXRQcm9ncmFtc0xpc3QocGFyYW1zLCB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNJZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgYWxsQ2F0ZWdvcmllcyA9IHJlcy5kYXRhO1xyXG5cclxuICAgICAgICB0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMgPSBhbGxDYXRlZ29yaWVzLmZpbHRlcigoZWxlOmFueSk9PnRoaXMuc2VsZWN0ZWRDYXRlZ29yaWVzLmluY2x1ZGVzKGVsZS5jYXRlZ29yeV9pZCkpXHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5wdXNoKGVsZW1lbnQuY2F0ZWdvcnlfaWQpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiBlcnIgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgaGFuZGxlU2VhcmNoKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLnNlYXJjaFN0cmluZyAhPSBldmVudCkge1xyXG4gICAgICB0aGlzLnByb2dyYW1EYXRhLmN1cnJlbnRQYWdlID0gMTtcclxuICAgICAgdGhpcy5zZWFyY2hTdHJpbmcgPSBldmVudDtcclxuICAgICAgdGhpcy5nZXRQcm9ncmFtc0xpc3QoeyBzZWFyY2g6IHRydWUgfSk7XHJcbiAgICAgIHRoaXMuZ2V0UHJvZ3JhbXNDb3VudCh7IHNlYXJjaDogdHJ1ZSB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgY2F0ZWdvcnlTZWFyY2goZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuY2F0ZWdvcnlTZWFyY2hTdHJpbmcgIT0gZXZlbnQpIHtcclxuICAgICAgdGhpcy5jYXRlZ29yeURhdGEuY3VycmVudFBhZ2UgPSAxO1xyXG4gICAgICB0aGlzLmNhdGVnb3J5U2VhcmNoU3RyaW5nID0gZXZlbnQ7XHJcbiAgICAgIHRoaXMuZ2V0Q2F0ZWdvcmllc0xpc3QoeyBzZWFyY2g6IHRydWUgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdFByb2dyYW0oZXZlbnQ6IGFueSwgcHJvZ3JhbTogYW55KSB7XHJcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkUHJvZ3JhbXMoZXZlbnQsIHByb2dyYW0pO1xyXG4gICAgLy8gdGhpcy5nZXRTZWxlY3RlZFByb2dyYW1Db3VudChldmVudCwgcHJvZ3JhbT8ucHJvZ3JhbVR5cGUpO1xyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIGlmKCF0aGlzLmZlYXR1cmUuaXNGZWF0dXJlRW5hYmxlZCgnZmZfZGVwcmVjYXRlX3ByaW1hcnlfcHJvZ3JhbV9mbGFnJykpe1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuY3VycmVudFByb2dyYW0gPz8ge30pLmxlbmd0aCA/IG51bGwgOiB0aGlzLmN1cnJlbnRQcm9ncmFtID0gcHJvZ3JhbTtcclxuICAgICAgfVxyXG4gICAgICAvLyB0aGlzLmN1cnJlbnRQcm9ncmFtID0gcHJvZ3JhbTtcclxuICAgICAgdGhpcy5zZWxlY3RlZElkcyA9IFtdO1xyXG4gICAgICB0aGlzLmNhdGVnb3J5TGlzdCA9IFtdO1xyXG4gICAgICAvLyB0aGlzLmdldFNlbGVjdGVkUHJvZ3JhbUNvdW50KCk7XHJcbiAgICB9XHJcbiAgICBcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRoZSBldmVudCBpcyB0cnVlLCB0aGVuIHB1c2ggdGhlIHByb2dyYW0gdG8gdGhlIHNlbGVjdGVkUHJvZ3JhbXNEZXRhaWwgYXJyYXkuIElmIHRoZSBldmVudCBpc1xyXG4gICAqIGZhbHNlLCB0aGVuIHJlbW92ZSB0aGUgcHJvZ3JhbSBmcm9tIHRoZSBzZWxlY3RlZFByb2dyYW1zRGV0YWlsIGFycmF5LlxyXG4gICAqIEBwYXJhbSB7YW55fSBldmVudCAtIGJvb2xlYW5cclxuICAgKiBAcGFyYW0ge2FueX0gcHJvZ3JhbSAtIGFueSA9IHtcclxuICAgKi9cclxuICB1cGRhdGVTZWxlY3RlZFByb2dyYW1zKGV2ZW50OiBhbnksIHByb2dyYW06IGFueSkge1xyXG4gICAgaWYoZXZlbnQpIHtcclxuICAgICAgY29uc3QgaW5kZXhPZlByb2dyYW0gPSB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNEZXRhaWw/LmZpbmRJbmRleCggKGVsOiBhbnkpID0+IGVsPy5jYXRlZ29yeV9pZCA9PT0gcHJvZ3JhbT8uY2F0ZWdvcnlfaWQpO1xyXG4gICAgICBpZihpbmRleE9mUHJvZ3JhbSA9PT0gLTEgJiYgT2JqZWN0LmtleXMocHJvZ3JhbSk/Lmxlbmd0aCkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0lkPy5wdXNoKHByb2dyYW0/Ll9pZCk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsPy5wdXNoKHByb2dyYW0pO1xyXG4gICAgICAgIHRoaXMuZ2V0U2VsZWN0ZWRQcm9ncmFtQ291bnQoZXZlbnQsIHByb2dyYW0/LnByb2dyYW1UeXBlKTtcclxuICAgICAgfVxyXG4gICAgfSBcclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGluZGV4T2ZQcm9ncmFtID0gdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsPy5maW5kSW5kZXgoIChlbDogYW55KSA9PiBlbD8uY2F0ZWdvcnlfaWQgPT09IHByb2dyYW0/LmNhdGVnb3J5X2lkKTtcclxuICAgICAgICBpZihpbmRleE9mUHJvZ3JhbSAhPT0gLTEpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0RldGFpbD8uc3BsaWNlKGluZGV4T2ZQcm9ncmFtLCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW5kZXhPZklkID0gdGhpcy5zZWxlY3RlZFByb2dyYW1zSWQ/LmZpbmRJbmRleCggKGVsOiBhbnkpID0+IGVsID09PSBwcm9ncmFtPy5faWQpO1xyXG4gICAgICAgIGlmKGluZGV4T2ZJZCAhPT0gLTEpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0lkPy5zcGxpY2UoaW5kZXhPZklkLCAxKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc1ByaW1hcnlVbmNoZWNrZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5jdXJyZW50UHJvZ3JhbSAmJiB0aGlzLmN1cnJlbnRQcm9ncmFtPy5jYXRlZ29yeV9pZCA9PT0gcHJvZ3JhbT8uY2F0ZWdvcnlfaWQpIHtcclxuICAgICAgICAgIC8vIHRoaXMucHJpbWFyeUNvbmZpcm1hdGlvbk1lc3NhZ2UgPSAnWW91IGNhbm5vdCBkZXNlbGVjdCB0aGlzIFByb2dyYW0gc2luY2UgdGhpcyBpcyB0aGUgPGVtPlByaW1hcnkgUHJvZ3JhbTwvZW0+IGZvciB0aGlzIHJlc3BvbnNpYmlsaXR5LiBUbyBwcm9jZWVkLCBmaXJzdCBzZWxlY3QgYW5vdGhlciBQcm9ncmFtIGFzIHRoZSA8ZW0+UHJpbWFyeSBQcm9ncmFtPC9lbT4uJztcclxuICAgICAgICAgIHRoaXMuaXNQcmltYXJ5Q29uZmlybWF0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuaXNQcmltYXJ5VW5jaGVja2VkID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudGVtcFByaW1hcnlQcm9ncmFtID0gSlNPTi5zdHJpbmdpZnkocHJvZ3JhbSk7XHJcbiAgICAgICAgICAvLyB0aGlzLmN1cnJlbnRQcm9ncmFtID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIC8vIH1cclxuICAgICAgdGhpcy5nZXRTZWxlY3RlZFByb2dyYW1Db3VudChldmVudCwgcHJvZ3JhbT8ucHJvZ3JhbVR5cGUpO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsPy5sZW5ndGggJiYgIXRoaXMuY3VycmVudFByb2dyYW0/Lmxlbmd0aCl7XHJcbiAgICAgIHRoaXMuY3VycmVudFByb2dyYW0gPSB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNEZXRhaWxbMF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnJlbnRQcm9ncmFtID0gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiB0aGUgY3VycmVudFByb2dyYW0gaXMgc2V0LCB0aGVuIHNldCB0aGUgY3VycmVudFByb2dyYW0gdG8gdGhlIHByb2dyYW0gcGFzc2VkIGluLCBhbmQgc2V0IHRoZVxyXG4gICAqIHRlbXBQcmltYXJ5UHJvZ3JhbSB0byB0aGUgY3VycmVudFByb2dyYW0uIFxyXG4gICAqIElmIHRoZSBjdXJyZW50UHJvZ3JhbSBpcyBub3Qgc2V0LCB0aGVuIHNldCB0aGUgY3VycmVudFByb2dyYW0gdG8gdGhlIHByb2dyYW0gcGFzc2VkIGluLlxyXG4gICAqIEBwYXJhbSB7YW55fSBldmVudCAtIGFueSAtIHRoZSBldmVudCB0aGF0IGlzIHRyaWdnZXJlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvbiB0aGUgY2hlY2tib3hcclxuICAgKiBAcGFyYW0ge2FueX0gcHJvZ3JhbSAtIHRoZSBwcm9ncmFtIHRoYXQgaXMgYmVpbmcgc2VsZWN0ZWRcclxuICAgKi9cclxuICBzZXRQcmltYXJ5UHJvZ3JhbShldmVudDogYW55LCBwcm9ncmFtOiBhbnkpIHtcclxuICAgIFxyXG4gICAgaWYodGhpcy5jdXJyZW50UHJvZ3JhbSl7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRUZW1wID0gdGhpcy5jdXJyZW50UHJvZ3JhbTtcclxuICAgICAgdGhpcy50ZW1wUHJpbWFyeVByb2dyYW0gPSBKU09OLnN0cmluZ2lmeShjdXJyZW50VGVtcCk7XHJcbiAgICAgIHRoaXMuY3VycmVudFByb2dyYW0gPSBwcm9ncmFtO1xyXG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkUHJvZ3JhbXModHJ1ZSwgcHJvZ3JhbSlcclxuICAgICAgaWYoIWV2ZW50KXtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQcm9ncmFtID0ge307XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wcmltYXJ5Q29uZmlybWF0aW9uTWVzc2FnZSA9ICdPbmNlIGNvbmZpcm1lZCwgdGhlIDxlbT5QcmltYXJ5IFByb2dyYW08L2VtPiBmb3IgdGhpcyByZXNwb25zaWJpbGl0eSB3aWxsIGJlIGNoYW5nZWQuIEhlbmNlLCBhbGwgdGhlIGRlZmF1bHQgc2V0dGluZ3MgcmVsYXRlZCB0byB0aGUgbmV3IDxlbT5QcmltYXJ5IFByb2dyYW08L2VtPiB3aWxsIG5vdyBhcHBseSB0byB0aGlzIHJlc3BvbnNpYmlsaXR5Lic7XHJcbiAgICAgIHRoaXMuaXNQcmltYXJ5Q29uZmlybWF0aW9uID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmKGV2ZW50ICYmICF0aGlzLmN1cnJlbnRQcm9ncmFtKXtcclxuICAgICAgdGhpcy5jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07XHJcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRQcm9ncmFtcyh0cnVlLCBwcm9ncmFtKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdGhlIHVzZXIgY2xpY2tzIFwiWWVzXCIgb24gdGhlIGNvbmZpcm1hdGlvbiBtb2RhbCwgdGhlbiB0aGUgZnVuY3Rpb24gd2lsbCByZW1vdmUgdGhlIHByb2dyYW0gZnJvbVxyXG4gICAqIHRoZSBzZWxlY3RlZFByb2dyYW1zRGV0YWlsIGFycmF5IGFuZCB0aGUgc2VsZWN0ZWRQcm9ncmFtc0lkIGFycmF5LiBJZiB0aGUgdXNlciBjbGlja3MgXCJOb1wiIG9uIHRoZVxyXG4gICAqIGNvbmZpcm1hdGlvbiBtb2RhbCwgdGhlbiB0aGUgZnVuY3Rpb24gd2lsbCBkbyBub3RoaW5nLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQgLSBib29sZWFuIC0mZ3Q7IHRoaXMgaXMgdGhlIHZhbHVlIG9mIHRoZSBjaGVja2JveFxyXG4gICAqL1xyXG4gIHVwZGF0ZVByaW1hcnlQcm9ncmFtKGV2ZW50OiBib29sZWFuKSB7XHJcbiAgICBpZihldmVudCAmJiB0aGlzLmlzUHJpbWFyeVVuY2hlY2tlZCkge1xyXG4gICAgICBjb25zdCBpbmRleE9mUHJvZ3JhbSA9IHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0RldGFpbD8uZmluZEluZGV4KCAoZWw6IGFueSkgPT4gZWw/LmNhdGVnb3J5X2lkID09PSBKU09OLnBhcnNlKHRoaXMudGVtcFByaW1hcnlQcm9ncmFtID8/IHt9KT8uY2F0ZWdvcnlfaWQpO1xyXG4gICAgICBpZihpbmRleE9mUHJvZ3JhbSAhPT0gLTEpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNEZXRhaWw/LnNwbGljZShpbmRleE9mUHJvZ3JhbSwgMSk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgaW5kZXhPZklkID0gdGhpcy5zZWxlY3RlZFByb2dyYW1zSWQ/LmZpbmRJbmRleCggKGVsOiBhbnkpID0+IGVsID09PSBKU09OLnBhcnNlKHRoaXMudGVtcFByaW1hcnlQcm9ncmFtID8/IHt9KT8uX2lkKTtcclxuICAgICAgaWYoaW5kZXhPZklkICE9PSAtMSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0lkPy5zcGxpY2UoaW5kZXhPZklkLCAxKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlzUHJpbWFyeUNvbmZpcm1hdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmN1cnJlbnRQcm9ncmFtID0ge307XHJcbiAgICB9IGVsc2UgaWYoIWV2ZW50ICYmIHRoaXMuaXNQcmltYXJ5VW5jaGVja2VkKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRQcm9ncmFtcyh0cnVlLCAgdGhpcy50ZW1wUHJpbWFyeVByb2dyYW0/Lmxlbmd0aCA/IEpTT04ucGFyc2UodGhpcy50ZW1wUHJpbWFyeVByb2dyYW0gPz8ge30pIDoge30pO1xyXG4gICAgICB0aGlzLmN1cnJlbnRQcm9ncmFtID0gdGhpcy50ZW1wUHJpbWFyeVByb2dyYW0/Lmxlbmd0aCA/IEpTT04ucGFyc2UodGhpcy50ZW1wUHJpbWFyeVByb2dyYW0gPz8ge30pIDoge307XHJcbiAgICAgIHRoaXMuaXNQcmltYXJ5Q29uZmlybWF0aW9uID0gZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYoZXZlbnQpIHtcclxuICAgICAgLy8gdGhpcy5jdXJyZW50UHJvZ3JhbSA9IHRoaXMuaXNQcmltYXJ5VW5jaGVja2VkID8ge30gOiBKU09OLnBhcnNlKHRoaXMudGVtcFByaW1hcnlQcm9ncmFtKTtcclxuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFByb2dyYW1zKHRoaXMuaXNQcmltYXJ5VW5jaGVja2VkID8gZmFsc2UgOiB0cnVlLCAgdGhpcy50ZW1wUHJpbWFyeVByb2dyYW0/Lmxlbmd0aCA/IEpTT04ucGFyc2UodGhpcy50ZW1wUHJpbWFyeVByb2dyYW0gPz8ge30pIDoge30pXHJcbiAgICAgIHRoaXMuaXNQcmltYXJ5Q29uZmlybWF0aW9uID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgY3VycmVudFByaW1hcnkgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmN1cnJlbnRQcm9ncmFtKTtcclxuICAgICAgdGhpcy5jdXJyZW50UHJvZ3JhbSA9IHt9XHJcbiAgICAgIC8vIHRoaXMudXBkYXRlU2VsZWN0ZWRQcm9ncmFtcyhmYWxzZSwgSlNPTi5wYXJzZShjdXJyZW50UHJpbWFyeSk/PyB7fSk7XHJcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRQcm9ncmFtcyh0cnVlLCBKU09OLnBhcnNlKGN1cnJlbnRQcmltYXJ5KT8/IHt9KTtcclxuICAgICAgdGhpcy5jdXJyZW50UHJvZ3JhbSA9IHRoaXMudGVtcFByaW1hcnlQcm9ncmFtPy5sZW5ndGggPyBKU09OLnBhcnNlKHRoaXMudGVtcFByaW1hcnlQcm9ncmFtID8/IHt9KSA6IHt9O1xyXG4gICAgICB0aGlzLmlzUHJpbWFyeUNvbmZpcm1hdGlvbiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc1ByaW1hcnlVbmNoZWNrZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbGVjdEFsbENhdGVnb3JpZXModmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSWRzID0gW107XHJcbiAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcyA9IFtdO1xyXG4gICAgICBpZiAodGhpcy5jYXRlZ29yeURhdGEudG90YWxQYWdlcyA8IDIpIHtcclxuICAgICAgICB0aGlzLmNhdGVnb3J5RGF0YS5kYXRhLmZvckVhY2goKGVsZTogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSWRzLnB1c2goZWxlLmNhdGVnb3J5X2lkKTtcclxuICAgICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcy5wdXNoKGVsZSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICAgICAgLy8gcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncHJvZ3JhbV9pZCcsIHRoaXMuY3VycmVudFByb2dyYW0/Ll9pZCk7XHJcbiAgICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnaXNQYWdpbmF0aW9uJywgZmFsc2UpO1xyXG4gICAgICAgIGlmKHRoaXMucmVzcG9uc2liaWxpdHlJZCkge1xyXG4gICAgICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncmVwb3J0SWQnLHRoaXMucmVzcG9uc2liaWxpdHlJZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5nZXRQcm9ncmFtc0xpc3QocGFyYW1zLCB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNJZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhbGxDYXRlZ29yaWVzID0gcmVzLmRhdGE7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMgPSByZXMuZGF0YTtcclxuICAgICAgICAgICAgYWxsQ2F0ZWdvcmllcy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSWRzLnB1c2goZWxlbWVudC5jYXRlZ29yeV9pZClcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IGVyciA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzID0gW11cclxuICAgICAgdGhpcy5zZWxlY3RlZElkcyA9IFtdO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG4gIH1cclxuXHJcbiAgY2hlY2tDYXRlZ29yaWVzU2VsZWN0aW9uKCkge1xyXG5cclxuICAgIGlmICh0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMubGVuZ3RoID09IHRoaXMuY2F0ZWdvcnlEYXRhLnRvdGFsUmVjb3Jkcykge1xyXG4gICAgICByZXR1cm4gJ2NoZWNrZWQnO1xyXG4gICAgfSBlbHNlIGlmICghdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gJ3VuY2hlY2tlZCc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJ2luZGV0ZXJtaW5hdGUnXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVuQ2F0ZWdvcmllcygpIHtcclxuICAgIHRoaXMuc2VhcmNoU3RyaW5nID0gJyc7XHJcbiAgICB0aGlzLmNhdGVnb3J5U2VhcmNoU3RyaW5nID0gJyc7XHJcbiAgICBjb25zdCBpc1N1YlByb2dyYW0gPSB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNEZXRhaWw/LnNvbWUoIChlbDogYW55KSA9PiBlbD8uY2hpbGRfaWQ/Lmxlbmd0aCk7XHJcblxyXG4gICAgdGhpcy5wb3B1bGF0ZUNhdGVnb3JpZXMoKTtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRQcm9ncmFtPy5jaGlsZF9pZD8ubGVuZ3RoIHx8IGlzU3ViUHJvZ3JhbSkge1xyXG4gICAgICB0aGlzLnNob3dDYXRlZ29yaWVzID0gdHJ1ZTtcclxuICAgICAgdGhpcy5nZXRDYXRlZ29yaWVzTGlzdCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZElkcyA9IFtdO1xyXG4gICAgICB0aGlzLnNhdmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGJhY2tUb1Byb2dyYW1zKCkge1xyXG4gICAgaWYgKCF0aGlzLmhpZGVQcm9ncmFtc0xpc3QpIHtcclxuICAgICAgdGhpcy5zaG93Q2F0ZWdvcmllcyA9IGZhbHNlO1xyXG4gICAgICBpZih0aGlzLnByZXZpb3VzU2VsZWN0ZWRWYWx1ZXM/LnByb2dyYW0/Ll9pZCA9PSB0aGlzLmN1cnJlbnRQcm9ncmFtKXtcclxuICAgICAgICB0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMgPSBbLi4ubmV3IFNldCh0aGlzLnByZXZpb3VzU2VsZWN0ZWRWYWx1ZXMuY2F0ZWdvcmllcyldO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBbXTtcclxuICAgICAgICB0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMucHVzaChlbGVtZW50KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgdGhpcy5nZXRQcm9ncmFtc0xpc3QoKTtcclxuICAgICAgICB0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSWRzID0gW107XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcyA9IFtdO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSWRzID0gW107XHJcbiAgICAgIHRoaXMuY2xvc2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBjaGFuZ2VUYWIodHlwZTogJ3JlZ3VsYXRpb25zJyB8ICdzdGFuZGFyZHMnIHwgJ2ludGVybmFsX2NvbnRyb2xzJyB8ICdvdGhlcnMnKSB7XHJcbiAgICB0aGlzLnByb2dyYW1TdWJUYWIgPSAnUFJPR1JBTVMnO1xyXG4gICAgdGhpcy5hY3RpdmVUYWIgPSB0eXBlO1xyXG4gICAgdGhpcy5wcm9ncmFtRGF0YS5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICBpZih0aGlzLnNlYXJjaFN0cmluZz8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoU3RyaW5nID0gJyc7XHJcbiAgICAgIHRoaXMuZ2V0UHJvZ3JhbXNDb3VudCgpO1xyXG4gICAgfVxyXG4gICAgLy8gdGhpcy5zZWFyY2hTdHJpbmcgPSAnJztcclxuICAgIHRoaXMuc2VhcmNoUHJvZ3JhbS5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICB0aGlzLmdldFByb2dyYW1zTGlzdCgpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlUGFnZShldmVudDogYW55LCB0eXBlOiAnY2F0ZWdvcnknIHwgJ3Byb2dyYW0nKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAncHJvZ3JhbSc6XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5jdXJyZW50UGFnZSA9IGV2ZW50O1xyXG4gICAgICAgIHRoaXMuZ2V0UHJvZ3JhbXNMaXN0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NhdGVnb3J5JzpcclxuICAgICAgICB0aGlzLmNhdGVnb3J5RGF0YS5jdXJyZW50UGFnZSA9IGV2ZW50O1xyXG4gICAgICAgIHRoaXMuZ2V0Q2F0ZWdvcmllc0xpc3QoKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGdldFByb2dyYW1zTGlzdChwYXJhbXNPYmplY3Q/OiBhbnkpIHtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncHJvZ3JhbVR5cGUnLCB0aGlzLnByb2dyYW1UeXBlT2JqZWN0W3RoaXMuYWN0aXZlVGFiXSk7XHJcbiAgICBpZiAocGFyYW1zT2JqZWN0Py5zZWFyY2ggfHwgdGhpcy5zZWFyY2hTdHJpbmcpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnc2VhcmNoVGV4dCcsIHRoaXMuc2VhcmNoU3RyaW5nKTtcclxuICAgIH0gXHJcbiAgICAvLyBlbHNlIHtcclxuICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3BhZ2VObycsIHRoaXMucHJvZ3JhbURhdGEuY3VycmVudFBhZ2UpO1xyXG4gICAgLy8gfVxyXG4gICAgaWYodGhpcy5wcm9ncmFtU3ViVGFiID09PSAnT1RIRVJfUFJPR1JBTVMnKSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ2lzVmlld09ubHlQcm9ncmFtcycsdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYodGhpcy5yZXNwb25zaWJpbGl0eUlkKSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3JlcG9ydElkJyx0aGlzLnJlc3BvbnNpYmlsaXR5SWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmdldFByb2dyYW1zTGlzdChwYXJhbXMpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuZGF0YSA9IHJlcy5kYXRhO1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuZnJvbSA9IHJlcy5mcm9tO1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEudG8gPSByZXMudG87XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS50b3RhbFBhZ2VzID0gcmVzLnRvdGFsUGFnZXM7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS50b3RhbFJlY29yZHMgPSByZXMudG90YWxSZWNvcmRzO1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuQWxsSW50ZXJuYWxDb250cm9sc1Byb2dyYW1zQ291bnQgPSByZXMuQWxsSW50ZXJuYWxDb250cm9sc1Byb2dyYW1zQ291bnQ7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5BbGxPdGhlcnNQcm9ncmFtc0NvdW50ID0gcmVzLkFsbE90aGVyc1Byb2dyYW1zQ291bnQ7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5BbGxSZWd1bGF0aW9uUHJvZ3JhbXNDb3VudCA9IHJlcy5BbGxSZWd1bGF0aW9uUHJvZ3JhbXNDb3VudDtcclxuICAgICAgICB0aGlzLnByb2dyYW1EYXRhLkFsbFN0YW5kYXJkUHJvZ3JhbXNDb3VudCA9IHJlcy5BbGxTdGFuZGFyZFByb2dyYW1zQ291bnQ7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5BbGxQcm9ncmFtc0NvdW50ID0gcmVzPy5BbGxQcm9ncmFtc0NvdW50ID8gcmVzPy5BbGxQcm9ncmFtc0NvdW50IDogMDtcclxuICAgICAgICB0aGlzLnByb2dyYW1EYXRhLkFsbFZpZXdPbmx5UHJvZ3JhbUNvdW50ID0gcmVzPy5BbGxWaWV3T25seVByb2dyYW1Db3VudCA/IHJlcz8uQWxsVmlld09ubHlQcm9ncmFtQ291bnQgOiAwO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcblxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRQcm9ncmFtc0NvdW50KHBhcmFtc09iamVjdD86IGFueSkge1xyXG4gICAgdGhpcy5wcm9ncmFtQ291bnRMb2FkZXIgPSB0cnVlO1xyXG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICAvLyBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdwcm9ncmFtVHlwZScsIHRoaXMucHJvZ3JhbVR5cGVPYmplY3RbdGhpcy5hY3RpdmVUYWJdKTtcclxuICAgIGlmIChwYXJhbXNPYmplY3Q/LnNlYXJjaCB8fCB0aGlzLnNlYXJjaFN0cmluZykge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdzZWFyY2hUZXh0JywgdGhpcy5zZWFyY2hTdHJpbmcpO1xyXG4gICAgfSBcclxuICAgIGlmKHRoaXMucmVzcG9uc2liaWxpdHlJZCkge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdyZXBvcnRJZCcsdGhpcy5yZXNwb25zaWJpbGl0eUlkKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmdldFByb2dyYW1zTGlzdENvdW50KHBhcmFtcykuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtVGFiRGF0YUNvdW50LmFsbFJlZ3VsYXRpb25Qcm9ncmFtc0NvdW50ID0gcmVzPy5BbGxSZWd1bGF0aW9uUHJvZ3JhbXNDb3VudDtcclxuICAgICAgICB0aGlzLnByb2dyYW1UYWJEYXRhQ291bnQuYWxsU3RhbmRhcmRQcm9ncmFtc0NvdW50ID0gcmVzPy5BbGxTdGFuZGFyZFByb2dyYW1zQ291bnQ7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtVGFiRGF0YUNvdW50LmFsbEludGVybmFsQ29udHJvbHNQcm9ncmFtc0NvdW50ID0gcmVzPy5BbGxJbnRlcm5hbENvbnRyb2xzUHJvZ3JhbXNDb3VudDtcclxuICAgICAgICB0aGlzLnByb2dyYW1UYWJEYXRhQ291bnQuYWxsT3RoZXJzUHJvZ3JhbXNDb3VudCA9IHJlcz8uQWxsT3RoZXJzUHJvZ3JhbXNDb3VudDtcclxuICAgICAgICB0aGlzLnByb2dyYW1Db3VudExvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtQ291bnRMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RlZFN1YkNhdGVnb3J5SWRzOiBhbnlbXSA9IFtdO1xyXG4gIGdldENhdGVnb3JpZXNMaXN0KHF1ZXJ5T2JqZWN0PzogYW55KSB7XHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgIC8vIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3Byb2dyYW1faWQnLCB0aGlzLmN1cnJlbnRQcm9ncmFtPy5faWQpO1xyXG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncGFnZU5vJywgdGhpcy5jYXRlZ29yeURhdGEuY3VycmVudFBhZ2UpO1xyXG4gICAgaWYgKHF1ZXJ5T2JqZWN0Py5zZWFyY2ggfHwgdGhpcy5jYXRlZ29yeVNlYXJjaFN0cmluZykge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdzZWFyY2hUZXh0JywgdGhpcy5jYXRlZ29yeVNlYXJjaFN0cmluZyk7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLnJlc3BvbnNpYmlsaXR5SWQpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncmVwb3J0SWQnLHRoaXMucmVzcG9uc2liaWxpdHlJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2UuZ2V0UHJvZ3JhbXNMaXN0KHBhcmFtcywgWy4uLm5ldyBTZXQodGhpcy5zZWxlY3RlZFByb2dyYW1zSWQpXSApLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLmRhdGEgPSByZXMuZGF0YTtcclxuICAgICAgICB0aGlzLmNhdGVnb3J5RGF0YS5mcm9tID0gcmVzLmZyb207XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEudG8gPSByZXMudG87XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEudG90YWxQYWdlcyA9IHJlcy50b3RhbFBhZ2VzO1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnRvdGFsUmVjb3JkcyA9IHJlcy50b3RhbFJlY29yZHM7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFN1YkNhdGVnb3J5SWRzID0gcmVzPy5zZWxlY3RlZFN1YkNhdGVnb3J5SWRzPy5sZW5ndGggPyByZXM/LnNlbGVjdGVkU3ViQ2F0ZWdvcnlJZHMgOiBbXTtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNob3dDYXRlZ29yaWVzID0gdHJ1ZTtcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgc2F2ZVByb2dyYW0oKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgc2VsZWN0Q2F0ZWdvcnkobW9kZTogYW55LCBjYXRlZ29yeTogYW55KSB7XHJcbiAgICBpZiAobW9kZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSWRzLnB1c2goY2F0ZWdvcnkuY2F0ZWdvcnlfaWQpO1xyXG4gICAgICB0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMucHVzaChjYXRlZ29yeSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDYXRlZ29yaWVzLnB1c2goY2F0ZWdvcnkuY2F0ZWdvcnlfaWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkSWRzLmZpbmRJbmRleCgoZWxlbWVudDogYW55KSA9PiBlbGVtZW50ID09IGNhdGVnb3J5LmNhdGVnb3J5X2lkKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZElkcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICBjb25zdCBjYXRlZ29yeUluZGV4ID0gdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzLmZpbmRJbmRleCgoZWxlOiBhbnkpID0+IGVsZS5jYXRlZ29yeV9pZCA9PSBjYXRlZ29yeS5jYXRlZ29yeV9pZClcclxuICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzLnNwbGljZShjYXRlZ29yeUluZGV4LCAxKTtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9IHRoaXMuc2VsZWN0ZWRDYXRlZ29yaWVzLmZpbmRJbmRleCgoZWxlOiBhbnkpID0+IGVsZSA9PSBjYXRlZ29yeT8uY2F0ZWdvcnlfaWQpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcmllcy5zcGxpY2Uoc2VsZWN0ZWRJbmRleCwgMSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVDYXRlZ29yaWVzKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGNhdGVnb3J5SW5kZXggPSB0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMuZmluZEluZGV4KChlbGU6IGFueSkgPT4gZWxlLmNhdGVnb3J5X2lkID09IGV2ZW50LmNhdGVnb3J5X2lkKVxyXG4gICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzLnNwbGljZShjYXRlZ29yeUluZGV4LCAxKTtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RlZElkcy5maW5kSW5kZXgoKGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudCA9PSBldmVudC5jYXRlZ29yeV9pZCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkSWRzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpIHtcclxuICAgIGNvbnN0IGN1cnJlbnRQcm9ncmFtID0gdGhpcy5wcmVzZXJ2ZVByaW1hcnlQcm9ncmFtPy5sZW5ndGggPyBKU09OLnBhcnNlKHRoaXMucHJlc2VydmVQcmltYXJ5UHJvZ3JhbSkgOiB7fTtcclxuICAgIGNvbnN0IHNlbGVjdGVkUHJvZ3JhbXNJZCA9IHRoaXMucHJlc2VydmVkUHJvZ3JhbXNJZD8ubGVuZ3RoID8gSlNPTi5wYXJzZSh0aGlzLnByZXNlcnZlZFByb2dyYW1zSWQpIDogdW5kZWZpbmVkO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRQcm9ncmFtc0RldGFpbCA9IHRoaXMucHJlc2VydmVkU2VsZWN0ZWRQcm9ncmFtcz8ubGVuZ3RoID8gSlNPTi5wYXJzZSh0aGlzLnByZXNlcnZlZFNlbGVjdGVkUHJvZ3JhbXMpIDogW107XHJcbiAgICBpZih0aGlzLnByZXNlcnZlUHJpbWFyeVByb2dyYW0/Lmxlbmd0aCAmJiB0aGlzLnByZXNlcnZlZFNlbGVjdGVkUHJvZ3JhbXM/Lmxlbmd0aCApe1xyXG4gICAgICB0aGlzLnNhdmVTZWxlY3RlZFByb2dyYW0uZW1pdCh7cHJvZ3JhbTogY3VycmVudFByb2dyYW0sIGNhdGVnb3JpZXM6IEpTT04ucGFyc2UodGhpcy50ZW1wU2VsZWN0ZWRDYXRlZ29yaWVzKSwgbGlua2VkUHJvZ3JhbTogc2VsZWN0ZWRQcm9ncmFtc0RldGFpbCAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLnNhdmVTZWxlY3RlZFByb2dyYW0uZW1pdCh7cHJvZ3JhbTogY3VycmVudFByb2dyYW0sIGNhdGVnb3JpZXM6IHRoaXMuc2VsZWN0ZWRJZHMsIGxpbmtlZFByb2dyYW06IHNlbGVjdGVkUHJvZ3JhbXNEZXRhaWwgIH0pO1xyXG4gICAgdGhpcy5jbG9zZUV2ZW50LmVtaXQoKTtcclxuICB9XHJcblxyXG4gIHNhdmUoKSB7XHJcbiAgICBpZighdGhpcy5oaWRlUHJvZ3JhbXNMaXN0ICYmIGZhbHNlKXtcclxuICAgICAgdGhpcy5kaXNwbGF5Q29uZmlybWF0aW9uTWVzc2FnZT10cnVlO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkQ2F0ZWdvcnlJZHMgPSB0aGlzLnNlbGVjdGVkSWRzLmNvbmNhdCh0aGlzLnNlbGVjdGVkU3ViQ2F0ZWdvcnlJZHMpO1xyXG4gICAgICB0aGlzLnNhdmVTZWxlY3RlZFByb2dyYW0uZW1pdCh7IHByb2dyYW06IHRoaXMuY3VycmVudFByb2dyYW0sIGNhdGVnb3JpZXM6ICBbLi4ubmV3IFNldChzZWxlY3RlZENhdGVnb3J5SWRzKV0sIGxpbmtlZFByb2dyYW06IHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0RldGFpbCB9KTtcclxuICAgICAgLy8gdGhpcy5zYXZlU2VsZWN0ZWRQcm9ncmFtLmVtaXQoeyBwcm9ncmFtOiB0aGlzLmN1cnJlbnRQcm9ncmFtLCBjYXRlZ29yaWVzOiB0aGlzLnNlbGVjdGVkSWRzIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2F2ZUNoYW5nZXModmFsdWU6Ym9vbGVhbil7XHJcbiAgICBpZih2YWx1ZSl7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkQ2F0ZWdvcnlJZHMgPSB0aGlzLnNlbGVjdGVkSWRzLmNvbmNhdCh0aGlzLnNlbGVjdGVkU3ViQ2F0ZWdvcnlJZHMpO1xyXG4gICAgICB0aGlzLnNhdmVTZWxlY3RlZFByb2dyYW0uZW1pdCh7IHByb2dyYW06IHRoaXMuY3VycmVudFByb2dyYW0sIGNhdGVnb3JpZXM6IFsuLi5uZXcgU2V0KHNlbGVjdGVkQ2F0ZWdvcnlJZHMpXSwgbGlua2VkUHJvZ3JhbTogdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsIH0pO1xyXG4gICAgICAvLyB0aGlzLnNhdmVTZWxlY3RlZFByb2dyYW0uZW1pdCh7IHByb2dyYW06IHRoaXMuY3VycmVudFByb2dyYW0sIGNhdGVnb3JpZXM6IHRoaXMuc2VsZWN0ZWRJZHMgfSk7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5kaXNwbGF5Q29uZmlybWF0aW9uTWVzc2FnZT1mYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRlbGV0ZUV2ZW50KGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGluZGV4T2ZQcm9ncmFtID0gdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsPy5maW5kSW5kZXgoIChlbDogYW55KSA9PiBlbD8uY2F0ZWdvcnlfaWQgPT09IGV2ZW50Py5jYXRlZ29yeV9pZCk7XHJcbiAgICBpZihpbmRleE9mUHJvZ3JhbSAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsPy5zcGxpY2UoaW5kZXhPZlByb2dyYW0sIDEpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW5kZXhPZklkID0gdGhpcy5zZWxlY3RlZFByb2dyYW1zSWQ/LmZpbmRJbmRleCggKGVsOiBhbnkpID0+IGVsID09PSBldmVudD8uX2lkKTtcclxuICAgIGlmKGluZGV4T2ZJZCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW1zSWQ/LnNwbGljZShpbmRleE9mSWQsIDEpO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5jdXJyZW50UHJvZ3JhbT8uX2lkID09PSBldmVudD8uX2lkKXtcclxuICAgICAgaWYodGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsPy5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQcm9ncmFtID0gdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsWzBdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFByb2dyYW0gPSB7fTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHRoaXMuY3VycmVudFByb2dyYW0gPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnNob3dDYXRlZ29yaWVzID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlbGVjdGVkSWRzID0gW107XHJcbiAgICB0aGlzLmNhdGVnb3J5TGlzdCA9IFtdO1xyXG4gICAgLy9BcyB0aGlzIGlzIGEgcmFkaW8gbGlzdCBhbmQgb25seSBvbmUgaXRlbSBjYW4gYmUgc2VsZWN0ZWQgdGhhdHMgd2h5IHdlIGFyZSByZXNldHRpbmcgYWxsIHRoZSBjb3VudHMgdG8gemVyb1xyXG4gICAgdGhpcy5nZXRTZWxlY3RlZFByb2dyYW1Db3VudChmYWxzZSAsIGV2ZW50Py5wcm9ncmFtVHlwZSApXHJcbiAgfVxyXG5cclxuICBcclxuXHJcbiAgZ2V0U2VsZWN0ZWRQcm9ncmFtQ291bnQoZXZlbnQ/OiBib29sZWFuLCBwcm9ncmFtVHlwZT86IG51bWJlcikge1xyXG4gICAgLy8gc3dpdGNoICh0aGlzLmN1cnJlbnRQcm9ncmFtLnByb2dyYW1UeXBlKSB7XHJcbiAgICBzd2l0Y2ggKHByb2dyYW1UeXBlKSB7XHJcbiAgICAgIGNhc2UgMDpcclxuICAgICAgICBldmVudCA/IHRoaXMucHJvZ3JhbURhdGEuU2VsZWN0ZWRPdGhlcnNQcm9ncmFtc0NvdW50KysgOiB0aGlzLnByb2dyYW1EYXRhLlNlbGVjdGVkT3RoZXJzUHJvZ3JhbXNDb3VudC0tO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgZXZlbnQgPyB0aGlzLnByb2dyYW1EYXRhLlNlbGVjdGVkUmVndWxhdGlvblByb2dyYW1zQ291bnQrKyA6IHRoaXMucHJvZ3JhbURhdGEuU2VsZWN0ZWRSZWd1bGF0aW9uUHJvZ3JhbXNDb3VudC0tO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgZXZlbnQgPyB0aGlzLnByb2dyYW1EYXRhLlNlbGVjdGVkU3RhbmRhcmRQcm9ncmFtc0NvdW50KysgOiB0aGlzLnByb2dyYW1EYXRhLlNlbGVjdGVkU3RhbmRhcmRQcm9ncmFtc0NvdW50LS07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMzpcclxuICAgICAgICBldmVudCA/IHRoaXMucHJvZ3JhbURhdGEuU2VsZWN0ZWRJbnRlcm5hbENvbnRyb2xzUHJvZ3JhbXNDb3VudCsrIDogdGhpcy5wcm9ncmFtRGF0YS5TZWxlY3RlZEludGVybmFsQ29udHJvbHNQcm9ncmFtc0NvdW50LS07XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdGhlIHNlbGVjdGVkUHJvZ3JhbSBhcnJheSBoYXMgYSBsZW5ndGgsIHRoZW4gcHJlc2VydmUgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGFycmF5IGFzIHRoZVxyXG4gICAqIHByZXNlcnZlUHJpbWFyeVByb2dyYW0gdmFyaWFibGUuIE90aGVyd2lzZSwgc2V0IHRoZSBwcmVzZXJ2ZVByaW1hcnlQcm9ncmFtIHZhcmlhYmxlIHRvIGFuIGVtcHR5XHJcbiAgICogb2JqZWN0LlxyXG4gICAqIFxyXG4gICAqIElmIHRoZSBzZWxlY3RlZFByb2dyYW1zSWQgYXJyYXkgaGFzIGEgbGVuZ3RoLCB0aGVuIHByZXNlcnZlIHRoZSBhcnJheSBhcyB0aGUgcHJlc2VydmVkUHJvZ3JhbXNJZFxyXG4gICAqIHZhcmlhYmxlLiBPdGhlcndpc2UsIHNldCB0aGUgcHJlc2VydmVkUHJvZ3JhbXNJZCB2YXJpYWJsZSB0byBhbiBlbXB0eSBhcnJheS5cclxuICAgKiBcclxuICAgKiBJZiB0aGUgc2VsZWN0ZWRQcm9ncmFtc0RldGFpbCBhcnJheSBoYXMgYSBsZW5ndGgsIHRoZW4gcHJlc2VydmUgdGhlIGFycmF5IGFzIHRoZVxyXG4gICAqIHByZXNlcnZlZFNlbGVjdGVkUHJvZ3JhbXMgdmFyaWFibGUuIE90aGVyd2lzZSwgc2V0IHRoZSBwcmVzZXJ2ZWRTZWxlY3RlZFByb2dyYW1zIHZhcmlhYmxlIHRvIGFuXHJcbiAgICogZW1wdHkgYXJyYXkuXHJcbiAgICogXHJcbiAgICogSWYgdGhlIHNlbGVjdGVkUHJvZ3JhbSBhcnJheSBkb2VzIG5vdCBoYXZlIGEgbGVuZ3RoLCB0aGVuIHNldCB0aGUgc2VsZWN0ZWRQcm9ncmFtc0RldGFpbCBhcnJheSB0b1xyXG4gICAqIGFuIGVtcHR5IGFycmF5IGFuZCB0aGUgc2VsZWN0ZWRQcm9ncmFtc0lkIGFycmF5IHRvIGFuIGVtcHR5IGFycmF5LlxyXG4gICAqL1xyXG4gIHByZXNlcnZlUHJldmlvdXNEZXRhaWxzKCkge1xyXG4gICAgaWYodGhpcy5zZWxlY3RlZFByb2dyYW1bMF0/Lmxlbmd0aCB8fCB0aGlzLmN1cnJlbnRQcm9ncmFtICkge1xyXG4gICAgICB0aGlzLnByZXNlcnZlUHJpbWFyeVByb2dyYW0gPSB0aGlzLnNlbGVjdGVkUHJvZ3JhbT8ubGVuZ3RoID8gSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZFByb2dyYW1bMF0pIDoge307IFxyXG4gICAgICB0aGlzLnByZXNlcnZlZFByb2dyYW1zSWQgPSB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNJZD8ubGVuZ3RoID8gSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZFByb2dyYW1zSWQpIDogW107XHJcbiAgICAgIHRoaXMucHJlc2VydmVkU2VsZWN0ZWRQcm9ncmFtcyA9IHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0RldGFpbCA/IEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0RldGFpbCkgOiBbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0RldGFpbCA9IFtdO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNJZCA9IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvZ3JhbVN1YlRhYjogJ1BST0dSQU1TJyB8ICdPVEhFUl9QUk9HUkFNUycgPSAnUFJPR1JBTVMnO1xyXG4gIHNldFByb2dyYW1TdWJUYWIodGFiOiAnUFJPR1JBTVMnIHwgJ09USEVSX1BST0dSQU1TJykge1xyXG4gICAgdGhpcy5wcm9ncmFtU3ViVGFiID0gdGFiO1xyXG4gICAgdGhpcy5nZXRQcm9ncmFtc0xpc3QoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInByb2dyYW0tbGlzdGluZ1wiIFtjbGFzcy5hbmltYXRlXT1cImFuaW1hdGlvblwiICpuZ0lmPVwiIXNob3dDYXRlZ29yaWVzICYmICFoaWRlUHJvZ3JhbXNMaXN0XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicHJvZ3JhbS1saXN0aW5nLWhlYWQgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW4gdngtcGwtNCB2eC1wci00XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZzLTE0IHZ4LWZ3LTUwMCB2eC1sYWJlbC10eHRcIj5TZWxlY3QgYSBQcm9ncmFtPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJwcm9ncmFtLWxpc3RpbmctYm9keVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItY2FyZC1yb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1jYXJkIHZ4LWJnLXdoaXRlIHZ4LWQtZmxleCB2eC1qdXN0aWZ5LWJldHdlZW4gdngtYWxpZ24tY2VudGVyIHZ4LXB0LTIgdngtcGItMiB2eC1wbC0zIHZ4LXByLTMgdngtdy0xMDBcIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVRhYiA9PSAncmVndWxhdGlvbnMnXCIgKGNsaWNrKT1cImNoYW5nZVRhYigncmVndWxhdGlvbnMnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1wYXJhZ3JhcGgtdHh0IHZ4LWZ3LTUwMCB2eC10dC11cHBlcmNhc2UgdngtZC1mbGV4IHZ4LWp1c3RpZnktYmV0d2VlbiB2eC1hbGlnbi1jZW50ZXJcIj5SRUdVTEFUSU9OUzwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJwcm9ncmFtRGF0YT8uU2VsZWN0ZWRSZWd1bGF0aW9uUHJvZ3JhbXNDb3VudD4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e3Byb2dyYW1EYXRhPy5TZWxlY3RlZFJlZ3VsYXRpb25Qcm9ncmFtc0NvdW50fX1cclxuICAgICAgICAgICAgICAgICAgICAgICAge3socHJvZ3JhbURhdGE/LlNlbGVjdGVkUmVndWxhdGlvblByb2dyYW1zQ291bnQ9PTEpPydQcm9ncmFtJzonUHJvZ3JhbXMnfX0gc2VsZWN0ZWRcclxuICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJjb3VudGVyXCI+e3twcm9ncmFtRGF0YT8uQWxsUmVndWxhdGlvblByb2dyYW1zQ291bnR9fTwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvdW50ZXJcIj57e3Byb2dyYW1UYWJEYXRhQ291bnQ/LmFsbFJlZ3VsYXRpb25Qcm9ncmFtc0NvdW50fX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWNhcmQgdngtYmctd2hpdGUgdngtZC1mbGV4IHZ4LWp1c3RpZnktYmV0d2VlbiB2eC1hbGlnbi1jZW50ZXIgdngtcHQtMiB2eC1wYi0yIHZ4LXBsLTMgdngtcHItMyB2eC13LTEwMFwiIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlVGFiID09ICdzdGFuZGFyZHMnXCIgKGNsaWNrKT1cImNoYW5nZVRhYignc3RhbmRhcmRzJylcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtcGFyYWdyYXBoLXR4dCB2eC1mdy01MDAgdngtdHQtdXBwZXJjYXNlIHZ4LWQtZmxleCB2eC1qdXN0aWZ5LWJldHdlZW4gdngtYWxpZ24tY2VudGVyXCI+U1RBTkRBUkRTPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cInByb2dyYW1EYXRhPy5TZWxlY3RlZFN0YW5kYXJkUHJvZ3JhbXNDb3VudD4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e3Byb2dyYW1EYXRhPy5TZWxlY3RlZFN0YW5kYXJkUHJvZ3JhbXNDb3VudH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7KHByb2dyYW1EYXRhPy5TZWxlY3RlZFN0YW5kYXJkUHJvZ3JhbXNDb3VudD09MSk/J1Byb2dyYW0nOidQcm9ncmFtcyd9fSBzZWxlY3RlZFxyXG4gICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cImNvdW50ZXJcIj57e3Byb2dyYW1EYXRhPy5BbGxTdGFuZGFyZFByb2dyYW1zQ291bnR9fTwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvdW50ZXJcIj57e3Byb2dyYW1UYWJEYXRhQ291bnQ/LmFsbFN0YW5kYXJkUHJvZ3JhbXNDb3VudH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1jYXJkIHZ4LWJnLXdoaXRlIHZ4LWQtZmxleCB2eC1qdXN0aWZ5LWJldHdlZW4gdngtYWxpZ24tY2VudGVyIHZ4LXB0LTIgdngtcGItMiB2eC1wbC0zIHZ4LXByLTMgdngtdy0xMDBcIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVRhYiA9PSAnaW50ZXJuYWxfY29udHJvbHMnXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VUYWIoJ2ludGVybmFsX2NvbnRyb2xzJylcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtcGFyYWdyYXBoLXR4dCB2eC1mdy01MDAgdngtdHQtdXBwZXJjYXNlIHZ4LWQtZmxleCB2eC1qdXN0aWZ5LWJldHdlZW4gdngtYWxpZ24tY2VudGVyXCI+SU5URVJOQUwgQ09OVFJPTFM8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwicHJvZ3JhbURhdGE/LlNlbGVjdGVkSW50ZXJuYWxDb250cm9sc1Byb2dyYW1zQ291bnQ+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3twcm9ncmFtRGF0YT8uU2VsZWN0ZWRJbnRlcm5hbENvbnRyb2xzUHJvZ3JhbXNDb3VudH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7KHByb2dyYW1EYXRhPy5TZWxlY3RlZEludGVybmFsQ29udHJvbHNQcm9ncmFtc0NvdW50PT0xKT8nUHJvZ3JhbSc6J1Byb2dyYW1zJ319IHNlbGVjdGVkXHJcbiAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwiY291bnRlclwiPnt7cHJvZ3JhbURhdGE/LkFsbEludGVybmFsQ29udHJvbHNQcm9ncmFtc0NvdW50fX08L3NwYW4+IC0tPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb3VudGVyXCI+e3twcm9ncmFtVGFiRGF0YUNvdW50Py5hbGxJbnRlcm5hbENvbnRyb2xzUHJvZ3JhbXNDb3VudH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1jYXJkIHZ4LWJnLXdoaXRlIHZ4LWQtZmxleCB2eC1qdXN0aWZ5LWJldHdlZW4gdngtYWxpZ24tY2VudGVyIHZ4LXB0LTIgdngtcGItMiB2eC1wbC0zIHZ4LXByLTMgdngtdy0xMDBcIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVRhYiA9PSAnb3RoZXJzJ1wiIChjbGljayk9XCJjaGFuZ2VUYWIoJ290aGVycycpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LXBhcmFncmFwaC10eHQgdngtZnctNTAwIHZ4LXR0LXVwcGVyY2FzZSB2eC1kLWZsZXggdngtanVzdGlmeS1iZXR3ZWVuIHZ4LWFsaWduLWNlbnRlclwiPk9USEVSUzwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJwcm9ncmFtRGF0YT8uU2VsZWN0ZWRPdGhlcnNQcm9ncmFtc0NvdW50PiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7cHJvZ3JhbURhdGE/LlNlbGVjdGVkT3RoZXJzUHJvZ3JhbXNDb3VudH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7KHByb2dyYW1EYXRhPy5TZWxlY3RlZE90aGVyc1Byb2dyYW1zQ291bnQ9PTEpPydQcm9ncmFtJzonUHJvZ3JhbXMnfX0gc2VsZWN0ZWRcclxuICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJjb3VudGVyXCI+e3twcm9ncmFtRGF0YT8uQWxsT3RoZXJzUHJvZ3JhbXNDb3VudH19PC9zcGFuPiAtLT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY291bnRlclwiPnt7cHJvZ3JhbVRhYkRhdGFDb3VudD8uYWxsT3RoZXJzUHJvZ3JhbXNDb3VudH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWJsb2NrXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTBiOzwvaT5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgI3NlYXJjaFByb2dyYW0gKGtleXVwLmVudGVyKT1cImhhbmRsZVNlYXJjaCgkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBQcm9ncmFtc1wiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSBtb2RlID09PSAnRURJVCcgLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIm1vZGUgPT09ICdFRElUJyAmJiBwcm9ncmFtRGF0YT8uQWxsVmlld09ubHlQcm9ncmFtQ291bnRcIiBjbGFzcz1cInByb2dyYW0tbGlzdGluZy10YWIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJzZXRQcm9ncmFtU3ViVGFiKCdQUk9HUkFNUycpXCIgY2xhc3M9XCJ2eC1mcy0xMSB2eC1mdy02MDAgdngtcGFyYWdyYXBoLXR4dCB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LXBiLTIgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtbGgtNFwiIFtjbGFzcy5hY3RpdmVdPVwicHJvZ3JhbVN1YlRhYiA9PT0gJ1BST0dSQU1TJ1wiPlBST0dSQU1TIDxzcGFuIGNsYXNzPVwiY291bnQgdngtcGwtMSB2eC1wci0xIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbWwtMiB2eC1saC00XCI+e3twcm9ncmFtRGF0YT8uQWxsUHJvZ3JhbXNDb3VudH19PC9zcGFuPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJzZXRQcm9ncmFtU3ViVGFiKCdPVEhFUl9QUk9HUkFNUycpXCIgY2xhc3M9XCJ2eC1mcy0xMSB2eC1mdy02MDAgdngtcGFyYWdyYXBoLXR4dCB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LXBiLTIgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtbGgtNFwiIFtjbGFzcy5hY3RpdmVdPVwicHJvZ3JhbVN1YlRhYiA9PT0gJ09USEVSX1BST0dSQU1TJ1wiPk9USEVSIFBST0dSQU1TIDxzcGFuIGNsYXNzPVwiY291bnQgdngtcGwtMSB2eC1wci0xIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbWwtMiB2eC1saC00XCI+e3twcm9ncmFtRGF0YT8uQWxsVmlld09ubHlQcm9ncmFtQ291bnR9fTwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8YXBwLXBhZ2luYXRpb24gKm5nSWY9XCJwcm9ncmFtRGF0YS50b3RhbFBhZ2VzID4gMVwiIFtzdGFydF09XCJwcm9ncmFtRGF0YS5mcm9tXCIgW2VuZF09XCJwcm9ncmFtRGF0YS50b1wiIFt0b3RhbF09XCJwcm9ncmFtRGF0YS50b3RhbFJlY29yZHNcIiBbcGFnZUNvdW50XT1cInByb2dyYW1EYXRhLnRvdGFsUGFnZXNcIiBbY3VycmVudFBhZ2VdPVwicHJvZ3JhbURhdGEuY3VycmVudFBhZ2VcIiAoc2VsZWN0ZWRQYWdlKT1cImNoYW5nZVBhZ2UoJGV2ZW50LCdwcm9ncmFtJylcIj48L2FwcC1wYWdpbmF0aW9uPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmFtLWxpc3RpbmctcGFydCB2eC1tYi00XCIgW2NsYXNzLndpdGgtY2F0ZWdvcnktbGlzdF09XCIhc2hvd0NhdGVnb3JpZXMgJiYgIWhpZGVQcm9ncmFtc0xpc3RcIiBbY2xhc3Mud2l0aC1wYWdpbmF0aW9uXT1cInByb2dyYW1EYXRhLnRvdGFsUGFnZXMgPiAxXCI+XHJcbiAgICAgICAgICAgIDxhcHAtbm8tZGF0YSAqbmdJZj1cInByb2dyYW1EYXRhPy5kYXRhPy5sZW5ndGg9PT0wICYmICFsb2FkZXJcIlxyXG4gICAgICAgICAgICAgICAgW25vRGF0YUltYWdlXT1cIidodHRwczovL2Nkbi52LWNvbXBseS5jb20vbGlicmFyaWVzL3dvcmtmbG93LWVuZ2luZS9hc3NldHMvd29ya2Zsb3cvc2VhcmNoLWRhdGEuc3ZnJ1wiXHJcbiAgICAgICAgICAgICAgICBbbm9EYXRhVGV4dF09XCInTm8gRGF0YSBGb3VuZCdcIj48L2FwcC1uby1kYXRhPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyYW0tbGlzdGluZy1pdGVtXCIgW2NsYXNzLmFjdGl2ZV09XCJzaG93Q2F0ZWdvcmllcyAmJiBjdXJyZW50UHJvZ3JhbT8uX2lkID09IHByb2dyYW0/Ll9pZFwiICpuZ0Zvcj1cImxldCBwcm9ncmFtIG9mIHByb2dyYW1EYXRhLmRhdGE7bGV0IGkgPSBpbmRleFwiIFtjbGFzcy5maW5hbC1zZWxlY3RdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gYWZ0ZXIgY2F0ZWdvcnkgd2FzIHNlbGVjdCAmIHVzZXIgbW92ZSB0byBiYWNrIGFuZCBlZGl0IHRoZW4gZmluYWwtc2VsZWN0IGNsYXNzIHdhcyBzaG93IC0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBbY2xhc3MuZGlzYWJsZWRdPVwiY3VycmVudFByb2dyYW0/Ll9pZCA9PT0gcHJvZ3JhbT8uX2lkICYmIChtb2RlID09PSAnRURJVCcgfHwgb3BlbmVkRnJvbSA9PT0gJ1BST0dSQU1fV09SS1JPT00nKSAmJiBwcm9ncmFtU3ViVGFiICE9PSAnT1RIRVJfUFJPR1JBTVMnXCIgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcm93IG1haW4tbGlzdFwiIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWRQcm9ncmFtc0lkPy5pbmNsdWRlcyhwcm9ncmFtPy5faWQpXCIgW2NsYXNzLmRpc2FibGVkXT1cImZlYXR1cmUuaXNGZWF0dXJlRW5hYmxlZCgnZmZfZGVwcmVjYXRlX3ByaW1hcnlfcHJvZ3JhbV9mbGFnJykgPyBmYWxzZSA6IChjdXJyZW50UHJvZ3JhbT8uX2lkID09PSBwcm9ncmFtPy5faWQgJiYgKG1vZGUgPT09ICdFRElUJyB8fCBvcGVuZWRGcm9tID09PSAnUFJPR1JBTV9XT1JLUk9PTScpICYmIHByb2dyYW1TdWJUYWIgIT09ICdPVEhFUl9QUk9HUkFNUycpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBzZXJpYWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNyLW5vXCIgW2FwcFRvb2x0aXBdPVwiaStwcm9ncmFtRGF0YS5mcm9tXCIgcGxhY2VtZW50PVwiYm90dG9tXCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiPnt7aStwcm9ncmFtRGF0YS5mcm9tfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBbZGlzYWJsZWRdPVwiY3VycmVudFByb2dyYW0/Ll9pZCA9PT0gcHJvZ3JhbT8uX2lkICYmIChtb2RlID09PSAnRURJVCcgfHwgb3BlbmVkRnJvbSA9PT0gJ1BST0dSQU1fV09SS1JPT00nKVwiIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWNzLWNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInByb2dyYW1TdWJUYWIgIT09ICdPVEhFUl9QUk9HUkFNUydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZlYXR1cmUuaXNGZWF0dXJlRW5hYmxlZCgnZmZfZGVwcmVjYXRlX3ByaW1hcnlfcHJvZ3JhbV9mbGFnJykgPyBmYWxzZSA6IChjdXJyZW50UHJvZ3JhbT8uX2lkID09PSBwcm9ncmFtPy5faWQgJiYgKG1vZGUgPT09ICdFRElUJyB8fCBvcGVuZWRGcm9tID09PSAnUFJPR1JBTV9XT1JLUk9PTScpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdWYWx1ZV09XCJzZWxlY3RlZFByb2dyYW1zSWQ/LmluY2x1ZGVzKHByb2dyYW0/Ll9pZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nVmFsdWVDaGFuZ2UpPVwic2VsZWN0UHJvZ3JhbSgkZXZlbnQscHJvZ3JhbSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY3MtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGFwcC1jcy1yYWRpbyBbbmFtZV09XCIndCdcIiBbY2hlY2tlZF09XCJjdXJyZW50UHJvZ3JhbT8uX2lkID09IHByb2dyYW0/Ll9pZFwiIChjaGVja2VkRXZlbnQpPVwic2VsZWN0UHJvZ3JhbSgkZXZlbnQudGFyZ2V0LmNoZWNrZWQscHJvZ3JhbSlcIj48L2FwcC1jcy1yYWRpbz4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBuYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYW1lLWlubmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZS13aXRoLWNvdW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZhbHVlXCIgW2FwcFRvb2x0aXBdPVwicHJvZ3JhbT8uaXRlbV9uYW1lXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7cHJvZ3JhbT8ubmFtZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBwcmltYXJ5LXByb2dyYW1cIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmVhdHVyZS5pc0ZlYXR1cmVFbmFibGVkKCdmZl9kZXByZWNhdGVfcHJpbWFyeV9wcm9ncmFtX2ZsYWcnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1jcy1zd2l0Y2hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiEobW9kZSA9PT0gJ0VESVQnIHx8IG9wZW5lZEZyb20gPT09ICdQUk9HUkFNX1dPUktST09NJykgfHwgY3VycmVudFByb2dyYW0/Ll9pZCA9PT0gcHJvZ3JhbT8uX2lkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudFByb2dyYW0/Ll9pZCA9PT0gcHJvZ3JhbT8uX2lkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdWYWx1ZV09J2N1cnJlbnRQcm9ncmFtPy5faWQgPT09IHByb2dyYW0/Ll9pZCcgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nVmFsdWVDaGFuZ2UpPVwic2V0UHJpbWFyeVByb2dyYW0oJGV2ZW50LCBwcm9ncmFtKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3tjdXJyZW50UHJvZ3JhbT8uX2lkID09PSBwcm9ncmFtPy5faWQgPyAnUFJJTUFSWSBQUk9HUkFNJyA6ICdTRVQgQVMgUFJJTUFSWSBQUk9HUkFNJ319PC9hcHAtY3Mtc3dpdGNoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gYWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhcnJvd1wiICpuZ0lmPVwicHJvZ3JhbT8uY2hpbGRfaWQ/Lmxlbmd0aFwiIFtjbGFzcy5kaXNhYmxlZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiIShzaG93Q2F0ZWdvcmllcyAmJiBjdXJyZW50UHJvZ3JhbT8uX2lkID09IHByb2dyYW0/Ll9pZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RQcm9ncmFtKCRldmVudCxwcm9ncmFtKVwiIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTcwOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwic2hvd0NhdGVnb3JpZXMgJiYgY3VycmVudFByb2dyYW0/Ll9pZCA9PSBwcm9ncmFtPy5faWRcIiBjbGFzcz1cImljb25zXCI+JiN4ZTllODs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxhcHAtZmxvYXRpbmctYmFyICpuZ0lmPVwiZmVhdHVyZS5pc0ZlYXR1cmVFbmFibGVkKCdmZl9kZXByZWNhdGVfcHJpbWFyeV9wcm9ncmFtX2ZsYWcnKVwiIFtzZWxlY3RlZERhdGFdPVwiKHNlbGVjdGVkUHJvZ3JhbXNEZXRhaWw/Lmxlbmd0aCkgPyBzZWxlY3RlZFByb2dyYW1zRGV0YWlsIDogW11cIiBbZGlzcGxheUVsZW1lbnRLZXldPVwiJ25hbWUnXCJcclxuICAgICAgICAgICAgW3Npbmd1bGFyVGV4dF09XCInUHJvZ3JhbSBzZWxlY3RlZCdcIiBbcGx1cmFsVGV4dF09XCInUHJvZ3JhbXMgc2VsZWN0ZWQnXCIgKGNsb3NlRXZlbnQpPVwib3BlbkNhdGVnb3JpZXMoKVwiXHJcbiAgICAgICAgICAgIChkZWxldGVFdmVudCk9XCJkZWxldGVFdmVudCgkZXZlbnQpXCIgW2lzRGlzYWJsZWRdPVwiKChjdXJyZW50UHJvZ3JhbT8uY2F0ZWdvcnlfaWQpP1tjdXJyZW50UHJvZ3JhbV06W10pPy5sZW5ndGggPyBmYWxzZSA6dHJ1ZVwiIChjbG9zZUxpc3QpPVwiY2xvc2UoKVwiIFtlbGVtZW50SWRdPVwiJ2NhdGVnb3J5X2lkJ1wiPlxyXG4gICAgICAgIDwvYXBwLWZsb2F0aW5nLWJhcj5cclxuXHJcbiAgICAgICAgPGFwcC1mbG9hdGluZy1iYXIgKm5nSWY9XCIhZmVhdHVyZS5pc0ZlYXR1cmVFbmFibGVkKCdmZl9kZXByZWNhdGVfcHJpbWFyeV9wcm9ncmFtX2ZsYWcnKVwiIFtzZWxlY3RlZERhdGFdPVwiKHNlbGVjdGVkUHJvZ3JhbXNEZXRhaWw/Lmxlbmd0aCkgPyBzZWxlY3RlZFByb2dyYW1zRGV0YWlsIDogW11cIiBbZGlzcGxheUVsZW1lbnRLZXldPVwiJ25hbWUnXCJcclxuICAgICAgICAgICAgW3Npbmd1bGFyVGV4dF09XCInUHJvZ3JhbSBzZWxlY3RlZCdcIiBbcGx1cmFsVGV4dF09XCInUHJvZ3JhbXMgc2VsZWN0ZWQnXCIgKGNsb3NlRXZlbnQpPVwib3BlbkNhdGVnb3JpZXMoKVwiXHJcbiAgICAgICAgICAgIChkZWxldGVFdmVudCk9XCJkZWxldGVFdmVudCgkZXZlbnQpXCIgW2lzRGlzYWJsZWRdPVwiKChjdXJyZW50UHJvZ3JhbT8uY2F0ZWdvcnlfaWQpP1tjdXJyZW50UHJvZ3JhbV06W10pPy5sZW5ndGggPyBmYWxzZSA6dHJ1ZVwiIChjbG9zZUxpc3QpPVwiY2xvc2UoKVwiIFtkZWZhdWx0U2VsZWN0ZWRdPVwiY3VycmVudFByb2dyYW1cIiBbbm9uUmVtb3ZhYmxlVXNlcnNMaXN0XT1cIihtb2RlID09PSAnRURJVCcgfHwgb3BlbmVkRnJvbSA9PT0gJ1BST0dSQU1fV09SS1JPT00nKSA/IHZpZXdPbmx5UHJvZ3JhbXNDYXRlZ29yeUlkIDogW2N1cnJlbnRQcm9ncmFtPy5jYXRlZ29yeV9pZF1cIiBbZWxlbWVudElkXT1cIidjYXRlZ29yeV9pZCdcIj5cclxuICAgICAgICA8L2FwcC1mbG9hdGluZy1iYXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmVhdHVyZS5pc0ZlYXR1cmVFbmFibGVkKCdmZl9kZXByZWNhdGVfcHJpbWFyeV9wcm9ncmFtX2ZsYWcnKVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmFtLWxpc3RpbmctY29uZmlybWF0aW9uXCIgKm5nSWY9XCJkaXNwbGF5Q29uZmlybWF0aW9uTWVzc2FnZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlybWF0aW9uLXRvcFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tYmxvY2tcIj48aSBjbGFzcz1cImljb25zXCI+JiN4ZTkzMDs8L2k+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dFwiPk9uY2UgeW91IHNlbGVjdCB0aGlzIFByb2dyYW0sIGFsbCBkZWZhdWx0IHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBQcm9ncmFtIHdpbGwgYWxzbyBiZSB1cGRhdGVkLjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpcm1hdGlvbi1ib3R0b21cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXNzYWdlXCI+QXJlIHlvdSBzdXJlIHlvdSB3b3VsZCBsaWtlIHRvIHByb2NlZWQ/PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm5vLWJ0blwiIChjbGljayk9XCJzYXZlQ2hhbmdlcyhmYWxzZSlcIj5OTzwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ5ZXMtYnRuXCIgKGNsaWNrKT1cInNhdmVDaGFuZ2VzKHRydWUpXCI+WUVTPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyYW0tbGlzdGluZy1jb25maXJtYXRpb25cIiAqbmdJZj1cImlzUHJpbWFyeUNvbmZpcm1hdGlvbiAmJiAhaXNQcmltYXJ5VW5jaGVja2VkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maXJtYXRpb24tdG9wXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1ibG9ja1wiPjxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTMwOzwvaT48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0XCIgW2lubmVySFRNTF09XCJwcmltYXJ5Q29uZmlybWF0aW9uTWVzc2FnZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpcm1hdGlvbi1ib3R0b21cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXNzYWdlXCI+QXJlIHlvdSBzdXJlIHlvdSB3b3VsZCBsaWtlIHRvIHByb2NlZWQ/PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm5vLWJ0blwiIChjbGljayk9XCJ1cGRhdGVQcmltYXJ5UHJvZ3JhbShmYWxzZSlcIj5OTzwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ5ZXMtYnRuXCIgKGNsaWNrKT1cInVwZGF0ZVByaW1hcnlQcm9ncmFtKHRydWUpXCI+WUVTPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmFtLWxpc3RpbmctY29uZmlybWF0aW9uIGVycm9yLWNvbmZpcm1hdGlvblwiICpuZ0lmPVwiaXNQcmltYXJ5VW5jaGVja2VkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maXJtYXRpb24tdG9wXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWJsb2NrXCI+PGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MzA7PC9pPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0IHZ4LXByLTRcIj5Zb3UgY2Fubm90IGRlc2VsZWN0IHRoaXMgUHJvZ3JhbSBzaW5jZSB0aGlzIGlzIHRoZSA8ZW0+UHJpbWFyeSBQcm9ncmFtPC9lbT4gZm9yIHRoaXMgcmVzcG9uc2liaWxpdHkuIFRvIHByb2NlZWQsIGZpcnN0IHNlbGVjdCBhbm90aGVyIFByb2dyYW0gYXMgdGhlIDxlbT5QcmltYXJ5IFByb2dyYW08L2VtPi48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm9rLWJ0blwiIChjbGljayk9XCJ1cGRhdGVQcmltYXJ5UHJvZ3JhbShmYWxzZSlcIj5PSzwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPCEtLSA8YXBwLWZsb2F0aW5nLWJhciBbc2VsZWN0ZWREYXRhXT1cIihjdXJyZW50UHJvZ3JhbT8uY2F0ZWdvcnlfaWQpP1tjdXJyZW50UHJvZ3JhbV06W11cIiBbZGlzcGxheUVsZW1lbnRLZXldPVwiJ25hbWUnXCJcclxuICAgICAgICBbc2luZ3VsYXJUZXh0XT1cIidQcm9ncmFtIHNlbGVjdGVkJ1wiIFtwbHVyYWxUZXh0XT1cIidQcm9ncmFtcyBzZWxlY3RlZCdcIiAoY2xvc2VFdmVudCk9XCJvcGVuQ2F0ZWdvcmllcygpXCJcclxuICAgICAgICAoZGVsZXRlRXZlbnQpPVwiZGVsZXRlRXZlbnQoJGV2ZW50KVwiIFtpc0Rpc2FibGVkXT1cIigoY3VycmVudFByb2dyYW0/LmNhdGVnb3J5X2lkKT9bY3VycmVudFByb2dyYW1dOltdKT8ubGVuZ3RoID8gZmFsc2UgOnRydWUgXCIgKGNsb3NlTGlzdCk9XCJjbG9zZSgpXCI+XHJcbiAgICA8L2FwcC1mbG9hdGluZy1iYXI+IC0tPlxyXG5cclxuICAgIDwhLS0gKChjdXJyZW50UHJvZ3JhbT8uY2F0ZWdvcnlfaWQpP1tjdXJyZW50UHJvZ3JhbV06W10pPy5sZW5ndGggPyBmYWxzZSA6dHJ1ZSAgLS0+XHJcblxyXG4gICAgPGFwcC1sb2FkZXIgKm5nSWY9XCJsb2FkZXJcIj48L2FwcC1sb2FkZXI+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwicHJvZ3JhbS1saXN0aW5nXCIgW2NsYXNzLmFuaW1hdGVdPVwiYW5pbWF0aW9uXCIgKm5nSWY9XCJzaG93Q2F0ZWdvcmllcyB8fCBoaWRlUHJvZ3JhbXNMaXN0XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicHJvZ3JhbS1saXN0aW5nLWhlYWQgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW4gdngtcGwtNCB2eC1wci00XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZzLTE0IHZ4LWZ3LTUwMCB2eC1sYWJlbC10eHRcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJhY2stYnRuIHZ4LWZzLTE2IHZ4LXAtMCB2eC1tci0yXCIgKGNsaWNrKT1cImJhY2tUb1Byb2dyYW1zKClcIj48aSBjbGFzcz1cImljb25zXCI+JiN4ZTkxZDs8L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwhLS0gPHNwYW4gKm5nSWY9XCJjdXJyZW50UHJvZ3JhbT8ubmFtZVwiPiB7e2N1cnJlbnRQcm9ncmFtPy5uYW1lfX0gPiA8L3NwYW4+IC0tPlxyXG4gICAgICAgICAgICAgUHJvZ3JhbSAgPiAgU2VsZWN0IFByb2dyYW0gQ2F0ZWdvcmllc1xyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicHJvZ3JhbS1saXN0aW5nLWJvZHlcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWJsb2NrXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTBiOzwvaT5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgI3NlYXJjaENhdGVnb3J5IChrZXl1cC5lbnRlcik9XCJjYXRlZ29yeVNlYXJjaCgkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBDYXRlZ29yaWVzXCIgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8YXBwLXBhZ2luYXRpb24gKm5nSWY9XCJjYXRlZ29yeURhdGEudG90YWxQYWdlcyA+IDFcIiBjbGFzcz1cImNhdGVnb3J5LXBhZ2luYXRpb25cIiBbc3RhcnRdPVwiY2F0ZWdvcnlEYXRhLmZyb21cIiBbZW5kXT1cImNhdGVnb3J5RGF0YS50b1wiIFt0b3RhbF09XCJjYXRlZ29yeURhdGEudG90YWxSZWNvcmRzXCIgW3BhZ2VDb3VudF09XCJjYXRlZ29yeURhdGEudG90YWxQYWdlc1wiIFtjdXJyZW50UGFnZV09XCJjYXRlZ29yeURhdGEuY3VycmVudFBhZ2VcIiAoc2VsZWN0ZWRQYWdlKT1cImNoYW5nZVBhZ2UoJGV2ZW50LCdjYXRlZ29yeScpXCI+PC9hcHAtcGFnaW5hdGlvbj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3JhbS1saXN0aW5nLXBhcnQgdngtbWItNFwiIFtjbGFzcy53aXRoLWNhdGVnb3J5LXBhZ2luYXRpb25dPVwiY2F0ZWdvcnlEYXRhLnRvdGFsUGFnZXMgPiAxXCI+XHJcbiAgICAgICAgICAgIDxhcHAtbm8tZGF0YSAqbmdJZj1cImNhdGVnb3J5RGF0YT8uZGF0YT8ubGVuZ3RoPT09MCAmJiAhbG9hZGVyXCIgW25vRGF0YUltYWdlXT1cIidodHRwczovL2Nkbi52LWNvbXBseS5jb20vbGlicmFyaWVzL3dvcmtmbG93LWVuZ2luZS9hc3NldHMvd29ya2Zsb3cvc2VhcmNoLWRhdGEuc3ZnJ1wiIFtub0RhdGFUZXh0XT1cIidObyBEYXRhIEZvdW5kJ1wiPjwvYXBwLW5vLWRhdGE+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxvYWRlciAmJiBjYXRlZ29yeURhdGEuZGF0YT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWQtYXJlYVwiICpuZ0lmPVwiIWxvYWRlciAmJiAoY3VycmVudFByb2dyYW0/Lm5hbWUgPyBjYXRlZ29yeURhdGEuZGF0YT8ubGVuZ3RoIDogcHJvZ3JhbURhdGE/LmRhdGE/Lmxlbmd0aClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1jcy1jaGVja2JveCAqbmdJZj1cImNoZWNrQ2F0ZWdvcmllc1NlbGVjdGlvbigpPT0nY2hlY2tlZCdcIiBbbmdWYWx1ZV09XCJ0cnVlXCIgKG5nVmFsdWVDaGFuZ2UpPVwic2VsZWN0QWxsQ2F0ZWdvcmllcyhmYWxzZSlcIj5EZXNlbGVjdCBBbGw8L2FwcC1jcy1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1jcy1jaGVja2JveC1pbmRldGVybWluYXRlICpuZ0lmPVwiY2hlY2tDYXRlZ29yaWVzU2VsZWN0aW9uKCk9PSdpbmRldGVybWluYXRlJ1wiIFtuZ1ZhbHVlXT1cInRydWVcIiAobmdWYWx1ZUNoYW5nZSk9XCJzZWxlY3RBbGxDYXRlZ29yaWVzKGZhbHNlKVwiPkRlc2VsZWN0IEFsbDwvYXBwLWNzLWNoZWNrYm94LWluZGV0ZXJtaW5hdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtY3MtY2hlY2tib3ggKm5nSWY9XCJjaGVja0NhdGVnb3JpZXNTZWxlY3Rpb24oKT09J3VuY2hlY2tlZCdcIiBbbmdWYWx1ZV09XCJmYWxzZVwiIChuZ1ZhbHVlQ2hhbmdlKT1cInNlbGVjdEFsbENhdGVnb3JpZXModHJ1ZSlcIj5TZWxlY3QgQWxsPC9hcHAtY3MtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1oZWFkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIHNlcmlhbFwiPiM8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjYXRlZ29yeS1uYW1lXCI+Q0FURUdPUklFUzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNhdGVnb3J5LXdpdGhpblwiPldJVEhJTjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3JhbS1saXN0aW5nLWl0ZW1cIiBbY2xhc3MuYWN0aXZlXT1cInN1Ykxpc3RcIiAqbmdGb3I9XCJsZXQgY2F0ZWdvcnkgb2YgY2F0ZWdvcnlEYXRhLmRhdGE7bGV0IGkgPSBpbmRleFwiIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWRJZHMuaW5jbHVkZXMoY2F0ZWdvcnkuY2F0ZWdvcnlfaWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJvdyBtYWluLWxpc3RcIiBbY2xhc3MuZGlzYWJsZWRdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBzZXJpYWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzci1ub1wiIFthcHBUb29sdGlwXT1cImkgKyBjYXRlZ29yeURhdGE/LmZyb21cIiBwbGFjZW1lbnQ9XCJib3R0b21cIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIj57e2kgKyBjYXRlZ29yeURhdGE/LmZyb219fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1jcy1jaGVja2JveCBbbmdWYWx1ZV09XCJzZWxlY3RlZElkcy5pbmNsdWRlcyhjYXRlZ29yeS5jYXRlZ29yeV9pZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ1ZhbHVlQ2hhbmdlKT1cInNlbGVjdENhdGVnb3J5KCRldmVudCxjYXRlZ29yeSlcIj48L2FwcC1jcy1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY2F0ZWdvcnktbmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hbWUtaW5uZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZS13aXRoLWNvdW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2YWx1ZVwiIFthcHBUb29sdGlwXT1cImNhdGVnb3J5Py5uYW1lXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7Y2F0ZWdvcnk/Lm5hbWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIndpdGhpbi1wYXJ0XCIgKm5nSWY9XCJjYXRlZ29yeT8ucGFyZW50X2NhdGVnb3J5X25hbWU/Lmxlbmd0aD4wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwid2l0aGluLWJveFwiPldpdGhpbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiIFthcHBUb29sdGlwXT1cIidTb3V0aCBBZnJpY2EgPiBBbWVyaWNhID4gSW5kaWEnXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IHBhcmVudCBvZiBjYXRlZ29yeT8ucGFyZW50X2NhdGVnb3J5X25hbWU7bGV0IGo9aW5kZXhcIj57eyhqIT0oY2F0ZWdvcnk/LnBhcmVudF9jYXRlZ29yeV9uYW1lPy5sZW5ndGgtMSkpP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCsnIDwgJzpwYXJlbnR9fSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY2F0ZWdvcnktd2l0aGluXCIgKm5nSWY9XCJjYXRlZ29yeT8ucGFyZW50X2NhdGVnb3J5X25hbWU/Lmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHBhcmVudCBvZiBjYXRlZ29yeT8ucGFyZW50X2NhdGVnb3J5X25hbWU7IGxldCBsYXN0ID0gbGFzdFwiIGNsYXNzPVwid2l0aGluLW5hbWVcIiBbYXBwVG9vbHRpcF09XCJjYXRlZ29yeT8ucGFyZW50X2NhdGVnb3J5X25hbWU/LnNsaWNlKCk/LnJldmVyc2UoKT8uam9pbignID4gJylcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+e3twYXJlbnR9fSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFsYXN0XCI+ID4mbmJzcDsgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNhdGVnb3J5Py5wYXJlbnRfY2F0ZWdvcnlfaWRzPy5pbmNsdWRlcyhjdXJyZW50UHJvZ3JhbT8uY2F0ZWdvcnlfaWQpICYmICFmZWF0dXJlLmlzRmVhdHVyZUVuYWJsZWQoJ2ZmX2RlcHJlY2F0ZV9wcmltYXJ5X3Byb2dyYW1fZmxhZycpXCIgY2xhc3M9XCJwcmltYXJ5LWxhYmVsXCI+UFJJTUFSWTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGFwcC1mbG9hdGluZy1iYXIgW3NlbGVjdGVkRGF0YV09XCJjYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzXCIgW2Rpc3BsYXlFbGVtZW50S2V5XT1cIiduYW1lJ1wiXHJcbiAgICAgICAgW3Npbmd1bGFyVGV4dF09XCInUHJvZ3JhbSBDYXRlZ29yeSBzZWxlY3RlZCdcIlxyXG4gICAgICAgIFtwbHVyYWxUZXh0XT1cIidQcm9ncmFtIENhdGVnb3JpZXMgc2VsZWN0ZWQnXCIgKGNsb3NlRXZlbnQpPVwic2F2ZSgpXCJcclxuICAgICAgICAoZGVsZXRlRXZlbnQpPVwicmVtb3ZlQ2F0ZWdvcmllcygkZXZlbnQpXCIgKGNsb3NlTGlzdCk9XCJiYWNrVG9Qcm9ncmFtcygpXCI+XHJcbiAgICAgICAgPC9hcHAtZmxvYXRpbmctYmFyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZlYXR1cmUuaXNGZWF0dXJlRW5hYmxlZCgnZmZfZGVwcmVjYXRlX3ByaW1hcnlfcHJvZ3JhbV9mbGFnJylcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3JhbS1saXN0aW5nLWNvbmZpcm1hdGlvblwiICpuZ0lmPVwiZGlzcGxheUNvbmZpcm1hdGlvbk1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpcm1hdGlvbi10b3BcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWJsb2NrXCI+PGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MzA7PC9pPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHRcIj5PbmNlIHlvdSBzZWxlY3QgdGhpcyBQcm9ncmFtLCBhbGwgZGVmYXVsdCB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgUHJvZ3JhbSB3aWxsIGFsc28gYmUgdXBkYXRlZC48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maXJtYXRpb24tYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZVwiPkFyZSB5b3Ugc3VyZSB5b3Ugd291bGQgbGlrZSB0byBwcm9jZWVkPzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJuby1idG5cIiAoY2xpY2spPVwic2F2ZUNoYW5nZXMoZmFsc2UpXCI+Tk88L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwieWVzLWJ0blwiIChjbGljayk9XCJzYXZlQ2hhbmdlcyh0cnVlKVwiPllFUzwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8YXBwLWxvYWRlciAqbmdJZj1cImxvYWRlclwiPjwvYXBwLWxvYWRlcj5cclxuIDwvZGl2PlxyXG4iXX0=
739
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbS1saXN0aW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3NoYXJlZENvbXBvbmVudHMvcHJvZ3JhbS1saXN0aW5nL3Byb2dyYW0tbGlzdGluZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92eC13b3JrZmxvdy1lbmdpbmUvc3JjL2xpYi9zaGFyZWRDb21wb25lbnRzL3Byb2dyYW0tbGlzdGluZy9wcm9ncmFtLWxpc3RpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7Ozs7QUFTdkIsTUFBTSxPQUFPLHVCQUF1QjtJQW9IbEMsWUFBb0IscUJBQTRDO1FBQTVDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFuSGhFLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixXQUFNLEdBQUcsS0FBSyxDQUFDO1FBSU4sZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUNqQywyQ0FBMkM7UUFFM0MsK0JBQTBCLEdBQVUsRUFBRSxDQUFDO1FBQ3ZDLHVCQUFrQixHQUFVLEVBQUUsQ0FBQztRQUMvQiwyQkFBc0IsR0FBUSxFQUFFLENBQUM7UUFLeEIscUJBQWdCLEdBQUcsRUFBRSxDQUFDO1FBSXRCLFNBQUksR0FBVyxRQUFRLENBQUM7UUFzQmpDLDJCQUFzQixHQUFRO1lBQzVCLE9BQU8sRUFBRSxFQUFFO1lBQ1gsVUFBVSxFQUFFLEVBQUU7U0FDZixDQUFDO1FBQ0YsZ0JBQVcsR0FBZ0I7WUFDekIsSUFB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LHFCQUFxQjtzQkFBckQsS0FBSzt1QkFBQyxvQkFBb0I7Z0JBSWxCLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDc0IsYUFBYTtzQkFBeEMsU0FBUzt1QkFBQyxlQUFlO2dCQUNHLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQU1DLGdCQUFnQjtzQkFBM0MsS0FBSzt1QkFBQyxlQUFlO2dCQW1GWixtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmVzcG9uc2liaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vd29ya2Zsb3ctc2VydmljZXMvcmVzcG9uc2liaWxpdHkuc2VydmljZSc7XHJcbmltcG9ydCB7IGNhdGVnb3J5TGlzdCwgcHJvZ3JhbUxpc3QgfSBmcm9tICcuL3Byb2dyYW0tbGlzdC1tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1wcm9ncmFtLWxpc3RpbmcnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9ncmFtLWxpc3RpbmcuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3Byb2dyYW0tbGlzdGluZy5jb21wb25lbnQubGVzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvZ3JhbUxpc3RpbmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGFuaW1hdGlvbiA9IGZhbHNlO1xyXG4gIHN1Ykxpc3QgPSBmYWxzZTtcclxuICBsb2FkZXIgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwcm9ncmFtc0xpc3Q6IGFueTtcclxuICAvLyBASW5wdXQoKSBhbGxQcm9ncmFtczogYW55W10gPSBbXTtcclxuICBASW5wdXQoKSBzZWxlY3RlZFByb2dyYW0hOiBhbnk7XHJcbiAgQElucHV0KCkgb3BlbmVkRnJvbTogc3RyaW5nID0gJyc7XHJcbiAgLy8gQElucHV0KCkgc2VsZWN0ZWRDYXRlZ29yaWVzOiBhbnlbXSA9IFtdO1xyXG5cclxuICB2aWV3T25seVByb2dyYW1zQ2F0ZWdvcnlJZDogYW55W10gPSBbXTtcclxuICBzZWxlY3RlZENhdGVnb3JpZXM6IGFueVtdID0gW107XHJcbiAgdGVtcFNlbGVjdGVkQ2F0ZWdvcmllczogYW55ID0gW107XHJcbiAgQElucHV0KCdzZWxlY3RlZENhdGVnb3JpZXMnKSBzZXQgZ2V0U2VsZWN0ZWRDYXRlZ29yaWVzKGNhdGVnb3J5OiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRDYXRlZ29yaWVzID0gY2F0ZWdvcnk7XHJcbiAgICB0aGlzLnRlbXBTZWxlY3RlZENhdGVnb3JpZXMgPSBKU09OLnN0cmluZ2lmeShjYXRlZ29yeSk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIHJlc3BvbnNpYmlsaXR5SWQgPSAnJztcclxuICBASW5wdXQoKSBmZWF0dXJlITogYW55O1xyXG5cclxuICBASW5wdXQoKSBoaWRlUHJvZ3JhbXNMaXN0ITogYW55O1xyXG4gIEBJbnB1dCgpIG1vZGU6IHN0cmluZyA9ICdDUkVBVEUnO1xyXG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaFByb2dyYW0nKSBzZWFyY2hQcm9ncmFtITogYW55O1xyXG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaENhdGVnb3J5Jykgc2VhcmNoQ2F0ZWdvcnkhOiBhbnk7XHJcblxyXG4gIHByZXNlcnZlZFNlbGVjdGVkUHJvZ3JhbXM6IGFueTtcclxuICBwcmVzZXJ2ZWRQcm9ncmFtc0lkOiBhbnk7XHJcbiAgcHJlc2VydmVQcmltYXJ5UHJvZ3JhbTogYW55O1xyXG5cclxuICBASW5wdXQoJ2xpbmtlZFByb2dyYW0nKSBzZXQgZ2V0TGlua2VkUHJvZ3JhbShwcm9ncmFtOiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0RldGFpbCA9IFtdO1xyXG4gICAgdGhpcy5zZWxlY3RlZFByb2dyYW1zSWQgPSBbXTtcclxuICAgIHRoaXMudmlld09ubHlQcm9ncmFtc0NhdGVnb3J5SWQgPSBbXTtcclxuICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0RldGFpbCA9IHByb2dyYW07XHJcbiAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNEZXRhaWwuZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW1zSWQucHVzaChlbGU/Ll9pZCk7XHJcbiAgICAgIHRoaXMuZ2V0U2VsZWN0ZWRQcm9ncmFtQ291bnQodHJ1ZSwgZWxlPy5wcm9ncmFtVHlwZSk7XHJcbiAgICAgIGVsZT8uaXNWaWV3T25seVByb2dyYW1cclxuICAgICAgICA/IHRoaXMudmlld09ubHlQcm9ncmFtc0NhdGVnb3J5SWQ/LnB1c2goZWxlPy5jYXRlZ29yeV9pZClcclxuICAgICAgICA6IG51bGw7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByZXZpb3VzU2VsZWN0ZWRWYWx1ZXM6IGFueSA9IHtcclxuICAgIHByb2dyYW06IHt9LFxyXG4gICAgY2F0ZWdvcmllczogW10sXHJcbiAgfTtcclxuICBwcm9ncmFtRGF0YTogcHJvZ3JhbUxpc3QgPSB7XHJcbiAgICBkYXRhOiBbXSxcclxuICAgIGZyb206IDAsXHJcbiAgICB0bzogMCxcclxuICAgIHRvdGFsUGFnZXM6IDAsXHJcbiAgICB0b3RhbFJlY29yZHM6IDAsXHJcbiAgICBjdXJyZW50UGFnZTogMSxcclxuICAgIEFsbEludGVybmFsQ29udHJvbHNQcm9ncmFtc0NvdW50OiAwLFxyXG4gICAgQWxsT3RoZXJzUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIEFsbFJlZ3VsYXRpb25Qcm9ncmFtc0NvdW50OiAwLFxyXG4gICAgQWxsU3RhbmRhcmRQcm9ncmFtc0NvdW50OiAwLFxyXG4gICAgU2VsZWN0ZWRJbnRlcm5hbENvbnRyb2xzUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIFNlbGVjdGVkT3RoZXJzUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIFNlbGVjdGVkUmVndWxhdGlvblByb2dyYW1zQ291bnQ6IDAsXHJcbiAgICBTZWxlY3RlZFN0YW5kYXJkUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIEFsbFByb2dyYW1zQ291bnQ6IDAsXHJcbiAgICBBbGxWaWV3T25seVByb2dyYW1Db3VudDogMCxcclxuICB9O1xyXG5cclxuICBwcm9ncmFtVGFiRGF0YUNvdW50OiBhbnkgPSB7XHJcbiAgICBhbGxJbnRlcm5hbENvbnRyb2xzUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIGFsbE90aGVyc1Byb2dyYW1zQ291bnQ6IDAsXHJcbiAgICBhbGxSZWd1bGF0aW9uUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIGFsbFN0YW5kYXJkUHJvZ3JhbXNDb3VudDogMCxcclxuICB9O1xyXG5cclxuICBjYXRlZ29yeURhdGE6IGNhdGVnb3J5TGlzdCA9IHtcclxuICAgIGRhdGE6IFtdLFxyXG4gICAgZnJvbTogMCxcclxuICAgIHRvOiAwLFxyXG4gICAgdG90YWxQYWdlczogMCxcclxuICAgIHRvdGFsUmVjb3JkczogMCxcclxuICAgIGN1cnJlbnRQYWdlOiAxLFxyXG4gICAgc2VsZWN0ZWRDYXRlZ29yaWVzOiBbXSxcclxuICB9O1xyXG5cclxuICBzaG93Q2F0ZWdvcmllcyA9IGZhbHNlO1xyXG4gIGN1cnJlbnRQcm9ncmFtITogYW55O1xyXG4gIHNlYXJjaFN0cmluZzogc3RyaW5nID0gJyc7XHJcbiAgY2F0ZWdvcnlTZWFyY2hTdHJpbmc6IHN0cmluZyA9ICcnO1xyXG5cclxuICBhY3RpdmVUYWI6ICdyZWd1bGF0aW9ucycgfCAnc3RhbmRhcmRzJyB8ICdpbnRlcm5hbF9jb250cm9scycgfCAnb3RoZXJzJyA9XHJcbiAgICAncmVndWxhdGlvbnMnO1xyXG4gIHNlbGVjdGVkSWRzOiBhbnlbXSA9IFtdO1xyXG4gIGNhdGVnb3J5TGlzdDogYW55W10gPSBbXTtcclxuICBibG9ja1dpZHRoOiBhbnk7XHJcblxyXG4gIHByb2dyYW1UeXBlT2JqZWN0ID0ge1xyXG4gICAgcmVndWxhdGlvbnM6IDEsXHJcbiAgICBzdGFuZGFyZHM6IDIsXHJcbiAgICBpbnRlcm5hbF9jb250cm9sczogMyxcclxuICAgIG90aGVyczogMCxcclxuICB9O1xyXG5cclxuICBkaXNwbGF5Q29uZmlybWF0aW9uTWVzc2FnZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHRlbXBQcmltYXJ5UHJvZ3JhbTogYW55ID0ge307XHJcbiAgcHJpbWFyeUNvbmZpcm1hdGlvbk1lc3NhZ2U6IHN0cmluZyA9IGBPbmNlIGNvbmZpcm1lZCwgdGhlIDxlbT5QcmltYXJ5IFByb2dyYW08L2VtPiBmb3IgdGhpcyByZXNwb25zaWJpbGl0eSB3aWxsIGJlIGNoYW5nZWQuIEhlbmNlLCBhbGwgdGhlIGRlZmF1bHQgc2V0dGluZ3MgcmVsYXRlZCB0byB0aGUgbmV3IDxlbT5QcmltYXJ5IFByb2dyYW08L2VtPiB3aWxsIG5vdyBhcHBseSB0byB0aGlzIHJlc3BvbnNpYmlsaXR5LmA7XHJcbiAgaXNQcmltYXJ5Q29uZmlybWF0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNVbmNoZWNrZWRQcm9ncmFtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNQcmltYXJ5VW5jaGVja2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRQcm9ncmFtc0RldGFpbDogYW55ID0gW107XHJcbiAgc2VsZWN0ZWRQcm9ncmFtc0lkOiBhbnkgPSBbXTtcclxuICBwcm9ncmFtQ291bnRMb2FkZXIgPSBmYWxzZTtcclxuICBkZXByZWNhdGVQcmltYXJ5UHJvZ3JhbUZsYWcgPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIHNhdmVTZWxlY3RlZFByb2dyYW0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNsb3NlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgYWxsQ2F0ZWdvcmllczogYW55W10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZXNwb25zaWJpbGl0eVNlcnZpY2U6IFJlc3BvbnNpYmlsaXR5U2VydmljZSkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlcHJlY2F0ZVByaW1hcnlQcm9ncmFtRmxhZyA9IHRoaXMuZmVhdHVyZS5pc0ZlYXR1cmVFbmFibGVkKFxyXG4gICAgICAnZmZfZGVwcmVjYXRlX3ByaW1hcnlfcHJvZ3JhbV9mbGFnJ1xyXG4gICAgKTtcclxuICAgIHRoaXMuYW5pbWF0aW9uID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmFuaW1hdGlvbiA9IGZhbHNlO1xyXG4gICAgfSwgMzAwKTtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUHJvZ3JhbSAmJiB0aGlzLnNlbGVjdGVkUHJvZ3JhbVswXSkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRQcm9ncmFtID0gdGhpcy5zZWxlY3RlZFByb2dyYW1bMF07XHJcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdFRElUJyB8fCB0aGlzLm9wZW5lZEZyb20gPT09ICdQUk9HUkFNX1dPUktST09NJykge1xyXG4gICAgICAgIHRoaXMudmlld09ubHlQcm9ncmFtc0NhdGVnb3J5SWQ/LnB1c2godGhpcy5jdXJyZW50UHJvZ3JhbT8uY2F0ZWdvcnlfaWQpO1xyXG4gICAgICB9XHJcbiAgICAgIHN3aXRjaCAodGhpcy5jdXJyZW50UHJvZ3JhbT8ucHJvZ3JhbVR5cGUpIHtcclxuICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICB0aGlzLmFjdGl2ZVRhYiA9ICdvdGhlcnMnO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgdGhpcy5hY3RpdmVUYWIgPSAncmVndWxhdGlvbnMnO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgdGhpcy5hY3RpdmVUYWIgPSAnc3RhbmRhcmRzJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgIHRoaXMuYWN0aXZlVGFiID0gJ2ludGVybmFsX2NvbnRyb2xzJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICB0aGlzLmFjdGl2ZVRhYiA9ICdyZWd1bGF0aW9ucyc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmdldFNlbGVjdGVkUHJvZ3JhbUNvdW50KCk7XHJcbiAgICAgIC8vIGlmICh0aGlzLnNlbGVjdGVkQ2F0ZWdvcmllcz8ubGVuZ3RoICYmIHRoaXMuY3VycmVudFByb2dyYW0pIHtcclxuICAgICAgdGhpcy5wb3B1bGF0ZUNhdGVnb3JpZXMoKTtcclxuICAgICAgLy8gfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmhpZGVQcm9ncmFtc0xpc3QpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW1zSWQ/LnB1c2godGhpcy5zZWxlY3RlZFByb2dyYW1bMF0/Ll9pZCk7XHJcbiAgICAgIHRoaXMuZ2V0Q2F0ZWdvcmllc0xpc3QoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2V0UHJvZ3JhbXNMaXN0KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdldFByb2dyYW1zQ291bnQoKTtcclxuXHJcbiAgICB0aGlzLnByZXZpb3VzU2VsZWN0ZWRWYWx1ZXMgPSB7XHJcbiAgICAgIHByb2dyYW1zOiB0aGlzLmN1cnJlbnRQcm9ncmFtLFxyXG4gICAgICBjYXRlZ29yaWVzOiB0aGlzLnNlbGVjdGVkQ2F0ZWdvcmllcy5sZW5ndGhcclxuICAgICAgICA/IFsuLi5uZXcgU2V0KHRoaXMuc2VsZWN0ZWRDYXRlZ29yaWVzKV1cclxuICAgICAgICA6IFtdLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnByZXNlcnZlUHJldmlvdXNEZXRhaWxzKCk7XHJcbiAgfVxyXG4gIHBvcHVsYXRlQ2F0ZWdvcmllcygpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBbXTtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgLy8gcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncHJvZ3JhbV9pZCcsIHRoaXMuY3VycmVudFByb2dyYW0uX2lkKTtcclxuICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ2lzUGFnaW5hdGlvbicsIGZhbHNlKTtcclxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5SWQpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncmVwb3J0SWQnLCB0aGlzLnJlc3BvbnNpYmlsaXR5SWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlXHJcbiAgICAgIC5nZXRQcm9ncmFtc0xpc3QocGFyYW1zLCB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNJZClcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBhbGxDYXRlZ29yaWVzID0gcmVzLmRhdGE7XHJcblxyXG4gICAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzID0gYWxsQ2F0ZWdvcmllcy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChlbGU6IGFueSkgPT4gdGhpcy5zZWxlY3RlZENhdGVnb3JpZXMuaW5jbHVkZXMoZWxlLmNhdGVnb3J5X2lkKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5wdXNoKGVsZW1lbnQuY2F0ZWdvcnlfaWQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlU2VhcmNoKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLnNlYXJjaFN0cmluZyAhPSBldmVudCkge1xyXG4gICAgICB0aGlzLnByb2dyYW1EYXRhLmN1cnJlbnRQYWdlID0gMTtcclxuICAgICAgdGhpcy5zZWFyY2hTdHJpbmcgPSBldmVudDtcclxuICAgICAgdGhpcy5nZXRQcm9ncmFtc0xpc3QoeyBzZWFyY2g6IHRydWUgfSk7XHJcbiAgICAgIHRoaXMuZ2V0UHJvZ3JhbXNDb3VudCh7IHNlYXJjaDogdHJ1ZSB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgY2F0ZWdvcnlTZWFyY2goZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuY2F0ZWdvcnlTZWFyY2hTdHJpbmcgIT0gZXZlbnQpIHtcclxuICAgICAgdGhpcy5jYXRlZ29yeURhdGEuY3VycmVudFBhZ2UgPSAxO1xyXG4gICAgICB0aGlzLmNhdGVnb3J5U2VhcmNoU3RyaW5nID0gZXZlbnQ7XHJcbiAgICAgIHRoaXMuZ2V0Q2F0ZWdvcmllc0xpc3QoeyBzZWFyY2g6IHRydWUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RQcm9ncmFtKGV2ZW50OiBhbnksIHByb2dyYW06IGFueSkge1xyXG4gICAgdGhpcy51cGRhdGVTZWxlY3RlZFByb2dyYW1zKGV2ZW50LCBwcm9ncmFtKTtcclxuICAgIC8vIHRoaXMuZ2V0U2VsZWN0ZWRQcm9ncmFtQ291bnQoZXZlbnQsIHByb2dyYW0/LnByb2dyYW1UeXBlKTtcclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICBpZiAoIXRoaXMuZmVhdHVyZS5pc0ZlYXR1cmVFbmFibGVkKCdmZl9kZXByZWNhdGVfcHJpbWFyeV9wcm9ncmFtX2ZsYWcnKSkge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuY3VycmVudFByb2dyYW0gPz8ge30pLmxlbmd0aFxyXG4gICAgICAgICAgPyBudWxsXHJcbiAgICAgICAgICA6ICh0aGlzLmN1cnJlbnRQcm9ncmFtID0gcHJvZ3JhbSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gdGhpcy5jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBbXTtcclxuICAgICAgdGhpcy5jYXRlZ29yeUxpc3QgPSBbXTtcclxuICAgICAgLy8gdGhpcy5nZXRTZWxlY3RlZFByb2dyYW1Db3VudCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdGhlIGV2ZW50IGlzIHRydWUsIHRoZW4gcHVzaCB0aGUgcHJvZ3JhbSB0byB0aGUgc2VsZWN0ZWRQcm9ncmFtc0RldGFpbCBhcnJheS4gSWYgdGhlIGV2ZW50IGlzXHJcbiAgICogZmFsc2UsIHRoZW4gcmVtb3ZlIHRoZSBwcm9ncmFtIGZyb20gdGhlIHNlbGVjdGVkUHJvZ3JhbXNEZXRhaWwgYXJyYXkuXHJcbiAgICogQHBhcmFtIHthbnl9IGV2ZW50IC0gYm9vbGVhblxyXG4gICAqIEBwYXJhbSB7YW55fSBwcm9ncmFtIC0gYW55ID0ge1xyXG4gICAqL1xyXG4gIHVwZGF0ZVNlbGVjdGVkUHJvZ3JhbXMoZXZlbnQ6IGFueSwgcHJvZ3JhbTogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgY29uc3QgaW5kZXhPZlByb2dyYW0gPSB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNEZXRhaWw/LmZpbmRJbmRleChcclxuICAgICAgICAoZWw6IGFueSkgPT4gZWw/LmNhdGVnb3J5X2lkID09PSBwcm9ncmFtPy5jYXRlZ29yeV9pZFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoaW5kZXhPZlByb2dyYW0gPT09IC0xICYmIE9iamVjdC5rZXlzKHByb2dyYW0pPy5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNJZD8ucHVzaChwcm9ncmFtPy5faWQpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0RldGFpbD8ucHVzaChwcm9ncmFtKTtcclxuICAgICAgICB0aGlzLmdldFNlbGVjdGVkUHJvZ3JhbUNvdW50KGV2ZW50LCBwcm9ncmFtPy5wcm9ncmFtVHlwZSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4T2ZQcm9ncmFtID0gdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsPy5maW5kSW5kZXgoXHJcbiAgICAgICAgKGVsOiBhbnkpID0+IGVsPy5jYXRlZ29yeV9pZCA9PT0gcHJvZ3JhbT8uY2F0ZWdvcnlfaWRcclxuICAgICAgKTtcclxuICAgICAgaWYgKGluZGV4T2ZQcm9ncmFtICE9PSAtMSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0RldGFpbD8uc3BsaWNlKGluZGV4T2ZQcm9ncmFtLCAxKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBpbmRleE9mSWQgPSB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNJZD8uZmluZEluZGV4KFxyXG4gICAgICAgIChlbDogYW55KSA9PiBlbCA9PT0gcHJvZ3JhbT8uX2lkXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChpbmRleE9mSWQgIT09IC0xKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW1zSWQ/LnNwbGljZShpbmRleE9mSWQsIDEpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaXNQcmltYXJ5VW5jaGVja2VkID0gZmFsc2U7XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5jdXJyZW50UHJvZ3JhbSAmJlxyXG4gICAgICAgIHRoaXMuY3VycmVudFByb2dyYW0/LmNhdGVnb3J5X2lkID09PSBwcm9ncmFtPy5jYXRlZ29yeV9pZFxyXG4gICAgICApIHtcclxuICAgICAgICAvLyB0aGlzLnByaW1hcnlDb25maXJtYXRpb25NZXNzYWdlID0gJ1lvdSBjYW5ub3QgZGVzZWxlY3QgdGhpcyBQcm9ncmFtIHNpbmNlIHRoaXMgaXMgdGhlIDxlbT5QcmltYXJ5IFByb2dyYW08L2VtPiBmb3IgdGhpcyByZXNwb25zaWJpbGl0eS4gVG8gcHJvY2VlZCwgZmlyc3Qgc2VsZWN0IGFub3RoZXIgUHJvZ3JhbSBhcyB0aGUgPGVtPlByaW1hcnkgUHJvZ3JhbTwvZW0+Lic7XHJcbiAgICAgICAgdGhpcy5pc1ByaW1hcnlDb25maXJtYXRpb24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNQcmltYXJ5VW5jaGVja2VkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnRlbXBQcmltYXJ5UHJvZ3JhbSA9IEpTT04uc3RyaW5naWZ5KHByb2dyYW0pO1xyXG4gICAgICAgIC8vIHRoaXMuY3VycmVudFByb2dyYW0gPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIH1cclxuICAgICAgdGhpcy5nZXRTZWxlY3RlZFByb2dyYW1Db3VudChldmVudCwgcHJvZ3JhbT8ucHJvZ3JhbVR5cGUpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0RldGFpbD8ubGVuZ3RoICYmICF0aGlzLmN1cnJlbnRQcm9ncmFtPy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5jdXJyZW50UHJvZ3JhbSA9IHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0RldGFpbFswXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFByb2dyYW0gPSBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRoZSBjdXJyZW50UHJvZ3JhbSBpcyBzZXQsIHRoZW4gc2V0IHRoZSBjdXJyZW50UHJvZ3JhbSB0byB0aGUgcHJvZ3JhbSBwYXNzZWQgaW4sIGFuZCBzZXQgdGhlXHJcbiAgICogdGVtcFByaW1hcnlQcm9ncmFtIHRvIHRoZSBjdXJyZW50UHJvZ3JhbS5cclxuICAgKiBJZiB0aGUgY3VycmVudFByb2dyYW0gaXMgbm90IHNldCwgdGhlbiBzZXQgdGhlIGN1cnJlbnRQcm9ncmFtIHRvIHRoZSBwcm9ncmFtIHBhc3NlZCBpbi5cclxuICAgKiBAcGFyYW0ge2FueX0gZXZlbnQgLSBhbnkgLSB0aGUgZXZlbnQgdGhhdCBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBjbGlja3Mgb24gdGhlIGNoZWNrYm94XHJcbiAgICogQHBhcmFtIHthbnl9IHByb2dyYW0gLSB0aGUgcHJvZ3JhbSB0aGF0IGlzIGJlaW5nIHNlbGVjdGVkXHJcbiAgICovXHJcbiAgc2V0UHJpbWFyeVByb2dyYW0oZXZlbnQ6IGFueSwgcHJvZ3JhbTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50UHJvZ3JhbSkge1xyXG4gICAgICBjb25zdCBjdXJyZW50VGVtcCA9IHRoaXMuY3VycmVudFByb2dyYW07XHJcbiAgICAgIHRoaXMudGVtcFByaW1hcnlQcm9ncmFtID0gSlNPTi5zdHJpbmdpZnkoY3VycmVudFRlbXApO1xyXG4gICAgICB0aGlzLmN1cnJlbnRQcm9ncmFtID0gcHJvZ3JhbTtcclxuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFByb2dyYW1zKHRydWUsIHByb2dyYW0pO1xyXG4gICAgICBpZiAoIWV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UHJvZ3JhbSA9IHt9O1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucHJpbWFyeUNvbmZpcm1hdGlvbk1lc3NhZ2UgPVxyXG4gICAgICAgICdPbmNlIGNvbmZpcm1lZCwgdGhlIDxlbT5QcmltYXJ5IFByb2dyYW08L2VtPiBmb3IgdGhpcyByZXNwb25zaWJpbGl0eSB3aWxsIGJlIGNoYW5nZWQuIEhlbmNlLCBhbGwgdGhlIGRlZmF1bHQgc2V0dGluZ3MgcmVsYXRlZCB0byB0aGUgbmV3IDxlbT5QcmltYXJ5IFByb2dyYW08L2VtPiB3aWxsIG5vdyBhcHBseSB0byB0aGlzIHJlc3BvbnNpYmlsaXR5Lic7XHJcbiAgICAgIHRoaXMuaXNQcmltYXJ5Q29uZmlybWF0aW9uID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmIChldmVudCAmJiAhdGhpcy5jdXJyZW50UHJvZ3JhbSkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRQcm9ncmFtID0gcHJvZ3JhbTtcclxuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFByb2dyYW1zKHRydWUsIHByb2dyYW0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdGhlIHVzZXIgY2xpY2tzIFwiWWVzXCIgb24gdGhlIGNvbmZpcm1hdGlvbiBtb2RhbCwgdGhlbiB0aGUgZnVuY3Rpb24gd2lsbCByZW1vdmUgdGhlIHByb2dyYW0gZnJvbVxyXG4gICAqIHRoZSBzZWxlY3RlZFByb2dyYW1zRGV0YWlsIGFycmF5IGFuZCB0aGUgc2VsZWN0ZWRQcm9ncmFtc0lkIGFycmF5LiBJZiB0aGUgdXNlciBjbGlja3MgXCJOb1wiIG9uIHRoZVxyXG4gICAqIGNvbmZpcm1hdGlvbiBtb2RhbCwgdGhlbiB0aGUgZnVuY3Rpb24gd2lsbCBkbyBub3RoaW5nLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQgLSBib29sZWFuIC0mZ3Q7IHRoaXMgaXMgdGhlIHZhbHVlIG9mIHRoZSBjaGVja2JveFxyXG4gICAqL1xyXG4gIHVwZGF0ZVByaW1hcnlQcm9ncmFtKGV2ZW50OiBib29sZWFuKSB7XHJcbiAgICBpZiAoZXZlbnQgJiYgdGhpcy5pc1ByaW1hcnlVbmNoZWNrZWQpIHtcclxuICAgICAgY29uc3QgaW5kZXhPZlByb2dyYW0gPSB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNEZXRhaWw/LmZpbmRJbmRleChcclxuICAgICAgICAoZWw6IGFueSkgPT5cclxuICAgICAgICAgIGVsPy5jYXRlZ29yeV9pZCA9PT1cclxuICAgICAgICAgIEpTT04ucGFyc2UodGhpcy50ZW1wUHJpbWFyeVByb2dyYW0gPz8ge30pPy5jYXRlZ29yeV9pZFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoaW5kZXhPZlByb2dyYW0gIT09IC0xKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsPy5zcGxpY2UoaW5kZXhPZlByb2dyYW0sIDEpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGluZGV4T2ZJZCA9IHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0lkPy5maW5kSW5kZXgoXHJcbiAgICAgICAgKGVsOiBhbnkpID0+IGVsID09PSBKU09OLnBhcnNlKHRoaXMudGVtcFByaW1hcnlQcm9ncmFtID8/IHt9KT8uX2lkXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChpbmRleE9mSWQgIT09IC0xKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW1zSWQ/LnNwbGljZShpbmRleE9mSWQsIDEpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaXNQcmltYXJ5Q29uZmlybWF0aW9uID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY3VycmVudFByb2dyYW0gPSB7fTtcclxuICAgIH0gZWxzZSBpZiAoIWV2ZW50ICYmIHRoaXMuaXNQcmltYXJ5VW5jaGVja2VkKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRQcm9ncmFtcyhcclxuICAgICAgICB0cnVlLFxyXG4gICAgICAgIHRoaXMudGVtcFByaW1hcnlQcm9ncmFtPy5sZW5ndGhcclxuICAgICAgICAgID8gSlNPTi5wYXJzZSh0aGlzLnRlbXBQcmltYXJ5UHJvZ3JhbSA/PyB7fSlcclxuICAgICAgICAgIDoge31cclxuICAgICAgKTtcclxuICAgICAgdGhpcy5jdXJyZW50UHJvZ3JhbSA9IHRoaXMudGVtcFByaW1hcnlQcm9ncmFtPy5sZW5ndGhcclxuICAgICAgICA/IEpTT04ucGFyc2UodGhpcy50ZW1wUHJpbWFyeVByb2dyYW0gPz8ge30pXHJcbiAgICAgICAgOiB7fTtcclxuICAgICAgdGhpcy5pc1ByaW1hcnlDb25maXJtYXRpb24gPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQpIHtcclxuICAgICAgLy8gdGhpcy5jdXJyZW50UHJvZ3JhbSA9IHRoaXMuaXNQcmltYXJ5VW5jaGVja2VkID8ge30gOiBKU09OLnBhcnNlKHRoaXMudGVtcFByaW1hcnlQcm9ncmFtKTtcclxuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFByb2dyYW1zKFxyXG4gICAgICAgIHRoaXMuaXNQcmltYXJ5VW5jaGVja2VkID8gZmFsc2UgOiB0cnVlLFxyXG4gICAgICAgIHRoaXMudGVtcFByaW1hcnlQcm9ncmFtPy5sZW5ndGhcclxuICAgICAgICAgID8gSlNPTi5wYXJzZSh0aGlzLnRlbXBQcmltYXJ5UHJvZ3JhbSA/PyB7fSlcclxuICAgICAgICAgIDoge31cclxuICAgICAgKTtcclxuICAgICAgdGhpcy5pc1ByaW1hcnlDb25maXJtYXRpb24gPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBjdXJyZW50UHJpbWFyeSA9IEpTT04uc3RyaW5naWZ5KHRoaXMuY3VycmVudFByb2dyYW0pO1xyXG4gICAgICB0aGlzLmN1cnJlbnRQcm9ncmFtID0ge307XHJcbiAgICAgIC8vIHRoaXMudXBkYXRlU2VsZWN0ZWRQcm9ncmFtcyhmYWxzZSwgSlNPTi5wYXJzZShjdXJyZW50UHJpbWFyeSk/PyB7fSk7XHJcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRQcm9ncmFtcyh0cnVlLCBKU09OLnBhcnNlKGN1cnJlbnRQcmltYXJ5KSA/PyB7fSk7XHJcbiAgICAgIHRoaXMuY3VycmVudFByb2dyYW0gPSB0aGlzLnRlbXBQcmltYXJ5UHJvZ3JhbT8ubGVuZ3RoXHJcbiAgICAgICAgPyBKU09OLnBhcnNlKHRoaXMudGVtcFByaW1hcnlQcm9ncmFtID8/IHt9KVxyXG4gICAgICAgIDoge307XHJcbiAgICAgIHRoaXMuaXNQcmltYXJ5Q29uZmlybWF0aW9uID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzUHJpbWFyeVVuY2hlY2tlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0QWxsQ2F0ZWdvcmllcyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBbXTtcclxuICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzID0gW107XHJcbiAgICAgIGlmICh0aGlzLmNhdGVnb3J5RGF0YS50b3RhbFBhZ2VzIDwgMikge1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLmRhdGEuZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMucHVzaChlbGUuY2F0ZWdvcnlfaWQpO1xyXG4gICAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzLnB1c2goZWxlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICAgICAgLy8gcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncHJvZ3JhbV9pZCcsIHRoaXMuY3VycmVudFByb2dyYW0/Ll9pZCk7XHJcbiAgICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnaXNQYWdpbmF0aW9uJywgZmFsc2UpO1xyXG4gICAgICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5SWQpIHtcclxuICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3JlcG9ydElkJywgdGhpcy5yZXNwb25zaWJpbGl0eUlkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlXHJcbiAgICAgICAgICAuZ2V0UHJvZ3JhbXNMaXN0KHBhcmFtcywgdGhpcy5zZWxlY3RlZFByb2dyYW1zSWQpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgYWxsQ2F0ZWdvcmllcyA9IHJlcy5kYXRhO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMgPSByZXMuZGF0YTtcclxuICAgICAgICAgICAgICBhbGxDYXRlZ29yaWVzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5wdXNoKGVsZW1lbnQuY2F0ZWdvcnlfaWQpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzID0gW107XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrQ2F0ZWdvcmllc1NlbGVjdGlvbigpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzLmxlbmd0aCA9PVxyXG4gICAgICB0aGlzLmNhdGVnb3J5RGF0YS50b3RhbFJlY29yZHNcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gJ2NoZWNrZWQnO1xyXG4gICAgfSBlbHNlIGlmICghdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gJ3VuY2hlY2tlZCc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJ2luZGV0ZXJtaW5hdGUnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3BlbkNhdGVnb3JpZXMoKSB7XHJcbiAgICB0aGlzLnNlYXJjaFN0cmluZyA9ICcnO1xyXG4gICAgdGhpcy5jYXRlZ29yeVNlYXJjaFN0cmluZyA9ICcnO1xyXG4gICAgY29uc3QgaXNTdWJQcm9ncmFtID0gdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsPy5zb21lKFxyXG4gICAgICAoZWw6IGFueSkgPT4gZWw/LmNoaWxkX2lkPy5sZW5ndGhcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5wb3B1bGF0ZUNhdGVnb3JpZXMoKTtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRQcm9ncmFtPy5jaGlsZF9pZD8ubGVuZ3RoIHx8IGlzU3ViUHJvZ3JhbSkge1xyXG4gICAgICB0aGlzLnNob3dDYXRlZ29yaWVzID0gdHJ1ZTtcclxuICAgICAgdGhpcy5nZXRDYXRlZ29yaWVzTGlzdCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZElkcyA9IFtdO1xyXG4gICAgICB0aGlzLnNhdmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGJhY2tUb1Byb2dyYW1zKCkge1xyXG4gICAgaWYgKCF0aGlzLmhpZGVQcm9ncmFtc0xpc3QpIHtcclxuICAgICAgdGhpcy5zaG93Q2F0ZWdvcmllcyA9IGZhbHNlO1xyXG4gICAgICBpZiAodGhpcy5wcmV2aW91c1NlbGVjdGVkVmFsdWVzPy5wcm9ncmFtPy5faWQgPT0gdGhpcy5jdXJyZW50UHJvZ3JhbSkge1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcyA9IFtcclxuICAgICAgICAgIC4uLm5ldyBTZXQodGhpcy5wcmV2aW91c1NlbGVjdGVkVmFsdWVzLmNhdGVnb3JpZXMpLFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZElkcyA9IFtdO1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSWRzLnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5nZXRQcm9ncmFtc0xpc3QoKTtcclxuICAgICAgICB0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSWRzID0gW107XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcyA9IFtdO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSWRzID0gW107XHJcbiAgICAgIHRoaXMuY2xvc2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoYW5nZVRhYihcclxuICAgIHR5cGU6ICdyZWd1bGF0aW9ucycgfCAnc3RhbmRhcmRzJyB8ICdpbnRlcm5hbF9jb250cm9scycgfCAnb3RoZXJzJ1xyXG4gICkge1xyXG4gICAgdGhpcy5wcm9ncmFtU3ViVGFiID0gJ1BST0dSQU1TJztcclxuICAgIHRoaXMuYWN0aXZlVGFiID0gdHlwZTtcclxuICAgIHRoaXMucHJvZ3JhbURhdGEuY3VycmVudFBhZ2UgPSAxO1xyXG4gICAgaWYgKHRoaXMuc2VhcmNoU3RyaW5nPy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5zZWFyY2hTdHJpbmcgPSAnJztcclxuICAgICAgdGhpcy5nZXRQcm9ncmFtc0NvdW50KCk7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLnNlYXJjaFN0cmluZyA9ICcnO1xyXG4gICAgdGhpcy5zZWFyY2hQcm9ncmFtLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcclxuICAgIHRoaXMuZ2V0UHJvZ3JhbXNMaXN0KCk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VQYWdlKGV2ZW50OiBhbnksIHR5cGU6ICdjYXRlZ29yeScgfCAncHJvZ3JhbScpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdwcm9ncmFtJzpcclxuICAgICAgICB0aGlzLnByb2dyYW1EYXRhLmN1cnJlbnRQYWdlID0gZXZlbnQ7XHJcbiAgICAgICAgdGhpcy5nZXRQcm9ncmFtc0xpc3QoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY2F0ZWdvcnknOlxyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLmN1cnJlbnRQYWdlID0gZXZlbnQ7XHJcbiAgICAgICAgdGhpcy5nZXRDYXRlZ29yaWVzTGlzdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UHJvZ3JhbXNMaXN0KHBhcmFtc09iamVjdD86IGFueSkge1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKFxyXG4gICAgICAncHJvZ3JhbVR5cGUnLFxyXG4gICAgICB0aGlzLnByb2dyYW1UeXBlT2JqZWN0W3RoaXMuYWN0aXZlVGFiXVxyXG4gICAgKTtcclxuICAgIGlmIChwYXJhbXNPYmplY3Q/LnNlYXJjaCB8fCB0aGlzLnNlYXJjaFN0cmluZykge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdzZWFyY2hUZXh0JywgdGhpcy5zZWFyY2hTdHJpbmcpO1xyXG4gICAgfVxyXG4gICAgLy8gZWxzZSB7XHJcbiAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdwYWdlTm8nLCB0aGlzLnByb2dyYW1EYXRhLmN1cnJlbnRQYWdlKTtcclxuICAgIC8vIH1cclxuICAgIGlmICh0aGlzLnByb2dyYW1TdWJUYWIgPT09ICdPVEhFUl9QUk9HUkFNUycpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnaXNWaWV3T25seVByb2dyYW1zJywgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlJZCkge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdyZXBvcnRJZCcsIHRoaXMucmVzcG9uc2liaWxpdHlJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2UuZ2V0UHJvZ3JhbXNMaXN0KHBhcmFtcykuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5kYXRhID0gcmVzLmRhdGE7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5mcm9tID0gcmVzLmZyb207XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS50byA9IHJlcy50bztcclxuICAgICAgICB0aGlzLnByb2dyYW1EYXRhLnRvdGFsUGFnZXMgPSByZXMudG90YWxQYWdlcztcclxuICAgICAgICB0aGlzLnByb2dyYW1EYXRhLnRvdGFsUmVjb3JkcyA9IHJlcy50b3RhbFJlY29yZHM7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5BbGxJbnRlcm5hbENvbnRyb2xzUHJvZ3JhbXNDb3VudCA9XHJcbiAgICAgICAgICByZXMuQWxsSW50ZXJuYWxDb250cm9sc1Byb2dyYW1zQ291bnQ7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5BbGxPdGhlcnNQcm9ncmFtc0NvdW50ID0gcmVzLkFsbE90aGVyc1Byb2dyYW1zQ291bnQ7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5BbGxSZWd1bGF0aW9uUHJvZ3JhbXNDb3VudCA9XHJcbiAgICAgICAgICByZXMuQWxsUmVndWxhdGlvblByb2dyYW1zQ291bnQ7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5BbGxTdGFuZGFyZFByb2dyYW1zQ291bnQgPVxyXG4gICAgICAgICAgcmVzLkFsbFN0YW5kYXJkUHJvZ3JhbXNDb3VudDtcclxuICAgICAgICB0aGlzLnByb2dyYW1EYXRhLkFsbFByb2dyYW1zQ291bnQgPSByZXM/LkFsbFByb2dyYW1zQ291bnRcclxuICAgICAgICAgID8gcmVzPy5BbGxQcm9ncmFtc0NvdW50XHJcbiAgICAgICAgICA6IDA7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5BbGxWaWV3T25seVByb2dyYW1Db3VudCA9IHJlcz8uQWxsVmlld09ubHlQcm9ncmFtQ291bnRcclxuICAgICAgICAgID8gcmVzPy5BbGxWaWV3T25seVByb2dyYW1Db3VudFxyXG4gICAgICAgICAgOiAwO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFByb2dyYW1zQ291bnQocGFyYW1zT2JqZWN0PzogYW55KSB7XHJcbiAgICB0aGlzLnByb2dyYW1Db3VudExvYWRlciA9IHRydWU7XHJcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgIC8vIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3Byb2dyYW1UeXBlJywgdGhpcy5wcm9ncmFtVHlwZU9iamVjdFt0aGlzLmFjdGl2ZVRhYl0pO1xyXG4gICAgaWYgKHBhcmFtc09iamVjdD8uc2VhcmNoIHx8IHRoaXMuc2VhcmNoU3RyaW5nKSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3NlYXJjaFRleHQnLCB0aGlzLnNlYXJjaFN0cmluZyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUlkKSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3JlcG9ydElkJywgdGhpcy5yZXNwb25zaWJpbGl0eUlkKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmdldFByb2dyYW1zTGlzdENvdW50KHBhcmFtcykuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtVGFiRGF0YUNvdW50LmFsbFJlZ3VsYXRpb25Qcm9ncmFtc0NvdW50ID1cclxuICAgICAgICAgIHJlcz8uQWxsUmVndWxhdGlvblByb2dyYW1zQ291bnQ7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtVGFiRGF0YUNvdW50LmFsbFN0YW5kYXJkUHJvZ3JhbXNDb3VudCA9XHJcbiAgICAgICAgICByZXM/LkFsbFN0YW5kYXJkUHJvZ3JhbXNDb3VudDtcclxuICAgICAgICB0aGlzLnByb2dyYW1UYWJEYXRhQ291bnQuYWxsSW50ZXJuYWxDb250cm9sc1Byb2dyYW1zQ291bnQgPVxyXG4gICAgICAgICAgcmVzPy5BbGxJbnRlcm5hbENvbnRyb2xzUHJvZ3JhbXNDb3VudDtcclxuICAgICAgICB0aGlzLnByb2dyYW1UYWJEYXRhQ291bnQuYWxsT3RoZXJzUHJvZ3JhbXNDb3VudCA9XHJcbiAgICAgICAgICByZXM/LkFsbE90aGVyc1Byb2dyYW1zQ291bnQ7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtQ291bnRMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtQ291bnRMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRTdWJDYXRlZ29yeUlkczogYW55W10gPSBbXTtcclxuICBnZXRDYXRlZ29yaWVzTGlzdChxdWVyeU9iamVjdD86IGFueSkge1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICAvLyBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdwcm9ncmFtX2lkJywgdGhpcy5jdXJyZW50UHJvZ3JhbT8uX2lkKTtcclxuICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3BhZ2VObycsIHRoaXMuY2F0ZWdvcnlEYXRhLmN1cnJlbnRQYWdlKTtcclxuICAgIGlmIChxdWVyeU9iamVjdD8uc2VhcmNoIHx8IHRoaXMuY2F0ZWdvcnlTZWFyY2hTdHJpbmcpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnc2VhcmNoVGV4dCcsIHRoaXMuY2F0ZWdvcnlTZWFyY2hTdHJpbmcpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlJZCkge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdyZXBvcnRJZCcsIHRoaXMucmVzcG9uc2liaWxpdHlJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2VcclxuICAgICAgLmdldFByb2dyYW1zTGlzdChwYXJhbXMsIFsuLi5uZXcgU2V0KHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0lkKV0pXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEuZGF0YSA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEuZnJvbSA9IHJlcy5mcm9tO1xyXG4gICAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEudG8gPSByZXMudG87XHJcbiAgICAgICAgICB0aGlzLmNhdGVnb3J5RGF0YS50b3RhbFBhZ2VzID0gcmVzLnRvdGFsUGFnZXM7XHJcbiAgICAgICAgICB0aGlzLmNhdGVnb3J5RGF0YS50b3RhbFJlY29yZHMgPSByZXMudG90YWxSZWNvcmRzO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFN1YkNhdGVnb3J5SWRzID0gcmVzPy5zZWxlY3RlZFN1YkNhdGVnb3J5SWRzPy5sZW5ndGhcclxuICAgICAgICAgICAgPyByZXM/LnNlbGVjdGVkU3ViQ2F0ZWdvcnlJZHNcclxuICAgICAgICAgICAgOiBbXTtcclxuICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIHRoaXMuc2hvd0NhdGVnb3JpZXMgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVByb2dyYW0oKSB7fVxyXG5cclxuICBzZWxlY3RDYXRlZ29yeShtb2RlOiBhbnksIGNhdGVnb3J5OiBhbnkpIHtcclxuICAgIGlmIChtb2RlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMucHVzaChjYXRlZ29yeS5jYXRlZ29yeV9pZCk7XHJcbiAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcy5wdXNoKGNhdGVnb3J5KTtcclxuICAgICAgdGhpcy5zZWxlY3RlZENhdGVnb3JpZXMucHVzaChjYXRlZ29yeS5jYXRlZ29yeV9pZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRJZHMuZmluZEluZGV4KFxyXG4gICAgICAgIChlbGVtZW50OiBhbnkpID0+IGVsZW1lbnQgPT0gY2F0ZWdvcnkuY2F0ZWdvcnlfaWRcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZElkcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICBjb25zdCBjYXRlZ29yeUluZGV4ID0gdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzLmZpbmRJbmRleChcclxuICAgICAgICAoZWxlOiBhbnkpID0+IGVsZS5jYXRlZ29yeV9pZCA9PSBjYXRlZ29yeS5jYXRlZ29yeV9pZFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMuc3BsaWNlKGNhdGVnb3J5SW5kZXgsIDEpO1xyXG4gICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gdGhpcy5zZWxlY3RlZENhdGVnb3JpZXMuZmluZEluZGV4KFxyXG4gICAgICAgIChlbGU6IGFueSkgPT4gZWxlID09IGNhdGVnb3J5Py5jYXRlZ29yeV9pZFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcmllcy5zcGxpY2Uoc2VsZWN0ZWRJbmRleCwgMSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVDYXRlZ29yaWVzKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGNhdGVnb3J5SW5kZXggPSB0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMuZmluZEluZGV4KFxyXG4gICAgICAoZWxlOiBhbnkpID0+IGVsZS5jYXRlZ29yeV9pZCA9PSBldmVudC5jYXRlZ29yeV9pZFxyXG4gICAgKTtcclxuICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcy5zcGxpY2UoY2F0ZWdvcnlJbmRleCwgMSk7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRJZHMuZmluZEluZGV4KFxyXG4gICAgICAoZWxlbWVudDogYW55KSA9PiBlbGVtZW50ID09IGV2ZW50LmNhdGVnb3J5X2lkXHJcbiAgICApO1xyXG4gICAgdGhpcy5zZWxlY3RlZElkcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICBjb25zdCBjdXJyZW50UHJvZ3JhbSA9IHRoaXMucHJlc2VydmVQcmltYXJ5UHJvZ3JhbT8ubGVuZ3RoXHJcbiAgICAgID8gSlNPTi5wYXJzZSh0aGlzLnByZXNlcnZlUHJpbWFyeVByb2dyYW0pXHJcbiAgICAgIDoge307XHJcbiAgICBjb25zdCBzZWxlY3RlZFByb2dyYW1zSWQgPSB0aGlzLnByZXNlcnZlZFByb2dyYW1zSWQ/Lmxlbmd0aFxyXG4gICAgICA/IEpTT04ucGFyc2UodGhpcy5wcmVzZXJ2ZWRQcm9ncmFtc0lkKVxyXG4gICAgICA6IHVuZGVmaW5lZDtcclxuICAgIGNvbnN0IHNlbGVjdGVkUHJvZ3JhbXNEZXRhaWwgPSB0aGlzLnByZXNlcnZlZFNlbGVjdGVkUHJvZ3JhbXM/Lmxlbmd0aFxyXG4gICAgICA/IEpTT04ucGFyc2UodGhpcy5wcmVzZXJ2ZWRTZWxlY3RlZFByb2dyYW1zKVxyXG4gICAgICA6IFtdO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnByZXNlcnZlUHJpbWFyeVByb2dyYW0/Lmxlbmd0aCAmJlxyXG4gICAgICB0aGlzLnByZXNlcnZlZFNlbGVjdGVkUHJvZ3JhbXM/Lmxlbmd0aFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuc2F2ZVNlbGVjdGVkUHJvZ3JhbS5lbWl0KHtcclxuICAgICAgICBwcm9ncmFtOiBjdXJyZW50UHJvZ3JhbSxcclxuICAgICAgICBjYXRlZ29yaWVzOiBKU09OLnBhcnNlKHRoaXMudGVtcFNlbGVjdGVkQ2F0ZWdvcmllcyksXHJcbiAgICAgICAgbGlua2VkUHJvZ3JhbTogc2VsZWN0ZWRQcm9ncmFtc0RldGFpbCxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLnNhdmVTZWxlY3RlZFByb2dyYW0uZW1pdCh7cHJvZ3JhbTogY3VycmVudFByb2dyYW0sIGNhdGVnb3JpZXM6IHRoaXMuc2VsZWN0ZWRJZHMsIGxpbmtlZFByb2dyYW06IHNlbGVjdGVkUHJvZ3JhbXNEZXRhaWwgIH0pO1xyXG4gICAgdGhpcy5jbG9zZUV2ZW50LmVtaXQoKTtcclxuICB9XHJcblxyXG4gIHNhdmUoKSB7XHJcbiAgICBpZiAoIXRoaXMuaGlkZVByb2dyYW1zTGlzdCAmJiBmYWxzZSkge1xyXG4gICAgICB0aGlzLmRpc3BsYXlDb25maXJtYXRpb25NZXNzYWdlID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkQ2F0ZWdvcnlJZHMgPSB0aGlzLnNlbGVjdGVkSWRzLmNvbmNhdChcclxuICAgICAgICB0aGlzLnNlbGVjdGVkU3ViQ2F0ZWdvcnlJZHNcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zYXZlU2VsZWN0ZWRQcm9ncmFtLmVtaXQoe1xyXG4gICAgICAgIHByb2dyYW06IHRoaXMuY3VycmVudFByb2dyYW0sXHJcbiAgICAgICAgY2F0ZWdvcmllczogWy4uLm5ldyBTZXQoc2VsZWN0ZWRDYXRlZ29yeUlkcyldLFxyXG4gICAgICAgIGxpbmtlZFByb2dyYW06IHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0RldGFpbCxcclxuICAgICAgfSk7XHJcbiAgICAgIC8vIHRoaXMuc2F2ZVNlbGVjdGVkUHJvZ3JhbS5lbWl0KHsgcHJvZ3JhbTogdGhpcy5jdXJyZW50UHJvZ3JhbSwgY2F0ZWdvcmllczogdGhpcy5zZWxlY3RlZElkcyB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNhdmVDaGFuZ2VzKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRDYXRlZ29yeUlkcyA9IHRoaXMuc2VsZWN0ZWRJZHMuY29uY2F0KFxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTdWJDYXRlZ29yeUlkc1xyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnNhdmVTZWxlY3RlZFByb2dyYW0uZW1pdCh7XHJcbiAgICAgICAgcHJvZ3JhbTogdGhpcy5jdXJyZW50UHJvZ3JhbSxcclxuICAgICAgICBjYXRlZ29yaWVzOiBbLi4ubmV3IFNldChzZWxlY3RlZENhdGVnb3J5SWRzKV0sXHJcbiAgICAgICAgbGlua2VkUHJvZ3JhbTogdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsLFxyXG4gICAgICB9KTtcclxuICAgICAgLy8gdGhpcy5zYXZlU2VsZWN0ZWRQcm9ncmFtLmVtaXQoeyBwcm9ncmFtOiB0aGlzLmN1cnJlbnRQcm9ncmFtLCBjYXRlZ29yaWVzOiB0aGlzLnNlbGVjdGVkSWRzIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kaXNwbGF5Q29uZmlybWF0aW9uTWVzc2FnZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGVsZXRlRXZlbnQoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgaW5kZXhPZlByb2dyYW0gPSB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNEZXRhaWw/LmZpbmRJbmRleChcclxuICAgICAgKGVsOiBhbnkpID0+IGVsPy5jYXRlZ29yeV9pZCA9PT0gZXZlbnQ/LmNhdGVnb3J5X2lkXHJcbiAgICApO1xyXG4gICAgaWYgKGluZGV4T2ZQcm9ncmFtICE9PSAtMSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNEZXRhaWw/LnNwbGljZShpbmRleE9mUHJvZ3JhbSwgMSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBpbmRleE9mSWQgPSB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNJZD8uZmluZEluZGV4KFxyXG4gICAgICAoZWw6IGFueSkgPT4gZWwgPT09IGV2ZW50Py5faWRcclxuICAgICk7XHJcbiAgICBpZiAoaW5kZXhPZklkICE9PSAtMSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNJZD8uc3BsaWNlKGluZGV4T2ZJZCwgMSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jdXJyZW50UHJvZ3JhbT8uX2lkID09PSBldmVudD8uX2lkKSB7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkUHJvZ3JhbXNEZXRhaWw/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFByb2dyYW0gPSB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNEZXRhaWxbMF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UHJvZ3JhbSA9IHt9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdGhpcy5jdXJyZW50UHJvZ3JhbSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuc2hvd0NhdGVnb3JpZXMgPSBmYWxzZTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBbXTtcclxuICAgIHRoaXMuY2F0ZWdvcnlMaXN0ID0gW107XHJcbiAgICAvL0FzIHRoaXMgaXMgYSByYWRpbyBsaXN0IGFuZCBvbmx5IG9uZSBpdGVtIGNhbiBiZSBzZWxlY3RlZCB0aGF0cyB3aHkgd2UgYXJlIHJlc2V0dGluZyBhbGwgdGhlIGNvdW50cyB0byB6ZXJvXHJcbiAgICB0aGlzLmdldFNlbGVjdGVkUHJvZ3JhbUNvdW50KGZhbHNlLCBldmVudD8ucHJvZ3JhbVR5cGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0ZWRQcm9ncmFtQ291bnQoZXZlbnQ/OiBib29sZWFuLCBwcm9ncmFtVHlwZT86IG51bWJlcikge1xyXG4gICAgLy8gc3dpdGNoICh0aGlzLmN1cnJlbnRQcm9ncmFtLnByb2dyYW1UeXBlKSB7XHJcbiAgICBzd2l0Y2ggKHByb2dyYW1UeXBlKSB7XHJcbiAgICAgIGNhc2UgMDpcclxuICAgICAgICBldmVudFxyXG4gICAgICAgICAgPyB0aGlzLnByb2dyYW1EYXRhLlNlbGVjdGVkT3RoZXJzUHJvZ3JhbXNDb3VudCsrXHJcbiAgICAgICAgICA6IHRoaXMucHJvZ3JhbURhdGEuU2VsZWN0ZWRPdGhlcnNQcm9ncmFtc0NvdW50LS07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBldmVudFxyXG4gICAgICAgICAgPyB0aGlzLnByb2dyYW1EYXRhLlNlbGVjdGVkUmVndWxhdGlvblByb2dyYW1zQ291bnQrK1xyXG4gICAgICAgICAgOiB0aGlzLnByb2dyYW1EYXRhLlNlbGVjdGVkUmVndWxhdGlvblByb2dyYW1zQ291bnQtLTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIGV2ZW50XHJcbiAgICAgICAgICA/IHRoaXMucHJvZ3JhbURhdGEuU2VsZWN0ZWRTdGFuZGFyZFByb2dyYW1zQ291bnQrK1xyXG4gICAgICAgICAgOiB0aGlzLnByb2dyYW1EYXRhLlNlbGVjdGVkU3RhbmRhcmRQcm9ncmFtc0NvdW50LS07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMzpcclxuICAgICAgICBldmVudFxyXG4gICAgICAgICAgPyB0aGlzLnByb2dyYW1EYXRhLlNlbGVjdGVkSW50ZXJuYWxDb250cm9sc1Byb2dyYW1zQ291bnQrK1xyXG4gICAgICAgICAgOiB0aGlzLnByb2dyYW1EYXRhLlNlbGVjdGVkSW50ZXJuYWxDb250cm9sc1Byb2dyYW1zQ291bnQtLTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRoZSBzZWxlY3RlZFByb2dyYW0gYXJyYXkgaGFzIGEgbGVuZ3RoLCB0aGVuIHByZXNlcnZlIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBhcnJheSBhcyB0aGVcclxuICAgKiBwcmVzZXJ2ZVByaW1hcnlQcm9ncmFtIHZhcmlhYmxlLiBPdGhlcndpc2UsIHNldCB0aGUgcHJlc2VydmVQcmltYXJ5UHJvZ3JhbSB2YXJpYWJsZSB0byBhbiBlbXB0eVxyXG4gICAqIG9iamVjdC5cclxuICAgKlxyXG4gICAqIElmIHRoZSBzZWxlY3RlZFByb2dyYW1zSWQgYXJyYXkgaGFzIGEgbGVuZ3RoLCB0aGVuIHByZXNlcnZlIHRoZSBhcnJheSBhcyB0aGUgcHJlc2VydmVkUHJvZ3JhbXNJZFxyXG4gICAqIHZhcmlhYmxlLiBPdGhlcndpc2UsIHNldCB0aGUgcHJlc2VydmVkUHJvZ3JhbXNJZCB2YXJpYWJsZSB0byBhbiBlbXB0eSBhcnJheS5cclxuICAgKlxyXG4gICAqIElmIHRoZSBzZWxlY3RlZFByb2dyYW1zRGV0YWlsIGFycmF5IGhhcyBhIGxlbmd0aCwgdGhlbiBwcmVzZXJ2ZSB0aGUgYXJyYXkgYXMgdGhlXHJcbiAgICogcHJlc2VydmVkU2VsZWN0ZWRQcm9ncmFtcyB2YXJpYWJsZS4gT3RoZXJ3aXNlLCBzZXQgdGhlIHByZXNlcnZlZFNlbGVjdGVkUHJvZ3JhbXMgdmFyaWFibGUgdG8gYW5cclxuICAgKiBlbXB0eSBhcnJheS5cclxuICAgKlxyXG4gICAqIElmIHRoZSBzZWxlY3RlZFByb2dyYW0gYXJyYXkgZG9lcyBub3QgaGF2ZSBhIGxlbmd0aCwgdGhlbiBzZXQgdGhlIHNlbGVjdGVkUHJvZ3JhbXNEZXRhaWwgYXJyYXkgdG9cclxuICAgKiBhbiBlbXB0eSBhcnJheSBhbmQgdGhlIHNlbGVjdGVkUHJvZ3JhbXNJZCBhcnJheSB0byBhbiBlbXB0eSBhcnJheS5cclxuICAgKi9cclxuICBwcmVzZXJ2ZVByZXZpb3VzRGV0YWlscygpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUHJvZ3JhbVswXT8ubGVuZ3RoIHx8IHRoaXMuY3VycmVudFByb2dyYW0pIHtcclxuICAgICAgdGhpcy5wcmVzZXJ2ZVByaW1hcnlQcm9ncmFtID0gdGhpcy5zZWxlY3RlZFByb2dyYW0/Lmxlbmd0aFxyXG4gICAgICAgID8gSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZFByb2dyYW1bMF0pXHJcbiAgICAgICAgOiB7fTtcclxuICAgICAgdGhpcy5wcmVzZXJ2ZWRQcm9ncmFtc0lkID0gdGhpcy5zZWxlY3RlZFByb2dyYW1zSWQ/Lmxlbmd0aFxyXG4gICAgICAgID8gSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZFByb2dyYW1zSWQpXHJcbiAgICAgICAgOiBbXTtcclxuICAgICAgdGhpcy5wcmVzZXJ2ZWRTZWxlY3RlZFByb2dyYW1zID0gdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsXHJcbiAgICAgICAgPyBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkUHJvZ3JhbXNEZXRhaWwpXHJcbiAgICAgICAgOiBbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0RldGFpbCA9IFtdO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNJZCA9IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvZ3JhbVN1YlRhYjogJ1BST0dSQU1TJyB8ICdPVEhFUl9QUk9HUkFNUycgPSAnUFJPR1JBTVMnO1xyXG4gIHNldFByb2dyYW1TdWJUYWIodGFiOiAnUFJPR1JBTVMnIHwgJ09USEVSX1BST0dSQU1TJykge1xyXG4gICAgdGhpcy5wcm9ncmFtU3ViVGFiID0gdGFiO1xyXG4gICAgdGhpcy5nZXRQcm9ncmFtc0xpc3QoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInByb2dyYW0tbGlzdGluZ1wiIFtjbGFzcy5hbmltYXRlXT1cImFuaW1hdGlvblwiICpuZ0lmPVwiIXNob3dDYXRlZ29yaWVzICYmICFoaWRlUHJvZ3JhbXNMaXN0XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicHJvZ3JhbS1saXN0aW5nLWhlYWQgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW4gdngtcGwtNCB2eC1wci00XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZzLTE0IHZ4LWZ3LTUwMCB2eC1sYWJlbC10eHRcIj5TZWxlY3QgYSBQcm9ncmFtPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJwcm9ncmFtLWxpc3RpbmctYm9keVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItY2FyZC1yb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1jYXJkIHZ4LWJnLXdoaXRlIHZ4LWQtZmxleCB2eC1qdXN0aWZ5LWJldHdlZW4gdngtYWxpZ24tY2VudGVyIHZ4LXB0LTIgdngtcGItMiB2eC1wbC0zIHZ4LXByLTMgdngtdy0xMDBcIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVRhYiA9PSAncmVndWxhdGlvbnMnXCIgKGNsaWNrKT1cImNoYW5nZVRhYigncmVndWxhdGlvbnMnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1wYXJhZ3JhcGgtdHh0IHZ4LWZ3LTUwMCB2eC10dC11cHBlcmNhc2UgdngtZC1mbGV4IHZ4LWp1c3RpZnktYmV0d2VlbiB2eC1hbGlnbi1jZW50ZXJcIj5SRUdVTEFUSU9OUzwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJwcm9ncmFtRGF0YT8uU2VsZWN0ZWRSZWd1bGF0aW9uUHJvZ3JhbXNDb3VudD4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e3Byb2dyYW1EYXRhPy5TZWxlY3RlZFJlZ3VsYXRpb25Qcm9ncmFtc0NvdW50fX1cclxuICAgICAgICAgICAgICAgICAgICAgICAge3socHJvZ3JhbURhdGE/LlNlbGVjdGVkUmVndWxhdGlvblByb2dyYW1zQ291bnQ9PTEpPydQcm9ncmFtJzonUHJvZ3JhbXMnfX0gc2VsZWN0ZWRcclxuICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJjb3VudGVyXCI+e3twcm9ncmFtRGF0YT8uQWxsUmVndWxhdGlvblByb2dyYW1zQ291bnR9fTwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvdW50ZXJcIj57e3Byb2dyYW1UYWJEYXRhQ291bnQ/LmFsbFJlZ3VsYXRpb25Qcm9ncmFtc0NvdW50fX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWNhcmQgdngtYmctd2hpdGUgdngtZC1mbGV4IHZ4LWp1c3RpZnktYmV0d2VlbiB2eC1hbGlnbi1jZW50ZXIgdngtcHQtMiB2eC1wYi0yIHZ4LXBsLTMgdngtcHItMyB2eC13LTEwMFwiIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlVGFiID09ICdzdGFuZGFyZHMnXCIgKGNsaWNrKT1cImNoYW5nZVRhYignc3RhbmRhcmRzJylcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtcGFyYWdyYXBoLXR4dCB2eC1mdy01MDAgdngtdHQtdXBwZXJjYXNlIHZ4LWQtZmxleCB2eC1qdXN0aWZ5LWJldHdlZW4gdngtYWxpZ24tY2VudGVyXCI+U1RBTkRBUkRTPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cInByb2dyYW1EYXRhPy5TZWxlY3RlZFN0YW5kYXJkUHJvZ3JhbXNDb3VudD4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e3Byb2dyYW1EYXRhPy5TZWxlY3RlZFN0YW5kYXJkUHJvZ3JhbXNDb3VudH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7KHByb2dyYW1EYXRhPy5TZWxlY3RlZFN0YW5kYXJkUHJvZ3JhbXNDb3VudD09MSk/J1Byb2dyYW0nOidQcm9ncmFtcyd9fSBzZWxlY3RlZFxyXG4gICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cImNvdW50ZXJcIj57e3Byb2dyYW1EYXRhPy5BbGxTdGFuZGFyZFByb2dyYW1zQ291bnR9fTwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvdW50ZXJcIj57e3Byb2dyYW1UYWJEYXRhQ291bnQ/LmFsbFN0YW5kYXJkUHJvZ3JhbXNDb3VudH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1jYXJkIHZ4LWJnLXdoaXRlIHZ4LWQtZmxleCB2eC1qdXN0aWZ5LWJldHdlZW4gdngtYWxpZ24tY2VudGVyIHZ4LXB0LTIgdngtcGItMiB2eC1wbC0zIHZ4LXByLTMgdngtdy0xMDBcIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVRhYiA9PSAnaW50ZXJuYWxfY29udHJvbHMnXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VUYWIoJ2ludGVybmFsX2NvbnRyb2xzJylcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtcGFyYWdyYXBoLXR4dCB2eC1mdy01MDAgdngtdHQtdXBwZXJjYXNlIHZ4LWQtZmxleCB2eC1qdXN0aWZ5LWJldHdlZW4gdngtYWxpZ24tY2VudGVyXCI+SU5URVJOQUwgQ09OVFJPTFM8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwicHJvZ3JhbURhdGE/LlNlbGVjdGVkSW50ZXJuYWxDb250cm9sc1Byb2dyYW1zQ291bnQ+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3twcm9ncmFtRGF0YT8uU2VsZWN0ZWRJbnRlcm5hbENvbnRyb2xzUHJvZ3JhbXNDb3VudH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7KHByb2dyYW1EYXRhPy5TZWxlY3RlZEludGVybmFsQ29udHJvbHNQcm9ncmFtc0NvdW50PT0xKT8nUHJvZ3JhbSc6J1Byb2dyYW1zJ319IHNlbGVjdGVkXHJcbiAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwiY291bnRlclwiPnt7cHJvZ3JhbURhdGE/LkFsbEludGVybmFsQ29udHJvbHNQcm9ncmFtc0NvdW50fX08L3NwYW4+IC0tPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb3VudGVyXCI+e3twcm9ncmFtVGFiRGF0YUNvdW50Py5hbGxJbnRlcm5hbENvbnRyb2xzUHJvZ3JhbXNDb3VudH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1jYXJkIHZ4LWJnLXdoaXRlIHZ4LWQtZmxleCB2eC1qdXN0aWZ5LWJldHdlZW4gdngtYWxpZ24tY2VudGVyIHZ4LXB0LTIgdngtcGItMiB2eC1wbC0zIHZ4LXByLTMgdngtdy0xMDBcIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVRhYiA9PSAnb3RoZXJzJ1wiIChjbGljayk9XCJjaGFuZ2VUYWIoJ290aGVycycpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LXBhcmFncmFwaC10eHQgdngtZnctNTAwIHZ4LXR0LXVwcGVyY2FzZSB2eC1kLWZsZXggdngtanVzdGlmeS1iZXR3ZWVuIHZ4LWFsaWduLWNlbnRlclwiPk9USEVSUzwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJwcm9ncmFtRGF0YT8uU2VsZWN0ZWRPdGhlcnNQcm9ncmFtc0NvdW50PiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7cHJvZ3JhbURhdGE/LlNlbGVjdGVkT3RoZXJzUHJvZ3JhbXNDb3VudH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7KHByb2dyYW1EYXRhPy5TZWxlY3RlZE90aGVyc1Byb2dyYW1zQ291bnQ9PTEpPydQcm9ncmFtJzonUHJvZ3JhbXMnfX0gc2VsZWN0ZWRcclxuICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJjb3VudGVyXCI+e3twcm9ncmFtRGF0YT8uQWxsT3RoZXJzUHJvZ3JhbXNDb3VudH19PC9zcGFuPiAtLT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY291bnRlclwiPnt7cHJvZ3JhbVRhYkRhdGFDb3VudD8uYWxsT3RoZXJzUHJvZ3JhbXNDb3VudH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWJsb2NrXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTBiOzwvaT5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgI3NlYXJjaFByb2dyYW0gKGtleXVwLmVudGVyKT1cImhhbmRsZVNlYXJjaCgkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBQcm9ncmFtc1wiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSBtb2RlID09PSAnRURJVCcgLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIm1vZGUgPT09ICdFRElUJyAmJiBwcm9ncmFtRGF0YT8uQWxsVmlld09ubHlQcm9ncmFtQ291bnRcIiBjbGFzcz1cInByb2dyYW0tbGlzdGluZy10YWIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJzZXRQcm9ncmFtU3ViVGFiKCdQUk9HUkFNUycpXCIgY2xhc3M9XCJ2eC1mcy0xMSB2eC1mdy02MDAgdngtcGFyYWdyYXBoLXR4dCB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LXBiLTIgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtbGgtNFwiIFtjbGFzcy5hY3RpdmVdPVwicHJvZ3JhbVN1YlRhYiA9PT0gJ1BST0dSQU1TJ1wiPlBST0dSQU1TIDxzcGFuIGNsYXNzPVwiY291bnQgdngtcGwtMSB2eC1wci0xIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbWwtMiB2eC1saC00XCI+e3twcm9ncmFtRGF0YT8uQWxsUHJvZ3JhbXNDb3VudH19PC9zcGFuPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJzZXRQcm9ncmFtU3ViVGFiKCdPVEhFUl9QUk9HUkFNUycpXCIgY2xhc3M9XCJ2eC1mcy0xMSB2eC1mdy02MDAgdngtcGFyYWdyYXBoLXR4dCB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LXBiLTIgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtbGgtNFwiIFtjbGFzcy5hY3RpdmVdPVwicHJvZ3JhbVN1YlRhYiA9PT0gJ09USEVSX1BST0dSQU1TJ1wiPk9USEVSIFBST0dSQU1TIDxzcGFuIGNsYXNzPVwiY291bnQgdngtcGwtMSB2eC1wci0xIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbWwtMiB2eC1saC00XCI+e3twcm9ncmFtRGF0YT8uQWxsVmlld09ubHlQcm9ncmFtQ291bnR9fTwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8YXBwLXBhZ2luYXRpb24gKm5nSWY9XCJwcm9ncmFtRGF0YS50b3RhbFBhZ2VzID4gMVwiIFtzdGFydF09XCJwcm9ncmFtRGF0YS5mcm9tXCIgW2VuZF09XCJwcm9ncmFtRGF0YS50b1wiIFt0b3RhbF09XCJwcm9ncmFtRGF0YS50b3RhbFJlY29yZHNcIiBbcGFnZUNvdW50XT1cInByb2dyYW1EYXRhLnRvdGFsUGFnZXNcIiBbY3VycmVudFBhZ2VdPVwicHJvZ3JhbURhdGEuY3VycmVudFBhZ2VcIiAoc2VsZWN0ZWRQYWdlKT1cImNoYW5nZVBhZ2UoJGV2ZW50LCdwcm9ncmFtJylcIj48L2FwcC1wYWdpbmF0aW9uPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmFtLWxpc3RpbmctcGFydCB2eC1tYi00XCIgW2NsYXNzLndpdGgtY2F0ZWdvcnktbGlzdF09XCIhc2hvd0NhdGVnb3JpZXMgJiYgIWhpZGVQcm9ncmFtc0xpc3RcIiBbY2xhc3Mud2l0aC1wYWdpbmF0aW9uXT1cInByb2dyYW1EYXRhLnRvdGFsUGFnZXMgPiAxXCI+XHJcbiAgICAgICAgICAgIDxhcHAtbm8tZGF0YSAqbmdJZj1cInByb2dyYW1EYXRhPy5kYXRhPy5sZW5ndGg9PT0wICYmICFsb2FkZXJcIlxyXG4gICAgICAgICAgICAgICAgW25vRGF0YUltYWdlXT1cIidodHRwczovL2Nkbi52LWNvbXBseS5jb20vbGlicmFyaWVzL3dvcmtmbG93LWVuZ2luZS9hc3NldHMvd29ya2Zsb3cvc2VhcmNoLWRhdGEuc3ZnJ1wiXHJcbiAgICAgICAgICAgICAgICBbbm9EYXRhVGV4dF09XCInTm8gRGF0YSBGb3VuZCdcIj48L2FwcC1uby1kYXRhPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyYW0tbGlzdGluZy1pdGVtXCIgW2NsYXNzLmFjdGl2ZV09XCJzaG93Q2F0ZWdvcmllcyAmJiBjdXJyZW50UHJvZ3JhbT8uX2lkID09IHByb2dyYW0/Ll9pZFwiICpuZ0Zvcj1cImxldCBwcm9ncmFtIG9mIHByb2dyYW1EYXRhLmRhdGE7bGV0IGkgPSBpbmRleFwiIFtjbGFzcy5maW5hbC1zZWxlY3RdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gYWZ0ZXIgY2F0ZWdvcnkgd2FzIHNlbGVjdCAmIHVzZXIgbW92ZSB0byBiYWNrIGFuZCBlZGl0IHRoZW4gZmluYWwtc2VsZWN0IGNsYXNzIHdhcyBzaG93IC0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBbY2xhc3MuZGlzYWJsZWRdPVwiY3VycmVudFByb2dyYW0/Ll9pZCA9PT0gcHJvZ3JhbT8uX2lkICYmIChtb2RlID09PSAnRURJVCcgfHwgb3BlbmVkRnJvbSA9PT0gJ1BST0dSQU1fV09SS1JPT00nKSAmJiBwcm9ncmFtU3ViVGFiICE9PSAnT1RIRVJfUFJPR1JBTVMnXCIgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcm93IG1haW4tbGlzdFwiIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWRQcm9ncmFtc0lkPy5pbmNsdWRlcyhwcm9ncmFtPy5faWQpXCIgW2NsYXNzLmRpc2FibGVkXT1cImZlYXR1cmUuaXNGZWF0dXJlRW5hYmxlZCgnZmZfZGVwcmVjYXRlX3ByaW1hcnlfcHJvZ3JhbV9mbGFnJykgPyBmYWxzZSA6IChjdXJyZW50UHJvZ3JhbT8uX2lkID09PSBwcm9ncmFtPy5faWQgJiYgKG1vZGUgPT09ICdFRElUJyB8fCBvcGVuZWRGcm9tID09PSAnUFJPR1JBTV9XT1JLUk9PTScpICYmIHByb2dyYW1TdWJUYWIgIT09ICdPVEhFUl9QUk9HUkFNUycpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBzZXJpYWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNyLW5vXCIgW2FwcFRvb2x0aXBdPVwiaStwcm9ncmFtRGF0YS5mcm9tXCIgcGxhY2VtZW50PVwiYm90dG9tXCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiPnt7aStwcm9ncmFtRGF0YS5mcm9tfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBbZGlzYWJsZWRdPVwiY3VycmVudFByb2dyYW0/Ll9pZCA9PT0gcHJvZ3JhbT8uX2lkICYmIChtb2RlID09PSAnRURJVCcgfHwgb3BlbmVkRnJvbSA9PT0gJ1BST0dSQU1fV09SS1JPT00nKVwiIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWNzLWNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInByb2dyYW1TdWJUYWIgIT09ICdPVEhFUl9QUk9HUkFNUydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZlYXR1cmUuaXNGZWF0dXJlRW5hYmxlZCgnZmZfZGVwcmVjYXRlX3ByaW1hcnlfcHJvZ3JhbV9mbGFnJykgPyBmYWxzZSA6IChjdXJyZW50UHJvZ3JhbT8uX2lkID09PSBwcm9ncmFtPy5faWQgJiYgKG1vZGUgPT09ICdFRElUJyB8fCBvcGVuZWRGcm9tID09PSAnUFJPR1JBTV9XT1JLUk9PTScpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdWYWx1ZV09XCJzZWxlY3RlZFByb2dyYW1zSWQ/LmluY2x1ZGVzKHByb2dyYW0/Ll9pZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nVmFsdWVDaGFuZ2UpPVwic2VsZWN0UHJvZ3JhbSgkZXZlbnQscHJvZ3JhbSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY3MtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGFwcC1jcy1yYWRpbyBbbmFtZV09XCIndCdcIiBbY2hlY2tlZF09XCJjdXJyZW50UHJvZ3JhbT8uX2lkID09IHByb2dyYW0/Ll9pZFwiIChjaGVja2VkRXZlbnQpPVwic2VsZWN0UHJvZ3JhbSgkZXZlbnQudGFyZ2V0LmNoZWNrZWQscHJvZ3JhbSlcIj48L2FwcC1jcy1yYWRpbz4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBuYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYW1lLWlubmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZS13aXRoLWNvdW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZhbHVlXCIgW2FwcFRvb2x0aXBdPVwicHJvZ3JhbT8uaXRlbV9uYW1lXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7cHJvZ3JhbT8ubmFtZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBwcmltYXJ5LXByb2dyYW1cIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmVhdHVyZS5pc0ZlYXR1cmVFbmFibGVkKCdmZl9kZXByZWNhdGVfcHJpbWFyeV9wcm9ncmFtX2ZsYWcnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1jcy1zd2l0Y2hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiEobW9kZSA9PT0gJ0VESVQnIHx8IG9wZW5lZEZyb20gPT09ICdQUk9HUkFNX1dPUktST09NJykgfHwgY3VycmVudFByb2dyYW0/Ll9pZCA9PT0gcHJvZ3JhbT8uX2lkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudFByb2dyYW0/Ll9pZCA9PT0gcHJvZ3JhbT8uX2lkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdWYWx1ZV09J2N1cnJlbnRQcm9ncmFtPy5faWQgPT09IHByb2dyYW0/Ll9pZCcgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nVmFsdWVDaGFuZ2UpPVwic2V0UHJpbWFyeVByb2dyYW0oJGV2ZW50LCBwcm9ncmFtKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3tjdXJyZW50UHJvZ3JhbT8uX2lkID09PSBwcm9ncmFtPy5faWQgPyAnUFJJTUFSWSBQUk9HUkFNJyA6ICdTRVQgQVMgUFJJTUFSWSBQUk9HUkFNJ319PC9hcHAtY3Mtc3dpdGNoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gYWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhcnJvd1wiICpuZ0lmPVwicHJvZ3JhbT8uY2hpbGRfaWQ/Lmxlbmd0aFwiIFtjbGFzcy5kaXNhYmxlZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiIShzaG93Q2F0ZWdvcmllcyAmJiBjdXJyZW50UHJvZ3JhbT8uX2lkID09IHByb2dyYW0/Ll9pZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RQcm9ncmFtKCRldmVudCxwcm9ncmFtKVwiIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTcwOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwic2hvd0NhdGVnb3JpZXMgJiYgY3VycmVudFByb2dyYW0/Ll9pZCA9PSBwcm9ncmFtPy5faWRcIiBjbGFzcz1cImljb25zXCI+JiN4ZTllODs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxhcHAtZmxvYXRpbmctYmFyICpuZ0lmPVwiZmVhdHVyZS5pc0ZlYXR1cmVFbmFibGVkKCdmZl9kZXByZWNhdGVfcHJpbWFyeV9wcm9ncmFtX2ZsYWcnKVwiIFtzZWxlY3RlZERhdGFdPVwiKHNlbGVjdGVkUHJvZ3JhbXNEZXRhaWw/Lmxlbmd0aCkgPyBzZWxlY3RlZFByb2dyYW1zRGV0YWlsIDogW11cIiBbZGlzcGxheUVsZW1lbnRLZXldPVwiJ25hbWUnXCJcclxuICAgICAgICAgICAgW3Npbmd1bGFyVGV4dF09XCInUHJvZ3JhbSBzZWxlY3RlZCdcIiBbcGx1cmFsVGV4dF09XCInUHJvZ3JhbXMgc2VsZWN0ZWQnXCIgKGNsb3NlRXZlbnQpPVwib3BlbkNhdGVnb3JpZXMoKVwiXHJcbiAgICAgICAgICAgIChkZWxldGVFdmVudCk9XCJkZWxldGVFdmVudCgkZXZlbnQpXCIgW2lzRGlzYWJsZWRdPVwiKChjdXJyZW50UHJvZ3JhbT8uY2F0ZWdvcnlfaWQpP1tjdXJyZW50UHJvZ3JhbV06W10pPy5sZW5ndGggPyBmYWxzZSA6dHJ1ZVwiIChjbG9zZUxpc3QpPVwiY2xvc2UoKVwiIFtlbGVtZW50SWRdPVwiJ2NhdGVnb3J5X2lkJ1wiPlxyXG4gICAgICAgIDwvYXBwLWZsb2F0aW5nLWJhcj5cclxuXHJcbiAgICAgICAgPGFwcC1mbG9hdGluZy1iYXIgKm5nSWY9XCIhZmVhdHVyZS5pc0ZlYXR1cmVFbmFibGVkKCdmZl9kZXByZWNhdGVfcHJpbWFyeV9wcm9ncmFtX2ZsYWcnKVwiIFtzZWxlY3RlZERhdGFdPVwiKHNlbGVjdGVkUHJvZ3JhbXNEZXRhaWw/Lmxlbmd0aCkgPyBzZWxlY3RlZFByb2dyYW1zRGV0YWlsIDogW11cIiBbZGlzcGxheUVsZW1lbnRLZXldPVwiJ25hbWUnXCJcclxuICAgICAgICAgICAgW3Npbmd1bGFyVGV4dF09XCInUHJvZ3JhbSBzZWxlY3RlZCdcIiBbcGx1cmFsVGV4dF09XCInUHJvZ3JhbXMgc2VsZWN0ZWQnXCIgKGNsb3NlRXZlbnQpPVwib3BlbkNhdGVnb3JpZXMoKVwiXHJcbiAgICAgICAgICAgIChkZWxldGVFdmVudCk9XCJkZWxldGVFdmVudCgkZXZlbnQpXCIgW2lzRGlzYWJsZWRdPVwiKChjdXJyZW50UHJvZ3JhbT8uY2F0ZWdvcnlfaWQpP1tjdXJyZW50UHJvZ3JhbV06W10pPy5sZW5ndGggPyBmYWxzZSA6dHJ1ZVwiIChjbG9zZUxpc3QpPVwiY2xvc2UoKVwiIFtkZWZhdWx0U2VsZWN0ZWRdPVwiY3VycmVudFByb2dyYW1cIiBbbm9uUmVtb3ZhYmxlVXNlcnNMaXN0XT1cIihtb2RlID09PSAnRURJVCcgfHwgb3BlbmVkRnJvbSA9PT0gJ1BST0dSQU1fV09SS1JPT00nKSA/IHZpZXdPbmx5UHJvZ3JhbXNDYXRlZ29yeUlkIDogW2N1cnJlbnRQcm9ncmFtPy5jYXRlZ29yeV9pZF1cIiBbZWxlbWVudElkXT1cIidjYXRlZ29yeV9pZCdcIj5cclxuICAgICAgICA8L2FwcC1mbG9hdGluZy1iYXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmVhdHVyZS5pc0ZlYXR1cmVFbmFibGVkKCdmZl9kZXByZWNhdGVfcHJpbWFyeV9wcm9ncmFtX2ZsYWcnKVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmFtLWxpc3RpbmctY29uZmlybWF0aW9uXCIgKm5nSWY9XCJkaXNwbGF5Q29uZmlybWF0aW9uTWVzc2FnZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlybWF0aW9uLXRvcFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tYmxvY2tcIj48aSBjbGFzcz1cImljb25zXCI+JiN4ZTkzMDs8L2k+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dFwiPk9uY2UgeW91IHNlbGVjdCB0aGlzIFByb2dyYW0sIGFsbCBkZWZhdWx0IHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBQcm9ncmFtIHdpbGwgYWxzbyBiZSB1cGRhdGVkLjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpcm1hdGlvbi1ib3R0b21cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXNzYWdlXCI+QXJlIHlvdSBzdXJlIHlvdSB3b3VsZCBsaWtlIHRvIHByb2NlZWQ/PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm5vLWJ0blwiIChjbGljayk9XCJzYXZlQ2hhbmdlcyhmYWxzZSlcIj5OTzwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ5ZXMtYnRuXCIgKGNsaWNrKT1cInNhdmVDaGFuZ2VzKHRydWUpXCI+WUVTPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyYW0tbGlzdGluZy1jb25maXJtYXRpb25cIiAqbmdJZj1cImlzUHJpbWFyeUNvbmZpcm1hdGlvbiAmJiAhaXNQcmltYXJ5VW5jaGVja2VkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maXJtYXRpb24tdG9wXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1ibG9ja1wiPjxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTMwOzwvaT48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0XCIgW2lubmVySFRNTF09XCJwcmltYXJ5Q29uZmlybWF0aW9uTWVzc2FnZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpcm1hdGlvbi1ib3R0b21cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXNzYWdlXCI+QXJlIHlvdSBzdXJlIHlvdSB3b3VsZCBsaWtlIHRvIHByb2NlZWQ/PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm5vLWJ0blwiIChjbGljayk9XCJ1cGRhdGVQcmltYXJ5UHJvZ3JhbShmYWxzZSlcIj5OTzwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ5ZXMtYnRuXCIgKGNsaWNrKT1cInVwZGF0ZVByaW1hcnlQcm9ncmFtKHRydWUpXCI+WUVTPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmFtLWxpc3RpbmctY29uZmlybWF0aW9uIGVycm9yLWNvbmZpcm1hdGlvblwiICpuZ0lmPVwiaXNQcmltYXJ5VW5jaGVja2VkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maXJtYXRpb24tdG9wXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWJsb2NrXCI+PGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MzA7PC9pPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0IHZ4LXByLTRcIj5Zb3UgY2Fubm90IGRlc2VsZWN0IHRoaXMgUHJvZ3JhbSBzaW5jZSB0aGlzIGlzIHRoZSA8ZW0+UHJpbWFyeSBQcm9ncmFtPC9lbT4gZm9yIHRoaXMgcmVzcG9uc2liaWxpdHkuIFRvIHByb2NlZWQsIGZpcnN0IHNlbGVjdCBhbm90aGVyIFByb2dyYW0gYXMgdGhlIDxlbT5QcmltYXJ5IFByb2dyYW08L2VtPi48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm9rLWJ0blwiIChjbGljayk9XCJ1cGRhdGVQcmltYXJ5UHJvZ3JhbShmYWxzZSlcIj5PSzwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPCEtLSA8YXBwLWZsb2F0aW5nLWJhciBbc2VsZWN0ZWREYXRhXT1cIihjdXJyZW50UHJvZ3JhbT8uY2F0ZWdvcnlfaWQpP1tjdXJyZW50UHJvZ3JhbV06W11cIiBbZGlzcGxheUVsZW1lbnRLZXldPVwiJ25hbWUnXCJcclxuICAgICAgICBbc2luZ3VsYXJUZXh0XT1cIidQcm9ncmFtIHNlbGVjdGVkJ1wiIFtwbHVyYWxUZXh0XT1cIidQcm9ncmFtcyBzZWxlY3RlZCdcIiAoY2xvc2VFdmVudCk9XCJvcGVuQ2F0ZWdvcmllcygpXCJcclxuICAgICAgICAoZGVsZXRlRXZlbnQpPVwiZGVsZXRlRXZlbnQoJGV2ZW50KVwiIFtpc0Rpc2FibGVkXT1cIigoY3VycmVudFByb2dyYW0/LmNhdGVnb3J5X2lkKT9bY3VycmVudFByb2dyYW1dOltdKT8ubGVuZ3RoID8gZmFsc2UgOnRydWUgXCIgKGNsb3NlTGlzdCk9XCJjbG9zZSgpXCI+XHJcbiAgICA8L2FwcC1mbG9hdGluZy1iYXI+IC0tPlxyXG5cclxuICAgIDwhLS0gKChjdXJyZW50UHJvZ3JhbT8uY2F0ZWdvcnlfaWQpP1tjdXJyZW50UHJvZ3JhbV06W10pPy5sZW5ndGggPyBmYWxzZSA6dHJ1ZSAgLS0+XHJcblxyXG4gICAgPGFwcC1sb2FkZXIgKm5nSWY9XCJsb2FkZXJcIj48L2FwcC1sb2FkZXI+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwicHJvZ3JhbS1saXN0aW5nXCIgW2NsYXNzLmFuaW1hdGVdPVwiYW5pbWF0aW9uXCIgKm5nSWY9XCJzaG93Q2F0ZWdvcmllcyB8fCBoaWRlUHJvZ3JhbXNMaXN0XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicHJvZ3JhbS1saXN0aW5nLWhlYWQgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW4gdngtcGwtNCB2eC1wci00XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZzLTE0IHZ4LWZ3LTUwMCB2eC1sYWJlbC10eHRcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJhY2stYnRuIHZ4LWZzLTE2IHZ4LXAtMCB2eC1tci0yXCIgKGNsaWNrKT1cImJhY2tUb1Byb2dyYW1zKClcIj48aSBjbGFzcz1cImljb25zXCI+JiN4ZTkxZDs8L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwhLS0gPHNwYW4gKm5nSWY9XCJjdXJyZW50UHJvZ3JhbT8ubmFtZVwiPiB7e2N1cnJlbnRQcm9ncmFtPy5uYW1lfX0gPiA8L3NwYW4+IC0tPlxyXG4gICAgICAgICAgICAgUHJvZ3JhbSAgPiAgU2VsZWN0IFByb2dyYW0gQ2F0ZWdvcmllc1xyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicHJvZ3JhbS1saXN0aW5nLWJvZHlcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWJsb2NrXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTBiOzwvaT5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgI3NlYXJjaENhdGVnb3J5IChrZXl1cC5lbnRlcik9XCJjYXRlZ29yeVNlYXJjaCgkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBDYXRlZ29yaWVzXCIgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8YXBwLXBhZ2luYXRpb24gKm5nSWY9XCJjYXRlZ29yeURhdGEudG90YWxQYWdlcyA+IDFcIiBjbGFzcz1cImNhdGVnb3J5LXBhZ2luYXRpb25cIiBbc3RhcnRdPVwiY2F0ZWdvcnlEYXRhLmZyb21cIiBbZW5kXT1cImNhdGVnb3J5RGF0YS50b1wiIFt0b3RhbF09XCJjYXRlZ29yeURhdGEudG90YWxSZWNvcmRzXCIgW3BhZ2VDb3VudF09XCJjYXRlZ29yeURhdGEudG90YWxQYWdlc1wiIFtjdXJyZW50UGFnZV09XCJjYXRlZ29yeURhdGEuY3VycmVudFBhZ2VcIiAoc2VsZWN0ZWRQYWdlKT1cImNoYW5nZVBhZ2UoJGV2ZW50LCdjYXRlZ29yeScpXCI+PC9hcHAtcGFnaW5hdGlvbj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3JhbS1saXN0aW5nLXBhcnQgdngtbWItNFwiIFtjbGFzcy53aXRoLWNhdGVnb3J5LXBhZ2luYXRpb25dPVwiY2F0ZWdvcnlEYXRhLnRvdGFsUGFnZXMgPiAxXCI+XHJcbiAgICAgICAgICAgIDxhcHAtbm8tZGF0YSAqbmdJZj1cImNhdGVnb3J5RGF0YT8uZGF0YT8ubGVuZ3RoPT09MCAmJiAhbG9hZGVyXCIgW25vRGF0YUltYWdlXT1cIidodHRwczovL2Nkbi52LWNvbXBseS5jb20vbGlicmFyaWVzL3dvcmtmbG93LWVuZ2luZS9hc3NldHMvd29ya2Zsb3cvc2VhcmNoLWRhdGEuc3ZnJ1wiIFtub0RhdGFUZXh0XT1cIidObyBEYXRhIEZvdW5kJ1wiPjwvYXBwLW5vLWRhdGE+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxvYWRlciAmJiBjYXRlZ29yeURhdGEuZGF0YT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWQtYXJlYVwiICpuZ0lmPVwiIWxvYWRlciAmJiAoY3VycmVudFByb2dyYW0/Lm5hbWUgPyBjYXRlZ29yeURhdGEuZGF0YT8ubGVuZ3RoIDogcHJvZ3JhbURhdGE/LmRhdGE/Lmxlbmd0aClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1jcy1jaGVja2JveCAqbmdJZj1cImNoZWNrQ2F0ZWdvcmllc1NlbGVjdGlvbigpPT0nY2hlY2tlZCdcIiBbbmdWYWx1ZV09XCJ0cnVlXCIgKG5nVmFsdWVDaGFuZ2UpPVwic2VsZWN0QWxsQ2F0ZWdvcmllcyhmYWxzZSlcIj5EZXNlbGVjdCBBbGw8L2FwcC1jcy1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1jcy1jaGVja2JveC1pbmRldGVybWluYXRlICpuZ0lmPVwiY2hlY2tDYXRlZ29yaWVzU2VsZWN0aW9uKCk9PSdpbmRldGVybWluYXRlJ1wiIFtuZ1ZhbHVlXT1cInRydWVcIiAobmdWYWx1ZUNoYW5nZSk9XCJzZWxlY3RBbGxDYXRlZ29yaWVzKGZhbHNlKVwiPkRlc2VsZWN0IEFsbDwvYXBwLWNzLWNoZWNrYm94LWluZGV0ZXJtaW5hdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtY3MtY2hlY2tib3ggKm5nSWY9XCJjaGVja0NhdGVnb3JpZXNTZWxlY3Rpb24oKT09J3VuY2hlY2tlZCdcIiBbbmdWYWx1ZV09XCJmYWxzZVwiIChuZ1ZhbHVlQ2hhbmdlKT1cInNlbGVjdEFsbENhdGVnb3JpZXModHJ1ZSlcIj5TZWxlY3QgQWxsPC9hcHAtY3MtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1oZWFkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIHNlcmlhbFwiPiM8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjYXRlZ29yeS1uYW1lXCI+Q0FURUdPUklFUzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNhdGVnb3J5LXdpdGhpblwiPldJVEhJTjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3JhbS1saXN0aW5nLWl0ZW1cIiBbY2xhc3MuYWN0aXZlXT1cInN1Ykxpc3RcIiAqbmdGb3I9XCJsZXQgY2F0ZWdvcnkgb2YgY2F0ZWdvcnlEYXRhLmRhdGE7bGV0IGkgPSBpbmRleFwiIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWRJZHMuaW5jbHVkZXMoY2F0ZWdvcnkuY2F0ZWdvcnlfaWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJvdyBtYWluLWxpc3RcIiBbY2xhc3MuZGlzYWJsZWRdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBzZXJpYWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzci1ub1wiIFthcHBUb29sdGlwXT1cImkgKyBjYXRlZ29yeURhdGE/LmZyb21cIiBwbGFjZW1lbnQ9XCJib3R0b21cIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIj57e2kgKyBjYXRlZ29yeURhdGE/LmZyb219fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1jcy1jaGVja2JveCBbbmdWYWx1ZV09XCJzZWxlY3RlZElkcy5pbmNsdWRlcyhjYXRlZ29yeS5jYXRlZ29yeV9pZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ1ZhbHVlQ2hhbmdlKT1cInNlbGVjdENhdGVnb3J5KCRldmVudCxjYXRlZ29yeSlcIj48L2FwcC1jcy1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY2F0ZWdvcnktbmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hbWUtaW5uZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZS13aXRoLWNvdW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2YWx1ZVwiIFthcHBUb29sdGlwXT1cImNhdGVnb3J5Py5uYW1lXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7Y2F0ZWdvcnk/Lm5hbWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIndpdGhpbi1wYXJ0XCIgKm5nSWY9XCJjYXRlZ29yeT8ucGFyZW50X2NhdGVnb3J5X25hbWU/Lmxlbmd0aD4wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwid2l0aGluLWJveFwiPldpdGhpbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiIFthcHBUb29sdGlwXT1cIidTb3V0aCBBZnJpY2EgPiBBbWVyaWNhID4gSW5kaWEnXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IHBhcmVudCBvZiBjYXRlZ29yeT8ucGFyZW50X2NhdGVnb3J5X25hbWU7bGV0IGo9aW5kZXhcIj57eyhqIT0oY2F0ZWdvcnk/LnBhcmVudF9jYXRlZ29yeV9uYW1lPy5sZW5ndGgtMSkpP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCsnIDwgJzpwYXJlbnR9fSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY2F0ZWdvcnktd2l0aGluXCIgKm5nSWY9XCJjYXRlZ29yeT8ucGFyZW50X2NhdGVnb3J5X25hbWU/Lmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHBhcmVudCBvZiBjYXRlZ29yeT8ucGFyZW50X2NhdGVnb3J5X25hbWU7IGxldCBsYXN0ID0gbGFzdFwiIGNsYXNzPVwid2l0aGluLW5hbWVcIiBbYXBwVG9vbHRpcF09XCJjYXRlZ29yeT8ucGFyZW50X2NhdGVnb3J5X25hbWU/LnNsaWNlKCk/LnJldmVyc2UoKT8uam9pbignID4gJylcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+e3twYXJlbnR9fSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFsYXN0XCI+ID4mbmJzcDsgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNhdGVnb3J5Py5wYXJlbnRfY2F0ZWdvcnlfaWRzPy5pbmNsdWRlcyhjdXJyZW50UHJvZ3JhbT8uY2F0ZWdvcnlfaWQpICYmICFmZWF0dXJlLmlzRmVhdHVyZUVuYWJsZWQoJ2ZmX2RlcHJlY2F0ZV9wcmltYXJ5X3Byb2dyYW1fZmxhZycpXCIgY2xhc3M9XCJwcmltYXJ5LWxhYmVsXCI+UFJJTUFSWTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGFwcC1mbG9hdGluZy1iYXIgW3NlbGVjdGVkRGF0YV09XCJjYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzXCIgW2Rpc3BsYXlFbGVtZW50S2V5XT1cIiduYW1lJ1wiXHJcbiAgICAgICAgW3Npbmd1bGFyVGV4dF09XCInUHJvZ3JhbSBDYXRlZ29yeSBzZWxlY3RlZCdcIlxyXG4gICAgICAgIFtwbHVyYWxUZXh0XT1cIidQcm9ncmFtIENhdGVnb3JpZXMgc2VsZWN0ZWQnXCIgKGNsb3NlRXZlbnQpPVwic2F2ZSgpXCJcclxuICAgICAgICAoZGVsZXRlRXZlbnQpPVwicmVtb3ZlQ2F0ZWdvcmllcygkZXZlbnQpXCIgKGNsb3NlTGlzdCk9XCJiYWNrVG9Qcm9ncmFtcygpXCI+XHJcbiAgICAgICAgPC9hcHAtZmxvYXRpbmctYmFyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZlYXR1cmUuaXNGZWF0dXJlRW5hYmxlZCgnZmZfZGVwcmVjYXRlX3ByaW1hcnlfcHJvZ3JhbV9mbGFnJylcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3JhbS1saXN0aW5nLWNvbmZpcm1hdGlvblwiICpuZ0lmPVwiZGlzcGxheUNvbmZpcm1hdGlvbk1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpcm1hdGlvbi10b3BcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWJsb2NrXCI+PGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MzA7PC9pPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHRcIj5PbmNlIHlvdSBzZWxlY3QgdGhpcyBQcm9ncmFtLCBhbGwgZGVmYXVsdCB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgUHJvZ3JhbSB3aWxsIGFsc28gYmUgdXBkYXRlZC48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maXJtYXRpb24tYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZVwiPkFyZSB5b3Ugc3VyZSB5b3Ugd291bGQgbGlrZSB0byBwcm9jZWVkPzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJuby1idG5cIiAoY2xpY2spPVwic2F2ZUNoYW5nZXMoZmFsc2UpXCI+Tk88L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwieWVzLWJ0blwiIChjbGljayk9XCJzYXZlQ2hhbmdlcyh0cnVlKVwiPllFUzwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8YXBwLWxvYWRlciAqbmdJZj1cImxvYWRlclwiPjwvYXBwLWxvYWRlcj5cclxuIDwvZGl2PlxyXG4iXX0=