@eqproject/eqp-dynamic-module 2.10.67 → 2.10.68
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/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +3 -1
- package/esm2020/lib/components/private/form-records/add-form-record/add-form-record.component.mjs +3 -1
- package/esm2020/lib/utils/google-fonts-injector.mjs +78 -0
- package/fesm2015/eqproject-eqp-dynamic-module.mjs +81 -0
- package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/fesm2020/eqproject-eqp-dynamic-module.mjs +80 -0
- package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/lib/utils/google-fonts-injector.d.ts +7 -0
- package/package.json +1 -1
|
@@ -16,6 +16,7 @@ import { ActionFlagEnum } from '../../../models/trigger.model';
|
|
|
16
16
|
import { AttachmentType } from "@eqproject/eqp-attachments";
|
|
17
17
|
import { DynAttachment } from "../../../models/dynAttachment";
|
|
18
18
|
import { moveItemInArray } from '@angular/cdk/drag-drop';
|
|
19
|
+
import { injectGoogleFontsFromForm } from '../../../utils/google-fonts-injector';
|
|
19
20
|
import * as i0 from "@angular/core";
|
|
20
21
|
import * as i1 from "@angular/forms";
|
|
21
22
|
import * as i2 from "@angular/material/dialog";
|
|
@@ -1044,6 +1045,7 @@ export class EqpDynamicModuleConfiguratorComponent {
|
|
|
1044
1045
|
}
|
|
1045
1046
|
this.configureColumns();
|
|
1046
1047
|
this.createFormForm();
|
|
1048
|
+
injectGoogleFontsFromForm(this.form);
|
|
1047
1049
|
}
|
|
1048
1050
|
/**
|
|
1049
1051
|
* Configura le colonne per le tabelle necessarie alla creazione della form:
|
|
@@ -2176,4 +2178,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
2176
2178
|
type: ViewChild,
|
|
2177
2179
|
args: ["dialogVeReorder", { static: true }]
|
|
2178
2180
|
}] } });
|
|
2179
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydGVkL2VxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3IvZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydGVkL2VxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3IvZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpREFBaUQ7QUFDakQsT0FBTyxFQUdMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFHTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLGtCQUFrQixFQUVsQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQ0wsaUJBQWlCLEVBR2pCLFVBQVUsR0FDWCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xJLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN4RCxPQUFPLEVBR0wsYUFBYSxHQUNkLE1BQU0sNkNBQTZDLENBQUM7QUFDckQsT0FBTyxFQUNMLGNBQWMsRUFDZCxJQUFJLEVBRUosa0JBQWtCLEVBQ2xCLFlBQVksR0FDYixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFB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QUM7UUFFdEMsZ0dBQWdHO1FBQ2hHLE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDcEMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7YUFDMUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdkcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTFELE1BQU0sY0FBYyxHQUF5QjtZQUMzQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDdEYsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUM1RyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRSxTQUFTLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3RHLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxFQUFFLFNBQVMsRUFBRSxhQUFhLENBQUMsU0FBUyxDQUFD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LG9CQUFvQjtzQkFEbkIsU0FBUzt1QkFBQyxzQkFBc0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBT25ELGtCQUFrQjtzQkFEakIsU0FBUzt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBTWxELGtCQUFrQjtzQkFEakIsU0FBUzt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBVXZDLGFBQWE7c0JBQXRCLE1BQU07Z0JBS0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUdHLEdBQUc7c0JBQVosTUFBTTtnQkFJd0MsY0FBYztzQkFBNUQsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBR0UsYUFBYTtzQkFBM0QsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQWNBLFlBQVk7c0JBQXhELFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJYSx1QkFBdUI7c0JBQTlFLFNBQVM7dUJBQUMseUJBQXlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUdOLGVBQWU7c0JBQTlELFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNFLGVBQWU7c0JBQTlELFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaW1wb3J0IHsgVGhyb3dTdG10IH0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xyXG5pbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1xyXG4gIFVudHlwZWRGb3JtQnVpbGRlcixcclxuICBVbnR5cGVkRm9ybUNvbnRyb2wsXHJcbiAgVW50eXBlZEZvcm1Hcm91cCxcclxuICBWYWxpZGF0b3JzLFxyXG59IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuaW1wb3J0IHtcclxuICBDZWxsQWxpZ25tZW50RW51bSxcclxuICBDb25maWdDb2x1bW4sXHJcbiAgRXFwVGFibGVDb21wb25lbnQsXHJcbiAgVHlwZUNvbHVtbixcclxufSBmcm9tIFwiQGVxcHJvamVjdC9lcXAtdGFibGVcIjtcclxuaW1wb3J0IHsgTnVtZXJpY0ZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvbnVtZXJpY0ZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IEJhc2VGaWVsZCwgRGF0YUdldHRlciwgRGF0YUdldHRlclR5cGVFbnVtLCBGaWVsZEludmlzaWJpbGl0eUVudW0sIEZpZWxkVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvYmFzZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvY29udGV4dC5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIEVuZFBvaW50Q29uZmlndXJhdGlvbixcclxuICBFbmRQb2ludERhdGFQYXJhbXMsXHJcbiAgUGFyYW1UeXBlRW51bSxcclxufSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2VuZFBvaW50Q29uZmlndXJhdGlvbi5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIEFjdGlvbk9uUmVjb3JkLFxyXG4gIEZvcm0sXHJcbiAgRm9ybUZpZWxkR3JvdXAsXHJcbiAgRm9ybVNjYWxhclR5cGVFbnVtLFxyXG4gIEZvcm1UeXBlRW51bSxcclxufSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2Zvcm0ubW9kZWxcIjtcclxuaW1wb3J0IHsgQXJyYXlWYWxpZGF0b3JzIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL2N1c3RvbS1mb3JtLXZhbGlkYXRvcnMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9lcXAtZHluYW1pYy1tb2R1bGUtZGlhbG9nLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVXRpbGl0eUhlbHBlclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlc1wiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZyB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvckNvbmZpZyB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvckNvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVTdHlsZSB9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XHJcbmltcG9ydCB7IEdsb2JhbFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvZ2xvYmFsLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRHluYW1pY0xvYWRlckRpcmVjdGl2ZURhdGEsIGV2ZW50T3V0IH0gZnJvbSBcIi4uLy4uLy4uL2RpcmVjdGl2ZXMvZHluYW1pYy1sb2FkZXIvZHluYW1pYy1sb2FkZXIuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7IFRyaWdnZXIsIEFjdGlvbkJ1dHRvbiwgQWN0aW9uRmxhZ0VudW0sIEZpcmVUcmlnZ2VyIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3RyaWdnZXIubW9kZWwnO1xyXG5pbXBvcnQgeyBDb250ZXN0dWFsaXphdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZ2V0dGVyLm1vZGVsXCI7XHJcbmltcG9ydCB7IEltYWdlU2VsZWN0b3JGaWVsZCB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRzL2ltYWdlU2VsZWN0b3JGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBGaWVsZEV4dHJhQ29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZEV4dHJhQ29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IEF0dGFjaG1lbnRUeXBlLCBJQXR0YWNobWVudERUTyB9IGZyb20gXCJAZXFwcm9qZWN0L2VxcC1hdHRhY2htZW50c1wiO1xyXG5pbXBvcnQgeyBEeW5BdHRhY2htZW50IH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5BdHRhY2htZW50XCI7XHJcbmltcG9ydCB7IENka0RyYWdEcm9wLCBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImVxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3JcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2VxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3IuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQuc2Nzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEVxcER5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuXHJcbiAgQElucHV0KCkgZGVidWdNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIGZpZWxkc0V4dHJhQ29uZmlnOiBBcnJheTxGaWVsZEV4dHJhQ29uZmlnPjtcclxuICBASW5wdXQoKSBjb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvckNvbmZpZyA9XHJcbiAgICBuZXcgRHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvckNvbmZpZygpO1xyXG4gIEBJbnB1dCgpIGZvcm1JRDogc3RyaW5nID0gbnVsbDtcclxuICBASW5wdXQoKSB2aWV3TW9kZTogc3RyaW5nID0gXCJhZGRPckVkaXRcIjsgLy8gRXhwb3J0XHJcbiAgQElucHV0KCkgUXVlcnlFZGl0b3JDb21wb25lbnQ6IER5bmFtaWNMb2FkZXJEaXJlY3RpdmVEYXRhOyAvLyBMJ2ludGVybyBjb21wb25lbnRlIHF1ZXJ5IEVkaXRvclxyXG4gIEBJbnB1dCgpIHRyaWdnZXJzOiBhbnk7XHJcbiAgQElucHV0KCkgYWN0aW9uQnV0dG9uczogYW55O1xyXG4gIEBJbnB1dCgpIGNvbnRlc3R1YWxpemF0aW9uOiBBcnJheTxDb250ZXN0dWFsaXphdGlvbj47XHJcbiAgQElucHV0KCkgZm9ybXVsYU9iamVjdDogYW55OyAvLyBFc2VtcGlvOiB7Y3Vycm9sZTogcm9sZSwgdXNlcjogdXNlciwgbWVkaWNhbDogbWVkaWNhbGV4YW1pbmF0aW9ufVxyXG4gIEBJbnB1dCgpIGNvbmZpZ3VyYXRvclRoZW1lOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIEBPdXRwdXQoKSBmaXJlVHJpZ2dlcjogRXZlbnRFbWl0dGVyPEZpcmVUcmlnZ2VyPiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlyZVRyaWdnZXI+KCk7XHJcblxyXG4gIGxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8qKlxyXG4gICAqIFRva2VuIGRhIHVzYXJlIG5lZ2xpIGVuZHBvaW50IGRhIGNoaWFtYXJlIHBlciByZWN1cGVyYXJlIG8gc2FsdmFyZSBpIHJlY29yZC5cclxuICAgKiBVc2F0byBzb2xvIHNlIHZpZW5lIHBvcG9sYXRhIGxhIHByb3ByaWV0w6AgXCJiYXNlU2VydmVyVXJsXCIuXHJcbiAgICovXHJcbiAgdXNlclRva2VuOiBzdHJpbmcgPSBudWxsO1xyXG4gIC8qKlxyXG4gICAqIENvbmZpZ3VyYXppb25lIGRlZ2xpIGVuZHBvaW50IGRhIGNoaWFtYXJlIHBlciByZWN1cGVyYXJlIG8gc2FsdmFyZSBpIGRhdGkuXHJcbiAgICogUHXDsiBlc3NlcmUgZGVmaW5pdGEgZGFsbCd1dGVudGUgb3BwdXJlIGxhc2NpYXRhIG51bGwsIHZpZW5lIHBvcG9sYXRhIGNvbiBkZWlcclxuICAgKiB2YWxvcmkgZGkgZGVmYXVsdCBzZSB2aWVuZSB2YWxvcml6emF0YSBsYSBwcm9wcmlldMOgIFwiYmFzZVNlcnZlclVybFwiIGFsdHJpbWVudGlcclxuICAgKiB2aWVuZSBsYXNjaWF0YSBudWxsIGUgbm9uIHZpZW5lIGVzZWd1aXRhIG5lc3N1bmEgY2hpYW1hdGEgYWwgc2VydmVyLlxyXG4gICAqL1xyXG4gIGVuZFBvaW50Q29uZmlndXJhdGlvbjogRW5kUG9pbnRDb25maWd1cmF0aW9uID0gbnVsbDtcclxuICAvKipcclxuICAgKiBVcmwgZGVsIHNlcnZlciBkYSBjaGlhbWFyZSBwZXIgcmVjdWVyYXJlLCBzYWx2YXJlIG8gZWxpbWluYXJlIGkgcmVjb3JkLlxyXG4gICAqIFVzYXRvIHBlciBjcmVhcmUgbGEgY29uZmlndXJhemlvbmUgZGkgZGVmYXVsdCBkZWdsaSBlbmRwb2ludCBkYSBjaGlhbWFyZS5cclxuICAgKi9cclxuICBiYXNlU2VydmVyVXJsOiBzdHJpbmcgPSBudWxsO1xyXG4gIGNvbnRleHQ6IENvbnRleHQgPSBuZXcgQ29udGV4dCgpO1xyXG5cclxuICAvKiBleHBvcnQgdmFyaWFibGVzICovXHJcbiAgZG93bmxvYWROYW1lOiBzdHJpbmc7XHJcbiAgZG93bmxvYWRKc29uSHJlZjogYW55O1xyXG4gIHN0cmluZ2lmaWVkRm9ybTogc3RyaW5nO1xyXG5cclxuICAvKiBpbXBvcnQgdmFyaWFibGVzICovXHJcbiAgaW1wb3J0ZWRNb2R1bGU6IHN0cmluZyA9IG51bGw7IC8vIGpzb24gb2JqZWN0XHJcbiAgZGlhbG9nSW1wb3J0UmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ0ltcG9ydFwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dJbXBvcnQ6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIGZvcm06IEZvcm0gPSBuZXcgRm9ybSgpO1xyXG4gIGJhY2t1cEZvcm06IEZvcm0gPSBudWxsO1xyXG4gIHNhdmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgb3JnYUlEOiBzdHJpbmcgPSBudWxsO1xyXG4gIFVzZXJJRDogbnVtYmVyID0gMzY7XHJcbiAgaW5uZXJGb3JtTWFuYWdtZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgaW5uZXJGb3JtUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcblxyXG4gIC8qIENPTkZJR1VSQVpJT05FIFBFUiBWSVNVQUxJWlpBWklPTkUgRk9STSBDUkVBVEEgKi9cclxuICB2aWV3Q29uZmlnOiBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZyA9IG5ldyBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZyhcclxuICAgIHRydWUsXHJcbiAgICBmYWxzZSxcclxuICAgIGZhbHNlLFxyXG4gICAgXCIwXCJcclxuICApO1xyXG5cclxuICBmb3JtRm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwID0gbnVsbDtcclxuICBmb3JtQ29tcGxldGVkID0gZmFsc2U7XHJcbiAgcHJldmlld0Zvcm06IEZvcm07XHJcbiAgZm9ybUZpZWxkR3JvdXBOYW1lOiBzdHJpbmc7XHJcblxyXG4gIGFjdGlvbkF1dG9jb21wbGV0ZU9wdGlvbnM6IEFycmF5PHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PjtcclxuXHJcbiAgLy8jcmVnaW9uIEVudW1lcmF0b3JpIHVzYXRpIG5lbGwnaHRtbFxyXG4gIEZvcm1UeXBlRW51bSA9IEZvcm1UeXBlRW51bTtcclxuICBGb3JtU2NhbGFyVHlwZUVudW0gPSBGb3JtU2NhbGFyVHlwZUVudW07XHJcbiAgQXR0YWNobWVudFR5cGUgPSBBdHRhY2htZW50VHlwZTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIEdlc3Rpb25lIHNmb25kbyBmb3JtXHJcbiAgZ2V0IHByZXZpZXdCZ1N0eWxlKCk6IFNhZmVTdHlsZSB8IG51bGwge1xyXG4gICAgaWYgKCF0aGlzLmZvcm0/LkJnSW1hZ2VCYXNlNjQpIHJldHVybiBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShbXHJcbiAgICAgIGBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwke3RoaXMuZm9ybS5CZ0ltYWdlQmFzZTY0fScpYCxcclxuICAgICAgJ2JhY2tncm91bmQtc2l6ZTogY292ZXInLFxyXG4gICAgICAnYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyJyxcclxuICAgICAgJ2JhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQnLFxyXG4gICAgXS5qb2luKCc7ICcpKTtcclxuICB9XHJcblxyXG4gIGdldCBwcmV2aWV3VGhlbWVTdHlsZSgpOiBTYWZlU3R5bGUgfCBudWxsIHtcclxuICAgIGlmICghdGhpcy5mb3JtPy5UaGVtZUNTUykgcmV0dXJuIG51bGw7XHJcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKHRoaXMuZm9ybS5UaGVtZUNTUy50cmltKCkucmVwbGFjZSgvOyQvLCAnJykpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGJnQXR0YWNobWVudExpc3QoKTogSUF0dGFjaG1lbnREVE9bXSB7XHJcbiAgICBpZiAoIXRoaXMuZm9ybT8uQmdJbWFnZUJhc2U2NCkgcmV0dXJuIFtdO1xyXG4gICAgY29uc3QgYXR0ID0gbmV3IER5bkF0dGFjaG1lbnQoKTtcclxuICAgIGF0dC5JRCA9IDA7XHJcbiAgICBhdHQuRmlsZURhdGFCYXNlNjQgPSB0aGlzLmZvcm0uQmdJbWFnZUJhc2U2NDtcclxuICAgIGF0dC5Jc0ltYWdlID0gdHJ1ZTtcclxuICAgIGF0dC5GaWxlQ29udGVudFR5cGUgPSAnaW1hZ2UvcG5nJztcclxuICAgIHJldHVybiBbYXR0XTtcclxuICB9XHJcblxyXG4gIG9uQmdJbWFnZUNoYW5nZShhdHRhY2htZW50czogSUF0dGFjaG1lbnREVE9bXSk6IHZvaWQge1xyXG4gICAgY29uc3QgdmFsdWUgPSBhdHRhY2htZW50cz8ubGVuZ3RoID4gMCA/IGF0dGFjaG1lbnRzWzBdLkZpbGVEYXRhQmFzZTY0IDogbnVsbDtcclxuICAgIHRoaXMuZm9ybS5CZ0ltYWdlQmFzZTY0ID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5wcmV2aWV3Rm9ybSkgdGhpcy5wcmV2aWV3Rm9ybS5CZ0ltYWdlQmFzZTY0ID0gdmFsdWU7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBvbkJnSW1hZ2VEZWxldGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZvcm0uQmdJbWFnZUJhc2U2NCA9IG51bGw7XHJcbiAgICBpZiAodGhpcy5wcmV2aWV3Rm9ybSkgdGhpcy5wcmV2aWV3Rm9ybS5CZ0ltYWdlQmFzZTY0ID0gbnVsbDtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEZJRUxEX1RZUEVfQ1NTX0NMQVNTOiBSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+ID0ge1xyXG4gICAgMTogJ1RleHRGaWVsZFN0eWxlQ1NTJyxcclxuICAgIDI6ICdUZXh0YXJlYUZpZWxkU3R5bGVDU1MnLFxyXG4gICAgMzogJ0Jvb2xlYW5GaWVsZFN0eWxlQ1NTJyxcclxuICAgIDQ6ICdEYXRlRmllbGRTdHlsZUNTUycsXHJcbiAgICA1OiAnTnVtZXJpY0ZpZWxkU3R5bGVDU1MnLFxyXG4gICAgNjogJ0F0dGFjaG1lbnRGaWVsZFN0eWxlQ1NTJyxcclxuICAgIDc6ICdJbWFnZUZpZWxkU3R5bGVDU1MnLFxyXG4gICAgODogJ0xpc3RWYWx1ZUZpZWxkU3R5bGVDU1MnLFxyXG4gICAgMTE6ICdJbWFnZVNlbGVjdG9yRmllbGRTdHlsZUNTUycsXHJcbiAgICAxMjogJ0xhYmVsRmllbGRTdHlsZUNTUycsXHJcbiAgICAxMzogJ0ltYWdlV2l0aE1hcmtlcnNGaWVsZFN0eWxlQ1NTJyxcclxuICAgIDE0OiAnQWN0aW9uQnV0dG9uRmllbGRTdHlsZUNTUycsXHJcbiAgfTtcclxuXHJcbiAgLy8gTWFwcGEgYWxpYXMgbW9kZWxsbyDihpIgSUQgQ2xhdWRlIHBpw7kgcmVjZW50ZTsgbCdvcmRpbmUgZGkgY2hlY2sgw6ggcmlsZXZhbnRlIChPcHVzIHByaW1hIGRpIFNvbm5ldClcclxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBNT0RFTF9NQVA6IEFycmF5PHsgcGF0dGVybjogUmVnRXhwOyBpZDogc3RyaW5nIH0+ID0gW1xyXG4gICAgeyBwYXR0ZXJuOiAvXFxiKD86KD86dXNhfHVzZXxjb258dXNpbmcpXFxzKyk/b3B1c1xcYi9naSwgaWQ6ICdjbGF1ZGUtb3B1cy00LTcnIH0sXHJcbiAgICB7IHBhdHRlcm46IC9cXGIoPzooPzp1c2F8dXNlfGNvbnx1c2luZylcXHMrKT9zb25uZXRcXGIvZ2ksIGlkOiAnY2xhdWRlLXNvbm5ldC00LTYnIH0sXHJcbiAgICB7IHBhdHRlcm46IC9cXGIoPzooPzp1c2F8dXNlfGNvbnx1c2luZylcXHMrKT9oYWlrdVxcYi9naSwgaWQ6ICdjbGF1ZGUtaGFpa3UtNC01LTIwMjUxMDAxJyB9LFxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgZXh0cmFjdE1vZGVsRnJvbVRleHQodGV4dDogc3RyaW5nKTogeyBjbGVhblRleHQ6IHN0cmluZzsgbW9kZWxJZDogc3RyaW5nIHwgbnVsbCB9IHtcclxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgRXFwRHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvckNvbXBvbmVudC5NT0RFTF9NQVApIHtcclxuICAgICAgZW50cnkucGF0dGVybi5sYXN0SW5kZXggPSAwO1xyXG4gICAgICBpZiAoZW50cnkucGF0dGVybi50ZXN0KHRleHQpKSB7XHJcbiAgICAgICAgZW50cnkucGF0dGVybi5sYXN0SW5kZXggPSAwO1xyXG4gICAgICAgIGNvbnN0IGNsZWFuVGV4dCA9IHRleHRcclxuICAgICAgICAgIC5yZXBsYWNlKGVudHJ5LnBhdHRlcm4sICcnKVxyXG4gICAgICAgICAgLnJlcGxhY2UoL1sgXFx0XSsvZywgJyAnKVxyXG4gICAgICAgICAgLnJlcGxhY2UoL1xccypbLiw7XVxccyokLywgJycpXHJcbiAgICAgICAgICAudHJpbSgpO1xyXG4gICAgICAgIGVudHJ5LnBhdHRlcm4ubGFzdEluZGV4ID0gMDtcclxuICAgICAgICByZXR1cm4geyBjbGVhblRleHQsIG1vZGVsSWQ6IGVudHJ5LmlkIH07XHJcbiAgICAgIH1cclxuICAgICAgZW50cnkucGF0dGVybi5sYXN0SW5kZXggPSAwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgY2xlYW5UZXh0OiB0ZXh0LCBtb2RlbElkOiBudWxsIH07XHJcbiAgfVxyXG5cclxuICBvbkZvcm1HcmFwaGljU3VnZ2VzdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJhd0hpbnQgPSB0aGlzLmZvcm1HcmFwaGljU3VnZ2VzdEhpbnQ/LnRyaW0oKTtcclxuICAgIGlmICghdGhpcy5mb3JtIHx8ICF0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbj8uRm9ybXM/LlNwZWVjaFRvR3JhcGhpY3NFbmRQb2ludCkgcmV0dXJuO1xyXG4gICAgY29uc3QgeyBjbGVhblRleHQ6IGhpbnQsIG1vZGVsSWQ6IGFpTW9kZWxJZCB9ID0gdGhpcy5leHRyYWN0TW9kZWxGcm9tVGV4dChyYXdIaW50KTtcclxuXHJcbiAgICB0aGlzLmZvcm1HcmFwaGljU3VnZ2VzdExvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIC8vIERlZHVwbGljYXRvIHBlciB0aXBvOiBpbnZpYSB1biBzb2xvIHJhcHByZXNlbnRhbnRlIHBlciBGaWVsZFR5cGUgcGVyIHJpZHVycmUgaSB0b2tlbiBpbiBpbnB1dFxyXG4gICAgY29uc3Qgc2VlblR5cGVzID0gbmV3IFNldDxudW1iZXI+KCk7XHJcbiAgICBjb25zdCB1bmlxdWVGaWVsZHMgPSAodGhpcy5mb3JtLkZpZWxkcyA/PyBbXSlcclxuICAgICAgLmZpbHRlcihmID0+IHsgaWYgKHNlZW5UeXBlcy5oYXMoZi5GaWVsZFR5cGUpKSByZXR1cm4gZmFsc2U7IHNlZW5UeXBlcy5hZGQoZi5GaWVsZFR5cGUpOyByZXR1cm4gdHJ1ZTsgfSlcclxuICAgICAgLm1hcChmID0+ICh7IExhYmVsOiBmLkxhYmVsLCBGaWVsZFR5cGU6IGYuRmllbGRUeXBlIH0pKTtcclxuXHJcbiAgICBjb25zdCBncmFwaGljc1BhcmFtczogRW5kUG9pbnREYXRhUGFyYW1zW10gPSBbXHJcbiAgICAgIHsgUGFyYW1OYW1lOiAnTmFtZScsIFBhcmFtVmFsdWU6IHRoaXMuZm9ybS5OYW1lLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bJ0luIEJvZHknXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogJ0Rlc2NyaXB0aW9uJywgUGFyYW1WYWx1ZTogdGhpcy5mb3JtLkRlc2NyaXB0aW9uID8/IG51bGwsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVsnSW4gQm9keSddIH0sXHJcbiAgICAgIHsgUGFyYW1OYW1lOiAnVGhlbWVDU1MnLCBQYXJhbVZhbHVlOiB0aGlzLmZvcm0uVGhlbWVDU1MgPz8gbnVsbCwgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtWydJbiBCb2R5J10gfSxcclxuICAgICAgeyBQYXJhbU5hbWU6ICdUaXRsZUNTUycsIFBhcmFtVmFsdWU6IHRoaXMuZm9ybS5UaXRsZUNTUyA/PyBudWxsLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bJ0luIEJvZHknXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogJ0ZpZWxkcycsIFBhcmFtVmFsdWU6IHVuaXF1ZUZpZWxkcywgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtWydJbiBCb2R5J10gfSxcclxuICAgICAgeyBQYXJhbU5hbWU6ICdIaW50JywgUGFyYW1WYWx1ZTogaGludCB8fCB0aGlzLmJ1aWxkUmFuZG9tR3JhcGhpY0hpbnQoKSwgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtWydJbiBCb2R5J10gfSxcclxuICAgICAgeyBQYXJhbU5hbWU6ICdNb2RlbElkJywgUGFyYW1WYWx1ZTogYWlNb2RlbElkLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bJ0luIEJvZHknXSB9LFxyXG4gICAgXTtcclxuXHJcbiAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuU3BlZWNoVG9HcmFwaGljc0VuZFBvaW50LFxyXG4gICAgICBncmFwaGljc1BhcmFtcyxcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgciA9IHJlcyBhcyB7IFRoZW1lQ1NTPzogc3RyaW5nOyBUaXRsZUNTUz86IHN0cmluZzsgQmdJbWFnZUJhc2U2ND86IHN0cmluZzsgRmllbGRTdHlsZXM/OiB7IFtjc3NDbGFzc05hbWU6IHN0cmluZ106IHsgW3Byb3A6IHN0cmluZ106IHN0cmluZyB9IH07IFdhcm5pbmdzPzogc3RyaW5nW10gfTtcclxuICAgICAgICB0aGlzLmZvcm1HcmFwaGljU3VnZ2VzdExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dGb3JtR3JhcGhpY1N1Z2dlc3RJbnB1dCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAoci5UaGVtZUNTUyAhPT0gdW5kZWZpbmVkKSB0aGlzLmZvcm0uVGhlbWVDU1MgPSByLlRoZW1lQ1NTID8/IG51bGw7XHJcbiAgICAgICAgaWYgKHIuVGl0bGVDU1MgIT09IHVuZGVmaW5lZCkgdGhpcy5mb3JtLlRpdGxlQ1NTID0gci5UaXRsZUNTUyA/PyBudWxsO1xyXG4gICAgICAgIGlmIChyLkJnSW1hZ2VCYXNlNjQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgdGhpcy5mb3JtLkJnSW1hZ2VCYXNlNjQgPSByLkJnSW1hZ2VCYXNlNjQgPz8gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyLkZpZWxkU3R5bGVzKSB7XHJcbiAgICAgICAgICAodGhpcy5mb3JtLkZpZWxkcyA/PyBbXSkuZm9yRWFjaChmID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY3NzQ2xhc3NOYW1lID0gKEVxcER5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb21wb25lbnQuRklFTERfVFlQRV9DU1NfQ0xBU1MgYXMgYW55KVtmLkZpZWxkVHlwZV07XHJcbiAgICAgICAgICAgIGlmICghY3NzQ2xhc3NOYW1lKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IGNzc09iaiA9IHIuRmllbGRTdHlsZXMhW2Nzc0NsYXNzTmFtZV07XHJcbiAgICAgICAgICAgIGlmIChjc3NPYmogJiYgdHlwZW9mIGNzc09iaiA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICAoZiBhcyBhbnkpW2Nzc0NsYXNzTmFtZV0gPSBjc3NPYmo7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybUNvbXBsZXRlZCkge1xyXG4gICAgICAgICAgdGhpcy5mb3JtQ29tcGxldGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnByZXZpZXdGb3JtID0gbnVsbDtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXRGb3JtU3RhdHVzKHRydWUpLCA1MCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuU3VjY2VzcygnR3JhZmljYSBhcHBsaWNhdGEgYWwgZm9ybSEnKTtcclxuICAgICAgICBpZiAoci5XYXJuaW5ncz8ubGVuZ3RoID4gMCkgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuV2FybmluZyhyLldhcm5pbmdzKTtcclxuICAgICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgdGhpcy5mb3JtR3JhcGhpY1N1Z2dlc3RMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgbXNnID0gKGVycm9yIGFzIGFueSk/LmVycm9yO1xyXG4gICAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLkVycm9yKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnICYmIG1zZy50cmltKCkgPyBtc2cgOiAnRXJyb3JlIG5lbGxhIGdlbmVyYXppb25lIGRlbGxhIGdyYWZpY2EnKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBQcm9wcmlldMOgIHBlciBjcmVhemlvbmUvbW9kaWZpY2EgY2FtcG9cclxuICBmaWVsZHNDb2x1bW5zOiBBcnJheTxDb25maWdDb2x1bW4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJmaWVsZHNUYWJsZVwiLCB7IHN0YXRpYzogZmFsc2UgfSkgZmllbGRzVGFibGU6IEVxcFRhYmxlQ29tcG9uZW50O1xyXG4gIHNlbGVjdGVkRmllbGQ6IEJhc2VGaWVsZDtcclxuICBpbmRleFNlbGVjdGVkRmllbGQ6IG51bWJlcjtcclxuICBhY3Rpb25PblJlY29yZEZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cDtcclxuICBkaWFsb2dGaWVsZFJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dGaWVsZFwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dGaWVsZDogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiZmllbGRTZWN0aW9uQ29sdW1uVGVtcGxhdGVcIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBmaWVsZFNlY3Rpb25Db2x1bW5UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIFByb3ByaWV0w6AgcGVyIGNyZWFyZS9tb2RpZmljYXJlIHVuYSBGb3JtIGRpIGRldHRhZ2xpb1xyXG4gIHNlbGVjdGVkSW5uZXJGb3JtOiBGb3JtO1xyXG4gIGluZGV4U2VsZWN0ZWRJbm5lckZvcm06IG51bWJlcjtcclxuICBkaWFsb2dJbm5lckZvcm1SZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICBAVmlld0NoaWxkKFwiZGlhbG9nSW5uZXJGb3JtXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgZGlhbG9nSW5uZXJGb3JtOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIGlubmVyRm9ybUNvbmZpZzogRHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvckNvbmZpZztcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIFByb3ByaWV0w6AgcGVyIGNyZWFyZS9tb2RpZmljYXJlIHVuYSBhY3Rpb24gc3VpIHJlY29yZCBkaSB1bmEgRm9ybVxyXG4gIGFjdGlvbnNPblJlY29yZENvbHVtbnM6IEFycmF5PENvbmZpZ0NvbHVtbj47XHJcbiAgQFZpZXdDaGlsZChcImFjdGlvbnNPblJlY29yZFRhYmxlXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGFjdGlvbnNPblJlY29yZFRhYmxlOiBFcXBUYWJsZUNvbXBvbmVudDtcclxuICBzZWxlY3RlZEFjdGlvbjogQWN0aW9uT25SZWNvcmQ7XHJcbiAgaW5kZXhTZWxlY3RlZEFjdGlvbjogbnVtYmVyO1xyXG4gIGRpYWxvZ0FjdGlvbk9uUmVjb3JkUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ0FjdGlvbk9uUmVjb3JkXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgZGlhbG9nQWN0aW9uT25SZWNvcmQ6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBQcm9wcmlldMOgIHBlciBjcmVhcmUvbW9kaWZpY2FyZSBkZWkgYm90dG9uaSBhemlvbmVcclxuICBhY3Rpb25CdXR0b25zQ29sdW1uczogQXJyYXk8Q29uZmlnQ29sdW1uPjtcclxuICBAVmlld0NoaWxkKFwiYWN0aW9uQnV0dG9uc1RhYmxlXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGFjdGlvbkJ1dHRvbnNUYWJsZTogRXFwVGFibGVDb21wb25lbnQ7XHJcbiAgc2VsZWN0ZWRBY3Rpb25CdXR0b246IEFjdGlvbkJ1dHRvbjtcclxuICBpbmRleFNlbGVjdGVkQWN0aW9uQnV0dG9uOiBudW1iZXI7XHJcbiAgZGlhbG9nQWN0aW9uQnV0dG9uUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ0FjdGlvbkJ1dHRvblwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGRpYWxvZ0FjdGlvbkJ1dHRvbjogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgYWN0aW9uQnV0dG9uc0Zvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cDtcclxuICBhY3Rpb25zRmxhZyA9IEFjdGlvbkZsYWdFbnVtO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvKipcclxuICAgKiBFdmVudG8gZW1lc3NvIHF1YW5kbyBzaSBzYWx2YSB1bmEgZm9ybSBlIG5vbiDDqCBzdGF0byBzcGVjaWZpY2F0byB1biBlbmRwb2ludCBkYSBjaGlhbWFyZS5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgc2F2ZUZvcm1FdmVudDogRXZlbnRFbWl0dGVyPEZvcm0+ID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtPigpO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudG8gZW1lc3NvIERPUE8gYXZlciBlc2VndWl0byB1bmEgY2hpYW1hdGEgYWwgc2VydmVyIHBlciBpbCBzYWx2YXRhZ2dpb2RpIHVuYSBmb3JtIGFsbCdlbmRwb2ludCBzcGVjaWZpY2F0by5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgYWZ0ZXJTYXZlRm9ybUV2ZW50OiBFdmVudEVtaXR0ZXI8Rm9ybT4gPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm0+KCk7XHJcblxyXG4gIC8vIE91dCBjb21wb25lbnRlIGVzdGVybm9cclxuICBAT3V0cHV0KCkgb3V0OiBFdmVudEVtaXR0ZXI8ZXZlbnRPdXQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxldmVudE91dD4oKTtcclxuXHJcbiAgLy8gVHJpZ2dlcnNcclxuICBkaWFsb2dUcmlnZ2Vyc1JlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dUcmlnZ2Vyc1wiLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dUcmlnZ2VyczogVGVtcGxhdGVSZWY8YW55PjtcclxuICBzZWxlY3RlZFRyaWdnZXI6IFRyaWdnZXI7XHJcbiAgdHJpZ2dlcnNDb2x1bW5zOiBBcnJheTxDb25maWdDb2x1bW4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJ0cmlnZ2Vyc1RhYmxlXCIsIHsgc3RhdGljOiBmYWxzZSB9KSB0cmlnZ2Vyc1RhYmxlOiBFcXBUYWJsZUNvbXBvbmVudDtcclxuXHJcbiAgc2hvd0FsbEZpZWxkczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dHcmFmaWNhUGFuZWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gQ29udGVzdHVhbGl6YXRpb25cclxuICBzZWxlY3RlZENvbnRlc3R1YWxpemF0aW9uOiBzdHJpbmcgPSBudWxsO1xyXG4gIHNlbGVjdGVkQ29udGVzdHVhbGl6YXRpb25WYWx1ZTogbnVtYmVyID0gbnVsbDtcclxuXHJcbiAgc2hvd0RlbGV0ZUJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNlbGVjdGVkRmllbGRzOiBBcnJheTxCYXNlRmllbGQ+ID0gbmV3IEFycmF5PEJhc2VGaWVsZD4oKTtcclxuXHJcbiAgLy8gQUkgRWRpdCBkaWFsb2dcclxuICBkaWFsb2dBaUVkaXRSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICBAVmlld0NoaWxkKFwiZGlhbG9nQWlFZGl0XCIsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ0FpRWRpdDogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgLy8gQ29udGVzdHVhbGl6emF6aW9uZSBkaWFsb2dcclxuICBkaWFsb2dDb250ZXN0dWFsaXphdGlvblJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dDb250ZXN0dWFsaXphdGlvblwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dDb250ZXN0dWFsaXphdGlvbjogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgLy8gVmlzdWFsIEVkaXRvclxyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dWZVRvb2x0aXBcIiwgeyBzdGF0aWM6IHRydWUgfSkgZGlhbG9nVmVUb29sdGlwOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dWZVJlb3JkZXJcIiwgeyBzdGF0aWM6IHRydWUgfSkgZGlhbG9nVmVSZW9yZGVyOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIHZpc3VhbEVkaXRvckFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHZlU2VsZWN0ZWRGaWVsZDogQmFzZUZpZWxkIHwgbnVsbCA9IG51bGw7XHJcbiAgdmVTd2FwRmllbGQ6IEJhc2VGaWVsZCB8IG51bGwgPSBudWxsO1xyXG4gIGRpYWxvZ1ZlVG9vbHRpcFJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIGRpYWxvZ1ZlUmVvcmRlclJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIHZlU2hvd0dyYXBoaWNJbnB1dDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHZlR3JhcGhpY0hpbnQ6IHN0cmluZyA9ICcnO1xyXG4gIHZlUmVvcmRlckZpZWxkczogQmFzZUZpZWxkW10gPSBbXTtcclxuICBwcml2YXRlIHZlR3JhcGhpY1N1Z2dlc3RBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgYWlFZGl0UHJvbXB0OiBzdHJpbmcgPSBcIlwiO1xyXG4gIGFpRWRpdEF0dGFjaG1lbnRzOiBBcnJheTx7IGZpbGVOYW1lOiBzdHJpbmc7IGJhc2U2NENvbnRlbnQ6IHN0cmluZzsgbWVkaWFUeXBlOiBzdHJpbmcgfT4gPSBbXTtcclxuICBhaUVkaXRBdXRvc2F2ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGFpRWRpdExvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93QWlQcm9tcHRIaXN0b3J5OiBib29sZWFuID0gdHJ1ZTtcclxuICBhaUVkaXRGaWVsZENvbnRleHQ6IHsgY29kZTogc3RyaW5nIH0gfCBudWxsID0gbnVsbDtcclxuICBhaUZpZWxkU3VnZ2VzdExvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmb3JtR3JhcGhpY1N1Z2dlc3RMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZm9ybUdyYXBoaWNTdWdnZXN0SGludDogc3RyaW5nID0gJyc7XHJcbiAgc2hvd0Zvcm1HcmFwaGljU3VnZ2VzdElucHV0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGdldCBhaVByb21wdEhpc3RvcnkoKTogc3RyaW5nW10ge1xyXG4gICAgaWYgKCF0aGlzLmZvcm0/LkFJUHJvbXB0cykgcmV0dXJuIFtdO1xyXG4gICAgdHJ5IHsgcmV0dXJuIEpTT04ucGFyc2UodGhpcy5mb3JtLkFJUHJvbXB0cyk7IH0gY2F0Y2ggeyByZXR1cm4gW107IH1cclxuICB9XHJcblxyXG4gIC8vIENvc3RhbnRpIHBlciBsYSBzdGltYSBkZWwgY29zdG8gQUkgKEhhaWt1IDQuNSwgcHJlenppIFVTRC9NVG9rKVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgQUlfTU9ESUZJRVJfU0tJTExfVE9LRU5TID0gMl8wMDA7ICAvLyB0b2tlbiBmaXNzaTogRmxkSnNvbk1vZGlmaWVyU2tpbGwubWRcclxuICBwcml2YXRlIHJlYWRvbmx5IEFJX1RPS0VOU19QRVJfRklFTEQgPSAxMDA7ICAgIC8vIHN0aW1hIHRva2VuIHBlciBjYW1wbyBkZWwgZm9ybSBzZXJpYWxpenphdG9cclxuICBwcml2YXRlIHJlYWRvbmx5IEFJX09VVFBVVF9UT0tFTlMgPSAzXzUwMDsgIC8vIHN0aW1hIGNvbnNlcnZhdGl2YSBvdXRwdXQgSlNPTiBtb2RpZmljYXRvXHJcbiAgcHJpdmF0ZSByZWFkb25seSBBSV9QREZfQ0hBUlMgPSAxNV8wNjA7IC8vIGZpbmVzdHJhIG1heCBlc3RyYXR0YSBwZXIgYWxsZWdhdG8gUERGXHJcbiAgcHJpdmF0ZSByZWFkb25seSBBSV9DSEFSU19QRVJfVE9LRU4gPSA0OyAgICAgIC8vIGNoYXIvdG9rZW4gbWVkaSBwZXIgdGVzdG8gaXRhbGlhbm9cclxuICBwcml2YXRlIHJlYWRvbmx5IEFJX0VVUl9VU0RfUkFURSA9IDEuMTA7ICAgLy8gdGFzc28gRVVSL1VTRCBhcHByb3NzaW1hdG9cclxuXHJcbiAgZ2V0IGFpRWRpdENvc3RGaXJzdEV1cigpOiBudW1iZXIge1xyXG4gICAgY29uc3QgZm9ybVRva2VucyA9ICh0aGlzLmZvcm0/LkZpZWxkcz8ubGVuZ3RoID8/IDApICogdGhpcy5BSV9UT0tFTlNfUEVSX0ZJRUxEO1xyXG4gICAgY29uc3QgdmFySW5wdXQgPSAodGhpcy5haUVkaXRQcm9tcHQ/Lmxlbmd0aCA/PyAwKSAvIHRoaXMuQUlfQ0hBUlNfUEVSX1RPS0VOXHJcbiAgICAgICsgdGhpcy5haUVkaXRBdHRhY2htZW50cy5sZW5ndGggKiAodGhpcy5BSV9QREZfQ0hBUlMgLyB0aGlzLkFJX0NIQVJTX1BFUl9UT0tFTik7XHJcbiAgICBjb25zdCB1c2QgPSAodGhpcy5BSV9NT0RJRklFUl9TS0lMTF9UT0tFTlMgKiAwLjEwICsgKGZvcm1Ub2tlbnMgKyB2YXJJbnB1dCkgKiAwLjA4ICsgdGhpcy5BSV9PVVRQVVRfVE9LRU5TICogMC40MCkgLyAxXzAwMF8wMDA7XHJcbiAgICByZXR1cm4gdXNkIC8gdGhpcy5BSV9FVVJfVVNEX1JBVEU7XHJcbiAgfVxyXG5cclxuICBnZXQgYWlFZGl0Q29zdFN1YnNlcXVlbnRFdXIoKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGZvcm1Ub2tlbnMgPSAodGhpcy5mb3JtPy5GaWVsZHM/Lmxlbmd0aCA/PyAwKSAqIHRoaXMuQUlfVE9LRU5TX1BFUl9GSUVMRDtcclxuICAgIGNvbnN0IHZhcklucHV0ID0gKHRoaXMuYWlFZGl0UHJvbXB0Py5sZW5ndGggPz8gMCkgLyB0aGlzLkFJX0NIQVJTX1BFUl9UT0tFTlxyXG4gICAgICArIHRoaXMuYWlFZGl0QXR0YWNobWVudHMubGVuZ3RoICogKHRoaXMuQUlfUERGX0NIQVJTIC8gdGhpcy5BSV9DSEFSU19QRVJfVE9LRU4pO1xyXG4gICAgY29uc3QgdXNkID0gKHRoaXMuQUlfTU9ESUZJRVJfU0tJTExfVE9LRU5TICogMC4wMDggKyAoZm9ybVRva2VucyArIHZhcklucHV0KSAqIDAuMDggKyB0aGlzLkFJX09VVFBVVF9UT0tFTlMgKiAwLjQwKSAvIDFfMDAwXzAwMDtcclxuICAgIHJldHVybiB1c2QgLyB0aGlzLkFJX0VVUl9VU0RfUkFURTtcclxuICB9XHJcblxyXG4gIGZvcm1hdEFpRWRpdENvc3QoZXVyOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGV1ci50b0ZpeGVkKDYpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzTmV3Rm9ybSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5mb3JtPy5JRDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgdXRpbGl0eUhlbHBlclNlcnZpY2U6IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZlxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydjb25maWd1cmF0b3JUaGVtZSddKSB7XHJcbiAgICAgIHRoaXMuYXBwbHlUaGVtZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseVRoZW1lKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZWwgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcclxuICAgIGNvbnN0IHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XHJcblxyXG4gICAgLy8gUmltdW92ZSB2YXJzIHByZWNlZGVudGkgZGFsIGhvc3QgZSBkYSA6cm9vdFxyXG4gICAgQXJyYXkuZnJvbShlbC5zdHlsZSkuZmlsdGVyKHAgPT4gcC5zdGFydHNXaXRoKCctLWNvbmYtJykpLmZvckVhY2gocCA9PiBlbC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShwKSk7XHJcbiAgICBBcnJheS5mcm9tKHJvb3Quc3R5bGUpLmZpbHRlcihwID0+IHAuc3RhcnRzV2l0aCgnLS1jb25mLScpKS5mb3JFYWNoKHAgPT4gcm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShwKSk7XHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlndXJhdG9yVGhlbWUpIHtcclxuICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5jb25maWd1cmF0b3JUaGVtZSkuZm9yRWFjaCgoW2ssIHZdKSA9PiBlbC5zdHlsZS5zZXRQcm9wZXJ0eShrLCB2KSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUHJvcGFnYSBpIHZhbG9yaSBlZmZldHRpdmkgKFNDU1MgZGVmYXVsdCArIG92ZXJyaWRlIHRlbWEpIHN1IDpyb290IHBlcmNow6kgaSBkaWFsb2dzXHJcbiAgICAvLyBNYXRlcmlhbCByZW5kZXJpenphbm8gbmVsIGNkay1vdmVybGF5IGZ1b3JpIGRhbGwnaG9zdCBlIG5vbiBlcmVkaXRhbm8gbGUgdmFyIGRpIDpob3N0XHJcbiAgICBjb25zdCBjb21wdXRlZCA9IGdldENvbXB1dGVkU3R5bGUoZWwpO1xyXG4gICAgWyctLWNvbmYtZ3JhZGllbnQnLCAnLS1jb25mLWJnLXBhZ2UnLCAnLS1jb25mLXJhZGl1cycsICctLWNvbmYtbW9kYWwtcmFkaXVzJyxcclxuICAgICAgJy0tY29uZi1hY2NlbnQnLCAnLS1jb25mLWFjY2VudC1yZ2InLCAnLS1jb25mLXByaW1hcnknLCAnLS1jb25mLXByaW1hcnktcmdiJyxcclxuICAgICAgJy0tY29uZi1zdGVwLXNlbGVjdGVkJywgJy0tY29uZi1zdGVwLWVkaXQnLCAnLS1jb25mLXRhYmxlLWhlYWRlci1iZycsXHJcbiAgICAgICctLWNvbmYtc2VhcmNoLWJnJywgJy0tY29uZi10YWJsZS1iZycsICctLWNvbmYtY2FyZC1iZycsICctLWNvbmYtZm9udC1mYW1pbHknXHJcbiAgICBdLmZvckVhY2godmFyTmFtZSA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSh2YXJOYW1lKS50cmltKCk7XHJcbiAgICAgIGlmICh2YWx1ZSkgcm9vdC5zdHlsZS5zZXRQcm9wZXJ0eSh2YXJOYW1lLCB2YWx1ZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIC8vIEdhcmFudGlzY2UgY2hlIGxlIHZhcmlhYmlsaSBDU1MgZGkgZGVmYXVsdCAoZGVmaW5pdGUgaW4gOmhvc3QgU0NTUykgdmVuZ2Fub1xyXG4gICAgLy8gcHJvcGFnYXRlIHN1IDpyb290IGFuY2hlIHF1YW5kbyBjb25maWd1cmF0b3JUaGVtZSBub24gw6ggZm9ybml0b1xyXG4gICAgdGhpcy5hcHBseVRoZW1lKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XHJcbiAgICBBcnJheS5mcm9tKHJvb3Quc3R5bGUpLmZpbHRlcihwID0+IHAuc3RhcnRzV2l0aCgnLS1jb25mLScpKS5mb3JFYWNoKHAgPT4gcm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShwKSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdNb2RlID0gdGhpcy5kZWJ1Z01vZGU7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCduZ09uSW5pdCAtIGNvbmZpZ3VyYXRpb25zJywgdGhpcy5jb25maWd1cmF0aW9ucyk7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCduZ09uSW5pdCAtIGZvcm1JRCcsIHRoaXMuZm9ybUlEKTtcclxuXHJcbiAgICB0aGlzLmJhc2VTZXJ2ZXJVcmwgPVxyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnLmJhc2VTZXJ2ZXJVcmw7XHJcbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnLmNvbnRleHQ7XHJcbiAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiA9XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUdlbmVyYWxDb25maWcuZW5kUG9pbnRDb25maWd1cmF0aW9uO1xyXG4gICAgLy8gdGhpcy5mb3JtSUQgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnLmZvcm1JRDtcclxuICAgIHRoaXMudXNlclRva2VuID0gdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlR2VuZXJhbENvbmZpZy51c2VyVG9rZW47XHJcblxyXG4gICAgdGhpcy5mb3JtID1cclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuZm9ybTtcclxuICAgIHRoaXMub3JnYUlEID1cclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcub3JnYUlEO1xyXG4gICAgdGhpcy5Vc2VySUQgPVxyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5Vc2VySUQ7XHJcbiAgICB0aGlzLmlubmVyRm9ybU1hbmFnbWVudCA9XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmlubmVyRm9ybU1hbmFnbWVudDtcclxuICAgIHRoaXMuaW5uZXJGb3JtUmVmID1cclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuaW5uZXJGb3JtUmVmO1xyXG5cclxuICAgIHRoaXMuZm9ybS5PcmdhSUQgPSB0aGlzLm9yZ2FJRDtcclxuXHJcbiAgICB0aGlzLmNvbmZpZ3VyZURlZmF1bHRFbmRQb2ludHMoKTtcclxuICAgIHRoaXMuZ2V0Rm9ybUJ5SUQoKTtcclxuICAgIGlmICh0aGlzLmNvbnRleHQpIHtcclxuICAgICAgVXRpbGl0eUhlbHBlclNlcnZpY2UuU2V0Q29udGV4dCh0aGlzLmNvbnRleHQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjb25maWd1cmFyZSBnbGkgZW5kcG9pbnQgZGEgdXNhcmUgZGkgZGVmYXVsdCBhIHBhcnRpcmUgZGFsbCd1cmwgYmFzZSBkZWwgc2VydmVyXHJcbiAgICogYSBjdWkgc2kgZGV2ZSBjb25uZXR0ZXJlIGUgYWwgdG9rZW4gZGEgcGFzc2FyZSBwZXIgYXV0ZW50aWNhcnNpLlxyXG4gICAqIFNlIGxhIHByb3ByaWV0w6AgYmFzZVNlcnZlclVybCDDqCBudWxsIGUgbm9uIHNvbm8gc3RhdGkgY29uZmlndXJhdGkgaSB2YXJpIGVuZHBvaW50IGFsbG9yYVxyXG4gICAqIG5vbiB2aWVuZSBlc2VndWl0YSBuZXNzdW5hIGNoaWFtYXRhIGh0dHAgcGVyIHJlY3VwZXJhcmUvc2FsdmFyZSBpIGRhdGkuXHJcbiAgICovXHJcbiAgY29uZmlndXJlRGVmYXVsdEVuZFBvaW50cygpIHtcclxuICAgIGlmICghdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiYgdGhpcy5iYXNlU2VydmVyVXJsKSB7XHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uID1cclxuICAgICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLkNvbmZpZ3VyZURlZmF1bHRFbmRQb2ludHMoXHJcbiAgICAgICAgICB0aGlzLmJhc2VTZXJ2ZXJVcmwsXHJcbiAgICAgICAgICB0aGlzLnVzZXJUb2tlblxyXG4gICAgICAgICk7XHJcbiAgICAgIGlmICh0aGlzLmZvcm1JRCkge1xyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludC5QYXJhbXMgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm1JRCxcclxuICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgc3RyaW5nU2FuaXRpemVyKHZhbHVlKSB7XHJcbiAgICBpZiAoIVV0aWxpdHlIZWxwZXJTZXJ2aWNlLnN0cmluZ0NoZWNrUGFyZW50ZXNpcyh2YWx1ZSkpIHtcclxuICAgICAgYWxlcnQoXCJlcnJvcmUhIGVyYW5vIHByZXNlbnRpIGRlbGxlIHBhcmVudGVzaS5cIik7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuICB9XHJcbiAgc2V0TmFtZShOYW1lOiBzdHJpbmcpIHtcclxuICAgIGlmICghdGhpcy5zdHJpbmdTYW5pdGl6ZXIoTmFtZSkpIHtcclxuICAgICAgY29uc3QgUmVnRXhwUGFyZXRlc2lzID0gL1tcXChcXClcXFtcXF1cXHtcXH1dL2c7XHJcbiAgICAgIC8vIFJpbXVvdmkgdHV0dGUgbGUgcGFyZW50ZXNpIG5vbiBiaWxhbmNpYXRlXHJcbiAgICAgIHRoaXMuZm9ybS5OYW1lID0gTmFtZS5yZXBsYWNlKFJlZ0V4cFBhcmV0ZXNpcywgJycpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZm9ybS5JRCA9PSBudWxsKSB7IC8vIHRoaXMuZm9ybS5Db2RlID09IG51bGwgfHwgdGhpcy5mb3JtLkNvZGUgPT0gdW5kZWZpbmVkIHx8IHRoaXMuZm9ybS5Db2RlID09IFwiXCIgKXtcclxuICAgICAgdGhpcy5zZXRDb2RlKHRoaXMuZm9ybS5OYW1lKTtcclxuICAgIH1cclxuICB9XHJcbiAgc2V0Q29kZShDb2RlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc3RyaW5nU2FuaXRpemVyKENvZGUpO1xyXG5cclxuICAgIGNvbnN0IFJlZ0V4cFBsYWluID0gL1teXFx3XS9nO1xyXG4gICAgdGhpcy5mb3JtLkNvZGUgPSBDb2RlLnRvVXBwZXJDYXNlKCkucmVwbGFjZShSZWdFeHBQbGFpbiwgXCJcIik7XHJcbiAgfVxyXG4gIG9taXRfc3BlY2lhbF9jaGFyKGV2ZW50KSB7XHJcbiAgICB2YXIgaztcclxuICAgIGsgPSBldmVudC5rZXlDb2RlOyAvLyAgICAgICAgIGsgPSBldmVudC5rZXlDb2RlOyAgKEJvdGggY2FuIGJlIHVzZWQpXHJcbiAgICBpZiAoayA9PSAzNCkge1xyXG4gICAgICBldmVudC5rZXlDb2RlID0gMDtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyogSU1QT1JUIEZVTkNUSU9OICovXHJcbiAgb25JbXBvcnQoZXZlbnQpIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkRmlsZSA9IGV2ZW50LnRhcmdldC5maWxlc1swXTtcclxuICAgIGNvbnN0IGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgZmlsZVJlYWRlci5yZWFkQXNUZXh0KHNlbGVjdGVkRmlsZSwgXCJVVEYtOFwiKTtcclxuICAgIGZpbGVSZWFkZXIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdvbkltcG9ydCAtIGZpbGVSZWFkZXIucmVzdWx0LnRvU3RyaW5nKCknLCBmaWxlUmVhZGVyLnJlc3VsdC50b1N0cmluZygpKTtcclxuICAgICAgdGhpcy5pbXBvcnRlZE1vZHVsZSA9IGZpbGVSZWFkZXIucmVzdWx0LnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5pbXBvcnRlZE1vZHVsZSAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKGNvbmZpcm0oXCJzdGFpIHBlciBzb3ZyYXNjcml2ZXJlIGlsIG1vZHVsb1wiKSkge1xyXG4gICAgICAgICAgLy8gY2hpYW1vIGlsIHBhcnNlIGNvc8OsIGRhIG5vbiBjcmVhcmUgdW4gcmVmZXJlbmNlQmluZGluZ1xyXG4gICAgICAgICAgdmFyIGltcG9ydGVkRm9ybTogRm9ybSA9IEpTT04ucGFyc2UodGhpcy5pbXBvcnRlZE1vZHVsZSk7XHJcbiAgICAgICAgICBpbXBvcnRlZEZvcm0uSUQgPSBcIlwiO1xyXG4gICAgICAgICAgaW1wb3J0ZWRGb3JtLk5hbWUgPSBpbXBvcnRlZEZvcm0uTmFtZSArIFwiIChJbXBvcnRhdG8pXCI7XHJcblxyXG4gICAgICAgICAgaW1wb3J0ZWRGb3JtID0gdGhpcy5zZXRJbXBvcnRlZEZvcm0oaW1wb3J0ZWRGb3JtKTtcclxuICAgICAgICAgIHRoaXMuc2V0Rm9ybUFuZENvbmZpZ3VyZShpbXBvcnRlZEZvcm0pO1xyXG4gICAgICAgICAgdGhpcy5zZXROYW1lKGltcG9ydGVkRm9ybS5OYW1lKTtcclxuXHJcbiAgICAgICAgICB0aGlzLmNsb3NlSW1wb3J0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGFsZXJ0KFwic2VsZXppb25hIHVuIGZpbGVcIik7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICBmaWxlUmVhZGVyLm9uZXJyb3IgPSAoZXJyb3IpID0+IHtcclxuICAgICAgYWxlcnQoXCJzZWxlemlvbmEgdW4gZmlsZSB2YWxpZG8gbyBjb250cm9sbGEgY2hlIG5vbiBzaWEgY29ycm90dG9cIik7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHNldEltcG9ydGVkRm9ybShmb3JtOiBGb3JtKSB7XHJcblxyXG4gICAgLy8gTW9kaWZpY2EgZGVsIGNyZWF0aW9uIHVzZXIgc3UgSW1wb3J0XHJcbiAgICBmb3JtLkNyZWF0aW9uVXNlciA9IHRoaXMuVXNlcklEO1xyXG5cclxuICAgIC8vIE1vZGlmaWNhIGRlaSBGaWVsZCBzdSBJbXBvcnRcclxuICAgIGZvcm0uRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgIGlmIChmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVtcIkVsZW5jbyBpbW1hZ2luaVwiXSkge1xyXG4gICAgICAgIChmaWVsZCBhcyBJbWFnZVNlbGVjdG9yRmllbGQpLkF0dGFjaG1lbnRMaXN0LmZvckVhY2goKGF0dGFjaG1lbnQpID0+IHtcclxuICAgICAgICAgIGF0dGFjaG1lbnQuSUQgPSAwO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGZvcm07XHJcbiAgfVxyXG5cclxuICBpbXBvcnRNb2R1bGUoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ0ltcG9ydFJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dJbXBvcnQsIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgLy8gd2lkdGg6IFwiNzUlXCIsXHJcbiAgICAgIC8vIG1heEhlaWdodDogXCI4MCVcIixcclxuICAgICAgLy8gaGVpZ2h0OiBcIjgwJVwiLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZUltcG9ydCgpIHtcclxuICAgIHRoaXMuZGlhbG9nSW1wb3J0UmVmLmNsb3NlKCk7XHJcbiAgfVxyXG4gIC8qIEVORCBJTVBPUlQgRlVOQ1RJT04gKi9cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bnppb25lIGRpIGVzcG9ydGF6aW9uZSBtb2R1bG9cclxuICAgKi9cclxuXHJcbiAgZXhwb3J0KCkge1xyXG5cclxuICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPVxyXG4gICAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybUlELFxyXG4gICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkV4cG9ydEJ5SURFbmRQb2ludCxcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgKGJhc2U2NHJlczogc3RyaW5nKSA9PiB7XHJcblxyXG4gICAgICAgIGNvbnN0IG5ld0Jsb2IgPSBuZXcgQmxvYihbYmFzZTY0cmVzXSwgeyB0eXBlOiBcInRleHQvcGxhaW5cIiB9KTtcclxuICAgICAgICBjb25zdCBkYXRhID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobmV3QmxvYik7XHJcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgIGxpbmsuaHJlZiA9IGRhdGE7XHJcbiAgICAgICAgbGluay5kb3dubG9hZCA9IFwiZXhwb3J0X1wiICsgdGhpcy5mb3JtSUQgKyBcIl9mb3JtLnR4dFwiOyAvLyBzZXQgYSBuYW1lIGZvciB0aGUgZmlsZVxyXG4gICAgICAgIGxpbmsuY2xpY2soKTtcclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnIpID0+IHtcclxuICAgICAgICB0aGlzLnNldEZvcm1BbmRDb25maWd1cmUobmV3IEZvcm0oKSk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByZWN1cGVyYXJlIHR1dHRpIGkgcmVjb3JkIHNhbHZhdGkgcGVyIHVuYSBwYXJ0aWNvbGFyZSBGb3JtLlxyXG4gICAqIExhIGNoaWFtYXRhIHZpZW5lIGVmZmV0dHVhdGEgc29sbyBzZSDDqCBzdGF0byBjb25maWd1cmF0byBsJ2VuZFBvaW50IGRhIHVzYXJlLlxyXG4gICAqL1xyXG4gIGdldEZvcm1CeUlEKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmZvcm1JRCAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3JtcyAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlERW5kUG9pbnRcclxuICAgICkge1xyXG4gICAgICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID1cclxuICAgICAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybUlELFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50LFxyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZXRGb3JtQW5kQ29uZmlndXJlKHJlcyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNldEZvcm1BbmRDb25maWd1cmUobmV3IEZvcm0oKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRGb3JtQW5kQ29uZmlndXJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb25maWd1cm8gbCdleHBvcnQgZGVsIGZvcm1cclxuICAgKi9cclxuXHJcbiAgY29uZmlndXJlRXhwb3J0KHJlczogRm9ybSkge1xyXG5cclxuICAgIC8qIGdldHRpbmcgcmVhZHkgZm9yIGV4cG9ydCAqL1xyXG4gICAgbGV0IGNsb25lID0gbmV3IEZvcm0oKTtcclxuICAgIGNsb25lLkNvZGUgPSBcIklNUE9SVF9cIiArIHJlcy5Db2RlO1xyXG4gICAgY2xvbmUuTmFtZSA9IFwiaW1wb3J0X1wiICsgcmVzLk5hbWU7XHJcbiAgICBjbG9uZS5EZXNjcmlwdGlvbiA9IHJlcy5EZXNjcmlwdGlvbjtcclxuICAgIGNsb25lLkZvcm1TY2FsYXJUeXBlID0gcmVzLkZvcm1TY2FsYXJUeXBlO1xyXG4gICAgY2xvbmUuRm9ybUZpZWxkc0dyb3VwcyA9IHJlcy5Gb3JtRmllbGRzR3JvdXBzO1xyXG4gICAgY2xvbmUuQWN0aW9uc09uUmVjb3JkID0gcmVzLkFjdGlvbnNPblJlY29yZDtcclxuICAgIGNsb25lLkZpZWxkcyA9IHJlcy5GaWVsZHM7XHJcbiAgICBjbG9uZS5PYmplY3RGaWVsZHMgPSByZXMuT2JqZWN0RmllbGRzO1xyXG4gICAgY2xvbmUuSW5uZXJGb3JtcyA9IHJlcy5Jbm5lckZvcm1zO1xyXG4gICAgY2xvbmUuUm9vdEVudGl0eUlEID0gcmVzLlJvb3RFbnRpdHlJRDtcclxuICAgIGNsb25lLk9yZ2FJRCA9IHJlcy5PcmdhSUQ7XHJcblxyXG4gICAgdGhpcy5kb3dubG9hZE5hbWUgPSBcImV4cG9ydF9cIiArIHJlcy5OYW1lO1xyXG4gICAgdGhpcy5zdHJpbmdpZmllZEZvcm0gPSBKU09OLnN0cmluZ2lmeShjbG9uZSk7XHJcbiAgICB0aGlzLmRvd25sb2FkSnNvbkhyZWYgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKFxyXG4gICAgICBcImRhdGE6dGV4dC9qc29uO2NoYXJzZXQ9VVRGLTgsXCIgK1xyXG4gICAgICBlbmNvZGVVUklDb21wb25lbnQodGhpcy5zdHJpbmdpZmllZEZvcm0pXHJcbiAgICApO1xyXG5cclxuICAgIC8qIGVuZCBleHBvcnQgKi9cclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gaW52b2NhdG8gYWwgY2FtYmlvIGRlbCB0aXBvIGRpIHZpc3VhbGl6emF6aW9uZSBkZWxsYSBmb3JtLlxyXG4gICAqIFNlIGwndXRlbnRlIHNjZWdsaWUgdW5hIHZpc3VhbGl6emF6aW9uZSByYWdncnVwcGF0YSBpbCBtZXRvZG8gYWdnaXVuZ2UgYWwgRm9ybUdyb3VwIHVuIG51b3ZvXHJcbiAgICogY29udHJvbGxvIHBlciBsJ2FycmF5IGRlaSBub21pIGRlbGxlIHNlemlvbmkgZGEgY3JlYXJlLlxyXG4gICAqL1xyXG4gIG9uQ2hhbmdlRm9ybVNjYWxhclR5cGUoKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtLkZvcm1TY2FsYXJUeXBlICE9IEZvcm1TY2FsYXJUeXBlRW51bS5TZW1wbGljZSkge1xyXG4gICAgICBpZiAoIXRoaXMuZm9ybUZvcm1Hcm91cC5jb250YWlucyhcIkZvcm1GaWVsZHNHcm91cHNcIikpIHtcclxuICAgICAgICB0aGlzLmZvcm1Gb3JtR3JvdXAucmVtb3ZlQ29udHJvbChcIkZvcm1GaWVsZHNHcm91cHNcIik7XHJcbiAgICAgICAgdGhpcy5mb3JtRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIkZvcm1GaWVsZHNHcm91cHNcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wodGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMsIFtcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgQXJyYXlWYWxpZGF0b3JzLm1pbkxlbmdodCgxKSxcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMgPSBudWxsO1xyXG4gICAgICBpZiAodGhpcy5mb3JtRm9ybUdyb3VwLmNvbnRhaW5zKFwiRm9ybUZpZWxkc0dyb3Vwc1wiKSlcclxuICAgICAgICB0aGlzLmZvcm1Gb3JtR3JvdXAucmVtb3ZlQ29udHJvbChcIkZvcm1GaWVsZHNHcm91cHNcIik7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZvcm1Gb3JtR3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5jb25maWd1cmVDb2x1bW5zKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFdmVudG8gaW52b2NhdG8gYWwga2V5dXAgbmVsbCdpbnB1dCBwZXIgaW5zZXJpcmUgaSBub21pIGRlbGxlIHNlemlvbmkgcGVyIGxhIHZpc3VhbGl6emF6aW9uZVxyXG4gICAqIHJhZ2dydXBwYXRhIGRlbGxhIGZvcm0uIFF1YW50byBsJ3V0ZW50ZSBwcmVtZSBpbCB0YXN0byBpbnZpbyB2aWVuZSBhZ2dpdW50byBpbCBudW92byBub21lIGFsbGVcclxuICAgKiBzZXppb25pIGRpc3BvYmlsaSBzZSBub24gbmUgZXNpc3RlIHVuYSBjb24gbG8gc3Rlc3NvIG5vbWUuXHJcbiAgICogQHBhcmFtIGV2ZW50IEV2ZW50byBjaGUgcmFwcHJlc2VudGEgaWwga2V5dXAgc3VsbGEgdGFzdGllcmEuXHJcbiAgICovXHJcbiAgb25Gb3JtRmllbGRHcm91cE5hbWVLZXlVcChldmVudCkge1xyXG4gICAgaWYgKGV2ZW50LmNvZGUgPT09IFwiRW50ZXJcIiB8fCBldmVudC5jb2RlID09PSBcIk51bXBhZEVudGVyXCIpIHtcclxuICAgICAgaWYgKCF0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3Vwcykge1xyXG4gICAgICAgIHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzID0gbmV3IEFycmF5PEZvcm1GaWVsZEdyb3VwPigpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICAhdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMuZmluZChcclxuICAgICAgICAgIChuKSA9PiBuLk5hbWUgPT0gdGhpcy5mb3JtRmllbGRHcm91cE5hbWVcclxuICAgICAgICApXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzLnB1c2goeyBOYW1lOiB0aGlzLmZvcm1GaWVsZEdyb3VwTmFtZSB9KTtcclxuICAgICAgfVxyXG4gICAgICAvLyBJbXBvc3RvIGlsIG51b3ZvIHZhbG9yZSBkZWwgRm9ybUNvbnRyb2wgcGVyIGFnZ2lvcm5hcmUgbG8gc3RhdG8gZGVsbGEgZm9ybS5cclxuICAgICAgdGhpcy5mb3JtRm9ybUdyb3VwLmNvbnRyb2xzW1wiRm9ybUZpZWxkc0dyb3Vwc1wiXS5zZXRWYWx1ZShcclxuICAgICAgICB0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3Vwc1xyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmZvcm1GaWVsZEdyb3VwTmFtZSA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkR3JvdXBPcmRpbmFsUG9zaXRpb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmltdW92ZXJlIGxhIHNlemlvbmUgc2VsZXppb25hdGEgZGEgcXVlbGxlIGRpc3BvbmliaWxpIHBlciBsYSBmb3JtLlxyXG4gICAqIEBwYXJhbSBncm91cE5hbWUgTm9tZSBkZWxsYSBzZXppb25lIGRhIGVsaW1pbmFyZS5cclxuICAgKi9cclxuICBvbkRlbGV0ZUZvcm1GaWVsZEdyb3VwTmFtZShncm91cE5hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMuc3BsaWNlKFxyXG4gICAgICB0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3Vwcy5maW5kSW5kZXgoKGcpID0+IGcuTmFtZSA9PT0gZ3JvdXBOYW1lKSxcclxuICAgICAgMVxyXG4gICAgKTtcclxuICAgIC8vIEltcG9zdG8gaWwgbnVvdm8gdmFsb3JlIGRlbCBGb3JtQ29udHJvbCBwZXIgYWdnaW9ybmFyZSBsbyBzdGF0byBkZWxsYSBmb3JtLlxyXG4gICAgdGhpcy5mb3JtRm9ybUdyb3VwLmNvbnRyb2xzW1wiRm9ybUZpZWxkc0dyb3Vwc1wiXS5zZXRWYWx1ZShcclxuICAgICAgdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHNcclxuICAgICk7XHJcbiAgICAvLyBTZSBlc2lzdG9ubyBGaWVsZCBsZWdhdGkgYWxsYSBzZXppb25lIGNoZSBzaSB2dW9sZSBlbGltaW5hcmUgYWxsb3JhIHJvbXBvIGlsIGxlZ2FtZS5cclxuICAgIGlmICh0aGlzLmZvcm0uRmllbGRzLmZpbmQoKGYpID0+IGYuRmllbGRHcm91cCA9PSBncm91cE5hbWUpKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5GaWVsZHMuZmlsdGVyKChmKSA9PiBmLkZpZWxkR3JvdXAgPT0gZ3JvdXBOYW1lKS5mb3JFYWNoKFxyXG4gICAgICAgIChmKSA9PiAoZi5GaWVsZEdyb3VwID0gbnVsbClcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0Rm9ybUZpZWxkR3JvdXBPcmRpbmFsUG9zaXRpb24oKTtcclxuICB9XHJcblxyXG5cclxuICBvbkVkaXRGb3JtRmllbGRHcm91cE5hbWUoZm9ybUZpZWxkR3JvdXA6IEZvcm1GaWVsZEdyb3VwKSB7XHJcblxyXG4gICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuUHJvbXB0KFxyXG4gICAgICBcIk1vZGlmaWNhIGlsIG5vbWVcIixcclxuICAgICAgKG5hbWUpID0+IHtcclxuICAgICAgICBmb3JtRmllbGRHcm91cC5OYW1lID0gbmFtZTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgfVxyXG5cclxuICAvKiogQ2xvbmEgdW4gb2dnZXR0byBlc2NsdWRlbmRvIHJpZmVyaW1lbnRpIGNpcmNvbGFyaSBlIEZvcm1Gb3JtR3JvdXAgKi9cclxuICBwcml2YXRlIHNhZmVDbG9uZTxUPihvYmo6IFQpOiBUIHtcclxuICAgIGNvbnN0IHNlZW4gPSBuZXcgV2Vha1NldCgpO1xyXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqLCAoa2V5LCB2YWx1ZSkgPT4ge1xyXG4gICAgICBpZiAoa2V5ID09PSAnRm9ybUZvcm1Hcm91cCcpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHNlZW4uaGFzKHZhbHVlKSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICBzZWVuLmFkZCh2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoaWFtYXRvIHF1YW5kbyBzaSB2dW9sZSBhZ2dpdW5nZXJlIHVuIG51b3ZvIGNhbXBvIG8gc2kgdnVvbGUgbW9kaWZpY2FyZSB1bm8gZXNpc3RlbnRlLlxyXG4gICAqIE1lbW9yaXp6YSBsJ2V2ZW50dWFsZSBGaWVsZCBzY2VsdG8gb25lIGNyZWEgdW5vIG51b3ZvIHByaW1hIGRpIGFwcmlyZSBpbCBkaWFsb2cgcGVyIG1vZGlmaWNhcmxvL2FnZ2l1bmdlcmxvLlxyXG4gICAqIEBwYXJhbSBmaWVsZCBPZ2dldHRvIEJhc2VGaWVsZCBkYSBtb2RpZmljYXJlLiBTZSBudWxsIG5lIHZpZW5lIGNyZWF0YSB1bmEgbnVvdmEgaXN0YW56YSBwZXIgbCdhZ2dpdW50YS5cclxuICAgKi9cclxuICBvcGVuRmllbGREaWFsb2coZmllbGQ6IEJhc2VGaWVsZCA9IG51bGwpIHtcclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwib3BlbkZpZWxkRGlhbG9nXCIsIGZpZWxkKTtcclxuXHJcbiAgICBpZiAoZmllbGQpIHtcclxuICAgICAgdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgPSB0aGlzLmZvcm0uRmllbGRzLmluZGV4T2YoZmllbGQpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmllbGQgPSB0aGlzLnNhZmVDbG9uZShmaWVsZCk7XHJcblxyXG4gICAgICAvLyBEYXRvIGNoZSBjb24gaWwgSlNPTi5wYXJzZSBzaSBwZXJkZSBwZXIgc3RyYWRhIGxhIGZvcm11bGEsIGxhIHJpbWV0dG8gZG9wby5cclxuICAgICAgLy8gVGFudG8gb3JhbWFpIGlsIHJpZmVyaW1lbnRvIGNvbiBcImZpZWxkXCIgw6ggc3RhdG8gcGVyc28gZSBzdGlhbW8gcGFzc2FuZG8gdW5hIHN0cmluZ2FcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkLkZvcm11bGEgPSBmaWVsZC5Gb3JtdWxhO1xyXG5cclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRGaWVsZC5BbnN3ZXJTdHlsZSA9PSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkLkFuc3dlclN0eWxlID0geyBJbkxpc3RWaWV3OiB0cnVlLCBWaXNpYmxlSWY6IG51bGwsIEZpZWxkc3R5bGVDU1M6IFwiXCIsIExhYmVsc3R5bGVDU1M6IFwiXCIsIENvbFNwYW5TaXplczogW10sIEludmlzaWJpbGl0eTogRmllbGRJbnZpc2liaWxpdHlFbnVtLk5BU0NPU1RPIH07XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWVsZCA9IG5ldyBCYXNlRmllbGQoKTtcclxuICAgICAgdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgPSBudWxsO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRpYWxvZ0ZpZWxkUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0ZpZWxkLCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBcIjc1JVwiLFxyXG4gICAgICBoZWlnaHQ6IFwiODAlXCIsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgc2FsdmEgaWwgY2FtcG8gYXBwZW5hIGNyZWF0byBvIG1vZGlmaWNhdG8uXHJcbiAgICogUHJpbWEgZGVsIHNhbHZhdGFnZ2lvIGNvbnRyb2xsYSBzZSBlc2lzdGUgdW4gYWx0cm8gY2FtcG8gY29uIGxhIHN0ZXNzYSBsYWJlbCwgaW4gcXVlc3RvXHJcbiAgICogY2FzZSBnZW5lcmUgdW4gZXJyb3JlIChpIGNhbXBpIGRldm9ubyBhdmVyZSBub21pLCBlIHF1aW5kaSBsYWJlbCwgdW5pdm9jaGUgLSBpIG5vbWkgdmVuZ29ub1xyXG4gICAqIHJpY2F2YXRpIHVuZW5kbyBsZSBwYXJvbGUgY2hlIGZvcm1hbm8gbGEgbGFiZWwgdHJhbWl0ZSBcIl9cIikuXHJcbiAgICogQHBhcmFtIGZpZWxkIENhbXBvIGRhIHNhbHZhcmVcclxuICAgKiBAcGFyYW0gcmVvcGVuIHNlIHByZXNlbnRlIHJpYXByZSBsYSBkaWFsb2cgZGkgbW9kaWZpY2EgZGVsIGNhbXBvIHBlc2NhbmRvIGRhbGxhIGxpc3RhIGlsIHByb3NzaW1vIGluIGNhc28gZGkgdmFsb3JlIFsxXSBvIGlsIHByZWNlZGVudGUgaW4gY2FzbyBkaSB2YWxvcmUgWy0xXVxyXG4gICAqL1xyXG4gIG9uU2F2ZUZpZWxkKGV2OiB7IGZpZWxkOiBCYXNlRmllbGQsIHJlb3BlbjogbnVtYmVyIH0pIHtcclxuICAgIGxldCBmaWVsZCA9IGV2LmZpZWxkO1xyXG4gICAgbGV0IHJlb3BlbiA9IGV2LnJlb3BlbjtcclxuXHJcbiAgICAvLyBzZSBjJ8OoIGlsIGNhbXBvXHJcbiAgICBpZiAoZmllbGQpIHtcclxuICAgICAgLy8gY29udHJvbGxvIGNoZSBub24gY2kgc2lhIHVuIGFsdHJvIGNhbXBvIGNvbiBsbyBzdGVzc28gY29kZSAobGFiZWwpIGUgbm9uIHNpYSBlc3NvIHN0ZXNzb1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5mb3JtLkZpZWxkcyAmJlxyXG4gICAgICAgIHRoaXMuZm9ybS5GaWVsZHMuZmluZChcclxuICAgICAgICAgIChmLCBpKSA9PlxyXG4gICAgICAgICAgICBmLkxhYmVsID09PSBmaWVsZC5MYWJlbCAmJlxyXG4gICAgICAgICAgICAodGhpcy5pbmRleFNlbGVjdGVkRmllbGQgPT0gbnVsbFxyXG4gICAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICAgIDogdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgIT09IGkpXHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5XYXJuaW5nKFxyXG4gICAgICAgICAgXCJJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgY2FtcGkgY29uIGxvIHN0ZXNzbyBDb2RpY2UuXCJcclxuICAgICAgICApO1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkltcG9zc2liaWxlIGluc2VyaXJlIGR1ZSBjYW1waSBjb24gbG8gc3Rlc3NvIENvZGljZS5cIik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHNlIGhvIHVuIGluZGljZSBpbiBjdWkgaW5zZXJpcmUgaWwgY2FtcG8gKHZlcm9zaW1pbG1lbnRlIHNvbm8gaW4gbW9kaWZpY2EpXHJcbiAgICAgIGlmICh0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCAhPSBudWxsICYmIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID49IDApIHtcclxuICAgICAgICB0aGlzLmZvcm0uRmllbGRzW3RoaXMuaW5kZXhTZWxlY3RlZEZpZWxkXSA9IGZpZWxkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIMOoIHVuIGNhbXBvIG51b3ZvXHJcbiAgICAgICAgaWYgKCF0aGlzLmZvcm0uRmllbGRzKSB7XHJcbiAgICAgICAgICAvLyBzZSDDqCBpbCBwcmltbyBjYW1wbyBjaGUgc3RvIGluc2VyZW5kbyBwcmVwYXJvIHVuIGFycmF5XHJcbiAgICAgICAgICB0aGlzLmZvcm0uRmllbGRzID0gbmV3IEFycmF5PEJhc2VGaWVsZD4oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mb3JtLkZpZWxkcy5wdXNoKGZpZWxkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJvblNhdmVGaWVsZFwiLCB0aGlzLmZvcm0pXHJcbiAgICB0aGlzLmNsb3NlRmllbGREaWFsb2coKTtcclxuICAgIHRoaXMuc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKTtcclxuICAgIHRoaXMucmVsb2FkRmllbGRzVGFibGUoKTtcclxuXHJcbiAgICBpZiAocmVvcGVuICE9IDApIHtcclxuICAgICAgbGV0IG5ld0ZpZWxkID0gdGhpcy5mb3JtLkZpZWxkc1t0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCArIHJlb3Blbl07XHJcbiAgICAgIHRoaXMub3BlbkZpZWxkRGlhbG9nKG5ld0ZpZWxkKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnZpc3VhbEVkaXRvckFjdGl2ZSkge1xyXG4gICAgICB0aGlzLnJlZnJlc2hQcmV2aWV3KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hlIGNvbnRyb2xsYSBzZSBsbyBzdGVwIHBlciBsJ2FnZ2l1bnRhIGRlaSBjYW1waSBuZWxsYSBmb3JtIMOoIGNvbmNsdXNvLlxyXG4gICAqIEByZXR1cm5zIFNlIFRSVUUgbG8gc3RlcCB2aWVuZSBjb25zaWRlcmF0byBjb21wbGV0YXRvIGVkIMOoIHBvc3NiaWxlIHBhc3NhcmUgYWwgc3VjY2Vzc2l2by5cclxuICAgKi9cclxuICBpc0ZpZWxkU3RlcENvbXBsZXRlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5mb3JtLkZpZWxkcykge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2UgJiZcclxuICAgICAgdGhpcy5mb3JtLkZpZWxkcy5maW5kKChmKSA9PiAhZi5GaWVsZEdyb3VwKVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmZvcm0uRmllbGRzLmxlbmd0aCA+IDA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGFwcmlyZSBpbCBkaWFsb2cgZGkgY3JlYXppb25lL21vZGlmaWNhIGRlbGxlIGZvcm0gZGkgZGV0dGFnbGlvLlxyXG4gICAqIFNlIGlsIHBhcmFtZXRybyBwYXNzYXRvIMOoIG51bGwgc29ubyBpbiBhZ2dpdW50YSBhbHRyaW1lbnRpIHNvbm8gaW4gbW9kaWZpY2EuXHJcbiAgICogQHBhcmFtIGlubmVuckZvcm0gRm9ybSBkaSBkZXR0YWdsaW8gZGEgbW9kaWZpY2FyZSAoc2UgbnVsbCBhbGxvcmEgdmFkbyBpbiBhZGQpLlxyXG4gICAqL1xyXG4gIG9wZW5Jbm5lckZvcm1EaWFsb2coaW5uZW5yRm9ybTogRm9ybSA9IG51bGwpIHtcclxuICAgIHRoaXMuaW5uZXJGb3JtQ29uZmlnID0gbmV3IER5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb25maWcoKTtcclxuICAgIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5pbm5lckZvcm1NYW5hZ21lbnQgPVxyXG4gICAgICB0cnVlO1xyXG4gICAgLy8gdGhpcy5pbm5lckZvcm1Db25maWcuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmZvcm1cclxuICAgIC8vIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5mb3JtLk9sZE5hbWVcclxuICAgIC8vIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5pbm5lckZvcm1SZWZcclxuICAgIC8vIFtmb3JtXT1cInNlbGVjdGVkSW5uZXJGb3JtXCJcclxuICAgIC8vIFtpbm5lckZvcm1NYW5hZ21lbnRdPVwidHJ1ZVwiXHJcbiAgICAvLyBbaW5uZXJGb3JtUmVmXT1cImRpYWxvZ0lubmVyRm9ybVJlZlwiXHJcblxyXG4gICAgaWYgKGlubmVuckZvcm0pIHtcclxuICAgICAgdGhpcy5pbmRleFNlbGVjdGVkSW5uZXJGb3JtID0gdGhpcy5mb3JtLklubmVyRm9ybXMuaW5kZXhPZihpbm5lbnJGb3JtKTtcclxuXHJcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRJbm5lckZvcm0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGlubmVuckZvcm0pKTtcclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZElubmVyRm9ybS5PbGROYW1lID0gaW5uZW5yRm9ybS5OYW1lO1xyXG4gICAgICB0aGlzLmlubmVyRm9ybUNvbmZpZy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuZm9ybSA9XHJcbiAgICAgICAgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpbm5lbnJGb3JtKSk7XHJcbiAgICAgIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5mb3JtLk9sZE5hbWUgPVxyXG4gICAgICAgIGlubmVuckZvcm0uTmFtZTtcclxuXHJcbiAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID0gdGhpcy5mb3JtLkZpZWxkcy5maW5kSW5kZXgoXHJcbiAgICAgICAgKGYpID0+IGYuTGFiZWwgPT09IGlubmVuckZvcm0uTmFtZVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZElubmVyRm9ybSA9IG5ldyBGb3JtKCk7XHJcbiAgICAgIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5mb3JtID1cclxuICAgICAgICBuZXcgRm9ybSgpO1xyXG4gICAgICB0aGlzLmluZGV4U2VsZWN0ZWRJbm5lckZvcm0gPSBudWxsO1xyXG4gICAgICB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLmRpYWxvZ0lubmVyRm9ybVJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dJbm5lckZvcm0sIHtcclxuXHJcbiAgICB0aGlzLmlubmVyRm9ybUNvbmZpZy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuaW5uZXJGb3JtUmVmID1cclxuICAgICAgdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0lubmVyRm9ybSwge1xyXG4gICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgICB3aWR0aDogXCI4NSVcIixcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gc2NhdGVuYXRvIGFsIHNhbHZhdGFnZ2lvIGRpIHVuYSBmb3JtIGRpIGRldHRhZ2xpby5cclxuICAgKiBAcGFyYW0gZXZlbnQgRm9ybSBjcmVhdGEvbW9kaWZpY2F0YSBkYWxsJ3V0ZW50ZS4gU2Ugw6ggbnVsbCBhbGxvcmEgbCd1dGVudGUgaGEgYWJiYW5kb25hdG8gbGEgY29uZmlndXJhemlvbmUuXHJcbiAgICovXHJcbiAgb25TYXZlT3JFeGl0SW5uZXJGb3JtKGV2ZW50OiBGb3JtKSB7XHJcbiAgICBpZiAoZXZlbnQgIT0gbnVsbCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5mb3JtLk5hbWUgPT09IGV2ZW50Lk5hbWUgfHxcclxuICAgICAgICAodGhpcy5mb3JtLklubmVyRm9ybXMgJiZcclxuICAgICAgICAgIHRoaXMuZm9ybS5Jbm5lckZvcm1zLmZpbmQoXHJcbiAgICAgICAgICAgIChhLCBpKSA9PlxyXG4gICAgICAgICAgICAgIGEuTmFtZSA9PT0gZXZlbnQuTmFtZSAmJlxyXG4gICAgICAgICAgICAgICh0aGlzLmluZGV4U2VsZWN0ZWRJbm5lckZvcm0gPT0gbnVsbFxyXG4gICAgICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMuaW5kZXhTZWxlY3RlZElubmVyRm9ybSAhPT0gaSlcclxuICAgICAgICAgICkpIHx8XHJcbiAgICAgICAgKHRoaXMuZm9ybS5GaWVsZHMgJiZcclxuICAgICAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZElubmVyRm9ybSA9PSBudWxsICYmXHJcbiAgICAgICAgICB0aGlzLmZvcm0uRmllbGRzLmZpbmQoXHJcbiAgICAgICAgICAgIChmLCBpKSA9PlxyXG4gICAgICAgICAgICAgIGYuTGFiZWwgPT09IGV2ZW50Lk5hbWUgJiZcclxuICAgICAgICAgICAgICAodGhpcy5pbmRleFNlbGVjdGVkRmllbGQgPT0gbnVsbFxyXG4gICAgICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkICE9PSBpKVxyXG4gICAgICAgICAgKSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuV2FybmluZyhcclxuICAgICAgICAgIFwiSW1wb3NzaWJpbGUgaW5zZXJpcmUgZHVlIGZvcm0gZGkgZGV0dGFnbGlvIGNvbiBsbyBzdGVzc28gbm9tZS5cIlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgXCJJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgZm9ybSBkaSBkZXR0YWdsaW8gY29uIGxvIHN0ZXNzbyBub21lLlwiXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgaW5uZXJGb3JtRmllbGQ6IEJhc2VGaWVsZCA9IG5ldyBCYXNlRmllbGQoKTtcclxuICAgICAgaW5uZXJGb3JtRmllbGQuTmFtZSA9IGV2ZW50Lk5hbWUuc3BsaXQoXCIgXCIpLmpvaW4oXCJfXCIpO1xyXG4gICAgICBpbm5lckZvcm1GaWVsZC5MYWJlbCA9IGV2ZW50Lk5hbWU7XHJcbiAgICAgIGlubmVyRm9ybUZpZWxkLkZpZWxkVHlwZSA9IEZpZWxkVHlwZUVudW1bXCJGb3JtIGRpIGRldHRhZ2xpb1wiXTtcclxuICAgICAgaW5uZXJGb3JtRmllbGQuRmllbGRHcm91cCA9XHJcbiAgICAgICAgdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgIT0gbnVsbFxyXG4gICAgICAgICAgPyB0aGlzLmZvcm0uRmllbGRzW3RoaXMuaW5kZXhTZWxlY3RlZEZpZWxkXS5GaWVsZEdyb3VwXHJcbiAgICAgICAgICA6IG51bGw7XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5pbmRleFNlbGVjdGVkSW5uZXJGb3JtICE9IG51bGwgJiZcclxuICAgICAgICB0aGlzLmluZGV4U2VsZWN0ZWRJbm5lckZvcm0gPj0gMFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmZvcm0uSW5uZXJGb3Jtc1t0aGlzLmluZGV4U2VsZWN0ZWRJbm5lckZvcm1dID0gZXZlbnQ7XHJcbiAgICAgICAgdGhpcy5mb3JtLkZpZWxkc1t0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZF0gPSBpbm5lckZvcm1GaWVsZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIXRoaXMuZm9ybS5Jbm5lckZvcm1zKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0uSW5uZXJGb3JtcyA9IG5ldyBBcnJheTxGb3JtPigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZvcm0uSW5uZXJGb3Jtcy5wdXNoKGV2ZW50KTtcclxuICAgICAgICB0aGlzLmZvcm0uRmllbGRzLnB1c2goaW5uZXJGb3JtRmllbGQpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVsb2FkRmllbGRzVGFibGUoKTtcclxuICAgIH1cclxuICAgIHRoaXMuZGlhbG9nSW5uZXJGb3JtUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGFwcmlyZSBpbCBkaWFsb2cgZGkgY3JlYXppb25lL21vZGlmaWNhIGRlbGxlIGFjdGlvbi5cclxuICAgKiBTZSBpbCBwYXJhbWV0cm8gcGFzc2F0byDDqCBudWxsIHNvbm8gaW4gYWdnaXVudGEgYWx0cmltZW50aSBzb25vIGluIG1vZGlmaWNhLlxyXG4gICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uT25SZWNvcmQgZGEgbW9kaWZpY2FyZSAoc2UgbnVsbCBhbGxvcmEgdmFkbyBpbiBhZGQpLlxyXG4gICAqL1xyXG4gIG9wZW5BY3Rpb25PblJlY29yZERpYWxvZyhhY3Rpb246IEFjdGlvbk9uUmVjb3JkID0gbnVsbCkge1xyXG4gICAgaWYgKGFjdGlvbikge1xyXG4gICAgICB0aGlzLmluZGV4U2VsZWN0ZWRBY3Rpb24gPSB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLmluZGV4T2YoYWN0aW9uKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEFjdGlvbiA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYWN0aW9uKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQWN0aW9uID0gbmV3IEFjdGlvbk9uUmVjb3JkKCk7XHJcbiAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiA9IG51bGw7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNyZWF0ZUFjdGlvbk9uUmVjb3JkRm9ybSgpO1xyXG4gICAgdGhpcy5kaWFsb2dBY3Rpb25PblJlY29yZFJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dBY3Rpb25PblJlY29yZCwge1xyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICB3aWR0aDogXCI3NSVcIixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBhcHJpcmUgaWwgZGlhbG9nIGRpIGNyZWF6aW9uZS9tb2RpZmljYSBkZWkgYm90dG9uaSBhemlvbmUuXHJcbiAgICogU2UgaWwgcGFyYW1ldHJvIHBhc3NhdG8gw6ggbnVsbCBzb25vIGluIGFnZ2l1bnRhIGFsdHJpbWVudGkgc29ubyBpbiBtb2RpZmljYS5cclxuICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbkJ1dHRvbiBkYSBtb2RpZmljYXJlIChzZSBudWxsIGFsbG9yYSB2YWRvIGluIGFkZCkuXHJcbiAgICovXHJcbiAgb3BlbkFjdGlvbkJ1dHRvbkRpYWxvZyhldjogQWN0aW9uQnV0dG9uID0gbnVsbCkge1xyXG5cclxuICAgIGlmIChldiAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRBY3Rpb25CdXR0b24gPSBldjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRBY3Rpb25CdXR0b24gPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGlhbG9nQWN0aW9uQnV0dG9uUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0FjdGlvbkJ1dHRvbiwge1xyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICB3aWR0aDogXCI3NSVcIixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBpbXBvc3RhcmUgaSB2YWxvcmkgZGEgc3VnZ2VyaXJlIG5lbGwnYXV0b2NvbXBsZXRlIGRlbCBjYW1wbyBGb3JtdWxhLlxyXG4gICAqIFZpZW5lIHNjYXRlbmF0byBhbCBmb2N1cyAoaW4gcXVlc3RvIGNhc28gdmllbmUgcGFzc2F0byBpbCBwYXJhbWV0cm8gYSBudWxsIHBlciBkaWZmZXJlbnppYXJsb1xyXG4gICAqIGRhbGwnZXZlbnRvIGRpIGNsaWNrIHN1bGxhIHRhc3RpZXJhKSBlIGFsIGtleXVwIHN1bGwnaW5wdXQgKGlsIHBhcmFtZXRybyDDqCBkaXZlcnNvIGRhIG51bGwpLlxyXG4gICAqIEBwYXJhbSBrZXlib2FyZEV2ZW50IEV2ZW50byBzY2F0ZW5hdG8gYWwga2V5dXAgc3VsbGEgdGFzdGllcmEuIFNlIG51bGwgYWxsb3JhIGlsIG1ldG9kbyDDqCBzdGF0byBpbnZvY2F0byBkYWwgZm9jdXMgc3VsbCdpbnB1dC5cclxuICAgKiBAc3VtbWFyeSBBZ2dpb3JuYSBsJ2VsZW5jbyBkZWkgc3VnZ2VyaW1lbnRpIHBlciBsJ2F1dG9jb21wbGV0ZSBzZSBsJ3V0ZW50ZSBlc2VndWUgaWwgZm9jdXMgc3VsbCdpbnB1dFxyXG4gICAqIG9wcHVyZSBhbCBrZXl1cCBzdWxsYSB0YXN0aWVyYSBkaSB1biB0YXN0byBkaXZlcnNvIGRhbGxlIGZyZWNjZS5cclxuICAgKi9cclxuICBzZXRBY3Rpb25BdXRvY29tcGxldGVPcHRpb25zKGtleWJvYXJkRXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIC8vIENyZW8gbCdhcnJheSBwZXIgbCdhdXRvY29tcGxldGUgc29sbyBzZSBzdG8gZmFjZW5kbyBpbCBmb2N1cyBzdWxsJ2lucHV0IG8gc2Ugc3RvIHByZW1lbmRvIHVuIHRhc3RvXHJcbiAgICAvLyBzdWxsYSB0YXN0aWVyYSBkaXZlcnNvIGRhbGxlIGZyZWNjZSAoaW4gcXVlc3QndWx0aW1vIGNhc28sIHNlIG5vbiB2aWVuZSBlc2VndWl0byBpbCBmaWx0cm8gc3VsbCdldmVudG8sXHJcbiAgICAvLyBub24gc2kgcHXDsiBzZWxlemlvbmFyZSB1biBzdWdnZXJpbWVudG8gZGVsbCdhdXRvY29tcGxldGUgcGVyY2jDqCBhbCBjbGljayB2ZXJyZWJiZSByaWNhcmljYXRvIGwnYXJyYXkgZVxyXG4gICAgLy8gc2kgcHJlZGVyZWJiZSBsYSBzZWxlemlvbmUgYXBwZW5hIGZhdHRhKS5cclxuICAgIGlmICgha2V5Ym9hcmRFdmVudCB8fCAha2V5Ym9hcmRFdmVudC5jb2RlLmluY2x1ZGVzKFwiQXJyb3dcIikpIHtcclxuICAgICAgdGhpcy5hY3Rpb25BdXRvY29tcGxldGVPcHRpb25zID1cclxuICAgICAgICBVdGlsaXR5SGVscGVyU2VydmljZS5HZXRBdXRvY29tcGxldGVPcHRpb25zKFxyXG4gICAgICAgICAgdGhpcy5mb3JtLkZpZWxkcyxcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBY3Rpb24uQWN0aW9uXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzYWx2YXJlIGwnYXppb25lIGNyZWF0YS9tb2RpZmljYXRlLlxyXG4gICAqL1xyXG4gIHNhdmVBY3Rpb25PblJlY29yZCgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZCAmJlxyXG4gICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLmZpbmQoXHJcbiAgICAgICAgKGEsIGkpID0+XHJcbiAgICAgICAgICBhLk5hbWUgPT09IHRoaXMuc2VsZWN0ZWRBY3Rpb24uTmFtZSAmJlxyXG4gICAgICAgICAgKHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiA9PSBudWxsXHJcbiAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICA6IHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiAhPT0gaSlcclxuICAgICAgKVxyXG4gICAgKSB7XHJcbiAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLldhcm5pbmcoXHJcbiAgICAgICAgXCJJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgYWN0aW9uIGNvbiBsbyBzdGVzc28gbm9tZS5cIlxyXG4gICAgICApO1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgYWN0aW9uIGNvbiBsbyBzdGVzc28gbm9tZS5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiAhPSBudWxsICYmIHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiA+PSAwKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmRbdGhpcy5pbmRleFNlbGVjdGVkQWN0aW9uXSA9IHRoaXMuc2VsZWN0ZWRBY3Rpb247XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoIXRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQpIHtcclxuICAgICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkID0gbmV3IEFycmF5PEFjdGlvbk9uUmVjb3JkPigpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQucHVzaCh0aGlzLnNlbGVjdGVkQWN0aW9uKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2xvc2VEaWFsb2dBY3Rpb25PblJlY29yZCgpO1xyXG4gICAgdGhpcy5zZXRBY3Rpb25PcmRpbmFsUG9zaXRpb24oKTtcclxuICAgIHRoaXMucmVsb2FkQWN0aW9uc09uUmVjb3JkVGFibGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgc2FsdmFyZSBsJ2F6aW9uZSBjcmVhdGEvbW9kaWZpY2F0ZS5cclxuICAgKi9cclxuICBzYXZlQWN0aW9uQnV0dG9ucyhlbGVtZW50OiBBY3Rpb25CdXR0b24pIHtcclxuXHJcbiAgICBpZiAoZWxlbWVudCAhPSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucyAhPSBudWxsKSB7XHJcbiAgICAgICAgdmFyIGV4aXN0c0FjdGlvbkJ1dHRvbnMgPSB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucy5maW5kKHggPT4geC5CdXR0b25VbmlxdWVJZCA9PSBlbGVtZW50LkJ1dHRvblVuaXF1ZUlkKTtcclxuICAgICAgICBpZiAoZXhpc3RzQWN0aW9uQnV0dG9ucyA9PSBudWxsKSB7XHJcbiAgICAgICAgICAvLyBOdW92byB0cmlnZ2VyXHJcbiAgICAgICAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucy5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBleGlzdHNBY3Rpb25CdXR0b25zID0gZWxlbWVudDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMgPSBuZXcgQXJyYXk8QWN0aW9uQnV0dG9uPigpO1xyXG4gICAgICAgIHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zLnB1c2goZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5hY3Rpb25CdXR0b25zVGFibGUucmVsb2FkRGF0YXRhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kaWFsb2dBY3Rpb25CdXR0b25SZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY2hpdWRlcmUgaWwgZGlhbG9nIGRlbGxhIGlubmVyIGZvcm0uXHJcbiAgICovXHJcbiAgY2xvc2VEaWFsb2dJbm5lckZvcm0oKSB7XHJcbiAgICB0aGlzLmlubmVyRm9ybVJlZi5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjaGl1ZGVyZSBpbCBkaWFsb2cgZGkgZ2VzdGlvbmUgZGVsbGUgYWN0aW9uLlxyXG4gICAqL1xyXG4gIGNsb3NlRGlhbG9nQWN0aW9uT25SZWNvcmQoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ0FjdGlvbk9uUmVjb3JkUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNoaXVkZXJlIGlsIGRpYWxvZyBkaSBnZXN0aW9uZSBkZWxsZSBhY3Rpb24gYnV0dG9ucy5cclxuICAgKi9cclxuICBjbG9zZURpYWxvZ0FjdGlvbkJ1dHRvbnMoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ0FjdGlvbkJ1dHRvblJlZi5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzZWduYXJlIGNvbWUgY29uY2x1c2EgbGEgY3JlYXppb25lIGRlbGxhIGZvcm0gZSBwZXIgY3JlYXJuZSB1bmEgY29waWFcclxuICAgKiBkYSB2aXNhbGl6emFyZSBjb21lIGFudGVwcmltYS5cclxuICAgKiBAcGFyYW0gY29tcGxldGVkIFNlIFRSVUUgc2VnbmEgbGEgZm9ybSBjb21lIGNvbmNsdXNhIGUgbmUgY3JlYSB1bmEgY29waWEgZGEgdmlzdWFsaXp6YXJlXHJcbiAgICovXHJcbiAgc2V0Rm9ybVN0YXR1cyhjb21wbGV0ZWQ6IGJvb2xlYW4pIHtcclxuICAgIGlmIChjb21wbGV0ZWQpIHtcclxuICAgICAgdGhpcy5mb3JtQ29tcGxldGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5wcmV2aWV3Rm9ybSA9IHRoaXMuc2FmZUNsb25lKHRoaXMuZm9ybSk7XHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJwcmV2aWV3Rm9ybVwiLCB0aGlzLnByZXZpZXdGb3JtKVxyXG5cclxuICAgICAgLy8gUGVyIHZpc3VhbGl6emFyZSBjb3JyZXR0YW1lbnRlIGwnb2FudGVwcmltYSBkZWxsYSBmb3JtIGFwcGVuYSBjcmVhdGFcclxuICAgICAgLy8gYmlzb2duYSB2YWxvcml6emFyZSBsYSBwcm9wcmlldMOgIE5hbWUgZGVpIGNhbXBpIGRlbGxhIGZvcm0gZSBkZWxsZSBJbm5lckZvcm1zLlxyXG4gICAgICB0aGlzLnByZXZpZXdGb3JtLkZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgIGZpZWxkLk5hbWUgPSBmaWVsZC5MYWJlbC5zcGxpdChcIiBcIikuam9pbihcIl9cIik7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5wcmV2aWV3Rm9ybS5Jbm5lckZvcm1zICYmXHJcbiAgICAgICAgdGhpcy5wcmV2aWV3Rm9ybS5Jbm5lckZvcm1zLmxlbmd0aCA+IDBcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5wcmV2aWV3Rm9ybS5Jbm5lckZvcm1zLmZvckVhY2goKGZvcm0pID0+IHtcclxuICAgICAgICAgIGZvcm0uRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgICAgIGZpZWxkLk5hbWUgPSBmaWVsZC5MYWJlbC5zcGxpdChcIiBcIikuam9pbihcIl9cIik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mb3JtQ29tcGxldGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucHJldmlld0Zvcm0gPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzYWx2YXJlIGxhIGZvcm0gY3JlYXRhIGFsbGEgZmluZSBkZWwgd2l6YXJkLlxyXG4gICAqIFNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIHVuIGVuZFBvaW50IHBlciBpbCBzYWx2YXRhZ2dpbyB2aWVuZSBlZmZldHR1YXRhIHVuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIgcGFzc2FuZG8gbCdvZ2dldG8gZGEgc2FsdmFyZVxyXG4gICAqIG5lbCBib2R5IGRlbGxhIGNoaWFtYXRhLCBhbHRyaW1lbnRpIHNjYXRlbmEgbCdldmVudG8gXCJzYXZlRm9ybUV2ZW50XCIuXHJcbiAgICovXHJcbiAgc2F2ZUZvcm0oKSB7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAhPSBudWxsICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLlNhdmVFbmRQb2ludFxyXG4gICAgKSB7XHJcblxyXG4gICAgICBpZiAoIXRoaXMuc2F2ZWQpIHtcclxuICAgICAgICB0aGlzLmJhY2t1cEZvcm0gPSB0aGlzLnNhZmVDbG9uZSh0aGlzLmZvcm0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9ybSA9IHRoaXMuc2FmZUNsb25lKHRoaXMuYmFja3VwRm9ybSk7XHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgICAvLyBQZXIgZmFyIGFycml2YXJlIGFsIHNlcnZlciBsJ2FycmF5IGRpIEZpZWxkIGJpc29nbmEgcGFzc2FybGkgc3UgQW55XHJcbiAgICAgIHRoaXMuZm9ybS5PYmplY3RGaWVsZHMgPSBbXTtcclxuICAgICAgdGhpcy5mb3JtLk9iamVjdEZsZEV4dHJhQ29uZmlnVmFsdWVzID0gW107XHJcblxyXG4gICAgICBpZiAodGhpcy5mb3JtLkZsZEV4dHJhQ29uZmlnVmFsdWVzICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLmZvcm0uT2JqZWN0RmxkRXh0cmFDb25maWdWYWx1ZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybS5GbGRFeHRyYUNvbmZpZ1ZhbHVlcykpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmZvcm0uRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcblxyXG4gICAgICAgIC8vIFRyYXNmb3JtbyBpbCBkYXRhZ2V0dGVyIGluIEJhc2U2NFxyXG4gICAgICAgIGZpZWxkLkRhdGFHZXR0ZXJWYWx1ZUJhc2U2NFN0cmluZyA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkoZmllbGQuRGF0YUdldHRlcikpO1xyXG4gICAgICAgIGZpZWxkLkRhdGFHZXR0ZXIgPSBudWxsO1xyXG5cclxuICAgICAgICBpZiAoZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW0uQWxsZWdhdG8pIHtcclxuICAgICAgICAgIGNvbnN0IGZsZEE6IGFueSA9IGZpZWxkO1xyXG4gICAgICAgICAgZmxkQS5NZXRhZGF0YU9iamVjdEZpZWxkcyA9IGZsZEEuTWV0YWRhdGFGaWVsZHM7XHJcbiAgICAgICAgICBmbGRBLk1ldGFkYXRhRmllbGRzID0gW107XHJcbiAgICAgICAgICB0aGlzLmZvcm0uT2JqZWN0RmllbGRzLnB1c2goZmxkQSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVtcIkNhbXBvIG51bWVyaWNvXCJdKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAoPE51bWVyaWNGaWVsZD5maWVsZCkuTWF4VmFsdWUgPT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgICAgICAgKDxOdW1lcmljRmllbGQ+ZmllbGQpLk1heFZhbHVlID09IG51bGxcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgKDxOdW1lcmljRmllbGQ+ZmllbGQpLk1heFZhbHVlID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICg8TnVtZXJpY0ZpZWxkPmZpZWxkKS5NaW5WYWx1ZSA9PSB1bmRlZmluZWQgfHxcclxuICAgICAgICAgICAgICAoPE51bWVyaWNGaWVsZD5maWVsZCkuTWluVmFsdWUgPT0gbnVsbFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAoPE51bWVyaWNGaWVsZD5maWVsZCkuTWluVmFsdWUgPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmZvcm0uT2JqZWN0RmllbGRzLnB1c2goZmllbGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZm9ybS5GaWVsZHMgPSBudWxsO1xyXG4gICAgICB0aGlzLmZvcm0uT3JnYUlEID0gdGhpcy5vcmdhSUQ7XHJcbiAgICAgIGlmICh0aGlzLmZvcm0uQ3JlYXRpb25EYXRlID09IG51bGwpIHtcclxuICAgICAgICB0aGlzLmZvcm0uQ3JlYXRpb25EYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICB0aGlzLmZvcm0uQ3JlYXRpb25Vc2VyID0gdGhpcy5Vc2VySUQ7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb3JtLk1vZGlmeVVzZXIgPSB0aGlzLlVzZXJJRDtcclxuXHJcbiAgICAgIHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybS5UcmlnZ2Vycyk7XHJcbiAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IG51bGw7XHJcblxyXG4gICAgICB0aGlzLmZvcm0uT2JqZWN0QWN0aW9uQnV0dG9ucyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zKTtcclxuICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMgPSBudWxsO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZm9ybS5Db2RlID09IG51bGwpIHtcclxuICAgICAgICB0aGlzLnNldENvZGUodGhpcy5mb3JtLk5hbWUpO1xyXG4gICAgICB9XHJcblxyXG5cclxuICAgICAgLy8gY2hpYW1hdGEgZWZmZXR0aXZhXHJcbiAgICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgUGFyYW1OYW1lOiBcIkZvcm1cIixcclxuICAgICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybSxcclxuICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIkluIEJvZHlcIl0sXHJcbiAgICAgICAgfSxcclxuICAgICAgXTtcclxuXHJcbiAgICAgIHRoaXMuc2F2ZWQgPSB0cnVlO1xyXG5cclxuXHJcblxyXG4gICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5TYXZlRW5kUG9pbnQsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAocmVzKSA9PiB7XHJcbiAgICAgICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5TdWNjZXNzKFwiRm9ybSBzYWx2YXRhIGNvbiBzdWNjZXNzbyFcIik7XHJcbiAgICAgICAgICB0aGlzLmFmdGVyU2F2ZUZvcm1FdmVudC5lbWl0KHRoaXMuZm9ybSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLkVycm9yKFwiRXJyb3JlIG5lbCBzYWx2YXRhZ2dpbyBkZWxsYSBmb3JtXCIpO1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yZSBuZWwgc2FsdmF0YWdnaW8gZGVsbGEgZm9ybVwiLCBlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zYXZlRm9ybUV2ZW50LmVtaXQodGhpcy5mb3JtKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBGVU5aSU9OSSBQUklWQVRFXHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgaW1wb3N0YXJlIGxhIGZvcm0gZSBjb25maWd1cmFyZSBjb2xvbm5lL0Zvcm1Hb3VycC5cclxuICAgKiBAcGFyYW0gZm9ybSBGb3JtIGRhIHV0aWxpenphcmUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRGb3JtQW5kQ29uZmlndXJlKGZvcm06IEZvcm0gPSBudWxsKSB7XHJcblxyXG4gICAgaWYgKGZvcm0gIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmZvcm0gPSBmb3JtO1xyXG4gICAgICB0aGlzLmZvcm0uT3JnYUlEID0gdGhpcy5vcmdhSUQ7XHJcbiAgICAgIGlmICh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMgIT0gbnVsbCAmJiB0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMgIT0gXCJcIikge1xyXG4gICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IEpTT04ucGFyc2UodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBuZXcgQXJyYXk8VHJpZ2dlcj4oKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuZm9ybS5PYmplY3RBY3Rpb25CdXR0b25zICE9IG51bGwgJiYgdGhpcy5mb3JtLk9iamVjdEFjdGlvbkJ1dHRvbnMgIT0gXCJcIikge1xyXG4gICAgICAgIHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zID0gSlNPTi5wYXJzZSh0aGlzLmZvcm0uT2JqZWN0QWN0aW9uQnV0dG9ucyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMgPSBuZXcgQXJyYXk8QWN0aW9uQnV0dG9uPigpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodHlwZW9mIHRoaXMuZm9ybS5GaWVsZHMgIT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgIHRoaXMuZm9ybS5GaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuXHJcbiAgICAgICAgICAvLyBUcmFzZm9ybW8gaWwgQmFzZTY0U3RyaW5nIGRlbCBEYXRhZ2V0dGVyIG5lbCBEYXRhZ2V0dGVyIHZlcm8gZSBwcm9wcmlvXHJcbiAgICAgICAgICBpZiAoZmllbGQuRGF0YUdldHRlclZhbHVlQmFzZTY0U3RyaW5nICE9IG51bGwpIHtcclxuICAgICAgICAgICAgZmllbGQuRGF0YUdldHRlciA9IEpTT04ucGFyc2UoYXRvYihmaWVsZC5EYXRhR2V0dGVyVmFsdWVCYXNlNjRTdHJpbmcpKTtcclxuICAgICAgICAgICAgZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9IGZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPT0gbnVsbCA/IERhdGFHZXR0ZXJUeXBlRW51bS5NYW51YWxlIDogZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZpZWxkLkRhdGFHZXR0ZXIgPSBuZXcgRGF0YUdldHRlcigpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGZpZWxkLkRhdGFHZXR0ZXJWYWx1ZUJhc2U2NFN0cmluZyA9IG51bGw7XHJcblxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbmZpZ3VyZUNvbHVtbnMoKTtcclxuICAgIHRoaXMuY3JlYXRlRm9ybUZvcm0oKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbmZpZ3VyYSBsZSBjb2xvbm5lIHBlciBsZSB0YWJlbGxlIG5lY2Vzc2FyaWUgYWxsYSBjcmVhemlvbmUgZGVsbGEgZm9ybTpcclxuICAgKiAgLSBwZXIgbGEgdmlzdWFsaXp6YXppb25lIGRlaSBjYW1waSBpbnNlcml0aVxyXG4gICAqICAtIHBlciBsZSBmb3JtIGRpIGRldHRhZ2xpbyBjcmVhdGVcclxuICAgKiAgLSBwZXIgbGUgYXppb25pIGNvbmZpZ3VyYXRlIHN1aSByZWNvcmQgZGVsbGEgZm9ybVxyXG4gICAqL1xyXG5cclxuXHJcblxyXG5cclxuICBwcml2YXRlIGNvbmZpZ3VyZUNvbHVtbnMoKSB7XHJcbiAgICB0aGlzLmZpZWxkc0NvbHVtbnMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiYWN0aW9uXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJcIixcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLk1lbnVBY3Rpb24sXHJcbiAgICAgICAgYnV0dG9uTWVudUljb246IFwibW9yZV92ZXJ0XCIsXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDRyZW1cIiB9LFxyXG4gICAgICAgIGFjdGlvbnM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJNb2RpZmljYVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImVkaXRcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiB0aGlzLmVkaXRGaWVsZChlbGVtZW50KSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiRHVwbGljYSBzb3R0b1wiLFxyXG4gICAgICAgICAgICBpY29uOiBcImZpbGVfY29weVwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMuZHVwbGljYXRlRmllbGQoZWxlbWVudCwgZWxlbWVudC5PcmRpbmFsUG9zaXRpb24gKyAxKSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiRHVwbGljYSBpbiBmb25kb1wiLFxyXG4gICAgICAgICAgICBpY29uOiBcImZpbGVfY29weVwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMuZHVwbGljYXRlRmllbGQoZWxlbWVudCksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkVsaW1pbmFcIixcclxuICAgICAgICAgICAgaWNvbjogXCJkZWxldGVcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiB0aGlzLmRlbGV0ZUVsZW1lbnQoZWxlbWVudCwgXCJGaWVsZHNcIiksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgLy8ge1xyXG4gICAgICAgICAgLy8gICBuYW1lOiBcIlNwb3N0YSBzdVwiLFxyXG4gICAgICAgICAgLy8gICBpY29uOiBcImFycm93X3Vwd2FyZFwiLFxyXG4gICAgICAgICAgLy8gICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+XHJcbiAgICAgICAgICAvLyAgICAgdGhpcy5tb3ZlRWxlbWVudChlbGVtZW50LCB0cnVlLCBcIkZpZWxkc1wiKSxcclxuICAgICAgICAgIC8vICAgZGlzYWJsZWQ6IChlbGVtZW50KSA9PiB0aGlzLmZvcm0uRmllbGRzLmluZGV4T2YoZWxlbWVudCkgPT09IDAsXHJcbiAgICAgICAgICAvLyB9LFxyXG4gICAgICAgICAgLy8ge1xyXG4gICAgICAgICAgLy8gICBuYW1lOiBcIlNwb3N0YSBnacO5XCIsXHJcbiAgICAgICAgICAvLyAgIGljb246IFwiYXJyb3dfZG93bndhcmRcIixcclxuICAgICAgICAgIC8vICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PlxyXG4gICAgICAgICAgLy8gICAgIHRoaXMubW92ZUVsZW1lbnQoZWxlbWVudCwgZmFsc2UsIFwiRmllbGRzXCIpLFxyXG4gICAgICAgICAgLy8gICBkaXNhYmxlZDogKGVsZW1lbnQpID0+XHJcbiAgICAgICAgICAvLyAgICAgdGhpcy5mb3JtLkZpZWxkcy5pbmRleE9mKGVsZW1lbnQpID49IHRoaXMuZm9ybS5GaWVsZHMubGVuZ3RoIC0gMSxcclxuICAgICAgICAgIC8vIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJGaWVsZFR5cGVcIixcclxuICAgICAgICBkaXNwbGF5OiBcIlRpcG9sb2dpYVwiLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uRW51bSxcclxuICAgICAgICBlbnVtTW9kZWw6IEZpZWxkVHlwZUVudW0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDEycmVtXCIgfSxcclxuICAgICAgfSxcclxuICAgICAgeyBrZXk6IFwiTGFiZWxcIiwgZGlzcGxheTogXCJMYWJlbFwiLCBzdHlsZXM6IHsgZmxleDogXCIwIDAgOHJlbVwiIH0gfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJEZXNjcmlwdGlvblwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiRGVzY3JpemlvbmVcIixcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgMTJyZW1cIiB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGVcIixcclxuICAgICAgICBkaXNwbGF5OiBcIlRpcG8gUmVjdXBlcm8gRGF0aVwiLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uRW51bSxcclxuICAgICAgICBlbnVtTW9kZWw6IERhdGFHZXR0ZXJUeXBlRW51bSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgMTJyZW1cIiB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIlJlcXVpcmVkXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJPYmJsaWdhdG9yaW9cIixcclxuICAgICAgICB2YWx1ZTogKGVsZW1lbnQpID0+IGVsZW1lbnQuUmVxdWlyZWQsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5Cb29sZWFuLFxyXG4gICAgICAgIGJvb2xlYW5WYWx1ZXM6IHtcclxuICAgICAgICAgIHRydWU6ICc8aSBjbGFzcz1cImZhIGZhLWNoZWNrIHN1Y2Nlc3MtY29sb3JcIj48L2k+JyxcclxuICAgICAgICAgIGZhbHNlOiAnPGkgY2xhc3M9XCJmYSBmYS1jbG9zZSBlcnJvci1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDVyZW1cIiwgY2VsbEFsaWdubWVudDogQ2VsbEFsaWdubWVudEVudW0uQ0VOVEVSIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiRm9ybXVsYVwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiQ2FsY29sYXRvXCIsXHJcbiAgICAgICAgdmFsdWU6IChlbGVtZW50KSA9PiBlbGVtZW50LkZvcm11bGEgIT0gbnVsbCAmJiBlbGVtZW50LkZvcm11bGEgIT0gJycsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5Cb29sZWFuLFxyXG4gICAgICAgIGJvb2xlYW5WYWx1ZXM6IHtcclxuICAgICAgICAgIHRydWU6ICc8aSBjbGFzcz1cImZhIGZhLWNoZWNrIHN1Y2Nlc3MtY29sb3JcIj48L2k+JyxcclxuICAgICAgICAgIGZhbHNlOiAnPGkgY2xhc3M9XCJmYSBmYS1jbG9zZSBlcnJvci1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDVyZW1cIiwgY2VsbEFsaWdubWVudDogQ2VsbEFsaWdubWVudEVudW0uQ0VOVEVSIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiSW5MaXN0Vmlld1wiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiVmlzaWJpbGUgaW4gQ29tcGlsYXppb25lXCIsXHJcbiAgICAgICAgdmFsdWU6IChlbGVtZW50KSA9PiBlbGVtZW50LkluTGlzdFZpZXcsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5Cb29sZWFuLFxyXG4gICAgICAgIGJvb2xlYW5WYWx1ZXM6IHtcclxuICAgICAgICAgIHRydWU6ICc8aSBjbGFzcz1cImZhIGZhLWNoZWNrIHN1Y2Nlc3MtY29sb3JcIj48L2k+JyxcclxuICAgICAgICAgIGZhbHNlOiAnPGkgY2xhc3M9XCJmYSBmYS1jbG9zZSBlcnJvci1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDdyZW1cIiwgY2VsbEFsaWdubWVudDogQ2VsbEFsaWdubWVudEVudW0uQ0VOVEVSIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiSW52aXNpYmlsaXR5XCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJPY2N1cGEgc3BhemlvP1wiLFxyXG4gICAgICAgIHZhbHVlOiAoZWxlbWVudCkgPT4gZWxlbWVudC5Jbkxpc3RWaWV3IHx8IGVsZW1lbnQuSW52aXNpYmlsaXR5ID09IEZpZWxkSW52aXNpYmlsaXR5RW51bVtcIk5BU0NPU1RPIENPTiBBUkVBIFZJU0lCSUxFXCJdLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uQm9vbGVhbixcclxuICAgICAgICBib29sZWFuVmFsdWVzOiB7XHJcbiAgICAgICAgICB0cnVlOiAnPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBzdWNjZXNzLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgICBmYWxzZTogJzxpIGNsYXNzPVwiZmEgZmEtY2xvc2UgZXJyb3ItY29sb3JcIj48L2k+JyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCA3cmVtXCIsIGNlbGxBbGlnbm1lbnQ6IENlbGxBbGlnbm1lbnRFbnVtLkNFTlRFUiB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIlZpc2libGVJZlwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiVmlzaWJpbGl0w6AgY29uZGl6aW9uYXRhXCIsXHJcbiAgICAgICAgdmFsdWU6IChlbGVtZW50KSA9PiBlbGVtZW50LlZpc2libGVJZiAhPSBudWxsICYmIGVsZW1lbnQuVmlzaWJsZUlmICE9IFwiXCIsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5Cb29sZWFuLFxyXG4gICAgICAgIGJvb2xlYW5WYWx1ZXM6IHtcclxuICAgICAgICAgIHRydWU6ICc8aSBjbGFzcz1cImZhIGZhLWNoZWNrIHN1Y2Nlc3MtY29sb3JcIj48L2k+JyxcclxuICAgICAgICAgIGZhbHNlOiAnPGkgY2xhc3M9XCJmYSBmYS1jbG9zZSBlcnJvci1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDdyZW1cIiwgY2VsbEFsaWdubWVudDogQ2VsbEFsaWdubWVudEVudW0uQ0VOVEVSIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiQW5zd2VyU3R5bGUuSW5MaXN0Vmlld1wiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiVmlzaWJpbGUgbmVsbGEgcmlzcG9zdGFcIixcclxuICAgICAgICB2YWx1ZTogKGVsZW1lbnQpID0+ICFlbGVtZW50LkFuc3dlclN0eWxlIHx8IGVsZW1lbnQuQW5zd2VyU3R5bGUgJiYgZWxlbWVudC5BbnN3ZXJTdHlsZS5Jbkxpc3RWaWV3LFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uQm9vbGVhbixcclxuICAgICAgICBib29sZWFuVmFsdWVzOiB7XHJcbiAgICAgICAgICB0cnVlOiAnPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBzdWNjZXNzLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgICBmYWxzZTogJzxpIGNsYXNzPVwiZmEgZmEtY2xvc2UgZXJyb3ItY29sb3JcIj48L2k+JyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCA1cmVtXCIsIGNlbGxBbGlnbm1lbnQ6IENlbGxBbGlnbm1lbnRFbnVtLkNFTlRFUiB9LFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZm9ybS5Gb3JtU2NhbGFyVHlwZSAmJlxyXG4gICAgICB0aGlzLmZvcm0uRm9ybVNjYWxhclR5cGUgIT0gRm9ybVNjYWxhclR5cGVFbnVtLlNlbXBsaWNlXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5maWVsZHNDb2x1bW5zLnNwbGljZSgxLCAwLCB7XHJcbiAgICAgICAga2V5OiBcIkZpZWxkR3JvdXBcIixcclxuICAgICAgICBkaXNwbGF5OiBcIlNlemlvbmVcIixcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLkV4dGVybmFsVGVtcGxhdGUsXHJcbiAgICAgICAgZXh0ZXJuYWxUZW1wbGF0ZTogdGhpcy5maWVsZFNlY3Rpb25Db2x1bW5UZW1wbGF0ZSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgMTRyZW1cIiB9LFxyXG4gICAgICB9KTtcclxuICAgICAgLy8gdGhpcy5maWVsZHNDb2x1bW5zLnB1c2goXHJcbiAgICAgIC8vICAge1xyXG4gICAgICAvLyAgICAga2V5OiBcIkZpZWxkR3JvdXBcIixcclxuICAgICAgLy8gICAgIGRpc3BsYXk6IFwiU2V6aW9uZVwiLFxyXG4gICAgICAvLyAgICAgdHlwZTogVHlwZUNvbHVtbi5FeHRlcm5hbFRlbXBsYXRlLFxyXG4gICAgICAvLyAgICAgZXh0ZXJuYWxUZW1wbGF0ZTogdGhpcy5maWVsZFNlY3Rpb25Db2x1bW5UZW1wbGF0ZSxcclxuICAgICAgLy8gICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCAxNHJlbVwiIH1cclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hY3Rpb25CdXR0b25zQ29sdW1ucyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJhY3Rpb25cIixcclxuICAgICAgICBkaXNwbGF5OiBcIlwiLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uTWVudUFjdGlvbixcclxuICAgICAgICBidXR0b25NZW51SWNvbjogXCJtb3JlX3ZlcnRcIixcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgNiVcIiB9LFxyXG4gICAgICAgIGFjdGlvbnM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJNb2RpZmljYVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImVkaXRcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiB0aGlzLm9wZW5BY3Rpb25CdXR0b25EaWFsb2coZWxlbWVudCksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkVsaW1pbmFcIixcclxuICAgICAgICAgICAgaWNvbjogXCJkZWxldGVcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMuZGVsZXRlQWN0aW9uQnV0dG9uKGVsZW1lbnQpLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIF0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHsga2V5OiBcIkJ1dHRvbkxhYmVsXCIsIGRpc3BsYXk6IFwiRXRpY2hldHRhXCIsIHN0eWxlczogeyBmbGV4OiBcIjAgMCAzMCVcIiB9IH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiQnV0dG9uQ29kZVwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiQ29kaWNlXCIsXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDIwJVwiIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiSWNvblwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiSWNvbmFcIixcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgMTAlXCIgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJTaG93SW5cIixcclxuICAgICAgICBkaXNwbGF5OiBcIlNlemlvbmlcIixcclxuICAgICAgICB2YWx1ZTogKGVsKSA9PiB7XHJcbiAgICAgICAgICB2YXIgZmluYWxUZXh0ID0gXCJcIjtcclxuICAgICAgICAgIGlmIChlbC5TaG93SW4gPT0gbnVsbCB8fCBlbC5TaG93SW4ubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiTmVzc3VuYVwiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWwuU2hvd0luLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgIGZpbmFsVGV4dCArPSBBY3Rpb25GbGFnRW51bVtlbGVtZW50XSArIFwiIC8gXCI7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHJldHVybiBmaW5hbFRleHQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgMjAlXCIgfSxcclxuICAgICAgfSxcclxuICAgIF07XHJcblxyXG4gICAgdGhpcy5hY3Rpb25zT25SZWNvcmRDb2x1bW5zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcImFjdGlvblwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiXCIsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5NZW51QWN0aW9uLFxyXG4gICAgICAgIGJ1dHRvbk1lbnVJY29uOiBcIm1vcmVfdmVydFwiLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCA2JVwiIH0sXHJcbiAgICAgICAgYWN0aW9uczogW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIk1vZGlmaWNhXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZWRpdFwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMub3BlbkFjdGlvbk9uUmVjb3JkRGlhbG9nKGVsZW1lbnQpLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJFbGltaW5hXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZGVsZXRlXCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT5cclxuICAgICAgICAgICAgICB0aGlzLmRlbGV0ZUVsZW1lbnQoZWxlbWVudCwgXCJBY3Rpb25zT25SZWNvcmRcIiksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIlNwb3N0YSBzdVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImFycm93X3Vwd2FyZFwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlRWxlbWVudChlbGVtZW50LCB0cnVlLCBcIkFjdGlvbnNPblJlY29yZFwiKSxcclxuICAgICAgICAgICAgZGlzYWJsZWQ6IChlbGVtZW50KSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQuaW5kZXhPZihlbGVtZW50KSA9PT0gMCxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiU3Bvc3RhIGdpw7lcIixcclxuICAgICAgICAgICAgaWNvbjogXCJhcnJvd19kb3dud2FyZFwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlRWxlbWVudChlbGVtZW50LCBmYWxzZSwgXCJBY3Rpb25zT25SZWNvcmRcIiksXHJcbiAgICAgICAgICAgIGRpc2FibGVkOiAoZWxlbWVudCkgPT5cclxuICAgICAgICAgICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLmluZGV4T2YoZWxlbWVudCkgPj1cclxuICAgICAgICAgICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLmxlbmd0aCAtIDEsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHsga2V5OiBcIkljb25cIiwgZGlzcGxheTogXCJJY29uYVwiLCBzdHlsZXM6IHsgZmxleDogXCIgMCAwIDE1JVwiIH0gfSxcclxuICAgICAgeyBrZXk6IFwiTmFtZVwiLCBkaXNwbGF5OiBcIk5vbWVcIiwgc3R5bGVzOiB7IGZsZXg6IFwiIDAgMCAyMCVcIiB9IH0sXHJcbiAgICAgIHsga2V5OiBcIkFjdGlvblwiLCBkaXNwbGF5OiBcIkF6aW9uZVwiIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIHRoaXMudHJpZ2dlcnNDb2x1bW5zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcImFjdGlvblwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiXCIsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5NZW51QWN0aW9uLFxyXG4gICAgICAgIGJ1dHRvbk1lbnVJY29uOiBcIm1vcmVfdmVydFwiLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCA2JVwiIH0sXHJcbiAgICAgICAgYWN0aW9uczogW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIk1vZGlmaWNhXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZWRpdFwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMub3BlblRyaWdnZXJzRGlhbG9nKGVsZW1lbnQpLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJFbGltaW5hXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZGVsZXRlXCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT5cclxuICAgICAgICAgICAgICB0aGlzLmRlbGV0ZVRyaWdnZXIoZWxlbWVudCksXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXSxcclxuICAgICAgfSxcclxuICAgICAgeyBrZXk6IFwiZGVzY3JpcHRpb25cIiwgZGlzcGxheTogXCJEZXNjcml6aW9uZVwiLCBzdHlsZXM6IHsgZmxleDogXCIgMCAwIDE1JVwiIH0gfSxcclxuICAgICAgeyBrZXk6IFwiZXhlY3V0aW9uXCIsIGRpc3BsYXk6IFwiQ29zYSBlc2VndWVcIiwgc3R5bGVzOiB7IGZsZXg6IFwiIDAgMCAxNSVcIiB9IH0sXHJcbiAgICBdO1xyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWEgaWwgRm9ybUdyb3VwIHBlciBsJ29nZ2V0dG8gRm9ybVxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlRm9ybUZvcm0oKSB7XHJcbiAgICB0aGlzLmZvcm1Gb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgQ29kZTogW3RoaXMuZm9ybS5Db2RlXSxcclxuICAgICAgTmFtZTogW3RoaXMuZm9ybS5OYW1lLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgRGVzY3JpcHRpb246IFt0aGlzLmZvcm0uRGVzY3JpcHRpb25dLFxyXG4gICAgICBGb3JtU2NhbGFyVHlwZTogW3RoaXMuZm9ybS5Gb3JtU2NhbGFyVHlwZSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICB9KTtcclxuICAgIHRoaXMub25DaGFuZ2VGb3JtU2NhbGFyVHlwZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRHJhZyBhbmQgRHJvcCBkZWxsZSBjb2xvbm5lIGRlbCBmb3JtXHJcbiAgICovXHJcblxyXG4gIG9uRHJhZ1JlbGVhc2VkKGV2ZW50KSB7XHJcblxyXG4gIH1cclxuXHJcbiAgb25EcmFnRW5kZWQoZXZlbnQpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNldEZpZWxkT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgICAgIHRoaXMucmVsb2FkRmllbGRzVGFibGUoKTtcclxuICAgIH0sIDEwMDApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYSBpbCBGb3JtR3JvdXAgZXByIGwnYWdnaXVudGEgbyBsYSBtb2RpZmljYSBkaSB1bmEgYWN0aW9uIHN1aSByZWNvcmQgZGVsbGEgRm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZUFjdGlvbk9uUmVjb3JkRm9ybSgpIHtcclxuICAgIHRoaXMuYWN0aW9uT25SZWNvcmRGb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgTmFtZTogW3RoaXMuc2VsZWN0ZWRBY3Rpb24uTmFtZSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIEljb246IFt0aGlzLnNlbGVjdGVkQWN0aW9uLkljb24sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBBY3Rpb246IFt0aGlzLnNlbGVjdGVkQWN0aW9uLkFjdGlvbiwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoaXVkZSBpbCBkaWFsb2cgcGVyIGFnZ2l1bmdlcmUvbW9kaWZpY2FyZSB1biBGaWVsZCBzZW56YSBzYWx2YXJlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjbG9zZUZpZWxkRGlhbG9nKCkge1xyXG4gICAgaWYgKHRoaXMuZGlhbG9nRmllbGRSZWYgIT0gdW5kZWZpbmVkKSB0aGlzLmRpYWxvZ0ZpZWxkUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGdlc3RpcmUgbCdhcGVydHVyYSBkZWwgZGlhbG9nIHBlciBsYSBtb2RpZmljYSBkaSB1biBGaWVsZC5cclxuICAgKiBTZSBpbCBmaWVsZCDDqCBkaSB0aXBvIFwiRm9ybSBkaSBkZXR0YWdsaW9cIiBhcHJlIGlsIGRpYWxvZyBwZXIgbGEgbW9kaWZpY2EgZGkgdW5hXHJcbiAgICogSW5uZXJGb3JtIGFsdHJpbWVudGkgYXByZSBxdWVsbG8gcGVyIGxhIG1vZGlmaWNhIGRpIHVuIEZpZWxkLlxyXG4gICAqIEBwYXJhbSBmaWVsZCBDYW1wbyBkYSBtb2RpZmljYXJlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBlZGl0RmllbGQoZmllbGQ6IEJhc2VGaWVsZCkge1xyXG4gICAgaWYgKGZpZWxkLkZpZWxkVHlwZSAhPSBGaWVsZFR5cGVFbnVtW1wiRm9ybSBkaSBkZXR0YWdsaW9cIl0pIHtcclxuICAgICAgdGhpcy5vcGVuRmllbGREaWFsb2coZmllbGQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vcGVuSW5uZXJGb3JtRGlhbG9nKFxyXG4gICAgICAgIHRoaXMuZm9ybS5Jbm5lckZvcm1zLmZpbmQoKGYpID0+IGYuTmFtZSA9PSBmaWVsZC5MYWJlbClcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZ2VzdGlyZSBsYSBkdXBsaWNhemlvbmUgZGkgdW4gRmllbGQuXHJcbiAgICogQHBhcmFtIGZpZWxkIENhbXBvIGRhIG1vZGlmaWNhcmVcclxuICAgKi9cclxuICBwcml2YXRlIGR1cGxpY2F0ZUZpZWxkKGZpZWxkOiBCYXNlRmllbGQsIG9yZGluYWxQb3NpdGlvbiA9IG51bGwpIHtcclxuICAgIGlmIChmaWVsZC5GaWVsZFR5cGUgIT0gRmllbGRUeXBlRW51bVtcIkZvcm0gZGkgZGV0dGFnbGlvXCJdKSB7XHJcbiAgICAgIC8vIHJpY3JlbyBsJ29nZ2V0dG8gcGFzc2FuZG8gcGVyIHVuIGpzb25cclxuICAgICAgbGV0IGNsb25lRmllbGQ6IEJhc2VGaWVsZCA9IHRoaXMuc2FmZUNsb25lKGZpZWxkKTtcclxuXHJcbiAgICAgIGNsb25lRmllbGQuTGFiZWwgPSBmaWVsZFtcIkxhYmVsXCJdICsgXCJDb3B5XCI7XHJcbiAgICAgIGNsb25lRmllbGQuSUQgPSB0aGlzLmdlbmVyYXRlR1VJRCgpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmllbGQgPSBuZXcgQmFzZUZpZWxkKCk7XHJcbiAgICAgIGlmIChvcmRpbmFsUG9zaXRpb24gPT0gbnVsbCkge1xyXG4gICAgICAgIGNsb25lRmllbGQuT3JkaW5hbFBvc2l0aW9uID0gdGhpcy5mb3JtLkZpZWxkcy5sZW5ndGggKyAxO1xyXG4gICAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID0gbnVsbDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjbG9uZUZpZWxkLk9yZGluYWxQb3NpdGlvbiA9IG9yZGluYWxQb3NpdGlvbjtcclxuICAgICAgICB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA9IG9yZGluYWxQb3NpdGlvbjtcclxuICAgICAgICAvLyB1dGlsaXp6byBvcmRpbmFsIHBvc2l0aW9uIHBlciBpbmZpbGFyZSBpbCBjYW1wbyBjb3JyZXR0YW1ldG5lIG5lbGxhIGxpc3RhXHJcbiAgICAgICAgLy8gcGVyIGZhcmxvIHNlIG5vbiDDqCBudWxsbyBkZXZvIGNyZWFyZSBsbyBzcGF6aW9cclxuICAgICAgICB0aGlzLk9yZGluYXRlZEluc2VydEZpZWxkKGZpZWxkLCBvcmRpbmFsUG9zaXRpb24pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBjbG9uZUZpZWxkU3RydWN0dXJlID0geyBmaWVsZDogY2xvbmVGaWVsZCwgcmVvcGVuOiAwIH1cclxuICAgICAgdGhpcy5vblNhdmVGaWVsZChjbG9uZUZpZWxkU3RydWN0dXJlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGFsZXJ0KFwibm9uIMOoIHBvc3NpYmlsZSBkdXBsaWNhcmUgdW5hIGZvcm0gZGkgZGV0dGFnbGlvXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBPcmRpbmF0ZWRJbnNlcnRGaWVsZChmaWVsZDogQmFzZUZpZWxkLCBvcmRpbmFsUG9zaXRpb24gPSAwKSB7XHJcbiAgICB0aGlzLmZvcm0uRmllbGRzLnNwbGljZShvcmRpbmFsUG9zaXRpb24sIDAsIGZpZWxkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcG9zaXRpb25FeGNoYW5nZUZpZWxkcyhmaWVsZDE6IEJhc2VGaWVsZCwgZmllbGQyOiBCYXNlRmllbGQpIHtcclxuICAgIGNvbnN0IHRlbXAgPSBmaWVsZDE7XHJcbiAgICB0aGlzLmZvcm0uRmllbGRzW2ZpZWxkMS5PcmRpbmFsUG9zaXRpb25dID0gZmllbGQyO1xyXG4gICAgdGhpcy5mb3JtLkZpZWxkc1tmaWVsZDIuT3JkaW5hbFBvc2l0aW9uXSA9IHRlbXA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hlIGdlbmVyYSB1bmEgbnVvdmEgR1VJRFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2VuZXJhdGVHVUlEKCkge1xyXG4gICAgcmV0dXJuICd4eHh4LXh4eHgteHh4eC14eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMCxcclxuICAgICAgICB2ID0gYyA9PSAneCcgPyByIDogKHIgJiAweDMgfCAweDgpO1xyXG4gICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmltdW92ZXJlIHVuIEZpZWxkIGFsbCdpbnRlcm5vIGRpIHVuYSBGb3JtLlxyXG4gICAqIFJpY2hpZWRlIGNvbmZlcm1hIGFsbCd1dGVudGUgcHJpbWEgZGkgcmltdW92ZXJsby5cclxuICAgKiBAcGFyYW0gZmllbGQgQmFzZUZpZWxkIGRhIHJpbXVvdmVyZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZGVsZXRlRWxlbWVudChcclxuICAgIGVsZW1lbnQ6IEJhc2VGaWVsZCB8IEFjdGlvbk9uUmVjb3JkIHwgRm9ybSxcclxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nXHJcbiAgKSB7XHJcbiAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5Db25maXJtKFxyXG4gICAgICBcIkVsaW1pbmFyZSBsJ2VsZW1lbnRvIHNlbGV6aW9uYXRvP1wiLFxyXG4gICAgICAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5mb3JtW3Byb3BlcnR5TmFtZV0uc3BsaWNlKFxyXG4gICAgICAgICAgdGhpcy5mb3JtW3Byb3BlcnR5TmFtZV0uaW5kZXhPZihlbGVtZW50KSxcclxuICAgICAgICAgIDFcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT09IFwiRmllbGRzXCIpIHtcclxuICAgICAgICAgIHRoaXMuc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKTtcclxuICAgICAgICAgIHRoaXMucmVsb2FkRmllbGRzVGFibGUoKTtcclxuICAgICAgICAgIHRoaXMucmVmcmVzaFByZXZpZXcoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5TmFtZSA9PT0gXCJBY3Rpb25zT25SZWNvcmRcIikge1xyXG4gICAgICAgICAgdGhpcy5zZXRBY3Rpb25PcmRpbmFsUG9zaXRpb24oKTtcclxuICAgICAgICAgIHRoaXMucmVsb2FkQWN0aW9uc09uUmVjb3JkVGFibGUoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5TmFtZSA9PT0gXCJBY3Rpb25CdXR0b25zXCIpIHtcclxuICAgICAgICAgIHRoaXMuc2V0QWN0aW9uQnV0dG9uT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgICAgICAgICB0aGlzLnJlbG9hZEFjdGlvbkJ1dHRvbnNPblJlY29yZFRhYmxlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBmYWxzZSxcclxuICAgICAgXCJSaWNoaWVzdGEgY29uZmVybWFcIlxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgc3Bvc3RhcmUgdW4gY2FtcG8gYWxsJ2ludGVybm8gZGVsbGEgZm9ybS5cclxuICAgKiBAcGFyYW0gZmllbGQgT2dnZXR0byBkaSB0aXBvIEJhc2VGaWVsZCBkYSBzcG9zdGFyZS5cclxuICAgKiBAcGFyYW0gbW92ZVVwIFNlIFRSVUUgYWxsb3JhIHNwb3N0YSB2ZXJzbyBsJ2FsdG8gaWwgY2FtcG8gKGFiYmFzc2EgbCdpbmRpY2UpIGFsdHJpbWVudGkgaWwgY29udHJhcmlvLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgbW92ZUVsZW1lbnQoXHJcbiAgICBlbGVtZW50OiBCYXNlRmllbGQgfCBBY3Rpb25PblJlY29yZCxcclxuICAgIG1vdmVVcDogYm9vbGVhbixcclxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nXHJcbiAgKSB7XHJcbiAgICBjb25zdCBzdGFydGluZ0luZGV4ID0gdGhpcy5mb3JtW3Byb3BlcnR5TmFtZV0uaW5kZXhPZihlbGVtZW50KTtcclxuICAgIGNvbnN0IGVuZGluZ0luZGV4ID0gc3RhcnRpbmdJbmRleCArIChtb3ZlVXAgPyAtMSA6IDEpO1xyXG5cclxuICAgIHRoaXMuZm9ybVtwcm9wZXJ0eU5hbWVdLnNwbGljZShzdGFydGluZ0luZGV4LCAxKTtcclxuICAgIHRoaXMuZm9ybVtwcm9wZXJ0eU5hbWVdLnNwbGljZShlbmRpbmdJbmRleCwgMCwgZWxlbWVudCk7XHJcblxyXG4gICAgaWYgKHByb3BlcnR5TmFtZSA9PT0gXCJGaWVsZHNcIikge1xyXG4gICAgICB0aGlzLnNldEZpZWxkT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgICAgIHRoaXMucmVsb2FkRmllbGRzVGFibGUoKTtcclxuICAgIH0gZWxzZSBpZiAocHJvcGVydHlOYW1lID09PSBcIkFjdGlvbnNPblJlY29yZFwiKSB7XHJcbiAgICAgIHRoaXMuc2V0QWN0aW9uT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgICAgIHRoaXMucmVsb2FkQWN0aW9uc09uUmVjb3JkVGFibGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEltcG9zdGEgbCdvcmRpbmFtZW50byBkZWxsZSBzZXppb25pIGNoZSBjb21wb25nb25vIGxhIGZvcm0uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRGb3JtRmllbGRHcm91cE9yZGluYWxQb3NpdGlvbigpIHtcclxuICAgIHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzLmZvckVhY2goKGcsIGkpID0+IChnLk9yZGluYWxQb3NpdGlvbiA9IGkpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEltcG9zdGEgbCdvcmRpbmFtZW50byBkZWkgY2FtcGkgYWxsJ2ludGVybm8gZGVsbGEgZm9ybSBpbiBiYXNlIGFsbCdvcmRpbmUgY2hlIGwndXRlbnRlXHJcbiAgICogaGEgZGVmaW5pdG8gbmVsbGEgdGFiZWxsYSBpbiBjdWkgc29ubyBtb3N0cmF0aVxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtLkZpZWxkcykge1xyXG4gICAgICB0aGlzLmZvcm0uRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgZmllbGQuT3JkaW5hbFBvc2l0aW9uID0gdGhpcy5mb3JtLkZpZWxkcy5pbmRleE9mKGZpZWxkKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJpY2FyaWNhcmUgaSBkYXRpIGRlbGxhIHRhYmVsbGEgZGVpIGNhbXBpIGFnZ2l1bnRpIGluIHVuYSBmb3JtXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZWxvYWRGaWVsZHNUYWJsZSgpIHtcclxuICAgIGlmICh0aGlzLmZpZWxkc1RhYmxlKSB7XHJcbiAgICAgIHRoaXMuZmllbGRzVGFibGUucmVsb2FkRGF0YXRhYmxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbXBvc3RhIGwnb3JkaW5hbWVudG8gZGVpIGNhbXBpIGFsbCdpbnRlcm5vIGRlbGxhIGZvcm0gaW4gYmFzZSBhbGwnb3JkaW5lIGNoZSBsJ3V0ZW50ZVxyXG4gICAqIGhhIGRlZmluaXRvIG5lbGxhIHRhYmVsbGEgaW4gY3VpIHNvbm8gbW9zdHJhdGlcclxuICAgKi9cclxuICBwcml2YXRlIHNldEFjdGlvbk9yZGluYWxQb3NpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQuZm9yRWFjaCgoYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgYWN0aW9uLk9yZGluYWxQb3NpdGlvbiA9IHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQuaW5kZXhPZihhY3Rpb24pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEltcG9zdGEgbCdvcmRpbmFtZW50byBkZWkgY2FtcGkgYWxsJ2ludGVybm8gZGVsbGEgZm9ybSBpbiBiYXNlIGFsbCdvcmRpbmUgY2hlIGwndXRlbnRlXHJcbiAgICogaGEgZGVmaW5pdG8gbmVsbGEgdGFiZWxsYSBpbiBjdWkgc29ubyBtb3N0cmF0aVxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0QWN0aW9uQnV0dG9uT3JkaW5hbFBvc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zLmZvckVhY2goKGFjdGlvbikgPT4ge1xyXG4gICAgICAgIGFjdGlvbi5PcmRpbmFsUG9zaXRpb24gPSB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucy5pbmRleE9mKGFjdGlvbik7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaWNhcmljYXJlIGkgZGF0aSBkZWxsYSB0YWJlbGxhIGRlbGxlIGF6aW9uaSBhZ2dpdW50aXZlIHN1aSByZWNvcmQgZGVsbGEgRm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIHJlbG9hZEFjdGlvbnNPblJlY29yZFRhYmxlKCkge1xyXG4gICAgaWYgKHRoaXMuYWN0aW9uc09uUmVjb3JkVGFibGUpIHtcclxuICAgICAgdGhpcy5hY3Rpb25zT25SZWNvcmRUYWJsZS5yZWxvYWREYXRhdGFibGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmljYXJpY2FyZSBpIGRhdGkgZGVsbGEgdGFiZWxsYSBkZWxsZSBhemlvbmkgYWdnaXVudGl2ZSBzdWkgcmVjb3JkIGRlbGxhIEZvcm0uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZWxvYWRBY3Rpb25CdXR0b25zT25SZWNvcmRUYWJsZSgpIHtcclxuICAgIGlmICh0aGlzLmFjdGlvbkJ1dHRvbnNUYWJsZSkge1xyXG4gICAgICB0aGlzLmFjdGlvbkJ1dHRvbnNUYWJsZS5yZWxvYWREYXRhdGFibGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBvbkV4dGVybmFsQ29tcG9uZW50T3V0KGV2OiBldmVudE91dCkge1xyXG4gICAgdGhpcy5vdXQuZW1pdChldik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUUklHR0VSU1xyXG4gICAqL1xyXG5cclxuICBvcGVuVHJpZ2dlcnNEaWFsb2coZXY6IFRyaWdnZXIgPSBudWxsKSB7XHJcblxyXG4gICAgaWYgKGV2ICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRyaWdnZXIgPSBldjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmlnZ2VyID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRpYWxvZ1RyaWdnZXJzUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ1RyaWdnZXJzLCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBcIjc1JVwiLFxyXG4gICAgICBoZWlnaHQ6IFwiODAlXCIsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNhdmVUcmlnZ2VyKGVsZW1lbnQ6IFRyaWdnZXIpIHtcclxuXHJcbiAgICBpZiAoZWxlbWVudCAhPSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLmZvcm0uVHJpZ2dlcnMgIT0gbnVsbCkge1xyXG4gICAgICAgIHZhciBleGlzdHNUcmlnZ2VyID0gdGhpcy5mb3JtLlRyaWdnZXJzLmZpbmQoeCA9PiB4LkNJRCA9PSBlbGVtZW50LkNJRCk7XHJcbiAgICAgICAgaWYgKGV4aXN0c1RyaWdnZXIgPT0gbnVsbCkge1xyXG4gICAgICAgICAgLy8gTnVvdm8gdHJpZ2dlclxyXG4gICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzLnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGV4aXN0c1RyaWdnZXIgPSBlbGVtZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBuZXcgQXJyYXk8VHJpZ2dlcj4oKTtcclxuICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMucHVzaChlbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRyaWdnZXJzVGFibGUucmVsb2FkRGF0YXRhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kaWFsb2dUcmlnZ2Vyc1JlZi5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlVHJpZ2dlcihlbGVtZW50OiBUcmlnZ2VyKSB7XHJcbiAgICB2YXIgaW5kZXggPSB0aGlzLmZvcm0uVHJpZ2dlcnMuZmluZEluZGV4KHggPT4geC5DSUQgPT0gZWxlbWVudC5DSUQpO1xyXG4gICAgdGhpcy5mb3JtLlRyaWdnZXJzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB0aGlzLnRyaWdnZXJzVGFibGUucmVsb2FkRGF0YXRhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVBY3Rpb25CdXR0b24oZWxlbWVudDogQWN0aW9uQnV0dG9uKSB7XHJcbiAgICB2YXIgaW5kZXggPSB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucy5maW5kSW5kZXgoeCA9PiB4LkJ1dHRvbkNvZGUgPT0gZWxlbWVudC5CdXR0b25Db2RlKTtcclxuICAgIHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB0aGlzLmFjdGlvbkJ1dHRvbnNUYWJsZS5yZWxvYWREYXRhdGFibGUoKTtcclxuICB9XHJcblxyXG4gIG9wZW5BaUVkaXREaWFsb2coKSB7XHJcbiAgICB0aGlzLmFpRWRpdFByb21wdCA9IFwiXCI7XHJcbiAgICB0aGlzLmFpRWRpdEF0dGFjaG1lbnRzID0gW107XHJcbiAgICB0aGlzLmFpRWRpdEF1dG9zYXZlID0gZmFsc2U7XHJcbiAgICB0aGlzLmFpRWRpdExvYWRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0FpUHJvbXB0SGlzdG9yeSA9IHRydWU7XHJcbiAgICB0aGlzLmRpYWxvZ0FpRWRpdFJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dBaUVkaXQsIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgd2lkdGg6IFwiNjAlXCIsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsb3NlQWlFZGl0RGlhbG9nKCkge1xyXG4gICAgdGhpcy5kaWFsb2dBaUVkaXRSZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIG9uQWlFZGl0Rm9yRmllbGQoZmllbGRDb2RlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuYWlFZGl0RmllbGRDb250ZXh0ID0geyBjb2RlOiBmaWVsZENvZGUgfTtcclxuICAgIHRoaXMub3BlbkFpRWRpdERpYWxvZygpO1xyXG4gIH1cclxuXHJcbiAgb25BaUdyYXBoaWNTdWdnZXN0KGRhdGE6IHsgY29kZTogc3RyaW5nOyBoaW50OiBzdHJpbmcgfSk6IHZvaWQge1xyXG4gICAgY29uc3QgcmF3SGludCA9IGRhdGEuaGludD8udHJpbSgpID8/ICcnO1xyXG4gICAgY29uc3QgZmllbGRMYWJlbCA9IGRhdGEuY29kZT8udHJpbSgpIHx8ICdfY2FtcG9zZW56YW5vbWVfJztcclxuXHJcbiAgICBpZiAoIXRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uPy5Gb3Jtcz8uU3BlZWNoVG9HcmFwaGljc0VuZFBvaW50KSB7XHJcbiAgICAgIC8vIEZhbGxiYWNrOiBwYXNzYSBpbCByYXdIaW50IG5lbGwnaW5qZWN0ZWRQcm9tcHQ7IHNlbmRBaUVkaXQgZXN0cmFycsOgIGlsIG1vZGVsbG8gZGEgZXNzb1xyXG4gICAgICBjb25zdCBpbmplY3RlZFByb21wdCA9IHJhd0hpbnRcclxuICAgICAgICA/IGBWb2dsaW8gbW9kaWZpY2FyZSBpbiBtYW5pZXJhIGNvbXBsZXRhIGxhIGdyYWZpY2EgZGVsIGNhbXBvICcke2ZpZWxkTGFiZWx9JyBzZWd1ZW5kbyBpbiBtYW5pZXJhIGluY29udGVzdGFiaWxlIHF1ZXN0YSBpbmRpY2F6aW9uZTogJyR7cmF3SGludH0nYFxyXG4gICAgICAgIDogYFZvZ2xpbyBtb2RpZmljYXJlIGluIG1hbmllcmEgY29tcGxldGEgbGEgZ3JhZmljYSBkZWwgY2FtcG8gJyR7ZmllbGRMYWJlbH0nIGNvbiB1bm8gc3RpbGUgY3JlYXRpdm8gZSBvcmlnaW5hbGUgYSB0dWEgc2NlbHRhYDtcclxuICAgICAgdGhpcy5haUVkaXRGaWVsZENvbnRleHQgPSB7IGNvZGU6IGRhdGEuY29kZSB9O1xyXG4gICAgICB0aGlzLmFpRmllbGRTdWdnZXN0TG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2VuZEFpRWRpdChpbmplY3RlZFByb21wdCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB7IGNsZWFuVGV4dDogaGludCwgbW9kZWxJZDogYWlNb2RlbElkIH0gPSB0aGlzLmV4dHJhY3RNb2RlbEZyb21UZXh0KHJhd0hpbnQpO1xyXG5cclxuICAgIC8vIFRyb3ZhIGlsIGNhbXBvOiBnacOgIHNhbHZhdG8gbmVsIGZvcm0gb3BwdXJlIG51b3ZvIGFuY29yYSBuZWwgZGlhbG9nXHJcbiAgICBjb25zdCBmaWVsZEluRm9ybSA9IHRoaXMuZm9ybT8uRmllbGRzPy5maW5kKGYgPT4gZi5MYWJlbCA9PT0gZmllbGRMYWJlbCkgPz8gbnVsbDtcclxuICAgIGNvbnN0IGN1cnJlbnRGaWVsZCA9IGZpZWxkSW5Gb3JtID8/IHRoaXMuc2VsZWN0ZWRGaWVsZDtcclxuICAgIGlmICghY3VycmVudEZpZWxkKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5haUZpZWxkU3VnZ2VzdExvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIC8vIFN0ZXNzbyBwYXlsb2FkIGRpIG9uRm9ybUdyYXBoaWNTdWdnZXN0LCBtYSBGaWVsZHMgY29uIHNvbG8gaWwgY2FtcG8gY29ycmVudGVcclxuICAgIGNvbnN0IGdyYXBoaWNzUGFyYW1zOiBFbmRQb2ludERhdGFQYXJhbXNbXSA9IFtcclxuICAgICAgeyBQYXJhbU5hbWU6ICdOYW1lJywgUGFyYW1WYWx1ZTogdGhpcy5mb3JtPy5OYW1lID8/IGZpZWxkTGFiZWwsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVsnSW4gQm9keSddIH0sXHJcbiAgICAgIHsgUGFyYW1OYW1lOiAnRGVzY3JpcHRpb24nLCBQYXJhbVZhbHVlOiB0aGlzLmZvcm0/LkRlc2NyaXB0aW9uID8/IG51bGwsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVsnSW4gQm9keSddIH0sXHJcbiAgICAgIHsgUGFyYW1OYW1lOiAnVGhlbWVDU1MnLCBQYXJhbVZhbHVlOiB0aGlzLmZvcm0/LlRoZW1lQ1NTID8/IG51bGwsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVsnSW4gQm9keSddIH0sXHJcbiAgICAgIHsgUGFyYW1OYW1lOiAnVGl0bGVDU1MnLCBQYXJhbVZhbHVlOiB0aGlzLmZvcm0/LlRpdGxlQ1NTID8/IG51bGwsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVsnSW4gQm9keSddIH0sXHJcbiAgICAgIHsgUGFyYW1OYW1lOiAnRmllbGRzJywgUGFyYW1WYWx1ZTogW3sgTGFiZWw6IGN1cnJlbnRGaWVsZC5MYWJlbCwgRmllbGRUeXBlOiBjdXJyZW50RmllbGQuRmllbGRUeXBlIH1dLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bJ0luIEJvZHknXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogJ0hpbnQnLCBQYXJhbVZhbHVlOiBoaW50IHx8IHRoaXMuYnVpbGRSYW5kb21HcmFwaGljSGludCgpLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bJ0luIEJvZHknXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogJ01vZGVsSWQnLCBQYXJhbVZhbHVlOiBhaU1vZGVsSWQsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVsnSW4gQm9keSddIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5TcGVlY2hUb0dyYXBoaWNzRW5kUG9pbnQsXHJcbiAgICAgIGdyYXBoaWNzUGFyYW1zLFxyXG4gICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmFpRmllbGRTdWdnZXN0TG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBjb25zdCByID0gcmVzIGFzIHsgRmllbGRTdHlsZXM/OiB7IFtjc3NDbGFzc05hbWU6IHN0cmluZ106IHsgW3Byb3A6IHN0cmluZ106IHN0cmluZyB9IH07IFdhcm5pbmdzPzogc3RyaW5nW10gfTtcclxuXHJcbiAgICAgICAgLy8gQXBwbGljYSBGaWVsZFN0eWxlcyBzb2xvIGFsIGNhbXBvIHRhcmdldCAobm9uIGEgdHV0dG8gaWwgZm9ybSlcclxuICAgICAgICBpZiAoci5GaWVsZFN0eWxlcykge1xyXG4gICAgICAgICAgY29uc3QgY3NzQ2xhc3NOYW1lID0gKEVxcER5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb21wb25lbnQuRklFTERfVFlQRV9DU1NfQ0xBU1MgYXMgYW55KVtjdXJyZW50RmllbGQuRmllbGRUeXBlXTtcclxuICAgICAgICAgIGlmIChjc3NDbGFzc05hbWUgJiYgci5GaWVsZFN0eWxlc1tjc3NDbGFzc05hbWVdICYmIHR5cGVvZiByLkZpZWxkU3R5bGVzW2Nzc0NsYXNzTmFtZV0gPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIChjdXJyZW50RmllbGQgYXMgYW55KVtjc3NDbGFzc05hbWVdID0gci5GaWVsZFN0eWxlc1tjc3NDbGFzc05hbWVdO1xyXG4gICAgICAgICAgICBpZiAoZmllbGRJbkZvcm0pIChmaWVsZEluRm9ybSBhcyBhbnkpW2Nzc0NsYXNzTmFtZV0gPSByLkZpZWxkU3R5bGVzW2Nzc0NsYXNzTmFtZV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBBZ2dpb3JuYSBzZWxlY3RlZEZpZWxkIHBlciBpbCBkaWFsb2dcclxuICAgICAgICBjb25zdCBhcHBseVRhcmdldCA9IGZpZWxkSW5Gb3JtID8/IGN1cnJlbnRGaWVsZDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRmllbGQgPSB0aGlzLnNhZmVDbG9uZShhcHBseVRhcmdldCk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkLkZvcm11bGEgPSBhcHBseVRhcmdldC5Gb3JtdWxhO1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmllbGQuQW5zd2VyU3R5bGUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkLkFuc3dlclN0eWxlID0geyBJbkxpc3RWaWV3OiB0cnVlLCBWaXNpYmxlSWY6IG51bGwsIEZpZWxkc3R5bGVDU1M6ICcnLCBMYWJlbHN0eWxlQ1NTOiAnJywgQ29sU3BhblNpemVzOiBbXSwgSW52aXNpYmlsaXR5OiBGaWVsZEludmlzaWJpbGl0eUVudW0uTkFTQ09TVE8gfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpZWxkSW5Gb3JtKSB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA9IHRoaXMuZm9ybS5GaWVsZHMuaW5kZXhPZihmaWVsZEluRm9ybSk7XHJcblxyXG4gICAgICAgIC8vIFJpYXByaSBpbCBkaWFsb2cgY2FtcG8gKHNhbHZvIFZpc3VhbCBFZGl0b3IgZ3JhcGhpYyBzdWdnZXN0IG1vZGUpXHJcbiAgICAgICAgaWYgKCF0aGlzLnZlR3JhcGhpY1N1Z2dlc3RBY3RpdmUpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmRpYWxvZ0ZpZWxkUmVmKSB0aGlzLmRpYWxvZ0ZpZWxkUmVmLmNsb3NlKCk7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ0ZpZWxkUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0ZpZWxkLCB7XHJcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSwgaGFzQmFja2Ryb3A6IHRydWUsIHdpZHRoOiAnNzUlJywgaGVpZ2h0OiAnODAlJyxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQWdnaW9ybmEgcHJldmlldyBzZSBlcmEgYXBlcnRhXHJcbiAgICAgICAgY29uc3Qgd2FzT25QcmV2aWV3ID0gdGhpcy5mb3JtQ29tcGxldGVkO1xyXG4gICAgICAgIGlmICh3YXNPblByZXZpZXcpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybUNvbXBsZXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5wcmV2aWV3Rm9ybSA9IG51bGw7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2V0Rm9ybVN0YXR1cyh0cnVlKSwgNTApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgdGhpcy52ZUdyYXBoaWNTdWdnZXN0QWN0aXZlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLlN1Y2Nlc3MoJ0dyYWZpY2EgY2FtcG8gYXBwbGljYXRhIScpO1xyXG4gICAgICAgIGlmIChyLldhcm5pbmdzPy5sZW5ndGggPiAwKSBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5XYXJuaW5nKHIuV2FybmluZ3MpO1xyXG4gICAgICB9LFxyXG4gICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICB0aGlzLmFpRmllbGRTdWdnZXN0TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudmVHcmFwaGljU3VnZ2VzdEFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IG1zZyA9IChlcnJvciBhcyBhbnkpPy5lcnJvcjtcclxuICAgICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5FcnJvcih0eXBlb2YgbXNnID09PSAnc3RyaW5nJyAmJiBtc2cudHJpbSgpID8gbXNnIDogJ0Vycm9yZSBuZWxsYSBnZW5lcmF6aW9uZSBkZWxsYSBncmFmaWNhIGRlbCBjYW1wbycpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgb25BaUVkaXRGaWxlQ2hhbmdlKGV2ZW50OiBFdmVudCkge1xyXG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgIGlmICghaW5wdXQuZmlsZXM/Lmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgQXJyYXkuZnJvbShpbnB1dC5maWxlcykuZm9yRWFjaChmaWxlID0+IHtcclxuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICBjb25zdCBiYXNlNjQgPSAocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpLnNwbGl0KCcsJylbMV07XHJcbiAgICAgICAgdGhpcy5haUVkaXRBdHRhY2htZW50cy5wdXNoKHsgZmlsZU5hbWU6IGZpbGUubmFtZSwgYmFzZTY0Q29udGVudDogYmFzZTY0LCBtZWRpYVR5cGU6IGZpbGUudHlwZSB9KTtcclxuICAgICAgfTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICB9KTtcclxuICAgIGlucHV0LnZhbHVlID0gJyc7XHJcbiAgfVxyXG5cclxuICByZW1vdmVBaUVkaXRBdHRhY2htZW50KGluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMuYWlFZGl0QXR0YWNobWVudHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICB9XHJcblxyXG4gIHNlbmRBaUVkaXQoZGlyZWN0UHJvbXB0Pzogc3RyaW5nKSB7XHJcbiAgICBjb25zdCB1c2VyUHJvbXB0UmF3ID0gZGlyZWN0UHJvbXB0ID8/IHRoaXMuYWlFZGl0UHJvbXB0O1xyXG4gICAgaWYgKCF1c2VyUHJvbXB0UmF3Py50cmltKCkpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmFpRWRpdExvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIC8vIEFnZ2lvcm5hIGxvIHN0b3JpY28gcHJvbXB0IHByaW1hIGRpIGludmlhcmVcclxuICAgIGNvbnN0IGN1cnJlbnRIaXN0b3J5OiBzdHJpbmdbXSA9IHRoaXMuZm9ybT8uQUlQcm9tcHRzID8gSlNPTi5wYXJzZSh0aGlzLmZvcm0uQUlQcm9tcHRzKSA6IFtdO1xyXG4gICAgY3VycmVudEhpc3RvcnkucHVzaCh1c2VyUHJvbXB0UmF3LnRyaW0oKSk7XHJcbiAgICBjb25zdCB1cGRhdGVkUHJvbXB0c0pzb24gPSBKU09OLnN0cmluZ2lmeShjdXJyZW50SGlzdG9yeSk7XHJcblxyXG4gICAgLy8gSW4gZmllbGQtY29udGV4dCBtb2RlIChkaWFsb2cgQUkgbyBncmFwaGljIHN1Z2dlc3QpOiBwcmVuZGkgaWwgY2FtcG8gZGFsbGEgbW9kYWxlXHJcbiAgICBsZXQgZmllbGRDbG9uZUZvclNlbmQ6IEJhc2VGaWVsZCB8IG51bGwgPSBudWxsO1xyXG4gICAgbGV0IGZpZWxkQ29kZUZvclJlZnJlc2g6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgbGV0IGlzTmV3VW5zYXZlZEZpZWxkID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMuYWlFZGl0RmllbGRDb250ZXh0ICE9PSBudWxsKSB7XHJcbiAgICAgIGZpZWxkQ2xvbmVGb3JTZW5kID0gdGhpcy5zYWZlQ2xvbmUodGhpcy5zZWxlY3RlZEZpZWxkKTtcclxuICAgICAgaWYgKCFmaWVsZENsb25lRm9yU2VuZC5MYWJlbD8udHJpbSgpKSB7XHJcbiAgICAgICAgZmllbGRDbG9uZUZvclNlbmQuTGFiZWwgPSAnX2NhbXBvc2VuemFub21lXyc7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFmaWVsZENsb25lRm9yU2VuZC5GaWVsZFR5cGUpIHtcclxuICAgICAgICBmaWVsZENsb25lRm9yU2VuZC5GaWVsZFR5cGUgPSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gZGkgdGVzdG9cIl07XHJcbiAgICAgIH1cclxuICAgICAgZmllbGRDb2RlRm9yUmVmcmVzaCA9IGZpZWxkQ2xvbmVGb3JTZW5kLkxhYmVsO1xyXG4gICAgICBpc05ld1Vuc2F2ZWRGaWVsZCA9ICEodGhpcy5mb3JtPy5GaWVsZHM/LnNvbWUoZiA9PiBmLkxhYmVsID09PSBmaWVsZENvZGVGb3JSZWZyZXNoKSA/PyBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSW5pZXppb25lIGNvbnRlc3R1YWxlOiBpbiBtb2RhbGl0w6AgZGlhbG9nIChubyBkaXJlY3RQcm9tcHQpIHNpIHByZXBlbmRlIGlsIGNvbnRlc3RvIGRlbCBjYW1wb1xyXG4gICAgbGV0IHNwZWVjaFRleHQgPSB1c2VyUHJvbXB0UmF3O1xyXG4gICAgaWYgKGRpcmVjdFByb21wdCA9PT0gdW5kZWZpbmVkICYmIHRoaXMuYWlFZGl0RmllbGRDb250ZXh0KSB7XHJcbiAgICAgIHNwZWVjaFRleHQgPSBgVm9nbGlvIG1vZGlmaWNhcmUgaWwgY2FtcG8gJyR7ZmllbGRDb2RlRm9yUmVmcmVzaCA/PyB0aGlzLmFpRWRpdEZpZWxkQ29udGV4dC5jb2RlfScsIGRpIHNlZ3VpdG8gdGkgZMOyIGxlIGlzdHJ1emlvbmkuIFNlIHF1ZWxsbyBjaGUgdGkgc2NyaXZvIG5vbiByaWd1YXJkYSBsYSBtb2RpZmljYSBkZWwgY2FtcG8sIGNvbnNpZGVyYSB0dXR0byBjb21lIGluY29lcmVudGUuICR7dXNlclByb21wdFJhd31gO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWlFZGl0RmllbGRDb250ZXh0ID0gbnVsbDtcclxuXHJcbiAgICAvLyBFc3RyYWUgaWwgbW9kZWxsbyBBSSBkYWwgdGVzdG8gKGVzLiBcIlVzYSBTb25uZXRcIikgZSBwdWxpc2NlIGlsIHByb21wdCBwcmltYSBkaSBpbnZpYXJsb1xyXG4gICAgY29uc3QgeyBjbGVhblRleHQ6IGNsZWFuU3BlZWNoVGV4dCwgbW9kZWxJZDogYWlNb2RlbElkIH0gPSB0aGlzLmV4dHJhY3RNb2RlbEZyb21UZXh0KHNwZWVjaFRleHQpO1xyXG4gICAgc3BlZWNoVGV4dCA9IGNsZWFuU3BlZWNoVGV4dDtcclxuXHJcbiAgICAvLyBQcmVwYXJhIGlsIGZvcm0gY29tZSBpbiBzYXZlRm9ybTogRmllbGRzIOKGkiBPYmplY3RGaWVsZHNcclxuICAgIGNvbnN0IGZvcm1Ub1NlbmQgPSB0aGlzLnNhZmVDbG9uZSh0aGlzLmZvcm0pO1xyXG4gICAgZm9ybVRvU2VuZC5BSVByb21wdHMgPSB1cGRhdGVkUHJvbXB0c0pzb247XHJcbiAgICBmb3JtVG9TZW5kLk9iamVjdEZpZWxkcyA9IFtdO1xyXG4gICAgZm9ybVRvU2VuZC5PYmplY3RGbGRFeHRyYUNvbmZpZ1ZhbHVlcyA9IFtdO1xyXG5cclxuICAgIGlmIChmb3JtVG9TZW5kLkZsZEV4dHJhQ29uZmlnVmFsdWVzICE9IG51bGwpIHtcclxuICAgICAgZm9ybVRvU2VuZC5PYmplY3RGbGRFeHRyYUNvbmZpZ1ZhbHVlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZm9ybVRvU2VuZC5GbGRFeHRyYUNvbmZpZ1ZhbHVlcykpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEluIGZpZWxkLWNvbnRleHQ6IHNvc3RpdHVpc2NlIChtb2RpZmljYSkgbyBhZ2dpdW5nZSAobnVvdm8gY2FtcG8pIGlsIGNhbXBvIGNvbiBpbCBjb250ZW51dG8gY29ycmVudGUgZGVsbGEgbW9kYWxlXHJcbiAgICBpZiAoZmllbGRDbG9uZUZvclNlbmQpIHtcclxuICAgICAgaWYgKCFmb3JtVG9TZW5kLkZpZWxkcykgZm9ybVRvU2VuZC5GaWVsZHMgPSBbXTtcclxuICAgICAgZm9ybVRvU2VuZC5GaWVsZHMgPSBmb3JtVG9TZW5kLkZpZWxkcy5maWx0ZXIoZiA9PiBmLkxhYmVsICE9PSBmaWVsZENvZGVGb3JSZWZyZXNoKTtcclxuICAgICAgZm9ybVRvU2VuZC5GaWVsZHMucHVzaChmaWVsZENsb25lRm9yU2VuZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZvcm1Ub1NlbmQuRmllbGRzKSB7XHJcbiAgICAgIGZvcm1Ub1NlbmQuRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgaWYgKGZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtLkFsbGVnYXRvKSB7XHJcbiAgICAgICAgICBjb25zdCBmbGRBOiBhbnkgPSBmaWVsZDtcclxuICAgICAgICAgIGZsZEEuTWV0YWRhdGFPYmplY3RGaWVsZHMgPSBmbGRBLk1ldGFkYXRhRmllbGRzO1xyXG4gICAgICAgICAgZmxkQS5NZXRhZGF0YUZpZWxkcyA9IFtdO1xyXG4gICAgICAgICAgZmxkQS5EYXRhR2V0dGVyVmFsdWVCYXNlNjRTdHJpbmcgPSBidG9hKEpTT04uc3RyaW5naWZ5KGZsZEEuRGF0YUdldHRlciA/PyB7fSkpO1xyXG4gICAgICAgICAgZmxkQS5EYXRhR2V0dGVyID0gbnVsbDtcclxuICAgICAgICAgIGZvcm1Ub1NlbmQuT2JqZWN0RmllbGRzLnB1c2goZmxkQSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGZpZWxkLkRhdGFHZXR0ZXJWYWx1ZUJhc2U2NFN0cmluZyA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkoZmllbGQuRGF0YUdldHRlciA/PyB7fSkpO1xyXG4gICAgICAgICAgZmllbGQuRGF0YUdldHRlciA9IG51bGw7XHJcbiAgICAgICAgICBmb3JtVG9TZW5kLk9iamVjdEZpZWxkcy5wdXNoKGZpZWxkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZm9ybVRvU2VuZC5GaWVsZHMgPSBudWxsO1xyXG4gICAgZm9ybVRvU2VuZC5PYmplY3RUcmlnZ2VycyA9IEpTT04uc3RyaW5naWZ5KGZvcm1Ub1NlbmQuVHJpZ2dlcnMgPz8gW10pO1xyXG4gICAgZm9ybVRvU2VuZC5UcmlnZ2VycyA9IG51bGw7XHJcbiAgICBmb3JtVG9TZW5kLk9iamVjdEFjdGlvbkJ1dHRvbnMgPSBKU09OLnN0cmluZ2lmeShmb3JtVG9TZW5kLkFjdGlvbkJ1dHRvbnMgPz8gW10pO1xyXG4gICAgZm9ybVRvU2VuZC5BY3Rpb25CdXR0b25zID0gbnVsbDtcclxuXHJcbiAgICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICB7IFBhcmFtTmFtZTogXCJGb3JtXCIsIFBhcmFtVmFsdWU6IGZvcm1Ub1NlbmQsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIkluIEJvZHlcIl0gfSxcclxuICAgICAgeyBQYXJhbU5hbWU6IFwiU3BlZWNoVGV4dFwiLCBQYXJhbVZhbHVlOiBzcGVlY2hUZXh0LCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJJbiBCb2R5XCJdIH0sXHJcbiAgICAgIHsgUGFyYW1OYW1lOiBcIk9yZ2FJRFwiLCBQYXJhbVZhbHVlOiBwYXJzZUludCh0aGlzLm9yZ2FJRCkgfHwgMCwgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiSW4gQm9keVwiXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogXCJNb2RpZnlVc2VyXCIsIFBhcmFtVmFsdWU6IHRoaXMuVXNlcklELCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJJbiBCb2R5XCJdIH0sXHJcbiAgICAgIHsgUGFyYW1OYW1lOiBcIkF1dG9zYXZlXCIsIFBhcmFtVmFsdWU6IHRoaXMuYWlFZGl0QXV0b3NhdmUsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIkluIEJvZHlcIl0gfSxcclxuICAgICAgeyBQYXJhbU5hbWU6IFwiQXR0YWNobWVudHNcIiwgUGFyYW1WYWx1ZTogdGhpcy5haUVkaXRBdHRhY2htZW50cy5tYXAoYSA9PiAoeyBGaWxlTmFtZTogYS5maWxlTmFtZSwgQmFzZTY0Q29udGVudDogYS5iYXNlNjRDb250ZW50LCBNZWRpYVR5cGU6IGEubWVkaWFUeXBlIH0pKSwgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiSW4gQm9keVwiXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogXCJUcmlnZ2VyRGVmaW5pdGlvbnNcIiwgUGFyYW1WYWx1ZTogdGhpcy50cmlnZ2VycyA/PyBudWxsLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJJbiBCb2R5XCJdIH0sXHJcbiAgICAgIHsgUGFyYW1OYW1lOiBcIkFjdGlvbkJ1dHRvbkRlZmluaXRpb25zXCIsIFBhcmFtVmFsdWU6IHRoaXMuYWN0aW9uQnV0dG9ucyA/PyBudWxsLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJJbiBCb2R5XCJdIH0sXHJcbiAgICAgIHsgUGFyYW1OYW1lOiBcIk1vZGVsSWRcIiwgUGFyYW1WYWx1ZTogYWlNb2RlbElkLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJJbiBCb2R5XCJdIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5TcGVlY2hUb0Zvcm1FZGl0RW5kUG9pbnQsXHJcbiAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgIChyZXM6IHsgRm9ybTogRm9ybSwgV2FybmluZ3M6IHN0cmluZ1tdLCBDb3N0Q2VudHM6IG51bWJlciwgRWxhcHNlZE1zOiBudW1iZXIgfSkgPT4ge1xyXG4gICAgICAgIHRoaXMuYWlFZGl0TG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAoZGlyZWN0UHJvbXB0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHRoaXMuY2xvc2VBaUVkaXREaWFsb2coKTtcclxuXHJcbiAgICAgICAgICBpZiAoaXNOZXdVbnNhdmVkRmllbGQpIHtcclxuICAgICAgICAgICAgLy8gQ2FtcG8gbnVvdm8gbm9uIHNhbHZhdG86IGVsYWJvcmEgaWwgZm9ybSB0b3JuYXRvIGUgcmlhcHJpIGlsIGRpYWxvZyBjYW1wbyBjb24gaSB2YWxvcmkgYWdnaW9ybmF0aVxyXG4gICAgICAgICAgICB0aGlzLnNldEZvcm1BbmRDb25maWd1cmUocmVzLkZvcm0pO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtKSB0aGlzLmZvcm0uQUlQcm9tcHRzID0gdXBkYXRlZFByb21wdHNKc29uO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdXBkYXRlZEZpZWxkSWR4ID0gdGhpcy5mb3JtPy5GaWVsZHM/LmZpbmRJbmRleChmID0+IGYuTGFiZWwgPT09IGZpZWxkQ29kZUZvclJlZnJlc2gpID8/IC0xO1xyXG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkRmllbGQgPSB1cGRhdGVkRmllbGRJZHggPj0gMCA/IHRoaXMuZm9ybS5GaWVsZHNbdXBkYXRlZEZpZWxkSWR4XSA6IG51bGw7XHJcbiAgICAgICAgICAgIGlmICh1cGRhdGVkRmllbGQgJiYgdGhpcy5mb3JtPy5GaWVsZHMpIHtcclxuICAgICAgICAgICAgICB0aGlzLmZvcm0uRmllbGRzLnNwbGljZSh1cGRhdGVkRmllbGRJZHgsIDEpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKTtcclxuICAgICAgICAgICAgICB0aGlzLnJlbG9hZEZpZWxkc1RhYmxlKCk7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID0gbnVsbDtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmllbGQgPSB0aGlzLnNhZmVDbG9uZSh1cGRhdGVkRmllbGQpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWVsZC5Gb3JtdWxhID0gdXBkYXRlZEZpZWxkLkZvcm11bGE7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRGaWVsZC5BbnN3ZXJTdHlsZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmllbGQuQW5zd2VyU3R5bGUgPSB7IEluTGlzdFZpZXc6IHRydWUsIFZpc2libGVJZjogbnVsbCwgRmllbGRzdHlsZUNTUzogJycsIExhYmVsc3R5bGVDU1M6ICcnLCBDb2xTcGFuU2l6ZXM6IFtdLCBJbnZpc2liaWxpdHk6IEZpZWxkSW52aXNpYmlsaXR5RW51bS5OQVNDT1NUTyB9O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAodGhpcy5kaWFsb2dGaWVsZFJlZikgdGhpcy5kaWFsb2dGaWVsZFJlZi5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZGlhbG9nRmllbGRSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nRmllbGQsIHtcclxuICAgICAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSwgaGFzQmFja2Ryb3A6IHRydWUsIHdpZHRoOiAnNzUlJywgaGVpZ2h0OiAnODAlJyxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gQ2FtcG8gZ2nDoCBlc2lzdGVudGUgbyBuZXNzdW4gY29udGVzdG8gY2FtcG9cclxuICAgICAgICAgICAgY29uc3Qgd2FzT25QcmV2aWV3ID0gdGhpcy5mb3JtQ29tcGxldGVkO1xyXG4gICAgICAgICAgICBpZiAod2FzT25QcmV2aWV3KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtQ29tcGxldGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3Rm9ybSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZXRGb3JtQW5kQ29uZmlndXJlKHJlcy5Gb3JtKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybSkgdGhpcy5mb3JtLkFJUHJvbXB0cyA9IHVwZGF0ZWRQcm9tcHRzSnNvbjtcclxuXHJcbiAgICAgICAgICAgIC8vIFNlIGMnZXJhIHVuIGNvbnRlc3RvIGNhbXBvLCBhZ2dpb3JuYSBzZWxlY3RlZEZpZWxkIGUgcmlhcHJpIGlsIGRpYWxvZ1xyXG4gICAgICAgICAgICAvLyBwZXIgcmlmbGV0dGVyZSBsZSBtb2RpZmljaGUgQUkgKGVzLiBUZXh0RmllbGRTdHlsZUNTUykgbmVsbCdlZGl0b3JcclxuICAgICAgICAgICAgaWYgKGZpZWxkQ29kZUZvclJlZnJlc2ggJiYgdGhpcy5mb3JtPy5GaWVsZHMpIHtcclxuICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkRmllbGQgPSB0aGlzLmZvcm0uRmllbGRzLmZpbmQoZiA9PiBmLkxhYmVsID09PSBmaWVsZENvZGVGb3JSZWZyZXNoKTtcclxuICAgICAgICAgICAgICBpZiAodXBkYXRlZEZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA9IHRoaXMuZm9ybS5GaWVsZHMuaW5kZXhPZih1cGRhdGVkRmllbGQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkID0gdGhpcy5zYWZlQ2xvbmUodXBkYXRlZEZpZWxkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWVsZC5Gb3JtdWxhID0gdXBkYXRlZEZpZWxkLkZvcm11bGE7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEZpZWxkLkFuc3dlclN0eWxlID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkLkFuc3dlclN0eWxlID0geyBJbkxpc3RWaWV3OiB0cnVlLCBWaXNpYmxlSWY6IG51bGwsIEZpZWxkc3R5bGVDU1M6ICcnLCBMYWJlbHN0eWxlQ1NTOiAnJywgQ29sU3BhblNpemVzOiBbXSwgSW52aXNpYmlsaXR5OiBGaWVsZEludmlzaWJpbGl0eUVudW0uTkFTQ09TVE8gfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRpYWxvZ0ZpZWxkUmVmKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nRmllbGRSZWYuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dGaWVsZFJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dGaWVsZCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSwgaGFzQmFja2Ryb3A6IHRydWUsIHdpZHRoOiAnNzUlJywgaGVpZ2h0OiAnODAlJyxcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAod2FzT25QcmV2aWV3KSB7XHJcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNldEZvcm1TdGF0dXModHJ1ZSksIDUwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBcIlN1Z2dlcmlzY2kgZ3JhZmljYVwiOiBzdGVzc28gZmx1c3NvIGZpZWxkLWNvbnRleHQgKG51b3ZvIG8gZXNpc3RlbnRlKVxyXG4gICAgICAgICAgdGhpcy5haUZpZWxkU3VnZ2VzdExvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBpZiAoaXNOZXdVbnNhdmVkRmllbGQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRGb3JtQW5kQ29uZmlndXJlKHJlcy5Gb3JtKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybSkgdGhpcy5mb3JtLkFJUHJvbXB0cyA9IHVwZGF0ZWRQcm9tcHRzSnNvbjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRGaWVsZElkeCA9IHRoaXMuZm9ybT8uRmllbGRzPy5maW5kSW5kZXgoZiA9PiBmLkxhYmVsID09PSBmaWVsZENvZGVGb3JSZWZyZXNoKSA/PyAtMTtcclxuICAgICAgICAgICAgY29uc3QgdXBkYXRlZEZpZWxkID0gdXBkYXRlZEZpZWxkSWR4ID49IDAgPyB0aGlzLmZvcm0uRmllbGRzW3VwZGF0ZWRGaWVsZElkeF0gOiBudWxsO1xyXG4gICAgICAgICAgICBpZiAodXBkYXRlZEZpZWxkICYmIHRoaXMuZm9ybT8uRmllbGRzKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtLkZpZWxkcy5zcGxpY2UodXBkYXRlZEZpZWxkSWR4LCAxKTtcclxuICAgICAgICAgICAgICB0aGlzLnNldEZpZWxkT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZWxvYWRGaWVsZHNUYWJsZSgpO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkID0gdGhpcy5zYWZlQ2xvbmUodXBkYXRlZEZpZWxkKTtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmllbGQuRm9ybXVsYSA9IHVwZGF0ZWRGaWVsZC5Gb3JtdWxhO1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmllbGQuQW5zd2VyU3R5bGUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkLkFuc3dlclN0eWxlID0geyBJbkxpc3RWaWV3OiB0cnVlLCBWaXNpYmxlSWY6IG51bGwsIEZpZWxkc3R5bGVDU1M6ICcnLCBMYWJlbHN0eWxlQ1NTOiAnJywgQ29sU3BhblNpemVzOiBbXSwgSW52aXNpYmlsaXR5OiBGaWVsZEludmlzaWJpbGl0eUVudW0uTkFTQ09TVE8gfTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLnZlR3JhcGhpY1N1Z2dlc3RBY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRpYWxvZ0ZpZWxkUmVmKSB0aGlzLmRpYWxvZ0ZpZWxkUmVmLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0ZpZWxkUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0ZpZWxkLCB7XHJcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSwgaGFzQmFja2Ryb3A6IHRydWUsIHdpZHRoOiAnNzUlJywgaGVpZ2h0OiAnODAlJyxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3Qgd2FzT25QcmV2aWV3ID0gdGhpcy5mb3JtQ29tcGxldGVkO1xyXG4gICAgICAgICAgICBpZiAod2FzT25QcmV2aWV3KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtQ29tcGxldGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3Rm9ybSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZXRGb3JtQW5kQ29uZmlndXJlKHJlcy5Gb3JtKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybSkgdGhpcy5mb3JtLkFJUHJvbXB0cyA9IHVwZGF0ZWRQcm9tcHRzSnNvbjtcclxuXHJcbiAgICAgICAgICAgIGlmIChmaWVsZENvZGVGb3JSZWZyZXNoICYmIHRoaXMuZm9ybT8uRmllbGRzKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZEZpZWxkID0gdGhpcy5mb3JtLkZpZWxkcy5maW5kKGYgPT4gZi5MYWJlbCA9PT0gZmllbGRDb2RlRm9yUmVmcmVzaCk7XHJcbiAgICAgICAgICAgICAgaWYgKHVwZGF0ZWRGaWVsZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZElkeCA9IHRoaXMuZm9ybS5GaWVsZHMuaW5kZXhPZih1cGRhdGVkRmllbGQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkID0gdGhpcy5zYWZlQ2xvbmUodXBkYXRlZEZpZWxkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWVsZC5Gb3JtdWxhID0gdXBkYXRlZEZpZWxkLkZvcm11bGE7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEZpZWxkLkFuc3dlclN0eWxlID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkLkFuc3dlclN0eWxlID0geyBJbkxpc3RWaWV3OiB0cnVlLCBWaXNpYmxlSWY6IG51bGwsIEZpZWxkc3R5bGVDU1M6ICcnLCBMYWJlbHN0eWxlQ1NTOiAnJywgQ29sU3BhblNpemVzOiBbXSwgSW52aXNpYmlsaXR5OiBGaWVsZEludmlzaWJpbGl0eUVudW0uTkFTQ09TVE8gfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID0gdXBkYXRlZElkeDtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy52ZUdyYXBoaWNTdWdnZXN0QWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRpYWxvZ0ZpZWxkUmVmKSB0aGlzLmRpYWxvZ0ZpZWxkUmVmLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nRmllbGRSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nRmllbGQsIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsIGhhc0JhY2tkcm9wOiB0cnVlLCB3aWR0aDogJzc1JScsIGhlaWdodDogJzgwJScsXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHdhc09uUHJldmlldykge1xyXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXRGb3JtU3RhdHVzKHRydWUpLCA1MCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMudmVHcmFwaGljU3VnZ2VzdEFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuU3VjY2VzcyhcIkZvcm0gbW9kaWZpY2F0YSBjb24gQUkhXCIpO1xyXG4gICAgICAgIGlmIChyZXMuV2FybmluZ3MgJiYgcmVzLldhcm5pbmdzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLldhcm5pbmcocmVzLldhcm5pbmdzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgIHRoaXMuYWlFZGl0TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChkaXJlY3RQcm9tcHQgIT09IHVuZGVmaW5lZCkgdGhpcy5haUZpZWxkU3VnZ2VzdExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBzZXJ2ZXJNc2cgPSAoZXJyb3IgYXMgYW55KT8uZXJyb3I7XHJcbiAgICAgICAgY29uc3QgZGlzcGxheU1zZyA9IHR5cGVvZiBzZXJ2ZXJNc2cgPT09ICdzdHJpbmcnICYmIHNlcnZlck1zZy50cmltKClcclxuICAgICAgICAgID8gc2VydmVyTXNnXHJcbiAgICAgICAgICA6ICdFcnJvcmUgbmVsbGEgbW9kaWZpY2EgZGVsbGEgZm9ybSBjb24gQUknO1xyXG4gICAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLkVycm9yKGRpc3BsYXlNc2cpO1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvcmUgbmVsbGEgbW9kaWZpY2EgZGVsbGEgZm9ybSBjb24gQUlcIiwgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgb25Db250ZXN0dWFsaXphdGlvblNlbGVjdCgpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRDb250ZXN0dWFsaXphdGlvblZhbHVlID0gdGhpcy5jb250ZXN0dWFsaXphdGlvbi5maW5kKHggPT4geC5lbnRpdHlUYWJsZU5hbWUgPT0gdGhpcy5zZWxlY3RlZENvbnRlc3R1YWxpemF0aW9uKS5lbnRpdHlJRDtcclxuICB9XHJcblxyXG4gIG9uQ29udGVzdHVhbGl6YXRpb25TZWxlY3RWYWx1ZSgpIHtcclxuICAgIHRoaXMuY29udGVzdHVhbGl6YXRpb24uZmluZCh4ID0+IHguZW50aXR5VGFibGVOYW1lID09IHRoaXMuc2VsZWN0ZWRDb250ZXN0dWFsaXphdGlvbikuZW50aXR5SUQgPSB0aGlzLnNlbGVjdGVkQ29udGVzdHVhbGl6YXRpb25WYWx1ZTtcclxuICB9XHJcblxyXG4gIGFwcGx5Q29udGVzdHVhbGl6YXRpb24oZWxlbWVudCkge1xyXG4gICAgdGhpcy5mb3JtQ29tcGxldGVkID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50LmlucHV0UGFyYW1zLmNvbmZpZy5jb250ZXN0dWFsaXphdGlvbiA9IGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZm9ybUNvbXBsZXRlZCA9IHRydWU7XHJcbiAgICB9LCA1MCk7XHJcbiAgfVxyXG5cclxuICBvcGVuQ29udGVzdHVhbGl6YXRpb25EaWFsb2coKSB7XHJcbiAgICB0aGlzLmRpYWxvZ0NvbnRlc3R1YWxpemF0aW9uUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0NvbnRlc3R1YWxpemF0aW9uLCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICB3aWR0aDogJzQ4MHB4JyxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VDb250ZXN0dWFsaXphdGlvbkRpYWxvZygpIHtcclxuICAgIHRoaXMuZGlhbG9nQ29udGVzdHVhbGl6YXRpb25SZWY/LmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICBvbkZpcmVUcmlnZ2VyKGV2OiBGaXJlVHJpZ2dlcikge1xyXG4gICAgdGhpcy5maXJlVHJpZ2dlci5lbWl0KGV2KTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZURlbGV0ZUJ1dHRvbihldmVudDogQXJyYXk8QmFzZUZpZWxkPikge1xyXG4gICAgdGhpcy5zaG93RGVsZXRlQnV0dG9uID0gZXZlbnQubGVuZ3RoID4gMDtcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWVsZHMgPSBldmVudDtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVNlbGVjdGVkRmllbGRzKHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcblxyXG5cclxuICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLkNvbmZpcm0oXHJcbiAgICAgIFwiRWxpbWluYXJlIGdsaSBlbGVtZW50aSBzZWxlemlvbmF0aT9cIixcclxuICAgICAgKCkgPT4ge1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkRmllbGRzLmZvckVhY2goKHNlbGVjdGVkRmllbGQpID0+IHtcclxuICAgICAgICAgIHRoaXMuZm9ybVtwcm9wZXJ0eU5hbWVdLnNwbGljZSh0aGlzLmZvcm1bcHJvcGVydHlOYW1lXS5pbmRleE9mKHNlbGVjdGVkRmllbGQpLCAxKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRGaWVsZE9yZGluYWxQb3NpdGlvbigpO1xyXG4gICAgICAgIHRoaXMucmVsb2FkRmllbGRzVGFibGUoKTtcclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIGZhbHNlLFxyXG4gICAgICBcIlJpY2hpZXN0YSBjb25mZXJtYVwiXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIFZpc3VhbCBFZGl0b3JcclxuXHJcbiAgdG9nZ2xlVmlzdWFsRWRpdG9yKCk6IHZvaWQge1xyXG4gICAgdGhpcy52aXN1YWxFZGl0b3JBY3RpdmUgPSAhdGhpcy52aXN1YWxFZGl0b3JBY3RpdmU7XHJcbiAgICBpZiAoIXRoaXMudmlzdWFsRWRpdG9yQWN0aXZlKSB7XHJcbiAgICAgIHRoaXMudmVTd2FwRmllbGQgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25WZUZpZWxkQ2xpY2soZXY6IHsgZmllbGQ6IEJhc2VGaWVsZDsgZXZlbnQ6IE1vdXNlRXZlbnQgfSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudmVTd2FwRmllbGQpIHtcclxuICAgICAgaWYgKHRoaXMudmVTd2FwRmllbGQuTGFiZWwgIT09IGV2LmZpZWxkLkxhYmVsKSB7XHJcbiAgICAgICAgdGhpcy52ZURvU3dhcChldi5maWVsZCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy52ZVNlbGVjdGVkRmllbGQgPSB0aGlzLmZvcm0uRmllbGRzPy5maW5kKGYgPT4gZi5MYWJlbCA9PT0gZXYuZmllbGQuTGFiZWwpID8/IGV2LmZpZWxkO1xyXG4gICAgdGhpcy52ZVNob3dHcmFwaGljSW5wdXQgPSBmYWxzZTtcclxuICAgIHRoaXMudmVHcmFwaGljSGludCA9ICcnO1xyXG4gICAgdGhpcy5kaWFsb2dWZVRvb2x0aXBSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nVmVUb29sdGlwLCB7XHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICB3aWR0aDogJzMyMHB4JyxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdmVFZGl0RmllbGQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpYWxvZ1ZlVG9vbHRpcFJlZj8uY2xvc2UoKTtcclxuICAgIGlmICghdGhpcy52ZVNlbGVjdGVkRmllbGQpIHJldHVybjtcclxuICAgIHRoaXMub3BlbkZpZWxkRGlhbG9nKHRoaXMudmVTZWxlY3RlZEZpZWxkKTtcclxuICB9XHJcblxyXG4gIHZlQWlFZGl0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kaWFsb2dWZVRvb2x0aXBSZWY/LmNsb3NlKCk7XHJcbiAgICBpZiAoIXRoaXMudmVTZWxlY3RlZEZpZWxkKSByZXR1cm47XHJcbiAgICAvLyBSZXBsaWNhIGNpw7IgY2hlIGZhIG9wZW5GaWVsZERpYWxvZzogcG9wb2xhIHNlbGVjdGVkRmllbGQgZSBpbmRleFNlbGVjdGVkRmllbGRcclxuICAgIC8vIGNvc8OsIHNlbmRBaUVkaXQgcHXDsiBjbG9uYXJlIGNvcnJldHRhbWVudGUgaWwgY2FtcG9cclxuICAgIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID0gdGhpcy5mb3JtLkZpZWxkcz8uaW5kZXhPZih0aGlzLnZlU2VsZWN0ZWRGaWVsZCkgPz8gbnVsbDtcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWVsZCA9IHRoaXMuc2FmZUNsb25lKHRoaXMudmVTZWxlY3RlZEZpZWxkKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWVsZC5Gb3JtdWxhID0gdGhpcy52ZVNlbGVjdGVkRmllbGQuRm9ybXVsYTtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkRmllbGQuQW5zd2VyU3R5bGUgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmllbGQuQW5zd2VyU3R5bGUgPSB7IEluTGlzdFZpZXc6IHRydWUsIFZpc2libGVJZjogbnVsbCwgRmllbGRzdHlsZUNTUzogJycsIExhYmVsc3R5bGVDU1M6ICcnLCBDb2xTcGFuU2l6ZXM6IFtdLCBJbnZpc2liaWxpdHk6IEZpZWxkSW52aXNpYmlsaXR5RW51bS5OQVNDT1NUTyB9O1xyXG4gICAgfVxyXG4gICAgdGhpcy5vbkFpRWRpdEZvckZpZWxkKHRoaXMudmVTZWxlY3RlZEZpZWxkLkxhYmVsKTtcclxuICB9XHJcblxyXG4gIHZlU2VuZEdyYXBoaWMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpYWxvZ1ZlVG9vbHRpcFJlZj8uY2xvc2UoKTtcclxuICAgIGlmICghdGhpcy52ZVNlbGVjdGVkRmllbGQpIHJldHVybjtcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWVsZCA9IHRoaXMuZm9ybT8uRmllbGRzPy5maW5kKGYgPT4gZi5MYWJlbCA9PT0gdGhpcy52ZVNlbGVjdGVkRmllbGQuTGFiZWwpID8/IHRoaXMudmVTZWxlY3RlZEZpZWxkIGFzIGFueTtcclxuICAgIHRoaXMudmVHcmFwaGljU3VnZ2VzdEFjdGl2ZSA9IHRydWU7XHJcbiAgICB0aGlzLm9uQWlHcmFwaGljU3VnZ2VzdCh7IGNvZGU6IHRoaXMudmVTZWxlY3RlZEZpZWxkLkxhYmVsLCBoaW50OiB0aGlzLnZlR3JhcGhpY0hpbnQgfSk7XHJcbiAgICB0aGlzLnZlU2hvd0dyYXBoaWNJbnB1dCA9IGZhbHNlO1xyXG4gICAgdGhpcy52ZUdyYXBoaWNIaW50ID0gJyc7XHJcbiAgfVxyXG5cclxuICB2ZU9wZW5SZW9yZGVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kaWFsb2dWZVRvb2x0aXBSZWY/LmNsb3NlKCk7XHJcbiAgICB0aGlzLnZlUmVvcmRlckZpZWxkcyA9IFsuLi4odGhpcy5mb3JtLkZpZWxkcyA/PyBbXSldO1xyXG4gICAgdGhpcy5kaWFsb2dWZVJlb3JkZXJSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nVmVSZW9yZGVyLCB7XHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICB3aWR0aDogJzQwMHB4JyxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdmVBcHBseVJlb3JkZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZvcm0uRmllbGRzID0gWy4uLnRoaXMudmVSZW9yZGVyRmllbGRzXTtcclxuICAgIHRoaXMuc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKTtcclxuICAgIHRoaXMucmVsb2FkRmllbGRzVGFibGUoKTtcclxuICAgIHRoaXMuZGlhbG9nVmVSZW9yZGVyUmVmPy5jbG9zZSgpO1xyXG4gICAgdGhpcy5yZWZyZXNoUHJldmlldygpO1xyXG4gIH1cclxuXHJcbiAgb25WZURyYWdEcm9wUmVvcmRlcihldmVudDogQ2RrRHJhZ0Ryb3A8QmFzZUZpZWxkW10+KTogdm9pZCB7XHJcbiAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy52ZVJlb3JkZXJGaWVsZHMsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XHJcbiAgfVxyXG5cclxuICB2ZVN0YXJ0U3dhcCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlhbG9nVmVUb29sdGlwUmVmPy5jbG9zZSgpO1xyXG4gICAgdGhpcy52ZVN3YXBGaWVsZCA9IHRoaXMudmVTZWxlY3RlZEZpZWxkO1xyXG4gIH1cclxuXHJcbiAgdmVEb1N3YXAodGFyZ2V0RmllbGQ6IEJhc2VGaWVsZCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnZlU3dhcEZpZWxkIHx8ICF0aGlzLmZvcm0uRmllbGRzKSByZXR1cm47XHJcbiAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmZvcm0uRmllbGRzO1xyXG4gICAgY29uc3QgaWR4QSA9IGZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLkxhYmVsID09PSB0aGlzLnZlU3dhcEZpZWxkIS5MYWJlbCk7XHJcbiAgICBjb25zdCBpZHhCID0gZmllbGRzLmZpbmRJbmRleChmID0+IGYuTGFiZWwgPT09IHRhcmdldEZpZWxkLkxhYmVsKTtcclxuICAgIGlmIChpZHhBID49IDAgJiYgaWR4QiA+PSAwKSB7XHJcbiAgICAgIFtmaWVsZHNbaWR4QV0sIGZpZWxkc1tpZHhCXV0gPSBbZmllbGRzW2lkeEJdLCBmaWVsZHNbaWR4QV1dO1xyXG4gICAgICB0aGlzLnNldEZpZWxkT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgICAgIHRoaXMucmVsb2FkRmllbGRzVGFibGUoKTtcclxuICAgICAgdGhpcy5yZWZyZXNoUHJldmlldygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy52ZVN3YXBGaWVsZCA9IG51bGw7XHJcbiAgfVxyXG5cclxuICB2ZUNhbmNlbFN3YXAoKTogdm9pZCB7XHJcbiAgICB0aGlzLnZlU3dhcEZpZWxkID0gbnVsbDtcclxuICB9XHJcblxyXG4gIHZlRGVsZXRlRmllbGQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMudmVTZWxlY3RlZEZpZWxkKSByZXR1cm47XHJcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuZm9ybT8uRmllbGRzPy5maW5kKGYgPT4gZi5MYWJlbCA9PT0gdGhpcy52ZVNlbGVjdGVkRmllbGQuTGFiZWwpO1xyXG4gICAgaWYgKCFmaWVsZCkgcmV0dXJuO1xyXG4gICAgdGhpcy5kaWFsb2dWZVRvb2x0aXBSZWY/LmNsb3NlKCk7XHJcbiAgICAvLyBzZXRUaW1lb3V0IG5lY2Vzc2FyaW86IFN3ZWV0QWxlcnQgbm9uIHNpIGFwcmUgY29ycmV0dGFtZW50ZSBzZSBpbCBNYXRlcmlhbCBEaWFsb2cgw6ggYW5jb3JhIGluIGZhc2UgZGkgY2hpdXN1cmFcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5kZWxldGVFbGVtZW50KGZpZWxkLCAnRmllbGRzJyksIDIwMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkUmFuZG9tR3JhcGhpY0hpbnQoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHBhbGV0dGVzID0gW1xyXG4gICAgICAnbW9ub2Nyb21hdGljbyB2aWJyYW50ZScsICdjb21wbGVtZW50YXJlJywgJ3RyaWFkaWNvJywgJ2FuYWxvZ28gY2FsZG8nLCAnYW5hbG9nbyBmcmVkZG8nLFxyXG4gICAgICAncGFzdGVsbG8gZGVsaWNhdG8nLCAnbmVvbiBzdSBzY3VybycsICdlYXJ0aCB0b25lcycsICdvY2Vhbm8gcHJvZm9uZG8nLCAndHJhbW9udG8gY29sb3JhdG8nLFxyXG4gICAgICAnZm9yZXN0YSBhdXR1bm5hbGUnLCAnbGF2YW5kYSBlIG9ybycsICdjb3JhbGxvIGUgdHVyY2hlc2UnLCAncm9zc28gZSBhbnRyYWNpdGUnLCAndmVyZGUgYWNxdWEgZSBzYWJiaWEnLFxyXG4gICAgICAndmlvbGEgZWxldHRyaWNvIGUgZ2lhbGxvIGxpbW9uZScsICdyb3NhIGNpcHJpYSBlIGdyaWdpbyBwZXJsYScsICdibHUgY29iYWx0byBlIGFyYW5jaW8gYnJ1Y2lhdG8nLFxyXG4gICAgICAnb3JvIGFudGljbyBlIGJvcmRlYXV4JywgJ21lbnRhIGZyZXNjYSBlIGNpb2Njb2xhdG8nLCAnYXJnZW50byBlIGJsdSBhY2NpYWlvJywgJ3Blc2NhIGUgaW5kYWNvJyxcclxuICAgICAgJ3Jvc3NvIGNpbGllZ2lhIGUgYXZvcmlvJywgJ3RlYWwgc2N1cm8gZSByYW1lJywgJ2xpbWUgZSBibHUgbmF2eScsICdsaWxsYSBlIHZlcmRlIHNhbHZpYScsXHJcbiAgICAgICdhenp1cnJvIGdoaWFjY2lvIGUgZ3JpZ2lvIGFyZGVzaWEnLCAnYW1icmEgZSBwZXRyb2xpbycsICdzbWVyYWxkbyBlIHJvc2EgYW50aWNvJywgJ2JpYW5jbyBlIG5lcm8gY29uIGFjY2VudG8gcm9zc28gZnVvY28nLFxyXG4gICAgXTtcclxuICAgIGNvbnN0IHN0eWxlcyA9IFtcclxuICAgICAgJ21pbmltYWxpc3RhJywgJ2JvbGQgZSB2aXZhY2UnLCAnZWxlZ2FudGUgZSBzb2JyaW8nLCAnZ2lvY29zbyBlIGRpbmFtaWNvJywgJ2luZHVzdHJpYWxlJyxcclxuICAgICAgJ3JldHJvZnV0dXJpc3RhJywgJ29yZ2FuaWNvIGUgbmF0dXJhbGUnLCAndGVjaC9kaWdpdGFsZScsICdsdXh1cnkgcHJlbWl1bScsICd2aW50YWdlIG1vcmJpZG8nLFxyXG4gICAgICAnZmxhdCBkZXNpZ24gcHVsaXRvJywgJ2dsYXNzbW9ycGhpc20nLCAnbmV1bW9yZmlzbW8nLCAnZGFyayBtb2RlIHJhZmZpbmF0bycsXHJcbiAgICAgICdicnV0YWxpc3QgY29uIGJvcmRpIHNwZXNzaScsICdzY2FuZGluYXZvIHB1bGl0bycsICdhcnQgZMOpY28gZ2VvbWV0cmljbycsICdjeWJlcnB1bmsgZGlzdG9waWNvJyxcclxuICAgICAgJ3BvcCBhcnQgYSB0aW50ZSBwaWF0dGUnLCAnd2F0ZXJjb2xvciBwYXN0ZWxsbyBzZnVtYXRvJywgJ25lb24gYW5uaSBvdHRhbnRhJywgJ21hdGVyaWFsIGRlc2lnbiBjb24gb21icmUnLFxyXG4gICAgICAnYXVyb3JhIGJvcmVhbGUnLCAnc3dpc3Mgc3R5bGUgdGlwb2dyYWZpY28nLCAndHJvcGljYWxlIHZpdmFjZScsICdtb25vY3JvbW8gY29uIGFjY2VudG8gc2luZ29sbycsXHJcbiAgICAgICdhdXJvcmEgbm90dHVybmEgc2N1cmEnLCAnY290dGFnZWNvcmUgY2FsZG8nLFxyXG4gICAgXTtcclxuICAgIGNvbnN0IHJhZGl1cyA9IFsnYm9yZGVyLXJhZGl1cyBwaWNjb2xvICgyLTRweCknLCAnYm9yZGVyLXJhZGl1cyBtZWRpbyAoOC0xMHB4KScsICdib3JkZXItcmFkaXVzIGdyYW5kZSAoMTYtMjBweCknLCAnYm9yZGVyLXJhZGl1cyBwaWxsb2xhICg5OTk5cHgpJ107XHJcbiAgICBjb25zdCBwaWNrID0gPFQ+KGFycjogVFtdKTogVCA9PiBhcnJbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYXJyLmxlbmd0aCldO1xyXG4gICAgcmV0dXJuIGBDQVNVQUxFOiBwYWxldHRlIFwiJHtwaWNrKHBhbGV0dGVzKX1cIiwgc3RpbGUgXCIke3BpY2soc3R5bGVzKX1cIiwgJHtwaWNrKHJhZGl1cyl9LiBJZ25vcmEgbGEgdGFiZWxsYSBwcmVzZXQgc2V0dG9yaWFsaSBlIGNyZWEgdW5hIGdyYWZpY2Egb3JpZ2luYWxlIGUgaW1wcmV2ZWRpYmlsZS5gO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWZyZXNoUHJldmlldygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmZvcm1Db21wbGV0ZWQpIHtcclxuICAgICAgdGhpcy5mb3JtQ29tcGxldGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucHJldmlld0Zvcm0gPSBudWxsO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2V0Rm9ybVN0YXR1cyh0cnVlKSwgNTApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uIFZpc3VhbCBFZGl0b3JcclxuXHJcbn1cclxuIiwiPGVxcC1keW5hbWljLW1vZHVsZS1zcGlubmVyPjwvZXFwLWR5bmFtaWMtbW9kdWxlLXNwaW5uZXI+XHJcblxyXG5cclxuPGRpdiBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci1oZWFkZXIgcm93IHRpdGxlIHAtMVwiICpuZ0lmPVwiaW5uZXJGb3JtTWFuYWdtZW50XCI+XHJcbiAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImhlYWRlci10aXRsZS1zdGFuZGFyZFwiPkFnZ2l1bnRhIGZvcm0gZGkgZGV0dGFnbGlvPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIHRleHQtcmlnaHRcIj5cclxuICAgIDxtYXQtaWNvbiBjbGFzcz1cImNsb3NlXCIgKGNsaWNrKT1cImNsb3NlRGlhbG9nSW5uZXJGb3JtKClcIj5jbG9zZTwvbWF0LWljb24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSNyZWdpb24gRVhQT1JUIE1PRFVMRSAtLT5cclxuPGRpdiBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci1leHBvcnRlclwiICpuZ0lmPVwibG9hZGVyICYmIHZpZXdNb2RlID09ICdFeHBvcnQnXCIgY2xhc3M9XCJwLTNcIj5cclxuXHJcbiAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJleHBvcnQoKVwiPkVzcG9ydGE8L2J1dHRvbj5cclxuXHJcbiAgPCEtLTxhXHJcbiAgICBjbGFzcz1cImJ0biBidG4tY2xlYXJcIlxyXG4gICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICB0aXRsZT1cIkRvd25sb2FkIEpTT05cIlxyXG4gICAgW2hyZWZdPVwiZG93bmxvYWRKc29uSHJlZlwiXHJcbiAgICBkb3dubG9hZD1cInt7IGRvd25sb2FkTmFtZSB9fS5qc29uXCJcclxuICAgID5FeHBvcnQ8L2E+LS0+XHJcblxyXG48L2Rpdj5cclxuPCEtLSNlbmRyZWdpb24gRVhQT1JUIE1PRFVMRSAtLT5cclxuXHJcbjxtYXQtaG9yaXpvbnRhbC1zdGVwcGVyICpuZ0lmPVwibG9hZGVyICYmIGZvcm1Gb3JtR3JvdXAgJiYgdmlld01vZGUgPT0gJ2FkZE9yRWRpdCdcIiBsaW5lYXIgI3N0ZXBwZXJcclxuICBbbmdDbGFzc109XCJ7IG91dGVyRm9ybTogdHJ1ZSwgJ2lubmVyRm9ybU1hbmFnbWVudC1zdGVwcGVyJzogaW5uZXJGb3JtTWFuYWdtZW50ICB9XCJcclxuICBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci1zdGVwcGVyIHt7ICdsYXN0LWVkaXRlZC1zdGVwLScgKyBzdGVwcGVyLnNlbGVjdGVkSW5kZXggfX1cIj5cclxuICA8IS0tI3JlZ2lvbiBEQVRJIEdFTkVSQUxJIERFTExBIEZPUk0gLS0+XHJcbiAgPG1hdC1zdGVwIGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yLWdlbmVyYWwtZGF0YVwiIFtzdGVwQ29udHJvbF09XCJmb3JtRm9ybUdyb3VwXCI+XHJcbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1Gb3JtR3JvdXBcIiAoa2V5ZG93bi5lbnRlcik9XCIoZmFsc2UpXCI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwTGFiZWw+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0ZXBwZXItaGVhZGVyLW92ZXJsYXlcIiAoY2xpY2spPVwic2V0Rm9ybVN0YXR1cyhmYWxzZSlcIj48L2Rpdj5cclxuICAgICAgICBEYXRpIGdlbmVyYWxpIGRlbGxhIGZvcm1cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cganVzdGlmeS1jb250ZW50LXN0YXJ0IGFkZEJ1dHRvbnNcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lZCBtZS0yXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJhY2NlbnRcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5BaUVkaXREaWFsb2coKVwiICpuZ0lmPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uPy5Gb3Jtcz8uU3BlZWNoVG9Gb3JtRWRpdEVuZFBvaW50XCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5hdXRvX2ZpeF9oaWdoPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPnt7IGlzTmV3Rm9ybSA/ICdDcmVhIGNvbiBBSScgOiAnTW9kaWZpY2EgY29uIEFJJyB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZmlyc3RSb3dcIj5cclxuICAgICAgICAgICAgPCEtLVxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsXHJcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ1ZhIGluc2VyaXRvIHBlciBlc3NlcmUgdXRpbGl6emF0byBjb21lIHJpZmVyaW1lbnRvIG5laSB0ZW1wbGF0ZS4gbm9uIGFjY2V0dGEgY2FyYXR0ZXJpIHNwZWNpYWxpIG5lIHNwYXppLidcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIENvZGljZSBVbml2b2NvXHJcbiAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidWYSBpbnNlcml0byBwZXIgZXNzZXJlIHV0aWxpenphdG8gY29tZSByaWZlcmltZW50byBuZWkgdGVtcGxhdGUuIG5vbiBhY2NldHRhIGNhcmF0dGVyaSBzcGVjaWFsaSBuZSBzcGF6aS4nXCJcclxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiQ29kZVwiXHJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZm9ybS5Db2RlXCJcclxuICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInNldENvZGUoZm9ybS5Db2RlKVwiXHJcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIHJlYWRvbmx5PVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj48L2Rpdj5cclxuICAgICAgICAgICAgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm5hbWVcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5Ob21lPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgcGxhY2Vob2xkZXI9XCJOb21lXCIgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiTmFtZVwiIFsobmdNb2RlbCldPVwiZm9ybS5OYW1lXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInNldE5hbWUoZm9ybS5OYW1lKVwiIC8+XHJcbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICA8IS0tIDxtYXQtbGFiZWw+VGlwbyBkaSB2aXN1YWxpenphemlvbmU8L21hdC1sYWJlbD4gLS0+XHJcbiAgICAgICAgICAgICAgPGVxcC1zZWxlY3QgY2xhc3M9XCJuYW1lU2VjdGlvblwiIFtlbnVtRGF0YV09XCJGb3JtU2NhbGFyVHlwZUVudW1cIiBbKG5nTW9kZWxJbnB1dCldPVwiZm9ybS5Gb3JtU2NhbGFyVHlwZVwiXHJcbiAgICAgICAgICAgICAgICBbaXNSZXF1aXJlZF09XCJmYWxzZVwiIHJlcXVpcmVkIFtzaG93Q2FuY2VsQnV0dG9uXT1cImZhbHNlXCIgW2Zvcm1Hcm91cElucHV0XT1cImZvcm1Gb3JtR3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidGb3JtU2NhbGFyVHlwZSdcIiAobmdNb2RlbElucHV0Q2hhbmdlKT1cIm9uQ2hhbmdlRm9ybVNjYWxhclR5cGUoKVwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlRpcG8gZGkgdmlzdWFsaXp6YXppb25lXCI+XHJcbiAgICAgICAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm5hbWVcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5EZXNjcml6aW9uZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cIkRlc2NyaXB0aW9uXCIgWyhuZ01vZGVsKV09XCJmb3JtLkRlc2NyaXB0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmb3JtLk5hbWUpXCIgcGxhY2Vob2xkZXI9XCJEZXNjcml6aW9uZVwiIC8+XHJcbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBpbnNlcnRlZFwiICpuZ0lmPVwiXHJcbiAgICAgICAgICBmb3JtLkZvcm1TY2FsYXJUeXBlICYmXHJcbiAgICAgICAgICBmb3JtLkZvcm1TY2FsYXJUeXBlICE9IEZvcm1TY2FsYXJUeXBlRW51bS5TZW1wbGljZVxyXG4gICAgICAgIFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibmFtZVNlY3Rpb25cIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPiBOb21lIHNlemlvbmUgKGludmlvIHBlciBjb25mZXJtYXJlKSA8L21hdC1sYWJlbD5cclxuXHJcbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZvcm1GaWVsZEdyb3VwTmFtZVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXHJcbiAgICAgICAgICAgICAgKGtleXVwKT1cIm9uRm9ybUZpZWxkR3JvdXBOYW1lS2V5VXAoJGV2ZW50KVwiIHBsYWNlaG9sZGVyPVwiTm9tZSBzZXppb25lIChpbnZpbyBwZXIgY29uZmVybWFyZSlcIiAvPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLThcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXItM1wiPlNlemlvbmkgaW5zZXJpdGU6PC9zcGFuPlxyXG4gICAgICAgICAgPHVsIGNsYXNzPVwic2VjdGlvbi1saXN0XCI+XHJcbiAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZ3JvdXBOYW1lIG9mIGZvcm0uRm9ybUZpZWxkc0dyb3VwczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VjdGlvbkluc2VydFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibXItMVwiIChjbGljayk9XCJvbkRlbGV0ZUZvcm1GaWVsZEdyb3VwTmFtZShncm91cE5hbWUuTmFtZSlcIj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtci0xIGljb24tYmxhY2tcIiAoY2xpY2spPVwib25FZGl0Rm9ybUZpZWxkR3JvdXBOYW1lKGdyb3VwTmFtZSlcIj5lZGl0PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIHt7IGdyb3VwTmFtZS5OYW1lIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibXQtMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgIDwhLS0gSU1QT1JUIC0tPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCIhdGhpcy5mb3JtSURcIiBjbGFzcz1cImJ0biBidG4tY2xlYXIgYnV0dG9uLW5leHQgbWUtMlwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiaW1wb3J0TW9kdWxlKClcIj5cclxuICAgICAgICAgIEltcG9ydGFcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8IS0tIEVORCBJTVBPUlQgLS0+XHJcblxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24tbmV4dFwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIG1hdFN0ZXBwZXJOZXh0IFtkaXNhYmxlZF09XCJmb3JtRm9ybUdyb3VwLmludmFsaWRcIj5cclxuICAgICAgICAgIFN1Y2Nlc3Npdm9cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Zvcm0+XHJcbiAgPC9tYXQtc3RlcD5cclxuICA8IS0tI2VuZHJlZ2lvbiBEQVRJIEdFTkVSQUxJIERFTExBIEZPUk0gLS0+XHJcblxyXG4gIDwhLS0jcmVnaW9uIEFHR0lVTlRBIERFSSBDQU1QSSBERUxMQSBGT1JNIC0tPlxyXG4gIDxtYXQtc3RlcCBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci1hZGQtZmllbGRcIiBbY29tcGxldGVkXT1cImlzRmllbGRTdGVwQ29tcGxldGVkKClcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwTGFiZWw+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzdGVwcGVyLWhlYWRlci1vdmVybGF5XCIgKGNsaWNrKT1cInNldEZvcm1TdGF0dXMoZmFsc2UpXCI+PC9kaXY+XHJcbiAgICAgIDxtYXQtbGFiZWw+Q2FtcGkgZGEgaW5zZXJpcmU8L21hdC1sYWJlbD5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgYWRkQnV0dG9uc1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtZS0yXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib3BlbkZpZWxkRGlhbG9nKClcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkFnZ2l1bmdpIGNhbXBvPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICA8IS0tIDxidXR0b25cclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lZCBtZS0yXCJcclxuICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib3BlbklubmVyRm9ybURpYWxvZygpXCJcclxuICAgICAgICAgICpuZ0lmPVwiIWlubmVyRm9ybU1hbmFnbWVudFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+QWdnaXVuZ2kgZm9ybSBkaSBkZXR0YWdsaW88L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+IC0tPlxyXG5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lZCBidG4tb3V0bGluZWQtcmVkIG1lLTJcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInJlZFwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZVNlbGVjdGVkRmllbGRzKCdGaWVsZHMnKVwiICpuZ0lmPVwic2hvd0RlbGV0ZUJ1dHRvblwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmNsZWFyPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5FbGltaW5hIGNhbXBpIHNlbGV6aW9uYXRpPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lZCBtZS0yXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJhY2NlbnRcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIChjbGljayk9XCJvcGVuQWlFZGl0RGlhbG9nKClcIiAqbmdJZj1cImVuZFBvaW50Q29uZmlndXJhdGlvbj8uRm9ybXM/LlNwZWVjaFRvRm9ybUVkaXRFbmRQb2ludFwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmF1dG9fZml4X2hpZ2g8L21hdC1pY29uPlxyXG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPnt7IGlzTmV3Rm9ybSA/ICdDcmVhIGNvbiBBSScgOiAnTW9kaWZpY2EgY29uIEFJJyB9fTwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZXFwLXRhYmxlIGNsYXNzPVwidGFibGVcIiAjZmllbGRzVGFibGUgW2NyZWF0ZU1hdENhcmRdPVwiZmFsc2VcIiBbY29sdW1uc109XCJmaWVsZHNDb2x1bW5zXCIgW2VuYWJsZURyYWdBbmREcm9wXT1cImZhbHNlXCJcclxuICAgICAgW2VuYWJsZURyYWdDb2x1bW5dPVwidHJ1ZVwiIFtjaGFuZ2VEcmFnUm93UG9zaXRpb25dPVwidHJ1ZVwiIFtpc011bHRpcGxlU2VsZWN0aW9uXT1cInRydWVcIiBbZGF0YV09XCJmb3JtLkZpZWxkc1wiXHJcbiAgICAgIFtlbXB0eVRhYmxlTWVzc2FnZV09XCInTmVzc3VuIGNhbXBvIGluc2VyaXRvJ1wiIChkcmFnUmVsZWFzZWRFdmVudCk9XCJvbkRyYWdSZWxlYXNlZCgkZXZlbnQpXCJcclxuICAgICAgKGRyYWdFbmRlZEV2ZW50KT1cIm9uRHJhZ0VuZGVkKCRldmVudClcIiAoY2hlY2tib3hJbmZvKT1cInRvZ2dsZURlbGV0ZUJ1dHRvbigkZXZlbnQpXCIgW3NlYXJjaFRleHRdPVwiJydcIlxyXG4gICAgICBbcGFnaW5hdG9yVmlzaWJsZV09XCJmYWxzZVwiPlxyXG4gICAgPC9lcXAtdGFibGU+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm10LTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1yLTIgcHJldmlvdXNcIiBtYXQtcmFpc2VkLWJ1dHRvbiBtYXRTdGVwcGVyUHJldmlvdXM+XHJcbiAgICAgICAgUHJlY2VkZW50ZVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbi1uZXh0XCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgbWF0U3RlcHBlck5leHQgW2Rpc2FibGVkXT1cIiFpc0ZpZWxkU3RlcENvbXBsZXRlZCgpXCJcclxuICAgICAgICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBmb3JtRm9ybUdyb3VwLmludmFsaWQgfVwiIChjbGljayk9XCJzZXRGb3JtU3RhdHVzKGZhbHNlKVwiPlxyXG4gICAgICAgIFN1Y2Nlc3Npdm9cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L21hdC1zdGVwPlxyXG4gIDwhLS0jZW5kcmVnaW9uIEFHR0lVTlRBIERFSSBDQU1QSSBERUxMQSBGT1JNIC0tPlxyXG5cclxuICA8bmctdGVtcGxhdGUgbWF0U3RlcHBlckljb249XCJlZGl0XCIgbGV0LWluZGV4PVwiaW5kZXhcIj5cclxuICAgIDxtYXQtbGFiZWw+e3sgaW5kZXggKyAxIH19PC9tYXQtbGFiZWw+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPCEtLSNyZWdpb24gQUdHSVVOVEEgREVMTEUgT1BFUkFaSU9OSSBTVUkgUkVDT1JEIC0tPlxyXG4gIDwhLS0jPG1hdC1zdGVwPlxyXG4gICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBMYWJlbD5cclxuICAgICAgPGRpdiBjbGFzcz1cInN0ZXBwZXItaGVhZGVyLW92ZXJsYXlcIiAoY2xpY2spPVwic2V0Rm9ybVN0YXR1cyhmYWxzZSlcIj48L2Rpdj5cclxuICAgICAgQXppb25pIGFnZ2l1bnRpdmUgc3VpIHJlY29yZFxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGp1c3RpZnktY29udGVudC1zdGFydCBhZGRCdXR0b25zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9wZW5BY3Rpb25PblJlY29yZERpYWxvZygpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5BZ2dpdW5naSBhemlvbmU8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZXFwLXRhYmxlXHJcbiAgICAgIGNsYXNzPVwidGFibGVcIlxyXG4gICAgICAjYWN0aW9uc09uUmVjb3JkVGFibGVcclxuICAgICAgW2NyZWF0ZU1hdENhcmRdPVwiZmFsc2VcIlxyXG4gICAgICBbY29sdW1uc109XCJhY3Rpb25zT25SZWNvcmRDb2x1bW5zXCJcclxuICAgICAgW2RhdGFdPVwiZm9ybS5BY3Rpb25zT25SZWNvcmRcIlxyXG4gICAgICBbZW1wdHlUYWJsZU1lc3NhZ2VdPVwiJ05lc3N1bmEgYWN0aW9uIGluc2VyaXRhJ1wiXHJcbiAgICAgIFtzZWFyY2hUZXh0XT1cIicnXCJcclxuICAgID5cclxuICAgIDwvZXFwLXRhYmxlPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtdC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGJ1dHRvbnNOZXh0RGl2XCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJtci0yIHByZXZpb3VzXCIgbWF0LXJhaXNlZC1idXR0b24gbWF0U3RlcHBlclByZXZpb3VzPlxyXG4gICAgICAgIFByZWNlZGVudGVcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBjbGFzcz1cImJ1dHRvbi1uZXh0XCJcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgbWF0U3RlcHBlck5leHRcclxuICAgICAgICAoY2xpY2spPVwic2V0Rm9ybVN0YXR1cyhmYWxzZSlcIlxyXG4gICAgICA+XHJcbiAgICAgICAgU3VjY2Vzc2l2b1xyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbWF0LXN0ZXA+LS0+XHJcbiAgPCEtLSNlbmRyZWdpb24gQUdHSVVOVEEgREVMTEUgT1BFUkFaSU9OSSBTVUkgUkVDT1JEIC0tPlxyXG5cclxuXHJcblxyXG4gIDwhLS0jcmVnaW9uIEFHR0lVTlRBIERFSSBCT1RUT05JIEFaSU9ORSAtLT5cclxuICA8bWF0LXN0ZXA+XHJcbiAgICA8bmctdGVtcGxhdGUgbWF0U3RlcExhYmVsPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic3RlcHBlci1oZWFkZXItb3ZlcmxheVwiIChjbGljayk9XCJzZXRGb3JtU3RhdHVzKGZhbHNlKVwiPjwvZGl2PlxyXG4gICAgICBCb3R0b25pIEF6aW9uZVxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGp1c3RpZnktY29udGVudC1zdGFydCBhZGRCdXR0b25zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib3BlbkFjdGlvbkJ1dHRvbkRpYWxvZygpXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5BZ2dpdW5naSBib3R0b25lIGF6aW9uZTwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxlcXAtdGFibGUgY2xhc3M9XCJ0YWJsZVwiICNhY3Rpb25CdXR0b25zVGFibGUgW2NyZWF0ZU1hdENhcmRdPVwiZmFsc2VcIiBbY29sdW1uc109XCJhY3Rpb25CdXR0b25zQ29sdW1uc1wiXHJcbiAgICAgIFtkYXRhXT1cImZvcm0uQWN0aW9uQnV0dG9uc1wiIFtlbXB0eVRhYmxlTWVzc2FnZV09XCInTmVzc3VuIGJvdHRvbmUgYXppb25lIGluc2VyaXRvJ1wiIFtzZWFyY2hUZXh0XT1cIicnXCJcclxuICAgICAgW2VuYWJsZURyYWdBbmREcm9wXT1cImZhbHNlXCIgW2VuYWJsZURyYWdDb2x1bW5dPVwidHJ1ZVwiIFtjaGFuZ2VEcmFnUm93UG9zaXRpb25dPVwidHJ1ZVwiXHJcbiAgICAgIChkcmFnUmVsZWFzZWRFdmVudCk9XCJvbkRyYWdSZWxlYXNlZCgkZXZlbnQpXCIgKGRyYWdFbmRlZEV2ZW50KT1cIm9uRHJhZ0VuZGVkKCRldmVudClcIj5cclxuICAgIDwvZXFwLXRhYmxlPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtdC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGJ1dHRvbnNOZXh0RGl2XCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJtci0yIHByZXZpb3VzXCIgbWF0LXJhaXNlZC1idXR0b24gbWF0U3RlcHBlclByZXZpb3VzPlxyXG4gICAgICAgIFByZWNlZGVudGVcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24tbmV4dFwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIG1hdFN0ZXBwZXJOZXh0IChjbGljayk9XCJzZXRGb3JtU3RhdHVzKGZhbHNlKVwiPlxyXG4gICAgICAgIFN1Y2Nlc3Npdm9cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L21hdC1zdGVwPlxyXG4gIDwhLS0jZW5kcmVnaW9uIEFHR0lVTlRBIERFSSBCT1RUT05JIEFaSU9ORSAtLT5cclxuXHJcblxyXG5cclxuICA8IS0tI3JlZ2lvbiBUUklHR0VSUy0tPlxyXG4gIDxtYXQtc3RlcD5cclxuICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwTGFiZWw+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzdGVwcGVyLWhlYWRlci1vdmVybGF5XCIgKGNsaWNrKT1cInNldEZvcm1TdGF0dXMoZmFsc2UpXCI+PC9kaXY+XHJcbiAgICAgIFRyaWdnZXJzXHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cganVzdGlmeS1jb250ZW50LXN0YXJ0IGFkZEJ1dHRvbnNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9wZW5UcmlnZ2Vyc0RpYWxvZygpXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5BZ2dpdW5naSB0cmlnZ2VyPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxlcXAtdGFibGUgY2xhc3M9XCJ0YWJsZVwiICN0cmlnZ2Vyc1RhYmxlIFtjcmVhdGVNYXRDYXJkXT1cImZhbHNlXCIgW2NvbHVtbnNdPVwidHJpZ2dlcnNDb2x1bW5zXCIgW2RhdGFdPVwiZm9ybS5UcmlnZ2Vyc1wiXHJcbiAgICAgIFtlbXB0eVRhYmxlTWVzc2FnZV09XCInTmVzc3VuYSBhY3Rpb24gaW5zZXJpdGEnXCIgW3NlYXJjaFRleHRdPVwiJydcIj5cclxuICAgIDwvZXFwLXRhYmxlPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtdC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJtci0yIHByZXZpb3VzXCIgbWF0LXJhaXNlZC1idXR0b24gbWF0U3RlcHBlclByZXZpb3VzPlxyXG4gICAgICAgIFByZWNlZGVudGVcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24tbmV4dFwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIG1hdFN0ZXBwZXJOZXh0IFtkaXNhYmxlZF09XCIhaXNGaWVsZFN0ZXBDb21wbGV0ZWQoKVwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogZm9ybUZvcm1Hcm91cC5pbnZhbGlkIH1cIiAoY2xpY2spPVwic2V0Rm9ybVN0YXR1cyh0cnVlKVwiPlxyXG4gICAgICAgIFN1Y2Nlc3Npdm9cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgPC9tYXQtc3RlcD5cclxuICA8IS0tI2VuZHJlZ2lvbiBUUklHR0VSUy0tPlxyXG5cclxuICA8IS0tI3JlZ2lvbiBWSVNVQUxJWlpBWklPTkUgRk9STSBDUkVBVEEgLS0+XHJcbiAgPG1hdC1zdGVwIGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yLXByZXZpZXdcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwTGFiZWw+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzdGVwcGVyLWhlYWRlci1vdmVybGF5XCJcclxuICAgICAgICAoY2xpY2spPVwic2V0Rm9ybVN0YXR1cyggZm9ybUZvcm1Hcm91cC52YWxpZCAmJiBmb3JtLkZpZWxkcyAmJiBmb3JtLkZpZWxkcy5sZW5ndGggPiAwIClcIj48L2Rpdj5cclxuICAgICAgQW50ZXByaW1hXHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyIGFkZEJ1dHRvbnNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZWQgbWUtMlwiIFtjbGFzcy5hY3RpdmVdPVwic2hvd0FsbEZpZWxkc1wiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInNob3dBbGxGaWVsZHMgPSAhc2hvd0FsbEZpZWxkc1wiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPnt7IHNob3dBbGxGaWVsZHMgPyAndmlzaWJpbGl0eV9vZmYnIDogJ3Zpc2liaWxpdHknIH19PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5Nb3N0cmEgYW5jaGUgaSBjYW1waSBpbnZpc2liaWxpPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvXCIgKm5nSWY9XCJjb250ZXN0dWFsaXphdGlvbiAmJiBjb250ZXN0dWFsaXphdGlvbi5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZWQgbWUtMlwiIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWRDb250ZXN0dWFsaXphdGlvbiAhPSBudWxsXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib3BlbkNvbnRlc3R1YWxpemF0aW9uRGlhbG9nKClcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbj50dW5lPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5Db250ZXN0dWFsaXp6YXppb25lPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZWQgbWUtMlwiIFtjbGFzcy5hY3RpdmVdPVwic2hvd0dyYWZpY2FQYW5lbFwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwiYWNjZW50XCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAoY2xpY2spPVwic2hvd0dyYWZpY2FQYW5lbCA9ICFzaG93R3JhZmljYVBhbmVsXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24+cGFsZXR0ZTwvbWF0LWljb24+XHJcbiAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+R3JhZmljYTwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0b1wiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmVkIG1lLTJcIiBbY2xhc3MuYWN0aXZlXT1cInZpc3VhbEVkaXRvckFjdGl2ZVwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwiYWNjZW50XCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlVmlzdWFsRWRpdG9yKClcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbj5ncmlkX3ZpZXc8L21hdC1pY29uPlxyXG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPlZpc3VhbCBFZGl0b3I8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIiAqbmdJZj1cImVuZFBvaW50Q29uZmlndXJhdGlvbj8uRm9ybXM/LlNwZWVjaFRvRm9ybVNwZWVjaFRvRm9ybUVkaXRFbmRQb2ludEVuZFBvaW50XCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZWQgbWUtMlwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwiYWNjZW50XCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib3BlbkFpRWRpdERpYWxvZygpXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24+YXV0b19maXhfaGlnaDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+TW9kaWZpY2EgY29uIEFJPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJ2ZVN3YXBGaWVsZFwiIGNsYXNzPVwidmUtc3dhcC1iYW5uZXJcIj5cclxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwidmUtc3dhcC1iYW5uZXItaWNvblwiPnN3YXBfaG9yaXo8L21hdC1pY29uPlxyXG4gICAgICA8c3Bhbj5DbGljY2Egc3VsIGNhbXBvIGNvbiBjdWkgdnVvaSBzY2FtYmlhcmUgbGEgcG9zaXppb25lPC9zcGFuPlxyXG4gICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj1cIndhcm5cIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInZlQ2FuY2VsU3dhcCgpXCIgY2xhc3M9XCJ2ZS1zd2FwLWJhbm5lci1jYW5jZWxcIj5cclxuICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgIEFubnVsbGFcclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwic2hvd0dyYWZpY2FQYW5lbFwiIGNsYXNzPVwibXQtMlwiPlxyXG4gICAgICA8bWF0LWFjY29yZGlvbiBjbGFzcz1cImNvbmZpZ3VyYXRvci1hY2NvcmRpb25cIiBbbXVsdGldPVwidHJ1ZVwiIGRpc3BsYXlNb2RlPVwiZmxhdFwiPlxyXG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPVwiY29uZmlndXJhdG9yLXBhbmVsXCIgW2V4cGFuZGVkXT1cInRydWVcIj5cclxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5HcmFmaWNhPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JhZmljYS1haS1yb3dcIiAqbmdJZj1cImVuZFBvaW50Q29uZmlndXJhdGlvbj8uRm9ybXM/LlNwZWVjaFRvR3JhcGhpY3NFbmRQb2ludFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tZm9ybS1ncmFwaGljLXN1Z2dlc3RcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtR3JhcGhpY1N1Z2dlc3RMb2FkaW5nXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0Zvcm1HcmFwaGljU3VnZ2VzdElucHV0ID0gIXNob3dGb3JtR3JhcGhpY1N1Z2dlc3RJbnB1dFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtc3Bpbm5lciAqbmdJZj1cImZvcm1HcmFwaGljU3VnZ2VzdExvYWRpbmdcIiBkaWFtZXRlcj1cIjE0XCJcclxuICAgICAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlO21hcmdpbi1yaWdodDo0cHhcIj48L21hdC1zcGlubmVyPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIiFmb3JtR3JhcGhpY1N1Z2dlc3RMb2FkaW5nXCI+cGFsZXR0ZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAge3sgZm9ybUdyYXBoaWNTdWdnZXN0TG9hZGluZyA/ICdFbGFib3JhemlvbmUuLi4nIDogJ1N1Z2dlcmlzY2kgR3JhZmljYSBDb21wbGV0YScgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWhpbnQtaW5wdXQtZ3JvdXBcIiAqbmdJZj1cInNob3dGb3JtR3JhcGhpY1N1Z2dlc3RJbnB1dCAmJiAhZm9ybUdyYXBoaWNTdWdnZXN0TG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1ncmFwaGljLWhpbnQtaW5wdXRcIiBbKG5nTW9kZWwpXT1cImZvcm1HcmFwaGljU3VnZ2VzdEhpbnRcIlxyXG4gICAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImVzLiB0b25pIGRpIGJsdSBzY3Vybywgc3RpbGUgcHJvZmVzc2lvbmFsZSwgc2ZvbmRvIHNmdW1hdG8uLi5cIiAvPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWZvcm0tZ3JhcGhpYy1zZW5kXCIgKGNsaWNrKT1cIm9uRm9ybUdyYXBoaWNTdWdnZXN0KClcIlxyXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkFwcGxpY2Egc3VnZ2VyaW1lbnRvIGdyYWZpY28gYWwgZm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmF1dG9fZml4X2hpZ2g8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGhyIGNsYXNzPVwiZ3JhZmljYS1haS1zZXBhcmF0b3JcIiAvPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1zdGFydCBncmFmaWNhLXJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImdyYWZpY2EtZmllbGQtbGFiZWxcIj5JbW1hZ2luZSBkaSBzZm9uZG88L3A+XHJcbiAgICAgICAgICAgICAgPGVxcC1hdHRhY2htZW50cyBbYXR0YWNobWVudHNMaXN0XT1cImJnQXR0YWNobWVudExpc3RcIiBbc2hvd01hdENhcmRdPVwiZmFsc2VcIiBbYWxsb3dPbmx5SW1hZ2VzXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgW2lzRGlzYWJsZWRdPVwiZmFsc2VcIiBbc2hvd0lubGluZVByZXZpZXddPVwidHJ1ZVwiIFttdWx0aXBsZUF0dGFjaG1lbnRdPVwiZmFsc2VcIiBbc2hvd0hlYWRlcl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICBbYWxsb3dlZFR5cGVzXT1cIltBdHRhY2htZW50VHlwZS5GSUxFXVwiIChsb2NhbEVkaXRlZEF0dGFjaG1lbnRzKT1cIm9uQmdJbWFnZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChvbkRlbGV0ZUF0dGFjaG1lbnQpPVwib25CZ0ltYWdlRGVsZXRlKClcIj5cclxuICAgICAgICAgICAgICA8L2VxcC1hdHRhY2htZW50cz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInctMTAwXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+Q1NTIFByaW5jaXBhbGU8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZvcm0uVGhlbWVDU1NcIiBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxyXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImVzLiBtYXgtd2lkdGg6IDgwMHB4OyBwYWRkaW5nOiAxNnB4OyBiYWNrZ3JvdW5kOiAjZjVmNWY1O1wiIHJvd3M9XCI1XCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidy0xMDBcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5DU1MgVGl0b2xvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmb3JtLlRpdGxlQ1NTXCJcclxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicHJldmlld0Zvcm0gJiYgKHByZXZpZXdGb3JtLlRpdGxlQ1NTID0gJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXHJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZXMuIGZvbnQtc2l6ZTogMnJlbTsgZm9udC13ZWlnaHQ6IDcwMDsgY29sb3I6ICNmZmY7XCIgcm93cz1cIjVcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gICAgICA8L21hdC1hY2NvcmRpb24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8aHIgLz5cclxuXHJcbiAgICA8ZGl2IFtzdHlsZV09XCJwcmV2aWV3QmdTdHlsZVwiPlxyXG4gICAgICA8ZGl2IFtzdHlsZV09XCJwcmV2aWV3VGhlbWVTdHlsZVwiPlxyXG4gICAgICAgIDxhZGQtZm9ybS1yZWNvcmQgKm5nSWY9XCJwcmV2aWV3Rm9ybSAmJiBmb3JtQ29tcGxldGVkXCIgW2Zvcm1dPVwicHJldmlld0Zvcm1cIiBbdXNlcklEXT1cIlVzZXJJRFwiIFtvcmdhSURdPVwib3JnYUlEXCJcclxuICAgICAgICAgIFtmb3JtdWxhT2JqZWN0XT1cImZvcm11bGFPYmplY3RcIiBbY29uZmlndXJhdGlvbnNdPVwidmlld0NvbmZpZ1wiIFtzaG93QWxsRmllbGRzXT1cInNob3dBbGxGaWVsZHNcIlxyXG4gICAgICAgICAgW1F1ZXJ5RWRpdG9yQ29tcG9uZW50XT1cIlF1ZXJ5RWRpdG9yQ29tcG9uZW50XCIgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICAgICAgW3Zpc3VhbEVkaXRvck1vZGVdPVwidmlzdWFsRWRpdG9yQWN0aXZlXCJcclxuICAgICAgICAgIFt2ZVN3YXBGaWVsZENvZGVdPVwidmVTd2FwRmllbGQ/LkxhYmVsID8/IG51bGxcIlxyXG4gICAgICAgICAgKHZlRmllbGRDbGljayk9XCJvblZlRmllbGRDbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgIChvdXQpPVwib25FeHRlcm5hbENvbXBvbmVudE91dCgkZXZlbnQpXCIgKGZpcmVUcmlnZ2VyKT1cIm9uRmlyZVRyaWdnZXIoJGV2ZW50KVwiIFtpbkNvbmZpZ109XCJ0cnVlXCI+XHJcbiAgICAgICAgPC9hZGQtZm9ybS1yZWNvcmQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm10LTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgYnV0dG9uLW5leHREaXZcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1yLTIgYnV0dG9uLWV4aXRcIiBtYXQtcmFpc2VkLWJ1dHRvbiBtYXRTdGVwcGVyUHJldmlvdXMgKGNsaWNrKT1cInNldEZvcm1TdGF0dXMoZmFsc2UpXCI+XHJcbiAgICAgICAgUHJlY2VkZW50ZVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbi1uZXh0XCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNhdmVGb3JtKClcIj5cclxuICAgICAgICBTYWx2YSBmb3JtXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9tYXQtc3RlcD5cclxuICA8IS0tI2VuZHJlZ2lvbiBWSVNVQUxJWlpBWklPTkUgRk9STSBDUkVBVEEgLS0+XHJcblxyXG48L21hdC1ob3Jpem9udGFsLXN0ZXBwZXI+XHJcblxyXG48IS0tIERJQUxPRyBBR0dJVU5UQS9NT0RJRklDQSBDQU1QTyAtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dGaWVsZD5cclxuICA8ZXFwLWR5bmFtaWMtbW9kdWxlLWFkZC1mb3JtLWZpZWxkIFtmb3JtXT1cImZvcm1cIiBbZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiXHJcbiAgICBbZmllbGRdPVwic2VsZWN0ZWRGaWVsZFwiIFtmb3JtdWxhT2JqZWN0XT1cImZvcm11bGFPYmplY3RcIiBbaW5kZXhGaWVsZF09XCJpbmRleFNlbGVjdGVkRmllbGRcIlxyXG4gICAgW2F2YWlsYWJsZUZpZWxkc109XCJmb3JtLkZpZWxkc1wiIFtjb250ZXN0dWFsaXphdGlvbl09XCJjb250ZXN0dWFsaXphdGlvblwiXHJcbiAgICBbUXVlcnlFZGl0b3JDb21wb25lbnRdPVwiUXVlcnlFZGl0b3JDb21wb25lbnRcIiBbZmllbGRzRXh0cmFDb25maWddPVwiZmllbGRzRXh0cmFDb25maWdcIlxyXG4gICAgW2FjdGlvbkJ1dHRvbnNdPVwiYWN0aW9uQnV0dG9uc1wiIFthaUZpZWxkU3VnZ2VzdExvYWRpbmddPVwiYWlGaWVsZFN1Z2dlc3RMb2FkaW5nXCJcclxuICAgIFtmb3JtRmllbGRzR3JvdXBzXT1cIlxyXG4gICAgICBmb3JtLkZvcm1TY2FsYXJUeXBlICE9IEZvcm1TY2FsYXJUeXBlRW51bS5TZW1wbGljZVxyXG4gICAgICA/IGZvcm0uRm9ybUZpZWxkc0dyb3Vwc1xyXG4gICAgICA6IG51bGxcclxuICAgICAgXCJcclxuICAgIChvcGVuQWlFZGl0Rm9yRmllbGRFdmVudCk9XCJvbkFpRWRpdEZvckZpZWxkKCRldmVudClcIlxyXG4gICAgKG9wZW5BaUdyYXBoaWNTdWdnZXN0RXZlbnQpPVwib25BaUdyYXBoaWNTdWdnZXN0KCRldmVudClcIlxyXG4gICAgKHNhdmVGaWVsZEV2ZW50KT1cIm9uU2F2ZUZpZWxkKCRldmVudClcIiAob3V0KT1cIm9uRXh0ZXJuYWxDb21wb25lbnRPdXQoJGV2ZW50KVwiPlxyXG4gIDwvZXFwLWR5bmFtaWMtbW9kdWxlLWFkZC1mb3JtLWZpZWxkPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBURU1QTEFURSBQRVIgVklTVUFMSVpaQVJFIExBIENPTE9OTkEgREVMTEEgU0VaSU9ORSBORUxMQSBUQUJFTExBIERFSSBGSUVMRFMgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZmllbGRTZWN0aW9uQ29sdW1uVGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiPlxyXG4gIDxlcXAtc2VsZWN0IFthcnJheURhdGFdPVwiZm9ybS5Gb3JtRmllbGRzR3JvdXBzXCIgWyhuZ01vZGVsSW5wdXQpXT1cInJvdy5GaWVsZEdyb3VwXCIgW2FycmF5S2V5UHJvcGVydHldPVwiJ05hbWUnXCJcclxuICAgIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ05hbWUnXCIgcGxhY2Vob2xkZXI9XCJTZXppb25lXCIgW2lzUmVxdWlyZWRdPVwidHJ1ZVwiIFtpbmNsdWRlRnVsbE9iamVjdF09XCJmYWxzZVwiPlxyXG4gIDwvZXFwLXNlbGVjdD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gRElBTE9HIFBFUiBBR0dJVU5HRVJFL01PRElGSUNBUkUgVU5BIEFDVElPTiBTVUkgUkVDT1JEIERFTExBIEZPUk0gLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZGlhbG9nQWN0aW9uT25SZWNvcmQ+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWQgdGhpcmQtbW9kYWxcIiBzdHlsZT1cIm1heC1oZWlnaHQ6IDcwdmggIWltcG9ydGFudDsgb3ZlcmZsb3cteDogaGlkZGVuOyBvdmVyZmxvdy15OiBhdXRvXCI+XHJcbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImFjdGlvbk9uUmVjb3JkRm9ybUdyb3VwXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgdGl0bGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXRpdGxlLXN0YW5kYXJkXCI+XHJcbiAgICAgICAgICB7e1xyXG4gICAgICAgICAgaW5kZXhTZWxlY3RlZEFjdGlvbiAhPSBudWxsICYmIGluZGV4U2VsZWN0ZWRBY3Rpb24gPj0gMFxyXG4gICAgICAgICAgPyBcIk1vZGlmaWNhXCJcclxuICAgICAgICAgIDogXCJBZ2dpdW5naVwiXHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgICAgYXppb25lIHN1bCByZWNvcmRcclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+IE5vbWUgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJOYW1lXCIgcmVxdWlyZWQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEFjdGlvbi5OYW1lXCIgLz5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yXCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPiBJY29uYSA8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIkljb25cIiByZXF1aXJlZCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInNlbGVjdGVkQWN0aW9uLkljb25cIiAvPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtdC0yXCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPkF6aW9uZSAoSmF2YXNjcmlwdCk8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPHRleHRhcmVhIG1hdElucHV0IFtyb3dzXT1cIjNcIiBmb3JtQ29udHJvbE5hbWU9XCJBY3Rpb25cIiByZXF1aXJlZCBbKG5nTW9kZWwpXT1cInNlbGVjdGVkQWN0aW9uLkFjdGlvblwiXHJcbiAgICAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhY3Rpb25BdXRvY29tcGxldGVcIiAoa2V5dXApPVwic2V0QWN0aW9uQXV0b2NvbXBsZXRlT3B0aW9ucygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAoZm9jdXMpPVwic2V0QWN0aW9uQXV0b2NvbXBsZXRlT3B0aW9ucyhudWxsKVwiIHN0eWxlPVwiXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBsaWdodGdyYXkgIWltcG9ydGFudDtcclxuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHggIWltcG9ydGFudDtcclxuICAgICAgICAgICAgICBcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjYWN0aW9uQXV0b2NvbXBsZXRlPVwibWF0QXV0b2NvbXBsZXRlXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBhY3Rpb25BdXRvY29tcGxldGVPcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XHJcbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBtdC0yIG1iLTFcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uc0Zvcm1cIj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gbWF0LXJhaXNlZC1idXR0b24gY2FuY2VsXCIgKGNsaWNrKT1cImNsb3NlRGlhbG9nQWN0aW9uT25SZWNvcmQoKVwiIHR5cGU9XCJidXR0b25cIj5cclxuICAgICAgICAgICAgQW5udWxsYVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibXItMiBzYXZlXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNhdmVBY3Rpb25PblJlY29yZCgpXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFjdGlvbk9uUmVjb3JkRm9ybUdyb3VwLmludmFsaWRcIiB0eXBlPVwiYnV0dG9uXCI+XHJcbiAgICAgICAgICAgIFNhbHZhXHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Zvcm0+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIERJQUxPRyBQRVIgQUdHSVVOR0VSRS9NT0RJRklDQVJFIFVOIEJPVFRPTkUgQVpJT05FIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ0FjdGlvbkJ1dHRvbj5cclxuICA8YWN0aW9uLWJ1dHRvbi1jcmVhdG9yIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCIgW2Zvcm1dPVwiZm9ybVwiIFtmb3JtdWxhc109XCJhY3Rpb25CdXR0b25zXCJcclxuICAgIFthY3Rpb25CdXR0b25dPVwic2VsZWN0ZWRBY3Rpb25CdXR0b25cIiAob25TYXZlUmVjb3JkKT1cInNhdmVBY3Rpb25CdXR0b25zKCRldmVudClcIj48L2FjdGlvbi1idXR0b24tY3JlYXRvcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gVEVNUExBVEUgUEVSIENPTkZJR1VSQVJFIExFIEZPUk0gREkgREVUVEFHTElPIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ0lubmVyRm9ybT5cclxuICA8IS0tIFtmb3JtXT1cInNlbGVjdGVkSW5uZXJGb3JtXCJcclxuICAgIFtpbm5lckZvcm1NYW5hZ21lbnRdPVwidHJ1ZVwiXHJcbiAgICBbaW5uZXJGb3JtUmVmXT1cImRpYWxvZ0lubmVyRm9ybVJlZlwiIC0tPlxyXG4gIDxlcXAtZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yIFtjb25maWd1cmF0aW9uc109XCJpbm5lckZvcm1Db25maWdcIiAoc2F2ZUZvcm1FdmVudCk9XCJvblNhdmVPckV4aXRJbm5lckZvcm0oJGV2ZW50KVwiPlxyXG4gIDwvZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gVEVNUExBVEUgUEVSIElNUE9SVCAtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dJbXBvcnQ+XHJcbiAgPG1hdC1jYXJkIGNsYXNzPVwiaW1wb3J0RGlhbG9nXCI+XHJcbiAgICA8bWF0LWNhcmQtaGVhZGVyIGNsYXNzPVwicC0yIGp1c3RpZnktY29udGVudC1hcm91bmRcIj5cclxuICAgICAgPG1hdC1jYXJkLXRpdGxlPlxyXG4gICAgICAgIEltcG9ydFxyXG4gICAgICA8L21hdC1jYXJkLXRpdGxlPlxyXG4gICAgPC9tYXQtY2FyZC1oZWFkZXI+XHJcbiAgICA8bWF0LWNhcmQtY29udGVudCBjbGFzcz1cInAtMlwiPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBjbGFzcz1cImlucHV0LWZpbGUtYnRuIHBiLTJcIiAoY2hhbmdlKT1cIm9uSW1wb3J0KCRldmVudClcIiAvPlxyXG4gICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gICAgPG1hdC1jYXJkLWZvb3RlciBjbGFzcz1cInAtMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1jbGVhciBidXR0b24tYmFjayBtZS0yXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJkaXNhYmxlZFwiIChjbGljayk9XCJjbG9zZUltcG9ydCgpXCI+XHJcbiAgICAgICAgQW5udWxsYVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbWF0LWNhcmQtZm9vdGVyPlxyXG4gIDwvbWF0LWNhcmQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIERJQUxPRyBQRVIgQUdHSVVOR0VSRS9NT0RJRklDQVJFIEkgVFJJR0dFUlMgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZGlhbG9nVHJpZ2dlcnM+XHJcbiAgPHRyaWdnZXItY3JlYXRvciBbZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiIFtmb3JtXT1cImZvcm1cIiBbZm9ybXVsYXNdPVwidHJpZ2dlcnNcIlxyXG4gICAgW3RyaWdnZXJdPVwic2VsZWN0ZWRUcmlnZ2VyXCIgKG9uU2F2ZVJlY29yZCk9XCJzYXZlVHJpZ2dlcigkZXZlbnQpXCI+PC90cmlnZ2VyLWNyZWF0b3I+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIERJQUxPRyBNT0RJRklDQSBDT04gQUkgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZGlhbG9nQWlFZGl0PlxyXG4gIDxtYXQtY2FyZCBzdHlsZT1cIm1pbi13aWR0aDogNDgwcHhcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJhaS1kaWFsb2ctaGVhZGVyXCI+XHJcbiAgICAgIDxtYXQtaWNvbj5hdXRvX2ZpeF9oaWdoPC9tYXQtaWNvbj5cclxuICAgICAgPHNwYW4+e3sgaXNOZXdGb3JtID8gJ0NyZWEgZm9ybSBjb24gQUknIDogJ01vZGlmaWNhIGZvcm0gY29uIEFJJyB9fTwvc3Bhbj5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImFpUHJvbXB0SGlzdG9yeS5sZW5ndGggPiAwXCIgbWF0LWljb24tYnV0dG9uIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIGNsYXNzPVwiYWktaGlzdG9yeS10b2dnbGUtYnRuXCJcclxuICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInNob3dBaVByb21wdEhpc3RvcnlcIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cInNob3dBaVByb21wdEhpc3RvcnkgPyAnTmFzY29uZGkgc3RvcmljbyByaWNoaWVzdGUnIDogJ01vc3RyYSBzdG9yaWNvIHJpY2hpZXN0ZSdcIlxyXG4gICAgICAgIChjbGljayk9XCJzaG93QWlQcm9tcHRIaXN0b3J5ID0gIXNob3dBaVByb21wdEhpc3RvcnlcIj5cclxuICAgICAgICA8bWF0LWljb24+e3sgc2hvd0FpUHJvbXB0SGlzdG9yeSA/ICdoaXN0b3J5X3RvZ2dsZV9vZmYnIDogJ2hpc3RvcnknIH19PC9tYXQtaWNvbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiYWktZGlhbG9nLWJvZHktZmxleFwiPlxyXG4gICAgICA8bWF0LWNhcmQtY29udGVudCBjbGFzcz1cInAtMyBhaS1kaWFsb2ctbWFpbi1jb250ZW50XCI+XHJcbiAgICAgICAgPCEtLSBQcm9tcHQgdGV4dGFyZWEgKyBtaWNyb2Zvbm8gLS0+XHJcbiAgICAgICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgc3R5bGU9XCJ3aWR0aDogMTAwJVwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IGlzTmV3Rm9ybSA/ICdEZXNjcml2aSBpbCBmb3JtIGRhIGNyZWFyZScgOiAnRGVzY3JpdmkgbGEgbW9kaWZpY2EgZGEgYXBwb3J0YXJlJyB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8dGV4dGFyZWEgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJhaUVkaXRQcm9tcHRcIiByb3dzPVwiNVwiXHJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImlzTmV3Rm9ybSA/ICdFczogY3JlYSB1biBmb3JtIHBlciBsYSByZWdpc3RyYXppb25lIHBhemllbnRpIGNvbiBjYW1waSBub21lLCBjb2dub21lLCBkYXRhIGRpIG5hc2NpdGEgZSBjb2RpY2UgZmlzY2FsZS4uLicgOiAnRXM6IGFnZ2l1bmdpIHVuIGNhbXBvIGRhdGEgZGkgbmFzY2l0YSwgcmltdW92aSBpbCBjYW1wbyBlbWFpbCwgcmVuZGkgb2JibGlnYXRvcmlvIGlsIGNhbXBvIHRlbGVmb25vLi4uJ1wiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwidHJ1ZVwiIFNwZWVjaFRvVGV4dCBbKGJpbmRlZFRleHQpXT1cImFpRWRpdFByb21wdFwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyByaWdodDogMTJweDsgdG9wOiAxMnB4OyBjdXJzb3I6IHBvaW50ZXI7IGNvbG9yOiAjNjY2XCJcclxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiaXNOZXdGb3JtID8gJ1BhcmxhIHBlciBkZXNjcml2ZXJlIGlsIGZvcm0nIDogJ1BhcmxhIHBlciBkZXR0YXJlIGxhIG1vZGlmaWNhJ1wiPmtleWJvYXJkX3ZvaWNlPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBBbGxlZ2F0aSAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItMiBtdC0xXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImFpRWRpdEZpbGVJbnB1dC5jbGljaygpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5hdHRhY2hfZmlsZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDZweFwiPkFnZ2l1bmdpIGFsbGVnYXRpIChQREYgbyBpbW1hZ2luaSk8L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxpbnB1dCAjYWlFZGl0RmlsZUlucHV0IHR5cGU9XCJmaWxlXCIgbXVsdGlwbGUgYWNjZXB0PVwiaW1hZ2UvKixhcHBsaWNhdGlvbi9wZGZcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIlxyXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9uQWlFZGl0RmlsZUNoYW5nZSgkZXZlbnQpXCIgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8dWwgKm5nSWY9XCJhaUVkaXRBdHRhY2htZW50cy5sZW5ndGggPiAwXCIgc3R5bGU9XCJsaXN0LXN0eWxlOiBub25lOyBwYWRkaW5nOiAwOyBtYXJnaW46IDAgMCAxMnB4XCI+XHJcbiAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGF0dCBvZiBhaUVkaXRBdHRhY2htZW50czsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA2cHg7IG1hcmdpbi1ib3R0b206IDRweFwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9XCJmb250LXNpemU6IDE4cHhcIj5pbnNlcnRfZHJpdmVfZmlsZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IGF0dC5maWxlTmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4OyBjdXJzb3I6IHBvaW50ZXI7IGNvbG9yOiAjOTk5XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlQWlFZGl0QXR0YWNobWVudChpKVwiPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuXHJcbiAgICAgICAgPCEtLSBBdXRvc2F2ZSAtLT5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImFpRWRpdEF1dG9zYXZlXCIgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICB7eyBpc05ld0Zvcm0gPyAnU2FsdmEgYXV0b21hdGljYW1lbnRlIGRvcG8gbGEgY3JlYXppb25lJyA6ICdTYWx2YSBhdXRvbWF0aWNhbWVudGUgZG9wbyBsYSBtb2RpZmljYScgfX1cclxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcblxyXG4gICAgICAgIDwhLS0gU3RpbWEgY29zdG8gQUkgKGFnZ2lvcm5hdGEgaW4gdGVtcG8gcmVhbGUgYWwgdmFyaWFyZSBkZWwgcHJvbXB0IGUgZGVnbGkgYWxsZWdhdGkpIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zXCI+XHJcbiAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+XHJcbiAgICAgICAgICAgIDxiPkNvc3RvIHN0aW1hdG8gdXNvIEFJPC9iPjxiciAvPlxyXG4gICAgICAgICAgICBQcmltbyB1c286IGFsIG1hc3NpbW8ge3sgZm9ybWF0QWlFZGl0Q29zdChhaUVkaXRDb3N0Rmlyc3RFdXIpIH19IEV1cm88YnIgLz5cclxuICAgICAgICAgICAgVXNpIHN1Y2Nlc3Npdmk6IGFsIG1hc3NpbW8ge3sgZm9ybWF0QWlFZGl0Q29zdChhaUVkaXRDb3N0U3Vic2VxdWVudEV1cikgfX0gRXVyb1xyXG4gICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG5cclxuICAgICAgPCEtLSBQYW5uZWxsbyBzdG9yaWNvIHJpY2hpZXN0ZSAtLT5cclxuICAgICAgPGRpdiAqbmdJZj1cInNob3dBaVByb21wdEhpc3RvcnkgJiYgYWlQcm9tcHRIaXN0b3J5Lmxlbmd0aCA+IDBcIiBjbGFzcz1cImFpLWhpc3RvcnktcGFuZWxcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWktaGlzdG9yeS1wYW5lbC10aXRsZVwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uIHN0eWxlPVwiZm9udC1zaXplOiAxNnB4OyB3aWR0aDogMTZweDsgaGVpZ2h0OiAxNnB4XCI+aGlzdG9yeTwvbWF0LWljb24+XHJcbiAgICAgICAgICA8c3Bhbj5TdG9yaWNvIHJpY2hpZXN0ZTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWktaGlzdG9yeS1saXN0XCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwcm9tcHQgb2YgYWlQcm9tcHRIaXN0b3J5OyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJhaS1oaXN0b3J5LWl0ZW1cIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1oaXN0b3J5LWluZGV4XCI+e3sgaSArIDEgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktaGlzdG9yeS10ZXh0XCI+e3sgcHJvbXB0IH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPG1hdC1jYXJkLWZvb3RlciBjbGFzcz1cInAtMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiIHN0eWxlPVwiZ2FwOiA4cHhcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW2Rpc2FibGVkXT1cImFpRWRpdExvYWRpbmdcIiAoY2xpY2spPVwiY2xvc2VBaUVkaXREaWFsb2coKVwiPlxyXG4gICAgICAgIEFubnVsbGFcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIFtkaXNhYmxlZF09XCIhYWlFZGl0UHJvbXB0Py50cmltKCkgfHwgYWlFZGl0TG9hZGluZ1wiXHJcbiAgICAgICAgKGNsaWNrKT1cInNlbmRBaUVkaXQoKVwiPlxyXG4gICAgICAgIDxtYXQtc3Bpbm5lciAqbmdJZj1cImFpRWRpdExvYWRpbmdcIiBkaWFtZXRlcj1cIjE4XCJcclxuICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTogaW5saW5lLWJsb2NrOyBtYXJnaW4tcmlnaHQ6IDZweDsgdmVydGljYWwtYWxpZ246IG1pZGRsZVwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICAgICAgPHNwYW4+e3sgYWlFZGl0TG9hZGluZyA/ICdFbGFib3JhemlvbmUuLi4nIDogKGlzTmV3Rm9ybSA/ICdDcmVhIGNvbiBBSScgOiAnTW9kaWZpY2EgY29uIEFJJykgfX08L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9tYXQtY2FyZC1mb290ZXI+XHJcbiAgPC9tYXQtY2FyZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gVklTVUFMIEVESVRPUiDigJQgVG9vbHRpcCBhemlvbmkgY2FtcG8gLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZGlhbG9nVmVUb29sdGlwPlxyXG4gIDxkaXYgY2xhc3M9XCJ2ZS10b29sdGlwLXBhbmVsXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidmUtdG9vbHRpcC1oZWFkZXJcIj5cclxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwidmUtdG9vbHRpcC1pY29uXCI+ZWRpdF9zcXVhcmU8L21hdC1pY29uPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInZlLXRvb2x0aXAtdGl0bGVcIj57eyB2ZVNlbGVjdGVkRmllbGQ/LkxhYmVsIH19PC9zcGFuPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZGlhbG9nVmVUb29sdGlwUmVmPy5jbG9zZSgpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXZlU2hvd0dyYXBoaWNJbnB1dFwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInZlRWRpdEZpZWxkKClcIj5cclxuICAgICAgICA8bWF0LWljb24+c2V0dGluZ3M8L21hdC1pY29uPlxyXG4gICAgICAgIE1vZGlmaWNhIGNhbXBvXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKm5nSWY9XCJlbmRQb2ludENvbmZpZ3VyYXRpb24/LkZvcm1zPy5TcGVlY2hUb0Zvcm1FZGl0RW5kUG9pbnRcIiAoY2xpY2spPVwidmVBaUVkaXQoKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5hdXRvX2ZpeF9oaWdoPC9tYXQtaWNvbj5cclxuICAgICAgICBNb2RpZmljYSBjb24gSUFcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAqbmdJZj1cImVuZFBvaW50Q29uZmlndXJhdGlvbj8uRm9ybXM/LlNwZWVjaFRvRm9ybUVkaXRFbmRQb2ludFwiIChjbGljayk9XCJ2ZVNob3dHcmFwaGljSW5wdXQgPSB0cnVlXCI+XHJcbiAgICAgICAgPG1hdC1pY29uPnBhbGV0dGU8L21hdC1pY29uPlxyXG4gICAgICAgIFN1Z2dlcmlzY2kgR3JhZmljYVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJ2ZU9wZW5SZW9yZGVyKClcIj5cclxuICAgICAgICA8bWF0LWljb24+ZHJhZ19pbmRpY2F0b3I8L21hdC1pY29uPlxyXG4gICAgICAgIFJpb3JkaW5hXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInZlU3RhcnRTd2FwKClcIj5cclxuICAgICAgICA8bWF0LWljb24+c3dhcF9ob3JpejwvbWF0LWljb24+XHJcbiAgICAgICAgU2NhbWJpYVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwidmVEZWxldGVGaWVsZCgpXCIgc3R5bGU9XCJjb2xvcjogI2U1MzkzNTtcIj5cclxuICAgICAgICA8bWF0LWljb24gc3R5bGU9XCJjb2xvcjogI2U1MzkzNTtcIj5kZWxldGU8L21hdC1pY29uPlxyXG4gICAgICAgIEVsaW1pbmEgY2FtcG9cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwidmUtdG9vbHRpcC1ncmFwaGljXCIgKm5nSWY9XCJ2ZVNob3dHcmFwaGljSW5wdXRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInZlLXRvb2x0aXAtZ3JhcGhpYy1oZWFkZXJcIj5cclxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwidmVTaG93R3JhcGhpY0lucHV0ID0gZmFsc2VcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbj5hcnJvd19iYWNrPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8c3Bhbj5HcmFmaWNhIHBlciBcInt7IHZlU2VsZWN0ZWRGaWVsZD8uTGFiZWwgfX1cIjwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy0xMDBcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPlN1Z2dlcmltZW50byBncmFmaWNvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPHRleHRhcmVhIG1hdElucHV0IFsobmdNb2RlbCldPVwidmVHcmFwaGljSGludFwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxyXG4gICAgICAgICAgcm93cz1cIjNcIiBwbGFjZWhvbGRlcj1cImVzLiBib3JkbyBibHUsIHNmb25kbyBzZW1pLXRyYXNwYXJlbnRlLCBldGljaGV0dGEgaW4gZ3Jhc3NldHRvLi4uXCI+PC90ZXh0YXJlYT5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPGRpdiBjbGFzcz1cInZlLXRvb2x0aXAtZ3JhcGhpYy1hY3Rpb25zXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJ2ZVNob3dHcmFwaGljSW5wdXQgPSBmYWxzZVwiPkFubnVsbGE8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJ2ZVNlbmRHcmFwaGljKClcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbj5hdXRvX2ZpeF9oaWdoPC9tYXQtaWNvbj5cclxuICAgICAgICAgIEludmlhXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIFZJU1VBTCBFRElUT1Ig4oCUIFJpb3JkaW5hIGNhbXBpIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ1ZlUmVvcmRlcj5cclxuICA8bWF0LWNhcmQgY2xhc3M9XCJ2ZS1yZW9yZGVyLWNhcmRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ2ZS1yZW9yZGVyLWhlYWRlclwiPlxyXG4gICAgICA8bWF0LWljb24+ZHJhZ19pbmRpY2F0b3I8L21hdC1pY29uPlxyXG4gICAgICA8c3Bhbj5SaW9yZGluYSBjYW1waTwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgIDxkaXYgY2RrRHJvcExpc3QgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJvblZlRHJhZ0Ryb3BSZW9yZGVyKCRldmVudClcIiBjbGFzcz1cInZlLXJlb3JkZXItbGlzdFwiPlxyXG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZpZWxkIG9mIHZlUmVvcmRlckZpZWxkc1wiIGNka0RyYWcgY2xhc3M9XCJ2ZS1yZW9yZGVyLWl0ZW1cIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBjZGtEcmFnSGFuZGxlIGNsYXNzPVwidmUtZHJhZy1oYW5kbGVcIj5kcmFnX2luZGljYXRvcjwvbWF0LWljb24+XHJcbiAgICAgICAgICA8c3Bhbj57eyBmaWVsZC5EZXNjcmlwdGlvbiB9fTwvc3Bhbj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2ZS1kcmFnLXBsYWNlaG9sZGVyXCIgKmNka0RyYWdQbGFjZWhvbGRlcj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICA8bWF0LWNhcmQtZm9vdGVyIGNsYXNzPVwicC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCIgc3R5bGU9XCJnYXA6IDhweFwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cImRpYWxvZ1ZlUmVvcmRlclJlZj8uY2xvc2UoKVwiPkFubnVsbGE8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwidmVBcHBseVJlb3JkZXIoKVwiPk9LPC9idXR0b24+XHJcbiAgICA8L21hdC1jYXJkLWZvb3Rlcj5cclxuICA8L21hdC1jYXJkPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBESUFMT0cgQ09OVEVTVFVBTElaWkFaSU9ORSBEQkdFVFRFUiAtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dDb250ZXN0dWFsaXphdGlvbj5cclxuICA8bWF0LWNhcmQgc3R5bGU9XCJtaW4td2lkdGg6IDQyMHB4XCI+XHJcbiAgICA8bWF0LWNhcmQtaGVhZGVyIGNsYXNzPVwicC0yXCI+XHJcbiAgICAgIDxtYXQtY2FyZC10aXRsZT5Db250ZXN0dWFsaXp6YXppb25lIGRlbCBEQkdldHRlcjwvbWF0LWNhcmQtdGl0bGU+XHJcbiAgICA8L21hdC1jYXJkLWhlYWRlcj5cclxuICAgIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwicC0zXCI+XHJcbiAgICAgIDxlcXAtc2VsZWN0IFthcnJheURhdGFdPVwiY29udGVzdHVhbGl6YXRpb25cIiBbKG5nTW9kZWxJbnB1dCldPVwic2VsZWN0ZWRDb250ZXN0dWFsaXphdGlvblwiXHJcbiAgICAgICAgW2FycmF5S2V5UHJvcGVydHldPVwiJ2VudGl0eVRhYmxlTmFtZSdcIiBbYXJyYXlWYWx1ZVByb3BlcnR5XT1cIidlbnRpdHlUYWJsZU5hbWUnXCJcclxuICAgICAgICAobmdNb2RlbElucHV0Q2hhbmdlKT1cIm9uQ29udGVzdHVhbGl6YXRpb25TZWxlY3QoKVwiIFtwbGFjZWhvbGRlcl09XCInQ29udGVzdHVhbGl6emF6aW9uZSBkZWwgREJHZXR0ZXInXCJcclxuICAgICAgICBbaW5jbHVkZUZ1bGxPYmplY3RdPVwiZmFsc2VcIj48L2VxcC1zZWxlY3Q+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZENvbnRlc3R1YWxpemF0aW9uICE9IG51bGxcIiBjbGFzcz1cIm10LTJcIj5cclxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkQ29udGVzdHVhbGl6YXRpb25WYWx1ZVwiXHJcbiAgICAgICAgICAoY2hhbmdlKT1cIm9uQ29udGVzdHVhbGl6YXRpb25TZWxlY3RWYWx1ZSgpXCI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gICAgPG1hdC1jYXJkLWZvb3RlciBjbGFzcz1cInAtMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiIHN0eWxlPVwiZ2FwOiA4cHhcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZGFuZ2VyXCIgKGNsaWNrKT1cImFwcGx5Q29udGVzdHVhbGl6YXRpb24obnVsbCk7IGNsb3NlQ29udGVzdHVhbGl6YXRpb25EaWFsb2coKVwiPlJpbXVvdmk8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJhcHBseUNvbnRlc3R1YWxpemF0aW9uKGNvbnRlc3R1YWxpemF0aW9uKTsgY2xvc2VDb250ZXN0dWFsaXphdGlvbkRpYWxvZygpXCI+QXBwbGljYTwvYnV0dG9uPlxyXG4gICAgPC9tYXQtY2FyZC1mb290ZXI+XHJcbiAgPC9tYXQtY2FyZD5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
|
|
2181
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydGVkL2VxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3IvZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydGVkL2VxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3IvZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpREFBaUQ7QUFDakQsT0FBTyxFQUdMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFHTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLGtCQUFrQixFQUVsQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQ0wsaUJBQWlCLEVBR2pCLFVBQVUsR0FDWCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xJLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN4RCxPQUFPLEVBR0wsYUFBYSxHQUNkLE1BQU0sNkNBQTZDLENBQUM7QUFDckQsT0FBTyxFQUNMLGNBQWMsRUFDZCxJQUFJLEVBRUosa0JBQWtCLEVBQ2xCLFlBQVksR0FDYixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFB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QUUsSUFBSSxFQUFFO2dCQVE5QyxvQkFBb0I7c0JBRG5CLFNBQVM7dUJBQUMsc0JBQXNCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQU1wRCxvQkFBb0I7c0JBRG5CLFNBQVM7dUJBQUMsc0JBQXNCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQU9uRCxrQkFBa0I7c0JBRGpCLFNBQVM7dUJBQUMsb0JBQW9CLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQU1sRCxrQkFBa0I7c0JBRGpCLFNBQVM7dUJBQUMsb0JBQW9CLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVV2QyxhQUFhO3NCQUF0QixNQUFNO2dCQUtHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFHRyxHQUFHO3NCQUFaLE1BQU07Z0JBSXdDLGNBQWM7c0JBQTVELFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUdFLGFBQWE7c0JBQTNELFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFjQSxZQUFZO3NCQUF4RCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSWEsdUJBQXVCO3NCQUE5RSxTQUFTO3VCQUFDLHlCQUF5QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHTixlQUFlO3NCQUE5RCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDRSxlQUFlO3NCQUE5RCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8vIGltcG9ydCB7IFRocm93U3RtdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtcclxuICBVbnR5cGVkRm9ybUJ1aWxkZXIsXHJcbiAgVW50eXBlZEZvcm1Db250cm9sLFxyXG4gIFVudHlwZWRGb3JtR3JvdXAsXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7XHJcbiAgQ2VsbEFsaWdubWVudEVudW0sXHJcbiAgQ29uZmlnQ29sdW1uLFxyXG4gIEVxcFRhYmxlQ29tcG9uZW50LFxyXG4gIFR5cGVDb2x1bW4sXHJcbn0gZnJvbSBcIkBlcXByb2plY3QvZXFwLXRhYmxlXCI7XHJcbmltcG9ydCB7IE51bWVyaWNGaWVsZCB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRzL251bWVyaWNGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBCYXNlRmllbGQsIERhdGFHZXR0ZXIsIERhdGFHZXR0ZXJUeXBlRW51bSwgRmllbGRJbnZpc2liaWxpdHlFbnVtLCBGaWVsZFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Jhc2VGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2NvbnRleHQubW9kZWxcIjtcclxuaW1wb3J0IHtcclxuICBFbmRQb2ludENvbmZpZ3VyYXRpb24sXHJcbiAgRW5kUG9pbnREYXRhUGFyYW1zLFxyXG4gIFBhcmFtVHlwZUVudW0sXHJcbn0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9lbmRQb2ludENvbmZpZ3VyYXRpb24ubW9kZWxcIjtcclxuaW1wb3J0IHtcclxuICBBY3Rpb25PblJlY29yZCxcclxuICBGb3JtLFxyXG4gIEZvcm1GaWVsZEdyb3VwLFxyXG4gIEZvcm1TY2FsYXJUeXBlRW51bSxcclxuICBGb3JtVHlwZUVudW0sXHJcbn0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsXCI7XHJcbmltcG9ydCB7IEFycmF5VmFsaWRhdG9ycyB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9jdXN0b20tZm9ybS12YWxpZGF0b3JzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvZXFwLWR5bmFtaWMtbW9kdWxlLWRpYWxvZy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXNcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlU3R5bGUgfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xyXG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IER5bmFtaWNMb2FkZXJEaXJlY3RpdmVEYXRhLCBldmVudE91dCB9IGZyb20gXCIuLi8uLi8uLi9kaXJlY3RpdmVzL2R5bmFtaWMtbG9hZGVyL2R5bmFtaWMtbG9hZGVyLmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQgeyBUcmlnZ2VyLCBBY3Rpb25CdXR0b24sIEFjdGlvbkZsYWdFbnVtLCBGaXJlVHJpZ2dlciB9IGZyb20gJy4uLy4uLy4uL21vZGVscy90cmlnZ2VyLm1vZGVsJztcclxuaW1wb3J0IHsgQ29udGVzdHVhbGl6YXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2dldHRlci5tb2RlbFwiO1xyXG5pbXBvcnQgeyBJbWFnZVNlbGVjdG9yRmllbGQgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9pbWFnZVNlbGVjdG9yRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgRmllbGRFeHRyYUNvbmZpZyB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRFeHRyYUNvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBBdHRhY2htZW50VHlwZSwgSUF0dGFjaG1lbnREVE8gfSBmcm9tIFwiQGVxcHJvamVjdC9lcXAtYXR0YWNobWVudHNcIjtcclxuaW1wb3J0IHsgRHluQXR0YWNobWVudCB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZHluQXR0YWNobWVudFwiO1xyXG5pbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7IGluamVjdEdvb2dsZUZvbnRzRnJvbUZvcm0gfSBmcm9tICcuLi8uLi8uLi91dGlscy9nb29nbGUtZm9udHMtaW5qZWN0b3InO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvclwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9lcXAtZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yLmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRXFwRHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG5cclxuICBASW5wdXQoKSBkZWJ1Z01vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgZmllbGRzRXh0cmFDb25maWc6IEFycmF5PEZpZWxkRXh0cmFDb25maWc+O1xyXG4gIEBJbnB1dCgpIGNvbmZpZ3VyYXRpb25zOiBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29uZmlnID1cclxuICAgIG5ldyBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29uZmlnKCk7XHJcbiAgQElucHV0KCkgZm9ybUlEOiBzdHJpbmcgPSBudWxsO1xyXG4gIEBJbnB1dCgpIHZpZXdNb2RlOiBzdHJpbmcgPSBcImFkZE9yRWRpdFwiOyAvLyBFeHBvcnRcclxuICBASW5wdXQoKSBRdWVyeUVkaXRvckNvbXBvbmVudDogRHluYW1pY0xvYWRlckRpcmVjdGl2ZURhdGE7IC8vIEwnaW50ZXJvIGNvbXBvbmVudGUgcXVlcnkgRWRpdG9yXHJcbiAgQElucHV0KCkgdHJpZ2dlcnM6IGFueTtcclxuICBASW5wdXQoKSBhY3Rpb25CdXR0b25zOiBhbnk7XHJcbiAgQElucHV0KCkgY29udGVzdHVhbGl6YXRpb246IEFycmF5PENvbnRlc3R1YWxpemF0aW9uPjtcclxuICBASW5wdXQoKSBmb3JtdWxhT2JqZWN0OiBhbnk7IC8vIEVzZW1waW86IHtjdXJyb2xlOiByb2xlLCB1c2VyOiB1c2VyLCBtZWRpY2FsOiBtZWRpY2FsZXhhbWluYXRpb259XHJcbiAgQElucHV0KCkgY29uZmlndXJhdG9yVGhlbWU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgQE91dHB1dCgpIGZpcmVUcmlnZ2VyOiBFdmVudEVtaXR0ZXI8RmlyZVRyaWdnZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxGaXJlVHJpZ2dlcj4oKTtcclxuXHJcbiAgbG9hZGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogVG9rZW4gZGEgdXNhcmUgbmVnbGkgZW5kcG9pbnQgZGEgY2hpYW1hcmUgcGVyIHJlY3VwZXJhcmUgbyBzYWx2YXJlIGkgcmVjb3JkLlxyXG4gICAqIFVzYXRvIHNvbG8gc2UgdmllbmUgcG9wb2xhdGEgbGEgcHJvcHJpZXTDoCBcImJhc2VTZXJ2ZXJVcmxcIi5cclxuICAgKi9cclxuICB1c2VyVG9rZW46IHN0cmluZyA9IG51bGw7XHJcbiAgLyoqXHJcbiAgICogQ29uZmlndXJhemlvbmUgZGVnbGkgZW5kcG9pbnQgZGEgY2hpYW1hcmUgcGVyIHJlY3VwZXJhcmUgbyBzYWx2YXJlIGkgZGF0aS5cclxuICAgKiBQdcOyIGVzc2VyZSBkZWZpbml0YSBkYWxsJ3V0ZW50ZSBvcHB1cmUgbGFzY2lhdGEgbnVsbCwgdmllbmUgcG9wb2xhdGEgY29uIGRlaVxyXG4gICAqIHZhbG9yaSBkaSBkZWZhdWx0IHNlIHZpZW5lIHZhbG9yaXp6YXRhIGxhIHByb3ByaWV0w6AgXCJiYXNlU2VydmVyVXJsXCIgYWx0cmltZW50aVxyXG4gICAqIHZpZW5lIGxhc2NpYXRhIG51bGwgZSBub24gdmllbmUgZXNlZ3VpdGEgbmVzc3VuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIuXHJcbiAgICovXHJcbiAgZW5kUG9pbnRDb25maWd1cmF0aW9uOiBFbmRQb2ludENvbmZpZ3VyYXRpb24gPSBudWxsO1xyXG4gIC8qKlxyXG4gICAqIFVybCBkZWwgc2VydmVyIGRhIGNoaWFtYXJlIHBlciByZWN1ZXJhcmUsIHNhbHZhcmUgbyBlbGltaW5hcmUgaSByZWNvcmQuXHJcbiAgICogVXNhdG8gcGVyIGNyZWFyZSBsYSBjb25maWd1cmF6aW9uZSBkaSBkZWZhdWx0IGRlZ2xpIGVuZHBvaW50IGRhIGNoaWFtYXJlLlxyXG4gICAqL1xyXG4gIGJhc2VTZXJ2ZXJVcmw6IHN0cmluZyA9IG51bGw7XHJcbiAgY29udGV4dDogQ29udGV4dCA9IG5ldyBDb250ZXh0KCk7XHJcblxyXG4gIC8qIGV4cG9ydCB2YXJpYWJsZXMgKi9cclxuICBkb3dubG9hZE5hbWU6IHN0cmluZztcclxuICBkb3dubG9hZEpzb25IcmVmOiBhbnk7XHJcbiAgc3RyaW5naWZpZWRGb3JtOiBzdHJpbmc7XHJcblxyXG4gIC8qIGltcG9ydCB2YXJpYWJsZXMgKi9cclxuICBpbXBvcnRlZE1vZHVsZTogc3RyaW5nID0gbnVsbDsgLy8ganNvbiBvYmplY3RcclxuICBkaWFsb2dJbXBvcnRSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICBAVmlld0NoaWxkKFwiZGlhbG9nSW1wb3J0XCIsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ0ltcG9ydDogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgZm9ybTogRm9ybSA9IG5ldyBGb3JtKCk7XHJcbiAgYmFja3VwRm9ybTogRm9ybSA9IG51bGw7XHJcbiAgc2F2ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBvcmdhSUQ6IHN0cmluZyA9IG51bGw7XHJcbiAgVXNlcklEOiBudW1iZXIgPSAzNjtcclxuICBpbm5lckZvcm1NYW5hZ21lbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpbm5lckZvcm1SZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuXHJcbiAgLyogQ09ORklHVVJBWklPTkUgUEVSIFZJU1VBTElaWkFaSU9ORSBGT1JNIENSRUFUQSAqL1xyXG4gIHZpZXdDb25maWc6IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnID0gbmV3IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnKFxyXG4gICAgdHJ1ZSxcclxuICAgIGZhbHNlLFxyXG4gICAgZmFsc2UsXHJcbiAgICBcIjBcIlxyXG4gICk7XHJcblxyXG4gIGZvcm1Gb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAgPSBudWxsO1xyXG4gIGZvcm1Db21wbGV0ZWQgPSBmYWxzZTtcclxuICBwcmV2aWV3Rm9ybTogRm9ybTtcclxuICBmb3JtRmllbGRHcm91cE5hbWU6IHN0cmluZztcclxuXHJcbiAgYWN0aW9uQXV0b2NvbXBsZXRlT3B0aW9uczogQXJyYXk8eyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+O1xyXG5cclxuICAvLyNyZWdpb24gRW51bWVyYXRvcmkgdXNhdGkgbmVsbCdodG1sXHJcbiAgRm9ybVR5cGVFbnVtID0gRm9ybVR5cGVFbnVtO1xyXG4gIEZvcm1TY2FsYXJUeXBlRW51bSA9IEZvcm1TY2FsYXJUeXBlRW51bTtcclxuICBBdHRhY2htZW50VHlwZSA9IEF0dGFjaG1lbnRUeXBlO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gR2VzdGlvbmUgc2ZvbmRvIGZvcm1cclxuICBnZXQgcHJldmlld0JnU3R5bGUoKTogU2FmZVN0eWxlIHwgbnVsbCB7XHJcbiAgICBpZiAoIXRoaXMuZm9ybT8uQmdJbWFnZUJhc2U2NCkgcmV0dXJuIG51bGw7XHJcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKFtcclxuICAgICAgYGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LCR7dGhpcy5mb3JtLkJnSW1hZ2VCYXNlNjR9JylgLFxyXG4gICAgICAnYmFja2dyb3VuZC1zaXplOiBjb3ZlcicsXHJcbiAgICAgICdiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXInLFxyXG4gICAgICAnYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdCcsXHJcbiAgICBdLmpvaW4oJzsgJykpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHByZXZpZXdUaGVtZVN0eWxlKCk6IFNhZmVTdHlsZSB8IG51bGwge1xyXG4gICAgaWYgKCF0aGlzLmZvcm0/LlRoZW1lQ1NTKSByZXR1cm4gbnVsbDtcclxuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUodGhpcy5mb3JtLlRoZW1lQ1NTLnRyaW0oKS5yZXBsYWNlKC87JC8sICcnKSk7XHJcbiAgfVxyXG5cclxuICBnZXQgYmdBdHRhY2htZW50TGlzdCgpOiBJQXR0YWNobWVudERUT1tdIHtcclxuICAgIGlmICghdGhpcy5mb3JtPy5CZ0ltYWdlQmFzZTY0KSByZXR1cm4gW107XHJcbiAgICBjb25zdCBhdHQgPSBuZXcgRHluQXR0YWNobWVudCgpO1xyXG4gICAgYXR0LklEID0gMDtcclxuICAgIGF0dC5GaWxlRGF0YUJhc2U2NCA9IHRoaXMuZm9ybS5CZ0ltYWdlQmFzZTY0O1xyXG4gICAgYXR0LklzSW1hZ2UgPSB0cnVlO1xyXG4gICAgYXR0LkZpbGVDb250ZW50VHlwZSA9ICdpbWFnZS9wbmcnO1xyXG4gICAgcmV0dXJuIFthdHRdO1xyXG4gIH1cclxuXHJcbiAgb25CZ0ltYWdlQ2hhbmdlKGF0dGFjaG1lbnRzOiBJQXR0YWNobWVudERUT1tdKTogdm9pZCB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IGF0dGFjaG1lbnRzPy5sZW5ndGggPiAwID8gYXR0YWNobWVudHNbMF0uRmlsZURhdGFCYXNlNjQgOiBudWxsO1xyXG4gICAgdGhpcy5mb3JtLkJnSW1hZ2VCYXNlNjQgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLnByZXZpZXdGb3JtKSB0aGlzLnByZXZpZXdGb3JtLkJnSW1hZ2VCYXNlNjQgPSB2YWx1ZTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG9uQmdJbWFnZURlbGV0ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybS5CZ0ltYWdlQmFzZTY0ID0gbnVsbDtcclxuICAgIGlmICh0aGlzLnByZXZpZXdGb3JtKSB0aGlzLnByZXZpZXdGb3JtLkJnSW1hZ2VCYXNlNjQgPSBudWxsO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRklFTERfVFlQRV9DU1NfQ0xBU1M6IFJlY29yZDxudW1iZXIsIHN0cmluZz4gPSB7XHJcbiAgICAxOiAnVGV4dEZpZWxkU3R5bGVDU1MnLFxyXG4gICAgMjogJ1RleHRhcmVhRmllbGRTdHlsZUNTUycsXHJcbiAgICAzOiAnQm9vbGVhbkZpZWxkU3R5bGVDU1MnLFxyXG4gICAgNDogJ0RhdGVGaWVsZFN0eWxlQ1NTJyxcclxuICAgIDU6ICdOdW1lcmljRmllbGRTdHlsZUNTUycsXHJcbiAgICA2OiAnQXR0YWNobWVudEZpZWxkU3R5bGVDU1MnLFxyXG4gICAgNzogJ0ltYWdlRmllbGRTdHlsZUNTUycsXHJcbiAgICA4OiAnTGlzdFZhbHVlRmllbGRTdHlsZUNTUycsXHJcbiAgICAxMTogJ0ltYWdlU2VsZWN0b3JGaWVsZFN0eWxlQ1NTJyxcclxuICAgIDEyOiAnTGFiZWxGaWVsZFN0eWxlQ1NTJyxcclxuICAgIDEzOiAnSW1hZ2VXaXRoTWFya2Vyc0ZpZWxkU3R5bGVDU1MnLFxyXG4gICAgMTQ6ICdBY3Rpb25CdXR0b25GaWVsZFN0eWxlQ1NTJyxcclxuICB9O1xyXG5cclxuICAvLyBNYXBwYSBhbGlhcyBtb2RlbGxvIOKGkiBJRCBDbGF1ZGUgcGnDuSByZWNlbnRlOyBsJ29yZGluZSBkaSBjaGVjayDDqCByaWxldmFudGUgKE9wdXMgcHJpbWEgZGkgU29ubmV0KVxyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE1PREVMX01BUDogQXJyYXk8eyBwYXR0ZXJuOiBSZWdFeHA7IGlkOiBzdHJpbmcgfT4gPSBbXHJcbiAgICB7IHBhdHRlcm46IC9cXGIoPzooPzp1c2F8dXNlfGNvbnx1c2luZylcXHMrKT9vcHVzXFxiL2dpLCBpZDogJ2NsYXVkZS1vcHVzLTQtNycgfSxcclxuICAgIHsgcGF0dGVybjogL1xcYig/Oig/OnVzYXx1c2V8Y29ufHVzaW5nKVxccyspP3Nvbm5ldFxcYi9naSwgaWQ6ICdjbGF1ZGUtc29ubmV0LTQtNicgfSxcclxuICAgIHsgcGF0dGVybjogL1xcYig/Oig/OnVzYXx1c2V8Y29ufHVzaW5nKVxccyspP2hhaWt1XFxiL2dpLCBpZDogJ2NsYXVkZS1oYWlrdS00LTUtMjAyNTEwMDEnIH0sXHJcbiAgXTtcclxuXHJcbiAgcHJpdmF0ZSBleHRyYWN0TW9kZWxGcm9tVGV4dCh0ZXh0OiBzdHJpbmcpOiB7IGNsZWFuVGV4dDogc3RyaW5nOyBtb2RlbElkOiBzdHJpbmcgfCBudWxsIH0ge1xyXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBFcXBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29tcG9uZW50Lk1PREVMX01BUCkge1xyXG4gICAgICBlbnRyeS5wYXR0ZXJuLmxhc3RJbmRleCA9IDA7XHJcbiAgICAgIGlmIChlbnRyeS5wYXR0ZXJuLnRlc3QodGV4dCkpIHtcclxuICAgICAgICBlbnRyeS5wYXR0ZXJuLmxhc3RJbmRleCA9IDA7XHJcbiAgICAgICAgY29uc3QgY2xlYW5UZXh0ID0gdGV4dFxyXG4gICAgICAgICAgLnJlcGxhY2UoZW50cnkucGF0dGVybiwgJycpXHJcbiAgICAgICAgICAucmVwbGFjZSgvWyBcXHRdKy9nLCAnICcpXHJcbiAgICAgICAgICAucmVwbGFjZSgvXFxzKlsuLDtdXFxzKiQvLCAnJylcclxuICAgICAgICAgIC50cmltKCk7XHJcbiAgICAgICAgZW50cnkucGF0dGVybi5sYXN0SW5kZXggPSAwO1xyXG4gICAgICAgIHJldHVybiB7IGNsZWFuVGV4dCwgbW9kZWxJZDogZW50cnkuaWQgfTtcclxuICAgICAgfVxyXG4gICAgICBlbnRyeS5wYXR0ZXJuLmxhc3RJbmRleCA9IDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBjbGVhblRleHQ6IHRleHQsIG1vZGVsSWQ6IG51bGwgfTtcclxuICB9XHJcblxyXG4gIG9uRm9ybUdyYXBoaWNTdWdnZXN0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgcmF3SGludCA9IHRoaXMuZm9ybUdyYXBoaWNTdWdnZXN0SGludD8udHJpbSgpO1xyXG4gICAgaWYgKCF0aGlzLmZvcm0gfHwgIXRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uPy5Gb3Jtcz8uU3BlZWNoVG9HcmFwaGljc0VuZFBvaW50KSByZXR1cm47XHJcbiAgICBjb25zdCB7IGNsZWFuVGV4dDogaGludCwgbW9kZWxJZDogYWlNb2RlbElkIH0gPSB0aGlzLmV4dHJhY3RNb2RlbEZyb21UZXh0KHJhd0hpbnQpO1xyXG5cclxuICAgIHRoaXMuZm9ybUdyYXBoaWNTdWdnZXN0TG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgLy8gRGVkdXBsaWNhdG8gcGVyIHRpcG86IGludmlhIHVuIHNvbG8gcmFwcHJlc2VudGFudGUgcGVyIEZpZWxkVHlwZSBwZXIgcmlkdXJyZSBpIHRva2VuIGluIGlucHV0XHJcbiAgICBjb25zdCBzZWVuVHlwZXMgPSBuZXcgU2V0PG51bWJlcj4oKTtcclxuICAgIGNvbnN0IHVuaXF1ZUZpZWxkcyA9ICh0aGlzLmZvcm0uRmllbGRzID8/IFtdKVxyXG4gICAgICAuZmlsdGVyKGYgPT4geyBpZiAoc2VlblR5cGVzLmhhcyhmLkZpZWxkVHlwZSkpIHJldHVybiBmYWxzZTsgc2VlblR5cGVzLmFkZChmLkZpZWxkVHlwZSk7IHJldHVybiB0cnVlOyB9KVxyXG4gICAgICAubWFwKGYgPT4gKHsgTGFiZWw6IGYuTGFiZWwsIEZpZWxkVHlwZTogZi5GaWVsZFR5cGUgfSkpO1xyXG5cclxuICAgIGNvbnN0IGdyYXBoaWNzUGFyYW1zOiBFbmRQb2ludERhdGFQYXJhbXNbXSA9IFtcclxuICAgICAgeyBQYXJhbU5hbWU6ICdOYW1lJywgUGFyYW1WYWx1ZTogdGhpcy5mb3JtLk5hbWUsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVsnSW4gQm9keSddIH0sXHJcbiAgICAgIHsgUGFyYW1OYW1lOiAnRGVzY3JpcHRpb24nLCBQYXJhbVZhbHVlOiB0aGlzLmZvcm0uRGVzY3JpcHRpb24gPz8gbnVsbCwgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtWydJbiBCb2R5J10gfSxcclxuICAgICAgeyBQYXJhbU5hbWU6ICdUaGVtZUNTUycsIFBhcmFtVmFsdWU6IHRoaXMuZm9ybS5UaGVtZUNTUyA/PyBudWxsLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bJ0luIEJvZHknXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogJ1RpdGxlQ1NTJywgUGFyYW1WYWx1ZTogdGhpcy5mb3JtLlRpdGxlQ1NTID8/IG51bGwsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVsnSW4gQm9keSddIH0sXHJcbiAgICAgIHsgUGFyYW1OYW1lOiAnRmllbGRzJywgUGFyYW1WYWx1ZTogdW5pcXVlRmllbGRzLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bJ0luIEJvZHknXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogJ0hpbnQnLCBQYXJhbVZhbHVlOiBoaW50IHx8IHRoaXMuYnVpbGRSYW5kb21HcmFwaGljSGludCgpLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bJ0luIEJvZHknXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogJ01vZGVsSWQnLCBQYXJhbVZhbHVlOiBhaU1vZGVsSWQsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVsnSW4gQm9keSddIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5TcGVlY2hUb0dyYXBoaWNzRW5kUG9pbnQsXHJcbiAgICAgIGdyYXBoaWNzUGFyYW1zLFxyXG4gICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCByID0gcmVzIGFzIHsgVGhlbWVDU1M/OiBzdHJpbmc7IFRpdGxlQ1NTPzogc3RyaW5nOyBCZ0ltYWdlQmFzZTY0Pzogc3RyaW5nOyBGaWVsZFN0eWxlcz86IHsgW2Nzc0NsYXNzTmFtZTogc3RyaW5nXTogeyBbcHJvcDogc3RyaW5nXTogc3RyaW5nIH0gfTsgV2FybmluZ3M/OiBzdHJpbmdbXSB9O1xyXG4gICAgICAgIHRoaXMuZm9ybUdyYXBoaWNTdWdnZXN0TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2hvd0Zvcm1HcmFwaGljU3VnZ2VzdElucHV0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChyLlRoZW1lQ1NTICE9PSB1bmRlZmluZWQpIHRoaXMuZm9ybS5UaGVtZUNTUyA9IHIuVGhlbWVDU1MgPz8gbnVsbDtcclxuICAgICAgICBpZiAoci5UaXRsZUNTUyAhPT0gdW5kZWZpbmVkKSB0aGlzLmZvcm0uVGl0bGVDU1MgPSByLlRpdGxlQ1NTID8/IG51bGw7XHJcbiAgICAgICAgaWYgKHIuQmdJbWFnZUJhc2U2NCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0uQmdJbWFnZUJhc2U2NCA9IHIuQmdJbWFnZUJhc2U2NCA/PyBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHIuRmllbGRTdHlsZXMpIHtcclxuICAgICAgICAgICh0aGlzLmZvcm0uRmllbGRzID8/IFtdKS5mb3JFYWNoKGYgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjc3NDbGFzc05hbWUgPSAoRXFwRHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvckNvbXBvbmVudC5GSUVMRF9UWVBFX0NTU19DTEFTUyBhcyBhbnkpW2YuRmllbGRUeXBlXTtcclxuICAgICAgICAgICAgaWYgKCFjc3NDbGFzc05hbWUpIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3QgY3NzT2JqID0gci5GaWVsZFN0eWxlcyFbY3NzQ2xhc3NOYW1lXTtcclxuICAgICAgICAgICAgaWYgKGNzc09iaiAmJiB0eXBlb2YgY3NzT2JqID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgIChmIGFzIGFueSlbY3NzQ2xhc3NOYW1lXSA9IGNzc09iajtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5mb3JtQ29tcGxldGVkKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm1Db21wbGV0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMucHJldmlld0Zvcm0gPSBudWxsO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNldEZvcm1TdGF0dXModHJ1ZSksIDUwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5TdWNjZXNzKCdHcmFmaWNhIGFwcGxpY2F0YSBhbCBmb3JtIScpO1xyXG4gICAgICAgIGlmIChyLldhcm5pbmdzPy5sZW5ndGggPiAwKSBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5XYXJuaW5nKHIuV2FybmluZ3MpO1xyXG4gICAgICB9LFxyXG4gICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICB0aGlzLmZvcm1HcmFwaGljU3VnZ2VzdExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBtc2cgPSAoZXJyb3IgYXMgYW55KT8uZXJyb3I7XHJcbiAgICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuRXJyb3IodHlwZW9mIG1zZyA9PT0gJ3N0cmluZycgJiYgbXNnLnRyaW0oKSA/IG1zZyA6ICdFcnJvcmUgbmVsbGEgZ2VuZXJhemlvbmUgZGVsbGEgZ3JhZmljYScpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIFByb3ByaWV0w6AgcGVyIGNyZWF6aW9uZS9tb2RpZmljYSBjYW1wb1xyXG4gIGZpZWxkc0NvbHVtbnM6IEFycmF5PENvbmZpZ0NvbHVtbj47XHJcbiAgQFZpZXdDaGlsZChcImZpZWxkc1RhYmxlXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBmaWVsZHNUYWJsZTogRXFwVGFibGVDb21wb25lbnQ7XHJcbiAgc2VsZWN0ZWRGaWVsZDogQmFzZUZpZWxkO1xyXG4gIGluZGV4U2VsZWN0ZWRGaWVsZDogbnVtYmVyO1xyXG4gIGFjdGlvbk9uUmVjb3JkRm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG4gIGRpYWxvZ0ZpZWxkUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ0ZpZWxkXCIsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ0ZpZWxkOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJmaWVsZFNlY3Rpb25Db2x1bW5UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGZpZWxkU2VjdGlvbkNvbHVtblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gUHJvcHJpZXTDoCBwZXIgY3JlYXJlL21vZGlmaWNhcmUgdW5hIEZvcm0gZGkgZGV0dGFnbGlvXHJcbiAgc2VsZWN0ZWRJbm5lckZvcm06IEZvcm07XHJcbiAgaW5kZXhTZWxlY3RlZElubmVyRm9ybTogbnVtYmVyO1xyXG4gIGRpYWxvZ0lubmVyRm9ybVJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dJbm5lckZvcm1cIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBkaWFsb2dJbm5lckZvcm06IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgaW5uZXJGb3JtQ29uZmlnOiBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29uZmlnO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gUHJvcHJpZXTDoCBwZXIgY3JlYXJlL21vZGlmaWNhcmUgdW5hIGFjdGlvbiBzdWkgcmVjb3JkIGRpIHVuYSBGb3JtXHJcbiAgYWN0aW9uc09uUmVjb3JkQ29sdW1uczogQXJyYXk8Q29uZmlnQ29sdW1uPjtcclxuICBAVmlld0NoaWxkKFwiYWN0aW9uc09uUmVjb3JkVGFibGVcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgYWN0aW9uc09uUmVjb3JkVGFibGU6IEVxcFRhYmxlQ29tcG9uZW50O1xyXG4gIHNlbGVjdGVkQWN0aW9uOiBBY3Rpb25PblJlY29yZDtcclxuICBpbmRleFNlbGVjdGVkQWN0aW9uOiBudW1iZXI7XHJcbiAgZGlhbG9nQWN0aW9uT25SZWNvcmRSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICBAVmlld0NoaWxkKFwiZGlhbG9nQWN0aW9uT25SZWNvcmRcIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBkaWFsb2dBY3Rpb25PblJlY29yZDogVGVtcGxhdGVSZWY8YW55PjtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIFByb3ByaWV0w6AgcGVyIGNyZWFyZS9tb2RpZmljYXJlIGRlaSBib3R0b25pIGF6aW9uZVxyXG4gIGFjdGlvbkJ1dHRvbnNDb2x1bW5zOiBBcnJheTxDb25maWdDb2x1bW4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJhY3Rpb25CdXR0b25zVGFibGVcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgYWN0aW9uQnV0dG9uc1RhYmxlOiBFcXBUYWJsZUNvbXBvbmVudDtcclxuICBzZWxlY3RlZEFjdGlvbkJ1dHRvbjogQWN0aW9uQnV0dG9uO1xyXG4gIGluZGV4U2VsZWN0ZWRBY3Rpb25CdXR0b246IG51bWJlcjtcclxuICBkaWFsb2dBY3Rpb25CdXR0b25SZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICBAVmlld0NoaWxkKFwiZGlhbG9nQWN0aW9uQnV0dG9uXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgZGlhbG9nQWN0aW9uQnV0dG9uOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBhY3Rpb25CdXR0b25zRm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG4gIGFjdGlvbnNGbGFnID0gQWN0aW9uRmxhZ0VudW07XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50byBlbWVzc28gcXVhbmRvIHNpIHNhbHZhIHVuYSBmb3JtIGUgbm9uIMOoIHN0YXRvIHNwZWNpZmljYXRvIHVuIGVuZHBvaW50IGRhIGNoaWFtYXJlLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBzYXZlRm9ybUV2ZW50OiBFdmVudEVtaXR0ZXI8Rm9ybT4gPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm0+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50byBlbWVzc28gRE9QTyBhdmVyIGVzZWd1aXRvIHVuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIgcGVyIGlsIHNhbHZhdGFnZ2lvZGkgdW5hIGZvcm0gYWxsJ2VuZHBvaW50IHNwZWNpZmljYXRvLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBhZnRlclNhdmVGb3JtRXZlbnQ6IEV2ZW50RW1pdHRlcjxGb3JtPiA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9ybT4oKTtcclxuXHJcbiAgLy8gT3V0IGNvbXBvbmVudGUgZXN0ZXJub1xyXG4gIEBPdXRwdXQoKSBvdXQ6IEV2ZW50RW1pdHRlcjxldmVudE91dD4gPSBuZXcgRXZlbnRFbWl0dGVyPGV2ZW50T3V0PigpO1xyXG5cclxuICAvLyBUcmlnZ2Vyc1xyXG4gIGRpYWxvZ1RyaWdnZXJzUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ1RyaWdnZXJzXCIsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ1RyaWdnZXJzOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIHNlbGVjdGVkVHJpZ2dlcjogVHJpZ2dlcjtcclxuICB0cmlnZ2Vyc0NvbHVtbnM6IEFycmF5PENvbmZpZ0NvbHVtbj47XHJcbiAgQFZpZXdDaGlsZChcInRyaWdnZXJzVGFibGVcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIHRyaWdnZXJzVGFibGU6IEVxcFRhYmxlQ29tcG9uZW50O1xyXG5cclxuICBzaG93QWxsRmllbGRzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd0dyYWZpY2FQYW5lbDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBDb250ZXN0dWFsaXphdGlvblxyXG4gIHNlbGVjdGVkQ29udGVzdHVhbGl6YXRpb246IHN0cmluZyA9IG51bGw7XHJcbiAgc2VsZWN0ZWRDb250ZXN0dWFsaXphdGlvblZhbHVlOiBudW1iZXIgPSBudWxsO1xyXG5cclxuICBzaG93RGVsZXRlQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRGaWVsZHM6IEFycmF5PEJhc2VGaWVsZD4gPSBuZXcgQXJyYXk8QmFzZUZpZWxkPigpO1xyXG5cclxuICAvLyBBSSBFZGl0IGRpYWxvZ1xyXG4gIGRpYWxvZ0FpRWRpdFJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dBaUVkaXRcIiwgeyBzdGF0aWM6IHRydWUgfSkgZGlhbG9nQWlFZGl0OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAvLyBDb250ZXN0dWFsaXp6YXppb25lIGRpYWxvZ1xyXG4gIGRpYWxvZ0NvbnRlc3R1YWxpemF0aW9uUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ0NvbnRlc3R1YWxpemF0aW9uXCIsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ0NvbnRlc3R1YWxpemF0aW9uOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAvLyBWaXN1YWwgRWRpdG9yXHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ1ZlVG9vbHRpcFwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dWZVRvb2x0aXA6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ1ZlUmVvcmRlclwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dWZVJlb3JkZXI6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgdmlzdWFsRWRpdG9yQWN0aXZlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdmVTZWxlY3RlZEZpZWxkOiBCYXNlRmllbGQgfCBudWxsID0gbnVsbDtcclxuICB2ZVN3YXBGaWVsZDogQmFzZUZpZWxkIHwgbnVsbCA9IG51bGw7XHJcbiAgZGlhbG9nVmVUb29sdGlwUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgZGlhbG9nVmVSZW9yZGVyUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgdmVTaG93R3JhcGhpY0lucHV0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgdmVHcmFwaGljSGludDogc3RyaW5nID0gJyc7XHJcbiAgdmVSZW9yZGVyRmllbGRzOiBCYXNlRmllbGRbXSA9IFtdO1xyXG4gIHByaXZhdGUgdmVHcmFwaGljU3VnZ2VzdEFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBhaUVkaXRQcm9tcHQ6IHN0cmluZyA9IFwiXCI7XHJcbiAgYWlFZGl0QXR0YWNobWVudHM6IEFycmF5PHsgZmlsZU5hbWU6IHN0cmluZzsgYmFzZTY0Q29udGVudDogc3RyaW5nOyBtZWRpYVR5cGU6IHN0cmluZyB9PiA9IFtdO1xyXG4gIGFpRWRpdEF1dG9zYXZlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgYWlFZGl0TG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dBaVByb21wdEhpc3Rvcnk6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGFpRWRpdEZpZWxkQ29udGV4dDogeyBjb2RlOiBzdHJpbmcgfSB8IG51bGwgPSBudWxsO1xyXG4gIGFpRmllbGRTdWdnZXN0TG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGZvcm1HcmFwaGljU3VnZ2VzdExvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmb3JtR3JhcGhpY1N1Z2dlc3RIaW50OiBzdHJpbmcgPSAnJztcclxuICBzaG93Rm9ybUdyYXBoaWNTdWdnZXN0SW5wdXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgZ2V0IGFpUHJvbXB0SGlzdG9yeSgpOiBzdHJpbmdbXSB7XHJcbiAgICBpZiAoIXRoaXMuZm9ybT8uQUlQcm9tcHRzKSByZXR1cm4gW107XHJcbiAgICB0cnkgeyByZXR1cm4gSlNPTi5wYXJzZSh0aGlzLmZvcm0uQUlQcm9tcHRzKTsgfSBjYXRjaCB7IHJldHVybiBbXTsgfVxyXG4gIH1cclxuXHJcbiAgLy8gQ29zdGFudGkgcGVyIGxhIHN0aW1hIGRlbCBjb3N0byBBSSAoSGFpa3UgNC41LCBwcmV6emkgVVNEL01Ub2spXHJcbiAgcHJpdmF0ZSByZWFkb25seSBBSV9NT0RJRklFUl9TS0lMTF9UT0tFTlMgPSAyXzAwMDsgIC8vIHRva2VuIGZpc3NpOiBGbGRKc29uTW9kaWZpZXJTa2lsbC5tZFxyXG4gIHByaXZhdGUgcmVhZG9ubHkgQUlfVE9LRU5TX1BFUl9GSUVMRCA9IDEwMDsgICAgLy8gc3RpbWEgdG9rZW4gcGVyIGNhbXBvIGRlbCBmb3JtIHNlcmlhbGl6emF0b1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgQUlfT1VUUFVUX1RPS0VOUyA9IDNfNTAwOyAgLy8gc3RpbWEgY29uc2VydmF0aXZhIG91dHB1dCBKU09OIG1vZGlmaWNhdG9cclxuICBwcml2YXRlIHJlYWRvbmx5IEFJX1BERl9DSEFSUyA9IDE1XzA2MDsgLy8gZmluZXN0cmEgbWF4IGVzdHJhdHRhIHBlciBhbGxlZ2F0byBQREZcclxuICBwcml2YXRlIHJlYWRvbmx5IEFJX0NIQVJTX1BFUl9UT0tFTiA9IDQ7ICAgICAgLy8gY2hhci90b2tlbiBtZWRpIHBlciB0ZXN0byBpdGFsaWFub1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgQUlfRVVSX1VTRF9SQVRFID0gMS4xMDsgICAvLyB0YXNzbyBFVVIvVVNEIGFwcHJvc3NpbWF0b1xyXG5cclxuICBnZXQgYWlFZGl0Q29zdEZpcnN0RXVyKCk6IG51bWJlciB7XHJcbiAgICBjb25zdCBmb3JtVG9rZW5zID0gKHRoaXMuZm9ybT8uRmllbGRzPy5sZW5ndGggPz8gMCkgKiB0aGlzLkFJX1RPS0VOU19QRVJfRklFTEQ7XHJcbiAgICBjb25zdCB2YXJJbnB1dCA9ICh0aGlzLmFpRWRpdFByb21wdD8ubGVuZ3RoID8/IDApIC8gdGhpcy5BSV9DSEFSU19QRVJfVE9LRU5cclxuICAgICAgKyB0aGlzLmFpRWRpdEF0dGFjaG1lbnRzLmxlbmd0aCAqICh0aGlzLkFJX1BERl9DSEFSUyAvIHRoaXMuQUlfQ0hBUlNfUEVSX1RPS0VOKTtcclxuICAgIGNvbnN0IHVzZCA9ICh0aGlzLkFJX01PRElGSUVSX1NLSUxMX1RPS0VOUyAqIDAuMTAgKyAoZm9ybVRva2VucyArIHZhcklucHV0KSAqIDAuMDggKyB0aGlzLkFJX09VVFBVVF9UT0tFTlMgKiAwLjQwKSAvIDFfMDAwXzAwMDtcclxuICAgIHJldHVybiB1c2QgLyB0aGlzLkFJX0VVUl9VU0RfUkFURTtcclxuICB9XHJcblxyXG4gIGdldCBhaUVkaXRDb3N0U3Vic2VxdWVudEV1cigpOiBudW1iZXIge1xyXG4gICAgY29uc3QgZm9ybVRva2VucyA9ICh0aGlzLmZvcm0/LkZpZWxkcz8ubGVuZ3RoID8/IDApICogdGhpcy5BSV9UT0tFTlNfUEVSX0ZJRUxEO1xyXG4gICAgY29uc3QgdmFySW5wdXQgPSAodGhpcy5haUVkaXRQcm9tcHQ/Lmxlbmd0aCA/PyAwKSAvIHRoaXMuQUlfQ0hBUlNfUEVSX1RPS0VOXHJcbiAgICAgICsgdGhpcy5haUVkaXRBdHRhY2htZW50cy5sZW5ndGggKiAodGhpcy5BSV9QREZfQ0hBUlMgLyB0aGlzLkFJX0NIQVJTX1BFUl9UT0tFTik7XHJcbiAgICBjb25zdCB1c2QgPSAodGhpcy5BSV9NT0RJRklFUl9TS0lMTF9UT0tFTlMgKiAwLjAwOCArIChmb3JtVG9rZW5zICsgdmFySW5wdXQpICogMC4wOCArIHRoaXMuQUlfT1VUUFVUX1RPS0VOUyAqIDAuNDApIC8gMV8wMDBfMDAwO1xyXG4gICAgcmV0dXJuIHVzZCAvIHRoaXMuQUlfRVVSX1VTRF9SQVRFO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0QWlFZGl0Q29zdChldXI6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gZXVyLnRvRml4ZWQoNik7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNOZXdGb3JtKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICF0aGlzLmZvcm0/LklEO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSB1dGlsaXR5SGVscGVyU2VydmljZTogVXRpbGl0eUhlbHBlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ2NvbmZpZ3VyYXRvclRoZW1lJ10pIHtcclxuICAgICAgdGhpcy5hcHBseVRoZW1lKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5VGhlbWUoKTogdm9pZCB7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgY29uc3Qgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcclxuXHJcbiAgICAvLyBSaW11b3ZlIHZhcnMgcHJlY2VkZW50aSBkYWwgaG9zdCBlIGRhIDpyb290XHJcbiAgICBBcnJheS5mcm9tKGVsLnN0eWxlKS5maWx0ZXIocCA9PiBwLnN0YXJ0c1dpdGgoJy0tY29uZi0nKSkuZm9yRWFjaChwID0+IGVsLnN0eWxlLnJlbW92ZVByb3BlcnR5KHApKTtcclxuICAgIEFycmF5LmZyb20ocm9vdC5zdHlsZSkuZmlsdGVyKHAgPT4gcC5zdGFydHNXaXRoKCctLWNvbmYtJykpLmZvckVhY2gocCA9PiByb290LnN0eWxlLnJlbW92ZVByb3BlcnR5KHApKTtcclxuXHJcbiAgICBpZiAodGhpcy5jb25maWd1cmF0b3JUaGVtZSkge1xyXG4gICAgICBPYmplY3QuZW50cmllcyh0aGlzLmNvbmZpZ3VyYXRvclRoZW1lKS5mb3JFYWNoKChbaywgdl0pID0+IGVsLnN0eWxlLnNldFByb3BlcnR5KGssIHYpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQcm9wYWdhIGkgdmFsb3JpIGVmZmV0dGl2aSAoU0NTUyBkZWZhdWx0ICsgb3ZlcnJpZGUgdGVtYSkgc3UgOnJvb3QgcGVyY2jDqSBpIGRpYWxvZ3NcclxuICAgIC8vIE1hdGVyaWFsIHJlbmRlcml6emFubyBuZWwgY2RrLW92ZXJsYXkgZnVvcmkgZGFsbCdob3N0IGUgbm9uIGVyZWRpdGFubyBsZSB2YXIgZGkgOmhvc3RcclxuICAgIGNvbnN0IGNvbXB1dGVkID0gZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XHJcbiAgICBbJy0tY29uZi1ncmFkaWVudCcsICctLWNvbmYtYmctcGFnZScsICctLWNvbmYtcmFkaXVzJywgJy0tY29uZi1tb2RhbC1yYWRpdXMnLFxyXG4gICAgICAnLS1jb25mLWFjY2VudCcsICctLWNvbmYtYWNjZW50LXJnYicsICctLWNvbmYtcHJpbWFyeScsICctLWNvbmYtcHJpbWFyeS1yZ2InLFxyXG4gICAgICAnLS1jb25mLXN0ZXAtc2VsZWN0ZWQnLCAnLS1jb25mLXN0ZXAtZWRpdCcsICctLWNvbmYtdGFibGUtaGVhZGVyLWJnJyxcclxuICAgICAgJy0tY29uZi1zZWFyY2gtYmcnLCAnLS1jb25mLXRhYmxlLWJnJywgJy0tY29uZi1jYXJkLWJnJywgJy0tY29uZi1mb250LWZhbWlseSdcclxuICAgIF0uZm9yRWFjaCh2YXJOYW1lID0+IHtcclxuICAgICAgY29uc3QgdmFsdWUgPSBjb21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKHZhck5hbWUpLnRyaW0oKTtcclxuICAgICAgaWYgKHZhbHVlKSByb290LnN0eWxlLnNldFByb3BlcnR5KHZhck5hbWUsIHZhbHVlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgLy8gR2FyYW50aXNjZSBjaGUgbGUgdmFyaWFiaWxpIENTUyBkaSBkZWZhdWx0IChkZWZpbml0ZSBpbiA6aG9zdCBTQ1NTKSB2ZW5nYW5vXHJcbiAgICAvLyBwcm9wYWdhdGUgc3UgOnJvb3QgYW5jaGUgcXVhbmRvIGNvbmZpZ3VyYXRvclRoZW1lIG5vbiDDqCBmb3JuaXRvXHJcbiAgICB0aGlzLmFwcGx5VGhlbWUoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgY29uc3Qgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcclxuICAgIEFycmF5LmZyb20ocm9vdC5zdHlsZSkuZmlsdGVyKHAgPT4gcC5zdGFydHNXaXRoKCctLWNvbmYtJykpLmZvckVhY2gocCA9PiByb290LnN0eWxlLnJlbW92ZVByb3BlcnR5KHApKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z01vZGUgPSB0aGlzLmRlYnVnTW9kZTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ25nT25Jbml0IC0gY29uZmlndXJhdGlvbnMnLCB0aGlzLmNvbmZpZ3VyYXRpb25zKTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ25nT25Jbml0IC0gZm9ybUlEJywgdGhpcy5mb3JtSUQpO1xyXG5cclxuICAgIHRoaXMuYmFzZVNlcnZlclVybCA9XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUdlbmVyYWxDb25maWcuYmFzZVNlcnZlclVybDtcclxuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUdlbmVyYWxDb25maWcuY29udGV4dDtcclxuICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uID1cclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlR2VuZXJhbENvbmZpZy5lbmRQb2ludENvbmZpZ3VyYXRpb247XHJcbiAgICAvLyB0aGlzLmZvcm1JRCA9IHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUdlbmVyYWxDb25maWcuZm9ybUlEO1xyXG4gICAgdGhpcy51c2VyVG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnLnVzZXJUb2tlbjtcclxuXHJcbiAgICB0aGlzLmZvcm0gPVxyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5mb3JtO1xyXG4gICAgdGhpcy5vcmdhSUQgPVxyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5vcmdhSUQ7XHJcbiAgICB0aGlzLlVzZXJJRCA9XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLlVzZXJJRDtcclxuICAgIHRoaXMuaW5uZXJGb3JtTWFuYWdtZW50ID1cclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuaW5uZXJGb3JtTWFuYWdtZW50O1xyXG4gICAgdGhpcy5pbm5lckZvcm1SZWYgPVxyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5pbm5lckZvcm1SZWY7XHJcblxyXG4gICAgdGhpcy5mb3JtLk9yZ2FJRCA9IHRoaXMub3JnYUlEO1xyXG5cclxuICAgIHRoaXMuY29uZmlndXJlRGVmYXVsdEVuZFBvaW50cygpO1xyXG4gICAgdGhpcy5nZXRGb3JtQnlJRCgpO1xyXG4gICAgaWYgKHRoaXMuY29udGV4dCkge1xyXG4gICAgICBVdGlsaXR5SGVscGVyU2VydmljZS5TZXRDb250ZXh0KHRoaXMuY29udGV4dCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNvbmZpZ3VyYXJlIGdsaSBlbmRwb2ludCBkYSB1c2FyZSBkaSBkZWZhdWx0IGEgcGFydGlyZSBkYWxsJ3VybCBiYXNlIGRlbCBzZXJ2ZXJcclxuICAgKiBhIGN1aSBzaSBkZXZlIGNvbm5ldHRlcmUgZSBhbCB0b2tlbiBkYSBwYXNzYXJlIHBlciBhdXRlbnRpY2Fyc2kuXHJcbiAgICogU2UgbGEgcHJvcHJpZXTDoCBiYXNlU2VydmVyVXJsIMOoIG51bGwgZSBub24gc29ubyBzdGF0aSBjb25maWd1cmF0aSBpIHZhcmkgZW5kcG9pbnQgYWxsb3JhXHJcbiAgICogbm9uIHZpZW5lIGVzZWd1aXRhIG5lc3N1bmEgY2hpYW1hdGEgaHR0cCBwZXIgcmVjdXBlcmFyZS9zYWx2YXJlIGkgZGF0aS5cclxuICAgKi9cclxuICBjb25maWd1cmVEZWZhdWx0RW5kUG9pbnRzKCkge1xyXG4gICAgaWYgKCF0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJiB0aGlzLmJhc2VTZXJ2ZXJVcmwpIHtcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gPVxyXG4gICAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuQ29uZmlndXJlRGVmYXVsdEVuZFBvaW50cyhcclxuICAgICAgICAgIHRoaXMuYmFzZVNlcnZlclVybCxcclxuICAgICAgICAgIHRoaXMudXNlclRva2VuXHJcbiAgICAgICAgKTtcclxuICAgICAgaWYgKHRoaXMuZm9ybUlEKSB7XHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50LlBhcmFtcyA9IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybUlELFxyXG4gICAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBzdHJpbmdTYW5pdGl6ZXIodmFsdWUpIHtcclxuICAgIGlmICghVXRpbGl0eUhlbHBlclNlcnZpY2Uuc3RyaW5nQ2hlY2tQYXJlbnRlc2lzKHZhbHVlKSkge1xyXG4gICAgICBhbGVydChcImVycm9yZSEgZXJhbm8gcHJlc2VudGkgZGVsbGUgcGFyZW50ZXNpLlwiKTtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG4gIH1cclxuICBzZXROYW1lKE5hbWU6IHN0cmluZykge1xyXG4gICAgaWYgKCF0aGlzLnN0cmluZ1Nhbml0aXplcihOYW1lKSkge1xyXG4gICAgICBjb25zdCBSZWdFeHBQYXJldGVzaXMgPSAvW1xcKFxcKVxcW1xcXVxce1xcfV0vZztcclxuICAgICAgLy8gUmltdW92aSB0dXR0ZSBsZSBwYXJlbnRlc2kgbm9uIGJpbGFuY2lhdGVcclxuICAgICAgdGhpcy5mb3JtLk5hbWUgPSBOYW1lLnJlcGxhY2UoUmVnRXhwUGFyZXRlc2lzLCAnJyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5mb3JtLklEID09IG51bGwpIHsgLy8gdGhpcy5mb3JtLkNvZGUgPT0gbnVsbCB8fCB0aGlzLmZvcm0uQ29kZSA9PSB1bmRlZmluZWQgfHwgdGhpcy5mb3JtLkNvZGUgPT0gXCJcIiApe1xyXG4gICAgICB0aGlzLnNldENvZGUodGhpcy5mb3JtLk5hbWUpO1xyXG4gICAgfVxyXG4gIH1cclxuICBzZXRDb2RlKENvZGU6IHN0cmluZykge1xyXG4gICAgdGhpcy5zdHJpbmdTYW5pdGl6ZXIoQ29kZSk7XHJcblxyXG4gICAgY29uc3QgUmVnRXhwUGxhaW4gPSAvW15cXHddL2c7XHJcbiAgICB0aGlzLmZvcm0uQ29kZSA9IENvZGUudG9VcHBlckNhc2UoKS5yZXBsYWNlKFJlZ0V4cFBsYWluLCBcIlwiKTtcclxuICB9XHJcbiAgb21pdF9zcGVjaWFsX2NoYXIoZXZlbnQpIHtcclxuICAgIHZhciBrO1xyXG4gICAgayA9IGV2ZW50LmtleUNvZGU7IC8vICAgICAgICAgayA9IGV2ZW50LmtleUNvZGU7ICAoQm90aCBjYW4gYmUgdXNlZClcclxuICAgIGlmIChrID09IDM0KSB7XHJcbiAgICAgIGV2ZW50LmtleUNvZGUgPSAwO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiBJTVBPUlQgRlVOQ1RJT04gKi9cclxuICBvbkltcG9ydChldmVudCkge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRGaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xyXG4gICAgY29uc3QgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICBmaWxlUmVhZGVyLnJlYWRBc1RleHQoc2VsZWN0ZWRGaWxlLCBcIlVURi04XCIpO1xyXG4gICAgZmlsZVJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ29uSW1wb3J0IC0gZmlsZVJlYWRlci5yZXN1bHQudG9TdHJpbmcoKScsIGZpbGVSZWFkZXIucmVzdWx0LnRvU3RyaW5nKCkpO1xyXG4gICAgICB0aGlzLmltcG9ydGVkTW9kdWxlID0gZmlsZVJlYWRlci5yZXN1bHQudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmltcG9ydGVkTW9kdWxlICE9IG51bGwpIHtcclxuICAgICAgICBpZiAoY29uZmlybShcInN0YWkgcGVyIHNvdnJhc2NyaXZlcmUgaWwgbW9kdWxvXCIpKSB7XHJcbiAgICAgICAgICAvLyBjaGlhbW8gaWwgcGFyc2UgY29zw6wgZGEgbm9uIGNyZWFyZSB1biByZWZlcmVuY2VCaW5kaW5nXHJcbiAgICAgICAgICB2YXIgaW1wb3J0ZWRGb3JtOiBGb3JtID0gSlNPTi5wYXJzZSh0aGlzLmltcG9ydGVkTW9kdWxlKTtcclxuICAgICAgICAgIGltcG9ydGVkRm9ybS5JRCA9IFwiXCI7XHJcbiAgICAgICAgICBpbXBvcnRlZEZvcm0uTmFtZSA9IGltcG9ydGVkRm9ybS5OYW1lICsgXCIgKEltcG9ydGF0bylcIjtcclxuXHJcbiAgICAgICAgICBpbXBvcnRlZEZvcm0gPSB0aGlzLnNldEltcG9ydGVkRm9ybShpbXBvcnRlZEZvcm0pO1xyXG4gICAgICAgICAgdGhpcy5zZXRGb3JtQW5kQ29uZmlndXJlKGltcG9ydGVkRm9ybSk7XHJcbiAgICAgICAgICB0aGlzLnNldE5hbWUoaW1wb3J0ZWRGb3JtLk5hbWUpO1xyXG5cclxuICAgICAgICAgIHRoaXMuY2xvc2VJbXBvcnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYWxlcnQoXCJzZWxlemlvbmEgdW4gZmlsZVwiKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIGZpbGVSZWFkZXIub25lcnJvciA9IChlcnJvcikgPT4ge1xyXG4gICAgICBhbGVydChcInNlbGV6aW9uYSB1biBmaWxlIHZhbGlkbyBvIGNvbnRyb2xsYSBjaGUgbm9uIHNpYSBjb3Jyb3R0b1wiKTtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgc2V0SW1wb3J0ZWRGb3JtKGZvcm06IEZvcm0pIHtcclxuXHJcbiAgICAvLyBNb2RpZmljYSBkZWwgY3JlYXRpb24gdXNlciBzdSBJbXBvcnRcclxuICAgIGZvcm0uQ3JlYXRpb25Vc2VyID0gdGhpcy5Vc2VySUQ7XHJcblxyXG4gICAgLy8gTW9kaWZpY2EgZGVpIEZpZWxkIHN1IEltcG9ydFxyXG4gICAgZm9ybS5GaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgaWYgKGZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGltbWFnaW5pXCJdKSB7XHJcbiAgICAgICAgKGZpZWxkIGFzIEltYWdlU2VsZWN0b3JGaWVsZCkuQXR0YWNobWVudExpc3QuZm9yRWFjaCgoYXR0YWNobWVudCkgPT4ge1xyXG4gICAgICAgICAgYXR0YWNobWVudC5JRCA9IDA7XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZm9ybTtcclxuICB9XHJcblxyXG4gIGltcG9ydE1vZHVsZSgpIHtcclxuICAgIHRoaXMuZGlhbG9nSW1wb3J0UmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0ltcG9ydCwge1xyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICAvLyB3aWR0aDogXCI3NSVcIixcclxuICAgICAgLy8gbWF4SGVpZ2h0OiBcIjgwJVwiLFxyXG4gICAgICAvLyBoZWlnaHQ6IFwiODAlXCIsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsb3NlSW1wb3J0KCkge1xyXG4gICAgdGhpcy5kaWFsb2dJbXBvcnRSZWYuY2xvc2UoKTtcclxuICB9XHJcbiAgLyogRU5EIElNUE9SVCBGVU5DVElPTiAqL1xyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogRnVuemlvbmUgZGkgZXNwb3J0YXppb25lIG1vZHVsb1xyXG4gICAqL1xyXG5cclxuICBleHBvcnQoKSB7XHJcblxyXG4gICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgIG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtSUQsXHJcbiAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuRXhwb3J0QnlJREVuZFBvaW50LFxyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAoYmFzZTY0cmVzOiBzdHJpbmcpID0+IHtcclxuXHJcbiAgICAgICAgY29uc3QgbmV3QmxvYiA9IG5ldyBCbG9iKFtiYXNlNjRyZXNdLCB7IHR5cGU6IFwidGV4dC9wbGFpblwiIH0pO1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXdCbG9iKTtcclxuICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICAgICAgbGluay5ocmVmID0gZGF0YTtcclxuICAgICAgICBsaW5rLmRvd25sb2FkID0gXCJleHBvcnRfXCIgKyB0aGlzLmZvcm1JRCArIFwiX2Zvcm0udHh0XCI7IC8vIHNldCBhIG5hbWUgZm9yIHRoZSBmaWxlXHJcbiAgICAgICAgbGluay5jbGljaygpO1xyXG5cclxuICAgICAgfSxcclxuICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUFuZENvbmZpZ3VyZShuZXcgRm9ybSgpKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJlY3VwZXJhcmUgdHV0dGkgaSByZWNvcmQgc2FsdmF0aSBwZXIgdW5hIHBhcnRpY29sYXJlIEZvcm0uXHJcbiAgICogTGEgY2hpYW1hdGEgdmllbmUgZWZmZXR0dWF0YSBzb2xvIHNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIGwnZW5kUG9pbnQgZGEgdXNhcmUuXHJcbiAgICovXHJcbiAgZ2V0Rm9ybUJ5SUQoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZm9ybUlEICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludFxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPVxyXG4gICAgICAgIG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtSUQsXHJcbiAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNldEZvcm1BbmRDb25maWd1cmUocmVzKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnIpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2V0Rm9ybUFuZENvbmZpZ3VyZShuZXcgRm9ybSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNldEZvcm1BbmRDb25maWd1cmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbmZpZ3VybyBsJ2V4cG9ydCBkZWwgZm9ybVxyXG4gICAqL1xyXG5cclxuICBjb25maWd1cmVFeHBvcnQocmVzOiBGb3JtKSB7XHJcblxyXG4gICAgLyogZ2V0dGluZyByZWFkeSBmb3IgZXhwb3J0ICovXHJcbiAgICBsZXQgY2xvbmUgPSBuZXcgRm9ybSgpO1xyXG4gICAgY2xvbmUuQ29kZSA9IFwiSU1QT1JUX1wiICsgcmVzLkNvZGU7XHJcbiAgICBjbG9uZS5OYW1lID0gXCJpbXBvcnRfXCIgKyByZXMuTmFtZTtcclxuICAgIGNsb25lLkRlc2NyaXB0aW9uID0gcmVzLkRlc2NyaXB0aW9uO1xyXG4gICAgY2xvbmUuRm9ybVNjYWxhclR5cGUgPSByZXMuRm9ybVNjYWxhclR5cGU7XHJcbiAgICBjbG9uZS5Gb3JtRmllbGRzR3JvdXBzID0gcmVzLkZvcm1GaWVsZHNHcm91cHM7XHJcbiAgICBjbG9uZS5BY3Rpb25zT25SZWNvcmQgPSByZXMuQWN0aW9uc09uUmVjb3JkO1xyXG4gICAgY2xvbmUuRmllbGRzID0gcmVzLkZpZWxkcztcclxuICAgIGNsb25lLk9iamVjdEZpZWxkcyA9IHJlcy5PYmplY3RGaWVsZHM7XHJcbiAgICBjbG9uZS5Jbm5lckZvcm1zID0gcmVzLklubmVyRm9ybXM7XHJcbiAgICBjbG9uZS5Sb290RW50aXR5SUQgPSByZXMuUm9vdEVudGl0eUlEO1xyXG4gICAgY2xvbmUuT3JnYUlEID0gcmVzLk9yZ2FJRDtcclxuXHJcbiAgICB0aGlzLmRvd25sb2FkTmFtZSA9IFwiZXhwb3J0X1wiICsgcmVzLk5hbWU7XHJcbiAgICB0aGlzLnN0cmluZ2lmaWVkRm9ybSA9IEpTT04uc3RyaW5naWZ5KGNsb25lKTtcclxuICAgIHRoaXMuZG93bmxvYWRKc29uSHJlZiA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwoXHJcbiAgICAgIFwiZGF0YTp0ZXh0L2pzb247Y2hhcnNldD1VVEYtOCxcIiArXHJcbiAgICAgIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLnN0cmluZ2lmaWVkRm9ybSlcclxuICAgICk7XHJcblxyXG4gICAgLyogZW5kIGV4cG9ydCAqL1xyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBhbCBjYW1iaW8gZGVsIHRpcG8gZGkgdmlzdWFsaXp6YXppb25lIGRlbGxhIGZvcm0uXHJcbiAgICogU2UgbCd1dGVudGUgc2NlZ2xpZSB1bmEgdmlzdWFsaXp6YXppb25lIHJhZ2dydXBwYXRhIGlsIG1ldG9kbyBhZ2dpdW5nZSBhbCBGb3JtR3JvdXAgdW4gbnVvdm9cclxuICAgKiBjb250cm9sbG8gcGVyIGwnYXJyYXkgZGVpIG5vbWkgZGVsbGUgc2V6aW9uaSBkYSBjcmVhcmUuXHJcbiAgICovXHJcbiAgb25DaGFuZ2VGb3JtU2NhbGFyVHlwZSgpIHtcclxuICAgIGlmICh0aGlzLmZvcm0uRm9ybVNjYWxhclR5cGUgIT0gRm9ybVNjYWxhclR5cGVFbnVtLlNlbXBsaWNlKSB7XHJcbiAgICAgIGlmICghdGhpcy5mb3JtRm9ybUdyb3VwLmNvbnRhaW5zKFwiRm9ybUZpZWxkc0dyb3Vwc1wiKSkge1xyXG4gICAgICAgIHRoaXMuZm9ybUZvcm1Hcm91cC5yZW1vdmVDb250cm9sKFwiRm9ybUZpZWxkc0dyb3Vwc1wiKTtcclxuICAgICAgICB0aGlzLmZvcm1Gb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiRm9ybUZpZWxkc0dyb3Vwc1wiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCh0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3VwcywgW1xyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICAgICAgICBBcnJheVZhbGlkYXRvcnMubWluTGVuZ2h0KDEpLFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3VwcyA9IG51bGw7XHJcbiAgICAgIGlmICh0aGlzLmZvcm1Gb3JtR3JvdXAuY29udGFpbnMoXCJGb3JtRmllbGRzR3JvdXBzXCIpKVxyXG4gICAgICAgIHRoaXMuZm9ybUZvcm1Hcm91cC5yZW1vdmVDb250cm9sKFwiRm9ybUZpZWxkc0dyb3Vwc1wiKTtcclxuICAgIH1cclxuICAgIHRoaXMuZm9ybUZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB0aGlzLmNvbmZpZ3VyZUNvbHVtbnMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50byBpbnZvY2F0byBhbCBrZXl1cCBuZWxsJ2lucHV0IHBlciBpbnNlcmlyZSBpIG5vbWkgZGVsbGUgc2V6aW9uaSBwZXIgbGEgdmlzdWFsaXp6YXppb25lXHJcbiAgICogcmFnZ3J1cHBhdGEgZGVsbGEgZm9ybS4gUXVhbnRvIGwndXRlbnRlIHByZW1lIGlsIHRhc3RvIGludmlvIHZpZW5lIGFnZ2l1bnRvIGlsIG51b3ZvIG5vbWUgYWxsZVxyXG4gICAqIHNlemlvbmkgZGlzcG9iaWxpIHNlIG5vbiBuZSBlc2lzdGUgdW5hIGNvbiBsbyBzdGVzc28gbm9tZS5cclxuICAgKiBAcGFyYW0gZXZlbnQgRXZlbnRvIGNoZSByYXBwcmVzZW50YSBpbCBrZXl1cCBzdWxsYSB0YXN0aWVyYS5cclxuICAgKi9cclxuICBvbkZvcm1GaWVsZEdyb3VwTmFtZUtleVVwKGV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQuY29kZSA9PT0gXCJFbnRlclwiIHx8IGV2ZW50LmNvZGUgPT09IFwiTnVtcGFkRW50ZXJcIikge1xyXG4gICAgICBpZiAoIXRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMgPSBuZXcgQXJyYXk8Rm9ybUZpZWxkR3JvdXA+KCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgICF0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3Vwcy5maW5kKFxyXG4gICAgICAgICAgKG4pID0+IG4uTmFtZSA9PSB0aGlzLmZvcm1GaWVsZEdyb3VwTmFtZVxyXG4gICAgICAgIClcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMucHVzaCh7IE5hbWU6IHRoaXMuZm9ybUZpZWxkR3JvdXBOYW1lIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIEltcG9zdG8gaWwgbnVvdm8gdmFsb3JlIGRlbCBGb3JtQ29udHJvbCBwZXIgYWdnaW9ybmFyZSBsbyBzdGF0byBkZWxsYSBmb3JtLlxyXG4gICAgICB0aGlzLmZvcm1Gb3JtR3JvdXAuY29udHJvbHNbXCJGb3JtRmllbGRzR3JvdXBzXCJdLnNldFZhbHVlKFxyXG4gICAgICAgIHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZm9ybUZpZWxkR3JvdXBOYW1lID0gbnVsbDtcclxuICAgICAgdGhpcy5zZXRGb3JtRmllbGRHcm91cE9yZGluYWxQb3NpdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaW11b3ZlcmUgbGEgc2V6aW9uZSBzZWxlemlvbmF0YSBkYSBxdWVsbGUgZGlzcG9uaWJpbGkgcGVyIGxhIGZvcm0uXHJcbiAgICogQHBhcmFtIGdyb3VwTmFtZSBOb21lIGRlbGxhIHNlemlvbmUgZGEgZWxpbWluYXJlLlxyXG4gICAqL1xyXG4gIG9uRGVsZXRlRm9ybUZpZWxkR3JvdXBOYW1lKGdyb3VwTmFtZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3Vwcy5zcGxpY2UoXHJcbiAgICAgIHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzLmZpbmRJbmRleCgoZykgPT4gZy5OYW1lID09PSBncm91cE5hbWUpLFxyXG4gICAgICAxXHJcbiAgICApO1xyXG4gICAgLy8gSW1wb3N0byBpbCBudW92byB2YWxvcmUgZGVsIEZvcm1Db250cm9sIHBlciBhZ2dpb3JuYXJlIGxvIHN0YXRvIGRlbGxhIGZvcm0uXHJcbiAgICB0aGlzLmZvcm1Gb3JtR3JvdXAuY29udHJvbHNbXCJGb3JtRmllbGRzR3JvdXBzXCJdLnNldFZhbHVlKFxyXG4gICAgICB0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3Vwc1xyXG4gICAgKTtcclxuICAgIC8vIFNlIGVzaXN0b25vIEZpZWxkIGxlZ2F0aSBhbGxhIHNlemlvbmUgY2hlIHNpIHZ1b2xlIGVsaW1pbmFyZSBhbGxvcmEgcm9tcG8gaWwgbGVnYW1lLlxyXG4gICAgaWYgKHRoaXMuZm9ybS5GaWVsZHMuZmluZCgoZikgPT4gZi5GaWVsZEdyb3VwID09IGdyb3VwTmFtZSkpIHtcclxuICAgICAgdGhpcy5mb3JtLkZpZWxkcy5maWx0ZXIoKGYpID0+IGYuRmllbGRHcm91cCA9PSBncm91cE5hbWUpLmZvckVhY2goXHJcbiAgICAgICAgKGYpID0+IChmLkZpZWxkR3JvdXAgPSBudWxsKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRGb3JtRmllbGRHcm91cE9yZGluYWxQb3NpdGlvbigpO1xyXG4gIH1cclxuXHJcblxyXG4gIG9uRWRpdEZvcm1GaWVsZEdyb3VwTmFtZShmb3JtRmllbGRHcm91cDogRm9ybUZpZWxkR3JvdXApIHtcclxuXHJcbiAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5Qcm9tcHQoXHJcbiAgICAgIFwiTW9kaWZpY2EgaWwgbm9tZVwiLFxyXG4gICAgICAobmFtZSkgPT4ge1xyXG4gICAgICAgIGZvcm1GaWVsZEdyb3VwLk5hbWUgPSBuYW1lO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICB9XHJcblxyXG4gIC8qKiBDbG9uYSB1biBvZ2dldHRvIGVzY2x1ZGVuZG8gcmlmZXJpbWVudGkgY2lyY29sYXJpIGUgRm9ybUZvcm1Hcm91cCAqL1xyXG4gIHByaXZhdGUgc2FmZUNsb25lPFQ+KG9iajogVCk6IFQge1xyXG4gICAgY29uc3Qgc2VlbiA9IG5ldyBXZWFrU2V0KCk7XHJcbiAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmosIChrZXksIHZhbHVlKSA9PiB7XHJcbiAgICAgIGlmIChrZXkgPT09ICdGb3JtRm9ybUdyb3VwJykgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICBpZiAoc2Vlbi5oYXModmFsdWUpKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIHNlZW4uYWRkKHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hpYW1hdG8gcXVhbmRvIHNpIHZ1b2xlIGFnZ2l1bmdlcmUgdW4gbnVvdm8gY2FtcG8gbyBzaSB2dW9sZSBtb2RpZmljYXJlIHVubyBlc2lzdGVudGUuXHJcbiAgICogTWVtb3JpenphIGwnZXZlbnR1YWxlIEZpZWxkIHNjZWx0byBvbmUgY3JlYSB1bm8gbnVvdm8gcHJpbWEgZGkgYXByaXJlIGlsIGRpYWxvZyBwZXIgbW9kaWZpY2FybG8vYWdnaXVuZ2VybG8uXHJcbiAgICogQHBhcmFtIGZpZWxkIE9nZ2V0dG8gQmFzZUZpZWxkIGRhIG1vZGlmaWNhcmUuIFNlIG51bGwgbmUgdmllbmUgY3JlYXRhIHVuYSBudW92YSBpc3RhbnphIHBlciBsJ2FnZ2l1bnRhLlxyXG4gICAqL1xyXG4gIG9wZW5GaWVsZERpYWxvZyhmaWVsZDogQmFzZUZpZWxkID0gbnVsbCkge1xyXG5cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJvcGVuRmllbGREaWFsb2dcIiwgZmllbGQpO1xyXG5cclxuICAgIGlmIChmaWVsZCkge1xyXG4gICAgICB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA9IHRoaXMuZm9ybS5GaWVsZHMuaW5kZXhPZihmaWVsZCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWVsZCA9IHRoaXMuc2FmZUNsb25lKGZpZWxkKTtcclxuXHJcbiAgICAgIC8vIERhdG8gY2hlIGNvbiBpbCBKU09OLnBhcnNlIHNpIHBlcmRlIHBlciBzdHJhZGEgbGEgZm9ybXVsYSwgbGEgcmltZXR0byBkb3BvLlxyXG4gICAgICAvLyBUYW50byBvcmFtYWkgaWwgcmlmZXJpbWVudG8gY29uIFwiZmllbGRcIiDDqCBzdGF0byBwZXJzbyBlIHN0aWFtbyBwYXNzYW5kbyB1bmEgc3RyaW5nYVxyXG4gICAgICB0aGlzLnNlbGVjdGVkRmllbGQuRm9ybXVsYSA9IGZpZWxkLkZvcm11bGE7XHJcblxyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEZpZWxkLkFuc3dlclN0eWxlID09IG51bGwpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRmllbGQuQW5zd2VyU3R5bGUgPSB7IEluTGlzdFZpZXc6IHRydWUsIFZpc2libGVJZjogbnVsbCwgRmllbGRzdHlsZUNTUzogXCJcIiwgTGFiZWxzdHlsZUNTUzogXCJcIiwgQ29sU3BhblNpemVzOiBbXSwgSW52aXNpYmlsaXR5OiBGaWVsZEludmlzaWJpbGl0eUVudW0uTkFTQ09TVE8gfTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkID0gbmV3IEJhc2VGaWVsZCgpO1xyXG4gICAgICB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA9IG51bGw7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGlhbG9nRmllbGRSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nRmllbGQsIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgd2lkdGg6IFwiNzUlXCIsXHJcbiAgICAgIGhlaWdodDogXCI4MCVcIixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoZSBzYWx2YSBpbCBjYW1wbyBhcHBlbmEgY3JlYXRvIG8gbW9kaWZpY2F0by5cclxuICAgKiBQcmltYSBkZWwgc2FsdmF0YWdnaW8gY29udHJvbGxhIHNlIGVzaXN0ZSB1biBhbHRybyBjYW1wbyBjb24gbGEgc3Rlc3NhIGxhYmVsLCBpbiBxdWVzdG9cclxuICAgKiBjYXNlIGdlbmVyZSB1biBlcnJvcmUgKGkgY2FtcGkgZGV2b25vIGF2ZXJlIG5vbWksIGUgcXVpbmRpIGxhYmVsLCB1bml2b2NoZSAtIGkgbm9taSB2ZW5nb25vXHJcbiAgICogcmljYXZhdGkgdW5lbmRvIGxlIHBhcm9sZSBjaGUgZm9ybWFubyBsYSBsYWJlbCB0cmFtaXRlIFwiX1wiKS5cclxuICAgKiBAcGFyYW0gZmllbGQgQ2FtcG8gZGEgc2FsdmFyZVxyXG4gICAqIEBwYXJhbSByZW9wZW4gc2UgcHJlc2VudGUgcmlhcHJlIGxhIGRpYWxvZyBkaSBtb2RpZmljYSBkZWwgY2FtcG8gcGVzY2FuZG8gZGFsbGEgbGlzdGEgaWwgcHJvc3NpbW8gaW4gY2FzbyBkaSB2YWxvcmUgWzFdIG8gaWwgcHJlY2VkZW50ZSBpbiBjYXNvIGRpIHZhbG9yZSBbLTFdXHJcbiAgICovXHJcbiAgb25TYXZlRmllbGQoZXY6IHsgZmllbGQ6IEJhc2VGaWVsZCwgcmVvcGVuOiBudW1iZXIgfSkge1xyXG4gICAgbGV0IGZpZWxkID0gZXYuZmllbGQ7XHJcbiAgICBsZXQgcmVvcGVuID0gZXYucmVvcGVuO1xyXG5cclxuICAgIC8vIHNlIGMnw6ggaWwgY2FtcG9cclxuICAgIGlmIChmaWVsZCkge1xyXG4gICAgICAvLyBjb250cm9sbG8gY2hlIG5vbiBjaSBzaWEgdW4gYWx0cm8gY2FtcG8gY29uIGxvIHN0ZXNzbyBjb2RlIChsYWJlbCkgZSBub24gc2lhIGVzc28gc3Rlc3NvXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmZvcm0uRmllbGRzICYmXHJcbiAgICAgICAgdGhpcy5mb3JtLkZpZWxkcy5maW5kKFxyXG4gICAgICAgICAgKGYsIGkpID0+XHJcbiAgICAgICAgICAgIGYuTGFiZWwgPT09IGZpZWxkLkxhYmVsICYmXHJcbiAgICAgICAgICAgICh0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA9PSBudWxsXHJcbiAgICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgICAgOiB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCAhPT0gaSlcclxuICAgICAgICApXHJcbiAgICAgICkge1xyXG4gICAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLldhcm5pbmcoXHJcbiAgICAgICAgICBcIkltcG9zc2liaWxlIGluc2VyaXJlIGR1ZSBjYW1waSBjb24gbG8gc3Rlc3NvIENvZGljZS5cIlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW1wb3NzaWJpbGUgaW5zZXJpcmUgZHVlIGNhbXBpIGNvbiBsbyBzdGVzc28gQ29kaWNlLlwiKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gc2UgaG8gdW4gaW5kaWNlIGluIGN1aSBpbnNlcmlyZSBpbCBjYW1wbyAodmVyb3NpbWlsbWVudGUgc29ubyBpbiBtb2RpZmljYSlcclxuICAgICAgaWYgKHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkICE9IG51bGwgJiYgdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgPj0gMCkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5GaWVsZHNbdGhpcy5pbmRleFNlbGVjdGVkRmllbGRdID0gZmllbGQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gw6ggdW4gY2FtcG8gbnVvdm9cclxuICAgICAgICBpZiAoIXRoaXMuZm9ybS5GaWVsZHMpIHtcclxuICAgICAgICAgIC8vIHNlIMOoIGlsIHByaW1vIGNhbXBvIGNoZSBzdG8gaW5zZXJlbmRvIHByZXBhcm8gdW4gYXJyYXlcclxuICAgICAgICAgIHRoaXMuZm9ybS5GaWVsZHMgPSBuZXcgQXJyYXk8QmFzZUZpZWxkPigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZvcm0uRmllbGRzLnB1c2goZmllbGQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIm9uU2F2ZUZpZWxkXCIsIHRoaXMuZm9ybSlcclxuICAgIHRoaXMuY2xvc2VGaWVsZERpYWxvZygpO1xyXG4gICAgdGhpcy5zZXRGaWVsZE9yZGluYWxQb3NpdGlvbigpO1xyXG4gICAgdGhpcy5yZWxvYWRGaWVsZHNUYWJsZSgpO1xyXG5cclxuICAgIGlmIChyZW9wZW4gIT0gMCkge1xyXG4gICAgICBsZXQgbmV3RmllbGQgPSB0aGlzLmZvcm0uRmllbGRzW3RoaXMuaW5kZXhTZWxlY3RlZEZpZWxkICsgcmVvcGVuXTtcclxuICAgICAgdGhpcy5vcGVuRmllbGREaWFsb2cobmV3RmllbGQpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudmlzdWFsRWRpdG9yQWN0aXZlKSB7XHJcbiAgICAgIHRoaXMucmVmcmVzaFByZXZpZXcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgY29udHJvbGxhIHNlIGxvIHN0ZXAgcGVyIGwnYWdnaXVudGEgZGVpIGNhbXBpIG5lbGxhIGZvcm0gw6ggY29uY2x1c28uXHJcbiAgICogQHJldHVybnMgU2UgVFJVRSBsbyBzdGVwIHZpZW5lIGNvbnNpZGVyYXRvIGNvbXBsZXRhdG8gZWQgw6ggcG9zc2JpbGUgcGFzc2FyZSBhbCBzdWNjZXNzaXZvLlxyXG4gICAqL1xyXG4gIGlzRmllbGRTdGVwQ29tcGxldGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmZvcm0uRmllbGRzKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5mb3JtLkZvcm1TY2FsYXJUeXBlICE9IEZvcm1TY2FsYXJUeXBlRW51bS5TZW1wbGljZSAmJlxyXG4gICAgICB0aGlzLmZvcm0uRmllbGRzLmZpbmQoKGYpID0+ICFmLkZpZWxkR3JvdXApXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZm9ybS5GaWVsZHMubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgYXByaXJlIGlsIGRpYWxvZyBkaSBjcmVhemlvbmUvbW9kaWZpY2EgZGVsbGUgZm9ybSBkaSBkZXR0YWdsaW8uXHJcbiAgICogU2UgaWwgcGFyYW1ldHJvIHBhc3NhdG8gw6ggbnVsbCBzb25vIGluIGFnZ2l1bnRhIGFsdHJpbWVudGkgc29ubyBpbiBtb2RpZmljYS5cclxuICAgKiBAcGFyYW0gaW5uZW5yRm9ybSBGb3JtIGRpIGRldHRhZ2xpbyBkYSBtb2RpZmljYXJlIChzZSBudWxsIGFsbG9yYSB2YWRvIGluIGFkZCkuXHJcbiAgICovXHJcbiAgb3BlbklubmVyRm9ybURpYWxvZyhpbm5lbnJGb3JtOiBGb3JtID0gbnVsbCkge1xyXG4gICAgdGhpcy5pbm5lckZvcm1Db25maWcgPSBuZXcgRHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvckNvbmZpZygpO1xyXG4gICAgdGhpcy5pbm5lckZvcm1Db25maWcuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmlubmVyRm9ybU1hbmFnbWVudCA9XHJcbiAgICAgIHRydWU7XHJcbiAgICAvLyB0aGlzLmlubmVyRm9ybUNvbmZpZy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuZm9ybVxyXG4gICAgLy8gdGhpcy5pbm5lckZvcm1Db25maWcuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmZvcm0uT2xkTmFtZVxyXG4gICAgLy8gdGhpcy5pbm5lckZvcm1Db25maWcuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmlubmVyRm9ybVJlZlxyXG4gICAgLy8gW2Zvcm1dPVwic2VsZWN0ZWRJbm5lckZvcm1cIlxyXG4gICAgLy8gW2lubmVyRm9ybU1hbmFnbWVudF09XCJ0cnVlXCJcclxuICAgIC8vIFtpbm5lckZvcm1SZWZdPVwiZGlhbG9nSW5uZXJGb3JtUmVmXCJcclxuXHJcbiAgICBpZiAoaW5uZW5yRm9ybSkge1xyXG4gICAgICB0aGlzLmluZGV4U2VsZWN0ZWRJbm5lckZvcm0gPSB0aGlzLmZvcm0uSW5uZXJGb3Jtcy5pbmRleE9mKGlubmVuckZvcm0pO1xyXG5cclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZElubmVyRm9ybSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaW5uZW5yRm9ybSkpO1xyXG4gICAgICAvLyB0aGlzLnNlbGVjdGVkSW5uZXJGb3JtLk9sZE5hbWUgPSBpbm5lbnJGb3JtLk5hbWU7XHJcbiAgICAgIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5mb3JtID1cclxuICAgICAgICBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGlubmVuckZvcm0pKTtcclxuICAgICAgdGhpcy5pbm5lckZvcm1Db25maWcuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmZvcm0uT2xkTmFtZSA9XHJcbiAgICAgICAgaW5uZW5yRm9ybS5OYW1lO1xyXG5cclxuICAgICAgdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgPSB0aGlzLmZvcm0uRmllbGRzLmZpbmRJbmRleChcclxuICAgICAgICAoZikgPT4gZi5MYWJlbCA9PT0gaW5uZW5yRm9ybS5OYW1lXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyB0aGlzLnNlbGVjdGVkSW5uZXJGb3JtID0gbmV3IEZvcm0oKTtcclxuICAgICAgdGhpcy5pbm5lckZvcm1Db25maWcuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmZvcm0gPVxyXG4gICAgICAgIG5ldyBGb3JtKCk7XHJcbiAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZElubmVyRm9ybSA9IG51bGw7XHJcbiAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID0gbnVsbDtcclxuICAgIH1cclxuICAgIC8vIHRoaXMuZGlhbG9nSW5uZXJGb3JtUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0lubmVyRm9ybSwge1xyXG5cclxuICAgIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5pbm5lckZvcm1SZWYgPVxyXG4gICAgICB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nSW5uZXJGb3JtLCB7XHJcbiAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICAgIHdpZHRoOiBcIjg1JVwiLFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBzY2F0ZW5hdG8gYWwgc2FsdmF0YWdnaW8gZGkgdW5hIGZvcm0gZGkgZGV0dGFnbGlvLlxyXG4gICAqIEBwYXJhbSBldmVudCBGb3JtIGNyZWF0YS9tb2RpZmljYXRhIGRhbGwndXRlbnRlLiBTZSDDqCBudWxsIGFsbG9yYSBsJ3V0ZW50ZSBoYSBhYmJhbmRvbmF0byBsYSBjb25maWd1cmF6aW9uZS5cclxuICAgKi9cclxuICBvblNhdmVPckV4aXRJbm5lckZvcm0oZXZlbnQ6IEZvcm0pIHtcclxuICAgIGlmIChldmVudCAhPSBudWxsKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmZvcm0uTmFtZSA9PT0gZXZlbnQuTmFtZSB8fFxyXG4gICAgICAgICh0aGlzLmZvcm0uSW5uZXJGb3JtcyAmJlxyXG4gICAgICAgICAgdGhpcy5mb3JtLklubmVyRm9ybXMuZmluZChcclxuICAgICAgICAgICAgKGEsIGkpID0+XHJcbiAgICAgICAgICAgICAgYS5OYW1lID09PSBldmVudC5OYW1lICYmXHJcbiAgICAgICAgICAgICAgKHRoaXMuaW5kZXhTZWxlY3RlZElubmVyRm9ybSA9PSBudWxsXHJcbiAgICAgICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgICAgIDogdGhpcy5pbmRleFNlbGVjdGVkSW5uZXJGb3JtICE9PSBpKVxyXG4gICAgICAgICAgKSkgfHxcclxuICAgICAgICAodGhpcy5mb3JtLkZpZWxkcyAmJlxyXG4gICAgICAgICAgdGhpcy5pbmRleFNlbGVjdGVkSW5uZXJGb3JtID09IG51bGwgJiZcclxuICAgICAgICAgIHRoaXMuZm9ybS5GaWVsZHMuZmluZChcclxuICAgICAgICAgICAgKGYsIGkpID0+XHJcbiAgICAgICAgICAgICAgZi5MYWJlbCA9PT0gZXZlbnQuTmFtZSAmJlxyXG4gICAgICAgICAgICAgICh0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA9PSBudWxsXHJcbiAgICAgICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgICAgIDogdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgIT09IGkpXHJcbiAgICAgICAgICApKVxyXG4gICAgICApIHtcclxuICAgICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5XYXJuaW5nKFxyXG4gICAgICAgICAgXCJJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgZm9ybSBkaSBkZXR0YWdsaW8gY29uIGxvIHN0ZXNzbyBub21lLlwiXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICBcIkltcG9zc2liaWxlIGluc2VyaXJlIGR1ZSBmb3JtIGRpIGRldHRhZ2xpbyBjb24gbG8gc3Rlc3NvIG5vbWUuXCJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBpbm5lckZvcm1GaWVsZDogQmFzZUZpZWxkID0gbmV3IEJhc2VGaWVsZCgpO1xyXG4gICAgICBpbm5lckZvcm1GaWVsZC5OYW1lID0gZXZlbnQuTmFtZS5zcGxpdChcIiBcIikuam9pbihcIl9cIik7XHJcbiAgICAgIGlubmVyRm9ybUZpZWxkLkxhYmVsID0gZXZlbnQuTmFtZTtcclxuICAgICAgaW5uZXJGb3JtRmllbGQuRmllbGRUeXBlID0gRmllbGRUeXBlRW51bVtcIkZvcm0gZGkgZGV0dGFnbGlvXCJdO1xyXG4gICAgICBpbm5lckZvcm1GaWVsZC5GaWVsZEdyb3VwID1cclxuICAgICAgICB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCAhPSBudWxsXHJcbiAgICAgICAgICA/IHRoaXMuZm9ybS5GaWVsZHNbdGhpcy5pbmRleFNlbGVjdGVkRmllbGRdLkZpZWxkR3JvdXBcclxuICAgICAgICAgIDogbnVsbDtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmluZGV4U2VsZWN0ZWRJbm5lckZvcm0gIT0gbnVsbCAmJlxyXG4gICAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZElubmVyRm9ybSA+PSAwXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5Jbm5lckZvcm1zW3RoaXMuaW5kZXhTZWxlY3RlZElubmVyRm9ybV0gPSBldmVudDtcclxuICAgICAgICB0aGlzLmZvcm0uRmllbGRzW3RoaXMuaW5kZXhTZWxlY3RlZEZpZWxkXSA9IGlubmVyRm9ybUZpZWxkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICghdGhpcy5mb3JtLklubmVyRm9ybXMpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5Jbm5lckZvcm1zID0gbmV3IEFycmF5PEZvcm0+KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZm9ybS5Jbm5lckZvcm1zLnB1c2goZXZlbnQpO1xyXG4gICAgICAgIHRoaXMuZm9ybS5GaWVsZHMucHVzaChpbm5lckZvcm1GaWVsZCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZWxvYWRGaWVsZHNUYWJsZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kaWFsb2dJbm5lckZvcm1SZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgYXByaXJlIGlsIGRpYWxvZyBkaSBjcmVhemlvbmUvbW9kaWZpY2EgZGVsbGUgYWN0aW9uLlxyXG4gICAqIFNlIGlsIHBhcmFtZXRybyBwYXNzYXRvIMOoIG51bGwgc29ubyBpbiBhZ2dpdW50YSBhbHRyaW1lbnRpIHNvbm8gaW4gbW9kaWZpY2EuXHJcbiAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb25PblJlY29yZCBkYSBtb2RpZmljYXJlIChzZSBudWxsIGFsbG9yYSB2YWRvIGluIGFkZCkuXHJcbiAgICovXHJcbiAgb3BlbkFjdGlvbk9uUmVjb3JkRGlhbG9nKGFjdGlvbjogQWN0aW9uT25SZWNvcmQgPSBudWxsKSB7XHJcbiAgICBpZiAoYWN0aW9uKSB7XHJcbiAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiA9IHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQuaW5kZXhPZihhY3Rpb24pO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQWN0aW9uID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShhY3Rpb24pKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRBY3Rpb24gPSBuZXcgQWN0aW9uT25SZWNvcmQoKTtcclxuICAgICAgdGhpcy5pbmRleFNlbGVjdGVkQWN0aW9uID0gbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMuY3JlYXRlQWN0aW9uT25SZWNvcmRGb3JtKCk7XHJcbiAgICB0aGlzLmRpYWxvZ0FjdGlvbk9uUmVjb3JkUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0FjdGlvbk9uUmVjb3JkLCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBcIjc1JVwiLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGFwcmlyZSBpbCBkaWFsb2cgZGkgY3JlYXppb25lL21vZGlmaWNhIGRlaSBib3R0b25pIGF6aW9uZS5cclxuICAgKiBTZSBpbCBwYXJhbWV0cm8gcGFzc2F0byDDqCBudWxsIHNvbm8gaW4gYWdnaXVudGEgYWx0cmltZW50aSBzb25vIGluIG1vZGlmaWNhLlxyXG4gICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uQnV0dG9uIGRhIG1vZGlmaWNhcmUgKHNlIG51bGwgYWxsb3JhIHZhZG8gaW4gYWRkKS5cclxuICAgKi9cclxuICBvcGVuQWN0aW9uQnV0dG9uRGlhbG9nKGV2OiBBY3Rpb25CdXR0b24gPSBudWxsKSB7XHJcblxyXG4gICAgaWYgKGV2ICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEFjdGlvbkJ1dHRvbiA9IGV2O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEFjdGlvbkJ1dHRvbiA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kaWFsb2dBY3Rpb25CdXR0b25SZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nQWN0aW9uQnV0dG9uLCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBcIjc1JVwiLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGltcG9zdGFyZSBpIHZhbG9yaSBkYSBzdWdnZXJpcmUgbmVsbCdhdXRvY29tcGxldGUgZGVsIGNhbXBvIEZvcm11bGEuXHJcbiAgICogVmllbmUgc2NhdGVuYXRvIGFsIGZvY3VzIChpbiBxdWVzdG8gY2FzbyB2aWVuZSBwYXNzYXRvIGlsIHBhcmFtZXRybyBhIG51bGwgcGVyIGRpZmZlcmVuemlhcmxvXHJcbiAgICogZGFsbCdldmVudG8gZGkgY2xpY2sgc3VsbGEgdGFzdGllcmEpIGUgYWwga2V5dXAgc3VsbCdpbnB1dCAoaWwgcGFyYW1ldHJvIMOoIGRpdmVyc28gZGEgbnVsbCkuXHJcbiAgICogQHBhcmFtIGtleWJvYXJkRXZlbnQgRXZlbnRvIHNjYXRlbmF0byBhbCBrZXl1cCBzdWxsYSB0YXN0aWVyYS4gU2UgbnVsbCBhbGxvcmEgaWwgbWV0b2RvIMOoIHN0YXRvIGludm9jYXRvIGRhbCBmb2N1cyBzdWxsJ2lucHV0LlxyXG4gICAqIEBzdW1tYXJ5IEFnZ2lvcm5hIGwnZWxlbmNvIGRlaSBzdWdnZXJpbWVudGkgcGVyIGwnYXV0b2NvbXBsZXRlIHNlIGwndXRlbnRlIGVzZWd1ZSBpbCBmb2N1cyBzdWxsJ2lucHV0XHJcbiAgICogb3BwdXJlIGFsIGtleXVwIHN1bGxhIHRhc3RpZXJhIGRpIHVuIHRhc3RvIGRpdmVyc28gZGFsbGUgZnJlY2NlLlxyXG4gICAqL1xyXG4gIHNldEFjdGlvbkF1dG9jb21wbGV0ZU9wdGlvbnMoa2V5Ym9hcmRFdmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgLy8gQ3JlbyBsJ2FycmF5IHBlciBsJ2F1dG9jb21wbGV0ZSBzb2xvIHNlIHN0byBmYWNlbmRvIGlsIGZvY3VzIHN1bGwnaW5wdXQgbyBzZSBzdG8gcHJlbWVuZG8gdW4gdGFzdG9cclxuICAgIC8vIHN1bGxhIHRhc3RpZXJhIGRpdmVyc28gZGFsbGUgZnJlY2NlIChpbiBxdWVzdCd1bHRpbW8gY2Fzbywgc2Ugbm9uIHZpZW5lIGVzZWd1aXRvIGlsIGZpbHRybyBzdWxsJ2V2ZW50byxcclxuICAgIC8vIG5vbiBzaSBwdcOyIHNlbGV6aW9uYXJlIHVuIHN1Z2dlcmltZW50byBkZWxsJ2F1dG9jb21wbGV0ZSBwZXJjaMOoIGFsIGNsaWNrIHZlcnJlYmJlIHJpY2FyaWNhdG8gbCdhcnJheSBlXHJcbiAgICAvLyBzaSBwcmVkZXJlYmJlIGxhIHNlbGV6aW9uZSBhcHBlbmEgZmF0dGEpLlxyXG4gICAgaWYgKCFrZXlib2FyZEV2ZW50IHx8ICFrZXlib2FyZEV2ZW50LmNvZGUuaW5jbHVkZXMoXCJBcnJvd1wiKSkge1xyXG4gICAgICB0aGlzLmFjdGlvbkF1dG9jb21wbGV0ZU9wdGlvbnMgPVxyXG4gICAgICAgIFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkdldEF1dG9jb21wbGV0ZU9wdGlvbnMoXHJcbiAgICAgICAgICB0aGlzLmZvcm0uRmllbGRzLFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEFjdGlvbi5BY3Rpb25cclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHNhbHZhcmUgbCdhemlvbmUgY3JlYXRhL21vZGlmaWNhdGUuXHJcbiAgICovXHJcbiAgc2F2ZUFjdGlvbk9uUmVjb3JkKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkICYmXHJcbiAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQuZmluZChcclxuICAgICAgICAoYSwgaSkgPT5cclxuICAgICAgICAgIGEuTmFtZSA9PT0gdGhpcy5zZWxlY3RlZEFjdGlvbi5OYW1lICYmXHJcbiAgICAgICAgICAodGhpcy5pbmRleFNlbGVjdGVkQWN0aW9uID09IG51bGxcclxuICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgIDogdGhpcy5pbmRleFNlbGVjdGVkQWN0aW9uICE9PSBpKVxyXG4gICAgICApXHJcbiAgICApIHtcclxuICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuV2FybmluZyhcclxuICAgICAgICBcIkltcG9zc2liaWxlIGluc2VyaXJlIGR1ZSBhY3Rpb24gY29uIGxvIHN0ZXNzbyBub21lLlwiXHJcbiAgICAgICk7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkltcG9zc2liaWxlIGluc2VyaXJlIGR1ZSBhY3Rpb24gY29uIGxvIHN0ZXNzbyBub21lLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pbmRleFNlbGVjdGVkQWN0aW9uICE9IG51bGwgJiYgdGhpcy5pbmRleFNlbGVjdGVkQWN0aW9uID49IDApIHtcclxuICAgICAgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZFt0aGlzLmluZGV4U2VsZWN0ZWRBY3Rpb25dID0gdGhpcy5zZWxlY3RlZEFjdGlvbjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICghdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZCkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQgPSBuZXcgQXJyYXk8QWN0aW9uT25SZWNvcmQ+KCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZC5wdXNoKHRoaXMuc2VsZWN0ZWRBY3Rpb24pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jbG9zZURpYWxvZ0FjdGlvbk9uUmVjb3JkKCk7XHJcbiAgICB0aGlzLnNldEFjdGlvbk9yZGluYWxQb3NpdGlvbigpO1xyXG4gICAgdGhpcy5yZWxvYWRBY3Rpb25zT25SZWNvcmRUYWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzYWx2YXJlIGwnYXppb25lIGNyZWF0YS9tb2RpZmljYXRlLlxyXG4gICAqL1xyXG4gIHNhdmVBY3Rpb25CdXR0b25zKGVsZW1lbnQ6IEFjdGlvbkJ1dHRvbikge1xyXG5cclxuICAgIGlmIChlbGVtZW50ICE9IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zICE9IG51bGwpIHtcclxuICAgICAgICB2YXIgZXhpc3RzQWN0aW9uQnV0dG9ucyA9IHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zLmZpbmQoeCA9PiB4LkJ1dHRvblVuaXF1ZUlkID09IGVsZW1lbnQuQnV0dG9uVW5pcXVlSWQpO1xyXG4gICAgICAgIGlmIChleGlzdHNBY3Rpb25CdXR0b25zID09IG51bGwpIHtcclxuICAgICAgICAgIC8vIE51b3ZvIHRyaWdnZXJcclxuICAgICAgICAgIHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zLnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGV4aXN0c0FjdGlvbkJ1dHRvbnMgPSBlbGVtZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucyA9IG5ldyBBcnJheTxBY3Rpb25CdXR0b24+KCk7XHJcbiAgICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMucHVzaChlbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFjdGlvbkJ1dHRvbnNUYWJsZS5yZWxvYWREYXRhdGFibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRpYWxvZ0FjdGlvbkJ1dHRvblJlZi5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjaGl1ZGVyZSBpbCBkaWFsb2cgZGVsbGEgaW5uZXIgZm9ybS5cclxuICAgKi9cclxuICBjbG9zZURpYWxvZ0lubmVyRm9ybSgpIHtcclxuICAgIHRoaXMuaW5uZXJGb3JtUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNoaXVkZXJlIGlsIGRpYWxvZyBkaSBnZXN0aW9uZSBkZWxsZSBhY3Rpb24uXHJcbiAgICovXHJcbiAgY2xvc2VEaWFsb2dBY3Rpb25PblJlY29yZCgpIHtcclxuICAgIHRoaXMuZGlhbG9nQWN0aW9uT25SZWNvcmRSZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY2hpdWRlcmUgaWwgZGlhbG9nIGRpIGdlc3Rpb25lIGRlbGxlIGFjdGlvbiBidXR0b25zLlxyXG4gICAqL1xyXG4gIGNsb3NlRGlhbG9nQWN0aW9uQnV0dG9ucygpIHtcclxuICAgIHRoaXMuZGlhbG9nQWN0aW9uQnV0dG9uUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHNlZ25hcmUgY29tZSBjb25jbHVzYSBsYSBjcmVhemlvbmUgZGVsbGEgZm9ybSBlIHBlciBjcmVhcm5lIHVuYSBjb3BpYVxyXG4gICAqIGRhIHZpc2FsaXp6YXJlIGNvbWUgYW50ZXByaW1hLlxyXG4gICAqIEBwYXJhbSBjb21wbGV0ZWQgU2UgVFJVRSBzZWduYSBsYSBmb3JtIGNvbWUgY29uY2x1c2EgZSBuZSBjcmVhIHVuYSBjb3BpYSBkYSB2aXN1YWxpenphcmVcclxuICAgKi9cclxuICBzZXRGb3JtU3RhdHVzKGNvbXBsZXRlZDogYm9vbGVhbikge1xyXG4gICAgaWYgKGNvbXBsZXRlZCkge1xyXG4gICAgICB0aGlzLmZvcm1Db21wbGV0ZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnByZXZpZXdGb3JtID0gdGhpcy5zYWZlQ2xvbmUodGhpcy5mb3JtKTtcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcInByZXZpZXdGb3JtXCIsIHRoaXMucHJldmlld0Zvcm0pXHJcblxyXG4gICAgICAvLyBQZXIgdmlzdWFsaXp6YXJlIGNvcnJldHRhbWVudGUgbCdvYW50ZXByaW1hIGRlbGxhIGZvcm0gYXBwZW5hIGNyZWF0YVxyXG4gICAgICAvLyBiaXNvZ25hIHZhbG9yaXp6YXJlIGxhIHByb3ByaWV0w6AgTmFtZSBkZWkgY2FtcGkgZGVsbGEgZm9ybSBlIGRlbGxlIElubmVyRm9ybXMuXHJcbiAgICAgIHRoaXMucHJldmlld0Zvcm0uRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgZmllbGQuTmFtZSA9IGZpZWxkLkxhYmVsLnNwbGl0KFwiIFwiKS5qb2luKFwiX1wiKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnByZXZpZXdGb3JtLklubmVyRm9ybXMgJiZcclxuICAgICAgICB0aGlzLnByZXZpZXdGb3JtLklubmVyRm9ybXMubGVuZ3RoID4gMFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnByZXZpZXdGb3JtLklubmVyRm9ybXMuZm9yRWFjaCgoZm9ybSkgPT4ge1xyXG4gICAgICAgICAgZm9ybS5GaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgICAgICAgZmllbGQuTmFtZSA9IGZpZWxkLkxhYmVsLnNwbGl0KFwiIFwiKS5qb2luKFwiX1wiKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcm1Db21wbGV0ZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5wcmV2aWV3Rm9ybSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHNhbHZhcmUgbGEgZm9ybSBjcmVhdGEgYWxsYSBmaW5lIGRlbCB3aXphcmQuXHJcbiAgICogU2Ugw6ggc3RhdG8gY29uZmlndXJhdG8gdW4gZW5kUG9pbnQgcGVyIGlsIHNhbHZhdGFnZ2lvIHZpZW5lIGVmZmV0dHVhdGEgdW5hIGNoaWFtYXRhIGFsIHNlcnZlciBwYXNzYW5kbyBsJ29nZ2V0byBkYSBzYWx2YXJlXHJcbiAgICogbmVsIGJvZHkgZGVsbGEgY2hpYW1hdGEsIGFsdHJpbWVudGkgc2NhdGVuYSBsJ2V2ZW50byBcInNhdmVGb3JtRXZlbnRcIi5cclxuICAgKi9cclxuICBzYXZlRm9ybSgpIHtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICE9IG51bGwgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuU2F2ZUVuZFBvaW50XHJcbiAgICApIHtcclxuXHJcbiAgICAgIGlmICghdGhpcy5zYXZlZCkge1xyXG4gICAgICAgIHRoaXMuYmFja3VwRm9ybSA9IHRoaXMuc2FmZUNsb25lKHRoaXMuZm9ybSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5mb3JtID0gdGhpcy5zYWZlQ2xvbmUodGhpcy5iYWNrdXBGb3JtKTtcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIC8vIFBlciBmYXIgYXJyaXZhcmUgYWwgc2VydmVyIGwnYXJyYXkgZGkgRmllbGQgYmlzb2duYSBwYXNzYXJsaSBzdSBBbnlcclxuICAgICAgdGhpcy5mb3JtLk9iamVjdEZpZWxkcyA9IFtdO1xyXG4gICAgICB0aGlzLmZvcm0uT2JqZWN0RmxkRXh0cmFDb25maWdWYWx1ZXMgPSBbXTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmZvcm0uRmxkRXh0cmFDb25maWdWYWx1ZXMgIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5PYmplY3RGbGRFeHRyYUNvbmZpZ1ZhbHVlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5mb3JtLkZsZEV4dHJhQ29uZmlnVmFsdWVzKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuZm9ybS5GaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuXHJcbiAgICAgICAgLy8gVHJhc2Zvcm1vIGlsIGRhdGFnZXR0ZXIgaW4gQmFzZTY0XHJcbiAgICAgICAgZmllbGQuRGF0YUdldHRlclZhbHVlQmFzZTY0U3RyaW5nID0gYnRvYShKU09OLnN0cmluZ2lmeShmaWVsZC5EYXRhR2V0dGVyKSk7XHJcbiAgICAgICAgZmllbGQuRGF0YUdldHRlciA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmIChmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bS5BbGxlZ2F0bykge1xyXG4gICAgICAgICAgY29uc3QgZmxkQTogYW55ID0gZmllbGQ7XHJcbiAgICAgICAgICBmbGRBLk1ldGFkYXRhT2JqZWN0RmllbGRzID0gZmxkQS5NZXRhZGF0YUZpZWxkcztcclxuICAgICAgICAgIGZsZEEuTWV0YWRhdGFGaWVsZHMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuZm9ybS5PYmplY3RGaWVsZHMucHVzaChmbGRBKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gbnVtZXJpY29cIl0pIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICg8TnVtZXJpY0ZpZWxkPmZpZWxkKS5NYXhWYWx1ZSA9PSB1bmRlZmluZWQgfHxcclxuICAgICAgICAgICAgICAoPE51bWVyaWNGaWVsZD5maWVsZCkuTWF4VmFsdWUgPT0gbnVsbFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAoPE51bWVyaWNGaWVsZD5maWVsZCkuTWF4VmFsdWUgPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgKDxOdW1lcmljRmllbGQ+ZmllbGQpLk1pblZhbHVlID09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgICAgICAgICg8TnVtZXJpY0ZpZWxkPmZpZWxkKS5NaW5WYWx1ZSA9PSBudWxsXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICg8TnVtZXJpY0ZpZWxkPmZpZWxkKS5NaW5WYWx1ZSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZm9ybS5PYmplY3RGaWVsZHMucHVzaChmaWVsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5mb3JtLkZpZWxkcyA9IG51bGw7XHJcbiAgICAgIHRoaXMuZm9ybS5PcmdhSUQgPSB0aGlzLm9yZ2FJRDtcclxuICAgICAgaWYgKHRoaXMuZm9ybS5DcmVhdGlvbkRhdGUgPT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5DcmVhdGlvbkRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuZm9ybS5DcmVhdGlvblVzZXIgPSB0aGlzLlVzZXJJRDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZvcm0uTW9kaWZ5VXNlciA9IHRoaXMuVXNlcklEO1xyXG5cclxuICAgICAgdGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzID0gSlNPTi5zdHJpbmdpZnkodGhpcy5mb3JtLlRyaWdnZXJzKTtcclxuICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gbnVsbDtcclxuXHJcbiAgICAgIHRoaXMuZm9ybS5PYmplY3RBY3Rpb25CdXR0b25zID0gSlNPTi5zdHJpbmdpZnkodGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMpO1xyXG4gICAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucyA9IG51bGw7XHJcblxyXG4gICAgICBpZiAodGhpcy5mb3JtLkNvZGUgPT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuc2V0Q29kZSh0aGlzLmZvcm0uTmFtZSk7XHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgICAvLyBjaGlhbWF0YSBlZmZldHRpdmFcclxuICAgICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBQYXJhbU5hbWU6IFwiRm9ybVwiLFxyXG4gICAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtLFxyXG4gICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiSW4gQm9keVwiXSxcclxuICAgICAgICB9LFxyXG4gICAgICBdO1xyXG5cclxuICAgICAgdGhpcy5zYXZlZCA9IHRydWU7XHJcblxyXG5cclxuXHJcbiAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLlNhdmVFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXMpID0+IHtcclxuICAgICAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLlN1Y2Nlc3MoXCJGb3JtIHNhbHZhdGEgY29uIHN1Y2Nlc3NvIVwiKTtcclxuICAgICAgICAgIHRoaXMuYWZ0ZXJTYXZlRm9ybUV2ZW50LmVtaXQodGhpcy5mb3JtKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuRXJyb3IoXCJFcnJvcmUgbmVsIHNhbHZhdGFnZ2lvIGRlbGxhIGZvcm1cIik7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3JlIG5lbCBzYWx2YXRhZ2dpbyBkZWxsYSBmb3JtXCIsIGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNhdmVGb3JtRXZlbnQuZW1pdCh0aGlzLmZvcm0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIEZVTlpJT05JIFBSSVZBVEVcclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBpbXBvc3RhcmUgbGEgZm9ybSBlIGNvbmZpZ3VyYXJlIGNvbG9ubmUvRm9ybUdvdXJwLlxyXG4gICAqIEBwYXJhbSBmb3JtIEZvcm0gZGEgdXRpbGl6emFyZS5cclxuICAgKi9cclxuICBwcml2YXRlIHNldEZvcm1BbmRDb25maWd1cmUoZm9ybTogRm9ybSA9IG51bGwpIHtcclxuXHJcbiAgICBpZiAoZm9ybSAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuZm9ybSA9IGZvcm07XHJcbiAgICAgIHRoaXMuZm9ybS5PcmdhSUQgPSB0aGlzLm9yZ2FJRDtcclxuICAgICAgaWYgKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBudWxsICYmIHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBcIlwiKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gSlNPTi5wYXJzZSh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IG5ldyBBcnJheTxUcmlnZ2VyPigpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5mb3JtLk9iamVjdEFjdGlvbkJ1dHRvbnMgIT0gbnVsbCAmJiB0aGlzLmZvcm0uT2JqZWN0QWN0aW9uQnV0dG9ucyAhPSBcIlwiKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMgPSBKU09OLnBhcnNlKHRoaXMuZm9ybS5PYmplY3RBY3Rpb25CdXR0b25zKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucyA9IG5ldyBBcnJheTxBY3Rpb25CdXR0b24+KCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5mb3JtLkZpZWxkcyAhPSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLkZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG5cclxuICAgICAgICAgIC8vIFRyYXNmb3JtbyBpbCBCYXNlNjRTdHJpbmcgZGVsIERhdGFnZXR0ZXIgbmVsIERhdGFnZXR0ZXIgdmVybyBlIHByb3ByaW9cclxuICAgICAgICAgIGlmIChmaWVsZC5EYXRhR2V0dGVyVmFsdWVCYXNlNjRTdHJpbmcgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBmaWVsZC5EYXRhR2V0dGVyID0gSlNPTi5wYXJzZShhdG9iKGZpZWxkLkRhdGFHZXR0ZXJWYWx1ZUJhc2U2NFN0cmluZykpO1xyXG4gICAgICAgICAgICBmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID0gZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBudWxsID8gRGF0YUdldHRlclR5cGVFbnVtLk1hbnVhbGUgOiBmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZmllbGQuRGF0YUdldHRlciA9IG5ldyBEYXRhR2V0dGVyKCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgZmllbGQuRGF0YUdldHRlclZhbHVlQmFzZTY0U3RyaW5nID0gbnVsbDtcclxuXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xyXG4gICAgdGhpcy5jcmVhdGVGb3JtRm9ybSgpO1xyXG4gICAgaW5qZWN0R29vZ2xlRm9udHNGcm9tRm9ybSh0aGlzLmZvcm0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29uZmlndXJhIGxlIGNvbG9ubmUgcGVyIGxlIHRhYmVsbGUgbmVjZXNzYXJpZSBhbGxhIGNyZWF6aW9uZSBkZWxsYSBmb3JtOlxyXG4gICAqICAtIHBlciBsYSB2aXN1YWxpenphemlvbmUgZGVpIGNhbXBpIGluc2VyaXRpXHJcbiAgICogIC0gcGVyIGxlIGZvcm0gZGkgZGV0dGFnbGlvIGNyZWF0ZVxyXG4gICAqICAtIHBlciBsZSBhemlvbmkgY29uZmlndXJhdGUgc3VpIHJlY29yZCBkZWxsYSBmb3JtXHJcbiAgICovXHJcblxyXG5cclxuXHJcblxyXG4gIHByaXZhdGUgY29uZmlndXJlQ29sdW1ucygpIHtcclxuICAgIHRoaXMuZmllbGRzQ29sdW1ucyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJhY3Rpb25cIixcclxuICAgICAgICBkaXNwbGF5OiBcIlwiLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uTWVudUFjdGlvbixcclxuICAgICAgICBidXR0b25NZW51SWNvbjogXCJtb3JlX3ZlcnRcIixcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgNHJlbVwiIH0sXHJcbiAgICAgICAgYWN0aW9uczogW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIk1vZGlmaWNhXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZWRpdFwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMuZWRpdEZpZWxkKGVsZW1lbnQpLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJEdXBsaWNhIHNvdHRvXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZmlsZV9jb3B5XCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy5kdXBsaWNhdGVGaWVsZChlbGVtZW50LCBlbGVtZW50Lk9yZGluYWxQb3NpdGlvbiArIDEpLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJEdXBsaWNhIGluIGZvbmRvXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZmlsZV9jb3B5XCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy5kdXBsaWNhdGVGaWVsZChlbGVtZW50KSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiRWxpbWluYVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImRlbGV0ZVwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMuZGVsZXRlRWxlbWVudChlbGVtZW50LCBcIkZpZWxkc1wiKSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAvLyB7XHJcbiAgICAgICAgICAvLyAgIG5hbWU6IFwiU3Bvc3RhIHN1XCIsXHJcbiAgICAgICAgICAvLyAgIGljb246IFwiYXJyb3dfdXB3YXJkXCIsXHJcbiAgICAgICAgICAvLyAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT5cclxuICAgICAgICAgIC8vICAgICB0aGlzLm1vdmVFbGVtZW50KGVsZW1lbnQsIHRydWUsIFwiRmllbGRzXCIpLFxyXG4gICAgICAgICAgLy8gICBkaXNhYmxlZDogKGVsZW1lbnQpID0+IHRoaXMuZm9ybS5GaWVsZHMuaW5kZXhPZihlbGVtZW50KSA9PT0gMCxcclxuICAgICAgICAgIC8vIH0sXHJcbiAgICAgICAgICAvLyB7XHJcbiAgICAgICAgICAvLyAgIG5hbWU6IFwiU3Bvc3RhIGdpw7lcIixcclxuICAgICAgICAgIC8vICAgaWNvbjogXCJhcnJvd19kb3dud2FyZFwiLFxyXG4gICAgICAgICAgLy8gICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+XHJcbiAgICAgICAgICAvLyAgICAgdGhpcy5tb3ZlRWxlbWVudChlbGVtZW50LCBmYWxzZSwgXCJGaWVsZHNcIiksXHJcbiAgICAgICAgICAvLyAgIGRpc2FibGVkOiAoZWxlbWVudCkgPT5cclxuICAgICAgICAgIC8vICAgICB0aGlzLmZvcm0uRmllbGRzLmluZGV4T2YoZWxlbWVudCkgPj0gdGhpcy5mb3JtLkZpZWxkcy5sZW5ndGggLSAxLFxyXG4gICAgICAgICAgLy8gfSxcclxuICAgICAgICBdLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIkZpZWxkVHlwZVwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiVGlwb2xvZ2lhXCIsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5FbnVtLFxyXG4gICAgICAgIGVudW1Nb2RlbDogRmllbGRUeXBlRW51bSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgMTJyZW1cIiB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7IGtleTogXCJMYWJlbFwiLCBkaXNwbGF5OiBcIkxhYmVsXCIsIHN0eWxlczogeyBmbGV4OiBcIjAgMCA4cmVtXCIgfSB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIkRlc2NyaXB0aW9uXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJEZXNjcml6aW9uZVwiLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCAxMnJlbVwiIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZVwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiVGlwbyBSZWN1cGVybyBEYXRpXCIsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5FbnVtLFxyXG4gICAgICAgIGVudW1Nb2RlbDogRGF0YUdldHRlclR5cGVFbnVtLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCAxMnJlbVwiIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiUmVxdWlyZWRcIixcclxuICAgICAgICBkaXNwbGF5OiBcIk9iYmxpZ2F0b3Jpb1wiLFxyXG4gICAgICAgIHZhbHVlOiAoZWxlbWVudCkgPT4gZWxlbWVudC5SZXF1aXJlZCxcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLkJvb2xlYW4sXHJcbiAgICAgICAgYm9vbGVhblZhbHVlczoge1xyXG4gICAgICAgICAgdHJ1ZTogJzxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgc3VjY2Vzcy1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgICAgZmFsc2U6ICc8aSBjbGFzcz1cImZhIGZhLWNsb3NlIGVycm9yLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgNXJlbVwiLCBjZWxsQWxpZ25tZW50OiBDZWxsQWxpZ25tZW50RW51bS5DRU5URVIgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJGb3JtdWxhXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJDYWxjb2xhdG9cIixcclxuICAgICAgICB2YWx1ZTogKGVsZW1lbnQpID0+IGVsZW1lbnQuRm9ybXVsYSAhPSBudWxsICYmIGVsZW1lbnQuRm9ybXVsYSAhPSAnJyxcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLkJvb2xlYW4sXHJcbiAgICAgICAgYm9vbGVhblZhbHVlczoge1xyXG4gICAgICAgICAgdHJ1ZTogJzxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgc3VjY2Vzcy1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgICAgZmFsc2U6ICc8aSBjbGFzcz1cImZhIGZhLWNsb3NlIGVycm9yLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgNXJlbVwiLCBjZWxsQWxpZ25tZW50OiBDZWxsQWxpZ25tZW50RW51bS5DRU5URVIgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJJbkxpc3RWaWV3XCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJWaXNpYmlsZSBpbiBDb21waWxhemlvbmVcIixcclxuICAgICAgICB2YWx1ZTogKGVsZW1lbnQpID0+IGVsZW1lbnQuSW5MaXN0VmlldyxcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLkJvb2xlYW4sXHJcbiAgICAgICAgYm9vbGVhblZhbHVlczoge1xyXG4gICAgICAgICAgdHJ1ZTogJzxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgc3VjY2Vzcy1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgICAgZmFsc2U6ICc8aSBjbGFzcz1cImZhIGZhLWNsb3NlIGVycm9yLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgN3JlbVwiLCBjZWxsQWxpZ25tZW50OiBDZWxsQWxpZ25tZW50RW51bS5DRU5URVIgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJJbnZpc2liaWxpdHlcIixcclxuICAgICAgICBkaXNwbGF5OiBcIk9jY3VwYSBzcGF6aW8/XCIsXHJcbiAgICAgICAgdmFsdWU6IChlbGVtZW50KSA9PiBlbGVtZW50LkluTGlzdFZpZXcgfHwgZWxlbWVudC5JbnZpc2liaWxpdHkgPT0gRmllbGRJbnZpc2liaWxpdHlFbnVtW1wiTkFTQ09TVE8gQ09OIEFSRUEgVklTSUJJTEVcIl0sXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5Cb29sZWFuLFxyXG4gICAgICAgIGJvb2xlYW5WYWx1ZXM6IHtcclxuICAgICAgICAgIHRydWU6ICc8aSBjbGFzcz1cImZhIGZhLWNoZWNrIHN1Y2Nlc3MtY29sb3JcIj48L2k+JyxcclxuICAgICAgICAgIGZhbHNlOiAnPGkgY2xhc3M9XCJmYSBmYS1jbG9zZSBlcnJvci1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDdyZW1cIiwgY2VsbEFsaWdubWVudDogQ2VsbEFsaWdubWVudEVudW0uQ0VOVEVSIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiVmlzaWJsZUlmXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJWaXNpYmlsaXTDoCBjb25kaXppb25hdGFcIixcclxuICAgICAgICB2YWx1ZTogKGVsZW1lbnQpID0+IGVsZW1lbnQuVmlzaWJsZUlmICE9IG51bGwgJiYgZWxlbWVudC5WaXNpYmxlSWYgIT0gXCJcIixcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLkJvb2xlYW4sXHJcbiAgICAgICAgYm9vbGVhblZhbHVlczoge1xyXG4gICAgICAgICAgdHJ1ZTogJzxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgc3VjY2Vzcy1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgICAgZmFsc2U6ICc8aSBjbGFzcz1cImZhIGZhLWNsb3NlIGVycm9yLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgN3JlbVwiLCBjZWxsQWxpZ25tZW50OiBDZWxsQWxpZ25tZW50RW51bS5DRU5URVIgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJBbnN3ZXJTdHlsZS5Jbkxpc3RWaWV3XCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJWaXNpYmlsZSBuZWxsYSByaXNwb3N0YVwiLFxyXG4gICAgICAgIHZhbHVlOiAoZWxlbWVudCkgPT4gIWVsZW1lbnQuQW5zd2VyU3R5bGUgfHwgZWxlbWVudC5BbnN3ZXJTdHlsZSAmJiBlbGVtZW50LkFuc3dlclN0eWxlLkluTGlzdFZpZXcsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5Cb29sZWFuLFxyXG4gICAgICAgIGJvb2xlYW5WYWx1ZXM6IHtcclxuICAgICAgICAgIHRydWU6ICc8aSBjbGFzcz1cImZhIGZhLWNoZWNrIHN1Y2Nlc3MtY29sb3JcIj48L2k+JyxcclxuICAgICAgICAgIGZhbHNlOiAnPGkgY2xhc3M9XCJmYSBmYS1jbG9zZSBlcnJvci1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDVyZW1cIiwgY2VsbEFsaWdubWVudDogQ2VsbEFsaWdubWVudEVudW0uQ0VOVEVSIH0sXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5mb3JtLkZvcm1TY2FsYXJUeXBlICYmXHJcbiAgICAgIHRoaXMuZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2VcclxuICAgICkge1xyXG4gICAgICB0aGlzLmZpZWxkc0NvbHVtbnMuc3BsaWNlKDEsIDAsIHtcclxuICAgICAgICBrZXk6IFwiRmllbGRHcm91cFwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiU2V6aW9uZVwiLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uRXh0ZXJuYWxUZW1wbGF0ZSxcclxuICAgICAgICBleHRlcm5hbFRlbXBsYXRlOiB0aGlzLmZpZWxkU2VjdGlvbkNvbHVtblRlbXBsYXRlLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCAxNHJlbVwiIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyB0aGlzLmZpZWxkc0NvbHVtbnMucHVzaChcclxuICAgICAgLy8gICB7XHJcbiAgICAgIC8vICAgICBrZXk6IFwiRmllbGRHcm91cFwiLFxyXG4gICAgICAvLyAgICAgZGlzcGxheTogXCJTZXppb25lXCIsXHJcbiAgICAgIC8vICAgICB0eXBlOiBUeXBlQ29sdW1uLkV4dGVybmFsVGVtcGxhdGUsXHJcbiAgICAgIC8vICAgICBleHRlcm5hbFRlbXBsYXRlOiB0aGlzLmZpZWxkU2VjdGlvbkNvbHVtblRlbXBsYXRlLFxyXG4gICAgICAvLyAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDE0cmVtXCIgfVxyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFjdGlvbkJ1dHRvbnNDb2x1bW5zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcImFjdGlvblwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiXCIsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5NZW51QWN0aW9uLFxyXG4gICAgICAgIGJ1dHRvbk1lbnVJY29uOiBcIm1vcmVfdmVydFwiLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCA2JVwiIH0sXHJcbiAgICAgICAgYWN0aW9uczogW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIk1vZGlmaWNhXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZWRpdFwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMub3BlbkFjdGlvbkJ1dHRvbkRpYWxvZyhlbGVtZW50KSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiRWxpbWluYVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImRlbGV0ZVwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5kZWxldGVBY3Rpb25CdXR0b24oZWxlbWVudCksXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXSxcclxuICAgICAgfSxcclxuICAgICAgeyBrZXk6IFwiQnV0dG9uTGFiZWxcIiwgZGlzcGxheTogXCJFdGljaGV0dGFcIiwgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDMwJVwiIH0gfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJCdXR0b25Db2RlXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJDb2RpY2VcIixcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgMjAlXCIgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJJY29uXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJJY29uYVwiLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCAxMCVcIiB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIlNob3dJblwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiU2V6aW9uaVwiLFxyXG4gICAgICAgIHZhbHVlOiAoZWwpID0+IHtcclxuICAgICAgICAgIHZhciBmaW5hbFRleHQgPSBcIlwiO1xyXG4gICAgICAgICAgaWYgKGVsLlNob3dJbiA9PSBudWxsIHx8IGVsLlNob3dJbi5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJOZXNzdW5hXCI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbC5TaG93SW4uZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgZmluYWxUZXh0ICs9IEFjdGlvbkZsYWdFbnVtW2VsZW1lbnRdICsgXCIgLyBcIjtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuIGZpbmFsVGV4dDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCAyMCVcIiB9LFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuXHJcbiAgICB0aGlzLmFjdGlvbnNPblJlY29yZENvbHVtbnMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiYWN0aW9uXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJcIixcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLk1lbnVBY3Rpb24sXHJcbiAgICAgICAgYnV0dG9uTWVudUljb246IFwibW9yZV92ZXJ0XCIsXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDYlXCIgfSxcclxuICAgICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiTW9kaWZpY2FcIixcclxuICAgICAgICAgICAgaWNvbjogXCJlZGl0XCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy5vcGVuQWN0aW9uT25SZWNvcmREaWFsb2coZWxlbWVudCksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkVsaW1pbmFcIixcclxuICAgICAgICAgICAgaWNvbjogXCJkZWxldGVcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMuZGVsZXRlRWxlbWVudChlbGVtZW50LCBcIkFjdGlvbnNPblJlY29yZFwiKSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiU3Bvc3RhIHN1XCIsXHJcbiAgICAgICAgICAgIGljb246IFwiYXJyb3dfdXB3YXJkXCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT5cclxuICAgICAgICAgICAgICB0aGlzLm1vdmVFbGVtZW50KGVsZW1lbnQsIHRydWUsIFwiQWN0aW9uc09uUmVjb3JkXCIpLFxyXG4gICAgICAgICAgICBkaXNhYmxlZDogKGVsZW1lbnQpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZC5pbmRleE9mKGVsZW1lbnQpID09PSAwLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJTcG9zdGEgZ2nDuVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImFycm93X2Rvd253YXJkXCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT5cclxuICAgICAgICAgICAgICB0aGlzLm1vdmVFbGVtZW50KGVsZW1lbnQsIGZhbHNlLCBcIkFjdGlvbnNPblJlY29yZFwiKSxcclxuICAgICAgICAgICAgZGlzYWJsZWQ6IChlbGVtZW50KSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQuaW5kZXhPZihlbGVtZW50KSA+PVxyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQubGVuZ3RoIC0gMSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgfSxcclxuICAgICAgeyBrZXk6IFwiSWNvblwiLCBkaXNwbGF5OiBcIkljb25hXCIsIHN0eWxlczogeyBmbGV4OiBcIiAwIDAgMTUlXCIgfSB9LFxyXG4gICAgICB7IGtleTogXCJOYW1lXCIsIGRpc3BsYXk6IFwiTm9tZVwiLCBzdHlsZXM6IHsgZmxleDogXCIgMCAwIDIwJVwiIH0gfSxcclxuICAgICAgeyBrZXk6IFwiQWN0aW9uXCIsIGRpc3BsYXk6IFwiQXppb25lXCIgfSxcclxuICAgIF07XHJcblxyXG4gICAgdGhpcy50cmlnZ2Vyc0NvbHVtbnMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiYWN0aW9uXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJcIixcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLk1lbnVBY3Rpb24sXHJcbiAgICAgICAgYnV0dG9uTWVudUljb246IFwibW9yZV92ZXJ0XCIsXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDYlXCIgfSxcclxuICAgICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiTW9kaWZpY2FcIixcclxuICAgICAgICAgICAgaWNvbjogXCJlZGl0XCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy5vcGVuVHJpZ2dlcnNEaWFsb2coZWxlbWVudCksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkVsaW1pbmFcIixcclxuICAgICAgICAgICAgaWNvbjogXCJkZWxldGVcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMuZGVsZXRlVHJpZ2dlcihlbGVtZW50KSxcclxuICAgICAgICAgIH1cclxuICAgICAgICBdLFxyXG4gICAgICB9LFxyXG4gICAgICB7IGtleTogXCJkZXNjcmlwdGlvblwiLCBkaXNwbGF5OiBcIkRlc2NyaXppb25lXCIsIHN0eWxlczogeyBmbGV4OiBcIiAwIDAgMTUlXCIgfSB9LFxyXG4gICAgICB7IGtleTogXCJleGVjdXRpb25cIiwgZGlzcGxheTogXCJDb3NhIGVzZWd1ZVwiLCBzdHlsZXM6IHsgZmxleDogXCIgMCAwIDE1JVwiIH0gfSxcclxuICAgIF07XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYSBpbCBGb3JtR3JvdXAgcGVyIGwnb2dnZXR0byBGb3JtXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVGb3JtRm9ybSgpIHtcclxuICAgIHRoaXMuZm9ybUZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBDb2RlOiBbdGhpcy5mb3JtLkNvZGVdLFxyXG4gICAgICBOYW1lOiBbdGhpcy5mb3JtLk5hbWUsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBEZXNjcmlwdGlvbjogW3RoaXMuZm9ybS5EZXNjcmlwdGlvbl0sXHJcbiAgICAgIEZvcm1TY2FsYXJUeXBlOiBbdGhpcy5mb3JtLkZvcm1TY2FsYXJUeXBlLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5vbkNoYW5nZUZvcm1TY2FsYXJUeXBlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEcmFnIGFuZCBEcm9wIGRlbGxlIGNvbG9ubmUgZGVsIGZvcm1cclxuICAgKi9cclxuXHJcbiAgb25EcmFnUmVsZWFzZWQoZXZlbnQpIHtcclxuXHJcbiAgfVxyXG5cclxuICBvbkRyYWdFbmRlZChldmVudCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKTtcclxuICAgICAgdGhpcy5yZWxvYWRGaWVsZHNUYWJsZSgpO1xyXG4gICAgfSwgMTAwMCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhIGlsIEZvcm1Hcm91cCBlcHIgbCdhZ2dpdW50YSBvIGxhIG1vZGlmaWNhIGRpIHVuYSBhY3Rpb24gc3VpIHJlY29yZCBkZWxsYSBGb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlQWN0aW9uT25SZWNvcmRGb3JtKCkge1xyXG4gICAgdGhpcy5hY3Rpb25PblJlY29yZEZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBOYW1lOiBbdGhpcy5zZWxlY3RlZEFjdGlvbi5OYW1lLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgSWNvbjogW3RoaXMuc2VsZWN0ZWRBY3Rpb24uSWNvbiwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIEFjdGlvbjogW3RoaXMuc2VsZWN0ZWRBY3Rpb24uQWN0aW9uLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hpdWRlIGlsIGRpYWxvZyBwZXIgYWdnaXVuZ2VyZS9tb2RpZmljYXJlIHVuIEZpZWxkIHNlbnphIHNhbHZhcmVcclxuICAgKi9cclxuICBwcml2YXRlIGNsb3NlRmllbGREaWFsb2coKSB7XHJcbiAgICBpZiAodGhpcy5kaWFsb2dGaWVsZFJlZiAhPSB1bmRlZmluZWQpIHRoaXMuZGlhbG9nRmllbGRSZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZ2VzdGlyZSBsJ2FwZXJ0dXJhIGRlbCBkaWFsb2cgcGVyIGxhIG1vZGlmaWNhIGRpIHVuIEZpZWxkLlxyXG4gICAqIFNlIGlsIGZpZWxkIMOoIGRpIHRpcG8gXCJGb3JtIGRpIGRldHRhZ2xpb1wiIGFwcmUgaWwgZGlhbG9nIHBlciBsYSBtb2RpZmljYSBkaSB1bmFcclxuICAgKiBJbm5lckZvcm0gYWx0cmltZW50aSBhcHJlIHF1ZWxsbyBwZXIgbGEgbW9kaWZpY2EgZGkgdW4gRmllbGQuXHJcbiAgICogQHBhcmFtIGZpZWxkIENhbXBvIGRhIG1vZGlmaWNhcmVcclxuICAgKi9cclxuICBwcml2YXRlIGVkaXRGaWVsZChmaWVsZDogQmFzZUZpZWxkKSB7XHJcbiAgICBpZiAoZmllbGQuRmllbGRUeXBlICE9IEZpZWxkVHlwZUVudW1bXCJGb3JtIGRpIGRldHRhZ2xpb1wiXSkge1xyXG4gICAgICB0aGlzLm9wZW5GaWVsZERpYWxvZyhmaWVsZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm9wZW5Jbm5lckZvcm1EaWFsb2coXHJcbiAgICAgICAgdGhpcy5mb3JtLklubmVyRm9ybXMuZmluZCgoZikgPT4gZi5OYW1lID09IGZpZWxkLkxhYmVsKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBnZXN0aXJlIGxhIGR1cGxpY2F6aW9uZSBkaSB1biBGaWVsZC5cclxuICAgKiBAcGFyYW0gZmllbGQgQ2FtcG8gZGEgbW9kaWZpY2FyZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZHVwbGljYXRlRmllbGQoZmllbGQ6IEJhc2VGaWVsZCwgb3JkaW5hbFBvc2l0aW9uID0gbnVsbCkge1xyXG4gICAgaWYgKGZpZWxkLkZpZWxkVHlwZSAhPSBGaWVsZFR5cGVFbnVtW1wiRm9ybSBkaSBkZXR0YWdsaW9cIl0pIHtcclxuICAgICAgLy8gcmljcmVvIGwnb2dnZXR0byBwYXNzYW5kbyBwZXIgdW4ganNvblxyXG4gICAgICBsZXQgY2xvbmVGaWVsZDogQmFzZUZpZWxkID0gdGhpcy5zYWZlQ2xvbmUoZmllbGQpO1xyXG5cclxuICAgICAgY2xvbmVGaWVsZC5MYWJlbCA9IGZpZWxkW1wiTGFiZWxcIl0gKyBcIkNvcHlcIjtcclxuICAgICAgY2xvbmVGaWVsZC5JRCA9IHRoaXMuZ2VuZXJhdGVHVUlEKCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWVsZCA9IG5ldyBCYXNlRmllbGQoKTtcclxuICAgICAgaWYgKG9yZGluYWxQb3NpdGlvbiA9PSBudWxsKSB7XHJcbiAgICAgICAgY2xvbmVGaWVsZC5PcmRpbmFsUG9zaXRpb24gPSB0aGlzLmZvcm0uRmllbGRzLmxlbmd0aCArIDE7XHJcbiAgICAgICAgdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgPSBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNsb25lRmllbGQuT3JkaW5hbFBvc2l0aW9uID0gb3JkaW5hbFBvc2l0aW9uO1xyXG4gICAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID0gb3JkaW5hbFBvc2l0aW9uO1xyXG4gICAgICAgIC8vIHV0aWxpenpvIG9yZGluYWwgcG9zaXRpb24gcGVyIGluZmlsYXJlIGlsIGNhbXBvIGNvcnJldHRhbWV0bmUgbmVsbGEgbGlzdGFcclxuICAgICAgICAvLyBwZXIgZmFybG8gc2Ugbm9uIMOoIG51bGxvIGRldm8gY3JlYXJlIGxvIHNwYXppb1xyXG4gICAgICAgIHRoaXMuT3JkaW5hdGVkSW5zZXJ0RmllbGQoZmllbGQsIG9yZGluYWxQb3NpdGlvbilcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGNsb25lRmllbGRTdHJ1Y3R1cmUgPSB7IGZpZWxkOiBjbG9uZUZpZWxkLCByZW9wZW46IDAgfVxyXG4gICAgICB0aGlzLm9uU2F2ZUZpZWxkKGNsb25lRmllbGRTdHJ1Y3R1cmUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYWxlcnQoXCJub24gw6ggcG9zc2liaWxlIGR1cGxpY2FyZSB1bmEgZm9ybSBkaSBkZXR0YWdsaW9cIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIE9yZGluYXRlZEluc2VydEZpZWxkKGZpZWxkOiBCYXNlRmllbGQsIG9yZGluYWxQb3NpdGlvbiA9IDApIHtcclxuICAgIHRoaXMuZm9ybS5GaWVsZHMuc3BsaWNlKG9yZGluYWxQb3NpdGlvbiwgMCwgZmllbGQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwb3NpdGlvbkV4Y2hhbmdlRmllbGRzKGZpZWxkMTogQmFzZUZpZWxkLCBmaWVsZDI6IEJhc2VGaWVsZCkge1xyXG4gICAgY29uc3QgdGVtcCA9IGZpZWxkMTtcclxuICAgIHRoaXMuZm9ybS5GaWVsZHNbZmllbGQxLk9yZGluYWxQb3NpdGlvbl0gPSBmaWVsZDI7XHJcbiAgICB0aGlzLmZvcm0uRmllbGRzW2ZpZWxkMi5PcmRpbmFsUG9zaXRpb25dID0gdGVtcDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgZ2VuZXJhIHVuYSBudW92YSBHVUlEXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUdVSUQoKSB7XHJcbiAgICByZXR1cm4gJ3h4eHgteHh4eC14eHh4LXh4eHgnLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24gKGMpIHtcclxuICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwLFxyXG4gICAgICAgIHYgPSBjID09ICd4JyA/IHIgOiAociAmIDB4MyB8IDB4OCk7XHJcbiAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaW11b3ZlcmUgdW4gRmllbGQgYWxsJ2ludGVybm8gZGkgdW5hIEZvcm0uXHJcbiAgICogUmljaGllZGUgY29uZmVybWEgYWxsJ3V0ZW50ZSBwcmltYSBkaSByaW11b3ZlcmxvLlxyXG4gICAqIEBwYXJhbSBmaWVsZCBCYXNlRmllbGQgZGEgcmltdW92ZXJlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkZWxldGVFbGVtZW50KFxyXG4gICAgZWxlbWVudDogQmFzZUZpZWxkIHwgQWN0aW9uT25SZWNvcmQgfCBGb3JtLFxyXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmdcclxuICApIHtcclxuICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLkNvbmZpcm0oXHJcbiAgICAgIFwiRWxpbWluYXJlIGwnZWxlbWVudG8gc2VsZXppb25hdG8/XCIsXHJcbiAgICAgICgpID0+IHtcclxuICAgICAgICB0aGlzLmZvcm1bcHJvcGVydHlOYW1lXS5zcGxpY2UoXHJcbiAgICAgICAgICB0aGlzLmZvcm1bcHJvcGVydHlOYW1lXS5pbmRleE9mKGVsZW1lbnQpLFxyXG4gICAgICAgICAgMVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PT0gXCJGaWVsZHNcIikge1xyXG4gICAgICAgICAgdGhpcy5zZXRGaWVsZE9yZGluYWxQb3NpdGlvbigpO1xyXG4gICAgICAgICAgdGhpcy5yZWxvYWRGaWVsZHNUYWJsZSgpO1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoUHJldmlldygpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHlOYW1lID09PSBcIkFjdGlvbnNPblJlY29yZFwiKSB7XHJcbiAgICAgICAgICB0aGlzLnNldEFjdGlvbk9yZGluYWxQb3NpdGlvbigpO1xyXG4gICAgICAgICAgdGhpcy5yZWxvYWRBY3Rpb25zT25SZWNvcmRUYWJsZSgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHlOYW1lID09PSBcIkFjdGlvbkJ1dHRvbnNcIikge1xyXG4gICAgICAgICAgdGhpcy5zZXRBY3Rpb25CdXR0b25PcmRpbmFsUG9zaXRpb24oKTtcclxuICAgICAgICAgIHRoaXMucmVsb2FkQWN0aW9uQnV0dG9uc09uUmVjb3JkVGFibGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGZhbHNlLFxyXG4gICAgICBcIlJpY2hpZXN0YSBjb25mZXJtYVwiXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzcG9zdGFyZSB1biBjYW1wbyBhbGwnaW50ZXJubyBkZWxsYSBmb3JtLlxyXG4gICAqIEBwYXJhbSBmaWVsZCBPZ2dldHRvIGRpIHRpcG8gQmFzZUZpZWxkIGRhIHNwb3N0YXJlLlxyXG4gICAqIEBwYXJhbSBtb3ZlVXAgU2UgVFJVRSBhbGxvcmEgc3Bvc3RhIHZlcnNvIGwnYWx0byBpbCBjYW1wbyAoYWJiYXNzYSBsJ2luZGljZSkgYWx0cmltZW50aSBpbCBjb250cmFyaW8uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBtb3ZlRWxlbWVudChcclxuICAgIGVsZW1lbnQ6IEJhc2VGaWVsZCB8IEFjdGlvbk9uUmVjb3JkLFxyXG4gICAgbW92ZVVwOiBib29sZWFuLFxyXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmdcclxuICApIHtcclxuICAgIGNvbnN0IHN0YXJ0aW5nSW5kZXggPSB0aGlzLmZvcm1bcHJvcGVydHlOYW1lXS5pbmRleE9mKGVsZW1lbnQpO1xyXG4gICAgY29uc3QgZW5kaW5nSW5kZXggPSBzdGFydGluZ0luZGV4ICsgKG1vdmVVcCA/IC0xIDogMSk7XHJcblxyXG4gICAgdGhpcy5mb3JtW3Byb3BlcnR5TmFtZV0uc3BsaWNlKHN0YXJ0aW5nSW5kZXgsIDEpO1xyXG4gICAgdGhpcy5mb3JtW3Byb3BlcnR5TmFtZV0uc3BsaWNlKGVuZGluZ0luZGV4LCAwLCBlbGVtZW50KTtcclxuXHJcbiAgICBpZiAocHJvcGVydHlOYW1lID09PSBcIkZpZWxkc1wiKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKTtcclxuICAgICAgdGhpcy5yZWxvYWRGaWVsZHNUYWJsZSgpO1xyXG4gICAgfSBlbHNlIGlmIChwcm9wZXJ0eU5hbWUgPT09IFwiQWN0aW9uc09uUmVjb3JkXCIpIHtcclxuICAgICAgdGhpcy5zZXRBY3Rpb25PcmRpbmFsUG9zaXRpb24oKTtcclxuICAgICAgdGhpcy5yZWxvYWRBY3Rpb25zT25SZWNvcmRUYWJsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW1wb3N0YSBsJ29yZGluYW1lbnRvIGRlbGxlIHNlemlvbmkgY2hlIGNvbXBvbmdvbm8gbGEgZm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIHNldEZvcm1GaWVsZEdyb3VwT3JkaW5hbFBvc2l0aW9uKCkge1xyXG4gICAgdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMuZm9yRWFjaCgoZywgaSkgPT4gKGcuT3JkaW5hbFBvc2l0aW9uID0gaSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW1wb3N0YSBsJ29yZGluYW1lbnRvIGRlaSBjYW1waSBhbGwnaW50ZXJubyBkZWxsYSBmb3JtIGluIGJhc2UgYWxsJ29yZGluZSBjaGUgbCd1dGVudGVcclxuICAgKiBoYSBkZWZpbml0byBuZWxsYSB0YWJlbGxhIGluIGN1aSBzb25vIG1vc3RyYXRpXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRGaWVsZE9yZGluYWxQb3NpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmZvcm0uRmllbGRzKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5GaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgICBmaWVsZC5PcmRpbmFsUG9zaXRpb24gPSB0aGlzLmZvcm0uRmllbGRzLmluZGV4T2YoZmllbGQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmljYXJpY2FyZSBpIGRhdGkgZGVsbGEgdGFiZWxsYSBkZWkgY2FtcGkgYWdnaXVudGkgaW4gdW5hIGZvcm1cclxuICAgKi9cclxuICBwcml2YXRlIHJlbG9hZEZpZWxkc1RhYmxlKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGRzVGFibGUpIHtcclxuICAgICAgdGhpcy5maWVsZHNUYWJsZS5yZWxvYWREYXRhdGFibGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEltcG9zdGEgbCdvcmRpbmFtZW50byBkZWkgY2FtcGkgYWxsJ2ludGVybm8gZGVsbGEgZm9ybSBpbiBiYXNlIGFsbCdvcmRpbmUgY2hlIGwndXRlbnRlXHJcbiAgICogaGEgZGVmaW5pdG8gbmVsbGEgdGFiZWxsYSBpbiBjdWkgc29ubyBtb3N0cmF0aVxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0QWN0aW9uT3JkaW5hbFBvc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQpIHtcclxuICAgICAgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZC5mb3JFYWNoKChhY3Rpb24pID0+IHtcclxuICAgICAgICBhY3Rpb24uT3JkaW5hbFBvc2l0aW9uID0gdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZC5pbmRleE9mKGFjdGlvbik7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW1wb3N0YSBsJ29yZGluYW1lbnRvIGRlaSBjYW1waSBhbGwnaW50ZXJubyBkZWxsYSBmb3JtIGluIGJhc2UgYWxsJ29yZGluZSBjaGUgbCd1dGVudGVcclxuICAgKiBoYSBkZWZpbml0byBuZWxsYSB0YWJlbGxhIGluIGN1aSBzb25vIG1vc3RyYXRpXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRBY3Rpb25CdXR0b25PcmRpbmFsUG9zaXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMpIHtcclxuICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMuZm9yRWFjaCgoYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgYWN0aW9uLk9yZGluYWxQb3NpdGlvbiA9IHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zLmluZGV4T2YoYWN0aW9uKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJpY2FyaWNhcmUgaSBkYXRpIGRlbGxhIHRhYmVsbGEgZGVsbGUgYXppb25pIGFnZ2l1bnRpdmUgc3VpIHJlY29yZCBkZWxsYSBGb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVsb2FkQWN0aW9uc09uUmVjb3JkVGFibGUoKSB7XHJcbiAgICBpZiAodGhpcy5hY3Rpb25zT25SZWNvcmRUYWJsZSkge1xyXG4gICAgICB0aGlzLmFjdGlvbnNPblJlY29yZFRhYmxlLnJlbG9hZERhdGF0YWJsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaWNhcmljYXJlIGkgZGF0aSBkZWxsYSB0YWJlbGxhIGRlbGxlIGF6aW9uaSBhZ2dpdW50aXZlIHN1aSByZWNvcmQgZGVsbGEgRm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIHJlbG9hZEFjdGlvbkJ1dHRvbnNPblJlY29yZFRhYmxlKCkge1xyXG4gICAgaWYgKHRoaXMuYWN0aW9uQnV0dG9uc1RhYmxlKSB7XHJcbiAgICAgIHRoaXMuYWN0aW9uQnV0dG9uc1RhYmxlLnJlbG9hZERhdGF0YWJsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIG9uRXh0ZXJuYWxDb21wb25lbnRPdXQoZXY6IGV2ZW50T3V0KSB7XHJcbiAgICB0aGlzLm91dC5lbWl0KGV2KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRSSUdHRVJTXHJcbiAgICovXHJcblxyXG4gIG9wZW5UcmlnZ2Vyc0RpYWxvZyhldjogVHJpZ2dlciA9IG51bGwpIHtcclxuXHJcbiAgICBpZiAoZXYgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVHJpZ2dlciA9IGV2O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRyaWdnZXIgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGlhbG9nVHJpZ2dlcnNSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nVHJpZ2dlcnMsIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgd2lkdGg6IFwiNzUlXCIsXHJcbiAgICAgIGhlaWdodDogXCI4MCVcIixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVRyaWdnZXIoZWxlbWVudDogVHJpZ2dlcikge1xyXG5cclxuICAgIGlmIChlbGVtZW50ICE9IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZm9ybS5UcmlnZ2VycyAhPSBudWxsKSB7XHJcbiAgICAgICAgdmFyIGV4aXN0c1RyaWdnZXIgPSB0aGlzLmZvcm0uVHJpZ2dlcnMuZmluZCh4ID0+IHguQ0lEID09IGVsZW1lbnQuQ0lEKTtcclxuICAgICAgICBpZiAoZXhpc3RzVHJpZ2dlciA9PSBudWxsKSB7XHJcbiAgICAgICAgICAvLyBOdW92byB0cmlnZ2VyXHJcbiAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMucHVzaChlbGVtZW50KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZXhpc3RzVHJpZ2dlciA9IGVsZW1lbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IG5ldyBBcnJheTxUcmlnZ2VyPigpO1xyXG4gICAgICAgIHRoaXMuZm9ybS5UcmlnZ2Vycy5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudHJpZ2dlcnNUYWJsZS5yZWxvYWREYXRhdGFibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRpYWxvZ1RyaWdnZXJzUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVUcmlnZ2VyKGVsZW1lbnQ6IFRyaWdnZXIpIHtcclxuICAgIHZhciBpbmRleCA9IHRoaXMuZm9ybS5UcmlnZ2Vycy5maW5kSW5kZXgoeCA9PiB4LkNJRCA9PSBlbGVtZW50LkNJRCk7XHJcbiAgICB0aGlzLmZvcm0uVHJpZ2dlcnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIHRoaXMudHJpZ2dlcnNUYWJsZS5yZWxvYWREYXRhdGFibGUoKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZUFjdGlvbkJ1dHRvbihlbGVtZW50OiBBY3Rpb25CdXR0b24pIHtcclxuICAgIHZhciBpbmRleCA9IHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zLmZpbmRJbmRleCh4ID0+IHguQnV0dG9uQ29kZSA9PSBlbGVtZW50LkJ1dHRvbkNvZGUpO1xyXG4gICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIHRoaXMuYWN0aW9uQnV0dG9uc1RhYmxlLnJlbG9hZERhdGF0YWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgb3BlbkFpRWRpdERpYWxvZygpIHtcclxuICAgIHRoaXMuYWlFZGl0UHJvbXB0ID0gXCJcIjtcclxuICAgIHRoaXMuYWlFZGl0QXR0YWNobWVudHMgPSBbXTtcclxuICAgIHRoaXMuYWlFZGl0QXV0b3NhdmUgPSBmYWxzZTtcclxuICAgIHRoaXMuYWlFZGl0TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93QWlQcm9tcHRIaXN0b3J5ID0gdHJ1ZTtcclxuICAgIHRoaXMuZGlhbG9nQWlFZGl0UmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0FpRWRpdCwge1xyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICB3aWR0aDogXCI2MCVcIixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VBaUVkaXREaWFsb2coKSB7XHJcbiAgICB0aGlzLmRpYWxvZ0FpRWRpdFJlZi5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgb25BaUVkaXRGb3JGaWVsZChmaWVsZENvZGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5haUVkaXRGaWVsZENvbnRleHQgPSB7IGNvZGU6IGZpZWxkQ29kZSB9O1xyXG4gICAgdGhpcy5vcGVuQWlFZGl0RGlhbG9nKCk7XHJcbiAgfVxyXG5cclxuICBvbkFpR3JhcGhpY1N1Z2dlc3QoZGF0YTogeyBjb2RlOiBzdHJpbmc7IGhpbnQ6IHN0cmluZyB9KTogdm9pZCB7XHJcbiAgICBjb25zdCByYXdIaW50ID0gZGF0YS5oaW50Py50cmltKCkgPz8gJyc7XHJcbiAgICBjb25zdCBmaWVsZExhYmVsID0gZGF0YS5jb2RlPy50cmltKCkgfHwgJ19jYW1wb3Nlbnphbm9tZV8nO1xyXG5cclxuICAgIGlmICghdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24/LkZvcm1zPy5TcGVlY2hUb0dyYXBoaWNzRW5kUG9pbnQpIHtcclxuICAgICAgLy8gRmFsbGJhY2s6IHBhc3NhIGlsIHJhd0hpbnQgbmVsbCdpbmplY3RlZFByb21wdDsgc2VuZEFpRWRpdCBlc3RyYXJyw6AgaWwgbW9kZWxsbyBkYSBlc3NvXHJcbiAgICAgIGNvbnN0IGluamVjdGVkUHJvbXB0ID0gcmF3SGludFxyXG4gICAgICAgID8gYFZvZ2xpbyBtb2RpZmljYXJlIGluIG1hbmllcmEgY29tcGxldGEgbGEgZ3JhZmljYSBkZWwgY2FtcG8gJyR7ZmllbGRMYWJlbH0nIHNlZ3VlbmRvIGluIG1hbmllcmEgaW5jb250ZXN0YWJpbGUgcXVlc3RhIGluZGljYXppb25lOiAnJHtyYXdIaW50fSdgXHJcbiAgICAgICAgOiBgVm9nbGlvIG1vZGlmaWNhcmUgaW4gbWFuaWVyYSBjb21wbGV0YSBsYSBncmFmaWNhIGRlbCBjYW1wbyAnJHtmaWVsZExhYmVsfScgY29uIHVubyBzdGlsZSBjcmVhdGl2byBlIG9yaWdpbmFsZSBhIHR1YSBzY2VsdGFgO1xyXG4gICAgICB0aGlzLmFpRWRpdEZpZWxkQ29udGV4dCA9IHsgY29kZTogZGF0YS5jb2RlIH07XHJcbiAgICAgIHRoaXMuYWlGaWVsZFN1Z2dlc3RMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zZW5kQWlFZGl0KGluamVjdGVkUHJvbXB0KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHsgY2xlYW5UZXh0OiBoaW50LCBtb2RlbElkOiBhaU1vZGVsSWQgfSA9IHRoaXMuZXh0cmFjdE1vZGVsRnJvbVRleHQocmF3SGludCk7XHJcblxyXG4gICAgLy8gVHJvdmEgaWwgY2FtcG86IGdpw6Agc2FsdmF0byBuZWwgZm9ybSBvcHB1cmUgbnVvdm8gYW5jb3JhIG5lbCBkaWFsb2dcclxuICAgIGNvbnN0IGZpZWxkSW5Gb3JtID0gdGhpcy5mb3JtPy5GaWVsZHM/LmZpbmQoZiA9PiBmLkxhYmVsID09PSBmaWVsZExhYmVsKSA/PyBudWxsO1xyXG4gICAgY29uc3QgY3VycmVudEZpZWxkID0gZmllbGRJbkZvcm0gPz8gdGhpcy5zZWxlY3RlZEZpZWxkO1xyXG4gICAgaWYgKCFjdXJyZW50RmllbGQpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmFpRmllbGRTdWdnZXN0TG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgLy8gU3Rlc3NvIHBheWxvYWQgZGkgb25Gb3JtR3JhcGhpY1N1Z2dlc3QsIG1hIEZpZWxkcyBjb24gc29sbyBpbCBjYW1wbyBjb3JyZW50ZVxyXG4gICAgY29uc3QgZ3JhcGhpY3NQYXJhbXM6IEVuZFBvaW50RGF0YVBhcmFtc1tdID0gW1xyXG4gICAgICB7IFBhcmFtTmFtZTogJ05hbWUnLCBQYXJhbVZhbHVlOiB0aGlzLmZvcm0/Lk5hbWUgPz8gZmllbGRMYWJlbCwgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtWydJbiBCb2R5J10gfSxcclxuICAgICAgeyBQYXJhbU5hbWU6ICdEZXNjcmlwdGlvbicsIFBhcmFtVmFsdWU6IHRoaXMuZm9ybT8uRGVzY3JpcHRpb24gPz8gbnVsbCwgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtWydJbiBCb2R5J10gfSxcclxuICAgICAgeyBQYXJhbU5hbWU6ICdUaGVtZUNTUycsIFBhcmFtVmFsdWU6IHRoaXMuZm9ybT8uVGhlbWVDU1MgPz8gbnVsbCwgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtWydJbiBCb2R5J10gfSxcclxuICAgICAgeyBQYXJhbU5hbWU6ICdUaXRsZUNTUycsIFBhcmFtVmFsdWU6IHRoaXMuZm9ybT8uVGl0bGVDU1MgPz8gbnVsbCwgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtWydJbiBCb2R5J10gfSxcclxuICAgICAgeyBQYXJhbU5hbWU6ICdGaWVsZHMnLCBQYXJhbVZhbHVlOiBbeyBMYWJlbDogY3VycmVudEZpZWxkLkxhYmVsLCBGaWVsZFR5cGU6IGN1cnJlbnRGaWVsZC5GaWVsZFR5cGUgfV0sIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVsnSW4gQm9keSddIH0sXHJcbiAgICAgIHsgUGFyYW1OYW1lOiAnSGludCcsIFBhcmFtVmFsdWU6IGhpbnQgfHwgdGhpcy5idWlsZFJhbmRvbUdyYXBoaWNIaW50KCksIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVsnSW4gQm9keSddIH0sXHJcbiAgICAgIHsgUGFyYW1OYW1lOiAnTW9kZWxJZCcsIFBhcmFtVmFsdWU6IGFpTW9kZWxJZCwgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtWydJbiBCb2R5J10gfSxcclxuICAgIF07XHJcblxyXG4gICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLlNwZWVjaFRvR3JhcGhpY3NFbmRQb2ludCxcclxuICAgICAgZ3JhcGhpY3NQYXJhbXMsXHJcbiAgICAgIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuYWlGaWVsZFN1Z2dlc3RMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGNvbnN0IHIgPSByZXMgYXMgeyBGaWVsZFN0eWxlcz86IHsgW2Nzc0NsYXNzTmFtZTogc3RyaW5nXTogeyBbcHJvcDogc3RyaW5nXTogc3RyaW5nIH0gfTsgV2FybmluZ3M/OiBzdHJpbmdbXSB9O1xyXG5cclxuICAgICAgICAvLyBBcHBsaWNhIEZpZWxkU3R5bGVzIHNvbG8gYWwgY2FtcG8gdGFyZ2V0IChub24gYSB0dXR0byBpbCBmb3JtKVxyXG4gICAgICAgIGlmIChyLkZpZWxkU3R5bGVzKSB7XHJcbiAgICAgICAgICBjb25zdCBjc3NDbGFzc05hbWUgPSAoRXFwRHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvckNvbXBvbmVudC5GSUVMRF9UWVBFX0NTU19DTEFTUyBhcyBhbnkpW2N1cnJlbnRGaWVsZC5GaWVsZFR5cGVdO1xyXG4gICAgICAgICAgaWYgKGNzc0NsYXNzTmFtZSAmJiByLkZpZWxkU3R5bGVzW2Nzc0NsYXNzTmFtZV0gJiYgdHlwZW9mIHIuRmllbGRTdHlsZXNbY3NzQ2xhc3NOYW1lXSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgKGN1cnJlbnRGaWVsZCBhcyBhbnkpW2Nzc0NsYXNzTmFtZV0gPSByLkZpZWxkU3R5bGVzW2Nzc0NsYXNzTmFtZV07XHJcbiAgICAgICAgICAgIGlmIChmaWVsZEluRm9ybSkgKGZpZWxkSW5Gb3JtIGFzIGFueSlbY3NzQ2xhc3NOYW1lXSA9IHIuRmllbGRTdHlsZXNbY3NzQ2xhc3NOYW1lXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFnZ2lvcm5hIHNlbGVjdGVkRmllbGQgcGVyIGlsIGRpYWxvZ1xyXG4gICAgICAgIGNvbnN0IGFwcGx5VGFyZ2V0ID0gZmllbGRJbkZvcm0gPz8gY3VycmVudEZpZWxkO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaWVsZCA9IHRoaXMuc2FmZUNsb25lKGFwcGx5VGFyZ2V0KTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRmllbGQuRm9ybXVsYSA9IGFwcGx5VGFyZ2V0LkZvcm11bGE7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRGaWVsZC5BbnN3ZXJTdHlsZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRmllbGQuQW5zd2VyU3R5bGUgPSB7IEluTGlzdFZpZXc6IHRydWUsIFZpc2libGVJZjogbnVsbCwgRmllbGRzdHlsZUNTUzogJycsIExhYmVsc3R5bGVDU1M6ICcnLCBDb2xTcGFuU2l6ZXM6IFtdLCBJbnZpc2liaWxpdHk6IEZpZWxkSW52aXNpYmlsaXR5RW51bS5OQVNDT1NUTyB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZmllbGRJbkZvcm0pIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID0gdGhpcy5mb3JtLkZpZWxkcy5pbmRleE9mKGZpZWxkSW5Gb3JtKTtcclxuXHJcbiAgICAgICAgLy8gUmlhcHJpIGlsIGRpYWxvZyBjYW1wbyAoc2Fsdm8gVmlzdWFsIEVkaXRvciBncmFwaGljIHN1Z2dlc3QgbW9kZSlcclxuICAgICAgICBpZiAoIXRoaXMudmVHcmFwaGljU3VnZ2VzdEFjdGl2ZSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZGlhbG9nRmllbGRSZWYpIHRoaXMuZGlhbG9nRmllbGRSZWYuY2xvc2UoKTtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nRmllbGRSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nRmllbGQsIHtcclxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLCBoYXNCYWNrZHJvcDogdHJ1ZSwgd2lkdGg6ICc3NSUnLCBoZWlnaHQ6ICc4MCUnLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBBZ2dpb3JuYSBwcmV2aWV3IHNlIGVyYSBhcGVydGFcclxuICAgICAgICBjb25zdCB3YXNPblByZXZpZXcgPSB0aGlzLmZvcm1Db21wbGV0ZWQ7XHJcbiAgICAgICAgaWYgKHdhc09uUHJldmlldykge1xyXG4gICAgICAgICAgdGhpcy5mb3JtQ29tcGxldGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnByZXZpZXdGb3JtID0gbnVsbDtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXRGb3JtU3RhdHVzKHRydWUpLCA1MCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB0aGlzLnZlR3JhcGhpY1N1Z2dlc3RBY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuU3VjY2VzcygnR3JhZmljYSBjYW1wbyBhcHBsaWNhdGEhJyk7XHJcbiAgICAgICAgaWYgKHIuV2FybmluZ3M/Lmxlbmd0aCA+IDApIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLldhcm5pbmcoci5XYXJuaW5ncyk7XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgIHRoaXMuYWlGaWVsZFN1Z2dlc3RMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy52ZUdyYXBoaWNTdWdnZXN0QWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgbXNnID0gKGVycm9yIGFzIGFueSk/LmVycm9yO1xyXG4gICAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLkVycm9yKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnICYmIG1zZy50cmltKCkgPyBtc2cgOiAnRXJyb3JlIG5lbGxhIGdlbmVyYXppb25lIGRlbGxhIGdyYWZpY2EgZGVsIGNhbXBvJyk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvbkFpRWRpdEZpbGVDaGFuZ2UoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgaWYgKCFpbnB1dC5maWxlcz8ubGVuZ3RoKSByZXR1cm47XHJcbiAgICBBcnJheS5mcm9tKGlucHV0LmZpbGVzKS5mb3JFYWNoKGZpbGUgPT4ge1xyXG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGJhc2U2NCA9IChyZWFkZXIucmVzdWx0IGFzIHN0cmluZykuc3BsaXQoJywnKVsxXTtcclxuICAgICAgICB0aGlzLmFpRWRpdEF0dGFjaG1lbnRzLnB1c2goeyBmaWxlTmFtZTogZmlsZS5uYW1lLCBiYXNlNjRDb250ZW50OiBiYXNlNjQsIG1lZGlhVHlwZTogZmlsZS50eXBlIH0pO1xyXG4gICAgICB9O1xyXG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAgIH0pO1xyXG4gICAgaW5wdXQudmFsdWUgPSAnJztcclxuICB9XHJcblxyXG4gIHJlbW92ZUFpRWRpdEF0dGFjaG1lbnQoaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5haUVkaXRBdHRhY2htZW50cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gIH1cclxuXHJcbiAgc2VuZEFpRWRpdChkaXJlY3RQcm9tcHQ/OiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHVzZXJQcm9tcHRSYXcgPSBkaXJlY3RQcm9tcHQgPz8gdGhpcy5haUVkaXRQcm9tcHQ7XHJcbiAgICBpZiAoIXVzZXJQcm9tcHRSYXc/LnRyaW0oKSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuYWlFZGl0TG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgLy8gQWdnaW9ybmEgbG8gc3RvcmljbyBwcm9tcHQgcHJpbWEgZGkgaW52aWFyZVxyXG4gICAgY29uc3QgY3VycmVudEhpc3Rvcnk6IHN0cmluZ1tdID0gdGhpcy5mb3JtPy5BSVByb21wdHMgPyBKU09OLnBhcnNlKHRoaXMuZm9ybS5BSVByb21wdHMpIDogW107XHJcbiAgICBjdXJyZW50SGlzdG9yeS5wdXNoKHVzZXJQcm9tcHRSYXcudHJpbSgpKTtcclxuICAgIGNvbnN0IHVwZGF0ZWRQcm9tcHRzSnNvbiA9IEpTT04uc3RyaW5naWZ5KGN1cnJlbnRIaXN0b3J5KTtcclxuXHJcbiAgICAvLyBJbiBmaWVsZC1jb250ZXh0IG1vZGUgKGRpYWxvZyBBSSBvIGdyYXBoaWMgc3VnZ2VzdCk6IHByZW5kaSBpbCBjYW1wbyBkYWxsYSBtb2RhbGVcclxuICAgIGxldCBmaWVsZENsb25lRm9yU2VuZDogQmFzZUZpZWxkIHwgbnVsbCA9IG51bGw7XHJcbiAgICBsZXQgZmllbGRDb2RlRm9yUmVmcmVzaDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICBsZXQgaXNOZXdVbnNhdmVkRmllbGQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5haUVkaXRGaWVsZENvbnRleHQgIT09IG51bGwpIHtcclxuICAgICAgZmllbGRDbG9uZUZvclNlbmQgPSB0aGlzLnNhZmVDbG9uZSh0aGlzLnNlbGVjdGVkRmllbGQpO1xyXG4gICAgICBpZiAoIWZpZWxkQ2xvbmVGb3JTZW5kLkxhYmVsPy50cmltKCkpIHtcclxuICAgICAgICBmaWVsZENsb25lRm9yU2VuZC5MYWJlbCA9ICdfY2FtcG9zZW56YW5vbWVfJztcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWZpZWxkQ2xvbmVGb3JTZW5kLkZpZWxkVHlwZSkge1xyXG4gICAgICAgIGZpZWxkQ2xvbmVGb3JTZW5kLkZpZWxkVHlwZSA9IEZpZWxkVHlwZUVudW1bXCJDYW1wbyBkaSB0ZXN0b1wiXTtcclxuICAgICAgfVxyXG4gICAgICBmaWVsZENvZGVGb3JSZWZyZXNoID0gZmllbGRDbG9uZUZvclNlbmQuTGFiZWw7XHJcbiAgICAgIGlzTmV3VW5zYXZlZEZpZWxkID0gISh0aGlzLmZvcm0/LkZpZWxkcz8uc29tZShmID0+IGYuTGFiZWwgPT09IGZpZWxkQ29kZUZvclJlZnJlc2gpID8/IGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJbmllemlvbmUgY29udGVzdHVhbGU6IGluIG1vZGFsaXTDoCBkaWFsb2cgKG5vIGRpcmVjdFByb21wdCkgc2kgcHJlcGVuZGUgaWwgY29udGVzdG8gZGVsIGNhbXBvXHJcbiAgICBsZXQgc3BlZWNoVGV4dCA9IHVzZXJQcm9tcHRSYXc7XHJcbiAgICBpZiAoZGlyZWN0UHJvbXB0ID09PSB1bmRlZmluZWQgJiYgdGhpcy5haUVkaXRGaWVsZENvbnRleHQpIHtcclxuICAgICAgc3BlZWNoVGV4dCA9IGBWb2dsaW8gbW9kaWZpY2FyZSBpbCBjYW1wbyAnJHtmaWVsZENvZGVGb3JSZWZyZXNoID8/IHRoaXMuYWlFZGl0RmllbGRDb250ZXh0LmNvZGV9JywgZGkgc2VndWl0byB0aSBkw7IgbGUgaXN0cnV6aW9uaS4gU2UgcXVlbGxvIGNoZSB0aSBzY3Jpdm8gbm9uIHJpZ3VhcmRhIGxhIG1vZGlmaWNhIGRlbCBjYW1wbywgY29uc2lkZXJhIHR1dHRvIGNvbWUgaW5jb2VyZW50ZS4gJHt1c2VyUHJvbXB0UmF3fWA7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5haUVkaXRGaWVsZENvbnRleHQgPSBudWxsO1xyXG5cclxuICAgIC8vIEVzdHJhZSBpbCBtb2RlbGxvIEFJIGRhbCB0ZXN0byAoZXMuIFwiVXNhIFNvbm5ldFwiKSBlIHB1bGlzY2UgaWwgcHJvbXB0IHByaW1hIGRpIGludmlhcmxvXHJcbiAgICBjb25zdCB7IGNsZWFuVGV4dDogY2xlYW5TcGVlY2hUZXh0LCBtb2RlbElkOiBhaU1vZGVsSWQgfSA9IHRoaXMuZXh0cmFjdE1vZGVsRnJvbVRleHQoc3BlZWNoVGV4dCk7XHJcbiAgICBzcGVlY2hUZXh0ID0gY2xlYW5TcGVlY2hUZXh0O1xyXG5cclxuICAgIC8vIFByZXBhcmEgaWwgZm9ybSBjb21lIGluIHNhdmVGb3JtOiBGaWVsZHMg4oaSIE9iamVjdEZpZWxkc1xyXG4gICAgY29uc3QgZm9ybVRvU2VuZCA9IHRoaXMuc2FmZUNsb25lKHRoaXMuZm9ybSk7XHJcbiAgICBmb3JtVG9TZW5kLkFJUHJvbXB0cyA9IHVwZGF0ZWRQcm9tcHRzSnNvbjtcclxuICAgIGZvcm1Ub1NlbmQuT2JqZWN0RmllbGRzID0gW107XHJcbiAgICBmb3JtVG9TZW5kLk9iamVjdEZsZEV4dHJhQ29uZmlnVmFsdWVzID0gW107XHJcblxyXG4gICAgaWYgKGZvcm1Ub1NlbmQuRmxkRXh0cmFDb25maWdWYWx1ZXMgIT0gbnVsbCkge1xyXG4gICAgICBmb3JtVG9TZW5kLk9iamVjdEZsZEV4dHJhQ29uZmlnVmFsdWVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmb3JtVG9TZW5kLkZsZEV4dHJhQ29uZmlnVmFsdWVzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSW4gZmllbGQtY29udGV4dDogc29zdGl0dWlzY2UgKG1vZGlmaWNhKSBvIGFnZ2l1bmdlIChudW92byBjYW1wbykgaWwgY2FtcG8gY29uIGlsIGNvbnRlbnV0byBjb3JyZW50ZSBkZWxsYSBtb2RhbGVcclxuICAgIGlmIChmaWVsZENsb25lRm9yU2VuZCkge1xyXG4gICAgICBpZiAoIWZvcm1Ub1NlbmQuRmllbGRzKSBmb3JtVG9TZW5kLkZpZWxkcyA9IFtdO1xyXG4gICAgICBmb3JtVG9TZW5kLkZpZWxkcyA9IGZvcm1Ub1NlbmQuRmllbGRzLmZpbHRlcihmID0+IGYuTGFiZWwgIT09IGZpZWxkQ29kZUZvclJlZnJlc2gpO1xyXG4gICAgICBmb3JtVG9TZW5kLkZpZWxkcy5wdXNoKGZpZWxkQ2xvbmVGb3JTZW5kKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZm9ybVRvU2VuZC5GaWVsZHMpIHtcclxuICAgICAgZm9ybVRvU2VuZC5GaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgICBpZiAoZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW0uQWxsZWdhdG8pIHtcclxuICAgICAgICAgIGNvbnN0IGZsZEE6IGFueSA9IGZpZWxkO1xyXG4gICAgICAgICAgZmxkQS5NZXRhZGF0YU9iamVjdEZpZWxkcyA9IGZsZEEuTWV0YWRhdGFGaWVsZHM7XHJcbiAgICAgICAgICBmbGRBLk1ldGFkYXRhRmllbGRzID0gW107XHJcbiAgICAgICAgICBmbGRBLkRhdGFHZXR0ZXJWYWx1ZUJhc2U2NFN0cmluZyA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkoZmxkQS5EYXRhR2V0dGVyID8/IHt9KSk7XHJcbiAgICAgICAgICBmbGRBLkRhdGFHZXR0ZXIgPSBudWxsO1xyXG4gICAgICAgICAgZm9ybVRvU2VuZC5PYmplY3RGaWVsZHMucHVzaChmbGRBKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZmllbGQuRGF0YUdldHRlclZhbHVlQmFzZTY0U3RyaW5nID0gYnRvYShKU09OLnN0cmluZ2lmeShmaWVsZC5EYXRhR2V0dGVyID8/IHt9KSk7XHJcbiAgICAgICAgICBmaWVsZC5EYXRhR2V0dGVyID0gbnVsbDtcclxuICAgICAgICAgIGZvcm1Ub1NlbmQuT2JqZWN0RmllbGRzLnB1c2goZmllbGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBmb3JtVG9TZW5kLkZpZWxkcyA9IG51bGw7XHJcbiAgICBmb3JtVG9TZW5kLk9iamVjdFRyaWdnZXJzID0gSlNPTi5zdHJpbmdpZnkoZm9ybVRvU2VuZC5UcmlnZ2VycyA/PyBbXSk7XHJcbiAgICBmb3JtVG9TZW5kLlRyaWdnZXJzID0gbnVsbDtcclxuICAgIGZvcm1Ub1NlbmQuT2JqZWN0QWN0aW9uQnV0dG9ucyA9IEpTT04uc3RyaW5naWZ5KGZvcm1Ub1NlbmQuQWN0aW9uQnV0dG9ucyA/PyBbXSk7XHJcbiAgICBmb3JtVG9TZW5kLkFjdGlvbkJ1dHRvbnMgPSBudWxsO1xyXG5cclxuICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgIHsgUGFyYW1OYW1lOiBcIkZvcm1cIiwgUGFyYW1WYWx1ZTogZm9ybVRvU2VuZCwgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiSW4gQm9keVwiXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogXCJTcGVlY2hUZXh0XCIsIFBhcmFtVmFsdWU6IHNwZWVjaFRleHQsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIkluIEJvZHlcIl0gfSxcclxuICAgICAgeyBQYXJhbU5hbWU6IFwiT3JnYUlEXCIsIFBhcmFtVmFsdWU6IHBhcnNlSW50KHRoaXMub3JnYUlEKSB8fCAwLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJJbiBCb2R5XCJdIH0sXHJcbiAgICAgIHsgUGFyYW1OYW1lOiBcIk1vZGlmeVVzZXJcIiwgUGFyYW1WYWx1ZTogdGhpcy5Vc2VySUQsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIkluIEJvZHlcIl0gfSxcclxuICAgICAgeyBQYXJhbU5hbWU6IFwiQXV0b3NhdmVcIiwgUGFyYW1WYWx1ZTogdGhpcy5haUVkaXRBdXRvc2F2ZSwgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiSW4gQm9keVwiXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogXCJBdHRhY2htZW50c1wiLCBQYXJhbVZhbHVlOiB0aGlzLmFpRWRpdEF0dGFjaG1lbnRzLm1hcChhID0+ICh7IEZpbGVOYW1lOiBhLmZpbGVOYW1lLCBCYXNlNjRDb250ZW50OiBhLmJhc2U2NENvbnRlbnQsIE1lZGlhVHlwZTogYS5tZWRpYVR5cGUgfSkpLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJJbiBCb2R5XCJdIH0sXHJcbiAgICAgIHsgUGFyYW1OYW1lOiBcIlRyaWdnZXJEZWZpbml0aW9uc1wiLCBQYXJhbVZhbHVlOiB0aGlzLnRyaWdnZXJzID8/IG51bGwsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIkluIEJvZHlcIl0gfSxcclxuICAgICAgeyBQYXJhbU5hbWU6IFwiQWN0aW9uQnV0dG9uRGVmaW5pdGlvbnNcIiwgUGFyYW1WYWx1ZTogdGhpcy5hY3Rpb25CdXR0b25zID8/IG51bGwsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIkluIEJvZHlcIl0gfSxcclxuICAgICAgeyBQYXJhbU5hbWU6IFwiTW9kZWxJZFwiLCBQYXJhbVZhbHVlOiBhaU1vZGVsSWQsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIkluIEJvZHlcIl0gfSxcclxuICAgIF07XHJcblxyXG4gICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLlNwZWVjaFRvRm9ybUVkaXRFbmRQb2ludCxcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgKHJlczogeyBGb3JtOiBGb3JtLCBXYXJuaW5nczogc3RyaW5nW10sIENvc3RDZW50czogbnVtYmVyLCBFbGFwc2VkTXM6IG51bWJlciB9KSA9PiB7XHJcbiAgICAgICAgdGhpcy5haUVkaXRMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChkaXJlY3RQcm9tcHQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgdGhpcy5jbG9zZUFpRWRpdERpYWxvZygpO1xyXG5cclxuICAgICAgICAgIGlmIChpc05ld1Vuc2F2ZWRGaWVsZCkge1xyXG4gICAgICAgICAgICAvLyBDYW1wbyBudW92byBub24gc2FsdmF0bzogZWxhYm9yYSBpbCBmb3JtIHRvcm5hdG8gZSByaWFwcmkgaWwgZGlhbG9nIGNhbXBvIGNvbiBpIHZhbG9yaSBhZ2dpb3JuYXRpXHJcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9ybUFuZENvbmZpZ3VyZShyZXMuRm9ybSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm0pIHRoaXMuZm9ybS5BSVByb21wdHMgPSB1cGRhdGVkUHJvbXB0c0pzb247XHJcblxyXG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkRmllbGRJZHggPSB0aGlzLmZvcm0/LkZpZWxkcz8uZmluZEluZGV4KGYgPT4gZi5MYWJlbCA9PT0gZmllbGRDb2RlRm9yUmVmcmVzaCkgPz8gLTE7XHJcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRGaWVsZCA9IHVwZGF0ZWRGaWVsZElkeCA+PSAwID8gdGhpcy5mb3JtLkZpZWxkc1t1cGRhdGVkRmllbGRJZHhdIDogbnVsbDtcclxuICAgICAgICAgICAgaWYgKHVwZGF0ZWRGaWVsZCAmJiB0aGlzLmZvcm0/LkZpZWxkcykge1xyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybS5GaWVsZHMuc3BsaWNlKHVwZGF0ZWRGaWVsZElkeCwgMSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRGaWVsZE9yZGluYWxQb3NpdGlvbigpO1xyXG4gICAgICAgICAgICAgIHRoaXMucmVsb2FkRmllbGRzVGFibGUoKTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgPSBudWxsO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWVsZCA9IHRoaXMuc2FmZUNsb25lKHVwZGF0ZWRGaWVsZCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkLkZvcm11bGEgPSB1cGRhdGVkRmllbGQuRm9ybXVsYTtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEZpZWxkLkFuc3dlclN0eWxlID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWVsZC5BbnN3ZXJTdHlsZSA9IHsgSW5MaXN0VmlldzogdHJ1ZSwgVmlzaWJsZUlmOiBudWxsLCBGaWVsZHN0eWxlQ1NTOiAnJywgTGFiZWxzdHlsZUNTUzogJycsIENvbFNwYW5TaXplczogW10sIEludmlzaWJpbGl0eTogRmllbGRJbnZpc2liaWxpdHlFbnVtLk5BU0NPU1RPIH07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmRpYWxvZ0ZpZWxkUmVmKSB0aGlzLmRpYWxvZ0ZpZWxkUmVmLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5kaWFsb2dGaWVsZFJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dGaWVsZCwge1xyXG4gICAgICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLCBoYXNCYWNrZHJvcDogdHJ1ZSwgd2lkdGg6ICc3NSUnLCBoZWlnaHQ6ICc4MCUnLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBDYW1wbyBnacOgIGVzaXN0ZW50ZSBvIG5lc3N1biBjb250ZXN0byBjYW1wb1xyXG4gICAgICAgICAgICBjb25zdCB3YXNPblByZXZpZXcgPSB0aGlzLmZvcm1Db21wbGV0ZWQ7XHJcbiAgICAgICAgICAgIGlmICh3YXNPblByZXZpZXcpIHtcclxuICAgICAgICAgICAgICB0aGlzLmZvcm1Db21wbGV0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLnByZXZpZXdGb3JtID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNldEZvcm1BbmRDb25maWd1cmUocmVzLkZvcm0pO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtKSB0aGlzLmZvcm0uQUlQcm9tcHRzID0gdXBkYXRlZFByb21wdHNKc29uO1xyXG5cclxuICAgICAgICAgICAgLy8gU2UgYydlcmEgdW4gY29udGVzdG8gY2FtcG8sIGFnZ2lvcm5hIHNlbGVjdGVkRmllbGQgZSByaWFwcmkgaWwgZGlhbG9nXHJcbiAgICAgICAgICAgIC8vIHBlciByaWZsZXR0ZXJlIGxlIG1vZGlmaWNoZSBBSSAoZXMuIFRleHRGaWVsZFN0eWxlQ1NTKSBuZWxsJ2VkaXRvclxyXG4gICAgICAgICAgICBpZiAoZmllbGRDb2RlRm9yUmVmcmVzaCAmJiB0aGlzLmZvcm0/LkZpZWxkcykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRGaWVsZCA9IHRoaXMuZm9ybS5GaWVsZHMuZmluZChmID0+IGYuTGFiZWwgPT09IGZpZWxkQ29kZUZvclJlZnJlc2gpO1xyXG4gICAgICAgICAgICAgIGlmICh1cGRhdGVkRmllbGQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID0gdGhpcy5mb3JtLkZpZWxkcy5pbmRleE9mKHVwZGF0ZWRGaWVsZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmllbGQgPSB0aGlzLnNhZmVDbG9uZSh1cGRhdGVkRmllbGQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkLkZvcm11bGEgPSB1cGRhdGVkRmllbGQuRm9ybXVsYTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmllbGQuQW5zd2VyU3R5bGUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmllbGQuQW5zd2VyU3R5bGUgPSB7IEluTGlzdFZpZXc6IHRydWUsIFZpc2libGVJZjogbnVsbCwgRmllbGRzdHlsZUNTUzogJycsIExhYmVsc3R5bGVDU1M6ICcnLCBDb2xTcGFuU2l6ZXM6IFtdLCBJbnZpc2liaWxpdHk6IEZpZWxkSW52aXNpYmlsaXR5RW51bS5OQVNDT1NUTyB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGlhbG9nRmllbGRSZWYpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dGaWVsZFJlZi5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0ZpZWxkUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0ZpZWxkLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLCBoYXNCYWNrZHJvcDogdHJ1ZSwgd2lkdGg6ICc3NSUnLCBoZWlnaHQ6ICc4MCUnLFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh3YXNPblByZXZpZXcpIHtcclxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2V0Rm9ybVN0YXR1cyh0cnVlKSwgNTApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIFwiU3VnZ2VyaXNjaSBncmFmaWNhXCI6IHN0ZXNzbyBmbHVzc28gZmllbGQtY29udGV4dCAobnVvdm8gbyBlc2lzdGVudGUpXHJcbiAgICAgICAgICB0aGlzLmFpRmllbGRTdWdnZXN0TG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIGlmIChpc05ld1Vuc2F2ZWRGaWVsZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldEZvcm1BbmRDb25maWd1cmUocmVzLkZvcm0pO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtKSB0aGlzLmZvcm0uQUlQcm9tcHRzID0gdXBkYXRlZFByb21wdHNKc29uO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdXBkYXRlZEZpZWxkSWR4ID0gdGhpcy5mb3JtPy5GaWVsZHM/LmZpbmRJbmRleChmID0+IGYuTGFiZWwgPT09IGZpZWxkQ29kZUZvclJlZnJlc2gpID8/IC0xO1xyXG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkRmllbGQgPSB1cGRhdGVkRmllbGRJZHggPj0gMCA/IHRoaXMuZm9ybS5GaWVsZHNbdXBkYXRlZEZpZWxkSWR4XSA6IG51bGw7XHJcbiAgICAgICAgICAgIGlmICh1cGRhdGVkRmllbGQgJiYgdGhpcy5mb3JtPy5GaWVsZHMpIHtcclxuICAgICAgICAgICAgICB0aGlzLmZvcm0uRmllbGRzLnNwbGljZSh1cGRhdGVkRmllbGRJZHgsIDEpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKTtcclxuICAgICAgICAgICAgICB0aGlzLnJlbG9hZEZpZWxkc1RhYmxlKCk7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID0gbnVsbDtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmllbGQgPSB0aGlzLnNhZmVDbG9uZSh1cGRhdGVkRmllbGQpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWVsZC5Gb3JtdWxhID0gdXBkYXRlZEZpZWxkLkZvcm11bGE7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRGaWVsZC5BbnN3ZXJTdHlsZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmllbGQuQW5zd2VyU3R5bGUgPSB7IEluTGlzdFZpZXc6IHRydWUsIFZpc2libGVJZjogbnVsbCwgRmllbGRzdHlsZUNTUzogJycsIExhYmVsc3R5bGVDU1M6ICcnLCBDb2xTcGFuU2l6ZXM6IFtdLCBJbnZpc2liaWxpdHk6IEZpZWxkSW52aXNpYmlsaXR5RW51bS5OQVNDT1NUTyB9O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoIXRoaXMudmVHcmFwaGljU3VnZ2VzdEFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGlhbG9nRmllbGRSZWYpIHRoaXMuZGlhbG9nRmllbGRSZWYuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nRmllbGRSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nRmllbGQsIHtcclxuICAgICAgICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLCBoYXNCYWNrZHJvcDogdHJ1ZSwgd2lkdGg6ICc3NSUnLCBoZWlnaHQ6ICc4MCUnLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCB3YXNPblByZXZpZXcgPSB0aGlzLmZvcm1Db21wbGV0ZWQ7XHJcbiAgICAgICAgICAgIGlmICh3YXNPblByZXZpZXcpIHtcclxuICAgICAgICAgICAgICB0aGlzLmZvcm1Db21wbGV0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLnByZXZpZXdGb3JtID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNldEZvcm1BbmRDb25maWd1cmUocmVzLkZvcm0pO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtKSB0aGlzLmZvcm0uQUlQcm9tcHRzID0gdXBkYXRlZFByb21wdHNKc29uO1xyXG5cclxuICAgICAgICAgICAgaWYgKGZpZWxkQ29kZUZvclJlZnJlc2ggJiYgdGhpcy5mb3JtPy5GaWVsZHMpIHtcclxuICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkRmllbGQgPSB0aGlzLmZvcm0uRmllbGRzLmZpbmQoZiA9PiBmLkxhYmVsID09PSBmaWVsZENvZGVGb3JSZWZyZXNoKTtcclxuICAgICAgICAgICAgICBpZiAodXBkYXRlZEZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkSWR4ID0gdGhpcy5mb3JtLkZpZWxkcy5pbmRleE9mKHVwZGF0ZWRGaWVsZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmllbGQgPSB0aGlzLnNhZmVDbG9uZSh1cGRhdGVkRmllbGQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkLkZvcm11bGEgPSB1cGRhdGVkRmllbGQuRm9ybXVsYTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmllbGQuQW5zd2VyU3R5bGUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmllbGQuQW5zd2VyU3R5bGUgPSB7IEluTGlzdFZpZXc6IHRydWUsIFZpc2libGVJZjogbnVsbCwgRmllbGRzdHlsZUNTUzogJycsIExhYmVsc3R5bGVDU1M6ICcnLCBDb2xTcGFuU2l6ZXM6IFtdLCBJbnZpc2liaWxpdHk6IEZpZWxkSW52aXNpYmlsaXR5RW51bS5OQVNDT1NUTyB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgPSB1cGRhdGVkSWR4O1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnZlR3JhcGhpY1N1Z2dlc3RBY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGlhbG9nRmllbGRSZWYpIHRoaXMuZGlhbG9nRmllbGRSZWYuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dGaWVsZFJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dGaWVsZCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSwgaGFzQmFja2Ryb3A6IHRydWUsIHdpZHRoOiAnNzUlJywgaGVpZ2h0OiAnODAlJyxcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAod2FzT25QcmV2aWV3KSB7XHJcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNldEZvcm1TdGF0dXModHJ1ZSksIDUwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy52ZUdyYXBoaWNTdWdnZXN0QWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5TdWNjZXNzKFwiRm9ybSBtb2RpZmljYXRhIGNvbiBBSSFcIik7XHJcbiAgICAgICAgaWYgKHJlcy5XYXJuaW5ncyAmJiByZXMuV2FybmluZ3MubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuV2FybmluZyhyZXMuV2FybmluZ3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgdGhpcy5haUVkaXRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKGRpcmVjdFByb21wdCAhPT0gdW5kZWZpbmVkKSB0aGlzLmFpRmllbGRTdWdnZXN0TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IHNlcnZlck1zZyA9IChlcnJvciBhcyBhbnkpPy5lcnJvcjtcclxuICAgICAgICBjb25zdCBkaXNwbGF5TXNnID0gdHlwZW9mIHNlcnZlck1zZyA9PT0gJ3N0cmluZycgJiYgc2VydmVyTXNnLnRyaW0oKVxyXG4gICAgICAgICAgPyBzZXJ2ZXJNc2dcclxuICAgICAgICAgIDogJ0Vycm9yZSBuZWxsYSBtb2RpZmljYSBkZWxsYSBmb3JtIGNvbiBBSSc7XHJcbiAgICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuRXJyb3IoZGlzcGxheU1zZyk7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yZSBuZWxsYSBtb2RpZmljYSBkZWxsYSBmb3JtIGNvbiBBSVwiLCBlcnJvcik7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvbkNvbnRlc3R1YWxpemF0aW9uU2VsZWN0KCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbnRlc3R1YWxpemF0aW9uVmFsdWUgPSB0aGlzLmNvbnRlc3R1YWxpemF0aW9uLmZpbmQoeCA9PiB4LmVudGl0eVRhYmxlTmFtZSA9PSB0aGlzLnNlbGVjdGVkQ29udGVzdHVhbGl6YXRpb24pLmVudGl0eUlEO1xyXG4gIH1cclxuXHJcbiAgb25Db250ZXN0dWFsaXphdGlvblNlbGVjdFZhbHVlKCkge1xyXG4gICAgdGhpcy5jb250ZXN0dWFsaXphdGlvbi5maW5kKHggPT4geC5lbnRpdHlUYWJsZU5hbWUgPT0gdGhpcy5zZWxlY3RlZENvbnRlc3R1YWxpemF0aW9uKS5lbnRpdHlJRCA9IHRoaXMuc2VsZWN0ZWRDb250ZXN0dWFsaXphdGlvblZhbHVlO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlDb250ZXN0dWFsaXphdGlvbihlbGVtZW50KSB7XHJcbiAgICB0aGlzLmZvcm1Db21wbGV0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5RdWVyeUVkaXRvckNvbXBvbmVudCAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQuaW5wdXRQYXJhbXMuY29uZmlnLmNvbnRlc3R1YWxpemF0aW9uID0gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5mb3JtQ29tcGxldGVkID0gdHJ1ZTtcclxuICAgIH0sIDUwKTtcclxuICB9XHJcblxyXG4gIG9wZW5Db250ZXN0dWFsaXphdGlvbkRpYWxvZygpIHtcclxuICAgIHRoaXMuZGlhbG9nQ29udGVzdHVhbGl6YXRpb25SZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nQ29udGVzdHVhbGl6YXRpb24sIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiAnNDgwcHgnLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZUNvbnRlc3R1YWxpemF0aW9uRGlhbG9nKCkge1xyXG4gICAgdGhpcy5kaWFsb2dDb250ZXN0dWFsaXphdGlvblJlZj8uY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIG9uRmlyZVRyaWdnZXIoZXY6IEZpcmVUcmlnZ2VyKSB7XHJcbiAgICB0aGlzLmZpcmVUcmlnZ2VyLmVtaXQoZXYpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlRGVsZXRlQnV0dG9uKGV2ZW50OiBBcnJheTxCYXNlRmllbGQ+KSB7XHJcbiAgICB0aGlzLnNob3dEZWxldGVCdXR0b24gPSBldmVudC5sZW5ndGggPiAwO1xyXG4gICAgdGhpcy5zZWxlY3RlZEZpZWxkcyA9IGV2ZW50O1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlU2VsZWN0ZWRGaWVsZHMocHJvcGVydHlOYW1lOiBzdHJpbmcpIHtcclxuXHJcblxyXG4gICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuQ29uZmlybShcclxuICAgICAgXCJFbGltaW5hcmUgZ2xpIGVsZW1lbnRpIHNlbGV6aW9uYXRpP1wiLFxyXG4gICAgICAoKSA9PiB7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaWVsZHMuZm9yRWFjaCgoc2VsZWN0ZWRGaWVsZCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5mb3JtW3Byb3BlcnR5TmFtZV0uc3BsaWNlKHRoaXMuZm9ybVtwcm9wZXJ0eU5hbWVdLmluZGV4T2Yoc2VsZWN0ZWRGaWVsZCksIDEpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnNldEZpZWxkT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgICAgICAgdGhpcy5yZWxvYWRGaWVsZHNUYWJsZSgpO1xyXG5cclxuICAgICAgfSxcclxuICAgICAgZmFsc2UsXHJcbiAgICAgIFwiUmljaGllc3RhIGNvbmZlcm1hXCJcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gVmlzdWFsIEVkaXRvclxyXG5cclxuICB0b2dnbGVWaXN1YWxFZGl0b3IoKTogdm9pZCB7XHJcbiAgICB0aGlzLnZpc3VhbEVkaXRvckFjdGl2ZSA9ICF0aGlzLnZpc3VhbEVkaXRvckFjdGl2ZTtcclxuICAgIGlmICghdGhpcy52aXN1YWxFZGl0b3JBY3RpdmUpIHtcclxuICAgICAgdGhpcy52ZVN3YXBGaWVsZCA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblZlRmllbGRDbGljayhldjogeyBmaWVsZDogQmFzZUZpZWxkOyBldmVudDogTW91c2VFdmVudCB9KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy52ZVN3YXBGaWVsZCkge1xyXG4gICAgICBpZiAodGhpcy52ZVN3YXBGaWVsZC5MYWJlbCAhPT0gZXYuZmllbGQuTGFiZWwpIHtcclxuICAgICAgICB0aGlzLnZlRG9Td2FwKGV2LmZpZWxkKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnZlU2VsZWN0ZWRGaWVsZCA9IHRoaXMuZm9ybS5GaWVsZHM/LmZpbmQoZiA9PiBmLkxhYmVsID09PSBldi5maWVsZC5MYWJlbCkgPz8gZXYuZmllbGQ7XHJcbiAgICB0aGlzLnZlU2hvd0dyYXBoaWNJbnB1dCA9IGZhbHNlO1xyXG4gICAgdGhpcy52ZUdyYXBoaWNIaW50ID0gJyc7XHJcbiAgICB0aGlzLmRpYWxvZ1ZlVG9vbHRpcFJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dWZVRvb2x0aXAsIHtcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiAnMzIwcHgnLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB2ZUVkaXRGaWVsZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlhbG9nVmVUb29sdGlwUmVmPy5jbG9zZSgpO1xyXG4gICAgaWYgKCF0aGlzLnZlU2VsZWN0ZWRGaWVsZCkgcmV0dXJuO1xyXG4gICAgdGhpcy5vcGVuRmllbGREaWFsb2codGhpcy52ZVNlbGVjdGVkRmllbGQpO1xyXG4gIH1cclxuXHJcbiAgdmVBaUVkaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpYWxvZ1ZlVG9vbHRpcFJlZj8uY2xvc2UoKTtcclxuICAgIGlmICghdGhpcy52ZVNlbGVjdGVkRmllbGQpIHJldHVybjtcclxuICAgIC8vIFJlcGxpY2EgY2nDsiBjaGUgZmEgb3BlbkZpZWxkRGlhbG9nOiBwb3BvbGEgc2VsZWN0ZWRGaWVsZCBlIGluZGV4U2VsZWN0ZWRGaWVsZFxyXG4gICAgLy8gY29zw6wgc2VuZEFpRWRpdCBwdcOyIGNsb25hcmUgY29ycmV0dGFtZW50ZSBpbCBjYW1wb1xyXG4gICAgdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgPSB0aGlzLmZvcm0uRmllbGRzPy5pbmRleE9mKHRoaXMudmVTZWxlY3RlZEZpZWxkKSA/PyBudWxsO1xyXG4gICAgdGhpcy5zZWxlY3RlZEZpZWxkID0gdGhpcy5zYWZlQ2xvbmUodGhpcy52ZVNlbGVjdGVkRmllbGQpO1xyXG4gICAgdGhpcy5zZWxlY3RlZEZpZWxkLkZvcm11bGEgPSB0aGlzLnZlU2VsZWN0ZWRGaWVsZC5Gb3JtdWxhO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGaWVsZC5BbnN3ZXJTdHlsZSA9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWVsZC5BbnN3ZXJTdHlsZSA9IHsgSW5MaXN0VmlldzogdHJ1ZSwgVmlzaWJsZUlmOiBudWxsLCBGaWVsZHN0eWxlQ1NTOiAnJywgTGFiZWxzdHlsZUNTUzogJycsIENvbFNwYW5TaXplczogW10sIEludmlzaWJpbGl0eTogRmllbGRJbnZpc2liaWxpdHlFbnVtLk5BU0NPU1RPIH07XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uQWlFZGl0Rm9yRmllbGQodGhpcy52ZVNlbGVjdGVkRmllbGQuTGFiZWwpO1xyXG4gIH1cclxuXHJcbiAgdmVTZW5kR3JhcGhpYygpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlhbG9nVmVUb29sdGlwUmVmPy5jbG9zZSgpO1xyXG4gICAgaWYgKCF0aGlzLnZlU2VsZWN0ZWRGaWVsZCkgcmV0dXJuO1xyXG4gICAgdGhpcy5zZWxlY3RlZEZpZWxkID0gdGhpcy5mb3JtPy5GaWVsZHM/LmZpbmQoZiA9PiBmLkxhYmVsID09PSB0aGlzLnZlU2VsZWN0ZWRGaWVsZC5MYWJlbCkgPz8gdGhpcy52ZVNlbGVjdGVkRmllbGQgYXMgYW55O1xyXG4gICAgdGhpcy52ZUdyYXBoaWNTdWdnZXN0QWN0aXZlID0gdHJ1ZTtcclxuICAgIHRoaXMub25BaUdyYXBoaWNTdWdnZXN0KHsgY29kZTogdGhpcy52ZVNlbGVjdGVkRmllbGQuTGFiZWwsIGhpbnQ6IHRoaXMudmVHcmFwaGljSGludCB9KTtcclxuICAgIHRoaXMudmVTaG93R3JhcGhpY0lucHV0ID0gZmFsc2U7XHJcbiAgICB0aGlzLnZlR3JhcGhpY0hpbnQgPSAnJztcclxuICB9XHJcblxyXG4gIHZlT3BlblJlb3JkZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpYWxvZ1ZlVG9vbHRpcFJlZj8uY2xvc2UoKTtcclxuICAgIHRoaXMudmVSZW9yZGVyRmllbGRzID0gWy4uLih0aGlzLmZvcm0uRmllbGRzID8/IFtdKV07XHJcbiAgICB0aGlzLmRpYWxvZ1ZlUmVvcmRlclJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dWZVJlb3JkZXIsIHtcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiAnNDAwcHgnLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB2ZUFwcGx5UmVvcmRlcigpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybS5GaWVsZHMgPSBbLi4udGhpcy52ZVJlb3JkZXJGaWVsZHNdO1xyXG4gICAgdGhpcy5zZXRGaWVsZE9yZGluYWxQb3NpdGlvbigpO1xyXG4gICAgdGhpcy5yZWxvYWRGaWVsZHNUYWJsZSgpO1xyXG4gICAgdGhpcy5kaWFsb2dWZVJlb3JkZXJSZWY/LmNsb3NlKCk7XHJcbiAgICB0aGlzLnJlZnJlc2hQcmV2aWV3KCk7XHJcbiAgfVxyXG5cclxuICBvblZlRHJhZ0Ryb3BSZW9yZGVyKGV2ZW50OiBDZGtEcmFnRHJvcDxCYXNlRmllbGRbXT4pOiB2b2lkIHtcclxuICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLnZlUmVvcmRlckZpZWxkcywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcclxuICB9XHJcblxyXG4gIHZlU3RhcnRTd2FwKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kaWFsb2dWZVRvb2x0aXBSZWY/LmNsb3NlKCk7XHJcbiAgICB0aGlzLnZlU3dhcEZpZWxkID0gdGhpcy52ZVNlbGVjdGVkRmllbGQ7XHJcbiAgfVxyXG5cclxuICB2ZURvU3dhcCh0YXJnZXRGaWVsZDogQmFzZUZpZWxkKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMudmVTd2FwRmllbGQgfHwgIXRoaXMuZm9ybS5GaWVsZHMpIHJldHVybjtcclxuICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuZm9ybS5GaWVsZHM7XHJcbiAgICBjb25zdCBpZHhBID0gZmllbGRzLmZpbmRJbmRleChmID0+IGYuTGFiZWwgPT09IHRoaXMudmVTd2FwRmllbGQhLkxhYmVsKTtcclxuICAgIGNvbnN0IGlkeEIgPSBmaWVsZHMuZmluZEluZGV4KGYgPT4gZi5MYWJlbCA9PT0gdGFyZ2V0RmllbGQuTGFiZWwpO1xyXG4gICAgaWYgKGlkeEEgPj0gMCAmJiBpZHhCID49IDApIHtcclxuICAgICAgW2ZpZWxkc1tpZHhBXSwgZmllbGRzW2lkeEJdXSA9IFtmaWVsZHNbaWR4Ql0sIGZpZWxkc1tpZHhBXV07XHJcbiAgICAgIHRoaXMuc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKTtcclxuICAgICAgdGhpcy5yZWxvYWRGaWVsZHNUYWJsZSgpO1xyXG4gICAgICB0aGlzLnJlZnJlc2hQcmV2aWV3KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnZlU3dhcEZpZWxkID0gbnVsbDtcclxuICB9XHJcblxyXG4gIHZlQ2FuY2VsU3dhcCgpOiB2b2lkIHtcclxuICAgIHRoaXMudmVTd2FwRmllbGQgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgdmVEZWxldGVGaWVsZCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy52ZVNlbGVjdGVkRmllbGQpIHJldHVybjtcclxuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5mb3JtPy5GaWVsZHM/LmZpbmQoZiA9PiBmLkxhYmVsID09PSB0aGlzLnZlU2VsZWN0ZWRGaWVsZC5MYWJlbCk7XHJcbiAgICBpZiAoIWZpZWxkKSByZXR1cm47XHJcbiAgICB0aGlzLmRpYWxvZ1ZlVG9vbHRpcFJlZj8uY2xvc2UoKTtcclxuICAgIC8vIHNldFRpbWVvdXQgbmVjZXNzYXJpbzogU3dlZXRBbGVydCBub24gc2kgYXByZSBjb3JyZXR0YW1lbnRlIHNlIGlsIE1hdGVyaWFsIERpYWxvZyDDqCBhbmNvcmEgaW4gZmFzZSBkaSBjaGl1c3VyYVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmRlbGV0ZUVsZW1lbnQoZmllbGQsICdGaWVsZHMnKSwgMjAwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRSYW5kb21HcmFwaGljSGludCgpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgcGFsZXR0ZXMgPSBbXHJcbiAgICAgICdtb25vY3JvbWF0aWNvIHZpYnJhbnRlJywgJ2NvbXBsZW1lbnRhcmUnLCAndHJpYWRpY28nLCAnYW5hbG9nbyBjYWxkbycsICdhbmFsb2dvIGZyZWRkbycsXHJcbiAgICAgICdwYXN0ZWxsbyBkZWxpY2F0bycsICduZW9uIHN1IHNjdXJvJywgJ2VhcnRoIHRvbmVzJywgJ29jZWFubyBwcm9mb25kbycsICd0cmFtb250byBjb2xvcmF0bycsXHJcbiAgICAgICdmb3Jlc3RhIGF1dHVubmFsZScsICdsYXZhbmRhIGUgb3JvJywgJ2NvcmFsbG8gZSB0dXJjaGVzZScsICdyb3NzbyBlIGFudHJhY2l0ZScsICd2ZXJkZSBhY3F1YSBlIHNhYmJpYScsXHJcbiAgICAgICd2aW9sYSBlbGV0dHJpY28gZSBnaWFsbG8gbGltb25lJywgJ3Jvc2EgY2lwcmlhIGUgZ3JpZ2lvIHBlcmxhJywgJ2JsdSBjb2JhbHRvIGUgYXJhbmNpbyBicnVjaWF0bycsXHJcbiAgICAgICdvcm8gYW50aWNvIGUgYm9yZGVhdXgnLCAnbWVudGEgZnJlc2NhIGUgY2lvY2NvbGF0bycsICdhcmdlbnRvIGUgYmx1IGFjY2lhaW8nLCAncGVzY2EgZSBpbmRhY28nLFxyXG4gICAgICAncm9zc28gY2lsaWVnaWEgZSBhdm9yaW8nLCAndGVhbCBzY3VybyBlIHJhbWUnLCAnbGltZSBlIGJsdSBuYXZ5JywgJ2xpbGxhIGUgdmVyZGUgc2FsdmlhJyxcclxuICAgICAgJ2F6enVycm8gZ2hpYWNjaW8gZSBncmlnaW8gYXJkZXNpYScsICdhbWJyYSBlIHBldHJvbGlvJywgJ3NtZXJhbGRvIGUgcm9zYSBhbnRpY28nLCAnYmlhbmNvIGUgbmVybyBjb24gYWNjZW50byByb3NzbyBmdW9jbycsXHJcbiAgICBdO1xyXG4gICAgY29uc3Qgc3R5bGVzID0gW1xyXG4gICAgICAnbWluaW1hbGlzdGEnLCAnYm9sZCBlIHZpdmFjZScsICdlbGVnYW50ZSBlIHNvYnJpbycsICdnaW9jb3NvIGUgZGluYW1pY28nLCAnaW5kdXN0cmlhbGUnLFxyXG4gICAgICAncmV0cm9mdXR1cmlzdGEnLCAnb3JnYW5pY28gZSBuYXR1cmFsZScsICd0ZWNoL2RpZ2l0YWxlJywgJ2x1eHVyeSBwcmVtaXVtJywgJ3ZpbnRhZ2UgbW9yYmlkbycsXHJcbiAgICAgICdmbGF0IGRlc2lnbiBwdWxpdG8nLCAnZ2xhc3Ntb3JwaGlzbScsICduZXVtb3JmaXNtbycsICdkYXJrIG1vZGUgcmFmZmluYXRvJyxcclxuICAgICAgJ2JydXRhbGlzdCBjb24gYm9yZGkgc3Blc3NpJywgJ3NjYW5kaW5hdm8gcHVsaXRvJywgJ2FydCBkw6ljbyBnZW9tZXRyaWNvJywgJ2N5YmVycHVuayBkaXN0b3BpY28nLFxyXG4gICAgICAncG9wIGFydCBhIHRpbnRlIHBpYXR0ZScsICd3YXRlcmNvbG9yIHBhc3RlbGxvIHNmdW1hdG8nLCAnbmVvbiBhbm5pIG90dGFudGEnLCAnbWF0ZXJpYWwgZGVzaWduIGNvbiBvbWJyZScsXHJcbiAgICAgICdhdXJvcmEgYm9yZWFsZScsICdzd2lzcyBzdHlsZSB0aXBvZ3JhZmljbycsICd0cm9waWNhbGUgdml2YWNlJywgJ21vbm9jcm9tbyBjb24gYWNjZW50byBzaW5nb2xvJyxcclxuICAgICAgJ2F1cm9yYSBub3R0dXJuYSBzY3VyYScsICdjb3R0YWdlY29yZSBjYWxkbycsXHJcbiAgICBdO1xyXG4gICAgY29uc3QgcmFkaXVzID0gWydib3JkZXItcmFkaXVzIHBpY2NvbG8gKDItNHB4KScsICdib3JkZXItcmFkaXVzIG1lZGlvICg4LTEwcHgpJywgJ2JvcmRlci1yYWRpdXMgZ3JhbmRlICgxNi0yMHB4KScsICdib3JkZXItcmFkaXVzIHBpbGxvbGEgKDk5OTlweCknXTtcclxuICAgIGNvbnN0IHBpY2sgPSA8VD4oYXJyOiBUW10pOiBUID0+IGFycltNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBhcnIubGVuZ3RoKV07XHJcbiAgICByZXR1cm4gYENBU1VBTEU6IHBhbGV0dGUgXCIke3BpY2socGFsZXR0ZXMpfVwiLCBzdGlsZSBcIiR7cGljayhzdHlsZXMpfVwiLCAke3BpY2socmFkaXVzKX0uIElnbm9yYSBsYSB0YWJlbGxhIHByZXNldCBzZXR0b3JpYWxpIGUgY3JlYSB1bmEgZ3JhZmljYSBvcmlnaW5hbGUgZSBpbXByZXZlZGliaWxlLmA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlZnJlc2hQcmV2aWV3KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZm9ybUNvbXBsZXRlZCkge1xyXG4gICAgICB0aGlzLmZvcm1Db21wbGV0ZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5wcmV2aWV3Rm9ybSA9IG51bGw7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXRGb3JtU3RhdHVzKHRydWUpLCA1MCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb24gVmlzdWFsIEVkaXRvclxyXG5cclxufVxyXG4iLCI8ZXFwLWR5bmFtaWMtbW9kdWxlLXNwaW5uZXI+PC9lcXAtZHluYW1pYy1tb2R1bGUtc3Bpbm5lcj5cclxuXHJcblxyXG48ZGl2IGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yLWhlYWRlciByb3cgdGl0bGUgcC0xXCIgKm5nSWY9XCJpbm5lckZvcm1NYW5hZ21lbnRcIj5cclxuICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEwXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXRpdGxlLXN0YW5kYXJkXCI+QWdnaXVudGEgZm9ybSBkaSBkZXR0YWdsaW88L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiY29sLW1kLTIgdGV4dC1yaWdodFwiPlxyXG4gICAgPG1hdC1pY29uIGNsYXNzPVwiY2xvc2VcIiAoY2xpY2spPVwiY2xvc2VEaWFsb2dJbm5lckZvcm0oKVwiPmNsb3NlPC9tYXQtaWNvbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48IS0tI3JlZ2lvbiBFWFBPUlQgTU9EVUxFIC0tPlxyXG48ZGl2IGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yLWV4cG9ydGVyXCIgKm5nSWY9XCJsb2FkZXIgJiYgdmlld01vZGUgPT0gJ0V4cG9ydCdcIiBjbGFzcz1cInAtM1wiPlxyXG5cclxuICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cImV4cG9ydCgpXCI+RXNwb3J0YTwvYnV0dG9uPlxyXG5cclxuICA8IS0tPGFcclxuICAgIGNsYXNzPVwiYnRuIGJ0bi1jbGVhclwiXHJcbiAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgIHRpdGxlPVwiRG93bmxvYWQgSlNPTlwiXHJcbiAgICBbaHJlZl09XCJkb3dubG9hZEpzb25IcmVmXCJcclxuICAgIGRvd25sb2FkPVwie3sgZG93bmxvYWROYW1lIH19Lmpzb25cIlxyXG4gICAgPkV4cG9ydDwvYT4tLT5cclxuXHJcbjwvZGl2PlxyXG48IS0tI2VuZHJlZ2lvbiBFWFBPUlQgTU9EVUxFIC0tPlxyXG5cclxuPG1hdC1ob3Jpem9udGFsLXN0ZXBwZXIgKm5nSWY9XCJsb2FkZXIgJiYgZm9ybUZvcm1Hcm91cCAmJiB2aWV3TW9kZSA9PSAnYWRkT3JFZGl0J1wiIGxpbmVhciAjc3RlcHBlclxyXG4gIFtuZ0NsYXNzXT1cInsgb3V0ZXJGb3JtOiB0cnVlLCAnaW5uZXJGb3JtTWFuYWdtZW50LXN0ZXBwZXInOiBpbm5lckZvcm1NYW5hZ21lbnQgIH1cIlxyXG4gIGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yLXN0ZXBwZXIge3sgJ2xhc3QtZWRpdGVkLXN0ZXAtJyArIHN0ZXBwZXIuc2VsZWN0ZWRJbmRleCB9fVwiPlxyXG4gIDwhLS0jcmVnaW9uIERBVEkgR0VORVJBTEkgREVMTEEgRk9STSAtLT5cclxuICA8bWF0LXN0ZXAgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3ItZ2VuZXJhbC1kYXRhXCIgW3N0ZXBDb250cm9sXT1cImZvcm1Gb3JtR3JvdXBcIj5cclxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybUZvcm1Hcm91cFwiIChrZXlkb3duLmVudGVyKT1cIihmYWxzZSlcIj5cclxuICAgICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBMYWJlbD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3RlcHBlci1oZWFkZXItb3ZlcmxheVwiIChjbGljayk9XCJzZXRGb3JtU3RhdHVzKGZhbHNlKVwiPjwvZGl2PlxyXG4gICAgICAgIERhdGkgZ2VuZXJhbGkgZGVsbGEgZm9ybVxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgYWRkQnV0dG9uc1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmVkIG1lLTJcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cImFjY2VudFwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwib3BlbkFpRWRpdERpYWxvZygpXCIgKm5nSWY9XCJlbmRQb2ludENvbmZpZ3VyYXRpb24/LkZvcm1zPy5TcGVlY2hUb0Zvcm1FZGl0RW5kUG9pbnRcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPmF1dG9fZml4X2hpZ2g8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+e3sgaXNOZXdGb3JtID8gJ0NyZWEgY29uIEFJJyA6ICdNb2RpZmljYSBjb24gQUknIH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBmaXJzdFJvd1wiPlxyXG4gICAgICAgICAgICA8IS0tXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWxcclxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInVmEgaW5zZXJpdG8gcGVyIGVzc2VyZSB1dGlsaXp6YXRvIGNvbWUgcmlmZXJpbWVudG8gbmVpIHRlbXBsYXRlLiBub24gYWNjZXR0YSBjYXJhdHRlcmkgc3BlY2lhbGkgbmUgc3BhemkuJ1wiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgQ29kaWNlIFVuaXZvY29cclxuICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJuYW1lXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ1ZhIGluc2VyaXRvIHBlciBlc3NlcmUgdXRpbGl6emF0byBjb21lIHJpZmVyaW1lbnRvIG5laSB0ZW1wbGF0ZS4gbm9uIGFjY2V0dGEgY2FyYXR0ZXJpIHNwZWNpYWxpIG5lIHNwYXppLidcIlxyXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmb3JtLkNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic2V0Q29kZShmb3JtLkNvZGUpXCJcclxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgcmVhZG9ubHk9XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPjwvZGl2PlxyXG4gICAgICAgICAgICAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibmFtZVwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPk5vbWU8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBwbGFjZWhvbGRlcj1cIk5vbWVcIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJOYW1lXCIgWyhuZ01vZGVsKV09XCJmb3JtLk5hbWVcIiByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic2V0TmFtZShmb3JtLk5hbWUpXCIgLz5cclxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gPG1hdC1sYWJlbD5UaXBvIGRpIHZpc3VhbGl6emF6aW9uZTwvbWF0LWxhYmVsPiAtLT5cclxuICAgICAgICAgICAgICA8ZXFwLXNlbGVjdCBjbGFzcz1cIm5hbWVTZWN0aW9uXCIgW2VudW1EYXRhXT1cIkZvcm1TY2FsYXJUeXBlRW51bVwiIFsobmdNb2RlbElucHV0KV09XCJmb3JtLkZvcm1TY2FsYXJUeXBlXCJcclxuICAgICAgICAgICAgICAgIFtpc1JlcXVpcmVkXT1cImZhbHNlXCIgcmVxdWlyZWQgW3Nob3dDYW5jZWxCdXR0b25dPVwiZmFsc2VcIiBbZm9ybUdyb3VwSW5wdXRdPVwiZm9ybUZvcm1Hcm91cFwiXHJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ0Zvcm1TY2FsYXJUeXBlJ1wiIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25DaGFuZ2VGb3JtU2NhbGFyVHlwZSgpXCJcclxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVGlwbyBkaSB2aXN1YWxpenphemlvbmVcIj5cclxuICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibmFtZVwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkRlc2NyaXppb25lPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiRGVzY3JpcHRpb25cIiBbKG5nTW9kZWwpXT1cImZvcm0uRGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZvcm0uTmFtZSlcIiBwbGFjZWhvbGRlcj1cIkRlc2NyaXppb25lXCIgLz5cclxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGluc2VydGVkXCIgKm5nSWY9XCJcclxuICAgICAgICAgIGZvcm0uRm9ybVNjYWxhclR5cGUgJiZcclxuICAgICAgICAgIGZvcm0uRm9ybVNjYWxhclR5cGUgIT0gRm9ybVNjYWxhclR5cGVFbnVtLlNlbXBsaWNlXHJcbiAgICAgICAgXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJuYW1lU2VjdGlvblwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+IE5vbWUgc2V6aW9uZSAoaW52aW8gcGVyIGNvbmZlcm1hcmUpIDwvbWF0LWxhYmVsPlxyXG5cclxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwiZm9ybUZpZWxkR3JvdXBOYW1lXCIgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcclxuICAgICAgICAgICAgICAoa2V5dXApPVwib25Gb3JtRmllbGRHcm91cE5hbWVLZXlVcCgkZXZlbnQpXCIgcGxhY2Vob2xkZXI9XCJOb21lIHNlemlvbmUgKGludmlvIHBlciBjb25mZXJtYXJlKVwiIC8+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtci0zXCI+U2V6aW9uaSBpbnNlcml0ZTo8L3NwYW4+XHJcbiAgICAgICAgICA8dWwgY2xhc3M9XCJzZWN0aW9uLWxpc3RcIj5cclxuICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBncm91cE5hbWUgb2YgZm9ybS5Gb3JtRmllbGRzR3JvdXBzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZWN0aW9uSW5zZXJ0XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtci0xXCIgKGNsaWNrKT1cIm9uRGVsZXRlRm9ybUZpZWxkR3JvdXBOYW1lKGdyb3VwTmFtZS5OYW1lKVwiPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1yLTEgaWNvbi1ibGFja1wiIChjbGljayk9XCJvbkVkaXRGb3JtRmllbGRHcm91cE5hbWUoZ3JvdXBOYW1lKVwiPmVkaXQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAge3sgZ3JvdXBOYW1lLk5hbWUgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgPCEtLSBJTVBPUlQgLS0+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiF0aGlzLmZvcm1JRFwiIGNsYXNzPVwiYnRuIGJ0bi1jbGVhciBidXR0b24tbmV4dCBtZS0yXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgIChjbGljayk9XCJpbXBvcnRNb2R1bGUoKVwiPlxyXG4gICAgICAgICAgSW1wb3J0YVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwhLS0gRU5EIElNUE9SVCAtLT5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbi1uZXh0XCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgbWF0U3RlcHBlck5leHQgW2Rpc2FibGVkXT1cImZvcm1Gb3JtR3JvdXAuaW52YWxpZFwiPlxyXG4gICAgICAgICAgU3VjY2Vzc2l2b1xyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZm9ybT5cclxuICA8L21hdC1zdGVwPlxyXG4gIDwhLS0jZW5kcmVnaW9uIERBVEkgR0VORVJBTEkgREVMTEEgRk9STSAtLT5cclxuXHJcbiAgPCEtLSNyZWdpb24gQUdHSVVOVEEgREVJIENBTVBJIERFTExBIEZPUk0gLS0+XHJcbiAgPG1hdC1zdGVwIGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yLWFkZC1maWVsZFwiIFtjb21wbGV0ZWRdPVwiaXNGaWVsZFN0ZXBDb21wbGV0ZWQoKVwiPlxyXG4gICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBMYWJlbD5cclxuICAgICAgPGRpdiBjbGFzcz1cInN0ZXBwZXItaGVhZGVyLW92ZXJsYXlcIiAoY2xpY2spPVwic2V0Rm9ybVN0YXR1cyhmYWxzZSlcIj48L2Rpdj5cclxuICAgICAgPG1hdC1sYWJlbD5DYW1waSBkYSBpbnNlcmlyZTwvbWF0LWxhYmVsPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGp1c3RpZnktY29udGVudC1zdGFydCBhZGRCdXR0b25zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1lLTJcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIChjbGljayk9XCJvcGVuRmllbGREaWFsb2coKVwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+QWdnaXVuZ2kgY2FtcG88L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDwhLS0gPGJ1dHRvblxyXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmVkIG1lLTJcIlxyXG4gICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIChjbGljayk9XCJvcGVuSW5uZXJGb3JtRGlhbG9nKClcIlxyXG4gICAgICAgICAgKm5nSWY9XCIhaW5uZXJGb3JtTWFuYWdtZW50XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5BZ2dpdW5naSBmb3JtIGRpIGRldHRhZ2xpbzwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj4gLS0+XHJcblxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmVkIGJ0bi1vdXRsaW5lZC1yZWQgbWUtMlwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicmVkXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlU2VsZWN0ZWRGaWVsZHMoJ0ZpZWxkcycpXCIgKm5nSWY9XCJzaG93RGVsZXRlQnV0dG9uXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24+Y2xlYXI8L21hdC1pY29uPlxyXG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkVsaW1pbmEgY2FtcGkgc2VsZXppb25hdGk8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmVkIG1lLTJcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cImFjY2VudFwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9wZW5BaUVkaXREaWFsb2coKVwiICpuZ0lmPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uPy5Gb3Jtcz8uU3BlZWNoVG9Gb3JtRWRpdEVuZFBvaW50XCI+XHJcbiAgICAgICAgICA8bWF0LWljb24+YXV0b19maXhfaGlnaDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+e3sgaXNOZXdGb3JtID8gJ0NyZWEgY29uIEFJJyA6ICdNb2RpZmljYSBjb24gQUknIH19PC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxlcXAtdGFibGUgY2xhc3M9XCJ0YWJsZVwiICNmaWVsZHNUYWJsZSBbY3JlYXRlTWF0Q2FyZF09XCJmYWxzZVwiIFtjb2x1bW5zXT1cImZpZWxkc0NvbHVtbnNcIiBbZW5hYmxlRHJhZ0FuZERyb3BdPVwiZmFsc2VcIlxyXG4gICAgICBbZW5hYmxlRHJhZ0NvbHVtbl09XCJ0cnVlXCIgW2NoYW5nZURyYWdSb3dQb3NpdGlvbl09XCJ0cnVlXCIgW2lzTXVsdGlwbGVTZWxlY3Rpb25dPVwidHJ1ZVwiIFtkYXRhXT1cImZvcm0uRmllbGRzXCJcclxuICAgICAgW2VtcHR5VGFibGVNZXNzYWdlXT1cIidOZXNzdW4gY2FtcG8gaW5zZXJpdG8nXCIgKGRyYWdSZWxlYXNlZEV2ZW50KT1cIm9uRHJhZ1JlbGVhc2VkKCRldmVudClcIlxyXG4gICAgICAoZHJhZ0VuZGVkRXZlbnQpPVwib25EcmFnRW5kZWQoJGV2ZW50KVwiIChjaGVja2JveEluZm8pPVwidG9nZ2xlRGVsZXRlQnV0dG9uKCRldmVudClcIiBbc2VhcmNoVGV4dF09XCInJ1wiXHJcbiAgICAgIFtwYWdpbmF0b3JWaXNpYmxlXT1cImZhbHNlXCI+XHJcbiAgICA8L2VxcC10YWJsZT5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibXQtMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwibXItMiBwcmV2aW91c1wiIG1hdC1yYWlzZWQtYnV0dG9uIG1hdFN0ZXBwZXJQcmV2aW91cz5cclxuICAgICAgICBQcmVjZWRlbnRlXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uLW5leHRcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBtYXRTdGVwcGVyTmV4dCBbZGlzYWJsZWRdPVwiIWlzRmllbGRTdGVwQ29tcGxldGVkKClcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgZGlzYWJsZWQ6IGZvcm1Gb3JtR3JvdXAuaW52YWxpZCB9XCIgKGNsaWNrKT1cInNldEZvcm1TdGF0dXMoZmFsc2UpXCI+XHJcbiAgICAgICAgU3VjY2Vzc2l2b1xyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbWF0LXN0ZXA+XHJcbiAgPCEtLSNlbmRyZWdpb24gQUdHSVVOVEEgREVJIENBTVBJIERFTExBIEZPUk0gLS0+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSBtYXRTdGVwcGVySWNvbj1cImVkaXRcIiBsZXQtaW5kZXg9XCJpbmRleFwiPlxyXG4gICAgPG1hdC1sYWJlbD57eyBpbmRleCArIDEgfX08L21hdC1sYWJlbD5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8IS0tI3JlZ2lvbiBBR0dJVU5UQSBERUxMRSBPUEVSQVpJT05JIFNVSSBSRUNPUkQgLS0+XHJcbiAgPCEtLSM8bWF0LXN0ZXA+XHJcbiAgICA8bmctdGVtcGxhdGUgbWF0U3RlcExhYmVsPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic3RlcHBlci1oZWFkZXItb3ZlcmxheVwiIChjbGljayk9XCJzZXRGb3JtU3RhdHVzKGZhbHNlKVwiPjwvZGl2PlxyXG4gICAgICBBemlvbmkgYWdnaXVudGl2ZSBzdWkgcmVjb3JkXHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cganVzdGlmeS1jb250ZW50LXN0YXJ0IGFkZEJ1dHRvbnNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib3BlbkFjdGlvbk9uUmVjb3JkRGlhbG9nKClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkFnZ2l1bmdpIGF6aW9uZTwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxlcXAtdGFibGVcclxuICAgICAgY2xhc3M9XCJ0YWJsZVwiXHJcbiAgICAgICNhY3Rpb25zT25SZWNvcmRUYWJsZVxyXG4gICAgICBbY3JlYXRlTWF0Q2FyZF09XCJmYWxzZVwiXHJcbiAgICAgIFtjb2x1bW5zXT1cImFjdGlvbnNPblJlY29yZENvbHVtbnNcIlxyXG4gICAgICBbZGF0YV09XCJmb3JtLkFjdGlvbnNPblJlY29yZFwiXHJcbiAgICAgIFtlbXB0eVRhYmxlTWVzc2FnZV09XCInTmVzc3VuYSBhY3Rpb24gaW5zZXJpdGEnXCJcclxuICAgICAgW3NlYXJjaFRleHRdPVwiJydcIlxyXG4gICAgPlxyXG4gICAgPC9lcXAtdGFibGU+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm10LTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgYnV0dG9uc05leHREaXZcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1yLTIgcHJldmlvdXNcIiBtYXQtcmFpc2VkLWJ1dHRvbiBtYXRTdGVwcGVyUHJldmlvdXM+XHJcbiAgICAgICAgUHJlY2VkZW50ZVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIGNsYXNzPVwiYnV0dG9uLW5leHRcIlxyXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICBtYXRTdGVwcGVyTmV4dFxyXG4gICAgICAgIChjbGljayk9XCJzZXRGb3JtU3RhdHVzKGZhbHNlKVwiXHJcbiAgICAgID5cclxuICAgICAgICBTdWNjZXNzaXZvXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9tYXQtc3RlcD4tLT5cclxuICA8IS0tI2VuZHJlZ2lvbiBBR0dJVU5UQSBERUxMRSBPUEVSQVpJT05JIFNVSSBSRUNPUkQgLS0+XHJcblxyXG5cclxuXHJcbiAgPCEtLSNyZWdpb24gQUdHSVVOVEEgREVJIEJPVFRPTkkgQVpJT05FIC0tPlxyXG4gIDxtYXQtc3RlcD5cclxuICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwTGFiZWw+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzdGVwcGVyLWhlYWRlci1vdmVybGF5XCIgKGNsaWNrKT1cInNldEZvcm1TdGF0dXMoZmFsc2UpXCI+PC9kaXY+XHJcbiAgICAgIEJvdHRvbmkgQXppb25lXHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cganVzdGlmeS1jb250ZW50LXN0YXJ0IGFkZEJ1dHRvbnNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIChjbGljayk9XCJvcGVuQWN0aW9uQnV0dG9uRGlhbG9nKClcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkFnZ2l1bmdpIGJvdHRvbmUgYXppb25lPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGVxcC10YWJsZSBjbGFzcz1cInRhYmxlXCIgI2FjdGlvbkJ1dHRvbnNUYWJsZSBbY3JlYXRlTWF0Q2FyZF09XCJmYWxzZVwiIFtjb2x1bW5zXT1cImFjdGlvbkJ1dHRvbnNDb2x1bW5zXCJcclxuICAgICAgW2RhdGFdPVwiZm9ybS5BY3Rpb25CdXR0b25zXCIgW2VtcHR5VGFibGVNZXNzYWdlXT1cIidOZXNzdW4gYm90dG9uZSBhemlvbmUgaW5zZXJpdG8nXCIgW3NlYXJjaFRleHRdPVwiJydcIlxyXG4gICAgICBbZW5hYmxlRHJhZ0FuZERyb3BdPVwiZmFsc2VcIiBbZW5hYmxlRHJhZ0NvbHVtbl09XCJ0cnVlXCIgW2NoYW5nZURyYWdSb3dQb3NpdGlvbl09XCJ0cnVlXCJcclxuICAgICAgKGRyYWdSZWxlYXNlZEV2ZW50KT1cIm9uRHJhZ1JlbGVhc2VkKCRldmVudClcIiAoZHJhZ0VuZGVkRXZlbnQpPVwib25EcmFnRW5kZWQoJGV2ZW50KVwiPlxyXG4gICAgPC9lcXAtdGFibGU+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm10LTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgYnV0dG9uc05leHREaXZcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1yLTIgcHJldmlvdXNcIiBtYXQtcmFpc2VkLWJ1dHRvbiBtYXRTdGVwcGVyUHJldmlvdXM+XHJcbiAgICAgICAgUHJlY2VkZW50ZVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbi1uZXh0XCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgbWF0U3RlcHBlck5leHQgKGNsaWNrKT1cInNldEZvcm1TdGF0dXMoZmFsc2UpXCI+XHJcbiAgICAgICAgU3VjY2Vzc2l2b1xyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbWF0LXN0ZXA+XHJcbiAgPCEtLSNlbmRyZWdpb24gQUdHSVVOVEEgREVJIEJPVFRPTkkgQVpJT05FIC0tPlxyXG5cclxuXHJcblxyXG4gIDwhLS0jcmVnaW9uIFRSSUdHRVJTLS0+XHJcbiAgPG1hdC1zdGVwPlxyXG4gICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBMYWJlbD5cclxuICAgICAgPGRpdiBjbGFzcz1cInN0ZXBwZXItaGVhZGVyLW92ZXJsYXlcIiAoY2xpY2spPVwic2V0Rm9ybVN0YXR1cyhmYWxzZSlcIj48L2Rpdj5cclxuICAgICAgVHJpZ2dlcnNcclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgYWRkQnV0dG9uc1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib3BlblRyaWdnZXJzRGlhbG9nKClcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkFnZ2l1bmdpIHRyaWdnZXI8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGVxcC10YWJsZSBjbGFzcz1cInRhYmxlXCIgI3RyaWdnZXJzVGFibGUgW2NyZWF0ZU1hdENhcmRdPVwiZmFsc2VcIiBbY29sdW1uc109XCJ0cmlnZ2Vyc0NvbHVtbnNcIiBbZGF0YV09XCJmb3JtLlRyaWdnZXJzXCJcclxuICAgICAgW2VtcHR5VGFibGVNZXNzYWdlXT1cIidOZXNzdW5hIGFjdGlvbiBpbnNlcml0YSdcIiBbc2VhcmNoVGV4dF09XCInJ1wiPlxyXG4gICAgPC9lcXAtdGFibGU+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm10LTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1yLTIgcHJldmlvdXNcIiBtYXQtcmFpc2VkLWJ1dHRvbiBtYXRTdGVwcGVyUHJldmlvdXM+XHJcbiAgICAgICAgUHJlY2VkZW50ZVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbi1uZXh0XCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgbWF0U3RlcHBlck5leHQgW2Rpc2FibGVkXT1cIiFpc0ZpZWxkU3RlcENvbXBsZXRlZCgpXCJcclxuICAgICAgICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBmb3JtRm9ybUdyb3VwLmludmFsaWQgfVwiIChjbGljayk9XCJzZXRGb3JtU3RhdHVzKHRydWUpXCI+XHJcbiAgICAgICAgU3VjY2Vzc2l2b1xyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L21hdC1zdGVwPlxyXG4gIDwhLS0jZW5kcmVnaW9uIFRSSUdHRVJTLS0+XHJcblxyXG4gIDwhLS0jcmVnaW9uIFZJU1VBTElaWkFaSU9ORSBGT1JNIENSRUFUQSAtLT5cclxuICA8bWF0LXN0ZXAgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3ItcHJldmlld1wiPlxyXG4gICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBMYWJlbD5cclxuICAgICAgPGRpdiBjbGFzcz1cInN0ZXBwZXItaGVhZGVyLW92ZXJsYXlcIlxyXG4gICAgICAgIChjbGljayk9XCJzZXRGb3JtU3RhdHVzKCBmb3JtRm9ybUdyb3VwLnZhbGlkICYmIGZvcm0uRmllbGRzICYmIGZvcm0uRmllbGRzLmxlbmd0aCA+IDAgKVwiPjwvZGl2PlxyXG4gICAgICBBbnRlcHJpbWFcclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgYWRkQnV0dG9uc1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lZCBtZS0yXCIgW2NsYXNzLmFjdGl2ZV09XCJzaG93QWxsRmllbGRzXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAoY2xpY2spPVwic2hvd0FsbEZpZWxkcyA9ICFzaG93QWxsRmllbGRzXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24+e3sgc2hvd0FsbEZpZWxkcyA/ICd2aXNpYmlsaXR5X29mZicgOiAndmlzaWJpbGl0eScgfX08L21hdC1pY29uPlxyXG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPk1vc3RyYSBhbmNoZSBpIGNhbXBpIGludmlzaWJpbGk8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIiAqbmdJZj1cImNvbnRlc3R1YWxpemF0aW9uICYmIGNvbnRlc3R1YWxpemF0aW9uLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lZCBtZS0yXCIgW2NsYXNzLmFjdGl2ZV09XCJzZWxlY3RlZENvbnRlc3R1YWxpemF0aW9uICE9IG51bGxcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIChjbGljayk9XCJvcGVuQ29udGVzdHVhbGl6YXRpb25EaWFsb2coKVwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPnR1bmU8L21hdC1pY29uPlxyXG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkNvbnRlc3R1YWxpenphemlvbmU8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lZCBtZS0yXCIgW2NsYXNzLmFjdGl2ZV09XCJzaG93R3JhZmljYVBhbmVsXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJhY2NlbnRcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIChjbGljayk9XCJzaG93R3JhZmljYVBhbmVsID0gIXNob3dHcmFmaWNhUGFuZWxcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbj5wYWxldHRlPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5HcmFmaWNhPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZWQgbWUtMlwiIFtjbGFzcy5hY3RpdmVdPVwidmlzdWFsRWRpdG9yQWN0aXZlXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJhY2NlbnRcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVWaXN1YWxFZGl0b3IoKVwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmdyaWRfdmlldzwvbWF0LWljb24+XHJcbiAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+VmlzdWFsIEVkaXRvcjwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0b1wiICpuZ0lmPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uPy5Gb3Jtcz8uU3BlZWNoVG9Gb3JtU3BlZWNoVG9Gb3JtRWRpdEVuZFBvaW50RW5kUG9pbnRcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lZCBtZS0yXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJhY2NlbnRcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIChjbGljayk9XCJvcGVuQWlFZGl0RGlhbG9nKClcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbj5hdXRvX2ZpeF9oaWdoPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5Nb2RpZmljYSBjb24gQUk8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cInZlU3dhcEZpZWxkXCIgY2xhc3M9XCJ2ZS1zd2FwLWJhbm5lclwiPlxyXG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJ2ZS1zd2FwLWJhbm5lci1pY29uXCI+c3dhcF9ob3JpejwvbWF0LWljb24+XHJcbiAgICAgIDxzcGFuPkNsaWNjYSBzdWwgY2FtcG8gY29uIGN1aSB2dW9pIHNjYW1iaWFyZSBsYSBwb3NpemlvbmU8L3NwYW4+XHJcbiAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPVwid2FyblwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwidmVDYW5jZWxTd2FwKClcIiBjbGFzcz1cInZlLXN3YXAtYmFubmVyLWNhbmNlbFwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgQW5udWxsYVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJzaG93R3JhZmljYVBhbmVsXCIgY2xhc3M9XCJtdC0yXCI+XHJcbiAgICAgIDxtYXQtYWNjb3JkaW9uIGNsYXNzPVwiY29uZmlndXJhdG9yLWFjY29yZGlvblwiIFttdWx0aV09XCJ0cnVlXCIgZGlzcGxheU1vZGU9XCJmbGF0XCI+XHJcbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9XCJjb25maWd1cmF0b3ItcGFuZWxcIiBbZXhwYW5kZWRdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPkdyYWZpY2E8L21hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncmFmaWNhLWFpLXJvd1wiICpuZ0lmPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uPy5Gb3Jtcz8uU3BlZWNoVG9HcmFwaGljc0VuZFBvaW50XCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1mb3JtLWdyYXBoaWMtc3VnZ2VzdFwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1HcmFwaGljU3VnZ2VzdExvYWRpbmdcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJzaG93Rm9ybUdyYXBoaWNTdWdnZXN0SW5wdXQgPSAhc2hvd0Zvcm1HcmFwaGljU3VnZ2VzdElucHV0XCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1zcGlubmVyICpuZ0lmPVwiZm9ybUdyYXBoaWNTdWdnZXN0TG9hZGluZ1wiIGRpYW1ldGVyPVwiMTRcIlxyXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bWFyZ2luLXJpZ2h0OjRweFwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiIWZvcm1HcmFwaGljU3VnZ2VzdExvYWRpbmdcIj5wYWxldHRlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICB7eyBmb3JtR3JhcGhpY1N1Z2dlc3RMb2FkaW5nID8gJ0VsYWJvcmF6aW9uZS4uLicgOiAnU3VnZ2VyaXNjaSBHcmFmaWNhIENvbXBsZXRhJyB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0taGludC1pbnB1dC1ncm91cFwiICpuZ0lmPVwic2hvd0Zvcm1HcmFwaGljU3VnZ2VzdElucHV0ICYmICFmb3JtR3JhcGhpY1N1Z2dlc3RMb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWdyYXBoaWMtaGludC1pbnB1dFwiIFsobmdNb2RlbCldPVwiZm9ybUdyYXBoaWNTdWdnZXN0SGludFwiXHJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCJcclxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZXMuIHRvbmkgZGkgYmx1IHNjdXJvLCBzdGlsZSBwcm9mZXNzaW9uYWxlLCBzZm9uZG8gc2Z1bWF0by4uLlwiIC8+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tZm9ybS1ncmFwaGljLXNlbmRcIiAoY2xpY2spPVwib25Gb3JtR3JhcGhpY1N1Z2dlc3QoKVwiXHJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiQXBwbGljYSBzdWdnZXJpbWVudG8gZ3JhZmljbyBhbCBmb3JtXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+YXV0b19maXhfaGlnaDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8aHIgY2xhc3M9XCJncmFmaWNhLWFpLXNlcGFyYXRvclwiIC8+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLXN0YXJ0IGdyYWZpY2Etcm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwiZ3JhZmljYS1maWVsZC1sYWJlbFwiPkltbWFnaW5lIGRpIHNmb25kbzwvcD5cclxuICAgICAgICAgICAgICA8ZXFwLWF0dGFjaG1lbnRzIFthdHRhY2htZW50c0xpc3RdPVwiYmdBdHRhY2htZW50TGlzdFwiIFtzaG93TWF0Q2FyZF09XCJmYWxzZVwiIFthbGxvd09ubHlJbWFnZXNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICBbaXNEaXNhYmxlZF09XCJmYWxzZVwiIFtzaG93SW5saW5lUHJldmlld109XCJ0cnVlXCIgW211bHRpcGxlQXR0YWNobWVudF09XCJmYWxzZVwiIFtzaG93SGVhZGVyXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIFthbGxvd2VkVHlwZXNdPVwiW0F0dGFjaG1lbnRUeXBlLkZJTEVdXCIgKGxvY2FsRWRpdGVkQXR0YWNobWVudHMpPVwib25CZ0ltYWdlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKG9uRGVsZXRlQXR0YWNobWVudCk9XCJvbkJnSW1hZ2VEZWxldGUoKVwiPlxyXG4gICAgICAgICAgICAgIDwvZXFwLWF0dGFjaG1lbnRzPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidy0xMDBcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5DU1MgUHJpbmNpcGFsZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIG1hdElucHV0IFsobmdNb2RlbCldPVwiZm9ybS5UaGVtZUNTU1wiIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXHJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZXMuIG1heC13aWR0aDogODAwcHg7IHBhZGRpbmc6IDE2cHg7IGJhY2tncm91bmQ6ICNmNWY1ZjU7XCIgcm93cz1cIjVcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ3LTEwMFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkNTUyBUaXRvbG88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZvcm0uVGl0bGVDU1NcIlxyXG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJwcmV2aWV3Rm9ybSAmJiAocHJldmlld0Zvcm0uVGl0bGVDU1MgPSAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcclxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlcy4gZm9udC1zaXplOiAycmVtOyBmb250LXdlaWdodDogNzAwOyBjb2xvcjogI2ZmZjtcIiByb3dzPVwiNVwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICAgIDwvbWF0LWFjY29yZGlvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxociAvPlxyXG5cclxuICAgIDxkaXYgW3N0eWxlXT1cInByZXZpZXdCZ1N0eWxlXCI+XHJcbiAgICAgIDxkaXYgW3N0eWxlXT1cInByZXZpZXdUaGVtZVN0eWxlXCI+XHJcbiAgICAgICAgPGFkZC1mb3JtLXJlY29yZCAqbmdJZj1cInByZXZpZXdGb3JtICYmIGZvcm1Db21wbGV0ZWRcIiBbZm9ybV09XCJwcmV2aWV3Rm9ybVwiIFt1c2VySURdPVwiVXNlcklEXCIgW29yZ2FJRF09XCJvcmdhSURcIlxyXG4gICAgICAgICAgW2Zvcm11bGFPYmplY3RdPVwiZm9ybXVsYU9iamVjdFwiIFtjb25maWd1cmF0aW9uc109XCJ2aWV3Q29uZmlnXCIgW3Nob3dBbGxGaWVsZHNdPVwic2hvd0FsbEZpZWxkc1wiXHJcbiAgICAgICAgICBbUXVlcnlFZGl0b3JDb21wb25lbnRdPVwiUXVlcnlFZGl0b3JDb21wb25lbnRcIiBbZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiXHJcbiAgICAgICAgICBbdmlzdWFsRWRpdG9yTW9kZV09XCJ2aXN1YWxFZGl0b3JBY3RpdmVcIlxyXG4gICAgICAgICAgW3ZlU3dhcEZpZWxkQ29kZV09XCJ2ZVN3YXBGaWVsZD8uTGFiZWwgPz8gbnVsbFwiXHJcbiAgICAgICAgICAodmVGaWVsZENsaWNrKT1cIm9uVmVGaWVsZENsaWNrKCRldmVudClcIlxyXG4gICAgICAgICAgKG91dCk9XCJvbkV4dGVybmFsQ29tcG9uZW50T3V0KCRldmVudClcIiAoZmlyZVRyaWdnZXIpPVwib25GaXJlVHJpZ2dlcigkZXZlbnQpXCIgW2luQ29uZmlnXT1cInRydWVcIj5cclxuICAgICAgICA8L2FkZC1mb3JtLXJlY29yZD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibXQtMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBidXR0b24tbmV4dERpdlwiPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwibXItMiBidXR0b24tZXhpdFwiIG1hdC1yYWlzZWQtYnV0dG9uIG1hdFN0ZXBwZXJQcmV2aW91cyAoY2xpY2spPVwic2V0Rm9ybVN0YXR1cyhmYWxzZSlcIj5cclxuICAgICAgICBQcmVjZWRlbnRlXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uLW5leHRcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwic2F2ZUZvcm0oKVwiPlxyXG4gICAgICAgIFNhbHZhIGZvcm1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L21hdC1zdGVwPlxyXG4gIDwhLS0jZW5kcmVnaW9uIFZJU1VBTElaWkFaSU9ORSBGT1JNIENSRUFUQSAtLT5cclxuXHJcbjwvbWF0LWhvcml6b250YWwtc3RlcHBlcj5cclxuXHJcbjwhLS0gRElBTE9HIEFHR0lVTlRBL01PRElGSUNBIENBTVBPIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ0ZpZWxkPlxyXG4gIDxlcXAtZHluYW1pYy1tb2R1bGUtYWRkLWZvcm0tZmllbGQgW2Zvcm1dPVwiZm9ybVwiIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCJcclxuICAgIFtmaWVsZF09XCJzZWxlY3RlZEZpZWxkXCIgW2Zvcm11bGFPYmplY3RdPVwiZm9ybXVsYU9iamVjdFwiIFtpbmRleEZpZWxkXT1cImluZGV4U2VsZWN0ZWRGaWVsZFwiXHJcbiAgICBbYXZhaWxhYmxlRmllbGRzXT1cImZvcm0uRmllbGRzXCIgW2NvbnRlc3R1YWxpemF0aW9uXT1cImNvbnRlc3R1YWxpemF0aW9uXCJcclxuICAgIFtRdWVyeUVkaXRvckNvbXBvbmVudF09XCJRdWVyeUVkaXRvckNvbXBvbmVudFwiIFtmaWVsZHNFeHRyYUNvbmZpZ109XCJmaWVsZHNFeHRyYUNvbmZpZ1wiXHJcbiAgICBbYWN0aW9uQnV0dG9uc109XCJhY3Rpb25CdXR0b25zXCIgW2FpRmllbGRTdWdnZXN0TG9hZGluZ109XCJhaUZpZWxkU3VnZ2VzdExvYWRpbmdcIlxyXG4gICAgW2Zvcm1GaWVsZHNHcm91cHNdPVwiXHJcbiAgICAgIGZvcm0uRm9ybVNjYWxhclR5cGUgIT0gRm9ybVNjYWxhclR5cGVFbnVtLlNlbXBsaWNlXHJcbiAgICAgID8gZm9ybS5Gb3JtRmllbGRzR3JvdXBzXHJcbiAgICAgIDogbnVsbFxyXG4gICAgICBcIlxyXG4gICAgKG9wZW5BaUVkaXRGb3JGaWVsZEV2ZW50KT1cIm9uQWlFZGl0Rm9yRmllbGQoJGV2ZW50KVwiXHJcbiAgICAob3BlbkFpR3JhcGhpY1N1Z2dlc3RFdmVudCk9XCJvbkFpR3JhcGhpY1N1Z2dlc3QoJGV2ZW50KVwiXHJcbiAgICAoc2F2ZUZpZWxkRXZlbnQpPVwib25TYXZlRmllbGQoJGV2ZW50KVwiIChvdXQpPVwib25FeHRlcm5hbENvbXBvbmVudE91dCgkZXZlbnQpXCI+XHJcbiAgPC9lcXAtZHluYW1pYy1tb2R1bGUtYWRkLWZvcm0tZmllbGQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIFRFTVBMQVRFIFBFUiBWSVNVQUxJWlpBUkUgTEEgQ09MT05OQSBERUxMQSBTRVpJT05FIE5FTExBIFRBQkVMTEEgREVJIEZJRUxEUyAtLT5cclxuPG5nLXRlbXBsYXRlICNmaWVsZFNlY3Rpb25Db2x1bW5UZW1wbGF0ZSBsZXQtcm93PVwicm93XCI+XHJcbiAgPGVxcC1zZWxlY3QgW2FycmF5RGF0YV09XCJmb3JtLkZvcm1GaWVsZHNHcm91cHNcIiBbKG5nTW9kZWxJbnB1dCldPVwicm93LkZpZWxkR3JvdXBcIiBbYXJyYXlLZXlQcm9wZXJ0eV09XCInTmFtZSdcIlxyXG4gICAgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCInTmFtZSdcIiBwbGFjZWhvbGRlcj1cIlNlemlvbmVcIiBbaXNSZXF1aXJlZF09XCJ0cnVlXCIgW2luY2x1ZGVGdWxsT2JqZWN0XT1cImZhbHNlXCI+XHJcbiAgPC9lcXAtc2VsZWN0PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBESUFMT0cgUEVSIEFHR0lVTkdFUkUvTU9ESUZJQ0FSRSBVTkEgQUNUSU9OIFNVSSBSRUNPUkQgREVMTEEgRk9STSAtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dBY3Rpb25PblJlY29yZD5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZCB0aGlyZC1tb2RhbFwiIHN0eWxlPVwibWF4LWhlaWdodDogNzB2aCAhaW1wb3J0YW50OyBvdmVyZmxvdy14OiBoaWRkZW47IG92ZXJmbG93LXk6IGF1dG9cIj5cclxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiYWN0aW9uT25SZWNvcmRGb3JtR3JvdXBcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvdyB0aXRsZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItdGl0bGUtc3RhbmRhcmRcIj5cclxuICAgICAgICAgIHt7XHJcbiAgICAgICAgICBpbmRleFNlbGVjdGVkQWN0aW9uICE9IG51bGwgJiYgaW5kZXhTZWxlY3RlZEFjdGlvbiA+PSAwXHJcbiAgICAgICAgICA/IFwiTW9kaWZpY2FcIlxyXG4gICAgICAgICAgOiBcIkFnZ2l1bmdpXCJcclxuICAgICAgICAgIH19XHJcbiAgICAgICAgICBhemlvbmUgc3VsIHJlY29yZFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbD4gTm9tZSA8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIk5hbWVcIiByZXF1aXJlZCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInNlbGVjdGVkQWN0aW9uLk5hbWVcIiAvPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+IEljb25hIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiSWNvblwiIHJlcXVpcmVkIG1hdElucHV0IFsobmdNb2RlbCldPVwic2VsZWN0ZWRBY3Rpb24uSWNvblwiIC8+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG10LTJcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+QXppb25lIChKYXZhc2NyaXB0KTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8dGV4dGFyZWEgbWF0SW5wdXQgW3Jvd3NdPVwiM1wiIGZvcm1Db250cm9sTmFtZT1cIkFjdGlvblwiIHJlcXVpcmVkIFsobmdNb2RlbCldPVwic2VsZWN0ZWRBY3Rpb24uQWN0aW9uXCJcclxuICAgICAgICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImFjdGlvbkF1dG9jb21wbGV0ZVwiIChrZXl1cCk9XCJzZXRBY3Rpb25BdXRvY29tcGxldGVPcHRpb25zKCRldmVudClcIlxyXG4gICAgICAgICAgICAgIChmb2N1cyk9XCJzZXRBY3Rpb25BdXRvY29tcGxldGVPcHRpb25zKG51bGwpXCIgc3R5bGU9XCJcclxuICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGxpZ2h0Z3JheSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweCAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICAgIFwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlICNhY3Rpb25BdXRvY29tcGxldGU9XCJtYXRBdXRvY29tcGxldGVcIj5cclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGFjdGlvbkF1dG9jb21wbGV0ZU9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBvcHRpb24ubGFiZWwgfX1cclxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIG10LTIgbWItMVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b25zRm9ybVwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBtYXQtcmFpc2VkLWJ1dHRvbiBjYW5jZWxcIiAoY2xpY2spPVwiY2xvc2VEaWFsb2dBY3Rpb25PblJlY29yZCgpXCIgdHlwZT1cImJ1dHRvblwiPlxyXG4gICAgICAgICAgICBBbm51bGxhXHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtci0yIHNhdmVcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwic2F2ZUFjdGlvbk9uUmVjb3JkKClcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aW9uT25SZWNvcmRGb3JtR3JvdXAuaW52YWxpZFwiIHR5cGU9XCJidXR0b25cIj5cclxuICAgICAgICAgICAgU2FsdmFcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZm9ybT5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gRElBTE9HIFBFUiBBR0dJVU5HRVJFL01PRElGSUNBUkUgVU4gQk9UVE9ORSBBWklPTkUgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZGlhbG9nQWN0aW9uQnV0dG9uPlxyXG4gIDxhY3Rpb24tYnV0dG9uLWNyZWF0b3IgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIiBbZm9ybV09XCJmb3JtXCIgW2Zvcm11bGFzXT1cImFjdGlvbkJ1dHRvbnNcIlxyXG4gICAgW2FjdGlvbkJ1dHRvbl09XCJzZWxlY3RlZEFjdGlvbkJ1dHRvblwiIChvblNhdmVSZWNvcmQpPVwic2F2ZUFjdGlvbkJ1dHRvbnMoJGV2ZW50KVwiPjwvYWN0aW9uLWJ1dHRvbi1jcmVhdG9yPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBURU1QTEFURSBQRVIgQ09ORklHVVJBUkUgTEUgRk9STSBESSBERVRUQUdMSU8gLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZGlhbG9nSW5uZXJGb3JtPlxyXG4gIDwhLS0gW2Zvcm1dPVwic2VsZWN0ZWRJbm5lckZvcm1cIlxyXG4gICAgW2lubmVyRm9ybU1hbmFnbWVudF09XCJ0cnVlXCJcclxuICAgIFtpbm5lckZvcm1SZWZdPVwiZGlhbG9nSW5uZXJGb3JtUmVmXCIgLS0+XHJcbiAgPGVxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3IgW2NvbmZpZ3VyYXRpb25zXT1cImlubmVyRm9ybUNvbmZpZ1wiIChzYXZlRm9ybUV2ZW50KT1cIm9uU2F2ZU9yRXhpdElubmVyRm9ybSgkZXZlbnQpXCI+XHJcbiAgPC9lcXAtZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBURU1QTEFURSBQRVIgSU1QT1JUIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ0ltcG9ydD5cclxuICA8bWF0LWNhcmQgY2xhc3M9XCJpbXBvcnREaWFsb2dcIj5cclxuICAgIDxtYXQtY2FyZC1oZWFkZXIgY2xhc3M9XCJwLTIganVzdGlmeS1jb250ZW50LWFyb3VuZFwiPlxyXG4gICAgICA8bWF0LWNhcmQtdGl0bGU+XHJcbiAgICAgICAgSW1wb3J0XHJcbiAgICAgIDwvbWF0LWNhcmQtdGl0bGU+XHJcbiAgICA8L21hdC1jYXJkLWhlYWRlcj5cclxuICAgIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwicC0yXCI+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIGNsYXNzPVwiaW5wdXQtZmlsZS1idG4gcGItMlwiIChjaGFuZ2UpPVwib25JbXBvcnQoJGV2ZW50KVwiIC8+XHJcbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICA8bWF0LWNhcmQtZm9vdGVyIGNsYXNzPVwicC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWNsZWFyIGJ1dHRvbi1iYWNrIG1lLTJcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cImRpc2FibGVkXCIgKGNsaWNrKT1cImNsb3NlSW1wb3J0KClcIj5cclxuICAgICAgICBBbm51bGxhXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9tYXQtY2FyZC1mb290ZXI+XHJcbiAgPC9tYXQtY2FyZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gRElBTE9HIFBFUiBBR0dJVU5HRVJFL01PRElGSUNBUkUgSSBUUklHR0VSUyAtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dUcmlnZ2Vycz5cclxuICA8dHJpZ2dlci1jcmVhdG9yIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCIgW2Zvcm1dPVwiZm9ybVwiIFtmb3JtdWxhc109XCJ0cmlnZ2Vyc1wiXHJcbiAgICBbdHJpZ2dlcl09XCJzZWxlY3RlZFRyaWdnZXJcIiAob25TYXZlUmVjb3JkKT1cInNhdmVUcmlnZ2VyKCRldmVudClcIj48L3RyaWdnZXItY3JlYXRvcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gRElBTE9HIE1PRElGSUNBIENPTiBBSSAtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dBaUVkaXQ+XHJcbiAgPG1hdC1jYXJkIHN0eWxlPVwibWluLXdpZHRoOiA0ODBweFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImFpLWRpYWxvZy1oZWFkZXJcIj5cclxuICAgICAgPG1hdC1pY29uPmF1dG9fZml4X2hpZ2g8L21hdC1pY29uPlxyXG4gICAgICA8c3Bhbj57eyBpc05ld0Zvcm0gPyAnQ3JlYSBmb3JtIGNvbiBBSScgOiAnTW9kaWZpY2EgZm9ybSBjb24gQUknIH19PC9zcGFuPlxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiYWlQcm9tcHRIaXN0b3J5Lmxlbmd0aCA+IDBcIiBtYXQtaWNvbi1idXR0b24gdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgY2xhc3M9XCJhaS1oaXN0b3J5LXRvZ2dsZS1idG5cIlxyXG4gICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2hvd0FpUHJvbXB0SGlzdG9yeVwiXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwic2hvd0FpUHJvbXB0SGlzdG9yeSA/ICdOYXNjb25kaSBzdG9yaWNvIHJpY2hpZXN0ZScgOiAnTW9zdHJhIHN0b3JpY28gcmljaGllc3RlJ1wiXHJcbiAgICAgICAgKGNsaWNrKT1cInNob3dBaVByb21wdEhpc3RvcnkgPSAhc2hvd0FpUHJvbXB0SGlzdG9yeVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj57eyBzaG93QWlQcm9tcHRIaXN0b3J5ID8gJ2hpc3RvcnlfdG9nZ2xlX29mZicgOiAnaGlzdG9yeScgfX08L21hdC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJhaS1kaWFsb2ctYm9keS1mbGV4XCI+XHJcbiAgICAgIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwicC0zIGFpLWRpYWxvZy1tYWluLWNvbnRlbnRcIj5cclxuICAgICAgICA8IS0tIFByb21wdCB0ZXh0YXJlYSArIG1pY3JvZm9ubyAtLT5cclxuICAgICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBzdHlsZT1cIndpZHRoOiAxMDAlXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgaXNOZXdGb3JtID8gJ0Rlc2NyaXZpIGlsIGZvcm0gZGEgY3JlYXJlJyA6ICdEZXNjcml2aSBsYSBtb2RpZmljYSBkYSBhcHBvcnRhcmUnIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImFpRWRpdFByb21wdFwiIHJvd3M9XCI1XCJcclxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiaXNOZXdGb3JtID8gJ0VzOiBjcmVhIHVuIGZvcm0gcGVyIGxhIHJlZ2lzdHJhemlvbmUgcGF6aWVudGkgY29uIGNhbXBpIG5vbWUsIGNvZ25vbWUsIGRhdGEgZGkgbmFzY2l0YSBlIGNvZGljZSBmaXNjYWxlLi4uJyA6ICdFczogYWdnaXVuZ2kgdW4gY2FtcG8gZGF0YSBkaSBuYXNjaXRhLCByaW11b3ZpIGlsIGNhbXBvIGVtYWlsLCByZW5kaSBvYmJsaWdhdG9yaW8gaWwgY2FtcG8gdGVsZWZvbm8uLi4nXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJ0cnVlXCIgU3BlZWNoVG9UZXh0IFsoYmluZGVkVGV4dCldPVwiYWlFZGl0UHJvbXB0XCJcclxuICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IHJpZ2h0OiAxMnB4OyB0b3A6IDEycHg7IGN1cnNvcjogcG9pbnRlcjsgY29sb3I6ICM2NjZcIlxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJpc05ld0Zvcm0gPyAnUGFybGEgcGVyIGRlc2NyaXZlcmUgaWwgZm9ybScgOiAnUGFybGEgcGVyIGRldHRhcmUgbGEgbW9kaWZpY2EnXCI+a2V5Ym9hcmRfdm9pY2U8L21hdC1pY29uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIEFsbGVnYXRpIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yIG10LTFcIj5cclxuICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiYWlFZGl0RmlsZUlucHV0LmNsaWNrKClcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPmF0dGFjaF9maWxlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogNnB4XCI+QWdnaXVuZ2kgYWxsZWdhdGkgKFBERiBvIGltbWFnaW5pKTwvc3Bhbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGlucHV0ICNhaUVkaXRGaWxlSW5wdXQgdHlwZT1cImZpbGVcIiBtdWx0aXBsZSBhY2NlcHQ9XCJpbWFnZS8qLGFwcGxpY2F0aW9uL3BkZlwiIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiXHJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwib25BaUVkaXRGaWxlQ2hhbmdlKCRldmVudClcIiAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDx1bCAqbmdJZj1cImFpRWRpdEF0dGFjaG1lbnRzLmxlbmd0aCA+IDBcIiBzdHlsZT1cImxpc3Qtc3R5bGU6IG5vbmU7IHBhZGRpbmc6IDA7IG1hcmdpbjogMCAwIDEycHhcIj5cclxuICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgYXR0IG9mIGFpRWRpdEF0dGFjaG1lbnRzOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDZweDsgbWFyZ2luLWJvdHRvbTogNHB4XCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT1cImZvbnQtc2l6ZTogMThweFwiPmluc2VydF9kcml2ZV9maWxlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPHNwYW4+e3sgYXR0LmZpbGVOYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9XCJmb250LXNpemU6IDE4cHg7IGN1cnNvcjogcG9pbnRlcjsgY29sb3I6ICM5OTlcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVBaUVkaXRBdHRhY2htZW50KGkpXCI+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICA8L3VsPlxyXG5cclxuICAgICAgICA8IS0tIEF1dG9zYXZlIC0tPlxyXG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFsobmdNb2RlbCldPVwiYWlFZGl0QXV0b3NhdmVcIiBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgICAgIHt7IGlzTmV3Rm9ybSA/ICdTYWx2YSBhdXRvbWF0aWNhbWVudGUgZG9wbyBsYSBjcmVhemlvbmUnIDogJ1NhbHZhIGF1dG9tYXRpY2FtZW50ZSBkb3BvIGxhIG1vZGlmaWNhJyB9fVxyXG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuXHJcbiAgICAgICAgPCEtLSBTdGltYSBjb3N0byBBSSAoYWdnaW9ybmF0YSBpbiB0ZW1wbyByZWFsZSBhbCB2YXJpYXJlIGRlbCBwcm9tcHQgZSBkZWdsaSBhbGxlZ2F0aSkgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIj5cclxuICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgICAgPGI+Q29zdG8gc3RpbWF0byB1c28gQUk8L2I+PGJyIC8+XHJcbiAgICAgICAgICAgIFByaW1vIHVzbzogYWwgbWFzc2ltbyB7eyBmb3JtYXRBaUVkaXRDb3N0KGFpRWRpdENvc3RGaXJzdEV1cikgfX0gRXVybzxiciAvPlxyXG4gICAgICAgICAgICBVc2kgc3VjY2Vzc2l2aTogYWwgbWFzc2ltbyB7eyBmb3JtYXRBaUVkaXRDb3N0KGFpRWRpdENvc3RTdWJzZXF1ZW50RXVyKSB9fSBFdXJvXHJcbiAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcblxyXG4gICAgICA8IS0tIFBhbm5lbGxvIHN0b3JpY28gcmljaGllc3RlIC0tPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwic2hvd0FpUHJvbXB0SGlzdG9yeSAmJiBhaVByb21wdEhpc3RvcnkubGVuZ3RoID4gMFwiIGNsYXNzPVwiYWktaGlzdG9yeS1wYW5lbFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhaS1oaXN0b3J5LXBhbmVsLXRpdGxlXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24gc3R5bGU9XCJmb250LXNpemU6IDE2cHg7IHdpZHRoOiAxNnB4OyBoZWlnaHQ6IDE2cHhcIj5oaXN0b3J5PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxzcGFuPlN0b3JpY28gcmljaGllc3RlPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhaS1oaXN0b3J5LWxpc3RcIj5cclxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHByb21wdCBvZiBhaVByb21wdEhpc3Rvcnk7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cImFpLWhpc3RvcnktaXRlbVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWhpc3RvcnktaW5kZXhcIj57eyBpICsgMSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1oaXN0b3J5LXRleHRcIj57eyBwcm9tcHQgfX08L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8bWF0LWNhcmQtZm9vdGVyIGNsYXNzPVwicC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCIgc3R5bGU9XCJnYXA6IDhweFwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiBbZGlzYWJsZWRdPVwiYWlFZGl0TG9hZGluZ1wiIChjbGljayk9XCJjbG9zZUFpRWRpdERpYWxvZygpXCI+XHJcbiAgICAgICAgQW5udWxsYVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgW2Rpc2FibGVkXT1cIiFhaUVkaXRQcm9tcHQ/LnRyaW0oKSB8fCBhaUVkaXRMb2FkaW5nXCJcclxuICAgICAgICAoY2xpY2spPVwic2VuZEFpRWRpdCgpXCI+XHJcbiAgICAgICAgPG1hdC1zcGlubmVyICpuZ0lmPVwiYWlFZGl0TG9hZGluZ1wiIGRpYW1ldGVyPVwiMThcIlxyXG4gICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IG1hcmdpbi1yaWdodDogNnB4OyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlXCI+PC9tYXQtc3Bpbm5lcj5cclxuICAgICAgICA8c3Bhbj57eyBhaUVkaXRMb2FkaW5nID8gJ0VsYWJvcmF6aW9uZS4uLicgOiAoaXNOZXdGb3JtID8gJ0NyZWEgY29uIEFJJyA6ICdNb2RpZmljYSBjb24gQUknKSB9fTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L21hdC1jYXJkLWZvb3Rlcj5cclxuICA8L21hdC1jYXJkPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBWSVNVQUwgRURJVE9SIOKAlCBUb29sdGlwIGF6aW9uaSBjYW1wbyAtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dWZVRvb2x0aXA+XHJcbiAgPGRpdiBjbGFzcz1cInZlLXRvb2x0aXAtcGFuZWxcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ2ZS10b29sdGlwLWhlYWRlclwiPlxyXG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJ2ZS10b29sdGlwLWljb25cIj5lZGl0X3NxdWFyZTwvbWF0LWljb24+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwidmUtdG9vbHRpcC10aXRsZVwiPnt7IHZlU2VsZWN0ZWRGaWVsZD8uTGFiZWwgfX08L3NwYW4+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJkaWFsb2dWZVRvb2x0aXBSZWY/LmNsb3NlKClcIj5cclxuICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdmVTaG93R3JhcGhpY0lucHV0XCI+XHJcbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwidmVFZGl0RmllbGQoKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5zZXR0aW5nczwvbWF0LWljb24+XHJcbiAgICAgICAgTW9kaWZpY2EgY2FtcG9cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAqbmdJZj1cImVuZFBvaW50Q29uZmlndXJhdGlvbj8uRm9ybXM/LlNwZWVjaFRvRm9ybUVkaXRFbmRQb2ludFwiIChjbGljayk9XCJ2ZUFpRWRpdCgpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uPmF1dG9fZml4X2hpZ2g8L21hdC1pY29uPlxyXG4gICAgICAgIE1vZGlmaWNhIGNvbiBJQVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtICpuZ0lmPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uPy5Gb3Jtcz8uU3BlZWNoVG9Gb3JtRWRpdEVuZFBvaW50XCIgKGNsaWNrKT1cInZlU2hvd0dyYXBoaWNJbnB1dCA9IHRydWVcIj5cclxuICAgICAgICA8bWF0LWljb24+cGFsZXR0ZTwvbWF0LWljb24+XHJcbiAgICAgICAgU3VnZ2VyaXNjaSBHcmFmaWNhXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInZlT3BlblJlb3JkZXIoKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5kcmFnX2luZGljYXRvcjwvbWF0LWljb24+XHJcbiAgICAgICAgUmlvcmRpbmFcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwidmVTdGFydFN3YXAoKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5zd2FwX2hvcml6PC9tYXQtaWNvbj5cclxuICAgICAgICBTY2FtYmlhXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJ2ZURlbGV0ZUZpZWxkKClcIiBzdHlsZT1cImNvbG9yOiAjZTUzOTM1O1wiPlxyXG4gICAgICAgIDxtYXQtaWNvbiBzdHlsZT1cImNvbG9yOiAjZTUzOTM1O1wiPmRlbGV0ZTwvbWF0LWljb24+XHJcbiAgICAgICAgRWxpbWluYSBjYW1wb1xyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJ2ZS10b29sdGlwLWdyYXBoaWNcIiAqbmdJZj1cInZlU2hvd0dyYXBoaWNJbnB1dFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidmUtdG9vbHRpcC1ncmFwaGljLWhlYWRlclwiPlxyXG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJ2ZVNob3dHcmFwaGljSW5wdXQgPSBmYWxzZVwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmFycm93X2JhY2s8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxzcGFuPkdyYWZpY2EgcGVyIFwie3sgdmVTZWxlY3RlZEZpZWxkPy5MYWJlbCB9fVwiPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LTEwMFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+U3VnZ2VyaW1lbnRvIGdyYWZpY288L21hdC1sYWJlbD5cclxuICAgICAgICA8dGV4dGFyZWEgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJ2ZUdyYXBoaWNIaW50XCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiXHJcbiAgICAgICAgICByb3dzPVwiM1wiIHBsYWNlaG9sZGVyPVwiZXMuIGJvcmRvIGJsdSwgc2ZvbmRvIHNlbWktdHJhc3BhcmVudGUsIGV0aWNoZXR0YSBpbiBncmFzc2V0dG8uLi5cIj48L3RleHRhcmVhPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidmUtdG9vbHRpcC1ncmFwaGljLWFjdGlvbnNcIj5cclxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cInZlU2hvd0dyYXBoaWNJbnB1dCA9IGZhbHNlXCI+QW5udWxsYTwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInZlU2VuZEdyYXBoaWMoKVwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmF1dG9fZml4X2hpZ2g8L21hdC1pY29uPlxyXG4gICAgICAgICAgSW52aWFcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gVklTVUFMIEVESVRPUiDigJQgUmlvcmRpbmEgY2FtcGkgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZGlhbG9nVmVSZW9yZGVyPlxyXG4gIDxtYXQtY2FyZCBjbGFzcz1cInZlLXJlb3JkZXItY2FyZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInZlLXJlb3JkZXItaGVhZGVyXCI+XHJcbiAgICAgIDxtYXQtaWNvbj5kcmFnX2luZGljYXRvcjwvbWF0LWljb24+XHJcbiAgICAgIDxzcGFuPlJpb3JkaW5hIGNhbXBpPC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bWF0LWNhcmQtY29udGVudD5cclxuICAgICAgPGRpdiBjZGtEcm9wTGlzdCAoY2RrRHJvcExpc3REcm9wcGVkKT1cIm9uVmVEcmFnRHJvcFJlb3JkZXIoJGV2ZW50KVwiIGNsYXNzPVwidmUtcmVvcmRlci1saXN0XCI+XHJcbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZmllbGQgb2YgdmVSZW9yZGVyRmllbGRzXCIgY2RrRHJhZyBjbGFzcz1cInZlLXJlb3JkZXItaXRlbVwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uIGNka0RyYWdIYW5kbGUgY2xhc3M9XCJ2ZS1kcmFnLWhhbmRsZVwiPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxzcGFuPnt7IGZpZWxkLkRlc2NyaXB0aW9uIH19PC9zcGFuPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInZlLWRyYWctcGxhY2Vob2xkZXJcIiAqY2RrRHJhZ1BsYWNlaG9sZGVyPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuICAgIDxtYXQtY2FyZC1mb290ZXIgY2xhc3M9XCJwLTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIiBzdHlsZT1cImdhcDogOHB4XCI+XHJcbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwiZGlhbG9nVmVSZW9yZGVyUmVmPy5jbG9zZSgpXCI+QW5udWxsYTwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJ2ZUFwcGx5UmVvcmRlcigpXCI+T0s8L2J1dHRvbj5cclxuICAgIDwvbWF0LWNhcmQtZm9vdGVyPlxyXG4gIDwvbWF0LWNhcmQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIERJQUxPRyBDT05URVNUVUFMSVpaQVpJT05FIERCR0VUVEVSIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ0NvbnRlc3R1YWxpemF0aW9uPlxyXG4gIDxtYXQtY2FyZCBzdHlsZT1cIm1pbi13aWR0aDogNDIwcHhcIj5cclxuICAgIDxtYXQtY2FyZC1oZWFkZXIgY2xhc3M9XCJwLTJcIj5cclxuICAgICAgPG1hdC1jYXJkLXRpdGxlPkNvbnRlc3R1YWxpenphemlvbmUgZGVsIERCR2V0dGVyPC9tYXQtY2FyZC10aXRsZT5cclxuICAgIDwvbWF0LWNhcmQtaGVhZGVyPlxyXG4gICAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJwLTNcIj5cclxuICAgICAgPGVxcC1zZWxlY3QgW2FycmF5RGF0YV09XCJjb250ZXN0dWFsaXphdGlvblwiIFsobmdNb2RlbElucHV0KV09XCJzZWxlY3RlZENvbnRlc3R1YWxpemF0aW9uXCJcclxuICAgICAgICBbYXJyYXlLZXlQcm9wZXJ0eV09XCInZW50aXR5VGFibGVOYW1lJ1wiIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ2VudGl0eVRhYmxlTmFtZSdcIlxyXG4gICAgICAgIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25Db250ZXN0dWFsaXphdGlvblNlbGVjdCgpXCIgW3BsYWNlaG9sZGVyXT1cIidDb250ZXN0dWFsaXp6YXppb25lIGRlbCBEQkdldHRlcidcIlxyXG4gICAgICAgIFtpbmNsdWRlRnVsbE9iamVjdF09XCJmYWxzZVwiPjwvZXFwLXNlbGVjdD5cclxuICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGVkQ29udGVzdHVhbGl6YXRpb24gIT0gbnVsbFwiIGNsYXNzPVwibXQtMlwiPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRDb250ZXN0dWFsaXphdGlvblZhbHVlXCJcclxuICAgICAgICAgIChjaGFuZ2UpPVwib25Db250ZXN0dWFsaXphdGlvblNlbGVjdFZhbHVlKClcIj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICA8bWF0LWNhcmQtZm9vdGVyIGNsYXNzPVwicC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCIgc3R5bGU9XCJnYXA6IDhweFwiPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXJcIiAoY2xpY2spPVwiYXBwbHlDb250ZXN0dWFsaXphdGlvbihudWxsKTsgY2xvc2VDb250ZXN0dWFsaXphdGlvbkRpYWxvZygpXCI+UmltdW92aTwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cImFwcGx5Q29udGVzdHVhbGl6YXRpb24oY29udGVzdHVhbGl6YXRpb24pOyBjbG9zZUNvbnRlc3R1YWxpemF0aW9uRGlhbG9nKClcIj5BcHBsaWNhPC9idXR0b24+XHJcbiAgICA8L21hdC1jYXJkLWZvb3Rlcj5cclxuICA8L21hdC1jYXJkPlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
|