qms-angular 1.1.64 → 1.1.65
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/qms-angular.umd.js +1974 -1657
- package/bundles/qms-angular.umd.js.map +1 -1
- package/esm2015/lib/common/enum/bpmn-add-connection-type.enum.js +6 -0
- package/esm2015/lib/common/enum/data-type.enum.js +2 -1
- package/esm2015/lib/common/enum/shape-connection-action.enum.js +7 -0
- package/esm2015/lib/common/enum/shape-targets.enum.js +6 -0
- package/esm2015/lib/common/qms-icon.const.js +13 -1
- package/esm2015/lib/components/app-icon/icon-registry.service.js +17 -2
- package/esm2015/lib/components/qms-bpmn/models/change-document-anchor-for-shape-event.model.js +3 -0
- package/esm2015/lib/components/qms-bpmn/models/flow-chart-shape/activity-related-items.js +2 -1
- package/esm2015/lib/components/qms-bpmn/models/remove-shape-connection-item-event.model.js +5 -0
- package/esm2015/lib/components/qms-bpmn/models/shape-connection-action-event.model.js +3 -0
- package/esm2015/lib/components/qms-bpmn/models/shape-connection-action.model.js +3 -0
- package/esm2015/lib/components/qms-bpmn/models/shape-connection-detail.model.js +32 -0
- package/esm2015/lib/components/qms-bpmn/models/shape-flow-chart-connection-detail.model.js +7 -0
- package/esm2015/lib/components/qms-bpmn/qms-bpmn.component.js +120 -16
- package/esm2015/lib/components/qms-bpmn/qms-bpmn.module.js +15 -5
- package/esm2015/lib/components/related/list-other-related/list-related.component.js +6 -3
- package/esm2015/lib/components/select-access-dialog/select-access-dialog.component.js +2 -2
- package/esm2015/lib/components/select-process-data/select-process-data.component.js +2 -3
- package/esm2015/lib/components/select-process-data-tree/select-process-data-tree.component.js +1 -1
- package/esm2015/lib/components/select-process-document/select-process-document.component.js +3 -3
- package/esm2015/lib/components/treeNew/tree.component.js +3 -3
- package/esm2015/lib/model/en.js +8 -2
- package/esm2015/lib/model/no.js +8 -2
- package/esm2015/lib/qms-ckeditor-components/common/enums/shape-flow-chart-connection-type.js +4 -1
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.js +38 -34
- package/esm2015/lib/qms-ckeditor-components/models/connect-type.model.js +1 -1
- package/esm2015/lib/qms-ckeditor-components/models/qms-bpmn-config.model.js +2 -1
- package/esm2015/lib/services/qms-bpmn.service.js +24 -1
- package/esm2015/public-api.js +11 -1
- package/esm2015/qms-angular.js +3 -1
- package/fesm2015/qms-angular.js +2150 -1905
- package/fesm2015/qms-angular.js.map +1 -1
- package/lib/common/enum/bpmn-add-connection-type.enum.d.ts +4 -0
- package/lib/common/enum/data-type.enum.d.ts +2 -1
- package/lib/common/enum/shape-connection-action.enum.d.ts +5 -0
- package/lib/common/enum/shape-targets.enum.d.ts +4 -0
- package/lib/common/qms-icon.const.d.ts +5 -0
- package/lib/components/app-icon/icon-registry.service.d.ts +5 -0
- package/lib/components/qms-bpmn/models/change-document-anchor-for-shape-event.model.d.ts +5 -0
- package/lib/components/qms-bpmn/models/flow-chart-shape/activity-related-items.d.ts +1 -0
- package/lib/components/qms-bpmn/models/remove-shape-connection-item-event.model.d.ts +13 -0
- package/lib/components/qms-bpmn/models/shape-connection-action-event.model.d.ts +7 -0
- package/lib/components/qms-bpmn/models/shape-connection-action.model.d.ts +5 -0
- package/lib/components/qms-bpmn/models/shape-connection-detail.model.d.ts +71 -0
- package/lib/components/qms-bpmn/models/shape-flow-chart-connection-detail.model.d.ts +6 -0
- package/lib/components/qms-bpmn/qms-bpmn.component.d.ts +51 -10
- package/lib/components/related/list-other-related/list-related.component.d.ts +1 -1
- package/lib/model/en.d.ts +6 -0
- package/lib/model/no.d.ts +6 -0
- package/lib/qms-ckeditor-components/common/enums/shape-flow-chart-connection-type.d.ts +4 -1
- package/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.d.ts +19 -19
- package/lib/qms-ckeditor-components/models/connect-type.model.d.ts +2 -0
- package/lib/qms-ckeditor-components/models/qms-bpmn-config.model.d.ts +4 -0
- package/package.json +1 -1
- package/public-api.d.ts +10 -0
- package/qms-angular.d.ts +2 -0
- package/qms-angular.metadata.json +1 -1
- package/src/assets/jointjs/scss/bpmn.css +2 -2
- package/src/lib/components/qms-bpmn/qms-bpmn.component.scss +263 -0
- package/src/lib/components/related/list-other-related/list-related.component.scss +201 -197
- package/src/lib/components/select-process-data/select-process-data.component.scss +0 -2
- package/src/lib/components/select-process-data-tree/select-process-data-tree.component.scss +0 -1
- package/src/lib/components/select-process-document/select-process-document.component.scss +4 -0
- package/src/lib/components/treeNew/tree.component.scss +4 -0
@@ -1,52 +1,53 @@
|
|
1
1
|
import { __awaiter } from "tslib";
|
2
2
|
import { Component, Inject, Input } from "@angular/core";
|
3
|
-
import { MatDialog, MatDialogRef
|
3
|
+
import { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from "@angular/material/dialog";
|
4
|
+
import { MatIconRegistry } from "@angular/material/icon";
|
5
|
+
import { DomSanitizer } from "@angular/platform-browser";
|
6
|
+
import { forkJoin, of } from "rxjs";
|
4
7
|
import { takeUntil } from "rxjs/operators";
|
8
|
+
import { BpmnAddConnectionType } from "../../../common/enum/bpmn-add-connection-type.enum";
|
9
|
+
import { DataType } from "../../../common/enum/data-type.enum";
|
10
|
+
import { DocumentNodeType } from "../../../common/enum/document-node-type.enum";
|
11
|
+
import { ModuleType } from "../../../common/enum/module-type.enum";
|
12
|
+
import { ProcessClassificationTypes } from "../../../common/enum/process-classification-type.enum";
|
13
|
+
import { ProcessNodeType } from "../../../common/enum/process-node-type.enum";
|
14
|
+
import { ProcessStatus } from "../../../common/enum/processStatus.enum";
|
15
|
+
import ToolbarFunction from "../../../common/jointJS/bpmn/toolbar.function";
|
16
|
+
import { QMSIconRegistryService } from "../../../components/app-icon/icon-registry.service";
|
17
|
+
import { ShapeLink } from "../../../components/qms-bpmn/models/flow-chart-shape/shape-link";
|
18
|
+
import { ShapeModel } from "../../../components/qms-bpmn/models/shape-model.model";
|
19
|
+
import { QMSSelectOneGlobalService, SelectOneDialog, SelectOnePopupData } from "../../../components/select-one";
|
20
|
+
import { QMSSelectProcessDocumentGlobalService, SelectProcessDocumentPopupComponent, SelectProcessDocumentPopupData } from "../../../components/select-process-document";
|
21
|
+
import { BpmnService } from "../../../services/qms-bpmn.service";
|
5
22
|
import { TranslateLibraryService } from "../../../services/translation-registry.service";
|
6
23
|
import { CKEditorEventConst } from "../../common/constants/ckeditorEvent.constant";
|
7
24
|
import { FlowChartConst } from "../../common/constants/ckeditorFlowchart.const";
|
25
|
+
import { CKEditorLinkConst } from "../../common/constants/ckeditorLink.constant";
|
26
|
+
import { FlowchartViewMode } from "../../common/enums/flowchart-view-mode.enum";
|
27
|
+
import { LinkAnchor } from "../../common/enums/link-anchor.enum";
|
28
|
+
import { ShapeFlowChartConnectionType } from '../../common/enums/shape-flow-chart-connection-type';
|
29
|
+
import { TargetTypeName } from "../../common/enums/target-type.enum";
|
30
|
+
import { base64StringToFile } from "../../common/helper/fileHelper";
|
8
31
|
import guidHelper from "../../common/helper/guidHelper";
|
9
32
|
import { QMSCKEditorBpmn } from "../../common/models/qms-ckeditor-bpmn.model";
|
10
33
|
import { QMSCKEditorDialogData } from "../../common/models/qms-ckeditor-dialog.model";
|
34
|
+
import QMSCKEditorParamter from "../../common/models/qms-ckeditor-parameter.model";
|
11
35
|
import { QMSCKEditorConfirmComponent } from "../../common/module/confirm/qms-ckeditor-confirm.component";
|
36
|
+
import { QMSCKEditorToastService } from "../../common/toast/qms-ckeditor-toast.service";
|
37
|
+
import { DiagramTemplates } from "../../models/diagram-template.model";
|
38
|
+
import { GetSearchProcessDocumentOption } from "../../models/get-search-process-document-option";
|
39
|
+
import { QMSBPMNConfig } from "../../models/qms-bpmn-config.model";
|
40
|
+
import { QMSCKEditorBpmnData } from '../../models/qms-ckeditor-bpmn-data.model';
|
12
41
|
import { QMSCKEditorBaseComponent } from "../../qms-ckeditor-base.component";
|
13
42
|
import { QMSCKEditorBpmnApiService } from "../../services/qms-ckeditor-bpmn-api.service";
|
14
|
-
import {
|
15
|
-
import {
|
16
|
-
import { QMSCKEditorBpmnData } from '../../models/qms-ckeditor-bpmn-data.model';
|
43
|
+
import { QMSCKEditorBPMNConnectionService } from "../../services/qms-ckeditor-bpmn-connection.service";
|
44
|
+
import { QMSCKEditorCommonService } from "../../services/qms-ckeditor-common.services";
|
17
45
|
import { QMSCKEditorLinkService } from '../../services/qms-ckeditor-link.service';
|
46
|
+
import { QMSCKEditorTreeService } from "../../services/qms-ckeditor-tree.service";
|
18
47
|
import { QMSCKEditorUploadService } from "../../services/qms-ckeditor-upload.service";
|
19
|
-
import { base64StringToFile } from "../../common/helper/fileHelper";
|
20
|
-
import { QMSCKEditorCommonService } from "../../services/qms-ckeditor-common.services";
|
21
|
-
import { QMSBPMNConfig } from "../../models/qms-bpmn-config.model";
|
22
|
-
import QMSCKEditorBPMNFunctions from './../../common/functions/bpmn.function';
|
23
|
-
import { DiagramTemplates } from "../../models/diagram-template.model";
|
24
|
-
import { DataType } from "../../../common/enum/data-type.enum";
|
25
|
-
import { FlowchartViewMode } from "../../common/enums/flowchart-view-mode.enum";
|
26
|
-
import { QMSSelectProcessDocumentGlobalService, SelectProcessDocumentPopupComponent, SelectProcessDocumentPopupData } from "../../../components/select-process-document";
|
27
|
-
import { ModuleType } from "../../../common/enum/module-type.enum";
|
28
|
-
import { ProcessNodeType } from "../../../common/enum/process-node-type.enum";
|
29
|
-
import { DocumentNodeType } from "../../../common/enum/document-node-type.enum";
|
30
|
-
import { ProcessStatus } from "../../../common/enum/processStatus.enum";
|
31
|
-
import { QMSCKEditorBPMNConnectionService } from "../../services/qms-ckeditor-bpmn-connection.service";
|
32
|
-
import { ShapeModel } from "../../../components/qms-bpmn/models/shape-model.model";
|
33
|
-
import { TargetTypeName } from "../../common/enums/target-type.enum";
|
34
|
-
import { CKEditorLinkConst } from "../../common/constants/ckeditorLink.constant";
|
35
|
-
import { forkJoin, of } from "rxjs";
|
36
48
|
import { LinkAttachmentComponent } from "../qms-ckeditor-link/attachments/link-attachment.component";
|
37
|
-
import
|
38
|
-
import { LinkAnchor } from "../../common/enums/link-anchor.enum";
|
39
|
-
import { QMSCKEditorToastService } from "../../common/toast/qms-ckeditor-toast.service";
|
49
|
+
import QMSCKEditorBPMNFunctions from './../../common/functions/bpmn.function';
|
40
50
|
import { BPMNLinkComponent } from "./link/bpmn-link.component";
|
41
|
-
import { ShapeLink } from "../../../components/qms-bpmn/models/flow-chart-shape/shape-link";
|
42
|
-
import ToolbarFunction from "../../../common/jointJS/bpmn/toolbar.function";
|
43
|
-
import { ProcessClassificationTypes } from "../../../common/enum/process-classification-type.enum";
|
44
|
-
import { QMSCKEditorTreeService } from "../../services/qms-ckeditor-tree.service";
|
45
|
-
import { QMSIconRegistryService } from "../../../components/app-icon/icon-registry.service";
|
46
|
-
import { DomSanitizer } from "@angular/platform-browser";
|
47
|
-
import { MatIconRegistry } from "@angular/material/icon";
|
48
|
-
import { GetSearchProcessDocumentOption } from "../../models/get-search-process-document-option";
|
49
|
-
import { QMSSelectOneGlobalService, SelectOneDialog, SelectOnePopupData } from "../../../components/select-one";
|
50
51
|
export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
|
51
52
|
constructor(dialog, translate, bpmnService, bpmnApiService, linkService, uploadService, commonService, selectProcessDocumentGlobalService, relatedService, dialogRef, treeService, qmsRelatedService, appIconService, sanitizer, iconRegistry, data) {
|
52
53
|
super();
|
@@ -95,6 +96,7 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
|
|
95
96
|
appIconService.registerDeviationIcon(iconRegistry, sanitizer);
|
96
97
|
appIconService.registerChecklistIcon(iconRegistry, sanitizer);
|
97
98
|
appIconService.registerProcessInterconnectedIcon(iconRegistry, sanitizer);
|
99
|
+
this.QMSBPMNConfig.showShapeConnectionValue = true;
|
98
100
|
}
|
99
101
|
ngOnInit() {
|
100
102
|
return __awaiter(this, void 0, void 0, function* () {
|
@@ -129,6 +131,8 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
|
|
129
131
|
};
|
130
132
|
}) || [];
|
131
133
|
this.bpmnService.buildDiagram(this.templates, this.template, 'default joint-theme-bpmn', this.jsonContent, this.QMSBPMNConfig.editMode, null, ToolbarFunction.getToolbarConfiguration(this.LANG), this.language);
|
134
|
+
this.QMSBPMNConfig.showShapeConnectionValue = true;
|
135
|
+
this.QMSBPMNConfig.addConnectionType = BpmnAddConnectionType.SingleConnection;
|
132
136
|
});
|
133
137
|
}
|
134
138
|
initConnectionTypes() {
|
@@ -1153,4 +1157,4 @@ QMSCKEditorBpmnComponent.ctorParameters = () => [
|
|
1153
1157
|
QMSCKEditorBpmnComponent.propDecorators = {
|
1154
1158
|
ckEditor: [{ type: Input }]
|
1155
1159
|
};
|
1156
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWNrZWRpdG9yLWJwbW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcW1zLWFuZ3VsYXIvc3JjL2xpYi9xbXMtY2tlZGl0b3ItY29tcG9uZW50cy9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1icG1uL3Ftcy1ja2VkaXRvci1icG1uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWdCLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNoRixPQUFPLFVBQVUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDOUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDdEYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDekcsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDN0UsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDekYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ25HLE9BQU8sRUFB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O2dCQUNwSSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNqRCxNQUFNLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUMzRywyQ0FBMkM7WUFDM0MsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsS0FBSyw0QkFBNEIsQ0FBQyxTQUFTO21CQUM5RSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsS0FBSyw0QkFBNEIsQ0FBQyxTQUFTO2dCQUNwRixNQUFNLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzVHO0lBQ0wsQ0FBQzs7O1lBdnBDSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLG1CQUFtQjtnQkFDN0IsdzhDQUFpRDs7YUFFcEQ7OztZQTNEUSxTQUFTO1lBRVQsdUJBQXVCO1lBVXZCLFdBQVc7WUFEWCx5QkFBeUI7WUFJekIsc0JBQXNCO1lBQ3RCLHdCQUF3QjtZQUV4Qix3QkFBd0I7WUFPeEIscUNBQXFDO1lBTXJDLGdDQUFnQztZQS9CckIsWUFBWTtZQWdEdkIsc0JBQXNCO1lBS3RCLHlCQUF5QjtZQUp6QixzQkFBc0I7WUFDdEIsWUFBWTtZQUNaLGVBQWU7WUFyQ2YsbUJBQW1CLHVCQXVHbkIsTUFBTSxTQUFDLGVBQWU7Ozt1QkF2RDFCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBJbnB1dCwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0aW9uLXJlZ2lzdHJ5LnNlcnZpY2VcIjtcbmltcG9ydCB7IENLRWRpdG9yRXZlbnRDb25zdCB9IGZyb20gXCIuLi8uLi9jb21tb24vY29uc3RhbnRzL2NrZWRpdG9yRXZlbnQuY29uc3RhbnRcIjtcbmltcG9ydCB7IEZsb3dDaGFydENvbnN0IH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9jb25zdGFudHMvY2tlZGl0b3JGbG93Y2hhcnQuY29uc3RcIjtcbmltcG9ydCBndWlkSGVscGVyIGZyb20gXCIuLi8uLi9jb21tb24vaGVscGVyL2d1aWRIZWxwZXJcIjtcbmltcG9ydCB7IFFNU0NLRWRpdG9yQnBtblRlbXBsYXRlIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLWJwbW4tdGVtcGxhdGUubW9kZWxcIjtcbmltcG9ydCB7IFFNU0NLRWRpdG9yQnBtbiB9IGZyb20gXCIuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci1icG1uLm1vZGVsXCI7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckRpYWxvZ0RhdGEgfSBmcm9tIFwiLi4vLi4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItZGlhbG9nLm1vZGVsXCI7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckNvbmZpcm1Db21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tbW9uL21vZHVsZS9jb25maXJtL3Ftcy1ja2VkaXRvci1jb25maXJtLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCYXNlQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL3Ftcy1ja2VkaXRvci1iYXNlLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCcG1uQXBpU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9xbXMtY2tlZGl0b3ItYnBtbi1hcGkuc2VydmljZVwiO1xuaW1wb3J0IHsgQnBtblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvcW1zLWJwbW4uc2VydmljZVwiO1xuaW1wb3J0IHsgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9lbnVtcy9zaGFwZS1mbG93LWNoYXJ0LWNvbm5lY3Rpb24tdHlwZSc7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckJwbW5EYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Ftcy1ja2VkaXRvci1icG1uLWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JMaW5rU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci1saW5rLnNlcnZpY2UnO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JVcGxvYWRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci11cGxvYWQuc2VydmljZVwiO1xuaW1wb3J0IHsgYmFzZTY0U3RyaW5nVG9GaWxlIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9oZWxwZXIvZmlsZUhlbHBlclwiO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JDb21tb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci1jb21tb24uc2VydmljZXNcIjtcbmltcG9ydCB7IFFNU0JQTU5Db25maWcgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3Ftcy1icG1uLWNvbmZpZy5tb2RlbFwiO1xuaW1wb3J0IFFNU0NLRWRpdG9yQlBNTkZ1bmN0aW9ucyBmcm9tICcuLy4uLy4uL2NvbW1vbi9mdW5jdGlvbnMvYnBtbi5mdW5jdGlvbic7XG5pbXBvcnQgeyBEaWFncmFtVGVtcGxhdGVzIH0gZnJvbSBcIi4uLy4uL21vZGVscy9kaWFncmFtLXRlbXBsYXRlLm1vZGVsXCI7XG5pbXBvcnQgeyBUcmVlQ29uZmlnLCBUcmVlTW9kZWwgfSBmcm9tIFwiLi4vLi4vLi4vY29tcG9uZW50cy90cmVlXCI7XG5pbXBvcnQgeyBEYXRhVHlwZSB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vZW51bS9kYXRhLXR5cGUuZW51bVwiO1xuaW1wb3J0IHsgRmxvd2NoYXJ0Vmlld01vZGUgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2VudW1zL2Zsb3djaGFydC12aWV3LW1vZGUuZW51bVwiO1xuaW1wb3J0IHsgUU1TU2VsZWN0UHJvY2Vzc0RvY3VtZW50R2xvYmFsU2VydmljZSwgU2VsZWN0UHJvY2Vzc0RvY3VtZW50UG9wdXBDb21wb25lbnQsIFNlbGVjdFByb2Nlc3NEb2N1bWVudFBvcHVwRGF0YSB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL3NlbGVjdC1wcm9jZXNzLWRvY3VtZW50XCI7XG5pbXBvcnQgeyBNb2R1bGVUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9lbnVtL21vZHVsZS10eXBlLmVudW1cIjtcbmltcG9ydCB7IFByb2Nlc3NOb2RlVHlwZSB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vZW51bS9wcm9jZXNzLW5vZGUtdHlwZS5lbnVtXCI7XG5pbXBvcnQgeyBJUmVsYXRlZCB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL3JlbGF0ZWQvbW9kZWwvcmVsYXRlZC1kYXRhLm1vZGVsXCI7XG5pbXBvcnQgeyBEb2N1bWVudE5vZGVUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9lbnVtL2RvY3VtZW50LW5vZGUtdHlwZS5lbnVtXCI7XG5pbXBvcnQgeyBQcm9jZXNzU3RhdHVzIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9lbnVtL3Byb2Nlc3NTdGF0dXMuZW51bVwiO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCUE1OQ29ubmVjdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvcW1zLWNrZWRpdG9yLWJwbW4tY29ubmVjdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBEb2N1bWVudFRyZWVOb2RlRGF0YSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvZG9jdW1lbnQtdHJlZS1ub2RlLWRhdGEubW9kZWxcIjtcbmltcG9ydCB7IFNoYXBlTW9kZWwgfSBmcm9tIFwiLi4vLi4vLi4vY29tcG9uZW50cy9xbXMtYnBtbi9tb2RlbHMvc2hhcGUtbW9kZWwubW9kZWxcIjtcbmltcG9ydCB7IFRhcmdldFR5cGVOYW1lIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9lbnVtcy90YXJnZXQtdHlwZS5lbnVtXCI7XG5pbXBvcnQgeyBRTVNCUE1OU2hhcGVUYXJnZXQgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3Ftcy1icG1uLXNoYXBlLXRhcmdldFwiO1xuaW1wb3J0IHsgQ0tFZGl0b3JMaW5rQ29uc3QgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2NvbnN0YW50cy9ja2VkaXRvckxpbmsuY29uc3RhbnRcIjtcbmltcG9ydCB7IGZvcmtKb2luLCBvZiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBMaW5rQXR0YWNobWVudENvbXBvbmVudCB9IGZyb20gXCIuLi9xbXMtY2tlZGl0b3ItbGluay9hdHRhY2htZW50cy9saW5rLWF0dGFjaG1lbnQuY29tcG9uZW50XCI7XG5pbXBvcnQgUU1TQ0tFZGl0b3JQYXJhbXRlciBmcm9tIFwiLi4vLi4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItcGFyYW1ldGVyLm1vZGVsXCI7XG5pbXBvcnQgeyBRTVNCUE1OU2hhcGVBbmNob3IgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3Ftcy1icG1uLXNoYXBlLWFuY2hvci5tb2RlbFwiO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JMaW5rQW5jaG9yRG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItbGluay1hbmNob3ItZG9jdW1lbnQubW9kZWxcIjtcbmltcG9ydCB7IExpbmtBbmNob3IgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2VudW1zL2xpbmstYW5jaG9yLmVudW1cIjtcbmltcG9ydCB7IFFNU0NLRWRpdG9yVG9hc3RTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi90b2FzdC9xbXMtY2tlZGl0b3ItdG9hc3Quc2VydmljZVwiO1xuaW1wb3J0IHsgQlBNTkxpbmtDb21wb25lbnQgfSBmcm9tIFwiLi9saW5rL2JwbW4tbGluay5jb21wb25lbnRcIjtcbmltcG9ydCB7IFNoYXBlTGluayB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL3Ftcy1icG1uL21vZGVscy9mbG93LWNoYXJ0LXNoYXBlL3NoYXBlLWxpbmtcIjtcbmltcG9ydCBUb29sYmFyRnVuY3Rpb24gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9qb2ludEpTL2JwbW4vdG9vbGJhci5mdW5jdGlvblwiO1xuaW1wb3J0IHsgUHJvY2Vzc0NsYXNzaWZpY2F0aW9uVHlwZXMgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2VudW0vcHJvY2Vzcy1jbGFzc2lmaWNhdGlvbi10eXBlLmVudW1cIjtcbmltcG9ydCB7IFFNU0NLRWRpdG9yVHJlZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvcW1zLWNrZWRpdG9yLXRyZWUuc2VydmljZVwiO1xuaW1wb3J0IHsgUU1TSWNvblJlZ2lzdHJ5U2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL2FwcC1pY29uL2ljb24tcmVnaXN0cnkuc2VydmljZVwiO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcbmltcG9ydCB7IE1hdEljb25SZWdpc3RyeSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9pY29uXCI7XG5pbXBvcnQgeyBHZXRTZWFyY2hQcm9jZXNzRG9jdW1lbnRPcHRpb24gfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2dldC1zZWFyY2gtcHJvY2Vzcy1kb2N1bWVudC1vcHRpb25cIjtcbmltcG9ydCB7IFFNU1NlbGVjdE9uZUdsb2JhbFNlcnZpY2UsIFNlbGVjdE9uZURpYWxvZywgU2VsZWN0T25lUG9wdXBEYXRhIH0gZnJvbSBcIi4uLy4uLy4uL2NvbXBvbmVudHMvc2VsZWN0LW9uZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3Ftcy1ja2VkaXRvci1icG1uJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcW1zLWNrZWRpdG9yLWJwbW4uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3Ftcy1ja2VkaXRvci1icG1uLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUU1TQ0tFZGl0b3JCcG1uQ29tcG9uZW50IGV4dGVuZHMgUU1TQ0tFZGl0b3JCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgICBMQU5HOiBhbnk7XG4gICAgQElucHV0KCkgY2tFZGl0b3I6IGFueTtcblxuICAgIFFNU0JQTU5Db25maWc6IFFNU0JQTU5Db25maWcgPSBuZXcgUU1TQlBNTkNvbmZpZygpO1xuICAgIGpzb25Db250ZW50OiBzdHJpbmc7XG5cbiAgICBpZCA9ICcnO1xuICAgIG1vZHVsZTogbnVtYmVyO1xuICAgIGVudGl0eUlkID0gJyc7XG4gICAgZWRpdG9yQ29udGVudCA9ICcnO1xuXG4gICAgYnBtbjogUU1TQ0tFZGl0b3JCcG1uID0gbmV3IFFNU0NLRWRpdG9yQnBtbigpO1xuICAgIGJwbW5UZW1sYXRlczogUU1TQ0tFZGl0b3JCcG1uVGVtcGxhdGVbXSA9IFtdO1xuICAgIHRlbXBsYXRlO1xuICAgIHRlbXBsYXRlcyA9IFtdO1xuICAgIHNoYXBlTW9kZWw6IFNoYXBlTW9kZWwgPSBuZXcgU2hhcGVNb2RlbCgpO1xuICAgIC8qKiB0ZW1wbGF0ZSBiZWZvcmUgc2VsZWN0ZWQgYWxyZWFkeSBhbm90aGVyIHRlbXBsYXRlIGluIHNlbGVjdCBib3ggKHVzaW5nIGZvciByZXNldCB0ZW1wbGF0ZSkqL1xuICAgIHRlbXBUZW1wbGF0ZTogYW55O1xuICAgIHRhcmdldHM6IFFNU0JQTU5TaGFwZVRhcmdldFtdID0gW107XG4gICAgYW5jaG9yczogUU1TQlBNTlNoYXBlQW5jaG9yW10gPSBbXTtcbiAgICAvLyBwcm9jZXNzL2RvY3VtZW50IGNvbm5lY3Rpb24gdHlwZVxuICAgIHNwbGl0VmlldzogYm9vbGVhbjtcbiAgICBwcm9jZXNzVHJlZUNvbmZpZzogVHJlZUNvbmZpZztcbiAgICBkb2N1bWVudFRyZWVDb25maWc6IFRyZWVDb25maWc7XG4gICAgdHJlZVByb2Nlc3NEYXRhOiBEb2N1bWVudFRyZWVOb2RlRGF0YVtdO1xuICAgIHRyZWVEb2N1bWVudERhdGE6IERvY3VtZW50VHJlZU5vZGVEYXRhW107XG4gICAgbG9hZGluZ1JlbGF0ZWREYXRhOiBib29sZWFuO1xuICAgIGVuYWJsZWRJbnRlcmNvbm5lY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGVuYWJsZWREZXZpYXRpb25Nb2R1bGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBlbmFibGVkQ2hlY2tsaXN0TW9kdWxlOiBib29sZWFuID0gZmFsc2U7XG4gICAgbGFuZ3VhZ2U6IHN0cmluZyA9ICdlbic7XG5cbiAgICAvKiBEZXZpYXRpb24gY29ubmVjdCB0eXBlICovXG4gICAgZGV2aWF0aW9uRGF0YVRyZWU6IFRyZWVNb2RlbFtdO1xuICAgIGRldmlhdGlvblNlbGVjdE9uZUNvbmZpZzogVHJlZUNvbmZpZztcblxuICAgIC8qIENoZWNrbGlzdCBjb25uZWN0IHR5cGUgKi9cbiAgICBjaGVja2xpc3REYXRhVHJlZTogVHJlZU1vZGVsW107XG4gICAgY2hlY2tsaXN0U2VsZWN0T25lQ29uZmlnOiBUcmVlQ29uZmlnO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBicG1uU2VydmljZTogQnBtblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYnBtbkFwaVNlcnZpY2U6IFFNU0NLRWRpdG9yQnBtbkFwaVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbGlua1NlcnZpY2U6IFFNU0NLRWRpdG9yTGlua1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdXBsb2FkU2VydmljZTogUU1TQ0tFZGl0b3JVcGxvYWRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbW1vblNlcnZpY2U6IFFNU0NLRWRpdG9yQ29tbW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBzZWxlY3RQcm9jZXNzRG9jdW1lbnRHbG9iYWxTZXJ2aWNlOiBRTVNTZWxlY3RQcm9jZXNzRG9jdW1lbnRHbG9iYWxTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlbGF0ZWRTZXJ2aWNlOiBRTVNDS0VkaXRvckJQTU5Db25uZWN0aW9uU2VydmljZSxcbiAgICAgICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFFNU0NLRWRpdG9yQnBtbkNvbXBvbmVudD4sXG4gICAgICAgIHByaXZhdGUgdHJlZVNlcnZpY2U6IFFNU0NLRWRpdG9yVHJlZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcW1zUmVsYXRlZFNlcnZpY2U6IFFNU1NlbGVjdE9uZUdsb2JhbFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYXBwSWNvblNlcnZpY2U6IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgICAgIHByaXZhdGUgaWNvblJlZ2lzdHJ5OiBNYXRJY29uUmVnaXN0cnksXG4gICAgICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogUU1TQ0tFZGl0b3JCcG1uRGF0YVxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmlkID0gZGF0YS5pZDtcbiAgICAgICAgdGhpcy5tb2R1bGUgPSBkYXRhLm1vZHVsZTtcbiAgICAgICAgdGhpcy5lbnRpdHlJZCA9IGRhdGEuZW50aXR5SWQ7XG4gICAgICAgIHRoaXMuZWRpdG9yQ29udGVudCA9IGRhdGEuZWRpdG9yQ29udGVudDtcbiAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNob3dQcm9jZXNzRG9jdW1lbnRUcmVlRGF0YUluU3BsaXRWaWV3ID0gZGF0YS5zaG93UHJvY2Vzc0RvY3VtZW50VHJlZURhdGFJblNwbGl0VmlldztcbiAgICAgICAgdGhpcy5lbmFibGVkSW50ZXJjb25uZWN0ZWQgPSBkYXRhLmVuYWJsZWRJbnRlcmNvbm5lY3RlZDtcbiAgICAgICAgdGhpcy5lbmFibGVkRGV2aWF0aW9uTW9kdWxlID0gZGF0YS5lbmFibGVkRGV2aWF0aW9uTW9kdWxlO1xuICAgICAgICB0aGlzLmVuYWJsZWRDaGVja2xpc3RNb2R1bGUgPSBkYXRhLmVuYWJsZWRDaGVja2xpc3RNb2R1bGU7XG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyUHJvY2Vzc0ljb24oaWNvblJlZ2lzdHJ5LCBzYW5pdGl6ZXIpO1xuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclByb2Nlc3NBcmVhSWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyRG9jdW1lbnRJY29uKGljb25SZWdpc3RyeSwgc2FuaXRpemVyKTtcbiAgICAgICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJGb2xkZXJJY29uKGljb25SZWdpc3RyeSwgc2FuaXRpemVyKTtcbiAgICAgICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJEZXZpYXRpb25JY29uKGljb25SZWdpc3RyeSwgc2FuaXRpemVyKTtcbiAgICAgICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJDaGVja2xpc3RJY29uKGljb25SZWdpc3RyeSwgc2FuaXRpemVyKTtcbiAgICAgICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJQcm9jZXNzSW50ZXJjb25uZWN0ZWRJY29uKGljb25SZWdpc3RyeSwgc2FuaXRpemVyKTtcbiAgICB9XG5cbiAgICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IG5ldyBEaWFncmFtVGVtcGxhdGVzKCk7XG4gICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5lZGl0TW9kZSA9IEZsb3djaGFydFZpZXdNb2RlLkVkaXQ7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmdldExhbmd1YWdlU3ViamVjdCQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2UgPSByZXM7XG4gICAgICAgICAgICAgICAgdGhpcy5MQU5HID0gdGhpcy50cmFuc2xhdGUuZ2V0T2JqZWN0TGFuZyhyZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5jaGFuZ2VUZW1wbGF0ZVBvcHVwQ29udGVudCA9IHRoaXMuTEFORy5CUE1OLkNIQU5HRV9URU1QTEFURV9OT1RFO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5pZCkge1xuICAgICAgICAgICAgdGhpcy5qc29uQ29udGVudCA9IGF3YWl0IHRoaXMuZ2V0SnNvbkNvbnRlbnQodGhpcy5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zcGxpdFZpZXcgPSB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1Byb2Nlc3NEb2N1bWVudFRyZWVEYXRhSW5TcGxpdFZpZXc7XG4gICAgICAgIHRoaXMuaW5pdENvbm5lY3Rpb25UeXBlcygpO1xuICAgICAgICB0aGlzLmluaXRUYXJnZXQoKTtcbiAgICAgICAgdGhpcy5pbml0UmVsYXRlZENvbmZpZ0FuZERhdGEoKTtcbiAgICB9XG5cbiAgICBhc3luYyBuZ0FmdGVyVmlld0luaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuYnBtblRlbWxhdGVzID0gYXdhaXQgdGhpcy5nZXRUZW1wbGF0ZXMoKTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXMgPSB0aGlzLmJwbW5UZW1sYXRlcy5tYXAoKHgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaW5kZXg6IHguaW5kZXgsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVOYW1lOiB4LnRlbXBsYXRlTmFtZSxcbiAgICAgICAgICAgICAgICBmbG93Q2hhcnRJZDogeC5pZCxcbiAgICAgICAgICAgICAgICBuYW1lOiB4LnRlbXBsYXRlTmFtZSxcbiAgICAgICAgICAgICAgICBqc29uQ29udGVudDogeC5qc29uQ29udGVudFxuICAgICAgICAgICAgfVxuICAgICAgICB9KSB8fCBbXTtcbiAgICAgICAgdGhpcy5icG1uU2VydmljZS5idWlsZERpYWdyYW0oXG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlcyxcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGUsXG4gICAgICAgICAgICAnZGVmYXVsdCBqb2ludC10aGVtZS1icG1uJyxcbiAgICAgICAgICAgIHRoaXMuanNvbkNvbnRlbnQsXG4gICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuZWRpdE1vZGUsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgVG9vbGJhckZ1bmN0aW9uLmdldFRvb2xiYXJDb25maWd1cmF0aW9uKHRoaXMuTEFORyksXG4gICAgICAgICAgICB0aGlzLmxhbmd1YWdlXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaW5pdENvbm5lY3Rpb25UeXBlcygpIHtcbiAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLmNvbm5lY3RUeXBlcyA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5Eb2N1bWVudE9yUHJvY2VzcyxcbiAgICAgICAgICAgICAgICB2aWV3VmFsdWU6IHRoaXMuTEFORy5CUE1OLkRPQ1VNRU5UX1BST0NFU1MsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5QUk9DRVNTX0RPQ1VNRU5UX0NPTk5FQ1RJT05fR1VJREVMSU5FLFxuICAgICAgICAgICAgICAgIGNhbkNvbm5lY3Q6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRGV2aWF0aW9uLFxuICAgICAgICAgICAgICAgIHZpZXdWYWx1ZTogdGhpcy5MQU5HLkJQTU4uREVWSUFUSU9OLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLkxBTkcuQlBNTi5DT05ORUNUSU9OX1RZUEUuREVWSUFUSU9OX0NPTk5FQ1RJT05fR1VJREVMSU5FLFxuICAgICAgICAgICAgICAgIGNhbkNvbm5lY3Q6IHRoaXMuZW5hYmxlZERldmlhdGlvbk1vZHVsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5DaGVja2xpc3QsXG4gICAgICAgICAgICAgICAgdmlld1ZhbHVlOiB0aGlzLkxBTkcuQlBNTi5DSEVDS0xJU1QsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5DSEVDS0xJU1RfQ09OTkVDVElPTl9HVUlERUxJTkUsXG4gICAgICAgICAgICAgICAgY2FuQ29ubmVjdDogdGhpcy5lbmFibGVkQ2hlY2tsaXN0TW9kdWxlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkxpbmssXG4gICAgICAgICAgICAgICAgdmlld1ZhbHVlOiB0aGlzLkxBTkcuQlBNTi5MSU5LLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLkxBTkcuQlBNTi5DT05ORUNUSU9OX1RZUEUuTElOS19DT05ORUNUSU9OX0dVSURFTElORSxcbiAgICAgICAgICAgICAgICBjYW5Db25uZWN0OiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkF0dGFjaG1lbnQsXG4gICAgICAgICAgICAgICAgdmlld1ZhbHVlOiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuQVRUQUNITUVOVCxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICAgICAgICAgICAgY2FuQ29ubmVjdDogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGluaXRUYXJnZXQoKSB7XG4gICAgICAgIGlmICh0aGlzLnRhcmdldHMpIHtcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0cy5wdXNoKHsgdmFsdWU6IFRhcmdldFR5cGVOYW1lLm5ldywgdmlld1ZhbHVlOiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuVEFSR0VUX0JMQU5LIH0pO1xuICAgICAgICAgICAgdGhpcy50YXJnZXRzLnB1c2goeyB2YWx1ZTogVGFyZ2V0VHlwZU5hbWUuc2FtZSwgdmlld1ZhbHVlOiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuVEFSR0VUX1NFTEYgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBnZXRUZW1wbGF0ZXMoKTogUHJvbWlzZTxRTVNDS0VkaXRvckJwbW5UZW1wbGF0ZVtdPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5icG1uQXBpU2VydmljZVxuICAgICAgICAgICAgICAgIC5icG1uR2V0VGVtcGxhdGVzKClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBhc3luYyBnZXRKc29uQ29udGVudChpZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJwbW5BcGlTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmdldEJwbW5CeUlkKGlkKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0Lmpzb25Db250ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIHNlbGVjdENvbm5lY3RUeXBlKGV2ZW50OiBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlKSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQpIHtcbiAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5Eb2N1bWVudE9yUHJvY2VzczpcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5Qcm9jZXNzRG9jdW1lbnQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5EZXZpYXRpb246XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuRGV2aWF0aW9uKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQ2hlY2tsaXN0OlxuICAgICAgICAgICAgICAgIHRoaXMub3BlbkNoZWNrbGlzdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkF0dGFjaG1lbnQ6XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuQXR0YWNobWVudERpYWxvZygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkxpbms6XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuTGluaygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlbGVjdFRlbXBsYXRlKCkge1xuICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuSVNfU0VMRUNURURfVEVNUExBVEVdID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZ3JhcGggPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuR1JBUEhdO1xuICAgICAgICB0aGlzLnRlbXBUZW1wbGF0ZSA9IGdyYXBoLnRvSlNPTigpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZEpzb25Db250ZW50ID0gd2luZG93W0Zsb3dDaGFydENvbnN0LlNFTEVDVEVEX0pTT05fQ09OVEVOVF07XG4gICAgICAgIGlmIChzZWxlY3RlZEpzb25Db250ZW50KSB7XG4gICAgICAgICAgICBpZiAoZ3JhcGgpIHtcbiAgICAgICAgICAgICAgICBncmFwaC5mcm9tSlNPTihKU09OLnBhcnNlKHNlbGVjdGVkSnNvbkNvbnRlbnQpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10gPSBudWxsO1xuICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNFTEVDVEVEX1NIQVBFX0lEXSA9ICcnO1xuICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNIQVBFX1RZUEVdID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgc2F2ZSBCUE1OXG4gICAgYXN5bmMgc2F2ZUltYWdlQ29udGVudChncmFwaE9iamVjdCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGpzb25Db250ZW50ID0gSlNPTi5zdHJpbmdpZnkoZ3JhcGhPYmplY3QpO1xuICAgICAgICAgICAgdGhpcy5icG1uID0ge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLmlkID8gdGhpcy5pZCA6IGd1aWRIZWxwZXIuZW1wdHksXG4gICAgICAgICAgICAgICAganNvbkNvbnRlbnQ6IGpzb25Db250ZW50LFxuICAgICAgICAgICAgICAgIGlzVGVtcGxhdGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlTmFtZTogJydcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5icG1uQXBpU2VydmljZVxuICAgICAgICAgICAgICAgIC5icG1uTW9kaWZ5aW5nKHRoaXMuYnBtbilcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBhc3luYyBnZXRJbWFnZUNvbnRlbnQoam9pbnQ6IGFueSwgcGFwZXI6IGFueSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHZhciBqb2ludFRvb2xzRWwgPSBwYXBlci5zdmc/LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2pvaW50LXRvb2xzJyk7XG4gICAgICAgICAgICBpZiAoam9pbnRUb29sc0VsKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBqb2ludFRvb2xzRWwubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgam9pbnRUb29sc0VsW2ldLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgam9pbnQuZm9ybWF0LnRvUE5HKHBhcGVyLCAoaW1hZ2VEYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJyU3RyaW5nID0gaW1hZ2VEYXRhLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShhcnJTdHJpbmdbMV0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIG9uSW5zZXJ0SW1hZ2UoKSB7XG4gICAgICAgIGNvbnN0IGdyYXBoID0gd2luZG93W0Zsb3dDaGFydENvbnN0LkdSQVBIXTtcbiAgICAgICAgY29uc3QgcGFwZXIgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuUEFQRVJdO1xuICAgICAgICBjb25zdCBqb2ludCA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5KT0lOVF07XG4gICAgICAgIGNvbnN0IGdyYXBoT2JqZWN0ID0gZ3JhcGgudG9KU09OKCk7XG4gICAgICAgIGNvbnN0IGNsaWVudFJlY3QgPSBwYXBlci5wYXBlclRvTG9jYWxSZWN0KHBhcGVyLmdldENvbnRlbnRCQm94KCkpO1xuICAgICAgICBjb25zdCBpZCA9IGF3YWl0IHRoaXMuc2F2ZUltYWdlQ29udGVudChncmFwaE9iamVjdCk7XG4gICAgICAgIGNvbnN0IGltYWdlQ29udGVudCA9ICdkYXRhOmltYWdlL3BuZztiYXNlNjQsJyArIGF3YWl0IHRoaXMuZ2V0SW1hZ2VDb250ZW50KGpvaW50LCBwYXBlcik7XG4gICAgICAgIGNvbnN0IGZpbGUgPSBiYXNlNjRTdHJpbmdUb0ZpbGUoaW1hZ2VDb250ZW50LCBgJHtDS0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfQlBNTn0jJHtpZH1gKTtcbiAgICAgICAgY29uc3QgcmVsYXRpdmVVcmwgPSBhd2FpdCB0aGlzLnVwbG9hZFNlcnZpY2UudXBsb2FkSW1hZ2UoZmlsZSkudG9Qcm9taXNlKCk7XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlQWRkaXRpb25hbFdpZHRoKGdyYXBoLCBwYXBlciwgZ3JhcGhPYmplY3QuY2VsbHMpO1xuICAgICAgICBjb25zdCBpbWFnZW1hcCA9IFFNU0NLRWRpdG9yQlBNTkZ1bmN0aW9ucy50b0ltYWdlTWFwKGlkLCBncmFwaE9iamVjdC5jZWxscywgY2xpZW50UmVjdCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHsga2V5OiBgJHtDS0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfQlBNTn0jJHtpZH1gLCB2YWx1ZXM6IHJlbGF0aXZlVXJsLCBpbWFnZW1hcDogaW1hZ2VtYXAgfVxuICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLmNvbW1vblNlcnZpY2UuZ2V0U2Nyb2xsVG9wQ2tlZGl0b3IodGhpcy5ja0VkaXRvcik7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHJlc3VsdCk7XG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZS5zZXRTY3JvbGxUb3BFZGl0b3JDb250YWluZXIodGhpcy5ja0VkaXRvciwgc2Nyb2xsVG9wKTtcbiAgICB9XG5cbiAgICBvbkNsb3NlRGlhbG9nKCkge1xuICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXSA9IG51bGw7XG4gICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9TSEFQRV9JRF0gPSAnJztcbiAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNIQVBFX1RZUEVdID0gJyc7XG4gICAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IHRoaXMuY29tbW9uU2VydmljZS5nZXRTY3JvbGxUb3BDa2VkaXRvcih0aGlzLmNrRWRpdG9yKTtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlLnNldFNjcm9sbFRvcEVkaXRvckNvbnRhaW5lcih0aGlzLmNrRWRpdG9yLCBzY3JvbGxUb3ApO1xuICAgIH1cblxuICAgIHNhdmVBc1RlbXBsYXRlKHRlbXBsYXRlTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IHRoaXMuY29tbW9uU2VydmljZS5nZXRTY3JvbGxUb3BDa2VkaXRvcih0aGlzLmNrRWRpdG9yKTtcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlLnNldFNjcm9sbFRvcEVkaXRvckNvbnRhaW5lcih0aGlzLmNrRWRpdG9yLCBzY3JvbGxUb3ApO1xuICAgICAgICBjb25zdCBncmFwaCA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5HUkFQSF07XG4gICAgICAgIGNvbnN0IGpzb25Db250ZW50ID0gSlNPTi5zdHJpbmdpZnkoZ3JhcGgudG9KU09OKCkpO1xuICAgICAgICB0aGlzLmJwbW4gPSB7XG4gICAgICAgICAgICBpZDogZ3VpZEhlbHBlci5lbXB0eSxcbiAgICAgICAgICAgIGpzb25Db250ZW50OiBqc29uQ29udGVudCxcbiAgICAgICAgICAgIGlzVGVtcGxhdGU6IHRydWUsXG4gICAgICAgICAgICB0ZW1wbGF0ZU5hbWU6ICcnXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5icG1uLnRlbXBsYXRlTmFtZSA9IHRlbXBsYXRlTmFtZTtcbiAgICAgICAgdGhpcy5icG1uQXBpU2VydmljZVxuICAgICAgICAgICAgLmJwbW5Nb2RpZnlpbmcodGhpcy5icG1uKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icG1uU2VydmljZS5hZGRJdGVtVGVtcGxhdGUocmVzdWx0LCB0aGlzLmJwbW4pO1xuICAgICAgICAgICAgICAgICAgICBRTVNDS0VkaXRvclRvYXN0U2VydmljZS5zdWNjZXNzKHRoaXMuTEFORy5RTVNDS0VESVRPUi5TQVZFRCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgUU1TQ0tFZGl0b3JUb2FzdFNlcnZpY2UuZXJyb3IodGhpcy5MQU5HLlFNU0NLRURJVE9SLlNBVkVfRkFJTEVEKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBkZWxldGVUZW1wbGF0ZSgpIHtcbiAgICAgICAgaWYgKCEhdGhpcy50ZW1wbGF0ZS5mbG93Q2hhcnRJZCkge1xuICAgICAgICAgICAgdGhpcy5icG1uQXBpU2VydmljZVxuICAgICAgICAgICAgICAgIC5icG1uRGVsZXRlVGVtcGxhdGUodGhpcy50ZW1wbGF0ZS5mbG93Q2hhcnRJZClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJwbW5TZXJ2aWNlLnJlbW92ZVNlbGVjdEl0ZW0odGhpcy50ZW1wbGF0ZS5mbG93Q2hhcnRJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJwbW5TZXJ2aWNlLnNldERlZmF1bHRTZWxlY3RlZFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBRTVNDS0VkaXRvclRvYXN0U2VydmljZS5zdWNjZXNzKHRoaXMuTEFORy5RTVNDS0VESVRPUi5ERUxFVEVEKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFFNU0NLRWRpdG9yVG9hc3RTZXJ2aWNlLmVycm9yKHRoaXMuTEFORy5RTVNDS0VESVRPUi5ERUxFVEVfRkFJTEVEKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzZXRUZW1wbGF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMudGVtcFRlbXBsYXRlKSB7XG4gICAgICAgICAgICBjb25zdCBncmFwaCA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5HUkFQSF07XG4gICAgICAgICAgICBpZiAoZ3JhcGgpIHtcbiAgICAgICAgICAgICAgICBncmFwaC5mcm9tSlNPTih0aGlzLnRlbXBUZW1wbGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5icG1uU2VydmljZS5zZXREZWZhdWx0U2VsZWN0ZWRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19TRUxFQ1RFRF9URU1QTEFURV0gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddID0gbnVsbDtcbiAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9TSEFQRV9JRF0gPSAnJztcbiAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TSEFQRV9UWVBFXSA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2hvd0NvbmZpcm1EaWFsb2codGl0bGU6IHN0cmluZywgY29udGVudDogc3RyaW5nLCBpc01lc3NhZ2U6IGJvb2xlYW4sIGNhbGxiYWNrPzogKHJlc3VsdD86IGFueSkgPT4gdm9pZCkge1xuICAgICAgICBjb25zdCBkYXRhOiBRTVNDS0VkaXRvckRpYWxvZ0RhdGEgPSBuZXcgUU1TQ0tFZGl0b3JEaWFsb2dEYXRhKCk7XG4gICAgICAgIGRhdGEudGl0bGUgPSB0aXRsZTtcbiAgICAgICAgZGF0YS5jb250ZW50ID0gY29udGVudDtcbiAgICAgICAgZGF0YS5pc01lc3NhZ2UgPSBpc01lc3NhZ2U7XG4gICAgICAgIGRhdGEuaXNDbG9zZUJ0biA9IHRydWU7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JDb25maXJtQ29tcG9uZW50LCB7XG4gICAgICAgICAgICB3aWR0aDogJzUwMHB4JyxcbiAgICAgICAgICAgIG1pbkhlaWdodDogJzE3NXB4JyxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgIH0pO1xuICAgICAgICBkaWFsb2dSZWZcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlQWRkaXRpb25hbFdpZHRoKGdyYXBoOiBhbnksIHBhcGVyOiBhbnksIGNlbGxzOiBhbnlbXSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgYmJveCA9IGdyYXBoLmdldENlbGwoY2VsbHNbaV0pLmZpbmRWaWV3KHBhcGVyKS5nZXRCQm94VG9DYWxjdWxhdGVBZGRpdGlvbmFsV2lkdGgoKTtcbiAgICAgICAgICAgIGNlbGxzW2ldLmFkZGl0aW9uYWxXaWR0aCA9IDA7XG4gICAgICAgICAgICBpZiAoYmJveCAmJiBjZWxsc1tpXT8uc2l6ZT8ud2lkdGgpXG4gICAgICAgICAgICAgICAgY2VsbHNbaV0uYWRkaXRpb25hbFdpZHRoID0gKGJib3gud2lkdGggPiBjZWxsc1tpXS5zaXplLndpZHRoKSA/IChiYm94LndpZHRoIC0gY2VsbHNbaV0uc2l6ZS53aWR0aCkgOiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdFNoYXBlTW9kZWwoaWQ6IGFueSA9ICcnLCBpdGVtVHlwZTogYW55ID0gJycsIGl0ZW1OYW1lOiBzdHJpbmcgPSAnJywgc3RhdHVzTmFtZTogc3RyaW5nID0gbnVsbCkge1xuICAgICAgICB0aGlzLnNoYXBlTW9kZWwgPSBuZXcgU2hhcGVNb2RlbCgpO1xuICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkID0gaWQ7XG4gICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5pZCA9IGlkO1xuICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uaXRlbVR5cGUgPSBpdGVtVHlwZTtcbiAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLml0ZW1OYW1lID0gaXRlbU5hbWU7XG4gICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5zdGF0dXNOYW1lID0gc3RhdHVzTmFtZTtcbiAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnRhcmdldC50YXJnZXRJZCA9IFRhcmdldFR5cGVOYW1lLm5ldztcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgY29ubmVjdGlvbiBwcm9jZXNzL2RvY3VtZW50XG4gICAgaW5pdFJlbGF0ZWRDb25maWdBbmREYXRhKCkge1xuICAgICAgICB0aGlzLnByb2Nlc3NUcmVlQ29uZmlnID0ge1xuICAgICAgICAgICAgYWxsb3dTZWxlY3RGb2xkZXI6IHRydWUsXG4gICAgICAgICAgICBhcmVhT2ZDdXJyZW50UHJvY2VzczogJycsXG4gICAgICAgICAgICBzaG93Q2hlY2tCb3g6IHRydWUsXG4gICAgICAgICAgICBhbGxvd011bHRpcGxlQ2hlY2s6IGZhbHNlLFxuICAgICAgICAgICAgb25seUNoZWNrQm94Rm9yQ2hpbGQ6IGZhbHNlLFxuICAgICAgICAgICAgbW9kdWxlSWQ6IERhdGFUeXBlLnByb2Nlc3MsXG4gICAgICAgICAgICBvcGVuSWNvbkNvbG9yOiAnIzE5NTRBOScsXG4gICAgICAgICAgICBjbG9zZUljb25Db2xvcjogJyNhNGIwZGUnLFxuICAgICAgICAgICAgc2luZ2xlU2VsZWN0ZWROb2RlOiB0cnVlLFxuICAgICAgICAgICAgb25seUZvbGRlcjogZmFsc2VcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmRvY3VtZW50VHJlZUNvbmZpZyA9IHtcbiAgICAgICAgICAgIGFsbG93U2VsZWN0Rm9sZGVyOiB0cnVlLFxuICAgICAgICAgICAgYXJlYU9mQ3VycmVudFByb2Nlc3M6ICcnLFxuICAgICAgICAgICAgc2hvd0NoZWNrQm94OiB0cnVlLFxuICAgICAgICAgICAgbW9kdWxlSWQ6IERhdGFUeXBlLmRvY3VtZW50LFxuICAgICAgICAgICAgYWxsb3dNdWx0aXBsZUNoZWNrOiBmYWxzZSxcbiAgICAgICAgICAgIG9ubHlDaGVja0JveEZvckNoaWxkOiBmYWxzZSxcbiAgICAgICAgICAgIG9wZW5JY29uQ29sb3I6ICcjMTk1NEE5JyxcbiAgICAgICAgICAgIGNsb3NlSWNvbkNvbG9yOiAnIzRhY2FmZicsXG4gICAgICAgICAgICBzaW5nbGVTZWxlY3RlZE5vZGU6IHRydWUsXG4gICAgICAgICAgICBvbmx5Rm9sZGVyOiBmYWxzZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZGV2aWF0aW9uU2VsZWN0T25lQ29uZmlnID0ge1xuICAgICAgICAgICAgYWxsb3dTZWxlY3RGb2xkZXI6IGZhbHNlLFxuICAgICAgICAgICAgc2hvd0NoZWNrQm94OiBmYWxzZSxcbiAgICAgICAgICAgIGFsbG93TXVsdGlwbGVDaGVjazogZmFsc2UsXG4gICAgICAgICAgICBvbmx5Q2hlY2tCb3hGb3JDaGlsZDogZmFsc2UsXG4gICAgICAgICAgICBtb2R1bGVJZDogRGF0YVR5cGUuZGV2aWF0aW9uLFxuICAgICAgICAgICAgb3Blbkljb246ICdrZXlib2FyZF9hcnJvd191cCcsXG4gICAgICAgICAgICBvcGVuSWNvbkNvbG9yOiAnIzE5NTRBOScsXG4gICAgICAgICAgICBjbG9zZUljb246ICdrZXlib2FyZF9hcnJvd19kb3duJyxcbiAgICAgICAgICAgIGNsb3NlSWNvbkNvbG9yOiAnJyxcbiAgICAgICAgICAgIGl0ZW1JY29uOiAncmVwb3J0X3Byb2JsZW0nLFxuICAgICAgICAgICAgc2luZ2xlU2VsZWN0ZWROb2RlOiBmYWxzZSxcbiAgICAgICAgICAgIGNhbkhhdmVEdXBJZDogdHJ1ZSxcbiAgICAgICAgICAgIHNlbGVjdE9uZTogdHJ1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuY2hlY2tsaXN0U2VsZWN0T25lQ29uZmlnID0ge1xuICAgICAgICAgICAgYWxsb3dTZWxlY3RGb2xkZXI6IGZhbHNlLFxuICAgICAgICAgICAgc2hvd0NoZWNrQm94OiBmYWxzZSxcbiAgICAgICAgICAgIGFsbG93TXVsdGlwbGVDaGVjazogZmFsc2UsXG4gICAgICAgICAgICBvbmx5Q2hlY2tCb3hGb3JDaGlsZDogZmFsc2UsXG4gICAgICAgICAgICBtb2R1bGVJZDogRGF0YVR5cGUuY2hlY2tsaXN0LFxuICAgICAgICAgICAgb3Blbkljb246ICdrZXlib2FyZF9hcnJvd191cCcsXG4gICAgICAgICAgICBvcGVuSWNvbkNvbG9yOiAnIzE5NTRBOScsXG4gICAgICAgICAgICBjbG9zZUljb246ICdrZXlib2FyZF9hcnJvd19kb3duJyxcbiAgICAgICAgICAgIGNsb3NlSWNvbkNvbG9yOiAnJyxcbiAgICAgICAgICAgIGl0ZW1JY29uOiAnZm9ybWF0X2xpc3RfYnVsbGV0ZWQnLFxuICAgICAgICAgICAgc2luZ2xlU2VsZWN0ZWROb2RlOiBmYWxzZSxcbiAgICAgICAgICAgIGNhbkhhdmVEdXBJZDogdHJ1ZSxcbiAgICAgICAgICAgIHNlbGVjdE9uZTogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmxvYWRpbmdSZWxhdGVkRGF0YSA9IHRydWU7XG4gICAgICAgIGZvcmtKb2luKHRoaXMucmVsYXRlZFNlcnZpY2UuZ2V0QXJlYUNoaWxkcmVuTm9kZShudWxsLCAhdGhpcy5zcGxpdFZpZXcsIGZhbHNlLCB0aGlzLmRhdGEuZW5hYmxlZEludGVyY29ubmVjdGVkKSxcbiAgICAgICAgICAgIHRoaXMucmVsYXRlZFNlcnZpY2UuZ2V0Rm9sZGVyQ2hpbGRyZW4obnVsbCwgIXRoaXMuc3BsaXRWaWV3LCBmYWxzZSksXG4gICAgICAgICAgICB0aGlzLmVuYWJsZWREZXZpYXRpb25Nb2R1bGUgPyB0aGlzLnJlbGF0ZWRTZXJ2aWNlLmdldERldmlhdGlvblRyZWVEYXRhKCkgOiBvZihudWxsKSxcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlZENoZWNrbGlzdE1vZHVsZSA/IHRoaXMucmVsYXRlZFNlcnZpY2UuZ2V0Q2hlY2tsaXN0RGF0YSgpIDogb2YobnVsbClcbiAgICAgICAgKS5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChbcHJvY2Vzc2VzLCBkb2N1bWVudHMsIGRldmlhdGlvbnMsIGNoZWNrbGlzdHNdKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3Nlcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcmVhcyA9IHByb2Nlc3Nlcy5tYXAoKHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHguaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogeC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiB4LnBhcmVudElkID09PSBndWlkSGVscGVyLmVtcHR5ID8gJycgOiB4LnBhcmVudElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c0lkOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c05hbWU6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlJZDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlUHJvY2Vzc0RhdGEgPSBhcmVhcztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyZWFzID0gZG9jdW1lbnRzLm1hcCgoeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogeC5pZC50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHgubmFtZS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiAheC5wYXJlbnRIYW5kYm9va0lkID8gJycgOiB4LnBhcmVudEhhbmRib29rSWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNJZDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNOYW1lOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5SWQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kYWJsZTogdGhpcy5pc0ZvbGRlcih4LnR5cGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsVHlwZTogeC50eXBlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlRG9jdW1lbnREYXRhID0gYXJlYXM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpYXRpb25EYXRhVHJlZSA9IGRldmlhdGlvbnMgfHwgW107XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja2xpc3REYXRhVHJlZSA9IGNoZWNrbGlzdHMgfHwgW107XG5cbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdSZWxhdGVkRGF0YSA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb3BlblByb2Nlc3NEb2N1bWVudCgpIHtcbiAgICAgICAgY29uc3QgZGF0YTogU2VsZWN0UHJvY2Vzc0RvY3VtZW50UG9wdXBEYXRhID0gbmV3IFNlbGVjdFByb2Nlc3NEb2N1bWVudFBvcHVwRGF0YSgpO1xuICAgICAgICBkYXRhLm1vZHVsZUlkID0gTW9kdWxlVHlwZS5kb2N1bWVudFByb2Nlc3M7XG4gICAgICAgIGRhdGEubW9kdWxlTmFtZSA9IHRoaXMuTEFORy5CUE1OLkRPQ1VNRU5UX1BST0NFU1M7XG4gICAgICAgIGRhdGEudHJlZURhdGExID0gdGhpcy50cmVlUHJvY2Vzc0RhdGE7XG4gICAgICAgIGRhdGEudHJlZURhdGEyID0gdGhpcy50cmVlRG9jdW1lbnREYXRhO1xuICAgICAgICBkYXRhLnRyZWVDb25maWcxID0gdGhpcy5wcm9jZXNzVHJlZUNvbmZpZztcbiAgICAgICAgZGF0YS50cmVlQ29uZmlnMiA9IHRoaXMuZG9jdW1lbnRUcmVlQ29uZmlnO1xuICAgICAgICBkYXRhLnNwbGl0VmlldyA9IHRoaXMuc3BsaXRWaWV3O1xuICAgICAgICBkYXRhLmlzU2VsZWN0T25lID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihTZWxlY3RQcm9jZXNzRG9jdW1lbnRQb3B1cENvbXBvbmVudCwge1xuICAgICAgICAgICAgd2lkdGg6ICc3NjhweCcsXG4gICAgICAgICAgICBtaW5IZWlnaHQ6ICc2OTBweCcsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tbWF0LWRpYWxvZy1jb250YWluZXInXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5vblNlYXJjaC5zdWJzY3JpYmUoYXN5bmMgKGtleXdvcmQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgaWYgKCFrZXl3b3JkIHx8IGtleXdvcmQudHJpbSgpID09PSAnJylcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGxldCBnZXRTZWFyY2hPcHRpb24gPSBuZXcgR2V0U2VhcmNoUHJvY2Vzc0RvY3VtZW50T3B0aW9uKHRydWUsIHRydWUsIHRoaXMuZGF0YS5lbmFibGVkSW50ZXJjb25uZWN0ZWQsIHRydWUsIHRydWUpO1xuICAgICAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0ID0gYXdhaXQgdGhpcy50cmVlU2VydmljZS5nZXRTZWFyY2hQcm9jZXNzRG9jdW1lbnQoa2V5d29yZC50cmltKCksIGdldFNlYXJjaE9wdGlvbik7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFByb2Nlc3NEb2N1bWVudEdsb2JhbFNlcnZpY2Uuc2V0U2VhcmNoUmVsYXRlZChzZWFyY2hSZXN1bHQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2Uub25FeHBhbmRQcm9jZXNzQXJlYS5zdWJzY3JpYmUoKGZvbGRlcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWxhdGVkU2VydmljZVxuICAgICAgICAgICAgICAgIC5nZXRBcmVhQ2hpbGRyZW5Ob2RlKGZvbGRlci5pZCwgIXRoaXMuc3BsaXRWaWV3LCBmYWxzZSwgdGhpcy5kYXRhLmVuYWJsZWRJbnRlcmNvbm5lY3RlZClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcmVhcyA9IHJlcy5tYXAoKHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogeC50eXBlID09PSBQcm9jZXNzTm9kZVR5cGUuQXJlYSA/IHguaWQudG9TdHJpbmcoKSA6IHgucHJvY2Vzc0lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB4Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiB4LnBhcmVudElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiB4LnR5cGUgPT09IFByb2Nlc3NOb2RlVHlwZS5BcmVhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNJZDogeC5zdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c05hbWU6IHguc3RhdHVzTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUlkOiB4LnR5cGUgPT09IFByb2Nlc3NOb2RlVHlwZS5BcmVhID8gMCA6IHguaXRlbU51bWJlcklkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtVHlwZTogeC50eXBlID09PSBQcm9jZXNzTm9kZVR5cGUuQXJlYSA/IERhdGFUeXBlLmFyZWEgOiB4LnR5cGUgPT09IFByb2Nlc3NOb2RlVHlwZS5Qcm9jZXNzID8gRGF0YVR5cGUucHJvY2VzcyA6IERhdGFUeXBlLnByb2Nlc3NJbnRlcmNvbm5lY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0UHJvY2Vzc0RvY3VtZW50R2xvYmFsU2VydmljZS5zZXRQcm9jZXNzQXJlYUNoaWxkcmVuKGFyZWFzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2Uub25FeHBhbmRGb2xkZXIuc3Vic2NyaWJlKChmb2xkZXIpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVsYXRlZFNlcnZpY2VcbiAgICAgICAgICAgICAgICAuZ2V0Rm9sZGVyQ2hpbGRyZW4oZm9sZGVyLmlkLCAhdGhpcy5zcGxpdFZpZXcsIGZhbHNlKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyZWFzID0gcmVzLm1hcCgoeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB4LmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHgubmFtZS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogdGhpcy5nZXRQYXJlbnRJZCh4KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzSWQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c05hbWU6IHguc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5SWQ6IHguaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IHRoaXMuaXNGb2xkZXIoeC50eXBlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxUeXBlOiB0aGlzLmlzRm9sZGVyKHgudHlwZSkgPyB4LnR5cGUgOiBmb2xkZXIubGV2ZWxUeXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RQcm9jZXNzRG9jdW1lbnRHbG9iYWxTZXJ2aWNlLnNldEZvbGRlckNoaWxkcmVuKGFyZWFzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2Uub25TZWxlY3RGb2xkZXJJdGVtLnN1YnNjcmliZSgoZm9sZGVyKSA9PiB7XG4gICAgICAgICAgICBpZiAoZm9sZGVyLml0ZW1UeXBlID09PSBEYXRhVHlwZS5hcmVhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxhdGVkU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAuZ2V0QXJlYUNvbnRlbnQoZm9sZGVyLmlkLCBmYWxzZSwgdGhpcy5lbmFibGVkSW50ZXJjb25uZWN0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogSVJlbGF0ZWRbXSA9IHJlcy5tYXAoKGVsZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGVsZS5wcm9jZXNzSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtTnVtYmVySWQ6IGVsZS5wcm9jZXNzTnVtYmVyLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtTmFtZTogZWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtVHlwZTogZWxlLnByb2Nlc3NDbGFzc2lmaWNhdGlvbiA9PT0gUHJvY2Vzc0NsYXNzaWZpY2F0aW9uVHlwZXMuUHJvY2Vzc2VzID8gRGF0YVR5cGUucHJvY2VzcyA6IERhdGFUeXBlLnByb2Nlc3NJbnRlcmNvbm5lY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogZWxlLnN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c05hbWU6IHRoaXMuZ2V0RGlzbGF5TmFtZU9mUHJvY2Vzc1N0YXR1cyhlbGUuc3RhdHVzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiBmb2xkZXIuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROYW1lOiBmb2xkZXIuaXRlbU5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFByb2Nlc3NEb2N1bWVudEdsb2JhbFNlcnZpY2Uuc2V0U3BsaXR2aWV3VmFsdWUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGRlci5pdGVtVHlwZSA9PT0gRGF0YVR5cGUuZm9sZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxhdGVkU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAuZ2V0Rm9sZGVyQ29udGVudChmb2xkZXIuaWQpXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogSVJlbGF0ZWRbXSA9IHJlcy5tYXAoKGVsZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGVsZS5pZC50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbU51bWJlcklkOiBlbGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiBlbGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1UeXBlOiBEYXRhVHlwZS5kb2N1bWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c05hbWU6IGVsZS5zdGF0dXNOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IGZvbGRlci5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5hbWU6IGZvbGRlci5pdGVtTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsVHlwZTogZm9sZGVyLmxldmVsVHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0UHJvY2Vzc0RvY3VtZW50R2xvYmFsU2VydmljZS5zZXRTcGxpdHZpZXdWYWx1ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9iaiA9IHJlc3VsdFswXTtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRTaGFwZU1vZGVsKChvYmouaXRlbVR5cGUgPT09IERhdGFUeXBlLnByb2Nlc3MgfHwgb2JqLml0ZW1UeXBlID09PSBEYXRhVHlwZS5wcm9jZXNzSW50ZXJjb25uZWN0ZWQpID8gb2JqLml0ZW1OdW1iZXJJZCA6IG9iai5pZCwgb2JqLml0ZW1UeXBlLCBvYmouaXRlbU5hbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gdGhpcy5nZXRMaW5rVVJMKHRoaXMuc2hhcGVNb2RlbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5TVkdJY29uID0gdGhpcy5nZXRTaGFwZU1vZGVsSWNvbkJ5RGF0YVR5cGUodGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLml0ZW1UeXBlLCBvYmoubGV2ZWxUeXBlKTtcbiAgICAgICAgICAgICAgICBpZiAob2JqLml0ZW1UeXBlID09PSBEYXRhVHlwZS5kb2N1bWVudCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEFuY2hvckRvY3VtZW50KG9iai5pZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHNhdmUgY29ubmVjdGlvblxuICAgICAgICAgICAgICAgIHRoaXMubWFwU2hhcGVEYXRhKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNob3dTaGFwZUNvbm5lY3Rpb25WYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNoYXBlQ29ubmVjdExhYmVsID0gdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkNPTk5FQ1RFRF9ET0NVTUVOVF9QUk9DRVNTO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBEb2N1bW5ldCBQcm9jZXNzIFN1cHBvcnQgRnVuY1xuICAgIGlzRm9sZGVyKHR5cGU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBkb2N1bWVudFR5cGVzID0gW1xuICAgICAgICAgICAgRG9jdW1lbnROb2RlVHlwZS5Eb2N1bWVudCxcbiAgICAgICAgICAgIERvY3VtZW50Tm9kZVR5cGUuRmlsZURvY3VtZW50LFxuICAgICAgICAgICAgRG9jdW1lbnROb2RlVHlwZS5MaW5rRG9jdW1lbnQsXG4gICAgICAgICAgICBEb2N1bWVudE5vZGVUeXBlLlNob3J0Y3V0RG9jdW1lbnRcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuICFkb2N1bWVudFR5cGVzLmluY2x1ZGVzKHR5cGUpO1xuICAgIH1cblxuICAgIGdldFBhcmVudElkKGl0ZW0pIHtcbiAgICAgICAgaWYgKHRoaXMuaXNGb2xkZXIoaXRlbS50eXBlKSkge1xuICAgICAgICAgICAgcmV0dXJuICFpdGVtLnBhcmVudEhhbmRib29rSWQgPyAnJyA6IGl0ZW0ucGFyZW50SGFuZGJvb2tJZC50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhaXRlbS5wYXJlbnRGb2xkZXJJZCA/ICcnIDogaXRlbS5wYXJlbnRGb2xkZXJJZC50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGdldERpc2xheU5hbWVPZlByb2Nlc3NTdGF0dXMoc3RhdHVzOiBudW1iZXIpIHtcbiAgICAgICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgICAgICAgIGNhc2UgUHJvY2Vzc1N0YXR1cy5pblByb2dyZXNzOlxuICAgICAgICAgICAgICAgIHJldHVybiAnQ09NTU9OLklOX1BST0dSRVNTJztcbiAgICAgICAgICAgIGNhc2UgUHJvY2Vzc1N0YXR1cy5zZW5kVG9BcHByb3ZhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5TRU5EX1RPX0FQUFJPVkFMJztcbiAgICAgICAgICAgIGNhc2UgUHJvY2Vzc1N0YXR1cy5hcHByb3ZlZDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5BUFBST1ZFRCc7XG4gICAgICAgICAgICBjYXNlIFByb2Nlc3NTdGF0dXMudW5kZXJSZXZpc2lvbjpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5VTkRFUl9SRVZJU0lPTic7XG4gICAgICAgICAgICBjYXNlIFByb2Nlc3NTdGF0dXMuZGVsZXRlZDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5ERUxFVEVEJztcbiAgICAgICAgICAgIGNhc2UgUHJvY2Vzc1N0YXR1cy5yZXZpZXdPckhlYXJpbmc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdDT01NT04uSEVBUklORyc7XG4gICAgICAgICAgICBjYXNlIFByb2Nlc3NTdGF0dXMuYXJjaGl2ZWQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdDT01NT04uQVJDSElWRUQnO1xuICAgICAgICAgICAgY2FzZSBQcm9jZXNzU3RhdHVzLmhlYXJpbmc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdQUk9DRVNTLkhFQVJJTkcnO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5VTktOT1dOJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldExpbmtVUkwoc2hhcGVNb2RlbDogU2hhcGVNb2RlbCkge1xuICAgICAgICBzd2l0Y2ggKHNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uaXRlbVR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuZG9jdW1lbnQ6XG4gICAgICAgICAgICAgICAgc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gYCR7Q0tFZGl0b3JMaW5rQ29uc3QuRE9DVU1FTlRfUEFSVElBTF9VUkx9JHtzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmRpc3BsYXlJZH1gO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5wcm9jZXNzOlxuICAgICAgICAgICAgICAgIHNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ubGlua1VybCA9IGAke0NLRWRpdG9yTGlua0NvbnN0LlBST0NFU1NfUEFSVElBTF9VUkx9JHtzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmRpc3BsYXlJZH1gO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5hcmVhOlxuICAgICAgICAgICAgICAgIHNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ubGlua1VybCA9IGAke0NLRWRpdG9yTGlua0NvbnN0LkFSRUFfUEFSVElBTF9VUkx9JHtzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmRpc3BsYXlJZH1gO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5mb2xkZXI6XG4gICAgICAgICAgICAgICAgc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gYCR7Q0tFZGl0b3JMaW5rQ29uc3QuRk9MREVSX1BBUlRJQUxfVVJMfSR7c2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5kaXNwbGF5SWR9YDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUucHJvY2Vzc0ludGVyY29ubmVjdGVkOlxuICAgICAgICAgICAgICAgIHNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ubGlua1VybCA9IGAke0NLRWRpdG9yTGlua0NvbnN0LlBST0NFU1NfSU5URVJDT05ORUNURURfUEFSVElBTF9VUkx9JHtzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmRpc3BsYXlJZH1gO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5kZXZpYXRpb246XG4gICAgICAgICAgICAgICAgc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gYCR7Q0tFZGl0b3JMaW5rQ29uc3QuREVWSUFUSU9OX1BBUlRJQUxfVVJMfSR7c2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5wYXJlbnRJZH0vJHtzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmlkfWA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLmNoZWNrbGlzdDpcbiAgICAgICAgICAgICAgICBzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmwgPSBgJHtDS0VkaXRvckxpbmtDb25zdC5DSEVDS0xJU1RfUEFSVElBTF9VUkx9JHtzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLnBhcmVudElkfS8ke3NoYXBlTW9kZWwucmVsYXRlZEl0ZW0uaWR9YDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBEZXZpYXRpb25cbiAgICBvcGVuRGV2aWF0aW9uKCkge1xuICAgICAgICBjb25zdCBkYXRhOiBTZWxlY3RPbmVQb3B1cERhdGEgPSBuZXcgU2VsZWN0T25lUG9wdXBEYXRhKCk7XG4gICAgICAgIGRhdGEubW9kdWxlSWQgPSBNb2R1bGVUeXBlLmRldmlhdGlvbjtcbiAgICAgICAgZGF0YS5tb2R1bGVOYW1lID0gdGhpcy5MQU5HLkJQTU4uREVWSUFUSU9OO1xuICAgICAgICBkYXRhLnRyZWVEYXRhID0gdGhpcy5kZXZpYXRpb25EYXRhVHJlZTtcbiAgICAgICAgZGF0YS50cmVlQ29uZmlnID0gdGhpcy5kZXZpYXRpb25TZWxlY3RPbmVDb25maWc7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oU2VsZWN0T25lRGlhbG9nLCB7XG4gICAgICAgICAgICB3aWR0aDogJzQwMHB4JyxcbiAgICAgICAgICAgIG1pbkhlaWdodDogJzU2N3B4JyxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgICAgICAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1tYXQtZGlhbG9nLWNvbnRhaW5lcidcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLm9uU2VhcmNoLnN1YnNjcmliZSgoa2V5d29yZCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWxhdGVkU2VydmljZVxuICAgICAgICAgICAgICAgIC5zZWFyY2hSZWxhdGVkVG9EZXZpYXRpb24oa2V5d29yZClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSByZXMuY2F0ZWdvcmllcztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xbXNSZWxhdGVkU2VydmljZS5zZXRTZWFyY2hSZWxhdGVkKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0OiBJUmVsYXRlZFtdKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvYmogPSByZXN1bHRbMF07XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U2hhcGVNb2RlbChvYmouaWQsIG9iai5pdGVtVHlwZSwgb2JqLml0ZW1OYW1lKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ucGFyZW50SWQgPSBvYmoucGFyZW50SWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLnBhcmVudE5hbWUgPSBvYmoucGFyZW50TmFtZVxuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gdGhpcy5nZXRMaW5rVVJMKHRoaXMuc2hhcGVNb2RlbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRldmlhdGlvbjtcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uU1ZHSWNvbiA9IHRoaXMuZ2V0U2hhcGVNb2RlbEljb25CeURhdGFUeXBlKHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5pdGVtVHlwZSk7XG5cbiAgICAgICAgICAgICAgICAvLyBzYXZlIGNvbm5lY3Rpb25cbiAgICAgICAgICAgICAgICB0aGlzLm1hcFNoYXBlRGF0YSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaG93U2hhcGVDb25uZWN0aW9uVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaGFwZUNvbm5lY3RMYWJlbCA9IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5DT05ORUNURURfREVWSUFUSU9OO1xuXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBIYW5kbGUgQ2hlY2tsaXN0XG4gICAgb3BlbkNoZWNrbGlzdCgpIHtcbiAgICAgICAgY29uc3QgZGF0YTogU2VsZWN0T25lUG9wdXBEYXRhID0gbmV3IFNlbGVjdE9uZVBvcHVwRGF0YSgpO1xuICAgICAgICBkYXRhLm1vZHVsZUlkID0gTW9kdWxlVHlwZS5jaGVja2xpc3Q7XG4gICAgICAgIGRhdGEubW9kdWxlTmFtZSA9IHRoaXMuTEFORy5CUE1OLkNIRUNLTElTVDtcbiAgICAgICAgZGF0YS50cmVlRGF0YSA9IHRoaXMuY2hlY2tsaXN0RGF0YVRyZWU7XG4gICAgICAgIGRhdGEudHJlZUNvbmZpZyA9IHRoaXMuY2hlY2tsaXN0U2VsZWN0T25lQ29uZmlnO1xuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFNlbGVjdE9uZURpYWxvZywge1xuICAgICAgICAgICAgd2lkdGg6ICc0MDBweCcsXG4gICAgICAgICAgICBtaW5IZWlnaHQ6ICc1NjdweCcsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tbWF0LWRpYWxvZy1jb250YWluZXInXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5vblNlYXJjaC5zdWJzY3JpYmUoKGtleXdvcmQpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVsYXRlZFNlcnZpY2VcbiAgICAgICAgICAgICAgICAuc2VhcmNoUmVsYXRlZFRvQ2hlY2tsaXN0KGtleXdvcmQpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzLmNhdGVnb3JpZXM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucW1zUmVsYXRlZFNlcnZpY2Uuc2V0U2VhcmNoUmVsYXRlZChyZXN1bHQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdDogSVJlbGF0ZWRbXSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG9iaiA9IHJlc3VsdFswXTtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRTaGFwZU1vZGVsKG9iai5pZCwgb2JqLml0ZW1UeXBlLCBvYmouaXRlbU5hbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5wYXJlbnRJZCA9IG9iai5wYXJlbnRJZDtcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ucGFyZW50TmFtZSA9IG9iai5wYXJlbnROYW1lXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmwgPSB0aGlzLmdldExpbmtVUkwodGhpcy5zaGFwZU1vZGVsKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCA9IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQ2hlY2tsaXN0O1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5TVkdJY29uID0gdGhpcy5nZXRTaGFwZU1vZGVsSWNvbkJ5RGF0YVR5cGUodGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLml0ZW1UeXBlKTtcblxuICAgICAgICAgICAgICAgIC8vIHNhdmUgY29ubmVjdGlvblxuICAgICAgICAgICAgICAgIHRoaXMubWFwU2hhcGVEYXRhKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNob3dTaGFwZUNvbm5lY3Rpb25WYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNoYXBlQ29ubmVjdExhYmVsID0gdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkNPTk5FQ1RFRF9ERVZJQVRJT047XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBIYW5kbGUgQXR0YWNobWVudCBcbiAgICBvcGVuQXR0YWNobWVudERpYWxvZygpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IG5ldyBRTVNDS0VkaXRvclBhcmFtdGVyKCk7XG4gICAgICAgIGRhdGEubW9kdWxlID0gdGhpcy5tb2R1bGU7XG4gICAgICAgIGRhdGEuZW50aXR5SWQgPSB0aGlzLmVudGl0eUlkO1xuICAgICAgICBjb25zdCBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oTGlua0F0dGFjaG1lbnRDb21wb25lbnQsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnNjUwcHgnLFxuICAgICAgICAgICAgaGVpZ2h0OiAnNjUwcHgnLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgZGlhbG9nVGVtcGxhdGVcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRTaGFwZU1vZGVsKG51bGwsIDAsIHJlc3VsdC50aXRsZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gcmVzdWx0LnVybDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkF0dGFjaG1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5tYXRJY29uID0gJ3RleHRfc25pcHBldCc7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXBTaGFwZURhdGEoKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1NoYXBlQ29ubmVjdGlvblZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNoYXBlQ29ubmVjdExhYmVsID0gdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkNPTk5FQ1RFRF9BVFRBQ0hNRU5UO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFNoYXBlQWN0aXZpdHkoZXZlbnQ6IGFueSkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxWaWV3ID0gd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV107XG4gICAgICAgIGlmICghIXNlbGVjdGVkQ2VsbFZpZXcpIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBzZWxlY3RlZENlbGxWaWV3Lm1vZGVsLmF0dHJpYnV0ZXM7XG4gICAgICAgICAgICBpZiAoISFhdHRyaWJ1dGVzLmxpbmtVcmwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldERhdGFGcm9tU2hhcGVBdHJyaWJ1dGUoYXR0cmlidXRlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnRhcmdldC50YXJnZXRJZCA9IGF0dHJpYnV0ZXMubGlua1RhcmdldDtcbiAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1NoYXBlQ29ubmVjdGlvblZhbHVlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIC8vIFNldCBzaGFwZSBjb25uZWN0IGxhYmVsXG4gICAgICAgICAgICAgICAgaWYgKCEhdGhpcy5zaGFwZU1vZGVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5zaGFwZU1vZGVsLnNoYXBlPy5jb25uZWN0aW9uVHlwZUlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRG9jdW1lbnRPclByb2Nlc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNoYXBlQ29ubmVjdExhYmVsID0gdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkNPTk5FQ1RFRF9ET0NVTUVOVF9QUk9DRVNTO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRldmlhdGlvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hhcGVDb25uZWN0TGFiZWwgPSB0aGlzLkxBTkcuQlBNTi5DT05ORUNUSU9OX1RZUEUuQ09OTkVDVEVEX0RFVklBVElPTjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5DaGVja2xpc3Q6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNoYXBlQ29ubmVjdExhYmVsID0gdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkNPTk5FQ1RFRF9DSEVDS0xJU1Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQXR0YWNobWVudDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hhcGVDb25uZWN0TGFiZWwgPSB0aGlzLkxBTkcuQlBNTi5DT05ORUNUSU9OX1RZUEUuQ09OTkVDVEVEX0FUVEFDSE1FTlQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuTGluazpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hhcGVDb25uZWN0TGFiZWwgPSB0aGlzLkxBTkcuQlBNTi5DT05ORUNUSU9OX1RZUEUuQ09OTkVDVEVEX0xJTks7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNob3dTaGFwZUNvbm5lY3Rpb25WYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0RGF0YUZyb21TaGFwZUF0cnJpYnV0ZShzaGFwZUF0dHJpYnV0ZTogYW55KSB7XG4gICAgICAgIGlmICghIXNoYXBlQXR0cmlidXRlLmxpbmtVcmwpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdFNoYXBlTW9kZWwoJycsICcnLCBzaGFwZUF0dHJpYnV0ZS5saW5rVGl0bGUpO1xuICAgICAgICAgICAgY29uc3QgdXJsID0gc2hhcGVBdHRyaWJ1dGUubGlua1VybDtcbiAgICAgICAgICAgIGNvbnN0IGhhc2hJbmRleCA9IHVybC5pbmRleE9mKCcjJyk7XG4gICAgICAgICAgICBsZXQgZG9jdW1lbnRUeXBlID0gbnVsbDtcbiAgICAgICAgICAgIGlmICghIXNoYXBlQXR0cmlidXRlLmNvbm5lY3Rpb25UeXBlSWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCA9IHNoYXBlQXR0cmlidXRlLmNvbm5lY3Rpb25UeXBlSWQ7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnRUeXBlID0gdGhpcy5nZXRSZWxhdGVkSXRlbUJ5U2hhcGVDb25uZWN0aW9uVHlwZShzaGFwZUF0dHJpYnV0ZS5jb25uZWN0aW9uVHlwZUlkLCB1cmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnRUeXBlID0gdGhpcy5nZXREb2N1bWVudFR5cGUodXJsKTtcbiAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnRUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkID0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5Eb2N1bWVudE9yUHJvY2VzcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkID0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5BdHRhY2htZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbGlua0lkID0gdGhpcy5nZXRMaW5rSWQodXJsLCBkb2N1bWVudFR5cGUpO1xuICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmRpc3BsYXlJZCA9IGxpbmtJZCA/ICtsaW5rSWQgOiAtMTtcbiAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5pdGVtVHlwZSA9IGRvY3VtZW50VHlwZTtcbiAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5wYXJlbnROYW1lID0gc2hhcGVBdHRyaWJ1dGUucGFyZW50TmFtZTtcbiAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC50YXJnZXQudGFyZ2V0SWQgPSBzaGFwZUF0dHJpYnV0ZS5saW5rVGFyZ2V0O1xuICAgICAgICAgICAgLy8gaGFuZGxlIGxvZ29cbiAgICAgICAgICAgIGlmICh0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCA9PT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5BdHRhY2htZW50KVxuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5tYXRJY29uID0gJ3RleHRfc25pcHBldCc7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uU1ZHSWNvbiA9IHRoaXMuZ2V0U2hhcGVNb2RlbEljb25CeURhdGFUeXBlKGRvY3VtZW50VHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBoYW5kbGUgTGlua1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkID09PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkxpbmspIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwubGluay5saW5rID0gdXJsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEhbGlua0lkICYmIGRvY3VtZW50VHlwZSA9PSBEYXRhVHlwZS5kb2N1bWVudCAmJiBoYXNoSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5hbmNob3IuYW5jaG9yVmFsdWUgPSB1cmwuc3Vic3RyKGhhc2hJbmRleCArIDEsIHVybC5sZW5ndGggLSBoYXNoSW5kZXgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QW5jaG9yRG9jdW1lbnQobGlua0lkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldExpbmtJZCh1cmw6IHN0cmluZywgdHlwZTogRGF0YVR5cGUpIHtcbiAgICAgICAgbGV0IHBhcnRpYWxVcmxJbmRleCA9IDA7XG4gICAgICAgIGxldCBwYXJ0aWFsVXJsTGVuZ3RoID0gMDtcbiAgICAgICAgbGV0IGlkID0gJyc7XG4gICAgICAgIGxldCBmcm9tID0gMDtcbiAgICAgICAgbGV0IHVybExvd2VyQ2FzZSA9ICEhdXJsID8gdXJsLnRvTG93ZXJDYXNlKCkgOiAnJztcblxuICAgICAgICBjb25zdCBwYXJ0aWFsVXJsID0gdGhpcy5nZXRQYXJ0aWFsVXJsKHR5cGUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGhhc2hJbmRleCA9IHVybExvd2VyQ2FzZS5pbmRleE9mKCcjJyk7XG5cbiAgICAgICAgaWYgKCEhcGFydGlhbFVybCkge1xuICAgICAgICAgICAgcGFydGlhbFVybEluZGV4ID0gdXJsTG93ZXJDYXNlLmluZGV4T2YocGFydGlhbFVybCk7XG5cbiAgICAgICAgICAgIHBhcnRpYWxVcmxMZW5ndGggPSBwYXJ0aWFsVXJsLmxlbmd0aDtcbiAgICAgICAgICAgIGZyb20gPSBwYXJ0aWFsVXJsSW5kZXggKyBwYXJ0aWFsVXJsTGVuZ3RoO1xuXG4gICAgICAgICAgICBpZiAodHlwZSA9PSBEYXRhVHlwZS5kb2N1bWVudCAmJiBoYXNoSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIGlkID0gdXJsTG93ZXJDYXNlLnN1YnN0cihmcm9tLCBoYXNoSW5kZXggLSBmcm9tKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHVybExvd2VyQ2FzZS5zdWJzdHIoZnJvbSkuaW5kZXhPZignLycpO1xuICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGlkID0gdXJsTG93ZXJDYXNlLnN1YnN0cihmcm9tKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlkID0gdXJsTG93ZXJDYXNlLnN1YnN0cihmcm9tLCBsZW5ndGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlID09IERhdGFUeXBlLmRvY3VtZW50KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnNlSW50KGlkLCAxMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAgICAgaWQgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaWQ7XG4gICAgfVxuXG4gICAgZ2V0UGFydGlhbFVybCh0eXBlOiBEYXRhVHlwZSkge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuZG9jdW1lbnQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIENLRWRpdG9yTGlua0NvbnN0LkRPQ1VNRU5UX1BBUlRJQUxfVVJMO1xuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5wcm9jZXNzOlxuICAgICAgICAgICAgICAgIHJldHVybiBDS0VkaXRvckxpbmtDb25zdC5QUk9DRVNTX1BBUlRJQUxfVVJMO1xuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5wcm9jZXNzSW50ZXJjb25uZWN0ZWQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIENLRWRpdG9yTGlua0NvbnN0LlBST0NFU1NfSU5URVJDT05ORUNURURfUEFSVElBTF9VUkw7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLmFyZWE6XG4gICAgICAgICAgICAgICAgcmV0dXJuIENLRWRpdG9yTGlua0NvbnN0LkFSRUFfUEFSVElBTF9VUkw7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLmZvbGRlcjpcbiAgICAgICAgICAgICAgICByZXR1cm4gQ0tFZGl0b3JMaW5rQ29uc3QuRk9MREVSX1BBUlRJQUxfVVJMO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRSZWxhdGVkSXRlbUJ5U2hhcGVDb25uZWN0aW9uVHlwZShjb25uZWN0aW9uVHlwZUlkOiBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLCB1cmw6IHN0cmluZykge1xuICAgICAgICBzd2l0Y2ggKGNvbm5lY3Rpb25UeXBlSWQpIHtcbiAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5Eb2N1bWVudE9yUHJvY2VzczpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREb2N1bWVudFR5cGUodXJsKTtcbiAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5EZXZpYXRpb246XG4gICAgICAgICAgICAgICAgcmV0dXJuIERhdGFUeXBlLmRldmlhdGlvbjtcbiAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5DaGVja2xpc3Q6XG4gICAgICAgICAgICAgICAgcmV0dXJuIERhdGFUeXBlLmNoZWNrbGlzdDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXREb2N1bWVudFR5cGUodXJsOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHVybC5pbmRleE9mKENLRWRpdG9yTGlua0NvbnN0LkRPQ1VNRU5UX1BBUlRJQUxfVVJMKSA+IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gRGF0YVR5cGUuZG9jdW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodXJsLmluZGV4T2YoQ0tFZGl0b3JMaW5rQ29uc3QuUFJPQ0VTU19QQVJUSUFMX1VSTCkgPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIERhdGFUeXBlLnByb2Nlc3M7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodXJsLmluZGV4T2YoQ0tFZGl0b3JMaW5rQ29uc3QuUFJPQ0VTU19JTlRFUkNPTk5FQ1RFRF9QQVJUSUFMX1VSTCkgPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIERhdGFUeXBlLnByb2Nlc3NJbnRlcmNvbm5lY3RlZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1cmwuaW5kZXhPZihDS0VkaXRvckxpbmtDb25zdC5BUkVBX1BBUlRJQUxfVVJMKSA+IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gRGF0YVR5cGUuYXJlYTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1cmwuaW5kZXhPZihDS0VkaXRvckxpbmtDb25zdC5GT0xERVJfUEFSVElBTF9VUkwpID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBEYXRhVHlwZS5mb2xkZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodXJsLmluZGV4T2YoQ0tFZGl0b3JMaW5rQ29uc3QuREVWSUFUSU9OX1BBUlRJQUxfVVJMKSA+IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gRGF0YVR5cGUuZGV2aWF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVybC5pbmRleE9mKENLRWRpdG9yTGlua0NvbnN0LkNIRUNLTElTVF9QQVJUSUFMX1VSTCkgPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIERhdGFUeXBlLmNoZWNrbGlzdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBnZXRBbmNob3JEb2N1bWVudChkb2N1bWVudElkKSB7XG4gICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5pc0FuY2hvckxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmxpbmtTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0QW5jaG9yRG9jdW1lbnRMaXN0KGRvY3VtZW50SWQpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZG9jdW1lbnRzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hbmNob3JzID0gdGhpcy5leHRyYWN0RG9jdW1lbnRBbmNob3JzKGRvY3VtZW50cyB8fCBbXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLmlzQW5jaG9yTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZXh0cmFjdERvY3VtZW50QW5jaG9ycyhhbmNob3JEb2N1bWVudDogUU1TQ0tFZGl0b3JMaW5rQW5jaG9yRG9jdW1lbnRbXSkge1xuICAgICAgICBjb25zdCBhbmNob3JzOiBRTVNCUE1OU2hhcGVBbmNob3JbXSA9IFt7IHZhbHVlOiAwLCB2aWV3VmFsdWU6ICcnLCBhbmNob3JWYWx1ZTogTGlua0FuY2hvci5CbGFuayB9XTtcbiAgICAgICAgbGV0IGlkID0gMztcbiAgICAgICAgaWYgKGFuY2hvckRvY3VtZW50KSB7XG4gICAgICAgICAgICBhbmNob3JEb2N1bWVudC5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9IGUucmljaFRleHQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZG9tQ29udGVudCA9IGRpdjtcbiAgICAgICAgICAgICAgICBjb25zdCBhVGFncyA9IGRvbUNvbnRlbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2EnKTtcbiAgICAgICAgICAgICAgICBpZiAoYVRhZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhVGFncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFnID0gYVRhZ3NbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGFuY2hvcnMuZmluZEluZGV4KCh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4LmFuY2hvclZhbHVlID09PSB0YWcubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3VmFsdWU6IHRhZy5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yVmFsdWU6IHRhZy5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGFuY2hvcnMucHVzaCh7XG4gICAgICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgICAgIHZpZXdWYWx1ZTogdGhpcy5MQU5HLlFNU0NLRURJVE9SLkFOQ0hPUl9BVFRBQ0hNRU5ULFxuICAgICAgICAgICAgYW5jaG9yVmFsdWU6IExpbmtBbmNob3IuQXR0YWNobWVudFxuICAgICAgICB9KTtcbiAgICAgICAgYW5jaG9ycy5wdXNoKHtcbiAgICAgICAgICAgIHZhbHVlOiAyLFxuICAgICAgICAgICAgdmlld1ZhbHVlOiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuQU5DSE9SX1JFTEFURURfRE9DVU1FTlQsXG4gICAgICAgICAgICBhbmNob3JWYWx1ZTogTGlua0FuY2hvci5SZWxhdGVkXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYW5jaG9ycztcbiAgICB9XG5cbiAgICBnZXRTaGFwZU1vZGVsSWNvbkJ5RGF0YVR5cGUoZGF0YVR5cGU6IERhdGFUeXBlLCBsZXZlbFR5cGU/OiBudW1iZXIpIHtcbiAgICAgICAgc3dpdGNoIChkYXRhVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5mb2xkZXI6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdmb2xkZXJfb3V0bGluZWQnO1xuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5kb2N1bWVudDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2RvY3VtZW50JztcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuYXJlYTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3Byb2Nlc3NfYXJlYV9vdXRsaW5lZCc7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLnByb2Nlc3M6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdwcm9jZXNzJztcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUucHJvY2Vzc0ludGVyY29ubmVjdGVkOlxuICAgICAgICAgICAgICAgIHJldHVybiAncHJvY2Vzc19pbnRlcmNvbm5lY3RlZCc7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLmRldmlhdGlvbjpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2RldmlhdGlvbic7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLmNoZWNrbGlzdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2NoZWNrbGlzdCc7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAnZm9sZGVyX291dGxpbmVkJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbG9hZEFuY2hvckRvY3VtZW50KCkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxWaWV3ID0gd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV107XG4gICAgICAgIGlmICghIXNlbGVjdGVkQ2VsbFZpZXcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNoYXBlTW9kZWwgJiYgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtICYmIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5pdGVtVHlwZSA9PT0gRGF0YVR5cGUuZG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldEFuY2hvckRvY3VtZW50KHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5kaXNwbGF5SWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb3BlbkxpbmsoKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBuZXcgU2hhcGVMaW5rKCk7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQlBNTkxpbmtDb21wb25lbnQsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnMzUwcHgnLFxuICAgICAgICAgICAgaGVpZ2h0OiAnMjQ1cHgnLFxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tbWF0LWRpYWxvZy1jb250YWluZXInLFxuICAgICAgICAgICAgZGF0YVxuICAgICAgICB9KTtcblxuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKG5ld0xpbmspID0+IHtcbiAgICAgICAgICAgIGlmIChuZXdMaW5rKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U2hhcGVNb2RlbCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkID0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5MaW5rO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5saW5rLmxpbmsgPSBuZXdMaW5rLmxpbms7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXBTaGFwZURhdGEoKTtcbiAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1NoYXBlQ29ubmVjdGlvblZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hhcGVDb25uZWN0TGFiZWwgPSB0aGlzLkxBTkcuQlBNTi5DT05ORUNUSU9OX1RZUEUuQ09OTkVDVEVEX0xJTks7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGRlbGV0ZUNvbm5lY3Rpb24oc2VsZWN0ZWRDb25uZWN0aW9uVHlwZTogYW55KSB7XG4gICAgICAgIGxldCB0aXRsZSA9IHRoaXMuTEFORy5CUE1OLkRFTEVURV9BVFRBQ0hNRU5UO1xuICAgICAgICBsZXQgY29udGVudCA9IHRoaXMuTEFORy5CUE1OLkNPTkZJUk1fREVMRVRFX0FUVEFDSE1FTlQ7XG4gICAgICAgIHN3aXRjaCAoc2VsZWN0ZWRDb25uZWN0aW9uVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzOlxuICAgICAgICAgICAgICAgIHRpdGxlID0gdGhpcy5MQU5HLkJQTU4uREVMRVRFX0RPQ1VNRU5UX09SX1BST0NFU1M7XG4gICAgICAgICAgICAgICAgY29udGVudCA9IHRoaXMuTEFORy5RTVNDS0VESVRPUl9NRVNTQUdFLkNPTkZJUk1fREVMRVRFX0RPQ1VNRU5UX09SX1BST0NFU1M7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRGV2aWF0aW9uOlxuICAgICAgICAgICAgICAgIHRpdGxlID0gdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkRFTEVURV9TSEFQRV9ERVZJQVRJT047XG4gICAgICAgICAgICAgICAgY29udGVudCA9IHRoaXMuTEFORy5RTVNDS0VESVRPUl9NRVNTQUdFLkNPTkZJUk1fREVMRVRFX0RFVklBVElPTjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5DaGVja2xpc3Q6XG4gICAgICAgICAgICAgICAgdGl0bGUgPSB0aGlzLkxBTkcuQlBNTi5DT05ORUNUSU9OX1RZUEUuREVMRVRFX1NIQVBFX0NIRUNLTElTVDtcbiAgICAgICAgICAgICAgICBjb250ZW50ID0gdGhpcy5MQU5HLlFNU0NLRURJVE9SX01FU1NBR0UuQ09ORklSTV9ERUxFVEVfQ0hFQ0tMSVNUO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkxpbms6XG4gICAgICAgICAgICAgICAgdGl0bGUgPSB0aGlzLkxBTkcuQlBNTi5ERUxFVEVfTElOSztcbiAgICAgICAgICAgICAgICBjb250ZW50ID0gdGhpcy5MQU5HLlFNU0NLRURJVE9SX01FU1NBR0UuQ09ORklSTV9ERUxFVEVfQVRUQUNITUVOVDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5BdHRhY2htZW50OlxuICAgICAgICAgICAgICAgIHRpdGxlID0gdGhpcy5MQU5HLkJQTU4uREVMRVRFX0FUVEFDSE1FTlQ7XG4gICAgICAgICAgICAgICAgY29udGVudCA9IHRoaXMuTEFORy5RTVNDS0VESVRPUl9NRVNTQUdFLkNPTkZJUk1fREVMRVRFX0FUVEFDSE1FTlQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zaG93Q29uZmlybURpYWxvZyh0aXRsZSwgY29udGVudCwgZmFsc2UsICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IHRydWUgfHwgKHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JyAmJiB2YWx1ZS5pc0NvbmZpcm1lZCA9PSB0cnVlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwgPSBuZXcgU2hhcGVNb2RlbCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1NoYXBlQ29ubmVjdGlvblZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmICghIXdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXS5tb2RlbC5yZW1vdmVQcm9wKCdsaW5rVXJsJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXS5tb2RlbC5yZW1vdmVQcm9wKCdsaW5rVGFyZ2V0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXS5tb2RlbC5yZW1vdmVQcm9wKCdsaW5rVGl0bGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddLm1vZGVsLnJlbW92ZVByb3AoJ2Nvbm5lY3Rpb25UeXBlSWQnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzYXZlU2hhcGVUYXJnZXQodGFyZ2V0SWQ6IGFueSkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxWaWV3ID0gd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV107XG4gICAgICAgIGlmICghIXNlbGVjdGVkQ2VsbFZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC50YXJnZXQudGFyZ2V0SWQgPSB0YXJnZXRJZDtcbiAgICAgICAgICAgIHNlbGVjdGVkQ2VsbFZpZXcubW9kZWwucHJvcCgnbGlua1RhcmdldCcsIHRhcmdldElkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNhdmVTaGFwZUFuY2hvcihhbmNob3JWYWx1ZTogYW55KSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbFZpZXcgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXTtcbiAgICAgICAgaWYgKCEhc2VsZWN0ZWRDZWxsVmlldykge1xuICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLmFuY2hvci5hbmNob3JWYWx1ZSA9IGFuY2hvclZhbHVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5pdGVtVHlwZSA9PT0gRGF0YVR5cGUuZG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ubGlua1VybCA9IGAke0NLRWRpdG9yTGlua0NvbnN0LkRPQ1VNRU5UX1BBUlRJQUxfVVJMfSR7dGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmRpc3BsYXlJZH0jJHthbmNob3JWYWx1ZX1gXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDZWxsVmlldy5tb2RlbC5wcm9wKCdsaW5rVXJsJywgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbWFwU2hhcGVEYXRhKCkge1xuICAgICAgICBpZiAoISF3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXSkge1xuICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10ubW9kZWwucHJvcCgnbGlua1VybCcsIHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkICE9PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkxpbmtcbiAgICAgICAgICAgICAgICA/IHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsIDogdGhpcy5zaGFwZU1vZGVsLmxpbmsubGluayk7XG4gICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXS5tb2RlbC5wcm9wKCdsaW5rVGFyZ2V0JywgVGFyZ2V0VHlwZU5hbWUubmV3KTtcbiAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddLm1vZGVsLnByb3AoJ2xpbmtUaXRsZScsIHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkICE9PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkxpbmtcbiAgICAgICAgICAgICAgICA/IHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5pdGVtTmFtZSA6ICcnKTtcbiAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddLm1vZGVsLnByb3AoJ2Nvbm5lY3Rpb25UeXBlSWQnLCB0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCk7XG4gICAgICAgICAgICAvLyBkZXZpYXRpb24gYW5kIGNoZWNrbGlzdCBoYXZlIHBhcmVudCBuYW1lXG4gICAgICAgICAgICBpZiAodGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPT09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRGV2aWF0aW9uXG4gICAgICAgICAgICAgICAgfHwgdGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPT09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQ2hlY2tsaXN0KVxuICAgICAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddLm1vZGVsLnByb3AoJ3BhcmVudE5hbWUnLCB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ucGFyZW50TmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
1160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWNrZWRpdG9yLWJwbW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcW1zLWFuZ3VsYXIvc3JjL2xpYi9xbXMtY2tlZGl0b3ItY29tcG9uZW50cy9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1icG1uL3Ftcy1ja2VkaXRvci1icG1uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMzRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDL0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDaEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ25FLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQ25HLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDeEUsT0FBTyxlQUFlLE1BQU0sK0NBQStDLENBQUM7QUFDNUUsT0FBTyxFQUFF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Qix5QkFBeUI7WUFMekIsc0JBQXNCO1lBWHRCLFlBQVk7WUFEWixlQUFlO1lBNENmLG1CQUFtQix1QkEwRW5CLE1BQU0sU0FBQyxlQUFlOzs7dUJBdkQxQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBJbmplY3QsIElucHV0LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcbmltcG9ydCB7IE1hdEljb25SZWdpc3RyeSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9pY29uXCI7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xuaW1wb3J0IHsgZm9ya0pvaW4sIG9mIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgQnBtbkFkZENvbm5lY3Rpb25UeXBlIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9lbnVtL2JwbW4tYWRkLWNvbm5lY3Rpb24tdHlwZS5lbnVtXCI7XG5pbXBvcnQgeyBEYXRhVHlwZSB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vZW51bS9kYXRhLXR5cGUuZW51bVwiO1xuaW1wb3J0IHsgRG9jdW1lbnROb2RlVHlwZSB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vZW51bS9kb2N1bWVudC1ub2RlLXR5cGUuZW51bVwiO1xuaW1wb3J0IHsgTW9kdWxlVHlwZSB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vZW51bS9tb2R1bGUtdHlwZS5lbnVtXCI7XG5pbXBvcnQgeyBQcm9jZXNzQ2xhc3NpZmljYXRpb25UeXBlcyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vZW51bS9wcm9jZXNzLWNsYXNzaWZpY2F0aW9uLXR5cGUuZW51bVwiO1xuaW1wb3J0IHsgUHJvY2Vzc05vZGVUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9lbnVtL3Byb2Nlc3Mtbm9kZS10eXBlLmVudW1cIjtcbmltcG9ydCB7IFByb2Nlc3NTdGF0dXMgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2VudW0vcHJvY2Vzc1N0YXR1cy5lbnVtXCI7XG5pbXBvcnQgVG9vbGJhckZ1bmN0aW9uIGZyb20gXCIuLi8uLi8uLi9jb21tb24vam9pbnRKUy9icG1uL3Rvb2xiYXIuZnVuY3Rpb25cIjtcbmltcG9ydCB7IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vY29tcG9uZW50cy9hcHAtaWNvbi9pY29uLXJlZ2lzdHJ5LnNlcnZpY2VcIjtcbmltcG9ydCB7IFNoYXBlTGluayB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL3Ftcy1icG1uL21vZGVscy9mbG93LWNoYXJ0LXNoYXBlL3NoYXBlLWxpbmtcIjtcbmltcG9ydCB7IFNoYXBlQ29ubmVjdGlvbkRldGFpbE1vZGVsIH0gZnJvbSBcIi4uLy4uLy4uL2NvbXBvbmVudHMvcW1zLWJwbW4vbW9kZWxzL3NoYXBlLWNvbm5lY3Rpb24tZGV0YWlsLm1vZGVsXCI7XG5pbXBvcnQgeyBTaGFwZU1vZGVsIH0gZnJvbSBcIi4uLy4uLy4uL2NvbXBvbmVudHMvcW1zLWJwbW4vbW9kZWxzL3NoYXBlLW1vZGVsLm1vZGVsXCI7XG5pbXBvcnQgeyBJUmVsYXRlZCB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL3JlbGF0ZWQvbW9kZWwvcmVsYXRlZC1kYXRhLm1vZGVsXCI7XG5pbXBvcnQgeyBRTVNTZWxlY3RPbmVHbG9iYWxTZXJ2aWNlLCBTZWxlY3RPbmVEaWFsb2csIFNlbGVjdE9uZVBvcHVwRGF0YSB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL3NlbGVjdC1vbmVcIjtcbmltcG9ydCB7IFFNU1NlbGVjdFByb2Nlc3NEb2N1bWVudEdsb2JhbFNlcnZpY2UsIFNlbGVjdFByb2Nlc3NEb2N1bWVudFBvcHVwQ29tcG9uZW50LCBTZWxlY3RQcm9jZXNzRG9jdW1lbnRQb3B1cERhdGEgfSBmcm9tIFwiLi4vLi4vLi4vY29tcG9uZW50cy9zZWxlY3QtcHJvY2Vzcy1kb2N1bWVudFwiO1xuaW1wb3J0IHsgVHJlZUNvbmZpZywgVHJlZU1vZGVsIH0gZnJvbSBcIi4uLy4uLy4uL2NvbXBvbmVudHMvdHJlZVwiO1xuaW1wb3J0IHsgQnBtblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvcW1zLWJwbW4uc2VydmljZVwiO1xuaW1wb3J0IHsgVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvdHJhbnNsYXRpb24tcmVnaXN0cnkuc2VydmljZVwiO1xuaW1wb3J0IHsgQ0tFZGl0b3JFdmVudENvbnN0IH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9jb25zdGFudHMvY2tlZGl0b3JFdmVudC5jb25zdGFudFwiO1xuaW1wb3J0IHsgRmxvd0NoYXJ0Q29uc3QgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2NvbnN0YW50cy9ja2VkaXRvckZsb3djaGFydC5jb25zdFwiO1xuaW1wb3J0IHsgQ0tFZGl0b3JMaW5rQ29uc3QgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2NvbnN0YW50cy9ja2VkaXRvckxpbmsuY29uc3RhbnRcIjtcbmltcG9ydCB7IEZsb3djaGFydFZpZXdNb2RlIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9lbnVtcy9mbG93Y2hhcnQtdmlldy1tb2RlLmVudW1cIjtcbmltcG9ydCB7IExpbmtBbmNob3IgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2VudW1zL2xpbmstYW5jaG9yLmVudW1cIjtcbmltcG9ydCB7IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUgfSBmcm9tICcuLi8uLi9jb21tb24vZW51bXMvc2hhcGUtZmxvdy1jaGFydC1jb25uZWN0aW9uLXR5cGUnO1xuaW1wb3J0IHsgVGFyZ2V0VHlwZU5hbWUgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2VudW1zL3RhcmdldC10eXBlLmVudW1cIjtcbmltcG9ydCB7IGJhc2U2NFN0cmluZ1RvRmlsZSB9IGZyb20gXCIuLi8uLi9jb21tb24vaGVscGVyL2ZpbGVIZWxwZXJcIjtcbmltcG9ydCBndWlkSGVscGVyIGZyb20gXCIuLi8uLi9jb21tb24vaGVscGVyL2d1aWRIZWxwZXJcIjtcbmltcG9ydCB7IFFNU0NLRWRpdG9yQnBtblRlbXBsYXRlIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLWJwbW4tdGVtcGxhdGUubW9kZWxcIjtcbmltcG9ydCB7IFFNU0NLRWRpdG9yQnBtbiB9IGZyb20gXCIuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci1icG1uLm1vZGVsXCI7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckRpYWxvZ0RhdGEgfSBmcm9tIFwiLi4vLi4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItZGlhbG9nLm1vZGVsXCI7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckxpbmtBbmNob3JEb2N1bWVudCB9IGZyb20gXCIuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci1saW5rLWFuY2hvci1kb2N1bWVudC5tb2RlbFwiO1xuaW1wb3J0IFFNU0NLRWRpdG9yUGFyYW10ZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLXBhcmFtZXRlci5tb2RlbFwiO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JDb25maXJtQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9tb2R1bGUvY29uZmlybS9xbXMtY2tlZGl0b3ItY29uZmlybS5jb21wb25lbnRcIjtcbmltcG9ydCB7IFFNU0NLRWRpdG9yVG9hc3RTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi90b2FzdC9xbXMtY2tlZGl0b3ItdG9hc3Quc2VydmljZVwiO1xuaW1wb3J0IHsgRGlhZ3JhbVRlbXBsYXRlcyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvZGlhZ3JhbS10ZW1wbGF0ZS5tb2RlbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRUcmVlTm9kZURhdGEgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2RvY3VtZW50LXRyZWUtbm9kZS1kYXRhLm1vZGVsXCI7XG5pbXBvcnQgeyBHZXRTZWFyY2hQcm9jZXNzRG9jdW1lbnRPcHRpb24gfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2dldC1zZWFyY2gtcHJvY2Vzcy1kb2N1bWVudC1vcHRpb25cIjtcbmltcG9ydCB7IFFNU0JQTU5Db25maWcgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3Ftcy1icG1uLWNvbmZpZy5tb2RlbFwiO1xuaW1wb3J0IHsgUU1TQlBNTlNoYXBlQW5jaG9yIH0gZnJvbSBcIi4uLy4uL21vZGVscy9xbXMtYnBtbi1zaGFwZS1hbmNob3IubW9kZWxcIjtcbmltcG9ydCB7IFFNU0JQTU5TaGFwZVRhcmdldCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcW1zLWJwbW4tc2hhcGUtdGFyZ2V0XCI7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckJwbW5EYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Ftcy1ja2VkaXRvci1icG1uLWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCYXNlQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL3Ftcy1ja2VkaXRvci1iYXNlLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCcG1uQXBpU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9xbXMtY2tlZGl0b3ItYnBtbi1hcGkuc2VydmljZVwiO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCUE1OQ29ubmVjdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvcW1zLWNrZWRpdG9yLWJwbW4tY29ubmVjdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckNvbW1vblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvcW1zLWNrZWRpdG9yLWNvbW1vbi5zZXJ2aWNlc1wiO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JMaW5rU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci1saW5rLnNlcnZpY2UnO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JUcmVlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9xbXMtY2tlZGl0b3ItdHJlZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBRTVNDS0VkaXRvclVwbG9hZFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvcW1zLWNrZWRpdG9yLXVwbG9hZC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBMaW5rQXR0YWNobWVudENvbXBvbmVudCB9IGZyb20gXCIuLi9xbXMtY2tlZGl0b3ItbGluay9hdHRhY2htZW50cy9saW5rLWF0dGFjaG1lbnQuY29tcG9uZW50XCI7XG5pbXBvcnQgUU1TQ0tFZGl0b3JCUE1ORnVuY3Rpb25zIGZyb20gJy4vLi4vLi4vY29tbW9uL2Z1bmN0aW9ucy9icG1uLmZ1bmN0aW9uJztcbmltcG9ydCB7IEJQTU5MaW5rQ29tcG9uZW50IH0gZnJvbSBcIi4vbGluay9icG1uLWxpbmsuY29tcG9uZW50XCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncW1zLWNrZWRpdG9yLWJwbW4nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9xbXMtY2tlZGl0b3ItYnBtbi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vcW1zLWNrZWRpdG9yLWJwbW4uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBRTVNDS0VkaXRvckJwbW5Db21wb25lbnQgZXh0ZW5kcyBRTVNDS0VkaXRvckJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICAgIExBTkc6IGFueTtcbiAgICBASW5wdXQoKSBja0VkaXRvcjogYW55O1xuXG4gICAgUU1TQlBNTkNvbmZpZzogUU1TQlBNTkNvbmZpZyA9IG5ldyBRTVNCUE1OQ29uZmlnKCk7XG4gICAganNvbkNvbnRlbnQ6IHN0cmluZztcblxuICAgIGlkID0gJyc7XG4gICAgbW9kdWxlOiBudW1iZXI7XG4gICAgZW50aXR5SWQgPSAnJztcbiAgICBlZGl0b3JDb250ZW50ID0gJyc7XG5cbiAgICBicG1uOiBRTVNDS0VkaXRvckJwbW4gPSBuZXcgUU1TQ0tFZGl0b3JCcG1uKCk7XG4gICAgYnBtblRlbWxhdGVzOiBRTVNDS0VkaXRvckJwbW5UZW1wbGF0ZVtdID0gW107XG4gICAgdGVtcGxhdGU7XG4gICAgdGVtcGxhdGVzID0gW107XG4gICAgc2hhcGVNb2RlbDogU2hhcGVNb2RlbCA9IG5ldyBTaGFwZU1vZGVsKCk7XG4gICAgLyoqIHRlbXBsYXRlIGJlZm9yZSBzZWxlY3RlZCBhbHJlYWR5IGFub3RoZXIgdGVtcGxhdGUgaW4gc2VsZWN0IGJveCAodXNpbmcgZm9yIHJlc2V0IHRlbXBsYXRlKSovXG4gICAgdGVtcFRlbXBsYXRlOiBhbnk7XG4gICAgdGFyZ2V0czogUU1TQlBNTlNoYXBlVGFyZ2V0W10gPSBbXTtcbiAgICBhbmNob3JzOiBRTVNCUE1OU2hhcGVBbmNob3JbXSA9IFtdO1xuICAgIC8vIHByb2Nlc3MvZG9jdW1lbnQgY29ubmVjdGlvbiB0eXBlXG4gICAgc3BsaXRWaWV3OiBib29sZWFuO1xuICAgIHByb2Nlc3NUcmVlQ29uZmlnOiBUcmVlQ29uZmlnO1xuICAgIGRvY3VtZW50VHJlZUNvbmZpZzogVHJlZUNvbmZpZztcbiAgICB0cmVlUHJvY2Vzc0RhdGE6IERvY3VtZW50VHJlZU5vZGVEYXRhW107XG4gICAgdHJlZURvY3VtZW50RGF0YTogRG9jdW1lbnRUcmVlTm9kZURhdGFbXTtcbiAgICBsb2FkaW5nUmVsYXRlZERhdGE6IGJvb2xlYW47XG4gICAgZW5hYmxlZEludGVyY29ubmVjdGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgZW5hYmxlZERldmlhdGlvbk1vZHVsZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGVuYWJsZWRDaGVja2xpc3RNb2R1bGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBsYW5ndWFnZTogc3RyaW5nID0gJ2VuJztcblxuICAgIC8qIERldmlhdGlvbiBjb25uZWN0IHR5cGUgKi9cbiAgICBkZXZpYXRpb25EYXRhVHJlZTogVHJlZU1vZGVsW107XG4gICAgZGV2aWF0aW9uU2VsZWN0T25lQ29uZmlnOiBUcmVlQ29uZmlnO1xuXG4gICAgLyogQ2hlY2tsaXN0IGNvbm5lY3QgdHlwZSAqL1xuICAgIGNoZWNrbGlzdERhdGFUcmVlOiBUcmVlTW9kZWxbXTtcbiAgICBjaGVja2xpc3RTZWxlY3RPbmVDb25maWc6IFRyZWVDb25maWc7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGJwbW5TZXJ2aWNlOiBCcG1uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBicG1uQXBpU2VydmljZTogUU1TQ0tFZGl0b3JCcG1uQXBpU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBsaW5rU2VydmljZTogUU1TQ0tFZGl0b3JMaW5rU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB1cGxvYWRTZXJ2aWNlOiBRTVNDS0VkaXRvclVwbG9hZFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY29tbW9uU2VydmljZTogUU1TQ0tFZGl0b3JDb21tb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHNlbGVjdFByb2Nlc3NEb2N1bWVudEdsb2JhbFNlcnZpY2U6IFFNU1NlbGVjdFByb2Nlc3NEb2N1bWVudEdsb2JhbFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVsYXRlZFNlcnZpY2U6IFFNU0NLRWRpdG9yQlBNTkNvbm5lY3Rpb25TZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8UU1TQ0tFZGl0b3JCcG1uQ29tcG9uZW50PixcbiAgICAgICAgcHJpdmF0ZSB0cmVlU2VydmljZTogUU1TQ0tFZGl0b3JUcmVlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBxbXNSZWxhdGVkU2VydmljZTogUU1TU2VsZWN0T25lR2xvYmFsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhcHBJY29uU2VydmljZTogUU1TSWNvblJlZ2lzdHJ5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICAgICAgcHJpdmF0ZSBpY29uUmVnaXN0cnk6IE1hdEljb25SZWdpc3RyeSxcbiAgICAgICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBRTVNDS0VkaXRvckJwbW5EYXRhXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaWQgPSBkYXRhLmlkO1xuICAgICAgICB0aGlzLm1vZHVsZSA9IGRhdGEubW9kdWxlO1xuICAgICAgICB0aGlzLmVudGl0eUlkID0gZGF0YS5lbnRpdHlJZDtcbiAgICAgICAgdGhpcy5lZGl0b3JDb250ZW50ID0gZGF0YS5lZGl0b3JDb250ZW50O1xuICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1Byb2Nlc3NEb2N1bWVudFRyZWVEYXRhSW5TcGxpdFZpZXcgPSBkYXRhLnNob3dQcm9jZXNzRG9jdW1lbnRUcmVlRGF0YUluU3BsaXRWaWV3O1xuICAgICAgICB0aGlzLmVuYWJsZWRJbnRlcmNvbm5lY3RlZCA9IGRhdGEuZW5hYmxlZEludGVyY29ubmVjdGVkO1xuICAgICAgICB0aGlzLmVuYWJsZWREZXZpYXRpb25Nb2R1bGUgPSBkYXRhLmVuYWJsZWREZXZpYXRpb25Nb2R1bGU7XG4gICAgICAgIHRoaXMuZW5hYmxlZENoZWNrbGlzdE1vZHVsZSA9IGRhdGEuZW5hYmxlZENoZWNrbGlzdE1vZHVsZTtcbiAgICAgICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJQcm9jZXNzSWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyUHJvY2Vzc0FyZWFJY29uKGljb25SZWdpc3RyeSwgc2FuaXRpemVyKTtcbiAgICAgICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJEb2N1bWVudEljb24oaWNvblJlZ2lzdHJ5LCBzYW5pdGl6ZXIpO1xuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckZvbGRlckljb24oaWNvblJlZ2lzdHJ5LCBzYW5pdGl6ZXIpO1xuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckRldmlhdGlvbkljb24oaWNvblJlZ2lzdHJ5LCBzYW5pdGl6ZXIpO1xuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckNoZWNrbGlzdEljb24oaWNvblJlZ2lzdHJ5LCBzYW5pdGl6ZXIpO1xuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclByb2Nlc3NJbnRlcmNvbm5lY3RlZEljb24oaWNvblJlZ2lzdHJ5LCBzYW5pdGl6ZXIpO1xuICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1NoYXBlQ29ubmVjdGlvblZhbHVlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IG5ldyBEaWFncmFtVGVtcGxhdGVzKCk7XG4gICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5lZGl0TW9kZSA9IEZsb3djaGFydFZpZXdNb2RlLkVkaXQ7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmdldExhbmd1YWdlU3ViamVjdCQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2UgPSByZXM7XG4gICAgICAgICAgICAgICAgdGhpcy5MQU5HID0gdGhpcy50cmFuc2xhdGUuZ2V0T2JqZWN0TGFuZyhyZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5jaGFuZ2VUZW1wbGF0ZVBvcHVwQ29udGVudCA9IHRoaXMuTEFORy5CUE1OLkNIQU5HRV9URU1QTEFURV9OT1RFO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5pZCkge1xuICAgICAgICAgICAgdGhpcy5qc29uQ29udGVudCA9IGF3YWl0IHRoaXMuZ2V0SnNvbkNvbnRlbnQodGhpcy5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zcGxpdFZpZXcgPSB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1Byb2Nlc3NEb2N1bWVudFRyZWVEYXRhSW5TcGxpdFZpZXc7XG4gICAgICAgIHRoaXMuaW5pdENvbm5lY3Rpb25UeXBlcygpO1xuICAgICAgICB0aGlzLmluaXRUYXJnZXQoKTtcbiAgICAgICAgdGhpcy5pbml0UmVsYXRlZENvbmZpZ0FuZERhdGEoKTtcbiAgICB9XG5cbiAgICBhc3luYyBuZ0FmdGVyVmlld0luaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuYnBtblRlbWxhdGVzID0gYXdhaXQgdGhpcy5nZXRUZW1wbGF0ZXMoKTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXMgPSB0aGlzLmJwbW5UZW1sYXRlcy5tYXAoKHgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaW5kZXg6IHguaW5kZXgsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVOYW1lOiB4LnRlbXBsYXRlTmFtZSxcbiAgICAgICAgICAgICAgICBmbG93Q2hhcnRJZDogeC5pZCxcbiAgICAgICAgICAgICAgICBuYW1lOiB4LnRlbXBsYXRlTmFtZSxcbiAgICAgICAgICAgICAgICBqc29uQ29udGVudDogeC5qc29uQ29udGVudFxuICAgICAgICAgICAgfVxuICAgICAgICB9KSB8fCBbXTtcbiAgICAgICAgdGhpcy5icG1uU2VydmljZS5idWlsZERpYWdyYW0oXG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlcyxcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGUsXG4gICAgICAgICAgICAnZGVmYXVsdCBqb2ludC10aGVtZS1icG1uJyxcbiAgICAgICAgICAgIHRoaXMuanNvbkNvbnRlbnQsXG4gICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuZWRpdE1vZGUsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgVG9vbGJhckZ1bmN0aW9uLmdldFRvb2xiYXJDb25maWd1cmF0aW9uKHRoaXMuTEFORyksXG4gICAgICAgICAgICB0aGlzLmxhbmd1YWdlXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNob3dTaGFwZUNvbm5lY3Rpb25WYWx1ZSA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLmFkZENvbm5lY3Rpb25UeXBlID0gQnBtbkFkZENvbm5lY3Rpb25UeXBlLlNpbmdsZUNvbm5lY3Rpb247XG4gICAgfVxuXG4gICAgaW5pdENvbm5lY3Rpb25UeXBlcygpIHtcbiAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLmNvbm5lY3RUeXBlcyA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5Eb2N1bWVudE9yUHJvY2VzcyxcbiAgICAgICAgICAgICAgICB2aWV3VmFsdWU6IHRoaXMuTEFORy5CUE1OLkRPQ1VNRU5UX1BST0NFU1MsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5QUk9DRVNTX0RPQ1VNRU5UX0NPTk5FQ1RJT05fR1VJREVMSU5FLFxuICAgICAgICAgICAgICAgIGNhbkNvbm5lY3Q6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRGV2aWF0aW9uLFxuICAgICAgICAgICAgICAgIHZpZXdWYWx1ZTogdGhpcy5MQU5HLkJQTU4uREVWSUFUSU9OLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLkxBTkcuQlBNTi5DT05ORUNUSU9OX1RZUEUuREVWSUFUSU9OX0NPTk5FQ1RJT05fR1VJREVMSU5FLFxuICAgICAgICAgICAgICAgIGNhbkNvbm5lY3Q6IHRoaXMuZW5hYmxlZERldmlhdGlvbk1vZHVsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5DaGVja2xpc3QsXG4gICAgICAgICAgICAgICAgdmlld1ZhbHVlOiB0aGlzLkxBTkcuQlBNTi5DSEVDS0xJU1QsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5DSEVDS0xJU1RfQ09OTkVDVElPTl9HVUlERUxJTkUsXG4gICAgICAgICAgICAgICAgY2FuQ29ubmVjdDogdGhpcy5lbmFibGVkQ2hlY2tsaXN0TW9kdWxlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkxpbmssXG4gICAgICAgICAgICAgICAgdmlld1ZhbHVlOiB0aGlzLkxBTkcuQlBNTi5MSU5LLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLkxBTkcuQlBNTi5DT05ORUNUSU9OX1RZUEUuTElOS19DT05ORUNUSU9OX0dVSURFTElORSxcbiAgICAgICAgICAgICAgICBjYW5Db25uZWN0OiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkF0dGFjaG1lbnQsXG4gICAgICAgICAgICAgICAgdmlld1ZhbHVlOiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuQVRUQUNITUVOVCxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICAgICAgICAgICAgY2FuQ29ubmVjdDogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICBdO1xuXG4gICAgfVxuXG4gICAgaW5pdFRhcmdldCgpIHtcbiAgICAgICAgaWYgKHRoaXMudGFyZ2V0cykge1xuICAgICAgICAgICAgdGhpcy50YXJnZXRzLnB1c2goeyB2YWx1ZTogVGFyZ2V0VHlwZU5hbWUubmV3LCB2aWV3VmFsdWU6IHRoaXMuTEFORy5RTVNDS0VESVRPUi5UQVJHRVRfQkxBTksgfSk7XG4gICAgICAgICAgICB0aGlzLnRhcmdldHMucHVzaCh7IHZhbHVlOiBUYXJnZXRUeXBlTmFtZS5zYW1lLCB2aWV3VmFsdWU6IHRoaXMuTEFORy5RTVNDS0VESVRPUi5UQVJHRVRfU0VMRiB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdldFRlbXBsYXRlcygpOiBQcm9taXNlPFFNU0NLRWRpdG9yQnBtblRlbXBsYXRlW10+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJwbW5BcGlTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmJwbW5HZXRUZW1wbGF0ZXMoKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGFzeW5jIGdldEpzb25Db250ZW50KGlkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYnBtbkFwaVNlcnZpY2VcbiAgICAgICAgICAgICAgICAuZ2V0QnBtbkJ5SWQoaWQpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuanNvbkNvbnRlbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgc2VsZWN0Q29ubmVjdFR5cGUoZXZlbnQ6IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUpIHtcbiAgICAgICAgc3dpdGNoIChldmVudCkge1xuICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzOlxuICAgICAgICAgICAgICAgIHRoaXMub3BlblByb2Nlc3NEb2N1bWVudCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRldmlhdGlvbjpcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5EZXZpYXRpb24oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5DaGVja2xpc3Q6XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuQ2hlY2tsaXN0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQXR0YWNobWVudDpcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5BdHRhY2htZW50RGlhbG9nKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuTGluazpcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5MaW5rKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VsZWN0VGVtcGxhdGUoKSB7XG4gICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19TRUxFQ1RFRF9URU1QTEFURV0gPSB0cnVlO1xuICAgICAgICBjb25zdCBncmFwaCA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5HUkFQSF07XG4gICAgICAgIHRoaXMudGVtcFRlbXBsYXRlID0gZ3JhcGgudG9KU09OKCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSnNvbkNvbnRlbnQgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfSlNPTl9DT05URU5UXTtcbiAgICAgICAgaWYgKHNlbGVjdGVkSnNvbkNvbnRlbnQpIHtcbiAgICAgICAgICAgIGlmIChncmFwaCkge1xuICAgICAgICAgICAgICAgIGdyYXBoLmZyb21KU09OKEpTT04ucGFyc2Uoc2VsZWN0ZWRKc29uQ29udGVudCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXSA9IG51bGw7XG4gICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfU0hBUEVfSURdID0gJyc7XG4gICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0hBUEVfVFlQRV0gPSAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBzYXZlIEJQTU5cbiAgICBhc3luYyBzYXZlSW1hZ2VDb250ZW50KGdyYXBoT2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QganNvbkNvbnRlbnQgPSBKU09OLnN0cmluZ2lmeShncmFwaE9iamVjdCk7XG4gICAgICAgICAgICB0aGlzLmJwbW4gPSB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMuaWQgPyB0aGlzLmlkIDogZ3VpZEhlbHBlci5lbXB0eSxcbiAgICAgICAgICAgICAgICBqc29uQ29udGVudDoganNvbkNvbnRlbnQsXG4gICAgICAgICAgICAgICAgaXNUZW1wbGF0ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVOYW1lOiAnJ1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmJwbW5BcGlTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmJwbW5Nb2RpZnlpbmcodGhpcy5icG1uKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGFzeW5jIGdldEltYWdlQ29udGVudChqb2ludDogYW55LCBwYXBlcjogYW55KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgdmFyIGpvaW50VG9vbHNFbCA9IHBhcGVyLnN2Zz8uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnam9pbnQtdG9vbHMnKTtcbiAgICAgICAgICAgIGlmIChqb2ludFRvb2xzRWwpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGpvaW50VG9vbHNFbC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgICAgICBqb2ludFRvb2xzRWxbaV0uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBqb2ludC5mb3JtYXQudG9QTkcocGFwZXIsIChpbWFnZURhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJTdHJpbmcgPSBpbWFnZURhdGEuc3BsaXQoJywnKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGFyclN0cmluZ1sxXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgb25JbnNlcnRJbWFnZSgpIHtcbiAgICAgICAgY29uc3QgZ3JhcGggPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuR1JBUEhdO1xuICAgICAgICBjb25zdCBwYXBlciA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5QQVBFUl07XG4gICAgICAgIGNvbnN0IGpvaW50ID0gd2luZG93W0Zsb3dDaGFydENvbnN0LkpPSU5UXTtcbiAgICAgICAgY29uc3QgZ3JhcGhPYmplY3QgPSBncmFwaC50b0pTT04oKTtcbiAgICAgICAgY29uc3QgY2xpZW50UmVjdCA9IHBhcGVyLnBhcGVyVG9Mb2NhbFJlY3QocGFwZXIuZ2V0Q29udGVudEJCb3goKSk7XG4gICAgICAgIGNvbnN0IGlkID0gYXdhaXQgdGhpcy5zYXZlSW1hZ2VDb250ZW50KGdyYXBoT2JqZWN0KTtcbiAgICAgICAgY29uc3QgaW1hZ2VDb250ZW50ID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwnICsgYXdhaXQgdGhpcy5nZXRJbWFnZUNvbnRlbnQoam9pbnQsIHBhcGVyKTtcbiAgICAgICAgY29uc3QgZmlsZSA9IGJhc2U2NFN0cmluZ1RvRmlsZShpbWFnZUNvbnRlbnQsIGAke0NLRWRpdG9yRXZlbnRDb25zdC5RTVNDS19CUE1OfSMke2lkfWApO1xuICAgICAgICBjb25zdCByZWxhdGl2ZVVybCA9IGF3YWl0IHRoaXMudXBsb2FkU2VydmljZS51cGxvYWRJbWFnZShmaWxlKS50b1Byb21pc2UoKTtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVBZGRpdGlvbmFsV2lkdGgoZ3JhcGgsIHBhcGVyLCBncmFwaE9iamVjdC5jZWxscyk7XG4gICAgICAgIGNvbnN0IGltYWdlbWFwID0gUU1TQ0tFZGl0b3JCUE1ORnVuY3Rpb25zLnRvSW1hZ2VNYXAoaWQsIGdyYXBoT2JqZWN0LmNlbGxzLCBjbGllbnRSZWN0KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0geyBrZXk6IGAke0NLRWRpdG9yRXZlbnRDb25zdC5RTVNDS19CUE1OfSMke2lkfWAsIHZhbHVlczogcmVsYXRpdmVVcmwsIGltYWdlbWFwOiBpbWFnZW1hcCB9XG4gICAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IHRoaXMuY29tbW9uU2VydmljZS5nZXRTY3JvbGxUb3BDa2VkaXRvcih0aGlzLmNrRWRpdG9yKTtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UocmVzdWx0KTtcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlLnNldFNjcm9sbFRvcEVkaXRvckNvbnRhaW5lcih0aGlzLmNrRWRpdG9yLCBzY3JvbGxUb3ApO1xuICAgIH1cblxuICAgIG9uQ2xvc2VEaWFsb2coKSB7XG4gICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddID0gbnVsbDtcbiAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNFTEVDVEVEX1NIQVBFX0lEXSA9ICcnO1xuICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0hBUEVfVFlQRV0gPSAnJztcbiAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy5jb21tb25TZXJ2aWNlLmdldFNjcm9sbFRvcENrZWRpdG9yKHRoaXMuY2tFZGl0b3IpO1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2Uuc2V0U2Nyb2xsVG9wRWRpdG9yQ29udGFpbmVyKHRoaXMuY2tFZGl0b3IsIHNjcm9sbFRvcCk7XG4gICAgfVxuXG4gICAgc2F2ZUFzVGVtcGxhdGUodGVtcGxhdGVOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy5jb21tb25TZXJ2aWNlLmdldFNjcm9sbFRvcENrZWRpdG9yKHRoaXMuY2tFZGl0b3IpO1xuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2Uuc2V0U2Nyb2xsVG9wRWRpdG9yQ29udGFpbmVyKHRoaXMuY2tFZGl0b3IsIHNjcm9sbFRvcCk7XG4gICAgICAgIGNvbnN0IGdyYXBoID0gd2luZG93W0Zsb3dDaGFydENvbnN0LkdSQVBIXTtcbiAgICAgICAgY29uc3QganNvbkNvbnRlbnQgPSBKU09OLnN0cmluZ2lmeShncmFwaC50b0pTT04oKSk7XG4gICAgICAgIHRoaXMuYnBtbiA9IHtcbiAgICAgICAgICAgIGlkOiBndWlkSGVscGVyLmVtcHR5LFxuICAgICAgICAgICAganNvbkNvbnRlbnQ6IGpzb25Db250ZW50LFxuICAgICAgICAgICAgaXNUZW1wbGF0ZTogdHJ1ZSxcbiAgICAgICAgICAgIHRlbXBsYXRlTmFtZTogJydcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJwbW4udGVtcGxhdGVOYW1lID0gdGVtcGxhdGVOYW1lO1xuICAgICAgICB0aGlzLmJwbW5BcGlTZXJ2aWNlXG4gICAgICAgICAgICAuYnBtbk1vZGlmeWluZyh0aGlzLmJwbW4pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJwbW5TZXJ2aWNlLmFkZEl0ZW1UZW1wbGF0ZShyZXN1bHQsIHRoaXMuYnBtbik7XG4gICAgICAgICAgICAgICAgICAgIFFNU0NLRWRpdG9yVG9hc3RTZXJ2aWNlLnN1Y2Nlc3ModGhpcy5MQU5HLlFNU0NLRURJVE9SLlNBVkVEKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBRTVNDS0VkaXRvclRvYXN0U2VydmljZS5lcnJvcih0aGlzLkxBTkcuUU1TQ0tFRElUT1IuU0FWRV9GQUlMRUQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGRlbGV0ZVRlbXBsYXRlKCkge1xuICAgICAgICBpZiAoISF0aGlzLnRlbXBsYXRlLmZsb3dDaGFydElkKSB7XG4gICAgICAgICAgICB0aGlzLmJwbW5BcGlTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmJwbW5EZWxldGVUZW1wbGF0ZSh0aGlzLnRlbXBsYXRlLmZsb3dDaGFydElkKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnBtblNlcnZpY2UucmVtb3ZlU2VsZWN0SXRlbSh0aGlzLnRlbXBsYXRlLmZsb3dDaGFydElkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnBtblNlcnZpY2Uuc2V0RGVmYXVsdFNlbGVjdGVkVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFFNU0NLRWRpdG9yVG9hc3RTZXJ2aWNlLnN1Y2Nlc3ModGhpcy5MQU5HLlFNU0NLRURJVE9SLkRFTEVURUQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgUU1TQ0tFZGl0b3JUb2FzdFNlcnZpY2UuZXJyb3IodGhpcy5MQU5HLlFNU0NLRURJVE9SLkRFTEVURV9GQUlMRUQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXNldFRlbXBsYXRlKCkge1xuICAgICAgICBpZiAodGhpcy50ZW1wVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyYXBoID0gd2luZG93W0Zsb3dDaGFydENvbnN0LkdSQVBIXTtcbiAgICAgICAgICAgIGlmIChncmFwaCkge1xuICAgICAgICAgICAgICAgIGdyYXBoLmZyb21KU09OKHRoaXMudGVtcFRlbXBsYXRlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJwbW5TZXJ2aWNlLnNldERlZmF1bHRTZWxlY3RlZFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LklTX1NFTEVDVEVEX1RFTVBMQVRFXSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10gPSBudWxsO1xuICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNFTEVDVEVEX1NIQVBFX0lEXSA9ICcnO1xuICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNIQVBFX1RZUEVdID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzaG93Q29uZmlybURpYWxvZyh0aXRsZTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcsIGlzTWVzc2FnZTogYm9vbGVhbiwgY2FsbGJhY2s/OiAocmVzdWx0PzogYW55KSA9PiB2b2lkKSB7XG4gICAgICAgIGNvbnN0IGRhdGE6IFFNU0NLRWRpdG9yRGlhbG9nRGF0YSA9IG5ldyBRTVNDS0VkaXRvckRpYWxvZ0RhdGEoKTtcbiAgICAgICAgZGF0YS50aXRsZSA9IHRpdGxlO1xuICAgICAgICBkYXRhLmNvbnRlbnQgPSBjb250ZW50O1xuICAgICAgICBkYXRhLmlzTWVzc2FnZSA9IGlzTWVzc2FnZTtcbiAgICAgICAgZGF0YS5pc0Nsb3NlQnRuID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihRTVNDS0VkaXRvckNvbmZpcm1Db21wb25lbnQsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgICAgICAgICAgbWluSGVpZ2h0OiAnMTc1cHgnLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgfSk7XG4gICAgICAgIGRpYWxvZ1JlZlxuICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjYWxjdWxhdGVBZGRpdGlvbmFsV2lkdGgoZ3JhcGg6IGFueSwgcGFwZXI6IGFueSwgY2VsbHM6IGFueVtdKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBiYm94ID0gZ3JhcGguZ2V0Q2VsbChjZWxsc1tpXSkuZmluZFZpZXcocGFwZXIpLmdldEJCb3hUb0NhbGN1bGF0ZUFkZGl0aW9uYWxXaWR0aCgpO1xuICAgICAgICAgICAgY2VsbHNbaV0uYWRkaXRpb25hbFdpZHRoID0gMDtcbiAgICAgICAgICAgIGlmIChiYm94ICYmIGNlbGxzW2ldPy5zaXplPy53aWR0aClcbiAgICAgICAgICAgICAgICBjZWxsc1tpXS5hZGRpdGlvbmFsV2lkdGggPSAoYmJveC53aWR0aCA+IGNlbGxzW2ldLnNpemUud2lkdGgpID8gKGJib3gud2lkdGggLSBjZWxsc1tpXS5zaXplLndpZHRoKSA6IDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0U2hhcGVNb2RlbChpZDogYW55ID0gJycsIGl0ZW1UeXBlOiBhbnkgPSAnJywgaXRlbU5hbWU6IHN0cmluZyA9ICcnLCBzdGF0dXNOYW1lOiBzdHJpbmcgPSBudWxsKSB7XG4gICAgICAgIHRoaXMuc2hhcGVNb2RlbCA9IG5ldyBTaGFwZU1vZGVsKCk7XG4gICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5kaXNwbGF5SWQgPSBpZDtcbiAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmlkID0gaWQ7XG4gICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5pdGVtVHlwZSA9IGl0ZW1UeXBlO1xuICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uaXRlbU5hbWUgPSBpdGVtTmFtZTtcbiAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLnN0YXR1c05hbWUgPSBzdGF0dXNOYW1lO1xuICAgICAgICB0aGlzLnNoYXBlTW9kZWwudGFyZ2V0LnRhcmdldElkID0gVGFyZ2V0VHlwZU5hbWUubmV3O1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBjb25uZWN0aW9uIHByb2Nlc3MvZG9jdW1lbnRcbiAgICBpbml0UmVsYXRlZENvbmZpZ0FuZERhdGEoKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1RyZWVDb25maWcgPSB7XG4gICAgICAgICAgICBhbGxvd1NlbGVjdEZvbGRlcjogdHJ1ZSxcbiAgICAgICAgICAgIGFyZWFPZkN1cnJlbnRQcm9jZXNzOiAnJyxcbiAgICAgICAgICAgIHNob3dDaGVja0JveDogdHJ1ZSxcbiAgICAgICAgICAgIGFsbG93TXVsdGlwbGVDaGVjazogZmFsc2UsXG4gICAgICAgICAgICBvbmx5Q2hlY2tCb3hGb3JDaGlsZDogZmFsc2UsXG4gICAgICAgICAgICBtb2R1bGVJZDogRGF0YVR5cGUucHJvY2VzcyxcbiAgICAgICAgICAgIG9wZW5JY29uQ29sb3I6ICcjMTk1NEE5JyxcbiAgICAgICAgICAgIGNsb3NlSWNvbkNvbG9yOiAnI2E0YjBkZScsXG4gICAgICAgICAgICBzaW5nbGVTZWxlY3RlZE5vZGU6IHRydWUsXG4gICAgICAgICAgICBvbmx5Rm9sZGVyOiBmYWxzZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZG9jdW1lbnRUcmVlQ29uZmlnID0ge1xuICAgICAgICAgICAgYWxsb3dTZWxlY3RGb2xkZXI6IHRydWUsXG4gICAgICAgICAgICBhcmVhT2ZDdXJyZW50UHJvY2VzczogJycsXG4gICAgICAgICAgICBzaG93Q2hlY2tCb3g6IHRydWUsXG4gICAgICAgICAgICBtb2R1bGVJZDogRGF0YVR5cGUuZG9jdW1lbnQsXG4gICAgICAgICAgICBhbGxvd011bHRpcGxlQ2hlY2s6IGZhbHNlLFxuICAgICAgICAgICAgb25seUNoZWNrQm94Rm9yQ2hpbGQ6IGZhbHNlLFxuICAgICAgICAgICAgb3Blbkljb25Db2xvcjogJyMxOTU0QTknLFxuICAgICAgICAgICAgY2xvc2VJY29uQ29sb3I6ICcjNGFjYWZmJyxcbiAgICAgICAgICAgIHNpbmdsZVNlbGVjdGVkTm9kZTogdHJ1ZSxcbiAgICAgICAgICAgIG9ubHlGb2xkZXI6IGZhbHNlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5kZXZpYXRpb25TZWxlY3RPbmVDb25maWcgPSB7XG4gICAgICAgICAgICBhbGxvd1NlbGVjdEZvbGRlcjogZmFsc2UsXG4gICAgICAgICAgICBzaG93Q2hlY2tCb3g6IGZhbHNlLFxuICAgICAgICAgICAgYWxsb3dNdWx0aXBsZUNoZWNrOiBmYWxzZSxcbiAgICAgICAgICAgIG9ubHlDaGVja0JveEZvckNoaWxkOiBmYWxzZSxcbiAgICAgICAgICAgIG1vZHVsZUlkOiBEYXRhVHlwZS5kZXZpYXRpb24sXG4gICAgICAgICAgICBvcGVuSWNvbjogJ2tleWJvYXJkX2Fycm93X3VwJyxcbiAgICAgICAgICAgIG9wZW5JY29uQ29sb3I6ICcjMTk1NEE5JyxcbiAgICAgICAgICAgIGNsb3NlSWNvbjogJ2tleWJvYXJkX2Fycm93X2Rvd24nLFxuICAgICAgICAgICAgY2xvc2VJY29uQ29sb3I6ICcnLFxuICAgICAgICAgICAgaXRlbUljb246ICdyZXBvcnRfcHJvYmxlbScsXG4gICAgICAgICAgICBzaW5nbGVTZWxlY3RlZE5vZGU6IGZhbHNlLFxuICAgICAgICAgICAgY2FuSGF2ZUR1cElkOiB0cnVlLFxuICAgICAgICAgICAgc2VsZWN0T25lOiB0cnVlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jaGVja2xpc3RTZWxlY3RPbmVDb25maWcgPSB7XG4gICAgICAgICAgICBhbGxvd1NlbGVjdEZvbGRlcjogZmFsc2UsXG4gICAgICAgICAgICBzaG93Q2hlY2tCb3g6IGZhbHNlLFxuICAgICAgICAgICAgYWxsb3dNdWx0aXBsZUNoZWNrOiBmYWxzZSxcbiAgICAgICAgICAgIG9ubHlDaGVja0JveEZvckNoaWxkOiBmYWxzZSxcbiAgICAgICAgICAgIG1vZHVsZUlkOiBEYXRhVHlwZS5jaGVja2xpc3QsXG4gICAgICAgICAgICBvcGVuSWNvbjogJ2tleWJvYXJkX2Fycm93X3VwJyxcbiAgICAgICAgICAgIG9wZW5JY29uQ29sb3I6ICcjMTk1NEE5JyxcbiAgICAgICAgICAgIGNsb3NlSWNvbjogJ2tleWJvYXJkX2Fycm93X2Rvd24nLFxuICAgICAgICAgICAgY2xvc2VJY29uQ29sb3I6ICcnLFxuICAgICAgICAgICAgaXRlbUljb246ICdmb3JtYXRfbGlzdF9idWxsZXRlZCcsXG4gICAgICAgICAgICBzaW5nbGVTZWxlY3RlZE5vZGU6IGZhbHNlLFxuICAgICAgICAgICAgY2FuSGF2ZUR1cElkOiB0cnVlLFxuICAgICAgICAgICAgc2VsZWN0T25lOiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubG9hZGluZ1JlbGF0ZWREYXRhID0gdHJ1ZTtcbiAgICAgICAgZm9ya0pvaW4odGhpcy5yZWxhdGVkU2VydmljZS5nZXRBcmVhQ2hpbGRyZW5Ob2RlKG51bGwsICF0aGlzLnNwbGl0VmlldywgZmFsc2UsIHRoaXMuZGF0YS5lbmFibGVkSW50ZXJjb25uZWN0ZWQpLFxuICAgICAgICAgICAgdGhpcy5yZWxhdGVkU2VydmljZS5nZXRGb2xkZXJDaGlsZHJlbihudWxsLCAhdGhpcy5zcGxpdFZpZXcsIGZhbHNlKSxcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlZERldmlhdGlvbk1vZHVsZSA/IHRoaXMucmVsYXRlZFNlcnZpY2UuZ2V0RGV2aWF0aW9uVHJlZURhdGEoKSA6IG9mKG51bGwpLFxuICAgICAgICAgICAgdGhpcy5lbmFibGVkQ2hlY2tsaXN0TW9kdWxlID8gdGhpcy5yZWxhdGVkU2VydmljZS5nZXRDaGVja2xpc3REYXRhKCkgOiBvZihudWxsKVxuICAgICAgICApLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKFtwcm9jZXNzZXMsIGRvY3VtZW50cywgZGV2aWF0aW9ucywgY2hlY2tsaXN0c10pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzc2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyZWFzID0gcHJvY2Vzc2VzLm1hcCgoeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogeC5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB4Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IHgucGFyZW50SWQgPT09IGd1aWRIZWxwZXIuZW1wdHkgPyAnJyA6IHgucGFyZW50SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzSWQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzTmFtZTogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUlkOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVQcm9jZXNzRGF0YSA9IGFyZWFzO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJlYXMgPSBkb2N1bWVudHMubWFwKCh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB4LmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogeC5uYW1lLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6ICF4LnBhcmVudEhhbmRib29rSWQgPyAnJyA6IHgucGFyZW50SGFuZGJvb2tJZC50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c0lkOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c05hbWU6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlJZDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiB0aGlzLmlzRm9sZGVyKHgudHlwZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxUeXBlOiB4LnR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVEb2N1bWVudERhdGEgPSBhcmVhcztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRldmlhdGlvbkRhdGFUcmVlID0gZGV2aWF0aW9ucyB8fCBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrbGlzdERhdGFUcmVlID0gY2hlY2tsaXN0cyB8fCBbXTtcblxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ1JlbGF0ZWREYXRhID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvcGVuUHJvY2Vzc0RvY3VtZW50KCkge1xuICAgICAgICBjb25zdCBkYXRhOiBTZWxlY3RQcm9jZXNzRG9jdW1lbnRQb3B1cERhdGEgPSBuZXcgU2VsZWN0UHJvY2Vzc0RvY3VtZW50UG9wdXBEYXRhKCk7XG4gICAgICAgIGRhdGEubW9kdWxlSWQgPSBNb2R1bGVUeXBlLmRvY3VtZW50UHJvY2VzcztcbiAgICAgICAgZGF0YS5tb2R1bGVOYW1lID0gdGhpcy5MQU5HLkJQTU4uRE9DVU1FTlRfUFJPQ0VTUztcbiAgICAgICAgZGF0YS50cmVlRGF0YTEgPSB0aGlzLnRyZWVQcm9jZXNzRGF0YTtcbiAgICAgICAgZGF0YS50cmVlRGF0YTIgPSB0aGlzLnRyZWVEb2N1bWVudERhdGE7XG4gICAgICAgIGRhdGEudHJlZUNvbmZpZzEgPSB0aGlzLnByb2Nlc3NUcmVlQ29uZmlnO1xuICAgICAgICBkYXRhLnRyZWVDb25maWcyID0gdGhpcy5kb2N1bWVudFRyZWVDb25maWc7XG4gICAgICAgIGRhdGEuc3BsaXRWaWV3ID0gdGhpcy5zcGxpdFZpZXc7XG4gICAgICAgIGRhdGEuaXNTZWxlY3RPbmUgPSB0cnVlO1xuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFNlbGVjdFByb2Nlc3NEb2N1bWVudFBvcHVwQ29tcG9uZW50LCB7XG4gICAgICAgICAgICB3aWR0aDogJzc2OHB4JyxcbiAgICAgICAgICAgIG1pbkhlaWdodDogJzY5MHB4JyxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgICAgICAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1tYXQtZGlhbG9nLWNvbnRhaW5lcidcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLm9uU2VhcmNoLnN1YnNjcmliZShhc3luYyAoa2V5d29yZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWtleXdvcmQgfHwga2V5d29yZC50cmltKCkgPT09ICcnKVxuICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgbGV0IGdldFNlYXJjaE9wdGlvbiA9IG5ldyBHZXRTZWFyY2hQcm9jZXNzRG9jdW1lbnRPcHRpb24odHJ1ZSwgdHJ1ZSwgdGhpcy5kYXRhLmVuYWJsZWRJbnRlcmNvbm5lY3RlZCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICBjb25zdCBzZWFyY2hSZXN1bHQgPSBhd2FpdCB0aGlzLnRyZWVTZXJ2aWNlLmdldFNlYXJjaFByb2Nlc3NEb2N1bWVudChrZXl3b3JkLnRyaW0oKSwgZ2V0U2VhcmNoT3B0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0UHJvY2Vzc0RvY3VtZW50R2xvYmFsU2VydmljZS5zZXRTZWFyY2hSZWxhdGVkKHNlYXJjaFJlc3VsdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5vbkV4cGFuZFByb2Nlc3NBcmVhLnN1YnNjcmliZSgoZm9sZGVyKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbGF0ZWRTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmdldEFyZWFDaGlsZHJlbk5vZGUoZm9sZGVyLmlkLCAhdGhpcy5zcGxpdFZpZXcsIGZhbHNlLCB0aGlzLmRhdGEuZW5hYmxlZEludGVyY29ubmVjdGVkKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyZWFzID0gcmVzLm1hcCgoeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB4LnR5cGUgPT09IFByb2Nlc3NOb2RlVHlwZS5BcmVhID8geC5pZC50b1N0cmluZygpIDogeC5wcm9jZXNzSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHgubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IHgucGFyZW50SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IHgudHlwZSA9PT0gUHJvY2Vzc05vZGVUeXBlLkFyZWEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c0lkOiB4LnN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzTmFtZTogeC5zdGF0dXNOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5SWQ6IHgudHlwZSA9PT0gUHJvY2Vzc05vZGVUeXBlLkFyZWEgPyAwIDogeC5pdGVtTnVtYmVySWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1UeXBlOiB4LnR5cGUgPT09IFByb2Nlc3NOb2RlVHlwZS5BcmVhID8gRGF0YVR5cGUuYXJlYSA6IHgudHlwZSA9PT0gUHJvY2Vzc05vZGVUeXBlLlByb2Nlc3MgPyBEYXRhVHlwZS5wcm9jZXNzIDogRGF0YVR5cGUucHJvY2Vzc0ludGVyY29ubmVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RQcm9jZXNzRG9jdW1lbnRHbG9iYWxTZXJ2aWNlLnNldFByb2Nlc3NBcmVhQ2hpbGRyZW4oYXJlYXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5vbkV4cGFuZEZvbGRlci5zdWJzY3JpYmUoKGZvbGRlcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWxhdGVkU2VydmljZVxuICAgICAgICAgICAgICAgIC5nZXRGb2xkZXJDaGlsZHJlbihmb2xkZXIuaWQsICF0aGlzLnNwbGl0VmlldywgZmFsc2UpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJlYXMgPSByZXMubWFwKCh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHguaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogeC5uYW1lLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiB0aGlzLmdldFBhcmVudElkKHgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNJZDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzTmFtZTogeC5zdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlJZDogeC5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kYWJsZTogdGhpcy5pc0ZvbGRlcih4LnR5cGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbFR5cGU6IHRoaXMuaXNGb2xkZXIoeC50eXBlKSA/IHgudHlwZSA6IGZvbGRlci5sZXZlbFR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFByb2Nlc3NEb2N1bWVudEdsb2JhbFNlcnZpY2Uuc2V0Rm9sZGVyQ2hpbGRyZW4oYXJlYXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5vblNlbGVjdEZvbGRlckl0ZW0uc3Vic2NyaWJlKChmb2xkZXIpID0+IHtcbiAgICAgICAgICAgIGlmIChmb2xkZXIuaXRlbVR5cGUgPT09IERhdGFUeXBlLmFyZWEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0ZWRTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIC5nZXRBcmVhQ29udGVudChmb2xkZXIuaWQsIGZhbHNlLCB0aGlzLmVuYWJsZWRJbnRlcmNvbm5lY3RlZClcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBJUmVsYXRlZFtdID0gcmVzLm1hcCgoZWxlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZWxlLnByb2Nlc3NJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1OdW1iZXJJZDogZWxlLnByb2Nlc3NOdW1iZXIudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiBlbGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1UeXBlOiBlbGUucHJvY2Vzc0NsYXNzaWZpY2F0aW9uID09PSBQcm9jZXNzQ2xhc3NpZmljYXRpb25UeXBlcy5Qcm9jZXNzZXMgPyBEYXRhVHlwZS5wcm9jZXNzIDogRGF0YVR5cGUucHJvY2Vzc0ludGVyY29ubmVjdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBlbGUuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzTmFtZTogdGhpcy5nZXREaXNsYXlOYW1lT2ZQcm9jZXNzU3RhdHVzKGVsZS5zdGF0dXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IGZvbGRlci5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5hbWU6IGZvbGRlci5pdGVtTmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0UHJvY2Vzc0RvY3VtZW50R2xvYmFsU2VydmljZS5zZXRTcGxpdHZpZXdWYWx1ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZGVyLml0ZW1UeXBlID09PSBEYXRhVHlwZS5mb2xkZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0ZWRTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIC5nZXRGb2xkZXJDb250ZW50KGZvbGRlci5pZClcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBJUmVsYXRlZFtdID0gcmVzLm1hcCgoZWxlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZWxlLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtTnVtYmVySWQ6IGVsZS5pZC50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbU5hbWU6IGVsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVR5cGU6IERhdGFUeXBlLmRvY3VtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzTmFtZTogZWxlLnN0YXR1c05hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogZm9sZGVyLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50TmFtZTogZm9sZGVyLml0ZW1OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxUeXBlOiBmb2xkZXIubGV2ZWxUeXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RQcm9jZXNzRG9jdW1lbnRHbG9iYWxTZXJ2aWNlLnNldFNwbGl0dmlld1ZhbHVlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqID0gcmVzdWx0WzBdO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNoYXBlTW9kZWwoKG9iai5pdGVtVHlwZSA9PT0gRGF0YVR5cGUucHJvY2VzcyB8fCBvYmouaXRlbVR5cGUgPT09IERhdGFUeXBlLnByb2Nlc3NJbnRlcmNvbm5lY3RlZCkgPyBvYmouaXRlbU51bWJlcklkIDogb2JqLmlkLCBvYmouaXRlbVR5cGUsIG9iai5pdGVtTmFtZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmwgPSB0aGlzLmdldExpbmtVUkwodGhpcy5zaGFwZU1vZGVsKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCA9IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRG9jdW1lbnRPclByb2Nlc3M7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLlNWR0ljb24gPSB0aGlzLmdldFNoYXBlTW9kZWxJY29uQnlEYXRhVHlwZSh0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uaXRlbVR5cGUsIG9iai5sZXZlbFR5cGUpO1xuICAgICAgICAgICAgICAgIGlmIChvYmouaXRlbVR5cGUgPT09IERhdGFUeXBlLmRvY3VtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QW5jaG9yRG9jdW1lbnQob2JqLmlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gc2F2ZSBjb25uZWN0aW9uXG4gICAgICAgICAgICAgICAgdGhpcy5tYXBTaGFwZURhdGEoKTtcbiAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1NoYXBlQ29ubmVjdGlvblZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hhcGVDb25uZWN0TGFiZWwgPSB0aGlzLkxBTkcuQlBNTi5DT05ORUNUSU9OX1RZUEUuQ09OTkVDVEVEX0RPQ1VNRU5UX1BST0NFU1M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIERvY3VtbmV0IFByb2Nlc3MgU3VwcG9ydCBGdW5jXG4gICAgaXNGb2xkZXIodHlwZTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50VHlwZXMgPSBbXG4gICAgICAgICAgICBEb2N1bWVudE5vZGVUeXBlLkRvY3VtZW50LFxuICAgICAgICAgICAgRG9jdW1lbnROb2RlVHlwZS5GaWxlRG9jdW1lbnQsXG4gICAgICAgICAgICBEb2N1bWVudE5vZGVUeXBlLkxpbmtEb2N1bWVudCxcbiAgICAgICAgICAgIERvY3VtZW50Tm9kZVR5cGUuU2hvcnRjdXREb2N1bWVudFxuICAgICAgICBdO1xuICAgICAgICByZXR1cm4gIWRvY3VtZW50VHlwZXMuaW5jbHVkZXModHlwZSk7XG4gICAgfVxuXG4gICAgZ2V0UGFyZW50SWQoaXRlbSkge1xuICAgICAgICBpZiAodGhpcy5pc0ZvbGRlcihpdGVtLnR5cGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gIWl0ZW0ucGFyZW50SGFuZGJvb2tJZCA/ICcnIDogaXRlbS5wYXJlbnRIYW5kYm9va0lkLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICFpdGVtLnBhcmVudEZvbGRlcklkID8gJycgOiBpdGVtLnBhcmVudEZvbGRlcklkLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgZ2V0RGlzbGF5TmFtZU9mUHJvY2Vzc1N0YXR1cyhzdGF0dXM6IG51bWJlcikge1xuICAgICAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgICAgICAgY2FzZSBQcm9jZXNzU3RhdHVzLmluUHJvZ3Jlc3M6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdDT01NT04uSU5fUFJPR1JFU1MnO1xuICAgICAgICAgICAgY2FzZSBQcm9jZXNzU3RhdHVzLnNlbmRUb0FwcHJvdmFsOlxuICAgICAgICAgICAgICAgIHJldHVybiAnQ09NTU9OLlNFTkRfVE9fQVBQUk9WQUwnO1xuICAgICAgICAgICAgY2FzZSBQcm9jZXNzU3RhdHVzLmFwcHJvdmVkOlxuICAgICAgICAgICAgICAgIHJldHVybiAnQ09NTU9OLkFQUFJPVkVEJztcbiAgICAgICAgICAgIGNhc2UgUHJvY2Vzc1N0YXR1cy51bmRlclJldmlzaW9uOlxuICAgICAgICAgICAgICAgIHJldHVybiAnQ09NTU9OLlVOREVSX1JFVklTSU9OJztcbiAgICAgICAgICAgIGNhc2UgUHJvY2Vzc1N0YXR1cy5kZWxldGVkOlxuICAgICAgICAgICAgICAgIHJldHVybiAnQ09NTU9OLkRFTEVURUQnO1xuICAgICAgICAgICAgY2FzZSBQcm9jZXNzU3RhdHVzLnJldmlld09ySGVhcmluZzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5IRUFSSU5HJztcbiAgICAgICAgICAgIGNhc2UgUHJvY2Vzc1N0YXR1cy5hcmNoaXZlZDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5BUkNISVZFRCc7XG4gICAgICAgICAgICBjYXNlIFByb2Nlc3NTdGF0dXMuaGVhcmluZzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1BST0NFU1MuSEVBUklORyc7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAnQ09NTU9OLlVOS05PV04nO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0TGlua1VSTChzaGFwZU1vZGVsOiBTaGFwZU1vZGVsKSB7XG4gICAgICAgIHN3aXRjaCAoc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5pdGVtVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5kb2N1bWVudDpcbiAgICAgICAgICAgICAgICBzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmwgPSBgJHtDS0VkaXRvckxpbmtDb25zdC5ET0NVTUVOVF9QQVJUSUFMX1VSTH0ke3NoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkfWA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLnByb2Nlc3M6XG4gICAgICAgICAgICAgICAgc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gYCR7Q0tFZGl0b3JMaW5rQ29uc3QuUFJPQ0VTU19QQVJUSUFMX1VSTH0ke3NoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkfWA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLmFyZWE6XG4gICAgICAgICAgICAgICAgc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gYCR7Q0tFZGl0b3JMaW5rQ29uc3QuQVJFQV9QQVJUSUFMX1VSTH0ke3NoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkfWA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLmZvbGRlcjpcbiAgICAgICAgICAgICAgICBzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmwgPSBgJHtDS0VkaXRvckxpbmtDb25zdC5GT0xERVJfUEFSVElBTF9VUkx9JHtzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmRpc3BsYXlJZH1gO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5wcm9jZXNzSW50ZXJjb25uZWN0ZWQ6XG4gICAgICAgICAgICAgICAgc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gYCR7Q0tFZGl0b3JMaW5rQ29uc3QuUFJPQ0VTU19JTlRFUkNPTk5FQ1RFRF9QQVJUSUFMX1VSTH0ke3NoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkfWA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLmRldmlhdGlvbjpcbiAgICAgICAgICAgICAgICBzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmwgPSBgJHtDS0VkaXRvckxpbmtDb25zdC5ERVZJQVRJT05fUEFSVElBTF9VUkx9JHtzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLnBhcmVudElkfS8ke3NoYXBlTW9kZWwucmVsYXRlZEl0ZW0uaWR9YDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuY2hlY2tsaXN0OlxuICAgICAgICAgICAgICAgIHNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ubGlua1VybCA9IGAke0NLRWRpdG9yTGlua0NvbnN0LkNIRUNLTElTVF9QQVJUSUFMX1VSTH0ke3NoYXBlTW9kZWwucmVsYXRlZEl0ZW0ucGFyZW50SWR9LyR7c2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5pZH1gO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmw7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIERldmlhdGlvblxuICAgIG9wZW5EZXZpYXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGRhdGE6IFNlbGVjdE9uZVBvcHVwRGF0YSA9IG5ldyBTZWxlY3RPbmVQb3B1cERhdGEoKTtcbiAgICAgICAgZGF0YS5tb2R1bGVJZCA9IE1vZHVsZVR5cGUuZGV2aWF0aW9uO1xuICAgICAgICBkYXRhLm1vZHVsZU5hbWUgPSB0aGlzLkxBTkcuQlBNTi5ERVZJQVRJT047XG4gICAgICAgIGRhdGEudHJlZURhdGEgPSB0aGlzLmRldmlhdGlvbkRhdGFUcmVlO1xuICAgICAgICBkYXRhLnRyZWVDb25maWcgPSB0aGlzLmRldmlhdGlvblNlbGVjdE9uZUNvbmZpZztcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihTZWxlY3RPbmVEaWFsb2csIHtcbiAgICAgICAgICAgIHdpZHRoOiAnNDAwcHgnLFxuICAgICAgICAgICAgbWluSGVpZ2h0OiAnNTY3cHgnLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICAgICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLW1hdC1kaWFsb2ctY29udGFpbmVyJ1xuICAgICAgICB9KTtcblxuICAgICAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2Uub25TZWFyY2guc3Vic2NyaWJlKChrZXl3b3JkKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbGF0ZWRTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLnNlYXJjaFJlbGF0ZWRUb0RldmlhdGlvbihrZXl3b3JkKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlcy5jYXRlZ29yaWVzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnFtc1JlbGF0ZWRTZXJ2aWNlLnNldFNlYXJjaFJlbGF0ZWQocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQ6IElSZWxhdGVkW10pID0+IHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9iaiA9IHJlc3VsdFswXTtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRTaGFwZU1vZGVsKG9iai5pZCwgb2JqLml0ZW1UeXBlLCBvYmouaXRlbU5hbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5wYXJlbnRJZCA9IG9iai5wYXJlbnRJZDtcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ucGFyZW50TmFtZSA9IG9iai5wYXJlbnROYW1lXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmwgPSB0aGlzLmdldExpbmtVUkwodGhpcy5zaGFwZU1vZGVsKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCA9IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRGV2aWF0aW9uO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5TVkdJY29uID0gdGhpcy5nZXRTaGFwZU1vZGVsSWNvbkJ5RGF0YVR5cGUodGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLml0ZW1UeXBlKTtcblxuICAgICAgICAgICAgICAgIC8vIHNhdmUgY29ubmVjdGlvblxuICAgICAgICAgICAgICAgIHRoaXMubWFwU2hhcGVEYXRhKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNob3dTaGFwZUNvbm5lY3Rpb25WYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNoYXBlQ29ubmVjdExhYmVsID0gdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkNPTk5FQ1RFRF9ERVZJQVRJT047XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIEhhbmRsZSBDaGVja2xpc3RcbiAgICBvcGVuQ2hlY2tsaXN0KCkge1xuICAgICAgICBjb25zdCBkYXRhOiBTZWxlY3RPbmVQb3B1cERhdGEgPSBuZXcgU2VsZWN0T25lUG9wdXBEYXRhKCk7XG4gICAgICAgIGRhdGEubW9kdWxlSWQgPSBNb2R1bGVUeXBlLmNoZWNrbGlzdDtcbiAgICAgICAgZGF0YS5tb2R1bGVOYW1lID0gdGhpcy5MQU5HLkJQTU4uQ0hFQ0tMSVNUO1xuICAgICAgICBkYXRhLnRyZWVEYXRhID0gdGhpcy5jaGVja2xpc3REYXRhVHJlZTtcbiAgICAgICAgZGF0YS50cmVlQ29uZmlnID0gdGhpcy5jaGVja2xpc3RTZWxlY3RPbmVDb25maWc7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oU2VsZWN0T25lRGlhbG9nLCB7XG4gICAgICAgICAgICB3aWR0aDogJzQwMHB4JyxcbiAgICAgICAgICAgIG1pbkhlaWdodDogJzU2N3B4JyxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgICAgICAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1tYXQtZGlhbG9nLWNvbnRhaW5lcidcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLm9uU2VhcmNoLnN1YnNjcmliZSgoa2V5d29yZCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWxhdGVkU2VydmljZVxuICAgICAgICAgICAgICAgIC5zZWFyY2hSZWxhdGVkVG9DaGVja2xpc3Qoa2V5d29yZClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSByZXMuY2F0ZWdvcmllcztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xbXNSZWxhdGVkU2VydmljZS5zZXRTZWFyY2hSZWxhdGVkKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0OiBJUmVsYXRlZFtdKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2YXIgb2JqID0gcmVzdWx0WzBdO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNoYXBlTW9kZWwob2JqLmlkLCBvYmouaXRlbVR5cGUsIG9iai5pdGVtTmFtZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLnBhcmVudElkID0gb2JqLnBhcmVudElkO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5wYXJlbnROYW1lID0gb2JqLnBhcmVudE5hbWVcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ubGlua1VybCA9IHRoaXMuZ2V0TGlua1VSTCh0aGlzLnNoYXBlTW9kZWwpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkID0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5DaGVja2xpc3Q7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLlNWR0ljb24gPSB0aGlzLmdldFNoYXBlTW9kZWxJY29uQnlEYXRhVHlwZSh0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uaXRlbVR5cGUpO1xuXG4gICAgICAgICAgICAgICAgLy8gc2F2ZSBjb25uZWN0aW9uXG4gICAgICAgICAgICAgICAgdGhpcy5tYXBTaGFwZURhdGEoKTtcbiAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1NoYXBlQ29ubmVjdGlvblZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hhcGVDb25uZWN0TGFiZWwgPSB0aGlzLkxBTkcuQlBNTi5DT05ORUNUSU9OX1RZUEUuQ09OTkVDVEVEX0RFVklBVElPTjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIEhhbmRsZSBBdHRhY2htZW50IFxuICAgIG9wZW5BdHRhY2htZW50RGlhbG9nKCkge1xuICAgICAgICBjb25zdCBkYXRhID0gbmV3IFFNU0NLRWRpdG9yUGFyYW10ZXIoKTtcbiAgICAgICAgZGF0YS5tb2R1bGUgPSB0aGlzLm1vZHVsZTtcbiAgICAgICAgZGF0YS5lbnRpdHlJZCA9IHRoaXMuZW50aXR5SWQ7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1RlbXBsYXRlID0gdGhpcy5kaWFsb2cub3BlbihMaW5rQXR0YWNobWVudENvbXBvbmVudCwge1xuICAgICAgICAgICAgd2lkdGg6ICc2NTBweCcsXG4gICAgICAgICAgICBoZWlnaHQ6ICc2NTBweCcsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBkaWFsb2dUZW1wbGF0ZVxuICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNoYXBlTW9kZWwobnVsbCwgMCwgcmVzdWx0LnRpdGxlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmwgPSByZXN1bHQudXJsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCA9IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQXR0YWNobWVudDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLm1hdEljb24gPSAndGV4dF9zbmlwcGV0JztcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcFNoYXBlRGF0YSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaG93U2hhcGVDb25uZWN0aW9uVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hhcGVDb25uZWN0TGFiZWwgPSB0aGlzLkxBTkcuQlBNTi5DT05ORUNUSU9OX1RZUEUuQ09OTkVDVEVEX0FUVEFDSE1FTlQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0U2hhcGVBY3Rpdml0eShldmVudDogYW55KSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbFZpZXcgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXTtcbiAgICAgICAgaWYgKCEhc2VsZWN0ZWRDZWxsVmlldykge1xuICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHNlbGVjdGVkQ2VsbFZpZXcubW9kZWwuYXR0cmlidXRlcztcbiAgICAgICAgICAgIGlmICghIWF0dHJpYnV0ZXMubGlua1VybCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0RGF0YUZyb21TaGFwZUF0cnJpYnV0ZShhdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwudGFyZ2V0LnRhcmdldElkID0gYXR0cmlidXRlcy5saW5rVGFyZ2V0O1xuICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaG93U2hhcGVDb25uZWN0aW9uVmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gU2V0IHNoYXBlIGNvbm5lY3QgbGFiZWxcbiAgICAgICAgICAgICAgICBpZiAoISF0aGlzLnNoYXBlTW9kZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLnNoYXBlTW9kZWwuc2hhcGU/LmNvbm5lY3Rpb25UeXBlSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5Eb2N1bWVudE9yUHJvY2VzczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hhcGVDb25uZWN0TGFiZWwgPSB0aGlzLkxBTkcuQlBNTi5DT05ORUNUSU9OX1RZUEUuQ09OTkVDVEVEX0RPQ1VNRU5UX1BST0NFU1M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRGV2aWF0aW9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaGFwZUNvbm5lY3RMYWJlbCA9IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5DT05ORUNURURfREVWSUFUSU9OO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkNoZWNrbGlzdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hhcGVDb25uZWN0TGFiZWwgPSB0aGlzLkxBTkcuQlBNTi5DT05ORUNUSU9OX1RZUEUuQ09OTkVDVEVEX0NIRUNLTElTVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5BdHRhY2htZW50OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaGFwZUNvbm5lY3RMYWJlbCA9IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5DT05ORUNURURfQVRUQUNITUVOVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5MaW5rOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaGFwZUNvbm5lY3RMYWJlbCA9IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5DT05ORUNURURfTElOSztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1NoYXBlQ29ubmVjdGlvblZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXREYXRhRnJvbVNoYXBlQXRycmlidXRlKHNoYXBlQXR0cmlidXRlOiBhbnkpIHtcbiAgICAgICAgaWYgKCEhc2hhcGVBdHRyaWJ1dGUubGlua1VybCkge1xuICAgICAgICAgICAgdGhpcy5pbml0U2hhcGVNb2RlbCgnJywgJycsIHNoYXBlQXR0cmlidXRlLmxpbmtUaXRsZSk7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSBzaGFwZUF0dHJpYnV0ZS5saW5rVXJsO1xuICAgICAgICAgICAgY29uc3QgaGFzaEluZGV4ID0gdXJsLmluZGV4T2YoJyMnKTtcbiAgICAgICAgICAgIGxldCBkb2N1bWVudFR5cGUgPSBudWxsO1xuICAgICAgICAgICAgaWYgKCEhc2hhcGVBdHRyaWJ1dGUuY29ubmVjdGlvblR5cGVJZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkID0gc2hhcGVBdHRyaWJ1dGUuY29ubmVjdGlvblR5cGVJZDtcbiAgICAgICAgICAgICAgICBkb2N1bWVudFR5cGUgPSB0aGlzLmdldFJlbGF0ZWRJdGVtQnlTaGFwZUNvbm5lY3Rpb25UeXBlKHNoYXBlQXR0cmlidXRlLmNvbm5lY3Rpb25UeXBlSWQsIHVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudFR5cGUgPSB0aGlzLmdldERvY3VtZW50VHlwZSh1cmwpO1xuICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudFR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkF0dGFjaG1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsaW5rSWQgPSB0aGlzLmdldExpbmtJZCh1cmwsIGRvY3VtZW50VHlwZSk7XG4gICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkID0gbGlua0lkID8gK2xpbmtJZCA6IC0xO1xuICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLml0ZW1UeXBlID0gZG9jdW1lbnRUeXBlO1xuICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLnBhcmVudE5hbWUgPSBzaGFwZUF0dHJpYnV0ZS5wYXJlbnROYW1lO1xuICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnRhcmdldC50YXJnZXRJZCA9IHNoYXBlQXR0cmlidXRlLmxpbmtUYXJnZXQ7XG4gICAgICAgICAgICAvLyBoYW5kbGUgbG9nb1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkID09PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkF0dGFjaG1lbnQpXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLm1hdEljb24gPSAndGV4dF9zbmlwcGV0JztcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5TVkdJY29uID0gdGhpcy5nZXRTaGFwZU1vZGVsSWNvbkJ5RGF0YVR5cGUoZG9jdW1lbnRUeXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGhhbmRsZSBMaW5rXG4gICAgICAgICAgICBpZiAodGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPT09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuTGluaykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5saW5rLmxpbmsgPSB1cmw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoISFsaW5rSWQgJiYgZG9jdW1lbnRUeXBlID09IERhdGFUeXBlLmRvY3VtZW50ICYmIGhhc2hJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLmFuY2hvci5hbmNob3JWYWx1ZSA9IHVybC5zdWJzdHIoaGFzaEluZGV4ICsgMSwgdXJsLmxlbmd0aCAtIGhhc2hJbmRleCk7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBbmNob3JEb2N1bWVudChsaW5rSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0TGlua0lkKHVybDogc3RyaW5nLCB0eXBlOiBEYXRhVHlwZSkge1xuICAgICAgICBsZXQgcGFydGlhbFVybEluZGV4ID0gMDtcbiAgICAgICAgbGV0IHBhcnRpYWxVcmxMZW5ndGggPSAwO1xuICAgICAgICBsZXQgaWQgPSAnJztcbiAgICAgICAgbGV0IGZyb20gPSAwO1xuICAgICAgICBsZXQgdXJsTG93ZXJDYXNlID0gISF1cmwgPyB1cmwudG9Mb3dlckNhc2UoKSA6ICcnO1xuXG4gICAgICAgIGNvbnN0IHBhcnRpYWxVcmwgPSB0aGlzLmdldFBhcnRpYWxVcmwodHlwZSkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgaGFzaEluZGV4ID0gdXJsTG93ZXJDYXNlLmluZGV4T2YoJyMnKTtcblxuICAgICAgICBpZiAoISFwYXJ0aWFsVXJsKSB7XG4gICAgICAgICAgICBwYXJ0aWFsVXJsSW5kZXggPSB1cmxMb3dlckNhc2UuaW5kZXhPZihwYXJ0aWFsVXJsKTtcblxuICAgICAgICAgICAgcGFydGlhbFVybExlbmd0aCA9IHBhcnRpYWxVcmwubGVuZ3RoO1xuICAgICAgICAgICAgZnJvbSA9IHBhcnRpYWxVcmxJbmRleCArIHBhcnRpYWxVcmxMZW5ndGg7XG5cbiAgICAgICAgICAgIGlmICh0eXBlID09IERhdGFUeXBlLmRvY3VtZW50ICYmIGhhc2hJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgaWQgPSB1cmxMb3dlckNhc2Uuc3Vic3RyKGZyb20sIGhhc2hJbmRleCAtIGZyb20pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gdXJsTG93ZXJDYXNlLnN1YnN0cihmcm9tKS5pbmRleE9mKCcvJyk7XG4gICAgICAgICAgICAgICAgaWYgKGxlbmd0aCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWQgPSB1cmxMb3dlckNhc2Uuc3Vic3RyKGZyb20pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWQgPSB1cmxMb3dlckNhc2Uuc3Vic3RyKGZyb20sIGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGUgPT0gRGF0YVR5cGUuZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFyc2VJbnQoaWQsIDEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgICAgICBpZCA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpZDtcbiAgICB9XG5cbiAgICBnZXRQYXJ0aWFsVXJsKHR5cGU6IERhdGFUeXBlKSB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5kb2N1bWVudDpcbiAgICAgICAgICAgICAgICByZXR1cm4gQ0tFZGl0b3JMaW5rQ29uc3QuRE9DVU1FTlRfUEFSVElBTF9VUkw7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLnByb2Nlc3M6XG4gICAgICAgICAgICAgICAgcmV0dXJuIENLRWRpdG9yTGlua0NvbnN0LlBST0NFU1NfUEFSVElBTF9VUkw7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLnByb2Nlc3NJbnRlcmNvbm5lY3RlZDpcbiAgICAgICAgICAgICAgICByZXR1cm4gQ0tFZGl0b3JMaW5rQ29uc3QuUFJPQ0VTU19JTlRFUkNPTk5FQ1RFRF9QQVJUSUFMX1VSTDtcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuYXJlYTpcbiAgICAgICAgICAgICAgICByZXR1cm4gQ0tFZGl0b3JMaW5rQ29uc3QuQVJFQV9QQVJUSUFMX1VSTDtcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuZm9sZGVyOlxuICAgICAgICAgICAgICAgIHJldHVybiBDS0VkaXRvckxpbmtDb25zdC5GT0xERVJfUEFSVElBTF9VUkw7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFJlbGF0ZWRJdGVtQnlTaGFwZUNvbm5lY3Rpb25UeXBlKGNvbm5lY3Rpb25UeXBlSWQ6IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUsIHVybDogc3RyaW5nKSB7XG4gICAgICAgIHN3aXRjaCAoY29ubmVjdGlvblR5cGVJZCkge1xuICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERvY3VtZW50VHlwZSh1cmwpO1xuICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRldmlhdGlvbjpcbiAgICAgICAgICAgICAgICByZXR1cm4gRGF0YVR5cGUuZGV2aWF0aW9uO1xuICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkNoZWNrbGlzdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gRGF0YVR5cGUuY2hlY2tsaXN0O1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldERvY3VtZW50VHlwZSh1cmw6IHN0cmluZykge1xuICAgICAgICBpZiAodXJsLmluZGV4T2YoQ0tFZGl0b3JMaW5rQ29uc3QuRE9DVU1FTlRfUEFSVElBTF9VUkwpID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBEYXRhVHlwZS5kb2N1bWVudDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1cmwuaW5kZXhPZihDS0VkaXRvckxpbmtDb25zdC5QUk9DRVNTX1BBUlRJQUxfVVJMKSA+IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gRGF0YVR5cGUucHJvY2VzcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1cmwuaW5kZXhPZihDS0VkaXRvckxpbmtDb25zdC5QUk9DRVNTX0lOVEVSQ09OTkVDVEVEX1BBUlRJQUxfVVJMKSA+IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gRGF0YVR5cGUucHJvY2Vzc0ludGVyY29ubmVjdGVkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVybC5pbmRleE9mKENLRWRpdG9yTGlua0NvbnN0LkFSRUFfUEFSVElBTF9VUkwpID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBEYXRhVHlwZS5hcmVhO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVybC5pbmRleE9mKENLRWRpdG9yTGlua0NvbnN0LkZPTERFUl9QQVJUSUFMX1VSTCkgPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIERhdGFUeXBlLmZvbGRlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1cmwuaW5kZXhPZihDS0VkaXRvckxpbmtDb25zdC5ERVZJQVRJT05fUEFSVElBTF9VUkwpID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBEYXRhVHlwZS5kZXZpYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodXJsLmluZGV4T2YoQ0tFZGl0b3JMaW5rQ29uc3QuQ0hFQ0tMSVNUX1BBUlRJQUxfVVJMKSA+IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gRGF0YVR5cGUuY2hlY2tsaXN0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGdldEFuY2hvckRvY3VtZW50KGRvY3VtZW50SWQpIHtcbiAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLmlzQW5jaG9yTG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMubGlua1NlcnZpY2VcbiAgICAgICAgICAgIC5nZXRBbmNob3JEb2N1bWVudExpc3QoZG9jdW1lbnRJZClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkb2N1bWVudHMpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFuY2hvcnMgPSB0aGlzLmV4dHJhY3REb2N1bWVudEFuY2hvcnMoZG9jdW1lbnRzIHx8IFtdKTtcbiAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuaXNBbmNob3JMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBleHRyYWN0RG9jdW1lbnRBbmNob3JzKGFuY2hvckRvY3VtZW50OiBRTVNDS0VkaXRvckxpbmtBbmNob3JEb2N1bWVudFtdKSB7XG4gICAgICAgIGNvbnN0IGFuY2hvcnM6IFFNU0JQTU5TaGFwZUFuY2hvcltdID0gW3sgdmFsdWU6IDAsIHZpZXdWYWx1ZTogJycsIGFuY2hvclZhbHVlOiBMaW5rQW5jaG9yLkJsYW5rIH1dO1xuICAgICAgICBsZXQgaWQgPSAzO1xuICAgICAgICBpZiAoYW5jaG9yRG9jdW1lbnQpIHtcbiAgICAgICAgICAgIGFuY2hvckRvY3VtZW50LmZvckVhY2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gZS5yaWNoVGV4dDtcbiAgICAgICAgICAgICAgICBjb25zdCBkb21Db250ZW50ID0gZGl2O1xuICAgICAgICAgICAgICAgIGNvbnN0IGFUYWdzID0gZG9tQ29udGVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYScpO1xuICAgICAgICAgICAgICAgIGlmIChhVGFncykge1xuICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cHJlZmVyLWZvci1vZlxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFUYWdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWcgPSBhVGFnc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gYW5jaG9ycy5maW5kSW5kZXgoKHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHguYW5jaG9yVmFsdWUgPT09IHRhZy5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9ycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdWYWx1ZTogdGFnLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JWYWx1ZTogdGFnLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYW5jaG9ycy5wdXNoKHtcbiAgICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgICAgdmlld1ZhbHVlOiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuQU5DSE9SX0FUVEFDSE1FTlQsXG4gICAgICAgICAgICBhbmNob3JWYWx1ZTogTGlua0FuY2hvci5BdHRhY2htZW50XG4gICAgICAgIH0pO1xuICAgICAgICBhbmNob3JzLnB1c2goe1xuICAgICAgICAgICAgdmFsdWU6IDIsXG4gICAgICAgICAgICB2aWV3VmFsdWU6IHRoaXMuTEFORy5RTVNDS0VESVRPUi5BTkNIT1JfUkVMQVRFRF9ET0NVTUVOVCxcbiAgICAgICAgICAgIGFuY2hvclZhbHVlOiBMaW5rQW5jaG9yLlJlbGF0ZWRcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBhbmNob3JzO1xuICAgIH1cblxuICAgIGdldFNoYXBlTW9kZWxJY29uQnlEYXRhVHlwZShkYXRhVHlwZTogRGF0YVR5cGUsIGxldmVsVHlwZT86IG51bWJlcikge1xuICAgICAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLmZvbGRlcjpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2ZvbGRlcl9vdXRsaW5lZCc7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLmRvY3VtZW50OlxuICAgICAgICAgICAgICAgIHJldHVybiAnZG9jdW1lbnQnO1xuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5hcmVhOlxuICAgICAgICAgICAgICAgIHJldHVybiAncHJvY2Vzc19hcmVhX291dGxpbmVkJztcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUucHJvY2VzczpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3Byb2Nlc3MnO1xuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5wcm9jZXNzSW50ZXJjb25uZWN0ZWQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdwcm9jZXNzX2ludGVyY29ubmVjdGVkJztcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuZGV2aWF0aW9uOlxuICAgICAgICAgICAgICAgIHJldHVybiAnZGV2aWF0aW9uJztcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuY2hlY2tsaXN0OlxuICAgICAgICAgICAgICAgIHJldHVybiAnY2hlY2tsaXN0JztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdmb2xkZXJfb3V0bGluZWQnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVsb2FkQW5jaG9yRG9jdW1lbnQoKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbFZpZXcgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXTtcbiAgICAgICAgaWYgKCEhc2VsZWN0ZWRDZWxsVmlldykge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hhcGVNb2RlbCAmJiB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0gJiYgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLml0ZW1UeXBlID09PSBEYXRhVHlwZS5kb2N1bWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QW5jaG9yRG9jdW1lbnQodGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmRpc3BsYXlJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvcGVuTGluaygpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IG5ldyBTaGFwZUxpbmsoKTtcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihCUE1OTGlua0NvbXBvbmVudCwge1xuICAgICAgICAgICAgd2lkdGg6ICczNTBweCcsXG4gICAgICAgICAgICBoZWlnaHQ6ICcyNDVweCcsXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgICAgICAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1tYXQtZGlhbG9nLWNvbnRhaW5lcicsXG4gICAgICAgICAgICBkYXRhXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgobmV3TGluaykgPT4ge1xuICAgICAgICAgICAgaWYgKG5ld0xpbmspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRTaGFwZU1vZGVsKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkxpbms7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLmxpbmsubGluayA9IG5ld0xpbmsubGluaztcbiAgICAgICAgICAgICAgICB0aGlzLm1hcFNoYXBlRGF0YSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaG93U2hhcGVDb25uZWN0aW9uVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaGFwZUNvbm5lY3RMYWJlbCA9IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5DT05ORUNURURfTElOSztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZGVsZXRlQ29ubmVjdGlvbihzZWxlY3RlZENvbm5lY3Rpb25UeXBlOiBhbnkpIHtcbiAgICAgICAgbGV0IHRpdGxlID0gdGhpcy5MQU5HLkJQTU4uREVMRVRFX0FUVEFDSE1FTlQ7XG4gICAgICAgIGxldCBjb250ZW50ID0gdGhpcy5MQU5HLkJQTU4uQ09ORklSTV9ERUxFVEVfQVRUQUNITUVOVDtcbiAgICAgICAgc3dpdGNoIChzZWxlY3RlZENvbm5lY3Rpb25UeXBlKSB7XG4gICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRG9jdW1lbnRPclByb2Nlc3M6XG4gICAgICAgICAgICAgICAgdGl0bGUgPSB0aGlzLkxBTkcuQlBNTi5ERUxFVEVfRE9DVU1FTlRfT1JfUFJPQ0VTUztcbiAgICAgICAgICAgICAgICBjb250ZW50ID0gdGhpcy5MQU5HLlFNU0NLRURJVE9SX01FU1NBR0UuQ09ORklSTV9ERUxFVEVfRE9DVU1FTlRfT1JfUFJPQ0VTUztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5EZXZpYXRpb246XG4gICAgICAgICAgICAgICAgdGl0bGUgPSB0aGlzLkxBTkcuQlBNTi5DT05ORUNUSU9OX1RZUEUuREVMRVRFX1NIQVBFX0RFVklBVElPTjtcbiAgICAgICAgICAgICAgICBjb250ZW50ID0gdGhpcy5MQU5HLlFNU0NLRURJVE9SX01FU1NBR0UuQ09ORklSTV9ERUxFVEVfREVWSUFUSU9OO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkNoZWNrbGlzdDpcbiAgICAgICAgICAgICAgICB0aXRsZSA9IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5ERUxFVEVfU0hBUEVfQ0hFQ0tMSVNUO1xuICAgICAgICAgICAgICAgIGNvbnRlbnQgPSB0aGlzLkxBTkcuUU1TQ0tFRElUT1JfTUVTU0FHRS5DT05GSVJNX0RFTEVURV9DSEVDS0xJU1Q7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuTGluazpcbiAgICAgICAgICAgICAgICB0aXRsZSA9IHRoaXMuTEFORy5CUE1OLkRFTEVURV9MSU5LO1xuICAgICAgICAgICAgICAgIGNvbnRlbnQgPSB0aGlzLkxBTkcuUU1TQ0tFRElUT1JfTUVTU0FHRS5DT05GSVJNX0RFTEVURV9BVFRBQ0hNRU5UO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkF0dGFjaG1lbnQ6XG4gICAgICAgICAgICAgICAgdGl0bGUgPSB0aGlzLkxBTkcuQlBNTi5ERUxFVEVfQVRUQUNITUVOVDtcbiAgICAgICAgICAgICAgICBjb250ZW50ID0gdGhpcy5MQU5HLlFNU0NLRURJVE9SX01FU1NBR0UuQ09ORklSTV9ERUxFVEVfQVRUQUNITUVOVDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNob3dDb25maXJtRGlhbG9nKHRpdGxlLCBjb250ZW50LCBmYWxzZSwgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gdHJ1ZSB8fCAodHlwZW9mIHZhbHVlID09ICdvYmplY3QnICYmIHZhbHVlLmlzQ29uZmlybWVkID09IHRydWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbCA9IG5ldyBTaGFwZU1vZGVsKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaG93U2hhcGVDb25uZWN0aW9uVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEhd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddLm1vZGVsLnJlbW92ZVByb3AoJ2xpbmtVcmwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddLm1vZGVsLnJlbW92ZVByb3AoJ2xpbmtUYXJnZXQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddLm1vZGVsLnJlbW92ZVByb3AoJ2xpbmtUaXRsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10ubW9kZWwucmVtb3ZlUHJvcCgnY29ubmVjdGlvblR5cGVJZCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHNhdmVTaGFwZVRhcmdldCh0YXJnZXRJZDogYW55KSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbFZpZXcgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXTtcbiAgICAgICAgaWYgKCEhc2VsZWN0ZWRDZWxsVmlldykge1xuICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnRhcmdldC50YXJnZXRJZCA9IHRhcmdldElkO1xuICAgICAgICAgICAgc2VsZWN0ZWRDZWxsVmlldy5tb2RlbC5wcm9wKCdsaW5rVGFyZ2V0JywgdGFyZ2V0SWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2F2ZVNoYXBlQW5jaG9yKGFuY2hvclZhbHVlOiBhbnkpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxsVmlldyA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddO1xuICAgICAgICBpZiAoISFzZWxlY3RlZENlbGxWaWV3KSB7XG4gICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwuYW5jaG9yLmFuY2hvclZhbHVlID0gYW5jaG9yVmFsdWU7XG4gICAgICAgICAgICBpZiAodGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLml0ZW1UeXBlID09PSBEYXRhVHlwZS5kb2N1bWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gYCR7Q0tFZGl0b3JMaW5rQ29uc3QuRE9DVU1FTlRfUEFSVElBTF9VUkx9JHt0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkfSMke2FuY2hvclZhbHVlfWBcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENlbGxWaWV3Lm1vZGVsLnByb3AoJ2xpbmtVcmwnLCB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ubGlua1VybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtYXBTaGFwZURhdGEoKSB7XG4gICAgICAgIGlmICghIXdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddKSB7XG4gICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXS5tb2RlbC5wcm9wKCdsaW5rVXJsJywgdGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgIT09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuTGlua1xuICAgICAgICAgICAgICAgID8gdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmwgOiB0aGlzLnNoYXBlTW9kZWwubGluay5saW5rKTtcbiAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddLm1vZGVsLnByb3AoJ2xpbmtUYXJnZXQnLCBUYXJnZXRUeXBlTmFtZS5uZXcpO1xuICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10ubW9kZWwucHJvcCgnbGlua1RpdGxlJywgdGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgIT09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuTGlua1xuICAgICAgICAgICAgICAgID8gdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLml0ZW1OYW1lIDogJycpO1xuICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10ubW9kZWwucHJvcCgnY29ubmVjdGlvblR5cGVJZCcsIHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkKTtcbiAgICAgICAgICAgIC8vIGRldmlhdGlvbiBhbmQgY2hlY2tsaXN0IGhhdmUgcGFyZW50IG5hbWVcbiAgICAgICAgICAgIGlmICh0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCA9PT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5EZXZpYXRpb25cbiAgICAgICAgICAgICAgICB8fCB0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCA9PT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5DaGVja2xpc3QpXG4gICAgICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10ubW9kZWwucHJvcCgncGFyZW50TmFtZScsIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5wYXJlbnROYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|