@eqproject/eqp-dynamic-module 2.10.80 → 2.10.83
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/README.md +10 -0
- package/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +4 -1
- package/esm2020/lib/components/private/form-records/add-form-record/add-form-record.component.mjs +15 -1
- package/fesm2015/eqproject-eqp-dynamic-module.mjs +19 -0
- package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/fesm2020/eqproject-eqp-dynamic-module.mjs +17 -0
- package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1106,6 +1106,9 @@ export class EqpDynamicModuleConfiguratorComponent {
|
|
|
1106
1106
|
// Trasformo il Base64String del Datagetter nel Datagetter vero e proprio
|
|
1107
1107
|
if (field.DataGetterValueBase64String != null) {
|
|
1108
1108
|
field.DataGetter = JSON.parse(atob(field.DataGetterValueBase64String));
|
|
1109
|
+
if (field.DataGetter == null) {
|
|
1110
|
+
field.DataGetter = new DataGetter();
|
|
1111
|
+
}
|
|
1109
1112
|
field.DataGetter.DataGetterType = field.DataGetter.DataGetterType == null ? DataGetterTypeEnum.Manuale : field.DataGetter.DataGetterType;
|
|
1110
1113
|
}
|
|
1111
1114
|
else {
|
|
@@ -2361,4 +2364,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
2361
2364
|
type: ViewChild,
|
|
2362
2365
|
args: ["dialogVeReorder", { static: true }]
|
|
2363
2366
|
}] } });
|
|
2364
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydGVkL2VxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3IvZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydGVkL2VxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3IvZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpREFBaUQ7QUFDakQsT0FBTyxFQUdMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFHTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLGtCQUFrQixFQUVsQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQ0wsaUJBQWlCLEVBR2pCLFVBQVUsR0FDWCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xJLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN4RCxPQUFPLEVBR0wsYUFBYSxHQUNkLE1BQU0sNkNBQTZDLENBQUM7QUFDckQsT0FBTyxFQUNMLGNBQWMsRUFDZCxJQUFJLEVBRUosa0JBQWtCLEVBQ2xCLFlBQVksR0FDYixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFB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QUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVV2QyxhQUFhO3NCQUF0QixNQUFNO2dCQUtHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFHRyxHQUFHO3NCQUFaLE1BQU07Z0JBSXdDLGNBQWM7c0JBQTVELFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUdFLGFBQWE7c0JBQTNELFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFjQSxZQUFZO3NCQUF4RCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSWEsdUJBQXVCO3NCQUE5RSxTQUFTO3VCQUFDLHlCQUF5QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHTixlQUFlO3NCQUE5RCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDRSxlQUFlO3NCQUE5RCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8vIGltcG9ydCB7IFRocm93U3RtdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtcclxuICBVbnR5cGVkRm9ybUJ1aWxkZXIsXHJcbiAgVW50eXBlZEZvcm1Db250cm9sLFxyXG4gIFVudHlwZWRGb3JtR3JvdXAsXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7XHJcbiAgQ2VsbEFsaWdubWVudEVudW0sXHJcbiAgQ29uZmlnQ29sdW1uLFxyXG4gIEVxcFRhYmxlQ29tcG9uZW50LFxyXG4gIFR5cGVDb2x1bW4sXHJcbn0gZnJvbSBcIkBlcXByb2plY3QvZXFwLXRhYmxlXCI7XHJcbmltcG9ydCB7IE51bWVyaWNGaWVsZCB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRzL251bWVyaWNGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBCYXNlRmllbGQsIERhdGFHZXR0ZXIsIERhdGFHZXR0ZXJUeXBlRW51bSwgRmllbGRJbnZpc2liaWxpdHlFbnVtLCBGaWVsZFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Jhc2VGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2NvbnRleHQubW9kZWxcIjtcclxuaW1wb3J0IHtcclxuICBFbmRQb2ludENvbmZpZ3VyYXRpb24sXHJcbiAgRW5kUG9pbnREYXRhUGFyYW1zLFxyXG4gIFBhcmFtVHlwZUVudW0sXHJcbn0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9lbmRQb2ludENvbmZpZ3VyYXRpb24ubW9kZWxcIjtcclxuaW1wb3J0IHtcclxuICBBY3Rpb25PblJlY29yZCxcclxuICBGb3JtLFxyXG4gIEZvcm1GaWVsZEdyb3VwLFxyXG4gIEZvcm1TY2FsYXJUeXBlRW51bSxcclxuICBGb3JtVHlwZUVudW0sXHJcbn0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsXCI7XHJcbmltcG9ydCB7IEFycmF5VmFsaWRhdG9ycyB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9jdXN0b20tZm9ybS12YWxpZGF0b3JzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvZXFwLWR5bmFtaWMtbW9kdWxlLWRpYWxvZy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXNcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlU3R5bGUgfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xyXG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IER5bmFtaWNMb2FkZXJEaXJlY3RpdmVEYXRhLCBldmVudE91dCB9IGZyb20gXCIuLi8uLi8uLi9kaXJlY3RpdmVzL2R5bmFtaWMtbG9hZGVyL2R5bmFtaWMtbG9hZGVyLmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQgeyBUcmlnZ2VyLCBBY3Rpb25CdXR0b24sIEFjdGlvbkZsYWdFbnVtLCBGaXJlVHJpZ2dlciB9IGZyb20gJy4uLy4uLy4uL21vZGVscy90cmlnZ2VyLm1vZGVsJztcclxuaW1wb3J0IHsgQ29udGVzdHVhbGl6YXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2dldHRlci5tb2RlbFwiO1xyXG5pbXBvcnQgeyBJbWFnZVNlbGVjdG9yRmllbGQgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9pbWFnZVNlbGVjdG9yRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgRmllbGRFeHRyYUNvbmZpZyB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRFeHRyYUNvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBBdHRhY2htZW50VHlwZSwgSUF0dGFjaG1lbnREVE8gfSBmcm9tIFwiQGVxcHJvamVjdC9lcXAtYXR0YWNobWVudHNcIjtcclxuaW1wb3J0IHsgRHluQXR0YWNobWVudCB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZHluQXR0YWNobWVudFwiO1xyXG5pbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7IGluamVjdEdvb2dsZUZvbnRzRnJvbUZvcm0gfSBmcm9tICcuLi8uLi8uLi91dGlscy9nb29nbGUtZm9udHMtaW5qZWN0b3InO1xyXG5pbXBvcnQgeyBRdWVyeUVkaXRvck1vZGVFbnVtIH0gZnJvbSBcIi4uLy4uL3ByaXZhdGUvZGJnZXR0ZXIvZGJnZXR0ZXIuY29tcG9uZW50XCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJlcXAtZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9lcXAtZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2VxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3IuY29tcG9uZW50LnNjc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFcXBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcblxyXG4gIEBJbnB1dCgpIGRlYnVnTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBmaWVsZHNFeHRyYUNvbmZpZzogQXJyYXk8RmllbGRFeHRyYUNvbmZpZz47XHJcbiAgQElucHV0KCkgY29uZmlndXJhdGlvbnM6IER5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb25maWcgPVxyXG4gICAgbmV3IER5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb25maWcoKTtcclxuICBASW5wdXQoKSBmb3JtSUQ6IHN0cmluZyA9IG51bGw7XHJcbiAgQElucHV0KCkgdmlld01vZGU6IHN0cmluZyA9IFwiYWRkT3JFZGl0XCI7IC8vIEV4cG9ydFxyXG4gIEBJbnB1dCgpIFF1ZXJ5RWRpdG9yQ29tcG9uZW50OiBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YTsgLy8gTCdpbnRlcm8gY29tcG9uZW50ZSBxdWVyeSBFZGl0b3JcclxuICBASW5wdXQoKSB0cmlnZ2VyczogYW55O1xyXG4gIEBJbnB1dCgpIGFjdGlvbkJ1dHRvbnM6IGFueTtcclxuICBASW5wdXQoKSBjb250ZXN0dWFsaXphdGlvbjogQXJyYXk8Q29udGVzdHVhbGl6YXRpb24+O1xyXG4gIEBJbnB1dCgpIGZvcm11bGFPYmplY3Q6IGFueTsgLy8gRXNlbXBpbzoge2N1cnJvbGU6IHJvbGUsIHVzZXI6IHVzZXIsIG1lZGljYWw6IG1lZGljYWxleGFtaW5hdGlvbn1cclxuICBASW5wdXQoKSBjb25maWd1cmF0b3JUaGVtZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IG51bGwgPSBudWxsO1xyXG4gIEBJbnB1dCgpIGNvbmZpZ3VyYXRvclRoZW1lQ3NzOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgQE91dHB1dCgpIGZpcmVUcmlnZ2VyOiBFdmVudEVtaXR0ZXI8RmlyZVRyaWdnZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxGaXJlVHJpZ2dlcj4oKTtcclxuXHJcbiAgbG9hZGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogVG9rZW4gZGEgdXNhcmUgbmVnbGkgZW5kcG9pbnQgZGEgY2hpYW1hcmUgcGVyIHJlY3VwZXJhcmUgbyBzYWx2YXJlIGkgcmVjb3JkLlxyXG4gICAqIFVzYXRvIHNvbG8gc2UgdmllbmUgcG9wb2xhdGEgbGEgcHJvcHJpZXTDoCBcImJhc2VTZXJ2ZXJVcmxcIi5cclxuICAgKi9cclxuICB1c2VyVG9rZW46IHN0cmluZyA9IG51bGw7XHJcbiAgLyoqXHJcbiAgICogQ29uZmlndXJhemlvbmUgZGVnbGkgZW5kcG9pbnQgZGEgY2hpYW1hcmUgcGVyIHJlY3VwZXJhcmUgbyBzYWx2YXJlIGkgZGF0aS5cclxuICAgKiBQdcOyIGVzc2VyZSBkZWZpbml0YSBkYWxsJ3V0ZW50ZSBvcHB1cmUgbGFzY2lhdGEgbnVsbCwgdmllbmUgcG9wb2xhdGEgY29uIGRlaVxyXG4gICAqIHZhbG9yaSBkaSBkZWZhdWx0IHNlIHZpZW5lIHZhbG9yaXp6YXRhIGxhIHByb3ByaWV0w6AgXCJiYXNlU2VydmVyVXJsXCIgYWx0cmltZW50aVxyXG4gICAqIHZpZW5lIGxhc2NpYXRhIG51bGwgZSBub24gdmllbmUgZXNlZ3VpdGEgbmVzc3VuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIuXHJcbiAgICovXHJcbiAgZW5kUG9pbnRDb25maWd1cmF0aW9uOiBFbmRQb2ludENvbmZpZ3VyYXRpb24gPSBudWxsO1xyXG4gIC8qKlxyXG4gICAqIFVybCBkZWwgc2VydmVyIGRhIGNoaWFtYXJlIHBlciByZWN1ZXJhcmUsIHNhbHZhcmUgbyBlbGltaW5hcmUgaSByZWNvcmQuXHJcbiAgICogVXNhdG8gcGVyIGNyZWFyZSBsYSBjb25maWd1cmF6aW9uZSBkaSBkZWZhdWx0IGRlZ2xpIGVuZHBvaW50IGRhIGNoaWFtYXJlLlxyXG4gICAqL1xyXG4gIGJhc2VTZXJ2ZXJVcmw6IHN0cmluZyA9IG51bGw7XHJcbiAgY29udGV4dDogQ29udGV4dCA9IG5ldyBDb250ZXh0KCk7XHJcblxyXG4gIC8qIGV4cG9ydCB2YXJpYWJsZXMgKi9cclxuICBkb3dubG9hZE5hbWU6IHN0cmluZztcclxuICBkb3dubG9hZEpzb25IcmVmOiBhbnk7XHJcbiAgc3RyaW5naWZpZWRGb3JtOiBzdHJpbmc7XHJcblxyXG4gIC8qIGltcG9ydCB2YXJpYWJsZXMgKi9cclxuICBpbXBvcnRlZE1vZHVsZTogc3RyaW5nID0gbnVsbDsgLy8ganNvbiBvYmplY3RcclxuICBkaWFsb2dJbXBvcnRSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICBAVmlld0NoaWxkKFwiZGlhbG9nSW1wb3J0XCIsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ0ltcG9ydDogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgZm9ybTogRm9ybSA9IG5ldyBGb3JtKCk7XHJcbiAgYmFja3VwRm9ybTogRm9ybSA9IG51bGw7XHJcbiAgc2F2ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBvcmdhSUQ6IHN0cmluZyA9IG51bGw7XHJcbiAgVXNlcklEOiBudW1iZXIgPSAzNjtcclxuICBpbm5lckZvcm1NYW5hZ21lbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpbm5lckZvcm1SZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuXHJcbiAgLyogQ09ORklHVVJBWklPTkUgUEVSIFZJU1VBTElaWkFaSU9ORSBGT1JNIENSRUFUQSAqL1xyXG4gIHZpZXdDb25maWc6IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnID0gbmV3IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnKFxyXG4gICAgdHJ1ZSxcclxuICAgIGZhbHNlLFxyXG4gICAgZmFsc2UsXHJcbiAgICBcIjBcIlxyXG4gICk7XHJcblxyXG4gIGZvcm1Gb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAgPSBudWxsO1xyXG4gIGZvcm1Db21wbGV0ZWQgPSBmYWxzZTtcclxuICBwcmV2aWV3Rm9ybTogRm9ybTtcclxuICBmb3JtRmllbGRHcm91cE5hbWU6IHN0cmluZztcclxuXHJcbiAgYWN0aW9uQXV0b2NvbXBsZXRlT3B0aW9uczogQXJyYXk8eyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+O1xyXG5cclxuICAvLyNyZWdpb24gRW51bWVyYXRvcmkgdXNhdGkgbmVsbCdodG1sXHJcbiAgRm9ybVR5cGVFbnVtID0gRm9ybVR5cGVFbnVtO1xyXG4gIEZvcm1TY2FsYXJUeXBlRW51bSA9IEZvcm1TY2FsYXJUeXBlRW51bTtcclxuICBBdHRhY2htZW50VHlwZSA9IEF0dGFjaG1lbnRUeXBlO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gR2VzdGlvbmUgc2ZvbmRvIGZvcm1cclxuICBnZXQgcHJldmlld0JnU3R5bGUoKTogU2FmZVN0eWxlIHwgbnVsbCB7XHJcbiAgICBpZiAoIXRoaXMuZm9ybT8uQmdJbWFnZUJhc2U2NCkgcmV0dXJuIG51bGw7XHJcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKFtcclxuICAgICAgYGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LCR7dGhpcy5mb3JtLkJnSW1hZ2VCYXNlNjR9JylgLFxyXG4gICAgICAnYmFja2dyb3VuZC1zaXplOiBjb3ZlcicsXHJcbiAgICAgICdiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXInLFxyXG4gICAgICAnYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdCcsXHJcbiAgICBdLmpvaW4oJzsgJykpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHByZXZpZXdUaGVtZVN0eWxlKCk6IFNhZmVTdHlsZSB8IG51bGwge1xyXG4gICAgaWYgKCF0aGlzLmZvcm0/LlRoZW1lQ1NTKSByZXR1cm4gbnVsbDtcclxuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUodGhpcy5mb3JtLlRoZW1lQ1NTLnRyaW0oKS5yZXBsYWNlKC87JC8sICcnKSk7XHJcbiAgfVxyXG5cclxuICBnZXQgYmdBdHRhY2htZW50TGlzdCgpOiBJQXR0YWNobWVudERUT1tdIHtcclxuICAgIGlmICghdGhpcy5mb3JtPy5CZ0ltYWdlQmFzZTY0KSByZXR1cm4gW107XHJcbiAgICBjb25zdCBhdHQgPSBuZXcgRHluQXR0YWNobWVudCgpO1xyXG4gICAgYXR0LklEID0gMDtcclxuICAgIGF0dC5GaWxlRGF0YUJhc2U2NCA9IHRoaXMuZm9ybS5CZ0ltYWdlQmFzZTY0O1xyXG4gICAgYXR0LklzSW1hZ2UgPSB0cnVlO1xyXG4gICAgYXR0LkZpbGVDb250ZW50VHlwZSA9ICdpbWFnZS9wbmcnO1xyXG4gICAgcmV0dXJuIFthdHRdO1xyXG4gIH1cclxuXHJcbiAgb25CZ0ltYWdlQ2hhbmdlKGF0dGFjaG1lbnRzOiBJQXR0YWNobWVudERUT1tdKTogdm9pZCB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IGF0dGFjaG1lbnRzPy5sZW5ndGggPiAwID8gYXR0YWNobWVudHNbMF0uRmlsZURhdGFCYXNlNjQgOiBudWxsO1xyXG4gICAgdGhpcy5mb3JtLkJnSW1hZ2VCYXNlNjQgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLnByZXZpZXdGb3JtKSB0aGlzLnByZXZpZXdGb3JtLkJnSW1hZ2VCYXNlNjQgPSB2YWx1ZTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG9uQmdJbWFnZURlbGV0ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybS5CZ0ltYWdlQmFzZTY0ID0gbnVsbDtcclxuICAgIGlmICh0aGlzLnByZXZpZXdGb3JtKSB0aGlzLnByZXZpZXdGb3JtLkJnSW1hZ2VCYXNlNjQgPSBudWxsO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRklFTERfVFlQRV9MQUJFTFM6IFJlY29yZDxudW1iZXIsIHN0cmluZz4gPSB7XHJcbiAgICAxOiAnQ2FtcG8gZGkgdGVzdG8nLFxyXG4gICAgMjogJ1Rlc3RvIGx1bmdvJyxcclxuICAgIDM6ICdCb29sZWFubycsXHJcbiAgICA0OiAnRGF0YScsXHJcbiAgICA1OiAnTnVtZXJpY28nLFxyXG4gICAgNjogJ0FsbGVnYXRvJyxcclxuICAgIDc6ICdJbW1hZ2luZScsXHJcbiAgICA4OiAnRWxlbmNvJyxcclxuICAgIDExOiAnU2VsZXR0b3JlIGltbWFnaW5pJyxcclxuICAgIDEyOiAnRXRpY2hldHRhJyxcclxuICAgIDEzOiAnSW1tYWdpbmUgY29uIG1hcmNhdG9yaScsXHJcbiAgICAxNDogJ0JvdHRvbmUgYXppb25lJyxcclxuICB9O1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBGSUVMRF9UWVBFX0NTU19DTEFTUzogUmVjb3JkPG51bWJlciwgc3RyaW5nPiA9IHtcclxuICAgIDE6ICdUZXh0RmllbGRTdHlsZUNTUycsXHJcbiAgICAyOiAnVGV4dGFyZWFGaWVsZFN0eWxlQ1NTJyxcclxuICAgIDM6ICdCb29sZWFuRmllbGRTdHlsZUNTUycsXHJcbiAgICA0OiAnRGF0ZUZpZWxkU3R5bGVDU1MnLFxyXG4gICAgNTogJ051bWVyaWNGaWVsZFN0eWxlQ1NTJyxcclxuICAgIDY6ICdBdHRhY2htZW50RmllbGRTdHlsZUNTUycsXHJcbiAgICA3OiAnSW1hZ2VGaWVsZFN0eWxlQ1NTJyxcclxuICAgIDg6ICdMaXN0VmFsdWVGaWVsZFN0eWxlQ1NTJyxcclxuICAgIDExOiAnSW1hZ2VTZWxlY3RvckZpZWxkU3R5bGVDU1MnLFxyXG4gICAgMTI6ICdMYWJlbEZpZWxkU3R5bGVDU1MnLFxyXG4gICAgMTM6ICdJbWFnZVdpdGhNYXJrZXJzRmllbGRTdHlsZUNTUycsXHJcbiAgICAxNDogJ0FjdGlvbkJ1dHRvbkZpZWxkU3R5bGVDU1MnLFxyXG4gIH07XHJcblxyXG4gIC8vIE1hcHBhIGFsaWFzIG1vZGVsbG8g4oaSIElEIENsYXVkZSBwacO5IHJlY2VudGU7IGwnb3JkaW5lIGRpIGNoZWNrIMOoIHJpbGV2YW50ZSAoT3B1cyBwcmltYSBkaSBTb25uZXQpXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgTU9ERUxfTUFQOiBBcnJheTx7IHBhdHRlcm46IFJlZ0V4cDsgaWQ6IHN0cmluZyB9PiA9IFtcclxuICAgIHsgcGF0dGVybjogL1xcYig/Oig/OnVzYXx1c2V8Y29ufHVzaW5nKVxccyspP29wdXNcXGIvZ2ksIGlkOiAnY2xhdWRlLW9wdXMtNC03JyB9LFxyXG4gICAgeyBwYXR0ZXJuOiAvXFxiKD86KD86dXNhfHVzZXxjb258dXNpbmcpXFxzKyk/c29ubmV0XFxiL2dpLCBpZDogJ2NsYXVkZS1zb25uZXQtNC02JyB9LFxyXG4gICAgeyBwYXR0ZXJuOiAvXFxiKD86KD86dXNhfHVzZXxjb258dXNpbmcpXFxzKyk/aGFpa3VcXGIvZ2ksIGlkOiAnY2xhdWRlLWhhaWt1LTQtNS0yMDI1MTAwMScgfSxcclxuICBdO1xyXG5cclxuICBwcml2YXRlIGV4dHJhY3RNb2RlbEZyb21UZXh0KHRleHQ6IHN0cmluZyk6IHsgY2xlYW5UZXh0OiBzdHJpbmc7IG1vZGVsSWQ6IHN0cmluZyB8IG51bGwgfSB7XHJcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIEVxcER5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb21wb25lbnQuTU9ERUxfTUFQKSB7XHJcbiAgICAgIGVudHJ5LnBhdHRlcm4ubGFzdEluZGV4ID0gMDtcclxuICAgICAgaWYgKGVudHJ5LnBhdHRlcm4udGVzdCh0ZXh0KSkge1xyXG4gICAgICAgIGVudHJ5LnBhdHRlcm4ubGFzdEluZGV4ID0gMDtcclxuICAgICAgICBjb25zdCBjbGVhblRleHQgPSB0ZXh0XHJcbiAgICAgICAgICAucmVwbGFjZShlbnRyeS5wYXR0ZXJuLCAnJylcclxuICAgICAgICAgIC5yZXBsYWNlKC9bIFxcdF0rL2csICcgJylcclxuICAgICAgICAgIC5yZXBsYWNlKC9cXHMqWy4sO11cXHMqJC8sICcnKVxyXG4gICAgICAgICAgLnRyaW0oKTtcclxuICAgICAgICBlbnRyeS5wYXR0ZXJuLmxhc3RJbmRleCA9IDA7XHJcbiAgICAgICAgcmV0dXJuIHsgY2xlYW5UZXh0LCBtb2RlbElkOiBlbnRyeS5pZCB9O1xyXG4gICAgICB9XHJcbiAgICAgIGVudHJ5LnBhdHRlcm4ubGFzdEluZGV4ID0gMDtcclxuICAgIH1cclxuICAgIHJldHVybiB7IGNsZWFuVGV4dDogdGV4dCwgbW9kZWxJZDogbnVsbCB9O1xyXG4gIH1cclxuXHJcbiAgb25Gb3JtR3JhcGhpY1N1Z2dlc3QoKTogdm9pZCB7XHJcbiAgICBjb25zdCByYXdIaW50ID0gdGhpcy5mb3JtR3JhcGhpY1N1Z2dlc3RIaW50Py50cmltKCk7XHJcbiAgICBpZiAoIXRoaXMuZm9ybSB8fCAhdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24/LkZvcm1zPy5TcGVlY2hUb0dyYXBoaWNzRW5kUG9pbnQpIHJldHVybjtcclxuICAgIGNvbnN0IHsgY2xlYW5UZXh0OiBoaW50LCBtb2RlbElkOiBhaU1vZGVsSWQgfSA9IHRoaXMuZXh0cmFjdE1vZGVsRnJvbVRleHQocmF3SGludCk7XHJcbiAgICBjb25zdCBzY29wZSA9IHRoaXMuZm9ybUdyYXBoaWNTY29wZTtcclxuXHJcbiAgICAvLyBTY29wZSB0aXBvIHNwZWNpZmljbzogdmFsaWRhIGVzaXN0ZW56YSBkZWwgY2FtcG8gcHJpbWEgZGkgcGFydGlyZVxyXG4gICAgbGV0IHNjb3BlRmllbGRUeXBlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICAgIGlmIChzY29wZS5zdGFydHNXaXRoKCd0eXBlXycpKSB7XHJcbiAgICAgIHNjb3BlRmllbGRUeXBlID0gcGFyc2VJbnQoc2NvcGUucmVwbGFjZSgndHlwZV8nLCAnJyksIDEwKTtcclxuICAgICAgY29uc3QgZXhpc3RzID0gKHRoaXMuZm9ybS5GaWVsZHMgPz8gW10pLnNvbWUoZiA9PiBmLkZpZWxkVHlwZSA9PT0gc2NvcGVGaWVsZFR5cGUpO1xyXG4gICAgICBpZiAoIWV4aXN0cykge1xyXG4gICAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLkVycm9yKCdOZXNzdW4gY2FtcG8gZGkgcXVlc3RvIHRpcG8gcHJlc2VudGUgbmVsIGZvcm0uJyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mb3JtR3JhcGhpY1N1Z2dlc3RMb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBDYW1waSBkYSBpbnZpYXJlOiB1biByYXBwcmVzZW50YW50ZSBwZXIgdGlwbyAoYWxsL21haW4pIG9wcHVyZSBzb2xvIGlsIHByaW1vIGRlbCB0aXBvIHNjZWx0byAodGlwbyBzcGVjaWZpY28pXHJcbiAgICBjb25zdCBzZWVuVHlwZXMgPSBuZXcgU2V0PG51bWJlcj4oKTtcclxuICAgIGNvbnN0IGZpZWxkc1RvU2VuZCA9IHNjb3BlRmllbGRUeXBlICE9IG51bGxcclxuICAgICAgPyAodGhpcy5mb3JtLkZpZWxkcyA/PyBbXSkuZmlsdGVyKGYgPT4gZi5GaWVsZFR5cGUgPT09IHNjb3BlRmllbGRUeXBlKS5zbGljZSgwLCAxKS5tYXAoZiA9PiAoeyBMYWJlbDogZi5MYWJlbCwgRmllbGRUeXBlOiBmLkZpZWxkVHlwZSB9KSlcclxuICAgICAgOiAodGhpcy5mb3JtLkZpZWxkcyA/PyBbXSkuZmlsdGVyKGYgPT4geyBpZiAoc2VlblR5cGVzLmhhcyhmLkZpZWxkVHlwZSkpIHJldHVybiBmYWxzZTsgc2VlblR5cGVzLmFkZChmLkZpZWxkVHlwZSk7IHJldHVybiB0cnVlOyB9KS5tYXAoZiA9PiAoeyBMYWJlbDogZi5MYWJlbCwgRmllbGRUeXBlOiBmLkZpZWxkVHlwZSB9KSk7XHJcblxyXG4gICAgY29uc3QgZ3JhcGhpY3NQYXJhbXM6IEVuZFBvaW50RGF0YVBhcmFtc1tdID0gW1xyXG4gICAgICB7IFBhcmFtTmFtZTogJ05hbWUnLCBQYXJhbVZhbHVlOiB0aGlzLmZvcm0uTmFtZSwgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtWydJbiBCb2R5J10gfSxcclxuICAgICAgeyBQYXJhbU5hbWU6ICdEZXNjcmlwdGlvbicsIFBhcmFtVmFsdWU6IHRoaXMuZm9ybS5EZXNjcmlwdGlvbiA/PyBudWxsLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bJ0luIEJvZHknXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogJ1RoZW1lQ1NTJywgUGFyYW1WYWx1ZTogdGhpcy5mb3JtLlRoZW1lQ1NTID8/IG51bGwsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVsnSW4gQm9keSddIH0sXHJcbiAgICAgIHsgUGFyYW1OYW1lOiAnVGl0bGVDU1MnLCBQYXJhbVZhbHVlOiB0aGlzLmZvcm0uVGl0bGVDU1MgPz8gbnVsbCwgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtWydJbiBCb2R5J10gfSxcclxuICAgICAgeyBQYXJhbU5hbWU6ICdGaWVsZHMnLCBQYXJhbVZhbHVlOiBmaWVsZHNUb1NlbmQsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVsnSW4gQm9keSddIH0sXHJcbiAgICAgIHsgUGFyYW1OYW1lOiAnSGludCcsIFBhcmFtVmFsdWU6IGhpbnQgfHwgdGhpcy5idWlsZFJhbmRvbUdyYXBoaWNIaW50KCksIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVsnSW4gQm9keSddIH0sXHJcbiAgICAgIHsgUGFyYW1OYW1lOiAnTW9kZWxJZCcsIFBhcmFtVmFsdWU6IGFpTW9kZWxJZCwgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtWydJbiBCb2R5J10gfSxcclxuICAgICAgLi4uKHNjb3BlID09PSAnbWFpbicgPyBbeyBQYXJhbU5hbWU6ICdNYWluT25seScsIFBhcmFtVmFsdWU6IHRydWUsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVsnSW4gQm9keSddIH1dIDogW10pLFxyXG4gICAgICAuLi4oc2NvcGVGaWVsZFR5cGUgIT0gbnVsbCA/IFt7IFBhcmFtTmFtZTogJ1NpbmdsZUZpZWxkTW9kZScsIFBhcmFtVmFsdWU6IHRydWUsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVsnSW4gQm9keSddIH1dIDogW10pLFxyXG4gICAgXTtcclxuXHJcbiAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuU3BlZWNoVG9HcmFwaGljc0VuZFBvaW50LFxyXG4gICAgICBncmFwaGljc1BhcmFtcyxcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgciA9IHJlcyBhcyB7IFRoZW1lQ1NTPzogc3RyaW5nOyBUaXRsZUNTUz86IHN0cmluZzsgQmdJbWFnZUJhc2U2ND86IHN0cmluZzsgRmllbGRTdHlsZXM/OiB7IFtjc3NDbGFzc05hbWU6IHN0cmluZ106IHsgW3Byb3A6IHN0cmluZ106IHN0cmluZyB9IH07IFdhcm5pbmdzPzogc3RyaW5nW10gfTtcclxuICAgICAgICB0aGlzLmZvcm1HcmFwaGljU3VnZ2VzdExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dGb3JtR3JhcGhpY1N1Z2dlc3RJbnB1dCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAoc2NvcGUgPT09ICdtYWluJykge1xyXG4gICAgICAgICAgLy8gU29sbyBUaGVtZUNTUyBlIFRpdGxlQ1NTXHJcbiAgICAgICAgICBpZiAoci5UaGVtZUNTUyAhPT0gdW5kZWZpbmVkKSB0aGlzLmZvcm0uVGhlbWVDU1MgPSByLlRoZW1lQ1NTID8/IG51bGw7XHJcbiAgICAgICAgICBpZiAoci5UaXRsZUNTUyAhPT0gdW5kZWZpbmVkKSB0aGlzLmZvcm0uVGl0bGVDU1MgPSByLlRpdGxlQ1NTID8/IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzY29wZUZpZWxkVHlwZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAvLyBGaWVsZFN0eWxlcyBkZWwgdGlwbyBzY2VsdG8gYXBwbGljYXRpIGEgVFVUVEkgaSBjYW1waSBkaSBxdWVsIHRpcG8gbmVsIGZvcm0uXHJcbiAgICAgICAgICAvLyBPZ25pIGNhbXBvIHJpY2V2ZSB1bmEgY29waWEgZGlzdGludGE6IHNhZmVDbG9uZSB1c2EgV2Vha1NldCBlIHNhbHRhIG9nZ2V0dGkgZ2nDoCB2aXN0aS5cclxuICAgICAgICAgIGlmIChyLkZpZWxkU3R5bGVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNzc0NsYXNzTmFtZSA9IChFcXBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29tcG9uZW50LkZJRUxEX1RZUEVfQ1NTX0NMQVNTIGFzIGFueSlbc2NvcGVGaWVsZFR5cGVdO1xyXG4gICAgICAgICAgICBpZiAoY3NzQ2xhc3NOYW1lICYmIHIuRmllbGRTdHlsZXNbY3NzQ2xhc3NOYW1lXSkge1xyXG4gICAgICAgICAgICAgICh0aGlzLmZvcm0uRmllbGRzID8/IFtdKS5maWx0ZXIoZiA9PiBmLkZpZWxkVHlwZSA9PT0gc2NvcGVGaWVsZFR5cGUpLmZvckVhY2goZiA9PiB7XHJcbiAgICAgICAgICAgICAgICAoZiBhcyBhbnkpW2Nzc0NsYXNzTmFtZV0gPSB7IC4uLnIuRmllbGRTdHlsZXMhW2Nzc0NsYXNzTmFtZV0gfTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBUdXR0b1xyXG4gICAgICAgICAgaWYgKHIuVGhlbWVDU1MgIT09IHVuZGVmaW5lZCkgdGhpcy5mb3JtLlRoZW1lQ1NTID0gci5UaGVtZUNTUyA/PyBudWxsO1xyXG4gICAgICAgICAgaWYgKHIuVGl0bGVDU1MgIT09IHVuZGVmaW5lZCkgdGhpcy5mb3JtLlRpdGxlQ1NTID0gci5UaXRsZUNTUyA/PyBudWxsO1xyXG4gICAgICAgICAgaWYgKHIuQmdJbWFnZUJhc2U2NCAhPT0gdW5kZWZpbmVkKSB0aGlzLmZvcm0uQmdJbWFnZUJhc2U2NCA9IHIuQmdJbWFnZUJhc2U2NCA/PyBudWxsO1xyXG4gICAgICAgICAgaWYgKHIuRmllbGRTdHlsZXMpIHtcclxuICAgICAgICAgICAgKHRoaXMuZm9ybS5GaWVsZHMgPz8gW10pLmZvckVhY2goZiA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgY3NzQ2xhc3NOYW1lID0gKEVxcER5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb21wb25lbnQuRklFTERfVFlQRV9DU1NfQ0xBU1MgYXMgYW55KVtmLkZpZWxkVHlwZV07XHJcbiAgICAgICAgICAgICAgaWYgKCFjc3NDbGFzc05hbWUpIHJldHVybjtcclxuICAgICAgICAgICAgICBjb25zdCBjc3NPYmogPSByLkZpZWxkU3R5bGVzIVtjc3NDbGFzc05hbWVdO1xyXG4gICAgICAgICAgICAgIGlmIChjc3NPYmogJiYgdHlwZW9mIGNzc09iaiA9PT0gJ29iamVjdCcpIChmIGFzIGFueSlbY3NzQ2xhc3NOYW1lXSA9IHsgLi4uY3NzT2JqIH07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybUNvbXBsZXRlZCkge1xyXG4gICAgICAgICAgdGhpcy5mb3JtQ29tcGxldGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnByZXZpZXdGb3JtID0gbnVsbDtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXRGb3JtU3RhdHVzKHRydWUpLCA1MCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICAgICAgY29uc3Qgc3VjY2Vzc01zZyA9IHNjb3BlID09PSAnbWFpbidcclxuICAgICAgICAgID8gJ0dyYWZpY2EgcHJpbmNpcGFsZSBhcHBsaWNhdGEhJ1xyXG4gICAgICAgICAgOiBzY29wZUZpZWxkVHlwZSAhPSBudWxsXHJcbiAgICAgICAgICAgID8gJ0dyYWZpY2EgYXBwbGljYXRhIGEgdHV0dGkgaSBjYW1waSBkZWwgdGlwbyBzZWxlemlvbmF0byEnXHJcbiAgICAgICAgICAgIDogJ0dyYWZpY2EgYXBwbGljYXRhIGFsIGZvcm0hJztcclxuICAgICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5TdWNjZXNzKHN1Y2Nlc3NNc2cpO1xyXG4gICAgICAgIGlmIChyLldhcm5pbmdzPy5sZW5ndGggPiAwKSBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5XYXJuaW5nKHIuV2FybmluZ3MpO1xyXG4gICAgICB9LFxyXG4gICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICB0aGlzLmZvcm1HcmFwaGljU3VnZ2VzdExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBtc2cgPSAoZXJyb3IgYXMgYW55KT8uZXJyb3I7XHJcbiAgICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuRXJyb3IodHlwZW9mIG1zZyA9PT0gJ3N0cmluZycgJiYgbXNnLnRyaW0oKSA/IG1zZyA6ICdFcnJvcmUgbmVsbGEgZ2VuZXJhemlvbmUgZGVsbGEgZ3JhZmljYScpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIFByb3ByaWV0w6AgcGVyIGNyZWF6aW9uZS9tb2RpZmljYSBjYW1wb1xyXG4gIGZpZWxkc0NvbHVtbnM6IEFycmF5PENvbmZpZ0NvbHVtbj47XHJcbiAgQFZpZXdDaGlsZChcImZpZWxkc1RhYmxlXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBmaWVsZHNUYWJsZTogRXFwVGFibGVDb21wb25lbnQ7XHJcbiAgc2VsZWN0ZWRGaWVsZDogQmFzZUZpZWxkO1xyXG4gIGluZGV4U2VsZWN0ZWRGaWVsZDogbnVtYmVyO1xyXG4gIGFjdGlvbk9uUmVjb3JkRm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG4gIGRpYWxvZ0ZpZWxkUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ0ZpZWxkXCIsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ0ZpZWxkOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJmaWVsZFNlY3Rpb25Db2x1bW5UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGZpZWxkU2VjdGlvbkNvbHVtblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gUHJvcHJpZXTDoCBwZXIgY3JlYXJlL21vZGlmaWNhcmUgdW5hIEZvcm0gZGkgZGV0dGFnbGlvXHJcbiAgc2VsZWN0ZWRJbm5lckZvcm06IEZvcm07XHJcbiAgaW5kZXhTZWxlY3RlZElubmVyRm9ybTogbnVtYmVyO1xyXG4gIGRpYWxvZ0lubmVyRm9ybVJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dJbm5lckZvcm1cIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBkaWFsb2dJbm5lckZvcm06IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgaW5uZXJGb3JtQ29uZmlnOiBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29uZmlnO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gUHJvcHJpZXTDoCBwZXIgY3JlYXJlL21vZGlmaWNhcmUgdW5hIGFjdGlvbiBzdWkgcmVjb3JkIGRpIHVuYSBGb3JtXHJcbiAgYWN0aW9uc09uUmVjb3JkQ29sdW1uczogQXJyYXk8Q29uZmlnQ29sdW1uPjtcclxuICBAVmlld0NoaWxkKFwiYWN0aW9uc09uUmVjb3JkVGFibGVcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgYWN0aW9uc09uUmVjb3JkVGFibGU6IEVxcFRhYmxlQ29tcG9uZW50O1xyXG4gIHNlbGVjdGVkQWN0aW9uOiBBY3Rpb25PblJlY29yZDtcclxuICBpbmRleFNlbGVjdGVkQWN0aW9uOiBudW1iZXI7XHJcbiAgZGlhbG9nQWN0aW9uT25SZWNvcmRSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICBAVmlld0NoaWxkKFwiZGlhbG9nQWN0aW9uT25SZWNvcmRcIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBkaWFsb2dBY3Rpb25PblJlY29yZDogVGVtcGxhdGVSZWY8YW55PjtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIFByb3ByaWV0w6AgcGVyIGNyZWFyZS9tb2RpZmljYXJlIGRlaSBib3R0b25pIGF6aW9uZVxyXG4gIGFjdGlvbkJ1dHRvbnNDb2x1bW5zOiBBcnJheTxDb25maWdDb2x1bW4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJhY3Rpb25CdXR0b25zVGFibGVcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgYWN0aW9uQnV0dG9uc1RhYmxlOiBFcXBUYWJsZUNvbXBvbmVudDtcclxuICBzZWxlY3RlZEFjdGlvbkJ1dHRvbjogQWN0aW9uQnV0dG9uO1xyXG4gIGluZGV4U2VsZWN0ZWRBY3Rpb25CdXR0b246IG51bWJlcjtcclxuICBkaWFsb2dBY3Rpb25CdXR0b25SZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICBAVmlld0NoaWxkKFwiZGlhbG9nQWN0aW9uQnV0dG9uXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgZGlhbG9nQWN0aW9uQnV0dG9uOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBhY3Rpb25CdXR0b25zRm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG4gIGFjdGlvbnNGbGFnID0gQWN0aW9uRmxhZ0VudW07XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50byBlbWVzc28gcXVhbmRvIHNpIHNhbHZhIHVuYSBmb3JtIGUgbm9uIMOoIHN0YXRvIHNwZWNpZmljYXRvIHVuIGVuZHBvaW50IGRhIGNoaWFtYXJlLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBzYXZlRm9ybUV2ZW50OiBFdmVudEVtaXR0ZXI8Rm9ybT4gPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm0+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50byBlbWVzc28gRE9QTyBhdmVyIGVzZWd1aXRvIHVuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIgcGVyIGlsIHNhbHZhdGFnZ2lvZGkgdW5hIGZvcm0gYWxsJ2VuZHBvaW50IHNwZWNpZmljYXRvLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBhZnRlclNhdmVGb3JtRXZlbnQ6IEV2ZW50RW1pdHRlcjxGb3JtPiA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9ybT4oKTtcclxuXHJcbiAgLy8gT3V0IGNvbXBvbmVudGUgZXN0ZXJub1xyXG4gIEBPdXRwdXQoKSBvdXQ6IEV2ZW50RW1pdHRlcjxldmVudE91dD4gPSBuZXcgRXZlbnRFbWl0dGVyPGV2ZW50T3V0PigpO1xyXG5cclxuICAvLyBUcmlnZ2Vyc1xyXG4gIGRpYWxvZ1RyaWdnZXJzUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ1RyaWdnZXJzXCIsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ1RyaWdnZXJzOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIHNlbGVjdGVkVHJpZ2dlcjogVHJpZ2dlcjtcclxuICB0cmlnZ2Vyc0NvbHVtbnM6IEFycmF5PENvbmZpZ0NvbHVtbj47XHJcbiAgQFZpZXdDaGlsZChcInRyaWdnZXJzVGFibGVcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIHRyaWdnZXJzVGFibGU6IEVxcFRhYmxlQ29tcG9uZW50O1xyXG5cclxuICBzaG93QWxsRmllbGRzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd0dyYWZpY2FQYW5lbDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBDb250ZXN0dWFsaXphdGlvblxyXG4gIHNlbGVjdGVkQ29udGVzdHVhbGl6YXRpb246IHN0cmluZyA9IG51bGw7XHJcbiAgc2VsZWN0ZWRDb250ZXN0dWFsaXphdGlvblZhbHVlOiBudW1iZXIgPSBudWxsO1xyXG5cclxuICBzaG93RGVsZXRlQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRGaWVsZHM6IEFycmF5PEJhc2VGaWVsZD4gPSBuZXcgQXJyYXk8QmFzZUZpZWxkPigpO1xyXG5cclxuICAvLyBBSSBFZGl0IGRpYWxvZ1xyXG4gIGRpYWxvZ0FpRWRpdFJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dBaUVkaXRcIiwgeyBzdGF0aWM6IHRydWUgfSkgZGlhbG9nQWlFZGl0OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAvLyBDb250ZXN0dWFsaXp6YXppb25lIGRpYWxvZ1xyXG4gIGRpYWxvZ0NvbnRlc3R1YWxpemF0aW9uUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ0NvbnRlc3R1YWxpemF0aW9uXCIsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ0NvbnRlc3R1YWxpemF0aW9uOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAvLyBWaXN1YWwgRWRpdG9yXHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ1ZlVG9vbHRpcFwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dWZVRvb2x0aXA6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ1ZlUmVvcmRlclwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dWZVJlb3JkZXI6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgdmlzdWFsRWRpdG9yQWN0aXZlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdmVTZWxlY3RlZEZpZWxkOiBCYXNlRmllbGQgfCBudWxsID0gbnVsbDtcclxuICB2ZVN3YXBGaWVsZDogQmFzZUZpZWxkIHwgbnVsbCA9IG51bGw7XHJcbiAgZGlhbG9nVmVUb29sdGlwUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgZGlhbG9nVmVSZW9yZGVyUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgdmVTaG93R3JhcGhpY0lucHV0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgdmVHcmFwaGljSGludDogc3RyaW5nID0gJyc7XHJcbiAgdmVBcHBseVRvQWxsT2ZUeXBlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdmVSZW9yZGVyRmllbGRzOiBCYXNlRmllbGRbXSA9IFtdO1xyXG4gIHByaXZhdGUgdmVHcmFwaGljU3VnZ2VzdEFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBnZXQgdmVTZWxlY3RlZEZpZWxkVHlwZU5hbWUoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGZ0ID0gdGhpcy52ZVNlbGVjdGVkRmllbGQ/LkZpZWxkVHlwZTtcclxuICAgIGlmIChmdCA9PSBudWxsKSByZXR1cm4gJyc7XHJcbiAgICByZXR1cm4gKEVxcER5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb21wb25lbnQuRklFTERfVFlQRV9MQUJFTFMgYXMgYW55KVtmdF0gPz8gYFRpcG8gJHtmdH1gO1xyXG4gIH1cclxuXHJcbiAgYWlFZGl0UHJvbXB0OiBzdHJpbmcgPSBcIlwiO1xyXG4gIGFpRWRpdEF0dGFjaG1lbnRzOiBBcnJheTx7IGZpbGVOYW1lOiBzdHJpbmc7IGJhc2U2NENvbnRlbnQ6IHN0cmluZzsgbWVkaWFUeXBlOiBzdHJpbmcgfT4gPSBbXTtcclxuICBhaUVkaXRBdXRvc2F2ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGFpRWRpdExvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93QWlQcm9tcHRIaXN0b3J5OiBib29sZWFuID0gdHJ1ZTtcclxuICBhaUVkaXRGaWVsZENvbnRleHQ6IHsgY29kZTogc3RyaW5nIH0gfCBudWxsID0gbnVsbDtcclxuICBhaUZpZWxkU3VnZ2VzdExvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmb3JtR3JhcGhpY1N1Z2dlc3RMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZm9ybUdyYXBoaWNTdWdnZXN0SGludDogc3RyaW5nID0gJyc7XHJcbiAgc2hvd0Zvcm1HcmFwaGljU3VnZ2VzdElucHV0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgZm9ybUdyYXBoaWNTY29wZTogc3RyaW5nID0gJ2FsbCc7XHJcbiAgcHJlc2VudEZpZWxkVHlwZU9wdGlvbnM6IHsgdmFsdWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9W10gPSBbXTtcclxuXHJcbiAgLy8gQUkgRGF0YUdldHRlciBzaWxlbnQgbG9hZGluZ1xyXG4gIHBlbmRpbmdBaURhdGFHZXR0ZXJGaWVsZHM6IEJhc2VGaWVsZFtdID0gW107XHJcbiAgY3VycmVudEFpRGF0YUdldHRlckZpZWxkOiBCYXNlRmllbGQgfCBudWxsID0gbnVsbDtcclxuICBhaURhdGFHZXR0ZXJMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGdldCBhaVByb21wdEhpc3RvcnkoKTogc3RyaW5nW10ge1xyXG4gICAgaWYgKCF0aGlzLmZvcm0/LkFJUHJvbXB0cykgcmV0dXJuIFtdO1xyXG4gICAgdHJ5IHsgcmV0dXJuIEpTT04ucGFyc2UodGhpcy5mb3JtLkFJUHJvbXB0cyk7IH0gY2F0Y2ggeyByZXR1cm4gW107IH1cclxuICB9XHJcblxyXG4gIC8vIENvc3RhbnRpIHBlciBsYSBzdGltYSBkZWwgY29zdG8gQUkgKEhhaWt1IDQuNSwgcHJlenppIFVTRC9NVG9rKVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgQUlfTU9ESUZJRVJfU0tJTExfVE9LRU5TID0gMl8wMDA7ICAvLyB0b2tlbiBmaXNzaTogRmxkSnNvbk1vZGlmaWVyU2tpbGwubWRcclxuICBwcml2YXRlIHJlYWRvbmx5IEFJX1RPS0VOU19QRVJfRklFTEQgPSAxMDA7ICAgIC8vIHN0aW1hIHRva2VuIHBlciBjYW1wbyBkZWwgZm9ybSBzZXJpYWxpenphdG9cclxuICBwcml2YXRlIHJlYWRvbmx5IEFJX09VVFBVVF9UT0tFTlMgPSAzXzUwMDsgIC8vIHN0aW1hIGNvbnNlcnZhdGl2YSBvdXRwdXQgSlNPTiBtb2RpZmljYXRvXHJcbiAgcHJpdmF0ZSByZWFkb25seSBBSV9QREZfQ0hBUlMgPSAxNV8wNjA7IC8vIGZpbmVzdHJhIG1heCBlc3RyYXR0YSBwZXIgYWxsZWdhdG8gUERGXHJcbiAgcHJpdmF0ZSByZWFkb25seSBBSV9DSEFSU19QRVJfVE9LRU4gPSA0OyAgICAgIC8vIGNoYXIvdG9rZW4gbWVkaSBwZXIgdGVzdG8gaXRhbGlhbm9cclxuICBwcml2YXRlIHJlYWRvbmx5IEFJX0VVUl9VU0RfUkFURSA9IDEuMTA7ICAgLy8gdGFzc28gRVVSL1VTRCBhcHByb3NzaW1hdG9cclxuXHJcbiAgZ2V0IGFpRWRpdENvc3RGaXJzdEV1cigpOiBudW1iZXIge1xyXG4gICAgY29uc3QgZm9ybVRva2VucyA9ICh0aGlzLmZvcm0/LkZpZWxkcz8ubGVuZ3RoID8/IDApICogdGhpcy5BSV9UT0tFTlNfUEVSX0ZJRUxEO1xyXG4gICAgY29uc3QgdmFySW5wdXQgPSAodGhpcy5haUVkaXRQcm9tcHQ/Lmxlbmd0aCA/PyAwKSAvIHRoaXMuQUlfQ0hBUlNfUEVSX1RPS0VOXHJcbiAgICAgICsgdGhpcy5haUVkaXRBdHRhY2htZW50cy5sZW5ndGggKiAodGhpcy5BSV9QREZfQ0hBUlMgLyB0aGlzLkFJX0NIQVJTX1BFUl9UT0tFTik7XHJcbiAgICBjb25zdCB1c2QgPSAodGhpcy5BSV9NT0RJRklFUl9TS0lMTF9UT0tFTlMgKiAwLjEwICsgKGZvcm1Ub2tlbnMgKyB2YXJJbnB1dCkgKiAwLjA4ICsgdGhpcy5BSV9PVVRQVVRfVE9LRU5TICogMC40MCkgLyAxXzAwMF8wMDA7XHJcbiAgICByZXR1cm4gdXNkIC8gdGhpcy5BSV9FVVJfVVNEX1JBVEU7XHJcbiAgfVxyXG5cclxuICBnZXQgYWlFZGl0Q29zdFN1YnNlcXVlbnRFdXIoKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGZvcm1Ub2tlbnMgPSAodGhpcy5mb3JtPy5GaWVsZHM/Lmxlbmd0aCA/PyAwKSAqIHRoaXMuQUlfVE9LRU5TX1BFUl9GSUVMRDtcclxuICAgIGNvbnN0IHZhcklucHV0ID0gKHRoaXMuYWlFZGl0UHJvbXB0Py5sZW5ndGggPz8gMCkgLyB0aGlzLkFJX0NIQVJTX1BFUl9UT0tFTlxyXG4gICAgICArIHRoaXMuYWlFZGl0QXR0YWNobWVudHMubGVuZ3RoICogKHRoaXMuQUlfUERGX0NIQVJTIC8gdGhpcy5BSV9DSEFSU19QRVJfVE9LRU4pO1xyXG4gICAgY29uc3QgdXNkID0gKHRoaXMuQUlfTU9ESUZJRVJfU0tJTExfVE9LRU5TICogMC4wMDggKyAoZm9ybVRva2VucyArIHZhcklucHV0KSAqIDAuMDggKyB0aGlzLkFJX09VVFBVVF9UT0tFTlMgKiAwLjQwKSAvIDFfMDAwXzAwMDtcclxuICAgIHJldHVybiB1c2QgLyB0aGlzLkFJX0VVUl9VU0RfUkFURTtcclxuICB9XHJcblxyXG4gIGZvcm1hdEFpRWRpdENvc3QoZXVyOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGV1ci50b0ZpeGVkKDYpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzTmV3Rm9ybSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5mb3JtPy5JRDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgdXRpbGl0eUhlbHBlclNlcnZpY2U6IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZlxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydjb25maWd1cmF0b3JUaGVtZSddIHx8IGNoYW5nZXNbJ2NvbmZpZ3VyYXRvclRoZW1lQ3NzJ10pIHtcclxuICAgICAgdGhpcy5hcHBseVRoZW1lKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5VGhlbWUoKTogdm9pZCB7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgY29uc3Qgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcclxuXHJcbiAgICAvLyBSaW11b3ZlIHZhcnMgcHJlY2VkZW50aSBkYWwgaG9zdCBlIGRhIDpyb290XHJcbiAgICBBcnJheS5mcm9tKGVsLnN0eWxlKS5maWx0ZXIocCA9PiBwLnN0YXJ0c1dpdGgoJy0tY29uZi0nKSkuZm9yRWFjaChwID0+IGVsLnN0eWxlLnJlbW92ZVByb3BlcnR5KHApKTtcclxuICAgIEFycmF5LmZyb20ocm9vdC5zdHlsZSkuZmlsdGVyKHAgPT4gcC5zdGFydHNXaXRoKCctLWNvbmYtJykpLmZvckVhY2gocCA9PiByb290LnN0eWxlLnJlbW92ZVByb3BlcnR5KHApKTtcclxuXHJcbiAgICBjb25zdCBwYXJzZWRGcm9tQ3NzID0gdGhpcy5jb25maWd1cmF0b3JUaGVtZUNzcyA/IHRoaXMucGFyc2VDc3NUaGVtZSh0aGlzLmNvbmZpZ3VyYXRvclRoZW1lQ3NzKSA6IG51bGw7XHJcbiAgICBjb25zdCBtZXJnZWQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCBudWxsID0gKHBhcnNlZEZyb21Dc3MgfHwgdGhpcy5jb25maWd1cmF0b3JUaGVtZSlcclxuICAgICAgPyB7IC4uLihwYXJzZWRGcm9tQ3NzID8/IHt9KSwgLi4uKHRoaXMuY29uZmlndXJhdG9yVGhlbWUgPz8ge30pIH1cclxuICAgICAgOiBudWxsO1xyXG5cclxuICAgIGlmIChtZXJnZWQpIHtcclxuICAgICAgT2JqZWN0LmVudHJpZXMobWVyZ2VkKS5mb3JFYWNoKChbaywgdl0pID0+IGVsLnN0eWxlLnNldFByb3BlcnR5KGssIHYsICdpbXBvcnRhbnQnKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUHJvcGFnYSBpIHZhbG9yaSBlZmZldHRpdmkgKFNDU1MgZGVmYXVsdCArIG92ZXJyaWRlIHRlbWEpIHN1IDpyb290IHBlcmNow6kgaSBkaWFsb2dzXHJcbiAgICAvLyBNYXRlcmlhbCByZW5kZXJpenphbm8gbmVsIGNkay1vdmVybGF5IGZ1b3JpIGRhbGwnaG9zdCBlIG5vbiBlcmVkaXRhbm8gbGUgdmFyIGRpIDpob3N0XHJcbiAgICBjb25zdCBjb21wdXRlZCA9IGdldENvbXB1dGVkU3R5bGUoZWwpO1xyXG4gICAgWyctLWNvbmYtZ3JhZGllbnQnLCAnLS1jb25mLWJnLXBhZ2UnLCAnLS1jb25mLXJhZGl1cycsICctLWNvbmYtbW9kYWwtcmFkaXVzJyxcclxuICAgICAgJy0tY29uZi1hY2NlbnQnLCAnLS1jb25mLWFjY2VudC1yZ2InLCAnLS1jb25mLXByaW1hcnknLCAnLS1jb25mLXByaW1hcnktcmdiJyxcclxuICAgICAgJy0tY29uZi1zdGVwLXNlbGVjdGVkJywgJy0tY29uZi1zdGVwLWVkaXQnLCAnLS1jb25mLXRhYmxlLWhlYWRlci1iZycsXHJcbiAgICAgICctLWNvbmYtc2VhcmNoLWJnJywgJy0tY29uZi10YWJsZS1iZycsICctLWNvbmYtY2FyZC1iZycsICctLWNvbmYtZm9udC1mYW1pbHknLFxyXG4gICAgICAnLS1jb25mLXN0ZXBwZXItaGVhZGVyLWJnJywgJy0tY29uZi1zdGVwcGVyLWNvbnRlbnQtYmcnLCAnLS1jb25mLXN0ZXAtaWNvbi1lZGl0LWJnJyxcclxuICAgICAgJy0tY29uZi1oaW50LWJ0bi1iZycsICctLWNvbmYtaGludC1idG4taG92ZXItYmcnLCAnLS1jb25mLWJ0bi1jb2xvcidcclxuICAgIF0uZm9yRWFjaCh2YXJOYW1lID0+IHtcclxuICAgICAgY29uc3QgdmFsdWUgPSBjb21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKHZhck5hbWUpLnRyaW0oKTtcclxuICAgICAgaWYgKHZhbHVlKSByb290LnN0eWxlLnNldFByb3BlcnR5KHZhck5hbWUsIHZhbHVlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwYXJzZUNzc1RoZW1lKGNzczogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XHJcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcclxuICAgIGNvbnN0IHJlZ2V4ID0gLygtLWNvbmYtW146XFxzXSspXFxzKjpcXHMqKFteO31dKykvZztcclxuICAgIGxldCBtYXRjaDogUmVnRXhwRXhlY0FycmF5IHwgbnVsbDtcclxuICAgIHdoaWxlICgobWF0Y2ggPSByZWdleC5leGVjKGNzcykpICE9PSBudWxsKSB7XHJcbiAgICAgIHJlc3VsdFttYXRjaFsxXS50cmltKCldID0gbWF0Y2hbMl0udHJpbSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIC8vIEdhcmFudGlzY2UgY2hlIGxlIHZhcmlhYmlsaSBDU1MgZGkgZGVmYXVsdCAoZGVmaW5pdGUgaW4gOmhvc3QgU0NTUykgdmVuZ2Fub1xyXG4gICAgLy8gcHJvcGFnYXRlIHN1IDpyb290IGFuY2hlIHF1YW5kbyBjb25maWd1cmF0b3JUaGVtZSBub24gw6ggZm9ybml0b1xyXG4gICAgdGhpcy5hcHBseVRoZW1lKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XHJcbiAgICBBcnJheS5mcm9tKHJvb3Quc3R5bGUpLmZpbHRlcihwID0+IHAuc3RhcnRzV2l0aCgnLS1jb25mLScpKS5mb3JFYWNoKHAgPT4gcm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShwKSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdNb2RlID0gdGhpcy5kZWJ1Z01vZGU7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCduZ09uSW5pdCAtIGNvbmZpZ3VyYXRpb25zJywgdGhpcy5jb25maWd1cmF0aW9ucyk7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCduZ09uSW5pdCAtIGZvcm1JRCcsIHRoaXMuZm9ybUlEKTtcclxuXHJcbiAgICB0aGlzLmJhc2VTZXJ2ZXJVcmwgPVxyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnLmJhc2VTZXJ2ZXJVcmw7XHJcbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnLmNvbnRleHQ7XHJcbiAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiA9XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUdlbmVyYWxDb25maWcuZW5kUG9pbnRDb25maWd1cmF0aW9uO1xyXG4gICAgLy8gdGhpcy5mb3JtSUQgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnLmZvcm1JRDtcclxuICAgIHRoaXMudXNlclRva2VuID0gdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlR2VuZXJhbENvbmZpZy51c2VyVG9rZW47XHJcblxyXG4gICAgdGhpcy5mb3JtID1cclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuZm9ybTtcclxuICAgIHRoaXMub3JnYUlEID1cclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcub3JnYUlEO1xyXG4gICAgdGhpcy5Vc2VySUQgPVxyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5Vc2VySUQ7XHJcbiAgICB0aGlzLmlubmVyRm9ybU1hbmFnbWVudCA9XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmlubmVyRm9ybU1hbmFnbWVudDtcclxuICAgIHRoaXMuaW5uZXJGb3JtUmVmID1cclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuaW5uZXJGb3JtUmVmO1xyXG5cclxuICAgIHRoaXMuZm9ybS5PcmdhSUQgPSB0aGlzLm9yZ2FJRDtcclxuXHJcbiAgICB0aGlzLmNvbmZpZ3VyZURlZmF1bHRFbmRQb2ludHMoKTtcclxuICAgIHRoaXMuZ2V0Rm9ybUJ5SUQoKTtcclxuICAgIGlmICh0aGlzLmNvbnRleHQpIHtcclxuICAgICAgVXRpbGl0eUhlbHBlclNlcnZpY2UuU2V0Q29udGV4dCh0aGlzLmNvbnRleHQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjb25maWd1cmFyZSBnbGkgZW5kcG9pbnQgZGEgdXNhcmUgZGkgZGVmYXVsdCBhIHBhcnRpcmUgZGFsbCd1cmwgYmFzZSBkZWwgc2VydmVyXHJcbiAgICogYSBjdWkgc2kgZGV2ZSBjb25uZXR0ZXJlIGUgYWwgdG9rZW4gZGEgcGFzc2FyZSBwZXIgYXV0ZW50aWNhcnNpLlxyXG4gICAqIFNlIGxhIHByb3ByaWV0w6AgYmFzZVNlcnZlclVybCDDqCBudWxsIGUgbm9uIHNvbm8gc3RhdGkgY29uZmlndXJhdGkgaSB2YXJpIGVuZHBvaW50IGFsbG9yYVxyXG4gICAqIG5vbiB2aWVuZSBlc2VndWl0YSBuZXNzdW5hIGNoaWFtYXRhIGh0dHAgcGVyIHJlY3VwZXJhcmUvc2FsdmFyZSBpIGRhdGkuXHJcbiAgICovXHJcbiAgY29uZmlndXJlRGVmYXVsdEVuZFBvaW50cygpIHtcclxuICAgIGlmICghdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiYgdGhpcy5iYXNlU2VydmVyVXJsKSB7XHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uID1cclxuICAgICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLkNvbmZpZ3VyZURlZmF1bHRFbmRQb2ludHMoXHJcbiAgICAgICAgICB0aGlzLmJhc2VTZXJ2ZXJVcmwsXHJcbiAgICAgICAgICB0aGlzLnVzZXJUb2tlblxyXG4gICAgICAgICk7XHJcbiAgICAgIGlmICh0aGlzLmZvcm1JRCkge1xyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludC5QYXJhbXMgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm1JRCxcclxuICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgc3RyaW5nU2FuaXRpemVyKHZhbHVlKSB7XHJcbiAgICBpZiAoIVV0aWxpdHlIZWxwZXJTZXJ2aWNlLnN0cmluZ0NoZWNrUGFyZW50ZXNpcyh2YWx1ZSkpIHtcclxuICAgICAgYWxlcnQoXCJlcnJvcmUhIGVyYW5vIHByZXNlbnRpIGRlbGxlIHBhcmVudGVzaS5cIik7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuICB9XHJcbiAgc2V0TmFtZShOYW1lOiBzdHJpbmcpIHtcclxuICAgIGlmICghdGhpcy5zdHJpbmdTYW5pdGl6ZXIoTmFtZSkpIHtcclxuICAgICAgY29uc3QgUmVnRXhwUGFyZXRlc2lzID0gL1tcXChcXClcXFtcXF1cXHtcXH1dL2c7XHJcbiAgICAgIC8vIFJpbXVvdmkgdHV0dGUgbGUgcGFyZW50ZXNpIG5vbiBiaWxhbmNpYXRlXHJcbiAgICAgIHRoaXMuZm9ybS5OYW1lID0gTmFtZS5yZXBsYWNlKFJlZ0V4cFBhcmV0ZXNpcywgJycpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZm9ybS5JRCA9PSBudWxsKSB7IC8vIHRoaXMuZm9ybS5Db2RlID09IG51bGwgfHwgdGhpcy5mb3JtLkNvZGUgPT0gdW5kZWZpbmVkIHx8IHRoaXMuZm9ybS5Db2RlID09IFwiXCIgKXtcclxuICAgICAgdGhpcy5zZXRDb2RlKHRoaXMuZm9ybS5OYW1lKTtcclxuICAgIH1cclxuICB9XHJcbiAgc2V0Q29kZShDb2RlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc3RyaW5nU2FuaXRpemVyKENvZGUpO1xyXG5cclxuICAgIGNvbnN0IFJlZ0V4cFBsYWluID0gL1teXFx3XS9nO1xyXG4gICAgdGhpcy5mb3JtLkNvZGUgPSBDb2RlLnRvVXBwZXJDYXNlKCkucmVwbGFjZShSZWdFeHBQbGFpbiwgXCJcIik7XHJcbiAgfVxyXG4gIG9taXRfc3BlY2lhbF9jaGFyKGV2ZW50KSB7XHJcbiAgICB2YXIgaztcclxuICAgIGsgPSBldmVudC5rZXlDb2RlOyAvLyAgICAgICAgIGsgPSBldmVudC5rZXlDb2RlOyAgKEJvdGggY2FuIGJlIHVzZWQpXHJcbiAgICBpZiAoayA9PSAzNCkge1xyXG4gICAgICBldmVudC5rZXlDb2RlID0gMDtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyogSU1QT1JUIEZVTkNUSU9OICovXHJcbiAgb25JbXBvcnQoZXZlbnQpIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkRmlsZSA9IGV2ZW50LnRhcmdldC5maWxlc1swXTtcclxuICAgIGNvbnN0IGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgZmlsZVJlYWRlci5yZWFkQXNUZXh0KHNlbGVjdGVkRmlsZSwgXCJVVEYtOFwiKTtcclxuICAgIGZpbGVSZWFkZXIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdvbkltcG9ydCAtIGZpbGVSZWFkZXIucmVzdWx0LnRvU3RyaW5nKCknLCBmaWxlUmVhZGVyLnJlc3VsdC50b1N0cmluZygpKTtcclxuICAgICAgdGhpcy5pbXBvcnRlZE1vZHVsZSA9IGZpbGVSZWFkZXIucmVzdWx0LnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5pbXBvcnRlZE1vZHVsZSAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKGNvbmZpcm0oXCJzdGFpIHBlciBzb3ZyYXNjcml2ZXJlIGlsIG1vZHVsb1wiKSkge1xyXG4gICAgICAgICAgLy8gY2hpYW1vIGlsIHBhcnNlIGNvc8OsIGRhIG5vbiBjcmVhcmUgdW4gcmVmZXJlbmNlQmluZGluZ1xyXG4gICAgICAgICAgdmFyIGltcG9ydGVkRm9ybTogRm9ybSA9IEpTT04ucGFyc2UodGhpcy5pbXBvcnRlZE1vZHVsZSk7XHJcbiAgICAgICAgICBpbXBvcnRlZEZvcm0uSUQgPSBcIlwiO1xyXG4gICAgICAgICAgaW1wb3J0ZWRGb3JtLk5hbWUgPSBpbXBvcnRlZEZvcm0uTmFtZSArIFwiIChJbXBvcnRhdG8pXCI7XHJcblxyXG4gICAgICAgICAgaW1wb3J0ZWRGb3JtID0gdGhpcy5zZXRJbXBvcnRlZEZvcm0oaW1wb3J0ZWRGb3JtKTtcclxuICAgICAgICAgIHRoaXMuc2V0Rm9ybUFuZENvbmZpZ3VyZShpbXBvcnRlZEZvcm0pO1xyXG4gICAgICAgICAgdGhpcy5zZXROYW1lKGltcG9ydGVkRm9ybS5OYW1lKTtcclxuXHJcbiAgICAgICAgICB0aGlzLmNsb3NlSW1wb3J0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGFsZXJ0KFwic2VsZXppb25hIHVuIGZpbGVcIik7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICBmaWxlUmVhZGVyLm9uZXJyb3IgPSAoZXJyb3IpID0+IHtcclxuICAgICAgYWxlcnQoXCJzZWxlemlvbmEgdW4gZmlsZSB2YWxpZG8gbyBjb250cm9sbGEgY2hlIG5vbiBzaWEgY29ycm90dG9cIik7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHNldEltcG9ydGVkRm9ybShmb3JtOiBGb3JtKSB7XHJcblxyXG4gICAgLy8gTW9kaWZpY2EgZGVsIGNyZWF0aW9uIHVzZXIgc3UgSW1wb3J0XHJcbiAgICBmb3JtLkNyZWF0aW9uVXNlciA9IHRoaXMuVXNlcklEO1xyXG5cclxuICAgIC8vIE1vZGlmaWNhIGRlaSBGaWVsZCBzdSBJbXBvcnRcclxuICAgIGZvcm0uRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgIGlmIChmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVtcIkVsZW5jbyBpbW1hZ2luaVwiXSkge1xyXG4gICAgICAgIChmaWVsZCBhcyBJbWFnZVNlbGVjdG9yRmllbGQpLkF0dGFjaG1lbnRMaXN0LmZvckVhY2goKGF0dGFjaG1lbnQpID0+IHtcclxuICAgICAgICAgIGF0dGFjaG1lbnQuSUQgPSAwO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGZvcm07XHJcbiAgfVxyXG5cclxuICBpbXBvcnRNb2R1bGUoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ0ltcG9ydFJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dJbXBvcnQsIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgLy8gd2lkdGg6IFwiNzUlXCIsXHJcbiAgICAgIC8vIG1heEhlaWdodDogXCI4MCVcIixcclxuICAgICAgLy8gaGVpZ2h0OiBcIjgwJVwiLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZUltcG9ydCgpIHtcclxuICAgIHRoaXMuZGlhbG9nSW1wb3J0UmVmLmNsb3NlKCk7XHJcbiAgfVxyXG4gIC8qIEVORCBJTVBPUlQgRlVOQ1RJT04gKi9cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bnppb25lIGRpIGVzcG9ydGF6aW9uZSBtb2R1bG9cclxuICAgKi9cclxuXHJcbiAgZXhwb3J0KCkge1xyXG5cclxuICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPVxyXG4gICAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybUlELFxyXG4gICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkV4cG9ydEJ5SURFbmRQb2ludCxcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgKGJhc2U2NHJlczogc3RyaW5nKSA9PiB7XHJcblxyXG4gICAgICAgIGNvbnN0IG5ld0Jsb2IgPSBuZXcgQmxvYihbYmFzZTY0cmVzXSwgeyB0eXBlOiBcInRleHQvcGxhaW5cIiB9KTtcclxuICAgICAgICBjb25zdCBkYXRhID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobmV3QmxvYik7XHJcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgIGxpbmsuaHJlZiA9IGRhdGE7XHJcbiAgICAgICAgbGluay5kb3dubG9hZCA9IFwiZXhwb3J0X1wiICsgdGhpcy5mb3JtSUQgKyBcIl9mb3JtLnR4dFwiOyAvLyBzZXQgYSBuYW1lIGZvciB0aGUgZmlsZVxyXG4gICAgICAgIGxpbmsuY2xpY2soKTtcclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnIpID0+IHtcclxuICAgICAgICB0aGlzLnNldEZvcm1BbmRDb25maWd1cmUobmV3IEZvcm0oKSk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByZWN1cGVyYXJlIHR1dHRpIGkgcmVjb3JkIHNhbHZhdGkgcGVyIHVuYSBwYXJ0aWNvbGFyZSBGb3JtLlxyXG4gICAqIExhIGNoaWFtYXRhIHZpZW5lIGVmZmV0dHVhdGEgc29sbyBzZSDDqCBzdGF0byBjb25maWd1cmF0byBsJ2VuZFBvaW50IGRhIHVzYXJlLlxyXG4gICAqL1xyXG4gIGdldEZvcm1CeUlEKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmZvcm1JRCAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3JtcyAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlERW5kUG9pbnRcclxuICAgICkge1xyXG4gICAgICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID1cclxuICAgICAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybUlELFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50LFxyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZXRGb3JtQW5kQ29uZmlndXJlKHJlcyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNldEZvcm1BbmRDb25maWd1cmUobmV3IEZvcm0oKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRGb3JtQW5kQ29uZmlndXJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb25maWd1cm8gbCdleHBvcnQgZGVsIGZvcm1cclxuICAgKi9cclxuXHJcbiAgY29uZmlndXJlRXhwb3J0KHJlczogRm9ybSkge1xyXG5cclxuICAgIC8qIGdldHRpbmcgcmVhZHkgZm9yIGV4cG9ydCAqL1xyXG4gICAgbGV0IGNsb25lID0gbmV3IEZvcm0oKTtcclxuICAgIGNsb25lLkNvZGUgPSBcIklNUE9SVF9cIiArIHJlcy5Db2RlO1xyXG4gICAgY2xvbmUuTmFtZSA9IFwiaW1wb3J0X1wiICsgcmVzLk5hbWU7XHJcbiAgICBjbG9uZS5EZXNjcmlwdGlvbiA9IHJlcy5EZXNjcmlwdGlvbjtcclxuICAgIGNsb25lLkZvcm1TY2FsYXJUeXBlID0gcmVzLkZvcm1TY2FsYXJUeXBlO1xyXG4gICAgY2xvbmUuRm9ybUZpZWxkc0dyb3VwcyA9IHJlcy5Gb3JtRmllbGRzR3JvdXBzO1xyXG4gICAgY2xvbmUuQWN0aW9uc09uUmVjb3JkID0gcmVzLkFjdGlvbnNPblJlY29yZDtcclxuICAgIGNsb25lLkZpZWxkcyA9IHJlcy5GaWVsZHM7XHJcbiAgICBjbG9uZS5PYmplY3RGaWVsZHMgPSByZXMuT2JqZWN0RmllbGRzO1xyXG4gICAgY2xvbmUuSW5uZXJGb3JtcyA9IHJlcy5Jbm5lckZvcm1zO1xyXG4gICAgY2xvbmUuUm9vdEVudGl0eUlEID0gcmVzLlJvb3RFbnRpdHlJRDtcclxuICAgIGNsb25lLk9yZ2FJRCA9IHJlcy5PcmdhSUQ7XHJcblxyXG4gICAgdGhpcy5kb3dubG9hZE5hbWUgPSBcImV4cG9ydF9cIiArIHJlcy5OYW1lO1xyXG4gICAgdGhpcy5zdHJpbmdpZmllZEZvcm0gPSBKU09OLnN0cmluZ2lmeShjbG9uZSk7XHJcbiAgICB0aGlzLmRvd25sb2FkSnNvbkhyZWYgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKFxyXG4gICAgICBcImRhdGE6dGV4dC9qc29uO2NoYXJzZXQ9VVRGLTgsXCIgK1xyXG4gICAgICBlbmNvZGVVUklDb21wb25lbnQodGhpcy5zdHJpbmdpZmllZEZvcm0pXHJcbiAgICApO1xyXG5cclxuICAgIC8qIGVuZCBleHBvcnQgKi9cclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gaW52b2NhdG8gYWwgY2FtYmlvIGRlbCB0aXBvIGRpIHZpc3VhbGl6emF6aW9uZSBkZWxsYSBmb3JtLlxyXG4gICAqIFNlIGwndXRlbnRlIHNjZWdsaWUgdW5hIHZpc3VhbGl6emF6aW9uZSByYWdncnVwcGF0YSBpbCBtZXRvZG8gYWdnaXVuZ2UgYWwgRm9ybUdyb3VwIHVuIG51b3ZvXHJcbiAgICogY29udHJvbGxvIHBlciBsJ2FycmF5IGRlaSBub21pIGRlbGxlIHNlemlvbmkgZGEgY3JlYXJlLlxyXG4gICAqL1xyXG4gIG9uQ2hhbmdlRm9ybVNjYWxhclR5cGUoKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtLkZvcm1TY2FsYXJUeXBlICE9IEZvcm1TY2FsYXJUeXBlRW51bS5TZW1wbGljZSkge1xyXG4gICAgICBpZiAoIXRoaXMuZm9ybUZvcm1Hcm91cC5jb250YWlucyhcIkZvcm1GaWVsZHNHcm91cHNcIikpIHtcclxuICAgICAgICB0aGlzLmZvcm1Gb3JtR3JvdXAucmVtb3ZlQ29udHJvbChcIkZvcm1GaWVsZHNHcm91cHNcIik7XHJcbiAgICAgICAgdGhpcy5mb3JtRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIkZvcm1GaWVsZHNHcm91cHNcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wodGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMsIFtcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgQXJyYXlWYWxpZGF0b3JzLm1pbkxlbmdodCgxKSxcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMgPSBudWxsO1xyXG4gICAgICBpZiAodGhpcy5mb3JtRm9ybUdyb3VwLmNvbnRhaW5zKFwiRm9ybUZpZWxkc0dyb3Vwc1wiKSlcclxuICAgICAgICB0aGlzLmZvcm1Gb3JtR3JvdXAucmVtb3ZlQ29udHJvbChcIkZvcm1GaWVsZHNHcm91cHNcIik7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZvcm1Gb3JtR3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5jb25maWd1cmVDb2x1bW5zKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFdmVudG8gaW52b2NhdG8gYWwga2V5dXAgbmVsbCdpbnB1dCBwZXIgaW5zZXJpcmUgaSBub21pIGRlbGxlIHNlemlvbmkgcGVyIGxhIHZpc3VhbGl6emF6aW9uZVxyXG4gICAqIHJhZ2dydXBwYXRhIGRlbGxhIGZvcm0uIFF1YW50byBsJ3V0ZW50ZSBwcmVtZSBpbCB0YXN0byBpbnZpbyB2aWVuZSBhZ2dpdW50byBpbCBudW92byBub21lIGFsbGVcclxuICAgKiBzZXppb25pIGRpc3BvYmlsaSBzZSBub24gbmUgZXNpc3RlIHVuYSBjb24gbG8gc3Rlc3NvIG5vbWUuXHJcbiAgICogQHBhcmFtIGV2ZW50IEV2ZW50byBjaGUgcmFwcHJlc2VudGEgaWwga2V5dXAgc3VsbGEgdGFzdGllcmEuXHJcbiAgICovXHJcbiAgb25Gb3JtRmllbGRHcm91cE5hbWVLZXlVcChldmVudCkge1xyXG4gICAgaWYgKGV2ZW50LmNvZGUgPT09IFwiRW50ZXJcIiB8fCBldmVudC5jb2RlID09PSBcIk51bXBhZEVudGVyXCIpIHtcclxuICAgICAgaWYgKCF0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3Vwcykge1xyXG4gICAgICAgIHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzID0gbmV3IEFycmF5PEZvcm1GaWVsZEdyb3VwPigpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICAhdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMuZmluZChcclxuICAgICAgICAgIChuKSA9PiBuLk5hbWUgPT0gdGhpcy5mb3JtRmllbGRHcm91cE5hbWVcclxuICAgICAgICApXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzLnB1c2goeyBOYW1lOiB0aGlzLmZvcm1GaWVsZEdyb3VwTmFtZSB9KTtcclxuICAgICAgfVxyXG4gICAgICAvLyBJbXBvc3RvIGlsIG51b3ZvIHZhbG9yZSBkZWwgRm9ybUNvbnRyb2wgcGVyIGFnZ2lvcm5hcmUgbG8gc3RhdG8gZGVsbGEgZm9ybS5cclxuICAgICAgdGhpcy5mb3JtRm9ybUdyb3VwLmNvbnRyb2xzW1wiRm9ybUZpZWxkc0dyb3Vwc1wiXS5zZXRWYWx1ZShcclxuICAgICAgICB0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3Vwc1xyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmZvcm1GaWVsZEdyb3VwTmFtZSA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2V0Rm9ybUZpZWxkR3JvdXBPcmRpbmFsUG9zaXRpb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmltdW92ZXJlIGxhIHNlemlvbmUgc2VsZXppb25hdGEgZGEgcXVlbGxlIGRpc3BvbmliaWxpIHBlciBsYSBmb3JtLlxyXG4gICAqIEBwYXJhbSBncm91cE5hbWUgTm9tZSBkZWxsYSBzZXppb25lIGRhIGVsaW1pbmFyZS5cclxuICAgKi9cclxuICBvbkRlbGV0ZUZvcm1GaWVsZEdyb3VwTmFtZShncm91cE5hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMuc3BsaWNlKFxyXG4gICAgICB0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3Vwcy5maW5kSW5kZXgoKGcpID0+IGcuTmFtZSA9PT0gZ3JvdXBOYW1lKSxcclxuICAgICAgMVxyXG4gICAgKTtcclxuICAgIC8vIEltcG9zdG8gaWwgbnVvdm8gdmFsb3JlIGRlbCBGb3JtQ29udHJvbCBwZXIgYWdnaW9ybmFyZSBsbyBzdGF0byBkZWxsYSBmb3JtLlxyXG4gICAgdGhpcy5mb3JtRm9ybUdyb3VwLmNvbnRyb2xzW1wiRm9ybUZpZWxkc0dyb3Vwc1wiXS5zZXRWYWx1ZShcclxuICAgICAgdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHNcclxuICAgICk7XHJcbiAgICAvLyBTZSBlc2lzdG9ubyBGaWVsZCBsZWdhdGkgYWxsYSBzZXppb25lIGNoZSBzaSB2dW9sZSBlbGltaW5hcmUgYWxsb3JhIHJvbXBvIGlsIGxlZ2FtZS5cclxuICAgIGlmICh0aGlzLmZvcm0uRmllbGRzLmZpbmQoKGYpID0+IGYuRmllbGRHcm91cCA9PSBncm91cE5hbWUpKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5GaWVsZHMuZmlsdGVyKChmKSA9PiBmLkZpZWxkR3JvdXAgPT0gZ3JvdXBOYW1lKS5mb3JFYWNoKFxyXG4gICAgICAgIChmKSA9PiAoZi5GaWVsZEdyb3VwID0gbnVsbClcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0Rm9ybUZpZWxkR3JvdXBPcmRpbmFsUG9zaXRpb24oKTtcclxuICB9XHJcblxyXG5cclxuICBvbkVkaXRGb3JtRmllbGRHcm91cE5hbWUoZm9ybUZpZWxkR3JvdXA6IEZvcm1GaWVsZEdyb3VwKSB7XHJcblxyXG4gICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuUHJvbXB0KFxyXG4gICAgICBcIk1vZGlmaWNhIGlsIG5vbWVcIixcclxuICAgICAgKG5hbWUpID0+IHtcclxuICAgICAgICBmb3JtRmllbGRHcm91cC5OYW1lID0gbmFtZTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgfVxyXG5cclxuICAvKiogQ2xvbmEgdW4gb2dnZXR0byBlc2NsdWRlbmRvIHJpZmVyaW1lbnRpIGNpcmNvbGFyaSBlIEZvcm1Gb3JtR3JvdXAgKi9cclxuICBwcml2YXRlIHNhZmVDbG9uZTxUPihvYmo6IFQpOiBUIHtcclxuICAgIGNvbnN0IHNlZW4gPSBuZXcgV2Vha1NldCgpO1xyXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqLCAoa2V5LCB2YWx1ZSkgPT4ge1xyXG4gICAgICBpZiAoa2V5ID09PSAnRm9ybUZvcm1Hcm91cCcpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHNlZW4uaGFzKHZhbHVlKSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICBzZWVuLmFkZCh2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoaWFtYXRvIHF1YW5kbyBzaSB2dW9sZSBhZ2dpdW5nZXJlIHVuIG51b3ZvIGNhbXBvIG8gc2kgdnVvbGUgbW9kaWZpY2FyZSB1bm8gZXNpc3RlbnRlLlxyXG4gICAqIE1lbW9yaXp6YSBsJ2V2ZW50dWFsZSBGaWVsZCBzY2VsdG8gb25lIGNyZWEgdW5vIG51b3ZvIHByaW1hIGRpIGFwcmlyZSBpbCBkaWFsb2cgcGVyIG1vZGlmaWNhcmxvL2FnZ2l1bmdlcmxvLlxyXG4gICAqIEBwYXJhbSBmaWVsZCBPZ2dldHRvIEJhc2VGaWVsZCBkYSBtb2RpZmljYXJlLiBTZSBudWxsIG5lIHZpZW5lIGNyZWF0YSB1bmEgbnVvdmEgaXN0YW56YSBwZXIgbCdhZ2dpdW50YS5cclxuICAgKi9cclxuICBvcGVuRmllbGREaWFsb2coZmllbGQ6IEJhc2VGaWVsZCA9IG51bGwpIHtcclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwib3BlbkZpZWxkRGlhbG9nXCIsIGZpZWxkKTtcclxuXHJcbiAgICBpZiAoZmllbGQpIHtcclxuICAgICAgdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgPSB0aGlzLmZvcm0uRmllbGRzLmluZGV4T2YoZmllbGQpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmllbGQgPSB0aGlzLnNhZmVDbG9uZShmaWVsZCk7XHJcblxyXG4gICAgICAvLyBEYXRvIGNoZSBjb24gaWwgSlNPTi5wYXJzZSBzaSBwZXJkZSBwZXIgc3RyYWRhIGxhIGZvcm11bGEsIGxhIHJpbWV0dG8gZG9wby5cclxuICAgICAgLy8gVGFudG8gb3JhbWFpIGlsIHJpZmVyaW1lbnRvIGNvbiBcImZpZWxkXCIgw6ggc3RhdG8gcGVyc28gZSBzdGlhbW8gcGFzc2FuZG8gdW5hIHN0cmluZ2FcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkLkZvcm11bGEgPSBmaWVsZC5Gb3JtdWxhO1xyXG5cclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRGaWVsZC5BbnN3ZXJTdHlsZSA9PSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkLkFuc3dlclN0eWxlID0geyBJbkxpc3RWaWV3OiB0cnVlLCBWaXNpYmxlSWY6IG51bGwsIEZpZWxkc3R5bGVDU1M6IFwiXCIsIExhYmVsc3R5bGVDU1M6IFwiXCIsIENvbFNwYW5TaXplczogW10sIEludmlzaWJpbGl0eTogRmllbGRJbnZpc2liaWxpdHlFbnVtLk5BU0NPU1RPIH07XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWVsZCA9IG5ldyBCYXNlRmllbGQoKTtcclxuICAgICAgdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgPSBudWxsO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRpYWxvZ0ZpZWxkUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0ZpZWxkLCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBcIjc1JVwiLFxyXG4gICAgICBoZWlnaHQ6IFwiODAlXCIsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgc2FsdmEgaWwgY2FtcG8gYXBwZW5hIGNyZWF0byBvIG1vZGlmaWNhdG8uXHJcbiAgICogUHJpbWEgZGVsIHNhbHZhdGFnZ2lvIGNvbnRyb2xsYSBzZSBlc2lzdGUgdW4gYWx0cm8gY2FtcG8gY29uIGxhIHN0ZXNzYSBsYWJlbCwgaW4gcXVlc3RvXHJcbiAgICogY2FzZSBnZW5lcmUgdW4gZXJyb3JlIChpIGNhbXBpIGRldm9ubyBhdmVyZSBub21pLCBlIHF1aW5kaSBsYWJlbCwgdW5pdm9jaGUgLSBpIG5vbWkgdmVuZ29ub1xyXG4gICAqIHJpY2F2YXRpIHVuZW5kbyBsZSBwYXJvbGUgY2hlIGZvcm1hbm8gbGEgbGFiZWwgdHJhbWl0ZSBcIl9cIikuXHJcbiAgICogQHBhcmFtIGZpZWxkIENhbXBvIGRhIHNhbHZhcmVcclxuICAgKiBAcGFyYW0gcmVvcGVuIHNlIHByZXNlbnRlIHJpYXByZSBsYSBkaWFsb2cgZGkgbW9kaWZpY2EgZGVsIGNhbXBvIHBlc2NhbmRvIGRhbGxhIGxpc3RhIGlsIHByb3NzaW1vIGluIGNhc28gZGkgdmFsb3JlIFsxXSBvIGlsIHByZWNlZGVudGUgaW4gY2FzbyBkaSB2YWxvcmUgWy0xXVxyXG4gICAqL1xyXG4gIG9uU2F2ZUZpZWxkKGV2OiB7IGZpZWxkOiBCYXNlRmllbGQsIHJlb3BlbjogbnVtYmVyIH0pIHtcclxuICAgIGxldCBmaWVsZCA9IGV2LmZpZWxkO1xyXG4gICAgbGV0IHJlb3BlbiA9IGV2LnJlb3BlbjtcclxuXHJcbiAgICAvLyBzZSBjJ8OoIGlsIGNhbXBvXHJcbiAgICBpZiAoZmllbGQpIHtcclxuICAgICAgLy8gY29udHJvbGxvIGNoZSBub24gY2kgc2lhIHVuIGFsdHJvIGNhbXBvIGNvbiBsbyBzdGVzc28gY29kZSAobGFiZWwpIGUgbm9uIHNpYSBlc3NvIHN0ZXNzb1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5mb3JtLkZpZWxkcyAmJlxyXG4gICAgICAgIHRoaXMuZm9ybS5GaWVsZHMuZmluZChcclxuICAgICAgICAgIChmLCBpKSA9PlxyXG4gICAgICAgICAgICBmLkxhYmVsID09PSBmaWVsZC5MYWJlbCAmJlxyXG4gICAgICAgICAgICAodGhpcy5pbmRleFNlbGVjdGVkRmllbGQgPT0gbnVsbFxyXG4gICAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICAgIDogdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgIT09IGkpXHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5XYXJuaW5nKFxyXG4gICAgICAgICAgXCJJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgY2FtcGkgY29uIGxvIHN0ZXNzbyBDb2RpY2UuXCJcclxuICAgICAgICApO1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkltcG9zc2liaWxlIGluc2VyaXJlIGR1ZSBjYW1waSBjb24gbG8gc3Rlc3NvIENvZGljZS5cIik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHNlIGhvIHVuIGluZGljZSBpbiBjdWkgaW5zZXJpcmUgaWwgY2FtcG8gKHZlcm9zaW1pbG1lbnRlIHNvbm8gaW4gbW9kaWZpY2EpXHJcbiAgICAgIGlmICh0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCAhPSBudWxsICYmIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID49IDApIHtcclxuICAgICAgICB0aGlzLmZvcm0uRmllbGRzW3RoaXMuaW5kZXhTZWxlY3RlZEZpZWxkXSA9IGZpZWxkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIMOoIHVuIGNhbXBvIG51b3ZvXHJcbiAgICAgICAgaWYgKCF0aGlzLmZvcm0uRmllbGRzKSB7XHJcbiAgICAgICAgICAvLyBzZSDDqCBpbCBwcmltbyBjYW1wbyBjaGUgc3RvIGluc2VyZW5kbyBwcmVwYXJvIHVuIGFycmF5XHJcbiAgICAgICAgICB0aGlzLmZvcm0uRmllbGRzID0gbmV3IEFycmF5PEJhc2VGaWVsZD4oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mb3JtLkZpZWxkcy5wdXNoKGZpZWxkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJvblNhdmVGaWVsZFwiLCB0aGlzLmZvcm0pXHJcbiAgICB0aGlzLmNsb3NlRmllbGREaWFsb2coKTtcclxuICAgIHRoaXMuc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKTtcclxuICAgIHRoaXMucmVsb2FkRmllbGRzVGFibGUoKTtcclxuICAgIHRoaXMucmVmcmVzaEZpZWxkVHlwZU9wdGlvbnMoKTtcclxuXHJcbiAgICBpZiAocmVvcGVuICE9IDApIHtcclxuICAgICAgbGV0IG5ld0ZpZWxkID0gdGhpcy5mb3JtLkZpZWxkc1t0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCArIHJlb3Blbl07XHJcbiAgICAgIHRoaXMub3BlbkZpZWxkRGlhbG9nKG5ld0ZpZWxkKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnZpc3VhbEVkaXRvckFjdGl2ZSkge1xyXG4gICAgICB0aGlzLnJlZnJlc2hQcmV2aWV3KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hlIGNvbnRyb2xsYSBzZSBsbyBzdGVwIHBlciBsJ2FnZ2l1bnRhIGRlaSBjYW1waSBuZWxsYSBmb3JtIMOoIGNvbmNsdXNvLlxyXG4gICAqIEByZXR1cm5zIFNlIFRSVUUgbG8gc3RlcCB2aWVuZSBjb25zaWRlcmF0byBjb21wbGV0YXRvIGVkIMOoIHBvc3NiaWxlIHBhc3NhcmUgYWwgc3VjY2Vzc2l2by5cclxuICAgKi9cclxuICBpc0ZpZWxkU3RlcENvbXBsZXRlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5mb3JtLkZpZWxkcykge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2UgJiZcclxuICAgICAgdGhpcy5mb3JtLkZpZWxkcy5maW5kKChmKSA9PiAhZi5GaWVsZEdyb3VwKVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmZvcm0uRmllbGRzLmxlbmd0aCA+IDA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGFwcmlyZSBpbCBkaWFsb2cgZGkgY3JlYXppb25lL21vZGlmaWNhIGRlbGxlIGZvcm0gZGkgZGV0dGFnbGlvLlxyXG4gICAqIFNlIGlsIHBhcmFtZXRybyBwYXNzYXRvIMOoIG51bGwgc29ubyBpbiBhZ2dpdW50YSBhbHRyaW1lbnRpIHNvbm8gaW4gbW9kaWZpY2EuXHJcbiAgICogQHBhcmFtIGlubmVuckZvcm0gRm9ybSBkaSBkZXR0YWdsaW8gZGEgbW9kaWZpY2FyZSAoc2UgbnVsbCBhbGxvcmEgdmFkbyBpbiBhZGQpLlxyXG4gICAqL1xyXG4gIG9wZW5Jbm5lckZvcm1EaWFsb2coaW5uZW5yRm9ybTogRm9ybSA9IG51bGwpIHtcclxuICAgIHRoaXMuaW5uZXJGb3JtQ29uZmlnID0gbmV3IER5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb25maWcoKTtcclxuICAgIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5pbm5lckZvcm1NYW5hZ21lbnQgPVxyXG4gICAgICB0cnVlO1xyXG4gICAgLy8gdGhpcy5pbm5lckZvcm1Db25maWcuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmZvcm1cclxuICAgIC8vIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5mb3JtLk9sZE5hbWVcclxuICAgIC8vIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5pbm5lckZvcm1SZWZcclxuICAgIC8vIFtmb3JtXT1cInNlbGVjdGVkSW5uZXJGb3JtXCJcclxuICAgIC8vIFtpbm5lckZvcm1NYW5hZ21lbnRdPVwidHJ1ZVwiXHJcbiAgICAvLyBbaW5uZXJGb3JtUmVmXT1cImRpYWxvZ0lubmVyRm9ybVJlZlwiXHJcblxyXG4gICAgaWYgKGlubmVuckZvcm0pIHtcclxuICAgICAgdGhpcy5pbmRleFNlbGVjdGVkSW5uZXJGb3JtID0gdGhpcy5mb3JtLklubmVyRm9ybXMuaW5kZXhPZihpbm5lbnJGb3JtKTtcclxuXHJcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRJbm5lckZvcm0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGlubmVuckZvcm0pKTtcclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZElubmVyRm9ybS5PbGROYW1lID0gaW5uZW5yRm9ybS5OYW1lO1xyXG4gICAgICB0aGlzLmlubmVyRm9ybUNvbmZpZy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuZm9ybSA9XHJcbiAgICAgICAgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpbm5lbnJGb3JtKSk7XHJcbiAgICAgIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5mb3JtLk9sZE5hbWUgPVxyXG4gICAgICAgIGlubmVuckZvcm0uTmFtZTtcclxuXHJcbiAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID0gdGhpcy5mb3JtLkZpZWxkcy5maW5kSW5kZXgoXHJcbiAgICAgICAgKGYpID0+IGYuTGFiZWwgPT09IGlubmVuckZvcm0uTmFtZVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZElubmVyRm9ybSA9IG5ldyBGb3JtKCk7XHJcbiAgICAgIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5mb3JtID1cclxuICAgICAgICBuZXcgRm9ybSgpO1xyXG4gICAgICB0aGlzLmluZGV4U2VsZWN0ZWRJbm5lckZvcm0gPSBudWxsO1xyXG4gICAgICB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLmRpYWxvZ0lubmVyRm9ybVJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dJbm5lckZvcm0sIHtcclxuXHJcbiAgICB0aGlzLmlubmVyRm9ybUNvbmZpZy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuaW5uZXJGb3JtUmVmID1cclxuICAgICAgdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0lubmVyRm9ybSwge1xyXG4gICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgICB3aWR0aDogXCI4NSVcIixcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gc2NhdGVuYXRvIGFsIHNhbHZhdGFnZ2lvIGRpIHVuYSBmb3JtIGRpIGRldHRhZ2xpby5cclxuICAgKiBAcGFyYW0gZXZlbnQgRm9ybSBjcmVhdGEvbW9kaWZpY2F0YSBkYWxsJ3V0ZW50ZS4gU2Ugw6ggbnVsbCBhbGxvcmEgbCd1dGVudGUgaGEgYWJiYW5kb25hdG8gbGEgY29uZmlndXJhemlvbmUuXHJcbiAgICovXHJcbiAgb25TYXZlT3JFeGl0SW5uZXJGb3JtKGV2ZW50OiBGb3JtKSB7XHJcbiAgICBpZiAoZXZlbnQgIT0gbnVsbCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5mb3JtLk5hbWUgPT09IGV2ZW50Lk5hbWUgfHxcclxuICAgICAgICAodGhpcy5mb3JtLklubmVyRm9ybXMgJiZcclxuICAgICAgICAgIHRoaXMuZm9ybS5Jbm5lckZvcm1zLmZpbmQoXHJcbiAgICAgICAgICAgIChhLCBpKSA9PlxyXG4gICAgICAgICAgICAgIGEuTmFtZSA9PT0gZXZlbnQuTmFtZSAmJlxyXG4gICAgICAgICAgICAgICh0aGlzLmluZGV4U2VsZWN0ZWRJbm5lckZvcm0gPT0gbnVsbFxyXG4gICAgICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMuaW5kZXhTZWxlY3RlZElubmVyRm9ybSAhPT0gaSlcclxuICAgICAgICAgICkpIHx8XHJcbiAgICAgICAgKHRoaXMuZm9ybS5GaWVsZHMgJiZcclxuICAgICAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZElubmVyRm9ybSA9PSBudWxsICYmXHJcbiAgICAgICAgICB0aGlzLmZvcm0uRmllbGRzLmZpbmQoXHJcbiAgICAgICAgICAgIChmLCBpKSA9PlxyXG4gICAgICAgICAgICAgIGYuTGFiZWwgPT09IGV2ZW50Lk5hbWUgJiZcclxuICAgICAgICAgICAgICAodGhpcy5pbmRleFNlbGVjdGVkRmllbGQgPT0gbnVsbFxyXG4gICAgICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkICE9PSBpKVxyXG4gICAgICAgICAgKSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuV2FybmluZyhcclxuICAgICAgICAgIFwiSW1wb3NzaWJpbGUgaW5zZXJpcmUgZHVlIGZvcm0gZGkgZGV0dGFnbGlvIGNvbiBsbyBzdGVzc28gbm9tZS5cIlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgXCJJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgZm9ybSBkaSBkZXR0YWdsaW8gY29uIGxvIHN0ZXNzbyBub21lLlwiXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgaW5uZXJGb3JtRmllbGQ6IEJhc2VGaWVsZCA9IG5ldyBCYXNlRmllbGQoKTtcclxuICAgICAgaW5uZXJGb3JtRmllbGQuTmFtZSA9IGV2ZW50Lk5hbWUuc3BsaXQoXCIgXCIpLmpvaW4oXCJfXCIpO1xyXG4gICAgICBpbm5lckZvcm1GaWVsZC5MYWJlbCA9IGV2ZW50Lk5hbWU7XHJcbiAgICAgIGlubmVyRm9ybUZpZWxkLkZpZWxkVHlwZSA9IEZpZWxkVHlwZUVudW1bXCJGb3JtIGRpIGRldHRhZ2xpb1wiXTtcclxuICAgICAgaW5uZXJGb3JtRmllbGQuRmllbGRHcm91cCA9XHJcbiAgICAgICAgdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgIT0gbnVsbFxyXG4gICAgICAgICAgPyB0aGlzLmZvcm0uRmllbGRzW3RoaXMuaW5kZXhTZWxlY3RlZEZpZWxkXS5GaWVsZEdyb3VwXHJcbiAgICAgICAgICA6IG51bGw7XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5pbmRleFNlbGVjdGVkSW5uZXJGb3JtICE9IG51bGwgJiZcclxuICAgICAgICB0aGlzLmluZGV4U2VsZWN0ZWRJbm5lckZvcm0gPj0gMFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmZvcm0uSW5uZXJGb3Jtc1t0aGlzLmluZGV4U2VsZWN0ZWRJbm5lckZvcm1dID0gZXZlbnQ7XHJcbiAgICAgICAgdGhpcy5mb3JtLkZpZWxkc1t0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZF0gPSBpbm5lckZvcm1GaWVsZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIXRoaXMuZm9ybS5Jbm5lckZvcm1zKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0uSW5uZXJGb3JtcyA9IG5ldyBBcnJheTxGb3JtPigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZvcm0uSW5uZXJGb3Jtcy5wdXNoKGV2ZW50KTtcclxuICAgICAgICB0aGlzLmZvcm0uRmllbGRzLnB1c2goaW5uZXJGb3JtRmllbGQpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVsb2FkRmllbGRzVGFibGUoKTtcclxuICAgIH1cclxuICAgIHRoaXMuZGlhbG9nSW5uZXJGb3JtUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGFwcmlyZSBpbCBkaWFsb2cgZGkgY3JlYXppb25lL21vZGlmaWNhIGRlbGxlIGFjdGlvbi5cclxuICAgKiBTZSBpbCBwYXJhbWV0cm8gcGFzc2F0byDDqCBudWxsIHNvbm8gaW4gYWdnaXVudGEgYWx0cmltZW50aSBzb25vIGluIG1vZGlmaWNhLlxyXG4gICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uT25SZWNvcmQgZGEgbW9kaWZpY2FyZSAoc2UgbnVsbCBhbGxvcmEgdmFkbyBpbiBhZGQpLlxyXG4gICAqL1xyXG4gIG9wZW5BY3Rpb25PblJlY29yZERpYWxvZyhhY3Rpb246IEFjdGlvbk9uUmVjb3JkID0gbnVsbCkge1xyXG4gICAgaWYgKGFjdGlvbikge1xyXG4gICAgICB0aGlzLmluZGV4U2VsZWN0ZWRBY3Rpb24gPSB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLmluZGV4T2YoYWN0aW9uKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEFjdGlvbiA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYWN0aW9uKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQWN0aW9uID0gbmV3IEFjdGlvbk9uUmVjb3JkKCk7XHJcbiAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiA9IG51bGw7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNyZWF0ZUFjdGlvbk9uUmVjb3JkRm9ybSgpO1xyXG4gICAgdGhpcy5kaWFsb2dBY3Rpb25PblJlY29yZFJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dBY3Rpb25PblJlY29yZCwge1xyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICB3aWR0aDogXCI3NSVcIixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBhcHJpcmUgaWwgZGlhbG9nIGRpIGNyZWF6aW9uZS9tb2RpZmljYSBkZWkgYm90dG9uaSBhemlvbmUuXHJcbiAgICogU2UgaWwgcGFyYW1ldHJvIHBhc3NhdG8gw6ggbnVsbCBzb25vIGluIGFnZ2l1bnRhIGFsdHJpbWVudGkgc29ubyBpbiBtb2RpZmljYS5cclxuICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbkJ1dHRvbiBkYSBtb2RpZmljYXJlIChzZSBudWxsIGFsbG9yYSB2YWRvIGluIGFkZCkuXHJcbiAgICovXHJcbiAgb3BlbkFjdGlvbkJ1dHRvbkRpYWxvZyhldjogQWN0aW9uQnV0dG9uID0gbnVsbCkge1xyXG5cclxuICAgIGlmIChldiAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRBY3Rpb25CdXR0b24gPSBldjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRBY3Rpb25CdXR0b24gPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGlhbG9nQWN0aW9uQnV0dG9uUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0FjdGlvbkJ1dHRvbiwge1xyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICB3aWR0aDogXCI3NSVcIixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBpbXBvc3RhcmUgaSB2YWxvcmkgZGEgc3VnZ2VyaXJlIG5lbGwnYXV0b2NvbXBsZXRlIGRlbCBjYW1wbyBGb3JtdWxhLlxyXG4gICAqIFZpZW5lIHNjYXRlbmF0byBhbCBmb2N1cyAoaW4gcXVlc3RvIGNhc28gdmllbmUgcGFzc2F0byBpbCBwYXJhbWV0cm8gYSBudWxsIHBlciBkaWZmZXJlbnppYXJsb1xyXG4gICAqIGRhbGwnZXZlbnRvIGRpIGNsaWNrIHN1bGxhIHRhc3RpZXJhKSBlIGFsIGtleXVwIHN1bGwnaW5wdXQgKGlsIHBhcmFtZXRybyDDqCBkaXZlcnNvIGRhIG51bGwpLlxyXG4gICAqIEBwYXJhbSBrZXlib2FyZEV2ZW50IEV2ZW50byBzY2F0ZW5hdG8gYWwga2V5dXAgc3VsbGEgdGFzdGllcmEuIFNlIG51bGwgYWxsb3JhIGlsIG1ldG9kbyDDqCBzdGF0byBpbnZvY2F0byBkYWwgZm9jdXMgc3VsbCdpbnB1dC5cclxuICAgKiBAc3VtbWFyeSBBZ2dpb3JuYSBsJ2VsZW5jbyBkZWkgc3VnZ2VyaW1lbnRpIHBlciBsJ2F1dG9jb21wbGV0ZSBzZSBsJ3V0ZW50ZSBlc2VndWUgaWwgZm9jdXMgc3VsbCdpbnB1dFxyXG4gICAqIG9wcHVyZSBhbCBrZXl1cCBzdWxsYSB0YXN0aWVyYSBkaSB1biB0YXN0byBkaXZlcnNvIGRhbGxlIGZyZWNjZS5cclxuICAgKi9cclxuICBzZXRBY3Rpb25BdXRvY29tcGxldGVPcHRpb25zKGtleWJvYXJkRXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIC8vIENyZW8gbCdhcnJheSBwZXIgbCdhdXRvY29tcGxldGUgc29sbyBzZSBzdG8gZmFjZW5kbyBpbCBmb2N1cyBzdWxsJ2lucHV0IG8gc2Ugc3RvIHByZW1lbmRvIHVuIHRhc3RvXHJcbiAgICAvLyBzdWxsYSB0YXN0aWVyYSBkaXZlcnNvIGRhbGxlIGZyZWNjZSAoaW4gcXVlc3QndWx0aW1vIGNhc28sIHNlIG5vbiB2aWVuZSBlc2VndWl0byBpbCBmaWx0cm8gc3VsbCdldmVudG8sXHJcbiAgICAvLyBub24gc2kgcHXDsiBzZWxlemlvbmFyZSB1biBzdWdnZXJpbWVudG8gZGVsbCdhdXRvY29tcGxldGUgcGVyY2jDqCBhbCBjbGljayB2ZXJyZWJiZSByaWNhcmljYXRvIGwnYXJyYXkgZVxyXG4gICAgLy8gc2kgcHJlZGVyZWJiZSBsYSBzZWxlemlvbmUgYXBwZW5hIGZhdHRhKS5cclxuICAgIGlmICgha2V5Ym9hcmRFdmVudCB8fCAha2V5Ym9hcmRFdmVudC5jb2RlLmluY2x1ZGVzKFwiQXJyb3dcIikpIHtcclxuICAgICAgdGhpcy5hY3Rpb25BdXRvY29tcGxldGVPcHRpb25zID1cclxuICAgICAgICBVdGlsaXR5SGVscGVyU2VydmljZS5HZXRBdXRvY29tcGxldGVPcHRpb25zKFxyXG4gICAgICAgICAgdGhpcy5mb3JtLkZpZWxkcyxcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBY3Rpb24uQWN0aW9uXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzYWx2YXJlIGwnYXppb25lIGNyZWF0YS9tb2RpZmljYXRlLlxyXG4gICAqL1xyXG4gIHNhdmVBY3Rpb25PblJlY29yZCgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZCAmJlxyXG4gICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLmZpbmQoXHJcbiAgICAgICAgKGEsIGkpID0+XHJcbiAgICAgICAgICBhLk5hbWUgPT09IHRoaXMuc2VsZWN0ZWRBY3Rpb24uTmFtZSAmJlxyXG4gICAgICAgICAgKHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiA9PSBudWxsXHJcbiAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICA6IHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiAhPT0gaSlcclxuICAgICAgKVxyXG4gICAgKSB7XHJcbiAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLldhcm5pbmcoXHJcbiAgICAgICAgXCJJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgYWN0aW9uIGNvbiBsbyBzdGVzc28gbm9tZS5cIlxyXG4gICAgICApO1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgYWN0aW9uIGNvbiBsbyBzdGVzc28gbm9tZS5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiAhPSBudWxsICYmIHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiA+PSAwKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmRbdGhpcy5pbmRleFNlbGVjdGVkQWN0aW9uXSA9IHRoaXMuc2VsZWN0ZWRBY3Rpb247XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoIXRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQpIHtcclxuICAgICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkID0gbmV3IEFycmF5PEFjdGlvbk9uUmVjb3JkPigpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQucHVzaCh0aGlzLnNlbGVjdGVkQWN0aW9uKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2xvc2VEaWFsb2dBY3Rpb25PblJlY29yZCgpO1xyXG4gICAgdGhpcy5zZXRBY3Rpb25PcmRpbmFsUG9zaXRpb24oKTtcclxuICAgIHRoaXMucmVsb2FkQWN0aW9uc09uUmVjb3JkVGFibGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgc2FsdmFyZSBsJ2F6aW9uZSBjcmVhdGEvbW9kaWZpY2F0ZS5cclxuICAgKi9cclxuICBzYXZlQWN0aW9uQnV0dG9ucyhlbGVtZW50OiBBY3Rpb25CdXR0b24pIHtcclxuXHJcbiAgICBpZiAoZWxlbWVudCAhPSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucyAhPSBudWxsKSB7XHJcbiAgICAgICAgdmFyIGV4aXN0c0FjdGlvbkJ1dHRvbnMgPSB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucy5maW5kKHggPT4geC5CdXR0b25VbmlxdWVJZCA9PSBlbGVtZW50LkJ1dHRvblVuaXF1ZUlkKTtcclxuICAgICAgICBpZiAoZXhpc3RzQWN0aW9uQnV0dG9ucyA9PSBudWxsKSB7XHJcbiAgICAgICAgICAvLyBOdW92byB0cmlnZ2VyXHJcbiAgICAgICAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucy5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBleGlzdHNBY3Rpb25CdXR0b25zID0gZWxlbWVudDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMgPSBuZXcgQXJyYXk8QWN0aW9uQnV0dG9uPigpO1xyXG4gICAgICAgIHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zLnB1c2goZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5hY3Rpb25CdXR0b25zVGFibGUucmVsb2FkRGF0YXRhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kaWFsb2dBY3Rpb25CdXR0b25SZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY2hpdWRlcmUgaWwgZGlhbG9nIGRlbGxhIGlubmVyIGZvcm0uXHJcbiAgICovXHJcbiAgY2xvc2VEaWFsb2dJbm5lckZvcm0oKSB7XHJcbiAgICB0aGlzLmlubmVyRm9ybVJlZi5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjaGl1ZGVyZSBpbCBkaWFsb2cgZGkgZ2VzdGlvbmUgZGVsbGUgYWN0aW9uLlxyXG4gICAqL1xyXG4gIGNsb3NlRGlhbG9nQWN0aW9uT25SZWNvcmQoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ0FjdGlvbk9uUmVjb3JkUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNoaXVkZXJlIGlsIGRpYWxvZyBkaSBnZXN0aW9uZSBkZWxsZSBhY3Rpb24gYnV0dG9ucy5cclxuICAgKi9cclxuICBjbG9zZURpYWxvZ0FjdGlvbkJ1dHRvbnMoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ0FjdGlvbkJ1dHRvblJlZi5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzZWduYXJlIGNvbWUgY29uY2x1c2EgbGEgY3JlYXppb25lIGRlbGxhIGZvcm0gZSBwZXIgY3JlYXJuZSB1bmEgY29waWFcclxuICAgKiBkYSB2aXNhbGl6emFyZSBjb21lIGFudGVwcmltYS5cclxuICAgKiBAcGFyYW0gY29tcGxldGVkIFNlIFRSVUUgc2VnbmEgbGEgZm9ybSBjb21lIGNvbmNsdXNhIGUgbmUgY3JlYSB1bmEgY29waWEgZGEgdmlzdWFsaXp6YXJlXHJcbiAgICovXHJcbiAgc2V0Rm9ybVN0YXR1cyhjb21wbGV0ZWQ6IGJvb2xlYW4pIHtcclxuICAgIGlmIChjb21wbGV0ZWQpIHtcclxuICAgICAgdGhpcy5mb3JtQ29tcGxldGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5wcmV2aWV3Rm9ybSA9IHRoaXMuc2FmZUNsb25lKHRoaXMuZm9ybSk7XHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJwcmV2aWV3Rm9ybVwiLCB0aGlzLnByZXZpZXdGb3JtKVxyXG5cclxuICAgICAgLy8gUGVyIHZpc3VhbGl6emFyZSBjb3JyZXR0YW1lbnRlIGwnb2FudGVwcmltYSBkZWxsYSBmb3JtIGFwcGVuYSBjcmVhdGFcclxuICAgICAgLy8gYmlzb2duYSB2YWxvcml6emFyZSBsYSBwcm9wcmlldMOgIE5hbWUgZGVpIGNhbXBpIGRlbGxhIGZvcm0gZSBkZWxsZSBJbm5lckZvcm1zLlxyXG4gICAgICB0aGlzLnByZXZpZXdGb3JtLkZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgIGZpZWxkLk5hbWUgPSBmaWVsZC5MYWJlbC5zcGxpdChcIiBcIikuam9pbihcIl9cIik7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5wcmV2aWV3Rm9ybS5Jbm5lckZvcm1zICYmXHJcbiAgICAgICAgdGhpcy5wcmV2aWV3Rm9ybS5Jbm5lckZvcm1zLmxlbmd0aCA+IDBcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5wcmV2aWV3Rm9ybS5Jbm5lckZvcm1zLmZvckVhY2goKGZvcm0pID0+IHtcclxuICAgICAgICAgIGZvcm0uRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgICAgIGZpZWxkLk5hbWUgPSBmaWVsZC5MYWJlbC5zcGxpdChcIiBcIikuam9pbihcIl9cIik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mb3JtQ29tcGxldGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucHJldmlld0Zvcm0gPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzYWx2YXJlIGxhIGZvcm0gY3JlYXRhIGFsbGEgZmluZSBkZWwgd2l6YXJkLlxyXG4gICAqIFNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIHVuIGVuZFBvaW50IHBlciBpbCBzYWx2YXRhZ2dpbyB2aWVuZSBlZmZldHR1YXRhIHVuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIgcGFzc2FuZG8gbCdvZ2dldG8gZGEgc2FsdmFyZVxyXG4gICAqIG5lbCBib2R5IGRlbGxhIGNoaWFtYXRhLCBhbHRyaW1lbnRpIHNjYXRlbmEgbCdldmVudG8gXCJzYXZlRm9ybUV2ZW50XCIuXHJcbiAgICovXHJcbiAgc2F2ZUZvcm0oKSB7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAhPSBudWxsICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLlNhdmVFbmRQb2ludFxyXG4gICAgKSB7XHJcblxyXG4gICAgICBpZiAoIXRoaXMuc2F2ZWQpIHtcclxuICAgICAgICB0aGlzLmJhY2t1cEZvcm0gPSB0aGlzLnNhZmVDbG9uZSh0aGlzLmZvcm0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9ybSA9IHRoaXMuc2FmZUNsb25lKHRoaXMuYmFja3VwRm9ybSk7XHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgICAvLyBQZXIgZmFyIGFycml2YXJlIGFsIHNlcnZlciBsJ2FycmF5IGRpIEZpZWxkIGJpc29nbmEgcGFzc2FybGkgc3UgQW55XHJcbiAgICAgIHRoaXMuZm9ybS5PYmplY3RGaWVsZHMgPSBbXTtcclxuICAgICAgdGhpcy5mb3JtLk9iamVjdEZsZEV4dHJhQ29uZmlnVmFsdWVzID0gW107XHJcblxyXG4gICAgICBpZiAodGhpcy5mb3JtLkZsZEV4dHJhQ29uZmlnVmFsdWVzICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLmZvcm0uT2JqZWN0RmxkRXh0cmFDb25maWdWYWx1ZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybS5GbGRFeHRyYUNvbmZpZ1ZhbHVlcykpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmZvcm0uRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcblxyXG4gICAgICAgIC8vIFJpbXVvdm8gaWwgRm9ybUdyb3VwIGRpIHByZXZpZXcgKHByb3ByaWV0w6AgY2xpZW50LW9ubHksIGNyZWEgcmlmZXJpbWVudG8gY2lyY29sYXJlIGluIEpTT04uc3RyaW5naWZ5KVxyXG4gICAgICAgIGZpZWxkLkZvcm1Gb3JtR3JvdXAgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBUcmFzZm9ybW8gaWwgZGF0YWdldHRlciBpbiBCYXNlNjRcclxuICAgICAgICBmaWVsZC5EYXRhR2V0dGVyVmFsdWVCYXNlNjRTdHJpbmcgPSBidG9hKEpTT04uc3RyaW5naWZ5KGZpZWxkLkRhdGFHZXR0ZXIpKTtcclxuICAgICAgICBmaWVsZC5EYXRhR2V0dGVyID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKGZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtLkFsbGVnYXRvKSB7XHJcbiAgICAgICAgICBjb25zdCBmbGRBOiBhbnkgPSBmaWVsZDtcclxuICAgICAgICAgIGZsZEEuTWV0YWRhdGFPYmplY3RGaWVsZHMgPSBmbGRBLk1ldGFkYXRhRmllbGRzO1xyXG4gICAgICAgICAgZmxkQS5NZXRhZGF0YUZpZWxkcyA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5mb3JtLk9iamVjdEZpZWxkcy5wdXNoKGZsZEEpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bXCJDYW1wbyBudW1lcmljb1wiXSkge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgKDxOdW1lcmljRmllbGQ+ZmllbGQpLk1heFZhbHVlID09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgICAgICAgICg8TnVtZXJpY0ZpZWxkPmZpZWxkKS5NYXhWYWx1ZSA9PSBudWxsXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICg8TnVtZXJpY0ZpZWxkPmZpZWxkKS5NYXhWYWx1ZSA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAoPE51bWVyaWNGaWVsZD5maWVsZCkuTWluVmFsdWUgPT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgICAgICAgKDxOdW1lcmljRmllbGQ+ZmllbGQpLk1pblZhbHVlID09IG51bGxcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgKDxOdW1lcmljRmllbGQ+ZmllbGQpLk1pblZhbHVlID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5mb3JtLk9iamVjdEZpZWxkcy5wdXNoKGZpZWxkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmZvcm0uRmllbGRzID0gbnVsbDtcclxuICAgICAgdGhpcy5mb3JtLk9yZ2FJRCA9IHRoaXMub3JnYUlEO1xyXG4gICAgICBpZiAodGhpcy5mb3JtLkNyZWF0aW9uRGF0ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLkNyZWF0aW9uRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgdGhpcy5mb3JtLkNyZWF0aW9uVXNlciA9IHRoaXMuVXNlcklEO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZm9ybS5Nb2RpZnlVc2VyID0gdGhpcy5Vc2VySUQ7XHJcblxyXG4gICAgICB0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmZvcm0uVHJpZ2dlcnMpO1xyXG4gICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBudWxsO1xyXG5cclxuICAgICAgdGhpcy5mb3JtLk9iamVjdEFjdGlvbkJ1dHRvbnMgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucyk7XHJcbiAgICAgIHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zID0gbnVsbDtcclxuXHJcbiAgICAgIGlmICh0aGlzLmZvcm0uQ29kZSA9PSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5zZXRDb2RlKHRoaXMuZm9ybS5OYW1lKTtcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIC8vIGNoaWFtYXRhIGVmZmV0dGl2YVxyXG4gICAgICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFBhcmFtTmFtZTogXCJGb3JtXCIsXHJcbiAgICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm0sXHJcbiAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJJbiBCb2R5XCJdLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF07XHJcblxyXG4gICAgICB0aGlzLnNhdmVkID0gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuU2F2ZUVuZFBvaW50LFxyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgKHJlcykgPT4ge1xyXG4gICAgICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuU3VjY2VzcyhcIkZvcm0gc2FsdmF0YSBjb24gc3VjY2Vzc28hXCIpO1xyXG4gICAgICAgICAgdGhpcy5hZnRlclNhdmVGb3JtRXZlbnQuZW1pdCh0aGlzLmZvcm0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5FcnJvcihcIkVycm9yZSBuZWwgc2FsdmF0YWdnaW8gZGVsbGEgZm9ybVwiKTtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvcmUgbmVsIHNhbHZhdGFnZ2lvIGRlbGxhIGZvcm1cIiwgZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2F2ZUZvcm1FdmVudC5lbWl0KHRoaXMuZm9ybSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gRlVOWklPTkkgUFJJVkFURVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGltcG9zdGFyZSBsYSBmb3JtIGUgY29uZmlndXJhcmUgY29sb25uZS9Gb3JtR291cnAuXHJcbiAgICogQHBhcmFtIGZvcm0gRm9ybSBkYSB1dGlsaXp6YXJlLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0Rm9ybUFuZENvbmZpZ3VyZShmb3JtOiBGb3JtID0gbnVsbCkge1xyXG5cclxuICAgIGlmIChmb3JtICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5mb3JtID0gZm9ybTtcclxuICAgICAgdGhpcy5mb3JtLk9yZ2FJRCA9IHRoaXMub3JnYUlEO1xyXG4gICAgICBpZiAodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IG51bGwgJiYgdGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IFwiXCIpIHtcclxuICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBKU09OLnBhcnNlKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2Vycyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gbmV3IEFycmF5PFRyaWdnZXI+KCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmZvcm0uT2JqZWN0QWN0aW9uQnV0dG9ucyAhPSBudWxsICYmIHRoaXMuZm9ybS5PYmplY3RBY3Rpb25CdXR0b25zICE9IFwiXCIpIHtcclxuICAgICAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucyA9IEpTT04ucGFyc2UodGhpcy5mb3JtLk9iamVjdEFjdGlvbkJ1dHRvbnMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zID0gbmV3IEFycmF5PEFjdGlvbkJ1dHRvbj4oKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmZvcm0uRmllbGRzICE9IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICB0aGlzLmZvcm0uRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcblxyXG4gICAgICAgICAgLy8gVHJhc2Zvcm1vIGlsIEJhc2U2NFN0cmluZyBkZWwgRGF0YWdldHRlciBuZWwgRGF0YWdldHRlciB2ZXJvIGUgcHJvcHJpb1xyXG4gICAgICAgICAgaWYgKGZpZWxkLkRhdGFHZXR0ZXJWYWx1ZUJhc2U2NFN0cmluZyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGZpZWxkLkRhdGFHZXR0ZXIgPSBKU09OLnBhcnNlKGF0b2IoZmllbGQuRGF0YUdldHRlclZhbHVlQmFzZTY0U3RyaW5nKSk7XHJcbiAgICAgICAgICAgIGZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPSBmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID09IG51bGwgPyBEYXRhR2V0dGVyVHlwZUVudW0uTWFudWFsZSA6IGZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmaWVsZC5EYXRhR2V0dGVyID0gbmV3IERhdGFHZXR0ZXIoKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBmaWVsZC5EYXRhR2V0dGVyVmFsdWVCYXNlNjRTdHJpbmcgPSBudWxsO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gQ2FtcGkgY29uIERhdGFHZXR0ZXJTcGVlY2hUZXh0OiBjYXJpY2FyZSBpbCBRdWVyeUVkaXRvciBpbiBzaWxlbnQgcGVyIHBvcG9sYXJlIGlsIERhdGFHZXR0ZXJWYWx1ZSB2aWEgQUlcclxuICAgICAgICB0aGlzLnBlbmRpbmdBaURhdGFHZXR0ZXJGaWVsZHMgPSB0aGlzLmZvcm0uRmllbGRzLmZpbHRlcihmID0+XHJcbiAgICAgICAgICBmLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPT09IERhdGFHZXR0ZXJUeXBlRW51bVsnRGEgZGF0YWJhc2UnXSAmJlxyXG4gICAgICAgICAgISFmLkRhdGFHZXR0ZXIuRGF0YUdldHRlclNwZWVjaFRleHQgJiZcclxuICAgICAgICAgICFmLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAodGhpcy5wZW5kaW5nQWlEYXRhR2V0dGVyRmllbGRzLmxlbmd0aCA+IDAgJiYgdGhpcy5RdWVyeUVkaXRvckNvbXBvbmVudCAhPSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLnByb2Nlc3NOZXh0QWlEYXRhR2V0dGVyRmllbGQoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xyXG4gICAgdGhpcy5jcmVhdGVGb3JtRm9ybSgpO1xyXG4gICAgaW5qZWN0R29vZ2xlRm9udHNGcm9tRm9ybSh0aGlzLmZvcm0pO1xyXG4gICAgdGhpcy5yZWZyZXNoRmllbGRUeXBlT3B0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlRm9ybUdyYXBoaWNTdWdnZXN0SW5wdXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3dGb3JtR3JhcGhpY1N1Z2dlc3RJbnB1dCA9ICF0aGlzLnNob3dGb3JtR3JhcGhpY1N1Z2dlc3RJbnB1dDtcclxuICAgIGlmICghdGhpcy5zaG93Rm9ybUdyYXBoaWNTdWdnZXN0SW5wdXQpIHRoaXMuZm9ybUdyYXBoaWNTY29wZSA9ICdhbGwnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWZyZXNoRmllbGRUeXBlT3B0aW9ucygpOiB2b2lkIHtcclxuICAgIGNvbnN0IHNlZW5UeXBlcyA9IG5ldyBTZXQ8bnVtYmVyPigpO1xyXG4gICAgY29uc3Qgb3B0aW9uczogeyB2YWx1ZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXSA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBmIG9mICh0aGlzLmZvcm0/LkZpZWxkcyA/PyBbXSkpIHtcclxuICAgICAgaWYgKHNlZW5UeXBlcy5oYXMoZi5GaWVsZFR5cGUpKSBjb250aW51ZTtcclxuICAgICAgc2VlblR5cGVzLmFkZChmLkZpZWxkVHlwZSk7XHJcbiAgICAgIGNvbnN0IGxhYmVsID0gKEVxcER5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb21wb25lbnQuRklFTERfVFlQRV9MQUJFTFMgYXMgYW55KVtmLkZpZWxkVHlwZV0gPz8gYFRpcG8gJHtmLkZpZWxkVHlwZX1gO1xyXG4gICAgICBvcHRpb25zLnB1c2goeyB2YWx1ZTogYHR5cGVfJHtmLkZpZWxkVHlwZX1gLCBsYWJlbCB9KTtcclxuICAgIH1cclxuICAgIHRoaXMucHJlc2VudEZpZWxkVHlwZU9wdGlvbnMgPSBvcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29uZmlndXJhIGxlIGNvbG9ubmUgcGVyIGxlIHRhYmVsbGUgbmVjZXNzYXJpZSBhbGxhIGNyZWF6aW9uZSBkZWxsYSBmb3JtOlxyXG4gICAqICAtIHBlciBsYSB2aXN1YWxpenphemlvbmUgZGVpIGNhbXBpIGluc2VyaXRpXHJcbiAgICogIC0gcGVyIGxlIGZvcm0gZGkgZGV0dGFnbGlvIGNyZWF0ZVxyXG4gICAqICAtIHBlciBsZSBhemlvbmkgY29uZmlndXJhdGUgc3VpIHJlY29yZCBkZWxsYSBmb3JtXHJcbiAgICovXHJcblxyXG5cclxuXHJcblxyXG4gIHByaXZhdGUgY29uZmlndXJlQ29sdW1ucygpIHtcclxuICAgIHRoaXMuZmllbGRzQ29sdW1ucyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJhY3Rpb25cIixcclxuICAgICAgICBkaXNwbGF5OiBcIlwiLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uTWVudUFjdGlvbixcclxuICAgICAgICBidXR0b25NZW51SWNvbjogXCJtb3JlX3ZlcnRcIixcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgNHJlbVwiIH0sXHJcbiAgICAgICAgYWN0aW9uczogW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIk1vZGlmaWNhXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZWRpdFwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMuZWRpdEZpZWxkKGVsZW1lbnQpLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJEdXBsaWNhIHNvdHRvXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZmlsZV9jb3B5XCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy5kdXBsaWNhdGVGaWVsZChlbGVtZW50LCBlbGVtZW50Lk9yZGluYWxQb3NpdGlvbiArIDEpLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJEdXBsaWNhIGluIGZvbmRvXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZmlsZV9jb3B5XCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy5kdXBsaWNhdGVGaWVsZChlbGVtZW50KSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiRWxpbWluYVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImRlbGV0ZVwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMuZGVsZXRlRWxlbWVudChlbGVtZW50LCBcIkZpZWxkc1wiKSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAvLyB7XHJcbiAgICAgICAgICAvLyAgIG5hbWU6IFwiU3Bvc3RhIHN1XCIsXHJcbiAgICAgICAgICAvLyAgIGljb246IFwiYXJyb3dfdXB3YXJkXCIsXHJcbiAgICAgICAgICAvLyAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT5cclxuICAgICAgICAgIC8vICAgICB0aGlzLm1vdmVFbGVtZW50KGVsZW1lbnQsIHRydWUsIFwiRmllbGRzXCIpLFxyXG4gICAgICAgICAgLy8gICBkaXNhYmxlZDogKGVsZW1lbnQpID0+IHRoaXMuZm9ybS5GaWVsZHMuaW5kZXhPZihlbGVtZW50KSA9PT0gMCxcclxuICAgICAgICAgIC8vIH0sXHJcbiAgICAgICAgICAvLyB7XHJcbiAgICAgICAgICAvLyAgIG5hbWU6IFwiU3Bvc3RhIGdpw7lcIixcclxuICAgICAgICAgIC8vICAgaWNvbjogXCJhcnJvd19kb3dud2FyZFwiLFxyXG4gICAgICAgICAgLy8gICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+XHJcbiAgICAgICAgICAvLyAgICAgdGhpcy5tb3ZlRWxlbWVudChlbGVtZW50LCBmYWxzZSwgXCJGaWVsZHNcIiksXHJcbiAgICAgICAgICAvLyAgIGRpc2FibGVkOiAoZWxlbWVudCkgPT5cclxuICAgICAgICAgIC8vICAgICB0aGlzLmZvcm0uRmllbGRzLmluZGV4T2YoZWxlbWVudCkgPj0gdGhpcy5mb3JtLkZpZWxkcy5sZW5ndGggLSAxLFxyXG4gICAgICAgICAgLy8gfSxcclxuICAgICAgICBdLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIkZpZWxkVHlwZVwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiVGlwb2xvZ2lhXCIsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5FbnVtLFxyXG4gICAgICAgIGVudW1Nb2RlbDogRmllbGRUeXBlRW51bSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgMTJyZW1cIiB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7IGtleTogXCJMYWJlbFwiLCBkaXNwbGF5OiBcIkxhYmVsXCIsIHN0eWxlczogeyBmbGV4OiBcIjAgMCA4cmVtXCIgfSB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIkRlc2NyaXB0aW9uXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJEZXNjcml6aW9uZVwiLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCAxMnJlbVwiIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZVwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiVGlwbyBSZWN1cGVybyBEYXRpXCIsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5FbnVtLFxyXG4gICAgICAgIGVudW1Nb2RlbDogRGF0YUdldHRlclR5cGVFbnVtLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCAxMnJlbVwiIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiUmVxdWlyZWRcIixcclxuICAgICAgICBkaXNwbGF5OiBcIk9iYmxpZ2F0b3Jpb1wiLFxyXG4gICAgICAgIHZhbHVlOiAoZWxlbWVudCkgPT4gZWxlbWVudC5SZXF1aXJlZCxcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLkJvb2xlYW4sXHJcbiAgICAgICAgYm9vbGVhblZhbHVlczoge1xyXG4gICAgICAgICAgdHJ1ZTogJzxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgc3VjY2Vzcy1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgICAgZmFsc2U6ICc8aSBjbGFzcz1cImZhIGZhLWNsb3NlIGVycm9yLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgNXJlbVwiLCBjZWxsQWxpZ25tZW50OiBDZWxsQWxpZ25tZW50RW51bS5DRU5URVIgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJGb3JtdWxhXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJDYWxjb2xhdG9cIixcclxuICAgICAgICB2YWx1ZTogKGVsZW1lbnQpID0+IGVsZW1lbnQuRm9ybXVsYSAhPSBudWxsICYmIGVsZW1lbnQuRm9ybXVsYSAhPSAnJyxcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLkJvb2xlYW4sXHJcbiAgICAgICAgYm9vbGVhblZhbHVlczoge1xyXG4gICAgICAgICAgdHJ1ZTogJzxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgc3VjY2Vzcy1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgICAgZmFsc2U6ICc8aSBjbGFzcz1cImZhIGZhLWNsb3NlIGVycm9yLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgNXJlbVwiLCBjZWxsQWxpZ25tZW50OiBDZWxsQWxpZ25tZW50RW51bS5DRU5URVIgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJJbkxpc3RWaWV3XCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJWaXNpYmlsZSBpbiBDb21waWxhemlvbmVcIixcclxuICAgICAgICB2YWx1ZTogKGVsZW1lbnQpID0+IGVsZW1lbnQuSW5MaXN0VmlldyxcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLkJvb2xlYW4sXHJcbiAgICAgICAgYm9vbGVhblZhbHVlczoge1xyXG4gICAgICAgICAgdHJ1ZTogJzxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgc3VjY2Vzcy1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgICAgZmFsc2U6ICc8aSBjbGFzcz1cImZhIGZhLWNsb3NlIGVycm9yLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgN3JlbVwiLCBjZWxsQWxpZ25tZW50OiBDZWxsQWxpZ25tZW50RW51bS5DRU5URVIgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJJbnZpc2liaWxpdHlcIixcclxuICAgICAgICBkaXNwbGF5OiBcIk9jY3VwYSBzcGF6aW8/XCIsXHJcbiAgICAgICAgdmFsdWU6IChlbGVtZW50KSA9PiBlbGVtZW50LkluTGlzdFZpZXcgfHwgZWxlbWVudC5JbnZpc2liaWxpdHkgPT0gRmllbGRJbnZpc2liaWxpdHlFbnVtW1wiTkFTQ09TVE8gQ09OIEFSRUEgVklTSUJJTEVcIl0sXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5Cb29sZWFuLFxyXG4gICAgICAgIGJvb2xlYW5WYWx1ZXM6IHtcclxuICAgICAgICAgIHRydWU6ICc8aSBjbGFzcz1cImZhIGZhLWNoZWNrIHN1Y2Nlc3MtY29sb3JcIj48L2k+JyxcclxuICAgICAgICAgIGZhbHNlOiAnPGkgY2xhc3M9XCJmYSBmYS1jbG9zZSBlcnJvci1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDdyZW1cIiwgY2VsbEFsaWdubWVudDogQ2VsbEFsaWdubWVudEVudW0uQ0VOVEVSIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiVmlzaWJsZUlmXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJWaXNpYmlsaXTDoCBjb25kaXppb25hdGFcIixcclxuICAgICAgICB2YWx1ZTogKGVsZW1lbnQpID0+IGVsZW1lbnQuVmlzaWJsZUlmICE9IG51bGwgJiYgZWxlbWVudC5WaXNpYmxlSWYgIT0gXCJcIixcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLkJvb2xlYW4sXHJcbiAgICAgICAgYm9vbGVhblZhbHVlczoge1xyXG4gICAgICAgICAgdHJ1ZTogJzxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgc3VjY2Vzcy1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgICAgZmFsc2U6ICc8aSBjbGFzcz1cImZhIGZhLWNsb3NlIGVycm9yLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgN3JlbVwiLCBjZWxsQWxpZ25tZW50OiBDZWxsQWxpZ25tZW50RW51bS5DRU5URVIgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJBbnN3ZXJTdHlsZS5Jbkxpc3RWaWV3XCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJWaXNpYmlsZSBuZWxsYSByaXNwb3N0YVwiLFxyXG4gICAgICAgIHZhbHVlOiAoZWxlbWVudCkgPT4gIWVsZW1lbnQuQW5zd2VyU3R5bGUgfHwgZWxlbWVudC5BbnN3ZXJTdHlsZSAmJiBlbGVtZW50LkFuc3dlclN0eWxlLkluTGlzdFZpZXcsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5Cb29sZWFuLFxyXG4gICAgICAgIGJvb2xlYW5WYWx1ZXM6IHtcclxuICAgICAgICAgIHRydWU6ICc8aSBjbGFzcz1cImZhIGZhLWNoZWNrIHN1Y2Nlc3MtY29sb3JcIj48L2k+JyxcclxuICAgICAgICAgIGZhbHNlOiAnPGkgY2xhc3M9XCJmYSBmYS1jbG9zZSBlcnJvci1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDVyZW1cIiwgY2VsbEFsaWdubWVudDogQ2VsbEFsaWdubWVudEVudW0uQ0VOVEVSIH0sXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5mb3JtLkZvcm1TY2FsYXJUeXBlICYmXHJcbiAgICAgIHRoaXMuZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2VcclxuICAgICkge1xyXG4gICAgICB0aGlzLmZpZWxkc0NvbHVtbnMuc3BsaWNlKDEsIDAsIHtcclxuICAgICAgICBrZXk6IFwiRmllbGRHcm91cFwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiU2V6aW9uZVwiLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uRXh0ZXJuYWxUZW1wbGF0ZSxcclxuICAgICAgICBleHRlcm5hbFRlbXBsYXRlOiB0aGlzLmZpZWxkU2VjdGlvbkNvbHVtblRlbXBsYXRlLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCAxNHJlbVwiIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyB0aGlzLmZpZWxkc0NvbHVtbnMucHVzaChcclxuICAgICAgLy8gICB7XHJcbiAgICAgIC8vICAgICBrZXk6IFwiRmllbGRHcm91cFwiLFxyXG4gICAgICAvLyAgICAgZGlzcGxheTogXCJTZXppb25lXCIsXHJcbiAgICAgIC8vICAgICB0eXBlOiBUeXBlQ29sdW1uLkV4dGVybmFsVGVtcGxhdGUsXHJcbiAgICAgIC8vICAgICBleHRlcm5hbFRlbXBsYXRlOiB0aGlzLmZpZWxkU2VjdGlvbkNvbHVtblRlbXBsYXRlLFxyXG4gICAgICAvLyAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDE0cmVtXCIgfVxyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFjdGlvbkJ1dHRvbnNDb2x1bW5zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcImFjdGlvblwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiXCIsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5NZW51QWN0aW9uLFxyXG4gICAgICAgIGJ1dHRvbk1lbnVJY29uOiBcIm1vcmVfdmVydFwiLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCA2JVwiIH0sXHJcbiAgICAgICAgYWN0aW9uczogW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIk1vZGlmaWNhXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZWRpdFwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMub3BlbkFjdGlvbkJ1dHRvbkRpYWxvZyhlbGVtZW50KSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiRWxpbWluYVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImRlbGV0ZVwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5kZWxldGVBY3Rpb25CdXR0b24oZWxlbWVudCksXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXSxcclxuICAgICAgfSxcclxuICAgICAgeyBrZXk6IFwiQnV0dG9uTGFiZWxcIiwgZGlzcGxheTogXCJFdGljaGV0dGFcIiwgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDMwJVwiIH0gfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJCdXR0b25Db2RlXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJDb2RpY2VcIixcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgMjAlXCIgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJJY29uXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJJY29uYVwiLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCAxMCVcIiB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIlNob3dJblwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiU2V6aW9uaVwiLFxyXG4gICAgICAgIHZhbHVlOiAoZWwpID0+IHtcclxuICAgICAgICAgIHZhciBmaW5hbFRleHQgPSBcIlwiO1xyXG4gICAgICAgICAgaWYgKGVsLlNob3dJbiA9PSBudWxsIHx8IGVsLlNob3dJbi5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJOZXNzdW5hXCI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbC5TaG93SW4uZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgZmluYWxUZXh0ICs9IEFjdGlvbkZsYWdFbnVtW2VsZW1lbnRdICsgXCIgLyBcIjtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuIGZpbmFsVGV4dDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCAyMCVcIiB9LFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuXHJcbiAgICB0aGlzLmFjdGlvbnNPblJlY29yZENvbHVtbnMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiYWN0aW9uXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJcIixcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLk1lbnVBY3Rpb24sXHJcbiAgICAgICAgYnV0dG9uTWVudUljb246IFwibW9yZV92ZXJ0XCIsXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDYlXCIgfSxcclxuICAgICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiTW9kaWZpY2FcIixcclxuICAgICAgICAgICAgaWNvbjogXCJlZGl0XCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy5vcGVuQWN0aW9uT25SZWNvcmREaWFsb2coZWxlbWVudCksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkVsaW1pbmFcIixcclxuICAgICAgICAgICAgaWNvbjogXCJkZWxldGVcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMuZGVsZXRlRWxlbWVudChlbGVtZW50LCBcIkFjdGlvbnNPblJlY29yZFwiKSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiU3Bvc3RhIHN1XCIsXHJcbiAgICAgICAgICAgIGljb246IFwiYXJyb3dfdXB3YXJkXCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT5cclxuICAgICAgICAgICAgICB0aGlzLm1vdmVFbGVtZW50KGVsZW1lbnQsIHRydWUsIFwiQWN0aW9uc09uUmVjb3JkXCIpLFxyXG4gICAgICAgICAgICBkaXNhYmxlZDogKGVsZW1lbnQpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZC5pbmRleE9mKGVsZW1lbnQpID09PSAwLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJTcG9zdGEgZ2nDuVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImFycm93X2Rvd253YXJkXCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT5cclxuICAgICAgICAgICAgICB0aGlzLm1vdmVFbGVtZW50KGVsZW1lbnQsIGZhbHNlLCBcIkFjdGlvbnNPblJlY29yZFwiKSxcclxuICAgICAgICAgICAgZGlzYWJsZWQ6IChlbGVtZW50KSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQuaW5kZXhPZihlbGVtZW50KSA+PVxyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQubGVuZ3RoIC0gMSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgfSxcclxuICAgICAgeyBrZXk6IFwiSWNvblwiLCBkaXNwbGF5OiBcIkljb25hXCIsIHN0eWxlczogeyBmbGV4OiBcIiAwIDAgMTUlXCIgfSB9LFxyXG4gICAgICB7IGtleTogXCJOYW1lXCIsIGRpc3BsYXk6IFwiTm9tZVwiLCBzdHlsZXM6IHsgZmxleDogXCIgMCAwIDIwJVwiIH0gfSxcclxuICAgICAgeyBrZXk6IFwiQWN0aW9uXCIsIGRpc3BsYXk6IFwiQXppb25lXCIgfSxcclxuICAgIF07XHJcblxyXG4gICAgdGhpcy50cmlnZ2Vyc0NvbHVtbnMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiYWN0aW9uXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJcIixcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLk1lbnVBY3Rpb24sXHJcbiAgICAgICAgYnV0dG9uTWVudUljb246IFwibW9yZV92ZXJ0XCIsXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDYlXCIgfSxcclxuICAgICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiTW9kaWZpY2FcIixcclxuICAgICAgICAgICAgaWNvbjogXCJlZGl0XCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy5vcGVuVHJpZ2dlcnNEaWFsb2coZWxlbWVudCksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkVsaW1pbmFcIixcclxuICAgICAgICAgICAgaWNvbjogXCJkZWxldGVcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMuZGVsZXRlVHJpZ2dlcihlbGVtZW50KSxcclxuICAgICAgICAgIH1cclxuICAgICAgICBdLFxyXG4gICAgICB9LFxyXG4gICAgICB7IGtleTogXCJkZXNjcmlwdGlvblwiLCBkaXNwbGF5OiBcIkRlc2NyaXppb25lXCIsIHN0eWxlczogeyBmbGV4OiBcIiAwIDAgMTUlXCIgfSB9LFxyXG4gICAgICB7IGtleTogXCJleGVjdXRpb25cIiwgZGlzcGxheTogXCJDb3NhIGVzZWd1ZVwiLCBzdHlsZXM6IHsgZmxleDogXCIgMCAwIDE1JVwiIH0gfSxcclxuICAgIF07XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYSBpbCBGb3JtR3JvdXAgcGVyIGwnb2dnZXR0byBGb3JtXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVGb3JtRm9ybSgpIHtcclxuICAgIHRoaXMuZm9ybUZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBDb2RlOiBbdGhpcy5mb3JtLkNvZGVdLFxyXG4gICAgICBOYW1lOiBbdGhpcy5mb3JtLk5hbWUsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBEZXNjcmlwdGlvbjogW3RoaXMuZm9ybS5EZXNjcmlwdGlvbl0sXHJcbiAgICAgIEZvcm1TY2FsYXJUeXBlOiBbdGhpcy5mb3JtLkZvcm1TY2FsYXJUeXBlLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5vbkNoYW5nZUZvcm1TY2FsYXJUeXBlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEcmFnIGFuZCBEcm9wIGRlbGxlIGNvbG9ubmUgZGVsIGZvcm1cclxuICAgKi9cclxuXHJcbiAgb25EcmFnUmVsZWFzZWQoZXZlbnQpIHtcclxuXHJcbiAgfVxyXG5cclxuICBvbkRyYWdFbmRlZChldmVudCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKTtcclxuICAgICAgdGhpcy5yZWxvYWRGaWVsZHNUYWJsZSgpO1xyXG4gICAgfSwgMTAwMCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhIGlsIEZvcm1Hcm91cCBlcHIgbCdhZ2dpdW50YSBvIGxhIG1vZGlmaWNhIGRpIHVuYSBhY3Rpb24gc3VpIHJlY29yZCBkZWxsYSBGb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlQWN0aW9uT25SZWNvcmRGb3JtKCkge1xyXG4gICAgdGhpcy5hY3Rpb25PblJlY29yZEZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBOYW1lOiBbdGhpcy5zZWxlY3RlZEFjdGlvbi5OYW1lLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgSWNvbjogW3RoaXMuc2VsZWN0ZWRBY3Rpb24uSWNvbiwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIEFjdGlvbjogW3RoaXMuc2VsZWN0ZWRBY3Rpb24uQWN0aW9uLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hpdWRlIGlsIGRpYWxvZyBwZXIgYWdnaXVuZ2VyZS9tb2RpZmljYXJlIHVuIEZpZWxkIHNlbnphIHNhbHZhcmVcclxuICAgKi9cclxuICBwcml2YXRlIGNsb3NlRmllbGREaWFsb2coKSB7XHJcbiAgICBpZiAodGhpcy5kaWFsb2dGaWVsZFJlZiAhPSB1bmRlZmluZWQpIHRoaXMuZGlhbG9nRmllbGRSZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZ2VzdGlyZSBsJ2FwZXJ0dXJhIGRlbCBkaWFsb2cgcGVyIGxhIG1vZGlmaWNhIGRpIHVuIEZpZWxkLlxyXG4gICAqIFNlIGlsIGZpZWxkIMOoIGRpIHRpcG8gXCJGb3JtIGRpIGRldHRhZ2xpb1wiIGFwcmUgaWwgZGlhbG9nIHBlciBsYSBtb2RpZmljYSBkaSB1bmFcclxuICAgKiBJbm5lckZvcm0gYWx0cmltZW50aSBhcHJlIHF1ZWxsbyBwZXIgbGEgbW9kaWZpY2EgZGkgdW4gRmllbGQuXHJcbiAgICogQHBhcmFtIGZpZWxkIENhbXBvIGRhIG1vZGlmaWNhcmVcclxuICAgKi9cclxuICBwcml2YXRlIGVkaXRGaWVsZChmaWVsZDogQmFzZUZpZWxkKSB7XHJcbiAgICBpZiAoZmllbGQuRmllbGRUeXBlICE9IEZpZWxkVHlwZUVudW1bXCJGb3JtIGRpIGRldHRhZ2xpb1wiXSkge1xyXG4gICAgICB0aGlzLm9wZW5GaWVsZERpYWxvZyhmaWVsZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm9wZW5Jbm5lckZvcm1EaWFsb2coXHJcbiAgICAgICAgdGhpcy5mb3JtLklubmVyRm9ybXMuZmluZCgoZikgPT4gZi5OYW1lID09IGZpZWxkLkxhYmVsKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBnZXN0aXJlIGxhIGR1cGxpY2F6aW9uZSBkaSB1biBGaWVsZC5cclxuICAgKiBAcGFyYW0gZmllbGQgQ2FtcG8gZGEgbW9kaWZpY2FyZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZHVwbGljYXRlRmllbGQoZmllbGQ6IEJhc2VGaWVsZCwgb3JkaW5hbFBvc2l0aW9uID0gbnVsbCkge1xyXG4gICAgaWYgKGZpZWxkLkZpZWxkVHlwZSAhPSBGaWVsZFR5cGVFbnVtW1wiRm9ybSBkaSBkZXR0YWdsaW9cIl0pIHtcclxuICAgICAgLy8gcmljcmVvIGwnb2dnZXR0byBwYXNzYW5kbyBwZXIgdW4ganNvblxyXG4gICAgICBsZXQgY2xvbmVGaWVsZDogQmFzZUZpZWxkID0gdGhpcy5zYWZlQ2xvbmUoZmllbGQpO1xyXG5cclxuICAgICAgY2xvbmVGaWVsZC5MYWJlbCA9IGZpZWxkW1wiTGFiZWxcIl0gKyBcIkNvcHlcIjtcclxuICAgICAgY2xvbmVGaWVsZC5JRCA9IHRoaXMuZ2VuZXJhdGVHVUlEKCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWVsZCA9IG5ldyBCYXNlRmllbGQoKTtcclxuICAgICAgaWYgKG9yZGluYWxQb3NpdGlvbiA9PSBudWxsKSB7XHJcbiAgICAgICAgY2xvbmVGaWVsZC5PcmRpbmFsUG9zaXRpb24gPSB0aGlzLmZvcm0uRmllbGRzLmxlbmd0aCArIDE7XHJcbiAgICAgICAgdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgPSBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNsb25lRmllbGQuT3JkaW5hbFBvc2l0aW9uID0gb3JkaW5hbFBvc2l0aW9uO1xyXG4gICAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID0gb3JkaW5hbFBvc2l0aW9uO1xyXG4gICAgICAgIC8vIHV0aWxpenpvIG9yZGluYWwgcG9zaXRpb24gcGVyIGluZmlsYXJlIGlsIGNhbXBvIGNvcnJldHRhbWV0bmUgbmVsbGEgbGlzdGFcclxuICAgICAgICAvLyBwZXIgZmFybG8gc2Ugbm9uIMOoIG51bGxvIGRldm8gY3JlYXJlIGxvIHNwYXppb1xyXG4gICAgICAgIHRoaXMuT3JkaW5hdGVkSW5zZXJ0RmllbGQoZmllbGQsIG9yZGluYWxQb3NpdGlvbilcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGNsb25lRmllbGRTdHJ1Y3R1cmUgPSB7IGZpZWxkOiBjbG9uZUZpZWxkLCByZW9wZW46IDAgfVxyXG4gICAgICB0aGlzLm9uU2F2ZUZpZWxkKGNsb25lRmllbGRTdHJ1Y3R1cmUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYWxlcnQoXCJub24gw6ggcG9zc2liaWxlIGR1cGxpY2FyZSB1bmEgZm9ybSBkaSBkZXR0YWdsaW9cIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIE9yZGluYXRlZEluc2VydEZpZWxkKGZpZWxkOiBCYXNlRmllbGQsIG9yZGluYWxQb3NpdGlvbiA9IDApIHtcclxuICAgIHRoaXMuZm9ybS5GaWVsZHMuc3BsaWNlKG9yZGluYWxQb3NpdGlvbiwgMCwgZmllbGQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwb3NpdGlvbkV4Y2hhbmdlRmllbGRzKGZpZWxkMTogQmFzZUZpZWxkLCBmaWVsZDI6IEJhc2VGaWVsZCkge1xyXG4gICAgY29uc3QgdGVtcCA9IGZpZWxkMTtcclxuICAgIHRoaXMuZm9ybS5GaWVsZHNbZmllbGQxLk9yZGluYWxQb3NpdGlvbl0gPSBmaWVsZDI7XHJcbiAgICB0aGlzLmZvcm0uRmllbGRzW2ZpZWxkMi5PcmRpbmFsUG9zaXRpb25dID0gdGVtcDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgZ2VuZXJhIHVuYSBudW92YSBHVUlEXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUdVSUQoKSB7XHJcbiAgICByZXR1cm4gJ3h4eHgteHh4eC14eHh4LXh4eHgnLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24gKGMpIHtcclxuICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwLFxyXG4gICAgICAgIHYgPSBjID09ICd4JyA/IHIgOiAociAmIDB4MyB8IDB4OCk7XHJcbiAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaW11b3ZlcmUgdW4gRmllbGQgYWxsJ2ludGVybm8gZGkgdW5hIEZvcm0uXHJcbiAgICogUmljaGllZGUgY29uZmVybWEgYWxsJ3V0ZW50ZSBwcmltYSBkaSByaW11b3ZlcmxvLlxyXG4gICAqIEBwYXJhbSBmaWVsZCBCYXNlRmllbGQgZGEgcmltdW92ZXJlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkZWxldGVFbGVtZW50KFxyXG4gICAgZWxlbWVudDogQmFzZUZpZWxkIHwgQWN0aW9uT25SZWNvcmQgfCBGb3JtLFxyXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmdcclxuICApIHtcclxuICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLkNvbmZpcm0oXHJcbiAgICAgIFwiRWxpbWluYXJlIGwnZWxlbWVudG8gc2VsZXppb25hdG8/XCIsXHJcbiAgICAgICgpID0+IHtcclxuICAgICAgICB0aGlzLmZvcm1bcHJvcGVydHlOYW1lXS5zcGxpY2UoXHJcbiAgICAgICAgICB0aGlzLmZvcm1bcHJvcGVydHlOYW1lXS5pbmRleE9mKGVsZW1lbnQpLFxyXG4gICAgICAgICAgMVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PT0gXCJGaWVsZHNcIikge1xyXG4gICAgICAgICAgdGhpcy5zZXRGaWVsZE9yZGluYWxQb3NpdGlvbigpO1xyXG4gICAgICAgICAgdGhpcy5yZWxvYWRGaWVsZHNUYWJsZSgpO1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoRmllbGRUeXBlT3B0aW9ucygpO1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoUHJldmlldygpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHlOYW1lID09PSBcIkFjdGlvbnNPblJlY29yZFwiKSB7XHJcbiAgICAgICAgICB0aGlzLnNldEFjdGlvbk9yZGluYWxQb3NpdGlvbigpO1xyXG4gICAgICAgICAgdGhpcy5yZWxvYWRBY3Rpb25zT25SZWNvcmRUYWJsZSgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHlOYW1lID09PSBcIkFjdGlvbkJ1dHRvbnNcIikge1xyXG4gICAgICAgICAgdGhpcy5zZXRBY3Rpb25CdXR0b25PcmRpbmFsUG9zaXRpb24oKTtcclxuICAgICAgICAgIHRoaXMucmVsb2FkQWN0aW9uQnV0dG9uc09uUmVjb3JkVGFibGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGZhbHNlLFxyXG4gICAgICBcIlJpY2hpZXN0YSBjb25mZXJtYVwiXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzcG9zdGFyZSB1biBjYW1wbyBhbGwnaW50ZXJubyBkZWxsYSBmb3JtLlxyXG4gICAqIEBwYXJhbSBmaWVsZCBPZ2dldHRvIGRpIHRpcG8gQmFzZUZpZWxkIGRhIHNwb3N0YXJlLlxyXG4gICAqIEBwYXJhbSBtb3ZlVXAgU2UgVFJVRSBhbGxvcmEgc3Bvc3RhIHZlcnNvIGwnYWx0byBpbCBjYW1wbyAoYWJiYXNzYSBsJ2luZGljZSkgYWx0cmltZW50aSBpbCBjb250cmFyaW8uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBtb3ZlRWxlbWVudChcclxuICAgIGVsZW1lbnQ6IEJhc2VGaWVsZCB8IEFjdGlvbk9uUmVjb3JkLFxyXG4gICAgbW92ZVVwOiBib29sZWFuLFxyXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmdcclxuICApIHtcclxuICAgIGNvbnN0IHN0YXJ0aW5nSW5kZXggPSB0aGlzLmZvcm1bcHJvcGVydHlOYW1lXS5pbmRleE9mKGVsZW1lbnQpO1xyXG4gICAgY29uc3QgZW5kaW5nSW5kZXggPSBzdGFydGluZ0luZGV4ICsgKG1vdmVVcCA/IC0xIDogMSk7XHJcblxyXG4gICAgdGhpcy5mb3JtW3Byb3BlcnR5TmFtZV0uc3BsaWNlKHN0YXJ0aW5nSW5kZXgsIDEpO1xyXG4gICAgdGhpcy5mb3JtW3Byb3BlcnR5TmFtZV0uc3BsaWNlKGVuZGluZ0luZGV4LCAwLCBlbGVtZW50KTtcclxuXHJcbiAgICBpZiAocHJvcGVydHlOYW1lID09PSBcIkZpZWxkc1wiKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKTtcclxuICAgICAgdGhpcy5yZWxvYWRGaWVsZHNUYWJsZSgpO1xyXG4gICAgfSBlbHNlIGlmIChwcm9wZXJ0eU5hbWUgPT09IFwiQWN0aW9uc09uUmVjb3JkXCIpIHtcclxuICAgICAgdGhpcy5zZXRBY3Rpb25PcmRpbmFsUG9zaXRpb24oKTtcclxuICAgICAgdGhpcy5yZWxvYWRBY3Rpb25zT25SZWNvcmRUYWJsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW1wb3N0YSBsJ29yZGluYW1lbnRvIGRlbGxlIHNlemlvbmkgY2hlIGNvbXBvbmdvbm8gbGEgZm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIHNldEZvcm1GaWVsZEdyb3VwT3JkaW5hbFBvc2l0aW9uKCkge1xyXG4gICAgdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMuZm9yRWFjaCgoZywgaSkgPT4gKGcuT3JkaW5hbFBvc2l0aW9uID0gaSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW1wb3N0YSBsJ29yZGluYW1lbnRvIGRlaSBjYW1waSBhbGwnaW50ZXJubyBkZWxsYSBmb3JtIGluIGJhc2UgYWxsJ29yZGluZSBjaGUgbCd1dGVudGVcclxuICAgKiBoYSBkZWZpbml0byBuZWxsYSB0YWJlbGxhIGluIGN1aSBzb25vIG1vc3RyYXRpXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRGaWVsZE9yZGluYWxQb3NpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmZvcm0uRmllbGRzKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5GaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgICBmaWVsZC5PcmRpbmFsUG9zaXRpb24gPSB0aGlzLmZvcm0uRmllbGRzLmluZGV4T2YoZmllbGQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmljYXJpY2FyZSBpIGRhdGkgZGVsbGEgdGFiZWxsYSBkZWkgY2FtcGkgYWdnaXVudGkgaW4gdW5hIGZvcm1cclxuICAgKi9cclxuICBwcml2YXRlIHJlbG9hZEZpZWxkc1RhYmxlKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGRzVGFibGUpIHtcclxuICAgICAgdGhpcy5maWVsZHNUYWJsZS5yZWxvYWREYXRhdGFibGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEltcG9zdGEgbCdvcmRpbmFtZW50byBkZWkgY2FtcGkgYWxsJ2ludGVybm8gZGVsbGEgZm9ybSBpbiBiYXNlIGFsbCdvcmRpbmUgY2hlIGwndXRlbnRlXHJcbiAgICogaGEgZGVmaW5pdG8gbmVsbGEgdGFiZWxsYSBpbiBjdWkgc29ubyBtb3N0cmF0aVxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0QWN0aW9uT3JkaW5hbFBvc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQpIHtcclxuICAgICAgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZC5mb3JFYWNoKChhY3Rpb24pID0+IHtcclxuICAgICAgICBhY3Rpb24uT3JkaW5hbFBvc2l0aW9uID0gdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZC5pbmRleE9mKGFjdGlvbik7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW1wb3N0YSBsJ29yZGluYW1lbnRvIGRlaSBjYW1waSBhbGwnaW50ZXJubyBkZWxsYSBmb3JtIGluIGJhc2UgYWxsJ29yZGluZSBjaGUgbCd1dGVudGVcclxuICAgKiBoYSBkZWZpbml0byBuZWxsYSB0YWJlbGxhIGluIGN1aSBzb25vIG1vc3RyYXRpXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRBY3Rpb25CdXR0b25PcmRpbmFsUG9zaXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMpIHtcclxuICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMuZm9yRWFjaCgoYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgYWN0aW9uLk9yZGluYWxQb3NpdGlvbiA9IHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zLmluZGV4T2YoYWN0aW9uKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJpY2FyaWNhcmUgaSBkYXRpIGRlbGxhIHRhYmVsbGEgZGVsbGUgYXppb25pIGFnZ2l1bnRpdmUgc3VpIHJlY29yZCBkZWxsYSBGb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVsb2FkQWN0aW9uc09uUmVjb3JkVGFibGUoKSB7XHJcbiAgICBpZiAodGhpcy5hY3Rpb25zT25SZWNvcmRUYWJsZSkge1xyXG4gICAgICB0aGlzLmFjdGlvbnNPblJlY29yZFRhYmxlLnJlbG9hZERhdGF0YWJsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaWNhcmljYXJlIGkgZGF0aSBkZWxsYSB0YWJlbGxhIGRlbGxlIGF6aW9uaSBhZ2dpdW50aXZlIHN1aSByZWNvcmQgZGVsbGEgRm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIHJlbG9hZEFjdGlvbkJ1dHRvbnNPblJlY29yZFRhYmxlKCkge1xyXG4gICAgaWYgKHRoaXMuYWN0aW9uQnV0dG9uc1RhYmxlKSB7XHJcbiAgICAgIHRoaXMuYWN0aW9uQnV0dG9uc1RhYmxlLnJlbG9hZERhdGF0YWJsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIG9uRXh0ZXJuYWxDb21wb25lbnRPdXQoZXY6IGV2ZW50T3V0KSB7XHJcbiAgICB0aGlzLm91dC5lbWl0KGV2KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJvY2Vzc05leHRBaURhdGFHZXR0ZXJGaWVsZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY3VycmVudEFpRGF0YUdldHRlckZpZWxkID0gdGhpcy5wZW5kaW5nQWlEYXRhR2V0dGVyRmllbGRzLnNoaWZ0KCk7XHJcbiAgICB0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50LmlucHV0UGFyYW1zLmNvbmZpZy5tb2RlID0gUXVlcnlFZGl0b3JNb2RlRW51bS5DT01QT1NFUjtcclxuICAgIHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQuaW5wdXRQYXJhbXMuY29uZmlnLmxvYWRRdWVyeVN0YXR1c2VzID0gbnVsbDtcclxuICAgIHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQuaW5wdXRQYXJhbXMuY29uZmlnLkRhdGFHZXR0ZXJTcGVlY2hUZXh0ID0gdGhpcy5jdXJyZW50QWlEYXRhR2V0dGVyRmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyU3BlZWNoVGV4dDtcclxuICAgIC8vIEZvcnphIGxhIChyaSljcmVhemlvbmUgZGVsIGNvbXBvbmVudGUgYXp6ZXJhbmRvIHByaW1hIGlsIGZsYWdcclxuICAgIHRoaXMuYWlEYXRhR2V0dGVyTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7IHRoaXMuYWlEYXRhR2V0dGVyTG9hZGluZyA9IHRydWU7IH0pO1xyXG4gIH1cclxuXHJcbiAgb25BaURhdGFHZXR0ZXJPdXQoZXY6IGV2ZW50T3V0KTogdm9pZCB7XHJcbiAgICBpZiAoZXYuQmVoYXZpb3Vycy5pbmRleE9mKFwic2F2ZS1xdWVyeVwiKSA9PT0gLTEgfHwgIXRoaXMuY3VycmVudEFpRGF0YUdldHRlckZpZWxkKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgZGF0YSA9IGV2LlBhcmFtcztcclxuICAgIHRoaXMuY3VycmVudEFpRGF0YUdldHRlckZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlID0gZGF0YTtcclxuICAgIHRoaXMuY3VycmVudEFpRGF0YUdldHRlckZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNhcmRpbmFsaXR5ID0gMTtcclxuICAgIHRoaXMuY3VycmVudEFpRGF0YUdldHRlckZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckhhc1Jlc2V0QnV0dG9uID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBEYXRhR2V0dGVyQ29sdW1uRm9yY2UgZGV2ZSBlc3NlcmUgbGEgc3RyaW5nYSBjaGlhdmUgKG5vbiBsJ29nZ2V0dG8pIHBlciBmdW56aW9uYXJlIGNvbiBlcXAtc2VsZWN0XHJcbiAgICBjb25zdCBjb2x1bW5Gb3JjZSA9IGRhdGE/LkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZTtcclxuICAgIGlmIChjb2x1bW5Gb3JjZSkge1xyXG4gICAgICAvLyBWMiBzZXJ2ZXIgcmVzdGl0dWlzY2UgeyBrZXksIHZhbHVlLCBrZXlQcm9wZXJ0eSB9IOKAlCBlc3RyYWlhbW8gc29sbyBpbCBrZXkgc3RyaW5nXHJcbiAgICAgIHRoaXMuY3VycmVudEFpRGF0YUdldHRlckZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlID1cclxuICAgICAgICB0eXBlb2YgY29sdW1uRm9yY2UgPT09ICdvYmplY3QnID8gY29sdW1uRm9yY2Uua2V5IDogY29sdW1uRm9yY2U7XHJcbiAgICB9IGVsc2UgaWYgKGRhdGE/LnNlbGVjdGVkRmllbGRzPy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgY29uc3Qgc2YgPSBkYXRhLnNlbGVjdGVkRmllbGRzWzBdO1xyXG4gICAgICB0aGlzLmN1cnJlbnRBaURhdGFHZXR0ZXJGaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSA9XHJcbiAgICAgICAgc2YuRGF0YWJhc2VUYWJsZU5hbWUgKyBcIl9cIiArIHNmLlByb3BlcnR5TmFtZSArIFwiX19cIiArIHNmLkN1cnJlbnRUcmFuc2xhdGUucmVwbGFjZSgvIC9nLCAnXycpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY3VycmVudEFpRGF0YUdldHRlckZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclNwZWVjaFRleHQgPSBudWxsO1xyXG4gICAgLy8gQXp6ZXJhIERhdGFHZXR0ZXJTcGVlY2hUZXh0IGRhbCBjb25maWcgb2JqZWN0IHBlciBldml0YXJlIGNoZSBcIk1vZGlmaWNhXCIgbG8gcmlsYW5jaVxyXG4gICAgdGhpcy5RdWVyeUVkaXRvckNvbXBvbmVudC5pbnB1dFBhcmFtcy5jb25maWcuRGF0YUdldHRlclNwZWVjaFRleHQgPSBudWxsO1xyXG4gICAgdGhpcy5jdXJyZW50QWlEYXRhR2V0dGVyRmllbGQgPSBudWxsO1xyXG4gICAgdGhpcy5haURhdGFHZXR0ZXJMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMucGVuZGluZ0FpRGF0YUdldHRlckZpZWxkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMucHJvY2Vzc05leHRBaURhdGFHZXR0ZXJGaWVsZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVFJJR0dFUlNcclxuICAgKi9cclxuXHJcbiAgb3BlblRyaWdnZXJzRGlhbG9nKGV2OiBUcmlnZ2VyID0gbnVsbCkge1xyXG5cclxuICAgIGlmIChldiAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmlnZ2VyID0gZXY7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVHJpZ2dlciA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kaWFsb2dUcmlnZ2Vyc1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dUcmlnZ2Vycywge1xyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICB3aWR0aDogXCI3NSVcIixcclxuICAgICAgaGVpZ2h0OiBcIjgwJVwiLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzYXZlVHJpZ2dlcihlbGVtZW50OiBUcmlnZ2VyKSB7XHJcblxyXG4gICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5mb3JtLlRyaWdnZXJzICE9IG51bGwpIHtcclxuICAgICAgICB2YXIgZXhpc3RzVHJpZ2dlciA9IHRoaXMuZm9ybS5UcmlnZ2Vycy5maW5kKHggPT4geC5DSUQgPT0gZWxlbWVudC5DSUQpO1xyXG4gICAgICAgIGlmIChleGlzdHNUcmlnZ2VyID09IG51bGwpIHtcclxuICAgICAgICAgIC8vIE51b3ZvIHRyaWdnZXJcclxuICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2Vycy5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBleGlzdHNUcmlnZ2VyID0gZWxlbWVudDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gbmV3IEFycmF5PFRyaWdnZXI+KCk7XHJcbiAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzLnB1c2goZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50cmlnZ2Vyc1RhYmxlLnJlbG9hZERhdGF0YWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGlhbG9nVHJpZ2dlcnNSZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVRyaWdnZXIoZWxlbWVudDogVHJpZ2dlcikge1xyXG4gICAgdmFyIGluZGV4ID0gdGhpcy5mb3JtLlRyaWdnZXJzLmZpbmRJbmRleCh4ID0+IHguQ0lEID09IGVsZW1lbnQuQ0lEKTtcclxuICAgIHRoaXMuZm9ybS5UcmlnZ2Vycy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgdGhpcy50cmlnZ2Vyc1RhYmxlLnJlbG9hZERhdGF0YWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlQWN0aW9uQnV0dG9uKGVsZW1lbnQ6IEFjdGlvbkJ1dHRvbikge1xyXG4gICAgdmFyIGluZGV4ID0gdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMuZmluZEluZGV4KHggPT4geC5CdXR0b25Db2RlID09IGVsZW1lbnQuQnV0dG9uQ29kZSk7XHJcbiAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgdGhpcy5hY3Rpb25CdXR0b25zVGFibGUucmVsb2FkRGF0YXRhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBvcGVuQWlFZGl0RGlhbG9nKCkge1xyXG4gICAgdGhpcy5haUVkaXRQcm9tcHQgPSBcIlwiO1xyXG4gICAgdGhpcy5haUVkaXRBdHRhY2htZW50cyA9IFtdO1xyXG4gICAgdGhpcy5haUVkaXRBdXRvc2F2ZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5haUVkaXRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dBaVByb21wdEhpc3RvcnkgPSB0cnVlO1xyXG4gICAgdGhpcy5kaWFsb2dBaUVkaXRSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nQWlFZGl0LCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBcIjYwJVwiLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZUFpRWRpdERpYWxvZygpIHtcclxuICAgIHRoaXMuZGlhbG9nQWlFZGl0UmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICBvbkFpRWRpdEZvckZpZWxkKGZpZWxkQ29kZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmFpRWRpdEZpZWxkQ29udGV4dCA9IHsgY29kZTogZmllbGRDb2RlIH07XHJcbiAgICB0aGlzLm9wZW5BaUVkaXREaWFsb2coKTtcclxuICB9XHJcblxyXG4gIG9uQWlHcmFwaGljU3VnZ2VzdChkYXRhOiB7IGNvZGU6IHN0cmluZzsgaGludDogc3RyaW5nIH0pOiB2b2lkIHtcclxuICAgIGNvbnN0IHJhd0hpbnQgPSBkYXRhLmhpbnQ/LnRyaW0oKSA/PyAnJztcclxuICAgIGNvbnN0IGZpZWxkTGFiZWwgPSBkYXRhLmNvZGU/LnRyaW0oKSB8fCAnX2NhbXBvc2VuemFub21lXyc7XHJcblxyXG4gICAgaWYgKCF0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbj8uRm9ybXM/LlNwZWVjaFRvR3JhcGhpY3NFbmRQb2ludCkge1xyXG4gICAgICAvLyBGYWxsYmFjazogcGFzc2EgaWwgcmF3SGludCBuZWxsJ2luamVjdGVkUHJvbXB0OyBzZW5kQWlFZGl0IGVzdHJhcnLDoCBpbCBtb2RlbGxvIGRhIGVzc29cclxuICAgICAgY29uc3QgaW5qZWN0ZWRQcm9tcHQgPSByYXdIaW50XHJcbiAgICAgICAgPyBgVm9nbGlvIG1vZGlmaWNhcmUgaW4gbWFuaWVyYSBjb21wbGV0YSBsYSBncmFmaWNhIGRlbCBjYW1wbyAnJHtmaWVsZExhYmVsfScgc2VndWVuZG8gaW4gbWFuaWVyYSBpbmNvbnRlc3RhYmlsZSBxdWVzdGEgaW5kaWNhemlvbmU6ICcke3Jhd0hpbnR9J2BcclxuICAgICAgICA6IGBWb2dsaW8gbW9kaWZpY2FyZSBpbiBtYW5pZXJhIGNvbXBsZXRhIGxhIGdyYWZpY2EgZGVsIGNhbXBvICcke2ZpZWxkTGFiZWx9JyBjb24gdW5vIHN0aWxlIGNyZWF0aXZvIGUgb3JpZ2luYWxlIGEgdHVhIHNjZWx0YWA7XHJcbiAgICAgIHRoaXMuYWlFZGl0RmllbGRDb250ZXh0ID0geyBjb2RlOiBkYXRhLmNvZGUgfTtcclxuICAgICAgdGhpcy5haUZpZWxkU3VnZ2VzdExvYWRpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNlbmRBaUVkaXQoaW5qZWN0ZWRQcm9tcHQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgeyBjbGVhblRleHQ6IGhpbnQsIG1vZGVsSWQ6IGFpTW9kZWxJZCB9ID0gdGhpcy5leHRyYWN0TW9kZWxGcm9tVGV4dChyYXdIaW50KTtcclxuXHJcbiAgICAvLyBUcm92YSBpbCBjYW1wbzogZ2nDoCBzYWx2YXRvIG5lbCBmb3JtIG9wcHVyZSBudW92byBhbmNvcmEgbmVsIGRpYWxvZ1xyXG4gICAgY29uc3QgZmllbGRJbkZvcm0gPSB0aGlzLmZvcm0/LkZpZWxkcz8uZmluZChmID0+IGYuTGFiZWwgPT09IGZpZWxkTGFiZWwpID8/IG51bGw7XHJcbiAgICBjb25zdCBjdXJyZW50RmllbGQgPSBmaWVsZEluRm9ybSA/PyB0aGlzLnNlbGVjdGVkRmllbGQ7XHJcbiAgICBpZiAoIWN1cnJlbnRGaWVsZCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuYWlGaWVsZFN1Z2dlc3RMb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBTdGVzc28gcGF5bG9hZCBkaSBvbkZvcm1HcmFwaGljU3VnZ2VzdCwgbWEgRmllbGRzIGNvbiBzb2xvIGlsIGNhbXBvIGNvcnJlbnRlXHJcbiAgICBjb25zdCBncmFwaGljc1BhcmFtczogRW5kUG9pbnREYXRhUGFyYW1zW10gPSBbXHJcbiAgICAgIHsgUGFyYW1OYW1lOiAnTmFtZScsIFBhcmFtVmFsdWU6IHRoaXMuZm9ybT8uTmFtZSA/PyBmaWVsZExhYmVsLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bJ0luIEJvZHknXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogJ0Rlc2NyaXB0aW9uJywgUGFyYW1WYWx1ZTogdGhpcy5mb3JtPy5EZXNjcmlwdGlvbiA/PyBudWxsLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bJ0luIEJvZHknXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogJ1RoZW1lQ1NTJywgUGFyYW1WYWx1ZTogdGhpcy5mb3JtPy5UaGVtZUNTUyA/PyBudWxsLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bJ0luIEJvZHknXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogJ1RpdGxlQ1NTJywgUGFyYW1WYWx1ZTogdGhpcy5mb3JtPy5UaXRsZUNTUyA/PyBudWxsLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bJ0luIEJvZHknXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogJ0ZpZWxkcycsIFBhcmFtVmFsdWU6IFt7IExhYmVsOiBjdXJyZW50RmllbGQuTGFiZWwsIEZpZWxkVHlwZTogY3VycmVudEZpZWxkLkZpZWxkVHlwZSB9XSwgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtWydJbiBCb2R5J10gfSxcclxuICAgICAgeyBQYXJhbU5hbWU6ICdIaW50JywgUGFyYW1WYWx1ZTogaGludCB8fCB0aGlzLmJ1aWxkUmFuZG9tR3JhcGhpY0hpbnQoKSwgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtWydJbiBCb2R5J10gfSxcclxuICAgICAgeyBQYXJhbU5hbWU6ICdNb2RlbElkJywgUGFyYW1WYWx1ZTogYWlNb2RlbElkLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bJ0luIEJvZHknXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogJ1NpbmdsZUZpZWxkTW9kZScsIFBhcmFtVmFsdWU6IHRydWUsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVsnSW4gQm9keSddIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5TcGVlY2hUb0dyYXBoaWNzRW5kUG9pbnQsXHJcbiAgICAgIGdyYXBoaWNzUGFyYW1zLFxyXG4gICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmFpRmllbGRTdWdnZXN0TG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBjb25zdCByID0gcmVzIGFzIHsgRmllbGRTdHlsZXM/OiB7IFtjc3NDbGFzc05hbWU6IHN0cmluZ106IHsgW3Byb3A6IHN0cmluZ106IHN0cmluZyB9IH07IFdhcm5pbmdzPzogc3RyaW5nW10gfTtcclxuXHJcbiAgICAgICAgLy8gQXBwbGljYSBGaWVsZFN0eWxlcyBhbCBjYW1wbyB0YXJnZXQ7IHNlIHZlQXBwbHlUb0FsbE9mVHlwZSDDqCBhdHRpdm8sIHByb3BhZ2EgYSB0dXR0aSBpIGNhbXBpIGRlbGxvIHN0ZXNzbyB0aXBvXHJcbiAgICAgICAgaWYgKHIuRmllbGRTdHlsZXMpIHtcclxuICAgICAgICAgIGNvbnN0IGNzc0NsYXNzTmFtZSA9IChFcXBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29tcG9uZW50LkZJRUxEX1RZUEVfQ1NTX0NMQVNTIGFzIGFueSlbY3VycmVudEZpZWxkLkZpZWxkVHlwZV07XHJcbiAgICAgICAgICBpZiAoY3NzQ2xhc3NOYW1lICYmIHIuRmllbGRTdHlsZXNbY3NzQ2xhc3NOYW1lXSAmJiB0eXBlb2Ygci5GaWVsZFN0eWxlc1tjc3NDbGFzc05hbWVdID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy52ZUFwcGx5VG9BbGxPZlR5cGUpIHtcclxuICAgICAgICAgICAgICAodGhpcy5mb3JtLkZpZWxkcyA/PyBbXSkuZmlsdGVyKGYgPT4gZi5GaWVsZFR5cGUgPT09IGN1cnJlbnRGaWVsZC5GaWVsZFR5cGUpLmZvckVhY2goZiA9PiB7XHJcbiAgICAgICAgICAgICAgICAoZiBhcyBhbnkpW2Nzc0NsYXNzTmFtZV0gPSB7IC4uLnIuRmllbGRTdHlsZXMhW2Nzc0NsYXNzTmFtZV0gfTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAoY3VycmVudEZpZWxkIGFzIGFueSlbY3NzQ2xhc3NOYW1lXSA9IHIuRmllbGRTdHlsZXNbY3NzQ2xhc3NOYW1lXTtcclxuICAgICAgICAgICAgICBpZiAoZmllbGRJbkZvcm0pIChmaWVsZEluRm9ybSBhcyBhbnkpW2Nzc0NsYXNzTmFtZV0gPSByLkZpZWxkU3R5bGVzW2Nzc0NsYXNzTmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52ZUFwcGx5VG9BbGxPZlR5cGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gQWdnaW9ybmEgc2VsZWN0ZWRGaWVsZCBwZXIgaWwgZGlhbG9nXHJcbiAgICAgICAgY29uc3QgYXBwbHlUYXJnZXQgPSBmaWVsZEluRm9ybSA/PyBjdXJyZW50RmllbGQ7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkID0gdGhpcy5zYWZlQ2xvbmUoYXBwbHlUYXJnZXQpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaWVsZC5Gb3JtdWxhID0gYXBwbHlUYXJnZXQuRm9ybXVsYTtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEZpZWxkLkFuc3dlclN0eWxlID09IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWVsZC5BbnN3ZXJTdHlsZSA9IHsgSW5MaXN0VmlldzogdHJ1ZSwgVmlzaWJsZUlmOiBudWxsLCBGaWVsZHN0eWxlQ1NTOiAnJywgTGFiZWxzdHlsZUNTUzogJycsIENvbFNwYW5TaXplczogW10sIEludmlzaWJpbGl0eTogRmllbGRJbnZpc2liaWxpdHlFbnVtLk5BU0NPU1RPIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmaWVsZEluRm9ybSkgdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgPSB0aGlzLmZvcm0uRmllbGRzLmluZGV4T2YoZmllbGRJbkZvcm0pO1xyXG5cclxuICAgICAgICAvLyBSaWFwcmkgaWwgZGlhbG9nIGNhbXBvIChzYWx2byBWaXN1YWwgRWRpdG9yIGdyYXBoaWMgc3VnZ2VzdCBtb2RlKVxyXG4gICAgICAgIGlmICghdGhpcy52ZUdyYXBoaWNTdWdnZXN0QWN0aXZlKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5kaWFsb2dGaWVsZFJlZikgdGhpcy5kaWFsb2dGaWVsZFJlZi5jbG9zZSgpO1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dGaWVsZFJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dGaWVsZCwge1xyXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsIGhhc0JhY2tkcm9wOiB0cnVlLCB3aWR0aDogJzc1JScsIGhlaWdodDogJzgwJScsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFnZ2lvcm5hIHByZXZpZXcgc2UgZXJhIGFwZXJ0YVxyXG4gICAgICAgIGNvbnN0IHdhc09uUHJldmlldyA9IHRoaXMuZm9ybUNvbXBsZXRlZDtcclxuICAgICAgICBpZiAod2FzT25QcmV2aWV3KSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm1Db21wbGV0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMucHJldmlld0Zvcm0gPSBudWxsO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNldEZvcm1TdGF0dXModHJ1ZSksIDUwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHRoaXMudmVHcmFwaGljU3VnZ2VzdEFjdGl2ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5TdWNjZXNzKCdHcmFmaWNhIGNhbXBvIGFwcGxpY2F0YSEnKTtcclxuICAgICAgICBpZiAoci5XYXJuaW5ncz8ubGVuZ3RoID4gMCkgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuV2FybmluZyhyLldhcm5pbmdzKTtcclxuICAgICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgdGhpcy5haUZpZWxkU3VnZ2VzdExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnZlR3JhcGhpY1N1Z2dlc3RBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnZlQXBwbHlUb0FsbE9mVHlwZSA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IG1zZyA9IChlcnJvciBhcyBhbnkpPy5lcnJvcjtcclxuICAgICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5FcnJvcih0eXBlb2YgbXNnID09PSAnc3RyaW5nJyAmJiBtc2cudHJpbSgpID8gbXNnIDogJ0Vycm9yZSBuZWxsYSBnZW5lcmF6aW9uZSBkZWxsYSBncmFmaWNhIGRlbCBjYW1wbycpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgb25BaUVkaXRGaWxlQ2hhbmdlKGV2ZW50OiBFdmVudCkge1xyXG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgIGlmICghaW5wdXQuZmlsZXM/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/LmNsb3NlKCk7XHJcbiAgICAvLyBzZXRUaW1lb3V0IG5lY2Vzc2FyaW86IFN3ZWV0QWxlcnQgbm9uIHNpIGFwcmUgY29ycmV0dGFtZW50ZSBzZSBpbCBNYXRlcmlhbCBEaWFsb2cgw6ggYW5jb3JhIGluIGZhc2UgZGkgY2hpdXN1cmFcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5kZWxldGVFbGVtZW50KGZpZWxkLCAnRmllbGRzJyksIDIwMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBISU5UX1BBTEVUVEVTID0gW1xyXG4gICAgJ21vbm9jcm9tYXRpY28gdmlicmFudGUnLCAnY29tcGxlbWVudGFyZScsICd0cmlhZGljbycsICdhbmFsb2dvIGNhbGRvJywgJ2FuYWxvZ28gZnJlZGRvJyxcclxuICAgICdwYXN0ZWxsbyBkZWxpY2F0bycsICduZW9uIHN1IHNjdXJvJywgJ2VhcnRoIHRvbmVzJywgJ29jZWFubyBwcm9mb25kbycsICd0cmFtb250byBjb2xvcmF0bycsXHJcbiAgICAnZm9yZXN0YSBhdXR1bm5hbGUnLCAnbGF2YW5kYSBlIG9ybycsICdjb3JhbGxvIGUgdHVyY2hlc2UnLCAncm9zc28gZSBhbnRyYWNpdGUnLCAndmVyZGUgYWNxdWEgZSBzYWJiaWEnLFxyXG4gICAgJ3Zpb2xhIGVsZXR0cmljbyBlIGdpYWxsbyBsaW1vbmUnLCAncm9zYSBjaXByaWEgZSBncmlnaW8gcGVybGEnLCAnYmx1IGNvYmFsdG8gZSBhcmFuY2lvIGJydWNpYXRvJyxcclxuICAgICdvcm8gYW50aWNvIGUgYm9yZGVhdXgnLCAnbWVudGEgZnJlc2NhIGUgY2lvY2NvbGF0bycsICdhcmdlbnRvIGUgYmx1IGFjY2lhaW8nLCAncGVzY2EgZSBpbmRhY28nLFxyXG4gICAgJ3Jvc3NvIGNpbGllZ2lhIGUgYXZvcmlvJywgJ3RlYWwgc2N1cm8gZSByYW1lJywgJ2xpbWUgZSBibHUgbmF2eScsICdsaWxsYSBlIHZlcmRlIHNhbHZpYScsXHJcbiAgICAnYXp6dXJybyBnaGlhY2NpbyBlIGdyaWdpbyBhcmRlc2lhJywgJ2FtYnJhIGUgcGV0cm9saW8nLCAnc21lcmFsZG8gZSByb3NhIGFudGljbycsICdiaWFuY28gZSBuZXJvIGNvbiBhY2NlbnRvIHJvc3NvIGZ1b2NvJyxcclxuICBdO1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBISU5UX1NUWUxFUyA9IFtcclxuICAgICdtaW5pbWFsaXN0YScsICdib2xkIGUgdml2YWNlJywgJ2VsZWdhbnRlIGUgc29icmlvJywgJ2dpb2Nvc28gZSBkaW5hbWljbycsICdpbmR1c3RyaWFsZScsXHJcbiAgICAncmV0cm9mdXR1cmlzdGEnLCAnb3JnYW5pY28gZSBuYXR1cmFsZScsICd0ZWNoL2RpZ2l0YWxlJywgJ2x1eHVyeSBwcmVtaXVtJywgJ3ZpbnRhZ2UgbW9yYmlkbycsXHJcbiAgICAnZmxhdCBkZXNpZ24gcHVsaXRvJywgJ2dsYXNzbW9ycGhpc20nLCAnbmV1bW9yZmlzbW8nLCAnZGFyayBtb2RlIHJhZmZpbmF0bycsXHJcbiAgICAnYnJ1dGFsaXN0IGNvbiBib3JkaSBzcGVzc2knLCAnc2NhbmRpbmF2byBwdWxpdG8nLCAnYXJ0IGTDqWNvIGdlb21ldHJpY28nLCAnY3liZXJwdW5rIGRpc3RvcGljbycsXHJcbiAgICAncG9wIGFydCBhIHRpbnRlIHBpYXR0ZScsICd3YXRlcmNvbG9yIHBhc3RlbGxvIHNmdW1hdG8nLCAnbmVvbiBhbm5pIG90dGFudGEnLCAnbWF0ZXJpYWwgZGVzaWduIGNvbiBvbWJyZScsXHJcbiAgICAnYXVyb3JhIGJvcmVhbGUnLCAnc3dpc3Mgc3R5bGUgdGlwb2dyYWZpY28nLCAndHJvcGljYWxlIHZpdmFjZScsICdtb25vY3JvbW8gY29uIGFjY2VudG8gc2luZ29sbycsXHJcbiAgICAnYXVyb3JhIG5vdHR1cm5hIHNjdXJhJywgJ2NvdHRhZ2Vjb3JlIGNhbGRvJyxcclxuICBdO1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBISU5UX0FESkVDVElWRVMgPSBbXHJcbiAgICAnb3JpZ2luYWxlJywgJ2ltcHJldmVkaWJpbGUnLCAnYWNjYXR0aXZhbnRlJywgJ3NwZXR0YWNvbGFyZScsICdkZWxpY2F0bycsXHJcbiAgICAnYXVkYWNlJywgJ3JhZmZpbmF0bycsICdnaW9jb3NvJywgJ3ZpdmFjZScsICdtaXN0ZXJpb3NvJyxcclxuICAgICdjYWxkbycsICdmcmVzY28nLCAncm9tYW50aWNvJywgJ2Z1dHVyaXN0aWNvJywgJ2VsZWdhbnRlJyxcclxuICAgICdydXN0aWNvJywgJ21vZGVybm8nLCAndmludGFnZScsICdhcm1vbmlvc28nLCAnc29ycHJlbmRlbnRlJyxcclxuICBdO1xyXG5cclxuICBwcml2YXRlIGJ1aWxkSGludFRleHQoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHBpY2sgPSA8VD4oYXJyOiBUW10pOiBUID0+IGFycltNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBhcnIubGVuZ3RoKV07XHJcbiAgICBjb25zdCBwYWxldHRlID0gcGljayhFcXBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29tcG9uZW50LkhJTlRfUEFMRVRURVMpO1xyXG4gICAgY29uc3Qgc3R5bGUgICA9IHBpY2soRXFwRHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvckNvbXBvbmVudC5ISU5UX1NUWUxFUyk7XHJcbiAgICBjb25zdCBhZGoxICAgID0gcGljayhFcXBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29tcG9uZW50LkhJTlRfQURKRUNUSVZFUyk7XHJcbiAgICBjb25zdCB1c2VUd28gID0gTWF0aC5yYW5kb20oKSA8IDAuNTtcclxuICAgIGNvbnN0IGFkajIgICAgPSB1c2VUd28gPyBwaWNrKEVxcER5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb21wb25lbnQuSElOVF9BREpFQ1RJVkVTLmZpbHRlcihhID0+IGEgIT09IGFkajEpKSA6IG51bGw7XHJcbiAgICBjb25zdCBhZGpUZXh0ID0gYWRqMiA/IGAke2FkajF9IGUgJHthZGoyfWAgOiBhZGoxO1xyXG4gICAgcmV0dXJuIGBQYWxldHRlICR7cGFsZXR0ZX0sIHN0aWxlICR7c3R5bGV9LCAke2FkalRleHR9YDtcclxuICB9XHJcblxyXG4gIHJhbmRvbWl6ZUhpbnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZvcm1HcmFwaGljU3VnZ2VzdEhpbnQgPSB0aGlzLmJ1aWxkSGludFRleHQoKTtcclxuICB9XHJcblxyXG4gIHJhbmRvbWl6ZVZlSGludCgpOiB2b2lkIHtcclxuICAgIHRoaXMudmVHcmFwaGljSGludCA9IHRoaXMuYnVpbGRIaW50VGV4dCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZFJhbmRvbUdyYXBoaWNIaW50KCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBwaWNrID0gPFQ+KGFycjogVFtdKTogVCA9PiBhcnJbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYXJyLmxlbmd0aCldO1xyXG4gICAgY29uc3QgcmFkaXVzID0gWydib3JkZXItcmFkaXVzIHBpY2NvbG8gKDItNHB4KScsICdib3JkZXItcmFkaXVzIG1lZGlvICg4LTEwcHgpJywgJ2JvcmRlci1yYWRpdXMgZ3JhbmRlICgxNi0yMHB4KScsICdib3JkZXItcmFkaXVzIHBpbGxvbGEgKDk5OTlweCknXTtcclxuICAgIHJldHVybiBgQ0FTVUFMRTogcGFsZXR0ZSBcIiR7cGljayhFcXBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29tcG9uZW50LkhJTlRfUEFMRVRURVMpfVwiLCBzdGlsZSBcIiR7cGljayhFcXBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29tcG9uZW50LkhJTlRfU1RZTEVTKX1cIiwgJHtwaWNrKHJhZGl1cyl9LiBJZ25vcmEgbGEgdGFiZWxsYSBwcmVzZXQgc2V0dG9yaWFsaSBlIGNyZWEgdW5hIGdyYWZpY2Egb3JpZ2luYWxlIGUgaW1wcmV2ZWRpYmlsZS5gO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWZyZXNoUHJldmlldygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmZvcm1Db21wbGV0ZWQpIHtcclxuICAgICAgdGhpcy5mb3JtQ29tcGxldGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucHJldmlld0Zvcm0gPSBudWxsO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+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/LlNwZWVjaFRvR3JhcGhpY3NFbmRQb2ludFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tZm9ybS1ncmFwaGljLXN1Z2dlc3RcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtR3JhcGhpY1N1Z2dlc3RMb2FkaW5nXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRm9ybUdyYXBoaWNTdWdnZXN0SW5wdXQoKVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtc3Bpbm5lciAqbmdJZj1cImZvcm1HcmFwaGljU3VnZ2VzdExvYWRpbmdcIiBkaWFtZXRlcj1cIjE0XCJcclxuICAgICAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlO21hcmdpbi1yaWdodDo0cHhcIj48L21hdC1zcGlubmVyPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIiFmb3JtR3JhcGhpY1N1Z2dlc3RMb2FkaW5nXCI+cGFsZXR0ZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAge3sgZm9ybUdyYXBoaWNTdWdnZXN0TG9hZGluZyA/ICdFbGFib3JhemlvbmUuLi4nIDogJ1N1Z2dlcmlzY2kgR3JhZmljYSBDb21wbGV0YScgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWhpbnQtaW5wdXQtZ3JvdXBcIiAqbmdJZj1cInNob3dGb3JtR3JhcGhpY1N1Z2dlc3RJbnB1dCAmJiAhZm9ybUdyYXBoaWNTdWdnZXN0TG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWdyYXBoaWMtc2NvcGUtc2VsZWN0XCIgWyhuZ01vZGVsKV09XCJmb3JtR3JhcGhpY1Njb3BlXCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiPlxyXG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFsbFwiPlR1dHRvPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibWFpblwiPlByaW5jaXBhbGU8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdCBvZiBwcmVzZW50RmllbGRUeXBlT3B0aW9uc1wiIFt2YWx1ZV09XCJvcHQudmFsdWVcIj57eyBvcHQubGFiZWwgfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1oaW50LXJhbmRvbWl6ZVwiIChjbGljayk9XCJyYW5kb21pemVIaW50KClcIiBtYXRUb29sdGlwPVwiU3VnZ2VyaW1lbnRvIGNhc3VhbGVcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj50aXBzX2FuZF91cGRhdGVzPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tZ3JhcGhpYy1oaW50LWlucHV0XCIgWyhuZ01vZGVsKV09XCJmb3JtR3JhcGhpY1N1Z2dlc3RIaW50XCJcclxuICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlcy4gdG9uaSBkaSBibHUgc2N1cm8sIHN0aWxlIHByb2Zlc3Npb25hbGUsIHNmb25kbyBzZnVtYXRvLi4uXCIgLz5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1mb3JtLWdyYXBoaWMtc2VuZFwiIChjbGljayk9XCJvbkZvcm1HcmFwaGljU3VnZ2VzdCgpXCJcclxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJBcHBsaWNhIHN1Z2dlcmltZW50byBncmFmaWNvIGFsIGZvcm1cIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5hdXRvX2ZpeF9oaWdoPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxociBjbGFzcz1cImdyYWZpY2EtYWktc2VwYXJhdG9yXCIgLz5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtc3RhcnQgZ3JhZmljYS1yb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJncmFmaWNhLWZpZWxkLWxhYmVsXCI+SW1tYWdpbmUgZGkgc2ZvbmRvPC9wPlxyXG4gICAgICAgICAgICAgIDxlcXAtYXR0YWNobWVudHMgW2F0dGFjaG1lbnRzTGlzdF09XCJiZ0F0dGFjaG1lbnRMaXN0XCIgW3Nob3dNYXRDYXJkXT1cImZhbHNlXCIgW2FsbG93T25seUltYWdlc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIFtpc0Rpc2FibGVkXT1cImZhbHNlXCIgW3Nob3dJbmxpbmVQcmV2aWV3XT1cInRydWVcIiBbbXVsdGlwbGVBdHRhY2htZW50XT1cImZhbHNlXCIgW3Nob3dIZWFkZXJdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgW2FsbG93ZWRUeXBlc109XCJbQXR0YWNobWVudFR5cGUuRklMRV1cIiAobG9jYWxFZGl0ZWRBdHRhY2htZW50cyk9XCJvbkJnSW1hZ2VDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAob25EZWxldGVBdHRhY2htZW50KT1cIm9uQmdJbWFnZURlbGV0ZSgpXCI+XHJcbiAgICAgICAgICAgICAgPC9lcXAtYXR0YWNobWVudHM+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ3LTEwMFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkNTUyBQcmluY2lwYWxlPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmb3JtLlRoZW1lQ1NTXCIgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcclxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlcy4gbWF4LXdpZHRoOiA4MDBweDsgcGFkZGluZzogMTZweDsgYmFja2dyb3VuZDogI2Y1ZjVmNTtcIiByb3dzPVwiNVwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInctMTAwXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+Q1NTIFRpdG9sbzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIG1hdElucHV0IFsobmdNb2RlbCldPVwiZm9ybS5UaXRsZUNTU1wiXHJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInByZXZpZXdGb3JtICYmIChwcmV2aWV3Rm9ybS5UaXRsZUNTUyA9ICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxyXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImVzLiBmb250LXNpemU6IDJyZW07IGZvbnQtd2VpZ2h0OiA3MDA7IGNvbG9yOiAjZmZmO1wiIHJvd3M9XCI1XCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgICAgPC9tYXQtYWNjb3JkaW9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGhyIC8+XHJcblxyXG4gICAgPGRpdiBbc3R5bGVdPVwicHJldmlld0JnU3R5bGVcIj5cclxuICAgICAgPGRpdiBbc3R5bGVdPVwicHJldmlld1RoZW1lU3R5bGVcIj5cclxuICAgICAgICA8YWRkLWZvcm0tcmVjb3JkICpuZ0lmPVwicHJldmlld0Zvcm0gJiYgZm9ybUNvbXBsZXRlZFwiIFtmb3JtXT1cInByZXZpZXdGb3JtXCIgW3VzZXJJRF09XCJVc2VySURcIiBbb3JnYUlEXT1cIm9yZ2FJRFwiXHJcbiAgICAgICAgICBbZm9ybXVsYU9iamVjdF09XCJmb3JtdWxhT2JqZWN0XCIgW2NvbmZpZ3VyYXRpb25zXT1cInZpZXdDb25maWdcIiBbc2hvd0FsbEZpZWxkc109XCJzaG93QWxsRmllbGRzXCJcclxuICAgICAgICAgIFtRdWVyeUVkaXRvckNvbXBvbmVudF09XCJRdWVyeUVkaXRvckNvbXBvbmVudFwiIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCJcclxuICAgICAgICAgIFt2aXN1YWxFZGl0b3JNb2RlXT1cInZpc3VhbEVkaXRvckFjdGl2ZVwiXHJcbiAgICAgICAgICBbdmVTd2FwRmllbGRDb2RlXT1cInZlU3dhcEZpZWxkPy5MYWJlbCA/PyBudWxsXCJcclxuICAgICAgICAgICh2ZUZpZWxkQ2xpY2spPVwib25WZUZpZWxkQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICAob3V0KT1cIm9uRXh0ZXJuYWxDb21wb25lbnRPdXQoJGV2ZW50KVwiIChmaXJlVHJpZ2dlcik9XCJvbkZpcmVUcmlnZ2VyKCRldmVudClcIiBbaW5Db25maWddPVwidHJ1ZVwiPlxyXG4gICAgICAgIDwvYWRkLWZvcm0tcmVjb3JkPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtdC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGJ1dHRvbi1uZXh0RGl2XCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJtci0yIGJ1dHRvbi1leGl0XCIgbWF0LXJhaXNlZC1idXR0b24gbWF0U3RlcHBlclByZXZpb3VzIChjbGljayk9XCJzZXRGb3JtU3RhdHVzKGZhbHNlKVwiPlxyXG4gICAgICAgIFByZWNlZGVudGVcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24tbmV4dFwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJzYXZlRm9ybSgpXCI+XHJcbiAgICAgICAgU2FsdmEgZm9ybVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbWF0LXN0ZXA+XHJcbiAgPCEtLSNlbmRyZWdpb24gVklTVUFMSVpaQVpJT05FIEZPUk0gQ1JFQVRBIC0tPlxyXG5cclxuPC9tYXQtaG9yaXpvbnRhbC1zdGVwcGVyPlxyXG5cclxuPCEtLSBESUFMT0cgQUdHSVVOVEEvTU9ESUZJQ0EgQ0FNUE8gLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZGlhbG9nRmllbGQ+XHJcbiAgPGVxcC1keW5hbWljLW1vZHVsZS1hZGQtZm9ybS1maWVsZCBbZm9ybV09XCJmb3JtXCIgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gICAgW2ZpZWxkXT1cInNlbGVjdGVkRmllbGRcIiBbZm9ybXVsYU9iamVjdF09XCJmb3JtdWxhT2JqZWN0XCIgW2luZGV4RmllbGRdPVwiaW5kZXhTZWxlY3RlZEZpZWxkXCJcclxuICAgIFthdmFpbGFibGVGaWVsZHNdPVwiZm9ybS5GaWVsZHNcIiBbY29udGVzdHVhbGl6YXRpb25dPVwiY29udGVzdHVhbGl6YXRpb25cIlxyXG4gICAgW1F1ZXJ5RWRpdG9yQ29tcG9uZW50XT1cIlF1ZXJ5RWRpdG9yQ29tcG9uZW50XCIgW2ZpZWxkc0V4dHJhQ29uZmlnXT1cImZpZWxkc0V4dHJhQ29uZmlnXCJcclxuICAgIFthY3Rpb25CdXR0b25zXT1cImFjdGlvbkJ1dHRvbnNcIiBbYWlGaWVsZFN1Z2dlc3RMb2FkaW5nXT1cImFpRmllbGRTdWdnZXN0TG9hZGluZ1wiXHJcbiAgICBbZm9ybUZpZWxkc0dyb3Vwc109XCJcclxuICAgICAgZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2VcclxuICAgICAgPyBmb3JtLkZvcm1GaWVsZHNHcm91cHNcclxuICAgICAgOiBudWxsXHJcbiAgICAgIFwiXHJcbiAgICAob3BlbkFpRWRpdEZvckZpZWxkRXZlbnQpPVwib25BaUVkaXRGb3JGaWVsZCgkZXZlbnQpXCJcclxuICAgIChvcGVuQWlHcmFwaGljU3VnZ2VzdEV2ZW50KT1cIm9uQWlHcmFwaGljU3VnZ2VzdCgkZXZlbnQpXCJcclxuICAgIChzYXZlRmllbGRFdmVudCk9XCJvblNhdmVGaWVsZCgkZXZlbnQpXCIgKG91dCk9XCJvbkV4dGVybmFsQ29tcG9uZW50T3V0KCRldmVudClcIj5cclxuICA8L2VxcC1keW5hbWljLW1vZHVsZS1hZGQtZm9ybS1maWVsZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gVEVNUExBVEUgUEVSIFZJU1VBTElaWkFSRSBMQSBDT0xPTk5BIERFTExBIFNFWklPTkUgTkVMTEEgVEFCRUxMQSBERUkgRklFTERTIC0tPlxyXG48bmctdGVtcGxhdGUgI2ZpZWxkU2VjdGlvbkNvbHVtblRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIj5cclxuICA8ZXFwLXNlbGVjdCBbYXJyYXlEYXRhXT1cImZvcm0uRm9ybUZpZWxkc0dyb3Vwc1wiIFsobmdNb2RlbElucHV0KV09XCJyb3cuRmllbGRHcm91cFwiIFthcnJheUtleVByb3BlcnR5XT1cIidOYW1lJ1wiXHJcbiAgICBbYXJyYXlWYWx1ZVByb3BlcnR5XT1cIidOYW1lJ1wiIHBsYWNlaG9sZGVyPVwiU2V6aW9uZVwiIFtpc1JlcXVpcmVkXT1cInRydWVcIiBbaW5jbHVkZUZ1bGxPYmplY3RdPVwiZmFsc2VcIj5cclxuICA8L2VxcC1zZWxlY3Q+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIERJQUxPRyBQRVIgQUdHSVVOR0VSRS9NT0RJRklDQVJFIFVOQSBBQ1RJT04gU1VJIFJFQ09SRCBERUxMQSBGT1JNIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ0FjdGlvbk9uUmVjb3JkPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkIHRoaXJkLW1vZGFsXCIgc3R5bGU9XCJtYXgtaGVpZ2h0OiA3MHZoICFpbXBvcnRhbnQ7IG92ZXJmbG93LXg6IGhpZGRlbjsgb3ZlcmZsb3cteTogYXV0b1wiPlxyXG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJhY3Rpb25PblJlY29yZEZvcm1Hcm91cFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93IHRpdGxlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci10aXRsZS1zdGFuZGFyZFwiPlxyXG4gICAgICAgICAge3tcclxuICAgICAgICAgIGluZGV4U2VsZWN0ZWRBY3Rpb24gIT0gbnVsbCAmJiBpbmRleFNlbGVjdGVkQWN0aW9uID49IDBcclxuICAgICAgICAgID8gXCJNb2RpZmljYVwiXHJcbiAgICAgICAgICA6IFwiQWdnaXVuZ2lcIlxyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIGF6aW9uZSBzdWwgcmVjb3JkXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yXCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPiBOb21lIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiTmFtZVwiIHJlcXVpcmVkIG1hdElucHV0IFsobmdNb2RlbCldPVwic2VsZWN0ZWRBY3Rpb24uTmFtZVwiIC8+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbD4gSWNvbmEgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJJY29uXCIgcmVxdWlyZWQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEFjdGlvbi5JY29uXCIgLz5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbXQtMlwiPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbD5BemlvbmUgKEphdmFzY3JpcHQpPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCBbcm93c109XCIzXCIgZm9ybUNvbnRyb2xOYW1lPVwiQWN0aW9uXCIgcmVxdWlyZWQgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEFjdGlvbi5BY3Rpb25cIlxyXG4gICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYWN0aW9uQXV0b2NvbXBsZXRlXCIgKGtleXVwKT1cInNldEFjdGlvbkF1dG9jb21wbGV0ZU9wdGlvbnMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgKGZvY3VzKT1cInNldEFjdGlvbkF1dG9jb21wbGV0ZU9wdGlvbnMobnVsbClcIiBzdHlsZT1cIlxyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgbGlnaHRncmF5ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgICAgXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI2FjdGlvbkF1dG9jb21wbGV0ZT1cIm1hdEF1dG9jb21wbGV0ZVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgYWN0aW9uQXV0b2NvbXBsZXRlT3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgbXQtMiBtYi0xXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbnNGb3JtXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIG1hdC1yYWlzZWQtYnV0dG9uIGNhbmNlbFwiIChjbGljayk9XCJjbG9zZURpYWxvZ0FjdGlvbk9uUmVjb3JkKClcIiB0eXBlPVwiYnV0dG9uXCI+XHJcbiAgICAgICAgICAgIEFubnVsbGFcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1yLTIgc2F2ZVwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJzYXZlQWN0aW9uT25SZWNvcmQoKVwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhY3Rpb25PblJlY29yZEZvcm1Hcm91cC5pbnZhbGlkXCIgdHlwZT1cImJ1dHRvblwiPlxyXG4gICAgICAgICAgICBTYWx2YVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9mb3JtPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBESUFMT0cgUEVSIEFHR0lVTkdFUkUvTU9ESUZJQ0FSRSBVTiBCT1RUT05FIEFaSU9ORSAtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dBY3Rpb25CdXR0b24+XHJcbiAgPGFjdGlvbi1idXR0b24tY3JlYXRvciBbZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiIFtmb3JtXT1cImZvcm1cIiBbZm9ybXVsYXNdPVwiYWN0aW9uQnV0dG9uc1wiXHJcbiAgICBbYWN0aW9uQnV0dG9uXT1cInNlbGVjdGVkQWN0aW9uQnV0dG9uXCIgKG9uU2F2ZVJlY29yZCk9XCJzYXZlQWN0aW9uQnV0dG9ucygkZXZlbnQpXCI+PC9hY3Rpb24tYnV0dG9uLWNyZWF0b3I+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIFRFTVBMQVRFIFBFUiBDT05GSUdVUkFSRSBMRSBGT1JNIERJIERFVFRBR0xJTyAtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dJbm5lckZvcm0+XHJcbiAgPCEtLSBbZm9ybV09XCJzZWxlY3RlZElubmVyRm9ybVwiXHJcbiAgICBbaW5uZXJGb3JtTWFuYWdtZW50XT1cInRydWVcIlxyXG4gICAgW2lubmVyRm9ybVJlZl09XCJkaWFsb2dJbm5lckZvcm1SZWZcIiAtLT5cclxuICA8ZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvciBbY29uZmlndXJhdGlvbnNdPVwiaW5uZXJGb3JtQ29uZmlnXCIgKHNhdmVGb3JtRXZlbnQpPVwib25TYXZlT3JFeGl0SW5uZXJGb3JtKCRldmVudClcIj5cclxuICA8L2VxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3I+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIFRFTVBMQVRFIFBFUiBJTVBPUlQgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZGlhbG9nSW1wb3J0PlxyXG4gIDxtYXQtY2FyZCBjbGFzcz1cImltcG9ydERpYWxvZ1wiPlxyXG4gICAgPG1hdC1jYXJkLWhlYWRlciBjbGFzcz1cInAtMiBqdXN0aWZ5LWNvbnRlbnQtYXJvdW5kXCI+XHJcbiAgICAgIDxtYXQtY2FyZC10aXRsZT5cclxuICAgICAgICBJbXBvcnRcclxuICAgICAgPC9tYXQtY2FyZC10aXRsZT5cclxuICAgIDwvbWF0LWNhcmQtaGVhZGVyPlxyXG4gICAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJwLTJcIj5cclxuICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgY2xhc3M9XCJpbnB1dC1maWxlLWJ0biBwYi0yXCIgKGNoYW5nZSk9XCJvbkltcG9ydCgkZXZlbnQpXCIgLz5cclxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuICAgIDxtYXQtY2FyZC1mb290ZXIgY2xhc3M9XCJwLTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tY2xlYXIgYnV0dG9uLWJhY2sgbWUtMlwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwiZGlzYWJsZWRcIiAoY2xpY2spPVwiY2xvc2VJbXBvcnQoKVwiPlxyXG4gICAgICAgIEFubnVsbGFcclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L21hdC1jYXJkLWZvb3Rlcj5cclxuICA8L21hdC1jYXJkPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBESUFMT0cgUEVSIEFHR0lVTkdFUkUvTU9ESUZJQ0FSRSBJIFRSSUdHRVJTIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ1RyaWdnZXJzPlxyXG4gIDx0cmlnZ2VyLWNyZWF0b3IgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIiBbZm9ybV09XCJmb3JtXCIgW2Zvcm11bGFzXT1cInRyaWdnZXJzXCJcclxuICAgIFt0cmlnZ2VyXT1cInNlbGVjdGVkVHJpZ2dlclwiIChvblNhdmVSZWNvcmQpPVwic2F2ZVRyaWdnZXIoJGV2ZW50KVwiPjwvdHJpZ2dlci1jcmVhdG9yPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBESUFMT0cgTU9ESUZJQ0EgQ09OIEFJIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ0FpRWRpdD5cclxuICA8bWF0LWNhcmQgc3R5bGU9XCJtaW4td2lkdGg6IDQ4MHB4XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYWktZGlhbG9nLWhlYWRlclwiPlxyXG4gICAgICA8bWF0LWljb24+YXV0b19maXhfaGlnaDwvbWF0LWljb24+XHJcbiAgICAgIDxzcGFuPnt7IGlzTmV3Rm9ybSA/ICdDcmVhIGZvcm0gY29uIEFJJyA6ICdNb2RpZmljYSBmb3JtIGNvbiBBSScgfX08L3NwYW4+XHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJhaVByb21wdEhpc3RvcnkubGVuZ3RoID4gMFwiIG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBjbGFzcz1cImFpLWhpc3RvcnktdG9nZ2xlLWJ0blwiXHJcbiAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzaG93QWlQcm9tcHRIaXN0b3J5XCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJzaG93QWlQcm9tcHRIaXN0b3J5ID8gJ05hc2NvbmRpIHN0b3JpY28gcmljaGllc3RlJyA6ICdNb3N0cmEgc3RvcmljbyByaWNoaWVzdGUnXCJcclxuICAgICAgICAoY2xpY2spPVwic2hvd0FpUHJvbXB0SGlzdG9yeSA9ICFzaG93QWlQcm9tcHRIaXN0b3J5XCI+XHJcbiAgICAgICAgPG1hdC1pY29uPnt7IHNob3dBaVByb21wdEhpc3RvcnkgPyAnaGlzdG9yeV90b2dnbGVfb2ZmJyA6ICdoaXN0b3J5JyB9fTwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImFpLWRpYWxvZy1ib2R5LWZsZXhcIj5cclxuICAgICAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJwLTMgYWktZGlhbG9nLW1haW4tY29udGVudFwiPlxyXG4gICAgICAgIDwhLS0gUHJvbXB0IHRleHRhcmVhICsgbWljcm9mb25vIC0tPlxyXG4gICAgICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmVcIj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIHN0eWxlPVwid2lkdGg6IDEwMCVcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBpc05ld0Zvcm0gPyAnRGVzY3JpdmkgaWwgZm9ybSBkYSBjcmVhcmUnIDogJ0Rlc2NyaXZpIGxhIG1vZGlmaWNhIGRhIGFwcG9ydGFyZScgfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPHRleHRhcmVhIG1hdElucHV0IFsobmdNb2RlbCldPVwiYWlFZGl0UHJvbXB0XCIgcm93cz1cIjVcIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJpc05ld0Zvcm0gPyAnRXM6IGNyZWEgdW4gZm9ybSBwZXIgbGEgcmVnaXN0cmF6aW9uZSBwYXppZW50aSBjb24gY2FtcGkgbm9tZSwgY29nbm9tZSwgZGF0YSBkaSBuYXNjaXRhIGUgY29kaWNlIGZpc2NhbGUuLi4nIDogJ0VzOiBhZ2dpdW5naSB1biBjYW1wbyBkYXRhIGRpIG5hc2NpdGEsIHJpbXVvdmkgaWwgY2FtcG8gZW1haWwsIHJlbmRpIG9iYmxpZ2F0b3JpbyBpbCBjYW1wbyB0ZWxlZm9uby4uLidcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cInRydWVcIiBTcGVlY2hUb1RleHQgWyhiaW5kZWRUZXh0KV09XCJhaUVkaXRQcm9tcHRcIlxyXG4gICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgcmlnaHQ6IDEycHg7IHRvcDogMTJweDsgY3Vyc29yOiBwb2ludGVyOyBjb2xvcjogIzY2NlwiXHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImlzTmV3Rm9ybSA/ICdQYXJsYSBwZXIgZGVzY3JpdmVyZSBpbCBmb3JtJyA6ICdQYXJsYSBwZXIgZGV0dGFyZSBsYSBtb2RpZmljYSdcIj5rZXlib2FyZF92b2ljZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gQWxsZWdhdGkgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTIgbXQtMVwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJhaUVkaXRGaWxlSW5wdXQuY2xpY2soKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+YXR0YWNoX2ZpbGU8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiA2cHhcIj5BZ2dpdW5naSBhbGxlZ2F0aSAoUERGIG8gaW1tYWdpbmkpPC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8aW5wdXQgI2FpRWRpdEZpbGVJbnB1dCB0eXBlPVwiZmlsZVwiIG11bHRpcGxlIGFjY2VwdD1cImltYWdlLyosYXBwbGljYXRpb24vcGRmXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lXCJcclxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkFpRWRpdEZpbGVDaGFuZ2UoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPHVsICpuZ0lmPVwiYWlFZGl0QXR0YWNobWVudHMubGVuZ3RoID4gMFwiIHN0eWxlPVwibGlzdC1zdHlsZTogbm9uZTsgcGFkZGluZzogMDsgbWFyZ2luOiAwIDAgMTJweFwiPlxyXG4gICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBhdHQgb2YgYWlFZGl0QXR0YWNobWVudHM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogNnB4OyBtYXJnaW4tYm90dG9tOiA0cHhcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4XCI+aW5zZXJ0X2RyaXZlX2ZpbGU8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8c3Bhbj57eyBhdHQuZmlsZU5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT1cImZvbnQtc2l6ZTogMThweDsgY3Vyc29yOiBwb2ludGVyOyBjb2xvcjogIzk5OVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUFpRWRpdEF0dGFjaG1lbnQoaSlcIj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcblxyXG4gICAgICAgIDwhLS0gQXV0b3NhdmUgLS0+XHJcbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJhaUVkaXRBdXRvc2F2ZVwiIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAge3sgaXNOZXdGb3JtID8gJ1NhbHZhIGF1dG9tYXRpY2FtZW50ZSBkb3BvIGxhIGNyZWF6aW9uZScgOiAnU2FsdmEgYXV0b21hdGljYW1lbnRlIGRvcG8gbGEgbW9kaWZpY2EnIH19XHJcbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG5cclxuICAgICAgICA8IS0tIFN0aW1hIGNvc3RvIEFJIChhZ2dpb3JuYXRhIGluIHRlbXBvIHJlYWxlIGFsIHZhcmlhcmUgZGVsIHByb21wdCBlIGRlZ2xpIGFsbGVnYXRpKSAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiPlxyXG4gICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZFwiPlxyXG4gICAgICAgICAgICA8Yj5Db3N0byBzdGltYXRvIHVzbyBBSTwvYj48YnIgLz5cclxuICAgICAgICAgICAgUHJpbW8gdXNvOiBhbCBtYXNzaW1vIHt7IGZvcm1hdEFpRWRpdENvc3QoYWlFZGl0Q29zdEZpcnN0RXVyKSB9fSBFdXJvPGJyIC8+XHJcbiAgICAgICAgICAgIFVzaSBzdWNjZXNzaXZpOiBhbCBtYXNzaW1vIHt7IGZvcm1hdEFpRWRpdENvc3QoYWlFZGl0Q29zdFN1YnNlcXVlbnRFdXIpIH19IEV1cm9cclxuICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuXHJcbiAgICAgIDwhLS0gUGFubmVsbG8gc3RvcmljbyByaWNoaWVzdGUgLS0+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzaG93QWlQcm9tcHRIaXN0b3J5ICYmIGFpUHJvbXB0SGlzdG9yeS5sZW5ndGggPiAwXCIgY2xhc3M9XCJhaS1oaXN0b3J5LXBhbmVsXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFpLWhpc3RvcnktcGFuZWwtdGl0bGVcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT1cImZvbnQtc2l6ZTogMTZweDsgd2lkdGg6IDE2cHg7IGhlaWdodDogMTZweFwiPmhpc3Rvcnk8L21hdC1pY29uPlxyXG4gICAgICAgICAgPHNwYW4+U3RvcmljbyByaWNoaWVzdGU8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFpLWhpc3RvcnktbGlzdFwiPlxyXG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcHJvbXB0IG9mIGFpUHJvbXB0SGlzdG9yeTsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwiYWktaGlzdG9yeS1pdGVtXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktaGlzdG9yeS1pbmRleFwiPnt7IGkgKyAxIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWhpc3RvcnktdGV4dFwiPnt7IHByb21wdCB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxtYXQtY2FyZC1mb290ZXIgY2xhc3M9XCJwLTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIiBzdHlsZT1cImdhcDogOHB4XCI+XHJcbiAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gdHlwZT1cImJ1dHRvblwiIFtkaXNhYmxlZF09XCJhaUVkaXRMb2FkaW5nXCIgKGNsaWNrKT1cImNsb3NlQWlFZGl0RGlhbG9nKClcIj5cclxuICAgICAgICBBbm51bGxhXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIiBbZGlzYWJsZWRdPVwiIWFpRWRpdFByb21wdD8udHJpbSgpIHx8IGFpRWRpdExvYWRpbmdcIlxyXG4gICAgICAgIChjbGljayk9XCJzZW5kQWlFZGl0KClcIj5cclxuICAgICAgICA8bWF0LXNwaW5uZXIgKm5nSWY9XCJhaUVkaXRMb2FkaW5nXCIgZGlhbWV0ZXI9XCIxOFwiXHJcbiAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IGlubGluZS1ibG9jazsgbWFyZ2luLXJpZ2h0OiA2cHg7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGVcIj48L21hdC1zcGlubmVyPlxyXG4gICAgICAgIDxzcGFuPnt7IGFpRWRpdExvYWRpbmcgPyAnRWxhYm9yYXppb25lLi4uJyA6IChpc05ld0Zvcm0gPyAnQ3JlYSBjb24gQUknIDogJ01vZGlmaWNhIGNvbiBBSScpIH19PC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbWF0LWNhcmQtZm9vdGVyPlxyXG4gIDwvbWF0LWNhcmQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIFZJU1VBTCBFRElUT1Ig4oCUIFRvb2x0aXAgYXppb25pIGNhbXBvIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ1ZlVG9vbHRpcD5cclxuICA8ZGl2IGNsYXNzPVwidmUtdG9vbHRpcC1wYW5lbFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInZlLXRvb2x0aXAtaGVhZGVyXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInZlLXRvb2x0aXAtaWNvblwiPmVkaXRfc3F1YXJlPC9tYXQtaWNvbj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJ2ZS10b29sdGlwLXRpdGxlXCI+e3sgdmVTZWxlY3RlZEZpZWxkPy5EZXNjcmlwdGlvbiB9fTwvc3Bhbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImRpYWxvZ1ZlVG9vbHRpcFJlZj8uY2xvc2UoKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF2ZVNob3dHcmFwaGljSW5wdXRcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJ2ZUVkaXRGaWVsZCgpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uPnNldHRpbmdzPC9tYXQtaWNvbj5cclxuICAgICAgICBNb2RpZmljYSBjYW1wb1xyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtICpuZ0lmPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uPy5Gb3Jtcz8uU3BlZWNoVG9Gb3JtRWRpdEVuZFBvaW50XCIgKGNsaWNrKT1cInZlQWlFZGl0KClcIj5cclxuICAgICAgICA8bWF0LWljb24+YXV0b19maXhfaGlnaDwvbWF0LWljb24+XHJcbiAgICAgICAgTW9kaWZpY2EgY29uIElBXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKm5nSWY9XCJlbmRQb2ludENvbmZpZ3VyYXRpb24/LkZvcm1zPy5TcGVlY2hUb0Zvcm1FZGl0RW5kUG9pbnRcIiAoY2xpY2spPVwidmVTaG93R3JhcGhpY0lucHV0ID0gdHJ1ZVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5wYWxldHRlPC9tYXQtaWNvbj5cclxuICAgICAgICBTdWdnZXJpc2NpIEdyYWZpY2FcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwidmVPcGVuUmVvcmRlcigpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj5cclxuICAgICAgICBSaW9yZGluYVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJ2ZVN0YXJ0U3dhcCgpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uPnN3YXBfaG9yaXo8L21hdC1pY29uPlxyXG4gICAgICAgIFNjYW1iaWFcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInZlRGVsZXRlRmllbGQoKVwiIHN0eWxlPVwiY29sb3I6ICNlNTM5MzU7XCI+XHJcbiAgICAgICAgPG1hdC1pY29uIHN0eWxlPVwiY29sb3I6ICNlNTM5MzU7XCI+ZGVsZXRlPC9tYXQtaWNvbj5cclxuICAgICAgICBFbGltaW5hIGNhbXBvXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInZlLXRvb2x0aXAtZ3JhcGhpY1wiICpuZ0lmPVwidmVTaG93R3JhcGhpY0lucHV0XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ2ZS10b29sdGlwLWdyYXBoaWMtaGVhZGVyXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInZlU2hvd0dyYXBoaWNJbnB1dCA9IGZhbHNlOyB2ZUFwcGx5VG9BbGxPZlR5cGUgPSBmYWxzZVwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmFycm93X2JhY2s8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxzcGFuIHN0eWxlPVwiZmxleDoxXCI+R3JhZmljYSBwZXIgXCJ7eyB2ZVNlbGVjdGVkRmllbGQ/LkxhYmVsIH19XCI8L3NwYW4+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4taGludC1yYW5kb21pemVcIiAoY2xpY2spPVwicmFuZG9taXplVmVIaW50KClcIiBtYXRUb29sdGlwPVwiU3VnZ2VyaW1lbnRvIGNhc3VhbGVcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbj50aXBzX2FuZF91cGRhdGVzPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy0xMDBcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPlN1Z2dlcmltZW50byBncmFmaWNvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPHRleHRhcmVhIG1hdElucHV0IFsobmdNb2RlbCldPVwidmVHcmFwaGljSGludFwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxyXG4gICAgICAgICAgcm93cz1cIjNcIiBwbGFjZWhvbGRlcj1cImVzLiBib3JkbyBibHUsIHNmb25kbyBzZW1pLXRyYXNwYXJlbnRlLCBldGljaGV0dGEgaW4gZ3Jhc3NldHRvLi4uXCI+PC90ZXh0YXJlYT5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPGRpdiBjbGFzcz1cInZlLWFwcGx5LWFsbC1yb3dcIj5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cInZlQXBwbHlUb0FsbE9mVHlwZVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIiBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgICAgIEFwcGxpY2EgYSB0dXR0aSBpIDxzdHJvbmc+e3sgdmVTZWxlY3RlZEZpZWxkVHlwZU5hbWUgfX08L3N0cm9uZz5cclxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidmUtdG9vbHRpcC1ncmFwaGljLWFjdGlvbnNcIj5cclxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cInZlU2hvd0dyYXBoaWNJbnB1dCA9IGZhbHNlOyB2ZUFwcGx5VG9BbGxPZlR5cGUgPSBmYWxzZVwiPkFubnVsbGE8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJ2ZVNlbmRHcmFwaGljKClcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbj5hdXRvX2ZpeF9oaWdoPC9tYXQtaWNvbj5cclxuICAgICAgICAgIEludmlhXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIFZJU1VBTCBFRElUT1Ig4oCUIFJpb3JkaW5hIGNhbXBpIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ1ZlUmVvcmRlcj5cclxuICA8bWF0LWNhcmQgY2xhc3M9XCJ2ZS1yZW9yZGVyLWNhcmRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ2ZS1yZW9yZGVyLWhlYWRlclwiPlxyXG4gICAgICA8bWF0LWljb24+ZHJhZ19pbmRpY2F0b3I8L21hdC1pY29uPlxyXG4gICAgICA8c3Bhbj5SaW9yZGluYSBjYW1waTwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgIDxkaXYgY2RrRHJvcExpc3QgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJvblZlRHJhZ0Ryb3BSZW9yZGVyKCRldmVudClcIiBjbGFzcz1cInZlLXJlb3JkZXItbGlzdFwiPlxyXG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZpZWxkIG9mIHZlUmVvcmRlckZpZWxkc1wiIGNka0RyYWcgY2xhc3M9XCJ2ZS1yZW9yZGVyLWl0ZW1cIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBjZGtEcmFnSGFuZGxlIGNsYXNzPVwidmUtZHJhZy1oYW5kbGVcIj5kcmFnX2luZGljYXRvcjwvbWF0LWljb24+XHJcbiAgICAgICAgICA8c3Bhbj57eyBmaWVsZC5EZXNjcmlwdGlvbiB9fTwvc3Bhbj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2ZS1kcmFnLXBsYWNlaG9sZGVyXCIgKmNka0RyYWdQbGFjZWhvbGRlcj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICA8bWF0LWNhcmQtZm9vdGVyIGNsYXNzPVwicC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCIgc3R5bGU9XCJnYXA6IDhweFwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cImRpYWxvZ1ZlUmVvcmRlclJlZj8uY2xvc2UoKVwiPkFubnVsbGE8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwidmVBcHBseVJlb3JkZXIoKVwiPk9LPC9idXR0b24+XHJcbiAgICA8L21hdC1jYXJkLWZvb3Rlcj5cclxuICA8L21hdC1jYXJkPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBESUFMT0cgQ09OVEVTVFVBTElaWkFaSU9ORSBEQkdFVFRFUiAtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dDb250ZXN0dWFsaXphdGlvbj5cclxuICA8bWF0LWNhcmQgc3R5bGU9XCJtaW4td2lkdGg6IDQyMHB4XCI+XHJcbiAgICA8bWF0LWNhcmQtaGVhZGVyIGNsYXNzPVwicC0yXCI+XHJcbiAgICAgIDxtYXQtY2FyZC10aXRsZT5Db250ZXN0dWFsaXp6YXppb25lIGRlbCBEQkdldHRlcjwvbWF0LWNhcmQtdGl0bGU+XHJcbiAgICA8L21hdC1jYXJkLWhlYWRlcj5cclxuICAgIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwicC0zXCI+XHJcbiAgICAgIDxlcXAtc2VsZWN0IFthcnJheURhdGFdPVwiY29udGVzdHVhbGl6YXRpb25cIiBbKG5nTW9kZWxJbnB1dCldPVwic2VsZWN0ZWRDb250ZXN0dWFsaXphdGlvblwiXHJcbiAgICAgICAgW2FycmF5S2V5UHJvcGVydHldPVwiJ2VudGl0eVRhYmxlTmFtZSdcIiBbYXJyYXlWYWx1ZVByb3BlcnR5XT1cIidlbnRpdHlUYWJsZU5hbWUnXCJcclxuICAgICAgICAobmdNb2RlbElucHV0Q2hhbmdlKT1cIm9uQ29udGVzdHVhbGl6YXRpb25TZWxlY3QoKVwiIFtwbGFjZWhvbGRlcl09XCInQ29udGVzdHVhbGl6emF6aW9uZSBkZWwgREJHZXR0ZXInXCJcclxuICAgICAgICBbaW5jbHVkZUZ1bGxPYmplY3RdPVwiZmFsc2VcIj48L2VxcC1zZWxlY3Q+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZENvbnRlc3R1YWxpemF0aW9uICE9IG51bGxcIiBjbGFzcz1cIm10LTJcIj5cclxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkQ29udGVzdHVhbGl6YXRpb25WYWx1ZVwiXHJcbiAgICAgICAgICAoY2hhbmdlKT1cIm9uQ29udGVzdHVhbGl6YXRpb25TZWxlY3RWYWx1ZSgpXCI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gICAgPG1hdC1jYXJkLWZvb3RlciBjbGFzcz1cInAtMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiIHN0eWxlPVwiZ2FwOiA4cHhcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZGFuZ2VyXCIgKGNsaWNrKT1cImFwcGx5Q29udGVzdHVhbGl6YXRpb24obnVsbCk7IGNsb3NlQ29udGVzdHVhbGl6YXRpb25EaWFsb2coKVwiPlJpbXVvdmk8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJhcHBseUNvbnRlc3R1YWxpemF0aW9uKGNvbnRlc3R1YWxpemF0aW9uKTsgY2xvc2VDb250ZXN0dWFsaXphdGlvbkRpYWxvZygpXCI+QXBwbGljYTwvYnV0dG9uPlxyXG4gICAgPC9tYXQtY2FyZC1mb290ZXI+XHJcbiAgPC9tYXQtY2FyZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gQUkgRGF0YUdldHRlcjogY2FyaWNhbWVudG8gc2lsZW50IGRlbCBRdWVyeUVkaXRvciBwZXIgcG9wb2xhcmUgRGF0YUdldHRlclZhbHVlIHZpYSBwcm9tcHQgLS0+XHJcbjxkaXYgKm5nSWY9XCJhaURhdGFHZXR0ZXJMb2FkaW5nXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7IHBvc2l0aW9uOmFic29sdXRlOyB3aWR0aDowOyBoZWlnaHQ6MDsgb3ZlcmZsb3c6aGlkZGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgPG5nLXRlbXBsYXRlIFthcHBEeW5hbWljTG9hZGVyXSBbZGF0YV09XCJRdWVyeUVkaXRvckNvbXBvbmVudFwiIChvdXQpPVwib25BaURhdGFHZXR0ZXJPdXQoJGV2ZW50KVwiPjwvbmctdGVtcGxhdGU+XHJcbjwvZGl2PiJdfQ==
|
|
2367
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydGVkL2VxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3IvZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydGVkL2VxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3IvZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpREFBaUQ7QUFDakQsT0FBTyxFQUdMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFHTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLGtCQUFrQixFQUVsQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQ0wsaUJBQWlCLEVBR2pCLFVBQVUsR0FDWCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xJLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN4RCxPQUFPLEVBR0wsYUFBYSxHQUNkLE1BQU0sNkNBQTZDLENBQUM7QUFDckQsT0FBTyxFQUNMLGNBQWMsRUFDZCxJQUFJLEVBRUosa0JBQWtCLEVBQ2xCLFlBQVksR0FDYixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFB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QURqQixTQUFTO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFNbEQsa0JBQWtCO3NCQURqQixTQUFTO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFVdkMsYUFBYTtzQkFBdEIsTUFBTTtnQkFLRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBR0csR0FBRztzQkFBWixNQUFNO2dCQUl3QyxjQUFjO3NCQUE1RCxTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHRSxhQUFhO3NCQUEzRCxTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBY0EsWUFBWTtzQkFBeEQsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUlhLHVCQUF1QjtzQkFBOUUsU0FBUzt1QkFBQyx5QkFBeUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBR04sZUFBZTtzQkFBOUQsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0UsZUFBZTtzQkFBOUQsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBpbXBvcnQgeyBUaHJvd1N0bXQgfSBmcm9tICdAYW5ndWxhci9jb21waWxlcic7XHJcbmltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7XHJcbiAgVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gIFVudHlwZWRGb3JtQ29udHJvbCxcclxuICBVbnR5cGVkRm9ybUdyb3VwLFxyXG4gIFZhbGlkYXRvcnMsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xyXG5pbXBvcnQge1xyXG4gIENlbGxBbGlnbm1lbnRFbnVtLFxyXG4gIENvbmZpZ0NvbHVtbixcclxuICBFcXBUYWJsZUNvbXBvbmVudCxcclxuICBUeXBlQ29sdW1uLFxyXG59IGZyb20gXCJAZXFwcm9qZWN0L2VxcC10YWJsZVwiO1xyXG5pbXBvcnQgeyBOdW1lcmljRmllbGQgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9udW1lcmljRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgQmFzZUZpZWxkLCBEYXRhR2V0dGVyLCBEYXRhR2V0dGVyVHlwZUVudW0sIEZpZWxkSW52aXNpYmlsaXR5RW51bSwgRmllbGRUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9iYXNlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9jb250ZXh0Lm1vZGVsXCI7XHJcbmltcG9ydCB7XHJcbiAgRW5kUG9pbnRDb25maWd1cmF0aW9uLFxyXG4gIEVuZFBvaW50RGF0YVBhcmFtcyxcclxuICBQYXJhbVR5cGVFbnVtLFxyXG59IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZW5kUG9pbnRDb25maWd1cmF0aW9uLm1vZGVsXCI7XHJcbmltcG9ydCB7XHJcbiAgQWN0aW9uT25SZWNvcmQsXHJcbiAgRm9ybSxcclxuICBGb3JtRmllbGRHcm91cCxcclxuICBGb3JtU2NhbGFyVHlwZUVudW0sXHJcbiAgRm9ybVR5cGVFbnVtLFxyXG59IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBBcnJheVZhbGlkYXRvcnMgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvY3VzdG9tLWZvcm0tdmFsaWRhdG9ycy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL2VxcC1keW5hbWljLW1vZHVsZS1kaWFsb2cuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZVN0eWxlIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YSwgZXZlbnRPdXQgfSBmcm9tIFwiLi4vLi4vLi4vZGlyZWN0aXZlcy9keW5hbWljLWxvYWRlci9keW5hbWljLWxvYWRlci5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHsgVHJpZ2dlciwgQWN0aW9uQnV0dG9uLCBBY3Rpb25GbGFnRW51bSwgRmlyZVRyaWdnZXIgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdHJpZ2dlci5tb2RlbCc7XHJcbmltcG9ydCB7IENvbnRlc3R1YWxpemF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9nZXR0ZXIubW9kZWxcIjtcclxuaW1wb3J0IHsgSW1hZ2VTZWxlY3RvckZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvaW1hZ2VTZWxlY3RvckZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IEZpZWxkRXh0cmFDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkRXh0cmFDb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHsgQXR0YWNobWVudFR5cGUsIElBdHRhY2htZW50RFRPIH0gZnJvbSBcIkBlcXByb2plY3QvZXFwLWF0dGFjaG1lbnRzXCI7XHJcbmltcG9ydCB7IER5bkF0dGFjaG1lbnQgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2R5bkF0dGFjaG1lbnRcIjtcclxuaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AsIG1vdmVJdGVtSW5BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5pbXBvcnQgeyBpbmplY3RHb29nbGVGb250c0Zyb21Gb3JtIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZ29vZ2xlLWZvbnRzLWluamVjdG9yJztcclxuaW1wb3J0IHsgUXVlcnlFZGl0b3JNb2RlRW51bSB9IGZyb20gXCIuLi8uLi9wcml2YXRlL2RiZ2V0dGVyL2RiZ2V0dGVyLmNvbXBvbmVudFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvclwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9lcXAtZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yLmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRXFwRHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG5cclxuICBASW5wdXQoKSBkZWJ1Z01vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgZmllbGRzRXh0cmFDb25maWc6IEFycmF5PEZpZWxkRXh0cmFDb25maWc+O1xyXG4gIEBJbnB1dCgpIGNvbmZpZ3VyYXRpb25zOiBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29uZmlnID1cclxuICAgIG5ldyBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29uZmlnKCk7XHJcbiAgQElucHV0KCkgZm9ybUlEOiBzdHJpbmcgPSBudWxsO1xyXG4gIEBJbnB1dCgpIHZpZXdNb2RlOiBzdHJpbmcgPSBcImFkZE9yRWRpdFwiOyAvLyBFeHBvcnRcclxuICBASW5wdXQoKSBRdWVyeUVkaXRvckNvbXBvbmVudDogRHluYW1pY0xvYWRlckRpcmVjdGl2ZURhdGE7IC8vIEwnaW50ZXJvIGNvbXBvbmVudGUgcXVlcnkgRWRpdG9yXHJcbiAgQElucHV0KCkgdHJpZ2dlcnM6IGFueTtcclxuICBASW5wdXQoKSBhY3Rpb25CdXR0b25zOiBhbnk7XHJcbiAgQElucHV0KCkgY29udGVzdHVhbGl6YXRpb246IEFycmF5PENvbnRlc3R1YWxpemF0aW9uPjtcclxuICBASW5wdXQoKSBmb3JtdWxhT2JqZWN0OiBhbnk7IC8vIEVzZW1waW86IHtjdXJyb2xlOiByb2xlLCB1c2VyOiB1c2VyLCBtZWRpY2FsOiBtZWRpY2FsZXhhbWluYXRpb259XHJcbiAgQElucHV0KCkgY29uZmlndXJhdG9yVGhlbWU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCBudWxsID0gbnVsbDtcclxuICBASW5wdXQoKSBjb25maWd1cmF0b3JUaGVtZUNzczogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIEBPdXRwdXQoKSBmaXJlVHJpZ2dlcjogRXZlbnRFbWl0dGVyPEZpcmVUcmlnZ2VyPiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlyZVRyaWdnZXI+KCk7XHJcblxyXG4gIGxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8qKlxyXG4gICAqIFRva2VuIGRhIHVzYXJlIG5lZ2xpIGVuZHBvaW50IGRhIGNoaWFtYXJlIHBlciByZWN1cGVyYXJlIG8gc2FsdmFyZSBpIHJlY29yZC5cclxuICAgKiBVc2F0byBzb2xvIHNlIHZpZW5lIHBvcG9sYXRhIGxhIHByb3ByaWV0w6AgXCJiYXNlU2VydmVyVXJsXCIuXHJcbiAgICovXHJcbiAgdXNlclRva2VuOiBzdHJpbmcgPSBudWxsO1xyXG4gIC8qKlxyXG4gICAqIENvbmZpZ3VyYXppb25lIGRlZ2xpIGVuZHBvaW50IGRhIGNoaWFtYXJlIHBlciByZWN1cGVyYXJlIG8gc2FsdmFyZSBpIGRhdGkuXHJcbiAgICogUHXDsiBlc3NlcmUgZGVmaW5pdGEgZGFsbCd1dGVudGUgb3BwdXJlIGxhc2NpYXRhIG51bGwsIHZpZW5lIHBvcG9sYXRhIGNvbiBkZWlcclxuICAgKiB2YWxvcmkgZGkgZGVmYXVsdCBzZSB2aWVuZSB2YWxvcml6emF0YSBsYSBwcm9wcmlldMOgIFwiYmFzZVNlcnZlclVybFwiIGFsdHJpbWVudGlcclxuICAgKiB2aWVuZSBsYXNjaWF0YSBudWxsIGUgbm9uIHZpZW5lIGVzZWd1aXRhIG5lc3N1bmEgY2hpYW1hdGEgYWwgc2VydmVyLlxyXG4gICAqL1xyXG4gIGVuZFBvaW50Q29uZmlndXJhdGlvbjogRW5kUG9pbnRDb25maWd1cmF0aW9uID0gbnVsbDtcclxuICAvKipcclxuICAgKiBVcmwgZGVsIHNlcnZlciBkYSBjaGlhbWFyZSBwZXIgcmVjdWVyYXJlLCBzYWx2YXJlIG8gZWxpbWluYXJlIGkgcmVjb3JkLlxyXG4gICAqIFVzYXRvIHBlciBjcmVhcmUgbGEgY29uZmlndXJhemlvbmUgZGkgZGVmYXVsdCBkZWdsaSBlbmRwb2ludCBkYSBjaGlhbWFyZS5cclxuICAgKi9cclxuICBiYXNlU2VydmVyVXJsOiBzdHJpbmcgPSBudWxsO1xyXG4gIGNvbnRleHQ6IENvbnRleHQgPSBuZXcgQ29udGV4dCgpO1xyXG5cclxuICAvKiBleHBvcnQgdmFyaWFibGVzICovXHJcbiAgZG93bmxvYWROYW1lOiBzdHJpbmc7XHJcbiAgZG93bmxvYWRKc29uSHJlZjogYW55O1xyXG4gIHN0cmluZ2lmaWVkRm9ybTogc3RyaW5nO1xyXG5cclxuICAvKiBpbXBvcnQgdmFyaWFibGVzICovXHJcbiAgaW1wb3J0ZWRNb2R1bGU6IHN0cmluZyA9IG51bGw7IC8vIGpzb24gb2JqZWN0XHJcbiAgZGlhbG9nSW1wb3J0UmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ0ltcG9ydFwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dJbXBvcnQ6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIGZvcm06IEZvcm0gPSBuZXcgRm9ybSgpO1xyXG4gIGJhY2t1cEZvcm06IEZvcm0gPSBudWxsO1xyXG4gIHNhdmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgb3JnYUlEOiBzdHJpbmcgPSBudWxsO1xyXG4gIFVzZXJJRDogbnVtYmVyID0gMzY7XHJcbiAgaW5uZXJGb3JtTWFuYWdtZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgaW5uZXJGb3JtUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcblxyXG4gIC8qIENPTkZJR1VSQVpJT05FIFBFUiBWSVNVQUxJWlpBWklPTkUgRk9STSBDUkVBVEEgKi9cclxuICB2aWV3Q29uZmlnOiBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZyA9IG5ldyBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZyhcclxuICAgIHRydWUsXHJcbiAgICBmYWxzZSxcclxuICAgIGZhbHNlLFxyXG4gICAgXCIwXCJcclxuICApO1xyXG5cclxuICBmb3JtRm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwID0gbnVsbDtcclxuICBmb3JtQ29tcGxldGVkID0gZmFsc2U7XHJcbiAgcHJldmlld0Zvcm06IEZvcm07XHJcbiAgZm9ybUZpZWxkR3JvdXBOYW1lOiBzdHJpbmc7XHJcblxyXG4gIGFjdGlvbkF1dG9jb21wbGV0ZU9wdGlvbnM6IEFycmF5PHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PjtcclxuXHJcbiAgLy8jcmVnaW9uIEVudW1lcmF0b3JpIHVzYXRpIG5lbGwnaHRtbFxyXG4gIEZvcm1UeXBlRW51bSA9IEZvcm1UeXBlRW51bTtcclxuICBGb3JtU2NhbGFyVHlwZUVudW0gPSBGb3JtU2NhbGFyVHlwZUVudW07XHJcbiAgQXR0YWNobWVudFR5cGUgPSBBdHRhY2htZW50VHlwZTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIEdlc3Rpb25lIHNmb25kbyBmb3JtXHJcbiAgZ2V0IHByZXZpZXdCZ1N0eWxlKCk6IFNhZmVTdHlsZSB8IG51bGwge1xyXG4gICAgaWYgKCF0aGlzLmZvcm0/LkJnSW1hZ2VCYXNlNjQpIHJldHVybiBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShbXHJcbiAgICAgIGBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwke3RoaXMuZm9ybS5CZ0ltYWdlQmFzZTY0fScpYCxcclxuICAgICAgJ2JhY2tncm91bmQtc2l6ZTogY292ZXInLFxyXG4gICAgICAnYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyJyxcclxuICAgICAgJ2JhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQnLFxyXG4gICAgXS5qb2luKCc7ICcpKTtcclxuICB9XHJcblxyXG4gIGdldCBwcmV2aWV3VGhlbWVTdHlsZSgpOiBTYWZlU3R5bGUgfCBudWxsIHtcclxuICAgIGlmICghdGhpcy5mb3JtPy5UaGVtZUNTUykgcmV0dXJuIG51bGw7XHJcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKHRoaXMuZm9ybS5UaGVtZUNTUy50cmltKCkucmVwbGFjZSgvOyQvLCAnJykpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGJnQXR0YWNobWVudExpc3QoKTogSUF0dGFjaG1lbnREVE9bXSB7XHJcbiAgICBpZiAoIXRoaXMuZm9ybT8uQmdJbWFnZUJhc2U2NCkgcmV0dXJuIFtdO1xyXG4gICAgY29uc3QgYXR0ID0gbmV3IER5bkF0dGFjaG1lbnQoKTtcclxuICAgIGF0dC5JRCA9IDA7XHJcbiAgICBhdHQuRmlsZURhdGFCYXNlNjQgPSB0aGlzLmZvcm0uQmdJbWFnZUJhc2U2NDtcclxuICAgIGF0dC5Jc0ltYWdlID0gdHJ1ZTtcclxuICAgIGF0dC5GaWxlQ29udGVudFR5cGUgPSAnaW1hZ2UvcG5nJztcclxuICAgIHJldHVybiBbYXR0XTtcclxuICB9XHJcblxyXG4gIG9uQmdJbWFnZUNoYW5nZShhdHRhY2htZW50czogSUF0dGFjaG1lbnREVE9bXSk6IHZvaWQge1xyXG4gICAgY29uc3QgdmFsdWUgPSBhdHRhY2htZW50cz8ubGVuZ3RoID4gMCA/IGF0dGFjaG1lbnRzWzBdLkZpbGVEYXRhQmFzZTY0IDogbnVsbDtcclxuICAgIHRoaXMuZm9ybS5CZ0ltYWdlQmFzZTY0ID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5wcmV2aWV3Rm9ybSkgdGhpcy5wcmV2aWV3Rm9ybS5CZ0ltYWdlQmFzZTY0ID0gdmFsdWU7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBvbkJnSW1hZ2VEZWxldGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZvcm0uQmdJbWFnZUJhc2U2NCA9IG51bGw7XHJcbiAgICBpZiAodGhpcy5wcmV2aWV3Rm9ybSkgdGhpcy5wcmV2aWV3Rm9ybS5CZ0ltYWdlQmFzZTY0ID0gbnVsbDtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEZJRUxEX1RZUEVfTEFCRUxTOiBSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+ID0ge1xyXG4gICAgMTogJ0NhbXBvIGRpIHRlc3RvJyxcclxuICAgIDI6ICdUZXN0byBsdW5nbycsXHJcbiAgICAzOiAnQm9vbGVhbm8nLFxyXG4gICAgNDogJ0RhdGEnLFxyXG4gICAgNTogJ051bWVyaWNvJyxcclxuICAgIDY6ICdBbGxlZ2F0bycsXHJcbiAgICA3OiAnSW1tYWdpbmUnLFxyXG4gICAgODogJ0VsZW5jbycsXHJcbiAgICAxMTogJ1NlbGV0dG9yZSBpbW1hZ2luaScsXHJcbiAgICAxMjogJ0V0aWNoZXR0YScsXHJcbiAgICAxMzogJ0ltbWFnaW5lIGNvbiBtYXJjYXRvcmknLFxyXG4gICAgMTQ6ICdCb3R0b25lIGF6aW9uZScsXHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRklFTERfVFlQRV9DU1NfQ0xBU1M6IFJlY29yZDxudW1iZXIsIHN0cmluZz4gPSB7XHJcbiAgICAxOiAnVGV4dEZpZWxkU3R5bGVDU1MnLFxyXG4gICAgMjogJ1RleHRhcmVhRmllbGRTdHlsZUNTUycsXHJcbiAgICAzOiAnQm9vbGVhbkZpZWxkU3R5bGVDU1MnLFxyXG4gICAgNDogJ0RhdGVGaWVsZFN0eWxlQ1NTJyxcclxuICAgIDU6ICdOdW1lcmljRmllbGRTdHlsZUNTUycsXHJcbiAgICA2OiAnQXR0YWNobWVudEZpZWxkU3R5bGVDU1MnLFxyXG4gICAgNzogJ0ltYWdlRmllbGRTdHlsZUNTUycsXHJcbiAgICA4OiAnTGlzdFZhbHVlRmllbGRTdHlsZUNTUycsXHJcbiAgICAxMTogJ0ltYWdlU2VsZWN0b3JGaWVsZFN0eWxlQ1NTJyxcclxuICAgIDEyOiAnTGFiZWxGaWVsZFN0eWxlQ1NTJyxcclxuICAgIDEzOiAnSW1hZ2VXaXRoTWFya2Vyc0ZpZWxkU3R5bGVDU1MnLFxyXG4gICAgMTQ6ICdBY3Rpb25CdXR0b25GaWVsZFN0eWxlQ1NTJyxcclxuICB9O1xyXG5cclxuICAvLyBNYXBwYSBhbGlhcyBtb2RlbGxvIOKGkiBJRCBDbGF1ZGUgcGnDuSByZWNlbnRlOyBsJ29yZGluZSBkaSBjaGVjayDDqCByaWxldmFudGUgKE9wdXMgcHJpbWEgZGkgU29ubmV0KVxyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE1PREVMX01BUDogQXJyYXk8eyBwYXR0ZXJuOiBSZWdFeHA7IGlkOiBzdHJpbmcgfT4gPSBbXHJcbiAgICB7IHBhdHRlcm46IC9cXGIoPzooPzp1c2F8dXNlfGNvbnx1c2luZylcXHMrKT9vcHVzXFxiL2dpLCBpZDogJ2NsYXVkZS1vcHVzLTQtNycgfSxcclxuICAgIHsgcGF0dGVybjogL1xcYig/Oig/OnVzYXx1c2V8Y29ufHVzaW5nKVxccyspP3Nvbm5ldFxcYi9naSwgaWQ6ICdjbGF1ZGUtc29ubmV0LTQtNicgfSxcclxuICAgIHsgcGF0dGVybjogL1xcYig/Oig/OnVzYXx1c2V8Y29ufHVzaW5nKVxccyspP2hhaWt1XFxiL2dpLCBpZDogJ2NsYXVkZS1oYWlrdS00LTUtMjAyNTEwMDEnIH0sXHJcbiAgXTtcclxuXHJcbiAgcHJpdmF0ZSBleHRyYWN0TW9kZWxGcm9tVGV4dCh0ZXh0OiBzdHJpbmcpOiB7IGNsZWFuVGV4dDogc3RyaW5nOyBtb2RlbElkOiBzdHJpbmcgfCBudWxsIH0ge1xyXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBFcXBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29tcG9uZW50Lk1PREVMX01BUCkge1xyXG4gICAgICBlbnRyeS5wYXR0ZXJuLmxhc3RJbmRleCA9IDA7XHJcbiAgICAgIGlmIChlbnRyeS5wYXR0ZXJuLnRlc3QodGV4dCkpIHtcclxuICAgICAgICBlbnRyeS5wYXR0ZXJuLmxhc3RJbmRleCA9IDA7XHJcbiAgICAgICAgY29uc3QgY2xlYW5UZXh0ID0gdGV4dFxyXG4gICAgICAgICAgLnJlcGxhY2UoZW50cnkucGF0dGVybiwgJycpXHJcbiAgICAgICAgICAucmVwbGFjZSgvWyBcXHRdKy9nLCAnICcpXHJcbiAgICAgICAgICAucmVwbGFjZSgvXFxzKlsuLDtdXFxzKiQvLCAnJylcclxuICAgICAgICAgIC50cmltKCk7XHJcbiAgICAgICAgZW50cnkucGF0dGVybi5sYXN0SW5kZXggPSAwO1xyXG4gICAgICAgIHJldHVybiB7IGNsZWFuVGV4dCwgbW9kZWxJZDogZW50cnkuaWQgfTtcclxuICAgICAgfVxyXG4gICAgICBlbnRyeS5wYXR0ZXJuLmxhc3RJbmRleCA9IDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBjbGVhblRleHQ6IHRleHQsIG1vZGVsSWQ6IG51bGwgfTtcclxuICB9XHJcblxyXG4gIG9uRm9ybUdyYXBoaWNTdWdnZXN0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgcmF3SGludCA9IHRoaXMuZm9ybUdyYXBoaWNTdWdnZXN0SGludD8udHJpbSgpO1xyXG4gICAgaWYgKCF0aGlzLmZvcm0gfHwgIXRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uPy5Gb3Jtcz8uU3BlZWNoVG9HcmFwaGljc0VuZFBvaW50KSByZXR1cm47XHJcbiAgICBjb25zdCB7IGNsZWFuVGV4dDogaGludCwgbW9kZWxJZDogYWlNb2RlbElkIH0gPSB0aGlzLmV4dHJhY3RNb2RlbEZyb21UZXh0KHJhd0hpbnQpO1xyXG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzLmZvcm1HcmFwaGljU2NvcGU7XHJcblxyXG4gICAgLy8gU2NvcGUgdGlwbyBzcGVjaWZpY286IHZhbGlkYSBlc2lzdGVuemEgZGVsIGNhbXBvIHByaW1hIGRpIHBhcnRpcmVcclxuICAgIGxldCBzY29wZUZpZWxkVHlwZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgICBpZiAoc2NvcGUuc3RhcnRzV2l0aCgndHlwZV8nKSkge1xyXG4gICAgICBzY29wZUZpZWxkVHlwZSA9IHBhcnNlSW50KHNjb3BlLnJlcGxhY2UoJ3R5cGVfJywgJycpLCAxMCk7XHJcbiAgICAgIGNvbnN0IGV4aXN0cyA9ICh0aGlzLmZvcm0uRmllbGRzID8/IFtdKS5zb21lKGYgPT4gZi5GaWVsZFR5cGUgPT09IHNjb3BlRmllbGRUeXBlKTtcclxuICAgICAgaWYgKCFleGlzdHMpIHtcclxuICAgICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5FcnJvcignTmVzc3VuIGNhbXBvIGRpIHF1ZXN0byB0aXBvIHByZXNlbnRlIG5lbCBmb3JtLicpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZm9ybUdyYXBoaWNTdWdnZXN0TG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgLy8gQ2FtcGkgZGEgaW52aWFyZTogdW4gcmFwcHJlc2VudGFudGUgcGVyIHRpcG8gKGFsbC9tYWluKSBvcHB1cmUgc29sbyBpbCBwcmltbyBkZWwgdGlwbyBzY2VsdG8gKHRpcG8gc3BlY2lmaWNvKVxyXG4gICAgY29uc3Qgc2VlblR5cGVzID0gbmV3IFNldDxudW1iZXI+KCk7XHJcbiAgICBjb25zdCBmaWVsZHNUb1NlbmQgPSBzY29wZUZpZWxkVHlwZSAhPSBudWxsXHJcbiAgICAgID8gKHRoaXMuZm9ybS5GaWVsZHMgPz8gW10pLmZpbHRlcihmID0+IGYuRmllbGRUeXBlID09PSBzY29wZUZpZWxkVHlwZSkuc2xpY2UoMCwgMSkubWFwKGYgPT4gKHsgTGFiZWw6IGYuTGFiZWwsIEZpZWxkVHlwZTogZi5GaWVsZFR5cGUgfSkpXHJcbiAgICAgIDogKHRoaXMuZm9ybS5GaWVsZHMgPz8gW10pLmZpbHRlcihmID0+IHsgaWYgKHNlZW5UeXBlcy5oYXMoZi5GaWVsZFR5cGUpKSByZXR1cm4gZmFsc2U7IHNlZW5UeXBlcy5hZGQoZi5GaWVsZFR5cGUpOyByZXR1cm4gdHJ1ZTsgfSkubWFwKGYgPT4gKHsgTGFiZWw6IGYuTGFiZWwsIEZpZWxkVHlwZTogZi5GaWVsZFR5cGUgfSkpO1xyXG5cclxuICAgIGNvbnN0IGdyYXBoaWNzUGFyYW1zOiBFbmRQb2ludERhdGFQYXJhbXNbXSA9IFtcclxuICAgICAgeyBQYXJhbU5hbWU6ICdOYW1lJywgUGFyYW1WYWx1ZTogdGhpcy5mb3JtLk5hbWUsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVsnSW4gQm9keSddIH0sXHJcbiAgICAgIHsgUGFyYW1OYW1lOiAnRGVzY3JpcHRpb24nLCBQYXJhbVZhbHVlOiB0aGlzLmZvcm0uRGVzY3JpcHRpb24gPz8gbnVsbCwgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtWydJbiBCb2R5J10gfSxcclxuICAgICAgeyBQYXJhbU5hbWU6ICdUaGVtZUNTUycsIFBhcmFtVmFsdWU6IHRoaXMuZm9ybS5UaGVtZUNTUyA/PyBudWxsLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bJ0luIEJvZHknXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogJ1RpdGxlQ1NTJywgUGFyYW1WYWx1ZTogdGhpcy5mb3JtLlRpdGxlQ1NTID8/IG51bGwsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVsnSW4gQm9keSddIH0sXHJcbiAgICAgIHsgUGFyYW1OYW1lOiAnRmllbGRzJywgUGFyYW1WYWx1ZTogZmllbGRzVG9TZW5kLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bJ0luIEJvZHknXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogJ0hpbnQnLCBQYXJhbVZhbHVlOiBoaW50IHx8IHRoaXMuYnVpbGRSYW5kb21HcmFwaGljSGludCgpLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bJ0luIEJvZHknXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogJ01vZGVsSWQnLCBQYXJhbVZhbHVlOiBhaU1vZGVsSWQsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVsnSW4gQm9keSddIH0sXHJcbiAgICAgIC4uLihzY29wZSA9PT0gJ21haW4nID8gW3sgUGFyYW1OYW1lOiAnTWFpbk9ubHknLCBQYXJhbVZhbHVlOiB0cnVlLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bJ0luIEJvZHknXSB9XSA6IFtdKSxcclxuICAgICAgLi4uKHNjb3BlRmllbGRUeXBlICE9IG51bGwgPyBbeyBQYXJhbU5hbWU6ICdTaW5nbGVGaWVsZE1vZGUnLCBQYXJhbVZhbHVlOiB0cnVlLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bJ0luIEJvZHknXSB9XSA6IFtdKSxcclxuICAgIF07XHJcblxyXG4gICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLlNwZWVjaFRvR3JhcGhpY3NFbmRQb2ludCxcclxuICAgICAgZ3JhcGhpY3NQYXJhbXMsXHJcbiAgICAgIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHIgPSByZXMgYXMgeyBUaGVtZUNTUz86IHN0cmluZzsgVGl0bGVDU1M/OiBzdHJpbmc7IEJnSW1hZ2VCYXNlNjQ/OiBzdHJpbmc7IEZpZWxkU3R5bGVzPzogeyBbY3NzQ2xhc3NOYW1lOiBzdHJpbmddOiB7IFtwcm9wOiBzdHJpbmddOiBzdHJpbmcgfSB9OyBXYXJuaW5ncz86IHN0cmluZ1tdIH07XHJcbiAgICAgICAgdGhpcy5mb3JtR3JhcGhpY1N1Z2dlc3RMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zaG93Rm9ybUdyYXBoaWNTdWdnZXN0SW5wdXQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHNjb3BlID09PSAnbWFpbicpIHtcclxuICAgICAgICAgIC8vIFNvbG8gVGhlbWVDU1MgZSBUaXRsZUNTU1xyXG4gICAgICAgICAgaWYgKHIuVGhlbWVDU1MgIT09IHVuZGVmaW5lZCkgdGhpcy5mb3JtLlRoZW1lQ1NTID0gci5UaGVtZUNTUyA/PyBudWxsO1xyXG4gICAgICAgICAgaWYgKHIuVGl0bGVDU1MgIT09IHVuZGVmaW5lZCkgdGhpcy5mb3JtLlRpdGxlQ1NTID0gci5UaXRsZUNTUyA/PyBudWxsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc2NvcGVGaWVsZFR5cGUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgLy8gRmllbGRTdHlsZXMgZGVsIHRpcG8gc2NlbHRvIGFwcGxpY2F0aSBhIFRVVFRJIGkgY2FtcGkgZGkgcXVlbCB0aXBvIG5lbCBmb3JtLlxyXG4gICAgICAgICAgLy8gT2duaSBjYW1wbyByaWNldmUgdW5hIGNvcGlhIGRpc3RpbnRhOiBzYWZlQ2xvbmUgdXNhIFdlYWtTZXQgZSBzYWx0YSBvZ2dldHRpIGdpw6AgdmlzdGkuXHJcbiAgICAgICAgICBpZiAoci5GaWVsZFN0eWxlcykge1xyXG4gICAgICAgICAgICBjb25zdCBjc3NDbGFzc05hbWUgPSAoRXFwRHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvckNvbXBvbmVudC5GSUVMRF9UWVBFX0NTU19DTEFTUyBhcyBhbnkpW3Njb3BlRmllbGRUeXBlXTtcclxuICAgICAgICAgICAgaWYgKGNzc0NsYXNzTmFtZSAmJiByLkZpZWxkU3R5bGVzW2Nzc0NsYXNzTmFtZV0pIHtcclxuICAgICAgICAgICAgICAodGhpcy5mb3JtLkZpZWxkcyA/PyBbXSkuZmlsdGVyKGYgPT4gZi5GaWVsZFR5cGUgPT09IHNjb3BlRmllbGRUeXBlKS5mb3JFYWNoKGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgKGYgYXMgYW55KVtjc3NDbGFzc05hbWVdID0geyAuLi5yLkZpZWxkU3R5bGVzIVtjc3NDbGFzc05hbWVdIH07XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gVHV0dG9cclxuICAgICAgICAgIGlmIChyLlRoZW1lQ1NTICE9PSB1bmRlZmluZWQpIHRoaXMuZm9ybS5UaGVtZUNTUyA9IHIuVGhlbWVDU1MgPz8gbnVsbDtcclxuICAgICAgICAgIGlmIChyLlRpdGxlQ1NTICE9PSB1bmRlZmluZWQpIHRoaXMuZm9ybS5UaXRsZUNTUyA9IHIuVGl0bGVDU1MgPz8gbnVsbDtcclxuICAgICAgICAgIGlmIChyLkJnSW1hZ2VCYXNlNjQgIT09IHVuZGVmaW5lZCkgdGhpcy5mb3JtLkJnSW1hZ2VCYXNlNjQgPSByLkJnSW1hZ2VCYXNlNjQgPz8gbnVsbDtcclxuICAgICAgICAgIGlmIChyLkZpZWxkU3R5bGVzKSB7XHJcbiAgICAgICAgICAgICh0aGlzLmZvcm0uRmllbGRzID8/IFtdKS5mb3JFYWNoKGYgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGNzc0NsYXNzTmFtZSA9IChFcXBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29tcG9uZW50LkZJRUxEX1RZUEVfQ1NTX0NMQVNTIGFzIGFueSlbZi5GaWVsZFR5cGVdO1xyXG4gICAgICAgICAgICAgIGlmICghY3NzQ2xhc3NOYW1lKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgY29uc3QgY3NzT2JqID0gci5GaWVsZFN0eWxlcyFbY3NzQ2xhc3NOYW1lXTtcclxuICAgICAgICAgICAgICBpZiAoY3NzT2JqICYmIHR5cGVvZiBjc3NPYmogPT09ICdvYmplY3QnKSAoZiBhcyBhbnkpW2Nzc0NsYXNzTmFtZV0gPSB7IC4uLmNzc09iaiB9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmZvcm1Db21wbGV0ZWQpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybUNvbXBsZXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5wcmV2aWV3Rm9ybSA9IG51bGw7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2V0Rm9ybVN0YXR1cyh0cnVlKSwgNTApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NNc2cgPSBzY29wZSA9PT0gJ21haW4nXHJcbiAgICAgICAgICA/ICdHcmFmaWNhIHByaW5jaXBhbGUgYXBwbGljYXRhISdcclxuICAgICAgICAgIDogc2NvcGVGaWVsZFR5cGUgIT0gbnVsbFxyXG4gICAgICAgICAgICA/ICdHcmFmaWNhIGFwcGxpY2F0YSBhIHR1dHRpIGkgY2FtcGkgZGVsIHRpcG8gc2VsZXppb25hdG8hJ1xyXG4gICAgICAgICAgICA6ICdHcmFmaWNhIGFwcGxpY2F0YSBhbCBmb3JtISc7XHJcbiAgICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuU3VjY2VzcyhzdWNjZXNzTXNnKTtcclxuICAgICAgICBpZiAoci5XYXJuaW5ncz8ubGVuZ3RoID4gMCkgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuV2FybmluZyhyLldhcm5pbmdzKTtcclxuICAgICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgdGhpcy5mb3JtR3JhcGhpY1N1Z2dlc3RMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgbXNnID0gKGVycm9yIGFzIGFueSk/LmVycm9yO1xyXG4gICAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLkVycm9yKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnICYmIG1zZy50cmltKCkgPyBtc2cgOiAnRXJyb3JlIG5lbGxhIGdlbmVyYXppb25lIGRlbGxhIGdyYWZpY2EnKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBQcm9wcmlldMOgIHBlciBjcmVhemlvbmUvbW9kaWZpY2EgY2FtcG9cclxuICBmaWVsZHNDb2x1bW5zOiBBcnJheTxDb25maWdDb2x1bW4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJmaWVsZHNUYWJsZVwiLCB7IHN0YXRpYzogZmFsc2UgfSkgZmllbGRzVGFibGU6IEVxcFRhYmxlQ29tcG9uZW50O1xyXG4gIHNlbGVjdGVkRmllbGQ6IEJhc2VGaWVsZDtcclxuICBpbmRleFNlbGVjdGVkRmllbGQ6IG51bWJlcjtcclxuICBhY3Rpb25PblJlY29yZEZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cDtcclxuICBkaWFsb2dGaWVsZFJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dGaWVsZFwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dGaWVsZDogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiZmllbGRTZWN0aW9uQ29sdW1uVGVtcGxhdGVcIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBmaWVsZFNlY3Rpb25Db2x1bW5UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIFByb3ByaWV0w6AgcGVyIGNyZWFyZS9tb2RpZmljYXJlIHVuYSBGb3JtIGRpIGRldHRhZ2xpb1xyXG4gIHNlbGVjdGVkSW5uZXJGb3JtOiBGb3JtO1xyXG4gIGluZGV4U2VsZWN0ZWRJbm5lckZvcm06IG51bWJlcjtcclxuICBkaWFsb2dJbm5lckZvcm1SZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICBAVmlld0NoaWxkKFwiZGlhbG9nSW5uZXJGb3JtXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgZGlhbG9nSW5uZXJGb3JtOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIGlubmVyRm9ybUNvbmZpZzogRHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvckNvbmZpZztcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIFByb3ByaWV0w6AgcGVyIGNyZWFyZS9tb2RpZmljYXJlIHVuYSBhY3Rpb24gc3VpIHJlY29yZCBkaSB1bmEgRm9ybVxyXG4gIGFjdGlvbnNPblJlY29yZENvbHVtbnM6IEFycmF5PENvbmZpZ0NvbHVtbj47XHJcbiAgQFZpZXdDaGlsZChcImFjdGlvbnNPblJlY29yZFRhYmxlXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGFjdGlvbnNPblJlY29yZFRhYmxlOiBFcXBUYWJsZUNvbXBvbmVudDtcclxuICBzZWxlY3RlZEFjdGlvbjogQWN0aW9uT25SZWNvcmQ7XHJcbiAgaW5kZXhTZWxlY3RlZEFjdGlvbjogbnVtYmVyO1xyXG4gIGRpYWxvZ0FjdGlvbk9uUmVjb3JkUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ0FjdGlvbk9uUmVjb3JkXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgZGlhbG9nQWN0aW9uT25SZWNvcmQ6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBQcm9wcmlldMOgIHBlciBjcmVhcmUvbW9kaWZpY2FyZSBkZWkgYm90dG9uaSBhemlvbmVcclxuICBhY3Rpb25CdXR0b25zQ29sdW1uczogQXJyYXk8Q29uZmlnQ29sdW1uPjtcclxuICBAVmlld0NoaWxkKFwiYWN0aW9uQnV0dG9uc1RhYmxlXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGFjdGlvbkJ1dHRvbnNUYWJsZTogRXFwVGFibGVDb21wb25lbnQ7XHJcbiAgc2VsZWN0ZWRBY3Rpb25CdXR0b246IEFjdGlvbkJ1dHRvbjtcclxuICBpbmRleFNlbGVjdGVkQWN0aW9uQnV0dG9uOiBudW1iZXI7XHJcbiAgZGlhbG9nQWN0aW9uQnV0dG9uUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ0FjdGlvbkJ1dHRvblwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGRpYWxvZ0FjdGlvbkJ1dHRvbjogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgYWN0aW9uQnV0dG9uc0Zvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cDtcclxuICBhY3Rpb25zRmxhZyA9IEFjdGlvbkZsYWdFbnVtO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvKipcclxuICAgKiBFdmVudG8gZW1lc3NvIHF1YW5kbyBzaSBzYWx2YSB1bmEgZm9ybSBlIG5vbiDDqCBzdGF0byBzcGVjaWZpY2F0byB1biBlbmRwb2ludCBkYSBjaGlhbWFyZS5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgc2F2ZUZvcm1FdmVudDogRXZlbnRFbWl0dGVyPEZvcm0+ID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtPigpO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudG8gZW1lc3NvIERPUE8gYXZlciBlc2VndWl0byB1bmEgY2hpYW1hdGEgYWwgc2VydmVyIHBlciBpbCBzYWx2YXRhZ2dpb2RpIHVuYSBmb3JtIGFsbCdlbmRwb2ludCBzcGVjaWZpY2F0by5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgYWZ0ZXJTYXZlRm9ybUV2ZW50OiBFdmVudEVtaXR0ZXI8Rm9ybT4gPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm0+KCk7XHJcblxyXG4gIC8vIE91dCBjb21wb25lbnRlIGVzdGVybm9cclxuICBAT3V0cHV0KCkgb3V0OiBFdmVudEVtaXR0ZXI8ZXZlbnRPdXQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxldmVudE91dD4oKTtcclxuXHJcbiAgLy8gVHJpZ2dlcnNcclxuICBkaWFsb2dUcmlnZ2Vyc1JlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dUcmlnZ2Vyc1wiLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dUcmlnZ2VyczogVGVtcGxhdGVSZWY8YW55PjtcclxuICBzZWxlY3RlZFRyaWdnZXI6IFRyaWdnZXI7XHJcbiAgdHJpZ2dlcnNDb2x1bW5zOiBBcnJheTxDb25maWdDb2x1bW4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJ0cmlnZ2Vyc1RhYmxlXCIsIHsgc3RhdGljOiBmYWxzZSB9KSB0cmlnZ2Vyc1RhYmxlOiBFcXBUYWJsZUNvbXBvbmVudDtcclxuXHJcbiAgc2hvd0FsbEZpZWxkczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dHcmFmaWNhUGFuZWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gQ29udGVzdHVhbGl6YXRpb25cclxuICBzZWxlY3RlZENvbnRlc3R1YWxpemF0aW9uOiBzdHJpbmcgPSBudWxsO1xyXG4gIHNlbGVjdGVkQ29udGVzdHVhbGl6YXRpb25WYWx1ZTogbnVtYmVyID0gbnVsbDtcclxuXHJcbiAgc2hvd0RlbGV0ZUJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNlbGVjdGVkRmllbGRzOiBBcnJheTxCYXNlRmllbGQ+ID0gbmV3IEFycmF5PEJhc2VGaWVsZD4oKTtcclxuXHJcbiAgLy8gQUkgRWRpdCBkaWFsb2dcclxuICBkaWFsb2dBaUVkaXRSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICBAVmlld0NoaWxkKFwiZGlhbG9nQWlFZGl0XCIsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ0FpRWRpdDogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgLy8gQ29udGVzdHVhbGl6emF6aW9uZSBkaWFsb2dcclxuICBkaWFsb2dDb250ZXN0dWFsaXphdGlvblJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dDb250ZXN0dWFsaXphdGlvblwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dDb250ZXN0dWFsaXphdGlvbjogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgLy8gVmlzdWFsIEVkaXRvclxyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dWZVRvb2x0aXBcIiwgeyBzdGF0aWM6IHRydWUgfSkgZGlhbG9nVmVUb29sdGlwOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dWZVJlb3JkZXJcIiwgeyBzdGF0aWM6IHRydWUgfSkgZGlhbG9nVmVSZW9yZGVyOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIHZpc3VhbEVkaXRvckFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHZlU2VsZWN0ZWRGaWVsZDogQmFzZUZpZWxkIHwgbnVsbCA9IG51bGw7XHJcbiAgdmVTd2FwRmllbGQ6IEJhc2VGaWVsZCB8IG51bGwgPSBudWxsO1xyXG4gIGRpYWxvZ1ZlVG9vbHRpcFJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIGRpYWxvZ1ZlUmVvcmRlclJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIHZlU2hvd0dyYXBoaWNJbnB1dDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHZlR3JhcGhpY0hpbnQ6IHN0cmluZyA9ICcnO1xyXG4gIHZlQXBwbHlUb0FsbE9mVHlwZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHZlUmVvcmRlckZpZWxkczogQmFzZUZpZWxkW10gPSBbXTtcclxuICBwcml2YXRlIHZlR3JhcGhpY1N1Z2dlc3RBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgZ2V0IHZlU2VsZWN0ZWRGaWVsZFR5cGVOYW1lKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBmdCA9IHRoaXMudmVTZWxlY3RlZEZpZWxkPy5GaWVsZFR5cGU7XHJcbiAgICBpZiAoZnQgPT0gbnVsbCkgcmV0dXJuICcnO1xyXG4gICAgcmV0dXJuIChFcXBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29tcG9uZW50LkZJRUxEX1RZUEVfTEFCRUxTIGFzIGFueSlbZnRdID8/IGBUaXBvICR7ZnR9YDtcclxuICB9XHJcblxyXG4gIGFpRWRpdFByb21wdDogc3RyaW5nID0gXCJcIjtcclxuICBhaUVkaXRBdHRhY2htZW50czogQXJyYXk8eyBmaWxlTmFtZTogc3RyaW5nOyBiYXNlNjRDb250ZW50OiBzdHJpbmc7IG1lZGlhVHlwZTogc3RyaW5nIH0+ID0gW107XHJcbiAgYWlFZGl0QXV0b3NhdmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBhaUVkaXRMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd0FpUHJvbXB0SGlzdG9yeTogYm9vbGVhbiA9IHRydWU7XHJcbiAgYWlFZGl0RmllbGRDb250ZXh0OiB7IGNvZGU6IHN0cmluZyB9IHwgbnVsbCA9IG51bGw7XHJcbiAgYWlGaWVsZFN1Z2dlc3RMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZm9ybUdyYXBoaWNTdWdnZXN0TG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGZvcm1HcmFwaGljU3VnZ2VzdEhpbnQ6IHN0cmluZyA9ICcnO1xyXG4gIHNob3dGb3JtR3JhcGhpY1N1Z2dlc3RJbnB1dDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGZvcm1HcmFwaGljU2NvcGU6IHN0cmluZyA9ICdhbGwnO1xyXG4gIHByZXNlbnRGaWVsZFR5cGVPcHRpb25zOiB7IHZhbHVlOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVtdID0gW107XHJcblxyXG4gIC8vIEFJIERhdGFHZXR0ZXIgc2lsZW50IGxvYWRpbmdcclxuICBwZW5kaW5nQWlEYXRhR2V0dGVyRmllbGRzOiBCYXNlRmllbGRbXSA9IFtdO1xyXG4gIGN1cnJlbnRBaURhdGFHZXR0ZXJGaWVsZDogQmFzZUZpZWxkIHwgbnVsbCA9IG51bGw7XHJcbiAgYWlEYXRhR2V0dGVyTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBnZXQgYWlQcm9tcHRIaXN0b3J5KCk6IHN0cmluZ1tdIHtcclxuICAgIGlmICghdGhpcy5mb3JtPy5BSVByb21wdHMpIHJldHVybiBbXTtcclxuICAgIHRyeSB7IHJldHVybiBKU09OLnBhcnNlKHRoaXMuZm9ybS5BSVByb21wdHMpOyB9IGNhdGNoIHsgcmV0dXJuIFtdOyB9XHJcbiAgfVxyXG5cclxuICAvLyBDb3N0YW50aSBwZXIgbGEgc3RpbWEgZGVsIGNvc3RvIEFJIChIYWlrdSA0LjUsIHByZXp6aSBVU0QvTVRvaylcclxuICBwcml2YXRlIHJlYWRvbmx5IEFJX01PRElGSUVSX1NLSUxMX1RPS0VOUyA9IDJfMDAwOyAgLy8gdG9rZW4gZmlzc2k6IEZsZEpzb25Nb2RpZmllclNraWxsLm1kXHJcbiAgcHJpdmF0ZSByZWFkb25seSBBSV9UT0tFTlNfUEVSX0ZJRUxEID0gMTAwOyAgICAvLyBzdGltYSB0b2tlbiBwZXIgY2FtcG8gZGVsIGZvcm0gc2VyaWFsaXp6YXRvXHJcbiAgcHJpdmF0ZSByZWFkb25seSBBSV9PVVRQVVRfVE9LRU5TID0gM181MDA7ICAvLyBzdGltYSBjb25zZXJ2YXRpdmEgb3V0cHV0IEpTT04gbW9kaWZpY2F0b1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgQUlfUERGX0NIQVJTID0gMTVfMDYwOyAvLyBmaW5lc3RyYSBtYXggZXN0cmF0dGEgcGVyIGFsbGVnYXRvIFBERlxyXG4gIHByaXZhdGUgcmVhZG9ubHkgQUlfQ0hBUlNfUEVSX1RPS0VOID0gNDsgICAgICAvLyBjaGFyL3Rva2VuIG1lZGkgcGVyIHRlc3RvIGl0YWxpYW5vXHJcbiAgcHJpdmF0ZSByZWFkb25seSBBSV9FVVJfVVNEX1JBVEUgPSAxLjEwOyAgIC8vIHRhc3NvIEVVUi9VU0QgYXBwcm9zc2ltYXRvXHJcblxyXG4gIGdldCBhaUVkaXRDb3N0Rmlyc3RFdXIoKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGZvcm1Ub2tlbnMgPSAodGhpcy5mb3JtPy5GaWVsZHM/Lmxlbmd0aCA/PyAwKSAqIHRoaXMuQUlfVE9LRU5TX1BFUl9GSUVMRDtcclxuICAgIGNvbnN0IHZhcklucHV0ID0gKHRoaXMuYWlFZGl0UHJvbXB0Py5sZW5ndGggPz8gMCkgLyB0aGlzLkFJX0NIQVJTX1BFUl9UT0tFTlxyXG4gICAgICArIHRoaXMuYWlFZGl0QXR0YWNobWVudHMubGVuZ3RoICogKHRoaXMuQUlfUERGX0NIQVJTIC8gdGhpcy5BSV9DSEFSU19QRVJfVE9LRU4pO1xyXG4gICAgY29uc3QgdXNkID0gKHRoaXMuQUlfTU9ESUZJRVJfU0tJTExfVE9LRU5TICogMC4xMCArIChmb3JtVG9rZW5zICsgdmFySW5wdXQpICogMC4wOCArIHRoaXMuQUlfT1VUUFVUX1RPS0VOUyAqIDAuNDApIC8gMV8wMDBfMDAwO1xyXG4gICAgcmV0dXJuIHVzZCAvIHRoaXMuQUlfRVVSX1VTRF9SQVRFO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFpRWRpdENvc3RTdWJzZXF1ZW50RXVyKCk6IG51bWJlciB7XHJcbiAgICBjb25zdCBmb3JtVG9rZW5zID0gKHRoaXMuZm9ybT8uRmllbGRzPy5sZW5ndGggPz8gMCkgKiB0aGlzLkFJX1RPS0VOU19QRVJfRklFTEQ7XHJcbiAgICBjb25zdCB2YXJJbnB1dCA9ICh0aGlzLmFpRWRpdFByb21wdD8ubGVuZ3RoID8/IDApIC8gdGhpcy5BSV9DSEFSU19QRVJfVE9LRU5cclxuICAgICAgKyB0aGlzLmFpRWRpdEF0dGFjaG1lbnRzLmxlbmd0aCAqICh0aGlzLkFJX1BERl9DSEFSUyAvIHRoaXMuQUlfQ0hBUlNfUEVSX1RPS0VOKTtcclxuICAgIGNvbnN0IHVzZCA9ICh0aGlzLkFJX01PRElGSUVSX1NLSUxMX1RPS0VOUyAqIDAuMDA4ICsgKGZvcm1Ub2tlbnMgKyB2YXJJbnB1dCkgKiAwLjA4ICsgdGhpcy5BSV9PVVRQVVRfVE9LRU5TICogMC40MCkgLyAxXzAwMF8wMDA7XHJcbiAgICByZXR1cm4gdXNkIC8gdGhpcy5BSV9FVVJfVVNEX1JBVEU7XHJcbiAgfVxyXG5cclxuICBmb3JtYXRBaUVkaXRDb3N0KGV1cjogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBldXIudG9GaXhlZCg2KTtcclxuICB9XHJcblxyXG4gIGdldCBpc05ld0Zvcm0oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gIXRoaXMuZm9ybT8uSUQ7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIHV0aWxpdHlIZWxwZXJTZXJ2aWNlOiBVdGlsaXR5SGVscGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWZcclxuICApIHsgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1snY29uZmlndXJhdG9yVGhlbWUnXSB8fCBjaGFuZ2VzWydjb25maWd1cmF0b3JUaGVtZUNzcyddKSB7XHJcbiAgICAgIHRoaXMuYXBwbHlUaGVtZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseVRoZW1lKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZWwgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcclxuICAgIGNvbnN0IHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XHJcblxyXG4gICAgLy8gUmltdW92ZSB2YXJzIHByZWNlZGVudGkgZGFsIGhvc3QgZSBkYSA6cm9vdFxyXG4gICAgQXJyYXkuZnJvbShlbC5zdHlsZSkuZmlsdGVyKHAgPT4gcC5zdGFydHNXaXRoKCctLWNvbmYtJykpLmZvckVhY2gocCA9PiBlbC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShwKSk7XHJcbiAgICBBcnJheS5mcm9tKHJvb3Quc3R5bGUpLmZpbHRlcihwID0+IHAuc3RhcnRzV2l0aCgnLS1jb25mLScpKS5mb3JFYWNoKHAgPT4gcm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShwKSk7XHJcblxyXG4gICAgY29uc3QgcGFyc2VkRnJvbUNzcyA9IHRoaXMuY29uZmlndXJhdG9yVGhlbWVDc3MgPyB0aGlzLnBhcnNlQ3NzVGhlbWUodGhpcy5jb25maWd1cmF0b3JUaGVtZUNzcykgOiBudWxsO1xyXG4gICAgY29uc3QgbWVyZ2VkOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgbnVsbCA9IChwYXJzZWRGcm9tQ3NzIHx8IHRoaXMuY29uZmlndXJhdG9yVGhlbWUpXHJcbiAgICAgID8geyAuLi4ocGFyc2VkRnJvbUNzcyA/PyB7fSksIC4uLih0aGlzLmNvbmZpZ3VyYXRvclRoZW1lID8/IHt9KSB9XHJcbiAgICAgIDogbnVsbDtcclxuXHJcbiAgICBpZiAobWVyZ2VkKSB7XHJcbiAgICAgIE9iamVjdC5lbnRyaWVzKG1lcmdlZCkuZm9yRWFjaCgoW2ssIHZdKSA9PiBlbC5zdHlsZS5zZXRQcm9wZXJ0eShrLCB2LCAnaW1wb3J0YW50JykpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFByb3BhZ2EgaSB2YWxvcmkgZWZmZXR0aXZpIChTQ1NTIGRlZmF1bHQgKyBvdmVycmlkZSB0ZW1hKSBzdSA6cm9vdCBwZXJjaMOpIGkgZGlhbG9nc1xyXG4gICAgLy8gTWF0ZXJpYWwgcmVuZGVyaXp6YW5vIG5lbCBjZGstb3ZlcmxheSBmdW9yaSBkYWxsJ2hvc3QgZSBub24gZXJlZGl0YW5vIGxlIHZhciBkaSA6aG9zdFxyXG4gICAgY29uc3QgY29tcHV0ZWQgPSBnZXRDb21wdXRlZFN0eWxlKGVsKTtcclxuICAgIFsnLS1jb25mLWdyYWRpZW50JywgJy0tY29uZi1iZy1wYWdlJywgJy0tY29uZi1yYWRpdXMnLCAnLS1jb25mLW1vZGFsLXJhZGl1cycsXHJcbiAgICAgICctLWNvbmYtYWNjZW50JywgJy0tY29uZi1hY2NlbnQtcmdiJywgJy0tY29uZi1wcmltYXJ5JywgJy0tY29uZi1wcmltYXJ5LXJnYicsXHJcbiAgICAgICctLWNvbmYtc3RlcC1zZWxlY3RlZCcsICctLWNvbmYtc3RlcC1lZGl0JywgJy0tY29uZi10YWJsZS1oZWFkZXItYmcnLFxyXG4gICAgICAnLS1jb25mLXNlYXJjaC1iZycsICctLWNvbmYtdGFibGUtYmcnLCAnLS1jb25mLWNhcmQtYmcnLCAnLS1jb25mLWZvbnQtZmFtaWx5JyxcclxuICAgICAgJy0tY29uZi1zdGVwcGVyLWhlYWRlci1iZycsICctLWNvbmYtc3RlcHBlci1jb250ZW50LWJnJywgJy0tY29uZi1zdGVwLWljb24tZWRpdC1iZycsXHJcbiAgICAgICctLWNvbmYtaGludC1idG4tYmcnLCAnLS1jb25mLWhpbnQtYnRuLWhvdmVyLWJnJywgJy0tY29uZi1idG4tY29sb3InXHJcbiAgICBdLmZvckVhY2godmFyTmFtZSA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSh2YXJOYW1lKS50cmltKCk7XHJcbiAgICAgIGlmICh2YWx1ZSkgcm9vdC5zdHlsZS5zZXRQcm9wZXJ0eSh2YXJOYW1lLCB2YWx1ZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcGFyc2VDc3NUaGVtZShjc3M6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XHJcbiAgICBjb25zdCByZWdleCA9IC8oLS1jb25mLVteOlxcc10rKVxccyo6XFxzKihbXjt9XSspL2c7XHJcbiAgICBsZXQgbWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGw7XHJcbiAgICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyhjc3MpKSAhPT0gbnVsbCkge1xyXG4gICAgICByZXN1bHRbbWF0Y2hbMV0udHJpbSgpXSA9IG1hdGNoWzJdLnRyaW0oKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAvLyBHYXJhbnRpc2NlIGNoZSBsZSB2YXJpYWJpbGkgQ1NTIGRpIGRlZmF1bHQgKGRlZmluaXRlIGluIDpob3N0IFNDU1MpIHZlbmdhbm9cclxuICAgIC8vIHByb3BhZ2F0ZSBzdSA6cm9vdCBhbmNoZSBxdWFuZG8gY29uZmlndXJhdG9yVGhlbWUgbm9uIMOoIGZvcm5pdG9cclxuICAgIHRoaXMuYXBwbHlUaGVtZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBjb25zdCByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xyXG4gICAgQXJyYXkuZnJvbShyb290LnN0eWxlKS5maWx0ZXIocCA9PiBwLnN0YXJ0c1dpdGgoJy0tY29uZi0nKSkuZm9yRWFjaChwID0+IHJvb3Quc3R5bGUucmVtb3ZlUHJvcGVydHkocCkpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTW9kZSA9IHRoaXMuZGVidWdNb2RlO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnbmdPbkluaXQgLSBjb25maWd1cmF0aW9ucycsIHRoaXMuY29uZmlndXJhdGlvbnMpO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnbmdPbkluaXQgLSBmb3JtSUQnLCB0aGlzLmZvcm1JRCk7XHJcblxyXG4gICAgdGhpcy5iYXNlU2VydmVyVXJsID1cclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlR2VuZXJhbENvbmZpZy5iYXNlU2VydmVyVXJsO1xyXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlR2VuZXJhbENvbmZpZy5jb250ZXh0O1xyXG4gICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gPVxyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnLmVuZFBvaW50Q29uZmlndXJhdGlvbjtcclxuICAgIC8vIHRoaXMuZm9ybUlEID0gdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlR2VuZXJhbENvbmZpZy5mb3JtSUQ7XHJcbiAgICB0aGlzLnVzZXJUb2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUdlbmVyYWxDb25maWcudXNlclRva2VuO1xyXG5cclxuICAgIHRoaXMuZm9ybSA9XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmZvcm07XHJcbiAgICB0aGlzLm9yZ2FJRCA9XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLm9yZ2FJRDtcclxuICAgIHRoaXMuVXNlcklEID1cclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuVXNlcklEO1xyXG4gICAgdGhpcy5pbm5lckZvcm1NYW5hZ21lbnQgPVxyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5pbm5lckZvcm1NYW5hZ21lbnQ7XHJcbiAgICB0aGlzLmlubmVyRm9ybVJlZiA9XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmlubmVyRm9ybVJlZjtcclxuXHJcbiAgICB0aGlzLmZvcm0uT3JnYUlEID0gdGhpcy5vcmdhSUQ7XHJcblxyXG4gICAgdGhpcy5jb25maWd1cmVEZWZhdWx0RW5kUG9pbnRzKCk7XHJcbiAgICB0aGlzLmdldEZvcm1CeUlEKCk7XHJcbiAgICBpZiAodGhpcy5jb250ZXh0KSB7XHJcbiAgICAgIFV0aWxpdHlIZWxwZXJTZXJ2aWNlLlNldENvbnRleHQodGhpcy5jb250ZXh0KTtcclxuICAgIH1cclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY29uZmlndXJhcmUgZ2xpIGVuZHBvaW50IGRhIHVzYXJlIGRpIGRlZmF1bHQgYSBwYXJ0aXJlIGRhbGwndXJsIGJhc2UgZGVsIHNlcnZlclxyXG4gICAqIGEgY3VpIHNpIGRldmUgY29ubmV0dGVyZSBlIGFsIHRva2VuIGRhIHBhc3NhcmUgcGVyIGF1dGVudGljYXJzaS5cclxuICAgKiBTZSBsYSBwcm9wcmlldMOgIGJhc2VTZXJ2ZXJVcmwgw6ggbnVsbCBlIG5vbiBzb25vIHN0YXRpIGNvbmZpZ3VyYXRpIGkgdmFyaSBlbmRwb2ludCBhbGxvcmFcclxuICAgKiBub24gdmllbmUgZXNlZ3VpdGEgbmVzc3VuYSBjaGlhbWF0YSBodHRwIHBlciByZWN1cGVyYXJlL3NhbHZhcmUgaSBkYXRpLlxyXG4gICAqL1xyXG4gIGNvbmZpZ3VyZURlZmF1bHRFbmRQb2ludHMoKSB7XHJcbiAgICBpZiAoIXRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICYmIHRoaXMuYmFzZVNlcnZlclVybCkge1xyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiA9XHJcbiAgICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5Db25maWd1cmVEZWZhdWx0RW5kUG9pbnRzKFxyXG4gICAgICAgICAgdGhpcy5iYXNlU2VydmVyVXJsLFxyXG4gICAgICAgICAgdGhpcy51c2VyVG9rZW5cclxuICAgICAgICApO1xyXG4gICAgICBpZiAodGhpcy5mb3JtSUQpIHtcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlERW5kUG9pbnQuUGFyYW1zID0gW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtSUQsXHJcbiAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICBdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHN0cmluZ1Nhbml0aXplcih2YWx1ZSkge1xyXG4gICAgaWYgKCFVdGlsaXR5SGVscGVyU2VydmljZS5zdHJpbmdDaGVja1BhcmVudGVzaXModmFsdWUpKSB7XHJcbiAgICAgIGFsZXJ0KFwiZXJyb3JlISBlcmFubyBwcmVzZW50aSBkZWxsZSBwYXJlbnRlc2kuXCIpO1xyXG4gICAgICByZXR1cm4gZmFsc2VcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgfVxyXG4gIHNldE5hbWUoTmFtZTogc3RyaW5nKSB7XHJcbiAgICBpZiAoIXRoaXMuc3RyaW5nU2FuaXRpemVyKE5hbWUpKSB7XHJcbiAgICAgIGNvbnN0IFJlZ0V4cFBhcmV0ZXNpcyA9IC9bXFwoXFwpXFxbXFxdXFx7XFx9XS9nO1xyXG4gICAgICAvLyBSaW11b3ZpIHR1dHRlIGxlIHBhcmVudGVzaSBub24gYmlsYW5jaWF0ZVxyXG4gICAgICB0aGlzLmZvcm0uTmFtZSA9IE5hbWUucmVwbGFjZShSZWdFeHBQYXJldGVzaXMsICcnKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZvcm0uSUQgPT0gbnVsbCkgeyAvLyB0aGlzLmZvcm0uQ29kZSA9PSBudWxsIHx8IHRoaXMuZm9ybS5Db2RlID09IHVuZGVmaW5lZCB8fCB0aGlzLmZvcm0uQ29kZSA9PSBcIlwiICl7XHJcbiAgICAgIHRoaXMuc2V0Q29kZSh0aGlzLmZvcm0uTmFtZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNldENvZGUoQ29kZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnN0cmluZ1Nhbml0aXplcihDb2RlKTtcclxuXHJcbiAgICBjb25zdCBSZWdFeHBQbGFpbiA9IC9bXlxcd10vZztcclxuICAgIHRoaXMuZm9ybS5Db2RlID0gQ29kZS50b1VwcGVyQ2FzZSgpLnJlcGxhY2UoUmVnRXhwUGxhaW4sIFwiXCIpO1xyXG4gIH1cclxuICBvbWl0X3NwZWNpYWxfY2hhcihldmVudCkge1xyXG4gICAgdmFyIGs7XHJcbiAgICBrID0gZXZlbnQua2V5Q29kZTsgLy8gICAgICAgICBrID0gZXZlbnQua2V5Q29kZTsgIChCb3RoIGNhbiBiZSB1c2VkKVxyXG4gICAgaWYgKGsgPT0gMzQpIHtcclxuICAgICAgZXZlbnQua2V5Q29kZSA9IDA7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qIElNUE9SVCBGVU5DVElPTiAqL1xyXG4gIG9uSW1wb3J0KGV2ZW50KSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZEZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XHJcbiAgICBjb25zdCBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgIGZpbGVSZWFkZXIucmVhZEFzVGV4dChzZWxlY3RlZEZpbGUsIFwiVVRGLThcIik7XHJcbiAgICBmaWxlUmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnb25JbXBvcnQgLSBmaWxlUmVhZGVyLnJlc3VsdC50b1N0cmluZygpJywgZmlsZVJlYWRlci5yZXN1bHQudG9TdHJpbmcoKSk7XHJcbiAgICAgIHRoaXMuaW1wb3J0ZWRNb2R1bGUgPSBmaWxlUmVhZGVyLnJlc3VsdC50b1N0cmluZygpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaW1wb3J0ZWRNb2R1bGUgIT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChjb25maXJtKFwic3RhaSBwZXIgc292cmFzY3JpdmVyZSBpbCBtb2R1bG9cIikpIHtcclxuICAgICAgICAgIC8vIGNoaWFtbyBpbCBwYXJzZSBjb3PDrCBkYSBub24gY3JlYXJlIHVuIHJlZmVyZW5jZUJpbmRpbmdcclxuICAgICAgICAgIHZhciBpbXBvcnRlZEZvcm06IEZvcm0gPSBKU09OLnBhcnNlKHRoaXMuaW1wb3J0ZWRNb2R1bGUpO1xyXG4gICAgICAgICAgaW1wb3J0ZWRGb3JtLklEID0gXCJcIjtcclxuICAgICAgICAgIGltcG9ydGVkRm9ybS5OYW1lID0gaW1wb3J0ZWRGb3JtLk5hbWUgKyBcIiAoSW1wb3J0YXRvKVwiO1xyXG5cclxuICAgICAgICAgIGltcG9ydGVkRm9ybSA9IHRoaXMuc2V0SW1wb3J0ZWRGb3JtKGltcG9ydGVkRm9ybSk7XHJcbiAgICAgICAgICB0aGlzLnNldEZvcm1BbmRDb25maWd1cmUoaW1wb3J0ZWRGb3JtKTtcclxuICAgICAgICAgIHRoaXMuc2V0TmFtZShpbXBvcnRlZEZvcm0uTmFtZSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5jbG9zZUltcG9ydCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhbGVydChcInNlbGV6aW9uYSB1biBmaWxlXCIpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgZmlsZVJlYWRlci5vbmVycm9yID0gKGVycm9yKSA9PiB7XHJcbiAgICAgIGFsZXJ0KFwic2VsZXppb25hIHVuIGZpbGUgdmFsaWRvIG8gY29udHJvbGxhIGNoZSBub24gc2lhIGNvcnJvdHRvXCIpO1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBzZXRJbXBvcnRlZEZvcm0oZm9ybTogRm9ybSkge1xyXG5cclxuICAgIC8vIE1vZGlmaWNhIGRlbCBjcmVhdGlvbiB1c2VyIHN1IEltcG9ydFxyXG4gICAgZm9ybS5DcmVhdGlvblVzZXIgPSB0aGlzLlVzZXJJRDtcclxuXHJcbiAgICAvLyBNb2RpZmljYSBkZWkgRmllbGQgc3UgSW1wb3J0XHJcbiAgICBmb3JtLkZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICBpZiAoZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bXCJFbGVuY28gaW1tYWdpbmlcIl0pIHtcclxuICAgICAgICAoZmllbGQgYXMgSW1hZ2VTZWxlY3RvckZpZWxkKS5BdHRhY2htZW50TGlzdC5mb3JFYWNoKChhdHRhY2htZW50KSA9PiB7XHJcbiAgICAgICAgICBhdHRhY2htZW50LklEID0gMDtcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBmb3JtO1xyXG4gIH1cclxuXHJcbiAgaW1wb3J0TW9kdWxlKCkge1xyXG4gICAgdGhpcy5kaWFsb2dJbXBvcnRSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nSW1wb3J0LCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIC8vIHdpZHRoOiBcIjc1JVwiLFxyXG4gICAgICAvLyBtYXhIZWlnaHQ6IFwiODAlXCIsXHJcbiAgICAgIC8vIGhlaWdodDogXCI4MCVcIixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VJbXBvcnQoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ0ltcG9ydFJlZi5jbG9zZSgpO1xyXG4gIH1cclxuICAvKiBFTkQgSU1QT1JUIEZVTkNUSU9OICovXHJcblxyXG5cclxuICAvKipcclxuICAgKiBGdW56aW9uZSBkaSBlc3BvcnRhemlvbmUgbW9kdWxvXHJcbiAgICovXHJcblxyXG4gIGV4cG9ydCgpIHtcclxuXHJcbiAgICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID1cclxuICAgICAgbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm1JRCxcclxuICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICB9KTtcclxuICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5FeHBvcnRCeUlERW5kUG9pbnQsXHJcbiAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgIChiYXNlNjRyZXM6IHN0cmluZykgPT4ge1xyXG5cclxuICAgICAgICBjb25zdCBuZXdCbG9iID0gbmV3IEJsb2IoW2Jhc2U2NHJlc10sIHsgdHlwZTogXCJ0ZXh0L3BsYWluXCIgfSk7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ld0Jsb2IpO1xyXG4gICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAgICAgICBsaW5rLmhyZWYgPSBkYXRhO1xyXG4gICAgICAgIGxpbmsuZG93bmxvYWQgPSBcImV4cG9ydF9cIiArIHRoaXMuZm9ybUlEICsgXCJfZm9ybS50eHRcIjsgLy8gc2V0IGEgbmFtZSBmb3IgdGhlIGZpbGVcclxuICAgICAgICBsaW5rLmNsaWNrKCk7XHJcblxyXG4gICAgICB9LFxyXG4gICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtQW5kQ29uZmlndXJlKG5ldyBGb3JtKCkpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmVjdXBlcmFyZSB0dXR0aSBpIHJlY29yZCBzYWx2YXRpIHBlciB1bmEgcGFydGljb2xhcmUgRm9ybS5cclxuICAgKiBMYSBjaGlhbWF0YSB2aWVuZSBlZmZldHR1YXRhIHNvbG8gc2Ugw6ggc3RhdG8gY29uZmlndXJhdG8gbCdlbmRQb2ludCBkYSB1c2FyZS5cclxuICAgKi9cclxuICBnZXRGb3JtQnlJRCgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5mb3JtSUQgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50XHJcbiAgICApIHtcclxuICAgICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgICAgbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm1JRCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICAgIHRoaXMuc2V0Rm9ybUFuZENvbmZpZ3VyZShyZXMpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZXRGb3JtQW5kQ29uZmlndXJlKG5ldyBGb3JtKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0Rm9ybUFuZENvbmZpZ3VyZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29uZmlndXJvIGwnZXhwb3J0IGRlbCBmb3JtXHJcbiAgICovXHJcblxyXG4gIGNvbmZpZ3VyZUV4cG9ydChyZXM6IEZvcm0pIHtcclxuXHJcbiAgICAvKiBnZXR0aW5nIHJlYWR5IGZvciBleHBvcnQgKi9cclxuICAgIGxldCBjbG9uZSA9IG5ldyBGb3JtKCk7XHJcbiAgICBjbG9uZS5Db2RlID0gXCJJTVBPUlRfXCIgKyByZXMuQ29kZTtcclxuICAgIGNsb25lLk5hbWUgPSBcImltcG9ydF9cIiArIHJlcy5OYW1lO1xyXG4gICAgY2xvbmUuRGVzY3JpcHRpb24gPSByZXMuRGVzY3JpcHRpb247XHJcbiAgICBjbG9uZS5Gb3JtU2NhbGFyVHlwZSA9IHJlcy5Gb3JtU2NhbGFyVHlwZTtcclxuICAgIGNsb25lLkZvcm1GaWVsZHNHcm91cHMgPSByZXMuRm9ybUZpZWxkc0dyb3VwcztcclxuICAgIGNsb25lLkFjdGlvbnNPblJlY29yZCA9IHJlcy5BY3Rpb25zT25SZWNvcmQ7XHJcbiAgICBjbG9uZS5GaWVsZHMgPSByZXMuRmllbGRzO1xyXG4gICAgY2xvbmUuT2JqZWN0RmllbGRzID0gcmVzLk9iamVjdEZpZWxkcztcclxuICAgIGNsb25lLklubmVyRm9ybXMgPSByZXMuSW5uZXJGb3JtcztcclxuICAgIGNsb25lLlJvb3RFbnRpdHlJRCA9IHJlcy5Sb290RW50aXR5SUQ7XHJcbiAgICBjbG9uZS5PcmdhSUQgPSByZXMuT3JnYUlEO1xyXG5cclxuICAgIHRoaXMuZG93bmxvYWROYW1lID0gXCJleHBvcnRfXCIgKyByZXMuTmFtZTtcclxuICAgIHRoaXMuc3RyaW5naWZpZWRGb3JtID0gSlNPTi5zdHJpbmdpZnkoY2xvbmUpO1xyXG4gICAgdGhpcy5kb3dubG9hZEpzb25IcmVmID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybChcclxuICAgICAgXCJkYXRhOnRleHQvanNvbjtjaGFyc2V0PVVURi04LFwiICtcclxuICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuc3RyaW5naWZpZWRGb3JtKVxyXG4gICAgKTtcclxuXHJcbiAgICAvKiBlbmQgZXhwb3J0ICovXHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIGFsIGNhbWJpbyBkZWwgdGlwbyBkaSB2aXN1YWxpenphemlvbmUgZGVsbGEgZm9ybS5cclxuICAgKiBTZSBsJ3V0ZW50ZSBzY2VnbGllIHVuYSB2aXN1YWxpenphemlvbmUgcmFnZ3J1cHBhdGEgaWwgbWV0b2RvIGFnZ2l1bmdlIGFsIEZvcm1Hcm91cCB1biBudW92b1xyXG4gICAqIGNvbnRyb2xsbyBwZXIgbCdhcnJheSBkZWkgbm9taSBkZWxsZSBzZXppb25pIGRhIGNyZWFyZS5cclxuICAgKi9cclxuICBvbkNoYW5nZUZvcm1TY2FsYXJUeXBlKCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2UpIHtcclxuICAgICAgaWYgKCF0aGlzLmZvcm1Gb3JtR3JvdXAuY29udGFpbnMoXCJGb3JtRmllbGRzR3JvdXBzXCIpKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woXCJGb3JtRmllbGRzR3JvdXBzXCIpO1xyXG4gICAgICAgIHRoaXMuZm9ybUZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJGb3JtRmllbGRzR3JvdXBzXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzLCBbXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICAgIEFycmF5VmFsaWRhdG9ycy5taW5MZW5naHQoMSksXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzID0gbnVsbDtcclxuICAgICAgaWYgKHRoaXMuZm9ybUZvcm1Hcm91cC5jb250YWlucyhcIkZvcm1GaWVsZHNHcm91cHNcIikpXHJcbiAgICAgICAgdGhpcy5mb3JtRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woXCJGb3JtRmllbGRzR3JvdXBzXCIpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5mb3JtRm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnRvIGludm9jYXRvIGFsIGtleXVwIG5lbGwnaW5wdXQgcGVyIGluc2VyaXJlIGkgbm9taSBkZWxsZSBzZXppb25pIHBlciBsYSB2aXN1YWxpenphemlvbmVcclxuICAgKiByYWdncnVwcGF0YSBkZWxsYSBmb3JtLiBRdWFudG8gbCd1dGVudGUgcHJlbWUgaWwgdGFzdG8gaW52aW8gdmllbmUgYWdnaXVudG8gaWwgbnVvdm8gbm9tZSBhbGxlXHJcbiAgICogc2V6aW9uaSBkaXNwb2JpbGkgc2Ugbm9uIG5lIGVzaXN0ZSB1bmEgY29uIGxvIHN0ZXNzbyBub21lLlxyXG4gICAqIEBwYXJhbSBldmVudCBFdmVudG8gY2hlIHJhcHByZXNlbnRhIGlsIGtleXVwIHN1bGxhIHRhc3RpZXJhLlxyXG4gICAqL1xyXG4gIG9uRm9ybUZpZWxkR3JvdXBOYW1lS2V5VXAoZXZlbnQpIHtcclxuICAgIGlmIChldmVudC5jb2RlID09PSBcIkVudGVyXCIgfHwgZXZlbnQuY29kZSA9PT0gXCJOdW1wYWRFbnRlclwiKSB7XHJcbiAgICAgIGlmICghdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMpIHtcclxuICAgICAgICB0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3VwcyA9IG5ldyBBcnJheTxGb3JtRmllbGRHcm91cD4oKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIXRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzLmZpbmQoXHJcbiAgICAgICAgICAobikgPT4gbi5OYW1lID09IHRoaXMuZm9ybUZpZWxkR3JvdXBOYW1lXHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3Vwcy5wdXNoKHsgTmFtZTogdGhpcy5mb3JtRmllbGRHcm91cE5hbWUgfSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gSW1wb3N0byBpbCBudW92byB2YWxvcmUgZGVsIEZvcm1Db250cm9sIHBlciBhZ2dpb3JuYXJlIGxvIHN0YXRvIGRlbGxhIGZvcm0uXHJcbiAgICAgIHRoaXMuZm9ybUZvcm1Hcm91cC5jb250cm9sc1tcIkZvcm1GaWVsZHNHcm91cHNcIl0uc2V0VmFsdWUoXHJcbiAgICAgICAgdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHNcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5mb3JtRmllbGRHcm91cE5hbWUgPSBudWxsO1xyXG4gICAgICB0aGlzLnNldEZvcm1GaWVsZEdyb3VwT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJpbXVvdmVyZSBsYSBzZXppb25lIHNlbGV6aW9uYXRhIGRhIHF1ZWxsZSBkaXNwb25pYmlsaSBwZXIgbGEgZm9ybS5cclxuICAgKiBAcGFyYW0gZ3JvdXBOYW1lIE5vbWUgZGVsbGEgc2V6aW9uZSBkYSBlbGltaW5hcmUuXHJcbiAgICovXHJcbiAgb25EZWxldGVGb3JtRmllbGRHcm91cE5hbWUoZ3JvdXBOYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzLnNwbGljZShcclxuICAgICAgdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMuZmluZEluZGV4KChnKSA9PiBnLk5hbWUgPT09IGdyb3VwTmFtZSksXHJcbiAgICAgIDFcclxuICAgICk7XHJcbiAgICAvLyBJbXBvc3RvIGlsIG51b3ZvIHZhbG9yZSBkZWwgRm9ybUNvbnRyb2wgcGVyIGFnZ2lvcm5hcmUgbG8gc3RhdG8gZGVsbGEgZm9ybS5cclxuICAgIHRoaXMuZm9ybUZvcm1Hcm91cC5jb250cm9sc1tcIkZvcm1GaWVsZHNHcm91cHNcIl0uc2V0VmFsdWUoXHJcbiAgICAgIHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzXHJcbiAgICApO1xyXG4gICAgLy8gU2UgZXNpc3Rvbm8gRmllbGQgbGVnYXRpIGFsbGEgc2V6aW9uZSBjaGUgc2kgdnVvbGUgZWxpbWluYXJlIGFsbG9yYSByb21wbyBpbCBsZWdhbWUuXHJcbiAgICBpZiAodGhpcy5mb3JtLkZpZWxkcy5maW5kKChmKSA9PiBmLkZpZWxkR3JvdXAgPT0gZ3JvdXBOYW1lKSkge1xyXG4gICAgICB0aGlzLmZvcm0uRmllbGRzLmZpbHRlcigoZikgPT4gZi5GaWVsZEdyb3VwID09IGdyb3VwTmFtZSkuZm9yRWFjaChcclxuICAgICAgICAoZikgPT4gKGYuRmllbGRHcm91cCA9IG51bGwpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldEZvcm1GaWVsZEdyb3VwT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgb25FZGl0Rm9ybUZpZWxkR3JvdXBOYW1lKGZvcm1GaWVsZEdyb3VwOiBGb3JtRmllbGRHcm91cCkge1xyXG5cclxuICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLlByb21wdChcclxuICAgICAgXCJNb2RpZmljYSBpbCBub21lXCIsXHJcbiAgICAgIChuYW1lKSA9PiB7XHJcbiAgICAgICAgZm9ybUZpZWxkR3JvdXAuTmFtZSA9IG5hbWU7XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqIENsb25hIHVuIG9nZ2V0dG8gZXNjbHVkZW5kbyByaWZlcmltZW50aSBjaXJjb2xhcmkgZSBGb3JtRm9ybUdyb3VwICovXHJcbiAgcHJpdmF0ZSBzYWZlQ2xvbmU8VD4ob2JqOiBUKTogVCB7XHJcbiAgICBjb25zdCBzZWVuID0gbmV3IFdlYWtTZXQoKTtcclxuICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaiwgKGtleSwgdmFsdWUpID0+IHtcclxuICAgICAgaWYgKGtleSA9PT0gJ0Zvcm1Gb3JtR3JvdXAnKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChzZWVuLmhhcyh2YWx1ZSkpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgc2Vlbi5hZGQodmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGlhbWF0byBxdWFuZG8gc2kgdnVvbGUgYWdnaXVuZ2VyZSB1biBudW92byBjYW1wbyBvIHNpIHZ1b2xlIG1vZGlmaWNhcmUgdW5vIGVzaXN0ZW50ZS5cclxuICAgKiBNZW1vcml6emEgbCdldmVudHVhbGUgRmllbGQgc2NlbHRvIG9uZSBjcmVhIHVubyBudW92byBwcmltYSBkaSBhcHJpcmUgaWwgZGlhbG9nIHBlciBtb2RpZmljYXJsby9hZ2dpdW5nZXJsby5cclxuICAgKiBAcGFyYW0gZmllbGQgT2dnZXR0byBCYXNlRmllbGQgZGEgbW9kaWZpY2FyZS4gU2UgbnVsbCBuZSB2aWVuZSBjcmVhdGEgdW5hIG51b3ZhIGlzdGFuemEgcGVyIGwnYWdnaXVudGEuXHJcbiAgICovXHJcbiAgb3BlbkZpZWxkRGlhbG9nKGZpZWxkOiBCYXNlRmllbGQgPSBudWxsKSB7XHJcblxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIm9wZW5GaWVsZERpYWxvZ1wiLCBmaWVsZCk7XHJcblxyXG4gICAgaWYgKGZpZWxkKSB7XHJcbiAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID0gdGhpcy5mb3JtLkZpZWxkcy5pbmRleE9mKGZpZWxkKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkID0gdGhpcy5zYWZlQ2xvbmUoZmllbGQpO1xyXG5cclxuICAgICAgLy8gRGF0byBjaGUgY29uIGlsIEpTT04ucGFyc2Ugc2kgcGVyZGUgcGVyIHN0cmFkYSBsYSBmb3JtdWxhLCBsYSByaW1ldHRvIGRvcG8uXHJcbiAgICAgIC8vIFRhbnRvIG9yYW1haSBpbCByaWZlcmltZW50byBjb24gXCJmaWVsZFwiIMOoIHN0YXRvIHBlcnNvIGUgc3RpYW1vIHBhc3NhbmRvIHVuYSBzdHJpbmdhXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWVsZC5Gb3JtdWxhID0gZmllbGQuRm9ybXVsYTtcclxuXHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmllbGQuQW5zd2VyU3R5bGUgPT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaWVsZC5BbnN3ZXJTdHlsZSA9IHsgSW5MaXN0VmlldzogdHJ1ZSwgVmlzaWJsZUlmOiBudWxsLCBGaWVsZHN0eWxlQ1NTOiBcIlwiLCBMYWJlbHN0eWxlQ1NTOiBcIlwiLCBDb2xTcGFuU2l6ZXM6IFtdLCBJbnZpc2liaWxpdHk6IEZpZWxkSW52aXNpYmlsaXR5RW51bS5OQVNDT1NUTyB9O1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmllbGQgPSBuZXcgQmFzZUZpZWxkKCk7XHJcbiAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID0gbnVsbDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kaWFsb2dGaWVsZFJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dGaWVsZCwge1xyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICB3aWR0aDogXCI3NSVcIixcclxuICAgICAgaGVpZ2h0OiBcIjgwJVwiLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hlIHNhbHZhIGlsIGNhbXBvIGFwcGVuYSBjcmVhdG8gbyBtb2RpZmljYXRvLlxyXG4gICAqIFByaW1hIGRlbCBzYWx2YXRhZ2dpbyBjb250cm9sbGEgc2UgZXNpc3RlIHVuIGFsdHJvIGNhbXBvIGNvbiBsYSBzdGVzc2EgbGFiZWwsIGluIHF1ZXN0b1xyXG4gICAqIGNhc2UgZ2VuZXJlIHVuIGVycm9yZSAoaSBjYW1waSBkZXZvbm8gYXZlcmUgbm9taSwgZSBxdWluZGkgbGFiZWwsIHVuaXZvY2hlIC0gaSBub21pIHZlbmdvbm9cclxuICAgKiByaWNhdmF0aSB1bmVuZG8gbGUgcGFyb2xlIGNoZSBmb3JtYW5vIGxhIGxhYmVsIHRyYW1pdGUgXCJfXCIpLlxyXG4gICAqIEBwYXJhbSBmaWVsZCBDYW1wbyBkYSBzYWx2YXJlXHJcbiAgICogQHBhcmFtIHJlb3BlbiBzZSBwcmVzZW50ZSByaWFwcmUgbGEgZGlhbG9nIGRpIG1vZGlmaWNhIGRlbCBjYW1wbyBwZXNjYW5kbyBkYWxsYSBsaXN0YSBpbCBwcm9zc2ltbyBpbiBjYXNvIGRpIHZhbG9yZSBbMV0gbyBpbCBwcmVjZWRlbnRlIGluIGNhc28gZGkgdmFsb3JlIFstMV1cclxuICAgKi9cclxuICBvblNhdmVGaWVsZChldjogeyBmaWVsZDogQmFzZUZpZWxkLCByZW9wZW46IG51bWJlciB9KSB7XHJcbiAgICBsZXQgZmllbGQgPSBldi5maWVsZDtcclxuICAgIGxldCByZW9wZW4gPSBldi5yZW9wZW47XHJcblxyXG4gICAgLy8gc2UgYyfDqCBpbCBjYW1wb1xyXG4gICAgaWYgKGZpZWxkKSB7XHJcbiAgICAgIC8vIGNvbnRyb2xsbyBjaGUgbm9uIGNpIHNpYSB1biBhbHRybyBjYW1wbyBjb24gbG8gc3Rlc3NvIGNvZGUgKGxhYmVsKSBlIG5vbiBzaWEgZXNzbyBzdGVzc29cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuZm9ybS5GaWVsZHMgJiZcclxuICAgICAgICB0aGlzLmZvcm0uRmllbGRzLmZpbmQoXHJcbiAgICAgICAgICAoZiwgaSkgPT5cclxuICAgICAgICAgICAgZi5MYWJlbCA9PT0gZmllbGQuTGFiZWwgJiZcclxuICAgICAgICAgICAgKHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID09IG51bGxcclxuICAgICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgICA6IHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkICE9PSBpKVxyXG4gICAgICAgIClcclxuICAgICAgKSB7XHJcbiAgICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuV2FybmluZyhcclxuICAgICAgICAgIFwiSW1wb3NzaWJpbGUgaW5zZXJpcmUgZHVlIGNhbXBpIGNvbiBsbyBzdGVzc28gQ29kaWNlLlwiXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgY2FtcGkgY29uIGxvIHN0ZXNzbyBDb2RpY2UuXCIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBzZSBobyB1biBpbmRpY2UgaW4gY3VpIGluc2VyaXJlIGlsIGNhbXBvICh2ZXJvc2ltaWxtZW50ZSBzb25vIGluIG1vZGlmaWNhKVxyXG4gICAgICBpZiAodGhpcy5pbmRleFNlbGVjdGVkRmllbGQgIT0gbnVsbCAmJiB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA+PSAwKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLkZpZWxkc1t0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZF0gPSBmaWVsZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyDDqCB1biBjYW1wbyBudW92b1xyXG4gICAgICAgIGlmICghdGhpcy5mb3JtLkZpZWxkcykge1xyXG4gICAgICAgICAgLy8gc2Ugw6ggaWwgcHJpbW8gY2FtcG8gY2hlIHN0byBpbnNlcmVuZG8gcHJlcGFybyB1biBhcnJheVxyXG4gICAgICAgICAgdGhpcy5mb3JtLkZpZWxkcyA9IG5ldyBBcnJheTxCYXNlRmllbGQ+KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZm9ybS5GaWVsZHMucHVzaChmaWVsZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwib25TYXZlRmllbGRcIiwgdGhpcy5mb3JtKVxyXG4gICAgdGhpcy5jbG9zZUZpZWxkRGlhbG9nKCk7XHJcbiAgICB0aGlzLnNldEZpZWxkT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgICB0aGlzLnJlbG9hZEZpZWxkc1RhYmxlKCk7XHJcbiAgICB0aGlzLnJlZnJlc2hGaWVsZFR5cGVPcHRpb25zKCk7XHJcblxyXG4gICAgaWYgKHJlb3BlbiAhPSAwKSB7XHJcbiAgICAgIGxldCBuZXdGaWVsZCA9IHRoaXMuZm9ybS5GaWVsZHNbdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgKyByZW9wZW5dO1xyXG4gICAgICB0aGlzLm9wZW5GaWVsZERpYWxvZyhuZXdGaWVsZClcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy52aXN1YWxFZGl0b3JBY3RpdmUpIHtcclxuICAgICAgdGhpcy5yZWZyZXNoUHJldmlldygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoZSBjb250cm9sbGEgc2UgbG8gc3RlcCBwZXIgbCdhZ2dpdW50YSBkZWkgY2FtcGkgbmVsbGEgZm9ybSDDqCBjb25jbHVzby5cclxuICAgKiBAcmV0dXJucyBTZSBUUlVFIGxvIHN0ZXAgdmllbmUgY29uc2lkZXJhdG8gY29tcGxldGF0byBlZCDDqCBwb3NzYmlsZSBwYXNzYXJlIGFsIHN1Y2Nlc3Npdm8uXHJcbiAgICovXHJcbiAgaXNGaWVsZFN0ZXBDb21wbGV0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuZm9ybS5GaWVsZHMpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmZvcm0uRm9ybVNjYWxhclR5cGUgIT0gRm9ybVNjYWxhclR5cGVFbnVtLlNlbXBsaWNlICYmXHJcbiAgICAgIHRoaXMuZm9ybS5GaWVsZHMuZmluZCgoZikgPT4gIWYuRmllbGRHcm91cClcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtLkZpZWxkcy5sZW5ndGggPiAwO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBhcHJpcmUgaWwgZGlhbG9nIGRpIGNyZWF6aW9uZS9tb2RpZmljYSBkZWxsZSBmb3JtIGRpIGRldHRhZ2xpby5cclxuICAgKiBTZSBpbCBwYXJhbWV0cm8gcGFzc2F0byDDqCBudWxsIHNvbm8gaW4gYWdnaXVudGEgYWx0cmltZW50aSBzb25vIGluIG1vZGlmaWNhLlxyXG4gICAqIEBwYXJhbSBpbm5lbnJGb3JtIEZvcm0gZGkgZGV0dGFnbGlvIGRhIG1vZGlmaWNhcmUgKHNlIG51bGwgYWxsb3JhIHZhZG8gaW4gYWRkKS5cclxuICAgKi9cclxuICBvcGVuSW5uZXJGb3JtRGlhbG9nKGlubmVuckZvcm06IEZvcm0gPSBudWxsKSB7XHJcbiAgICB0aGlzLmlubmVyRm9ybUNvbmZpZyA9IG5ldyBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29uZmlnKCk7XHJcbiAgICB0aGlzLmlubmVyRm9ybUNvbmZpZy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuaW5uZXJGb3JtTWFuYWdtZW50ID1cclxuICAgICAgdHJ1ZTtcclxuICAgIC8vIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5mb3JtXHJcbiAgICAvLyB0aGlzLmlubmVyRm9ybUNvbmZpZy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuZm9ybS5PbGROYW1lXHJcbiAgICAvLyB0aGlzLmlubmVyRm9ybUNvbmZpZy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuaW5uZXJGb3JtUmVmXHJcbiAgICAvLyBbZm9ybV09XCJzZWxlY3RlZElubmVyRm9ybVwiXHJcbiAgICAvLyBbaW5uZXJGb3JtTWFuYWdtZW50XT1cInRydWVcIlxyXG4gICAgLy8gW2lubmVyRm9ybVJlZl09XCJkaWFsb2dJbm5lckZvcm1SZWZcIlxyXG5cclxuICAgIGlmIChpbm5lbnJGb3JtKSB7XHJcbiAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZElubmVyRm9ybSA9IHRoaXMuZm9ybS5Jbm5lckZvcm1zLmluZGV4T2YoaW5uZW5yRm9ybSk7XHJcblxyXG4gICAgICAvLyB0aGlzLnNlbGVjdGVkSW5uZXJGb3JtID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpbm5lbnJGb3JtKSk7XHJcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRJbm5lckZvcm0uT2xkTmFtZSA9IGlubmVuckZvcm0uTmFtZTtcclxuICAgICAgdGhpcy5pbm5lckZvcm1Db25maWcuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmZvcm0gPVxyXG4gICAgICAgIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaW5uZW5yRm9ybSkpO1xyXG4gICAgICB0aGlzLmlubmVyRm9ybUNvbmZpZy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuZm9ybS5PbGROYW1lID1cclxuICAgICAgICBpbm5lbnJGb3JtLk5hbWU7XHJcblxyXG4gICAgICB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA9IHRoaXMuZm9ybS5GaWVsZHMuZmluZEluZGV4KFxyXG4gICAgICAgIChmKSA9PiBmLkxhYmVsID09PSBpbm5lbnJGb3JtLk5hbWVcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRJbm5lckZvcm0gPSBuZXcgRm9ybSgpO1xyXG4gICAgICB0aGlzLmlubmVyRm9ybUNvbmZpZy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuZm9ybSA9XHJcbiAgICAgICAgbmV3IEZvcm0oKTtcclxuICAgICAgdGhpcy5pbmRleFNlbGVjdGVkSW5uZXJGb3JtID0gbnVsbDtcclxuICAgICAgdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgLy8gdGhpcy5kaWFsb2dJbm5lckZvcm1SZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nSW5uZXJGb3JtLCB7XHJcblxyXG4gICAgdGhpcy5pbm5lckZvcm1Db25maWcuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmlubmVyRm9ybVJlZiA9XHJcbiAgICAgIHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dJbm5lckZvcm0sIHtcclxuICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgICAgd2lkdGg6IFwiODUlXCIsXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHNjYXRlbmF0byBhbCBzYWx2YXRhZ2dpbyBkaSB1bmEgZm9ybSBkaSBkZXR0YWdsaW8uXHJcbiAgICogQHBhcmFtIGV2ZW50IEZvcm0gY3JlYXRhL21vZGlmaWNhdGEgZGFsbCd1dGVudGUuIFNlIMOoIG51bGwgYWxsb3JhIGwndXRlbnRlIGhhIGFiYmFuZG9uYXRvIGxhIGNvbmZpZ3VyYXppb25lLlxyXG4gICAqL1xyXG4gIG9uU2F2ZU9yRXhpdElubmVyRm9ybShldmVudDogRm9ybSkge1xyXG4gICAgaWYgKGV2ZW50ICE9IG51bGwpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuZm9ybS5OYW1lID09PSBldmVudC5OYW1lIHx8XHJcbiAgICAgICAgKHRoaXMuZm9ybS5Jbm5lckZvcm1zICYmXHJcbiAgICAgICAgICB0aGlzLmZvcm0uSW5uZXJGb3Jtcy5maW5kKFxyXG4gICAgICAgICAgICAoYSwgaSkgPT5cclxuICAgICAgICAgICAgICBhLk5hbWUgPT09IGV2ZW50Lk5hbWUgJiZcclxuICAgICAgICAgICAgICAodGhpcy5pbmRleFNlbGVjdGVkSW5uZXJGb3JtID09IG51bGxcclxuICAgICAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLmluZGV4U2VsZWN0ZWRJbm5lckZvcm0gIT09IGkpXHJcbiAgICAgICAgICApKSB8fFxyXG4gICAgICAgICh0aGlzLmZvcm0uRmllbGRzICYmXHJcbiAgICAgICAgICB0aGlzLmluZGV4U2VsZWN0ZWRJbm5lckZvcm0gPT0gbnVsbCAmJlxyXG4gICAgICAgICAgdGhpcy5mb3JtLkZpZWxkcy5maW5kKFxyXG4gICAgICAgICAgICAoZiwgaSkgPT5cclxuICAgICAgICAgICAgICBmLkxhYmVsID09PSBldmVudC5OYW1lICYmXHJcbiAgICAgICAgICAgICAgKHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID09IG51bGxcclxuICAgICAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCAhPT0gaSlcclxuICAgICAgICAgICkpXHJcbiAgICAgICkge1xyXG4gICAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLldhcm5pbmcoXHJcbiAgICAgICAgICBcIkltcG9zc2liaWxlIGluc2VyaXJlIGR1ZSBmb3JtIGRpIGRldHRhZ2xpbyBjb24gbG8gc3Rlc3NvIG5vbWUuXCJcclxuICAgICAgICApO1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgIFwiSW1wb3NzaWJpbGUgaW5zZXJpcmUgZHVlIGZvcm0gZGkgZGV0dGFnbGlvIGNvbiBsbyBzdGVzc28gbm9tZS5cIlxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGlubmVyRm9ybUZpZWxkOiBCYXNlRmllbGQgPSBuZXcgQmFzZUZpZWxkKCk7XHJcbiAgICAgIGlubmVyRm9ybUZpZWxkLk5hbWUgPSBldmVudC5OYW1lLnNwbGl0KFwiIFwiKS5qb2luKFwiX1wiKTtcclxuICAgICAgaW5uZXJGb3JtRmllbGQuTGFiZWwgPSBldmVudC5OYW1lO1xyXG4gICAgICBpbm5lckZvcm1GaWVsZC5GaWVsZFR5cGUgPSBGaWVsZFR5cGVFbnVtW1wiRm9ybSBkaSBkZXR0YWdsaW9cIl07XHJcbiAgICAgIGlubmVyRm9ybUZpZWxkLkZpZWxkR3JvdXAgPVxyXG4gICAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkICE9IG51bGxcclxuICAgICAgICAgID8gdGhpcy5mb3JtLkZpZWxkc1t0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZF0uRmllbGRHcm91cFxyXG4gICAgICAgICAgOiBudWxsO1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZElubmVyRm9ybSAhPSBudWxsICYmXHJcbiAgICAgICAgdGhpcy5pbmRleFNlbGVjdGVkSW5uZXJGb3JtID49IDBcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLklubmVyRm9ybXNbdGhpcy5pbmRleFNlbGVjdGVkSW5uZXJGb3JtXSA9IGV2ZW50O1xyXG4gICAgICAgIHRoaXMuZm9ybS5GaWVsZHNbdGhpcy5pbmRleFNlbGVjdGVkRmllbGRdID0gaW5uZXJGb3JtRmllbGQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmZvcm0uSW5uZXJGb3Jtcykge1xyXG4gICAgICAgICAgdGhpcy5mb3JtLklubmVyRm9ybXMgPSBuZXcgQXJyYXk8Rm9ybT4oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mb3JtLklubmVyRm9ybXMucHVzaChldmVudCk7XHJcbiAgICAgICAgdGhpcy5mb3JtLkZpZWxkcy5wdXNoKGlubmVyRm9ybUZpZWxkKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJlbG9hZEZpZWxkc1RhYmxlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRpYWxvZ0lubmVyRm9ybVJlZi5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBhcHJpcmUgaWwgZGlhbG9nIGRpIGNyZWF6aW9uZS9tb2RpZmljYSBkZWxsZSBhY3Rpb24uXHJcbiAgICogU2UgaWwgcGFyYW1ldHJvIHBhc3NhdG8gw6ggbnVsbCBzb25vIGluIGFnZ2l1bnRhIGFsdHJpbWVudGkgc29ubyBpbiBtb2RpZmljYS5cclxuICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbk9uUmVjb3JkIGRhIG1vZGlmaWNhcmUgKHNlIG51bGwgYWxsb3JhIHZhZG8gaW4gYWRkKS5cclxuICAgKi9cclxuICBvcGVuQWN0aW9uT25SZWNvcmREaWFsb2coYWN0aW9uOiBBY3Rpb25PblJlY29yZCA9IG51bGwpIHtcclxuICAgIGlmIChhY3Rpb24pIHtcclxuICAgICAgdGhpcy5pbmRleFNlbGVjdGVkQWN0aW9uID0gdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZC5pbmRleE9mKGFjdGlvbik7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRBY3Rpb24gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGFjdGlvbikpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEFjdGlvbiA9IG5ldyBBY3Rpb25PblJlY29yZCgpO1xyXG4gICAgICB0aGlzLmluZGV4U2VsZWN0ZWRBY3Rpb24gPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jcmVhdGVBY3Rpb25PblJlY29yZEZvcm0oKTtcclxuICAgIHRoaXMuZGlhbG9nQWN0aW9uT25SZWNvcmRSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nQWN0aW9uT25SZWNvcmQsIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgd2lkdGg6IFwiNzUlXCIsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgYXByaXJlIGlsIGRpYWxvZyBkaSBjcmVhemlvbmUvbW9kaWZpY2EgZGVpIGJvdHRvbmkgYXppb25lLlxyXG4gICAqIFNlIGlsIHBhcmFtZXRybyBwYXNzYXRvIMOoIG51bGwgc29ubyBpbiBhZ2dpdW50YSBhbHRyaW1lbnRpIHNvbm8gaW4gbW9kaWZpY2EuXHJcbiAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb25CdXR0b24gZGEgbW9kaWZpY2FyZSAoc2UgbnVsbCBhbGxvcmEgdmFkbyBpbiBhZGQpLlxyXG4gICAqL1xyXG4gIG9wZW5BY3Rpb25CdXR0b25EaWFsb2coZXY6IEFjdGlvbkJ1dHRvbiA9IG51bGwpIHtcclxuXHJcbiAgICBpZiAoZXYgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQWN0aW9uQnV0dG9uID0gZXY7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQWN0aW9uQnV0dG9uID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRpYWxvZ0FjdGlvbkJ1dHRvblJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dBY3Rpb25CdXR0b24sIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgd2lkdGg6IFwiNzUlXCIsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgaW1wb3N0YXJlIGkgdmFsb3JpIGRhIHN1Z2dlcmlyZSBuZWxsJ2F1dG9jb21wbGV0ZSBkZWwgY2FtcG8gRm9ybXVsYS5cclxuICAgKiBWaWVuZSBzY2F0ZW5hdG8gYWwgZm9jdXMgKGluIHF1ZXN0byBjYXNvIHZpZW5lIHBhc3NhdG8gaWwgcGFyYW1ldHJvIGEgbnVsbCBwZXIgZGlmZmVyZW56aWFybG9cclxuICAgKiBkYWxsJ2V2ZW50byBkaSBjbGljayBzdWxsYSB0YXN0aWVyYSkgZSBhbCBrZXl1cCBzdWxsJ2lucHV0IChpbCBwYXJhbWV0cm8gw6ggZGl2ZXJzbyBkYSBudWxsKS5cclxuICAgKiBAcGFyYW0ga2V5Ym9hcmRFdmVudCBFdmVudG8gc2NhdGVuYXRvIGFsIGtleXVwIHN1bGxhIHRhc3RpZXJhLiBTZSBudWxsIGFsbG9yYSBpbCBtZXRvZG8gw6ggc3RhdG8gaW52b2NhdG8gZGFsIGZvY3VzIHN1bGwnaW5wdXQuXHJcbiAgICogQHN1bW1hcnkgQWdnaW9ybmEgbCdlbGVuY28gZGVpIHN1Z2dlcmltZW50aSBwZXIgbCdhdXRvY29tcGxldGUgc2UgbCd1dGVudGUgZXNlZ3VlIGlsIGZvY3VzIHN1bGwnaW5wdXRcclxuICAgKiBvcHB1cmUgYWwga2V5dXAgc3VsbGEgdGFzdGllcmEgZGkgdW4gdGFzdG8gZGl2ZXJzbyBkYWxsZSBmcmVjY2UuXHJcbiAgICovXHJcbiAgc2V0QWN0aW9uQXV0b2NvbXBsZXRlT3B0aW9ucyhrZXlib2FyZEV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAvLyBDcmVvIGwnYXJyYXkgcGVyIGwnYXV0b2NvbXBsZXRlIHNvbG8gc2Ugc3RvIGZhY2VuZG8gaWwgZm9jdXMgc3VsbCdpbnB1dCBvIHNlIHN0byBwcmVtZW5kbyB1biB0YXN0b1xyXG4gICAgLy8gc3VsbGEgdGFzdGllcmEgZGl2ZXJzbyBkYWxsZSBmcmVjY2UgKGluIHF1ZXN0J3VsdGltbyBjYXNvLCBzZSBub24gdmllbmUgZXNlZ3VpdG8gaWwgZmlsdHJvIHN1bGwnZXZlbnRvLFxyXG4gICAgLy8gbm9uIHNpIHB1w7Igc2VsZXppb25hcmUgdW4gc3VnZ2VyaW1lbnRvIGRlbGwnYXV0b2NvbXBsZXRlIHBlcmNow6ggYWwgY2xpY2sgdmVycmViYmUgcmljYXJpY2F0byBsJ2FycmF5IGVcclxuICAgIC8vIHNpIHByZWRlcmViYmUgbGEgc2VsZXppb25lIGFwcGVuYSBmYXR0YSkuXHJcbiAgICBpZiAoIWtleWJvYXJkRXZlbnQgfHwgIWtleWJvYXJkRXZlbnQuY29kZS5pbmNsdWRlcyhcIkFycm93XCIpKSB7XHJcbiAgICAgIHRoaXMuYWN0aW9uQXV0b2NvbXBsZXRlT3B0aW9ucyA9XHJcbiAgICAgICAgVXRpbGl0eUhlbHBlclNlcnZpY2UuR2V0QXV0b2NvbXBsZXRlT3B0aW9ucyhcclxuICAgICAgICAgIHRoaXMuZm9ybS5GaWVsZHMsXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQWN0aW9uLkFjdGlvblxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgc2FsdmFyZSBsJ2F6aW9uZSBjcmVhdGEvbW9kaWZpY2F0ZS5cclxuICAgKi9cclxuICBzYXZlQWN0aW9uT25SZWNvcmQoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQgJiZcclxuICAgICAgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZC5maW5kKFxyXG4gICAgICAgIChhLCBpKSA9PlxyXG4gICAgICAgICAgYS5OYW1lID09PSB0aGlzLnNlbGVjdGVkQWN0aW9uLk5hbWUgJiZcclxuICAgICAgICAgICh0aGlzLmluZGV4U2VsZWN0ZWRBY3Rpb24gPT0gbnVsbFxyXG4gICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgOiB0aGlzLmluZGV4U2VsZWN0ZWRBY3Rpb24gIT09IGkpXHJcbiAgICAgIClcclxuICAgICkge1xyXG4gICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5XYXJuaW5nKFxyXG4gICAgICAgIFwiSW1wb3NzaWJpbGUgaW5zZXJpcmUgZHVlIGFjdGlvbiBjb24gbG8gc3Rlc3NvIG5vbWUuXCJcclxuICAgICAgKTtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW1wb3NzaWJpbGUgaW5zZXJpcmUgZHVlIGFjdGlvbiBjb24gbG8gc3Rlc3NvIG5vbWUuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmluZGV4U2VsZWN0ZWRBY3Rpb24gIT0gbnVsbCAmJiB0aGlzLmluZGV4U2VsZWN0ZWRBY3Rpb24gPj0gMCkge1xyXG4gICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkW3RoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbl0gPSB0aGlzLnNlbGVjdGVkQWN0aW9uO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKCF0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZCA9IG5ldyBBcnJheTxBY3Rpb25PblJlY29yZD4oKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLnB1c2godGhpcy5zZWxlY3RlZEFjdGlvbik7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNsb3NlRGlhbG9nQWN0aW9uT25SZWNvcmQoKTtcclxuICAgIHRoaXMuc2V0QWN0aW9uT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgICB0aGlzLnJlbG9hZEFjdGlvbnNPblJlY29yZFRhYmxlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHNhbHZhcmUgbCdhemlvbmUgY3JlYXRhL21vZGlmaWNhdGUuXHJcbiAgICovXHJcbiAgc2F2ZUFjdGlvbkJ1dHRvbnMoZWxlbWVudDogQWN0aW9uQnV0dG9uKSB7XHJcblxyXG4gICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMgIT0gbnVsbCkge1xyXG4gICAgICAgIHZhciBleGlzdHNBY3Rpb25CdXR0b25zID0gdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMuZmluZCh4ID0+IHguQnV0dG9uVW5pcXVlSWQgPT0gZWxlbWVudC5CdXR0b25VbmlxdWVJZCk7XHJcbiAgICAgICAgaWYgKGV4aXN0c0FjdGlvbkJ1dHRvbnMgPT0gbnVsbCkge1xyXG4gICAgICAgICAgLy8gTnVvdm8gdHJpZ2dlclxyXG4gICAgICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMucHVzaChlbGVtZW50KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZXhpc3RzQWN0aW9uQnV0dG9ucyA9IGVsZW1lbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zID0gbmV3IEFycmF5PEFjdGlvbkJ1dHRvbj4oKTtcclxuICAgICAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucy5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYWN0aW9uQnV0dG9uc1RhYmxlLnJlbG9hZERhdGF0YWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGlhbG9nQWN0aW9uQnV0dG9uUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNoaXVkZXJlIGlsIGRpYWxvZyBkZWxsYSBpbm5lciBmb3JtLlxyXG4gICAqL1xyXG4gIGNsb3NlRGlhbG9nSW5uZXJGb3JtKCkge1xyXG4gICAgdGhpcy5pbm5lckZvcm1SZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY2hpdWRlcmUgaWwgZGlhbG9nIGRpIGdlc3Rpb25lIGRlbGxlIGFjdGlvbi5cclxuICAgKi9cclxuICBjbG9zZURpYWxvZ0FjdGlvbk9uUmVjb3JkKCkge1xyXG4gICAgdGhpcy5kaWFsb2dBY3Rpb25PblJlY29yZFJlZi5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjaGl1ZGVyZSBpbCBkaWFsb2cgZGkgZ2VzdGlvbmUgZGVsbGUgYWN0aW9uIGJ1dHRvbnMuXHJcbiAgICovXHJcbiAgY2xvc2VEaWFsb2dBY3Rpb25CdXR0b25zKCkge1xyXG4gICAgdGhpcy5kaWFsb2dBY3Rpb25CdXR0b25SZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgc2VnbmFyZSBjb21lIGNvbmNsdXNhIGxhIGNyZWF6aW9uZSBkZWxsYSBmb3JtIGUgcGVyIGNyZWFybmUgdW5hIGNvcGlhXHJcbiAgICogZGEgdmlzYWxpenphcmUgY29tZSBhbnRlcHJpbWEuXHJcbiAgICogQHBhcmFtIGNvbXBsZXRlZCBTZSBUUlVFIHNlZ25hIGxhIGZvcm0gY29tZSBjb25jbHVzYSBlIG5lIGNyZWEgdW5hIGNvcGlhIGRhIHZpc3VhbGl6emFyZVxyXG4gICAqL1xyXG4gIHNldEZvcm1TdGF0dXMoY29tcGxldGVkOiBib29sZWFuKSB7XHJcbiAgICBpZiAoY29tcGxldGVkKSB7XHJcbiAgICAgIHRoaXMuZm9ybUNvbXBsZXRlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMucHJldmlld0Zvcm0gPSB0aGlzLnNhZmVDbG9uZSh0aGlzLmZvcm0pO1xyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwicHJldmlld0Zvcm1cIiwgdGhpcy5wcmV2aWV3Rm9ybSlcclxuXHJcbiAgICAgIC8vIFBlciB2aXN1YWxpenphcmUgY29ycmV0dGFtZW50ZSBsJ29hbnRlcHJpbWEgZGVsbGEgZm9ybSBhcHBlbmEgY3JlYXRhXHJcbiAgICAgIC8vIGJpc29nbmEgdmFsb3JpenphcmUgbGEgcHJvcHJpZXTDoCBOYW1lIGRlaSBjYW1waSBkZWxsYSBmb3JtIGUgZGVsbGUgSW5uZXJGb3Jtcy5cclxuICAgICAgdGhpcy5wcmV2aWV3Rm9ybS5GaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgICBmaWVsZC5OYW1lID0gZmllbGQuTGFiZWwuc3BsaXQoXCIgXCIpLmpvaW4oXCJfXCIpO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMucHJldmlld0Zvcm0uSW5uZXJGb3JtcyAmJlxyXG4gICAgICAgIHRoaXMucHJldmlld0Zvcm0uSW5uZXJGb3Jtcy5sZW5ndGggPiAwXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMucHJldmlld0Zvcm0uSW5uZXJGb3Jtcy5mb3JFYWNoKChmb3JtKSA9PiB7XHJcbiAgICAgICAgICBmb3JtLkZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgICAgICBmaWVsZC5OYW1lID0gZmllbGQuTGFiZWwuc3BsaXQoXCIgXCIpLmpvaW4oXCJfXCIpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybUNvbXBsZXRlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnByZXZpZXdGb3JtID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgc2FsdmFyZSBsYSBmb3JtIGNyZWF0YSBhbGxhIGZpbmUgZGVsIHdpemFyZC5cclxuICAgKiBTZSDDqCBzdGF0byBjb25maWd1cmF0byB1biBlbmRQb2ludCBwZXIgaWwgc2FsdmF0YWdnaW8gdmllbmUgZWZmZXR0dWF0YSB1bmEgY2hpYW1hdGEgYWwgc2VydmVyIHBhc3NhbmRvIGwnb2dnZXRvIGRhIHNhbHZhcmVcclxuICAgKiBuZWwgYm9keSBkZWxsYSBjaGlhbWF0YSwgYWx0cmltZW50aSBzY2F0ZW5hIGwnZXZlbnRvIFwic2F2ZUZvcm1FdmVudFwiLlxyXG4gICAqL1xyXG4gIHNhdmVGb3JtKCkge1xyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gIT0gbnVsbCAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5TYXZlRW5kUG9pbnRcclxuICAgICkge1xyXG5cclxuICAgICAgaWYgKCF0aGlzLnNhdmVkKSB7XHJcbiAgICAgICAgdGhpcy5iYWNrdXBGb3JtID0gdGhpcy5zYWZlQ2xvbmUodGhpcy5mb3JtKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZvcm0gPSB0aGlzLnNhZmVDbG9uZSh0aGlzLmJhY2t1cEZvcm0pO1xyXG4gICAgICB9XHJcblxyXG5cclxuICAgICAgLy8gUGVyIGZhciBhcnJpdmFyZSBhbCBzZXJ2ZXIgbCdhcnJheSBkaSBGaWVsZCBiaXNvZ25hIHBhc3NhcmxpIHN1IEFueVxyXG4gICAgICB0aGlzLmZvcm0uT2JqZWN0RmllbGRzID0gW107XHJcbiAgICAgIHRoaXMuZm9ybS5PYmplY3RGbGRFeHRyYUNvbmZpZ1ZhbHVlcyA9IFtdO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZm9ybS5GbGRFeHRyYUNvbmZpZ1ZhbHVlcyAhPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLk9iamVjdEZsZEV4dHJhQ29uZmlnVmFsdWVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmZvcm0uRmxkRXh0cmFDb25maWdWYWx1ZXMpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5mb3JtLkZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG5cclxuICAgICAgICAvLyBSaW11b3ZvIGlsIEZvcm1Hcm91cCBkaSBwcmV2aWV3IChwcm9wcmlldMOgIGNsaWVudC1vbmx5LCBjcmVhIHJpZmVyaW1lbnRvIGNpcmNvbGFyZSBpbiBKU09OLnN0cmluZ2lmeSlcclxuICAgICAgICBmaWVsZC5Gb3JtRm9ybUdyb3VwID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gVHJhc2Zvcm1vIGlsIGRhdGFnZXR0ZXIgaW4gQmFzZTY0XHJcbiAgICAgICAgZmllbGQuRGF0YUdldHRlclZhbHVlQmFzZTY0U3RyaW5nID0gYnRvYShKU09OLnN0cmluZ2lmeShmaWVsZC5EYXRhR2V0dGVyKSk7XHJcbiAgICAgICAgZmllbGQuRGF0YUdldHRlciA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmIChmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bS5BbGxlZ2F0bykge1xyXG4gICAgICAgICAgY29uc3QgZmxkQTogYW55ID0gZmllbGQ7XHJcbiAgICAgICAgICBmbGRBLk1ldGFkYXRhT2JqZWN0RmllbGRzID0gZmxkQS5NZXRhZGF0YUZpZWxkcztcclxuICAgICAgICAgIGZsZEEuTWV0YWRhdGFGaWVsZHMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuZm9ybS5PYmplY3RGaWVsZHMucHVzaChmbGRBKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gbnVtZXJpY29cIl0pIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICg8TnVtZXJpY0ZpZWxkPmZpZWxkKS5NYXhWYWx1ZSA9PSB1bmRlZmluZWQgfHxcclxuICAgICAgICAgICAgICAoPE51bWVyaWNGaWVsZD5maWVsZCkuTWF4VmFsdWUgPT0gbnVsbFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAoPE51bWVyaWNGaWVsZD5maWVsZCkuTWF4VmFsdWUgPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgKDxOdW1lcmljRmllbGQ+ZmllbGQpLk1pblZhbHVlID09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgICAgICAgICg8TnVtZXJpY0ZpZWxkPmZpZWxkKS5NaW5WYWx1ZSA9PSBudWxsXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICg8TnVtZXJpY0ZpZWxkPmZpZWxkKS5NaW5WYWx1ZSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZm9ybS5PYmplY3RGaWVsZHMucHVzaChmaWVsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5mb3JtLkZpZWxkcyA9IG51bGw7XHJcbiAgICAgIHRoaXMuZm9ybS5PcmdhSUQgPSB0aGlzLm9yZ2FJRDtcclxuICAgICAgaWYgKHRoaXMuZm9ybS5DcmVhdGlvbkRhdGUgPT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5DcmVhdGlvbkRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuZm9ybS5DcmVhdGlvblVzZXIgPSB0aGlzLlVzZXJJRDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZvcm0uTW9kaWZ5VXNlciA9IHRoaXMuVXNlcklEO1xyXG5cclxuICAgICAgdGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzID0gSlNPTi5zdHJpbmdpZnkodGhpcy5mb3JtLlRyaWdnZXJzKTtcclxuICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gbnVsbDtcclxuXHJcbiAgICAgIHRoaXMuZm9ybS5PYmplY3RBY3Rpb25CdXR0b25zID0gSlNPTi5zdHJpbmdpZnkodGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMpO1xyXG4gICAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucyA9IG51bGw7XHJcblxyXG4gICAgICBpZiAodGhpcy5mb3JtLkNvZGUgPT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuc2V0Q29kZSh0aGlzLmZvcm0uTmFtZSk7XHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgICAvLyBjaGlhbWF0YSBlZmZldHRpdmFcclxuICAgICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBQYXJhbU5hbWU6IFwiRm9ybVwiLFxyXG4gICAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtLFxyXG4gICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiSW4gQm9keVwiXSxcclxuICAgICAgICB9LFxyXG4gICAgICBdO1xyXG5cclxuICAgICAgdGhpcy5zYXZlZCA9IHRydWU7XHJcblxyXG5cclxuXHJcbiAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLlNhdmVFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXMpID0+IHtcclxuICAgICAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLlN1Y2Nlc3MoXCJGb3JtIHNhbHZhdGEgY29uIHN1Y2Nlc3NvIVwiKTtcclxuICAgICAgICAgIHRoaXMuYWZ0ZXJTYXZlRm9ybUV2ZW50LmVtaXQodGhpcy5mb3JtKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuRXJyb3IoXCJFcnJvcmUgbmVsIHNhbHZhdGFnZ2lvIGRlbGxhIGZvcm1cIik7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3JlIG5lbCBzYWx2YXRhZ2dpbyBkZWxsYSBmb3JtXCIsIGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNhdmVGb3JtRXZlbnQuZW1pdCh0aGlzLmZvcm0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIEZVTlpJT05JIFBSSVZBVEVcclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBpbXBvc3RhcmUgbGEgZm9ybSBlIGNvbmZpZ3VyYXJlIGNvbG9ubmUvRm9ybUdvdXJwLlxyXG4gICAqIEBwYXJhbSBmb3JtIEZvcm0gZGEgdXRpbGl6emFyZS5cclxuICAgKi9cclxuICBwcml2YXRlIHNldEZvcm1BbmRDb25maWd1cmUoZm9ybTogRm9ybSA9IG51bGwpIHtcclxuXHJcbiAgICBpZiAoZm9ybSAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuZm9ybSA9IGZvcm07XHJcbiAgICAgIHRoaXMuZm9ybS5PcmdhSUQgPSB0aGlzLm9yZ2FJRDtcclxuICAgICAgaWYgKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBudWxsICYmIHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBcIlwiKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gSlNPTi5wYXJzZSh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IG5ldyBBcnJheTxUcmlnZ2VyPigpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5mb3JtLk9iamVjdEFjdGlvbkJ1dHRvbnMgIT0gbnVsbCAmJiB0aGlzLmZvcm0uT2JqZWN0QWN0aW9uQnV0dG9ucyAhPSBcIlwiKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMgPSBKU09OLnBhcnNlKHRoaXMuZm9ybS5PYmplY3RBY3Rpb25CdXR0b25zKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucyA9IG5ldyBBcnJheTxBY3Rpb25CdXR0b24+KCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5mb3JtLkZpZWxkcyAhPSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLkZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG5cclxuICAgICAgICAgIC8vIFRyYXNmb3JtbyBpbCBCYXNlNjRTdHJpbmcgZGVsIERhdGFnZXR0ZXIgbmVsIERhdGFnZXR0ZXIgdmVybyBlIHByb3ByaW9cclxuICAgICAgICAgIGlmIChmaWVsZC5EYXRhR2V0dGVyVmFsdWVCYXNlNjRTdHJpbmcgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBmaWVsZC5EYXRhR2V0dGVyID0gSlNPTi5wYXJzZShhdG9iKGZpZWxkLkRhdGFHZXR0ZXJWYWx1ZUJhc2U2NFN0cmluZykpO1xyXG4gICAgICAgICAgICBpZiAoZmllbGQuRGF0YUdldHRlciA9PSBudWxsKSB7IGZpZWxkLkRhdGFHZXR0ZXIgPSBuZXcgRGF0YUdldHRlcigpOyB9XHJcbiAgICAgICAgICAgIGZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPSBmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID09IG51bGwgPyBEYXRhR2V0dGVyVHlwZUVudW0uTWFudWFsZSA6IGZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmaWVsZC5EYXRhR2V0dGVyID0gbmV3IERhdGFHZXR0ZXIoKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBmaWVsZC5EYXRhR2V0dGVyVmFsdWVCYXNlNjRTdHJpbmcgPSBudWxsO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gQ2FtcGkgY29uIERhdGFHZXR0ZXJTcGVlY2hUZXh0OiBjYXJpY2FyZSBpbCBRdWVyeUVkaXRvciBpbiBzaWxlbnQgcGVyIHBvcG9sYXJlIGlsIERhdGFHZXR0ZXJWYWx1ZSB2aWEgQUlcclxuICAgICAgICB0aGlzLnBlbmRpbmdBaURhdGFHZXR0ZXJGaWVsZHMgPSB0aGlzLmZvcm0uRmllbGRzLmZpbHRlcihmID0+XHJcbiAgICAgICAgICBmLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPT09IERhdGFHZXR0ZXJUeXBlRW51bVsnRGEgZGF0YWJhc2UnXSAmJlxyXG4gICAgICAgICAgISFmLkRhdGFHZXR0ZXIuRGF0YUdldHRlclNwZWVjaFRleHQgJiZcclxuICAgICAgICAgICFmLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAodGhpcy5wZW5kaW5nQWlEYXRhR2V0dGVyRmllbGRzLmxlbmd0aCA+IDAgJiYgdGhpcy5RdWVyeUVkaXRvckNvbXBvbmVudCAhPSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLnByb2Nlc3NOZXh0QWlEYXRhR2V0dGVyRmllbGQoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xyXG4gICAgdGhpcy5jcmVhdGVGb3JtRm9ybSgpO1xyXG4gICAgaW5qZWN0R29vZ2xlRm9udHNGcm9tRm9ybSh0aGlzLmZvcm0pO1xyXG4gICAgdGhpcy5yZWZyZXNoRmllbGRUeXBlT3B0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlRm9ybUdyYXBoaWNTdWdnZXN0SW5wdXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3dGb3JtR3JhcGhpY1N1Z2dlc3RJbnB1dCA9ICF0aGlzLnNob3dGb3JtR3JhcGhpY1N1Z2dlc3RJbnB1dDtcclxuICAgIGlmICghdGhpcy5zaG93Rm9ybUdyYXBoaWNTdWdnZXN0SW5wdXQpIHRoaXMuZm9ybUdyYXBoaWNTY29wZSA9ICdhbGwnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWZyZXNoRmllbGRUeXBlT3B0aW9ucygpOiB2b2lkIHtcclxuICAgIGNvbnN0IHNlZW5UeXBlcyA9IG5ldyBTZXQ8bnVtYmVyPigpO1xyXG4gICAgY29uc3Qgb3B0aW9uczogeyB2YWx1ZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXSA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBmIG9mICh0aGlzLmZvcm0/LkZpZWxkcyA/PyBbXSkpIHtcclxuICAgICAgaWYgKHNlZW5UeXBlcy5oYXMoZi5GaWVsZFR5cGUpKSBjb250aW51ZTtcclxuICAgICAgc2VlblR5cGVzLmFkZChmLkZpZWxkVHlwZSk7XHJcbiAgICAgIGNvbnN0IGxhYmVsID0gKEVxcER5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb21wb25lbnQuRklFTERfVFlQRV9MQUJFTFMgYXMgYW55KVtmLkZpZWxkVHlwZV0gPz8gYFRpcG8gJHtmLkZpZWxkVHlwZX1gO1xyXG4gICAgICBvcHRpb25zLnB1c2goeyB2YWx1ZTogYHR5cGVfJHtmLkZpZWxkVHlwZX1gLCBsYWJlbCB9KTtcclxuICAgIH1cclxuICAgIHRoaXMucHJlc2VudEZpZWxkVHlwZU9wdGlvbnMgPSBvcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29uZmlndXJhIGxlIGNvbG9ubmUgcGVyIGxlIHRhYmVsbGUgbmVjZXNzYXJpZSBhbGxhIGNyZWF6aW9uZSBkZWxsYSBmb3JtOlxyXG4gICAqICAtIHBlciBsYSB2aXN1YWxpenphemlvbmUgZGVpIGNhbXBpIGluc2VyaXRpXHJcbiAgICogIC0gcGVyIGxlIGZvcm0gZGkgZGV0dGFnbGlvIGNyZWF0ZVxyXG4gICAqICAtIHBlciBsZSBhemlvbmkgY29uZmlndXJhdGUgc3VpIHJlY29yZCBkZWxsYSBmb3JtXHJcbiAgICovXHJcblxyXG5cclxuXHJcblxyXG4gIHByaXZhdGUgY29uZmlndXJlQ29sdW1ucygpIHtcclxuICAgIHRoaXMuZmllbGRzQ29sdW1ucyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJhY3Rpb25cIixcclxuICAgICAgICBkaXNwbGF5OiBcIlwiLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uTWVudUFjdGlvbixcclxuICAgICAgICBidXR0b25NZW51SWNvbjogXCJtb3JlX3ZlcnRcIixcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgNHJlbVwiIH0sXHJcbiAgICAgICAgYWN0aW9uczogW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIk1vZGlmaWNhXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZWRpdFwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMuZWRpdEZpZWxkKGVsZW1lbnQpLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJEdXBsaWNhIHNvdHRvXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZmlsZV9jb3B5XCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy5kdXBsaWNhdGVGaWVsZChlbGVtZW50LCBlbGVtZW50Lk9yZGluYWxQb3NpdGlvbiArIDEpLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJEdXBsaWNhIGluIGZvbmRvXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZmlsZV9jb3B5XCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy5kdXBsaWNhdGVGaWVsZChlbGVtZW50KSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiRWxpbWluYVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImRlbGV0ZVwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMuZGVsZXRlRWxlbWVudChlbGVtZW50LCBcIkZpZWxkc1wiKSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAvLyB7XHJcbiAgICAgICAgICAvLyAgIG5hbWU6IFwiU3Bvc3RhIHN1XCIsXHJcbiAgICAgICAgICAvLyAgIGljb246IFwiYXJyb3dfdXB3YXJkXCIsXHJcbiAgICAgICAgICAvLyAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT5cclxuICAgICAgICAgIC8vICAgICB0aGlzLm1vdmVFbGVtZW50KGVsZW1lbnQsIHRydWUsIFwiRmllbGRzXCIpLFxyXG4gICAgICAgICAgLy8gICBkaXNhYmxlZDogKGVsZW1lbnQpID0+IHRoaXMuZm9ybS5GaWVsZHMuaW5kZXhPZihlbGVtZW50KSA9PT0gMCxcclxuICAgICAgICAgIC8vIH0sXHJcbiAgICAgICAgICAvLyB7XHJcbiAgICAgICAgICAvLyAgIG5hbWU6IFwiU3Bvc3RhIGdpw7lcIixcclxuICAgICAgICAgIC8vICAgaWNvbjogXCJhcnJvd19kb3dud2FyZFwiLFxyXG4gICAgICAgICAgLy8gICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+XHJcbiAgICAgICAgICAvLyAgICAgdGhpcy5tb3ZlRWxlbWVudChlbGVtZW50LCBmYWxzZSwgXCJGaWVsZHNcIiksXHJcbiAgICAgICAgICAvLyAgIGRpc2FibGVkOiAoZWxlbWVudCkgPT5cclxuICAgICAgICAgIC8vICAgICB0aGlzLmZvcm0uRmllbGRzLmluZGV4T2YoZWxlbWVudCkgPj0gdGhpcy5mb3JtLkZpZWxkcy5sZW5ndGggLSAxLFxyXG4gICAgICAgICAgLy8gfSxcclxuICAgICAgICBdLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIkZpZWxkVHlwZVwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiVGlwb2xvZ2lhXCIsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5FbnVtLFxyXG4gICAgICAgIGVudW1Nb2RlbDogRmllbGRUeXBlRW51bSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgMTJyZW1cIiB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7IGtleTogXCJMYWJlbFwiLCBkaXNwbGF5OiBcIkxhYmVsXCIsIHN0eWxlczogeyBmbGV4OiBcIjAgMCA4cmVtXCIgfSB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIkRlc2NyaXB0aW9uXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJEZXNjcml6aW9uZVwiLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCAxMnJlbVwiIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZVwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiVGlwbyBSZWN1cGVybyBEYXRpXCIsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5FbnVtLFxyXG4gICAgICAgIGVudW1Nb2RlbDogRGF0YUdldHRlclR5cGVFbnVtLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCAxMnJlbVwiIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiUmVxdWlyZWRcIixcclxuICAgICAgICBkaXNwbGF5OiBcIk9iYmxpZ2F0b3Jpb1wiLFxyXG4gICAgICAgIHZhbHVlOiAoZWxlbWVudCkgPT4gZWxlbWVudC5SZXF1aXJlZCxcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLkJvb2xlYW4sXHJcbiAgICAgICAgYm9vbGVhblZhbHVlczoge1xyXG4gICAgICAgICAgdHJ1ZTogJzxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgc3VjY2Vzcy1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgICAgZmFsc2U6ICc8aSBjbGFzcz1cImZhIGZhLWNsb3NlIGVycm9yLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgNXJlbVwiLCBjZWxsQWxpZ25tZW50OiBDZWxsQWxpZ25tZW50RW51bS5DRU5URVIgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJGb3JtdWxhXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJDYWxjb2xhdG9cIixcclxuICAgICAgICB2YWx1ZTogKGVsZW1lbnQpID0+IGVsZW1lbnQuRm9ybXVsYSAhPSBudWxsICYmIGVsZW1lbnQuRm9ybXVsYSAhPSAnJyxcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLkJvb2xlYW4sXHJcbiAgICAgICAgYm9vbGVhblZhbHVlczoge1xyXG4gICAgICAgICAgdHJ1ZTogJzxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgc3VjY2Vzcy1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgICAgZmFsc2U6ICc8aSBjbGFzcz1cImZhIGZhLWNsb3NlIGVycm9yLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgNXJlbVwiLCBjZWxsQWxpZ25tZW50OiBDZWxsQWxpZ25tZW50RW51bS5DRU5URVIgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJJbkxpc3RWaWV3XCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJWaXNpYmlsZSBpbiBDb21waWxhemlvbmVcIixcclxuICAgICAgICB2YWx1ZTogKGVsZW1lbnQpID0+IGVsZW1lbnQuSW5MaXN0VmlldyxcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLkJvb2xlYW4sXHJcbiAgICAgICAgYm9vbGVhblZhbHVlczoge1xyXG4gICAgICAgICAgdHJ1ZTogJzxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgc3VjY2Vzcy1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgICAgZmFsc2U6ICc8aSBjbGFzcz1cImZhIGZhLWNsb3NlIGVycm9yLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgN3JlbVwiLCBjZWxsQWxpZ25tZW50OiBDZWxsQWxpZ25tZW50RW51bS5DRU5URVIgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJJbnZpc2liaWxpdHlcIixcclxuICAgICAgICBkaXNwbGF5OiBcIk9jY3VwYSBzcGF6aW8/XCIsXHJcbiAgICAgICAgdmFsdWU6IChlbGVtZW50KSA9PiBlbGVtZW50LkluTGlzdFZpZXcgfHwgZWxlbWVudC5JbnZpc2liaWxpdHkgPT0gRmllbGRJbnZpc2liaWxpdHlFbnVtW1wiTkFTQ09TVE8gQ09OIEFSRUEgVklTSUJJTEVcIl0sXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5Cb29sZWFuLFxyXG4gICAgICAgIGJvb2xlYW5WYWx1ZXM6IHtcclxuICAgICAgICAgIHRydWU6ICc8aSBjbGFzcz1cImZhIGZhLWNoZWNrIHN1Y2Nlc3MtY29sb3JcIj48L2k+JyxcclxuICAgICAgICAgIGZhbHNlOiAnPGkgY2xhc3M9XCJmYSBmYS1jbG9zZSBlcnJvci1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDdyZW1cIiwgY2VsbEFsaWdubWVudDogQ2VsbEFsaWdubWVudEVudW0uQ0VOVEVSIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiVmlzaWJsZUlmXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJWaXNpYmlsaXTDoCBjb25kaXppb25hdGFcIixcclxuICAgICAgICB2YWx1ZTogKGVsZW1lbnQpID0+IGVsZW1lbnQuVmlzaWJsZUlmICE9IG51bGwgJiYgZWxlbWVudC5WaXNpYmxlSWYgIT0gXCJcIixcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLkJvb2xlYW4sXHJcbiAgICAgICAgYm9vbGVhblZhbHVlczoge1xyXG4gICAgICAgICAgdHJ1ZTogJzxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgc3VjY2Vzcy1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgICAgZmFsc2U6ICc8aSBjbGFzcz1cImZhIGZhLWNsb3NlIGVycm9yLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgN3JlbVwiLCBjZWxsQWxpZ25tZW50OiBDZWxsQWxpZ25tZW50RW51bS5DRU5URVIgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJBbnN3ZXJTdHlsZS5Jbkxpc3RWaWV3XCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJWaXNpYmlsZSBuZWxsYSByaXNwb3N0YVwiLFxyXG4gICAgICAgIHZhbHVlOiAoZWxlbWVudCkgPT4gIWVsZW1lbnQuQW5zd2VyU3R5bGUgfHwgZWxlbWVudC5BbnN3ZXJTdHlsZSAmJiBlbGVtZW50LkFuc3dlclN0eWxlLkluTGlzdFZpZXcsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5Cb29sZWFuLFxyXG4gICAgICAgIGJvb2xlYW5WYWx1ZXM6IHtcclxuICAgICAgICAgIHRydWU6ICc8aSBjbGFzcz1cImZhIGZhLWNoZWNrIHN1Y2Nlc3MtY29sb3JcIj48L2k+JyxcclxuICAgICAgICAgIGZhbHNlOiAnPGkgY2xhc3M9XCJmYSBmYS1jbG9zZSBlcnJvci1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDVyZW1cIiwgY2VsbEFsaWdubWVudDogQ2VsbEFsaWdubWVudEVudW0uQ0VOVEVSIH0sXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5mb3JtLkZvcm1TY2FsYXJUeXBlICYmXHJcbiAgICAgIHRoaXMuZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2VcclxuICAgICkge1xyXG4gICAgICB0aGlzLmZpZWxkc0NvbHVtbnMuc3BsaWNlKDEsIDAsIHtcclxuICAgICAgICBrZXk6IFwiRmllbGRHcm91cFwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiU2V6aW9uZVwiLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uRXh0ZXJuYWxUZW1wbGF0ZSxcclxuICAgICAgICBleHRlcm5hbFRlbXBsYXRlOiB0aGlzLmZpZWxkU2VjdGlvbkNvbHVtblRlbXBsYXRlLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCAxNHJlbVwiIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyB0aGlzLmZpZWxkc0NvbHVtbnMucHVzaChcclxuICAgICAgLy8gICB7XHJcbiAgICAgIC8vICAgICBrZXk6IFwiRmllbGRHcm91cFwiLFxyXG4gICAgICAvLyAgICAgZGlzcGxheTogXCJTZXppb25lXCIsXHJcbiAgICAgIC8vICAgICB0eXBlOiBUeXBlQ29sdW1uLkV4dGVybmFsVGVtcGxhdGUsXHJcbiAgICAgIC8vICAgICBleHRlcm5hbFRlbXBsYXRlOiB0aGlzLmZpZWxkU2VjdGlvbkNvbHVtblRlbXBsYXRlLFxyXG4gICAgICAvLyAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDE0cmVtXCIgfVxyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFjdGlvbkJ1dHRvbnNDb2x1bW5zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcImFjdGlvblwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiXCIsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5NZW51QWN0aW9uLFxyXG4gICAgICAgIGJ1dHRvbk1lbnVJY29uOiBcIm1vcmVfdmVydFwiLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCA2JVwiIH0sXHJcbiAgICAgICAgYWN0aW9uczogW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIk1vZGlmaWNhXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZWRpdFwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMub3BlbkFjdGlvbkJ1dHRvbkRpYWxvZyhlbGVtZW50KSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiRWxpbWluYVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImRlbGV0ZVwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5kZWxldGVBY3Rpb25CdXR0b24oZWxlbWVudCksXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXSxcclxuICAgICAgfSxcclxuICAgICAgeyBrZXk6IFwiQnV0dG9uTGFiZWxcIiwgZGlzcGxheTogXCJFdGljaGV0dGFcIiwgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDMwJVwiIH0gfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJCdXR0b25Db2RlXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJDb2RpY2VcIixcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgMjAlXCIgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJJY29uXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJJY29uYVwiLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCAxMCVcIiB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIlNob3dJblwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiU2V6aW9uaVwiLFxyXG4gICAgICAgIHZhbHVlOiAoZWwpID0+IHtcclxuICAgICAgICAgIHZhciBmaW5hbFRleHQgPSBcIlwiO1xyXG4gICAgICAgICAgaWYgKGVsLlNob3dJbiA9PSBudWxsIHx8IGVsLlNob3dJbi5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJOZXNzdW5hXCI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbC5TaG93SW4uZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgZmluYWxUZXh0ICs9IEFjdGlvbkZsYWdFbnVtW2VsZW1lbnRdICsgXCIgLyBcIjtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuIGZpbmFsVGV4dDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCAyMCVcIiB9LFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuXHJcbiAgICB0aGlzLmFjdGlvbnNPblJlY29yZENvbHVtbnMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiYWN0aW9uXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJcIixcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLk1lbnVBY3Rpb24sXHJcbiAgICAgICAgYnV0dG9uTWVudUljb246IFwibW9yZV92ZXJ0XCIsXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDYlXCIgfSxcclxuICAgICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiTW9kaWZpY2FcIixcclxuICAgICAgICAgICAgaWNvbjogXCJlZGl0XCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy5vcGVuQWN0aW9uT25SZWNvcmREaWFsb2coZWxlbWVudCksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkVsaW1pbmFcIixcclxuICAgICAgICAgICAgaWNvbjogXCJkZWxldGVcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMuZGVsZXRlRWxlbWVudChlbGVtZW50LCBcIkFjdGlvbnNPblJlY29yZFwiKSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiU3Bvc3RhIHN1XCIsXHJcbiAgICAgICAgICAgIGljb246IFwiYXJyb3dfdXB3YXJkXCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT5cclxuICAgICAgICAgICAgICB0aGlzLm1vdmVFbGVtZW50KGVsZW1lbnQsIHRydWUsIFwiQWN0aW9uc09uUmVjb3JkXCIpLFxyXG4gICAgICAgICAgICBkaXNhYmxlZDogKGVsZW1lbnQpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZC5pbmRleE9mKGVsZW1lbnQpID09PSAwLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJTcG9zdGEgZ2nDuVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImFycm93X2Rvd253YXJkXCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT5cclxuICAgICAgICAgICAgICB0aGlzLm1vdmVFbGVtZW50KGVsZW1lbnQsIGZhbHNlLCBcIkFjdGlvbnNPblJlY29yZFwiKSxcclxuICAgICAgICAgICAgZGlzYWJsZWQ6IChlbGVtZW50KSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQuaW5kZXhPZihlbGVtZW50KSA+PVxyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQubGVuZ3RoIC0gMSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgfSxcclxuICAgICAgeyBrZXk6IFwiSWNvblwiLCBkaXNwbGF5OiBcIkljb25hXCIsIHN0eWxlczogeyBmbGV4OiBcIiAwIDAgMTUlXCIgfSB9LFxyXG4gICAgICB7IGtleTogXCJOYW1lXCIsIGRpc3BsYXk6IFwiTm9tZVwiLCBzdHlsZXM6IHsgZmxleDogXCIgMCAwIDIwJVwiIH0gfSxcclxuICAgICAgeyBrZXk6IFwiQWN0aW9uXCIsIGRpc3BsYXk6IFwiQXppb25lXCIgfSxcclxuICAgIF07XHJcblxyXG4gICAgdGhpcy50cmlnZ2Vyc0NvbHVtbnMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiYWN0aW9uXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJcIixcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLk1lbnVBY3Rpb24sXHJcbiAgICAgICAgYnV0dG9uTWVudUljb246IFwibW9yZV92ZXJ0XCIsXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDYlXCIgfSxcclxuICAgICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiTW9kaWZpY2FcIixcclxuICAgICAgICAgICAgaWNvbjogXCJlZGl0XCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy5vcGVuVHJpZ2dlcnNEaWFsb2coZWxlbWVudCksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkVsaW1pbmFcIixcclxuICAgICAgICAgICAgaWNvbjogXCJkZWxldGVcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMuZGVsZXRlVHJpZ2dlcihlbGVtZW50KSxcclxuICAgICAgICAgIH1cclxuICAgICAgICBdLFxyXG4gICAgICB9LFxyXG4gICAgICB7IGtleTogXCJkZXNjcmlwdGlvblwiLCBkaXNwbGF5OiBcIkRlc2NyaXppb25lXCIsIHN0eWxlczogeyBmbGV4OiBcIiAwIDAgMTUlXCIgfSB9LFxyXG4gICAgICB7IGtleTogXCJleGVjdXRpb25cIiwgZGlzcGxheTogXCJDb3NhIGVzZWd1ZVwiLCBzdHlsZXM6IHsgZmxleDogXCIgMCAwIDE1JVwiIH0gfSxcclxuICAgIF07XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYSBpbCBGb3JtR3JvdXAgcGVyIGwnb2dnZXR0byBGb3JtXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVGb3JtRm9ybSgpIHtcclxuICAgIHRoaXMuZm9ybUZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBDb2RlOiBbdGhpcy5mb3JtLkNvZGVdLFxyXG4gICAgICBOYW1lOiBbdGhpcy5mb3JtLk5hbWUsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBEZXNjcmlwdGlvbjogW3RoaXMuZm9ybS5EZXNjcmlwdGlvbl0sXHJcbiAgICAgIEZvcm1TY2FsYXJUeXBlOiBbdGhpcy5mb3JtLkZvcm1TY2FsYXJUeXBlLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5vbkNoYW5nZUZvcm1TY2FsYXJUeXBlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEcmFnIGFuZCBEcm9wIGRlbGxlIGNvbG9ubmUgZGVsIGZvcm1cclxuICAgKi9cclxuXHJcbiAgb25EcmFnUmVsZWFzZWQoZXZlbnQpIHtcclxuXHJcbiAgfVxyXG5cclxuICBvbkRyYWdFbmRlZChldmVudCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKTtcclxuICAgICAgdGhpcy5yZWxvYWRGaWVsZHNUYWJsZSgpO1xyXG4gICAgfSwgMTAwMCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhIGlsIEZvcm1Hcm91cCBlcHIgbCdhZ2dpdW50YSBvIGxhIG1vZGlmaWNhIGRpIHVuYSBhY3Rpb24gc3VpIHJlY29yZCBkZWxsYSBGb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlQWN0aW9uT25SZWNvcmRGb3JtKCkge1xyXG4gICAgdGhpcy5hY3Rpb25PblJlY29yZEZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBOYW1lOiBbdGhpcy5zZWxlY3RlZEFjdGlvbi5OYW1lLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgSWNvbjogW3RoaXMuc2VsZWN0ZWRBY3Rpb24uSWNvbiwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIEFjdGlvbjogW3RoaXMuc2VsZWN0ZWRBY3Rpb24uQWN0aW9uLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hpdWRlIGlsIGRpYWxvZyBwZXIgYWdnaXVuZ2VyZS9tb2RpZmljYXJlIHVuIEZpZWxkIHNlbnphIHNhbHZhcmVcclxuICAgKi9cclxuICBwcml2YXRlIGNsb3NlRmllbGREaWFsb2coKSB7XHJcbiAgICBpZiAodGhpcy5kaWFsb2dGaWVsZFJlZiAhPSB1bmRlZmluZWQpIHRoaXMuZGlhbG9nRmllbGRSZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZ2VzdGlyZSBsJ2FwZXJ0dXJhIGRlbCBkaWFsb2cgcGVyIGxhIG1vZGlmaWNhIGRpIHVuIEZpZWxkLlxyXG4gICAqIFNlIGlsIGZpZWxkIMOoIGRpIHRpcG8gXCJGb3JtIGRpIGRldHRhZ2xpb1wiIGFwcmUgaWwgZGlhbG9nIHBlciBsYSBtb2RpZmljYSBkaSB1bmFcclxuICAgKiBJbm5lckZvcm0gYWx0cmltZW50aSBhcHJlIHF1ZWxsbyBwZXIgbGEgbW9kaWZpY2EgZGkgdW4gRmllbGQuXHJcbiAgICogQHBhcmFtIGZpZWxkIENhbXBvIGRhIG1vZGlmaWNhcmVcclxuICAgKi9cclxuICBwcml2YXRlIGVkaXRGaWVsZChmaWVsZDogQmFzZUZpZWxkKSB7XHJcbiAgICBpZiAoZmllbGQuRmllbGRUeXBlICE9IEZpZWxkVHlwZUVudW1bXCJGb3JtIGRpIGRldHRhZ2xpb1wiXSkge1xyXG4gICAgICB0aGlzLm9wZW5GaWVsZERpYWxvZyhmaWVsZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm9wZW5Jbm5lckZvcm1EaWFsb2coXHJcbiAgICAgICAgdGhpcy5mb3JtLklubmVyRm9ybXMuZmluZCgoZikgPT4gZi5OYW1lID09IGZpZWxkLkxhYmVsKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBnZXN0aXJlIGxhIGR1cGxpY2F6aW9uZSBkaSB1biBGaWVsZC5cclxuICAgKiBAcGFyYW0gZmllbGQgQ2FtcG8gZGEgbW9kaWZpY2FyZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZHVwbGljYXRlRmllbGQoZmllbGQ6IEJhc2VGaWVsZCwgb3JkaW5hbFBvc2l0aW9uID0gbnVsbCkge1xyXG4gICAgaWYgKGZpZWxkLkZpZWxkVHlwZSAhPSBGaWVsZFR5cGVFbnVtW1wiRm9ybSBkaSBkZXR0YWdsaW9cIl0pIHtcclxuICAgICAgLy8gcmljcmVvIGwnb2dnZXR0byBwYXNzYW5kbyBwZXIgdW4ganNvblxyXG4gICAgICBsZXQgY2xvbmVGaWVsZDogQmFzZUZpZWxkID0gdGhpcy5zYWZlQ2xvbmUoZmllbGQpO1xyXG5cclxuICAgICAgY2xvbmVGaWVsZC5MYWJlbCA9IGZpZWxkW1wiTGFiZWxcIl0gKyBcIkNvcHlcIjtcclxuICAgICAgY2xvbmVGaWVsZC5JRCA9IHRoaXMuZ2VuZXJhdGVHVUlEKCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWVsZCA9IG5ldyBCYXNlRmllbGQoKTtcclxuICAgICAgaWYgKG9yZGluYWxQb3NpdGlvbiA9PSBudWxsKSB7XHJcbiAgICAgICAgY2xvbmVGaWVsZC5PcmRpbmFsUG9zaXRpb24gPSB0aGlzLmZvcm0uRmllbGRzLmxlbmd0aCArIDE7XHJcbiAgICAgICAgdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgPSBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNsb25lRmllbGQuT3JkaW5hbFBvc2l0aW9uID0gb3JkaW5hbFBvc2l0aW9uO1xyXG4gICAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID0gb3JkaW5hbFBvc2l0aW9uO1xyXG4gICAgICAgIC8vIHV0aWxpenpvIG9yZGluYWwgcG9zaXRpb24gcGVyIGluZmlsYXJlIGlsIGNhbXBvIGNvcnJldHRhbWV0bmUgbmVsbGEgbGlzdGFcclxuICAgICAgICAvLyBwZXIgZmFybG8gc2Ugbm9uIMOoIG51bGxvIGRldm8gY3JlYXJlIGxvIHNwYXppb1xyXG4gICAgICAgIHRoaXMuT3JkaW5hdGVkSW5zZXJ0RmllbGQoZmllbGQsIG9yZGluYWxQb3NpdGlvbilcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGNsb25lRmllbGRTdHJ1Y3R1cmUgPSB7IGZpZWxkOiBjbG9uZUZpZWxkLCByZW9wZW46IDAgfVxyXG4gICAgICB0aGlzLm9uU2F2ZUZpZWxkKGNsb25lRmllbGRTdHJ1Y3R1cmUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYWxlcnQoXCJub24gw6ggcG9zc2liaWxlIGR1cGxpY2FyZSB1bmEgZm9ybSBkaSBkZXR0YWdsaW9cIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIE9yZGluYXRlZEluc2VydEZpZWxkKGZpZWxkOiBCYXNlRmllbGQsIG9yZGluYWxQb3NpdGlvbiA9IDApIHtcclxuICAgIHRoaXMuZm9ybS5GaWVsZHMuc3BsaWNlKG9yZGluYWxQb3NpdGlvbiwgMCwgZmllbGQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwb3NpdGlvbkV4Y2hhbmdlRmllbGRzKGZpZWxkMTogQmFzZUZpZWxkLCBmaWVsZDI6IEJhc2VGaWVsZCkge1xyXG4gICAgY29uc3QgdGVtcCA9IGZpZWxkMTtcclxuICAgIHRoaXMuZm9ybS5GaWVsZHNbZmllbGQxLk9yZGluYWxQb3NpdGlvbl0gPSBmaWVsZDI7XHJcbiAgICB0aGlzLmZvcm0uRmllbGRzW2ZpZWxkMi5PcmRpbmFsUG9zaXRpb25dID0gdGVtcDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgZ2VuZXJhIHVuYSBudW92YSBHVUlEXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUdVSUQoKSB7XHJcbiAgICByZXR1cm4gJ3h4eHgteHh4eC14eHh4LXh4eHgnLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24gKGMpIHtcclxuICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwLFxyXG4gICAgICAgIHYgPSBjID09ICd4JyA/IHIgOiAociAmIDB4MyB8IDB4OCk7XHJcbiAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaW11b3ZlcmUgdW4gRmllbGQgYWxsJ2ludGVybm8gZGkgdW5hIEZvcm0uXHJcbiAgICogUmljaGllZGUgY29uZmVybWEgYWxsJ3V0ZW50ZSBwcmltYSBkaSByaW11b3ZlcmxvLlxyXG4gICAqIEBwYXJhbSBmaWVsZCBCYXNlRmllbGQgZGEgcmltdW92ZXJlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkZWxldGVFbGVtZW50KFxyXG4gICAgZWxlbWVudDogQmFzZUZpZWxkIHwgQWN0aW9uT25SZWNvcmQgfCBGb3JtLFxyXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmdcclxuICApIHtcclxuICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLkNvbmZpcm0oXHJcbiAgICAgIFwiRWxpbWluYXJlIGwnZWxlbWVudG8gc2VsZXppb25hdG8/XCIsXHJcbiAgICAgICgpID0+IHtcclxuICAgICAgICB0aGlzLmZvcm1bcHJvcGVydHlOYW1lXS5zcGxpY2UoXHJcbiAgICAgICAgICB0aGlzLmZvcm1bcHJvcGVydHlOYW1lXS5pbmRleE9mKGVsZW1lbnQpLFxyXG4gICAgICAgICAgMVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PT0gXCJGaWVsZHNcIikge1xyXG4gICAgICAgICAgdGhpcy5zZXRGaWVsZE9yZGluYWxQb3NpdGlvbigpO1xyXG4gICAgICAgICAgdGhpcy5yZWxvYWRGaWVsZHNUYWJsZSgpO1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoRmllbGRUeXBlT3B0aW9ucygpO1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoUHJldmlldygpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHlOYW1lID09PSBcIkFjdGlvbnNPblJlY29yZFwiKSB7XHJcbiAgICAgICAgICB0aGlzLnNldEFjdGlvbk9yZGluYWxQb3NpdGlvbigpO1xyXG4gICAgICAgICAgdGhpcy5yZWxvYWRBY3Rpb25zT25SZWNvcmRUYWJsZSgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHlOYW1lID09PSBcIkFjdGlvbkJ1dHRvbnNcIikge1xyXG4gICAgICAgICAgdGhpcy5zZXRBY3Rpb25CdXR0b25PcmRpbmFsUG9zaXRpb24oKTtcclxuICAgICAgICAgIHRoaXMucmVsb2FkQWN0aW9uQnV0dG9uc09uUmVjb3JkVGFibGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGZhbHNlLFxyXG4gICAgICBcIlJpY2hpZXN0YSBjb25mZXJtYVwiXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzcG9zdGFyZSB1biBjYW1wbyBhbGwnaW50ZXJubyBkZWxsYSBmb3JtLlxyXG4gICAqIEBwYXJhbSBmaWVsZCBPZ2dldHRvIGRpIHRpcG8gQmFzZUZpZWxkIGRhIHNwb3N0YXJlLlxyXG4gICAqIEBwYXJhbSBtb3ZlVXAgU2UgVFJVRSBhbGxvcmEgc3Bvc3RhIHZlcnNvIGwnYWx0byBpbCBjYW1wbyAoYWJiYXNzYSBsJ2luZGljZSkgYWx0cmltZW50aSBpbCBjb250cmFyaW8uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBtb3ZlRWxlbWVudChcclxuICAgIGVsZW1lbnQ6IEJhc2VGaWVsZCB8IEFjdGlvbk9uUmVjb3JkLFxyXG4gICAgbW92ZVVwOiBib29sZWFuLFxyXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmdcclxuICApIHtcclxuICAgIGNvbnN0IHN0YXJ0aW5nSW5kZXggPSB0aGlzLmZvcm1bcHJvcGVydHlOYW1lXS5pbmRleE9mKGVsZW1lbnQpO1xyXG4gICAgY29uc3QgZW5kaW5nSW5kZXggPSBzdGFydGluZ0luZGV4ICsgKG1vdmVVcCA/IC0xIDogMSk7XHJcblxyXG4gICAgdGhpcy5mb3JtW3Byb3BlcnR5TmFtZV0uc3BsaWNlKHN0YXJ0aW5nSW5kZXgsIDEpO1xyXG4gICAgdGhpcy5mb3JtW3Byb3BlcnR5TmFtZV0uc3BsaWNlKGVuZGluZ0luZGV4LCAwLCBlbGVtZW50KTtcclxuXHJcbiAgICBpZiAocHJvcGVydHlOYW1lID09PSBcIkZpZWxkc1wiKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKTtcclxuICAgICAgdGhpcy5yZWxvYWRGaWVsZHNUYWJsZSgpO1xyXG4gICAgfSBlbHNlIGlmIChwcm9wZXJ0eU5hbWUgPT09IFwiQWN0aW9uc09uUmVjb3JkXCIpIHtcclxuICAgICAgdGhpcy5zZXRBY3Rpb25PcmRpbmFsUG9zaXRpb24oKTtcclxuICAgICAgdGhpcy5yZWxvYWRBY3Rpb25zT25SZWNvcmRUYWJsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW1wb3N0YSBsJ29yZGluYW1lbnRvIGRlbGxlIHNlemlvbmkgY2hlIGNvbXBvbmdvbm8gbGEgZm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIHNldEZvcm1GaWVsZEdyb3VwT3JkaW5hbFBvc2l0aW9uKCkge1xyXG4gICAgdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMuZm9yRWFjaCgoZywgaSkgPT4gKGcuT3JkaW5hbFBvc2l0aW9uID0gaSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW1wb3N0YSBsJ29yZGluYW1lbnRvIGRlaSBjYW1waSBhbGwnaW50ZXJubyBkZWxsYSBmb3JtIGluIGJhc2UgYWxsJ29yZGluZSBjaGUgbCd1dGVudGVcclxuICAgKiBoYSBkZWZpbml0byBuZWxsYSB0YWJlbGxhIGluIGN1aSBzb25vIG1vc3RyYXRpXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRGaWVsZE9yZGluYWxQb3NpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmZvcm0uRmllbGRzKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5GaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgICBmaWVsZC5PcmRpbmFsUG9zaXRpb24gPSB0aGlzLmZvcm0uRmllbGRzLmluZGV4T2YoZmllbGQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmljYXJpY2FyZSBpIGRhdGkgZGVsbGEgdGFiZWxsYSBkZWkgY2FtcGkgYWdnaXVudGkgaW4gdW5hIGZvcm1cclxuICAgKi9cclxuICBwcml2YXRlIHJlbG9hZEZpZWxkc1RhYmxlKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGRzVGFibGUpIHtcclxuICAgICAgdGhpcy5maWVsZHNUYWJsZS5yZWxvYWREYXRhdGFibGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEltcG9zdGEgbCdvcmRpbmFtZW50byBkZWkgY2FtcGkgYWxsJ2ludGVybm8gZGVsbGEgZm9ybSBpbiBiYXNlIGFsbCdvcmRpbmUgY2hlIGwndXRlbnRlXHJcbiAgICogaGEgZGVmaW5pdG8gbmVsbGEgdGFiZWxsYSBpbiBjdWkgc29ubyBtb3N0cmF0aVxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0QWN0aW9uT3JkaW5hbFBvc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQpIHtcclxuICAgICAgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZC5mb3JFYWNoKChhY3Rpb24pID0+IHtcclxuICAgICAgICBhY3Rpb24uT3JkaW5hbFBvc2l0aW9uID0gdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZC5pbmRleE9mKGFjdGlvbik7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW1wb3N0YSBsJ29yZGluYW1lbnRvIGRlaSBjYW1waSBhbGwnaW50ZXJubyBkZWxsYSBmb3JtIGluIGJhc2UgYWxsJ29yZGluZSBjaGUgbCd1dGVudGVcclxuICAgKiBoYSBkZWZpbml0byBuZWxsYSB0YWJlbGxhIGluIGN1aSBzb25vIG1vc3RyYXRpXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRBY3Rpb25CdXR0b25PcmRpbmFsUG9zaXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMpIHtcclxuICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMuZm9yRWFjaCgoYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgYWN0aW9uLk9yZGluYWxQb3NpdGlvbiA9IHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zLmluZGV4T2YoYWN0aW9uKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJpY2FyaWNhcmUgaSBkYXRpIGRlbGxhIHRhYmVsbGEgZGVsbGUgYXppb25pIGFnZ2l1bnRpdmUgc3VpIHJlY29yZCBkZWxsYSBGb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVsb2FkQWN0aW9uc09uUmVjb3JkVGFibGUoKSB7XHJcbiAgICBpZiAodGhpcy5hY3Rpb25zT25SZWNvcmRUYWJsZSkge1xyXG4gICAgICB0aGlzLmFjdGlvbnNPblJlY29yZFRhYmxlLnJlbG9hZERhdGF0YWJsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaWNhcmljYXJlIGkgZGF0aSBkZWxsYSB0YWJlbGxhIGRlbGxlIGF6aW9uaSBhZ2dpdW50aXZlIHN1aSByZWNvcmQgZGVsbGEgRm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIHJlbG9hZEFjdGlvbkJ1dHRvbnNPblJlY29yZFRhYmxlKCkge1xyXG4gICAgaWYgKHRoaXMuYWN0aW9uQnV0dG9uc1RhYmxlKSB7XHJcbiAgICAgIHRoaXMuYWN0aW9uQnV0dG9uc1RhYmxlLnJlbG9hZERhdGF0YWJsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIG9uRXh0ZXJuYWxDb21wb25lbnRPdXQoZXY6IGV2ZW50T3V0KSB7XHJcbiAgICB0aGlzLm91dC5lbWl0KGV2KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJvY2Vzc05leHRBaURhdGFHZXR0ZXJGaWVsZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY3VycmVudEFpRGF0YUdldHRlckZpZWxkID0gdGhpcy5wZW5kaW5nQWlEYXRhR2V0dGVyRmllbGRzLnNoaWZ0KCk7XHJcbiAgICB0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50LmlucHV0UGFyYW1zLmNvbmZpZy5tb2RlID0gUXVlcnlFZGl0b3JNb2RlRW51bS5DT01QT1NFUjtcclxuICAgIHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQuaW5wdXRQYXJhbXMuY29uZmlnLmxvYWRRdWVyeVN0YXR1c2VzID0gbnVsbDtcclxuICAgIHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQuaW5wdXRQYXJhbXMuY29uZmlnLkRhdGFHZXR0ZXJTcGVlY2hUZXh0ID0gdGhpcy5jdXJyZW50QWlEYXRhR2V0dGVyRmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyU3BlZWNoVGV4dDtcclxuICAgIC8vIEZvcnphIGxhIChyaSljcmVhemlvbmUgZGVsIGNvbXBvbmVudGUgYXp6ZXJhbmRvIHByaW1hIGlsIGZsYWdcclxuICAgIHRoaXMuYWlEYXRhR2V0dGVyTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7IHRoaXMuYWlEYXRhR2V0dGVyTG9hZGluZyA9IHRydWU7IH0pO1xyXG4gIH1cclxuXHJcbiAgb25BaURhdGFHZXR0ZXJPdXQoZXY6IGV2ZW50T3V0KTogdm9pZCB7XHJcbiAgICBpZiAoZXYuQmVoYXZpb3Vycy5pbmRleE9mKFwic2F2ZS1xdWVyeVwiKSA9PT0gLTEgfHwgIXRoaXMuY3VycmVudEFpRGF0YUdldHRlckZpZWxkKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgZGF0YSA9IGV2LlBhcmFtcztcclxuICAgIHRoaXMuY3VycmVudEFpRGF0YUdldHRlckZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlID0gZGF0YTtcclxuICAgIHRoaXMuY3VycmVudEFpRGF0YUdldHRlckZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNhcmRpbmFsaXR5ID0gMTtcclxuICAgIHRoaXMuY3VycmVudEFpRGF0YUdldHRlckZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckhhc1Jlc2V0QnV0dG9uID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBEYXRhR2V0dGVyQ29sdW1uRm9yY2UgZGV2ZSBlc3NlcmUgbGEgc3RyaW5nYSBjaGlhdmUgKG5vbiBsJ29nZ2V0dG8pIHBlciBmdW56aW9uYXJlIGNvbiBlcXAtc2VsZWN0XHJcbiAgICBjb25zdCBjb2x1bW5Gb3JjZSA9IGRhdGE/LkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZTtcclxuICAgIGlmIChjb2x1bW5Gb3JjZSkge1xyXG4gICAgICAvLyBWMiBzZXJ2ZXIgcmVzdGl0dWlzY2UgeyBrZXksIHZhbHVlLCBrZXlQcm9wZXJ0eSB9IOKAlCBlc3RyYWlhbW8gc29sbyBpbCBrZXkgc3RyaW5nXHJcbiAgICAgIHRoaXMuY3VycmVudEFpRGF0YUdldHRlckZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlID1cclxuICAgICAgICB0eXBlb2YgY29sdW1uRm9yY2UgPT09ICdvYmplY3QnID8gY29sdW1uRm9yY2Uua2V5IDogY29sdW1uRm9yY2U7XHJcbiAgICB9IGVsc2UgaWYgKGRhdGE/LnNlbGVjdGVkRmllbGRzPy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgY29uc3Qgc2YgPSBkYXRhLnNlbGVjdGVkRmllbGRzWzBdO1xyXG4gICAgICB0aGlzLmN1cnJlbnRBaURhdGFHZXR0ZXJGaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSA9XHJcbiAgICAgICAgc2YuRGF0YWJhc2VUYWJsZU5hbWUgKyBcIl9cIiArIHNmLlByb3BlcnR5TmFtZSArIFwiX19cIiArIHNmLkN1cnJlbnRUcmFuc2xhdGUucmVwbGFjZSgvIC9nLCAnXycpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY3VycmVudEFpRGF0YUdldHRlckZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclNwZWVjaFRleHQgPSBudWxsO1xyXG4gICAgLy8gQXp6ZXJhIERhdGFHZXR0ZXJTcGVlY2hUZXh0IGRhbCBjb25maWcgb2JqZWN0IHBlciBldml0YXJlIGNoZSBcIk1vZGlmaWNhXCIgbG8gcmlsYW5jaVxyXG4gICAgdGhpcy5RdWVyeUVkaXRvckNvbXBvbmVudC5pbnB1dFBhcmFtcy5jb25maWcuRGF0YUdldHRlclNwZWVjaFRleHQgPSBudWxsO1xyXG4gICAgdGhpcy5jdXJyZW50QWlEYXRhR2V0dGVyRmllbGQgPSBudWxsO1xyXG4gICAgdGhpcy5haURhdGFHZXR0ZXJMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMucGVuZGluZ0FpRGF0YUdldHRlckZpZWxkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMucHJvY2Vzc05leHRBaURhdGFHZXR0ZXJGaWVsZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVFJJR0dFUlNcclxuICAgKi9cclxuXHJcbiAgb3BlblRyaWdnZXJzRGlhbG9nKGV2OiBUcmlnZ2VyID0gbnVsbCkge1xyXG5cclxuICAgIGlmIChldiAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmlnZ2VyID0gZXY7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVHJpZ2dlciA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kaWFsb2dUcmlnZ2Vyc1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dUcmlnZ2Vycywge1xyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICB3aWR0aDogXCI3NSVcIixcclxuICAgICAgaGVpZ2h0OiBcIjgwJVwiLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzYXZlVHJpZ2dlcihlbGVtZW50OiBUcmlnZ2VyKSB7XHJcblxyXG4gICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5mb3JtLlRyaWdnZXJzICE9IG51bGwpIHtcclxuICAgICAgICB2YXIgZXhpc3RzVHJpZ2dlciA9IHRoaXMuZm9ybS5UcmlnZ2Vycy5maW5kKHggPT4geC5DSUQgPT0gZWxlbWVudC5DSUQpO1xyXG4gICAgICAgIGlmIChleGlzdHNUcmlnZ2VyID09IG51bGwpIHtcclxuICAgICAgICAgIC8vIE51b3ZvIHRyaWdnZXJcclxuICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2Vycy5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBleGlzdHNUcmlnZ2VyID0gZWxlbWVudDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gbmV3IEFycmF5PFRyaWdnZXI+KCk7XHJcbiAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzLnB1c2goZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50cmlnZ2Vyc1RhYmxlLnJlbG9hZERhdGF0YWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGlhbG9nVHJpZ2dlcnNSZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVRyaWdnZXIoZWxlbWVudDogVHJpZ2dlcikge1xyXG4gICAgdmFyIGluZGV4ID0gdGhpcy5mb3JtLlRyaWdnZXJzLmZpbmRJbmRleCh4ID0+IHguQ0lEID09IGVsZW1lbnQuQ0lEKTtcclxuICAgIHRoaXMuZm9ybS5UcmlnZ2Vycy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgdGhpcy50cmlnZ2Vyc1RhYmxlLnJlbG9hZERhdGF0YWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlQWN0aW9uQnV0dG9uKGVsZW1lbnQ6IEFjdGlvbkJ1dHRvbikge1xyXG4gICAgdmFyIGluZGV4ID0gdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMuZmluZEluZGV4KHggPT4geC5CdXR0b25Db2RlID09IGVsZW1lbnQuQnV0dG9uQ29kZSk7XHJcbiAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgdGhpcy5hY3Rpb25CdXR0b25zVGFibGUucmVsb2FkRGF0YXRhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBvcGVuQWlFZGl0RGlhbG9nKCkge1xyXG4gICAgdGhpcy5haUVkaXRQcm9tcHQgPSBcIlwiO1xyXG4gICAgdGhpcy5haUVkaXRBdHRhY2htZW50cyA9IFtdO1xyXG4gICAgdGhpcy5haUVkaXRBdXRvc2F2ZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5haUVkaXRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dBaVByb21wdEhpc3RvcnkgPSB0cnVlO1xyXG4gICAgdGhpcy5kaWFsb2dBaUVkaXRSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nQWlFZGl0LCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBcIjYwJVwiLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZUFpRWRpdERpYWxvZygpIHtcclxuICAgIHRoaXMuZGlhbG9nQWlFZGl0UmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICBvbkFpRWRpdEZvckZpZWxkKGZpZWxkQ29kZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmFpRWRpdEZpZWxkQ29udGV4dCA9IHsgY29kZTogZmllbGRDb2RlIH07XHJcbiAgICB0aGlzLm9wZW5BaUVkaXREaWFsb2coKTtcclxuICB9XHJcblxyXG4gIG9uQWlHcmFwaGljU3VnZ2VzdChkYXRhOiB7IGNvZGU6IHN0cmluZzsgaGludDogc3RyaW5nIH0pOiB2b2lkIHtcclxuICAgIGNvbnN0IHJhd0hpbnQgPSBkYXRhLmhpbnQ/LnRyaW0oKSA/PyAnJztcclxuICAgIGNvbnN0IGZpZWxkTGFiZWwgPSBkYXRhLmNvZGU/LnRyaW0oKSB8fCAnX2NhbXBvc2VuemFub21lXyc7XHJcblxyXG4gICAgaWYgKCF0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbj8uRm9ybXM/LlNwZWVjaFRvR3JhcGhpY3NFbmRQb2ludCkge1xyXG4gICAgICAvLyBGYWxsYmFjazogcGFzc2EgaWwgcmF3SGludCBuZWxsJ2luamVjdGVkUHJvbXB0OyBzZW5kQWlFZGl0IGVzdHJhcnLDoCBpbCBtb2RlbGxvIGRhIGVzc29cclxuICAgICAgY29uc3QgaW5qZWN0ZWRQcm9tcHQgPSByYXdIaW50XHJcbiAgICAgICAgPyBgVm9nbGlvIG1vZGlmaWNhcmUgaW4gbWFuaWVyYSBjb21wbGV0YSBsYSBncmFmaWNhIGRlbCBjYW1wbyAnJHtmaWVsZExhYmVsfScgc2VndWVuZG8gaW4gbWFuaWVyYSBpbmNvbnRlc3RhYmlsZSBxdWVzdGEgaW5kaWNhemlvbmU6ICcke3Jhd0hpbnR9J2BcclxuICAgICAgICA6IGBWb2dsaW8gbW9kaWZpY2FyZSBpbiBtYW5pZXJhIGNvbXBsZXRhIGxhIGdyYWZpY2EgZGVsIGNhbXBvICcke2ZpZWxkTGFiZWx9JyBjb24gdW5vIHN0aWxlIGNyZWF0aXZvIGUgb3JpZ2luYWxlIGEgdHVhIHNjZWx0YWA7XHJcbiAgICAgIHRoaXMuYWlFZGl0RmllbGRDb250ZXh0ID0geyBjb2RlOiBkYXRhLmNvZGUgfTtcclxuICAgICAgdGhpcy5haUZpZWxkU3VnZ2VzdExvYWRpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNlbmRBaUVkaXQoaW5qZWN0ZWRQcm9tcHQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgeyBjbGVhblRleHQ6IGhpbnQsIG1vZGVsSWQ6IGFpTW9kZWxJZCB9ID0gdGhpcy5leHRyYWN0TW9kZWxGcm9tVGV4dChyYXdIaW50KTtcclxuXHJcbiAgICAvLyBUcm92YSBpbCBjYW1wbzogZ2nDoCBzYWx2YXRvIG5lbCBmb3JtIG9wcHVyZSBudW92byBhbmNvcmEgbmVsIGRpYWxvZ1xyXG4gICAgY29uc3QgZmllbGRJbkZvcm0gPSB0aGlzLmZvcm0/LkZpZWxkcz8uZmluZChmID0+IGYuTGFiZWwgPT09IGZpZWxkTGFiZWwpID8/IG51bGw7XHJcbiAgICBjb25zdCBjdXJyZW50RmllbGQgPSBmaWVsZEluRm9ybSA/PyB0aGlzLnNlbGVjdGVkRmllbGQ7XHJcbiAgICBpZiAoIWN1cnJlbnRGaWVsZCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuYWlGaWVsZFN1Z2dlc3RMb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBTdGVzc28gcGF5bG9hZCBkaSBvbkZvcm1HcmFwaGljU3VnZ2VzdCwgbWEgRmllbGRzIGNvbiBzb2xvIGlsIGNhbXBvIGNvcnJlbnRlXHJcbiAgICBjb25zdCBncmFwaGljc1BhcmFtczogRW5kUG9pbnREYXRhUGFyYW1zW10gPSBbXHJcbiAgICAgIHsgUGFyYW1OYW1lOiAnTmFtZScsIFBhcmFtVmFsdWU6IHRoaXMuZm9ybT8uTmFtZSA/PyBmaWVsZExhYmVsLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bJ0luIEJvZHknXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogJ0Rlc2NyaXB0aW9uJywgUGFyYW1WYWx1ZTogdGhpcy5mb3JtPy5EZXNjcmlwdGlvbiA/PyBudWxsLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bJ0luIEJvZHknXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogJ1RoZW1lQ1NTJywgUGFyYW1WYWx1ZTogdGhpcy5mb3JtPy5UaGVtZUNTUyA/PyBudWxsLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bJ0luIEJvZHknXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogJ1RpdGxlQ1NTJywgUGFyYW1WYWx1ZTogdGhpcy5mb3JtPy5UaXRsZUNTUyA/PyBudWxsLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bJ0luIEJvZHknXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogJ0ZpZWxkcycsIFBhcmFtVmFsdWU6IFt7IExhYmVsOiBjdXJyZW50RmllbGQuTGFiZWwsIEZpZWxkVHlwZTogY3VycmVudEZpZWxkLkZpZWxkVHlwZSB9XSwgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtWydJbiBCb2R5J10gfSxcclxuICAgICAgeyBQYXJhbU5hbWU6ICdIaW50JywgUGFyYW1WYWx1ZTogaGludCB8fCB0aGlzLmJ1aWxkUmFuZG9tR3JhcGhpY0hpbnQoKSwgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtWydJbiBCb2R5J10gfSxcclxuICAgICAgeyBQYXJhbU5hbWU6ICdNb2RlbElkJywgUGFyYW1WYWx1ZTogYWlNb2RlbElkLCBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bJ0luIEJvZHknXSB9LFxyXG4gICAgICB7IFBhcmFtTmFtZTogJ1NpbmdsZUZpZWxkTW9kZScsIFBhcmFtVmFsdWU6IHRydWUsIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVsnSW4gQm9keSddIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5TcGVlY2hUb0dyYXBoaWNzRW5kUG9pbnQsXHJcbiAgICAgIGdyYXBoaWNzUGFyYW1zLFxyXG4gICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmFpRmllbGRTdWdnZXN0TG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBjb25zdCByID0gcmVzIGFzIHsgRmllbGRTdHlsZXM/OiB7IFtjc3NDbGFzc05hbWU6IHN0cmluZ106IHsgW3Byb3A6IHN0cmluZ106IHN0cmluZyB9IH07IFdhcm5pbmdzPzogc3RyaW5nW10gfTtcclxuXHJcbiAgICAgICAgLy8gQXBwbGljYSBGaWVsZFN0eWxlcyBhbCBjYW1wbyB0YXJnZXQ7IHNlIHZlQXBwbHlUb0FsbE9mVHlwZSDDqCBhdHRpdm8sIHByb3BhZ2EgYSB0dXR0aSBpIGNhbXBpIGRlbGxvIHN0ZXNzbyB0aXBvXHJcbiAgICAgICAgaWYgKHIuRmllbGRTdHlsZXMpIHtcclxuICAgICAgICAgIGNvbnN0IGNzc0NsYXNzTmFtZSA9IChFcXBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29tcG9uZW50LkZJRUxEX1RZUEVfQ1NTX0NMQVNTIGFzIGFueSlbY3VycmVudEZpZWxkLkZpZWxkVHlwZV07XHJcbiAgICAgICAgICBpZiAoY3NzQ2xhc3NOYW1lICYmIHIuRmllbGRTdHlsZXNbY3NzQ2xhc3NOYW1lXSAmJiB0eXBlb2Ygci5GaWVsZFN0eWxlc1tjc3NDbGFzc05hbWVdID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy52ZUFwcGx5VG9BbGxPZlR5cGUpIHtcclxuICAgICAgICAgICAgICAodGhpcy5mb3JtLkZpZWxkcyA/PyBbXSkuZmlsdGVyKGYgPT4gZi5GaWVsZFR5cGUgPT09IGN1cnJlbnRGaWVsZC5GaWVsZFR5cGUpLmZvckVhY2goZiA9PiB7XHJcbiAgICAgICAgICAgICAgICAoZiBhcyBhbnkpW2Nzc0NsYXNzTmFtZV0gPSB7IC4uLnIuRmllbGRTdHlsZXMhW2Nzc0NsYXNzTmFtZV0gfTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAoY3VycmVudEZpZWxkIGFzIGFueSlbY3NzQ2xhc3NOYW1lXSA9IHIuRmllbGRTdHlsZXNbY3NzQ2xhc3NOYW1lXTtcclxuICAgICAgICAgICAgICBpZiAoZmllbGRJbkZvcm0pIChmaWVsZEluRm9ybSBhcyBhbnkpW2Nzc0NsYXNzTmFtZV0gPSByLkZpZWxkU3R5bGVzW2Nzc0NsYXNzTmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52ZUFwcGx5VG9BbGxPZlR5cGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gQWdnaW9ybmEgc2VsZWN0ZWRGaWVsZCBwZXIgaWwgZGlhbG9nXHJcbiAgICAgICAgY29uc3QgYXBwbHlUYXJnZXQgPSBmaWVsZEluRm9ybSA/PyBjdXJyZW50RmllbGQ7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkID0gdGhpcy5zYWZlQ2xvbmUoYXBwbHlUYXJnZXQpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaWVsZC5Gb3JtdWxhID0gYXBwbHlUYXJnZXQuRm9ybXVsYTtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEZpZWxkLkFuc3dlclN0eWxlID09IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWVsZC5BbnN3ZXJTdHlsZSA9IHsgSW5MaXN0VmlldzogdHJ1ZSwgVmlzaWJsZUlmOiBudWxsLCBGaWVsZHN0eWxlQ1NTOiAnJywgTGFiZWxzdHlsZUNTUzogJycsIENvbFNwYW5TaXplczogW10sIEludmlzaWJpbGl0eTogRmllbGRJbnZpc2liaWxpdHlFbnVtLk5BU0NPU1RPIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmaWVsZEluRm9ybSkgdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgPSB0aGlzLmZvcm0uRmllbGRzLmluZGV4T2YoZmllbGRJbkZvcm0pO1xyXG5cclxuICAgICAgICAvLyBSaWFwcmkgaWwgZGlhbG9nIGNhbXBvIChzYWx2byBWaXN1YWwgRWRpdG9yIGdyYXBoaWMgc3VnZ2VzdCBtb2RlKVxyXG4gICAgICAgIGlmICghdGhpcy52ZUdyYXBoaWNTdWdnZXN0QWN0aXZlKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5kaWFsb2dGaWVsZFJlZikgdGhpcy5kaWFsb2dGaWVsZFJlZi5jbG9zZSgpO1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dGaWVsZFJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dGaWVsZCwge1xyXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsIGhhc0JhY2tkcm9wOiB0cnVlLCB3aWR0aDogJzc1JScsIGhlaWdodDogJzgwJScsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFnZ2lvcm5hIHByZXZpZXcgc2UgZXJhIGFwZXJ0YVxyXG4gICAgICAgIGNvbnN0IHdhc09uUHJldmlldyA9IHRoaXMuZm9ybUNvbXBsZXRlZDtcclxuICAgICAgICBpZiAod2FzT25QcmV2aWV3KSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm1Db21wbGV0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMucHJldmlld0Zvcm0gPSBudWxsO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNldEZvcm1TdGF0dXModHJ1ZSksIDUwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHRoaXMudmVHcmFwaGljU3VnZ2VzdEFjdGl2ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5TdWNjZXNzKCdHcmFmaWNhIGNhbXBvIGFwcGxpY2F0YSEnKTtcclxuICAgICAgICBpZiAoci5XYXJuaW5ncz8ubGVuZ3RoID4gMCkgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuV2FybmluZyhyLldhcm5pbmdzKTtcclxuICAgICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgdGhpcy5haUZpZWxkU3VnZ2VzdExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnZlR3JhcGhpY1N1Z2dlc3RBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnZlQXBwbHlUb0FsbE9mVHlwZSA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IG1zZyA9IChlcnJvciBhcyBhbnkpPy5lcnJvcjtcclxuICAgICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5FcnJvcih0eXBlb2YgbXNnID09PSAnc3RyaW5nJyAmJiBtc2cudHJpbSgpID8gbXNnIDogJ0Vycm9yZSBuZWxsYSBnZW5lcmF6aW9uZSBkZWxsYSBncmFmaWNhIGRlbCBjYW1wbycpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgb25BaUVkaXRGaWxlQ2hhbmdlKGV2ZW50OiBFdmVudCkge1xyXG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgIGlmICghaW5wdXQuZmlsZXM/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/LmNsb3NlKCk7XHJcbiAgICAvLyBzZXRUaW1lb3V0IG5lY2Vzc2FyaW86IFN3ZWV0QWxlcnQgbm9uIHNpIGFwcmUgY29ycmV0dGFtZW50ZSBzZSBpbCBNYXRlcmlhbCBEaWFsb2cgw6ggYW5jb3JhIGluIGZhc2UgZGkgY2hpdXN1cmFcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5kZWxldGVFbGVtZW50KGZpZWxkLCAnRmllbGRzJyksIDIwMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBISU5UX1BBTEVUVEVTID0gW1xyXG4gICAgJ21vbm9jcm9tYXRpY28gdmlicmFudGUnLCAnY29tcGxlbWVudGFyZScsICd0cmlhZGljbycsICdhbmFsb2dvIGNhbGRvJywgJ2FuYWxvZ28gZnJlZGRvJyxcclxuICAgICdwYXN0ZWxsbyBkZWxpY2F0bycsICduZW9uIHN1IHNjdXJvJywgJ2VhcnRoIHRvbmVzJywgJ29jZWFubyBwcm9mb25kbycsICd0cmFtb250byBjb2xvcmF0bycsXHJcbiAgICAnZm9yZXN0YSBhdXR1bm5hbGUnLCAnbGF2YW5kYSBlIG9ybycsICdjb3JhbGxvIGUgdHVyY2hlc2UnLCAncm9zc28gZSBhbnRyYWNpdGUnLCAndmVyZGUgYWNxdWEgZSBzYWJiaWEnLFxyXG4gICAgJ3Zpb2xhIGVsZXR0cmljbyBlIGdpYWxsbyBsaW1vbmUnLCAncm9zYSBjaXByaWEgZSBncmlnaW8gcGVybGEnLCAnYmx1IGNvYmFsdG8gZSBhcmFuY2lvIGJydWNpYXRvJyxcclxuICAgICdvcm8gYW50aWNvIGUgYm9yZGVhdXgnLCAnbWVudGEgZnJlc2NhIGUgY2lvY2NvbGF0bycsICdhcmdlbnRvIGUgYmx1IGFjY2lhaW8nLCAncGVzY2EgZSBpbmRhY28nLFxyXG4gICAgJ3Jvc3NvIGNpbGllZ2lhIGUgYXZvcmlvJywgJ3RlYWwgc2N1cm8gZSByYW1lJywgJ2xpbWUgZSBibHUgbmF2eScsICdsaWxsYSBlIHZlcmRlIHNhbHZpYScsXHJcbiAgICAnYXp6dXJybyBnaGlhY2NpbyBlIGdyaWdpbyBhcmRlc2lhJywgJ2FtYnJhIGUgcGV0cm9saW8nLCAnc21lcmFsZG8gZSByb3NhIGFudGljbycsICdiaWFuY28gZSBuZXJvIGNvbiBhY2NlbnRvIHJvc3NvIGZ1b2NvJyxcclxuICBdO1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBISU5UX1NUWUxFUyA9IFtcclxuICAgICdtaW5pbWFsaXN0YScsICdib2xkIGUgdml2YWNlJywgJ2VsZWdhbnRlIGUgc29icmlvJywgJ2dpb2Nvc28gZSBkaW5hbWljbycsICdpbmR1c3RyaWFsZScsXHJcbiAgICAncmV0cm9mdXR1cmlzdGEnLCAnb3JnYW5pY28gZSBuYXR1cmFsZScsICd0ZWNoL2RpZ2l0YWxlJywgJ2x1eHVyeSBwcmVtaXVtJywgJ3ZpbnRhZ2UgbW9yYmlkbycsXHJcbiAgICAnZmxhdCBkZXNpZ24gcHVsaXRvJywgJ2dsYXNzbW9ycGhpc20nLCAnbmV1bW9yZmlzbW8nLCAnZGFyayBtb2RlIHJhZmZpbmF0bycsXHJcbiAgICAnYnJ1dGFsaXN0IGNvbiBib3JkaSBzcGVzc2knLCAnc2NhbmRpbmF2byBwdWxpdG8nLCAnYXJ0IGTDqWNvIGdlb21ldHJpY28nLCAnY3liZXJwdW5rIGRpc3RvcGljbycsXHJcbiAgICAncG9wIGFydCBhIHRpbnRlIHBpYXR0ZScsICd3YXRlcmNvbG9yIHBhc3RlbGxvIHNmdW1hdG8nLCAnbmVvbiBhbm5pIG90dGFudGEnLCAnbWF0ZXJpYWwgZGVzaWduIGNvbiBvbWJyZScsXHJcbiAgICAnYXVyb3JhIGJvcmVhbGUnLCAnc3dpc3Mgc3R5bGUgdGlwb2dyYWZpY28nLCAndHJvcGljYWxlIHZpdmFjZScsICdtb25vY3JvbW8gY29uIGFjY2VudG8gc2luZ29sbycsXHJcbiAgICAnYXVyb3JhIG5vdHR1cm5hIHNjdXJhJywgJ2NvdHRhZ2Vjb3JlIGNhbGRvJyxcclxuICBdO1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBISU5UX0FESkVDVElWRVMgPSBbXHJcbiAgICAnb3JpZ2luYWxlJywgJ2ltcHJldmVkaWJpbGUnLCAnYWNjYXR0aXZhbnRlJywgJ3NwZXR0YWNvbGFyZScsICdkZWxpY2F0bycsXHJcbiAgICAnYXVkYWNlJywgJ3JhZmZpbmF0bycsICdnaW9jb3NvJywgJ3ZpdmFjZScsICdtaXN0ZXJpb3NvJyxcclxuICAgICdjYWxkbycsICdmcmVzY28nLCAncm9tYW50aWNvJywgJ2Z1dHVyaXN0aWNvJywgJ2VsZWdhbnRlJyxcclxuICAgICdydXN0aWNvJywgJ21vZGVybm8nLCAndmludGFnZScsICdhcm1vbmlvc28nLCAnc29ycHJlbmRlbnRlJyxcclxuICBdO1xyXG5cclxuICBwcml2YXRlIGJ1aWxkSGludFRleHQoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHBpY2sgPSA8VD4oYXJyOiBUW10pOiBUID0+IGFycltNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBhcnIubGVuZ3RoKV07XHJcbiAgICBjb25zdCBwYWxldHRlID0gcGljayhFcXBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29tcG9uZW50LkhJTlRfUEFMRVRURVMpO1xyXG4gICAgY29uc3Qgc3R5bGUgPSBwaWNrKEVxcER5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb21wb25lbnQuSElOVF9TVFlMRVMpO1xyXG4gICAgY29uc3QgYWRqMSA9IHBpY2soRXFwRHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvckNvbXBvbmVudC5ISU5UX0FESkVDVElWRVMpO1xyXG4gICAgY29uc3QgdXNlVHdvID0gTWF0aC5yYW5kb20oKSA8IDAuNTtcclxuICAgIGNvbnN0IGFkajIgPSB1c2VUd28gPyBwaWNrKEVxcER5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb21wb25lbnQuSElOVF9BREpFQ1RJVkVTLmZpbHRlcihhID0+IGEgIT09IGFkajEpKSA6IG51bGw7XHJcbiAgICBjb25zdCBhZGpUZXh0ID0gYWRqMiA/IGAke2FkajF9IGUgJHthZGoyfWAgOiBhZGoxO1xyXG4gICAgcmV0dXJuIGBQYWxldHRlICR7cGFsZXR0ZX0sIHN0aWxlICR7c3R5bGV9LCAke2FkalRleHR9YDtcclxuICB9XHJcblxyXG4gIHJhbmRvbWl6ZUhpbnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZvcm1HcmFwaGljU3VnZ2VzdEhpbnQgPSB0aGlzLmJ1aWxkSGludFRleHQoKTtcclxuICB9XHJcblxyXG4gIHJhbmRvbWl6ZVZlSGludCgpOiB2b2lkIHtcclxuICAgIHRoaXMudmVHcmFwaGljSGludCA9IHRoaXMuYnVpbGRIaW50VGV4dCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZFJhbmRvbUdyYXBoaWNIaW50KCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBwaWNrID0gPFQ+KGFycjogVFtdKTogVCA9PiBhcnJbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYXJyLmxlbmd0aCldO1xyXG4gICAgY29uc3QgcmFkaXVzID0gWydib3JkZXItcmFkaXVzIHBpY2NvbG8gKDItNHB4KScsICdib3JkZXItcmFkaXVzIG1lZGlvICg4LTEwcHgpJywgJ2JvcmRlci1yYWRpdXMgZ3JhbmRlICgxNi0yMHB4KScsICdib3JkZXItcmFkaXVzIHBpbGxvbGEgKDk5OTlweCknXTtcclxuICAgIHJldHVybiBgQ0FTVUFMRTogcGFsZXR0ZSBcIiR7cGljayhFcXBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29tcG9uZW50LkhJTlRfUEFMRVRURVMpfVwiLCBzdGlsZSBcIiR7cGljayhFcXBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29tcG9uZW50LkhJTlRfU1RZTEVTKX1cIiwgJHtwaWNrKHJhZGl1cyl9LiBJZ25vcmEgbGEgdGFiZWxsYSBwcmVzZXQgc2V0dG9yaWFsaSBlIGNyZWEgdW5hIGdyYWZpY2Egb3JpZ2luYWxlIGUgaW1wcmV2ZWRpYmlsZS5gO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWZyZXNoUHJldmlldygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmZvcm1Db21wbGV0ZWQpIHtcclxuICAgICAgdGhpcy5mb3JtQ29tcGxldGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucHJldmlld0Zvcm0gPSBudWxsO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+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/LlNwZWVjaFRvR3JhcGhpY3NFbmRQb2ludFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tZm9ybS1ncmFwaGljLXN1Z2dlc3RcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtR3JhcGhpY1N1Z2dlc3RMb2FkaW5nXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRm9ybUdyYXBoaWNTdWdnZXN0SW5wdXQoKVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtc3Bpbm5lciAqbmdJZj1cImZvcm1HcmFwaGljU3VnZ2VzdExvYWRpbmdcIiBkaWFtZXRlcj1cIjE0XCJcclxuICAgICAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlO21hcmdpbi1yaWdodDo0cHhcIj48L21hdC1zcGlubmVyPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIiFmb3JtR3JhcGhpY1N1Z2dlc3RMb2FkaW5nXCI+cGFsZXR0ZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAge3sgZm9ybUdyYXBoaWNTdWdnZXN0TG9hZGluZyA/ICdFbGFib3JhemlvbmUuLi4nIDogJ1N1Z2dlcmlzY2kgR3JhZmljYSBDb21wbGV0YScgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWhpbnQtaW5wdXQtZ3JvdXBcIiAqbmdJZj1cInNob3dGb3JtR3JhcGhpY1N1Z2dlc3RJbnB1dCAmJiAhZm9ybUdyYXBoaWNTdWdnZXN0TG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWdyYXBoaWMtc2NvcGUtc2VsZWN0XCIgWyhuZ01vZGVsKV09XCJmb3JtR3JhcGhpY1Njb3BlXCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiPlxyXG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFsbFwiPlR1dHRvPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibWFpblwiPlByaW5jaXBhbGU8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdCBvZiBwcmVzZW50RmllbGRUeXBlT3B0aW9uc1wiIFt2YWx1ZV09XCJvcHQudmFsdWVcIj57eyBvcHQubGFiZWwgfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1oaW50LXJhbmRvbWl6ZVwiIChjbGljayk9XCJyYW5kb21pemVIaW50KClcIiBtYXRUb29sdGlwPVwiU3VnZ2VyaW1lbnRvIGNhc3VhbGVcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj50aXBzX2FuZF91cGRhdGVzPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tZ3JhcGhpYy1oaW50LWlucHV0XCIgWyhuZ01vZGVsKV09XCJmb3JtR3JhcGhpY1N1Z2dlc3RIaW50XCJcclxuICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlcy4gdG9uaSBkaSBibHUgc2N1cm8sIHN0aWxlIHByb2Zlc3Npb25hbGUsIHNmb25kbyBzZnVtYXRvLi4uXCIgLz5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1mb3JtLWdyYXBoaWMtc2VuZFwiIChjbGljayk9XCJvbkZvcm1HcmFwaGljU3VnZ2VzdCgpXCJcclxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJBcHBsaWNhIHN1Z2dlcmltZW50byBncmFmaWNvIGFsIGZvcm1cIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5hdXRvX2ZpeF9oaWdoPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxociBjbGFzcz1cImdyYWZpY2EtYWktc2VwYXJhdG9yXCIgLz5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtc3RhcnQgZ3JhZmljYS1yb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJncmFmaWNhLWZpZWxkLWxhYmVsXCI+SW1tYWdpbmUgZGkgc2ZvbmRvPC9wPlxyXG4gICAgICAgICAgICAgIDxlcXAtYXR0YWNobWVudHMgW2F0dGFjaG1lbnRzTGlzdF09XCJiZ0F0dGFjaG1lbnRMaXN0XCIgW3Nob3dNYXRDYXJkXT1cImZhbHNlXCIgW2FsbG93T25seUltYWdlc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIFtpc0Rpc2FibGVkXT1cImZhbHNlXCIgW3Nob3dJbmxpbmVQcmV2aWV3XT1cInRydWVcIiBbbXVsdGlwbGVBdHRhY2htZW50XT1cImZhbHNlXCIgW3Nob3dIZWFkZXJdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgW2FsbG93ZWRUeXBlc109XCJbQXR0YWNobWVudFR5cGUuRklMRV1cIiAobG9jYWxFZGl0ZWRBdHRhY2htZW50cyk9XCJvbkJnSW1hZ2VDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAob25EZWxldGVBdHRhY2htZW50KT1cIm9uQmdJbWFnZURlbGV0ZSgpXCI+XHJcbiAgICAgICAgICAgICAgPC9lcXAtYXR0YWNobWVudHM+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ3LTEwMFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkNTUyBQcmluY2lwYWxlPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmb3JtLlRoZW1lQ1NTXCIgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcclxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlcy4gbWF4LXdpZHRoOiA4MDBweDsgcGFkZGluZzogMTZweDsgYmFja2dyb3VuZDogI2Y1ZjVmNTtcIiByb3dzPVwiNVwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInctMTAwXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+Q1NTIFRpdG9sbzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIG1hdElucHV0IFsobmdNb2RlbCldPVwiZm9ybS5UaXRsZUNTU1wiXHJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInByZXZpZXdGb3JtICYmIChwcmV2aWV3Rm9ybS5UaXRsZUNTUyA9ICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxyXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImVzLiBmb250LXNpemU6IDJyZW07IGZvbnQtd2VpZ2h0OiA3MDA7IGNvbG9yOiAjZmZmO1wiIHJvd3M9XCI1XCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgICAgPC9tYXQtYWNjb3JkaW9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGhyIC8+XHJcblxyXG4gICAgPGRpdiBbc3R5bGVdPVwicHJldmlld0JnU3R5bGVcIj5cclxuICAgICAgPGRpdiBbc3R5bGVdPVwicHJldmlld1RoZW1lU3R5bGVcIj5cclxuICAgICAgICA8YWRkLWZvcm0tcmVjb3JkICpuZ0lmPVwicHJldmlld0Zvcm0gJiYgZm9ybUNvbXBsZXRlZFwiIFtmb3JtXT1cInByZXZpZXdGb3JtXCIgW3VzZXJJRF09XCJVc2VySURcIiBbb3JnYUlEXT1cIm9yZ2FJRFwiXHJcbiAgICAgICAgICBbZm9ybXVsYU9iamVjdF09XCJmb3JtdWxhT2JqZWN0XCIgW2NvbmZpZ3VyYXRpb25zXT1cInZpZXdDb25maWdcIiBbc2hvd0FsbEZpZWxkc109XCJzaG93QWxsRmllbGRzXCJcclxuICAgICAgICAgIFtRdWVyeUVkaXRvckNvbXBvbmVudF09XCJRdWVyeUVkaXRvckNvbXBvbmVudFwiIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCJcclxuICAgICAgICAgIFt2aXN1YWxFZGl0b3JNb2RlXT1cInZpc3VhbEVkaXRvckFjdGl2ZVwiXHJcbiAgICAgICAgICBbdmVTd2FwRmllbGRDb2RlXT1cInZlU3dhcEZpZWxkPy5MYWJlbCA/PyBudWxsXCJcclxuICAgICAgICAgICh2ZUZpZWxkQ2xpY2spPVwib25WZUZpZWxkQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICAob3V0KT1cIm9uRXh0ZXJuYWxDb21wb25lbnRPdXQoJGV2ZW50KVwiIChmaXJlVHJpZ2dlcik9XCJvbkZpcmVUcmlnZ2VyKCRldmVudClcIiBbaW5Db25maWddPVwidHJ1ZVwiPlxyXG4gICAgICAgIDwvYWRkLWZvcm0tcmVjb3JkPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtdC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGJ1dHRvbi1uZXh0RGl2XCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJtci0yIGJ1dHRvbi1leGl0XCIgbWF0LXJhaXNlZC1idXR0b24gbWF0U3RlcHBlclByZXZpb3VzIChjbGljayk9XCJzZXRGb3JtU3RhdHVzKGZhbHNlKVwiPlxyXG4gICAgICAgIFByZWNlZGVudGVcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24tbmV4dFwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJzYXZlRm9ybSgpXCI+XHJcbiAgICAgICAgU2FsdmEgZm9ybVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbWF0LXN0ZXA+XHJcbiAgPCEtLSNlbmRyZWdpb24gVklTVUFMSVpaQVpJT05FIEZPUk0gQ1JFQVRBIC0tPlxyXG5cclxuPC9tYXQtaG9yaXpvbnRhbC1zdGVwcGVyPlxyXG5cclxuPCEtLSBESUFMT0cgQUdHSVVOVEEvTU9ESUZJQ0EgQ0FNUE8gLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZGlhbG9nRmllbGQ+XHJcbiAgPGVxcC1keW5hbWljLW1vZHVsZS1hZGQtZm9ybS1maWVsZCBbZm9ybV09XCJmb3JtXCIgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gICAgW2ZpZWxkXT1cInNlbGVjdGVkRmllbGRcIiBbZm9ybXVsYU9iamVjdF09XCJmb3JtdWxhT2JqZWN0XCIgW2luZGV4RmllbGRdPVwiaW5kZXhTZWxlY3RlZEZpZWxkXCJcclxuICAgIFthdmFpbGFibGVGaWVsZHNdPVwiZm9ybS5GaWVsZHNcIiBbY29udGVzdHVhbGl6YXRpb25dPVwiY29udGVzdHVhbGl6YXRpb25cIlxyXG4gICAgW1F1ZXJ5RWRpdG9yQ29tcG9uZW50XT1cIlF1ZXJ5RWRpdG9yQ29tcG9uZW50XCIgW2ZpZWxkc0V4dHJhQ29uZmlnXT1cImZpZWxkc0V4dHJhQ29uZmlnXCJcclxuICAgIFthY3Rpb25CdXR0b25zXT1cImFjdGlvbkJ1dHRvbnNcIiBbYWlGaWVsZFN1Z2dlc3RMb2FkaW5nXT1cImFpRmllbGRTdWdnZXN0TG9hZGluZ1wiXHJcbiAgICBbZm9ybUZpZWxkc0dyb3Vwc109XCJcclxuICAgICAgZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2VcclxuICAgICAgPyBmb3JtLkZvcm1GaWVsZHNHcm91cHNcclxuICAgICAgOiBudWxsXHJcbiAgICAgIFwiXHJcbiAgICAob3BlbkFpRWRpdEZvckZpZWxkRXZlbnQpPVwib25BaUVkaXRGb3JGaWVsZCgkZXZlbnQpXCJcclxuICAgIChvcGVuQWlHcmFwaGljU3VnZ2VzdEV2ZW50KT1cIm9uQWlHcmFwaGljU3VnZ2VzdCgkZXZlbnQpXCJcclxuICAgIChzYXZlRmllbGRFdmVudCk9XCJvblNhdmVGaWVsZCgkZXZlbnQpXCIgKG91dCk9XCJvbkV4dGVybmFsQ29tcG9uZW50T3V0KCRldmVudClcIj5cclxuICA8L2VxcC1keW5hbWljLW1vZHVsZS1hZGQtZm9ybS1maWVsZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gVEVNUExBVEUgUEVSIFZJU1VBTElaWkFSRSBMQSBDT0xPTk5BIERFTExBIFNFWklPTkUgTkVMTEEgVEFCRUxMQSBERUkgRklFTERTIC0tPlxyXG48bmctdGVtcGxhdGUgI2ZpZWxkU2VjdGlvbkNvbHVtblRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIj5cclxuICA8ZXFwLXNlbGVjdCBbYXJyYXlEYXRhXT1cImZvcm0uRm9ybUZpZWxkc0dyb3Vwc1wiIFsobmdNb2RlbElucHV0KV09XCJyb3cuRmllbGRHcm91cFwiIFthcnJheUtleVByb3BlcnR5XT1cIidOYW1lJ1wiXHJcbiAgICBbYXJyYXlWYWx1ZVByb3BlcnR5XT1cIidOYW1lJ1wiIHBsYWNlaG9sZGVyPVwiU2V6aW9uZVwiIFtpc1JlcXVpcmVkXT1cInRydWVcIiBbaW5jbHVkZUZ1bGxPYmplY3RdPVwiZmFsc2VcIj5cclxuICA8L2VxcC1zZWxlY3Q+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIERJQUxPRyBQRVIgQUdHSVVOR0VSRS9NT0RJRklDQVJFIFVOQSBBQ1RJT04gU1VJIFJFQ09SRCBERUxMQSBGT1JNIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ0FjdGlvbk9uUmVjb3JkPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkIHRoaXJkLW1vZGFsXCIgc3R5bGU9XCJtYXgtaGVpZ2h0OiA3MHZoICFpbXBvcnRhbnQ7IG92ZXJmbG93LXg6IGhpZGRlbjsgb3ZlcmZsb3cteTogYXV0b1wiPlxyXG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJhY3Rpb25PblJlY29yZEZvcm1Hcm91cFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93IHRpdGxlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci10aXRsZS1zdGFuZGFyZFwiPlxyXG4gICAgICAgICAge3tcclxuICAgICAgICAgIGluZGV4U2VsZWN0ZWRBY3Rpb24gIT0gbnVsbCAmJiBpbmRleFNlbGVjdGVkQWN0aW9uID49IDBcclxuICAgICAgICAgID8gXCJNb2RpZmljYVwiXHJcbiAgICAgICAgICA6IFwiQWdnaXVuZ2lcIlxyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIGF6aW9uZSBzdWwgcmVjb3JkXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yXCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPiBOb21lIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiTmFtZVwiIHJlcXVpcmVkIG1hdElucHV0IFsobmdNb2RlbCldPVwic2VsZWN0ZWRBY3Rpb24uTmFtZVwiIC8+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbD4gSWNvbmEgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJJY29uXCIgcmVxdWlyZWQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEFjdGlvbi5JY29uXCIgLz5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbXQtMlwiPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbD5BemlvbmUgKEphdmFzY3JpcHQpPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCBbcm93c109XCIzXCIgZm9ybUNvbnRyb2xOYW1lPVwiQWN0aW9uXCIgcmVxdWlyZWQgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEFjdGlvbi5BY3Rpb25cIlxyXG4gICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYWN0aW9uQXV0b2NvbXBsZXRlXCIgKGtleXVwKT1cInNldEFjdGlvbkF1dG9jb21wbGV0ZU9wdGlvbnMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgKGZvY3VzKT1cInNldEFjdGlvbkF1dG9jb21wbGV0ZU9wdGlvbnMobnVsbClcIiBzdHlsZT1cIlxyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgbGlnaHRncmF5ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgICAgXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI2FjdGlvbkF1dG9jb21wbGV0ZT1cIm1hdEF1dG9jb21wbGV0ZVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgYWN0aW9uQXV0b2NvbXBsZXRlT3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgbXQtMiBtYi0xXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbnNGb3JtXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIG1hdC1yYWlzZWQtYnV0dG9uIGNhbmNlbFwiIChjbGljayk9XCJjbG9zZURpYWxvZ0FjdGlvbk9uUmVjb3JkKClcIiB0eXBlPVwiYnV0dG9uXCI+XHJcbiAgICAgICAgICAgIEFubnVsbGFcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1yLTIgc2F2ZVwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJzYXZlQWN0aW9uT25SZWNvcmQoKVwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhY3Rpb25PblJlY29yZEZvcm1Hcm91cC5pbnZhbGlkXCIgdHlwZT1cImJ1dHRvblwiPlxyXG4gICAgICAgICAgICBTYWx2YVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9mb3JtPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBESUFMT0cgUEVSIEFHR0lVTkdFUkUvTU9ESUZJQ0FSRSBVTiBCT1RUT05FIEFaSU9ORSAtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dBY3Rpb25CdXR0b24+XHJcbiAgPGFjdGlvbi1idXR0b24tY3JlYXRvciBbZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiIFtmb3JtXT1cImZvcm1cIiBbZm9ybXVsYXNdPVwiYWN0aW9uQnV0dG9uc1wiXHJcbiAgICBbYWN0aW9uQnV0dG9uXT1cInNlbGVjdGVkQWN0aW9uQnV0dG9uXCIgKG9uU2F2ZVJlY29yZCk9XCJzYXZlQWN0aW9uQnV0dG9ucygkZXZlbnQpXCI+PC9hY3Rpb24tYnV0dG9uLWNyZWF0b3I+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIFRFTVBMQVRFIFBFUiBDT05GSUdVUkFSRSBMRSBGT1JNIERJIERFVFRBR0xJTyAtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dJbm5lckZvcm0+XHJcbiAgPCEtLSBbZm9ybV09XCJzZWxlY3RlZElubmVyRm9ybVwiXHJcbiAgICBbaW5uZXJGb3JtTWFuYWdtZW50XT1cInRydWVcIlxyXG4gICAgW2lubmVyRm9ybVJlZl09XCJkaWFsb2dJbm5lckZvcm1SZWZcIiAtLT5cclxuICA8ZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvciBbY29uZmlndXJhdGlvbnNdPVwiaW5uZXJGb3JtQ29uZmlnXCIgKHNhdmVGb3JtRXZlbnQpPVwib25TYXZlT3JFeGl0SW5uZXJGb3JtKCRldmVudClcIj5cclxuICA8L2VxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3I+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIFRFTVBMQVRFIFBFUiBJTVBPUlQgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZGlhbG9nSW1wb3J0PlxyXG4gIDxtYXQtY2FyZCBjbGFzcz1cImltcG9ydERpYWxvZ1wiPlxyXG4gICAgPG1hdC1jYXJkLWhlYWRlciBjbGFzcz1cInAtMiBqdXN0aWZ5LWNvbnRlbnQtYXJvdW5kXCI+XHJcbiAgICAgIDxtYXQtY2FyZC10aXRsZT5cclxuICAgICAgICBJbXBvcnRcclxuICAgICAgPC9tYXQtY2FyZC10aXRsZT5cclxuICAgIDwvbWF0LWNhcmQtaGVhZGVyPlxyXG4gICAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJwLTJcIj5cclxuICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgY2xhc3M9XCJpbnB1dC1maWxlLWJ0biBwYi0yXCIgKGNoYW5nZSk9XCJvbkltcG9ydCgkZXZlbnQpXCIgLz5cclxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuICAgIDxtYXQtY2FyZC1mb290ZXIgY2xhc3M9XCJwLTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tY2xlYXIgYnV0dG9uLWJhY2sgbWUtMlwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwiZGlzYWJsZWRcIiAoY2xpY2spPVwiY2xvc2VJbXBvcnQoKVwiPlxyXG4gICAgICAgIEFubnVsbGFcclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L21hdC1jYXJkLWZvb3Rlcj5cclxuICA8L21hdC1jYXJkPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBESUFMT0cgUEVSIEFHR0lVTkdFUkUvTU9ESUZJQ0FSRSBJIFRSSUdHRVJTIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ1RyaWdnZXJzPlxyXG4gIDx0cmlnZ2VyLWNyZWF0b3IgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIiBbZm9ybV09XCJmb3JtXCIgW2Zvcm11bGFzXT1cInRyaWdnZXJzXCJcclxuICAgIFt0cmlnZ2VyXT1cInNlbGVjdGVkVHJpZ2dlclwiIChvblNhdmVSZWNvcmQpPVwic2F2ZVRyaWdnZXIoJGV2ZW50KVwiPjwvdHJpZ2dlci1jcmVhdG9yPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBESUFMT0cgTU9ESUZJQ0EgQ09OIEFJIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ0FpRWRpdD5cclxuICA8bWF0LWNhcmQgc3R5bGU9XCJtaW4td2lkdGg6IDQ4MHB4XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYWktZGlhbG9nLWhlYWRlclwiPlxyXG4gICAgICA8bWF0LWljb24+YXV0b19maXhfaGlnaDwvbWF0LWljb24+XHJcbiAgICAgIDxzcGFuPnt7IGlzTmV3Rm9ybSA/ICdDcmVhIGZvcm0gY29uIEFJJyA6ICdNb2RpZmljYSBmb3JtIGNvbiBBSScgfX08L3NwYW4+XHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJhaVByb21wdEhpc3RvcnkubGVuZ3RoID4gMFwiIG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBjbGFzcz1cImFpLWhpc3RvcnktdG9nZ2xlLWJ0blwiXHJcbiAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzaG93QWlQcm9tcHRIaXN0b3J5XCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJzaG93QWlQcm9tcHRIaXN0b3J5ID8gJ05hc2NvbmRpIHN0b3JpY28gcmljaGllc3RlJyA6ICdNb3N0cmEgc3RvcmljbyByaWNoaWVzdGUnXCJcclxuICAgICAgICAoY2xpY2spPVwic2hvd0FpUHJvbXB0SGlzdG9yeSA9ICFzaG93QWlQcm9tcHRIaXN0b3J5XCI+XHJcbiAgICAgICAgPG1hdC1pY29uPnt7IHNob3dBaVByb21wdEhpc3RvcnkgPyAnaGlzdG9yeV90b2dnbGVfb2ZmJyA6ICdoaXN0b3J5JyB9fTwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImFpLWRpYWxvZy1ib2R5LWZsZXhcIj5cclxuICAgICAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJwLTMgYWktZGlhbG9nLW1haW4tY29udGVudFwiPlxyXG4gICAgICAgIDwhLS0gUHJvbXB0IHRleHRhcmVhICsgbWljcm9mb25vIC0tPlxyXG4gICAgICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmVcIj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIHN0eWxlPVwid2lkdGg6IDEwMCVcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBpc05ld0Zvcm0gPyAnRGVzY3JpdmkgaWwgZm9ybSBkYSBjcmVhcmUnIDogJ0Rlc2NyaXZpIGxhIG1vZGlmaWNhIGRhIGFwcG9ydGFyZScgfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPHRleHRhcmVhIG1hdElucHV0IFsobmdNb2RlbCldPVwiYWlFZGl0UHJvbXB0XCIgcm93cz1cIjVcIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJpc05ld0Zvcm0gPyAnRXM6IGNyZWEgdW4gZm9ybSBwZXIgbGEgcmVnaXN0cmF6aW9uZSBwYXppZW50aSBjb24gY2FtcGkgbm9tZSwgY29nbm9tZSwgZGF0YSBkaSBuYXNjaXRhIGUgY29kaWNlIGZpc2NhbGUuLi4nIDogJ0VzOiBhZ2dpdW5naSB1biBjYW1wbyBkYXRhIGRpIG5hc2NpdGEsIHJpbXVvdmkgaWwgY2FtcG8gZW1haWwsIHJlbmRpIG9iYmxpZ2F0b3JpbyBpbCBjYW1wbyB0ZWxlZm9uby4uLidcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cInRydWVcIiBTcGVlY2hUb1RleHQgWyhiaW5kZWRUZXh0KV09XCJhaUVkaXRQcm9tcHRcIlxyXG4gICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgcmlnaHQ6IDEycHg7IHRvcDogMTJweDsgY3Vyc29yOiBwb2ludGVyOyBjb2xvcjogIzY2NlwiXHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImlzTmV3Rm9ybSA/ICdQYXJsYSBwZXIgZGVzY3JpdmVyZSBpbCBmb3JtJyA6ICdQYXJsYSBwZXIgZGV0dGFyZSBsYSBtb2RpZmljYSdcIj5rZXlib2FyZF92b2ljZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gQWxsZWdhdGkgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTIgbXQtMVwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJhaUVkaXRGaWxlSW5wdXQuY2xpY2soKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+YXR0YWNoX2ZpbGU8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiA2cHhcIj5BZ2dpdW5naSBhbGxlZ2F0aSAoUERGIG8gaW1tYWdpbmkpPC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8aW5wdXQgI2FpRWRpdEZpbGVJbnB1dCB0eXBlPVwiZmlsZVwiIG11bHRpcGxlIGFjY2VwdD1cImltYWdlLyosYXBwbGljYXRpb24vcGRmXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lXCJcclxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkFpRWRpdEZpbGVDaGFuZ2UoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPHVsICpuZ0lmPVwiYWlFZGl0QXR0YWNobWVudHMubGVuZ3RoID4gMFwiIHN0eWxlPVwibGlzdC1zdHlsZTogbm9uZTsgcGFkZGluZzogMDsgbWFyZ2luOiAwIDAgMTJweFwiPlxyXG4gICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBhdHQgb2YgYWlFZGl0QXR0YWNobWVudHM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogNnB4OyBtYXJnaW4tYm90dG9tOiA0cHhcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4XCI+aW5zZXJ0X2RyaXZlX2ZpbGU8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8c3Bhbj57eyBhdHQuZmlsZU5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT1cImZvbnQtc2l6ZTogMThweDsgY3Vyc29yOiBwb2ludGVyOyBjb2xvcjogIzk5OVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUFpRWRpdEF0dGFjaG1lbnQoaSlcIj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcblxyXG4gICAgICAgIDwhLS0gQXV0b3NhdmUgLS0+XHJcbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJhaUVkaXRBdXRvc2F2ZVwiIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAge3sgaXNOZXdGb3JtID8gJ1NhbHZhIGF1dG9tYXRpY2FtZW50ZSBkb3BvIGxhIGNyZWF6aW9uZScgOiAnU2FsdmEgYXV0b21hdGljYW1lbnRlIGRvcG8gbGEgbW9kaWZpY2EnIH19XHJcbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG5cclxuICAgICAgICA8IS0tIFN0aW1hIGNvc3RvIEFJIChhZ2dpb3JuYXRhIGluIHRlbXBvIHJlYWxlIGFsIHZhcmlhcmUgZGVsIHByb21wdCBlIGRlZ2xpIGFsbGVnYXRpKSAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiPlxyXG4gICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZFwiPlxyXG4gICAgICAgICAgICA8Yj5Db3N0byBzdGltYXRvIHVzbyBBSTwvYj48YnIgLz5cclxuICAgICAgICAgICAgUHJpbW8gdXNvOiBhbCBtYXNzaW1vIHt7IGZvcm1hdEFpRWRpdENvc3QoYWlFZGl0Q29zdEZpcnN0RXVyKSB9fSBFdXJvPGJyIC8+XHJcbiAgICAgICAgICAgIFVzaSBzdWNjZXNzaXZpOiBhbCBtYXNzaW1vIHt7IGZvcm1hdEFpRWRpdENvc3QoYWlFZGl0Q29zdFN1YnNlcXVlbnRFdXIpIH19IEV1cm9cclxuICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuXHJcbiAgICAgIDwhLS0gUGFubmVsbG8gc3RvcmljbyByaWNoaWVzdGUgLS0+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzaG93QWlQcm9tcHRIaXN0b3J5ICYmIGFpUHJvbXB0SGlzdG9yeS5sZW5ndGggPiAwXCIgY2xhc3M9XCJhaS1oaXN0b3J5LXBhbmVsXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFpLWhpc3RvcnktcGFuZWwtdGl0bGVcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT1cImZvbnQtc2l6ZTogMTZweDsgd2lkdGg6IDE2cHg7IGhlaWdodDogMTZweFwiPmhpc3Rvcnk8L21hdC1pY29uPlxyXG4gICAgICAgICAgPHNwYW4+U3RvcmljbyByaWNoaWVzdGU8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFpLWhpc3RvcnktbGlzdFwiPlxyXG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcHJvbXB0IG9mIGFpUHJvbXB0SGlzdG9yeTsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwiYWktaGlzdG9yeS1pdGVtXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktaGlzdG9yeS1pbmRleFwiPnt7IGkgKyAxIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWhpc3RvcnktdGV4dFwiPnt7IHByb21wdCB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxtYXQtY2FyZC1mb290ZXIgY2xhc3M9XCJwLTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIiBzdHlsZT1cImdhcDogOHB4XCI+XHJcbiAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gdHlwZT1cImJ1dHRvblwiIFtkaXNhYmxlZF09XCJhaUVkaXRMb2FkaW5nXCIgKGNsaWNrKT1cImNsb3NlQWlFZGl0RGlhbG9nKClcIj5cclxuICAgICAgICBBbm51bGxhXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIiBbZGlzYWJsZWRdPVwiIWFpRWRpdFByb21wdD8udHJpbSgpIHx8IGFpRWRpdExvYWRpbmdcIlxyXG4gICAgICAgIChjbGljayk9XCJzZW5kQWlFZGl0KClcIj5cclxuICAgICAgICA8bWF0LXNwaW5uZXIgKm5nSWY9XCJhaUVkaXRMb2FkaW5nXCIgZGlhbWV0ZXI9XCIxOFwiXHJcbiAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IGlubGluZS1ibG9jazsgbWFyZ2luLXJpZ2h0OiA2cHg7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGVcIj48L21hdC1zcGlubmVyPlxyXG4gICAgICAgIDxzcGFuPnt7IGFpRWRpdExvYWRpbmcgPyAnRWxhYm9yYXppb25lLi4uJyA6IChpc05ld0Zvcm0gPyAnQ3JlYSBjb24gQUknIDogJ01vZGlmaWNhIGNvbiBBSScpIH19PC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbWF0LWNhcmQtZm9vdGVyPlxyXG4gIDwvbWF0LWNhcmQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIFZJU1VBTCBFRElUT1Ig4oCUIFRvb2x0aXAgYXppb25pIGNhbXBvIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ1ZlVG9vbHRpcD5cclxuICA8ZGl2IGNsYXNzPVwidmUtdG9vbHRpcC1wYW5lbFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInZlLXRvb2x0aXAtaGVhZGVyXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInZlLXRvb2x0aXAtaWNvblwiPmVkaXRfc3F1YXJlPC9tYXQtaWNvbj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJ2ZS10b29sdGlwLXRpdGxlXCI+e3sgdmVTZWxlY3RlZEZpZWxkPy5EZXNjcmlwdGlvbiB9fTwvc3Bhbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImRpYWxvZ1ZlVG9vbHRpcFJlZj8uY2xvc2UoKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF2ZVNob3dHcmFwaGljSW5wdXRcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJ2ZUVkaXRGaWVsZCgpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uPnNldHRpbmdzPC9tYXQtaWNvbj5cclxuICAgICAgICBNb2RpZmljYSBjYW1wb1xyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtICpuZ0lmPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uPy5Gb3Jtcz8uU3BlZWNoVG9Gb3JtRWRpdEVuZFBvaW50XCIgKGNsaWNrKT1cInZlQWlFZGl0KClcIj5cclxuICAgICAgICA8bWF0LWljb24+YXV0b19maXhfaGlnaDwvbWF0LWljb24+XHJcbiAgICAgICAgTW9kaWZpY2EgY29uIElBXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKm5nSWY9XCJlbmRQb2ludENvbmZpZ3VyYXRpb24/LkZvcm1zPy5TcGVlY2hUb0Zvcm1FZGl0RW5kUG9pbnRcIiAoY2xpY2spPVwidmVTaG93R3JhcGhpY0lucHV0ID0gdHJ1ZVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5wYWxldHRlPC9tYXQtaWNvbj5cclxuICAgICAgICBTdWdnZXJpc2NpIEdyYWZpY2FcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwidmVPcGVuUmVvcmRlcigpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj5cclxuICAgICAgICBSaW9yZGluYVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJ2ZVN0YXJ0U3dhcCgpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uPnN3YXBfaG9yaXo8L21hdC1pY29uPlxyXG4gICAgICAgIFNjYW1iaWFcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInZlRGVsZXRlRmllbGQoKVwiIHN0eWxlPVwiY29sb3I6ICNlNTM5MzU7XCI+XHJcbiAgICAgICAgPG1hdC1pY29uIHN0eWxlPVwiY29sb3I6ICNlNTM5MzU7XCI+ZGVsZXRlPC9tYXQtaWNvbj5cclxuICAgICAgICBFbGltaW5hIGNhbXBvXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInZlLXRvb2x0aXAtZ3JhcGhpY1wiICpuZ0lmPVwidmVTaG93R3JhcGhpY0lucHV0XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ2ZS10b29sdGlwLWdyYXBoaWMtaGVhZGVyXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInZlU2hvd0dyYXBoaWNJbnB1dCA9IGZhbHNlOyB2ZUFwcGx5VG9BbGxPZlR5cGUgPSBmYWxzZVwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmFycm93X2JhY2s8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxzcGFuIHN0eWxlPVwiZmxleDoxXCI+R3JhZmljYSBwZXIgXCJ7eyB2ZVNlbGVjdGVkRmllbGQ/LkxhYmVsIH19XCI8L3NwYW4+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4taGludC1yYW5kb21pemVcIiAoY2xpY2spPVwicmFuZG9taXplVmVIaW50KClcIiBtYXRUb29sdGlwPVwiU3VnZ2VyaW1lbnRvIGNhc3VhbGVcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbj50aXBzX2FuZF91cGRhdGVzPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy0xMDBcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPlN1Z2dlcmltZW50byBncmFmaWNvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPHRleHRhcmVhIG1hdElucHV0IFsobmdNb2RlbCldPVwidmVHcmFwaGljSGludFwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxyXG4gICAgICAgICAgcm93cz1cIjNcIiBwbGFjZWhvbGRlcj1cImVzLiBib3JkbyBibHUsIHNmb25kbyBzZW1pLXRyYXNwYXJlbnRlLCBldGljaGV0dGEgaW4gZ3Jhc3NldHRvLi4uXCI+PC90ZXh0YXJlYT5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPGRpdiBjbGFzcz1cInZlLWFwcGx5LWFsbC1yb3dcIj5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cInZlQXBwbHlUb0FsbE9mVHlwZVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIiBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgICAgIEFwcGxpY2EgYSB0dXR0aSBpIDxzdHJvbmc+e3sgdmVTZWxlY3RlZEZpZWxkVHlwZU5hbWUgfX08L3N0cm9uZz5cclxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidmUtdG9vbHRpcC1ncmFwaGljLWFjdGlvbnNcIj5cclxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cInZlU2hvd0dyYXBoaWNJbnB1dCA9IGZhbHNlOyB2ZUFwcGx5VG9BbGxPZlR5cGUgPSBmYWxzZVwiPkFubnVsbGE8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJ2ZVNlbmRHcmFwaGljKClcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbj5hdXRvX2ZpeF9oaWdoPC9tYXQtaWNvbj5cclxuICAgICAgICAgIEludmlhXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIFZJU1VBTCBFRElUT1Ig4oCUIFJpb3JkaW5hIGNhbXBpIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ1ZlUmVvcmRlcj5cclxuICA8bWF0LWNhcmQgY2xhc3M9XCJ2ZS1yZW9yZGVyLWNhcmRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ2ZS1yZW9yZGVyLWhlYWRlclwiPlxyXG4gICAgICA8bWF0LWljb24+ZHJhZ19pbmRpY2F0b3I8L21hdC1pY29uPlxyXG4gICAgICA8c3Bhbj5SaW9yZGluYSBjYW1waTwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgIDxkaXYgY2RrRHJvcExpc3QgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJvblZlRHJhZ0Ryb3BSZW9yZGVyKCRldmVudClcIiBjbGFzcz1cInZlLXJlb3JkZXItbGlzdFwiPlxyXG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZpZWxkIG9mIHZlUmVvcmRlckZpZWxkc1wiIGNka0RyYWcgY2xhc3M9XCJ2ZS1yZW9yZGVyLWl0ZW1cIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBjZGtEcmFnSGFuZGxlIGNsYXNzPVwidmUtZHJhZy1oYW5kbGVcIj5kcmFnX2luZGljYXRvcjwvbWF0LWljb24+XHJcbiAgICAgICAgICA8c3Bhbj57eyBmaWVsZC5EZXNjcmlwdGlvbiB9fTwvc3Bhbj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2ZS1kcmFnLXBsYWNlaG9sZGVyXCIgKmNka0RyYWdQbGFjZWhvbGRlcj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICA8bWF0LWNhcmQtZm9vdGVyIGNsYXNzPVwicC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCIgc3R5bGU9XCJnYXA6IDhweFwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cImRpYWxvZ1ZlUmVvcmRlclJlZj8uY2xvc2UoKVwiPkFubnVsbGE8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwidmVBcHBseVJlb3JkZXIoKVwiPk9LPC9idXR0b24+XHJcbiAgICA8L21hdC1jYXJkLWZvb3Rlcj5cclxuICA8L21hdC1jYXJkPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBESUFMT0cgQ09OVEVTVFVBTElaWkFaSU9ORSBEQkdFVFRFUiAtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dDb250ZXN0dWFsaXphdGlvbj5cclxuICA8bWF0LWNhcmQgc3R5bGU9XCJtaW4td2lkdGg6IDQyMHB4XCI+XHJcbiAgICA8bWF0LWNhcmQtaGVhZGVyIGNsYXNzPVwicC0yXCI+XHJcbiAgICAgIDxtYXQtY2FyZC10aXRsZT5Db250ZXN0dWFsaXp6YXppb25lIGRlbCBEQkdldHRlcjwvbWF0LWNhcmQtdGl0bGU+XHJcbiAgICA8L21hdC1jYXJkLWhlYWRlcj5cclxuICAgIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwicC0zXCI+XHJcbiAgICAgIDxlcXAtc2VsZWN0IFthcnJheURhdGFdPVwiY29udGVzdHVhbGl6YXRpb25cIiBbKG5nTW9kZWxJbnB1dCldPVwic2VsZWN0ZWRDb250ZXN0dWFsaXphdGlvblwiXHJcbiAgICAgICAgW2FycmF5S2V5UHJvcGVydHldPVwiJ2VudGl0eVRhYmxlTmFtZSdcIiBbYXJyYXlWYWx1ZVByb3BlcnR5XT1cIidlbnRpdHlUYWJsZU5hbWUnXCJcclxuICAgICAgICAobmdNb2RlbElucHV0Q2hhbmdlKT1cIm9uQ29udGVzdHVhbGl6YXRpb25TZWxlY3QoKVwiIFtwbGFjZWhvbGRlcl09XCInQ29udGVzdHVhbGl6emF6aW9uZSBkZWwgREJHZXR0ZXInXCJcclxuICAgICAgICBbaW5jbHVkZUZ1bGxPYmplY3RdPVwiZmFsc2VcIj48L2VxcC1zZWxlY3Q+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZENvbnRlc3R1YWxpemF0aW9uICE9IG51bGxcIiBjbGFzcz1cIm10LTJcIj5cclxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkQ29udGVzdHVhbGl6YXRpb25WYWx1ZVwiXHJcbiAgICAgICAgICAoY2hhbmdlKT1cIm9uQ29udGVzdHVhbGl6YXRpb25TZWxlY3RWYWx1ZSgpXCI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gICAgPG1hdC1jYXJkLWZvb3RlciBjbGFzcz1cInAtMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiIHN0eWxlPVwiZ2FwOiA4cHhcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZGFuZ2VyXCIgKGNsaWNrKT1cImFwcGx5Q29udGVzdHVhbGl6YXRpb24obnVsbCk7IGNsb3NlQ29udGVzdHVhbGl6YXRpb25EaWFsb2coKVwiPlJpbXVvdmk8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJhcHBseUNvbnRlc3R1YWxpemF0aW9uKGNvbnRlc3R1YWxpemF0aW9uKTsgY2xvc2VDb250ZXN0dWFsaXphdGlvbkRpYWxvZygpXCI+QXBwbGljYTwvYnV0dG9uPlxyXG4gICAgPC9tYXQtY2FyZC1mb290ZXI+XHJcbiAgPC9tYXQtY2FyZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gQUkgRGF0YUdldHRlcjogY2FyaWNhbWVudG8gc2lsZW50IGRlbCBRdWVyeUVkaXRvciBwZXIgcG9wb2xhcmUgRGF0YUdldHRlclZhbHVlIHZpYSBwcm9tcHQgLS0+XHJcbjxkaXYgKm5nSWY9XCJhaURhdGFHZXR0ZXJMb2FkaW5nXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7IHBvc2l0aW9uOmFic29sdXRlOyB3aWR0aDowOyBoZWlnaHQ6MDsgb3ZlcmZsb3c6aGlkZGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgPG5nLXRlbXBsYXRlIFthcHBEeW5hbWljTG9hZGVyXSBbZGF0YV09XCJRdWVyeUVkaXRvckNvbXBvbmVudFwiIChvdXQpPVwib25BaURhdGFHZXR0ZXJPdXQoJGV2ZW50KVwiPjwvbmctdGVtcGxhdGU+XHJcbjwvZGl2PiJdfQ==
|