qms-angular 1.1.48 → 1.1.50

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 (32) hide show
  1. package/bundles/qms-angular.umd.js +7475 -7275
  2. package/bundles/qms-angular.umd.js.map +1 -1
  3. package/esm2015/lib/components/select-department/model/select-department-popup-data.model.js +2 -1
  4. package/esm2015/lib/components/select-department/select-department.component.js +2 -2
  5. package/esm2015/lib/components/select-department-tree/select-department-tree.component.js +2 -2
  6. package/esm2015/lib/model/en.js +3 -1
  7. package/esm2015/lib/model/no.js +3 -1
  8. package/esm2015/lib/qms-ckeditor-components/common/constants/ckeditorLink.constant.js +3 -1
  9. package/esm2015/lib/qms-ckeditor-components/common/functions/common.function.js +3 -3
  10. package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-data.model.js +1 -1
  11. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.js +221 -31
  12. package/esm2015/lib/qms-ckeditor-components/models/document-tree-node-data.model.js +3 -0
  13. package/esm2015/lib/qms-ckeditor-components/models/qms-ckeditor-bpmn-data.model.js +1 -1
  14. package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.component.js +5 -2
  15. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn.service.js +9 -11
  16. package/esm2015/qms-angular.js +7 -6
  17. package/fesm2015/qms-angular.js +5622 -5424
  18. package/fesm2015/qms-angular.js.map +1 -1
  19. package/lib/components/select-department/model/select-department-popup-data.model.d.ts +1 -0
  20. package/lib/model/en.d.ts +2 -0
  21. package/lib/model/no.d.ts +2 -0
  22. package/lib/qms-ckeditor-components/common/constants/ckeditorLink.constant.d.ts +2 -0
  23. package/lib/qms-ckeditor-components/common/models/qms-ckeditor-data.model.d.ts +2 -0
  24. package/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.d.ts +20 -9
  25. package/lib/qms-ckeditor-components/models/{process-document-tree-node-data.model.d.ts → document-tree-node-data.model.d.ts} +1 -1
  26. package/lib/qms-ckeditor-components/models/qms-ckeditor-bpmn-data.model.d.ts +2 -0
  27. package/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn.service.d.ts +1 -1
  28. package/package.json +1 -1
  29. package/qms-angular.d.ts +6 -5
  30. package/qms-angular.metadata.json +1 -1
  31. package/src/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.scss +11 -0
  32. package/esm2015/lib/qms-ckeditor-components/models/process-document-tree-node-data.model.js +0 -3
@@ -32,7 +32,7 @@ import { QMSCKEditorBPMNConnectionService } from "../../services/qms-ckeditor-bp
32
32
  import { ShapeModel } from "../../../components/qms-bpmn/models/shape-model.model";
33
33
  import { TargetTypeName } from "../../common/enums/target-type.enum";
34
34
  import { CKEditorLinkConst } from "../../common/constants/ckeditorLink.constant";
35
- import { forkJoin } from "rxjs";
35
+ import { forkJoin, of } from "rxjs";
36
36
  import { LinkAttachmentComponent } from "../qms-ckeditor-link/attachments/link-attachment.component";
37
37
  import QMSCKEditorParamter from "../../common/models/qms-ckeditor-parameter.model";
38
38
  import { LinkAnchor } from "../../common/enums/link-anchor.enum";
@@ -46,8 +46,9 @@ import { QMSIconRegistryService } from "../../../components/app-icon/icon-regist
46
46
  import { DomSanitizer } from "@angular/platform-browser";
47
47
  import { MatIconRegistry } from "@angular/material/icon";
48
48
  import { GetSearchProcessDocumentOption } from "../../models/get-search-process-document-option";
49
+ import { QMSSelectOneGlobalService, SelectOneDialog, SelectOnePopupData } from "../../../components/select-one";
49
50
  export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
50
- constructor(dialog, translate, bpmnService, bpmnApiService, linkService, uploadService, commonService, selectProcessDocumentGlobalService, relatedService, dialogRef, treeService, appIconService, sanitizer, iconRegistry, data) {
51
+ constructor(dialog, translate, bpmnService, bpmnApiService, linkService, uploadService, commonService, selectProcessDocumentGlobalService, relatedService, dialogRef, treeService, qmsRelatedService, appIconService, sanitizer, iconRegistry, data) {
51
52
  super();
52
53
  this.dialog = dialog;
53
54
  this.translate = translate;
@@ -60,6 +61,7 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
60
61
  this.relatedService = relatedService;
61
62
  this.dialogRef = dialogRef;
62
63
  this.treeService = treeService;
64
+ this.qmsRelatedService = qmsRelatedService;
63
65
  this.appIconService = appIconService;
64
66
  this.sanitizer = sanitizer;
65
67
  this.iconRegistry = iconRegistry;
@@ -73,12 +75,25 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
73
75
  this.shapeModel = new ShapeModel();
74
76
  this.targets = [];
75
77
  this.anchors = [];
78
+ this.enabledInterconnected = false;
79
+ this.enabledDeviationModule = false;
80
+ this.enabledChecklistModule = false;
81
+ this.language = 'en';
76
82
  this.id = data.id;
77
83
  this.module = data.module;
78
84
  this.entityId = data.entityId;
79
85
  this.editorContent = data.editorContent;
80
86
  this.QMSBPMNConfig.showProcessDocumentTreeDataInSplitView = data.showProcessDocumentTreeDataInSplitView;
81
87
  this.enabledInterconnected = data.enabledInterconnected;
88
+ this.enabledDeviationModule = data.enabledDeviationModule;
89
+ this.enabledChecklistModule = data.enabledChecklistModule;
90
+ appIconService.registerProcessIcon(iconRegistry, sanitizer);
91
+ appIconService.registerProcessAreaIcon(iconRegistry, sanitizer);
92
+ appIconService.registerDocumentIcon(iconRegistry, sanitizer);
93
+ appIconService.registerFolderIcon(iconRegistry, sanitizer);
94
+ appIconService.registerDeviationIcon(iconRegistry, sanitizer);
95
+ appIconService.registerChecklistIcon(iconRegistry, sanitizer);
96
+ appIconService.registerProcessInterconnectedIcon(iconRegistry, sanitizer);
82
97
  }
83
98
  ngOnInit() {
84
99
  return __awaiter(this, void 0, void 0, function* () {
@@ -86,6 +101,7 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
86
101
  this.QMSBPMNConfig.editMode = FlowchartViewMode.Edit;
87
102
  this.translate.getLanguageSubject$.pipe(takeUntil(this.ngUnsubcribe)).subscribe((res) => {
88
103
  if (res) {
104
+ this.language = res;
89
105
  this.LANG = this.translate.getObjectLang(res);
90
106
  this.QMSBPMNConfig.changeTemplatePopupContent = this.LANG.BPMN.CHANGE_TEMPLATE_NOTE;
91
107
  }
@@ -103,11 +119,11 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
103
119
  if (this.id) {
104
120
  this.jsonContent = yield this.getJsonContent(this.id);
105
121
  }
106
- this.bpmnService.buildDiagram(temlates, this.template, 'default joint-theme-bpmn', this.jsonContent, this.QMSBPMNConfig.editMode, null, ToolbarFunction.getToolbarConfiguration(this.LANG));
122
+ this.bpmnService.buildDiagram(temlates, this.template, 'default joint-theme-bpmn', this.jsonContent, this.QMSBPMNConfig.editMode, null, ToolbarFunction.getToolbarConfiguration(this.LANG), this.language);
107
123
  this.splitView = this.QMSBPMNConfig.showProcessDocumentTreeDataInSplitView;
108
124
  this.initConnectionTypes();
109
125
  this.initTarget();
110
- this.initProcessDocumentConfigAndNodeData();
126
+ this.initRelatedConfigAndData();
111
127
  });
112
128
  }
113
129
  initConnectionTypes() {
@@ -118,6 +134,18 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
118
134
  description: this.LANG.BPMN.CONNECTION_TYPE.PROCESS_DOCUMENT_CONNECTION_GUIDELINE,
119
135
  canConnect: true
120
136
  },
137
+ {
138
+ value: ShapeFlowChartConnectionType.Deviation,
139
+ viewValue: this.LANG.BPMN.DEVIATION,
140
+ description: this.LANG.BPMN.CONNECTION_TYPE.DEVIATION_CONNECTION_GUIDELINE,
141
+ canConnect: this.enabledDeviationModule
142
+ },
143
+ {
144
+ value: ShapeFlowChartConnectionType.Checklist,
145
+ viewValue: this.LANG.BPMN.CHECKLIST,
146
+ description: this.LANG.BPMN.CONNECTION_TYPE.CHECKLIST_CONNECTION_GUIDELINE,
147
+ canConnect: this.enabledChecklistModule
148
+ },
121
149
  {
122
150
  value: ShapeFlowChartConnectionType.Link,
123
151
  viewValue: this.LANG.BPMN.LINK,
@@ -169,6 +197,12 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
169
197
  case ShapeFlowChartConnectionType.DocumentOrProcess:
170
198
  this.openProcessDocument();
171
199
  break;
200
+ case ShapeFlowChartConnectionType.Deviation:
201
+ this.openDeviation();
202
+ break;
203
+ case ShapeFlowChartConnectionType.Checklist:
204
+ this.openChecklist();
205
+ break;
172
206
  case ShapeFlowChartConnectionType.Attachment:
173
207
  this.openAttachmentDialog();
174
208
  break;
@@ -338,13 +372,14 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
338
372
  initShapeModel(id = '', itemType = '', itemName = '', statusName = null) {
339
373
  this.shapeModel = new ShapeModel();
340
374
  this.shapeModel.relatedItem.displayId = id;
375
+ this.shapeModel.relatedItem.id = id;
341
376
  this.shapeModel.relatedItem.itemType = itemType;
342
377
  this.shapeModel.relatedItem.itemName = itemName;
343
378
  this.shapeModel.relatedItem.statusName = statusName;
344
379
  this.shapeModel.target.targetId = TargetTypeName.new;
345
380
  }
346
381
  // Handle connection process/document
347
- initProcessDocumentConfigAndNodeData() {
382
+ initRelatedConfigAndData() {
348
383
  this.processTreeConfig = {
349
384
  allowSelectFolder: true,
350
385
  areaOfCurrentProcess: '',
@@ -369,11 +404,41 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
369
404
  singleSelectedNode: true,
370
405
  onlyFolder: false
371
406
  };
407
+ this.deviationSelectOneConfig = {
408
+ allowSelectFolder: false,
409
+ showCheckBox: false,
410
+ allowMultipleCheck: false,
411
+ onlyCheckBoxForChild: false,
412
+ moduleId: DataType.deviation,
413
+ openIcon: 'keyboard_arrow_up',
414
+ openIconColor: '#1954A9',
415
+ closeIcon: 'keyboard_arrow_down',
416
+ closeIconColor: '',
417
+ itemIcon: 'report_problem',
418
+ singleSelectedNode: false,
419
+ canHaveDupId: true,
420
+ selectOne: true
421
+ };
422
+ this.checklistSelectOneConfig = {
423
+ allowSelectFolder: false,
424
+ showCheckBox: false,
425
+ allowMultipleCheck: false,
426
+ onlyCheckBoxForChild: false,
427
+ moduleId: DataType.checklist,
428
+ openIcon: 'keyboard_arrow_up',
429
+ openIconColor: '#1954A9',
430
+ closeIcon: 'keyboard_arrow_down',
431
+ closeIconColor: '',
432
+ itemIcon: 'format_list_bulleted',
433
+ singleSelectedNode: false,
434
+ canHaveDupId: true,
435
+ selectOne: true
436
+ };
372
437
  this.loadingRelatedData = true;
373
- forkJoin(this.relatedService.getAreaChildrenNode(null, !this.splitView, false, this.data.enabledInterconnected), this.relatedService.getFolderChildren(null, !this.splitView, false)).pipe(takeUntil(this.ngUnsubcribe))
374
- .subscribe(([res1, res2]) => {
375
- if (res1) {
376
- const areas = res1.map((x) => {
438
+ forkJoin(this.relatedService.getAreaChildrenNode(null, !this.splitView, false, this.data.enabledInterconnected), this.relatedService.getFolderChildren(null, !this.splitView, false), this.enabledDeviationModule ? this.relatedService.getDeviationTreeData() : of(null), this.enabledChecklistModule ? this.relatedService.getChecklistData() : of(null)).pipe(takeUntil(this.ngUnsubcribe))
439
+ .subscribe(([processes, documents, deviations, checklists]) => {
440
+ if (processes) {
441
+ const areas = processes.map((x) => {
377
442
  return {
378
443
  id: x.id,
379
444
  name: x.name,
@@ -386,8 +451,8 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
386
451
  });
387
452
  this.treeProcessData = areas;
388
453
  }
389
- if (res2) {
390
- const areas = res2.map((x) => {
454
+ if (documents) {
455
+ const areas = documents.map((x) => {
391
456
  return {
392
457
  id: x.id.toString(),
393
458
  name: x.name.toString(),
@@ -401,6 +466,8 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
401
466
  });
402
467
  this.treeDocumentData = areas;
403
468
  }
469
+ this.deviationDataTree = deviations || [];
470
+ this.checklistDataTree = checklists || [];
404
471
  this.loadingRelatedData = false;
405
472
  });
406
473
  }
@@ -525,7 +592,7 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
525
592
  this.initShapeModel((obj.itemType === DataType.process || obj.itemType === DataType.processInterconnected) ? obj.itemNumberId : obj.id, obj.itemType, obj.itemName);
526
593
  this.shapeModel.relatedItem.linkUrl = this.getLinkURL(this.shapeModel);
527
594
  this.shapeModel.shape.connectionTypeId = ShapeFlowChartConnectionType.DocumentOrProcess;
528
- this.shapeModel.relatedItem.SVGIcon = this.getShapeModelIconByDataType(this.shapeModel.relatedItem.itemType);
595
+ this.shapeModel.relatedItem.SVGIcon = this.getShapeModelIconByDataType(this.shapeModel.relatedItem.itemType, obj.levelType);
529
596
  if (obj.itemType === DataType.document) {
530
597
  this.getAnchorDocument(obj.id);
531
598
  }
@@ -577,24 +644,109 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
577
644
  getLinkURL(shapeModel) {
578
645
  switch (shapeModel.relatedItem.itemType) {
579
646
  case DataType.document:
580
- shapeModel.relatedItem.linkUrl = `/document/${shapeModel.relatedItem.displayId}`;
647
+ shapeModel.relatedItem.linkUrl = `${CKEditorLinkConst.DOCUMENT_PARTIAL_URL}${shapeModel.relatedItem.displayId}`;
581
648
  break;
582
649
  case DataType.process:
583
- shapeModel.relatedItem.linkUrl = `/process-detail/${shapeModel.relatedItem.displayId}`;
650
+ shapeModel.relatedItem.linkUrl = `${CKEditorLinkConst.PROCESS_PARTIAL_URL}${shapeModel.relatedItem.displayId}`;
584
651
  break;
585
652
  case DataType.area:
586
- shapeModel.relatedItem.linkUrl = `/area/detail/${shapeModel.relatedItem.displayId}`;
653
+ shapeModel.relatedItem.linkUrl = `${CKEditorLinkConst.AREA_PARTIAL_URL}${shapeModel.relatedItem.displayId}`;
587
654
  break;
588
655
  case DataType.folder:
589
- shapeModel.relatedItem.linkUrl = `/folder/${shapeModel.relatedItem.displayId}`;
656
+ shapeModel.relatedItem.linkUrl = `${CKEditorLinkConst.FOLDER_PARTIAL_URL}${shapeModel.relatedItem.displayId}`;
590
657
  break;
591
658
  case DataType.processInterconnected:
592
- shapeModel.relatedItem.linkUrl = `/process-interconnected/${shapeModel.relatedItem.displayId}`;
659
+ shapeModel.relatedItem.linkUrl = `${CKEditorLinkConst.PROCESS_INTERCONNECTED_PARTIAL_URL}${shapeModel.relatedItem.displayId}`;
660
+ break;
661
+ case DataType.deviation:
662
+ shapeModel.relatedItem.linkUrl = `${CKEditorLinkConst.DEVIATION_PARTIAL_URL}${shapeModel.relatedItem.parentId}/${shapeModel.relatedItem.id}`;
663
+ break;
664
+ case DataType.checklist:
665
+ shapeModel.relatedItem.linkUrl = `${CKEditorLinkConst.CHECKLIST_PARTIAL_URL}${shapeModel.relatedItem.parentId}/${shapeModel.relatedItem.id}`;
666
+ break;
593
667
  default:
594
668
  break;
595
669
  }
596
670
  return shapeModel.relatedItem.linkUrl;
597
671
  }
672
+ // Handle Deviation
673
+ openDeviation() {
674
+ const data = new SelectOnePopupData();
675
+ data.moduleId = ModuleType.deviation;
676
+ data.moduleName = this.LANG.BPMN.DEVIATION;
677
+ data.treeData = this.deviationDataTree;
678
+ data.treeConfig = this.deviationSelectOneConfig;
679
+ const dialogRef = this.dialog.open(SelectOneDialog, {
680
+ width: '400px',
681
+ minHeight: '567px',
682
+ data,
683
+ autoFocus: false,
684
+ panelClass: 'custom-mat-dialog-container'
685
+ });
686
+ dialogRef.componentInstance.onSearch.subscribe((keyword) => {
687
+ this.relatedService
688
+ .searchRelatedToDeviation(keyword)
689
+ .pipe(takeUntil(this.ngUnsubcribe))
690
+ .subscribe((res) => {
691
+ const result = res.categories;
692
+ this.qmsRelatedService.setSearchRelated(result);
693
+ });
694
+ });
695
+ dialogRef.afterClosed().subscribe((result) => {
696
+ if (result && result.length) {
697
+ const obj = result[0];
698
+ this.initShapeModel(obj.id, obj.itemType, obj.itemName);
699
+ this.shapeModel.relatedItem.parentId = obj.parentId;
700
+ this.shapeModel.relatedItem.parentName = obj.parentName;
701
+ this.shapeModel.relatedItem.linkUrl = this.getLinkURL(this.shapeModel);
702
+ this.shapeModel.shape.connectionTypeId = ShapeFlowChartConnectionType.Deviation;
703
+ this.shapeModel.relatedItem.SVGIcon = this.getShapeModelIconByDataType(this.shapeModel.relatedItem.itemType);
704
+ // save connection
705
+ this.mapShapeData();
706
+ this.QMSBPMNConfig.showShapeConnectionValue = true;
707
+ this.QMSBPMNConfig.shapeConnectLabel = this.LANG.BPMN.CONNECTION_TYPE.CONNECTED_DEVIATION;
708
+ }
709
+ });
710
+ }
711
+ // Handle Checklist
712
+ openChecklist() {
713
+ const data = new SelectOnePopupData();
714
+ data.moduleId = ModuleType.checklist;
715
+ data.moduleName = this.LANG.BPMN.CHECKLIST;
716
+ data.treeData = this.checklistDataTree;
717
+ data.treeConfig = this.checklistSelectOneConfig;
718
+ const dialogRef = this.dialog.open(SelectOneDialog, {
719
+ width: '400px',
720
+ minHeight: '567px',
721
+ data,
722
+ autoFocus: false,
723
+ panelClass: 'custom-mat-dialog-container'
724
+ });
725
+ dialogRef.componentInstance.onSearch.subscribe((keyword) => {
726
+ this.relatedService
727
+ .searchRelatedToChecklist(keyword)
728
+ .pipe(takeUntil(this.ngUnsubcribe))
729
+ .subscribe((res) => {
730
+ const result = res.categories;
731
+ this.qmsRelatedService.setSearchRelated(result);
732
+ });
733
+ });
734
+ dialogRef.afterClosed().subscribe((result) => {
735
+ if (result && result.length) {
736
+ var obj = result[0];
737
+ this.initShapeModel(obj.id, obj.itemType, obj.itemName);
738
+ this.shapeModel.relatedItem.parentId = obj.parentId;
739
+ this.shapeModel.relatedItem.parentName = obj.parentName;
740
+ this.shapeModel.relatedItem.linkUrl = this.getLinkURL(this.shapeModel);
741
+ this.shapeModel.shape.connectionTypeId = ShapeFlowChartConnectionType.Checklist;
742
+ this.shapeModel.relatedItem.SVGIcon = this.getShapeModelIconByDataType(this.shapeModel.relatedItem.itemType);
743
+ // save connection
744
+ this.mapShapeData();
745
+ this.QMSBPMNConfig.showShapeConnectionValue = true;
746
+ this.QMSBPMNConfig.shapeConnectLabel = this.LANG.BPMN.CONNECTION_TYPE.CONNECTED_DEVIATION;
747
+ }
748
+ });
749
+ }
598
750
  // Handle Attachment
599
751
  openAttachmentDialog() {
600
752
  const data = new QMSCKEditorParamter();
@@ -636,6 +788,12 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
636
788
  case ShapeFlowChartConnectionType.DocumentOrProcess:
637
789
  this.QMSBPMNConfig.shapeConnectLabel = this.LANG.BPMN.CONNECTION_TYPE.CONNECTED_DOCUMENT_PROCESS;
638
790
  break;
791
+ case ShapeFlowChartConnectionType.Deviation:
792
+ this.QMSBPMNConfig.shapeConnectLabel = this.LANG.BPMN.CONNECTION_TYPE.CONNECTED_DEVIATION;
793
+ break;
794
+ case ShapeFlowChartConnectionType.Checklist:
795
+ this.QMSBPMNConfig.shapeConnectLabel = this.LANG.BPMN.CONNECTION_TYPE.CONNECTED_CHECKLIST;
796
+ break;
639
797
  case ShapeFlowChartConnectionType.Attachment:
640
798
  this.QMSBPMNConfig.shapeConnectLabel = this.LANG.BPMN.CONNECTION_TYPE.CONNECTED_ATTACHMENT;
641
799
  break;
@@ -674,6 +832,7 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
674
832
  const linkId = this.getLinkId(url, documentType);
675
833
  this.shapeModel.relatedItem.displayId = linkId ? +linkId : -1;
676
834
  this.shapeModel.relatedItem.itemType = documentType;
835
+ this.shapeModel.relatedItem.parentName = shapeAttribute.parentName;
677
836
  this.shapeModel.target.targetId = shapeAttribute.linkTarget;
678
837
  // handle logo
679
838
  if (this.shapeModel.shape.connectionTypeId === ShapeFlowChartConnectionType.Attachment)
@@ -746,6 +905,10 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
746
905
  switch (connectionTypeId) {
747
906
  case ShapeFlowChartConnectionType.DocumentOrProcess:
748
907
  return this.getDocumentType(url);
908
+ case ShapeFlowChartConnectionType.Deviation:
909
+ return DataType.deviation;
910
+ case ShapeFlowChartConnectionType.Checklist:
911
+ return DataType.checklist;
749
912
  default:
750
913
  return null;
751
914
  }
@@ -766,6 +929,12 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
766
929
  else if (url.indexOf(CKEditorLinkConst.FOLDER_PARTIAL_URL) > -1) {
767
930
  return DataType.folder;
768
931
  }
932
+ else if (url.indexOf(CKEditorLinkConst.DEVIATION_PARTIAL_URL) > -1) {
933
+ return DataType.deviation;
934
+ }
935
+ else if (url.indexOf(CKEditorLinkConst.CHECKLIST_PARTIAL_URL) > -1) {
936
+ return DataType.checklist;
937
+ }
769
938
  return null;
770
939
  }
771
940
  getAnchorDocument(documentId) {
@@ -820,7 +989,7 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
820
989
  });
821
990
  return anchors;
822
991
  }
823
- getShapeModelIconByDataType(dataType) {
992
+ getShapeModelIconByDataType(dataType, levelType) {
824
993
  switch (dataType) {
825
994
  case DataType.folder:
826
995
  return 'folder_outlined';
@@ -832,6 +1001,10 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
832
1001
  return 'process';
833
1002
  case DataType.processInterconnected:
834
1003
  return 'process_interconnected';
1004
+ case DataType.deviation:
1005
+ return 'deviation';
1006
+ case DataType.checklist:
1007
+ return 'checklist';
835
1008
  default:
836
1009
  return 'folder_outlined';
837
1010
  }
@@ -868,17 +1041,29 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
868
1041
  deleteConnection(selectedConnectionType) {
869
1042
  let title = this.LANG.BPMN.DELETE_ATTACHMENT;
870
1043
  let content = this.LANG.BPMN.CONFIRM_DELETE_ATTACHMENT;
871
- if (selectedConnectionType == ShapeFlowChartConnectionType.DocumentOrProcess) {
872
- title = this.LANG.BPMN.DELETE_DOCUMENT_OR_PROCESS;
873
- content = this.LANG.QMSCKEDITOR_MESSAGE.CONFIRM_DELETE_DOCUMENT_OR_PROCESS;
874
- }
875
- else if (selectedConnectionType == ShapeFlowChartConnectionType.Link) {
876
- title = this.LANG.BPMN.DELETE_LINK;
877
- content = this.LANG.QMSCKEDITOR_MESSAGE.CONFIRM_DELETE_ATTACHMENT;
878
- }
879
- else if (selectedConnectionType == ShapeFlowChartConnectionType.Attachment) {
880
- title = this.LANG.BPMN.DELETE_ATTACHMENT;
881
- content = this.LANG.QMSCKEDITOR_MESSAGE.CONFIRM_DELETE_ATTACHMENT;
1044
+ switch (selectedConnectionType) {
1045
+ case ShapeFlowChartConnectionType.DocumentOrProcess:
1046
+ title = this.LANG.BPMN.DELETE_DOCUMENT_OR_PROCESS;
1047
+ content = this.LANG.QMSCKEDITOR_MESSAGE.CONFIRM_DELETE_DOCUMENT_OR_PROCESS;
1048
+ break;
1049
+ case ShapeFlowChartConnectionType.Deviation:
1050
+ title = this.LANG.BPMN.CONNECTION_TYPE.DELETE_SHAPE_DEVIATION;
1051
+ content = this.LANG.QMSCKEDITOR_MESSAGE.CONFIRM_DELETE_DEVIATION;
1052
+ break;
1053
+ case ShapeFlowChartConnectionType.Checklist:
1054
+ title = this.LANG.BPMN.CONNECTION_TYPE.DELETE_SHAPE_CHECKLIST;
1055
+ content = this.LANG.QMSCKEDITOR_MESSAGE.CONFIRM_DELETE_CHECKLIST;
1056
+ break;
1057
+ case ShapeFlowChartConnectionType.Link:
1058
+ title = this.LANG.BPMN.DELETE_LINK;
1059
+ content = this.LANG.QMSCKEDITOR_MESSAGE.CONFIRM_DELETE_ATTACHMENT;
1060
+ break;
1061
+ case ShapeFlowChartConnectionType.Attachment:
1062
+ title = this.LANG.BPMN.DELETE_ATTACHMENT;
1063
+ content = this.LANG.QMSCKEDITOR_MESSAGE.CONFIRM_DELETE_ATTACHMENT;
1064
+ break;
1065
+ default:
1066
+ break;
882
1067
  }
883
1068
  this.showConfirmDialog(title, content, false, (value) => {
884
1069
  if (value) {
@@ -920,6 +1105,10 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
920
1105
  window[FlowChartConst.MY_CELL_VIEW].model.prop('linkTitle', this.shapeModel.shape.connectionTypeId !== ShapeFlowChartConnectionType.Link
921
1106
  ? this.shapeModel.relatedItem.itemName : '');
922
1107
  window[FlowChartConst.MY_CELL_VIEW].model.prop('connectionTypeId', this.shapeModel.shape.connectionTypeId);
1108
+ // deviation and checklist have parent name
1109
+ if (this.shapeModel.shape.connectionTypeId === ShapeFlowChartConnectionType.Deviation
1110
+ || this.shapeModel.shape.connectionTypeId === ShapeFlowChartConnectionType.Checklist)
1111
+ window[FlowChartConst.MY_CELL_VIEW].model.prop('parentName', this.shapeModel.relatedItem.parentName);
923
1112
  }
924
1113
  }
925
1114
  }
@@ -927,7 +1116,7 @@ QMSCKEditorBpmnComponent.decorators = [
927
1116
  { type: Component, args: [{
928
1117
  selector: 'qms-ckeditor-bpmn',
929
1118
  template: "<div id=\"qmsckeditor-bpmn\" class=\"qmsckeditor qmsckeditor__bpmn__container\">\n <div id=\"qmsckeditor-load-template-header\">\n <span id=\"qmsckeditor-bpmn-header_001\" mat-icon-button class=\"qmsckeditor button__close\" (click)=\"onCloseDialog()\">\n <mat-icon>close</mat-icon>\n </span>\n <span id=\"qmsckeditor-bpmn-header_002\" mat-icon-button class=\"qmsckeditor button__done\" (click)=\"onInsertImage()\">\n <mat-icon>done</mat-icon>\n </span>\n <div id=\"qmsckeditor-load-template-header_002\" mat-dialog-content>\n <h2 id=\"qmsckeditor-template_002_001\">\n {{ LANG.BPMN.BUSINESS_PROCESS_MODEL_AND_NOTATION }}\n </h2>\n </div>\n </div>\n <div class=\"mask-overlay\" *ngIf=\"loadingRelatedData\">\n <mat-spinner class=\"spinner\" diameter=\"65\"></mat-spinner>\n </div>\n <qms-bpmn [QMSBPMNConfig]=\"QMSBPMNConfig\" [shapeModel]=\"shapeModel\" [targets]=\"targets\" [anchors]=\"anchors\"\n (onSelectConnectType)=\"selectConnectType($event)\" (onSaveAsTemplate)=\"saveAsTemplate($event)\"\n (onDeleteTemplate)=\"deleteTemplate()\" (onSelectTemplate)=\"selectTemplate()\" (onResetTemplate)=\"resetTemplate()\"\n (onGetShapeActivity)=\"getShapeActivity($event)\" (onChangeShapeTarget)=\"saveShapeTarget($event)\"\n (onChangeShapeAnchor)=\"saveShapeAnchor($event)\" (onReloadAnchorDocumentClick)=\"reloadAnchorDocument()\"\n (onDeleteConnection)=\"deleteConnection($event)\"></qms-bpmn>\n</div>",
930
- styles: [":host ::ng-deep .qmsckeditor__bpmn__container ::ng-deep .mat-tab-body-wrapper{height:100%}:host ::ng-deep .qmsckeditor__bpmn__container .mask-overlay{z-index:1000;background-color:rgba(34,33,33,.1);position:absolute;top:0;left:0;width:100%;height:100%;border-radius:4px;overflow:hidden;display:grid;place-items:center}"]
1119
+ styles: [":host ::ng-deep .qmsckeditor__bpmn__container ::ng-deep .mat-tab-body-wrapper{height:100%}:host ::ng-deep .qmsckeditor__bpmn__container .mask-overlay{z-index:1000;background-color:rgba(34,33,33,.1);position:absolute;top:0;left:0;width:100%;height:100%;border-radius:4px;overflow:hidden;display:grid;place-items:center}:host ::ng-deep .qmsckeditor__bpmn__container .joint-widget.joint-theme-default[data-type=zoomToFit]:after{display:block;content:\" \";background-color:transparent;background-repeat:no-repeat;background-image:url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCI+PHBhdGggc3R5bGU9InN0cm9rZTpub25lO2ZpbGwtcnVsZTpub256ZXJvO2ZpbGw6IzAwMDtmaWxsLW9wYWNpdHk6MSIgZD0iTTMgMjF2LTUuNzVoMS41djMuMTc2bDMuNy0zLjcgMS4wNzMgMS4wNzVMNS41NzQgMTkuNUg4Ljc1VjIxWm0xMi4yNSAwdi0xLjVoMy4xNzZsLTMuNjc2LTMuNjc2IDEuMDc0LTEuMDc0IDMuNjc2IDMuNjc2VjE1LjI1SDIxVjIxWk04LjE3NiA5LjI1IDQuNSA1LjU3NFY4Ljc1SDNWM2g1Ljc1djEuNUg1LjU3NEw5LjI1IDguMTc2Wm03LjY0OCAwTDE0Ljc1IDguMTc2IDE4LjQyNiA0LjVIMTUuMjVWM0gyMXY1Ljc1aC0xLjVWNS41NzRabTAgMCIvPjwvc3ZnPg==\")!important;width:50px;height:50px;background-position:7px 7px}"]
931
1120
  },] }
932
1121
  ];
933
1122
  QMSCKEditorBpmnComponent.ctorParameters = () => [
@@ -942,6 +1131,7 @@ QMSCKEditorBpmnComponent.ctorParameters = () => [
942
1131
  { type: QMSCKEditorBPMNConnectionService },
943
1132
  { type: MatDialogRef },
944
1133
  { type: QMSCKEditorTreeService },
1134
+ { type: QMSSelectOneGlobalService },
945
1135
  { type: QMSIconRegistryService },
946
1136
  { type: DomSanitizer },
947
1137
  { type: MatIconRegistry },
@@ -950,4 +1140,4 @@ QMSCKEditorBpmnComponent.ctorParameters = () => [
950
1140
  QMSCKEditorBpmnComponent.propDecorators = {
951
1141
  ckEditor: [{ type: Input }]
952
1142
  };
953
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWNrZWRpdG9yLWJwbW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcW1zLWFuZ3VsYXIvc3JjL2xpYi9xbXMtY2tlZGl0b3ItY29tcG9uZW50cy9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1icG1uL3Ftcy1ja2VkaXRvci1icG1uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBZ0IsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ2hGLE9BQU8sVUFBVSxNQUFNLGdDQUFnQyxDQUFDO0FBRXhELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN0RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN6RyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN6RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDdkUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDbkcsT0FBTyxFQUFF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ZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBJbmplY3QsIElucHV0LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYsIE1BVF9ESUFMT0dfREFUQSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvdHJhbnNsYXRpb24tcmVnaXN0cnkuc2VydmljZVwiO1xuaW1wb3J0IHsgQ0tFZGl0b3JFdmVudENvbnN0IH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9jb25zdGFudHMvY2tlZGl0b3JFdmVudC5jb25zdGFudFwiO1xuaW1wb3J0IHsgRmxvd0NoYXJ0Q29uc3QgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2NvbnN0YW50cy9ja2VkaXRvckZsb3djaGFydC5jb25zdFwiO1xuaW1wb3J0IGd1aWRIZWxwZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9oZWxwZXIvZ3VpZEhlbHBlclwiO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCcG1uVGVtcGxhdGUgfSBmcm9tIFwiLi4vLi4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItYnBtbi10ZW1wbGF0ZS5tb2RlbFwiO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCcG1uIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLWJwbW4ubW9kZWxcIjtcbmltcG9ydCB7IFFNU0NLRWRpdG9yRGlhbG9nRGF0YSB9IGZyb20gXCIuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci1kaWFsb2cubW9kZWxcIjtcbmltcG9ydCB7IFFNU0NLRWRpdG9yQ29uZmlybUNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb21tb24vbW9kdWxlL2NvbmZpcm0vcW1zLWNrZWRpdG9yLWNvbmZpcm0uY29tcG9uZW50XCI7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckJhc2VDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vcW1zLWNrZWRpdG9yLWJhc2UuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckJwbW5BcGlTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci1icG1uLWFwaS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBCcG1uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9xbXMtY2tlZGl0b3ItYnBtbi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlIH0gZnJvbSAnLi4vLi4vY29tbW9uL2VudW1zL3NoYXBlLWZsb3ctY2hhcnQtY29ubmVjdGlvbi10eXBlJztcbmltcG9ydCB7IFFNU0NLRWRpdG9yQnBtbkRhdGEgfSBmcm9tICcuLi8uLi9tb2RlbHMvcW1zLWNrZWRpdG9yLWJwbW4tZGF0YS5tb2RlbCc7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckxpbmtTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcW1zLWNrZWRpdG9yLWxpbmsuc2VydmljZSc7XG5pbXBvcnQgeyBRTVNDS0VkaXRvclVwbG9hZFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvcW1zLWNrZWRpdG9yLXVwbG9hZC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBiYXNlNjRTdHJpbmdUb0ZpbGUgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2hlbHBlci9maWxlSGVscGVyXCI7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckNvbW1vblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvcW1zLWNrZWRpdG9yLWNvbW1vbi5zZXJ2aWNlc1wiO1xuaW1wb3J0IHsgUU1TQlBNTkNvbmZpZyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcW1zLWJwbW4tY29uZmlnLm1vZGVsXCI7XG5pbXBvcnQgUU1TQ0tFZGl0b3JCUE1ORnVuY3Rpb25zIGZyb20gJy4vLi4vLi4vY29tbW9uL2Z1bmN0aW9ucy9icG1uLmZ1bmN0aW9uJztcbmltcG9ydCB7IERpYWdyYW1UZW1wbGF0ZXMgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2RpYWdyYW0tdGVtcGxhdGUubW9kZWxcIjtcbmltcG9ydCB7IFRyZWVDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vY29tcG9uZW50cy90cmVlXCI7XG5pbXBvcnQgeyBEYXRhVHlwZSB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vZW51bS9kYXRhLXR5cGUuZW51bVwiO1xuaW1wb3J0IHsgRmxvd2NoYXJ0Vmlld01vZGUgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2VudW1zL2Zsb3djaGFydC12aWV3LW1vZGUuZW51bVwiO1xuaW1wb3J0IHsgUU1TU2VsZWN0UHJvY2Vzc0RvY3VtZW50R2xvYmFsU2VydmljZSwgU2VsZWN0UHJvY2Vzc0RvY3VtZW50UG9wdXBDb21wb25lbnQsIFNlbGVjdFByb2Nlc3NEb2N1bWVudFBvcHVwRGF0YSB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL3NlbGVjdC1wcm9jZXNzLWRvY3VtZW50XCI7XG5pbXBvcnQgeyBNb2R1bGVUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9lbnVtL21vZHVsZS10eXBlLmVudW1cIjtcbmltcG9ydCB7IFByb2Nlc3NOb2RlVHlwZSB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vZW51bS9wcm9jZXNzLW5vZGUtdHlwZS5lbnVtXCI7XG5pbXBvcnQgeyBJUmVsYXRlZCB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL3JlbGF0ZWQvbW9kZWwvcmVsYXRlZC1kYXRhLm1vZGVsXCI7XG5pbXBvcnQgeyBEb2N1bWVudE5vZGVUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9lbnVtL2RvY3VtZW50LW5vZGUtdHlwZS5lbnVtXCI7XG5pbXBvcnQgeyBQcm9jZXNzU3RhdHVzIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9lbnVtL3Byb2Nlc3NTdGF0dXMuZW51bVwiO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCUE1OQ29ubmVjdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvcW1zLWNrZWRpdG9yLWJwbW4tY29ubmVjdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBQcm9jZXNzRG9jdW1lbnRUcmVlTm9kZURhdGEgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3Byb2Nlc3MtZG9jdW1lbnQtdHJlZS1ub2RlLWRhdGEubW9kZWxcIjtcbmltcG9ydCB7IFNoYXBlTW9kZWwgfSBmcm9tIFwiLi4vLi4vLi4vY29tcG9uZW50cy9xbXMtYnBtbi9tb2RlbHMvc2hhcGUtbW9kZWwubW9kZWxcIjtcbmltcG9ydCB7IFRhcmdldFR5cGVOYW1lIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9lbnVtcy90YXJnZXQtdHlwZS5lbnVtXCI7XG5pbXBvcnQgeyBRTVNCUE1OU2hhcGVUYXJnZXQgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3Ftcy1icG1uLXNoYXBlLXRhcmdldFwiO1xuaW1wb3J0IHsgQ0tFZGl0b3JMaW5rQ29uc3QgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2NvbnN0YW50cy9ja2VkaXRvckxpbmsuY29uc3RhbnRcIjtcbmltcG9ydCB7IGZvcmtKb2luIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IExpbmtBdHRhY2htZW50Q29tcG9uZW50IH0gZnJvbSBcIi4uL3Ftcy1ja2VkaXRvci1saW5rL2F0dGFjaG1lbnRzL2xpbmstYXR0YWNobWVudC5jb21wb25lbnRcIjtcbmltcG9ydCBRTVNDS0VkaXRvclBhcmFtdGVyIGZyb20gXCIuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci1wYXJhbWV0ZXIubW9kZWxcIjtcbmltcG9ydCB7IFFNU0JQTU5TaGFwZUFuY2hvciB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcW1zLWJwbW4tc2hhcGUtYW5jaG9yLm1vZGVsXCI7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckxpbmtBbmNob3JEb2N1bWVudCB9IGZyb20gXCIuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci1saW5rLWFuY2hvci1kb2N1bWVudC5tb2RlbFwiO1xuaW1wb3J0IHsgTGlua0FuY2hvciB9IGZyb20gXCIuLi8uLi9jb21tb24vZW51bXMvbGluay1hbmNob3IuZW51bVwiO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JUb2FzdFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29tbW9uL3RvYXN0L3Ftcy1ja2VkaXRvci10b2FzdC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBCUE1OTGlua0NvbXBvbmVudCB9IGZyb20gXCIuL2xpbmsvYnBtbi1saW5rLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgU2hhcGVMaW5rIH0gZnJvbSBcIi4uLy4uLy4uL2NvbXBvbmVudHMvcW1zLWJwbW4vbW9kZWxzL2Zsb3ctY2hhcnQtc2hhcGUvc2hhcGUtbGlua1wiO1xuaW1wb3J0IFRvb2xiYXJGdW5jdGlvbiBmcm9tIFwiLi4vLi4vY29tbW9uL2JwbW4vdG9vbGJhci5mdW5jdGlvblwiO1xuaW1wb3J0IHsgUHJvY2Vzc0NsYXNzaWZpY2F0aW9uVHlwZXMgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2VudW0vcHJvY2Vzcy1jbGFzc2lmaWNhdGlvbi10eXBlLmVudW1cIjtcbmltcG9ydCB7IFFNU0NLRWRpdG9yVHJlZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvcW1zLWNrZWRpdG9yLXRyZWUuc2VydmljZVwiO1xuaW1wb3J0IHsgUU1TSWNvblJlZ2lzdHJ5U2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL2FwcC1pY29uL2ljb24tcmVnaXN0cnkuc2VydmljZVwiO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcbmltcG9ydCB7IE1hdEljb25SZWdpc3RyeSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9pY29uXCI7XG5pbXBvcnQgeyBHZXRTZWFyY2hQcm9jZXNzRG9jdW1lbnRPcHRpb24gfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2dldC1zZWFyY2gtcHJvY2Vzcy1kb2N1bWVudC1vcHRpb25cIjtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdxbXMtY2tlZGl0b3ItYnBtbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Ftcy1ja2VkaXRvci1icG1uLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9xbXMtY2tlZGl0b3ItYnBtbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFFNU0NLRWRpdG9yQnBtbkNvbXBvbmVudCBleHRlbmRzIFFNU0NLRWRpdG9yQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgTEFORzogYW55O1xuICAgIEBJbnB1dCgpIGNrRWRpdG9yOiBhbnk7XG5cbiAgICBRTVNCUE1OQ29uZmlnOiBRTVNCUE1OQ29uZmlnID0gbmV3IFFNU0JQTU5Db25maWcoKTtcbiAgICBqc29uQ29udGVudDogc3RyaW5nO1xuXG4gICAgaWQgPSAnJztcbiAgICBtb2R1bGU6IG51bWJlcjtcbiAgICBlbnRpdHlJZCA9ICcnO1xuICAgIGVkaXRvckNvbnRlbnQgPSAnJztcblxuICAgIGJwbW46IFFNU0NLRWRpdG9yQnBtbiA9IG5ldyBRTVNDS0VkaXRvckJwbW4oKTtcbiAgICBicG1uVGVtbGF0ZXM6IFFNU0NLRWRpdG9yQnBtblRlbXBsYXRlW10gPSBbXTtcbiAgICB0ZW1wbGF0ZTtcbiAgICBzaGFwZU1vZGVsOiBTaGFwZU1vZGVsID0gbmV3IFNoYXBlTW9kZWwoKTtcbiAgICAvKiogdGVtcGxhdGUgYmVmb3JlIHNlbGVjdGVkIGFscmVhZHkgYW5vdGhlciB0ZW1wbGF0ZSBpbiBzZWxlY3QgYm94ICh1c2luZyBmb3IgcmVzZXQgdGVtcGxhdGUpKi9cbiAgICB0ZW1wVGVtcGxhdGU6IGFueTtcbiAgICB0YXJnZXRzOiBRTVNCUE1OU2hhcGVUYXJnZXRbXSA9IFtdO1xuICAgIGFuY2hvcnM6IFFNU0JQTU5TaGFwZUFuY2hvcltdID0gW107XG4gICAgLy8gcHJvY2Vzcy9kb2N1bWVudCBjb25uZWN0aW9uIHR5cGVcbiAgICBzcGxpdFZpZXc6IGJvb2xlYW47XG4gICAgcHJvY2Vzc1RyZWVDb25maWc6IFRyZWVDb25maWc7XG4gICAgZG9jdW1lbnRUcmVlQ29uZmlnOiBUcmVlQ29uZmlnO1xuICAgIHRyZWVQcm9jZXNzRGF0YTogUHJvY2Vzc0RvY3VtZW50VHJlZU5vZGVEYXRhW107XG4gICAgdHJlZURvY3VtZW50RGF0YTogUHJvY2Vzc0RvY3VtZW50VHJlZU5vZGVEYXRhW107XG4gICAgbG9hZGluZ1JlbGF0ZWREYXRhOiBib29sZWFuO1xuICAgIGVuYWJsZWRJbnRlcmNvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGJwbW5TZXJ2aWNlOiBCcG1uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBicG1uQXBpU2VydmljZTogUU1TQ0tFZGl0b3JCcG1uQXBpU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBsaW5rU2VydmljZTogUU1TQ0tFZGl0b3JMaW5rU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB1cGxvYWRTZXJ2aWNlOiBRTVNDS0VkaXRvclVwbG9hZFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY29tbW9uU2VydmljZTogUU1TQ0tFZGl0b3JDb21tb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHNlbGVjdFByb2Nlc3NEb2N1bWVudEdsb2JhbFNlcnZpY2U6IFFNU1NlbGVjdFByb2Nlc3NEb2N1bWVudEdsb2JhbFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVsYXRlZFNlcnZpY2U6IFFNU0NLRWRpdG9yQlBNTkNvbm5lY3Rpb25TZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8UU1TQ0tFZGl0b3JCcG1uQ29tcG9uZW50PixcbiAgICAgICAgcHJpdmF0ZSB0cmVlU2VydmljZTogUU1TQ0tFZGl0b3JUcmVlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhcHBJY29uU2VydmljZTogUU1TSWNvblJlZ2lzdHJ5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICAgICAgcHJpdmF0ZSBpY29uUmVnaXN0cnk6IE1hdEljb25SZWdpc3RyeSxcbiAgICAgICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBRTVNDS0VkaXRvckJwbW5EYXRhXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaWQgPSBkYXRhLmlkO1xuICAgICAgICB0aGlzLm1vZHVsZSA9IGRhdGEubW9kdWxlO1xuICAgICAgICB0aGlzLmVudGl0eUlkID0gZGF0YS5lbnRpdHlJZDtcbiAgICAgICAgdGhpcy5lZGl0b3JDb250ZW50ID0gZGF0YS5lZGl0b3JDb250ZW50O1xuICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1Byb2Nlc3NEb2N1bWVudFRyZWVEYXRhSW5TcGxpdFZpZXcgPSBkYXRhLnNob3dQcm9jZXNzRG9jdW1lbnRUcmVlRGF0YUluU3BsaXRWaWV3O1xuICAgICAgICB0aGlzLmVuYWJsZWRJbnRlcmNvbm5lY3RlZCA9IGRhdGEuZW5hYmxlZEludGVyY29ubmVjdGVkO1xuICAgIH1cblxuICAgIGFzeW5jIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnRlbXBsYXRlID0gbmV3IERpYWdyYW1UZW1wbGF0ZXMoKTtcbiAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLmVkaXRNb2RlID0gRmxvd2NoYXJ0Vmlld01vZGUuRWRpdDtcblxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5nZXRMYW5ndWFnZVN1YmplY3QkLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLkxBTkcgPSB0aGlzLnRyYW5zbGF0ZS5nZXRPYmplY3RMYW5nKHJlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLmNoYW5nZVRlbXBsYXRlUG9wdXBDb250ZW50ID0gdGhpcy5MQU5HLkJQTU4uQ0hBTkdFX1RFTVBMQVRFX05PVEU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYnBtblRlbWxhdGVzID0gYXdhaXQgdGhpcy5nZXRUZW1wbGF0ZXMoKTtcbiAgICAgICAgY29uc3QgdGVtbGF0ZXMgPSB0aGlzLmJwbW5UZW1sYXRlcy5tYXAoKHgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaW5kZXg6IHguaW5kZXgsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVOYW1lOiB4LnRlbXBsYXRlTmFtZSxcbiAgICAgICAgICAgICAgICBmbG93Q2hhcnRJZDogeC5pZCxcbiAgICAgICAgICAgICAgICBuYW1lOiB4LnRlbXBsYXRlTmFtZSxcbiAgICAgICAgICAgICAgICBqc29uQ29udGVudDogeC5qc29uQ29udGVudFxuICAgICAgICAgICAgfVxuICAgICAgICB9KSB8fCBbXTtcblxuICAgICAgICBpZiAodGhpcy5pZCkge1xuICAgICAgICAgICAgdGhpcy5qc29uQ29udGVudCA9IGF3YWl0IHRoaXMuZ2V0SnNvbkNvbnRlbnQodGhpcy5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5icG1uU2VydmljZS5idWlsZERpYWdyYW0oXG4gICAgICAgICAgICB0ZW1sYXRlcyxcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGUsXG4gICAgICAgICAgICAnZGVmYXVsdCBqb2ludC10aGVtZS1icG1uJyxcbiAgICAgICAgICAgIHRoaXMuanNvbkNvbnRlbnQsXG4gICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuZWRpdE1vZGUsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgVG9vbGJhckZ1bmN0aW9uLmdldFRvb2xiYXJDb25maWd1cmF0aW9uKHRoaXMuTEFORylcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zcGxpdFZpZXcgPSB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1Byb2Nlc3NEb2N1bWVudFRyZWVEYXRhSW5TcGxpdFZpZXc7XG4gICAgICAgIHRoaXMuaW5pdENvbm5lY3Rpb25UeXBlcygpO1xuICAgICAgICB0aGlzLmluaXRUYXJnZXQoKTtcbiAgICAgICAgdGhpcy5pbml0UHJvY2Vzc0RvY3VtZW50Q29uZmlnQW5kTm9kZURhdGEoKTtcbiAgICB9XG5cbiAgICBpbml0Q29ubmVjdGlvblR5cGVzKCkge1xuICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuY29ubmVjdFR5cGVzID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzLFxuICAgICAgICAgICAgICAgIHZpZXdWYWx1ZTogdGhpcy5MQU5HLkJQTU4uRE9DVU1FTlRfUFJPQ0VTUyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLlBST0NFU1NfRE9DVU1FTlRfQ09OTkVDVElPTl9HVUlERUxJTkUsXG4gICAgICAgICAgICAgICAgY2FuQ29ubmVjdDogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5MaW5rLFxuICAgICAgICAgICAgICAgIHZpZXdWYWx1ZTogdGhpcy5MQU5HLkJQTU4uTElOSyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkxJTktfQ09OTkVDVElPTl9HVUlERUxJTkUsXG4gICAgICAgICAgICAgICAgY2FuQ29ubmVjdDogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5BdHRhY2htZW50LFxuICAgICAgICAgICAgICAgIHZpZXdWYWx1ZTogdGhpcy5MQU5HLlFNU0NLRURJVE9SLkFUVEFDSE1FTlQsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgICAgICAgICAgIGNhbkNvbm5lY3Q6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBpbml0VGFyZ2V0KCkge1xuICAgICAgICBpZiAodGhpcy50YXJnZXRzKSB7XG4gICAgICAgICAgICB0aGlzLnRhcmdldHMucHVzaCh7IHZhbHVlOiBUYXJnZXRUeXBlTmFtZS5uZXcsIHZpZXdWYWx1ZTogdGhpcy5MQU5HLlFNU0NLRURJVE9SLlRBUkdFVF9CTEFOSyB9KTtcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0cy5wdXNoKHsgdmFsdWU6IFRhcmdldFR5cGVOYW1lLnNhbWUsIHZpZXdWYWx1ZTogdGhpcy5MQU5HLlFNU0NLRURJVE9SLlRBUkdFVF9TRUxGIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0VGVtcGxhdGVzKCk6IFByb21pc2U8UU1TQ0tFZGl0b3JCcG1uVGVtcGxhdGVbXT4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYnBtbkFwaVNlcnZpY2VcbiAgICAgICAgICAgICAgICAuYnBtbkdldFRlbXBsYXRlcygpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0SnNvbkNvbnRlbnQoaWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5icG1uQXBpU2VydmljZVxuICAgICAgICAgICAgICAgIC5nZXRCcG1uQnlJZChpZClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5qc29uQ29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzZWxlY3RDb25uZWN0VHlwZShldmVudDogU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZSkge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50KSB7XG4gICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRG9jdW1lbnRPclByb2Nlc3M6XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuUHJvY2Vzc0RvY3VtZW50KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQXR0YWNobWVudDpcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5BdHRhY2htZW50RGlhbG9nKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuTGluazpcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5MaW5rKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VsZWN0VGVtcGxhdGUoKSB7XG4gICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19TRUxFQ1RFRF9URU1QTEFURV0gPSB0cnVlO1xuICAgICAgICBjb25zdCBncmFwaCA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5HUkFQSF07XG4gICAgICAgIHRoaXMudGVtcFRlbXBsYXRlID0gZ3JhcGgudG9KU09OKCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSnNvbkNvbnRlbnQgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfSlNPTl9DT05URU5UXTtcbiAgICAgICAgaWYgKHNlbGVjdGVkSnNvbkNvbnRlbnQpIHtcbiAgICAgICAgICAgIGlmIChncmFwaCkge1xuICAgICAgICAgICAgICAgIGdyYXBoLmZyb21KU09OKEpTT04ucGFyc2Uoc2VsZWN0ZWRKc29uQ29udGVudCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXSA9IG51bGw7XG4gICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfU0hBUEVfSURdID0gJyc7XG4gICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0hBUEVfVFlQRV0gPSAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBzYXZlIEJQTU5cbiAgICBhc3luYyBzYXZlSW1hZ2VDb250ZW50KGdyYXBoT2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QganNvbkNvbnRlbnQgPSBKU09OLnN0cmluZ2lmeShncmFwaE9iamVjdCk7XG4gICAgICAgICAgICB0aGlzLmJwbW4gPSB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMuaWQgPyB0aGlzLmlkIDogZ3VpZEhlbHBlci5lbXB0eSxcbiAgICAgICAgICAgICAgICBqc29uQ29udGVudDoganNvbkNvbnRlbnQsXG4gICAgICAgICAgICAgICAgaXNUZW1wbGF0ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVOYW1lOiAnJ1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmJwbW5BcGlTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmJwbW5Nb2RpZnlpbmcodGhpcy5icG1uKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGFzeW5jIGdldEltYWdlQ29udGVudChwYXBlcjogYW55KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgcGFwZXIudG9QTkcoKGltYWdlRGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyclN0cmluZyA9IGltYWdlRGF0YS5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoYXJyU3RyaW5nWzFdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBvbkluc2VydEltYWdlKCkge1xuICAgICAgICBjb25zdCBncmFwaCA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5HUkFQSF07XG4gICAgICAgIGNvbnN0IHBhcGVyID0gd2luZG93W2BwYXBlcmBdO1xuICAgICAgICBjb25zdCBjbGllbnRSZWN0ID0gcGFwZXIucGFwZXJUb0xvY2FsUmVjdChwYXBlci5nZXRDb250ZW50QkJveCgpKTtcbiAgICAgICAgY29uc3QgZ3JhcGhPYmplY3QgPSBncmFwaC50b0pTT04oKTtcbiAgICAgICAgY29uc3QgaWQgPSBhd2FpdCB0aGlzLnNhdmVJbWFnZUNvbnRlbnQoZ3JhcGhPYmplY3QpO1xuICAgICAgICBjb25zdCBpbWFnZUNvbnRlbnQgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LCcgKyBhd2FpdCB0aGlzLmdldEltYWdlQ29udGVudChwYXBlcik7XG4gICAgICAgIGNvbnN0IGZpbGUgPSBiYXNlNjRTdHJpbmdUb0ZpbGUoaW1hZ2VDb250ZW50LCBgJHtDS0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfQlBNTn0jJHtpZH1gKTtcbiAgICAgICAgY29uc3QgcmVsYXRpdmVVcmwgPSBhd2FpdCB0aGlzLnVwbG9hZFNlcnZpY2UudXBsb2FkSW1hZ2UoZmlsZSkudG9Qcm9taXNlKCk7XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlQWRkaXRpb25hbFdpZHRoKGdyYXBoLCBwYXBlciwgZ3JhcGhPYmplY3QuY2VsbHMpO1xuICAgICAgICBjb25zdCBpbWFnZW1hcCA9IFFNU0NLRWRpdG9yQlBNTkZ1bmN0aW9ucy50b0ltYWdlTWFwKGlkLCBncmFwaE9iamVjdC5jZWxscywgY2xpZW50UmVjdCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHsga2V5OiBgJHtDS0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfQlBNTn0jJHtpZH1gLCB2YWx1ZXM6IHJlbGF0aXZlVXJsLCBpbWFnZW1hcDogaW1hZ2VtYXAgfVxuICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLmNvbW1vblNlcnZpY2UuZ2V0U2Nyb2xsVG9wQ2tlZGl0b3IodGhpcy5ja0VkaXRvcik7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHJlc3VsdCk7XG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZS5zZXRTY3JvbGxUb3BFZGl0b3JDb250YWluZXIodGhpcy5ja0VkaXRvciwgc2Nyb2xsVG9wKTtcbiAgICB9XG5cbiAgICBvbkNsb3NlRGlhbG9nKCkge1xuICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXSA9IG51bGw7XG4gICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9TSEFQRV9JRF0gPSAnJztcbiAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNIQVBFX1RZUEVdID0gJyc7XG4gICAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IHRoaXMuY29tbW9uU2VydmljZS5nZXRTY3JvbGxUb3BDa2VkaXRvcih0aGlzLmNrRWRpdG9yKTtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlLnNldFNjcm9sbFRvcEVkaXRvckNvbnRhaW5lcih0aGlzLmNrRWRpdG9yLCBzY3JvbGxUb3ApO1xuICAgIH1cblxuICAgIHNhdmVBc1RlbXBsYXRlKHRlbXBsYXRlTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IHRoaXMuY29tbW9uU2VydmljZS5nZXRTY3JvbGxUb3BDa2VkaXRvcih0aGlzLmNrRWRpdG9yKTtcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlLnNldFNjcm9sbFRvcEVkaXRvckNvbnRhaW5lcih0aGlzLmNrRWRpdG9yLCBzY3JvbGxUb3ApO1xuICAgICAgICBjb25zdCBncmFwaCA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5HUkFQSF07XG4gICAgICAgIGNvbnN0IGpzb25Db250ZW50ID0gSlNPTi5zdHJpbmdpZnkoZ3JhcGgudG9KU09OKCkpO1xuICAgICAgICB0aGlzLmJwbW4gPSB7XG4gICAgICAgICAgICBpZDogZ3VpZEhlbHBlci5lbXB0eSxcbiAgICAgICAgICAgIGpzb25Db250ZW50OiBqc29uQ29udGVudCxcbiAgICAgICAgICAgIGlzVGVtcGxhdGU6IHRydWUsXG4gICAgICAgICAgICB0ZW1wbGF0ZU5hbWU6ICcnXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5icG1uLnRlbXBsYXRlTmFtZSA9IHRlbXBsYXRlTmFtZTtcbiAgICAgICAgdGhpcy5icG1uQXBpU2VydmljZVxuICAgICAgICAgICAgLmJwbW5Nb2RpZnlpbmcodGhpcy5icG1uKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icG1uU2VydmljZS5hZGRJdGVtVGVtcGxhdGUocmVzdWx0LCB0aGlzLmJwbW4pO1xuICAgICAgICAgICAgICAgICAgICBRTVNDS0VkaXRvclRvYXN0U2VydmljZS5zdWNjZXNzKHRoaXMuTEFORy5RTVNDS0VESVRPUi5TQVZFRCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgUU1TQ0tFZGl0b3JUb2FzdFNlcnZpY2UuZXJyb3IodGhpcy5MQU5HLlFNU0NLRURJVE9SLlNBVkVfRkFJTEVEKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBkZWxldGVUZW1wbGF0ZSgpIHtcbiAgICAgICAgaWYgKCEhdGhpcy50ZW1wbGF0ZS5mbG93Q2hhcnRJZCkge1xuICAgICAgICAgICAgdGhpcy5icG1uQXBpU2VydmljZVxuICAgICAgICAgICAgICAgIC5icG1uRGVsZXRlVGVtcGxhdGUodGhpcy50ZW1wbGF0ZS5mbG93Q2hhcnRJZClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJwbW5TZXJ2aWNlLnJlbW92ZVNlbGVjdEl0ZW0odGhpcy50ZW1wbGF0ZS5mbG93Q2hhcnRJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJwbW5TZXJ2aWNlLnNldERlZmF1bHRTZWxlY3RlZFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBRTVNDS0VkaXRvclRvYXN0U2VydmljZS5zdWNjZXNzKHRoaXMuTEFORy5RTVNDS0VESVRPUi5ERUxFVEVEKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFFNU0NLRWRpdG9yVG9hc3RTZXJ2aWNlLmVycm9yKHRoaXMuTEFORy5RTVNDS0VESVRPUi5ERUxFVEVfRkFJTEVEKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzZXRUZW1wbGF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMudGVtcFRlbXBsYXRlKSB7XG4gICAgICAgICAgICBjb25zdCBncmFwaCA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5HUkFQSF07XG4gICAgICAgICAgICBpZiAoZ3JhcGgpIHtcbiAgICAgICAgICAgICAgICBncmFwaC5mcm9tSlNPTih0aGlzLnRlbXBUZW1wbGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5icG1uU2VydmljZS5zZXREZWZhdWx0U2VsZWN0ZWRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19TRUxFQ1RFRF9URU1QTEFURV0gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddID0gbnVsbDtcbiAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9TSEFQRV9JRF0gPSAnJztcbiAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TSEFQRV9UWVBFXSA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2hvd0NvbmZpcm1EaWFsb2codGl0bGU6IHN0cmluZywgY29udGVudDogc3RyaW5nLCBpc01lc3NhZ2U6IGJvb2xlYW4sIGNhbGxiYWNrPzogKHJlc3VsdD86IGFueSkgPT4gdm9pZCkge1xuICAgICAgICBjb25zdCBkYXRhOiBRTVNDS0VkaXRvckRpYWxvZ0RhdGEgPSBuZXcgUU1TQ0tFZGl0b3JEaWFsb2dEYXRhKCk7XG4gICAgICAgIGRhdGEudGl0bGUgPSB0aXRsZTtcbiAgICAgICAgZGF0YS5jb250ZW50ID0gY29udGVudDtcbiAgICAgICAgZGF0YS5pc01lc3NhZ2UgPSBpc01lc3NhZ2U7XG4gICAgICAgIGRhdGEuaXNDbG9zZUJ0biA9IHRydWU7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JDb25maXJtQ29tcG9uZW50LCB7XG4gICAgICAgICAgICB3aWR0aDogJzUwMHB4JyxcbiAgICAgICAgICAgIG1pbkhlaWdodDogJzE3NXB4JyxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgIH0pO1xuICAgICAgICBkaWFsb2dSZWZcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlQWRkaXRpb25hbFdpZHRoKGdyYXBoOiBhbnksIHBhcGVyOiBhbnksIGNlbGxzOiBhbnlbXSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgYmJveCA9IGdyYXBoLmdldENlbGwoY2VsbHNbaV0pLmZpbmRWaWV3KHBhcGVyKS5nZXRCQm94VG9DYWxjdWxhdGVBZGRpdGlvbmFsV2lkdGgoKTtcbiAgICAgICAgICAgIGNlbGxzW2ldLmFkZGl0aW9uYWxXaWR0aCA9IDA7XG4gICAgICAgICAgICBpZiAoYmJveCAmJiBjZWxsc1tpXT8uc2l6ZT8ud2lkdGgpXG4gICAgICAgICAgICAgICAgY2VsbHNbaV0uYWRkaXRpb25hbFdpZHRoID0gKGJib3gud2lkdGggPiBjZWxsc1tpXS5zaXplLndpZHRoKSA/IChiYm94LndpZHRoIC0gY2VsbHNbaV0uc2l6ZS53aWR0aCkgOiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdFNoYXBlTW9kZWwoaWQ6IGFueSA9ICcnLCBpdGVtVHlwZTogYW55ID0gJycsIGl0ZW1OYW1lOiBzdHJpbmcgPSAnJywgc3RhdHVzTmFtZTogc3RyaW5nID0gbnVsbCkge1xuICAgICAgICB0aGlzLnNoYXBlTW9kZWwgPSBuZXcgU2hhcGVNb2RlbCgpO1xuICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkID0gaWQ7XG4gICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5pdGVtVHlwZSA9IGl0ZW1UeXBlO1xuICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uaXRlbU5hbWUgPSBpdGVtTmFtZTtcbiAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLnN0YXR1c05hbWUgPSBzdGF0dXNOYW1lO1xuICAgICAgICB0aGlzLnNoYXBlTW9kZWwudGFyZ2V0LnRhcmdldElkID0gVGFyZ2V0VHlwZU5hbWUubmV3O1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBjb25uZWN0aW9uIHByb2Nlc3MvZG9jdW1lbnRcbiAgICBpbml0UHJvY2Vzc0RvY3VtZW50Q29uZmlnQW5kTm9kZURhdGEoKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1RyZWVDb25maWcgPSB7XG4gICAgICAgICAgICBhbGxvd1NlbGVjdEZvbGRlcjogdHJ1ZSxcbiAgICAgICAgICAgIGFyZWFPZkN1cnJlbnRQcm9jZXNzOiAnJyxcbiAgICAgICAgICAgIHNob3dDaGVja0JveDogdHJ1ZSxcbiAgICAgICAgICAgIGFsbG93TXVsdGlwbGVDaGVjazogZmFsc2UsXG4gICAgICAgICAgICBvbmx5Q2hlY2tCb3hGb3JDaGlsZDogZmFsc2UsXG4gICAgICAgICAgICBtb2R1bGVJZDogRGF0YVR5cGUucHJvY2VzcyxcbiAgICAgICAgICAgIG9wZW5JY29uQ29sb3I6ICcjMTk1NEE5JyxcbiAgICAgICAgICAgIGNsb3NlSWNvbkNvbG9yOiAnI2E0YjBkZScsXG4gICAgICAgICAgICBzaW5nbGVTZWxlY3RlZE5vZGU6IHRydWUsXG4gICAgICAgICAgICBvbmx5Rm9sZGVyOiBmYWxzZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZG9jdW1lbnRUcmVlQ29uZmlnID0ge1xuICAgICAgICAgICAgYWxsb3dTZWxlY3RGb2xkZXI6IHRydWUsXG4gICAgICAgICAgICBhcmVhT2ZDdXJyZW50UHJvY2VzczogJycsXG4gICAgICAgICAgICBzaG93Q2hlY2tCb3g6IHRydWUsXG4gICAgICAgICAgICBtb2R1bGVJZDogRGF0YVR5cGUuZG9jdW1lbnQsXG4gICAgICAgICAgICBhbGxvd011bHRpcGxlQ2hlY2s6IGZhbHNlLFxuICAgICAgICAgICAgb25seUNoZWNrQm94Rm9yQ2hpbGQ6IGZhbHNlLFxuICAgICAgICAgICAgb3Blbkljb25Db2xvcjogJyMxOTU0QTknLFxuICAgICAgICAgICAgY2xvc2VJY29uQ29sb3I6ICcjNGFjYWZmJyxcbiAgICAgICAgICAgIHNpbmdsZVNlbGVjdGVkTm9kZTogdHJ1ZSxcbiAgICAgICAgICAgIG9ubHlGb2xkZXI6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubG9hZGluZ1JlbGF0ZWREYXRhID0gdHJ1ZTtcbiAgICAgICAgZm9ya0pvaW4odGhpcy5yZWxhdGVkU2VydmljZS5nZXRBcmVhQ2hpbGRyZW5Ob2RlKG51bGwsICF0aGlzLnNwbGl0VmlldywgZmFsc2UsIHRoaXMuZGF0YS5lbmFibGVkSW50ZXJjb25uZWN0ZWQpLFxuICAgICAgICAgICAgdGhpcy5yZWxhdGVkU2VydmljZS5nZXRGb2xkZXJDaGlsZHJlbihudWxsLCAhdGhpcy5zcGxpdFZpZXcsIGZhbHNlKVxuICAgICAgICApLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKFtyZXMxLCByZXMyXSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXMxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyZWFzID0gcmVzMS5tYXAoKHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHguaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogeC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiB4LnBhcmVudElkID09PSBndWlkSGVscGVyLmVtcHR5ID8gJycgOiB4LnBhcmVudElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c0lkOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c05hbWU6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlJZDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlUHJvY2Vzc0RhdGEgPSBhcmVhcztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocmVzMikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcmVhcyA9IHJlczIubWFwKCh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB4LmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogeC5uYW1lLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6ICF4LnBhcmVudEhhbmRib29rSWQgPyAnJyA6IHgucGFyZW50SGFuZGJvb2tJZC50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c0lkOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c05hbWU6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlJZDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiB0aGlzLmlzRm9sZGVyKHgudHlwZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxUeXBlOiB4LnR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVEb2N1bWVudERhdGEgPSBhcmVhcztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdSZWxhdGVkRGF0YSA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb3BlblByb2Nlc3NEb2N1bWVudCgpIHtcbiAgICAgICAgY29uc3QgZGF0YTogU2VsZWN0UHJvY2Vzc0RvY3VtZW50UG9wdXBEYXRhID0gbmV3IFNlbGVjdFByb2Nlc3NEb2N1bWVudFBvcHVwRGF0YSgpO1xuICAgICAgICBkYXRhLm1vZHVsZUlkID0gTW9kdWxlVHlwZS5kb2N1bWVudFByb2Nlc3M7XG4gICAgICAgIGRhdGEubW9kdWxlTmFtZSA9IHRoaXMuTEFORy5CUE1OLkRPQ1VNRU5UX1BST0NFU1M7XG4gICAgICAgIGRhdGEudHJlZURhdGExID0gdGhpcy50cmVlUHJvY2Vzc0RhdGE7XG4gICAgICAgIGRhdGEudHJlZURhdGEyID0gdGhpcy50cmVlRG9jdW1lbnREYXRhO1xuICAgICAgICBkYXRhLnRyZWVDb25maWcxID0gdGhpcy5wcm9jZXNzVHJlZUNvbmZpZztcbiAgICAgICAgZGF0YS50cmVlQ29uZmlnMiA9IHRoaXMuZG9jdW1lbnRUcmVlQ29uZmlnO1xuICAgICAgICBkYXRhLnNwbGl0VmlldyA9IHRoaXMuc3BsaXRWaWV3O1xuICAgICAgICBkYXRhLmlzU2VsZWN0T25lID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihTZWxlY3RQcm9jZXNzRG9jdW1lbnRQb3B1cENvbXBvbmVudCwge1xuICAgICAgICAgICAgd2lkdGg6ICc3NjhweCcsXG4gICAgICAgICAgICBtaW5IZWlnaHQ6ICc2OTBweCcsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tbWF0LWRpYWxvZy1jb250YWluZXInXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5vblNlYXJjaC5zdWJzY3JpYmUoYXN5bmMgKGtleXdvcmQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgaWYgKCFrZXl3b3JkIHx8IGtleXdvcmQudHJpbSgpID09PSAnJylcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGxldCBnZXRTZWFyY2hPcHRpb24gPSBuZXcgR2V0U2VhcmNoUHJvY2Vzc0RvY3VtZW50T3B0aW9uKHRydWUsIHRydWUsIHRoaXMuZGF0YS5lbmFibGVkSW50ZXJjb25uZWN0ZWQsIHRydWUsIHRydWUpO1xuICAgICAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0ID0gYXdhaXQgdGhpcy50cmVlU2VydmljZS5nZXRTZWFyY2hQcm9jZXNzRG9jdW1lbnQoa2V5d29yZC50cmltKCksIGdldFNlYXJjaE9wdGlvbik7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFByb2Nlc3NEb2N1bWVudEdsb2JhbFNlcnZpY2Uuc2V0U2VhcmNoUmVsYXRlZChzZWFyY2hSZXN1bHQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2Uub25FeHBhbmRQcm9jZXNzQXJlYS5zdWJzY3JpYmUoKGZvbGRlcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWxhdGVkU2VydmljZVxuICAgICAgICAgICAgICAgIC5nZXRBcmVhQ2hpbGRyZW5Ob2RlKGZvbGRlci5pZCwgIXRoaXMuc3BsaXRWaWV3LCBmYWxzZSwgdGhpcy5kYXRhLmVuYWJsZWRJbnRlcmNvbm5lY3RlZClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcmVhcyA9IHJlcy5tYXAoKHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogeC50eXBlID09PSBQcm9jZXNzTm9kZVR5cGUuQXJlYSA/IHguaWQudG9TdHJpbmcoKSA6IHgucHJvY2Vzc0lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB4Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiB4LnBhcmVudElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiB4LnR5cGUgPT09IFByb2Nlc3NOb2RlVHlwZS5BcmVhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNJZDogeC5zdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c05hbWU6IHguc3RhdHVzTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUlkOiB4LnR5cGUgPT09IFByb2Nlc3NOb2RlVHlwZS5BcmVhID8gMCA6IHguaXRlbU51bWJlcklkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtVHlwZTogeC50eXBlID09PSBQcm9jZXNzTm9kZVR5cGUuQXJlYSA/IERhdGFUeXBlLmFyZWEgOiB4LnR5cGUgPT09IFByb2Nlc3NOb2RlVHlwZS5Qcm9jZXNzID8gRGF0YVR5cGUucHJvY2VzcyA6IERhdGFUeXBlLnByb2Nlc3NJbnRlcmNvbm5lY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0UHJvY2Vzc0RvY3VtZW50R2xvYmFsU2VydmljZS5zZXRQcm9jZXNzQXJlYUNoaWxkcmVuKGFyZWFzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2Uub25FeHBhbmRGb2xkZXIuc3Vic2NyaWJlKChmb2xkZXIpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVsYXRlZFNlcnZpY2VcbiAgICAgICAgICAgICAgICAuZ2V0Rm9sZGVyQ2hpbGRyZW4oZm9sZGVyLmlkLCAhdGhpcy5zcGxpdFZpZXcsIGZhbHNlKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyZWFzID0gcmVzLm1hcCgoeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB4LmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHgubmFtZS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogdGhpcy5nZXRQYXJlbnRJZCh4KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzSWQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c05hbWU6IHguc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5SWQ6IHguaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IHRoaXMuaXNGb2xkZXIoeC50eXBlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxUeXBlOiB0aGlzLmlzRm9sZGVyKHgudHlwZSkgPyB4LnR5cGUgOiBmb2xkZXIubGV2ZWxUeXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RQcm9jZXNzRG9jdW1lbnRHbG9iYWxTZXJ2aWNlLnNldEZvbGRlckNoaWxkcmVuKGFyZWFzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2Uub25TZWxlY3RGb2xkZXJJdGVtLnN1YnNjcmliZSgoZm9sZGVyKSA9PiB7XG4gICAgICAgICAgICBpZiAoZm9sZGVyLml0ZW1UeXBlID09PSBEYXRhVHlwZS5hcmVhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxhdGVkU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAuZ2V0QXJlYUNvbnRlbnQoZm9sZGVyLmlkLCBmYWxzZSwgdGhpcy5lbmFibGVkSW50ZXJjb25uZWN0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogSVJlbGF0ZWRbXSA9IHJlcy5tYXAoKGVsZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGVsZS5wcm9jZXNzSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtTnVtYmVySWQ6IGVsZS5wcm9jZXNzTnVtYmVyLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtTmFtZTogZWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtVHlwZTogZWxlLnByb2Nlc3NDbGFzc2lmaWNhdGlvbiA9PT0gUHJvY2Vzc0NsYXNzaWZpY2F0aW9uVHlwZXMuUHJvY2Vzc2VzID8gRGF0YVR5cGUucHJvY2VzcyA6IERhdGFUeXBlLnByb2Nlc3NJbnRlcmNvbm5lY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogZWxlLnN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c05hbWU6IHRoaXMuZ2V0RGlzbGF5TmFtZU9mUHJvY2Vzc1N0YXR1cyhlbGUuc3RhdHVzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiBmb2xkZXIuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROYW1lOiBmb2xkZXIuaXRlbU5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFByb2Nlc3NEb2N1bWVudEdsb2JhbFNlcnZpY2Uuc2V0U3BsaXR2aWV3VmFsdWUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGRlci5pdGVtVHlwZSA9PT0gRGF0YVR5cGUuZm9sZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxhdGVkU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAuZ2V0Rm9sZGVyQ29udGVudChmb2xkZXIuaWQpXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogSVJlbGF0ZWRbXSA9IHJlcy5tYXAoKGVsZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGVsZS5pZC50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbU51bWJlcklkOiBlbGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiBlbGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1UeXBlOiBEYXRhVHlwZS5kb2N1bWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c05hbWU6IGVsZS5zdGF0dXNOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IGZvbGRlci5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5hbWU6IGZvbGRlci5pdGVtTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsVHlwZTogZm9sZGVyLmxldmVsVHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0UHJvY2Vzc0RvY3VtZW50R2xvYmFsU2VydmljZS5zZXRTcGxpdHZpZXdWYWx1ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9iaiA9IHJlc3VsdFswXTtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRTaGFwZU1vZGVsKChvYmouaXRlbVR5cGUgPT09IERhdGFUeXBlLnByb2Nlc3MgfHwgb2JqLml0ZW1UeXBlID09PSBEYXRhVHlwZS5wcm9jZXNzSW50ZXJjb25uZWN0ZWQpID8gb2JqLml0ZW1OdW1iZXJJZCA6IG9iai5pZCwgb2JqLml0ZW1UeXBlLCBvYmouaXRlbU5hbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gdGhpcy5nZXRMaW5rVVJMKHRoaXMuc2hhcGVNb2RlbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5TVkdJY29uID0gdGhpcy5nZXRTaGFwZU1vZGVsSWNvbkJ5RGF0YVR5cGUodGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLml0ZW1UeXBlKTtcbiAgICAgICAgICAgICAgICBpZiAob2JqLml0ZW1UeXBlID09PSBEYXRhVHlwZS5kb2N1bWVudCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEFuY2hvckRvY3VtZW50KG9iai5pZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHNhdmUgY29ubmVjdGlvblxuICAgICAgICAgICAgICAgIHRoaXMubWFwU2hhcGVEYXRhKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNob3dTaGFwZUNvbm5lY3Rpb25WYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNoYXBlQ29ubmVjdExhYmVsID0gdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkNPTk5FQ1RFRF9ET0NVTUVOVF9QUk9DRVNTO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBEb2N1bW5ldCBQcm9jZXNzIFN1cHBvcnQgRnVuY1xuICAgIGlzRm9sZGVyKHR5cGU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBkb2N1bWVudFR5cGVzID0gW1xuICAgICAgICAgICAgRG9jdW1lbnROb2RlVHlwZS5Eb2N1bWVudCxcbiAgICAgICAgICAgIERvY3VtZW50Tm9kZVR5cGUuRmlsZURvY3VtZW50LFxuICAgICAgICAgICAgRG9jdW1lbnROb2RlVHlwZS5MaW5rRG9jdW1lbnQsXG4gICAgICAgICAgICBEb2N1bWVudE5vZGVUeXBlLlNob3J0Y3V0RG9jdW1lbnRcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuICFkb2N1bWVudFR5cGVzLmluY2x1ZGVzKHR5cGUpO1xuICAgIH1cblxuICAgIGdldFBhcmVudElkKGl0ZW0pIHtcbiAgICAgICAgaWYgKHRoaXMuaXNGb2xkZXIoaXRlbS50eXBlKSkge1xuICAgICAgICAgICAgcmV0dXJuICFpdGVtLnBhcmVudEhhbmRib29rSWQgPyAnJyA6IGl0ZW0ucGFyZW50SGFuZGJvb2tJZC50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhaXRlbS5wYXJlbnRGb2xkZXJJZCA/ICcnIDogaXRlbS5wYXJlbnRGb2xkZXJJZC50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGdldERpc2xheU5hbWVPZlByb2Nlc3NTdGF0dXMoc3RhdHVzOiBudW1iZXIpIHtcbiAgICAgICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgICAgICAgIGNhc2UgUHJvY2Vzc1N0YXR1cy5pblByb2dyZXNzOlxuICAgICAgICAgICAgICAgIHJldHVybiAnQ09NTU9OLklOX1BST0dSRVNTJztcbiAgICAgICAgICAgIGNhc2UgUHJvY2Vzc1N0YXR1cy5zZW5kVG9BcHByb3ZhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5TRU5EX1RPX0FQUFJPVkFMJztcbiAgICAgICAgICAgIGNhc2UgUHJvY2Vzc1N0YXR1cy5hcHByb3ZlZDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5BUFBST1ZFRCc7XG4gICAgICAgICAgICBjYXNlIFByb2Nlc3NTdGF0dXMudW5kZXJSZXZpc2lvbjpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5VTkRFUl9SRVZJU0lPTic7XG4gICAgICAgICAgICBjYXNlIFByb2Nlc3NTdGF0dXMuZGVsZXRlZDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5ERUxFVEVEJztcbiAgICAgICAgICAgIGNhc2UgUHJvY2Vzc1N0YXR1cy5yZXZpZXdPckhlYXJpbmc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdDT01NT04uSEVBUklORyc7XG4gICAgICAgICAgICBjYXNlIFByb2Nlc3NTdGF0dXMuYXJjaGl2ZWQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdDT01NT04uQVJDSElWRUQnO1xuICAgICAgICAgICAgY2FzZSBQcm9jZXNzU3RhdHVzLmhlYXJpbmc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdQUk9DRVNTLkhFQVJJTkcnO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5VTktOT1dOJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldExpbmtVUkwoc2hhcGVNb2RlbDogU2hhcGVNb2RlbCkge1xuICAgICAgICBzd2l0Y2ggKHNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uaXRlbVR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuZG9jdW1lbnQ6XG4gICAgICAgICAgICAgICAgc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gYC9kb2N1bWVudC8ke3NoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkfWA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLnByb2Nlc3M6XG4gICAgICAgICAgICAgICAgc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gYC9wcm9jZXNzLWRldGFpbC8ke3NoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkfWA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLmFyZWE6XG4gICAgICAgICAgICAgICAgc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gYC9hcmVhL2RldGFpbC8ke3NoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkfWA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLmZvbGRlcjpcbiAgICAgICAgICAgICAgICBzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmwgPSBgL2ZvbGRlci8ke3NoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkfWA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLnByb2Nlc3NJbnRlcmNvbm5lY3RlZDpcbiAgICAgICAgICAgICAgICBzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmwgPSBgL3Byb2Nlc3MtaW50ZXJjb25uZWN0ZWQvJHtzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmRpc3BsYXlJZH1gO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmw7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIEF0dGFjaG1lbnQgXG4gICAgb3BlbkF0dGFjaG1lbnREaWFsb2coKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBuZXcgUU1TQ0tFZGl0b3JQYXJhbXRlcigpO1xuICAgICAgICBkYXRhLm1vZHVsZSA9IHRoaXMubW9kdWxlO1xuICAgICAgICBkYXRhLmVudGl0eUlkID0gdGhpcy5lbnRpdHlJZDtcbiAgICAgICAgY29uc3QgZGlhbG9nVGVtcGxhdGUgPSB0aGlzLmRpYWxvZy5vcGVuKExpbmtBdHRhY2htZW50Q29tcG9uZW50LCB7XG4gICAgICAgICAgICB3aWR0aDogJzY1MHB4JyxcbiAgICAgICAgICAgIGhlaWdodDogJzY1MHB4JyxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0U2hhcGVNb2RlbChudWxsLCAwLCByZXN1bHQudGl0bGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ubGlua1VybCA9IHJlc3VsdC51cmw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkID0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5BdHRhY2htZW50O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ubWF0SWNvbiA9ICd0ZXh0X3NuaXBwZXQnO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFwU2hhcGVEYXRhKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNob3dTaGFwZUNvbm5lY3Rpb25WYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaGFwZUNvbm5lY3RMYWJlbCA9IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5DT05ORUNURURfQVRUQUNITUVOVDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRTaGFwZUFjdGl2aXR5KGV2ZW50OiBhbnkpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxsVmlldyA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddO1xuICAgICAgICBpZiAoISFzZWxlY3RlZENlbGxWaWV3KSB7XG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gc2VsZWN0ZWRDZWxsVmlldy5tb2RlbC5hdHRyaWJ1dGVzO1xuICAgICAgICAgICAgaWYgKCEhYXR0cmlidXRlcy5saW5rVXJsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXREYXRhRnJvbVNoYXBlQXRycmlidXRlKGF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC50YXJnZXQudGFyZ2V0SWQgPSBhdHRyaWJ1dGVzLmxpbmtUYXJnZXQ7XG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNob3dTaGFwZUNvbm5lY3Rpb25WYWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyBTZXQgc2hhcGUgY29ubmVjdCBsYWJlbFxuICAgICAgICAgICAgICAgIGlmICghIXRoaXMuc2hhcGVNb2RlbCkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuc2hhcGVNb2RlbC5zaGFwZT8uY29ubmVjdGlvblR5cGVJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaGFwZUNvbm5lY3RMYWJlbCA9IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5DT05ORUNURURfRE9DVU1FTlRfUFJPQ0VTUztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5BdHRhY2htZW50OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaGFwZUNvbm5lY3RMYWJlbCA9IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5DT05ORUNURURfQVRUQUNITUVOVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5MaW5rOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaGFwZUNvbm5lY3RMYWJlbCA9IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5DT05ORUNURURfTElOSztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1NoYXBlQ29ubmVjdGlvblZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXREYXRhRnJvbVNoYXBlQXRycmlidXRlKHNoYXBlQXR0cmlidXRlOiBhbnkpIHtcbiAgICAgICAgaWYgKCEhc2hhcGVBdHRyaWJ1dGUubGlua1VybCkge1xuICAgICAgICAgICAgdGhpcy5pbml0U2hhcGVNb2RlbCgnJywgJycsIHNoYXBlQXR0cmlidXRlLmxpbmtUaXRsZSk7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSBzaGFwZUF0dHJpYnV0ZS5saW5rVXJsO1xuICAgICAgICAgICAgY29uc3QgaGFzaEluZGV4ID0gdXJsLmluZGV4T2YoJyMnKTtcbiAgICAgICAgICAgIGxldCBkb2N1bWVudFR5cGUgPSBudWxsO1xuICAgICAgICAgICAgaWYgKCEhc2hhcGVBdHRyaWJ1dGUuY29ubmVjdGlvblR5cGVJZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkID0gc2hhcGVBdHRyaWJ1dGUuY29ubmVjdGlvblR5cGVJZDtcbiAgICAgICAgICAgICAgICBkb2N1bWVudFR5cGUgPSB0aGlzLmdldFJlbGF0ZWRJdGVtQnlTaGFwZUNvbm5lY3Rpb25UeXBlKHNoYXBlQXR0cmlidXRlLmNvbm5lY3Rpb25UeXBlSWQsIHVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudFR5cGUgPSB0aGlzLmdldERvY3VtZW50VHlwZSh1cmwpO1xuICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudFR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkF0dGFjaG1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsaW5rSWQgPSB0aGlzLmdldExpbmtJZCh1cmwsIGRvY3VtZW50VHlwZSk7XG4gICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkID0gbGlua0lkID8gK2xpbmtJZCA6IC0xO1xuICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLml0ZW1UeXBlID0gZG9jdW1lbnRUeXBlO1xuICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnRhcmdldC50YXJnZXRJZCA9IHNoYXBlQXR0cmlidXRlLmxpbmtUYXJnZXQ7XG4gICAgICAgICAgICAvLyBoYW5kbGUgbG9nb1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkID09PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkF0dGFjaG1lbnQpXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLm1hdEljb24gPSAndGV4dF9zbmlwcGV0JztcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5TVkdJY29uID0gdGhpcy5nZXRTaGFwZU1vZGVsSWNvbkJ5RGF0YVR5cGUoZG9jdW1lbnRUeXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGhhbmRsZSBMaW5rXG4gICAgICAgICAgICBpZiAodGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPT09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuTGluaykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5saW5rLmxpbmsgPSB1cmw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoISFsaW5rSWQgJiYgZG9jdW1lbnRUeXBlID09IERhdGFUeXBlLmRvY3VtZW50ICYmIGhhc2hJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLmFuY2hvci5hbmNob3JWYWx1ZSA9IHVybC5zdWJzdHIoaGFzaEluZGV4ICsgMSwgdXJsLmxlbmd0aCAtIGhhc2hJbmRleCk7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBbmNob3JEb2N1bWVudChsaW5rSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0TGlua0lkKHVybDogc3RyaW5nLCB0eXBlOiBEYXRhVHlwZSkge1xuICAgICAgICBsZXQgcGFydGlhbFVybEluZGV4ID0gMDtcbiAgICAgICAgbGV0IHBhcnRpYWxVcmxMZW5ndGggPSAwO1xuICAgICAgICBsZXQgaWQgPSAnJztcbiAgICAgICAgbGV0IGZyb20gPSAwO1xuICAgICAgICBsZXQgdXJsTG93ZXJDYXNlID0gISF1cmwgPyB1cmwudG9Mb3dlckNhc2UoKSA6ICcnO1xuXG4gICAgICAgIGNvbnN0IHBhcnRpYWxVcmwgPSB0aGlzLmdldFBhcnRpYWxVcmwodHlwZSkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgaGFzaEluZGV4ID0gdXJsTG93ZXJDYXNlLmluZGV4T2YoJyMnKTtcblxuICAgICAgICBpZiAoISFwYXJ0aWFsVXJsKSB7XG4gICAgICAgICAgICBwYXJ0aWFsVXJsSW5kZXggPSB1cmxMb3dlckNhc2UuaW5kZXhPZihwYXJ0aWFsVXJsKTtcblxuICAgICAgICAgICAgcGFydGlhbFVybExlbmd0aCA9IHBhcnRpYWxVcmwubGVuZ3RoO1xuICAgICAgICAgICAgZnJvbSA9IHBhcnRpYWxVcmxJbmRleCArIHBhcnRpYWxVcmxMZW5ndGg7XG5cbiAgICAgICAgICAgIGlmICh0eXBlID09IERhdGFUeXBlLmRvY3VtZW50ICYmIGhhc2hJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgaWQgPSB1cmxMb3dlckNhc2Uuc3Vic3RyKGZyb20sIGhhc2hJbmRleCAtIGZyb20pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gdXJsTG93ZXJDYXNlLnN1YnN0cihmcm9tKS5pbmRleE9mKCcvJyk7XG4gICAgICAgICAgICAgICAgaWYgKGxlbmd0aCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWQgPSB1cmxMb3dlckNhc2Uuc3Vic3RyKGZyb20pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWQgPSB1cmxMb3dlckNhc2Uuc3Vic3RyKGZyb20sIGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGUgPT0gRGF0YVR5cGUuZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFyc2VJbnQoaWQsIDEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgICAgICBpZCA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpZDtcbiAgICB9XG5cbiAgICBnZXRQYXJ0aWFsVXJsKHR5cGU6IERhdGFUeXBlKSB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5kb2N1bWVudDpcbiAgICAgICAgICAgICAgICByZXR1cm4gQ0tFZGl0b3JMaW5rQ29uc3QuRE9DVU1FTlRfUEFSVElBTF9VUkw7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLnByb2Nlc3M6XG4gICAgICAgICAgICAgICAgcmV0dXJuIENLRWRpdG9yTGlua0NvbnN0LlBST0NFU1NfUEFSVElBTF9VUkw7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLnByb2Nlc3NJbnRlcmNvbm5lY3RlZDpcbiAgICAgICAgICAgICAgICByZXR1cm4gQ0tFZGl0b3JMaW5rQ29uc3QuUFJPQ0VTU19JTlRFUkNPTk5FQ1RFRF9QQVJUSUFMX1VSTDtcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuYXJlYTpcbiAgICAgICAgICAgICAgICByZXR1cm4gQ0tFZGl0b3JMaW5rQ29uc3QuQVJFQV9QQVJUSUFMX1VSTDtcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuZm9sZGVyOlxuICAgICAgICAgICAgICAgIHJldHVybiBDS0VkaXRvckxpbmtDb25zdC5GT0xERVJfUEFSVElBTF9VUkw7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFJlbGF0ZWRJdGVtQnlTaGFwZUNvbm5lY3Rpb25UeXBlKGNvbm5lY3Rpb25UeXBlSWQ6IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUsIHVybDogc3RyaW5nKSB7XG4gICAgICAgIHN3aXRjaCAoY29ubmVjdGlvblR5cGVJZCkge1xuICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERvY3VtZW50VHlwZSh1cmwpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldERvY3VtZW50VHlwZSh1cmw6IHN0cmluZykge1xuICAgICAgICBpZiAodXJsLmluZGV4T2YoQ0tFZGl0b3JMaW5rQ29uc3QuRE9DVU1FTlRfUEFSVElBTF9VUkwpID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBEYXRhVHlwZS5kb2N1bWVudDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1cmwuaW5kZXhPZihDS0VkaXRvckxpbmtDb25zdC5QUk9DRVNTX1BBUlRJQUxfVVJMKSA+IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gRGF0YVR5cGUucHJvY2VzcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1cmwuaW5kZXhPZihDS0VkaXRvckxpbmtDb25zdC5QUk9DRVNTX0lOVEVSQ09OTkVDVEVEX1BBUlRJQUxfVVJMKSA+IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gRGF0YVR5cGUucHJvY2Vzc0ludGVyY29ubmVjdGVkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVybC5pbmRleE9mKENLRWRpdG9yTGlua0NvbnN0LkFSRUFfUEFSVElBTF9VUkwpID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBEYXRhVHlwZS5hcmVhO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVybC5pbmRleE9mKENLRWRpdG9yTGlua0NvbnN0LkZPTERFUl9QQVJUSUFMX1VSTCkgPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIERhdGFUeXBlLmZvbGRlcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBnZXRBbmNob3JEb2N1bWVudChkb2N1bWVudElkKSB7XG4gICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5pc0FuY2hvckxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmxpbmtTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0QW5jaG9yRG9jdW1lbnRMaXN0KGRvY3VtZW50SWQpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZG9jdW1lbnRzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hbmNob3JzID0gdGhpcy5leHRyYWN0RG9jdW1lbnRBbmNob3JzKGRvY3VtZW50cyB8fCBbXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLmlzQW5jaG9yTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZXh0cmFjdERvY3VtZW50QW5jaG9ycyhhbmNob3JEb2N1bWVudDogUU1TQ0tFZGl0b3JMaW5rQW5jaG9yRG9jdW1lbnRbXSkge1xuICAgICAgICBjb25zdCBhbmNob3JzOiBRTVNCUE1OU2hhcGVBbmNob3JbXSA9IFt7IHZhbHVlOiAwLCB2aWV3VmFsdWU6ICcnLCBhbmNob3JWYWx1ZTogTGlua0FuY2hvci5CbGFuayB9XTtcbiAgICAgICAgbGV0IGlkID0gMztcbiAgICAgICAgaWYgKGFuY2hvckRvY3VtZW50KSB7XG4gICAgICAgICAgICBhbmNob3JEb2N1bWVudC5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9IGUucmljaFRleHQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZG9tQ29udGVudCA9IGRpdjtcbiAgICAgICAgICAgICAgICBjb25zdCBhVGFncyA9IGRvbUNvbnRlbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2EnKTtcbiAgICAgICAgICAgICAgICBpZiAoYVRhZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhVGFncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFnID0gYVRhZ3NbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGFuY2hvcnMuZmluZEluZGV4KCh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4LmFuY2hvclZhbHVlID09PSB0YWcubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3VmFsdWU6IHRhZy5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yVmFsdWU6IHRhZy5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGFuY2hvcnMucHVzaCh7XG4gICAgICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgICAgIHZpZXdWYWx1ZTogdGhpcy5MQU5HLlFNU0NLRURJVE9SLkFOQ0hPUl9BVFRBQ0hNRU5ULFxuICAgICAgICAgICAgYW5jaG9yVmFsdWU6IExpbmtBbmNob3IuQXR0YWNobWVudFxuICAgICAgICB9KTtcbiAgICAgICAgYW5jaG9ycy5wdXNoKHtcbiAgICAgICAgICAgIHZhbHVlOiAyLFxuICAgICAgICAgICAgdmlld1ZhbHVlOiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuQU5DSE9SX1JFTEFURURfRE9DVU1FTlQsXG4gICAgICAgICAgICBhbmNob3JWYWx1ZTogTGlua0FuY2hvci5SZWxhdGVkXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYW5jaG9ycztcbiAgICB9XG5cbiAgICBnZXRTaGFwZU1vZGVsSWNvbkJ5RGF0YVR5cGUoZGF0YVR5cGU6IERhdGFUeXBlKSB7XG4gICAgICAgIHN3aXRjaCAoZGF0YVR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuZm9sZGVyOlxuICAgICAgICAgICAgICAgIHJldHVybiAnZm9sZGVyX291dGxpbmVkJztcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuZG9jdW1lbnQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdkb2N1bWVudCc7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLmFyZWE6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdwcm9jZXNzX2FyZWFfb3V0bGluZWQnO1xuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5wcm9jZXNzOlxuICAgICAgICAgICAgICAgIHJldHVybiAncHJvY2Vzcyc7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLnByb2Nlc3NJbnRlcmNvbm5lY3RlZDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3Byb2Nlc3NfaW50ZXJjb25uZWN0ZWQnO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2ZvbGRlcl9vdXRsaW5lZCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWxvYWRBbmNob3JEb2N1bWVudCgpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxsVmlldyA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddO1xuICAgICAgICBpZiAoISFzZWxlY3RlZENlbGxWaWV3KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zaGFwZU1vZGVsICYmIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbSAmJiB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uaXRlbVR5cGUgPT09IERhdGFUeXBlLmRvY3VtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBbmNob3JEb2N1bWVudCh0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9wZW5MaW5rKCkge1xuICAgICAgICBjb25zdCBkYXRhID0gbmV3IFNoYXBlTGluaygpO1xuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEJQTU5MaW5rQ29tcG9uZW50LCB7XG4gICAgICAgICAgICB3aWR0aDogJzM1MHB4JyxcbiAgICAgICAgICAgIGhlaWdodDogJzI0NXB4JyxcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICAgICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLW1hdC1kaWFsb2ctY29udGFpbmVyJyxcbiAgICAgICAgICAgIGRhdGFcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChuZXdMaW5rKSA9PiB7XG4gICAgICAgICAgICBpZiAobmV3TGluaykge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNoYXBlTW9kZWwoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCA9IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuTGluaztcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwubGluay5saW5rID0gbmV3TGluay5saW5rO1xuICAgICAgICAgICAgICAgIHRoaXMubWFwU2hhcGVEYXRhKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNob3dTaGFwZUNvbm5lY3Rpb25WYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNoYXBlQ29ubmVjdExhYmVsID0gdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkNPTk5FQ1RFRF9MSU5LO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBkZWxldGVDb25uZWN0aW9uKHNlbGVjdGVkQ29ubmVjdGlvblR5cGU6IGFueSkge1xuICAgICAgICBsZXQgdGl0bGUgPSB0aGlzLkxBTkcuQlBNTi5ERUxFVEVfQVRUQUNITUVOVDtcbiAgICAgICAgbGV0IGNvbnRlbnQgPSB0aGlzLkxBTkcuQlBNTi5DT05GSVJNX0RFTEVURV9BVFRBQ0hNRU5UO1xuICAgICAgICBpZiAoc2VsZWN0ZWRDb25uZWN0aW9uVHlwZSA9PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzKSB7XG4gICAgICAgICAgICB0aXRsZSA9IHRoaXMuTEFORy5CUE1OLkRFTEVURV9ET0NVTUVOVF9PUl9QUk9DRVNTO1xuICAgICAgICAgICAgY29udGVudCA9IHRoaXMuTEFORy5RTVNDS0VESVRPUl9NRVNTQUdFLkNPTkZJUk1fREVMRVRFX0RPQ1VNRU5UX09SX1BST0NFU1M7XG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRDb25uZWN0aW9uVHlwZSA9PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkxpbmspIHtcbiAgICAgICAgICAgIHRpdGxlID0gdGhpcy5MQU5HLkJQTU4uREVMRVRFX0xJTks7XG4gICAgICAgICAgICBjb250ZW50ID0gdGhpcy5MQU5HLlFNU0NLRURJVE9SX01FU1NBR0UuQ09ORklSTV9ERUxFVEVfQVRUQUNITUVOVDtcbiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZENvbm5lY3Rpb25UeXBlID09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQXR0YWNobWVudCkge1xuICAgICAgICAgICAgdGl0bGUgPSB0aGlzLkxBTkcuQlBNTi5ERUxFVEVfQVRUQUNITUVOVDtcbiAgICAgICAgICAgIGNvbnRlbnQgPSB0aGlzLkxBTkcuUU1TQ0tFRElUT1JfTUVTU0FHRS5DT05GSVJNX0RFTEVURV9BVFRBQ0hNRU5UO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2hvd0NvbmZpcm1EaWFsb2codGl0bGUsIGNvbnRlbnQsIGZhbHNlLCAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSB0cnVlIHx8ICh0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcgJiYgdmFsdWUuaXNDb25maXJtZWQgPT0gdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsID0gbmV3IFNoYXBlTW9kZWwoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNob3dTaGFwZUNvbm5lY3Rpb25WYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoISF3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10ubW9kZWwucmVtb3ZlUHJvcCgnbGlua1VybCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10ubW9kZWwucmVtb3ZlUHJvcCgnbGlua1RhcmdldCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10ubW9kZWwucmVtb3ZlUHJvcCgnbGlua1RpdGxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXS5tb2RlbC5yZW1vdmVQcm9wKCdjb25uZWN0aW9uVHlwZUlkJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgc2F2ZVNoYXBlVGFyZ2V0KHRhcmdldElkOiBhbnkpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxsVmlldyA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddO1xuICAgICAgICBpZiAoISFzZWxlY3RlZENlbGxWaWV3KSB7XG4gICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwudGFyZ2V0LnRhcmdldElkID0gdGFyZ2V0SWQ7XG4gICAgICAgICAgICBzZWxlY3RlZENlbGxWaWV3Lm1vZGVsLnByb3AoJ2xpbmtUYXJnZXQnLCB0YXJnZXRJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzYXZlU2hhcGVBbmNob3IoYW5jaG9yVmFsdWU6IGFueSkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxWaWV3ID0gd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV107XG4gICAgICAgIGlmICghIXNlbGVjdGVkQ2VsbFZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5hbmNob3IuYW5jaG9yVmFsdWUgPSBhbmNob3JWYWx1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uaXRlbVR5cGUgPT09IERhdGFUeXBlLmRvY3VtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmwgPSBgJHtDS0VkaXRvckxpbmtDb25zdC5ET0NVTUVOVF9QQVJUSUFMX1VSTH0ke3RoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5kaXNwbGF5SWR9IyR7YW5jaG9yVmFsdWV9YFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2VsbFZpZXcubW9kZWwucHJvcCgnbGlua1VybCcsIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG1hcFNoYXBlRGF0YSgpIHtcbiAgICAgICAgaWYgKCEhd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10pIHtcbiAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddLm1vZGVsLnByb3AoJ2xpbmtVcmwnLCB0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCAhPT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5MaW5rXG4gICAgICAgICAgICAgICAgPyB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ubGlua1VybCA6IHRoaXMuc2hhcGVNb2RlbC5saW5rLmxpbmspO1xuICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10ubW9kZWwucHJvcCgnbGlua1RhcmdldCcsIFRhcmdldFR5cGVOYW1lLm5ldyk7XG4gICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXS5tb2RlbC5wcm9wKCdsaW5rVGl0bGUnLCB0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCAhPT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5MaW5rXG4gICAgICAgICAgICAgICAgPyB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uaXRlbU5hbWUgOiAnJyk7XG4gICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXS5tb2RlbC5wcm9wKCdjb25uZWN0aW9uVHlwZUlkJywgdGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
1143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWNrZWRpdG9yLWJwbW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcW1zLWFuZ3VsYXIvc3JjL2xpYi9xbXMtY2tlZGl0b3ItY29tcG9uZW50cy9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1icG1uL3Ftcy1ja2VkaXRvci1icG1uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBZ0IsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ2hGLE9BQU8sVUFBVSxNQUFNLGdDQUFnQyxDQUFDO0FBRXhELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN0RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN6RyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN6RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDdkUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDbkcsT0FBTyxFQUFF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QyxVQUFVLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzVHO0lBQ0wsQ0FBQzs7O1lBN29DSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLG1CQUFtQjtnQkFDN0IsdzhDQUFpRDs7YUFFcEQ7OztZQTNEUSxTQUFTO1lBRVQsdUJBQXVCO1lBVXZCLFdBQVc7WUFEWCx5QkFBeUI7WUFJekIsc0JBQXNCO1lBQ3RCLHdCQUF3QjtZQUV4Qix3QkFBd0I7WUFPeEIscUNBQXFDO1lBTXJDLGdDQUFnQztZQS9CckIsWUFBWTtZQWdEdkIsc0JBQXNCO1lBS3RCLHlCQUF5QjtZQUp6QixzQkFBc0I7WUFDdEIsWUFBWTtZQUNaLGVBQWU7WUFyQ2YsbUJBQW1CLHVCQXNHbkIsTUFBTSxTQUFDLGVBQWU7Ozt1QkF0RDFCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBJbnB1dCwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0aW9uLXJlZ2lzdHJ5LnNlcnZpY2VcIjtcbmltcG9ydCB7IENLRWRpdG9yRXZlbnRDb25zdCB9IGZyb20gXCIuLi8uLi9jb21tb24vY29uc3RhbnRzL2NrZWRpdG9yRXZlbnQuY29uc3RhbnRcIjtcbmltcG9ydCB7IEZsb3dDaGFydENvbnN0IH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9jb25zdGFudHMvY2tlZGl0b3JGbG93Y2hhcnQuY29uc3RcIjtcbmltcG9ydCBndWlkSGVscGVyIGZyb20gXCIuLi8uLi9jb21tb24vaGVscGVyL2d1aWRIZWxwZXJcIjtcbmltcG9ydCB7IFFNU0NLRWRpdG9yQnBtblRlbXBsYXRlIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLWJwbW4tdGVtcGxhdGUubW9kZWxcIjtcbmltcG9ydCB7IFFNU0NLRWRpdG9yQnBtbiB9IGZyb20gXCIuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci1icG1uLm1vZGVsXCI7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckRpYWxvZ0RhdGEgfSBmcm9tIFwiLi4vLi4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItZGlhbG9nLm1vZGVsXCI7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckNvbmZpcm1Db21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tbW9uL21vZHVsZS9jb25maXJtL3Ftcy1ja2VkaXRvci1jb25maXJtLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCYXNlQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL3Ftcy1ja2VkaXRvci1iYXNlLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCcG1uQXBpU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9xbXMtY2tlZGl0b3ItYnBtbi1hcGkuc2VydmljZVwiO1xuaW1wb3J0IHsgQnBtblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvcW1zLWNrZWRpdG9yLWJwbW4uc2VydmljZVwiO1xuaW1wb3J0IHsgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9lbnVtcy9zaGFwZS1mbG93LWNoYXJ0LWNvbm5lY3Rpb24tdHlwZSc7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckJwbW5EYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Ftcy1ja2VkaXRvci1icG1uLWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JMaW5rU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci1saW5rLnNlcnZpY2UnO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JVcGxvYWRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci11cGxvYWQuc2VydmljZVwiO1xuaW1wb3J0IHsgYmFzZTY0U3RyaW5nVG9GaWxlIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9oZWxwZXIvZmlsZUhlbHBlclwiO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JDb21tb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci1jb21tb24uc2VydmljZXNcIjtcbmltcG9ydCB7IFFNU0JQTU5Db25maWcgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3Ftcy1icG1uLWNvbmZpZy5tb2RlbFwiO1xuaW1wb3J0IFFNU0NLRWRpdG9yQlBNTkZ1bmN0aW9ucyBmcm9tICcuLy4uLy4uL2NvbW1vbi9mdW5jdGlvbnMvYnBtbi5mdW5jdGlvbic7XG5pbXBvcnQgeyBEaWFncmFtVGVtcGxhdGVzIH0gZnJvbSBcIi4uLy4uL21vZGVscy9kaWFncmFtLXRlbXBsYXRlLm1vZGVsXCI7XG5pbXBvcnQgeyBUcmVlQ29uZmlnLCBUcmVlTW9kZWwgfSBmcm9tIFwiLi4vLi4vLi4vY29tcG9uZW50cy90cmVlXCI7XG5pbXBvcnQgeyBEYXRhVHlwZSB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vZW51bS9kYXRhLXR5cGUuZW51bVwiO1xuaW1wb3J0IHsgRmxvd2NoYXJ0Vmlld01vZGUgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2VudW1zL2Zsb3djaGFydC12aWV3LW1vZGUuZW51bVwiO1xuaW1wb3J0IHsgUU1TU2VsZWN0UHJvY2Vzc0RvY3VtZW50R2xvYmFsU2VydmljZSwgU2VsZWN0UHJvY2Vzc0RvY3VtZW50UG9wdXBDb21wb25lbnQsIFNlbGVjdFByb2Nlc3NEb2N1bWVudFBvcHVwRGF0YSB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL3NlbGVjdC1wcm9jZXNzLWRvY3VtZW50XCI7XG5pbXBvcnQgeyBNb2R1bGVUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9lbnVtL21vZHVsZS10eXBlLmVudW1cIjtcbmltcG9ydCB7IFByb2Nlc3NOb2RlVHlwZSB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vZW51bS9wcm9jZXNzLW5vZGUtdHlwZS5lbnVtXCI7XG5pbXBvcnQgeyBJUmVsYXRlZCB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL3JlbGF0ZWQvbW9kZWwvcmVsYXRlZC1kYXRhLm1vZGVsXCI7XG5pbXBvcnQgeyBEb2N1bWVudE5vZGVUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9lbnVtL2RvY3VtZW50LW5vZGUtdHlwZS5lbnVtXCI7XG5pbXBvcnQgeyBQcm9jZXNzU3RhdHVzIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9lbnVtL3Byb2Nlc3NTdGF0dXMuZW51bVwiO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCUE1OQ29ubmVjdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvcW1zLWNrZWRpdG9yLWJwbW4tY29ubmVjdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBEb2N1bWVudFRyZWVOb2RlRGF0YSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvZG9jdW1lbnQtdHJlZS1ub2RlLWRhdGEubW9kZWxcIjtcbmltcG9ydCB7IFNoYXBlTW9kZWwgfSBmcm9tIFwiLi4vLi4vLi4vY29tcG9uZW50cy9xbXMtYnBtbi9tb2RlbHMvc2hhcGUtbW9kZWwubW9kZWxcIjtcbmltcG9ydCB7IFRhcmdldFR5cGVOYW1lIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9lbnVtcy90YXJnZXQtdHlwZS5lbnVtXCI7XG5pbXBvcnQgeyBRTVNCUE1OU2hhcGVUYXJnZXQgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3Ftcy1icG1uLXNoYXBlLXRhcmdldFwiO1xuaW1wb3J0IHsgQ0tFZGl0b3JMaW5rQ29uc3QgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2NvbnN0YW50cy9ja2VkaXRvckxpbmsuY29uc3RhbnRcIjtcbmltcG9ydCB7IGZvcmtKb2luLCBvZiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBMaW5rQXR0YWNobWVudENvbXBvbmVudCB9IGZyb20gXCIuLi9xbXMtY2tlZGl0b3ItbGluay9hdHRhY2htZW50cy9saW5rLWF0dGFjaG1lbnQuY29tcG9uZW50XCI7XG5pbXBvcnQgUU1TQ0tFZGl0b3JQYXJhbXRlciBmcm9tIFwiLi4vLi4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItcGFyYW1ldGVyLm1vZGVsXCI7XG5pbXBvcnQgeyBRTVNCUE1OU2hhcGVBbmNob3IgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3Ftcy1icG1uLXNoYXBlLWFuY2hvci5tb2RlbFwiO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JMaW5rQW5jaG9yRG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItbGluay1hbmNob3ItZG9jdW1lbnQubW9kZWxcIjtcbmltcG9ydCB7IExpbmtBbmNob3IgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2VudW1zL2xpbmstYW5jaG9yLmVudW1cIjtcbmltcG9ydCB7IFFNU0NLRWRpdG9yVG9hc3RTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi90b2FzdC9xbXMtY2tlZGl0b3ItdG9hc3Quc2VydmljZVwiO1xuaW1wb3J0IHsgQlBNTkxpbmtDb21wb25lbnQgfSBmcm9tIFwiLi9saW5rL2JwbW4tbGluay5jb21wb25lbnRcIjtcbmltcG9ydCB7IFNoYXBlTGluayB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL3Ftcy1icG1uL21vZGVscy9mbG93LWNoYXJ0LXNoYXBlL3NoYXBlLWxpbmtcIjtcbmltcG9ydCBUb29sYmFyRnVuY3Rpb24gZnJvbSBcIi4uLy4uL2NvbW1vbi9icG1uL3Rvb2xiYXIuZnVuY3Rpb25cIjtcbmltcG9ydCB7IFByb2Nlc3NDbGFzc2lmaWNhdGlvblR5cGVzIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9lbnVtL3Byb2Nlc3MtY2xhc3NpZmljYXRpb24tdHlwZS5lbnVtXCI7XG5pbXBvcnQgeyBRTVNDS0VkaXRvclRyZWVTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci10cmVlLnNlcnZpY2VcIjtcbmltcG9ydCB7IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vY29tcG9uZW50cy9hcHAtaWNvbi9pY29uLXJlZ2lzdHJ5LnNlcnZpY2VcIjtcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XG5pbXBvcnQgeyBNYXRJY29uUmVnaXN0cnkgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvblwiO1xuaW1wb3J0IHsgR2V0U2VhcmNoUHJvY2Vzc0RvY3VtZW50T3B0aW9uIH0gZnJvbSBcIi4uLy4uL21vZGVscy9nZXQtc2VhcmNoLXByb2Nlc3MtZG9jdW1lbnQtb3B0aW9uXCI7XG5pbXBvcnQgeyBRTVNTZWxlY3RPbmVHbG9iYWxTZXJ2aWNlLCBTZWxlY3RPbmVEaWFsb2csIFNlbGVjdE9uZVBvcHVwRGF0YSB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL3NlbGVjdC1vbmVcIjtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdxbXMtY2tlZGl0b3ItYnBtbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Ftcy1ja2VkaXRvci1icG1uLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9xbXMtY2tlZGl0b3ItYnBtbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFFNU0NLRWRpdG9yQnBtbkNvbXBvbmVudCBleHRlbmRzIFFNU0NLRWRpdG9yQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgTEFORzogYW55O1xuICAgIEBJbnB1dCgpIGNrRWRpdG9yOiBhbnk7XG5cbiAgICBRTVNCUE1OQ29uZmlnOiBRTVNCUE1OQ29uZmlnID0gbmV3IFFNU0JQTU5Db25maWcoKTtcbiAgICBqc29uQ29udGVudDogc3RyaW5nO1xuXG4gICAgaWQgPSAnJztcbiAgICBtb2R1bGU6IG51bWJlcjtcbiAgICBlbnRpdHlJZCA9ICcnO1xuICAgIGVkaXRvckNvbnRlbnQgPSAnJztcblxuICAgIGJwbW46IFFNU0NLRWRpdG9yQnBtbiA9IG5ldyBRTVNDS0VkaXRvckJwbW4oKTtcbiAgICBicG1uVGVtbGF0ZXM6IFFNU0NLRWRpdG9yQnBtblRlbXBsYXRlW10gPSBbXTtcbiAgICB0ZW1wbGF0ZTtcbiAgICBzaGFwZU1vZGVsOiBTaGFwZU1vZGVsID0gbmV3IFNoYXBlTW9kZWwoKTtcbiAgICAvKiogdGVtcGxhdGUgYmVmb3JlIHNlbGVjdGVkIGFscmVhZHkgYW5vdGhlciB0ZW1wbGF0ZSBpbiBzZWxlY3QgYm94ICh1c2luZyBmb3IgcmVzZXQgdGVtcGxhdGUpKi9cbiAgICB0ZW1wVGVtcGxhdGU6IGFueTtcbiAgICB0YXJnZXRzOiBRTVNCUE1OU2hhcGVUYXJnZXRbXSA9IFtdO1xuICAgIGFuY2hvcnM6IFFNU0JQTU5TaGFwZUFuY2hvcltdID0gW107XG4gICAgLy8gcHJvY2Vzcy9kb2N1bWVudCBjb25uZWN0aW9uIHR5cGVcbiAgICBzcGxpdFZpZXc6IGJvb2xlYW47XG4gICAgcHJvY2Vzc1RyZWVDb25maWc6IFRyZWVDb25maWc7XG4gICAgZG9jdW1lbnRUcmVlQ29uZmlnOiBUcmVlQ29uZmlnO1xuICAgIHRyZWVQcm9jZXNzRGF0YTogRG9jdW1lbnRUcmVlTm9kZURhdGFbXTtcbiAgICB0cmVlRG9jdW1lbnREYXRhOiBEb2N1bWVudFRyZWVOb2RlRGF0YVtdO1xuICAgIGxvYWRpbmdSZWxhdGVkRGF0YTogYm9vbGVhbjtcbiAgICBlbmFibGVkSW50ZXJjb25uZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBlbmFibGVkRGV2aWF0aW9uTW9kdWxlOiBib29sZWFuID0gZmFsc2U7XG4gICAgZW5hYmxlZENoZWNrbGlzdE1vZHVsZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGxhbmd1YWdlOiBzdHJpbmcgPSAnZW4nO1xuXG4gICAgLyogRGV2aWF0aW9uIGNvbm5lY3QgdHlwZSAqL1xuICAgIGRldmlhdGlvbkRhdGFUcmVlOiBUcmVlTW9kZWxbXTtcbiAgICBkZXZpYXRpb25TZWxlY3RPbmVDb25maWc6IFRyZWVDb25maWc7XG5cbiAgICAvKiBDaGVja2xpc3QgY29ubmVjdCB0eXBlICovXG4gICAgY2hlY2tsaXN0RGF0YVRyZWU6IFRyZWVNb2RlbFtdO1xuICAgIGNoZWNrbGlzdFNlbGVjdE9uZUNvbmZpZzogVHJlZUNvbmZpZztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYnBtblNlcnZpY2U6IEJwbW5TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGJwbW5BcGlTZXJ2aWNlOiBRTVNDS0VkaXRvckJwbW5BcGlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGxpbmtTZXJ2aWNlOiBRTVNDS0VkaXRvckxpbmtTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHVwbG9hZFNlcnZpY2U6IFFNU0NLRWRpdG9yVXBsb2FkU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb21tb25TZXJ2aWNlOiBRTVNDS0VkaXRvckNvbW1vblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgc2VsZWN0UHJvY2Vzc0RvY3VtZW50R2xvYmFsU2VydmljZTogUU1TU2VsZWN0UHJvY2Vzc0RvY3VtZW50R2xvYmFsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWxhdGVkU2VydmljZTogUU1TQ0tFZGl0b3JCUE1OQ29ubmVjdGlvblNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxRTVNDS0VkaXRvckJwbW5Db21wb25lbnQ+LFxuICAgICAgICBwcml2YXRlIHRyZWVTZXJ2aWNlOiBRTVNDS0VkaXRvclRyZWVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHFtc1JlbGF0ZWRTZXJ2aWNlOiBRTVNTZWxlY3RPbmVHbG9iYWxTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFwcEljb25TZXJ2aWNlOiBRTVNJY29uUmVnaXN0cnlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgICAgICBwcml2YXRlIGljb25SZWdpc3RyeTogTWF0SWNvblJlZ2lzdHJ5LFxuICAgICAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IFFNU0NLRWRpdG9yQnBtbkRhdGFcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pZCA9IGRhdGEuaWQ7XG4gICAgICAgIHRoaXMubW9kdWxlID0gZGF0YS5tb2R1bGU7XG4gICAgICAgIHRoaXMuZW50aXR5SWQgPSBkYXRhLmVudGl0eUlkO1xuICAgICAgICB0aGlzLmVkaXRvckNvbnRlbnQgPSBkYXRhLmVkaXRvckNvbnRlbnQ7XG4gICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaG93UHJvY2Vzc0RvY3VtZW50VHJlZURhdGFJblNwbGl0VmlldyA9IGRhdGEuc2hvd1Byb2Nlc3NEb2N1bWVudFRyZWVEYXRhSW5TcGxpdFZpZXc7XG4gICAgICAgIHRoaXMuZW5hYmxlZEludGVyY29ubmVjdGVkID0gZGF0YS5lbmFibGVkSW50ZXJjb25uZWN0ZWQ7XG4gICAgICAgIHRoaXMuZW5hYmxlZERldmlhdGlvbk1vZHVsZSA9IGRhdGEuZW5hYmxlZERldmlhdGlvbk1vZHVsZTtcbiAgICAgICAgdGhpcy5lbmFibGVkQ2hlY2tsaXN0TW9kdWxlID0gZGF0YS5lbmFibGVkQ2hlY2tsaXN0TW9kdWxlO1xuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclByb2Nlc3NJY29uKGljb25SZWdpc3RyeSwgc2FuaXRpemVyKTtcbiAgICAgICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJQcm9jZXNzQXJlYUljb24oaWNvblJlZ2lzdHJ5LCBzYW5pdGl6ZXIpO1xuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckRvY3VtZW50SWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyRm9sZGVySWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyRGV2aWF0aW9uSWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyQ2hlY2tsaXN0SWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyUHJvY2Vzc0ludGVyY29ubmVjdGVkSWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XG4gICAgfVxuXG4gICAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSBuZXcgRGlhZ3JhbVRlbXBsYXRlcygpO1xuICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuZWRpdE1vZGUgPSBGbG93Y2hhcnRWaWV3TW9kZS5FZGl0O1xuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5nZXRMYW5ndWFnZVN1YmplY3QkLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhbmd1YWdlID0gcmVzO1xuICAgICAgICAgICAgICAgIHRoaXMuTEFORyA9IHRoaXMudHJhbnNsYXRlLmdldE9iamVjdExhbmcocmVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuY2hhbmdlVGVtcGxhdGVQb3B1cENvbnRlbnQgPSB0aGlzLkxBTkcuQlBNTi5DSEFOR0VfVEVNUExBVEVfTk9URTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5icG1uVGVtbGF0ZXMgPSBhd2FpdCB0aGlzLmdldFRlbXBsYXRlcygpO1xuICAgICAgICBjb25zdCB0ZW1sYXRlcyA9IHRoaXMuYnBtblRlbWxhdGVzLm1hcCgoeCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpbmRleDogeC5pbmRleCxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZU5hbWU6IHgudGVtcGxhdGVOYW1lLFxuICAgICAgICAgICAgICAgIGZsb3dDaGFydElkOiB4LmlkLFxuICAgICAgICAgICAgICAgIG5hbWU6IHgudGVtcGxhdGVOYW1lLFxuICAgICAgICAgICAgICAgIGpzb25Db250ZW50OiB4Lmpzb25Db250ZW50XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pIHx8IFtdO1xuXG4gICAgICAgIGlmICh0aGlzLmlkKSB7XG4gICAgICAgICAgICB0aGlzLmpzb25Db250ZW50ID0gYXdhaXQgdGhpcy5nZXRKc29uQ29udGVudCh0aGlzLmlkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJwbW5TZXJ2aWNlLmJ1aWxkRGlhZ3JhbShcbiAgICAgICAgICAgIHRlbWxhdGVzLFxuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZSxcbiAgICAgICAgICAgICdkZWZhdWx0IGpvaW50LXRoZW1lLWJwbW4nLFxuICAgICAgICAgICAgdGhpcy5qc29uQ29udGVudCxcbiAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5lZGl0TW9kZSxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBUb29sYmFyRnVuY3Rpb24uZ2V0VG9vbGJhckNvbmZpZ3VyYXRpb24odGhpcy5MQU5HKSxcbiAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zcGxpdFZpZXcgPSB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1Byb2Nlc3NEb2N1bWVudFRyZWVEYXRhSW5TcGxpdFZpZXc7XG4gICAgICAgIHRoaXMuaW5pdENvbm5lY3Rpb25UeXBlcygpO1xuICAgICAgICB0aGlzLmluaXRUYXJnZXQoKTtcbiAgICAgICAgdGhpcy5pbml0UmVsYXRlZENvbmZpZ0FuZERhdGEoKTtcbiAgICB9XG5cbiAgICBpbml0Q29ubmVjdGlvblR5cGVzKCkge1xuICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuY29ubmVjdFR5cGVzID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzLFxuICAgICAgICAgICAgICAgIHZpZXdWYWx1ZTogdGhpcy5MQU5HLkJQTU4uRE9DVU1FTlRfUFJPQ0VTUyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLlBST0NFU1NfRE9DVU1FTlRfQ09OTkVDVElPTl9HVUlERUxJTkUsXG4gICAgICAgICAgICAgICAgY2FuQ29ubmVjdDogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5EZXZpYXRpb24sXG4gICAgICAgICAgICAgICAgdmlld1ZhbHVlOiB0aGlzLkxBTkcuQlBNTi5ERVZJQVRJT04sXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5ERVZJQVRJT05fQ09OTkVDVElPTl9HVUlERUxJTkUsXG4gICAgICAgICAgICAgICAgY2FuQ29ubmVjdDogdGhpcy5lbmFibGVkRGV2aWF0aW9uTW9kdWxlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkNoZWNrbGlzdCxcbiAgICAgICAgICAgICAgICB2aWV3VmFsdWU6IHRoaXMuTEFORy5CUE1OLkNIRUNLTElTVCxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkNIRUNLTElTVF9DT05ORUNUSU9OX0dVSURFTElORSxcbiAgICAgICAgICAgICAgICBjYW5Db25uZWN0OiB0aGlzLmVuYWJsZWRDaGVja2xpc3RNb2R1bGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuTGluayxcbiAgICAgICAgICAgICAgICB2aWV3VmFsdWU6IHRoaXMuTEFORy5CUE1OLkxJTkssXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5MSU5LX0NPTk5FQ1RJT05fR1VJREVMSU5FLFxuICAgICAgICAgICAgICAgIGNhbkNvbm5lY3Q6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQXR0YWNobWVudCxcbiAgICAgICAgICAgICAgICB2aWV3VmFsdWU6IHRoaXMuTEFORy5RTVNDS0VESVRPUi5BVFRBQ0hNRU5ULFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgICAgICAgICBjYW5Db25uZWN0OiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgaW5pdFRhcmdldCgpIHtcbiAgICAgICAgaWYgKHRoaXMudGFyZ2V0cykge1xuICAgICAgICAgICAgdGhpcy50YXJnZXRzLnB1c2goeyB2YWx1ZTogVGFyZ2V0VHlwZU5hbWUubmV3LCB2aWV3VmFsdWU6IHRoaXMuTEFORy5RTVNDS0VESVRPUi5UQVJHRVRfQkxBTksgfSk7XG4gICAgICAgICAgICB0aGlzLnRhcmdldHMucHVzaCh7IHZhbHVlOiBUYXJnZXRUeXBlTmFtZS5zYW1lLCB2aWV3VmFsdWU6IHRoaXMuTEFORy5RTVNDS0VESVRPUi5UQVJHRVRfU0VMRiB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdldFRlbXBsYXRlcygpOiBQcm9taXNlPFFNU0NLRWRpdG9yQnBtblRlbXBsYXRlW10+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJwbW5BcGlTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmJwbW5HZXRUZW1wbGF0ZXMoKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGFzeW5jIGdldEpzb25Db250ZW50KGlkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYnBtbkFwaVNlcnZpY2VcbiAgICAgICAgICAgICAgICAuZ2V0QnBtbkJ5SWQoaWQpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuanNvbkNvbnRlbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgc2VsZWN0Q29ubmVjdFR5cGUoZXZlbnQ6IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUpIHtcbiAgICAgICAgc3dpdGNoIChldmVudCkge1xuICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzOlxuICAgICAgICAgICAgICAgIHRoaXMub3BlblByb2Nlc3NEb2N1bWVudCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRldmlhdGlvbjpcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5EZXZpYXRpb24oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5DaGVja2xpc3Q6XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuQ2hlY2tsaXN0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQXR0YWNobWVudDpcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5BdHRhY2htZW50RGlhbG9nKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuTGluazpcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5MaW5rKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VsZWN0VGVtcGxhdGUoKSB7XG4gICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19TRUxFQ1RFRF9URU1QTEFURV0gPSB0cnVlO1xuICAgICAgICBjb25zdCBncmFwaCA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5HUkFQSF07XG4gICAgICAgIHRoaXMudGVtcFRlbXBsYXRlID0gZ3JhcGgudG9KU09OKCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSnNvbkNvbnRlbnQgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfSlNPTl9DT05URU5UXTtcbiAgICAgICAgaWYgKHNlbGVjdGVkSnNvbkNvbnRlbnQpIHtcbiAgICAgICAgICAgIGlmIChncmFwaCkge1xuICAgICAgICAgICAgICAgIGdyYXBoLmZyb21KU09OKEpTT04ucGFyc2Uoc2VsZWN0ZWRKc29uQ29udGVudCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXSA9IG51bGw7XG4gICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfU0hBUEVfSURdID0gJyc7XG4gICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0hBUEVfVFlQRV0gPSAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBzYXZlIEJQTU5cbiAgICBhc3luYyBzYXZlSW1hZ2VDb250ZW50KGdyYXBoT2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QganNvbkNvbnRlbnQgPSBKU09OLnN0cmluZ2lmeShncmFwaE9iamVjdCk7XG4gICAgICAgICAgICB0aGlzLmJwbW4gPSB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMuaWQgPyB0aGlzLmlkIDogZ3VpZEhlbHBlci5lbXB0eSxcbiAgICAgICAgICAgICAgICBqc29uQ29udGVudDoganNvbkNvbnRlbnQsXG4gICAgICAgICAgICAgICAgaXNUZW1wbGF0ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVOYW1lOiAnJ1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmJwbW5BcGlTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmJwbW5Nb2RpZnlpbmcodGhpcy5icG1uKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGFzeW5jIGdldEltYWdlQ29udGVudChwYXBlcjogYW55KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgcGFwZXIudG9QTkcoKGltYWdlRGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyclN0cmluZyA9IGltYWdlRGF0YS5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoYXJyU3RyaW5nWzFdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBvbkluc2VydEltYWdlKCkge1xuICAgICAgICBjb25zdCBncmFwaCA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5HUkFQSF07XG4gICAgICAgIGNvbnN0IHBhcGVyID0gd2luZG93W2BwYXBlcmBdO1xuICAgICAgICBjb25zdCBjbGllbnRSZWN0ID0gcGFwZXIucGFwZXJUb0xvY2FsUmVjdChwYXBlci5nZXRDb250ZW50QkJveCgpKTtcbiAgICAgICAgY29uc3QgZ3JhcGhPYmplY3QgPSBncmFwaC50b0pTT04oKTtcbiAgICAgICAgY29uc3QgaWQgPSBhd2FpdCB0aGlzLnNhdmVJbWFnZUNvbnRlbnQoZ3JhcGhPYmplY3QpO1xuICAgICAgICBjb25zdCBpbWFnZUNvbnRlbnQgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LCcgKyBhd2FpdCB0aGlzLmdldEltYWdlQ29udGVudChwYXBlcik7XG4gICAgICAgIGNvbnN0IGZpbGUgPSBiYXNlNjRTdHJpbmdUb0ZpbGUoaW1hZ2VDb250ZW50LCBgJHtDS0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfQlBNTn0jJHtpZH1gKTtcbiAgICAgICAgY29uc3QgcmVsYXRpdmVVcmwgPSBhd2FpdCB0aGlzLnVwbG9hZFNlcnZpY2UudXBsb2FkSW1hZ2UoZmlsZSkudG9Qcm9taXNlKCk7XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlQWRkaXRpb25hbFdpZHRoKGdyYXBoLCBwYXBlciwgZ3JhcGhPYmplY3QuY2VsbHMpO1xuICAgICAgICBjb25zdCBpbWFnZW1hcCA9IFFNU0NLRWRpdG9yQlBNTkZ1bmN0aW9ucy50b0ltYWdlTWFwKGlkLCBncmFwaE9iamVjdC5jZWxscywgY2xpZW50UmVjdCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHsga2V5OiBgJHtDS0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfQlBNTn0jJHtpZH1gLCB2YWx1ZXM6IHJlbGF0aXZlVXJsLCBpbWFnZW1hcDogaW1hZ2VtYXAgfVxuICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLmNvbW1vblNlcnZpY2UuZ2V0U2Nyb2xsVG9wQ2tlZGl0b3IodGhpcy5ja0VkaXRvcik7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHJlc3VsdCk7XG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZS5zZXRTY3JvbGxUb3BFZGl0b3JDb250YWluZXIodGhpcy5ja0VkaXRvciwgc2Nyb2xsVG9wKTtcbiAgICB9XG5cbiAgICBvbkNsb3NlRGlhbG9nKCkge1xuICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXSA9IG51bGw7XG4gICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9TSEFQRV9JRF0gPSAnJztcbiAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNIQVBFX1RZUEVdID0gJyc7XG4gICAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IHRoaXMuY29tbW9uU2VydmljZS5nZXRTY3JvbGxUb3BDa2VkaXRvcih0aGlzLmNrRWRpdG9yKTtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlLnNldFNjcm9sbFRvcEVkaXRvckNvbnRhaW5lcih0aGlzLmNrRWRpdG9yLCBzY3JvbGxUb3ApO1xuICAgIH1cblxuICAgIHNhdmVBc1RlbXBsYXRlKHRlbXBsYXRlTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IHRoaXMuY29tbW9uU2VydmljZS5nZXRTY3JvbGxUb3BDa2VkaXRvcih0aGlzLmNrRWRpdG9yKTtcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlLnNldFNjcm9sbFRvcEVkaXRvckNvbnRhaW5lcih0aGlzLmNrRWRpdG9yLCBzY3JvbGxUb3ApO1xuICAgICAgICBjb25zdCBncmFwaCA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5HUkFQSF07XG4gICAgICAgIGNvbnN0IGpzb25Db250ZW50ID0gSlNPTi5zdHJpbmdpZnkoZ3JhcGgudG9KU09OKCkpO1xuICAgICAgICB0aGlzLmJwbW4gPSB7XG4gICAgICAgICAgICBpZDogZ3VpZEhlbHBlci5lbXB0eSxcbiAgICAgICAgICAgIGpzb25Db250ZW50OiBqc29uQ29udGVudCxcbiAgICAgICAgICAgIGlzVGVtcGxhdGU6IHRydWUsXG4gICAgICAgICAgICB0ZW1wbGF0ZU5hbWU6ICcnXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5icG1uLnRlbXBsYXRlTmFtZSA9IHRlbXBsYXRlTmFtZTtcbiAgICAgICAgdGhpcy5icG1uQXBpU2VydmljZVxuICAgICAgICAgICAgLmJwbW5Nb2RpZnlpbmcodGhpcy5icG1uKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icG1uU2VydmljZS5hZGRJdGVtVGVtcGxhdGUocmVzdWx0LCB0aGlzLmJwbW4pO1xuICAgICAgICAgICAgICAgICAgICBRTVNDS0VkaXRvclRvYXN0U2VydmljZS5zdWNjZXNzKHRoaXMuTEFORy5RTVNDS0VESVRPUi5TQVZFRCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgUU1TQ0tFZGl0b3JUb2FzdFNlcnZpY2UuZXJyb3IodGhpcy5MQU5HLlFNU0NLRURJVE9SLlNBVkVfRkFJTEVEKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBkZWxldGVUZW1wbGF0ZSgpIHtcbiAgICAgICAgaWYgKCEhdGhpcy50ZW1wbGF0ZS5mbG93Q2hhcnRJZCkge1xuICAgICAgICAgICAgdGhpcy5icG1uQXBpU2VydmljZVxuICAgICAgICAgICAgICAgIC5icG1uRGVsZXRlVGVtcGxhdGUodGhpcy50ZW1wbGF0ZS5mbG93Q2hhcnRJZClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJwbW5TZXJ2aWNlLnJlbW92ZVNlbGVjdEl0ZW0odGhpcy50ZW1wbGF0ZS5mbG93Q2hhcnRJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJwbW5TZXJ2aWNlLnNldERlZmF1bHRTZWxlY3RlZFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBRTVNDS0VkaXRvclRvYXN0U2VydmljZS5zdWNjZXNzKHRoaXMuTEFORy5RTVNDS0VESVRPUi5ERUxFVEVEKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFFNU0NLRWRpdG9yVG9hc3RTZXJ2aWNlLmVycm9yKHRoaXMuTEFORy5RTVNDS0VESVRPUi5ERUxFVEVfRkFJTEVEKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzZXRUZW1wbGF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMudGVtcFRlbXBsYXRlKSB7XG4gICAgICAgICAgICBjb25zdCBncmFwaCA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5HUkFQSF07XG4gICAgICAgICAgICBpZiAoZ3JhcGgpIHtcbiAgICAgICAgICAgICAgICBncmFwaC5mcm9tSlNPTih0aGlzLnRlbXBUZW1wbGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5icG1uU2VydmljZS5zZXREZWZhdWx0U2VsZWN0ZWRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19TRUxFQ1RFRF9URU1QTEFURV0gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddID0gbnVsbDtcbiAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9TSEFQRV9JRF0gPSAnJztcbiAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TSEFQRV9UWVBFXSA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2hvd0NvbmZpcm1EaWFsb2codGl0bGU6IHN0cmluZywgY29udGVudDogc3RyaW5nLCBpc01lc3NhZ2U6IGJvb2xlYW4sIGNhbGxiYWNrPzogKHJlc3VsdD86IGFueSkgPT4gdm9pZCkge1xuICAgICAgICBjb25zdCBkYXRhOiBRTVNDS0VkaXRvckRpYWxvZ0RhdGEgPSBuZXcgUU1TQ0tFZGl0b3JEaWFsb2dEYXRhKCk7XG4gICAgICAgIGRhdGEudGl0bGUgPSB0aXRsZTtcbiAgICAgICAgZGF0YS5jb250ZW50ID0gY29udGVudDtcbiAgICAgICAgZGF0YS5pc01lc3NhZ2UgPSBpc01lc3NhZ2U7XG4gICAgICAgIGRhdGEuaXNDbG9zZUJ0biA9IHRydWU7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JDb25maXJtQ29tcG9uZW50LCB7XG4gICAgICAgICAgICB3aWR0aDogJzUwMHB4JyxcbiAgICAgICAgICAgIG1pbkhlaWdodDogJzE3NXB4JyxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgIH0pO1xuICAgICAgICBkaWFsb2dSZWZcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlQWRkaXRpb25hbFdpZHRoKGdyYXBoOiBhbnksIHBhcGVyOiBhbnksIGNlbGxzOiBhbnlbXSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgYmJveCA9IGdyYXBoLmdldENlbGwoY2VsbHNbaV0pLmZpbmRWaWV3KHBhcGVyKS5nZXRCQm94VG9DYWxjdWxhdGVBZGRpdGlvbmFsV2lkdGgoKTtcbiAgICAgICAgICAgIGNlbGxzW2ldLmFkZGl0aW9uYWxXaWR0aCA9IDA7XG4gICAgICAgICAgICBpZiAoYmJveCAmJiBjZWxsc1tpXT8uc2l6ZT8ud2lkdGgpXG4gICAgICAgICAgICAgICAgY2VsbHNbaV0uYWRkaXRpb25hbFdpZHRoID0gKGJib3gud2lkdGggPiBjZWxsc1tpXS5zaXplLndpZHRoKSA/IChiYm94LndpZHRoIC0gY2VsbHNbaV0uc2l6ZS53aWR0aCkgOiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdFNoYXBlTW9kZWwoaWQ6IGFueSA9ICcnLCBpdGVtVHlwZTogYW55ID0gJycsIGl0ZW1OYW1lOiBzdHJpbmcgPSAnJywgc3RhdHVzTmFtZTogc3RyaW5nID0gbnVsbCkge1xuICAgICAgICB0aGlzLnNoYXBlTW9kZWwgPSBuZXcgU2hhcGVNb2RlbCgpO1xuICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkID0gaWQ7XG4gICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5pZCA9IGlkO1xuICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uaXRlbVR5cGUgPSBpdGVtVHlwZTtcbiAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLml0ZW1OYW1lID0gaXRlbU5hbWU7XG4gICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5zdGF0dXNOYW1lID0gc3RhdHVzTmFtZTtcbiAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnRhcmdldC50YXJnZXRJZCA9IFRhcmdldFR5cGVOYW1lLm5ldztcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgY29ubmVjdGlvbiBwcm9jZXNzL2RvY3VtZW50XG4gICAgaW5pdFJlbGF0ZWRDb25maWdBbmREYXRhKCkge1xuICAgICAgICB0aGlzLnByb2Nlc3NUcmVlQ29uZmlnID0ge1xuICAgICAgICAgICAgYWxsb3dTZWxlY3RGb2xkZXI6IHRydWUsXG4gICAgICAgICAgICBhcmVhT2ZDdXJyZW50UHJvY2VzczogJycsXG4gICAgICAgICAgICBzaG93Q2hlY2tCb3g6IHRydWUsXG4gICAgICAgICAgICBhbGxvd011bHRpcGxlQ2hlY2s6IGZhbHNlLFxuICAgICAgICAgICAgb25seUNoZWNrQm94Rm9yQ2hpbGQ6IGZhbHNlLFxuICAgICAgICAgICAgbW9kdWxlSWQ6IERhdGFUeXBlLnByb2Nlc3MsXG4gICAgICAgICAgICBvcGVuSWNvbkNvbG9yOiAnIzE5NTRBOScsXG4gICAgICAgICAgICBjbG9zZUljb25Db2xvcjogJyNhNGIwZGUnLFxuICAgICAgICAgICAgc2luZ2xlU2VsZWN0ZWROb2RlOiB0cnVlLFxuICAgICAgICAgICAgb25seUZvbGRlcjogZmFsc2VcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmRvY3VtZW50VHJlZUNvbmZpZyA9IHtcbiAgICAgICAgICAgIGFsbG93U2VsZWN0Rm9sZGVyOiB0cnVlLFxuICAgICAgICAgICAgYXJlYU9mQ3VycmVudFByb2Nlc3M6ICcnLFxuICAgICAgICAgICAgc2hvd0NoZWNrQm94OiB0cnVlLFxuICAgICAgICAgICAgbW9kdWxlSWQ6IERhdGFUeXBlLmRvY3VtZW50LFxuICAgICAgICAgICAgYWxsb3dNdWx0aXBsZUNoZWNrOiBmYWxzZSxcbiAgICAgICAgICAgIG9ubHlDaGVja0JveEZvckNoaWxkOiBmYWxzZSxcbiAgICAgICAgICAgIG9wZW5JY29uQ29sb3I6ICcjMTk1NEE5JyxcbiAgICAgICAgICAgIGNsb3NlSWNvbkNvbG9yOiAnIzRhY2FmZicsXG4gICAgICAgICAgICBzaW5nbGVTZWxlY3RlZE5vZGU6IHRydWUsXG4gICAgICAgICAgICBvbmx5Rm9sZGVyOiBmYWxzZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZGV2aWF0aW9uU2VsZWN0T25lQ29uZmlnID0ge1xuICAgICAgICAgICAgYWxsb3dTZWxlY3RGb2xkZXI6IGZhbHNlLFxuICAgICAgICAgICAgc2hvd0NoZWNrQm94OiBmYWxzZSxcbiAgICAgICAgICAgIGFsbG93TXVsdGlwbGVDaGVjazogZmFsc2UsXG4gICAgICAgICAgICBvbmx5Q2hlY2tCb3hGb3JDaGlsZDogZmFsc2UsXG4gICAgICAgICAgICBtb2R1bGVJZDogRGF0YVR5cGUuZGV2aWF0aW9uLFxuICAgICAgICAgICAgb3Blbkljb246ICdrZXlib2FyZF9hcnJvd191cCcsXG4gICAgICAgICAgICBvcGVuSWNvbkNvbG9yOiAnIzE5NTRBOScsXG4gICAgICAgICAgICBjbG9zZUljb246ICdrZXlib2FyZF9hcnJvd19kb3duJyxcbiAgICAgICAgICAgIGNsb3NlSWNvbkNvbG9yOiAnJyxcbiAgICAgICAgICAgIGl0ZW1JY29uOiAncmVwb3J0X3Byb2JsZW0nLFxuICAgICAgICAgICAgc2luZ2xlU2VsZWN0ZWROb2RlOiBmYWxzZSxcbiAgICAgICAgICAgIGNhbkhhdmVEdXBJZDogdHJ1ZSxcbiAgICAgICAgICAgIHNlbGVjdE9uZTogdHJ1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuY2hlY2tsaXN0U2VsZWN0T25lQ29uZmlnID0ge1xuICAgICAgICAgICAgYWxsb3dTZWxlY3RGb2xkZXI6IGZhbHNlLFxuICAgICAgICAgICAgc2hvd0NoZWNrQm94OiBmYWxzZSxcbiAgICAgICAgICAgIGFsbG93TXVsdGlwbGVDaGVjazogZmFsc2UsXG4gICAgICAgICAgICBvbmx5Q2hlY2tCb3hGb3JDaGlsZDogZmFsc2UsXG4gICAgICAgICAgICBtb2R1bGVJZDogRGF0YVR5cGUuY2hlY2tsaXN0LFxuICAgICAgICAgICAgb3Blbkljb246ICdrZXlib2FyZF9hcnJvd191cCcsXG4gICAgICAgICAgICBvcGVuSWNvbkNvbG9yOiAnIzE5NTRBOScsXG4gICAgICAgICAgICBjbG9zZUljb246ICdrZXlib2FyZF9hcnJvd19kb3duJyxcbiAgICAgICAgICAgIGNsb3NlSWNvbkNvbG9yOiAnJyxcbiAgICAgICAgICAgIGl0ZW1JY29uOiAnZm9ybWF0X2xpc3RfYnVsbGV0ZWQnLFxuICAgICAgICAgICAgc2luZ2xlU2VsZWN0ZWROb2RlOiBmYWxzZSxcbiAgICAgICAgICAgIGNhbkhhdmVEdXBJZDogdHJ1ZSxcbiAgICAgICAgICAgIHNlbGVjdE9uZTogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmxvYWRpbmdSZWxhdGVkRGF0YSA9IHRydWU7XG4gICAgICAgIGZvcmtKb2luKHRoaXMucmVsYXRlZFNlcnZpY2UuZ2V0QXJlYUNoaWxkcmVuTm9kZShudWxsLCAhdGhpcy5zcGxpdFZpZXcsIGZhbHNlLCB0aGlzLmRhdGEuZW5hYmxlZEludGVyY29ubmVjdGVkKSxcbiAgICAgICAgICAgIHRoaXMucmVsYXRlZFNlcnZpY2UuZ2V0Rm9sZGVyQ2hpbGRyZW4obnVsbCwgIXRoaXMuc3BsaXRWaWV3LCBmYWxzZSksXG4gICAgICAgICAgICB0aGlzLmVuYWJsZWREZXZpYXRpb25Nb2R1bGUgPyB0aGlzLnJlbGF0ZWRTZXJ2aWNlLmdldERldmlhdGlvblRyZWVEYXRhKCkgOiBvZihudWxsKSxcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlZENoZWNrbGlzdE1vZHVsZSA/IHRoaXMucmVsYXRlZFNlcnZpY2UuZ2V0Q2hlY2tsaXN0RGF0YSgpIDogb2YobnVsbClcbiAgICAgICAgKS5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChbcHJvY2Vzc2VzLCBkb2N1bWVudHMsIGRldmlhdGlvbnMsIGNoZWNrbGlzdHNdKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3Nlcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcmVhcyA9IHByb2Nlc3Nlcy5tYXAoKHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHguaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogeC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiB4LnBhcmVudElkID09PSBndWlkSGVscGVyLmVtcHR5ID8gJycgOiB4LnBhcmVudElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c0lkOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c05hbWU6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlJZDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlUHJvY2Vzc0RhdGEgPSBhcmVhcztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyZWFzID0gZG9jdW1lbnRzLm1hcCgoeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogeC5pZC50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHgubmFtZS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiAheC5wYXJlbnRIYW5kYm9va0lkID8gJycgOiB4LnBhcmVudEhhbmRib29rSWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNJZDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNOYW1lOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5SWQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kYWJsZTogdGhpcy5pc0ZvbGRlcih4LnR5cGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsVHlwZTogeC50eXBlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlRG9jdW1lbnREYXRhID0gYXJlYXM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpYXRpb25EYXRhVHJlZSA9IGRldmlhdGlvbnMgfHwgW107XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja2xpc3REYXRhVHJlZSA9IGNoZWNrbGlzdHMgfHwgW107XG5cbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdSZWxhdGVkRGF0YSA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb3BlblByb2Nlc3NEb2N1bWVudCgpIHtcbiAgICAgICAgY29uc3QgZGF0YTogU2VsZWN0UHJvY2Vzc0RvY3VtZW50UG9wdXBEYXRhID0gbmV3IFNlbGVjdFByb2Nlc3NEb2N1bWVudFBvcHVwRGF0YSgpO1xuICAgICAgICBkYXRhLm1vZHVsZUlkID0gTW9kdWxlVHlwZS5kb2N1bWVudFByb2Nlc3M7XG4gICAgICAgIGRhdGEubW9kdWxlTmFtZSA9IHRoaXMuTEFORy5CUE1OLkRPQ1VNRU5UX1BST0NFU1M7XG4gICAgICAgIGRhdGEudHJlZURhdGExID0gdGhpcy50cmVlUHJvY2Vzc0RhdGE7XG4gICAgICAgIGRhdGEudHJlZURhdGEyID0gdGhpcy50cmVlRG9jdW1lbnREYXRhO1xuICAgICAgICBkYXRhLnRyZWVDb25maWcxID0gdGhpcy5wcm9jZXNzVHJlZUNvbmZpZztcbiAgICAgICAgZGF0YS50cmVlQ29uZmlnMiA9IHRoaXMuZG9jdW1lbnRUcmVlQ29uZmlnO1xuICAgICAgICBkYXRhLnNwbGl0VmlldyA9IHRoaXMuc3BsaXRWaWV3O1xuICAgICAgICBkYXRhLmlzU2VsZWN0T25lID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihTZWxlY3RQcm9jZXNzRG9jdW1lbnRQb3B1cENvbXBvbmVudCwge1xuICAgICAgICAgICAgd2lkdGg6ICc3NjhweCcsXG4gICAgICAgICAgICBtaW5IZWlnaHQ6ICc2OTBweCcsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tbWF0LWRpYWxvZy1jb250YWluZXInXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5vblNlYXJjaC5zdWJzY3JpYmUoYXN5bmMgKGtleXdvcmQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgaWYgKCFrZXl3b3JkIHx8IGtleXdvcmQudHJpbSgpID09PSAnJylcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGxldCBnZXRTZWFyY2hPcHRpb24gPSBuZXcgR2V0U2VhcmNoUHJvY2Vzc0RvY3VtZW50T3B0aW9uKHRydWUsIHRydWUsIHRoaXMuZGF0YS5lbmFibGVkSW50ZXJjb25uZWN0ZWQsIHRydWUsIHRydWUpO1xuICAgICAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0ID0gYXdhaXQgdGhpcy50cmVlU2VydmljZS5nZXRTZWFyY2hQcm9jZXNzRG9jdW1lbnQoa2V5d29yZC50cmltKCksIGdldFNlYXJjaE9wdGlvbik7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFByb2Nlc3NEb2N1bWVudEdsb2JhbFNlcnZpY2Uuc2V0U2VhcmNoUmVsYXRlZChzZWFyY2hSZXN1bHQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2Uub25FeHBhbmRQcm9jZXNzQXJlYS5zdWJzY3JpYmUoKGZvbGRlcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWxhdGVkU2VydmljZVxuICAgICAgICAgICAgICAgIC5nZXRBcmVhQ2hpbGRyZW5Ob2RlKGZvbGRlci5pZCwgIXRoaXMuc3BsaXRWaWV3LCBmYWxzZSwgdGhpcy5kYXRhLmVuYWJsZWRJbnRlcmNvbm5lY3RlZClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcmVhcyA9IHJlcy5tYXAoKHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogeC50eXBlID09PSBQcm9jZXNzTm9kZVR5cGUuQXJlYSA/IHguaWQudG9TdHJpbmcoKSA6IHgucHJvY2Vzc0lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB4Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiB4LnBhcmVudElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiB4LnR5cGUgPT09IFByb2Nlc3NOb2RlVHlwZS5BcmVhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNJZDogeC5zdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c05hbWU6IHguc3RhdHVzTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUlkOiB4LnR5cGUgPT09IFByb2Nlc3NOb2RlVHlwZS5BcmVhID8gMCA6IHguaXRlbU51bWJlcklkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtVHlwZTogeC50eXBlID09PSBQcm9jZXNzTm9kZVR5cGUuQXJlYSA/IERhdGFUeXBlLmFyZWEgOiB4LnR5cGUgPT09IFByb2Nlc3NOb2RlVHlwZS5Qcm9jZXNzID8gRGF0YVR5cGUucHJvY2VzcyA6IERhdGFUeXBlLnByb2Nlc3NJbnRlcmNvbm5lY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0UHJvY2Vzc0RvY3VtZW50R2xvYmFsU2VydmljZS5zZXRQcm9jZXNzQXJlYUNoaWxkcmVuKGFyZWFzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2Uub25FeHBhbmRGb2xkZXIuc3Vic2NyaWJlKChmb2xkZXIpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVsYXRlZFNlcnZpY2VcbiAgICAgICAgICAgICAgICAuZ2V0Rm9sZGVyQ2hpbGRyZW4oZm9sZGVyLmlkLCAhdGhpcy5zcGxpdFZpZXcsIGZhbHNlKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyZWFzID0gcmVzLm1hcCgoeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB4LmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHgubmFtZS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogdGhpcy5nZXRQYXJlbnRJZCh4KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzSWQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c05hbWU6IHguc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5SWQ6IHguaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IHRoaXMuaXNGb2xkZXIoeC50eXBlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxUeXBlOiB0aGlzLmlzRm9sZGVyKHgudHlwZSkgPyB4LnR5cGUgOiBmb2xkZXIubGV2ZWxUeXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RQcm9jZXNzRG9jdW1lbnRHbG9iYWxTZXJ2aWNlLnNldEZvbGRlckNoaWxkcmVuKGFyZWFzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2Uub25TZWxlY3RGb2xkZXJJdGVtLnN1YnNjcmliZSgoZm9sZGVyKSA9PiB7XG4gICAgICAgICAgICBpZiAoZm9sZGVyLml0ZW1UeXBlID09PSBEYXRhVHlwZS5hcmVhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxhdGVkU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAuZ2V0QXJlYUNvbnRlbnQoZm9sZGVyLmlkLCBmYWxzZSwgdGhpcy5lbmFibGVkSW50ZXJjb25uZWN0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogSVJlbGF0ZWRbXSA9IHJlcy5tYXAoKGVsZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGVsZS5wcm9jZXNzSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtTnVtYmVySWQ6IGVsZS5wcm9jZXNzTnVtYmVyLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtTmFtZTogZWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtVHlwZTogZWxlLnByb2Nlc3NDbGFzc2lmaWNhdGlvbiA9PT0gUHJvY2Vzc0NsYXNzaWZpY2F0aW9uVHlwZXMuUHJvY2Vzc2VzID8gRGF0YVR5cGUucHJvY2VzcyA6IERhdGFUeXBlLnByb2Nlc3NJbnRlcmNvbm5lY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogZWxlLnN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c05hbWU6IHRoaXMuZ2V0RGlzbGF5TmFtZU9mUHJvY2Vzc1N0YXR1cyhlbGUuc3RhdHVzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiBmb2xkZXIuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROYW1lOiBmb2xkZXIuaXRlbU5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFByb2Nlc3NEb2N1bWVudEdsb2JhbFNlcnZpY2Uuc2V0U3BsaXR2aWV3VmFsdWUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGRlci5pdGVtVHlwZSA9PT0gRGF0YVR5cGUuZm9sZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxhdGVkU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAuZ2V0Rm9sZGVyQ29udGVudChmb2xkZXIuaWQpXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogSVJlbGF0ZWRbXSA9IHJlcy5tYXAoKGVsZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGVsZS5pZC50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbU51bWJlcklkOiBlbGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiBlbGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1UeXBlOiBEYXRhVHlwZS5kb2N1bWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c05hbWU6IGVsZS5zdGF0dXNOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IGZvbGRlci5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5hbWU6IGZvbGRlci5pdGVtTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsVHlwZTogZm9sZGVyLmxldmVsVHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0UHJvY2Vzc0RvY3VtZW50R2xvYmFsU2VydmljZS5zZXRTcGxpdHZpZXdWYWx1ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9iaiA9IHJlc3VsdFswXTtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRTaGFwZU1vZGVsKChvYmouaXRlbVR5cGUgPT09IERhdGFUeXBlLnByb2Nlc3MgfHwgb2JqLml0ZW1UeXBlID09PSBEYXRhVHlwZS5wcm9jZXNzSW50ZXJjb25uZWN0ZWQpID8gb2JqLml0ZW1OdW1iZXJJZCA6IG9iai5pZCwgb2JqLml0ZW1UeXBlLCBvYmouaXRlbU5hbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gdGhpcy5nZXRMaW5rVVJMKHRoaXMuc2hhcGVNb2RlbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5TVkdJY29uID0gdGhpcy5nZXRTaGFwZU1vZGVsSWNvbkJ5RGF0YVR5cGUodGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLml0ZW1UeXBlLCBvYmoubGV2ZWxUeXBlKTtcbiAgICAgICAgICAgICAgICBpZiAob2JqLml0ZW1UeXBlID09PSBEYXRhVHlwZS5kb2N1bWVudCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEFuY2hvckRvY3VtZW50KG9iai5pZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHNhdmUgY29ubmVjdGlvblxuICAgICAgICAgICAgICAgIHRoaXMubWFwU2hhcGVEYXRhKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNob3dTaGFwZUNvbm5lY3Rpb25WYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNoYXBlQ29ubmVjdExhYmVsID0gdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkNPTk5FQ1RFRF9ET0NVTUVOVF9QUk9DRVNTO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBEb2N1bW5ldCBQcm9jZXNzIFN1cHBvcnQgRnVuY1xuICAgIGlzRm9sZGVyKHR5cGU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBkb2N1bWVudFR5cGVzID0gW1xuICAgICAgICAgICAgRG9jdW1lbnROb2RlVHlwZS5Eb2N1bWVudCxcbiAgICAgICAgICAgIERvY3VtZW50Tm9kZVR5cGUuRmlsZURvY3VtZW50LFxuICAgICAgICAgICAgRG9jdW1lbnROb2RlVHlwZS5MaW5rRG9jdW1lbnQsXG4gICAgICAgICAgICBEb2N1bWVudE5vZGVUeXBlLlNob3J0Y3V0RG9jdW1lbnRcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuICFkb2N1bWVudFR5cGVzLmluY2x1ZGVzKHR5cGUpO1xuICAgIH1cblxuICAgIGdldFBhcmVudElkKGl0ZW0pIHtcbiAgICAgICAgaWYgKHRoaXMuaXNGb2xkZXIoaXRlbS50eXBlKSkge1xuICAgICAgICAgICAgcmV0dXJuICFpdGVtLnBhcmVudEhhbmRib29rSWQgPyAnJyA6IGl0ZW0ucGFyZW50SGFuZGJvb2tJZC50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhaXRlbS5wYXJlbnRGb2xkZXJJZCA/ICcnIDogaXRlbS5wYXJlbnRGb2xkZXJJZC50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGdldERpc2xheU5hbWVPZlByb2Nlc3NTdGF0dXMoc3RhdHVzOiBudW1iZXIpIHtcbiAgICAgICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgICAgICAgIGNhc2UgUHJvY2Vzc1N0YXR1cy5pblByb2dyZXNzOlxuICAgICAgICAgICAgICAgIHJldHVybiAnQ09NTU9OLklOX1BST0dSRVNTJztcbiAgICAgICAgICAgIGNhc2UgUHJvY2Vzc1N0YXR1cy5zZW5kVG9BcHByb3ZhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5TRU5EX1RPX0FQUFJPVkFMJztcbiAgICAgICAgICAgIGNhc2UgUHJvY2Vzc1N0YXR1cy5hcHByb3ZlZDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5BUFBST1ZFRCc7XG4gICAgICAgICAgICBjYXNlIFByb2Nlc3NTdGF0dXMudW5kZXJSZXZpc2lvbjpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5VTkRFUl9SRVZJU0lPTic7XG4gICAgICAgICAgICBjYXNlIFByb2Nlc3NTdGF0dXMuZGVsZXRlZDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5ERUxFVEVEJztcbiAgICAgICAgICAgIGNhc2UgUHJvY2Vzc1N0YXR1cy5yZXZpZXdPckhlYXJpbmc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdDT01NT04uSEVBUklORyc7XG4gICAgICAgICAgICBjYXNlIFByb2Nlc3NTdGF0dXMuYXJjaGl2ZWQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdDT01NT04uQVJDSElWRUQnO1xuICAgICAgICAgICAgY2FzZSBQcm9jZXNzU3RhdHVzLmhlYXJpbmc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdQUk9DRVNTLkhFQVJJTkcnO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5VTktOT1dOJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldExpbmtVUkwoc2hhcGVNb2RlbDogU2hhcGVNb2RlbCkge1xuICAgICAgICBzd2l0Y2ggKHNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uaXRlbVR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuZG9jdW1lbnQ6XG4gICAgICAgICAgICAgICAgc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gYCR7Q0tFZGl0b3JMaW5rQ29uc3QuRE9DVU1FTlRfUEFSVElBTF9VUkx9JHtzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmRpc3BsYXlJZH1gO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5wcm9jZXNzOlxuICAgICAgICAgICAgICAgIHNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ubGlua1VybCA9IGAke0NLRWRpdG9yTGlua0NvbnN0LlBST0NFU1NfUEFSVElBTF9VUkx9JHtzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmRpc3BsYXlJZH1gO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5hcmVhOlxuICAgICAgICAgICAgICAgIHNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ubGlua1VybCA9IGAke0NLRWRpdG9yTGlua0NvbnN0LkFSRUFfUEFSVElBTF9VUkx9JHtzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmRpc3BsYXlJZH1gO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5mb2xkZXI6XG4gICAgICAgICAgICAgICAgc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gYCR7Q0tFZGl0b3JMaW5rQ29uc3QuRk9MREVSX1BBUlRJQUxfVVJMfSR7c2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5kaXNwbGF5SWR9YDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUucHJvY2Vzc0ludGVyY29ubmVjdGVkOlxuICAgICAgICAgICAgICAgIHNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ubGlua1VybCA9IGAke0NLRWRpdG9yTGlua0NvbnN0LlBST0NFU1NfSU5URVJDT05ORUNURURfUEFSVElBTF9VUkx9JHtzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmRpc3BsYXlJZH1gO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5kZXZpYXRpb246XG4gICAgICAgICAgICAgICAgc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gYCR7Q0tFZGl0b3JMaW5rQ29uc3QuREVWSUFUSU9OX1BBUlRJQUxfVVJMfSR7c2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5wYXJlbnRJZH0vJHtzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmlkfWA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLmNoZWNrbGlzdDpcbiAgICAgICAgICAgICAgICBzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmwgPSBgJHtDS0VkaXRvckxpbmtDb25zdC5DSEVDS0xJU1RfUEFSVElBTF9VUkx9JHtzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLnBhcmVudElkfS8ke3NoYXBlTW9kZWwucmVsYXRlZEl0ZW0uaWR9YDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBEZXZpYXRpb25cbiAgICBvcGVuRGV2aWF0aW9uKCkge1xuICAgICAgICBjb25zdCBkYXRhOiBTZWxlY3RPbmVQb3B1cERhdGEgPSBuZXcgU2VsZWN0T25lUG9wdXBEYXRhKCk7XG4gICAgICAgIGRhdGEubW9kdWxlSWQgPSBNb2R1bGVUeXBlLmRldmlhdGlvbjtcbiAgICAgICAgZGF0YS5tb2R1bGVOYW1lID0gdGhpcy5MQU5HLkJQTU4uREVWSUFUSU9OO1xuICAgICAgICBkYXRhLnRyZWVEYXRhID0gdGhpcy5kZXZpYXRpb25EYXRhVHJlZTtcbiAgICAgICAgZGF0YS50cmVlQ29uZmlnID0gdGhpcy5kZXZpYXRpb25TZWxlY3RPbmVDb25maWc7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oU2VsZWN0T25lRGlhbG9nLCB7XG4gICAgICAgICAgICB3aWR0aDogJzQwMHB4JyxcbiAgICAgICAgICAgIG1pbkhlaWdodDogJzU2N3B4JyxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgICAgICAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1tYXQtZGlhbG9nLWNvbnRhaW5lcidcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLm9uU2VhcmNoLnN1YnNjcmliZSgoa2V5d29yZCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWxhdGVkU2VydmljZVxuICAgICAgICAgICAgICAgIC5zZWFyY2hSZWxhdGVkVG9EZXZpYXRpb24oa2V5d29yZClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSByZXMuY2F0ZWdvcmllcztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xbXNSZWxhdGVkU2VydmljZS5zZXRTZWFyY2hSZWxhdGVkKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0OiBJUmVsYXRlZFtdKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvYmogPSByZXN1bHRbMF07XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U2hhcGVNb2RlbChvYmouaWQsIG9iai5pdGVtVHlwZSwgb2JqLml0ZW1OYW1lKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ucGFyZW50SWQgPSBvYmoucGFyZW50SWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLnBhcmVudE5hbWUgPSBvYmoucGFyZW50TmFtZVxuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gdGhpcy5nZXRMaW5rVVJMKHRoaXMuc2hhcGVNb2RlbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRldmlhdGlvbjtcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uU1ZHSWNvbiA9IHRoaXMuZ2V0U2hhcGVNb2RlbEljb25CeURhdGFUeXBlKHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5pdGVtVHlwZSk7XG5cbiAgICAgICAgICAgICAgICAvLyBzYXZlIGNvbm5lY3Rpb25cbiAgICAgICAgICAgICAgICB0aGlzLm1hcFNoYXBlRGF0YSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaG93U2hhcGVDb25uZWN0aW9uVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaGFwZUNvbm5lY3RMYWJlbCA9IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5DT05ORUNURURfREVWSUFUSU9OO1xuXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBIYW5kbGUgQ2hlY2tsaXN0XG4gICAgb3BlbkNoZWNrbGlzdCgpIHtcbiAgICAgICAgY29uc3QgZGF0YTogU2VsZWN0T25lUG9wdXBEYXRhID0gbmV3IFNlbGVjdE9uZVBvcHVwRGF0YSgpO1xuICAgICAgICBkYXRhLm1vZHVsZUlkID0gTW9kdWxlVHlwZS5jaGVja2xpc3Q7XG4gICAgICAgIGRhdGEubW9kdWxlTmFtZSA9IHRoaXMuTEFORy5CUE1OLkNIRUNLTElTVDtcbiAgICAgICAgZGF0YS50cmVlRGF0YSA9IHRoaXMuY2hlY2tsaXN0RGF0YVRyZWU7XG4gICAgICAgIGRhdGEudHJlZUNvbmZpZyA9IHRoaXMuY2hlY2tsaXN0U2VsZWN0T25lQ29uZmlnO1xuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFNlbGVjdE9uZURpYWxvZywge1xuICAgICAgICAgICAgd2lkdGg6ICc0MDBweCcsXG4gICAgICAgICAgICBtaW5IZWlnaHQ6ICc1NjdweCcsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tbWF0LWRpYWxvZy1jb250YWluZXInXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5vblNlYXJjaC5zdWJzY3JpYmUoKGtleXdvcmQpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVsYXRlZFNlcnZpY2VcbiAgICAgICAgICAgICAgICAuc2VhcmNoUmVsYXRlZFRvQ2hlY2tsaXN0KGtleXdvcmQpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzLmNhdGVnb3JpZXM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucW1zUmVsYXRlZFNlcnZpY2Uuc2V0U2VhcmNoUmVsYXRlZChyZXN1bHQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdDogSVJlbGF0ZWRbXSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG9iaiA9IHJlc3VsdFswXTtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRTaGFwZU1vZGVsKG9iai5pZCwgb2JqLml0ZW1UeXBlLCBvYmouaXRlbU5hbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5wYXJlbnRJZCA9IG9iai5wYXJlbnRJZDtcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ucGFyZW50TmFtZSA9IG9iai5wYXJlbnROYW1lXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmwgPSB0aGlzLmdldExpbmtVUkwodGhpcy5zaGFwZU1vZGVsKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCA9IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQ2hlY2tsaXN0O1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5TVkdJY29uID0gdGhpcy5nZXRTaGFwZU1vZGVsSWNvbkJ5RGF0YVR5cGUodGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLml0ZW1UeXBlKTtcblxuICAgICAgICAgICAgICAgIC8vIHNhdmUgY29ubmVjdGlvblxuICAgICAgICAgICAgICAgIHRoaXMubWFwU2hhcGVEYXRhKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNob3dTaGFwZUNvbm5lY3Rpb25WYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNoYXBlQ29ubmVjdExhYmVsID0gdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkNPTk5FQ1RFRF9ERVZJQVRJT047XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBIYW5kbGUgQXR0YWNobWVudCBcbiAgICBvcGVuQXR0YWNobWVudERpYWxvZygpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IG5ldyBRTVNDS0VkaXRvclBhcmFtdGVyKCk7XG4gICAgICAgIGRhdGEubW9kdWxlID0gdGhpcy5tb2R1bGU7XG4gICAgICAgIGRhdGEuZW50aXR5SWQgPSB0aGlzLmVudGl0eUlkO1xuICAgICAgICBjb25zdCBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oTGlua0F0dGFjaG1lbnRDb21wb25lbnQsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnNjUwcHgnLFxuICAgICAgICAgICAgaGVpZ2h0OiAnNjUwcHgnLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgZGlhbG9nVGVtcGxhdGVcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRTaGFwZU1vZGVsKG51bGwsIDAsIHJlc3VsdC50aXRsZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gcmVzdWx0LnVybDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkF0dGFjaG1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5tYXRJY29uID0gJ3RleHRfc25pcHBldCc7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXBTaGFwZURhdGEoKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1NoYXBlQ29ubmVjdGlvblZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNoYXBlQ29ubmVjdExhYmVsID0gdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkNPTk5FQ1RFRF9BVFRBQ0hNRU5UO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFNoYXBlQWN0aXZpdHkoZXZlbnQ6IGFueSkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxWaWV3ID0gd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV107XG4gICAgICAgIGlmICghIXNlbGVjdGVkQ2VsbFZpZXcpIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBzZWxlY3RlZENlbGxWaWV3Lm1vZGVsLmF0dHJpYnV0ZXM7XG4gICAgICAgICAgICBpZiAoISFhdHRyaWJ1dGVzLmxpbmtVcmwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldERhdGFGcm9tU2hhcGVBdHJyaWJ1dGUoYXR0cmlidXRlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnRhcmdldC50YXJnZXRJZCA9IGF0dHJpYnV0ZXMubGlua1RhcmdldDtcbiAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1NoYXBlQ29ubmVjdGlvblZhbHVlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIC8vIFNldCBzaGFwZSBjb25uZWN0IGxhYmVsXG4gICAgICAgICAgICAgICAgaWYgKCEhdGhpcy5zaGFwZU1vZGVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5zaGFwZU1vZGVsLnNoYXBlPy5jb25uZWN0aW9uVHlwZUlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRG9jdW1lbnRPclByb2Nlc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNoYXBlQ29ubmVjdExhYmVsID0gdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkNPTk5FQ1RFRF9ET0NVTUVOVF9QUk9DRVNTO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRldmlhdGlvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hhcGVDb25uZWN0TGFiZWwgPSB0aGlzLkxBTkcuQlBNTi5DT05ORUNUSU9OX1RZUEUuQ09OTkVDVEVEX0RFVklBVElPTjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5DaGVja2xpc3Q6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNoYXBlQ29ubmVjdExhYmVsID0gdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkNPTk5FQ1RFRF9DSEVDS0xJU1Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQXR0YWNobWVudDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hhcGVDb25uZWN0TGFiZWwgPSB0aGlzLkxBTkcuQlBNTi5DT05ORUNUSU9OX1RZUEUuQ09OTkVDVEVEX0FUVEFDSE1FTlQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuTGluazpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hhcGVDb25uZWN0TGFiZWwgPSB0aGlzLkxBTkcuQlBNTi5DT05ORUNUSU9OX1RZUEUuQ09OTkVDVEVEX0xJTks7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNob3dTaGFwZUNvbm5lY3Rpb25WYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0RGF0YUZyb21TaGFwZUF0cnJpYnV0ZShzaGFwZUF0dHJpYnV0ZTogYW55KSB7XG4gICAgICAgIGlmICghIXNoYXBlQXR0cmlidXRlLmxpbmtVcmwpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdFNoYXBlTW9kZWwoJycsICcnLCBzaGFwZUF0dHJpYnV0ZS5saW5rVGl0bGUpO1xuICAgICAgICAgICAgY29uc3QgdXJsID0gc2hhcGVBdHRyaWJ1dGUubGlua1VybDtcbiAgICAgICAgICAgIGNvbnN0IGhhc2hJbmRleCA9IHVybC5pbmRleE9mKCcjJyk7XG4gICAgICAgICAgICBsZXQgZG9jdW1lbnRUeXBlID0gbnVsbDtcbiAgICAgICAgICAgIGlmICghIXNoYXBlQXR0cmlidXRlLmNvbm5lY3Rpb25UeXBlSWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCA9IHNoYXBlQXR0cmlidXRlLmNvbm5lY3Rpb25UeXBlSWQ7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnRUeXBlID0gdGhpcy5nZXRSZWxhdGVkSXRlbUJ5U2hhcGVDb25uZWN0aW9uVHlwZShzaGFwZUF0dHJpYnV0ZS5jb25uZWN0aW9uVHlwZUlkLCB1cmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnRUeXBlID0gdGhpcy5nZXREb2N1bWVudFR5cGUodXJsKTtcbiAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnRUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkID0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5Eb2N1bWVudE9yUHJvY2VzcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkID0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5BdHRhY2htZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbGlua0lkID0gdGhpcy5nZXRMaW5rSWQodXJsLCBkb2N1bWVudFR5cGUpO1xuICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmRpc3BsYXlJZCA9IGxpbmtJZCA/ICtsaW5rSWQgOiAtMTtcbiAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5pdGVtVHlwZSA9IGRvY3VtZW50VHlwZTtcbiAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5wYXJlbnROYW1lID0gc2hhcGVBdHRyaWJ1dGUucGFyZW50TmFtZTtcbiAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC50YXJnZXQudGFyZ2V0SWQgPSBzaGFwZUF0dHJpYnV0ZS5saW5rVGFyZ2V0O1xuICAgICAgICAgICAgLy8gaGFuZGxlIGxvZ29cbiAgICAgICAgICAgIGlmICh0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCA9PT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5BdHRhY2htZW50KVxuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5tYXRJY29uID0gJ3RleHRfc25pcHBldCc7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uU1ZHSWNvbiA9IHRoaXMuZ2V0U2hhcGVNb2RlbEljb25CeURhdGFUeXBlKGRvY3VtZW50VHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBoYW5kbGUgTGlua1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkID09PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkxpbmspIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwubGluay5saW5rID0gdXJsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEhbGlua0lkICYmIGRvY3VtZW50VHlwZSA9PSBEYXRhVHlwZS5kb2N1bWVudCAmJiBoYXNoSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5hbmNob3IuYW5jaG9yVmFsdWUgPSB1cmwuc3Vic3RyKGhhc2hJbmRleCArIDEsIHVybC5sZW5ndGggLSBoYXNoSW5kZXgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QW5jaG9yRG9jdW1lbnQobGlua0lkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldExpbmtJZCh1cmw6IHN0cmluZywgdHlwZTogRGF0YVR5cGUpIHtcbiAgICAgICAgbGV0IHBhcnRpYWxVcmxJbmRleCA9IDA7XG4gICAgICAgIGxldCBwYXJ0aWFsVXJsTGVuZ3RoID0gMDtcbiAgICAgICAgbGV0IGlkID0gJyc7XG4gICAgICAgIGxldCBmcm9tID0gMDtcbiAgICAgICAgbGV0IHVybExvd2VyQ2FzZSA9ICEhdXJsID8gdXJsLnRvTG93ZXJDYXNlKCkgOiAnJztcblxuICAgICAgICBjb25zdCBwYXJ0aWFsVXJsID0gdGhpcy5nZXRQYXJ0aWFsVXJsKHR5cGUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGhhc2hJbmRleCA9IHVybExvd2VyQ2FzZS5pbmRleE9mKCcjJyk7XG5cbiAgICAgICAgaWYgKCEhcGFydGlhbFVybCkge1xuICAgICAgICAgICAgcGFydGlhbFVybEluZGV4ID0gdXJsTG93ZXJDYXNlLmluZGV4T2YocGFydGlhbFVybCk7XG5cbiAgICAgICAgICAgIHBhcnRpYWxVcmxMZW5ndGggPSBwYXJ0aWFsVXJsLmxlbmd0aDtcbiAgICAgICAgICAgIGZyb20gPSBwYXJ0aWFsVXJsSW5kZXggKyBwYXJ0aWFsVXJsTGVuZ3RoO1xuXG4gICAgICAgICAgICBpZiAodHlwZSA9PSBEYXRhVHlwZS5kb2N1bWVudCAmJiBoYXNoSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIGlkID0gdXJsTG93ZXJDYXNlLnN1YnN0cihmcm9tLCBoYXNoSW5kZXggLSBmcm9tKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHVybExvd2VyQ2FzZS5zdWJzdHIoZnJvbSkuaW5kZXhPZignLycpO1xuICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGlkID0gdXJsTG93ZXJDYXNlLnN1YnN0cihmcm9tKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlkID0gdXJsTG93ZXJDYXNlLnN1YnN0cihmcm9tLCBsZW5ndGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlID09IERhdGFUeXBlLmRvY3VtZW50KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnNlSW50KGlkLCAxMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAgICAgaWQgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaWQ7XG4gICAgfVxuXG4gICAgZ2V0UGFydGlhbFVybCh0eXBlOiBEYXRhVHlwZSkge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuZG9jdW1lbnQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIENLRWRpdG9yTGlua0NvbnN0LkRPQ1VNRU5UX1BBUlRJQUxfVVJMO1xuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5wcm9jZXNzOlxuICAgICAgICAgICAgICAgIHJldHVybiBDS0VkaXRvckxpbmtDb25zdC5QUk9DRVNTX1BBUlRJQUxfVVJMO1xuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5wcm9jZXNzSW50ZXJjb25uZWN0ZWQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIENLRWRpdG9yTGlua0NvbnN0LlBST0NFU1NfSU5URVJDT05ORUNURURfUEFSVElBTF9VUkw7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLmFyZWE6XG4gICAgICAgICAgICAgICAgcmV0dXJuIENLRWRpdG9yTGlua0NvbnN0LkFSRUFfUEFSVElBTF9VUkw7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLmZvbGRlcjpcbiAgICAgICAgICAgICAgICByZXR1cm4gQ0tFZGl0b3JMaW5rQ29uc3QuRk9MREVSX1BBUlRJQUxfVVJMO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRSZWxhdGVkSXRlbUJ5U2hhcGVDb25uZWN0aW9uVHlwZShjb25uZWN0aW9uVHlwZUlkOiBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLCB1cmw6IHN0cmluZykge1xuICAgICAgICBzd2l0Y2ggKGNvbm5lY3Rpb25UeXBlSWQpIHtcbiAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5Eb2N1bWVudE9yUHJvY2VzczpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREb2N1bWVudFR5cGUodXJsKTtcbiAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5EZXZpYXRpb246XG4gICAgICAgICAgICAgICAgcmV0dXJuIERhdGFUeXBlLmRldmlhdGlvbjtcbiAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5DaGVja2xpc3Q6XG4gICAgICAgICAgICAgICAgcmV0dXJuIERhdGFUeXBlLmNoZWNrbGlzdDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXREb2N1bWVudFR5cGUodXJsOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHVybC5pbmRleE9mKENLRWRpdG9yTGlua0NvbnN0LkRPQ1VNRU5UX1BBUlRJQUxfVVJMKSA+IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gRGF0YVR5cGUuZG9jdW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodXJsLmluZGV4T2YoQ0tFZGl0b3JMaW5rQ29uc3QuUFJPQ0VTU19QQVJUSUFMX1VSTCkgPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIERhdGFUeXBlLnByb2Nlc3M7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodXJsLmluZGV4T2YoQ0tFZGl0b3JMaW5rQ29uc3QuUFJPQ0VTU19JTlRFUkNPTk5FQ1RFRF9QQVJUSUFMX1VSTCkgPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIERhdGFUeXBlLnByb2Nlc3NJbnRlcmNvbm5lY3RlZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1cmwuaW5kZXhPZihDS0VkaXRvckxpbmtDb25zdC5BUkVBX1BBUlRJQUxfVVJMKSA+IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gRGF0YVR5cGUuYXJlYTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1cmwuaW5kZXhPZihDS0VkaXRvckxpbmtDb25zdC5GT0xERVJfUEFSVElBTF9VUkwpID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBEYXRhVHlwZS5mb2xkZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodXJsLmluZGV4T2YoQ0tFZGl0b3JMaW5rQ29uc3QuREVWSUFUSU9OX1BBUlRJQUxfVVJMKSA+IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gRGF0YVR5cGUuZGV2aWF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVybC5pbmRleE9mKENLRWRpdG9yTGlua0NvbnN0LkNIRUNLTElTVF9QQVJUSUFMX1VSTCkgPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIERhdGFUeXBlLmNoZWNrbGlzdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBnZXRBbmNob3JEb2N1bWVudChkb2N1bWVudElkKSB7XG4gICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5pc0FuY2hvckxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmxpbmtTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0QW5jaG9yRG9jdW1lbnRMaXN0KGRvY3VtZW50SWQpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZG9jdW1lbnRzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hbmNob3JzID0gdGhpcy5leHRyYWN0RG9jdW1lbnRBbmNob3JzKGRvY3VtZW50cyB8fCBbXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLmlzQW5jaG9yTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZXh0cmFjdERvY3VtZW50QW5jaG9ycyhhbmNob3JEb2N1bWVudDogUU1TQ0tFZGl0b3JMaW5rQW5jaG9yRG9jdW1lbnRbXSkge1xuICAgICAgICBjb25zdCBhbmNob3JzOiBRTVNCUE1OU2hhcGVBbmNob3JbXSA9IFt7IHZhbHVlOiAwLCB2aWV3VmFsdWU6ICcnLCBhbmNob3JWYWx1ZTogTGlua0FuY2hvci5CbGFuayB9XTtcbiAgICAgICAgbGV0IGlkID0gMztcbiAgICAgICAgaWYgKGFuY2hvckRvY3VtZW50KSB7XG4gICAgICAgICAgICBhbmNob3JEb2N1bWVudC5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9IGUucmljaFRleHQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZG9tQ29udGVudCA9IGRpdjtcbiAgICAgICAgICAgICAgICBjb25zdCBhVGFncyA9IGRvbUNvbnRlbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2EnKTtcbiAgICAgICAgICAgICAgICBpZiAoYVRhZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhVGFncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFnID0gYVRhZ3NbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGFuY2hvcnMuZmluZEluZGV4KCh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4LmFuY2hvclZhbHVlID09PSB0YWcubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3VmFsdWU6IHRhZy5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yVmFsdWU6IHRhZy5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGFuY2hvcnMucHVzaCh7XG4gICAgICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgICAgIHZpZXdWYWx1ZTogdGhpcy5MQU5HLlFNU0NLRURJVE9SLkFOQ0hPUl9BVFRBQ0hNRU5ULFxuICAgICAgICAgICAgYW5jaG9yVmFsdWU6IExpbmtBbmNob3IuQXR0YWNobWVudFxuICAgICAgICB9KTtcbiAgICAgICAgYW5jaG9ycy5wdXNoKHtcbiAgICAgICAgICAgIHZhbHVlOiAyLFxuICAgICAgICAgICAgdmlld1ZhbHVlOiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuQU5DSE9SX1JFTEFURURfRE9DVU1FTlQsXG4gICAgICAgICAgICBhbmNob3JWYWx1ZTogTGlua0FuY2hvci5SZWxhdGVkXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYW5jaG9ycztcbiAgICB9XG5cbiAgICBnZXRTaGFwZU1vZGVsSWNvbkJ5RGF0YVR5cGUoZGF0YVR5cGU6IERhdGFUeXBlLCBsZXZlbFR5cGU/OiBudW1iZXIpIHtcbiAgICAgICAgc3dpdGNoIChkYXRhVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5mb2xkZXI6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdmb2xkZXJfb3V0bGluZWQnO1xuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5kb2N1bWVudDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2RvY3VtZW50JztcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuYXJlYTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3Byb2Nlc3NfYXJlYV9vdXRsaW5lZCc7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLnByb2Nlc3M6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdwcm9jZXNzJztcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUucHJvY2Vzc0ludGVyY29ubmVjdGVkOlxuICAgICAgICAgICAgICAgIHJldHVybiAncHJvY2Vzc19pbnRlcmNvbm5lY3RlZCc7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLmRldmlhdGlvbjpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2RldmlhdGlvbic7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLmNoZWNrbGlzdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2NoZWNrbGlzdCc7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAnZm9sZGVyX291dGxpbmVkJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbG9hZEFuY2hvckRvY3VtZW50KCkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxWaWV3ID0gd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV107XG4gICAgICAgIGlmICghIXNlbGVjdGVkQ2VsbFZpZXcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNoYXBlTW9kZWwgJiYgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtICYmIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5pdGVtVHlwZSA9PT0gRGF0YVR5cGUuZG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldEFuY2hvckRvY3VtZW50KHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5kaXNwbGF5SWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb3BlbkxpbmsoKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBuZXcgU2hhcGVMaW5rKCk7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQlBNTkxpbmtDb21wb25lbnQsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnMzUwcHgnLFxuICAgICAgICAgICAgaGVpZ2h0OiAnMjQ1cHgnLFxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tbWF0LWRpYWxvZy1jb250YWluZXInLFxuICAgICAgICAgICAgZGF0YVxuICAgICAgICB9KTtcblxuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKG5ld0xpbmspID0+IHtcbiAgICAgICAgICAgIGlmIChuZXdMaW5rKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U2hhcGVNb2RlbCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkID0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5MaW5rO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5saW5rLmxpbmsgPSBuZXdMaW5rLmxpbms7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXBTaGFwZURhdGEoKTtcbiAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1NoYXBlQ29ubmVjdGlvblZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hhcGVDb25uZWN0TGFiZWwgPSB0aGlzLkxBTkcuQlBNTi5DT05ORUNUSU9OX1RZUEUuQ09OTkVDVEVEX0xJTks7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGRlbGV0ZUNvbm5lY3Rpb24oc2VsZWN0ZWRDb25uZWN0aW9uVHlwZTogYW55KSB7XG4gICAgICAgIGxldCB0aXRsZSA9IHRoaXMuTEFORy5CUE1OLkRFTEVURV9BVFRBQ0hNRU5UO1xuICAgICAgICBsZXQgY29udGVudCA9IHRoaXMuTEFORy5CUE1OLkNPTkZJUk1fREVMRVRFX0FUVEFDSE1FTlQ7XG4gICAgICAgIHN3aXRjaCAoc2VsZWN0ZWRDb25uZWN0aW9uVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzOlxuICAgICAgICAgICAgICAgIHRpdGxlID0gdGhpcy5MQU5HLkJQTU4uREVMRVRFX0RPQ1VNRU5UX09SX1BST0NFU1M7XG4gICAgICAgICAgICAgICAgY29udGVudCA9IHRoaXMuTEFORy5RTVNDS0VESVRPUl9NRVNTQUdFLkNPTkZJUk1fREVMRVRFX0RPQ1VNRU5UX09SX1BST0NFU1M7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRGV2aWF0aW9uOlxuICAgICAgICAgICAgICAgIHRpdGxlID0gdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkRFTEVURV9TSEFQRV9ERVZJQVRJT047XG4gICAgICAgICAgICAgICAgY29udGVudCA9IHRoaXMuTEFORy5RTVNDS0VESVRPUl9NRVNTQUdFLkNPTkZJUk1fREVMRVRFX0RFVklBVElPTjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5DaGVja2xpc3Q6XG4gICAgICAgICAgICAgICAgdGl0bGUgPSB0aGlzLkxBTkcuQlBNTi5DT05ORUNUSU9OX1RZUEUuREVMRVRFX1NIQVBFX0NIRUNLTElTVDtcbiAgICAgICAgICAgICAgICBjb250ZW50ID0gdGhpcy5MQU5HLlFNU0NLRURJVE9SX01FU1NBR0UuQ09ORklSTV9ERUxFVEVfQ0hFQ0tMSVNUO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkxpbms6XG4gICAgICAgICAgICAgICAgdGl0bGUgPSB0aGlzLkxBTkcuQlBNTi5ERUxFVEVfTElOSztcbiAgICAgICAgICAgICAgICBjb250ZW50ID0gdGhpcy5MQU5HLlFNU0NLRURJVE9SX01FU1NBR0UuQ09ORklSTV9ERUxFVEVfQVRUQUNITUVOVDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5BdHRhY2htZW50OlxuICAgICAgICAgICAgICAgIHRpdGxlID0gdGhpcy5MQU5HLkJQTU4uREVMRVRFX0FUVEFDSE1FTlQ7XG4gICAgICAgICAgICAgICAgY29udGVudCA9IHRoaXMuTEFORy5RTVNDS0VESVRPUl9NRVNTQUdFLkNPTkZJUk1fREVMRVRFX0FUVEFDSE1FTlQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zaG93Q29uZmlybURpYWxvZyh0aXRsZSwgY29udGVudCwgZmFsc2UsICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IHRydWUgfHwgKHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JyAmJiB2YWx1ZS5pc0NvbmZpcm1lZCA9PSB0cnVlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwgPSBuZXcgU2hhcGVNb2RlbCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1NoYXBlQ29ubmVjdGlvblZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmICghIXdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXS5tb2RlbC5yZW1vdmVQcm9wKCdsaW5rVXJsJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXS5tb2RlbC5yZW1vdmVQcm9wKCdsaW5rVGFyZ2V0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXS5tb2RlbC5yZW1vdmVQcm9wKCdsaW5rVGl0bGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddLm1vZGVsLnJlbW92ZVByb3AoJ2Nvbm5lY3Rpb25UeXBlSWQnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzYXZlU2hhcGVUYXJnZXQodGFyZ2V0SWQ6IGFueSkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxWaWV3ID0gd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV107XG4gICAgICAgIGlmICghIXNlbGVjdGVkQ2VsbFZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC50YXJnZXQudGFyZ2V0SWQgPSB0YXJnZXRJZDtcbiAgICAgICAgICAgIHNlbGVjdGVkQ2VsbFZpZXcubW9kZWwucHJvcCgnbGlua1RhcmdldCcsIHRhcmdldElkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNhdmVTaGFwZUFuY2hvcihhbmNob3JWYWx1ZTogYW55KSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbFZpZXcgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXTtcbiAgICAgICAgaWYgKCEhc2VsZWN0ZWRDZWxsVmlldykge1xuICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLmFuY2hvci5hbmNob3JWYWx1ZSA9IGFuY2hvclZhbHVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5pdGVtVHlwZSA9PT0gRGF0YVR5cGUuZG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ubGlua1VybCA9IGAke0NLRWRpdG9yTGlua0NvbnN0LkRPQ1VNRU5UX1BBUlRJQUxfVVJMfSR7dGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmRpc3BsYXlJZH0jJHthbmNob3JWYWx1ZX1gXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDZWxsVmlldy5tb2RlbC5wcm9wKCdsaW5rVXJsJywgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbWFwU2hhcGVEYXRhKCkge1xuICAgICAgICBpZiAoISF3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXSkge1xuICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10ubW9kZWwucHJvcCgnbGlua1VybCcsIHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkICE9PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkxpbmtcbiAgICAgICAgICAgICAgICA/IHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsIDogdGhpcy5zaGFwZU1vZGVsLmxpbmsubGluayk7XG4gICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXS5tb2RlbC5wcm9wKCdsaW5rVGFyZ2V0JywgVGFyZ2V0VHlwZU5hbWUubmV3KTtcbiAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddLm1vZGVsLnByb3AoJ2xpbmtUaXRsZScsIHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkICE9PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkxpbmtcbiAgICAgICAgICAgICAgICA/IHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5pdGVtTmFtZSA6ICcnKTtcbiAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddLm1vZGVsLnByb3AoJ2Nvbm5lY3Rpb25UeXBlSWQnLCB0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCk7XG4gICAgICAgICAgICAvLyBkZXZpYXRpb24gYW5kIGNoZWNrbGlzdCBoYXZlIHBhcmVudCBuYW1lXG4gICAgICAgICAgICBpZiAodGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPT09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRGV2aWF0aW9uXG4gICAgICAgICAgICAgICAgfHwgdGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPT09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQ2hlY2tsaXN0KVxuICAgICAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddLm1vZGVsLnByb3AoJ3BhcmVudE5hbWUnLCB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ucGFyZW50TmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=