@eqproject/eqp-dynamic-module 2.10.53 → 2.10.54

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.
@@ -292,6 +292,9 @@ export class AddFormFieldComponent {
292
292
  //#region CAMPO DI TESTO
293
293
  case FieldTypeEnum["Campo di testo"]:
294
294
  this.setAggregation(NotNumberAggregationFunctionEnum, restoreField);
295
+ if (this.field.TextMask != null) {
296
+ this.field.TextMask = Number(this.field.TextMask);
297
+ }
295
298
  if (this.field.Microphone == null) {
296
299
  this.field.Microphone = false;
297
300
  }
@@ -1335,4 +1338,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
1335
1338
  type: ViewChild,
1336
1339
  args: ["dialogQE", { static: true }]
1337
1340
  }] } });
1338
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWZvcm0tZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2FkZC1mb3JtLWZpZWxkL2FkZC1mb3JtLWZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9hZGQtZm9ybS1maWVsZC9hZGQtZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBSUwsa0JBQWtCLEVBSWxCLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFDTCxjQUFjLEdBSWYsTUFBTSw0QkFBNEIsQ0FBQztBQUVwQyxPQUFPLEVBQWdCLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hFLE9BQU8sRUFDTCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLHlCQUF5QixFQUN6QixxQkFBcUIsRUFDckIsYUFBYSxFQUNkLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUVMLHVCQUF1QixFQUN2Qix3QkFBd0IsR0FDekIsTUFBTSw4Q0FBOEMsQ0FBQztBQUN0RCxPQUFPLEVBRUwsb0JBQW9CLEdBQ3JCLE1BQU0sMkNBQTJDLENBQUM7QUFDbkQsT0FBTyxFQUVMLGdCQUFnQixHQUNqQixNQUFNLHdDQUF3QyxDQUFDO0FBRWhELE9BQU8sRUFDTCxvQkFBb0IsR0FFckIsTUFBTSw2Q0FBNkMsQ0FBQztBQUlyRCxPQUFPLEVBQ0wsWUFBWSxHQUViLE1BQU0sd0NBQXdDLENBQUM7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Q0gsd0JBQXdCO3NCQUFqRixTQUFTO3VCQUFDLDBCQUEwQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDUCxlQUFlO3NCQUEvRCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFNTixRQUFRO3NCQUFoRCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtcclxuICBBYnN0cmFjdENvbnRyb2wsXHJcbiAgRm9ybUNvbnRyb2wsXHJcbiAgVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gIFVudHlwZWRGb3JtQ29udHJvbCxcclxuICBVbnR5cGVkRm9ybUdyb3VwLFxyXG4gIFZhbGlkYXRpb25FcnJvcnMsXHJcbiAgVmFsaWRhdG9yRm4sXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7XHJcbiAgQXR0YWNobWVudFR5cGUsXHJcbiAgRXFwQXR0YWNobWVudERpYWxvZ1NlcnZpY2UsXHJcbiAgRXFwQXR0YWNobWVudHNDb21wb25lbnQsXHJcbiAgSUF0dGFjaG1lbnREVE8sXHJcbn0gZnJvbSBcIkBlcXByb2plY3QvZXFwLWF0dGFjaG1lbnRzXCI7XHJcbmltcG9ydCB7IEVudW1IZWxwZXIgfSBmcm9tIFwiQGVxcHJvamVjdC9lcXAtc2VsZWN0XCI7XHJcbmltcG9ydCB7IENvbmZpZ0NvbHVtbiwgVHlwZUNvbHVtbiB9IGZyb20gXCJAZXFwcm9qZWN0L2VxcC10YWJsZVwiO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VGaWVsZCxcclxuICBDb2xTcGFuU2l6ZXNFbnVtLFxyXG4gIERhdGFHZXR0ZXJDYXJkaW5hbGl0eUVudW0sXHJcbiAgRmllbGRJbnZpc2liaWxpdHlFbnVtLFxyXG4gIEZpZWxkVHlwZUVudW1cclxufSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2Jhc2VGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIEF0dGFjaG1lbnRGaWVsZCxcclxuICBBdmFpbGFibGVGaWxlRXh0ZW5zaW9ucyxcclxuICBBdmFpbGFibGVJbWFnZUV4dGVuc2lvbnMsXHJcbn0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvYXR0YWNobWVudEZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7XHJcbiAgQm9vbGVhbkZpZWxkLFxyXG4gIEJvb2xQcmVzZW50YW50aW9FbnVtLFxyXG59IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRzL2Jvb2xlYW5GaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIERhdGVGaWVsZCxcclxuICBEYXRlVGltZVR5cGVFbnVtLFxyXG59IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRzL2RhdGVGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBJbWFnZUZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvaW1hZ2VGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIExpc3RQcmVzZW50YXRpb25FbnVtLFxyXG4gIExpc3RWYWx1ZUZpZWxkLFxyXG59IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRzL2xpc3RWYWx1ZUZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IExvb2t1cEZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvbG9va3VwRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgTnVtZXJpY0ZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvbnVtZXJpY0ZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IFRleHRhcmVhRmllbGQgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy90ZXh0YXJlYUZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7XHJcbiAgVGV4dE1hc2tFbnVtLFxyXG4gIFRleHRGaWVsZCxcclxufSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy90ZXh0RmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgRm9ybUZpZWxkR3JvdXAsIEZvcm0gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbCc7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXNcIjtcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBJbWFnZVNlbGVjdG9yRmllbGQgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9pbWFnZVNlbGVjdG9yRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvZXFwLWR5bmFtaWMtbW9kdWxlLWRpYWxvZy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IExhYmVsRmllbGQgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9sYWJlbEZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IEltYWdlV2l0aE1hcmtlcnNGaWVsZCB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRzL2ltYWdlV2l0aE1hcmtlcnNGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBBdHRhY2htZW50RmllbGRUeXBlRW51bSwgRHluQXR0YWNobWVudCB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZHluQXR0YWNobWVudFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YSwgZXZlbnRPdXQgfSBmcm9tIFwiLi4vLi4vLi4vZGlyZWN0aXZlcy9keW5hbWljLWxvYWRlci9keW5hbWljLWxvYWRlci5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBEYXRhR2V0dGVyVHlwZUVudW0sIERhdGFHZXR0ZXIgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvYmFzZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgUXVlcnlFZGl0b3JNb2RlRW51bSB9IGZyb20gXCIuLi9kYmdldHRlci9kYmdldHRlci5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgTW9kZUVudW0sIFRpbWVUeXBlRW51bSB9IGZyb20gXCJ0bXctcGlja2VyXCI7XHJcbmltcG9ydCB7IEVuZFBvaW50Q29uZmlndXJhdGlvbiwgRW5kUG9pbnREYXRhUGFyYW1zLCBQYXJhbVR5cGVFbnVtIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9lbmRQb2ludENvbmZpZ3VyYXRpb24ubW9kZWxcIjtcclxuaW1wb3J0IHsgQ29udGVzdHVhbGl6YXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2dldHRlci5tb2RlbFwiO1xyXG5pbXBvcnQgeyBDYXBhY2l0b3IgfSBmcm9tICdAY2FwYWNpdG9yL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3Rpb25CdXR0b25GaWVsZCwgS2V5VHlwZVZhbHVlIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvYWN0aW9uQnV0dG9uLm1vZGVsXCI7XHJcbmltcG9ydCB7IEZpZWxkRXh0cmFDb25maWcsIEZpZWxkRXh0cmFWYWx1ZXMgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZmllbGRFeHRyYUNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IE5vdE51bWJlckFnZ3JlZ2F0aW9uRnVuY3Rpb25FbnVtLCBOdW1iZXJBZ2dyZWdhdGlvbkZ1bmN0aW9uRW51bSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9zdGF0aXN0aWMubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiZXFwLWR5bmFtaWMtbW9kdWxlLWFkZC1mb3JtLWZpZWxkXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9hZGQtZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9hZGQtZm9ybS1maWVsZC5jb21wb25lbnQuc2Nzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFkZEZvcm1GaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIGZpZWxkc0V4dHJhQ29uZmlnOiBBcnJheTxGaWVsZEV4dHJhQ29uZmlnPjtcclxuICBASW5wdXQoKSBmb3JtOiBGb3JtO1xyXG4gIEBJbnB1dCgpIGVuZFBvaW50Q29uZmlndXJhdGlvbjogRW5kUG9pbnRDb25maWd1cmF0aW9uO1xyXG4gIEBJbnB1dCgpIGZpZWxkOiBCYXNlRmllbGQgfCBhbnk7XHJcbiAgQElucHV0KCkgaW5kZXhGaWVsZDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGZvcm1GaWVsZHNHcm91cHM6IEFycmF5PEZvcm1GaWVsZEdyb3VwPjtcclxuICAvKiogRWxlbmNvIGRlaSBGaWVsZCBjcmVhdGkgbmVsbGEgZm9ybSwgdXNhdGkgcGVyIHBvcG9sYXJlIGwnYXV0b2NvbXBsZXRlIGRlbGxhIHByb3ByaWV0w6AgRm9ybXVsYS4gKi9cclxuICBASW5wdXQoKSBhdmFpbGFibGVGaWVsZHM6IEFycmF5PEJhc2VGaWVsZD47XHJcbiAgQElucHV0KCkgZmllbGRUeXBlc1RvRXhjbHVkZTogQXJyYXk8RmllbGRUeXBlRW51bT4gPSBbRmllbGRUeXBlRW51bVtcIkZvcm0gZGkgZGV0dGFnbGlvXCJdXTtcclxuICBASW5wdXQoKSBRdWVyeUVkaXRvckNvbXBvbmVudDogRHluYW1pY0xvYWRlckRpcmVjdGl2ZURhdGE7IC8vIEwnaW50ZXJvIGNvbXBvbmVudGUgcXVlcnkgRWRpdG9yXHJcbiAgQElucHV0KCkgY29udGVzdHVhbGl6YXRpb246IEFycmF5PENvbnRlc3R1YWxpemF0aW9uPiA9IG51bGw7XHJcbiAgQElucHV0KCkgYWN0aW9uQnV0dG9uczogYW55O1xyXG4gIEBJbnB1dCgpIGZvcm11bGFPYmplY3Q6IGFueTtcclxuXHJcbiAgQE91dHB1dCgpIG91dDogRXZlbnRFbWl0dGVyPGV2ZW50T3V0PiA9IG5ldyBFdmVudEVtaXR0ZXI8ZXZlbnRPdXQ+KCk7XHJcbiAgQE91dHB1dCgpIHNhdmVGaWVsZEV2ZW50OiBFdmVudEVtaXR0ZXI8e2ZpZWxkOiBCYXNlRmllbGQsIHJlb3BlbjogbnVtYmVyfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHtmaWVsZDogQmFzZUZpZWxkLCByZW9wZW46IG51bWJlcn0+KCk7XHJcblxyXG4gIHJlc2l6ZWRJbWFnZXNIZWlnaHRQeDogbnVtYmVyO1xyXG4gIGZpZWxkRm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG4gIGtleVZhbHVlT2JqZWN0OiB7IGtleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0gPSB7IGtleTogXCJcIiwgdmFsdWU6IFwiXCIgfTtcclxuICBhdmFpbGFibGVDb2xTcGFuU2l6ZXNDb21waWxhemlvbmU6IEFycmF5PENvbFNwYW5TaXplc0VudW0+ID0gW107XHJcbiAgYXZhaWxhYmxlQ29sU3BhblNpemVzUmlzcG9zdGE6IEFycmF5PENvbFNwYW5TaXplc0VudW0+ID0gW107XHJcbiAgZm9ybXVsYUF1dG9jb21wbGV0ZU9wdGlvbnM6IEFycmF5PHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PjtcclxuICBWaXNpYmxlSWZBdXRvY29tcGxldGVPcHRpb25zOiBBcnJheTx7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT47XHJcbiAgQXZhaWxhYmxlRmlsZUV4dGVuc2lvbnMgPSBBdmFpbGFibGVGaWxlRXh0ZW5zaW9ucztcclxuICBBdmFpbGFibGVJbWFnZUV4dGVuc2lvbnMgPSBBdmFpbGFibGVJbWFnZUV4dGVuc2lvbnM7XHJcbiAgZmllbGRJbnZpc2liaWxpdHlFbnVtID0gRmllbGRJbnZpc2liaWxpdHlFbnVtO1xyXG4gIGNvbHVtbktleXM6IEFycmF5PHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT4gPSBuZXcgQXJyYXk8eyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PigpO1xyXG4gIGFnZ3JlZ2F0aW9uRnVuY3Rpb25FbnVtOiBhbnk7XHJcblxyXG4gIC8vI3JlZ2lvbiBUZW1wbGF0ZSBkZWkgdmFyaSBwZXp6aSBkaSBmb3JtIHBlciBsYSBjcmVhemlvbmUgZGkgdW4gY2FtcG8oaW4gYmFzZSBhbCB0aXBvIHNjZWx0bykuXHJcbiAgZmllbGRUeXBlRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJ0ZXh0RmllbGRGb3JtVGVtcGxhdGVcIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICB0ZXh0RmllbGRGb3JtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImxhYmVsRmllbGRGb3JtVGVtcGxhdGVcIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBsYWJlbEZpZWxkRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJidXR0b25GaWVsZEZvcm1UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGJ1dHRvbkZpZWxkRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJ0ZXh0YXJlYUZpZWxkRm9ybVRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgdGV4dGFyZWFGaWVsZEZvcm1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiYm9vbGVhZEZpZWxkRm9ybVRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgYm9vbGVhZEZpZWxkRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkYXRlRmllbGRGb3JtVGVtcGxhdGVcIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBkYXRlRmllbGRGb3JtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcIm51bWVyaWNGaWVsZEZvcm1UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIG51bWVyaWNGaWVsZEZvcm1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiYXR0YWNobWVudEZpZWxkRm9ybVRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgYXR0YWNobWVudEZpZWxkRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJpbWFnZUZpZWxkRm9ybVRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgaW1hZ2VGaWVsZEZvcm1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiaW1hZ2VXaXRoTWFya2Vyc0ZpZWxkRm9ybVRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgaW1hZ2VXaXRoTWFya2Vyc0ZpZWxkRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJpbWFnZUZpZWxkU2VsZWN0b3JGb3JtVGVtcGxhdGVcIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBpbWFnZUZpZWxkU2VsZWN0b3JGb3JtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImxpc3RWYWx1ZUZpZWxkRm9ybVRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgbGlzdFZhbHVlRmllbGRGb3JtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImxvb2t1cEZpZWxkRm9ybVRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgbG9va3VwRmllbGRGb3JtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImRhdGFHZXR0ZXJUZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGRhdGFHZXR0ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBQcm9wcmlldMOgIHBlciBnZXN0aXJlIGkgbWV0YWRhdGEgbmVpIGNhbXBpIHRpIGRpcG8gQWxsZWdhdG8gbyBJbW1hZ2luZVxyXG4gIG1ldGFkYXRhQ29sdW1uczogQXJyYXk8Q29uZmlnQ29sdW1uPjtcclxuICAvL0BWaWV3Q2hpbGQoJ21ldGFkYXRhRmllbGRzVGFibGUnLCB7IHN0YXRpYzogZmFsc2UgfSkgbWV0YWRhdGFGaWVsZHNUYWJsZTogRXFwVGFibGVDb21wb25lbnQ7XHJcbiAgc2VsZWN0ZWRNZXRhZGF0YTogQmFzZUZpZWxkO1xyXG4gIC8vaW5kZXhTZWxlY3RlZE1ldGFkYXRhOiBudW1iZXI7XHJcbiAgLy9kaWFsb2dNZXRhZGF0YVJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIGRpYWxvZ1Zpc2libGVJZlJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIGRpYWxvZ1JlYWRPbmx5SWZSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICAvL0BWaWV3Q2hpbGQoJ2RpYWxvZ01ldGFkYXRhJywgeyBzdGF0aWM6IHRydWUgfSkgZGlhbG9nTWV0YWRhdGE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ0Zvcm11bGFcIiwgeyBzdGF0aWM6IHRydWUgfSkgZGlhbG9nRm9ybXVsYTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBkaWFsb2dGb3JtdWxhUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIFxyXG4gIC8vIEBWaWV3Q2hpbGQoXCJkaWFsb2dBdmFudGlJbmRpZXRyb1wiLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dBdmFudGlJbmRpZXRybzogVGVtcGxhdGVSZWY8YW55PjtcclxuICAvLyBkaWFsb2dBdmFudGlJbmRpZXRyb1JlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG5cclxuICAvLyNyZWdpb24gUHJvcHJpZXTDoCBwZXIgZ2VzdGlyZSBsZSBpbW1hZ2luaSBuZWkgY2FwaSBkaSB0aXBvIGVsZW5jbyBnZW5lcmljb1xyXG4gIEBWaWV3Q2hpbGQoXCJidXR0b25JbWFnZXNLZXlWYWx1ZUlucHV0Q29sdW1uXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgYnV0dG9uSW1hZ2VzS2V5VmFsdWVJbnB1dENvbHVtbjogVGVtcGxhdGVSZWY8YW55PjtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIEVudW1lcmF0b3JpIHVzYXRpIG5lbGwnaHRtbFxyXG4gIEZpZWxkVHlwZUVudW0gPSBGaWVsZFR5cGVFbnVtO1xyXG4gIEJvb2xQcmVzZW50YW50aW9FbnVtID0gQm9vbFByZXNlbnRhbnRpb0VudW07XHJcbiAgRGF0ZVRpbWVUeXBlRW51bSA9IERhdGVUaW1lVHlwZUVudW07XHJcbiAgTGlzdFByZXNlbnRhdGlvbkVudW0gPSBMaXN0UHJlc2VudGF0aW9uRW51bTtcclxuICBUZXh0TWFza0VudW0gPSBUZXh0TWFza0VudW07XHJcbiAgQXR0YWNobWVudFR5cGUgPSBBdHRhY2htZW50VHlwZTtcclxuICBhdHRhY2htZW50RmllbGRUeXBlRW51bSA9IEF0dGFjaG1lbnRGaWVsZFR5cGVFbnVtO1xyXG4gIGRhdGFHZXR0ZXJUeXBlRW51bSA9IERhdGFHZXR0ZXJUeXBlRW51bTtcclxuICBzdWJzY3JpcHRpb246IGFueTtcclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBHZXN0aW9uZSBkZWxsZSBsaXN0ZSBkaSBpbW1hZ2luaVxyXG4gIGNvbmZpZ0NvbHVtbkxpc3RJbWFnZXM6IEFycmF5PENvbmZpZ0NvbHVtbj4gPSBuZXcgQXJyYXk8Q29uZmlnQ29sdW1uPigpO1xyXG4gIGNvbmZpZ0NvbHVtbkltYWdlOiBBcnJheTxDb25maWdDb2x1bW4+ID0gbmV3IEFycmF5PENvbmZpZ0NvbHVtbj4oKTtcclxuICBAVmlld0NoaWxkKCdHZW5lcmljTGlzdEltYWdlc0ltYWdlVGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBHZW5lcmljTGlzdEltYWdlc0ltYWdlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnR2VuZXJpY0xpc3RJbWFnZXNLZXlUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIEdlbmVyaWNMaXN0SW1hZ2VzS2V5VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnR2VuZXJpY0xpc3RJbWFnZXNWYWx1ZVRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgR2VuZXJpY0xpc3RJbWFnZXNWYWx1ZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ2ltYWdlU2VsZWN0b3JBdHRhY2htZW50cycsIHsgc3RhdGljOiBmYWxzZSB9KSBpbWFnZVNlbGVjdG9yQXR0YWNobWVudHM6IEVxcEF0dGFjaG1lbnRzQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoJ2ltYWdlQXR0YWNobWVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBpbWFnZUF0dGFjaG1lbnQ6IEVxcEF0dGFjaG1lbnRzQ29tcG9uZW50O1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyBEQiBHZXR0ZXJcclxuICBkaWFsb2dRRVJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIC8vQFZpZXdDaGlsZCgnZGlhbG9nTWV0YWRhdGEnLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dNZXRhZGF0YTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiZGlhbG9nUUVcIiwgeyBzdGF0aWM6IHRydWUgfSkgZGlhbG9nUUU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIC8vIFRNVy1QSUNLRVJcclxuICBtb2RlID0gTW9kZUVudW1cclxuICB0aW1lVHlwZSA9IFRpbWVUeXBlRW51bVxyXG5cclxuICAvLyBETSBHZXR0ZXJcclxuICBmb3JtczogQXJyYXk8Rm9ybT4gPSBuZXcgQXJyYXk8Rm9ybT4oKTtcclxuICBETU1vZHVsZTogYW55O1xyXG4gIERNRmllbGQ6IGFueTtcclxuICBETUZpZWxkczogQXJyYXk8eyBrZXk6IHN0cmluZyB9PjtcclxuICBETUdldHRlckNhcmRpbmFsaXRpZXMgPSBEYXRhR2V0dGVyQ2FyZGluYWxpdHlFbnVtO1xyXG5cclxuICBwbGF0Zm9ybTogc3RyaW5nID0gQ2FwYWNpdG9yLmdldFBsYXRmb3JtKCk7XHJcblxyXG4gIGxvYWRlZEZpZWxkRXh0cmE6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBhZ2dyZWdhdGlvbkZpZWxkTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBlbnVtSGVscGVyOiBFbnVtSGVscGVyLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgaHR0cENsaWVudDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgdXRpbGl0eUhlbHBlclNlcnZpY2U6IFV0aWxpdHlIZWxwZXJTZXJ2aWNlXHJcbiAgKSB7IH1cclxuXHJcbiAgYXN5bmMgbmdPbkluaXQoKSB7XHJcblxyXG4gICAgdGhpcy5jb25maWd1cmVDb2x1bW5zKCk7XHJcbiAgICB0aGlzLmNvbmZpZ3VyZUZpZWxkc0V4dHJhKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuZmllbGQuRGF0YUdldHRlciA9PSBudWxsKSB7IHRoaXMuZmllbGQuRGF0YUdldHRlciA9IG5ldyBEYXRhR2V0dGVyKCk7IH1cclxuICAgIGlmICh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgIT0gbnVsbCAmJiB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPT0gRGF0YUdldHRlclR5cGVFbnVtW1wiRGEgbW9kdWxvIGRpbmFtaWNvXCJdKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuZ2V0QWxsTW9kdWxlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJIYXNSZXNldEJ1dHRvbiA9PT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckhhc1Jlc2V0QnV0dG9uID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUgIT0gXCJ1bmRlZmluZWRcIiAmJiB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5jcmVhdGVDb2x1bW5LZXlzKHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUuUGFyYW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLmZpZWxkVHlwZXNUb0V4Y2x1ZGUuaW5jbHVkZXMoRmllbGRUeXBlRW51bVtcIkZvcm0gZGkgZGV0dGFnbGlvXCJdKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZmllbGRUeXBlc1RvRXhjbHVkZS5wdXNoKEZpZWxkVHlwZUVudW1bXCJGb3JtIGRpIGRldHRhZ2xpb1wiXSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vbkZpZWxkVHlwZUNoYW5nZShmYWxzZSk7XHJcbiAgICB0aGlzLmF2YWlsYWJsZUZpZWxkcyA9IHRoaXMuYXZhaWxhYmxlRmllbGRzXHJcbiAgICAgID8gdGhpcy5hdmFpbGFibGVGaWVsZHMuZmlsdGVyKChmKSA9PiBmICE9IHRoaXMuZmllbGQpXHJcbiAgICAgIDogW107XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBpbXBvc3RhcmUgaSB2YWxvcmkgZGEgc3VnZ2VyaXJlIG5lbGwnYXV0b2NvbXBsZXRlIGRlbCBjYW1wbyBGb3JtdWxhLlxyXG4gICAqIFZpZW5lIHNjYXRlbmF0byBhbCBmb2N1cyAoaW4gcXVlc3RvIGNhc28gdmllbmUgcGFzc2F0byBpbCBwYXJhbWV0cm8gYSBudWxsIHBlciBkaWZmZXJlbnppYXJsb1xyXG4gICAqIGRhbGwnZXZlbnRvIGRpIGNsaWNrIHN1bGxhIHRhc3RpZXJhKSBlIGFsIGtleXVwIHN1bGwnaW5wdXQgKGlsIHBhcmFtZXRybyDDqCBkaXZlcnNvIGRhIG51bGwpLlxyXG4gICAqIEBwYXJhbSBrZXlib2FyZEV2ZW50IEV2ZW50byBzY2F0ZW5hdG8gYWwga2V5dXAgc3VsbGEgdGFzdGllcmEuIFNlIG51bGwgYWxsb3JhIGlsIG1ldG9kbyDDqCBzdGF0byBpbnZvY2F0byBkYWwgZm9jdXMgc3VsbCdpbnB1dC5cclxuICAgKiBAc3VtbWFyeSBBZ2dpb3JuYSBsJ2VsZW5jbyBkZWkgc3VnZ2VyaW1lbnRpIHBlciBsJ2F1dG9jb21wbGV0ZSBzZSBsJ3V0ZW50ZSBlc2VndWUgaWwgZm9jdXMgc3VsbCdpbnB1dFxyXG4gICAqIG9wcHVyZSBhbCBrZXl1cCBzdWxsYSB0YXN0aWVyYSBkaSB1biB0YXN0byBkaXZlcnNvIGRhbGxlIGZyZWNjZS5cclxuICAgKi9cclxuICAvLyBzZXRGb3JtdWxhQXV0b2NvbXBsZXRlT3B0aW9ucyhrZXlib2FyZEV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgLy8gICAvLyBDcmVvIGwnYXJyYXkgcGVyIGwnYXV0b2NvbXBsZXRlIHNvbG8gc2Ugc3RvIGZhY2VuZG8gaWwgZm9jdXMgc3VsbCdpbnB1dCBvIHNlIHN0byBwcmVtZW5kbyB1biB0YXN0b1xyXG4gIC8vICAgLy8gc3VsbGEgdGFzdGllcmEgZGl2ZXJzbyBkYWxsZSBmcmVjY2UgKGluIHF1ZXN0J3VsdGltbyBjYXNvLCBzZSBub24gdmllbmUgZXNlZ3VpdG8gaWwgZmlsdHJvIHN1bGwnZXZlbnRvLFxyXG4gIC8vICAgLy8gbm9uIHNpIHB1w7Igc2VsZXppb25hcmUgdW4gc3VnZ2VyaW1lbnRvIGRlbGwnYXV0b2NvbXBsZXRlIHBlcmNow6ggYWwgY2xpY2sgdmVycmViYmUgcmljYXJpY2F0byBsJ2FycmF5IGVcclxuICAvLyAgIC8vIHNpIHByZWRlcmViYmUgbGEgc2VsZXppb25lIGFwcGVuYSBmYXR0YSkuXHJcbiAgLy8gICBpZiAoIWtleWJvYXJkRXZlbnQgfHwgIWtleWJvYXJkRXZlbnQuY29kZS5pbmNsdWRlcyhcIkFycm93XCIpKSB7XHJcbiAgLy8gICAgIHRoaXMuZm9ybXVsYUF1dG9jb21wbGV0ZU9wdGlvbnMgPSBVdGlsaXR5SGVscGVyU2VydmljZS5HZXRBdXRvY29tcGxldGVPcHRpb25zKHRoaXMuYXZhaWxhYmxlRmllbGRzLCB0aGlzLmZpZWxkLkZvcm11bGEpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuICBzZXRWaXNpYmxlSWZBdXRvY29tcGxldGVPcHRpb25zKGtleWJvYXJkRXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIC8vIENyZW8gbCdhcnJheSBwZXIgbCdhdXRvY29tcGxldGUgc29sbyBzZSBzdG8gZmFjZW5kbyBpbCBmb2N1cyBzdWxsJ2lucHV0IG8gc2Ugc3RvIHByZW1lbmRvIHVuIHRhc3RvXHJcbiAgICAvLyBzdWxsYSB0YXN0aWVyYSBkaXZlcnNvIGRhbGxlIGZyZWNjZSAoaW4gcXVlc3QndWx0aW1vIGNhc28sIHNlIG5vbiB2aWVuZSBlc2VndWl0byBpbCBmaWx0cm8gc3VsbCdldmVudG8sXHJcbiAgICAvLyBub24gc2kgcHXDsiBzZWxlemlvbmFyZSB1biBzdWdnZXJpbWVudG8gZGVsbCdhdXRvY29tcGxldGUgcGVyY2jDqCBhbCBjbGljayB2ZXJyZWJiZSByaWNhcmljYXRvIGwnYXJyYXkgZVxyXG4gICAgLy8gc2kgcHJlZGVyZWJiZSBsYSBzZWxlemlvbmUgYXBwZW5hIGZhdHRhKS5cclxuICAgIGlmICgha2V5Ym9hcmRFdmVudCB8fCAha2V5Ym9hcmRFdmVudC5jb2RlLmluY2x1ZGVzKFwiQXJyb3dcIikpIHtcclxuICAgICAgdGhpcy5WaXNpYmxlSWZBdXRvY29tcGxldGVPcHRpb25zID1cclxuICAgICAgICBVdGlsaXR5SGVscGVyU2VydmljZS5HZXRBdXRvY29tcGxldGVPcHRpb25zKFxyXG4gICAgICAgICAgdGhpcy5hdmFpbGFibGVGaWVsZHMsXHJcbiAgICAgICAgICB0aGlzLmZpZWxkLlZpc2libGVJZlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG9taXRfc3BlY2lhbF9jaGFyKGV2ZW50KSB7XHJcbiAgICB2YXIgaztcclxuICAgIGsgPSBldmVudC5rZXlDb2RlOyAvLyAgICAgICAgIGsgPSBldmVudC5rZXlDb2RlOyAgKEJvdGggY2FuIGJlIHVzZWQpXHJcbiAgICBpZiAoayA9PSAzNCkge1xyXG4gICAgICBldmVudC5rZXlDb2RlID0gMDtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYSBpbCBGb3JtR3JvdXAgcGVyIGwnYWdnaXVudGEgZGkgdW4gbnVvdm8gY2FtcG8gYWxsJ2ludGVybm8gZGVsbGEgZm9ybS5cclxuICAgKiBNZXRvZG8gcmljaGlhbWF0byBvZ25pIHZvbHRhIGNoZSBjYW1iaWEgaWwgdGlwbyBkZWwgY2FtcG8gc2NlbHRvIG8gdmllbmUgYWdnaXVudG8vbW9kaWZpY2F0byB1biBGaWVsZFxyXG4gICAqL1xyXG4gIGNyZWF0ZUZpZWxkRm9ybSgpIHtcclxuICAgIHRoaXMuZmllbGRGb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgTGFiZWw6IFtcclxuICAgICAgICB0aGlzLmZpZWxkLkxhYmVsLFxyXG4gICAgICAgIFtcclxuICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uUG9sbCxcclxuICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihcIl5bYS16QS1aIF0qJFwiKSxcclxuICAgICAgICBdLFxyXG4gICAgICBdLFxyXG4gICAgICBEZXNjcmlwdGlvbjogW1xyXG4gICAgICAgIHRoaXMuZmllbGQuRGVzY3JpcHRpb24sXHJcbiAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIHRoaXMucXVlc3Rpb25Qb2xsXSxcclxuICAgICAgXSxcclxuICAgICAgUmVhZG9ubHk6IFt0aGlzLmZpZWxkLlJlYWRvbmx5XSxcclxuICAgICAgUmVhZG9ubHlJZjogW3RoaXMuZmllbGQuUmVhZG9ubHlJZl0sXHJcbiAgICAgIFJlcXVpcmVkOiBbdGhpcy5maWVsZC5SZXF1aXJlZF0sXHJcbiAgICAgIEZpZWxkVHlwZTogW1xyXG4gICAgICAgIHRoaXMuZmllbGQuRmllbGRUeXBlLFxyXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCB0aGlzLnF1ZXN0aW9uUG9sbF0sXHJcbiAgICAgIF0sXHJcbiAgICAgIERNTW9kdWxlOiBbbnVsbF0sXHJcbiAgICAgIERNRmllbGQ6IFtudWxsXSxcclxuICAgICAgRGF0YUdldHRlclR5cGU6IFtcclxuICAgICAgICB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUsXHJcbiAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBdLFxyXG4gICAgICBDb2xTcGFuU2l6ZXM6IFt0aGlzLmZpZWxkLkNvbFNwYW5TaXplc10sXHJcbiAgICAgIEluTGlzdFZpZXc6IFt0aGlzLmZpZWxkLkluTGlzdFZpZXddLFxyXG4gICAgICBJbnZpc2liaWxpdHk6IFt0aGlzLmZpZWxkLkludmlzaWJpbGl0eV0sXHJcbiAgICAgIFZpc2libGVJZjogW3RoaXMuZmllbGQuVmlzaWJsZUlmLCB0aGlzLnF1ZXN0aW9uUG9sbF0sXHJcbiAgICAgIE1haW50YWluX1ZhbHVlOiBbdGhpcy5maWVsZC5NYWludGFpbl9WYWx1ZV0sXHJcbiAgICAgIFRvb2x0aXA6IFt0aGlzLmZpZWxkLlRvb2x0aXAsIHRoaXMucXVlc3Rpb25Qb2xsXSxcclxuICAgICAgTGFiZWxzdHlsZUNTUzogW3RoaXMuZmllbGQuTGFiZWxzdHlsZUNTUywgdGhpcy5xdWVzdGlvblBvbGxdLFxyXG4gICAgICBGaWVsZHN0eWxlQ1NTOiBbdGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTLCB0aGlzLnF1ZXN0aW9uUG9sbF0sXHJcbiAgICAgIEZvcm11bGE6IFt0aGlzLmZpZWxkLkZvcm11bGEsIHRoaXMucXVlc3Rpb25Qb2xsXSxcclxuICAgICAgRGF0YUdldHRlclZhbHVlOiBbdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSwgdGhpcy5xdWVzdGlvblBvbGxdLFxyXG4gICAgICBEYXRhR2V0dGVySGFzUmVzZXRCdXR0b246IFt0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckhhc1Jlc2V0QnV0dG9uLCB0aGlzLnF1ZXN0aW9uUG9sbF0sXHJcbiAgICAgIERhdGFHZXR0ZXJJc011bHRpc2VsZWN0OiBbdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJJc011bHRpc2VsZWN0LCB0aGlzLnF1ZXN0aW9uUG9sbF0sXHJcblxyXG4gICAgICBBbnN3ZXJTdHlsZUxhYmVsc3R5bGVDU1M6IFt0aGlzLmZpZWxkLkFuc3dlclN0eWxlLkxhYmVsc3R5bGVDU1MsIHRoaXMucXVlc3Rpb25Qb2xsXSxcclxuICAgICAgQW5zd2VyU3R5bGVGaWVsZHN0eWxlQ1NTOiBbdGhpcy5maWVsZC5BbnN3ZXJTdHlsZS5GaWVsZHN0eWxlQ1NTLCB0aGlzLnF1ZXN0aW9uUG9sbF0sXHJcbiAgICAgIEFuc3dlclN0eWxlVmlzaWJsZUlmOiBbdGhpcy5maWVsZC5BbnN3ZXJTdHlsZS5WaXNpYmxlSWYsIHRoaXMucXVlc3Rpb25Qb2xsXSxcclxuICAgICAgQW5zd2VyU3R5bGVDb2xTcGFuU2l6ZXM6IFt0aGlzLmZpZWxkLkFuc3dlclN0eWxlLkNvbFNwYW5TaXplc10sXHJcbiAgICAgIEFuc3dlclN0eWxlSW5MaXN0VmlldzogW3RoaXMuZmllbGQuQW5zd2VyU3R5bGUuSW5MaXN0Vmlld10sXHJcbiAgICAgIEFuc3dlclN0eWxlSW52aXNpYmlsaXR5OiBbdGhpcy5maWVsZC5BbnN3ZXJTdHlsZS5JbnZpc2liaWxpdHldLFxyXG4gICAgfSk7XHJcblxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIkZPUk0gRklFTEQgQ1JFQVRPXCIsIHRoaXMuZmllbGQuRGF0YUdldHRlcik7XHJcblxyXG4gICAgaWYgKHRoaXMuZm9ybUZpZWxkc0dyb3Vwcykge1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgXCJGaWVsZEdyb3VwXCIsXHJcbiAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCh0aGlzLmZpZWxkLkZpZWxkR3JvdXAsIFZhbGlkYXRvcnMucmVxdWlyZWQpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHF1ZXN0aW9uUG9sbChjb250cm9sOiBGb3JtQ29udHJvbCk6IHsgW3M6IHN0cmluZ106IGJvb2xlYW4gfSB7XHJcbiAgICAvLyBjJ8OoIHVuIEZvcm1Db250cm9sIGNoZSDDqCB2dW90byBjaGUgZGEgcHJvYmxlbWkgKHByb2JhYmlsbWVudGUgdHlwZSBEYXRhLCBjYW1wbyBGb3JtYXRvKVxyXG4gICAgaWYgKGNvbnRyb2wudmFsdWUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBVdGlsaXR5SGVscGVyU2VydmljZS5zdHJpbmdDaGVja1BhcmVudGVzaXMoXHJcbiAgICAgICAgICBjb250cm9sLnZhbHVlLFxyXG4gICAgICAgICAgY29udHJvbC5oYXNWYWxpZGF0b3IoVmFsaWRhdG9ycy5yZXF1aXJlZClcclxuICAgICAgICApXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB7IFwiTWlzc2luZyBQYXJlbnRoZXNpc1wiOiB0cnVlIH07XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuICBzdHJpbmdTYW5pdGFpemVkVmFsaWRhdG9yKGNvbnRyb2w6IEZvcm1Db250cm9sKTogeyBbczogc3RyaW5nXTogYm9vbGVhbiB9IHtcclxuICAgIC8vIGMnw6ggdW4gRm9ybUNvbnRyb2wgY2hlIMOoIHZ1b3RvIGNoZSBkYSBwcm9ibGVtaSAocHJvYmFiaWxtZW50ZSB0eXBlIERhdGEsIGNhbXBvIEZvcm1hdG8pXHJcbiAgICBpZiAoY29udHJvbC52YWx1ZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIFV0aWxpdHlIZWxwZXJTZXJ2aWNlLnN0cmluZ0NoZWNrUGFyZW50ZXNpcyhcclxuICAgICAgICAgIGNvbnRyb2wudmFsdWUsXHJcbiAgICAgICAgICBjb250cm9sLmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKVxyXG4gICAgICAgIClcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHsgXCJMYSBmb3JtdWxhIG5vbiDDqCB2YWxpZGFcIjogdHJ1ZSB9O1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcbiAgLy8gZ2V0QWxsRm9ybVZhbGlkYXRpb25FcnJvcnMoKSB7XHJcbiAgLy8gICBPYmplY3Qua2V5cyh0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAvLyAgICAgY29uc3QgY29udHJvbEVycm9yczogVmFsaWRhdGlvbkVycm9ycyA9XHJcbiAgLy8gICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5nZXQoa2V5KS5lcnJvcnM7XHJcbiAgLy8gICAgIGlmIChjb250cm9sRXJyb3JzICE9IG51bGwpIHtcclxuICAvLyAgICAgICBPYmplY3Qua2V5cyhjb250cm9sRXJyb3JzKS5mb3JFYWNoKChrZXlFcnJvcikgPT4ge1xyXG4gIC8vICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgLy8gICAgICAgICAgIFwiS2V5IGNvbnRyb2w6IFwiICsga2V5ICsgXCIsIGtleUVycm9yOiBcIiArIGtleUVycm9yICsgXCIsIGVyciB2YWx1ZTogXCIsXHJcbiAgLy8gICAgICAgICAgIGNvbnRyb2xFcnJvcnNba2V5RXJyb3JdXHJcbiAgLy8gICAgICAgICApO1xyXG4gIC8vICAgICAgIH0pO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9KTtcclxuICAvLyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGlhbWF0byBkYWkgbWF0LWVycm9yIHBlciBwcmVuZGVyZSBnbGkgZXJyb3JpIGdlbmVyYXRpIHJlbGF0aXZpIGFsIGNhbXBvLlxyXG4gICAqIEBwYXJhbSBjb250cm9sIMOoIGlsIG5vbWUgZGVsIEdyb3VwQ29udHJvbCBkaSBjdWkgbGVnZ2VyZSBzZSBjaSBzb25vIGVycm9yaVxyXG4gICAqL1xyXG4gIGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKGNvbnRyb2w6IHN0cmluZykge1xyXG4gICAgaWYgKGNvbnRyb2wgPT0gXCJMYWJlbFwiKSBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdnZXRGb3JtVmFsaWRhdGlvbkVycm9ycycsIHRoaXMuZmllbGRGb3JtR3JvdXAuY29udHJvbHNbXCJMYWJlbFwiXSk7XHJcblxyXG4gICAgY29uc3QgY29udHJvbEVycm9yczogVmFsaWRhdGlvbkVycm9ycyA9XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuY29udHJvbHNbY29udHJvbF0uZXJyb3JzO1xyXG4gICAgbGV0IGVycm9ycyA9IFtdO1xyXG4gICAgbGV0IHZhbHVlcyA9IFtdO1xyXG4gICAgaWYgKGNvbnRyb2xFcnJvcnMgIT0gbnVsbCkge1xyXG4gICAgICBPYmplY3Qua2V5cyhjb250cm9sRXJyb3JzKS5mb3JFYWNoKChrZXlFcnJvcikgPT4ge1xyXG4gICAgICAgIGVycm9ycy5wdXNoKGtleUVycm9yKTtcclxuICAgICAgfSk7XHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2NvbnRyb2w6ICcsIGNvbnRyb2wpO1xyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdlcnJvcnM6ICcsIGVycm9ycyk7XHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ3ZhbHVlczogJywgdmFsdWVzKTtcclxuICAgIH1cclxuICAgIHJldHVybiBlcnJvcnMuam9pbihcIiwgXCIpO1xyXG4gIH1cclxuXHJcbiAgc2V0QWdncmVnYXRpb24oZW51bVR5cGU6IGFueSwgcmVzZXQ6IGJvb2xlYW4pe1xyXG4gICAgICB0aGlzLmFnZ3JlZ2F0aW9uRnVuY3Rpb25FbnVtID0gZW51bVR5cGU7XHJcbiAgICAgIGlmIChyZXNldCkgeyB0aGlzLmZpZWxkLkFnZ3JlZ2F0aW9ucyA9IFtdOyB9XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4geyB0aGlzLmFnZ3JlZ2F0aW9uRmllbGRMb2FkZWQgPSB0cnVlOyB9LCAxMDApO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIG9uRmllbGRUeXBlQ2hhbmdlXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoaWFtYXRvIHF1YW5kbyBjYW1iaWEgaWwgRmllbGRUeXBlIGRlbCBCYXNlRmllbGQgY2hlIHNpIHN0YSBhZ2dpdW5nZW5kby9tb2RpZmljYW5kby5cclxuICAgKiBSaWNyZWEgbCdvZ2dldHRvIGZpZWxkIHBvcG9sYW5kbyBzb2xvIGxlIHByb3ByaWV0w6AgZGVsIEJhc2VGaWVsZCBpbnNlcml0ZSBkYWxsJ3V0ZW50ZVxyXG4gICAqIChxdWVsbGUgY29tdW5pIGEgdHV0dGUgbGUgdGlwb2xvZ2llIGRpIGNhbXBvKSwgcmljcmVhIGxhIGZvcm0gZSwgaW4gYmFzZSBhbCBGaWVsZFR5cGUgc2NlbHRvLFxyXG4gICAqIGFnZ2l1bmdlIGFsbGEgZm9ybSBpIEZvcm1Db250cm9sIG5lY2Vzc2FyaSBlIHNlbGV6aW9uYSBpbCB0ZW1wbGF0ZSBjb3JyZXR0byBkYSB1c2FyZS5cclxuICAgKiBAcGFyYW0gcmVzdG9yZUZpZWxkIFNlIFRSVUUgcmlwcmlzdGluYSBpIHZhbG9yaSBiYXNlIChlcmVkaXRhdGkgZGFsIG1vZGVsbG8gQmFzZUZpZWxkKSBkZWwgY2FtcG8gYWdnaXVudG8vbW9kaWZpY2F0b1xyXG4gICAqL1xyXG4gIG9uRmllbGRUeXBlQ2hhbmdlKHJlc3RvcmVGaWVsZDogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIHRoaXMuYWdncmVnYXRpb25GaWVsZExvYWRlZCA9IGZhbHNlO1xyXG5cclxuICAgIFxyXG4gICAgaWYgKHJlc3RvcmVGaWVsZCkge1xyXG4gICAgICB0aGlzLnJlc3RvcmVCYXNlRmllbGRQcm9wZXJ0aWVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jcmVhdGVGaWVsZEZvcm0oKTtcclxuICAgIHRoaXMub25Db2xTcGFuU2l6ZVNlbGVjdCgpO1xyXG4gICAgaWYgKCh0aGlzLmZpZWxkIGFzIEJhc2VGaWVsZCkuSW5MaXN0VmlldyA9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuZmllbGQuSW5MaXN0VmlldyA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoKHRoaXMuZmllbGQgYXMgQmFzZUZpZWxkKS5JbnZpc2liaWxpdHkgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmZpZWxkLkludmlzaWJpbGl0eSA9IEZpZWxkSW52aXNpYmlsaXR5RW51bS5OQVNDT1NUTztcclxuICAgIH1cclxuICAgIHRoaXMuZmllbGRUeXBlRm9ybVRlbXBsYXRlID0gbnVsbDtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuZmllbGQuRmllbGRUeXBlKSB7XHJcblxyXG4gICAgICAvLyNyZWdpb24gQ0FNUE8gREkgVEVTVE9cclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gZGkgdGVzdG9cIl06XHJcbiAgICAgICAgdGhpcy5zZXRBZ2dyZWdhdGlvbihOb3ROdW1iZXJBZ2dyZWdhdGlvbkZ1bmN0aW9uRW51bSwgcmVzdG9yZUZpZWxkKTtcclxuXHJcbiAgICAgICAgaWYgKCh0aGlzLmZpZWxkIGFzIFRleHRGaWVsZCkuTWljcm9waG9uZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLmZpZWxkLk1pY3JvcGhvbmUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJUZXh0TWFza1wiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBUZXh0RmllbGQpLlRleHRNYXNrKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJNYXhMZW5naHRcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgVGV4dEZpZWxkKS5NYXhMZW5naHQsIFtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvblBvbGwsXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihcIl5bMC05XSokXCIpLFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiTWluTGVuZ2h0XCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIFRleHRGaWVsZCkuTWluTGVuZ2h0LCBbXHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25Qb2xsLFxyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oXCJeWzAtOV0qJFwiKSxcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIk1pY3JvcGhvbmVcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgVGV4dEZpZWxkKS5NaWNyb3Bob25lKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZFR5cGVGb3JtVGVtcGxhdGUgPSB0aGlzLnRleHRGaWVsZEZvcm1UZW1wbGF0ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgLy8jZW5kcmVnaW9uIENBTVBPIERJIFRFU1RPXHJcblxyXG4gICAgICAvLyNyZWdpb24gTEFCRUxcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtWydFdGljaGV0dGEnXTpcclxuICAgICAgICBpZiAoKHRoaXMuZmllbGQgYXMgTGFiZWxGaWVsZCkuRXRpY2hldHRhID09IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuZmllbGQuRXRpY2hldHRhID0gXCJcIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiRXRpY2hldHRhXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIExhYmVsRmllbGQpLkV0aWNoZXR0YSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmllbGRUeXBlRm9ybVRlbXBsYXRlID0gdGhpcy5sYWJlbEZpZWxkRm9ybVRlbXBsYXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyNlbmRyZWdpb24gTEFCRUxcclxuXHJcbiAgICAgIC8vI3JlZ2lvbiBCVVRUT05cclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtWydCb3R0b25lIGF6aW9uZSddOlxyXG4gICAgICAgIGlmICgodGhpcy5maWVsZCBhcyBBY3Rpb25CdXR0b25GaWVsZCkuQnV0dG9uQ29kZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLmZpZWxkLkJ1dHRvbkNvZGUgPSBcIlwiO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJDb2RpY2VcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgQWN0aW9uQnV0dG9uRmllbGQpLkJ1dHRvbkNvZGUpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKCh0aGlzLmZpZWxkIGFzIEFjdGlvbkJ1dHRvbkZpZWxkKS5CdXR0b25Db2RlID09IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuZmllbGQuQnV0dG9uQ29kZSA9IFwiXCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIkljb25hXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIEFjdGlvbkJ1dHRvbkZpZWxkKS5JY29uKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZFR5cGVGb3JtVGVtcGxhdGUgPSB0aGlzLmJ1dHRvbkZpZWxkRm9ybVRlbXBsYXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyNlbmRyZWdpb24gQlVUVE9OICAgICAgXHJcblxyXG4gICAgICAvLyNyZWdpb24gQVJFQSBESSBURVNUTyBcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQXJlYSBkaSB0ZXN0b1wiXTpcclxuICAgICAgICB0aGlzLnNldEFnZ3JlZ2F0aW9uKE5vdE51bWJlckFnZ3JlZ2F0aW9uRnVuY3Rpb25FbnVtLCByZXN0b3JlRmllbGQpO1xyXG5cclxuICAgICAgICBpZiAoKHRoaXMuZmllbGQgYXMgVGV4dGFyZWFGaWVsZCkuTWljcm9waG9uZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLmZpZWxkLk1pY3JvcGhvbmUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiUm93c1wiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBUZXh0YXJlYUZpZWxkKS5Sb3dzLCBbXHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25Qb2xsLFxyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oXCJeWzAtOV0qJFwiKSxcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJNYXhMZW5naHRcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgVGV4dGFyZWFGaWVsZCkuTWF4TGVuZ2h0LCBbXHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25Qb2xsLFxyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oXCJeWzAtOV0qJFwiKSxcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJNaW5MZW5naHRcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgVGV4dGFyZWFGaWVsZCkuTWluTGVuZ2h0LCBbXHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25Qb2xsLFxyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oXCJeWzAtOV0qJFwiKSxcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJNaWNyb3Bob25lXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIFRleHRhcmVhRmllbGQpLk1pY3JvcGhvbmUpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpZWxkVHlwZUZvcm1UZW1wbGF0ZSA9IHRoaXMudGV4dGFyZWFGaWVsZEZvcm1UZW1wbGF0ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgLy8jZW5kcmVnaW9uIEFSRUEgREkgVEVTVE8gXHJcblxyXG4gICAgICAvLyNyZWdpb24gQk9PTEVBTk9cclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtLkJvb2xlYW5vOlxyXG4gICAgICAgIHRoaXMuc2V0QWdncmVnYXRpb24oTm90TnVtYmVyQWdncmVnYXRpb25GdW5jdGlvbkVudW0sIHJlc3RvcmVGaWVsZCk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiSXNUcmlzdGF0ZVwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBCb29sZWFuRmllbGQpLklzVHJpc3RhdGUpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJQcmVzZXRhdGlvblR5cGVcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEJvb2xlYW5GaWVsZCkuUHJlc2V0YXRpb25UeXBlLFxyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpZWxkVHlwZUZvcm1UZW1wbGF0ZSA9IHRoaXMuYm9vbGVhZEZpZWxkRm9ybVRlbXBsYXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyNlbmRyZWdpb24gQk9PTEVBTk9cclxuXHJcbiAgICAgIC8vI3JlZ2lvbiBEQVRBIEUvSSBPUkFcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRGF0YSBlL28gb3JhXCJdOlxyXG4gICAgICAgIHRoaXMuc2V0QWdncmVnYXRpb24oTm90TnVtYmVyQWdncmVnYXRpb25GdW5jdGlvbkVudW0sIHJlc3RvcmVGaWVsZCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmZpZWxkLklzT25seURhdGUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5maWVsZC5Jc09ubHlEYXRlID0gRGF0ZVRpbWVUeXBlRW51bVtcIlNvbG8gZGF0YVwiXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiSXNPbmx5RGF0ZVwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBEYXRlRmllbGQpLklzT25seURhdGUsIFtcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvblBvbGwsXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiTWluRGF0ZVwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgRGF0ZUZpZWxkKS5NaW5EYXRlLFxyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uUG9sbFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiTWF4RGF0ZVwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgRGF0ZUZpZWxkKS5NYXhEYXRlLFxyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uUG9sbFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiRGF0ZUZvcm1hdFwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBEYXRlRmllbGQpLkRhdGVGb3JtYXQpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpZWxkVHlwZUZvcm1UZW1wbGF0ZSA9IHRoaXMuZGF0ZUZpZWxkRm9ybVRlbXBsYXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyNlbmRyZWdpb24gREFUQSBFL0kgT1JBXHJcblxyXG4gICAgICAvLyNyZWdpb24gQ0FNUE8gTlVNRVJJQ09cclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gbnVtZXJpY29cIl06XHJcbiAgICAgICAgdGhpcy5zZXRBZ2dyZWdhdGlvbihOdW1iZXJBZ2dyZWdhdGlvbkZ1bmN0aW9uRW51bSwgcmVzdG9yZUZpZWxkKTtcclxuXHJcbiAgICAgICAgaWYgKCh0aGlzLmZpZWxkIGFzIE51bWVyaWNGaWVsZCkuSXNJbnRlZ2VyID09IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuZmllbGQuSXNJbnRlZ2VyID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiSXNJbnRlZ2VyXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIE51bWVyaWNGaWVsZCkuSXNJbnRlZ2VyKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiTWluVmFsdWVcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5NaW5WYWx1ZSwgW1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uUG9sbCxcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKFwiXi0/WzAtOV0rKCxbMC05XSt8XFwuWzAtOV0rKT8kXCIpLCAvLyhcIl5bMC05XSokXCIpLFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIk1heFZhbHVlXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIE51bWVyaWNGaWVsZCkuTWF4VmFsdWUsIFtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvblBvbGwsXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihcIl4tP1swLTldKygsWzAtOV0rfFxcLlswLTldKyk/JFwiKSwgLy8oXCJeWzAtOV0qJFwiKSxcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJEZWNpbWFsU2VwYXJhdG9yXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAodGhpcy5maWVsZCBhcyBOdW1lcmljRmllbGQpLkRlY2ltYWxTZXBhcmF0b3IsXHJcbiAgICAgICAgICAgIFt0aGlzLnF1ZXN0aW9uUG9sbCwgVmFsaWRhdG9ycy5wYXR0ZXJuKFwiXlthLXpBLVogLS8nLC5fL1xcXFxePD5dK1wiKV1cclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIkRlY2ltYWxQcmVjaXNpb25cIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIE51bWVyaWNGaWVsZCkuRGVjaW1hbFByZWNpc2lvbixcclxuICAgICAgICAgICAgW3RoaXMucXVlc3Rpb25Qb2xsLCBWYWxpZGF0b3JzLnBhdHRlcm4oXCJeWzAtOV0rJFwiKV1cclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIlRob3VzYW5kc1NlcGFyYXRvclwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5UaG91c2FuZHNTZXBhcmF0b3IsXHJcbiAgICAgICAgICAgIFt0aGlzLnF1ZXN0aW9uUG9sbCwgVmFsaWRhdG9ycy5wYXR0ZXJuKFwiXlthLXpBLVogLS8nLC5fL1xcXFxePD5dK1wiKV1cclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIkN1cnJlbmN5U3ltYm9sXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAodGhpcy5maWVsZCBhcyBOdW1lcmljRmllbGQpLkN1cnJlbmN5U3ltYm9sLFxyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uUG9sbFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiTWVhc3VyZVVuaXRcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIE51bWVyaWNGaWVsZCkuTWVhc3VyZVVuaXQsXHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25Qb2xsXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpZWxkVHlwZUZvcm1UZW1wbGF0ZSA9IHRoaXMubnVtZXJpY0ZpZWxkRm9ybVRlbXBsYXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyNlbmRyZWdpb24gQ0FNUE8gTlVNRVJJQ09cclxuXHJcbiAgICAgIC8vI3JlZ2lvbiBBTExFR0FUT1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW0uQWxsZWdhdG86XHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJBbGxvd2VkRXh0ZW5zaW9uc1wiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgQXR0YWNobWVudEZpZWxkKS5BbGxvd2VkRXh0ZW5zaW9uc1xyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJpc011bHRpQXR0YWNoXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIEF0dGFjaG1lbnRGaWVsZCkuaXNNdWx0aUF0dGFjaClcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmllbGRUeXBlRm9ybVRlbXBsYXRlID0gdGhpcy5hdHRhY2htZW50RmllbGRGb3JtVGVtcGxhdGU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIC8vI2VuZHJlZ2lvbiBBTExFR0FUT1xyXG5cclxuICAgICAgLy8jcmVnaW9uIElNTUFHSU5FXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bS5JbW1hZ2luZTpcclxuICAgICAgICBpZiAodHlwZW9mICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkR5bkF0dGFjaG1lbnQgPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuRHluQXR0YWNobWVudCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkVuYWJsZURyYXdpbmcgPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuRW5hYmxlRHJhd2luZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJSZXNpemVkSW1hZ2VzSGVpZ2h0UHhcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLlJlc2l6ZWRJbWFnZXNIZWlnaHRQeCxcclxuICAgICAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4KDQzMjApXVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuUmVzaXplZEltYWdlc0hlaWdodFB4ID0gKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuUmVzaXplZEltYWdlc0hlaWdodFB4ICE9IG51bGwgPyAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5SZXNpemVkSW1hZ2VzSGVpZ2h0UHggOiAxMjg7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiRW5hYmxlRHJhd2luZ1wiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5FbmFibGVEcmF3aW5nKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRUeXBlRm9ybVRlbXBsYXRlID0gdGhpcy5pbWFnZUZpZWxkRm9ybVRlbXBsYXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgLypcclxuICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuQXR0YWNoRGVmaW5pdGlvbiA9IG5ldyBBdHRhY2htZW50RmllbGQoKTtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgIFwiRW5hYmxlRHJhd2luZ1wiLFxyXG4gICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuRW5hYmxlRHJhd2luZylcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgIFwiSW1hZ2VJc0NvbnRleHR1YWxBdHRhY2htZW50XCIsXHJcbiAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkltYWdlSXNDb250ZXh0dWFsQXR0YWNobWVudFxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgICAgLy8gSW1wb3N0byBpIEZvcm1Db250cm9sIHZhcmlhYmlsaS5cclxuICAgICAgdGhpcy5vbkltYWdlSXNDb250ZXh0dWFsQXR0YWNobWVudENoYW5nZSgpO1xyXG4gICAgICB0aGlzLmZpZWxkVHlwZUZvcm1UZW1wbGF0ZSA9IHRoaXMuaW1hZ2VGaWVsZEZvcm1UZW1wbGF0ZTtcclxuICAgICAgYnJlYWs7XHJcbiAgICAgICovXHJcbiAgICAgIC8vI2VuZHJlZ2lvbiBJTU1BR0lORVxyXG5cclxuICAgICAgLy8jcmVnaW9uIEVMRU5DTyBHRU5FUklDT1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFbGVuY28gZ2VuZXJpY29cIl06XHJcbiAgICAgICAgdGhpcy5zZXRBZ2dyZWdhdGlvbihOb3ROdW1iZXJBZ2dyZWdhdGlvbkZ1bmN0aW9uRW51bSwgcmVzdG9yZUZpZWxkKTtcclxuXHJcbiAgICAgICAgaWYgKCh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5Jbkxpc3RWaWV3ID09IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuZmllbGQuSW5MaXN0VmlldyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuSW52aXNpYmlsaXR5ID09IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuZmllbGQuSW52aXNpYmlsaXR5ID0gRmllbGRJbnZpc2liaWxpdHlFbnVtLk5BU0NPU1RPO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJJc011bHRpQ2hvaWNoZVwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuSXNNdWx0aUNob2ljaGUpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJQcmVzZW50YXRpb25Nb2RlXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuUHJlc2VudGF0aW9uTW9kZSxcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZFR5cGVGb3JtVGVtcGxhdGUgPSB0aGlzLmxpc3RWYWx1ZUZpZWxkRm9ybVRlbXBsYXRlO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgLy8jZW5kcmVnaW9uIEVMRU5DTyBHRU5FUklDT1xyXG5cclxuICAgICAgLy8jcmVnaW9uIEVMRU5DTyBJTU1BR0lOSVxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFbGVuY28gaW1tYWdpbmlcIl06XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiSXNNdWx0aUNob2ljaGVcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgSW1hZ2VTZWxlY3RvckZpZWxkKS5Jc011bHRpQ2hvaWNoZSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIlJlc2l6ZWRJbWFnZXNIZWlnaHRQeFwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VTZWxlY3RvckZpZWxkKS5SZXNpemVkSW1hZ2VzSGVpZ2h0UHgsXHJcbiAgICAgICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heCg0MzIwKV1cclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmllbGRUeXBlRm9ybVRlbXBsYXRlID0gdGhpcy5pbWFnZUZpZWxkU2VsZWN0b3JGb3JtVGVtcGxhdGU7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyNlbmRyZWdpb24gRUxFTkNPIElNTUFHSU5JICAgICBcclxuXHJcbiAgICAgIC8vI3JlZ2lvbiBJTU1BR0lORSBDT04gTUFSS0VSXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkltbWFnaW5lIGNvbiBtYXJrZXJzXCJdOlxyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIlJlc2l6ZWRJbWFnZXNIZWlnaHRQeFwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VXaXRoTWFya2Vyc0ZpZWxkKS5SZXNpemVkSW1hZ2VzSGVpZ2h0UHgsXHJcbiAgICAgICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heCg0MzIwKV1cclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmllbGRUeXBlRm9ybVRlbXBsYXRlID0gdGhpcy5pbWFnZVdpdGhNYXJrZXJzRmllbGRGb3JtVGVtcGxhdGU7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyNlbmRyZWdpb24gSU1NQUdJTkUgQ09OIE1BUktFUiAgICAgICAgXHJcblxyXG4gICAgICAvLyNyZWdpb24gTE9PS1VQXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bS5Mb29rdXA6XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiRW50aXR5U291cmNlTmFtZVwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgTG9va3VwRmllbGQpLkVudGl0eVNvdXJjZU5hbWUsXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIlVzZUFzR2V0T3JEaXNjYXJkXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIExvb2t1cEZpZWxkKS5Vc2VBc0dldE9yRGlzY2FyZClcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmllbGRUeXBlRm9ybVRlbXBsYXRlID0gdGhpcy5sb29rdXBGaWVsZEZvcm1UZW1wbGF0ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgLy8jZW5kcmVnaW9uIExPT0tVUFxyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICBbXHJcbiAgICAgICAgRmllbGRUeXBlRW51bS5BbGxlZ2F0byxcclxuICAgICAgICBGaWVsZFR5cGVFbnVtLkltbWFnaW5lLFxyXG4gICAgICAgIEZpZWxkVHlwZUVudW1bXCJGb3JtIGRpIGRldHRhZ2xpb1wiXSxcclxuICAgICAgXS5pbmNsdWRlcyh0aGlzLmZpZWxkLkZpZWxkVHlwZSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLmZpZWxkLkZvcm11bGEgPSBudWxsO1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzW1wiRm9ybXVsYVwiXS5kaXNhYmxlKCk7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuY29udHJvbHNbXCJJbkxpc3RWaWV3XCJdLmRpc2FibGUoKTtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5jb250cm9sc1tcIkludmlzaWJpbGl0eVwiXS5kaXNhYmxlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzW1wiRm9ybXVsYVwiXS5lbmFibGUoKTtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5jb250cm9sc1tcIkluTGlzdFZpZXdcIl0uZW5hYmxlKCk7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuY29udHJvbHNbXCJJbnZpc2liaWxpdHlcIl0uZW5hYmxlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIFtcclxuICAgICAgICBGaWVsZFR5cGVFbnVtLkFsbGVnYXRvLFxyXG4gICAgICAgIEZpZWxkVHlwZUVudW0uSW1tYWdpbmUsXHJcbiAgICAgICAgRmllbGRUeXBlRW51bVtcIkZvcm0gZGkgZGV0dGFnbGlvXCJdLFxyXG4gICAgICAgIEZpZWxkVHlwZUVudW1bXCJEYXRhIGUvbyBvcmFcIl0sXHJcbiAgICAgIF0uaW5jbHVkZXModGhpcy5maWVsZC5GaWVsZFR5cGUpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5jb250cm9sc1tcIkxhYmVsc3R5bGVDU1NcIl0uZGlzYWJsZSgpO1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzW1wiRmllbGRzdHlsZUNTU1wiXS5kaXNhYmxlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzW1wiTGFiZWxzdHlsZUNTU1wiXS5lbmFibGUoKTtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5jb250cm9sc1tcIkZpZWxkc3R5bGVDU1NcIl0uZW5hYmxlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoW0ZpZWxkVHlwZUVudW0uQm9vbGVhbm9dLmluY2x1ZGVzKHRoaXMuZmllbGQuRmllbGRUeXBlKSkge1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzW1wiTGFiZWxzdHlsZUNTU1wiXS5kaXNhYmxlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzW1wiTGFiZWxzdHlsZUNTU1wiXS5lbmFibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9uRmllbGRUeXBlQ2hhbmdlXHJcblxyXG4gIC8vI3JlZ2lvbiBvbkRhdGFHZXR0ZXJUeXBlQ2hhbmdlXHJcbiAgYXN5bmMgb25EYXRhR2V0dGVyVHlwZUNoYW5nZSgpIHtcclxuICAgIGlmICh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPT0gRGF0YUdldHRlclR5cGVFbnVtWydEYSBtb2R1bG8gZGluYW1pY28nXSAmJiB0aGlzLmZvcm1zLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHRoaXMuZ2V0QWxsTW9kdWxlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgIT0gRGF0YUdldHRlclR5cGVFbnVtLkZvcm11bGEpIHtcclxuICAgICAgdGhpcy5maWVsZC5Gb3JtdWxhID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlID0gbnVsbDtcclxuICAgIHRoaXMuRE1Nb2R1bGUgPSBudWxsO1xyXG4gICAgdGhpcy5ETUZpZWxkID0gbnVsbDtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9uRGF0YUdldHRlclR5cGVDaGFuZ2VcclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIGFsIGNhbWJpbyBkZWwgdmFsb3JlIGRlbGxhIHByb3ByaWV0w6AgSW1hZ2VJc0NvbnRleHR1YWxBdHRhY2htZW50IG5lbCBjYXNvXHJcbiAgICogZGkgY2FtcGkgZGkgdGlwbyBJbW1hZ2luZS4gU2UgVFJVRSBhbGxvcmEgcmltdW92ZSBpIEZvcm1Db250cm9sIHBlciBsZSBwcm9wcmlldMOgIElzTXVsdGlBdHRhY2hcclxuICAgKiBlIEFsbG93ZWRFeHRlbnNpb25zIGUgYWdnaXVuZ2UgaSBGb3JtQ29udHJvbCBwZXIgbGUgcHJvcHJpZXTDoCBJbWdOYW1lIGUgQ29udGV4dHVhbEF0dGFjaG1lbnQsXHJcbiAgICogYWx0cmltZW50aSBpbCBjb250cmFyaW8uXHJcbiAgICovXHJcbiAgb25JbWFnZUlzQ29udGV4dHVhbEF0dGFjaG1lbnRDaGFuZ2UoKSB7XHJcblxyXG4gICAgLypcclxuICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkltZ05hbWUgPSBudWxsO1xyXG4gICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuQXR0YWNoRGVmaW5pdGlvbi5BbGxvd2VkRXh0ZW5zaW9ucyA9IFtdO1xyXG4gICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuQXR0YWNoRGVmaW5pdGlvbi5Jc011bHRpQXR0YWNoID0gZmFsc2U7XHJcbiAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5Db250ZXh0dWFsQXR0YWNobWVudCA9IG51bGw7XHJcblxyXG4gICAgaWYgKCh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkltYWdlSXNDb250ZXh0dWFsQXR0YWNobWVudCkge1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woXCJJc011bHRpQXR0YWNoXCIpO1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woXCJBbGxvd2VkRXh0ZW5zaW9uc1wiKTtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgIFwiSW1nTmFtZVwiLFxyXG4gICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5JbWdOYW1lLFxyXG4gICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxyXG4gICAgICAgIClcclxuICAgICAgKTsgICAgICBcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgIFwiQ29udGV4dHVhbEF0dGFjaG1lbnRcIixcclxuICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuQ29udGV4dHVhbEF0dGFjaG1lbnQsXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5yZW1vdmVDb250cm9sKFwiSW1nTmFtZVwiKTtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5yZW1vdmVDb250cm9sKFwiQ29udGV4dHVhbEF0dGFjaG1lbnRcIik7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICBcIklzTXVsdGlBdHRhY2hcIixcclxuICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuQXR0YWNoRGVmaW5pdGlvbi5Jc011bHRpQXR0YWNoXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgXCJBbGxvd2VkRXh0ZW5zaW9uc1wiLFxyXG4gICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uLkFsbG93ZWRFeHRlbnNpb25zXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgKi9cclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGludGVyY2V0dGFyZSBsJ2FnZ2l1bnRhIGRpIHVuIGFsbGVnYXRvIG5laSBjYW1waSBkaSB0aXBvIEltbWFnaW5lIHBlciBhZ2dpb3JuYXJlXHJcbiAgICogaWwgdmFsb3JlIGRlbGxhIHByb3ByaWV0w6AgQ29udGV4dHVhbEF0dGFjaG1lbnQgZSBsYSB2YWxpZGF6aW9uZSBkZWwgcmVsYXRpdm8gRm9ybUNvbnRyb2wuXHJcbiAgICogQHBhcmFtIGV2ZW50IEFycmF5IGNvbnRlbmVudGUgbCdlbGVuY28gYWdnaW9ybmF0byBkZWdsaSBhbGxlZ2F0aSBjYXJpY2F0aSAobmVsIG5vc3RybyBjYXNvIG5lIGNvbnRpZW5lIGFsIHBpw7kgMSkuXHJcbiAgICovXHJcbiAgY2F0Y2hDb250ZXh0dWFsQXR0YWNobWVudENoYW5nZShldmVudDogQXJyYXk8SUF0dGFjaG1lbnREVE8+KSB7XHJcbiAgICAvKlxyXG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuQ29udGV4dHVhbEF0dGFjaG1lbnQgPSBldmVudFswXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkNvbnRleHR1YWxBdHRhY2htZW50ID0gbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuY29udHJvbHNbXCJDb250ZXh0dWFsQXR0YWNobWVudFwiXS5zZXRWYWx1ZShcclxuICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuQ29udGV4dHVhbEF0dGFjaG1lbnRcclxuICAgICk7XHJcbiAgICAqL1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIGFsbGEgc2VsZXppb25lIGRpIHVuYSBjbGFzc2UgbmVsbGEgc2VsZWN0IHBlciBsZSBjb2xvbm5lIGRpIGJvb3RzdHJhcFxyXG4gICAqIGRhIHVzYXJlIG5lbGxhIHZpc3VhbGl6emF6aW9uZSBkZWwgY2FtcG8uIFF1ZXN0YSBmdW56aW9uZSBtYW5pcG9sYSBsYSBzb3JnZW50ZSBkYXRpIHBlclxyXG4gICAqIGxhIGVxcC1zZWxlY3QgaW4gbW9kbyBkYSBlc2NsdWRlcmUgaSB2YWxvcmkgZGVsbCdlbnVtZXJhdG9yZSBjaGUgZmFubm8gcmlmZXJpbWVudG8gYWRcclxuICAgKiB1bmEgbGFyZ2hlenphIGRpIHNjaGVybW8gZ2nDoCBzZWxlemlvbmF0YS4gRXNlbXBpbzogcGVyIGdsaSBzY2hlcm1pIHBpY2NvbGkgKHNtKSBsJ3V0ZW50ZVxyXG4gICAqIHNlbGV6aW9uYSBsYSBjbGFzc2UgXCJjb2wtc20tNlwiLCBhbCBjaGFuZ2UgZGVsIHZhbG9yZSBxdWVzdG8gbWV0b2RvIHJpbXVvdmUgZGFsbGEgc2VsZWN0XHJcbiAgICogdHV0dGkgZ2xpIGFsdHJpIHZhbG9yaSBwZXIgbGEgZ3JhbmRlenphIGRpIHNjaGVybW8gc2VsZXppb25hdGEuXHJcbiAgICovXHJcbiAgb25Db2xTcGFuU2l6ZVNlbGVjdCgpIHtcclxuICAgIC8vIFJlY3VwZXJvIGwnYXJyYXkgZGVnbGkgb2dnZXR0aSBjaGlhdmUtdmFsb3JlIGNoZSByYXBwcmVzZXRhIGwnZW51bWVyYXRvcmVcclxuICAgIGxldCBjb2xTaXplQ2xhc3NFbnVtQXJyYXkgPSB0aGlzLmVudW1IZWxwZXIuZ2V0RW51bUFycmF5KFxyXG4gICAgICBDb2xTcGFuU2l6ZXNFbnVtLFxyXG4gICAgICBmYWxzZSxcclxuICAgICAgbnVsbFxyXG4gICAgKTtcclxuICAgIC8vIENvc3RydWlzY28gbCdhcnJheSBkZWxsZSBjbGFzc2kgc2VsZXppb25hdGUgZGFsbCd1dGVudGUgaW4gZm9ybWF0byBzdHJpbmdhXHJcbiAgICBsZXQgc2VsZWN0ZWREaW1lbnNpb25zQ29tcGlsYXppb25lOiBBcnJheTxzdHJpbmc+ID0gdGhpcy5maWVsZC5Db2xTcGFuU2l6ZXNcclxuICAgICAgPyB0aGlzLmZpZWxkLkNvbFNwYW5TaXplcy5tYXAoKGNvbCkgPT4gQ29sU3BhblNpemVzRW51bVtjb2xdKVxyXG4gICAgICA6IFtdO1xyXG4gICAgbGV0IHNlbGVjdGVkRGltZW5zaW9uc1Jpc3Bvc3RhOiBBcnJheTxzdHJpbmc+ID0gdGhpcy5maWVsZC5BbnN3ZXJTdHlsZS5Db2xTcGFuU2l6ZXNcclxuICAgICAgPyB0aGlzLmZpZWxkLkFuc3dlclN0eWxlLkNvbFNwYW5TaXplcy5tYXAoKGNvbCkgPT4gQ29sU3BhblNpemVzRW51bVtjb2xdKVxyXG4gICAgICA6IFtdO1xyXG4gICAgLy8gRmlsdHJvIGkgdmFsb3JpIG90dGVudXRpIGRhbGwnZW51bWVyYXRvcmUgcGVyIGVzY2x1ZGVyZSB0dXR0aSBpIHZhbG9yaSBwZXIgbGVcclxuICAgIC8vIGdyYW5kZXp6ZSBkaSBzY2hlcm1vIGdpw6Agc2VsZXppb25hdGVhZCBlc2NsdXNpb25lIGRlaSB2YWxvcmkgc2VsZXppb25hdGkuXHJcbiAgICB0aGlzLmF2YWlsYWJsZUNvbFNwYW5TaXplc0NvbXBpbGF6aW9uZSA9IGNvbFNpemVDbGFzc0VudW1BcnJheS5maWx0ZXIoXHJcbiAgICAgICh2YWx1ZTogeyBrZXk6IG51bWJlcjsgdmFsdWU6IHN0cmluZyB9KSA9PlxyXG4gICAgICAgICFzZWxlY3RlZERpbWVuc2lvbnNDb21waWxhemlvbmUuZmluZChcclxuICAgICAgICAgIChjb2wpID0+XHJcbiAgICAgICAgICAgIHZhbHVlLnZhbHVlLmluY2x1ZGVzKGNvbC5zdWJzdHJpbmcoNCwgNikpICYmIHZhbHVlLnZhbHVlICE9IGNvbFxyXG4gICAgICAgIClcclxuICAgICk7XHJcbiAgICB0aGlzLmF2YWlsYWJsZUNvbFNwYW5TaXplc1Jpc3Bvc3RhID0gY29sU2l6ZUNsYXNzRW51bUFycmF5LmZpbHRlcihcclxuICAgICAgKHZhbHVlOiB7IGtleTogbnVtYmVyOyB2YWx1ZTogc3RyaW5nIH0pID0+XHJcbiAgICAgICAgIXNlbGVjdGVkRGltZW5zaW9uc1Jpc3Bvc3RhLmZpbmQoXHJcbiAgICAgICAgICAoY29sKSA9PlxyXG4gICAgICAgICAgICB2YWx1ZS52YWx1ZS5pbmNsdWRlcyhjb2wuc3Vic3RyaW5nKDQsIDYpKSAmJiB2YWx1ZS52YWx1ZSAhPSBjb2xcclxuICAgICAgICApXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIGFsIGNhbWJpbyBkZWwgdGlwbyBkaSB2aXN1YWxpenphemlvbmUgc2NlbHRhIHBlciBpIGNhbXBpIGRpIHRpcG8gZWxlbmNvIGdlbmVyaWNvLlxyXG4gICAqIFNlIHZpZW5lIHNjZWx0YSBsYSB2aXN1YWxpenphemlvbmUgYWQgaW1tYWdpbmkgc3Z1b3RhIGxhIGxpc3RhIGRlbGxlIGNvcHBpZSBjaGlhdmUtdmFsb3JlIGluc2VyaXRlXHJcbiAgICogaW4gcHJlY2VkZW56YSwgYWx0cmltZW50aSBzdnVvdGEgbGEgbGlzdGEgZGVsbGUgaW1tYWdpbmkgY2FyaWNhdGUuXHJcbiAgICovXHJcbiAgb25QcmVzZW50YXRpb25Nb2RlQ2hhbmdlKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGQuUHJlc2VudGF0aW9uTW9kZSA9PSBMaXN0UHJlc2VudGF0aW9uRW51bVsnUmFkaW8gYnV0dG9uJ10pIHtcclxuICAgICAgdGhpcy5maWVsZC5Jc011bHRpQ2hvaWNoZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIGFsIHNhbHZhdGFnZ2lvIGRlZ2xpIGFsbGVnYXRpIHF1YW5kbyB2aWVuZSBjb25maWd1cmF0byB1biBjYW1wbyBkaSB0aXBvIFwiRWxlbmNvIGdlbmVyaWNvXCJcclxuICAgKiBjb24gaWwgdGlwbyBkaSB2aXN1YWxpenphemlvbmUgYWQgaW1tYWdpbmkuIEludGVyY2V0dGEgbCdlbGVuY28gYWdnaW9ybmF0byBkZWxsZSBpbW1hZ2luaSBjYXJpY2F0ZSBlIGxvXHJcbiAgICogbWVtb3JpenphIG5lbGwnb2dnZXR0byBmaWVsZCBjb3JyZW50ZS5cclxuICAgKiBAcGFyYW0gYXR0YWNobWVudHMgQXJyYXkgYWdnaW9ybmF0byBkZWdsaSBhbGxlZ2F0aSBjYXJpY2F0aS5cclxuICAgKi9cclxuICBjYXRjaEJ1dHRvbkltYWdlc0NoYW5nZShhdHRhY2htZW50czogQXJyYXk8SUF0dGFjaG1lbnREVE8+KSB7XHJcblxyXG4gICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VTZWxlY3RvckZpZWxkKS5BdHRhY2htZW50TGlzdCA9IGF0dGFjaG1lbnRzIGFzIEFycmF5PER5bkF0dGFjaG1lbnQ+O1xyXG5cclxuICAgICh0aGlzLmZpZWxkIGFzIEltYWdlU2VsZWN0b3JGaWVsZCkuQXR0YWNobWVudExpc3QuZm9yRWFjaCgoYXR0YWNobWVudDogRHluQXR0YWNobWVudCkgPT4ge1xyXG4gICAgICBpZiAodHlwZW9mIGF0dGFjaG1lbnQuSW1hZ2VIZWlnaHRQeCA9PSBcInVuZGVmaW5lZFwiKSB7XHJcblxyXG4gICAgICAgIHZhciBteUJhc2U2NCA9IFwiZGF0YTppbWFnZS9cIiArIGF0dGFjaG1lbnQuRmlsZUV4dGVuc2lvbi50b0xvd2VyQ2FzZSgpICsgXCI7YmFzZTY0LFwiICsgYXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NDtcclxuICAgICAgICB2YXIgaW1nID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgICAgIGltZy5zcmMgPSBteUJhc2U2NDtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBhdHRhY2htZW50LkltYWdlV2lkdGhQeCA9IGltZy53aWR0aDtcclxuICAgICAgICAgIGF0dGFjaG1lbnQuSW1hZ2VIZWlnaHRQeCA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICBhdHRhY2htZW50LkF0dGFjaG1lbnRGaWVsZFR5cGUgPSBBdHRhY2htZW50RmllbGRUeXBlRW51bS5FTEVOQ09fSU1NQUdJTkk7XHJcbiAgICAgICAgICBpZiAoc2VsZi5pbWFnZVNlbGVjdG9yQXR0YWNobWVudHMpIHsgc2VsZi5pbWFnZVNlbGVjdG9yQXR0YWNobWVudHMucmVsb2FkRGF0YSgpOyB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBjYXRjaEJ1dHRvbkltYWdlQ2hhbmdlKGF0dGFjaG1lbnRzOiBBcnJheTxJQXR0YWNobWVudERUTz4pIHtcclxuXHJcbiAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5EeW5BdHRhY2htZW50ID0gYXR0YWNobWVudHNbMV0gYXMgRHluQXR0YWNobWVudDtcclxuXHJcbiAgICBpZiAodGhpcy5maWVsZC5EeW5BdHRhY2htZW50ICE9IG51bGwgJiYgdHlwZW9mIHRoaXMuZmllbGQuRHluQXR0YWNobWVudC5JbWFnZUhlaWdodFB4ID09IFwidW5kZWZpbmVkXCIpIHtcclxuXHJcbiAgICAgIHZhciBteUJhc2U2NCA9IFwiZGF0YTppbWFnZS9cIiArIHRoaXMuZmllbGQuRHluQXR0YWNobWVudC5GaWxlRXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCkgKyBcIjtiYXNlNjQsXCIgKyB0aGlzLmZpZWxkLkR5bkF0dGFjaG1lbnQuRmlsZURhdGFCYXNlNjQ7XHJcbiAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICAgIGltZy5zcmMgPSBteUJhc2U2NDtcclxuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBzZWxmLmZpZWxkLkR5bkF0dGFjaG1lbnQuSW1hZ2VXaWR0aFB4ID0gaW1nLndpZHRoO1xyXG4gICAgICAgIHNlbGYuZmllbGQuRHluQXR0YWNobWVudC5JbWFnZUhlaWdodFB4ID0gaW1nLmhlaWdodDtcclxuICAgICAgICBzZWxmLmZpZWxkLkR5bkF0dGFjaG1lbnQuQXR0YWNobWVudEZpZWxkVHlwZSA9IEF0dGFjaG1lbnRGaWVsZFR5cGVFbnVtLklNTUFHSU5FO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgY2F0Y2hCdXR0b25JbWFnZVdpdGhNYXJrZXJzQ2hhbmdlKGF0dGFjaG1lbnRzOiBBcnJheTxJQXR0YWNobWVudERUTz4pIHtcclxuXHJcbiAgICAodGhpcy5maWVsZCBhcyBJbWFnZVdpdGhNYXJrZXJzRmllbGQpLkR5bkF0dGFjaG1lbnQgPSBhdHRhY2htZW50c1sxXSBhcyBEeW5BdHRhY2htZW50O1xyXG5cclxuICAgIGlmICh0aGlzLmZpZWxkLkR5bkF0dGFjaG1lbnQgIT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5maWVsZC5EeW5BdHRhY2htZW50LkltYWdlSGVpZ2h0UHggPT0gXCJ1bmRlZmluZWRcIikge1xyXG5cclxuICAgICAgdmFyIG15QmFzZTY0ID0gXCJkYXRhOmltYWdlL1wiICsgdGhpcy5maWVsZC5EeW5BdHRhY2htZW50LkZpbGVFeHRlbnNpb24udG9Mb3dlckNhc2UoKSArIFwiO2Jhc2U2NCxcIiArIHRoaXMuZmllbGQuRHluQXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NDtcclxuICAgICAgdmFyIGltZyA9IG5ldyBJbWFnZSgpO1xyXG5cclxuICAgICAgaW1nLnNyYyA9IG15QmFzZTY0O1xyXG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgIGltZy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHNlbGYuZmllbGQuRHluQXR0YWNobWVudC5JbWFnZVdpZHRoUHggPSBpbWcud2lkdGg7XHJcbiAgICAgICAgc2VsZi5maWVsZC5EeW5BdHRhY2htZW50LkltYWdlSGVpZ2h0UHggPSBpbWcuaGVpZ2h0O1xyXG4gICAgICAgIHNlbGYuZmllbGQuRHluQXR0YWNobWVudC5BdHRhY2htZW50RmllbGRUeXBlID0gQXR0YWNobWVudEZpZWxkVHlwZUVudW0uSU1NQUdJTkVfQ09OX01BUktFUlM7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hpYW1hdG8gYWwga2V5dXAgZGVnbGkgaW5wdXQgdGVzdHVhbGkgY2hlIHByZXZlZG9ubyBsJ2FnZ2l1bnRhIGRlbCB2YWxvcmUgaW5zZXJpdG8gaW4gdW4gYXJyYXkuXHJcbiAgICogU2UgbCd1dGVudGUgcHJlbWUgaWwgdGFzdG8gaW52aW8sIGluIGJhc2UgYWwgdGlwbyBkaSBjYW1wbyBjaGUgc3RhIGluc2VyZW5kby9tb2RpZmljYW5kbywgcXVlc3RvIG1ldG9kb1xyXG4gICAqIGFnZ2l1bmdlIGlsIHZhbG9yZSBpbnNlcml0byBkYWxsJ3V0ZW50ZSBuZWxsYSBsaXN0YSBkaSBzdHJpbmdoZSBjb3JyZXR0YSAoaW4gaW5wdXQgdmllbmUgcGFzc2F0byBpbCBub21lXHJcbiAgICogZGVsbGEgcHJvcHJpZXTDoCBpbiBjdWkgaW5zZXJpcmUgbGEgc3RyaW5nYSkuXHJcbiAgICogQHBhcmFtIGV2ZW50IEV2ZW50byBjaGUgcmFwcHJlc2VudGEgaWwga2V5dXAgZGVsbCd1dGVudGVcclxuICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIE5vbWUgZGVsbGEgcHJvcHJpZXTDoCBkZWwgZmllbGQgaW4gY3VpIGluc2VyaXJlIGxhIHN0cmluZ2EgZGlnaXRhdGEuXHJcbiAgICovXHJcbiAgb25NdWx0aVNlbGVjdElucHV0S2V5dXAoZXZlbnQsIHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICBpZiAoZXZlbnQuY29kZSA9PT0gXCJFbnRlclwiIHx8IGV2ZW50LmNvZGUgPT09IFwiTnVtcGFkRW50ZXJcIikge1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuZmllbGQuRmllbGRUeXBlKSB7XHJcbiAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtLkxvb2t1cDpcclxuICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW0uQWxsZWdhdG86XHJcbiAgICAgICAgICBpZiAoIXRoaXMuZmllbGRbcHJvcGVydHlOYW1lXSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpZWxkW3Byb3BlcnR5TmFtZV0gPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5maWVsZFtwcm9wZXJ0eU5hbWVdLnB1c2goZXZlbnQuY3VycmVudFRhcmdldC52YWx1ZSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJJbW1hZ2luZSBjb24gbWFya2Vyc1wiXTpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgRmllbGRUeXBlRW51bS5JbW1hZ2luZTpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkVsZW5jbyBnZW5lcmljb1wiXTpcclxuICAgICAgICAgIGlmICghdGhpcy5rZXlWYWx1ZU9iamVjdC5rZXkgfHwgIXRoaXMua2V5VmFsdWVPYmplY3QudmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCEodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycykge1xyXG4gICAgICAgICAgICAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycyA9IHt9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnNbdGhpcy5rZXlWYWx1ZU9iamVjdC5rZXldID1cclxuICAgICAgICAgICAgdGhpcy5rZXlWYWx1ZU9iamVjdC52YWx1ZTtcclxuICAgICAgICAgIHRoaXMua2V5VmFsdWVPYmplY3QgPSB7IGtleTogXCJcIiwgdmFsdWU6IFwiXCIgfTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQudmFsdWUgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoaWFtYXRvIHBlciBtb3N0cmFyZSBjb21lIGVsZW5jbyBsZSBvcHppb25pIGFnZ2l1bnRlIGluIHVuIGNhbXBvIGRpIHRpcG8gXCJFbGVuY28gZ2VuZXJpY29cIi5cclxuICAgKiBAcmV0dXJucyBSZXN0aXR1aXNjZSB1biBhcnJheSBkaSBvZ2dldHRpIGRlbCB0aXBvIHsga2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfSBjb24gaSB2YWxvcmkgaW5zZXJpdGkgZGFsbCd1dGVudGUuXHJcbiAgICovXHJcbiAgZ2V0RGljdGlvbmFyeUtleVZhbHVlKCkge1xyXG4gICAgaWYgKCh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzKSB7XHJcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cygodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycykubWFwKChrKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGtleTogayxcclxuICAgICAgICAgIHZhbHVlOiAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlyc1trXSxcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmltdW92ZXJlIHVuYSBvcHppb25lIGFnZ2l1bnRhIGFsIGNhbXBvIGRpIHRpcG8gXCJFbGVuY28gZ2VuZXJpY29cIlxyXG4gICAqIEBwYXJhbSBrZXkgTm9tZSBkZWxsYSBjaGlhdmUgZGEgcmltdW92ZXJlXHJcbiAgICovXHJcbiAgZGVsZXRlS2V5RnJvbURpY3Rpb25hcnkoa2V5OiBzdHJpbmcpIHtcclxuICAgIGRlbGV0ZSAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlyc1trZXldO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIG9wZW5Gb3JtdWxhRGlhbG9nXHJcbiAgb3BlbkZvcm11bGFEaWFsb2coKSB7XHJcbiAgICB0aGlzLmRpYWxvZ0Zvcm11bGFSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nRm9ybXVsYSwge1xyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICB3aWR0aDogXCI3NSVcIixcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIGZpZWxkczogdGhpcy5hdmFpbGFibGVGaWVsZHMsXHJcbiAgICAgICAgZm9ybXVsYTogdGhpcy5maWVsZC5Gb3JtdWxhLFxyXG4gICAgICAgIGZvcm11bGFPYmplY3Q6IHRoaXMuZm9ybXVsYU9iamVjdFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRpYWxvZ0Zvcm11bGFSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLmZpZWxkLkZvcm11bGEgPSByZXN1bHQuZm9ybXVsYS50b1N0cmluZygpID09IFwiXCIgPyBudWxsIDogcmVzdWx0LmZvcm11bGEudG9TdHJpbmcoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gb3BlbkZvcm11bGFEaWFsb2dcclxuXHJcbiAgXHJcbiAgLy8jcmVnaW9uIGF2YW50aSBpbmRpZXRyb1xyXG4gIC8vIGF2YW50aUluZGlldHJvKHdoZXJlOiBzdHJpbmcpIHtcclxuICAvLyAgIHRoaXMuZGlhbG9nQXZhbnRpSW5kaWV0cm9SZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nQXZhbnRpSW5kaWV0cm8sIHtcclxuICAvLyAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcclxuICAvLyAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgLy8gICAgIHdpZHRoOiBcIjc1JVwiLFxyXG4gIC8vICAgICBkYXRhOiB7XHJcbiAgLy8gICAgICAgd2hlcmU6IHdoZXJlXHJcbiAgLy8gICAgIH0sXHJcbiAgLy8gICB9KTtcclxuICAvLyAgIHRoaXMuZGlhbG9nQXZhbnRpSW5kaWV0cm9SZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gIC8vICAgICBjb25zb2xlLmxvZyhyZXN1bHQpXHJcbiAgLy8gICAgIGlmIChyZXN1bHQ/LmFjdGlvbiA9PT0gJ3NhdmUnKSB7XHJcbiAgLy8gICAgICAgLy8gY29uc29sZS5sb2coYEhhaSBzY2VsdG8gc2FsdmEgKCR7cmVzdWx0LndoZXJlfSlgKTtcclxuICAvLyAgICAgICBpZih3aGVyZSA9PSBcImF2YW50aVwiKXtcclxuICAvLyAgICAgICAgIHRoaXMuc2F2ZUFuZEV4aXRBZGRGaWVsZCh0cnVlLCAxKTtcclxuICAvLyAgICAgICB9IGVsc2UgaWYgKHdoZXJlID09IFwiaW5kaWV0cm9cIil7XHJcbiAgLy8gICAgICAgICB0aGlzLnNhdmVBbmRFeGl0QWRkRmllbGQodHJ1ZSwgLTEpO1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfVxyXG4gIC8vICAgICBpZiAocmVzdWx0Py5hY3Rpb24gPT09ICdub3NhdmUnKSB7XHJcbiAgLy8gICAgICAgLy8gY29uc29sZS5sb2coYEhhaSBzY2VsdG8gdmlhIHNlbnphIHNhbHZhcmUgKCR7cmVzdWx0LndoZXJlfSlgKTtcclxuICAvLyAgICAgICBpZih3aGVyZSA9PSBcImF2YW50aVwiKXtcclxuICAvLyAgICAgICAgIHRoaXMuc2F2ZUFuZEV4aXRBZGRGaWVsZChmYWxzZSwgMSk7XHJcbiAgLy8gICAgICAgfSBlbHNlIGlmICh3aGVyZSA9PSBcImluZGlldHJvXCIpe1xyXG4gIC8vICAgICAgICAgdGhpcy5zYXZlQW5kRXhpdEFkZEZpZWxkKGZhbHNlLCAtMSk7XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9KTtcclxuICAvLyB9XHJcbiAgXHJcbiAgLy8gQ2xvc2VTYXZlKCkge1xyXG4gIC8vICAgdGhpcy5kaWFsb2dBdmFudGlJbmRpZXRyb1JlZi5jbG9zZSh7IGFjdGlvbjogJ3NhdmUnIH0pO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gQ2xvc2UoKSB7XHJcbiAgLy8gICB0aGlzLmRpYWxvZ0F2YW50aUluZGlldHJvUmVmLmNsb3NlKHsgYWN0aW9uOiAnbm9zYXZlJ30pO1xyXG4gIC8vIH1cclxuICAvLyNlbmRyZWdpb24gYW5hbnRpXHJcblxyXG4gIC8vI3JlZ2lvbiBvcGVuVmlzaWJsZUlmRGlhbG9nXHJcbiAgb3BlblZpc2libGVJZkRpYWxvZygpIHtcclxuICAgIHRoaXMuZGlhbG9nVmlzaWJsZUlmUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0Zvcm11bGEsIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgd2lkdGg6IFwiNzUlXCIsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBmaWVsZHM6IHRoaXMuYXZhaWxhYmxlRmllbGRzLFxyXG4gICAgICAgIGZvcm11bGE6IHRoaXMuZmllbGQuVmlzaWJsZUlmLFxyXG4gICAgICAgIGZvcm11bGFPYmplY3Q6IHRoaXMuZm9ybXVsYU9iamVjdFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRpYWxvZ1Zpc2libGVJZlJlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHRoaXMuZmllbGQuVmlzaWJsZUlmID0gcmVzdWx0LmZvcm11bGEudG9TdHJpbmcoKSA9PSBcIlwiID8gbnVsbCA6IHJlc3VsdC5mb3JtdWxhLnRvU3RyaW5nKCk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9wZW5WaXNpYmxlSWZEaWFsb2dcclxuXHJcbiAgLy8jcmVnaW9uIG9wZW5SZWFkT25seUlmRGlhbG9nXHJcbiAgb3BlblJlYWRPbmx5SWZEaWFsb2coKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1JlYWRPbmx5SWZSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nRm9ybXVsYSwge1xyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICB3aWR0aDogXCI3NSVcIixcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIGZpZWxkczogdGhpcy5hdmFpbGFibGVGaWVsZHMsXHJcbiAgICAgICAgZm9ybXVsYTogdGhpcy5maWVsZC5SZWFkb25seUlmLFxyXG4gICAgICAgIGZvcm11bGFPYmplY3Q6IHRoaXMuZm9ybXVsYU9iamVjdFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRpYWxvZ1JlYWRPbmx5SWZSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLmZpZWxkLlJlYWRvbmx5SWYgPSByZXN1bHQuZm9ybXVsYS50b1N0cmluZygpID09IFwiXCIgPyBudWxsIDogcmVzdWx0LmZvcm11bGEudG9TdHJpbmcoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gb3BlblJlYWRPbmx5SWZEaWFsb2dcclxuXHJcbiAgLy8jcmVnaW9uIG9wZW5BbnN3ZXJTdHlsZVZpc2libGVJZkRpYWxvZ1xyXG4gIG9wZW5BbnN3ZXJTdHlsZVZpc2libGVJZkRpYWxvZygpIHtcclxuICAgIHRoaXMuZGlhbG9nVmlzaWJsZUlmUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0Zvcm11bGEsIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgd2lkdGg6IFwiNzUlXCIsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBmaWVsZHM6IHRoaXMuYXZhaWxhYmxlRmllbGRzLFxyXG4gICAgICAgIGZvcm11bGE6IHRoaXMuZmllbGQuQW5zd2VyU3R5bGUuVmlzaWJsZUlmLFxyXG4gICAgICAgIGZvcm11bGFPYmplY3Q6IHRoaXMuZm9ybXVsYU9iamVjdFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRpYWxvZ1Zpc2libGVJZlJlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHRoaXMuZmllbGQuQW5zd2VyU3R5bGUuVmlzaWJsZUlmID0gcmVzdWx0LmZvcm11bGEudG9TdHJpbmcoKSA9PSBcIlwiID8gbnVsbCA6IHJlc3VsdC5mb3JtdWxhLnRvU3RyaW5nKCk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9wZW5BbnN3ZXJTdHlsZVZpc2libGVJZkRpYWxvZ1xyXG5cclxuICBzdHJpbmdTYW5pdGl6ZXIodmFsdWUpIHtcclxuICAgIGlmICghVXRpbGl0eUhlbHBlclNlcnZpY2Uuc3RyaW5nQ2hlY2tQYXJlbnRlc2lzKHZhbHVlKSkge1xyXG4gICAgICAvLyBhbGVydChcImVycm9yZSFcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gZGlzYWJsZVNhdmVGaWVsZFxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZGlzYWJpbGl0YXJlIGlsIHB1bHNhbnRlIHBlciBzYWx2YXJlIGlsIGNhbXBvIGluc2VyaXRvL21vZGlmaWNhdG8uXHJcbiAgICogQHJldHVybnMgUmVzdGl0dWlzY2UgdW4gYm9vbGVhbm8sIHNlIHRydWUgaWwgc2FsdmF0YWdnaW8gdmllbmUgZGlzYWJpbGl0YXRvLlxyXG4gICAqL1xyXG4gIGRpc2FibGVTYXZlRmllbGQoKTogYm9vbGVhbiB7XHJcblxyXG4gICAgaWYgKHRoaXMuZmllbGRGb3JtR3JvdXAuaW52YWxpZCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuZmllbGQuRmllbGRUeXBlKSB7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkVsZW5jbyBnZW5lcmljb1wiXTpcclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLkZvcm11bGEgIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuRm9ybXVsYSAhPSBcIlwiXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpZiAoISh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzKSB7XHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzID0ge307XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVTdHJpbmcgIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVTdHJpbmcgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlU3RyaW5nICE9IFwiXCIpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICEodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycyB8fFxyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnMubGVuZ3RoID09PSAwXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkVsZW5jbyBpbW1hZ2luaVwiXTpcclxuXHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICEodGhpcy5maWVsZCBhcyBJbWFnZVNlbGVjdG9yRmllbGQpLkF0dGFjaG1lbnRMaXN0IHx8XHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZVNlbGVjdG9yRmllbGQpLkF0dGFjaG1lbnRMaXN0Lmxlbmd0aCA9PT0gMCB8fFxyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VTZWxlY3RvckZpZWxkKS5BdHRhY2htZW50TGlzdC5maW5kKFxyXG4gICAgICAgICAgICAoaSkgPT4gKGkuQnV0dG9uS2V5ID09IG51bGwgfHwgaS5CdXR0b25LZXkgPT09IFwidW5kZWZpbmVkXCIgfHwgaS5CdXR0b25LZXkgPT0gJycpIHx8IChpLkJ1dHRvblZhbHVlID09IG51bGwgfHwgaS5CdXR0b25WYWx1ZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBpLkJ1dHRvblZhbHVlID09ICcnKVxyXG4gICAgICAgICAgKSAhPSBudWxsXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bS5Mb29rdXA6XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICEodGhpcy5maWVsZCBhcyBMb29rdXBGaWVsZCkuRmllbGROYW1lcyB8fFxyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgTG9va3VwRmllbGQpLkZpZWxkTmFtZXMubGVuZ3RoID09PSAwXHJcbiAgICAgICAgKTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBkaXNhYmxlU2F2ZUZpZWxkXHJcblxyXG4gIC8vI3JlZ2lvbiBzYXZlQW5kRXhpdEFkZEZpZWxkXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzYWx2YXJlIGlsIGNhbXBvIGluc2VyaXRvL21vZGlmaWNhdG8uXHJcbiAgICogU2Ugw6ggc3RhdG8gaW5zZXJpdG8gdW4gZmllbGQgY29uIGxhIHN0ZXNzYSBsYWJlbCB2aWVuZSBnZW5lcmF0byB1biBlcnJvcmUgKGxlIGxhYmVsIGRldm9ubyBlc3NlcmUgdW5pdm9jaGUpLlxyXG4gICAqIFVuYSB2b2x0YSBhZ2dpdW50by9hZ2dpb3JuYXRvIGlsIGNhbXBvIG5lbGwnZWxlbmNvIGRlaSBGaWVsZCBkZWxsYSBGb3JtIGNoaXVkZSBpbCBkaWFsb2cgZSByaWNhcmljYSBsYSB0YWJlbGxhXHJcbiAgICogY2hlIG1vc3RyYSBsJ2VsZW5jbyBkZWkgY2FtcGkgYWdnaXVudGkgYWxsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHNhdmVBbmRFeGl0QWRkRmllbGQoc2F2ZTogYm9vbGVhbiwgbmV4dFJlbGF0aXZlSW5kZXg6IG51bWJlciA9IDApIHtcclxuICAgIHRoaXMuc2V0UmVzaXplZEltYWdlc0hlaWdodFB4KCk7XHJcbiAgICB0aGlzLnNldEZpZWxkT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgICBpZiAodGhpcy5pbWFnZVNlbGVjdG9yQXR0YWNobWVudHMpIHsgdGhpcy5pbWFnZVNlbGVjdG9yQXR0YWNobWVudHMucmVsb2FkRGF0YSgpOyB9XHJcbiAgICBpZiAoc2F2ZSkge1xyXG5cclxuICAgICAgdGhpcy5maWVsZC5OYW1lID0gdGhpcy5maWVsZC5MYWJlbDtcclxuICAgICAgLy8gcmV0cm9jb21wYXRpYmlsaXTDoCBjb24gdmFsdWVwYWlycyBwZXIgRWxlbmNvIEdlbmVyaWNvXHJcbiAgICAgIGlmICh0aGlzLmZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGdlbmVyaWNvXCJdKSB7XHJcbiAgICAgICAgaWYgKCgodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuRm9ybXVsYSAmJiAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuRm9ybXVsYSAhPSBcIlwiKSB8fCAoKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlU3RyaW5nICYmICh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVN0cmluZyAhPSBcIlwiKSkge1xyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnMgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5maWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVtcIkVsZW5jbyBpbW1hZ2luaVwiXSkge1xyXG4gICAgICAgIGlmICgoKHRoaXMuZmllbGQgYXMgSW1hZ2VTZWxlY3RvckZpZWxkKS5BdHRhY2htZW50TGlzdC5sZW5ndGggPiAwKSkge1xyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VTZWxlY3RvckZpZWxkKS5BdHRhY2htZW50TGlzdC5mb3JFYWNoKChhdHRhY2htZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGF0dGFjaG1lbnQuUmVzaXplZEltYWdlSGVpZ2h0UHggPSAodGhpcy5maWVsZCBhcyBJbWFnZVNlbGVjdG9yRmllbGQpLlJlc2l6ZWRJbWFnZXNIZWlnaHRQeDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5maWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bS5JbW1hZ2luZSkge1xyXG4gICAgICAgIGlmICgoKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuRHluQXR0YWNobWVudCAhPSBudWxsKSkge1xyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuRHluQXR0YWNobWVudC5SZXNpemVkSW1hZ2VIZWlnaHRQeCA9ICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLlJlc2l6ZWRJbWFnZXNIZWlnaHRQeDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bXCJJbW1hZ2luZSBjb24gbWFya2Vyc1wiXSkge1xyXG4gICAgICAgIGlmICgoKHRoaXMuZmllbGQgYXMgSW1hZ2VXaXRoTWFya2Vyc0ZpZWxkKS5EeW5BdHRhY2htZW50ICE9IG51bGwpKSB7XHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZVdpdGhNYXJrZXJzRmllbGQpLkR5bkF0dGFjaG1lbnQuUmVzaXplZEltYWdlSGVpZ2h0UHggPSAodGhpcy5maWVsZCBhcyBJbWFnZVdpdGhNYXJrZXJzRmllbGQpLlJlc2l6ZWRJbWFnZXNIZWlnaHRQeDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bXCJCb3R0b25lIGF6aW9uZVwiXSkge1xyXG4gICAgICAgIGlmICgoKHRoaXMuZmllbGQgYXMgQWN0aW9uQnV0dG9uRmllbGQpLmZvcm11bGFzVGVtcCAhPSBudWxsKSkge1xyXG5cclxuICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEFjdGlvbkJ1dHRvbkZpZWxkKS5mb3JtdWxhcyA9IG5ldyBBcnJheTxLZXlUeXBlVmFsdWU+KCk7XHJcblxyXG4gICAgICAgICAgdmFyIGZvcm11bGFzID0gKHRoaXMuZmllbGQgYXMgQWN0aW9uQnV0dG9uRmllbGQpLmZvcm11bGFzVGVtcDtcclxuICAgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZm9ybXVsYXMpO1xyXG5cclxuICAgICAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNBbkFjdGlvbktleShrZXksIHRoaXMuZmllbGQsIGZvcm11bGFzKSkgeyByZXR1cm47IH1cclxuICAgICAgICAgICAgICB2YXIga3R2OiBLZXlUeXBlVmFsdWUgPSBuZXcgS2V5VHlwZVZhbHVlKCk7XHJcbiAgICAgICAgICAgICAga3R2LmtleSA9IGtleTtcclxuICAgICAgICAgICAgICBrdHYudG9vbHRpcCA9IGZvcm11bGFzW2tleV0udG9vbHRpcDtcclxuICAgICAgICAgICAgICBrdHYudHlwZSA9IGZvcm11bGFzW2tleV0udHlwZTtcclxuICAgICAgICAgICAgICBrdHYudmFsdWUgPSBmb3JtdWxhc1trZXldLnZhbHVlO1xyXG4gICAgICAgICAgICAgIC8qKiBwZXIgY2FtcGkgY29uIHZhbG9yaSB2aW5jb2xhdGkgYSB1bmEgbGlzdGEsIHBvcnRvIGRpZXRybyBzaWEgaWwgdmFsb3JlIHNlbGV6aW9uYXRvIGNoZSBxdWVsbGkgYW1taXNzaWJpbGkgKi9cclxuICAgICAgICAgICAgICBrdHYuYWxsb3dlZFZhbHVlcyA9IGZvcm11bGFzW2tleV0uYWxsb3dlZFZhbHVlcztcclxuICAgICAgICAgICAgICBrdHYuc2VsZWN0ZWRBbGxvd2VkVmFsdWUgPSBmb3JtdWxhc1trZXldLnNlbGVjdGVkQWxsb3dlZFZhbHVlO1xyXG5cclxuICAgICAgICAgICAgICAodGhpcy5maWVsZCBhcyBBY3Rpb25CdXR0b25GaWVsZCkuZm9ybXVsYXMucHVzaChrdHYpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0Q29kZVRvRXh0cmFGaWVsZHMoKTtcclxuXHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2FkZC1mb3JtLWZpZWxkIHNhdmUnLCB0aGlzLmZpZWxkKVxyXG4gICAgICBsZXQgb3V0ID0ge2ZpZWxkOiB0aGlzLmZpZWxkLCByZW9wZW46IG5leHRSZWxhdGl2ZUluZGV4fVxyXG4gICAgICB0aGlzLnNhdmVGaWVsZEV2ZW50LmVtaXQob3V0KTtcclxuICAgICAgXHJcbiAgICAgIFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IG91dCA9IHtmaWVsZDogbnVsbCwgcmVvcGVuOiBuZXh0UmVsYXRpdmVJbmRleH1cclxuICAgICAgdGhpcy5zYXZlRmllbGRFdmVudC5lbWl0KG91dCk7XHJcbiAgICAgIFxyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gc2F2ZUFuZEV4aXRBZGRGaWVsZFxyXG5cclxuICBpc0FuQWN0aW9uS2V5KGtleSwgZmllbGQ6IEFjdGlvbkJ1dHRvbkZpZWxkLCBmb3JtdWxhczogQXJyYXk8YW55Pikge1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImlzQW5BY3Rpb25LZXkgLSBrZXlcIiwga2V5KTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJpc0FuQWN0aW9uS2V5IC0gZmllbGRcIiwgZmllbGQpO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImlzQW5BY3Rpb25LZXkgLSBmb3JtdWxhc1wiLCBmb3JtdWxhcyk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICAgIC8qdmFyIGNvZGUgPSBmaWVsZC5CdXR0b25Db2RlO1xyXG4gICAgdmFyIGVscyA9IGZvcm11bGFzW2NvZGVdO1xyXG4gICAgcmV0dXJuIChPYmplY3Qua2V5cyhlbHMpLmZpbmQoeCA9PiB4ID09IGtleSkgIT0gbnVsbCk7Ki9cclxuICB9XHJcblxyXG4gIHNldENvZGVUb0V4dHJhRmllbGRzKCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybS5GbGRFeHRyYUNvbmZpZ1ZhbHVlcyAhPSBudWxsICYmIHRoaXMuZm9ybS5GbGRFeHRyYUNvbmZpZ1ZhbHVlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5GbGRFeHRyYUNvbmZpZ1ZhbHVlcy5maWx0ZXIoeCA9PiB4LkZpZWxkQ29uZmlnUGFyZW50RmllbGRDb2RlID09PSB1bmRlZmluZWQpLmZvckVhY2goKHVmaWVsZHMpID0+IHtcclxuICAgICAgICB1ZmllbGRzLkZpZWxkQ29uZmlnUGFyZW50RmllbGRDb2RlID0gdGhpcy5maWVsZC5OYW1lO1xyXG4gICAgICAgIGlmICh0eXBlb2YgdWZpZWxkcy5GaWVsZENvbmZpZ1ZhbHVlID09IFwiYm9vbGVhblwiKSB7IHVmaWVsZHMuRmllbGRDb25maWdWYWx1ZSA9IHVmaWVsZHMuRmllbGRDb25maWdWYWx1ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiOyB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZm9ybS5PYmplY3RGbGRFeHRyYUNvbmZpZ1ZhbHVlcyAhPSBudWxsICYmIHRoaXMuZm9ybS5PYmplY3RGbGRFeHRyYUNvbmZpZ1ZhbHVlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5PYmplY3RGbGRFeHRyYUNvbmZpZ1ZhbHVlcy5maWx0ZXIoeCA9PiB4LkZpZWxkQ29uZmlnUGFyZW50RmllbGRDb2RlID09PSB1bmRlZmluZWQpLmZvckVhY2goKHVmaWVsZHMpID0+IHtcclxuICAgICAgICB1ZmllbGRzLkZpZWxkQ29uZmlnUGFyZW50RmllbGRDb2RlID0gdGhpcy5maWVsZC5OYW1lO1xyXG4gICAgICAgIGlmICh0eXBlb2YgdWZpZWxkcy5GaWVsZENvbmZpZ1ZhbHVlID09IFwiYm9vbGVhblwiKSB7IHVmaWVsZHMuRmllbGRDb25maWdWYWx1ZSA9IHVmaWVsZHMuRmllbGRDb25maWdWYWx1ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiOyB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIHJlc3RvcmVCYXNlRmllbGRQcm9wZXJ0aWVzXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaXByaXN0aW5hcmUgbCdvZ2dldHRvIGZpZWxkIGFsIGNhbWJpbyBkZWwgdGlwbyBzZWxlemlvbmF0by5cclxuICAgKiBMYXNjaWEgdmFsb3JpenphdGUgc29sbyBsZSBwcm9wcmlldMOgIGRlbGwnb2dnZXR0byBCYXNlRmllbGQgY29tdW5lIGEgdHV0dGkgaSB0aXBpIGRpIGNhbXBvLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVzdG9yZUJhc2VGaWVsZFByb3BlcnRpZXMoKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZCkge1xyXG4gICAgICBjb25zdCB0bXBCYXNlRmllbGQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZmllbGQpKTtcclxuICAgICAgdGhpcy5maWVsZCA9IG5ldyBCYXNlRmllbGQoKTtcclxuICAgICAgdGhpcy5maWVsZC5MYWJlbCA9IHRtcEJhc2VGaWVsZC5MYWJlbDtcclxuICAgICAgdGhpcy5maWVsZC5EZXNjcmlwdGlvbiA9IHRtcEJhc2VGaWVsZC5EZXNjcmlwdGlvbjtcclxuICAgICAgdGhpcy5maWVsZC5SZXF1aXJlZCA9IHRtcEJhc2VGaWVsZC5SZXF1aXJlZDtcclxuICAgICAgdGhpcy5maWVsZC5GaWVsZFR5cGUgPSB0bXBCYXNlRmllbGQuRmllbGRUeXBlO1xyXG4gICAgICB0aGlzLmZpZWxkLkZvcm11bGEgPSB0bXBCYXNlRmllbGQuRm9ybXVsYTtcclxuICAgICAgdGhpcy5maWVsZC5Db2xTcGFuU2l6ZXMgPSB0bXBCYXNlRmllbGQuQ29sU3BhblNpemVzO1xyXG4gICAgICB0aGlzLmZpZWxkLkluTGlzdFZpZXcgPSB0bXBCYXNlRmllbGQuSW5MaXN0VmlldztcclxuICAgICAgdGhpcy5maWVsZC5JbnZpc2liaWxpdHkgPSB0bXBCYXNlRmllbGQuSW52aXNpYmlsaXR5O1xyXG4gICAgICB0aGlzLmZpZWxkLlRvb2x0aXAgPSB0bXBCYXNlRmllbGQuVG9vbHRpcDtcclxuICAgICAgdGhpcy5maWVsZC5SZWFkb25seSA9IHRtcEJhc2VGaWVsZC5SZWFkb25seTtcclxuICAgICAgdGhpcy5maWVsZC5GaWVsZEdyb3VwID0gdG1wQmFzZUZpZWxkLkZpZWxkR3JvdXA7XHJcbiAgICAgIHRoaXMuZmllbGQuVmlzaWJsZUlmID0gdG1wQmFzZUZpZWxkLlZpc2libGVJZjtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jcmVnaW9uIHJlc3RvcmVCYXNlRmllbGRQcm9wZXJ0aWVzXHJcblxyXG4gIGNvdW50VmFsdWVQYWlycyh2YWx1ZVBhaXJzKTogbnVtYmVyIHtcclxuICAgIGlmICh2YWx1ZVBhaXJzKSB7XHJcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh2YWx1ZVBhaXJzKS5sZW5ndGg7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBDb25maWd1cmVDb2x1bW5zXHJcbiAgY29uZmlndXJlQ29sdW1ucygpIHtcclxuXHJcbiAgICAvLyBMaXN0YSBHZW5lcmljYSBkaSBpbW1hZ2luaVxyXG4gICAgdGhpcy5jb25maWdDb2x1bW5MaXN0SW1hZ2VzID0gW107XHJcblxyXG4gICAgdGhpcy5jb25maWdDb2x1bW5MaXN0SW1hZ2VzLnB1c2goe1xyXG4gICAgICBrZXk6ICdhY3Rpb24nLCBkaXNwbGF5OiAnJywgdHlwZTogVHlwZUNvbHVtbi5NZW51QWN0aW9uLCBidXR0b25NZW51SWNvbjogJ21vcmVfdmVydCcsIHN0eWxlczogeyBmbGV4OiAnMCAwIDYlJyB9LFxyXG4gICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgeyBuYW1lOiAnRWxpbWluYScsIGljb246ICdkZWxldGUnLCBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMuZGVsZXRlTGlzdEltYWdlKGVsZW1lbnQsIGluZGV4LCBjb2wpIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogXCJTcG9zdGEgc3VcIixcclxuICAgICAgICAgIGljb246IFwiYXJyb3dfdXB3YXJkXCIsXHJcbiAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+XHJcbiAgICAgICAgICAgIHRoaXMubW92ZUVsZW1lbnQoZWxlbWVudCwgdHJ1ZSksXHJcbiAgICAgICAgICBkaXNhYmxlZDogKGVsZW1lbnQpID0+IHRoaXMuZmllbGQuQXR0YWNobWVudExpc3QuaW5kZXhPZihlbGVtZW50KSA9PT0gMCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6IFwiU3Bvc3RhIGdpw7lcIixcclxuICAgICAgICAgIGljb246IFwiYXJyb3dfZG93bndhcmRcIixcclxuICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT5cclxuICAgICAgICAgICAgdGhpcy5tb3ZlRWxlbWVudChlbGVtZW50LCBmYWxzZSksXHJcbiAgICAgICAgICBkaXNhYmxlZDogKGVsZW1lbnQpID0+XHJcbiAgICAgICAgICAgIHRoaXMuZmllbGQuQXR0YWNobWVudExpc3QuaW5kZXhPZihlbGVtZW50KSA+PSB0aGlzLmZpZWxkLkF0dGFjaG1lbnRMaXN0Lmxlbmd0aCAtIDEsXHJcbiAgICAgICAgfSxcclxuICAgICAgXVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jb25maWdDb2x1bW5MaXN0SW1hZ2VzLnB1c2goe1xyXG4gICAgICBrZXk6IFwiRmlsZURhdGFCYXNlNjRcIixcclxuICAgICAgZGlzcGxheTogXCJJbW1hZ2luZVwiLFxyXG4gICAgICB0eXBlOiBUeXBlQ29sdW1uLkV4dGVybmFsVGVtcGxhdGUsXHJcbiAgICAgIGV4dGVybmFsVGVtcGxhdGU6IHRoaXMuR2VuZXJpY0xpc3RJbWFnZXNJbWFnZVRlbXBsYXRlLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNvbmZpZ0NvbHVtbkxpc3RJbWFnZXMucHVzaCh7XHJcbiAgICAgIGtleTogXCJCdXR0b25LZXlcIixcclxuICAgICAgZGlzcGxheTogXCJDaGlhdmUqXCIsXHJcbiAgICAgIHR5cGU6IFR5cGVDb2x1bW4uRXh0ZXJuYWxUZW1wbGF0ZSxcclxuICAgICAgZXh0ZXJuYWxUZW1wbGF0ZTogdGhpcy5HZW5lcmljTGlzdEltYWdlc0tleVRlbXBsYXRlLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNvbmZpZ0NvbHVtbkxpc3RJbWFnZXMucHVzaCh7XHJcbiAgICAgIGtleTogXCJCdXR0b25WYWx1ZVwiLFxyXG4gICAgICBkaXNwbGF5OiBcIlZhbG9yZSpcIixcclxuICAgICAgdHlwZTogVHlwZUNvbHVtbi5FeHRlcm5hbFRlbXBsYXRlLFxyXG4gICAgICBleHRlcm5hbFRlbXBsYXRlOiB0aGlzLkdlbmVyaWNMaXN0SW1hZ2VzVmFsdWVUZW1wbGF0ZSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jb25maWdDb2x1bW5MaXN0SW1hZ2VzLnB1c2goe1xyXG4gICAgICBrZXk6IFwiSW1hZ2VXaWR0aFB4XCIsXHJcbiAgICAgIGRpc3BsYXk6IFwiTGFyZ2hlenphXCJcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jb25maWdDb2x1bW5MaXN0SW1hZ2VzLnB1c2goe1xyXG4gICAgICBrZXk6IFwiSW1hZ2VIZWlnaHRQeFwiLFxyXG4gICAgICBkaXNwbGF5OiBcIkFsdGV6emFcIlxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gQ29uZmlndXJlQ29sdW1uc1xyXG5cclxuICAvLyNyZWdpb24gbW92ZUVsZW1lbnRcclxuICBwcml2YXRlIG1vdmVFbGVtZW50KFxyXG4gICAgZWxlbWVudDogRHluQXR0YWNobWVudCxcclxuICAgIG1vdmVVcDogYm9vbGVhblxyXG4gICkge1xyXG4gICAgY29uc3Qgc3RhcnRpbmdJbmRleCA9IHRoaXMuZmllbGQuQXR0YWNobWVudExpc3QuaW5kZXhPZihlbGVtZW50KTtcclxuICAgIGNvbnN0IGVuZGluZ0luZGV4ID0gc3RhcnRpbmdJbmRleCArIChtb3ZlVXAgPyAtMSA6IDEpO1xyXG5cclxuICAgIHRoaXMuZmllbGQuQXR0YWNobWVudExpc3Quc3BsaWNlKHN0YXJ0aW5nSW5kZXgsIDEpO1xyXG4gICAgdGhpcy5maWVsZC5BdHRhY2htZW50TGlzdC5zcGxpY2UoZW5kaW5nSW5kZXgsIDAsIGVsZW1lbnQpO1xyXG5cclxuICAgIHRoaXMuc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKTtcclxuICAgIGlmICh0aGlzLmltYWdlU2VsZWN0b3JBdHRhY2htZW50cykgeyB0aGlzLmltYWdlU2VsZWN0b3JBdHRhY2htZW50cy5yZWxvYWREYXRhKCk7IH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG1vdmVFbGVtZW50XHJcblxyXG4gIC8vI3JlZ2lvbiBzZXRGaWVsZE9yZGluYWxQb3NpdGlvblxyXG4gIHByaXZhdGUgc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZC5BdHRhY2htZW50TGlzdCkge1xyXG4gICAgICB0aGlzLmZpZWxkLkF0dGFjaG1lbnRMaXN0LmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgZmllbGQuT3JkaW5hbFBvc2l0aW9uID0gdGhpcy5maWVsZC5BdHRhY2htZW50TGlzdC5pbmRleE9mKGZpZWxkKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBzZXRGaWVsZE9yZGluYWxQb3NpdGlvblxyXG5cclxuICBzZXRSZXNpemVkSW1hZ2VzSGVpZ2h0UHgoKSB7XHJcbiAgICB0aGlzLnJlc2l6ZWRJbWFnZXNIZWlnaHRQeCA9IHRoaXMuZmllbGQuUmVzaXplZEltYWdlc0hlaWdodFB4O1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlTGlzdEltYWdlKGVsOiBEeW5BdHRhY2htZW50LCBpOiBudW1iZXIsIGNvbDogbnVtYmVyKSB7XHJcbiAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5Db25maXJtKCdFbGltaW5hcmUgcXVlc3RhIGltbWFnaW5lPycsICgpID0+IHtcclxuICAgICAgdGhpcy5maWVsZC5BdHRhY2htZW50TGlzdC5zcGxpY2UoZWwub3JpZ2luYWxJbmRleCwgMSk7XHJcbiAgICAgIGlmICh0aGlzLmltYWdlU2VsZWN0b3JBdHRhY2htZW50cykgeyB0aGlzLmltYWdlU2VsZWN0b3JBdHRhY2htZW50cy5yZWxvYWREYXRhKCk7IH1cclxuXHJcbiAgICB9LCBmYWxzZSwgJ1JpY2hpZXN0YSBjb25mZXJtYScpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlSW1hZ2UoZWw6IER5bkF0dGFjaG1lbnQpIHtcclxuICAgIHRoaXMuZmllbGQuRHluQXR0YWNobWVudCA9IG51bGw7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gREIgR0VUVEVSXHJcbiAgb3BlbkRCR2V0dGVyKCkge1xyXG4gICAgaWYgKHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQgIT0gbnVsbCAmJiAhdGhpcy5RdWVyeUVkaXRvckNvbXBvbmVudC5pbnB1dFBhcmFtcy51c2VEeW5hbWljTW9kdWxlTW9jaykge1xyXG5cclxuICAgICAgdGhpcy5RdWVyeUVkaXRvckNvbXBvbmVudC5pbnB1dFBhcmFtcy5jb25maWcubW9kZSA9IFF1ZXJ5RWRpdG9yTW9kZUVudW0uQ09NUE9TRVI7XHJcbiAgICAgIHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQuaW5wdXRQYXJhbXMuY29uZmlnLmxvYWRRdWVyeVN0YXR1c2VzID0gdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZTtcclxuXHJcbiAgICAgIHRoaXMuZGlhbG9nUUVSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nUUUsIHtcclxuICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgICAgcGFuZWxDbGFzczogJ3F1ZXJ5LWVkaXRvci1tb2RhbCcsXHJcbiAgICAgICAgd2lkdGg6ICc5MCUnXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICB0aGlzLmh0dHBDbGllbnQuZ2V0KCcuL2Fzc2V0cy9tb2NrdXBzL21vY2tlZEZyb21RdWVyeUVkaXRvcl9RVUVSWV9XSVRIX1FVRVNUSU9OLnR4dCcsIHsgcmVzcG9uc2VUeXBlOiAndGV4dCcgfSlcclxuICAgICAgICAuc3Vic2NyaWJlKG1vY2tlZEZyb21RdWVyeUVkaXRvciA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRyZWF0RGF0YUZyb21RdWVyeUVkaXRvcihKU09OLnBhcnNlKG1vY2tlZEZyb21RdWVyeUVkaXRvcikuUGFyYW1zKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbG9zZVFFTW9kYWwoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1FFUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICBvbkV4dGVybmFsQ29tcG9uZW50T3V0KGV2OiBldmVudE91dCkge1xyXG4gICAgaWYgKGV2LkJlaGF2aW91cnMuaW5kZXhPZihcInNlbmQtb3V0XCIpICE9IC0xKSB7IHRoaXMub3V0LmVtaXQoZXYpOyB9XHJcbiAgICBpZiAoZXYuQmVoYXZpb3Vycy5pbmRleE9mKFwiY2xvc2UtbW9kYWxcIikgIT0gLTEpIHsgdGhpcy5jbG9zZVFFTW9kYWwoKTsgfVxyXG4gICAgaWYgKGV2LkJlaGF2aW91cnMuaW5kZXhPZihcInNhdmUtcXVlcnlcIikgIT0gLTEpIHtcclxuXHJcbiAgICAgIHRoaXMudHJlYXREYXRhRnJvbVF1ZXJ5RWRpdG9yKGV2LlBhcmFtcyk7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdHJlYXREYXRhRnJvbVF1ZXJ5RWRpdG9yKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSA9IGRhdGE7XHJcbiAgICB0aGlzLmNyZWF0ZUNvbHVtbktleXMoZGF0YSk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVDb2x1bW5LZXlzKGRhdGEpIHtcclxuICAgIGlmIChkYXRhID09IG51bGwgJiYgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSAhPSBudWxsKSB7IGRhdGEgPSB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlOyB9XHJcbiAgICBpZiAoZGF0YSAhPSBudWxsICYmIHR5cGVvZiBkYXRhICE9IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGRhdGEuc2VsZWN0ZWRGaWVsZHMgIT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICB0aGlzLmNvbHVtbktleXMgPSBuZXcgQXJyYXk8eyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PigpO1xyXG4gICAgICBkYXRhLnNlbGVjdGVkRmllbGRzLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY29sdW1uS2V5cy5wdXNoKHsga2V5OiBrZXkuRGF0YWJhc2VUYWJsZU5hbWUgKyBcIl9cIiArIGtleS5Qcm9wZXJ0eU5hbWUgKyBcIl9fXCIgKyBrZXkuQ3VycmVudFRyYW5zbGF0ZS5yZXBsYWNlKFwiIFwiLCBcIl9cIiksIHZhbHVlOiBrZXkuQ3VycmVudFRyYW5zbGF0ZSB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBEQiBHRVRURVJcclxuXHJcbiAgZ2V0QWxsTW9kdWxlcygpIHtcclxuICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPVxyXG4gICAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgUGFyYW1OYW1lOiBcIm9yZ2FpZFwiLFxyXG4gICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm0uT3JnYUlELFxyXG4gICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEFsbEZvcm1FbmRQb2ludCxcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgKHJlczogQXJyYXk8Rm9ybT4pID0+IHtcclxuICAgICAgICB0aGlzLmZvcm1zID0gcmVzO1xyXG4gICAgICAgIHRoaXMuZm9ybXMgPSB0aGlzLmZvcm1zLnNvcnQoKHVubywgZHVlKSA9PiB1bm8uTmFtZS5sb2NhbGVDb21wYXJlKGR1ZS5OYW1lKSk7XHJcblxyXG4gICAgICAgIHRoaXMuRE1GaWVsZCA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuRE1Nb2R1bGUgPT0gbnVsbCAmJiB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuRE1Nb2R1bGUgPSB0aGlzLmZvcm1zLmZpbmQoeCA9PiB4LkNvZGUgPT0gdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSk7XHJcbiAgICAgICAgICB0aGlzLkRNTW9kdWxlLkZpZWxkcyA9IEpTT04ucGFyc2UodGhpcy5ETU1vZHVsZS5Kc29uRmllbGRzKTtcclxuICAgICAgICAgIHRoaXMuRE1GaWVsZHMgPSBuZXcgQXJyYXk8eyBrZXk6IHN0cmluZyB9PigpO1xyXG4gICAgICAgICAgdGhpcy5ETU1vZHVsZS5GaWVsZHMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5ETUZpZWxkcy5wdXNoKHsga2V5OiBlbGVtZW50LlZhbHVlLk5hbWUgfSk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0aGlzLkRNRmllbGRzID0gdGhpcy5ETUZpZWxkcy5zb3J0KCh1bm8sIGR1ZSkgPT4gdW5vLmtleS5sb2NhbGVDb21wYXJlKGR1ZS5rZXkpKTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuRE1GaWVsZCA9IHRoaXMuRE1GaWVsZHMuZmluZCh4ID0+IHgua2V5ID09IHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnIpID0+IHsgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlRE1Nb2R1bGUoKSB7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwidGhpcy4uZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWVcIiwgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSk7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwidGhpcy5ETU1vZHVsZVwiLCB0aGlzLkRNTW9kdWxlKTtcclxuICAgIGlmICh0aGlzLkRNTW9kdWxlICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5ETU1vZHVsZS5GaWVsZHMgPSBKU09OLnBhcnNlKHRoaXMuRE1Nb2R1bGUuSnNvbkZpZWxkcyk7XHJcbiAgICAgIHRoaXMuRE1GaWVsZHMgPSBuZXcgQXJyYXk8eyBrZXk6IHN0cmluZyB9PigpO1xyXG4gICAgICB0aGlzLkRNTW9kdWxlLkZpZWxkcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgIHRoaXMuRE1GaWVsZHMucHVzaCh7IGtleTogZWxlbWVudC5WYWx1ZS5OYW1lIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUgPSB0aGlzLkRNTW9kdWxlLkNvZGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLkRNTW9kdWxlID0gbnVsbDtcclxuICAgICAgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSA9IG51bGw7XHJcbiAgICAgIHRoaXMuRE1GaWVsZCA9IG51bGw7XHJcbiAgICAgIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2UgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VETUZpZWxkKCkge1xyXG4gICAgaWYgKHRoaXMuRE1GaWVsZCAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2UgPSB0aGlzLkRNRmllbGQua2V5O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZURNQ29udGVzdHVhbGl6YXRpb24oKSB7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwib25DaGFuZ2VETUNvbnRlc3R1YWxpemF0aW9uKClcIiwgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb250ZXN0dWFsaXphdGlvbik7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VkQnV0dG9uRmllbGQoZmllbGQ6IEFjdGlvbkJ1dHRvbkZpZWxkKSB7XHJcbiAgICB0aGlzLmZpZWxkID0gZmllbGQ7XHJcbiAgfVxyXG5cclxuICBjb25maWd1cmVGaWVsZHNFeHRyYSgpIHtcclxuXHJcbiAgICB2YXIgdGhpc0ZpZWxkRXh0cmFDb25maWdWYWx1ZXM6IEFycmF5PEZpZWxkRXh0cmFWYWx1ZXM+ID0gdGhpcy5mb3JtLkZsZEV4dHJhQ29uZmlnVmFsdWVzID09IG51bGwgPyBudWxsIDogdGhpcy5mb3JtLkZsZEV4dHJhQ29uZmlnVmFsdWVzLmZpbHRlcih4ID0+IHguRmllbGRDb25maWdQYXJlbnRGaWVsZENvZGUgPT0gdGhpcy5maWVsZC5OYW1lKTtcclxuXHJcbiAgICBpZiAodGhpcy5maWVsZHNFeHRyYUNvbmZpZyAhPSBudWxsICYmIHRoaXMuZmllbGRzRXh0cmFDb25maWcubGVuZ3RoID4gMCAmJiB0aGlzLmZvcm0uT2JqZWN0RmxkRXh0cmFDb25maWdWYWx1ZXMgPT0gbnVsbCAmJiAodGhpc0ZpZWxkRXh0cmFDb25maWdWYWx1ZXMgPT0gbnVsbCB8fCB0aGlzRmllbGRFeHRyYUNvbmZpZ1ZhbHVlcy5sZW5ndGggPT0gMCkpIHtcclxuICAgICAgdGhpcy5mb3JtLk9iamVjdEZsZEV4dHJhQ29uZmlnVmFsdWVzID0gbmV3IEFycmF5PGFueT4oKTtcclxuICAgICAgdGhpc0ZpZWxkRXh0cmFDb25maWdWYWx1ZXMgPSBuZXcgQXJyYXk8RmllbGRFeHRyYVZhbHVlcz4oKTtcclxuICAgICAgdGhpcy5maWVsZHNFeHRyYUNvbmZpZy5mb3JFYWNoKChmaWVsZEV4dHJhQ29uZmlnKSA9PiB7XHJcblxyXG4gICAgICAgIHZhciBuZXdmaWVsZDogRmllbGRFeHRyYVZhbHVlcyA9IG5ldyBGaWVsZEV4dHJhVmFsdWVzKCk7XHJcbiAgICAgICAgbmV3ZmllbGQuRmllbGRDb25maWdDb2RlID0gZmllbGRFeHRyYUNvbmZpZy5GaWVsZENvbmZpZ0NvZGU7XHJcbiAgICAgICAgbmV3ZmllbGQuRmllbGRDb25maWdQYXJlbnRGaWVsZENvZGUgPSB0aGlzLmZpZWxkLk5hbWU7XHJcblxyXG4gICAgICAgIGlmIChmaWVsZEV4dHJhQ29uZmlnLkZpZWxkQ29uZmlnVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydCb29sZWFubyddKSB7XHJcbiAgICAgICAgICBuZXdmaWVsZC5GaWVsZENvbmZpZ1ZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmaWVsZEV4dHJhQ29uZmlnLkZpZWxkQ29uZmlnVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydDYW1wbyBkaSB0ZXN0byddKSB7XHJcbiAgICAgICAgICBuZXdmaWVsZC5GaWVsZENvbmZpZ1ZhbHVlID0gXCJcIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybS5PYmplY3RGbGRFeHRyYUNvbmZpZ1ZhbHVlcy5wdXNoKG5ld2ZpZWxkKTtcclxuICAgICAgICB0aGlzRmllbGRFeHRyYUNvbmZpZ1ZhbHVlcy5wdXNoKG5ld2ZpZWxkKTtcclxuXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZm9ybS5GbGRFeHRyYUNvbmZpZ1ZhbHVlcyA9PSBudWxsKSB7IHRoaXMuZm9ybS5GbGRFeHRyYUNvbmZpZ1ZhbHVlcyA9IG5ldyBBcnJheTxGaWVsZEV4dHJhVmFsdWVzPigpOyB9XHJcbiAgICAgIHRoaXNGaWVsZEV4dHJhQ29uZmlnVmFsdWVzLmZvckVhY2goKGVjdikgPT4ge1xyXG4gICAgICAgIHRoaXMuZm9ybS5GbGRFeHRyYUNvbmZpZ1ZhbHVlcy5wdXNoKGVjdik7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZpZWxkc0V4dHJhQ29uZmlnICE9IG51bGwgJiYgdGhpcy5maWVsZHNFeHRyYUNvbmZpZy5sZW5ndGggPiAwICYmIHRoaXMuZm9ybS5PYmplY3RGbGRFeHRyYUNvbmZpZ1ZhbHVlcyAhPSBudWxsICYmICh0aGlzLmZvcm0uRmxkRXh0cmFDb25maWdWYWx1ZXMgPT0gbnVsbCB8fCB0aGlzLmZvcm0uRmxkRXh0cmFDb25maWdWYWx1ZXMubGVuZ3RoID09IDApKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5PYmplY3RGbGRFeHRyYUNvbmZpZ1ZhbHVlcy5mb3JFYWNoKChleHRyYWZpZWxkKSA9PiB7XHJcbiAgICAgICAgdGhpcy5mb3JtLkZsZEV4dHJhQ29uZmlnVmFsdWVzLnB1c2goZXh0cmFmaWVsZCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubG9hZGVkRmllbGRFeHRyYSA9IHRydWU7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8IS0tIDxkaXYgY2xhc3M9XCJhZGQtZm9ybS1maWVsZCBiaWd3cmFwcGVyXCIgc3R5bGU9XCJtYXgtaGVpZ2h0OiAxMDB2aCAhaW1wb3J0YW50OyBvdmVyZmxvdy14OiBoaWRkZW47IG92ZXJmbG93LXk6IGF1dG87XCI+IC0tPlxyXG5cclxuPG1hdC1jYXJkIGNsYXNzPVwiYWRkLWZvcm0tZmllbGRcIj5cclxuICAgIDxtYXQtY2FyZC1oZWFkZXIgY2xhc3M9XCJ3LTEwMFwiPlxyXG4gICAgICAgIDxtYXQtY2FyZC10aXRsZSBjbGFzcz1cInctMTAwIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAgKm5nSWY9XCJpbmRleEZpZWxkICE9IG51bGwgJiYgaW5kZXhGaWVsZCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uLW5leHQgYmctZGFuZ2VyIHRleHQtd2hpdGUgbWUtM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVBbmRFeGl0QWRkRmllbGQoZmFsc2UsIC0xKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEFubnVsbGEgaW5kaWV0cm8gXHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbi1uZXh0IGJnLXN1Y2Nlc3MgdGV4dC13aGl0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVBbmRFeGl0QWRkRmllbGQodHJ1ZSwgLTEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgU2FsdmEgaW5kaWV0cm8gXHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHgtNSBhbGlnbi1jb250ZW50LWFyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiSW5kZXgge3tpbmRleEZpZWxkfX1cIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3tpbmRleEZpZWxkICE9IG51bGwgJiYgaW5kZXhGaWVsZCA+PSAwID8gXCJNb2RpZmljYVwiIDogXCJBZ2dpdW5naVwifX0gY2FtcG8gXHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgICpuZ0lmPVwiaW5kZXhGaWVsZCAhPSBudWxsICYmIGluZGV4RmllbGQgPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b24tbmV4dCBiZy1kYW5nZXIgdGV4dC13aGl0ZSBtZS0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZUFuZEV4aXRBZGRGaWVsZChmYWxzZSwgMSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpbmRleEZpZWxkID09IHRoaXMuZm9ybS5GaWVsZHMubGVuZ3RoIC0xID8gXCJBbm51bGxhIGVhZ2dpdW5naVwiIDogXCJBbm51bGxhIGF2YW50aVwifX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbi1uZXh0IGJnLXN1Y2Nlc3MgdGV4dC13aGl0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVBbmRFeGl0QWRkRmllbGQodHJ1ZSwgMSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpbmRleEZpZWxkID09IHRoaXMuZm9ybS5GaWVsZHMubGVuZ3RoIC0xID8gXCJTYWx2YSBlIGFnZ2l1bmdpXCIgOiBcIlNhbHZhIGF2YW50aVwifX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSB7e3RoaXMuZm9ybS5GaWVsZHMubGVuZ3RofX0gLS0+XHJcbiAgICAgICAgPC9tYXQtY2FyZC10aXRsZT5cclxuICAgIDwvbWF0LWNhcmQtaGVhZGVyPlxyXG5cclxuICAgIDxtYXQtY2FyZC1jb250ZW50PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkIGNvbnRhaW5lckNvbnRlbnQgXCI+XHJcbiAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIiBzdHlsZT1cImhlaWdodDogMTAwJTtcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIEFSRUEgUFJJTkNJUEFMRSAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZXFwLWRmb3JtLWFkZC1mb3JtLWZpZWxkLW1haW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBUSVBPIENBTVBPIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMiB0aXBvQ2FtcG9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyd0ZXh0LWRhbmdlcic6IGZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydGaWVsZFR5cGUnXS5zdGF0dXMgIT0gJ1ZBTElEJyAmJiBmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snRmllbGRUeXBlJ10udG91Y2hlZCB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXBvIGNhbXBvICpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxlcXAtc2VsZWN0IFtlbnVtRGF0YV09XCJGaWVsZFR5cGVFbnVtXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLkZpZWxkVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0NhbmNlbEJ1dHRvbl09XCJmYWxzZVwiIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25GaWVsZFR5cGVDaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ0ZpZWxkVHlwZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VudW1EYXRhVG9FeGNsdWRlXT1cImZpZWxkVHlwZXNUb0V4Y2x1ZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIFRJUE8gQ0FNUE8gLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIENPRElDRSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyd0ZXh0LWRhbmdlcic6IGZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydMYWJlbCddLnN0YXR1cyAhPSAnVkFMSUQnICYmIGZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydMYWJlbCddLnRvdWNoZWQgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kaWNlICpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJMYWJlbFwiIHJlcXVpcmVkIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuTGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCIgc3BlbGxjaGVjaz1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLkxhYmVsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdMYWJlbCcpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0xhYmVsJ10uZXJyb3JzPy5bJ3JlcXVpcmVkJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iYmxpZ2F0b3Jpb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTGFiZWwnXS5lcnJvcnM/LlsncGF0dGVybiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaSBwb3Nzb25vIGluc2VyaXJlIHNvbG8gbGV0dGVyZSBhLXpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0xhYmVsJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBDT0RJQ0UgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIERFU0NSSVpJT05FIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3RleHQtZGFuZ2VyJzogZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0Rlc2NyaXB0aW9uJ10uc3RhdHVzICE9ICdWQUxJRCcgJiYgZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0Rlc2NyaXB0aW9uJ10udG91Y2hlZCB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcml6aW9uZSAqXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cIkRlc2NyaXB0aW9uXCIgZm9ybUNvbnRyb2xOYW1lPVwiRGVzY3JpcHRpb25cIiByZXF1aXJlZCBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGQuRGVzY3JpcHRpb25cIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5EZXNjcmlwdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1lcnJvciAqbmdJZj1cIiFmaWVsZC5EZXNjcmlwdGlvbi52YWxpZCAmJiBmaWVsZC5Gb3JtRm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLkRlc2NyaXB0aW9uXS50b3VjaGVkXCI+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdEZXNjcmlwdGlvbicpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0Rlc2NyaXB0aW9uJ10uZXJyb3JzPy5bJ3JlcXVpcmVkJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iYmxpZ2F0b3Jpb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snRGVzY3JpcHRpb24nXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIERFU0NSSVpJT05FIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBTRVpJT05FIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiICpuZ0lmPVwiZm9ybUZpZWxkc0dyb3Vwc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3RleHQtZGFuZ2VyJzogZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0ZpZWxkR3JvdXAnXS5zdGF0dXMgIT0gJ1ZBTElEJyAmJiBmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snRmllbGRHcm91cCddLnRvdWNoZWQgfVwiPlNlemlvbmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGVxcC1zZWxlY3QgW2FycmF5RGF0YV09XCJmb3JtRmllbGRzR3JvdXBzXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLkZpZWxkR3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FycmF5S2V5UHJvcGVydHldPVwiJ05hbWUnXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCInTmFtZSdcIiBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidGaWVsZEdyb3VwJ1wiIHJlcXVpcmVkIFtpbmNsdWRlRnVsbE9iamVjdF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdGaWVsZEdyb3VwJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0ZpZWxkR3JvdXAnXS5lcnJvcnM/LlsncmVxdWlyZWQnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmJsaWdhdG9yaW9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gU0VaSU9ORSAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gT0JCTElHQVRPUklPIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMiAgYWxpZ24tc2VsZi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5SZXF1aXJlZFwiIGZvcm1Db250cm9sTmFtZT1cIlJlcXVpcmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JibGlnYXRvcmlvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBPQkJMSUdBVE9SSU8gLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIFJFQURPTkxZIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMiAgYWxpZ24tc2VsZi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5SZWFkb25seVwiIGZvcm1Db250cm9sTmFtZT1cIlJlYWRvbmx5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZE9ubHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPiAgICBcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTIgIGFsaWduLXNlbGYtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZE9ubHkgSWYgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiUmVhZG9ubHlJZlwiIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuUmVhZG9ubHlJZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlblJlYWRPbmx5SWZEaWFsb2coKVwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuUmVhZG9ubHlJZilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBSRUFET05MWSAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gQUdHUkVHQVpJT05JLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMiAgYWxpZ24tc2VsZi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGVxcC1zZWxlY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWdncmVnYXRpb25GaWVsZExvYWRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0FnZ3JlZ2F6aW9uaSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzTXVsdGlTZWxlY3RdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZW51bURhdGFdPVwiYWdncmVnYXRpb25GdW5jdGlvbkVudW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLkFnZ3JlZ2F0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIEFHR1JFR0FaSU9OSS0tPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gQVJFQSBQUklOQ0lQQUxFIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIEFSRUEgVEFCUyAtLT5cclxuICAgICAgICAgICAgICAgIDxtYXQtdGFiLWdyb3VwIGNsYXNzPVwiZXFwLWRmb3JtLWFkZC1mb3JtLWZpZWxkLXRhYnNcIiBtYXQtc3RyZXRjaC10YWJzPVwiZmFsc2VcIiBtYXQtYWxpZ24tdGFicz1cInN0YXJ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gU1RJTEUgQ09NUElMQVpJT05FIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiU3RpbGUgQ29tcGlsYXppb25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBMQVJHSEVaWkEgQ0FNUE8gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkxhcmdoZXp6YSBjYW1wbzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlcXAtc2VsZWN0IFthcnJheURhdGFdPVwiYXZhaWxhYmxlQ29sU3BhblNpemVzQ29tcGlsYXppb25lXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLkNvbFNwYW5TaXplc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcnJheUtleVByb3BlcnR5XT1cIidrZXknXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCIndmFsdWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJvbkNvbFNwYW5TaXplU2VsZWN0KClcIiBbaXNNdWx0aVNlbGVjdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidDb2xTcGFuU2l6ZXMnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luY2x1ZGVGdWxsT2JqZWN0XT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBMQVJHSEVaWkEgQ0FNUE8gLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gTEFCRUwgQ1NTIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD4gTGFiZWwgY3NzIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJMYWJlbHN0eWxlQ1NTXCIgZm9ybUNvbnRyb2xOYW1lPVwiTGFiZWxzdHlsZUNTU1wiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLkxhYmVsc3R5bGVDU1NcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5MYWJlbHN0eWxlQ1NTKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnTGFiZWxzdHlsZUNTUycpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydMYWJlbHN0eWxlQ1NTJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIExBQkVMIENTUyAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBGSUVMRCBDU1MgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBGaWVsZCBjc3MgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cIkZpZWxkc3R5bGVDU1NcIiBmb3JtQ29udHJvbE5hbWU9XCJGaWVsZHN0eWxlQ1NTXCIgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGQuRmllbGRzdHlsZUNTU1wiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLkZpZWxkc3R5bGVDU1MpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdGaWVsZHN0eWxlQ1NTJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0ZpZWxkc3R5bGVDU1MnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gRklFTEQgQ1NTIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIFZJU0lCTEUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTIgYWxpZ24tc2VsZi1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiKGZpZWxkLlZpc2libGVJZiAhPSBudWxsIHx8IGZpZWxkLlZpc2libGVJZiAhPSB1bmRlZmluZWQpICYmIGZpZWxkLlZpc2libGVJZiAhPSAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIgYWxpZ24tc2VsZi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5Jbkxpc3RWaWV3XCIgZm9ybUNvbnRyb2xOYW1lPVwiSW5MaXN0Vmlld1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBbZGlzYWJsZWRdPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0luTGlzdFZpZXcnXS5kaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlzaWJpbGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBWSVNJQkxFIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIElOVklTSUJJTEUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTIgYWxpZ24tc2VsZi1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZC5Jbkxpc3RWaWV3ICYmIChmaWVsZC5WaXNpYmxlSWYgPT0gbnVsbCB8fCBmaWVsZC5WaXNpYmxlSWYgPT0gdW5kZWZpbmVkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIgYWxpZ24tc2VsZi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlwbyBkaSBpbnZpc2liaWxpdMOgIGRlbCBjYW1wb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXFwLXNlbGVjdCBbZW51bURhdGFdPVwiZmllbGRJbnZpc2liaWxpdHlFbnVtXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLkludmlzaWJpbGl0eVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInSW52aXNpYmlsaXR5J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmNsdWRlRnVsbE9iamVjdF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXFwLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gSU5WSVNJQkxFIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIFZJU0lCTEUgSUYgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBWaXNpYmxlSWYgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cIlZpc2libGVJZlwiIGZvcm1Db250cm9sTmFtZT1cIlZpc2libGVJZlwiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLlZpc2libGVJZlwiIChjbGljayk9XCJvcGVuVmlzaWJsZUlmRGlhbG9nKClcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5WaXNpYmxlSWYpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdWaXNpYmxlSWYnKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snVmlzaWJsZUlmJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJWaXNpYmxlSWZcIiBmb3JtQ29udHJvbE5hbWU9XCJWaXNpYmxlSWZcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLlZpc2libGVJZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiVmlzaWJsZUlmQXV0b2NvbXBsZXRlXCIgKGtleXVwKT1cInNldFZpc2libGVJZkF1dG9jb21wbGV0ZU9wdGlvbnMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJzZXRWaXNpYmxlSWZBdXRvY29tcGxldGVPcHRpb25zKG51bGwpXCIgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5WaXNpYmxlSWYpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI1Zpc2libGVJZkF1dG9jb21wbGV0ZT1cIm1hdEF1dG9jb21wbGV0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIFZpc2libGVJZkF1dG9jb21wbGV0ZU9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29wdGlvbi5sYWJlbH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gVklTSUJMRSBJRiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBNQUlOVEFJTiBWQUxVRSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMiBhbGlnbi1zZWxmLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGRlbl09XCIoZmllbGQuVmlzaWJsZUlmID09IG51bGwgfHwgZmllbGQuVmlzaWJsZUlmID09IHVuZGVmaW5lZCkgJiYgZmllbGQuVmlzaWJsZUlmICE9ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiBhbGlnbi1zZWxmLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImZpZWxkLk1haW50YWluX1ZhbHVlXCIgZm9ybUNvbnRyb2xOYW1lPVwiTWFpbnRhaW5fVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgW2Rpc2FibGVkXT1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNYWludGFpbl9WYWx1ZSddLmRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYW50aWVuaSBpbCB2YWxvcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBNQUlOVEFJTiBWQUxVRSAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBUT09MVElQIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD4gVG9vbHRpcCA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPVwiVG9vbHRpcFwiIGZvcm1Db250cm9sTmFtZT1cIlRvb2x0aXBcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5Ub29sdGlwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnVG9vbHRpcCcpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydUb29sdGlwJ10uZXJyb3JzPy5bJ3JlcXVpcmVkJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JibGlnYXRvcmlvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snVG9vbHRpcCddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBUT09MVElQIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIFNUSUxFIENPTVBJTEFaSU9ORSAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gU1RJTEUgREVMTEEgUklTUFNPVEEgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJTdGlsZSBSaXNwb3N0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gTEFSR0hFWlpBIENBTVBPIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5MYXJnaGV6emEgY2FtcG88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXFwLXNlbGVjdCBbYXJyYXlEYXRhXT1cImF2YWlsYWJsZUNvbFNwYW5TaXplc1Jpc3Bvc3RhXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLkFuc3dlclN0eWxlLkNvbFNwYW5TaXplc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcnJheUtleVByb3BlcnR5XT1cIidrZXknXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCIndmFsdWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJvbkNvbFNwYW5TaXplU2VsZWN0KClcIiBbaXNNdWx0aVNlbGVjdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidBbnN3ZXJTdHlsZUNvbFNwYW5TaXplcydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5jbHVkZUZ1bGxPYmplY3RdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIExBUkdIRVpaQSBDQU1QTyAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBMQUJFTCBDU1MgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBMYWJlbCBjc3MgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cIkFuc3dlclN0eWxlTGFiZWxzdHlsZUNTU1wiIGZvcm1Db250cm9sTmFtZT1cIkFuc3dlclN0eWxlTGFiZWxzdHlsZUNTU1wiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLkFuc3dlclN0eWxlLkxhYmVsc3R5bGVDU1NcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5BbnN3ZXJTdHlsZS5MYWJlbHN0eWxlQ1NTKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnTGFiZWxzdHlsZUNTUycpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydBbnN3ZXJTdHlsZUxhYmVsc3R5bGVDU1MnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gTEFCRUwgQ1NTIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIEZJRUxEIENTUyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+IEZpZWxkIGNzcyA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPVwiQW5zd2VyU3R5bGVGaWVsZHN0eWxlQ1NTXCIgZm9ybUNvbnRyb2xOYW1lPVwiQW5zd2VyU3R5bGVGaWVsZHN0eWxlQ1NTXCIgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGQuQW5zd2VyU3R5bGUuRmllbGRzdHlsZUNTU1wiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLkFuc3dlclN0eWxlLkZpZWxkc3R5bGVDU1MpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdGaWVsZHN0eWxlQ1NTJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0Fuc3dlclN0eWxlRmllbGRzdHlsZUNTUyddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBGSUVMRCBDU1MgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gVklTSUJMRSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMiBhbGlnbi1zZWxmLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGRlbl09XCIoZmllbGQuQW5zd2VyU3R5bGUuVmlzaWJsZUlmICE9IG51bGwgfHwgZmllbGQuQW5zd2VyU3R5bGUuVmlzaWJsZUlmICE9IHVuZGVmaW5lZCkgJiYgZmllbGQuQW5zd2VyU3R5bGUuVmlzaWJsZUlmICE9ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiBhbGlnbi1zZWxmLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImZpZWxkLkFuc3dlclN0eWxlLkluTGlzdFZpZXdcIiBmb3JtQ29udHJvbE5hbWU9XCJBbnN3ZXJTdHlsZUluTGlzdFZpZXdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgW2Rpc2FibGVkXT1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydBbnN3ZXJTdHlsZUluTGlzdFZpZXcnXS5kaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlzaWJpbGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBWSVNJQkxFIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBJTlZJU0lCSUxFIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yIGFsaWduLXNlbGYtY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkLkFuc3dlclN0eWxlLkluTGlzdFZpZXdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiIGFsaWduLXNlbGYtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpcG8gZGkgaW52aXNpYmlsaXTDoCBkZWwgY2FtcG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVxcC1zZWxlY3QgW2VudW1EYXRhXT1cImZpZWxkSW52aXNpYmlsaXR5RW51bVwiIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5BbnN3ZXJTdHlsZS5JbnZpc2liaWxpdHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ0Fuc3dlclN0eWxlSW52aXNpYmlsaXR5J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmNsdWRlRnVsbE9iamVjdF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXFwLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gSU5WSVNJQkxFIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIFZJU0lCTEUgSUYgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBWaXNpYmxlSWYgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cIkFuc3dlclN0eWxlVmlzaWJsZUlmXCIgZm9ybUNvbnRyb2xOYW1lPVwiQW5zd2VyU3R5bGVWaXNpYmxlSWZcIiBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWVsZC5BbnN3ZXJTdHlsZS5WaXNpYmxlSWZcIiAoY2xpY2spPVwib3BlbkFuc3dlclN0eWxlVmlzaWJsZUlmRGlhbG9nKClcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5BbnN3ZXJTdHlsZS5WaXNpYmxlSWYpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdWaXNpYmxlSWYnKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snQW5zd2VyU3R5bGVWaXNpYmxlSWYnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cIlZpc2libGVJZlwiIGZvcm1Db250cm9sTmFtZT1cIlZpc2libGVJZlwiIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuVmlzaWJsZUlmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJWaXNpYmxlSWZBdXRvY29tcGxldGVcIiAoa2V5dXApPVwic2V0VmlzaWJsZUlmQXV0b2NvbXBsZXRlT3B0aW9ucygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cInNldFZpc2libGVJZkF1dG9jb21wbGV0ZU9wdGlvbnMobnVsbClcIiAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLlZpc2libGVJZilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjVmlzaWJsZUlmQXV0b2NvbXBsZXRlPVwibWF0QXV0b2NvbXBsZXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgVmlzaWJsZUlmQXV0b2NvbXBsZXRlT3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b3B0aW9uLmxhYmVsfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBWSVNJQkxFIElGIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIFNUSUxFIERFTExBIFJJU1BTT1RBIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBTUEVDSUZJQ0hFIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiU3BlY2lmaWNoZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmllbGRUeXBlRm9ybVRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIFNQRUNJRklDSEUgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIE1PREFMSVRBJyBSRUNVUEVSTyBEQVRJIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiTW9kYWxpdMOgIHJlY3VwZXJvIGRhdGlcIiAqbmdJZj1cImZpZWxkLkZpZWxkVHlwZSAhPSBGaWVsZFR5cGVFbnVtWydCb3R0b25lIGF6aW9uZSddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlcXAtc2VsZWN0IFtlbnVtRGF0YV09XCJkYXRhR2V0dGVyVHlwZUVudW1cIiBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0NhbmNlbEJ1dHRvbl09XCJmYWxzZVwiIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25EYXRhR2V0dGVyVHlwZUNoYW5nZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInRGF0YUdldHRlclR5cGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCIgW2hpZGRlbl09XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlICE9IGRhdGFHZXR0ZXJUeXBlRW51bS5NYW51YWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD4gVmFsb3JlIGRpIERlZmF1bHQgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiRGF0YUdldHRlclZhbHVlXCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZVwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIiBbaGlkZGVuXT1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgIT0gZGF0YUdldHRlclR5cGVFbnVtLkZvcm11bGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBGb3JtdWxhIChKYXZhc2NyaXB0KSA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJGb3JtdWxhXCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5Gb3JtdWxhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuRm9ybXVsYURpYWxvZygpXCIgc3BlbGxjaGVjaz1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5Gb3JtdWxhKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnRm9ybXVsYScpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydGb3JtdWxhJ10uZXJyb3JzPy5bJ3JlcXVpcmVkJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JibGlnYXRvcmlvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snRm9ybXVsYSddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiICpuZ0lmPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBkYXRhR2V0dGVyVHlwZUVudW1bJ0RhIGRhdGFiYXNlJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG10LTQgY29uZmlndXJhUXVlcnlFZGl0b3JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPkNvbmZpZ3VyYSBpbiBRdWVyeSBFZGl0b3I8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwib3BlbkRCR2V0dGVyKClcIiAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlID09IG51bGxcIj5Qcm9jZWRpPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiIChjbGljayk9XCJvcGVuREJHZXR0ZXIoKVwiICpuZ0lmPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUgIT0gbnVsbFwiPk1vZGlmaWNhPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlICE9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlNlbGV6aW9uYSBjb2xvbm5hPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXFwLXNlbGVjdCBbYXJyYXlEYXRhXT1cImNvbHVtbktleXNcIiBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcnJheUtleVByb3BlcnR5XT1cIidrZXknXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCIndmFsdWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0NhbmNlbEJ1dHRvbl09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlICE9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlB1bHNhbnRlIHJlc2V0PzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJIYXNSZXNldEJ1dHRvblwiIGZvcm1Db250cm9sTmFtZT1cIkRhdGFHZXR0ZXJIYXNSZXNldEJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiICpuZ0lmPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBkYXRhR2V0dGVyVHlwZUVudW1bJ0RhIG1vZHVsbyBkaW5hbWljbyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtdC00XCIgKm5nSWY9XCJmb3Jtcy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPk1vZHVsbzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVxcC1zZWxlY3QgW3BsYWNlaG9sZGVyXT1cIidTZWxlemlvbmEgbW9kdWxvJ1wiIFthcnJheURhdGFdPVwiZm9ybXNcIiBbKG5nTW9kZWxJbnB1dCldPVwiRE1Nb2R1bGVcIiBbaXNTZWFyY2hhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcnJheUtleVByb3BlcnR5XT1cIidDb2RlJ1wiIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ05hbWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ0RNTW9kdWxlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJvbkNoYW5nZURNTW9kdWxlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSAhPSBudWxsICYmIERNTW9kdWxlICE9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPkNhbXBvPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXFwLXNlbGVjdCBbcGxhY2Vob2xkZXJdPVwiJ1NlbGV6aW9uYSBjYW1wbydcIiBbYXJyYXlEYXRhXT1cIkRNRmllbGRzXCIgWyhuZ01vZGVsSW5wdXQpXT1cIkRNRmllbGRcIiBbaXNTZWFyY2hhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcnJheUtleVByb3BlcnR5XT1cIidrZXknXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCIna2V5J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidETUZpZWxkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJvbkNoYW5nZURNRmllbGQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXFwLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ0FSRElOQUxJVEEgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlICE9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPkNhcmRpbmFsaXTDoDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVxcC1zZWxlY3QgW2VudW1EYXRhXT1cIkRNR2V0dGVyQ2FyZGluYWxpdGllc1wiIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDYXJkaW5hbGl0eVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dDYW5jZWxCdXR0b25dPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE5PTUVDQU1QTyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUgIT0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+Q29udGVzdHVhbGl6emF6aW9uZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVxcC1zZWxlY3QgW2FycmF5RGF0YV09XCJjb250ZXN0dWFsaXphdGlvblwiIFthcnJheUtleVByb3BlcnR5XT1cIidlbnRpdHlUYWJsZU5hbWUnXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCInZW50aXR5VGFibGVOYW1lJ1wiIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb250ZXN0dWFsaXphdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dDYW5jZWxCdXR0b25dPVwidHJ1ZVwiIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25DaGFuZ2VETUNvbnRlc3R1YWxpemF0aW9uKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC10YWI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gTU9EQUxJVEEnIFJFQ1VQRVJPIERBVEkgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIEVYVFJBIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiRXh0cmFcIiAqbmdJZj1cImZpZWxkc0V4dHJhQ29uZmlnICE9IG51bGwgJiYgZmllbGRzRXh0cmFDb25maWcubGVuZ3RoID4gMCAmJiBsb2FkZWRGaWVsZEV4dHJhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZmllbGRFeHRyYUNvbmZpZ1wiICpuZ0Zvcj1cImxldCBmaWVsZEV4dHJhQ29uZmlnIG9mIGZpZWxkc0V4dHJhQ29uZmlnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR5bmFtaWMtbW9kdWxlLWZpZWxkLWV4dHJhLWZpeCAjZmllbGRFeHRyYUNvbmZpZ1RlbXBsYXRlIFtmaWVsZEV4dHJhQ29uZmlnXT1cImZpZWxkRXh0cmFDb25maWdcIiBbZm9ybV09XCJmb3JtXCIgW2ZpZWxkXT1cImZpZWxkXCIgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R5bmFtaWMtbW9kdWxlLWZpZWxkLWV4dHJhLWZpeD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPiAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIEVYVFJBIC0tPiAgICAgICAgICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAgICAgPC9tYXQtdGFiLWdyb3VwPlxyXG4gICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gQVJFQSBUQUJTIC0tPlxyXG5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gbGlzdFZhbHVlRmllbGRGb3JtVGVtcGxhdGUgdmFsbHVlcyAtLT5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gbGlzdFZhbHVlRmllbGRGb3JtVGVtcGxhdGUgdmFsbHVlcyAtLT5cclxuXHJcbiAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuXHJcbiAgICA8bWF0LWNhcmQtZm9vdGVyPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgbXQtMiBtYi0xIG1lLTNcIj4gXHJcbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImJ1dHRvbnNGb3JtYVwiPiAtLT5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBtYXQtcmFpc2VkLWJ1dHRvbiBiZy1kYW5nZXIgdGV4dC13aGl0ZSBjYW5jZWxcIiAoY2xpY2spPVwic2F2ZUFuZEV4aXRBZGRGaWVsZChmYWxzZSlcIiB0eXBlPVwiYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICDinYwgQW5udWxsYVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0yXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiIGJnLXN1Y2Nlc3MgdGV4dC13aGl0ZSBtci0yIHNhdmVcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwic2F2ZUFuZEV4aXRBZGRGaWVsZCh0cnVlKVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZVNhdmVGaWVsZCgpXCIgdHlwZT1cImJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAg8J+SviBTYWx2YVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPCEtLSA8L2Rpdj4gLS0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1jYXJkLWZvb3Rlcj5cclxuPC9tYXQtY2FyZD5cclxuXHJcbjwhLS0gPC9kaXY+IC0tPlxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbjwhLS0jcmVnaW9uIEZPUk0gUFJPUFJJRVTDgCBDQU1QSSBESSBURVNUTyAtLT5cclxuPG5nLXRlbXBsYXRlICN0ZXh0RmllbGRGb3JtVGVtcGxhdGU+XHJcbiAgICA8IS0tI3JlZ2lvbiBNQVNDSEVSQSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTZcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPk1hc2NoZXJhPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPGVxcC1zZWxlY3QgW2VudW1EYXRhXT1cIlRleHRNYXNrRW51bVwiIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5UZXh0TWFza1wiIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiXHJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInVGV4dE1hc2snXCI+XHJcbiAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBNQVNDSEVSQSAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBTUEVFQ0ggVE8gVEVYVCAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMiAgYWxpZ24tc2VsZi1jZW50ZXJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCIgW2hpZGRlbl09XCJmaWVsZC5SZWFkb25seSB8fCBwbGF0Zm9ybSAhPSAnd2ViJ1wiPlxyXG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFsobmdNb2RlbCldPVwiZmllbGQuTWljcm9waG9uZVwiIGZvcm1Db250cm9sTmFtZT1cIk1pY3JvcGhvbmVcIiBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAgU3BlZWNoLVRvLVRleHRcclxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFNQRUVDSCBUTyBURVhUIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIExVTkdIRVpaQSBNSU5JTUEgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02XCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWxcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyd0ZXh0LWRhbmdlcic6IGZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNaW5MZW5naHQnXS5zdGF0dXMgIT0gJ1ZBTElEJyAmJiBmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWluTGVuZ2h0J10udG91Y2hlZCB9XCI+XHJcbiAgICAgICAgICAgIEx1bmdoZXp6YSBtaW5pbWEgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJsZW5ndGhNaW5cIiBmb3JtQ29udHJvbE5hbWU9XCJNaW5MZW5naHRcIiB0eXBlPVwibnVtYmVyXCIgW21pbl09XCIwXCIgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGQuTWluTGVuZ2h0XCIgc3BlbGxjaGVjaz1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5NaW5MZW5naHQpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdNaW5MZW5naHQnKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWluTGVuZ2h0J10uZXJyb3JzPy5bJ3BhdHRlcm4nXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBJbnNlcmlyZSB1biB2YWxvcmUgbnVtZXJpY28uXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWluTGVuZ2h0J10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBMVU5HSEVaWkEgTUlOSU1BIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIExVTkdIRVpaQSBNQVNTSU1BIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LWxhYmVsXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsndGV4dC1kYW5nZXInOiBmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWF4TGVuZ2h0J10uc3RhdHVzICE9ICdWQUxJRCcgJiYgZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01heExlbmdodCddLnRvdWNoZWQgfVwiPlxyXG4gICAgICAgICAgICBMdW5naGV6emEgbWFzc2ltYSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dCBpZD1cImxlbmd0aE1heFwiIGZvcm1Db250cm9sTmFtZT1cIk1heExlbmdodFwiIHR5cGU9XCJudW1iZXJcIiBbbWluXT1cIjBcIiBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWVsZC5NYXhMZW5naHRcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIiAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLk1heExlbmdodClcIj5cclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ01heExlbmdodCcpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNYXhMZW5naHQnXS5lcnJvcnM/LlsncGF0dGVybiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEluc2VyaXJlIHVuIHZhbG9yZSBudW1lcmljby5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNYXhMZW5naHQnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2UuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIExVTkdIRVpaQSBNQVNTSU1BIC0tPlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgREkgVEVTVE8gLS0+XHJcblxyXG48IS0tI3JlZ2lvbiBGT1JNIFBST1BSSUVUw4AgRVRJQ0hFVFRBIC0tPlxyXG48bmctdGVtcGxhdGUgI2xhYmVsRmllbGRGb3JtVGVtcGxhdGU+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gRVRJQ0hFVFRBIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yICBhbGlnbi1zZWxmLWNlbnRlclwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgICA8dGV4dGFyZWEgbmFtZT1cIkV0aWNoZXR0YVwiIHBsYWNlaG9sZGVyPVwiRXRpY2hldHRhXCIgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiRXRpY2hldHRhXCIgWyhuZ01vZGVsKV09XCJmaWVsZC5FdGljaGV0dGFcIj48L3RleHRhcmVhPlxyXG5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBFVElDSEVUVEEgLS0+XHJcblxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIFBST1BSSUVUw4AgRVRJQ0hFVFRBIC0tPlxyXG5cclxuPCEtLSNyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIEFSRUEgREkgVEVTVE8gLS0+XHJcbjxuZy10ZW1wbGF0ZSAjdGV4dGFyZWFGaWVsZEZvcm1UZW1wbGF0ZT5cclxuICAgIDwhLS0jcmVnaW9uIFJJR0hFIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+IFJpZ2hlIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInJpZ2hlXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInJvd3NcIiBmb3JtQ29udHJvbE5hbWU9XCJSb3dzXCIgdHlwZT1cIm51bWJlclwiIFttaW5dPVwiMFwiIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuUm93c1wiXHJcbiAgICAgICAgICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIiAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLlJvd3MpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdSb3dzJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ1Jvd3MnXS5lcnJvcnM/LlsncGF0dGVybiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEluc2VyaXJlIHVuIHZhbG9yZSBudW1lcmljby5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydSb3dzJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBSSUdIRSAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBTcGVlY2hUb1RleHQgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTIgIGFsaWduLXNlbGYtY2VudGVyXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiIFtoaWRkZW5dPVwiZmllbGQuUmVhZG9ubHkgfHwgcGxhdGZvcm0gIT0gJ3dlYidcIj5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImZpZWxkLk1pY3JvcGhvbmVcIiBmb3JtQ29udHJvbE5hbWU9XCJNaWNyb3Bob25lXCIgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICAgIFNwZWVjaC1Uby1UZXh0XHJcbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBTcGVlY2hUb1RleHQgLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gTFVOR0hFWlpBIE1JTklNQSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPiBMdW5naGV6emEgbWluaW1hIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGlucHV0IGlkPVwibGVuZ3RoTWluXCIgZm9ybUNvbnRyb2xOYW1lPVwiTWluTGVuZ2h0XCIgdHlwZT1cIm51bWJlclwiIFttaW5dPVwiMFwiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLk1pbkxlbmdodFwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuTWluTGVuZ2h0KVwiPlxyXG4gICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnTWluTGVuZ2h0JykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01pbkxlbmdodCddLmVycm9ycz8uWydwYXR0ZXJuJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSW5zZXJpcmUgdW4gdmFsb3JlIG51bWVyaWNvLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01pbkxlbmdodCddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZS5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gTFVOR0hFWlpBIE1JTklNQSAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBMVU5HSEVaWkEgTUFTU0lNQSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPiBMdW5naGV6emEgbWFzc2ltYSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dCBpZD1cImxlbmd0aE1heFwiIGZvcm1Db250cm9sTmFtZT1cIk1heExlbmdodFwiIHR5cGU9XCJudW1iZXJcIiBbbWluXT1cIjBcIiBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWVsZC5NYXhMZW5naHRcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIiAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLk1heExlbmdodClcIj5cclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ01heExlbmdodCcpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNYXhMZW5naHQnXS5lcnJvcnM/LlsncGF0dGVybiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEluc2VyaXJlIHVuIHZhbG9yZSBudW1lcmljby5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNYXhMZW5naHQnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2UuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIExVTkdIRVpaQSBNQVNTSU1BIC0tPlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgQVJFQSBESSBURVNUTyAtLT5cclxuXHJcbjwhLS0jcmVnaW9uIEZPUk0gUFJPUFJJRVTDgCBDQU1QSSBCT09MRUFOSSAtLT5cclxuPG5nLXRlbXBsYXRlICNib29sZWFkRmllbGRGb3JtVGVtcGxhdGU+XHJcbiAgICA8IS0tI3JlZ2lvbiBBIFRSRSBTVEFUSSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMiAgYWxpZ24tc2VsZi1jZW50ZXJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5Jc1RyaXN0YXRlXCIgZm9ybUNvbnRyb2xOYW1lPVwiSXNUcmlzdGF0ZVwiIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAgICBBIHRyZSBzdGF0aVxyXG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gQSBUUkUgU1RBVEkgLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gVElQTyBQUkVTRU5UQVpJT05FIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5UaXBvIGRpIHByZXNlbnRhemlvbmUgKjwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxlcXAtc2VsZWN0IFtlbnVtRGF0YV09XCJCb29sUHJlc2VudGFudGlvRW51bVwiIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5QcmVzZXRhdGlvblR5cGVcIiByZXF1aXJlZFxyXG4gICAgICAgICAgICBbc2hvd0NhbmNlbEJ1dHRvbl09XCJmYWxzZVwiIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInUHJlc2V0YXRpb25UeXBlJ1wiPlxyXG4gICAgICAgIDwvZXFwLXNlbGVjdD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gVElQTyBQUkVTRU5UQVpJT05FIC0tPlxyXG5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSNlbmRyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIEJPT0xFQU5JIC0tPlxyXG5cclxuPCEtLSNyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIERBVEEgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZGF0ZUZpZWxkRm9ybVRlbXBsYXRlPlxyXG4gICAgPCEtLSNyZWdpb24gVElQTyBESSBEQVRBIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5UaXBvIGRpIGRhdGE8L21hdC1sYWJlbD5cclxuICAgICAgICA8ZXFwLXNlbGVjdCBbZW51bURhdGFdPVwiRGF0ZVRpbWVUeXBlRW51bVwiIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5Jc09ubHlEYXRlXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgW3Nob3dDYW5jZWxCdXR0b25dPVwiZmFsc2VcIiBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ0lzT25seURhdGUnXCI+XHJcbiAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBUSVBPIERJIERBVEEgLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gRk9STUFUTyAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPiBGb3JtYXRvIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIkRhdGVGb3JtYXRcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLkRhdGVGb3JtYXRcIlxyXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ0luZGljYXJlIGlsIGZvcm1hdG8gc2VndWVuZG8gbGEgZ3VpZGEgZGVsIHBhY2NoZXR0byBtb21lbnRqcy4nXCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5Gb3JtYXRvKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnRm9ybWF0bycpIH19IC0tPlxyXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBGT1JNQVRPIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIERBVEEgTUlOSU1BIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gRGF0YSBtaW5pbWEgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPHRtdy1kYXRldGltZXBpY2tlciAqbmdJZj1cImZpZWxkLklzT25seURhdGUgPT0gRGF0ZVRpbWVUeXBlRW51bVsnU29sbyBkYXRhJ11cIiBjbGFzcz1cImRhdGVcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuTWluRGF0ZVwiIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInTWluRGF0ZSdcIlxyXG4gICAgICAgICAgICBbcGlja2VyTW9kZV09XCJtb2RlLkRBVEVQSUNLRVJcIiBbb3V0cHV0Rm9ybWF0XT1cIidERC9NTS9ZWVlZJ1wiIFtzaG93U2Vjb25kc109XCJmYWxzZVwiPlxyXG4gICAgICAgIDwvdG13LWRhdGV0aW1lcGlja2VyPlxyXG4gICAgICAgIDx0bXctZGF0ZXRpbWVwaWNrZXIgKm5nSWY9XCJmaWVsZC5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bJ0RhdGEgZSBvcmEnXVwiIGNsYXNzPVwiZGF0ZVwiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5NaW5EYXRlXCIgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidNaW5EYXRlJ1wiXHJcbiAgICAgICAgICAgIFtwaWNrZXJNb2RlXT1cIm1vZGUuREFURVRJTUVQSUNLRVJcIiBbb3V0cHV0Rm9ybWF0XT1cIidERC9NTS9ZWVlZIEhIOm1tJ1wiIFtzaG93U2Vjb25kc109XCJmYWxzZVwiPlxyXG4gICAgICAgIDwvdG13LWRhdGV0aW1lcGlja2VyPlxyXG4gICAgICAgIDx0bXctZGF0ZXRpbWVwaWNrZXIgKm5nSWY9XCJmaWVsZC5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bJ1NvbG8gb3JhcmlvJ11cIiBjbGFzcz1cImRhdGVcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuTWluRGF0ZVwiIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInTWluRGF0ZSdcIlxyXG4gICAgICAgICAgICBbcGlja2VyTW9kZV09XCJtb2RlLlRJTUVQSUNLRVJcIiBbb3V0cHV0Rm9ybWF0XT1cIidISDptbSdcIiBbc2hvd1NlY29uZHNdPVwiZmFsc2VcIj5cclxuICAgICAgICA8L3Rtdy1kYXRldGltZXBpY2tlcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gREFUQSBNSU5JTUEgLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gREFUQSBNQVNTSU1BIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gRGF0YSBtYXNzaW1hIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDx0bXctZGF0ZXRpbWVwaWNrZXIgKm5nSWY9XCJmaWVsZC5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bJ1NvbG8gZGF0YSddXCIgY2xhc3M9XCJkYXRlXCJcclxuICAgICAgICAgICAgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLk1heERhdGVcIiBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ01heERhdGUnXCJcclxuICAgICAgICAgICAgW3BpY2tlck1vZGVdPVwibW9kZS5EQVRFUElDS0VSXCIgW291dHB1dEZvcm1hdF09XCInREQvTU0vWVlZWSdcIiBbc2hvd1NlY29uZHNdPVwiZmFsc2VcIj5cclxuICAgICAgICA8L3Rtdy1kYXRldGltZXBpY2tlcj5cclxuICAgICAgICA8dG13LWRhdGV0aW1lcGlja2VyICpuZ0lmPVwiZmllbGQuSXNPbmx5RGF0ZSA9PSBEYXRlVGltZVR5cGVFbnVtWydEYXRhIGUgb3JhJ11cIiBjbGFzcz1cImRhdGVcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuTWF4RGF0ZVwiIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInTWF4RGF0ZSdcIlxyXG4gICAgICAgICAgICBbcGlja2VyTW9kZV09XCJtb2RlLkRBVEVUSU1FUElDS0VSXCIgW291dHB1dEZvcm1hdF09XCInREQvTU0vWVlZWSBISDptbSdcIiBbc2hvd1NlY29uZHNdPVwiZmFsc2VcIj5cclxuICAgICAgICA8L3Rtdy1kYXRldGltZXBpY2tlcj5cclxuICAgICAgICA8dG13LWRhdGV0aW1lcGlja2VyICpuZ0lmPVwiZmllbGQuSXNPbmx5RGF0ZSA9PSBEYXRlVGltZVR5cGVFbnVtWydTb2xvIG9yYXJpbyddXCIgY2xhc3M9XCJkYXRlXCJcclxuICAgICAgICAgICAgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLk1heERhdGVcIiBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ01heERhdGUnXCJcclxuICAgICAgICAgICAgW3BpY2tlck1vZGVdPVwibW9kZS5USU1FUElDS0VSXCIgW291dHB1dEZvcm1hdF09XCInSEg6bW0nXCIgW3Nob3dTZWNvbmRzXT1cImZhbHNlXCI+XHJcbiAgICAgICAgPC90bXctZGF0ZXRpbWVwaWNrZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIERBVEEgTUFTU0lNQSAtLT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSNlbmRyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIERBVEEgLS0+XHJcblxyXG48IS0tI3JlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgTlVNRVJJQ0kgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjbnVtZXJpY0ZpZWxkRm9ybVRlbXBsYXRlPlxyXG4gICAgPCEtLSNyZWdpb24gVkFMT1JFIElOVEVSTyAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMiAgYWxpZ24tc2VsZi1jZW50ZXJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5Jc0ludGVnZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJJc0ludGVnZXJcIiBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAgVmFsb3JlIGludGVyb1xyXG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gVkFMT1JFIElOVEVSTyAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBTRVBBUkFUT1JFIERFQ0lNQUxJIC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cIiFmaWVsZC5Jc0ludGVnZXJcIiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+IFNlcGFyYXRvcmUgZGVjaW1hbGkgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiRGVjaW1hbFNlcGFyYXRvclwiIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuRGVjaW1hbFNlcGFyYXRvclwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLkRlY2ltYWxTZXBhcmF0b3IpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdEZWNpbWFsU2VwYXJhdG9yJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0RlY2ltYWxTZXBhcmF0b3InXS5lcnJvcnM/LlsncGF0dGVybiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE5vbiDDqCBwb3NzaWJpbGUgaW5zZXJpcmUgZGVpIG51bWVyaS5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydEZWNpbWFsU2VwYXJhdG9yJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBTRVBBUkFUT1JFIERFQ0lNQUxJIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIFBSRUNJU0lPTkUgREVDSU1BTEkgLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiIWZpZWxkLklzSW50ZWdlclwiIGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gUHJlY2lzaW9uZSBkZWNpbWFsaSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJEZWNpbWFsUHJlY2lzaW9uXCIgdHlwZT1cIm51bWJlclwiIFttaW5dPVwiMFwiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLkRlY2ltYWxQcmVjaXNpb25cIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIiAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLkRlY2ltYWxQcmVjaXNpb24pXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdEZWNpbWFsUHJlY2lzaW9uJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0RlY2ltYWxQcmVjaXNpb24nXS5lcnJvcnM/LlsncGF0dGVybiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEluc2VyaXJlIHVuIHZhbG9yZSBudW1lcmljby5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydEZWNpbWFsUHJlY2lzaW9uJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBQUkVDSVNJT05FIERFQ0lNQUxJIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIFNFUEFSQVRPUkUgTUlHTElBSUEgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gU2VwYXJhdG9yZSBtaWdsaWFpYSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJUaG91c2FuZHNTZXBhcmF0b3JcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLlRob3VzYW5kc1NlcGFyYXRvclwiXHJcbiAgICAgICAgICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIiAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLlRob3VzYW5kc1NlcGFyYXRvcilcIj5cclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ1Rob3VzYW5kc1NlcGFyYXRvcicpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydUaG91c2FuZHNTZXBhcmF0b3InXS5lcnJvcnM/LlsncGF0dGVybiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE5vbiDDqCBwb3NzaWJpbGUgaW5zZXJpcmUgZGVpIG51bWVyaS5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydUaG91c2FuZHNTZXBhcmF0b3InXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2UuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFNFUEFSQVRPUkUgTUlHTElBSUEgLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gU0lNQk9MTyBWQUxVVEEgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbFxyXG4gICAgICAgIG1hdFRvb2x0aXA9XCJTaW1ib2xvIHByaW1hIGRlbCB2YWxvcmVcIlxyXG4gICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cImV4YW1wbGUtdG9vbHRpcC11cHBlcmNhc2VcIlxyXG4gICAgICAgID4gU2ltYm9sbyB2YWx1dGEgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiQ3VycmVuY3lTeW1ib2xcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLkN1cnJlbmN5U3ltYm9sXCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuQ3VycmVuY3lTeW1ib2wpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdDdXJyZW5jeVN5bWJvbCcpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydDdXJyZW5jeVN5bWJvbCddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZS5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gU0lNQk9MTyBWQUxVVEEgLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gVU5JVEEgREkgTUlTVVJBIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWxcclxuICAgICAgICBtYXRUb29sdGlwPVwiU2ltYm9sbyBkb3BvIGlsIHZhbG9yZVwiXHJcbiAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwiZXhhbXBsZS10b29sdGlwLXVwcGVyY2FzZVwiXHJcbiAgICAgICAgPiBVbml0w6AgZGkgbWlzdXJhIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIk1lYXN1cmVVbml0XCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5NZWFzdXJlVW5pdFwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLk1lYXN1cmVVbml0KVwiPlxyXG4gICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnTWVhc3VyZVVuaXQnKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWVhc3VyZVVuaXQnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2UuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFVOSVRBIERJIE1JU1VSQSAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBWQUxPUkUgTUlOSU1PIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+IFZhbG9yZSBtaW5pbW8gPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiTWluVmFsdWVcIiB0eXBlPVwibnVtYmVyXCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5NaW5WYWx1ZVwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuTWluVmFsdWUpXCJcclxuICAgICAgICAgICAgICAgIHBhdHRlcm49XCJeLT9bMC05XSsoLFswLTldK3xcXC5bMC05XSspPyRcIj5cclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ01pblZhbHVlJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01pblZhbHVlJ10uZXJyb3JzPy5bJ3BhdHRlcm4nXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBJbnNlcmlyZSB1biB2YWxvcmUgbnVtZXJpY28uXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWluVmFsdWUnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2UuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFZBTE9SRSBNSU5JTU8gLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gVkFMT1JFIE1BU1NJTU8gLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gVmFsb3JlIG1hc3NpbW8gPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiTWF4VmFsdWVcIiB0eXBlPVwibnVtYmVyXCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5NYXhWYWx1ZVwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuTWF4VmFsdWUpXCJcclxuICAgICAgICAgICAgICAgIHBhdHRlcm49XCJeLT9bMC05XSsoLFswLTldK3xcXC5bMC05XSspPyRcIj5cclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ01heFZhbHVlJykgfX0gIC0tPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNYXhWYWx1ZSddLmVycm9ycz8uWydwYXR0ZXJuJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSW5zZXJpcmUgdW4gdmFsb3JlIG51bWVyaWNvLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01heFZhbHVlJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBWQUxPUkUgTUFTU0lNTyAtLT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSNlbmRyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIE5VTUVSSUNJIC0tPlxyXG5cclxuPCEtLSNyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIEFMTEVHQVRPIC0tPlxyXG48bmctdGVtcGxhdGUgI2F0dGFjaG1lbnRGaWVsZEZvcm1UZW1wbGF0ZT5cclxuICAgIDwhLS0jcmVnaW9uIEFMTEVHQVRJIE1VTFRJUExJIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yICBhbGlnbi1zZWxmLWNlbnRlclwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImZpZWxkLmlzTXVsdGlBdHRhY2hcIiBmb3JtQ29udHJvbE5hbWU9XCJpc011bHRpQXR0YWNoXCIgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICAgIEFsbGVnYXRpIG11bHRpcGxpXHJcbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBBTExFR0FUSSBNVUxUSVBMSSAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBFU1RFTlNJT05JIEFDQ0VUVEFURSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+RXN0ZW5zaW9uaSBhY2NldHRhdGU8L21hdC1sYWJlbD5cclxuICAgICAgICA8ZXFwLXNlbGVjdCBbYXJyYXlEYXRhXT1cIkF2YWlsYWJsZUZpbGVFeHRlbnNpb25zLmNvbmNhdChBdmFpbGFibGVJbWFnZUV4dGVuc2lvbnMpXCJcclxuICAgICAgICAgICAgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLkFsbG93ZWRFeHRlbnNpb25zXCIgW2FycmF5S2V5UHJvcGVydHldPVwiJ2tleSdcIiBbYXJyYXlWYWx1ZVByb3BlcnR5XT1cIid2YWx1ZSdcIlxyXG4gICAgICAgICAgICBbaXNNdWx0aVNlbGVjdF09XCJ0cnVlXCIgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidBbGxvd2VkRXh0ZW5zaW9ucydcIlxyXG4gICAgICAgICAgICBbaW5jbHVkZUZ1bGxPYmplY3RdPVwiZmFsc2VcIj5cclxuICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIEVTVEVOU0lPTkkgQUNDRVRUQVRFIC0tPlxyXG5cclxuICAgIDwhLS0gPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBtdC0yXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtdC0yXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItdGl0bGUtc3RhbmRhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICBFbGVuY28gbWV0YWRhdGFcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiB0ZXh0LXJpZ2h0IGJ1dHRvbnNGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHNhdmVcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3Blbk1ldGFkYXRhRGlhbG9nKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4O1wiPkFnZ2l1bmdpIGFsbGVnYXRvPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxlcXAtdGFibGUgI21ldGFkYXRhRmllbGRzVGFibGUgW2NyZWF0ZU1hdENhcmRdPVwiZmFsc2VcIiBbY29sdW1uc109XCJtZXRhZGF0YUNvbHVtbnNcIlxyXG4gICAgICAgICAgICBbZGF0YV09XCJmaWVsZC5NZXRhZGF0YUZpZWxkc1wiIFtlbXB0eVRhYmxlTWVzc2FnZV09XCInTmVzc3VuIG1ldGFkYXRhIGluc2VyaXRvJ1wiIFtzZWFyY2hUZXh0XT1cIidDZXJjYSdcIj5cclxuICAgICAgICA8L2VxcC10YWJsZT5cclxuICAgIDwvZGl2PiAtLT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSNlbmRyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIEFMTEVHQVRPIC0tPlxyXG5cclxuPCEtLSNyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIExJU1RBIERJIFZBTE9SSSAtLT5cclxuPG5nLXRlbXBsYXRlICNsaXN0VmFsdWVGaWVsZEZvcm1UZW1wbGF0ZT5cclxuICAgIDwhLS0jcmVnaW9uIFNDRUxUQSBNVUxUSVBMQSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMiAgYWxpZ24tc2VsZi1jZW50ZXJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgW2hpZGRlbl09XCJmaWVsZC5QcmVzZW50YXRpb25Nb2RlID09IExpc3RQcmVzZW50YXRpb25FbnVtWydSYWRpbyBidXR0b24nXVwiIFsobmdNb2RlbCldPVwiZmllbGQuSXNNdWx0aUNob2ljaGVcIiBmb3JtQ29udHJvbE5hbWU9XCJJc011bHRpQ2hvaWNoZVwiIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAgICBTY2VsdGEgbXVsdGlwbGFcclxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFNDRUxUQSBNVUxUSVBMQSAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBUSVBPIERJIFBSRVNFTlRBWklPTkUgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPlRpcG8gZGkgcHJlc2VudGF6aW9uZSo8L21hdC1sYWJlbD5cclxuICAgICAgICA8ZXFwLXNlbGVjdCBbZW51bURhdGFdPVwiTGlzdFByZXNlbnRhdGlvbkVudW1cIiBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuUHJlc2VudGF0aW9uTW9kZVwiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgIFtzaG93Q2FuY2VsQnV0dG9uXT1cImZhbHNlXCIgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidQcmVzZW50YXRpb25Nb2RlJ1wiXHJcbiAgICAgICAgICAgIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25QcmVzZW50YXRpb25Nb2RlQ2hhbmdlKClcIj5cclxuICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFRJUE8gREkgUFJFU0VOVEFaSU9ORSAtLT5cclxuXHJcblxyXG4gICAgPCEtLSNyZWdpb24gR0VTVElPTkUgT1BaSU9OSSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgbXQtMlwiPlxyXG5cclxuICAgICAgICA8bWF0LWxhYmVsPiBhcmVhIGRlaSB2YWxvcmkgZGEgaW5zZXJpcmUgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8dGV4dGFyZWEgbWF0SW5wdXQgXHJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImtleTF8dmFsdWUxO2tleTJ8dmFsdWUyXCIgXHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLlZhbHVlU3RyaW5nXCJcclxuICAgICAgICAgICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiIFxyXG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC90ZXh0YXJlYT5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJjb3VudFZhbHVlUGFpcnMoZmllbGQuVmFsdWVQYWlycykgPiAwXCI+XHJcbiAgICAgICAgICAgIDxoNCBjbGFzcz1cImtleS12YWx1ZS1saXN0LXNlY3Rpb24tdGl0bGVcIj4gPC9oND5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBMYWJlbCBvcHppb25lIChpbnZpbyBwZXIgY29uZmVybWFyZSk8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJrZXlWYWx1ZU9iamVjdC5rZXlcIiAoa2V5dXApPVwib25NdWx0aVNlbGVjdElucHV0S2V5dXAoJGV2ZW50LCBudWxsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD4gVmFsb3JlIG9wemlvbmUgKGludmlvIHBlciBjb25mZXJtYXJlKTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImtleVZhbHVlT2JqZWN0LnZhbHVlXCIgKGtleXVwKT1cIm9uTXVsdGlTZWxlY3RJbnB1dEtleXVwKCRldmVudCwgbnVsbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgIGFsaWduLXNlbGYtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yLTNcIj5PcHppb25pIGluc2VyaXRlOjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cInZhbHVlLXBhaXJzLWxpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGtleVZhbHVlUGFpciBvZiBnZXREaWN0aW9uYXJ5S2V5VmFsdWUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtci0xXCIgKGNsaWNrKT1cImRlbGV0ZUtleUZyb21EaWN0aW9uYXJ5KGtleVZhbHVlUGFpci5rZXkpXCI+Y2xvc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGI+TGFiZWw6IDwvYj4ge3trZXlWYWx1ZVBhaXIua2V5fX0gLSA8Yj5WYWxvcmU6IDwvYj4ge3trZXlWYWx1ZVBhaXIudmFsdWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+IFxyXG5cclxuICAgIDwvZGl2PiAgICBcclxuICAgIDwhLS0jZW5kcmVnaW9uIEdFU1RJT05FIE9QWklPTkkgLS0+XHJcblxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgTElTVEEgREkgVkFMT1JJIC0tPlxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbjwhLS0jcmVnaW9uIEJPVFRPTkUgQVpJT05FIC0tPlxyXG48bmctdGVtcGxhdGUgI2J1dHRvbkZpZWxkRm9ybVRlbXBsYXRlPlxyXG4gICAgPGFjdGlvbi1idXR0b24tY3JlYXRvciBcclxuICAgIFtJbkZpZWxkXT1cInRydWVcIiBcclxuICAgIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCIgXHJcbiAgICBbZm9ybV09XCJmb3JtXCIgXHJcbiAgICBbZm9ybXVsYXNdPVwiYWN0aW9uQnV0dG9uc1wiIFxyXG4gICAgW2Zvcm11bGFPYmplY3RdID0gXCJmb3JtdWxhT2JqZWN0XCJcclxuICAgIFthY3Rpb25CdXR0b25GaWVsZF09XCJmaWVsZFwiIFxyXG4gICAgKG9uQ2hhbmdlU29tZXRoaW5nKT1cImNoYW5nZWRCdXR0b25GaWVsZCgkZXZlbnQpXCI+XHJcbjwvYWN0aW9uLWJ1dHRvbi1jcmVhdG9yPlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBCT1RUT05FIEFaSU9ORSAtLT5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbjwhLS0jcmVnaW9uIEZPUk0gTElTVEEgSU1NQUdJTkkgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjaW1hZ2VGaWVsZFNlbGVjdG9yRm9ybVRlbXBsYXRlPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTMgY29sLXhzLTEyXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPiBBbHRlenphIGluIFBpeGVsIGRlbGxlIGltbWFnaW5pIHNjYWxhdGUqIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiUmVzaXplZEltYWdlc0hlaWdodFB4XCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5SZXNpemVkSW1hZ2VzSGVpZ2h0UHhcIiByZXF1aXJlZCBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChjaGFuZ2UpPVwic2V0UmVzaXplZEltYWdlc0hlaWdodFB4KClcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ1Jlc2l6ZWRJbWFnZXNIZWlnaHRQeCcpIH19XHJcbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD4gIFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMyBjb2wteHMtMTIgY29sLW1pZGRsZVwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5Jc011bHRpQ2hvaWNoZVwiIGZvcm1Db250cm9sTmFtZT1cIklzTXVsdGlDaG9pY2hlXCIgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICBTY2VsdGEgbXVsdGlwbGFcclxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgIDwvZGl2PiAgICAgICAgXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZXFwLWF0dGFjaG1lbnRzICNpbWFnZVNlbGVjdG9yQXR0YWNobWVudHMgW2F0dGFjaG1lbnRzTGlzdF09XCJmaWVsZC5BdHRhY2htZW50TGlzdFwiIFtzaG93TWF0Q2FyZF09XCJmYWxzZVwiIFthbGxvd09ubHlJbWFnZXNdPVwidHJ1ZVwiXHJcbiAgICBbaXNEaXNhYmxlZF09XCJmYWxzZVwiIFtzaG93SW5saW5lUHJldmlld109XCJ0cnVlXCIgW211bHRpcGxlQXR0YWNobWVudF09XCJ0cnVlXCIgW3Nob3dIZWFkZXJdPVwiZmFsc2VcIlxyXG4gICAgW2FsbG93ZWRUeXBlc109XCJbQXR0YWNobWVudFR5cGUuRklMRV1cIiAobG9jYWxFZGl0ZWRBdHRhY2htZW50cyk9XCJjYXRjaEJ1dHRvbkltYWdlc0NoYW5nZSgkZXZlbnQpXCJcclxuICAgIFthdHRhY2htZW50c0NvbHVtbnNdPVwiY29uZmlnQ29sdW1uTGlzdEltYWdlc1wiPlxyXG4gICAgPC9lcXAtYXR0YWNobWVudHM+XHJcblxyXG4gIFxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIExJU1RBIElNTUFHSU5JIC0tPlxyXG5cclxuPCEtLSNyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIElNTUFHSU5FIC0tPlxyXG48bmctdGVtcGxhdGUgI2ltYWdlRmllbGRGb3JtVGVtcGxhdGU+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5FbmFibGVEcmF3aW5nXCIgZm9ybUNvbnRyb2xOYW1lPVwiRW5hYmxlRHJhd2luZ1wiIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgSW1tYWdpbmUgZGlzZWduYWJpbGU/XHJcbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICA8L2Rpdj4gICBcclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBjb2wteHMtMTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+IEFsdGV6emEgaW4gUGl4ZWwgZGVsbGUgaW1tYWdpbmkgc2NhbGF0ZSogPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJSZXNpemVkSW1hZ2VzSGVpZ2h0UHhcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLlJlc2l6ZWRJbWFnZXNIZWlnaHRQeFwiIHJlcXVpcmVkIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGNoYW5nZSk9XCJzZXRSZXNpemVkSW1hZ2VzSGVpZ2h0UHgoKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnUmVzaXplZEltYWdlc0hlaWdodFB4JykgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAgXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IGNvbC14cy0xMlwiICpuZ0lmPVwiZmllbGQuRHluQXR0YWNobWVudCAhPSBudWxsXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+IEV0aWNoZXR0YSA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuRHluQXR0YWNobWVudC5CdXR0b25LZXlcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAgXHJcbiAgICAgICAgPC9kaXY+ICAgICAgICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgY29sLXhzLTEyXCIgKm5nSWY9XCJmaWVsZC5EeW5BdHRhY2htZW50ICE9IG51bGxcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD4gVmFsb3JlIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5EeW5BdHRhY2htZW50LkJ1dHRvblZhbHVlXCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD4gIFxyXG4gICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgIFxyXG4gICAgPC9kaXY+ICAgIFxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTggbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8ZXFwLWF0dGFjaG1lbnRzIFthdHRhY2htZW50c0xpc3RdPVwiW2ZpZWxkLkR5bkF0dGFjaG1lbnRdXCIgW3Nob3dNYXRDYXJkXT1cImZhbHNlXCIgW2FsbG93T25seUltYWdlc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgW2lzRGlzYWJsZWRdPVwiZmFsc2VcIiBbc2hvd0lubGluZVByZXZpZXddPVwidHJ1ZVwiIFttdWx0aXBsZUF0dGFjaG1lbnRdPVwiZmFsc2VcIiBbc2hvd0hlYWRlcl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIFthbGxvd2VkVHlwZXNdPVwiW0F0dGFjaG1lbnRUeXBlLkZJTEVdXCJcclxuICAgICAgICAgICAgKGxvY2FsRWRpdGVkQXR0YWNobWVudHMpPVwiY2F0Y2hCdXR0b25JbWFnZUNoYW5nZSgkZXZlbnQpXCIgKG9uRGVsZXRlQXR0YWNobWVudCk9XCJkZWxldGVJbWFnZSgkZXZlbnQpXCIgI2ltYWdlQXR0YWNobWVudD5cclxuICAgICAgICA8L2VxcC1hdHRhY2htZW50cz5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI3JlYWRvbmx5UHJvZmlsZUltYWdlPlxyXG4gICAgICAgICAgICA8aW1nICpuZ0lmPVwiZmllbGQuRHluQXR0YWNobWVudFwiXHJcbiAgICAgICAgICAgICAgc3JjPVwiZGF0YTp7e2ZpZWxkLkR5bkF0dGFjaG1lbnQuRmlsZUNvbnRlbnRUeXBlfX07YmFzZTY0LHt7ZmllbGQuRHluQXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NH19XCJcclxuICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+ICAgICAgICBcclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgSU1NQUdJTkUgLS0+XHJcblxyXG48IS0tI3JlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgSU1NQUdJTkUgQ09OIE1BUktFUlMgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjaW1hZ2VXaXRoTWFya2Vyc0ZpZWxkRm9ybVRlbXBsYXRlPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBjb2wteHMtMTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+IEFsdGV6emEgaW4gUGl4ZWwgZGVsbGUgaW1tYWdpbmkgc2NhbGF0ZSogPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJSZXNpemVkSW1hZ2VzSGVpZ2h0UHhcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLlJlc2l6ZWRJbWFnZXNIZWlnaHRQeFwiIHJlcXVpcmVkIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGNoYW5nZSk9XCJzZXRSZXNpemVkSW1hZ2VzSGVpZ2h0UHgoKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnUmVzaXplZEltYWdlc0hlaWdodFB4JykgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAgXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IGNvbC14cy0xMlwiICpuZ0lmPVwiZmllbGQuRHluQXR0YWNobWVudCAhPSBudWxsXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+IEV0aWNoZXR0YSA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuRHluQXR0YWNobWVudC5CdXR0b25LZXlcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAgXHJcbiAgICAgICAgPC9kaXY+ICAgICAgICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgY29sLXhzLTEyXCIgKm5nSWY9XCJmaWVsZC5EeW5BdHRhY2htZW50ICE9IG51bGxcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD4gVmFsb3JlIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5EeW5BdHRhY2htZW50LkJ1dHRvblZhbHVlXCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD4gIFxyXG4gICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgIFxyXG4gICAgPC9kaXY+ICAgIFxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTggbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8ZXFwLWF0dGFjaG1lbnRzIFthdHRhY2htZW50c0xpc3RdPVwiW2ZpZWxkLkR5bkF0dGFjaG1lbnRdXCIgW3Nob3dNYXRDYXJkXT1cImZhbHNlXCIgW2FsbG93T25seUltYWdlc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgW2lzRGlzYWJsZWRdPVwiZmFsc2VcIiBbc2hvd0lubGluZVByZXZpZXddPVwidHJ1ZVwiIFttdWx0aXBsZUF0dGFjaG1lbnRdPVwiZmFsc2VcIiBbc2hvd0hlYWRlcl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIFthbGxvd2VkVHlwZXNdPVwiW0F0dGFjaG1lbnRUeXBlLkZJTEVdXCJcclxuICAgICAgICAgICAgKGxvY2FsRWRpdGVkQXR0YWNobWVudHMpPVwiY2F0Y2hCdXR0b25JbWFnZVdpdGhNYXJrZXJzQ2hhbmdlKCRldmVudClcIiAob25EZWxldGVBdHRhY2htZW50KT1cImRlbGV0ZUltYWdlKCRldmVudClcIiAjaW1hZ2VBdHRhY2htZW50PlxyXG4gICAgICAgIDwvZXFwLWF0dGFjaG1lbnRzPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVhZG9ubHlQcm9maWxlSW1hZ2U+XHJcbiAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJmaWVsZC5EeW5BdHRhY2htZW50XCJcclxuICAgICAgICAgICAgICBzcmM9XCJkYXRhOnt7ZmllbGQuRHluQXR0YWNobWVudC5GaWxlQ29udGVudFR5cGV9fTtiYXNlNjQse3tmaWVsZC5EeW5BdHRhY2htZW50LkZpbGVEYXRhQmFzZTY0fX1cIlxyXG4gICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT4gICAgICAgIFxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0jZW5kcmVnaW9uIEZPUk0gUFJPUFJJRVTDgCBDQU1QSSBJTU1BR0lORSBDT04gTUFSS0VSUyAtLT5cclxuXHJcblxyXG5cclxuXHJcblxyXG48IS0tI3JlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgTE9PS1VQIC0tPlxyXG48bmctdGVtcGxhdGUgI2xvb2t1cEZpZWxkRm9ybVRlbXBsYXRlPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yICBhbGlnbi1zZWxmLWNlbnRlclwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImZpZWxkLlVzZUFzR2V0T3JEaXNjYXJkXCIgZm9ybUNvbnRyb2xOYW1lPVwiVXNlQXNHZXRPckRpc2NhcmRcIiBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiU2UgdHJ1ZSBsYSBsb29rdXAgdmllbmUgdmlzdWFsaXp6YXRhIGluIHVuYSBtb2RhbGUgcGVyIGxvIHNjZWdsaSBzY2FydGFcIj5cclxuICAgICAgICAgICAgVXNhIHBlciBzY2VnbGkgbyBzY2FydGFcclxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPiBOb21lIGVudGl0w6AgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIG1hdFRvb2x0aXA9XCJOb21lIGRlbGwnZW50aXTDoCByZWxhemlvbmF0YVwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiRW50aXR5U291cmNlTmFtZVwiIHJlcXVpcmVkIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuRW50aXR5U291cmNlTmFtZVwiXHJcbiAgICAgICAgICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIiAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLkVudGl0eVNvdXJjZU5hbWUpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnRW50aXR5U291cmNlTmFtZScpIH19XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgbXQtMlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBOb21pIGRlaSBjYW1waSAoaW52aW8gcGVyIGNvbmZlcm1hcmUpIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkVsZW5jbyBkaSBjYW1waSBvcmRpbmF0byBjaGUgdmVycsOgIHZpc3VhbGl6emF0byBuZWxsYSBsb29rdXAgKHByZW1lcmUgaW52aW8gcGVyIGNvbmZlcm1hcmUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IChrZXl1cCk9XCJvbk11bHRpU2VsZWN0SW5wdXRLZXl1cCgkZXZlbnQsICdGaWVsZE5hbWVzJylcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTggIGFsaWduLXNlbGYtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yLTNcIj5Ob21pIHNlbGV6aW9uYXRpOjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleHRlbnNpb24tY29udGFpbmVyXCIgKm5nRm9yPVwibGV0IGV4dGVuc2lvbiBvZiBmaWVsZC5GaWVsZE5hbWVzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tleHRlbnNpb259fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtbC0xXCIgKGNsaWNrKT1cImZpZWxkLkZpZWxkTmFtZXMuc3BsaWNlKGksMSlcIj5jbG9zZVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSNlbmRyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIExPT0tVUCAtLT5cclxuXHJcbjwhLS0gRElBTE9HIFBFUiBBR0dJVU5HRVJFIFVOIE1FVEFEQVRBIE5FSSBDQU1QSSBESSBUSVBPIEFMTEVHQVRPIE8gSU1NQUdJTkUgLS0+XHJcbjwhLS0gPG5nLXRlbXBsYXRlICNkaWFsb2dNZXRhZGF0YT5cclxuICAgIDxlcXAtZHluYW1pYy1tb2R1bGUtYWRkLWZvcm0tZmllbGQgW2ZpZWxkXT1cInNlbGVjdGVkTWV0YWRhdGFcIiBbYXZhaWxhYmxlRmllbGRzXT1cImF2YWlsYWJsZUZpZWxkc1wiXHJcbiAgICAgICAgW2luZGV4RmllbGRdPVwiaW5kZXhTZWxlY3RlZE1ldGFkYXRhXCIgKHNhdmVGaWVsZEV2ZW50KT1cIm9uU2F2ZU1ldGFkYXRhKCRldmVudClcIiBbZmllbGRUeXBlc1RvRXhjbHVkZV09XCJbNiw3LDEwXVwiPlxyXG4gICAgPC9lcXAtZHluYW1pYy1tb2R1bGUtYWRkLWZvcm0tZmllbGQ+XHJcbjwvbmctdGVtcGxhdGU+IC0tPlxyXG5cclxuPG5nLXRlbXBsYXRlICNidXR0b25JbWFnZXNLZXlWYWx1ZUlucHV0Q29sdW1uIGxldC1yb3c9XCJyb3dcIiBsZXQtY29sPVwiY29sXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4ge3tjb2wuZGlzcGxheX19IDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInJvd1tjb2wua2V5XVwiIHJlcXVpcmVkIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLURJQUxPRyBQRVIgU0VNUExJRklDQVJFIExBIFNDUklUVFVSQSBERUwgQ0FNUE8gRk9STVVMQS0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ0Zvcm11bGE+XHJcbiAgICA8ZXFwLWR5bmFtaWMtbW9kdWxlLWFkZC1mb3JtdWxhLWNvbXBvbmVudD5cclxuICAgIDwvZXFwLWR5bmFtaWMtbW9kdWxlLWFkZC1mb3JtdWxhLWNvbXBvbmVudD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjR2VuZXJpY0xpc3RJbWFnZXNJbWFnZVRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtY29sPVwiY29sXCI+XHJcbiAgICA8aW1nIHNyYz1cImRhdGE6aW1hZ2UvanBlZztiYXNlNjQsIHt7cm93W2NvbC5rZXldfX1cIiBjbGFzcz1cIkdlbmVyaWNMaXN0SW1hZ2VzSW1hZ2VUZW1wbGF0ZVwiPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNHZW5lcmljTGlzdEltYWdlc0tleVRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtY29sPVwiY29sXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gQ2hpYXZlIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInJvd1tjb2wua2V5XVwiPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjR2VuZXJpY0xpc3RJbWFnZXNWYWx1ZVRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtY29sPVwiY29sXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gVmFsb3JlIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInJvd1tjb2wua2V5XVwiPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gVEVNUExBVEUgUEVSIFFVRVJZIEVESVRPUiAtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dRRT5cclxuICAgIDxuZy10ZW1wbGF0ZSBbYXBwRHluYW1pY0xvYWRlcl0gW2RhdGFdPVwiUXVlcnlFZGl0b3JDb21wb25lbnRcIiAob3V0KT1cIm9uRXh0ZXJuYWxDb21wb25lbnRPdXQoJGV2ZW50KTtcIj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiAgXHJcblxyXG48IS0tIFRFTVBMQVRFIFBFUiBERUNJU0lPTkUgQVZBTlRJIE8gSU5ESUVUUk8gLS0+XHJcbjwhLS0gXHJcbjxuZy10ZW1wbGF0ZSAjZGlhbG9nQXZhbnRpSW5kaWV0cm8gbGV0LWRpYWxvZ1JlZj1cImRpYWxvZ1JlZlwiIGxldC1kYXRhPVwiZGF0YVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJhdmFudGktaW5kaWV0cm8gcC00IHRleHQtY2VudGVyXCI+XHJcbiAgICA8aDIgY2xhc3M9XCJtYi0zXCI+Q2hlIGZhcmU/PC9oMj5cclxuICAgIDxwIGNsYXNzPVwidGV4dC1tdXRlZCBtYi00XCI+XHJcbiAgICAgIFZ1b2kgc2FsdmFyZSBsZSBtb2RpZmljaGUgcHJpbWEgZGkgcHJvY2VkZXJlP1xyXG4gICAgPC9wPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBnYXAtM1wiPlxyXG4gICAgICA8YnV0dG9uIFxyXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uIFxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIkNsb3NlU2F2ZSgpXCI+XHJcbiAgICAgICAg8J+SviBTYWx2YVxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b24gXHJcbiAgICAgICAgY29sb3I9XCJ3YXJuXCJcclxuICAgICAgICAoY2xpY2spPVwiQ2xvc2UoKVwiPlxyXG4gICAgICAgIOKdjCBWaWEgc2VuemEgc2FsdmFyZVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPiBcclxuLS0+XHJcbiJdfQ==
1341
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWZvcm0tZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2FkZC1mb3JtLWZpZWxkL2FkZC1mb3JtLWZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9hZGQtZm9ybS1maWVsZC9hZGQtZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBSUwsa0JBQWtCLEVBSWxCLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFDTCxjQUFjLEdBSWYsTUFBTSw0QkFBNEIsQ0FBQztBQUVwQyxPQUFPLEVBQWdCLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hFLE9BQU8sRUFDTCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLHlCQUF5QixFQUN6QixxQkFBcUIsRUFDckIsYUFBYSxFQUNkLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUVMLHVCQUF1QixFQUN2Qix3QkFBd0IsR0FDekIsTUFBTSw4Q0FBOEMsQ0FBQztBQUN0RCxPQUFPLEVBRUwsb0JBQW9CLEdBQ3JCLE1BQU0sMkNBQTJDLENBQUM7QUFDbkQsT0FBTyxFQUVMLGdCQUFnQixHQUNqQixNQUFNLHdDQUF3QyxDQUFDO0FBRWhELE9BQU8sRUFDTCxvQkFBb0IsR0FFckIsTUFBTSw2Q0FBNkMsQ0FBQztBQUlyRCxPQUFPLEVBQ0wsWUFBWSxHQUViLE1BQU0sd0NBQXdDLENBQUM7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RUFBRTtnQkFDQSw0QkFBNEI7c0JBQXhGLFNBQVM7dUJBQUMsOEJBQThCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNJLDhCQUE4QjtzQkFBNUYsU0FBUzt1QkFBQyxnQ0FBZ0MsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0gsd0JBQXdCO3NCQUFqRixTQUFTO3VCQUFDLDBCQUEwQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDUCxlQUFlO3NCQUEvRCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFNTixRQUFRO3NCQUFoRCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtcclxuICBBYnN0cmFjdENvbnRyb2wsXHJcbiAgRm9ybUNvbnRyb2wsXHJcbiAgVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gIFVudHlwZWRGb3JtQ29udHJvbCxcclxuICBVbnR5cGVkRm9ybUdyb3VwLFxyXG4gIFZhbGlkYXRpb25FcnJvcnMsXHJcbiAgVmFsaWRhdG9yRm4sXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7XHJcbiAgQXR0YWNobWVudFR5cGUsXHJcbiAgRXFwQXR0YWNobWVudERpYWxvZ1NlcnZpY2UsXHJcbiAgRXFwQXR0YWNobWVudHNDb21wb25lbnQsXHJcbiAgSUF0dGFjaG1lbnREVE8sXHJcbn0gZnJvbSBcIkBlcXByb2plY3QvZXFwLWF0dGFjaG1lbnRzXCI7XHJcbmltcG9ydCB7IEVudW1IZWxwZXIgfSBmcm9tIFwiQGVxcHJvamVjdC9lcXAtc2VsZWN0XCI7XHJcbmltcG9ydCB7IENvbmZpZ0NvbHVtbiwgVHlwZUNvbHVtbiB9IGZyb20gXCJAZXFwcm9qZWN0L2VxcC10YWJsZVwiO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VGaWVsZCxcclxuICBDb2xTcGFuU2l6ZXNFbnVtLFxyXG4gIERhdGFHZXR0ZXJDYXJkaW5hbGl0eUVudW0sXHJcbiAgRmllbGRJbnZpc2liaWxpdHlFbnVtLFxyXG4gIEZpZWxkVHlwZUVudW1cclxufSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2Jhc2VGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIEF0dGFjaG1lbnRGaWVsZCxcclxuICBBdmFpbGFibGVGaWxlRXh0ZW5zaW9ucyxcclxuICBBdmFpbGFibGVJbWFnZUV4dGVuc2lvbnMsXHJcbn0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvYXR0YWNobWVudEZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7XHJcbiAgQm9vbGVhbkZpZWxkLFxyXG4gIEJvb2xQcmVzZW50YW50aW9FbnVtLFxyXG59IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRzL2Jvb2xlYW5GaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIERhdGVGaWVsZCxcclxuICBEYXRlVGltZVR5cGVFbnVtLFxyXG59IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRzL2RhdGVGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBJbWFnZUZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvaW1hZ2VGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIExpc3RQcmVzZW50YXRpb25FbnVtLFxyXG4gIExpc3RWYWx1ZUZpZWxkLFxyXG59IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRzL2xpc3RWYWx1ZUZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IExvb2t1cEZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvbG9va3VwRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgTnVtZXJpY0ZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvbnVtZXJpY0ZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IFRleHRhcmVhRmllbGQgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy90ZXh0YXJlYUZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7XHJcbiAgVGV4dE1hc2tFbnVtLFxyXG4gIFRleHRGaWVsZCxcclxufSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy90ZXh0RmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgRm9ybUZpZWxkR3JvdXAsIEZvcm0gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbCc7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXNcIjtcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBJbWFnZVNlbGVjdG9yRmllbGQgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9pbWFnZVNlbGVjdG9yRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvZXFwLWR5bmFtaWMtbW9kdWxlLWRpYWxvZy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IExhYmVsRmllbGQgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9sYWJlbEZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IEltYWdlV2l0aE1hcmtlcnNGaWVsZCB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRzL2ltYWdlV2l0aE1hcmtlcnNGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBBdHRhY2htZW50RmllbGRUeXBlRW51bSwgRHluQXR0YWNobWVudCB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZHluQXR0YWNobWVudFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YSwgZXZlbnRPdXQgfSBmcm9tIFwiLi4vLi4vLi4vZGlyZWN0aXZlcy9keW5hbWljLWxvYWRlci9keW5hbWljLWxvYWRlci5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBEYXRhR2V0dGVyVHlwZUVudW0sIERhdGFHZXR0ZXIgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvYmFzZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgUXVlcnlFZGl0b3JNb2RlRW51bSB9IGZyb20gXCIuLi9kYmdldHRlci9kYmdldHRlci5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgTW9kZUVudW0sIFRpbWVUeXBlRW51bSB9IGZyb20gXCJ0bXctcGlja2VyXCI7XHJcbmltcG9ydCB7IEVuZFBvaW50Q29uZmlndXJhdGlvbiwgRW5kUG9pbnREYXRhUGFyYW1zLCBQYXJhbVR5cGVFbnVtIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9lbmRQb2ludENvbmZpZ3VyYXRpb24ubW9kZWxcIjtcclxuaW1wb3J0IHsgQ29udGVzdHVhbGl6YXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2dldHRlci5tb2RlbFwiO1xyXG5pbXBvcnQgeyBDYXBhY2l0b3IgfSBmcm9tICdAY2FwYWNpdG9yL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3Rpb25CdXR0b25GaWVsZCwgS2V5VHlwZVZhbHVlIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvYWN0aW9uQnV0dG9uLm1vZGVsXCI7XHJcbmltcG9ydCB7IEZpZWxkRXh0cmFDb25maWcsIEZpZWxkRXh0cmFWYWx1ZXMgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZmllbGRFeHRyYUNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IE5vdE51bWJlckFnZ3JlZ2F0aW9uRnVuY3Rpb25FbnVtLCBOdW1iZXJBZ2dyZWdhdGlvbkZ1bmN0aW9uRW51bSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9zdGF0aXN0aWMubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiZXFwLWR5bmFtaWMtbW9kdWxlLWFkZC1mb3JtLWZpZWxkXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9hZGQtZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9hZGQtZm9ybS1maWVsZC5jb21wb25lbnQuc2Nzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFkZEZvcm1GaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIGZpZWxkc0V4dHJhQ29uZmlnOiBBcnJheTxGaWVsZEV4dHJhQ29uZmlnPjtcclxuICBASW5wdXQoKSBmb3JtOiBGb3JtO1xyXG4gIEBJbnB1dCgpIGVuZFBvaW50Q29uZmlndXJhdGlvbjogRW5kUG9pbnRDb25maWd1cmF0aW9uO1xyXG4gIEBJbnB1dCgpIGZpZWxkOiBCYXNlRmllbGQgfCBhbnk7XHJcbiAgQElucHV0KCkgaW5kZXhGaWVsZDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGZvcm1GaWVsZHNHcm91cHM6IEFycmF5PEZvcm1GaWVsZEdyb3VwPjtcclxuICAvKiogRWxlbmNvIGRlaSBGaWVsZCBjcmVhdGkgbmVsbGEgZm9ybSwgdXNhdGkgcGVyIHBvcG9sYXJlIGwnYXV0b2NvbXBsZXRlIGRlbGxhIHByb3ByaWV0w6AgRm9ybXVsYS4gKi9cclxuICBASW5wdXQoKSBhdmFpbGFibGVGaWVsZHM6IEFycmF5PEJhc2VGaWVsZD47XHJcbiAgQElucHV0KCkgZmllbGRUeXBlc1RvRXhjbHVkZTogQXJyYXk8RmllbGRUeXBlRW51bT4gPSBbRmllbGRUeXBlRW51bVtcIkZvcm0gZGkgZGV0dGFnbGlvXCJdXTtcclxuICBASW5wdXQoKSBRdWVyeUVkaXRvckNvbXBvbmVudDogRHluYW1pY0xvYWRlckRpcmVjdGl2ZURhdGE7IC8vIEwnaW50ZXJvIGNvbXBvbmVudGUgcXVlcnkgRWRpdG9yXHJcbiAgQElucHV0KCkgY29udGVzdHVhbGl6YXRpb246IEFycmF5PENvbnRlc3R1YWxpemF0aW9uPiA9IG51bGw7XHJcbiAgQElucHV0KCkgYWN0aW9uQnV0dG9uczogYW55O1xyXG4gIEBJbnB1dCgpIGZvcm11bGFPYmplY3Q6IGFueTtcclxuXHJcbiAgQE91dHB1dCgpIG91dDogRXZlbnRFbWl0dGVyPGV2ZW50T3V0PiA9IG5ldyBFdmVudEVtaXR0ZXI8ZXZlbnRPdXQ+KCk7XHJcbiAgQE91dHB1dCgpIHNhdmVGaWVsZEV2ZW50OiBFdmVudEVtaXR0ZXI8eyBmaWVsZDogQmFzZUZpZWxkLCByZW9wZW46IG51bWJlciB9PiA9IG5ldyBFdmVudEVtaXR0ZXI8eyBmaWVsZDogQmFzZUZpZWxkLCByZW9wZW46IG51bWJlciB9PigpO1xyXG5cclxuICByZXNpemVkSW1hZ2VzSGVpZ2h0UHg6IG51bWJlcjtcclxuICBmaWVsZEZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cDtcclxuICBrZXlWYWx1ZU9iamVjdDogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9ID0geyBrZXk6IFwiXCIsIHZhbHVlOiBcIlwiIH07XHJcbiAgYXZhaWxhYmxlQ29sU3BhblNpemVzQ29tcGlsYXppb25lOiBBcnJheTxDb2xTcGFuU2l6ZXNFbnVtPiA9IFtdO1xyXG4gIGF2YWlsYWJsZUNvbFNwYW5TaXplc1Jpc3Bvc3RhOiBBcnJheTxDb2xTcGFuU2l6ZXNFbnVtPiA9IFtdO1xyXG4gIGZvcm11bGFBdXRvY29tcGxldGVPcHRpb25zOiBBcnJheTx7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT47XHJcbiAgVmlzaWJsZUlmQXV0b2NvbXBsZXRlT3B0aW9uczogQXJyYXk8eyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+O1xyXG4gIEF2YWlsYWJsZUZpbGVFeHRlbnNpb25zID0gQXZhaWxhYmxlRmlsZUV4dGVuc2lvbnM7XHJcbiAgQXZhaWxhYmxlSW1hZ2VFeHRlbnNpb25zID0gQXZhaWxhYmxlSW1hZ2VFeHRlbnNpb25zO1xyXG4gIGZpZWxkSW52aXNpYmlsaXR5RW51bSA9IEZpZWxkSW52aXNpYmlsaXR5RW51bTtcclxuICBjb2x1bW5LZXlzOiBBcnJheTx7IGtleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+ID0gbmV3IEFycmF5PHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT4oKTtcclxuICBhZ2dyZWdhdGlvbkZ1bmN0aW9uRW51bTogYW55O1xyXG5cclxuICAvLyNyZWdpb24gVGVtcGxhdGUgZGVpIHZhcmkgcGV6emkgZGkgZm9ybSBwZXIgbGEgY3JlYXppb25lIGRpIHVuIGNhbXBvKGluIGJhc2UgYWwgdGlwbyBzY2VsdG8pLlxyXG4gIGZpZWxkVHlwZUZvcm1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwidGV4dEZpZWxkRm9ybVRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgdGV4dEZpZWxkRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJsYWJlbEZpZWxkRm9ybVRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgbGFiZWxGaWVsZEZvcm1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiYnV0dG9uRmllbGRGb3JtVGVtcGxhdGVcIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBidXR0b25GaWVsZEZvcm1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwidGV4dGFyZWFGaWVsZEZvcm1UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHRleHRhcmVhRmllbGRGb3JtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImJvb2xlYWRGaWVsZEZvcm1UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGJvb2xlYWRGaWVsZEZvcm1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiZGF0ZUZpZWxkRm9ybVRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgZGF0ZUZpZWxkRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJudW1lcmljRmllbGRGb3JtVGVtcGxhdGVcIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBudW1lcmljRmllbGRGb3JtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImF0dGFjaG1lbnRGaWVsZEZvcm1UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGF0dGFjaG1lbnRGaWVsZEZvcm1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiaW1hZ2VGaWVsZEZvcm1UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGltYWdlRmllbGRGb3JtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImltYWdlV2l0aE1hcmtlcnNGaWVsZEZvcm1UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGltYWdlV2l0aE1hcmtlcnNGaWVsZEZvcm1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiaW1hZ2VGaWVsZFNlbGVjdG9yRm9ybVRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgaW1hZ2VGaWVsZFNlbGVjdG9yRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJsaXN0VmFsdWVGaWVsZEZvcm1UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGxpc3RWYWx1ZUZpZWxkRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJsb29rdXBGaWVsZEZvcm1UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGxvb2t1cEZpZWxkRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkYXRhR2V0dGVyVGVtcGxhdGVcIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBkYXRhR2V0dGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gUHJvcHJpZXTDoCBwZXIgZ2VzdGlyZSBpIG1ldGFkYXRhIG5laSBjYW1waSB0aSBkaXBvIEFsbGVnYXRvIG8gSW1tYWdpbmVcclxuICBtZXRhZGF0YUNvbHVtbnM6IEFycmF5PENvbmZpZ0NvbHVtbj47XHJcbiAgLy9AVmlld0NoaWxkKCdtZXRhZGF0YUZpZWxkc1RhYmxlJywgeyBzdGF0aWM6IGZhbHNlIH0pIG1ldGFkYXRhRmllbGRzVGFibGU6IEVxcFRhYmxlQ29tcG9uZW50O1xyXG4gIHNlbGVjdGVkTWV0YWRhdGE6IEJhc2VGaWVsZDtcclxuICAvL2luZGV4U2VsZWN0ZWRNZXRhZGF0YTogbnVtYmVyO1xyXG4gIC8vZGlhbG9nTWV0YWRhdGFSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICBkaWFsb2dWaXNpYmxlSWZSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICBkaWFsb2dSZWFkT25seUlmUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgLy9AVmlld0NoaWxkKCdkaWFsb2dNZXRhZGF0YScsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ01ldGFkYXRhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dGb3JtdWxhXCIsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ0Zvcm11bGE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgZGlhbG9nRm9ybXVsYVJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuXHJcbiAgLy8gQFZpZXdDaGlsZChcImRpYWxvZ0F2YW50aUluZGlldHJvXCIsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ0F2YW50aUluZGlldHJvOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIC8vIGRpYWxvZ0F2YW50aUluZGlldHJvUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcblxyXG4gIC8vI3JlZ2lvbiBQcm9wcmlldMOgIHBlciBnZXN0aXJlIGxlIGltbWFnaW5pIG5laSBjYXBpIGRpIHRpcG8gZWxlbmNvIGdlbmVyaWNvXHJcbiAgQFZpZXdDaGlsZChcImJ1dHRvbkltYWdlc0tleVZhbHVlSW5wdXRDb2x1bW5cIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBidXR0b25JbWFnZXNLZXlWYWx1ZUlucHV0Q29sdW1uOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gRW51bWVyYXRvcmkgdXNhdGkgbmVsbCdodG1sXHJcbiAgRmllbGRUeXBlRW51bSA9IEZpZWxkVHlwZUVudW07XHJcbiAgQm9vbFByZXNlbnRhbnRpb0VudW0gPSBCb29sUHJlc2VudGFudGlvRW51bTtcclxuICBEYXRlVGltZVR5cGVFbnVtID0gRGF0ZVRpbWVUeXBlRW51bTtcclxuICBMaXN0UHJlc2VudGF0aW9uRW51bSA9IExpc3RQcmVzZW50YXRpb25FbnVtO1xyXG4gIFRleHRNYXNrRW51bSA9IFRleHRNYXNrRW51bTtcclxuICBBdHRhY2htZW50VHlwZSA9IEF0dGFjaG1lbnRUeXBlO1xyXG4gIGF0dGFjaG1lbnRGaWVsZFR5cGVFbnVtID0gQXR0YWNobWVudEZpZWxkVHlwZUVudW07XHJcbiAgZGF0YUdldHRlclR5cGVFbnVtID0gRGF0YUdldHRlclR5cGVFbnVtO1xyXG4gIHN1YnNjcmlwdGlvbjogYW55O1xyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIEdlc3Rpb25lIGRlbGxlIGxpc3RlIGRpIGltbWFnaW5pXHJcbiAgY29uZmlnQ29sdW1uTGlzdEltYWdlczogQXJyYXk8Q29uZmlnQ29sdW1uPiA9IG5ldyBBcnJheTxDb25maWdDb2x1bW4+KCk7XHJcbiAgY29uZmlnQ29sdW1uSW1hZ2U6IEFycmF5PENvbmZpZ0NvbHVtbj4gPSBuZXcgQXJyYXk8Q29uZmlnQ29sdW1uPigpO1xyXG4gIEBWaWV3Q2hpbGQoJ0dlbmVyaWNMaXN0SW1hZ2VzSW1hZ2VUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIEdlbmVyaWNMaXN0SW1hZ2VzSW1hZ2VUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCdHZW5lcmljTGlzdEltYWdlc0tleVRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgR2VuZXJpY0xpc3RJbWFnZXNLZXlUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCdHZW5lcmljTGlzdEltYWdlc1ZhbHVlVGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBHZW5lcmljTGlzdEltYWdlc1ZhbHVlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnaW1hZ2VTZWxlY3RvckF0dGFjaG1lbnRzJywgeyBzdGF0aWM6IGZhbHNlIH0pIGltYWdlU2VsZWN0b3JBdHRhY2htZW50czogRXFwQXR0YWNobWVudHNDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgnaW1hZ2VBdHRhY2htZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIGltYWdlQXR0YWNobWVudDogRXFwQXR0YWNobWVudHNDb21wb25lbnQ7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vIERCIEdldHRlclxyXG4gIGRpYWxvZ1FFUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgLy9AVmlld0NoaWxkKCdkaWFsb2dNZXRhZGF0YScsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ01ldGFkYXRhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dRRVwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dRRTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgLy8gVE1XLVBJQ0tFUlxyXG4gIG1vZGUgPSBNb2RlRW51bVxyXG4gIHRpbWVUeXBlID0gVGltZVR5cGVFbnVtXHJcblxyXG4gIC8vIERNIEdldHRlclxyXG4gIGZvcm1zOiBBcnJheTxGb3JtPiA9IG5ldyBBcnJheTxGb3JtPigpO1xyXG4gIERNTW9kdWxlOiBhbnk7XHJcbiAgRE1GaWVsZDogYW55O1xyXG4gIERNRmllbGRzOiBBcnJheTx7IGtleTogc3RyaW5nIH0+O1xyXG4gIERNR2V0dGVyQ2FyZGluYWxpdGllcyA9IERhdGFHZXR0ZXJDYXJkaW5hbGl0eUVudW07XHJcblxyXG4gIHBsYXRmb3JtOiBzdHJpbmcgPSBDYXBhY2l0b3IuZ2V0UGxhdGZvcm0oKTtcclxuXHJcbiAgbG9hZGVkRmllbGRFeHRyYTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGFnZ3JlZ2F0aW9uRmllbGRMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGVudW1IZWxwZXI6IEVudW1IZWxwZXIsXHJcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSB1dGlsaXR5SGVscGVyU2VydmljZTogVXRpbGl0eUhlbHBlclNlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpIHtcclxuXHJcbiAgICB0aGlzLmNvbmZpZ3VyZUNvbHVtbnMoKTtcclxuICAgIHRoaXMuY29uZmlndXJlRmllbGRzRXh0cmEoKTtcclxuXHJcbiAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyID09IG51bGwpIHsgdGhpcy5maWVsZC5EYXRhR2V0dGVyID0gbmV3IERhdGFHZXR0ZXIoKTsgfVxyXG4gICAgaWYgKHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSAhPSBudWxsICYmIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBEYXRhR2V0dGVyVHlwZUVudW1bXCJEYSBtb2R1bG8gZGluYW1pY29cIl0pIHtcclxuICAgICAgYXdhaXQgdGhpcy5nZXRBbGxNb2R1bGVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckhhc1Jlc2V0QnV0dG9uID09PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVySGFzUmVzZXRCdXR0b24gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSAhPSBcInVuZGVmaW5lZFwiICYmIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmNyZWF0ZUNvbHVtbktleXModGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZS5QYXJhbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgIXRoaXMuZmllbGRUeXBlc1RvRXhjbHVkZS5pbmNsdWRlcyhGaWVsZFR5cGVFbnVtW1wiRm9ybSBkaSBkZXR0YWdsaW9cIl0pXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5maWVsZFR5cGVzVG9FeGNsdWRlLnB1c2goRmllbGRUeXBlRW51bVtcIkZvcm0gZGkgZGV0dGFnbGlvXCJdKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm9uRmllbGRUeXBlQ2hhbmdlKGZhbHNlKTtcclxuICAgIHRoaXMuYXZhaWxhYmxlRmllbGRzID0gdGhpcy5hdmFpbGFibGVGaWVsZHNcclxuICAgICAgPyB0aGlzLmF2YWlsYWJsZUZpZWxkcy5maWx0ZXIoKGYpID0+IGYgIT0gdGhpcy5maWVsZClcclxuICAgICAgOiBbXTtcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGltcG9zdGFyZSBpIHZhbG9yaSBkYSBzdWdnZXJpcmUgbmVsbCdhdXRvY29tcGxldGUgZGVsIGNhbXBvIEZvcm11bGEuXHJcbiAgICogVmllbmUgc2NhdGVuYXRvIGFsIGZvY3VzIChpbiBxdWVzdG8gY2FzbyB2aWVuZSBwYXNzYXRvIGlsIHBhcmFtZXRybyBhIG51bGwgcGVyIGRpZmZlcmVuemlhcmxvXHJcbiAgICogZGFsbCdldmVudG8gZGkgY2xpY2sgc3VsbGEgdGFzdGllcmEpIGUgYWwga2V5dXAgc3VsbCdpbnB1dCAoaWwgcGFyYW1ldHJvIMOoIGRpdmVyc28gZGEgbnVsbCkuXHJcbiAgICogQHBhcmFtIGtleWJvYXJkRXZlbnQgRXZlbnRvIHNjYXRlbmF0byBhbCBrZXl1cCBzdWxsYSB0YXN0aWVyYS4gU2UgbnVsbCBhbGxvcmEgaWwgbWV0b2RvIMOoIHN0YXRvIGludm9jYXRvIGRhbCBmb2N1cyBzdWxsJ2lucHV0LlxyXG4gICAqIEBzdW1tYXJ5IEFnZ2lvcm5hIGwnZWxlbmNvIGRlaSBzdWdnZXJpbWVudGkgcGVyIGwnYXV0b2NvbXBsZXRlIHNlIGwndXRlbnRlIGVzZWd1ZSBpbCBmb2N1cyBzdWxsJ2lucHV0XHJcbiAgICogb3BwdXJlIGFsIGtleXVwIHN1bGxhIHRhc3RpZXJhIGRpIHVuIHRhc3RvIGRpdmVyc28gZGFsbGUgZnJlY2NlLlxyXG4gICAqL1xyXG4gIC8vIHNldEZvcm11bGFBdXRvY29tcGxldGVPcHRpb25zKGtleWJvYXJkRXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAvLyAgIC8vIENyZW8gbCdhcnJheSBwZXIgbCdhdXRvY29tcGxldGUgc29sbyBzZSBzdG8gZmFjZW5kbyBpbCBmb2N1cyBzdWxsJ2lucHV0IG8gc2Ugc3RvIHByZW1lbmRvIHVuIHRhc3RvXHJcbiAgLy8gICAvLyBzdWxsYSB0YXN0aWVyYSBkaXZlcnNvIGRhbGxlIGZyZWNjZSAoaW4gcXVlc3QndWx0aW1vIGNhc28sIHNlIG5vbiB2aWVuZSBlc2VndWl0byBpbCBmaWx0cm8gc3VsbCdldmVudG8sXHJcbiAgLy8gICAvLyBub24gc2kgcHXDsiBzZWxlemlvbmFyZSB1biBzdWdnZXJpbWVudG8gZGVsbCdhdXRvY29tcGxldGUgcGVyY2jDqCBhbCBjbGljayB2ZXJyZWJiZSByaWNhcmljYXRvIGwnYXJyYXkgZVxyXG4gIC8vICAgLy8gc2kgcHJlZGVyZWJiZSBsYSBzZWxlemlvbmUgYXBwZW5hIGZhdHRhKS5cclxuICAvLyAgIGlmICgha2V5Ym9hcmRFdmVudCB8fCAha2V5Ym9hcmRFdmVudC5jb2RlLmluY2x1ZGVzKFwiQXJyb3dcIikpIHtcclxuICAvLyAgICAgdGhpcy5mb3JtdWxhQXV0b2NvbXBsZXRlT3B0aW9ucyA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkdldEF1dG9jb21wbGV0ZU9wdGlvbnModGhpcy5hdmFpbGFibGVGaWVsZHMsIHRoaXMuZmllbGQuRm9ybXVsYSk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG4gIHNldFZpc2libGVJZkF1dG9jb21wbGV0ZU9wdGlvbnMoa2V5Ym9hcmRFdmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgLy8gQ3JlbyBsJ2FycmF5IHBlciBsJ2F1dG9jb21wbGV0ZSBzb2xvIHNlIHN0byBmYWNlbmRvIGlsIGZvY3VzIHN1bGwnaW5wdXQgbyBzZSBzdG8gcHJlbWVuZG8gdW4gdGFzdG9cclxuICAgIC8vIHN1bGxhIHRhc3RpZXJhIGRpdmVyc28gZGFsbGUgZnJlY2NlIChpbiBxdWVzdCd1bHRpbW8gY2Fzbywgc2Ugbm9uIHZpZW5lIGVzZWd1aXRvIGlsIGZpbHRybyBzdWxsJ2V2ZW50byxcclxuICAgIC8vIG5vbiBzaSBwdcOyIHNlbGV6aW9uYXJlIHVuIHN1Z2dlcmltZW50byBkZWxsJ2F1dG9jb21wbGV0ZSBwZXJjaMOoIGFsIGNsaWNrIHZlcnJlYmJlIHJpY2FyaWNhdG8gbCdhcnJheSBlXHJcbiAgICAvLyBzaSBwcmVkZXJlYmJlIGxhIHNlbGV6aW9uZSBhcHBlbmEgZmF0dGEpLlxyXG4gICAgaWYgKCFrZXlib2FyZEV2ZW50IHx8ICFrZXlib2FyZEV2ZW50LmNvZGUuaW5jbHVkZXMoXCJBcnJvd1wiKSkge1xyXG4gICAgICB0aGlzLlZpc2libGVJZkF1dG9jb21wbGV0ZU9wdGlvbnMgPVxyXG4gICAgICAgIFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkdldEF1dG9jb21wbGV0ZU9wdGlvbnMoXHJcbiAgICAgICAgICB0aGlzLmF2YWlsYWJsZUZpZWxkcyxcclxuICAgICAgICAgIHRoaXMuZmllbGQuVmlzaWJsZUlmXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcbiAgb21pdF9zcGVjaWFsX2NoYXIoZXZlbnQpIHtcclxuICAgIHZhciBrO1xyXG4gICAgayA9IGV2ZW50LmtleUNvZGU7IC8vICAgICAgICAgayA9IGV2ZW50LmtleUNvZGU7ICAoQm90aCBjYW4gYmUgdXNlZClcclxuICAgIGlmIChrID09IDM0KSB7XHJcbiAgICAgIGV2ZW50LmtleUNvZGUgPSAwO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhIGlsIEZvcm1Hcm91cCBwZXIgbCdhZ2dpdW50YSBkaSB1biBudW92byBjYW1wbyBhbGwnaW50ZXJubyBkZWxsYSBmb3JtLlxyXG4gICAqIE1ldG9kbyByaWNoaWFtYXRvIG9nbmkgdm9sdGEgY2hlIGNhbWJpYSBpbCB0aXBvIGRlbCBjYW1wbyBzY2VsdG8gbyB2aWVuZSBhZ2dpdW50by9tb2RpZmljYXRvIHVuIEZpZWxkXHJcbiAgICovXHJcbiAgY3JlYXRlRmllbGRGb3JtKCkge1xyXG4gICAgdGhpcy5maWVsZEZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBMYWJlbDogW1xyXG4gICAgICAgIHRoaXMuZmllbGQuTGFiZWwsXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgICAgIHRoaXMucXVlc3Rpb25Qb2xsLFxyXG4gICAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKFwiXlthLXpBLVogXSokXCIpLFxyXG4gICAgICAgIF0sXHJcbiAgICAgIF0sXHJcbiAgICAgIERlc2NyaXB0aW9uOiBbXHJcbiAgICAgICAgdGhpcy5maWVsZC5EZXNjcmlwdGlvbixcclxuICAgICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgdGhpcy5xdWVzdGlvblBvbGxdLFxyXG4gICAgICBdLFxyXG4gICAgICBSZWFkb25seTogW3RoaXMuZmllbGQuUmVhZG9ubHldLFxyXG4gICAgICBSZWFkb25seUlmOiBbdGhpcy5maWVsZC5SZWFkb25seUlmXSxcclxuICAgICAgUmVxdWlyZWQ6IFt0aGlzLmZpZWxkLlJlcXVpcmVkXSxcclxuICAgICAgRmllbGRUeXBlOiBbXHJcbiAgICAgICAgdGhpcy5maWVsZC5GaWVsZFR5cGUsXHJcbiAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIHRoaXMucXVlc3Rpb25Qb2xsXSxcclxuICAgICAgXSxcclxuICAgICAgRE1Nb2R1bGU6IFtudWxsXSxcclxuICAgICAgRE1GaWVsZDogW251bGxdLFxyXG4gICAgICBEYXRhR2V0dGVyVHlwZTogW1xyXG4gICAgICAgIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSxcclxuICAgICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIF0sXHJcbiAgICAgIENvbFNwYW5TaXplczogW3RoaXMuZmllbGQuQ29sU3BhblNpemVzXSxcclxuICAgICAgSW5MaXN0VmlldzogW3RoaXMuZmllbGQuSW5MaXN0Vmlld10sXHJcbiAgICAgIEludmlzaWJpbGl0eTogW3RoaXMuZmllbGQuSW52aXNpYmlsaXR5XSxcclxuICAgICAgVmlzaWJsZUlmOiBbdGhpcy5maWVsZC5WaXNpYmxlSWYsIHRoaXMucXVlc3Rpb25Qb2xsXSxcclxuICAgICAgTWFpbnRhaW5fVmFsdWU6IFt0aGlzLmZpZWxkLk1haW50YWluX1ZhbHVlXSxcclxuICAgICAgVG9vbHRpcDogW3RoaXMuZmllbGQuVG9vbHRpcCwgdGhpcy5xdWVzdGlvblBvbGxdLFxyXG4gICAgICBMYWJlbHN0eWxlQ1NTOiBbdGhpcy5maWVsZC5MYWJlbHN0eWxlQ1NTLCB0aGlzLnF1ZXN0aW9uUG9sbF0sXHJcbiAgICAgIEZpZWxkc3R5bGVDU1M6IFt0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MsIHRoaXMucXVlc3Rpb25Qb2xsXSxcclxuICAgICAgRm9ybXVsYTogW3RoaXMuZmllbGQuRm9ybXVsYSwgdGhpcy5xdWVzdGlvblBvbGxdLFxyXG4gICAgICBEYXRhR2V0dGVyVmFsdWU6IFt0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlLCB0aGlzLnF1ZXN0aW9uUG9sbF0sXHJcbiAgICAgIERhdGFHZXR0ZXJIYXNSZXNldEJ1dHRvbjogW3RoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVySGFzUmVzZXRCdXR0b24sIHRoaXMucXVlc3Rpb25Qb2xsXSxcclxuICAgICAgRGF0YUdldHRlcklzTXVsdGlzZWxlY3Q6IFt0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlcklzTXVsdGlzZWxlY3QsIHRoaXMucXVlc3Rpb25Qb2xsXSxcclxuXHJcbiAgICAgIEFuc3dlclN0eWxlTGFiZWxzdHlsZUNTUzogW3RoaXMuZmllbGQuQW5zd2VyU3R5bGUuTGFiZWxzdHlsZUNTUywgdGhpcy5xdWVzdGlvblBvbGxdLFxyXG4gICAgICBBbnN3ZXJTdHlsZUZpZWxkc3R5bGVDU1M6IFt0aGlzLmZpZWxkLkFuc3dlclN0eWxlLkZpZWxkc3R5bGVDU1MsIHRoaXMucXVlc3Rpb25Qb2xsXSxcclxuICAgICAgQW5zd2VyU3R5bGVWaXNpYmxlSWY6IFt0aGlzLmZpZWxkLkFuc3dlclN0eWxlLlZpc2libGVJZiwgdGhpcy5xdWVzdGlvblBvbGxdLFxyXG4gICAgICBBbnN3ZXJTdHlsZUNvbFNwYW5TaXplczogW3RoaXMuZmllbGQuQW5zd2VyU3R5bGUuQ29sU3BhblNpemVzXSxcclxuICAgICAgQW5zd2VyU3R5bGVJbkxpc3RWaWV3OiBbdGhpcy5maWVsZC5BbnN3ZXJTdHlsZS5Jbkxpc3RWaWV3XSxcclxuICAgICAgQW5zd2VyU3R5bGVJbnZpc2liaWxpdHk6IFt0aGlzLmZpZWxkLkFuc3dlclN0eWxlLkludmlzaWJpbGl0eV0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiRk9STSBGSUVMRCBDUkVBVE9cIiwgdGhpcy5maWVsZC5EYXRhR2V0dGVyKTtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JtRmllbGRzR3JvdXBzKSB7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICBcIkZpZWxkR3JvdXBcIixcclxuICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKHRoaXMuZmllbGQuRmllbGRHcm91cCwgVmFsaWRhdG9ycy5yZXF1aXJlZClcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcbiAgcXVlc3Rpb25Qb2xsKGNvbnRyb2w6IEZvcm1Db250cm9sKTogeyBbczogc3RyaW5nXTogYm9vbGVhbiB9IHtcclxuICAgIC8vIGMnw6ggdW4gRm9ybUNvbnRyb2wgY2hlIMOoIHZ1b3RvIGNoZSBkYSBwcm9ibGVtaSAocHJvYmFiaWxtZW50ZSB0eXBlIERhdGEsIGNhbXBvIEZvcm1hdG8pXHJcbiAgICBpZiAoY29udHJvbC52YWx1ZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIFV0aWxpdHlIZWxwZXJTZXJ2aWNlLnN0cmluZ0NoZWNrUGFyZW50ZXNpcyhcclxuICAgICAgICAgIGNvbnRyb2wudmFsdWUsXHJcbiAgICAgICAgICBjb250cm9sLmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKVxyXG4gICAgICAgIClcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHsgXCJNaXNzaW5nIFBhcmVudGhlc2lzXCI6IHRydWUgfTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHN0cmluZ1Nhbml0YWl6ZWRWYWxpZGF0b3IoY29udHJvbDogRm9ybUNvbnRyb2wpOiB7IFtzOiBzdHJpbmddOiBib29sZWFuIH0ge1xyXG4gICAgLy8gYyfDqCB1biBGb3JtQ29udHJvbCBjaGUgw6ggdnVvdG8gY2hlIGRhIHByb2JsZW1pIChwcm9iYWJpbG1lbnRlIHR5cGUgRGF0YSwgY2FtcG8gRm9ybWF0bylcclxuICAgIGlmIChjb250cm9sLnZhbHVlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgVXRpbGl0eUhlbHBlclNlcnZpY2Uuc3RyaW5nQ2hlY2tQYXJlbnRlc2lzKFxyXG4gICAgICAgICAgY29udHJvbC52YWx1ZSxcclxuICAgICAgICAgIGNvbnRyb2wuaGFzVmFsaWRhdG9yKFZhbGlkYXRvcnMucmVxdWlyZWQpXHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4geyBcIkxhIGZvcm11bGEgbm9uIMOoIHZhbGlkYVwiOiB0cnVlIH07XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyBnZXRBbGxGb3JtVmFsaWRhdGlvbkVycm9ycygpIHtcclxuICAvLyAgIE9iamVjdC5rZXlzKHRoaXMuZmllbGRGb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gIC8vICAgICBjb25zdCBjb250cm9sRXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzID1cclxuICAvLyAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmdldChrZXkpLmVycm9ycztcclxuICAvLyAgICAgaWYgKGNvbnRyb2xFcnJvcnMgIT0gbnVsbCkge1xyXG4gIC8vICAgICAgIE9iamVjdC5rZXlzKGNvbnRyb2xFcnJvcnMpLmZvckVhY2goKGtleUVycm9yKSA9PiB7XHJcbiAgLy8gICAgICAgICBjb25zb2xlLmxvZyhcclxuICAvLyAgICAgICAgICAgXCJLZXkgY29udHJvbDogXCIgKyBrZXkgKyBcIiwga2V5RXJyb3I6IFwiICsga2V5RXJyb3IgKyBcIiwgZXJyIHZhbHVlOiBcIixcclxuICAvLyAgICAgICAgICAgY29udHJvbEVycm9yc1trZXlFcnJvcl1cclxuICAvLyAgICAgICAgICk7XHJcbiAgLy8gICAgICAgfSk7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH0pO1xyXG4gIC8vIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoaWFtYXRvIGRhaSBtYXQtZXJyb3IgcGVyIHByZW5kZXJlIGdsaSBlcnJvcmkgZ2VuZXJhdGkgcmVsYXRpdmkgYWwgY2FtcG8uXHJcbiAgICogQHBhcmFtIGNvbnRyb2wgw6ggaWwgbm9tZSBkZWwgR3JvdXBDb250cm9sIGRpIGN1aSBsZWdnZXJlIHNlIGNpIHNvbm8gZXJyb3JpXHJcbiAgICovXHJcbiAgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoY29udHJvbDogc3RyaW5nKSB7XHJcbiAgICBpZiAoY29udHJvbCA9PSBcIkxhYmVsXCIpIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2dldEZvcm1WYWxpZGF0aW9uRXJyb3JzJywgdGhpcy5maWVsZEZvcm1Hcm91cC5jb250cm9sc1tcIkxhYmVsXCJdKTtcclxuXHJcbiAgICBjb25zdCBjb250cm9sRXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzID1cclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5jb250cm9sc1tjb250cm9sXS5lcnJvcnM7XHJcbiAgICBsZXQgZXJyb3JzID0gW107XHJcbiAgICBsZXQgdmFsdWVzID0gW107XHJcbiAgICBpZiAoY29udHJvbEVycm9ycyAhPSBudWxsKSB7XHJcbiAgICAgIE9iamVjdC5rZXlzKGNvbnRyb2xFcnJvcnMpLmZvckVhY2goKGtleUVycm9yKSA9PiB7XHJcbiAgICAgICAgZXJyb3JzLnB1c2goa2V5RXJyb3IpO1xyXG4gICAgICB9KTtcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnY29udHJvbDogJywgY29udHJvbCk7XHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2Vycm9yczogJywgZXJyb3JzKTtcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygndmFsdWVzOiAnLCB2YWx1ZXMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVycm9ycy5qb2luKFwiLCBcIik7XHJcbiAgfVxyXG5cclxuICBzZXRBZ2dyZWdhdGlvbihlbnVtVHlwZTogYW55LCByZXNldDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5hZ2dyZWdhdGlvbkZ1bmN0aW9uRW51bSA9IGVudW1UeXBlO1xyXG4gICAgaWYgKHJlc2V0KSB7IHRoaXMuZmllbGQuQWdncmVnYXRpb25zID0gW107IH1cclxuICAgIHNldFRpbWVvdXQoKCkgPT4geyB0aGlzLmFnZ3JlZ2F0aW9uRmllbGRMb2FkZWQgPSB0cnVlOyB9LCAxMDApO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIG9uRmllbGRUeXBlQ2hhbmdlXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoaWFtYXRvIHF1YW5kbyBjYW1iaWEgaWwgRmllbGRUeXBlIGRlbCBCYXNlRmllbGQgY2hlIHNpIHN0YSBhZ2dpdW5nZW5kby9tb2RpZmljYW5kby5cclxuICAgKiBSaWNyZWEgbCdvZ2dldHRvIGZpZWxkIHBvcG9sYW5kbyBzb2xvIGxlIHByb3ByaWV0w6AgZGVsIEJhc2VGaWVsZCBpbnNlcml0ZSBkYWxsJ3V0ZW50ZVxyXG4gICAqIChxdWVsbGUgY29tdW5pIGEgdHV0dGUgbGUgdGlwb2xvZ2llIGRpIGNhbXBvKSwgcmljcmVhIGxhIGZvcm0gZSwgaW4gYmFzZSBhbCBGaWVsZFR5cGUgc2NlbHRvLFxyXG4gICAqIGFnZ2l1bmdlIGFsbGEgZm9ybSBpIEZvcm1Db250cm9sIG5lY2Vzc2FyaSBlIHNlbGV6aW9uYSBpbCB0ZW1wbGF0ZSBjb3JyZXR0byBkYSB1c2FyZS5cclxuICAgKiBAcGFyYW0gcmVzdG9yZUZpZWxkIFNlIFRSVUUgcmlwcmlzdGluYSBpIHZhbG9yaSBiYXNlIChlcmVkaXRhdGkgZGFsIG1vZGVsbG8gQmFzZUZpZWxkKSBkZWwgY2FtcG8gYWdnaXVudG8vbW9kaWZpY2F0b1xyXG4gICAqL1xyXG4gIG9uRmllbGRUeXBlQ2hhbmdlKHJlc3RvcmVGaWVsZDogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIHRoaXMuYWdncmVnYXRpb25GaWVsZExvYWRlZCA9IGZhbHNlO1xyXG5cclxuXHJcbiAgICBpZiAocmVzdG9yZUZpZWxkKSB7XHJcbiAgICAgIHRoaXMucmVzdG9yZUJhc2VGaWVsZFByb3BlcnRpZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNyZWF0ZUZpZWxkRm9ybSgpO1xyXG4gICAgdGhpcy5vbkNvbFNwYW5TaXplU2VsZWN0KCk7XHJcbiAgICBpZiAoKHRoaXMuZmllbGQgYXMgQmFzZUZpZWxkKS5Jbkxpc3RWaWV3ID09IG51bGwpIHtcclxuICAgICAgdGhpcy5maWVsZC5Jbkxpc3RWaWV3ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmICgodGhpcy5maWVsZCBhcyBCYXNlRmllbGQpLkludmlzaWJpbGl0eSA9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuZmllbGQuSW52aXNpYmlsaXR5ID0gRmllbGRJbnZpc2liaWxpdHlFbnVtLk5BU0NPU1RPO1xyXG4gICAgfVxyXG4gICAgdGhpcy5maWVsZFR5cGVGb3JtVGVtcGxhdGUgPSBudWxsO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5maWVsZC5GaWVsZFR5cGUpIHtcclxuXHJcbiAgICAgIC8vI3JlZ2lvbiBDQU1QTyBESSBURVNUT1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJDYW1wbyBkaSB0ZXN0b1wiXTpcclxuICAgICAgICB0aGlzLnNldEFnZ3JlZ2F0aW9uKE5vdE51bWJlckFnZ3JlZ2F0aW9uRnVuY3Rpb25FbnVtLCByZXN0b3JlRmllbGQpO1xyXG5cclxuICAgICAgICBpZiAoKHRoaXMuZmllbGQgYXMgVGV4dEZpZWxkKS5UZXh0TWFzayAhPSBudWxsKSB7XHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBUZXh0RmllbGQpLlRleHRNYXNrID0gTnVtYmVyKCh0aGlzLmZpZWxkIGFzIFRleHRGaWVsZCkuVGV4dE1hc2spIGFzIFRleHRNYXNrRW51bTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgodGhpcy5maWVsZCBhcyBUZXh0RmllbGQpLk1pY3JvcGhvbmUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5maWVsZC5NaWNyb3Bob25lID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiVGV4dE1hc2tcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgVGV4dEZpZWxkKS5UZXh0TWFzaylcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiTWF4TGVuZ2h0XCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIFRleHRGaWVsZCkuTWF4TGVuZ2h0LCBbXHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25Qb2xsLFxyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oXCJeWzAtOV0qJFwiKSxcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIk1pbkxlbmdodFwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBUZXh0RmllbGQpLk1pbkxlbmdodCwgW1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uUG9sbCxcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKFwiXlswLTldKiRcIiksXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJNaWNyb3Bob25lXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIFRleHRGaWVsZCkuTWljcm9waG9uZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmllbGRUeXBlRm9ybVRlbXBsYXRlID0gdGhpcy50ZXh0RmllbGRGb3JtVGVtcGxhdGU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIC8vI2VuZHJlZ2lvbiBDQU1QTyBESSBURVNUT1xyXG5cclxuICAgICAgLy8jcmVnaW9uIExBQkVMXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVsnRXRpY2hldHRhJ106XHJcbiAgICAgICAgaWYgKCh0aGlzLmZpZWxkIGFzIExhYmVsRmllbGQpLkV0aWNoZXR0YSA9PSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLmZpZWxkLkV0aWNoZXR0YSA9IFwiXCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIkV0aWNoZXR0YVwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBMYWJlbEZpZWxkKS5FdGljaGV0dGEpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpZWxkVHlwZUZvcm1UZW1wbGF0ZSA9IHRoaXMubGFiZWxGaWVsZEZvcm1UZW1wbGF0ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgLy8jZW5kcmVnaW9uIExBQkVMXHJcblxyXG4gICAgICAvLyNyZWdpb24gQlVUVE9OXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVsnQm90dG9uZSBhemlvbmUnXTpcclxuICAgICAgICBpZiAoKHRoaXMuZmllbGQgYXMgQWN0aW9uQnV0dG9uRmllbGQpLkJ1dHRvbkNvZGUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5maWVsZC5CdXR0b25Db2RlID0gXCJcIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiQ29kaWNlXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIEFjdGlvbkJ1dHRvbkZpZWxkKS5CdXR0b25Db2RlKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGlmICgodGhpcy5maWVsZCBhcyBBY3Rpb25CdXR0b25GaWVsZCkuQnV0dG9uQ29kZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLmZpZWxkLkJ1dHRvbkNvZGUgPSBcIlwiO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJJY29uYVwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBBY3Rpb25CdXR0b25GaWVsZCkuSWNvbilcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmllbGRUeXBlRm9ybVRlbXBsYXRlID0gdGhpcy5idXR0b25GaWVsZEZvcm1UZW1wbGF0ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgLy8jZW5kcmVnaW9uIEJVVFRPTiAgICAgIFxyXG5cclxuICAgICAgLy8jcmVnaW9uIEFSRUEgREkgVEVTVE8gXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkFyZWEgZGkgdGVzdG9cIl06XHJcbiAgICAgICAgdGhpcy5zZXRBZ2dyZWdhdGlvbihOb3ROdW1iZXJBZ2dyZWdhdGlvbkZ1bmN0aW9uRW51bSwgcmVzdG9yZUZpZWxkKTtcclxuXHJcbiAgICAgICAgaWYgKCh0aGlzLmZpZWxkIGFzIFRleHRhcmVhRmllbGQpLk1pY3JvcGhvbmUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5maWVsZC5NaWNyb3Bob25lID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIlJvd3NcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgVGV4dGFyZWFGaWVsZCkuUm93cywgW1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uUG9sbCxcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKFwiXlswLTldKiRcIiksXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiTWF4TGVuZ2h0XCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIFRleHRhcmVhRmllbGQpLk1heExlbmdodCwgW1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uUG9sbCxcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKFwiXlswLTldKiRcIiksXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiTWluTGVuZ2h0XCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIFRleHRhcmVhRmllbGQpLk1pbkxlbmdodCwgW1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uUG9sbCxcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKFwiXlswLTldKiRcIiksXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiTWljcm9waG9uZVwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBUZXh0YXJlYUZpZWxkKS5NaWNyb3Bob25lKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZFR5cGVGb3JtVGVtcGxhdGUgPSB0aGlzLnRleHRhcmVhRmllbGRGb3JtVGVtcGxhdGU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIC8vI2VuZHJlZ2lvbiBBUkVBIERJIFRFU1RPIFxyXG5cclxuICAgICAgLy8jcmVnaW9uIEJPT0xFQU5PXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bS5Cb29sZWFubzpcclxuICAgICAgICB0aGlzLnNldEFnZ3JlZ2F0aW9uKE5vdE51bWJlckFnZ3JlZ2F0aW9uRnVuY3Rpb25FbnVtLCByZXN0b3JlRmllbGQpO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIklzVHJpc3RhdGVcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgQm9vbGVhbkZpZWxkKS5Jc1RyaXN0YXRlKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiUHJlc2V0YXRpb25UeXBlXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAodGhpcy5maWVsZCBhcyBCb29sZWFuRmllbGQpLlByZXNldGF0aW9uVHlwZSxcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZFR5cGVGb3JtVGVtcGxhdGUgPSB0aGlzLmJvb2xlYWRGaWVsZEZvcm1UZW1wbGF0ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgLy8jZW5kcmVnaW9uIEJPT0xFQU5PXHJcblxyXG4gICAgICAvLyNyZWdpb24gREFUQSBFL0kgT1JBXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkRhdGEgZS9vIG9yYVwiXTpcclxuICAgICAgICB0aGlzLnNldEFnZ3JlZ2F0aW9uKE5vdE51bWJlckFnZ3JlZ2F0aW9uRnVuY3Rpb25FbnVtLCByZXN0b3JlRmllbGQpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5maWVsZC5Jc09ubHlEYXRlID09IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuZmllbGQuSXNPbmx5RGF0ZSA9IERhdGVUaW1lVHlwZUVudW1bXCJTb2xvIGRhdGFcIl07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIklzT25seURhdGVcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgRGF0ZUZpZWxkKS5Jc09ubHlEYXRlLCBbXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25Qb2xsLFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIk1pbkRhdGVcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIERhdGVGaWVsZCkuTWluRGF0ZSxcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvblBvbGxcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIk1heERhdGVcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIERhdGVGaWVsZCkuTWF4RGF0ZSxcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvblBvbGxcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIkRhdGVGb3JtYXRcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgRGF0ZUZpZWxkKS5EYXRlRm9ybWF0KVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZFR5cGVGb3JtVGVtcGxhdGUgPSB0aGlzLmRhdGVGaWVsZEZvcm1UZW1wbGF0ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgLy8jZW5kcmVnaW9uIERBVEEgRS9JIE9SQVxyXG5cclxuICAgICAgLy8jcmVnaW9uIENBTVBPIE5VTUVSSUNPXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkNhbXBvIG51bWVyaWNvXCJdOlxyXG4gICAgICAgIHRoaXMuc2V0QWdncmVnYXRpb24oTnVtYmVyQWdncmVnYXRpb25GdW5jdGlvbkVudW0sIHJlc3RvcmVGaWVsZCk7XHJcblxyXG4gICAgICAgIGlmICgodGhpcy5maWVsZCBhcyBOdW1lcmljRmllbGQpLklzSW50ZWdlciA9PSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLmZpZWxkLklzSW50ZWdlciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIklzSW50ZWdlclwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBOdW1lcmljRmllbGQpLklzSW50ZWdlcilcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIk1pblZhbHVlXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIE51bWVyaWNGaWVsZCkuTWluVmFsdWUsIFtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvblBvbGwsXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihcIl4tP1swLTldKygsWzAtOV0rfFxcLlswLTldKyk/JFwiKSwgLy8oXCJeWzAtOV0qJFwiKSxcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJNYXhWYWx1ZVwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBOdW1lcmljRmllbGQpLk1heFZhbHVlLCBbXHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25Qb2xsLFxyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oXCJeLT9bMC05XSsoLFswLTldK3xcXC5bMC05XSspPyRcIiksIC8vKFwiXlswLTldKiRcIiksXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiRGVjaW1hbFNlcGFyYXRvclwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5EZWNpbWFsU2VwYXJhdG9yLFxyXG4gICAgICAgICAgICBbdGhpcy5xdWVzdGlvblBvbGwsIFZhbGlkYXRvcnMucGF0dGVybihcIl5bYS16QS1aIC0vJywuXy9cXFxcXjw+XStcIildXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJEZWNpbWFsUHJlY2lzaW9uXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAodGhpcy5maWVsZCBhcyBOdW1lcmljRmllbGQpLkRlY2ltYWxQcmVjaXNpb24sXHJcbiAgICAgICAgICAgIFt0aGlzLnF1ZXN0aW9uUG9sbCwgVmFsaWRhdG9ycy5wYXR0ZXJuKFwiXlswLTldKyRcIildXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJUaG91c2FuZHNTZXBhcmF0b3JcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIE51bWVyaWNGaWVsZCkuVGhvdXNhbmRzU2VwYXJhdG9yLFxyXG4gICAgICAgICAgICBbdGhpcy5xdWVzdGlvblBvbGwsIFZhbGlkYXRvcnMucGF0dGVybihcIl5bYS16QS1aIC0vJywuXy9cXFxcXjw+XStcIildXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJDdXJyZW5jeVN5bWJvbFwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5DdXJyZW5jeVN5bWJvbCxcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvblBvbGxcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIk1lYXN1cmVVbml0XCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAodGhpcy5maWVsZCBhcyBOdW1lcmljRmllbGQpLk1lYXN1cmVVbml0LFxyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uUG9sbFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maWVsZFR5cGVGb3JtVGVtcGxhdGUgPSB0aGlzLm51bWVyaWNGaWVsZEZvcm1UZW1wbGF0ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgLy8jZW5kcmVnaW9uIENBTVBPIE5VTUVSSUNPXHJcblxyXG4gICAgICAvLyNyZWdpb24gQUxMRUdBVE9cclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtLkFsbGVnYXRvOlxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiQWxsb3dlZEV4dGVuc2lvbnNcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEF0dGFjaG1lbnRGaWVsZCkuQWxsb3dlZEV4dGVuc2lvbnNcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiaXNNdWx0aUF0dGFjaFwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBBdHRhY2htZW50RmllbGQpLmlzTXVsdGlBdHRhY2gpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpZWxkVHlwZUZvcm1UZW1wbGF0ZSA9IHRoaXMuYXR0YWNobWVudEZpZWxkRm9ybVRlbXBsYXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyNlbmRyZWdpb24gQUxMRUdBVE9cclxuXHJcbiAgICAgIC8vI3JlZ2lvbiBJTU1BR0lORVxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW0uSW1tYWdpbmU6XHJcbiAgICAgICAgaWYgKHR5cGVvZiAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5EeW5BdHRhY2htZW50ID09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkR5bkF0dGFjaG1lbnQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5FbmFibGVEcmF3aW5nID09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkVuYWJsZURyYXdpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiUmVzaXplZEltYWdlc0hlaWdodFB4XCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5SZXNpemVkSW1hZ2VzSGVpZ2h0UHgsXHJcbiAgICAgICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heCg0MzIwKV1cclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLlJlc2l6ZWRJbWFnZXNIZWlnaHRQeCA9ICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLlJlc2l6ZWRJbWFnZXNIZWlnaHRQeCAhPSBudWxsID8gKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuUmVzaXplZEltYWdlc0hlaWdodFB4IDogMTI4O1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIkVuYWJsZURyYXdpbmdcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuRW5hYmxlRHJhd2luZylcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkVHlwZUZvcm1UZW1wbGF0ZSA9IHRoaXMuaW1hZ2VGaWVsZEZvcm1UZW1wbGF0ZTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIC8qXHJcbiAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkF0dGFjaERlZmluaXRpb24gPSBuZXcgQXR0YWNobWVudEZpZWxkKCk7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICBcIkVuYWJsZURyYXdpbmdcIixcclxuICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkVuYWJsZURyYXdpbmcpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICBcIkltYWdlSXNDb250ZXh0dWFsQXR0YWNobWVudFwiLFxyXG4gICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5JbWFnZUlzQ29udGV4dHVhbEF0dGFjaG1lbnRcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICAgIC8vIEltcG9zdG8gaSBGb3JtQ29udHJvbCB2YXJpYWJpbGkuXHJcbiAgICAgIHRoaXMub25JbWFnZUlzQ29udGV4dHVhbEF0dGFjaG1lbnRDaGFuZ2UoKTtcclxuICAgICAgdGhpcy5maWVsZFR5cGVGb3JtVGVtcGxhdGUgPSB0aGlzLmltYWdlRmllbGRGb3JtVGVtcGxhdGU7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgICAqL1xyXG4gICAgICAvLyNlbmRyZWdpb24gSU1NQUdJTkVcclxuXHJcbiAgICAgIC8vI3JlZ2lvbiBFTEVOQ08gR0VORVJJQ09cclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGdlbmVyaWNvXCJdOlxyXG4gICAgICAgIHRoaXMuc2V0QWdncmVnYXRpb24oTm90TnVtYmVyQWdncmVnYXRpb25GdW5jdGlvbkVudW0sIHJlc3RvcmVGaWVsZCk7XHJcblxyXG4gICAgICAgIGlmICgodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuSW5MaXN0VmlldyA9PSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLmZpZWxkLkluTGlzdFZpZXcgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLkludmlzaWJpbGl0eSA9PSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLmZpZWxkLkludmlzaWJpbGl0eSA9IEZpZWxkSW52aXNpYmlsaXR5RW51bS5OQVNDT1NUTztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiSXNNdWx0aUNob2ljaGVcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLklzTXVsdGlDaG9pY2hlKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgIFwiUHJlc2VudGF0aW9uTW9kZVwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlByZXNlbnRhdGlvbk1vZGUsXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmllbGRUeXBlRm9ybVRlbXBsYXRlID0gdGhpcy5saXN0VmFsdWVGaWVsZEZvcm1UZW1wbGF0ZTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIC8vI2VuZHJlZ2lvbiBFTEVOQ08gR0VORVJJQ09cclxuXHJcbiAgICAgIC8vI3JlZ2lvbiBFTEVOQ08gSU1NQUdJTklcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGltbWFnaW5pXCJdOlxyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIklzTXVsdGlDaG9pY2hlXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCh0aGlzLmZpZWxkIGFzIEltYWdlU2VsZWN0b3JGaWVsZCkuSXNNdWx0aUNob2ljaGUpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJSZXNpemVkSW1hZ2VzSGVpZ2h0UHhcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlU2VsZWN0b3JGaWVsZCkuUmVzaXplZEltYWdlc0hlaWdodFB4LFxyXG4gICAgICAgICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5tYXgoNDMyMCldXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpZWxkVHlwZUZvcm1UZW1wbGF0ZSA9IHRoaXMuaW1hZ2VGaWVsZFNlbGVjdG9yRm9ybVRlbXBsYXRlO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgLy8jZW5kcmVnaW9uIEVMRU5DTyBJTU1BR0lOSSAgICAgXHJcblxyXG4gICAgICAvLyNyZWdpb24gSU1NQUdJTkUgQ09OIE1BUktFUlxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJJbW1hZ2luZSBjb24gbWFya2Vyc1wiXTpcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJSZXNpemVkSW1hZ2VzSGVpZ2h0UHhcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlV2l0aE1hcmtlcnNGaWVsZCkuUmVzaXplZEltYWdlc0hlaWdodFB4LFxyXG4gICAgICAgICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5tYXgoNDMyMCldXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpZWxkVHlwZUZvcm1UZW1wbGF0ZSA9IHRoaXMuaW1hZ2VXaXRoTWFya2Vyc0ZpZWxkRm9ybVRlbXBsYXRlO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgLy8jZW5kcmVnaW9uIElNTUFHSU5FIENPTiBNQVJLRVIgICAgICAgIFxyXG5cclxuICAgICAgLy8jcmVnaW9uIExPT0tVUFxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW0uTG9va3VwOlxyXG5cclxuICAgICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBcIkVudGl0eVNvdXJjZU5hbWVcIixcclxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIExvb2t1cEZpZWxkKS5FbnRpdHlTb3VyY2VOYW1lLFxyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJVc2VBc0dldE9yRGlzY2FyZFwiLFxyXG4gICAgICAgICAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgodGhpcy5maWVsZCBhcyBMb29rdXBGaWVsZCkuVXNlQXNHZXRPckRpc2NhcmQpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpZWxkVHlwZUZvcm1UZW1wbGF0ZSA9IHRoaXMubG9va3VwRmllbGRGb3JtVGVtcGxhdGU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIC8vI2VuZHJlZ2lvbiBMT09LVVBcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgW1xyXG4gICAgICAgIEZpZWxkVHlwZUVudW0uQWxsZWdhdG8sXHJcbiAgICAgICAgRmllbGRUeXBlRW51bS5JbW1hZ2luZSxcclxuICAgICAgICBGaWVsZFR5cGVFbnVtW1wiRm9ybSBkaSBkZXR0YWdsaW9cIl0sXHJcbiAgICAgIF0uaW5jbHVkZXModGhpcy5maWVsZC5GaWVsZFR5cGUpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5maWVsZC5Gb3JtdWxhID0gbnVsbDtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5jb250cm9sc1tcIkZvcm11bGFcIl0uZGlzYWJsZSgpO1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzW1wiSW5MaXN0Vmlld1wiXS5kaXNhYmxlKCk7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuY29udHJvbHNbXCJJbnZpc2liaWxpdHlcIl0uZGlzYWJsZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5jb250cm9sc1tcIkZvcm11bGFcIl0uZW5hYmxlKCk7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuY29udHJvbHNbXCJJbkxpc3RWaWV3XCJdLmVuYWJsZSgpO1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzW1wiSW52aXNpYmlsaXR5XCJdLmVuYWJsZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICBbXHJcbiAgICAgICAgRmllbGRUeXBlRW51bS5BbGxlZ2F0byxcclxuICAgICAgICBGaWVsZFR5cGVFbnVtLkltbWFnaW5lLFxyXG4gICAgICAgIEZpZWxkVHlwZUVudW1bXCJGb3JtIGRpIGRldHRhZ2xpb1wiXSxcclxuICAgICAgICBGaWVsZFR5cGVFbnVtW1wiRGF0YSBlL28gb3JhXCJdLFxyXG4gICAgICBdLmluY2x1ZGVzKHRoaXMuZmllbGQuRmllbGRUeXBlKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuY29udHJvbHNbXCJMYWJlbHN0eWxlQ1NTXCJdLmRpc2FibGUoKTtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5jb250cm9sc1tcIkZpZWxkc3R5bGVDU1NcIl0uZGlzYWJsZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5jb250cm9sc1tcIkxhYmVsc3R5bGVDU1NcIl0uZW5hYmxlKCk7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuY29udHJvbHNbXCJGaWVsZHN0eWxlQ1NTXCJdLmVuYWJsZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKFtGaWVsZFR5cGVFbnVtLkJvb2xlYW5vXS5pbmNsdWRlcyh0aGlzLmZpZWxkLkZpZWxkVHlwZSkpIHtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5jb250cm9sc1tcIkxhYmVsc3R5bGVDU1NcIl0uZGlzYWJsZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5jb250cm9sc1tcIkxhYmVsc3R5bGVDU1NcIl0uZW5hYmxlKCk7XHJcbiAgICB9XHJcblxyXG5cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9uRmllbGRUeXBlQ2hhbmdlXHJcblxyXG4gIC8vI3JlZ2lvbiBvbkRhdGFHZXR0ZXJUeXBlQ2hhbmdlXHJcbiAgYXN5bmMgb25EYXRhR2V0dGVyVHlwZUNoYW5nZSgpIHtcclxuICAgIGlmICh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPT0gRGF0YUdldHRlclR5cGVFbnVtWydEYSBtb2R1bG8gZGluYW1pY28nXSAmJiB0aGlzLmZvcm1zLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHRoaXMuZ2V0QWxsTW9kdWxlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgIT0gRGF0YUdldHRlclR5cGVFbnVtLkZvcm11bGEpIHtcclxuICAgICAgdGhpcy5maWVsZC5Gb3JtdWxhID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlID0gbnVsbDtcclxuICAgIHRoaXMuRE1Nb2R1bGUgPSBudWxsO1xyXG4gICAgdGhpcy5ETUZpZWxkID0gbnVsbDtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9uRGF0YUdldHRlclR5cGVDaGFuZ2VcclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIGFsIGNhbWJpbyBkZWwgdmFsb3JlIGRlbGxhIHByb3ByaWV0w6AgSW1hZ2VJc0NvbnRleHR1YWxBdHRhY2htZW50IG5lbCBjYXNvXHJcbiAgICogZGkgY2FtcGkgZGkgdGlwbyBJbW1hZ2luZS4gU2UgVFJVRSBhbGxvcmEgcmltdW92ZSBpIEZvcm1Db250cm9sIHBlciBsZSBwcm9wcmlldMOgIElzTXVsdGlBdHRhY2hcclxuICAgKiBlIEFsbG93ZWRFeHRlbnNpb25zIGUgYWdnaXVuZ2UgaSBGb3JtQ29udHJvbCBwZXIgbGUgcHJvcHJpZXTDoCBJbWdOYW1lIGUgQ29udGV4dHVhbEF0dGFjaG1lbnQsXHJcbiAgICogYWx0cmltZW50aSBpbCBjb250cmFyaW8uXHJcbiAgICovXHJcbiAgb25JbWFnZUlzQ29udGV4dHVhbEF0dGFjaG1lbnRDaGFuZ2UoKSB7XHJcblxyXG4gICAgLypcclxuICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkltZ05hbWUgPSBudWxsO1xyXG4gICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuQXR0YWNoRGVmaW5pdGlvbi5BbGxvd2VkRXh0ZW5zaW9ucyA9IFtdO1xyXG4gICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuQXR0YWNoRGVmaW5pdGlvbi5Jc011bHRpQXR0YWNoID0gZmFsc2U7XHJcbiAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5Db250ZXh0dWFsQXR0YWNobWVudCA9IG51bGw7XHJcblxyXG4gICAgaWYgKCh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkltYWdlSXNDb250ZXh0dWFsQXR0YWNobWVudCkge1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woXCJJc011bHRpQXR0YWNoXCIpO1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woXCJBbGxvd2VkRXh0ZW5zaW9uc1wiKTtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgIFwiSW1nTmFtZVwiLFxyXG4gICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5JbWdOYW1lLFxyXG4gICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxyXG4gICAgICAgIClcclxuICAgICAgKTsgICAgICBcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgIFwiQ29udGV4dHVhbEF0dGFjaG1lbnRcIixcclxuICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuQ29udGV4dHVhbEF0dGFjaG1lbnQsXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5yZW1vdmVDb250cm9sKFwiSW1nTmFtZVwiKTtcclxuICAgICAgdGhpcy5maWVsZEZvcm1Hcm91cC5yZW1vdmVDb250cm9sKFwiQ29udGV4dHVhbEF0dGFjaG1lbnRcIik7XHJcbiAgICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICBcIklzTXVsdGlBdHRhY2hcIixcclxuICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuQXR0YWNoRGVmaW5pdGlvbi5Jc011bHRpQXR0YWNoXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmZpZWxkRm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgXCJBbGxvd2VkRXh0ZW5zaW9uc1wiLFxyXG4gICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uLkFsbG93ZWRFeHRlbnNpb25zXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgKi9cclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGludGVyY2V0dGFyZSBsJ2FnZ2l1bnRhIGRpIHVuIGFsbGVnYXRvIG5laSBjYW1waSBkaSB0aXBvIEltbWFnaW5lIHBlciBhZ2dpb3JuYXJlXHJcbiAgICogaWwgdmFsb3JlIGRlbGxhIHByb3ByaWV0w6AgQ29udGV4dHVhbEF0dGFjaG1lbnQgZSBsYSB2YWxpZGF6aW9uZSBkZWwgcmVsYXRpdm8gRm9ybUNvbnRyb2wuXHJcbiAgICogQHBhcmFtIGV2ZW50IEFycmF5IGNvbnRlbmVudGUgbCdlbGVuY28gYWdnaW9ybmF0byBkZWdsaSBhbGxlZ2F0aSBjYXJpY2F0aSAobmVsIG5vc3RybyBjYXNvIG5lIGNvbnRpZW5lIGFsIHBpw7kgMSkuXHJcbiAgICovXHJcbiAgY2F0Y2hDb250ZXh0dWFsQXR0YWNobWVudENoYW5nZShldmVudDogQXJyYXk8SUF0dGFjaG1lbnREVE8+KSB7XHJcbiAgICAvKlxyXG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuQ29udGV4dHVhbEF0dGFjaG1lbnQgPSBldmVudFswXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlRmllbGQpLkNvbnRleHR1YWxBdHRhY2htZW50ID0gbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMuZmllbGRGb3JtR3JvdXAuY29udHJvbHNbXCJDb250ZXh0dWFsQXR0YWNobWVudFwiXS5zZXRWYWx1ZShcclxuICAgICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuQ29udGV4dHVhbEF0dGFjaG1lbnRcclxuICAgICk7XHJcbiAgICAqL1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIGFsbGEgc2VsZXppb25lIGRpIHVuYSBjbGFzc2UgbmVsbGEgc2VsZWN0IHBlciBsZSBjb2xvbm5lIGRpIGJvb3RzdHJhcFxyXG4gICAqIGRhIHVzYXJlIG5lbGxhIHZpc3VhbGl6emF6aW9uZSBkZWwgY2FtcG8uIFF1ZXN0YSBmdW56aW9uZSBtYW5pcG9sYSBsYSBzb3JnZW50ZSBkYXRpIHBlclxyXG4gICAqIGxhIGVxcC1zZWxlY3QgaW4gbW9kbyBkYSBlc2NsdWRlcmUgaSB2YWxvcmkgZGVsbCdlbnVtZXJhdG9yZSBjaGUgZmFubm8gcmlmZXJpbWVudG8gYWRcclxuICAgKiB1bmEgbGFyZ2hlenphIGRpIHNjaGVybW8gZ2nDoCBzZWxlemlvbmF0YS4gRXNlbXBpbzogcGVyIGdsaSBzY2hlcm1pIHBpY2NvbGkgKHNtKSBsJ3V0ZW50ZVxyXG4gICAqIHNlbGV6aW9uYSBsYSBjbGFzc2UgXCJjb2wtc20tNlwiLCBhbCBjaGFuZ2UgZGVsIHZhbG9yZSBxdWVzdG8gbWV0b2RvIHJpbXVvdmUgZGFsbGEgc2VsZWN0XHJcbiAgICogdHV0dGkgZ2xpIGFsdHJpIHZhbG9yaSBwZXIgbGEgZ3JhbmRlenphIGRpIHNjaGVybW8gc2VsZXppb25hdGEuXHJcbiAgICovXHJcbiAgb25Db2xTcGFuU2l6ZVNlbGVjdCgpIHtcclxuICAgIC8vIFJlY3VwZXJvIGwnYXJyYXkgZGVnbGkgb2dnZXR0aSBjaGlhdmUtdmFsb3JlIGNoZSByYXBwcmVzZXRhIGwnZW51bWVyYXRvcmVcclxuICAgIGxldCBjb2xTaXplQ2xhc3NFbnVtQXJyYXkgPSB0aGlzLmVudW1IZWxwZXIuZ2V0RW51bUFycmF5KFxyXG4gICAgICBDb2xTcGFuU2l6ZXNFbnVtLFxyXG4gICAgICBmYWxzZSxcclxuICAgICAgbnVsbFxyXG4gICAgKTtcclxuICAgIC8vIENvc3RydWlzY28gbCdhcnJheSBkZWxsZSBjbGFzc2kgc2VsZXppb25hdGUgZGFsbCd1dGVudGUgaW4gZm9ybWF0byBzdHJpbmdhXHJcbiAgICBsZXQgc2VsZWN0ZWREaW1lbnNpb25zQ29tcGlsYXppb25lOiBBcnJheTxzdHJpbmc+ID0gdGhpcy5maWVsZC5Db2xTcGFuU2l6ZXNcclxuICAgICAgPyB0aGlzLmZpZWxkLkNvbFNwYW5TaXplcy5tYXAoKGNvbCkgPT4gQ29sU3BhblNpemVzRW51bVtjb2xdKVxyXG4gICAgICA6IFtdO1xyXG4gICAgbGV0IHNlbGVjdGVkRGltZW5zaW9uc1Jpc3Bvc3RhOiBBcnJheTxzdHJpbmc+ID0gdGhpcy5maWVsZC5BbnN3ZXJTdHlsZS5Db2xTcGFuU2l6ZXNcclxuICAgICAgPyB0aGlzLmZpZWxkLkFuc3dlclN0eWxlLkNvbFNwYW5TaXplcy5tYXAoKGNvbCkgPT4gQ29sU3BhblNpemVzRW51bVtjb2xdKVxyXG4gICAgICA6IFtdO1xyXG4gICAgLy8gRmlsdHJvIGkgdmFsb3JpIG90dGVudXRpIGRhbGwnZW51bWVyYXRvcmUgcGVyIGVzY2x1ZGVyZSB0dXR0aSBpIHZhbG9yaSBwZXIgbGVcclxuICAgIC8vIGdyYW5kZXp6ZSBkaSBzY2hlcm1vIGdpw6Agc2VsZXppb25hdGVhZCBlc2NsdXNpb25lIGRlaSB2YWxvcmkgc2VsZXppb25hdGkuXHJcbiAgICB0aGlzLmF2YWlsYWJsZUNvbFNwYW5TaXplc0NvbXBpbGF6aW9uZSA9IGNvbFNpemVDbGFzc0VudW1BcnJheS5maWx0ZXIoXHJcbiAgICAgICh2YWx1ZTogeyBrZXk6IG51bWJlcjsgdmFsdWU6IHN0cmluZyB9KSA9PlxyXG4gICAgICAgICFzZWxlY3RlZERpbWVuc2lvbnNDb21waWxhemlvbmUuZmluZChcclxuICAgICAgICAgIChjb2wpID0+XHJcbiAgICAgICAgICAgIHZhbHVlLnZhbHVlLmluY2x1ZGVzKGNvbC5zdWJzdHJpbmcoNCwgNikpICYmIHZhbHVlLnZhbHVlICE9IGNvbFxyXG4gICAgICAgIClcclxuICAgICk7XHJcbiAgICB0aGlzLmF2YWlsYWJsZUNvbFNwYW5TaXplc1Jpc3Bvc3RhID0gY29sU2l6ZUNsYXNzRW51bUFycmF5LmZpbHRlcihcclxuICAgICAgKHZhbHVlOiB7IGtleTogbnVtYmVyOyB2YWx1ZTogc3RyaW5nIH0pID0+XHJcbiAgICAgICAgIXNlbGVjdGVkRGltZW5zaW9uc1Jpc3Bvc3RhLmZpbmQoXHJcbiAgICAgICAgICAoY29sKSA9PlxyXG4gICAgICAgICAgICB2YWx1ZS52YWx1ZS5pbmNsdWRlcyhjb2wuc3Vic3RyaW5nKDQsIDYpKSAmJiB2YWx1ZS52YWx1ZSAhPSBjb2xcclxuICAgICAgICApXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIGFsIGNhbWJpbyBkZWwgdGlwbyBkaSB2aXN1YWxpenphemlvbmUgc2NlbHRhIHBlciBpIGNhbXBpIGRpIHRpcG8gZWxlbmNvIGdlbmVyaWNvLlxyXG4gICAqIFNlIHZpZW5lIHNjZWx0YSBsYSB2aXN1YWxpenphemlvbmUgYWQgaW1tYWdpbmkgc3Z1b3RhIGxhIGxpc3RhIGRlbGxlIGNvcHBpZSBjaGlhdmUtdmFsb3JlIGluc2VyaXRlXHJcbiAgICogaW4gcHJlY2VkZW56YSwgYWx0cmltZW50aSBzdnVvdGEgbGEgbGlzdGEgZGVsbGUgaW1tYWdpbmkgY2FyaWNhdGUuXHJcbiAgICovXHJcbiAgb25QcmVzZW50YXRpb25Nb2RlQ2hhbmdlKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGQuUHJlc2VudGF0aW9uTW9kZSA9PSBMaXN0UHJlc2VudGF0aW9uRW51bVsnUmFkaW8gYnV0dG9uJ10pIHtcclxuICAgICAgdGhpcy5maWVsZC5Jc011bHRpQ2hvaWNoZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIGFsIHNhbHZhdGFnZ2lvIGRlZ2xpIGFsbGVnYXRpIHF1YW5kbyB2aWVuZSBjb25maWd1cmF0byB1biBjYW1wbyBkaSB0aXBvIFwiRWxlbmNvIGdlbmVyaWNvXCJcclxuICAgKiBjb24gaWwgdGlwbyBkaSB2aXN1YWxpenphemlvbmUgYWQgaW1tYWdpbmkuIEludGVyY2V0dGEgbCdlbGVuY28gYWdnaW9ybmF0byBkZWxsZSBpbW1hZ2luaSBjYXJpY2F0ZSBlIGxvXHJcbiAgICogbWVtb3JpenphIG5lbGwnb2dnZXR0byBmaWVsZCBjb3JyZW50ZS5cclxuICAgKiBAcGFyYW0gYXR0YWNobWVudHMgQXJyYXkgYWdnaW9ybmF0byBkZWdsaSBhbGxlZ2F0aSBjYXJpY2F0aS5cclxuICAgKi9cclxuICBjYXRjaEJ1dHRvbkltYWdlc0NoYW5nZShhdHRhY2htZW50czogQXJyYXk8SUF0dGFjaG1lbnREVE8+KSB7XHJcblxyXG4gICAgKHRoaXMuZmllbGQgYXMgSW1hZ2VTZWxlY3RvckZpZWxkKS5BdHRhY2htZW50TGlzdCA9IGF0dGFjaG1lbnRzIGFzIEFycmF5PER5bkF0dGFjaG1lbnQ+O1xyXG5cclxuICAgICh0aGlzLmZpZWxkIGFzIEltYWdlU2VsZWN0b3JGaWVsZCkuQXR0YWNobWVudExpc3QuZm9yRWFjaCgoYXR0YWNobWVudDogRHluQXR0YWNobWVudCkgPT4ge1xyXG4gICAgICBpZiAodHlwZW9mIGF0dGFjaG1lbnQuSW1hZ2VIZWlnaHRQeCA9PSBcInVuZGVmaW5lZFwiKSB7XHJcblxyXG4gICAgICAgIHZhciBteUJhc2U2NCA9IFwiZGF0YTppbWFnZS9cIiArIGF0dGFjaG1lbnQuRmlsZUV4dGVuc2lvbi50b0xvd2VyQ2FzZSgpICsgXCI7YmFzZTY0LFwiICsgYXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NDtcclxuICAgICAgICB2YXIgaW1nID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgICAgIGltZy5zcmMgPSBteUJhc2U2NDtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBhdHRhY2htZW50LkltYWdlV2lkdGhQeCA9IGltZy53aWR0aDtcclxuICAgICAgICAgIGF0dGFjaG1lbnQuSW1hZ2VIZWlnaHRQeCA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgICBhdHRhY2htZW50LkF0dGFjaG1lbnRGaWVsZFR5cGUgPSBBdHRhY2htZW50RmllbGRUeXBlRW51bS5FTEVOQ09fSU1NQUdJTkk7XHJcbiAgICAgICAgICBpZiAoc2VsZi5pbWFnZVNlbGVjdG9yQXR0YWNobWVudHMpIHsgc2VsZi5pbWFnZVNlbGVjdG9yQXR0YWNobWVudHMucmVsb2FkRGF0YSgpOyB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBjYXRjaEJ1dHRvbkltYWdlQ2hhbmdlKGF0dGFjaG1lbnRzOiBBcnJheTxJQXR0YWNobWVudERUTz4pIHtcclxuXHJcbiAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5EeW5BdHRhY2htZW50ID0gYXR0YWNobWVudHNbMV0gYXMgRHluQXR0YWNobWVudDtcclxuXHJcbiAgICBpZiAodGhpcy5maWVsZC5EeW5BdHRhY2htZW50ICE9IG51bGwgJiYgdHlwZW9mIHRoaXMuZmllbGQuRHluQXR0YWNobWVudC5JbWFnZUhlaWdodFB4ID09IFwidW5kZWZpbmVkXCIpIHtcclxuXHJcbiAgICAgIHZhciBteUJhc2U2NCA9IFwiZGF0YTppbWFnZS9cIiArIHRoaXMuZmllbGQuRHluQXR0YWNobWVudC5GaWxlRXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCkgKyBcIjtiYXNlNjQsXCIgKyB0aGlzLmZpZWxkLkR5bkF0dGFjaG1lbnQuRmlsZURhdGFCYXNlNjQ7XHJcbiAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICAgIGltZy5zcmMgPSBteUJhc2U2NDtcclxuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBzZWxmLmZpZWxkLkR5bkF0dGFjaG1lbnQuSW1hZ2VXaWR0aFB4ID0gaW1nLndpZHRoO1xyXG4gICAgICAgIHNlbGYuZmllbGQuRHluQXR0YWNobWVudC5JbWFnZUhlaWdodFB4ID0gaW1nLmhlaWdodDtcclxuICAgICAgICBzZWxmLmZpZWxkLkR5bkF0dGFjaG1lbnQuQXR0YWNobWVudEZpZWxkVHlwZSA9IEF0dGFjaG1lbnRGaWVsZFR5cGVFbnVtLklNTUFHSU5FO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgY2F0Y2hCdXR0b25JbWFnZVdpdGhNYXJrZXJzQ2hhbmdlKGF0dGFjaG1lbnRzOiBBcnJheTxJQXR0YWNobWVudERUTz4pIHtcclxuXHJcbiAgICAodGhpcy5maWVsZCBhcyBJbWFnZVdpdGhNYXJrZXJzRmllbGQpLkR5bkF0dGFjaG1lbnQgPSBhdHRhY2htZW50c1sxXSBhcyBEeW5BdHRhY2htZW50O1xyXG5cclxuICAgIGlmICh0aGlzLmZpZWxkLkR5bkF0dGFjaG1lbnQgIT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5maWVsZC5EeW5BdHRhY2htZW50LkltYWdlSGVpZ2h0UHggPT0gXCJ1bmRlZmluZWRcIikge1xyXG5cclxuICAgICAgdmFyIG15QmFzZTY0ID0gXCJkYXRhOmltYWdlL1wiICsgdGhpcy5maWVsZC5EeW5BdHRhY2htZW50LkZpbGVFeHRlbnNpb24udG9Mb3dlckNhc2UoKSArIFwiO2Jhc2U2NCxcIiArIHRoaXMuZmllbGQuRHluQXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NDtcclxuICAgICAgdmFyIGltZyA9IG5ldyBJbWFnZSgpO1xyXG5cclxuICAgICAgaW1nLnNyYyA9IG15QmFzZTY0O1xyXG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgIGltZy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHNlbGYuZmllbGQuRHluQXR0YWNobWVudC5JbWFnZVdpZHRoUHggPSBpbWcud2lkdGg7XHJcbiAgICAgICAgc2VsZi5maWVsZC5EeW5BdHRhY2htZW50LkltYWdlSGVpZ2h0UHggPSBpbWcuaGVpZ2h0O1xyXG4gICAgICAgIHNlbGYuZmllbGQuRHluQXR0YWNobWVudC5BdHRhY2htZW50RmllbGRUeXBlID0gQXR0YWNobWVudEZpZWxkVHlwZUVudW0uSU1NQUdJTkVfQ09OX01BUktFUlM7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hpYW1hdG8gYWwga2V5dXAgZGVnbGkgaW5wdXQgdGVzdHVhbGkgY2hlIHByZXZlZG9ubyBsJ2FnZ2l1bnRhIGRlbCB2YWxvcmUgaW5zZXJpdG8gaW4gdW4gYXJyYXkuXHJcbiAgICogU2UgbCd1dGVudGUgcHJlbWUgaWwgdGFzdG8gaW52aW8sIGluIGJhc2UgYWwgdGlwbyBkaSBjYW1wbyBjaGUgc3RhIGluc2VyZW5kby9tb2RpZmljYW5kbywgcXVlc3RvIG1ldG9kb1xyXG4gICAqIGFnZ2l1bmdlIGlsIHZhbG9yZSBpbnNlcml0byBkYWxsJ3V0ZW50ZSBuZWxsYSBsaXN0YSBkaSBzdHJpbmdoZSBjb3JyZXR0YSAoaW4gaW5wdXQgdmllbmUgcGFzc2F0byBpbCBub21lXHJcbiAgICogZGVsbGEgcHJvcHJpZXTDoCBpbiBjdWkgaW5zZXJpcmUgbGEgc3RyaW5nYSkuXHJcbiAgICogQHBhcmFtIGV2ZW50IEV2ZW50byBjaGUgcmFwcHJlc2VudGEgaWwga2V5dXAgZGVsbCd1dGVudGVcclxuICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIE5vbWUgZGVsbGEgcHJvcHJpZXTDoCBkZWwgZmllbGQgaW4gY3VpIGluc2VyaXJlIGxhIHN0cmluZ2EgZGlnaXRhdGEuXHJcbiAgICovXHJcbiAgb25NdWx0aVNlbGVjdElucHV0S2V5dXAoZXZlbnQsIHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICBpZiAoZXZlbnQuY29kZSA9PT0gXCJFbnRlclwiIHx8IGV2ZW50LmNvZGUgPT09IFwiTnVtcGFkRW50ZXJcIikge1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuZmllbGQuRmllbGRUeXBlKSB7XHJcbiAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtLkxvb2t1cDpcclxuICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW0uQWxsZWdhdG86XHJcbiAgICAgICAgICBpZiAoIXRoaXMuZmllbGRbcHJvcGVydHlOYW1lXSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpZWxkW3Byb3BlcnR5TmFtZV0gPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5maWVsZFtwcm9wZXJ0eU5hbWVdLnB1c2goZXZlbnQuY3VycmVudFRhcmdldC52YWx1ZSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJJbW1hZ2luZSBjb24gbWFya2Vyc1wiXTpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgRmllbGRUeXBlRW51bS5JbW1hZ2luZTpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkVsZW5jbyBnZW5lcmljb1wiXTpcclxuICAgICAgICAgIGlmICghdGhpcy5rZXlWYWx1ZU9iamVjdC5rZXkgfHwgIXRoaXMua2V5VmFsdWVPYmplY3QudmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCEodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycykge1xyXG4gICAgICAgICAgICAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycyA9IHt9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnNbdGhpcy5rZXlWYWx1ZU9iamVjdC5rZXldID1cclxuICAgICAgICAgICAgdGhpcy5rZXlWYWx1ZU9iamVjdC52YWx1ZTtcclxuICAgICAgICAgIHRoaXMua2V5VmFsdWVPYmplY3QgPSB7IGtleTogXCJcIiwgdmFsdWU6IFwiXCIgfTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQudmFsdWUgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoaWFtYXRvIHBlciBtb3N0cmFyZSBjb21lIGVsZW5jbyBsZSBvcHppb25pIGFnZ2l1bnRlIGluIHVuIGNhbXBvIGRpIHRpcG8gXCJFbGVuY28gZ2VuZXJpY29cIi5cclxuICAgKiBAcmV0dXJucyBSZXN0aXR1aXNjZSB1biBhcnJheSBkaSBvZ2dldHRpIGRlbCB0aXBvIHsga2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfSBjb24gaSB2YWxvcmkgaW5zZXJpdGkgZGFsbCd1dGVudGUuXHJcbiAgICovXHJcbiAgZ2V0RGljdGlvbmFyeUtleVZhbHVlKCkge1xyXG4gICAgaWYgKCh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzKSB7XHJcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cygodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycykubWFwKChrKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGtleTogayxcclxuICAgICAgICAgIHZhbHVlOiAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlyc1trXSxcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmltdW92ZXJlIHVuYSBvcHppb25lIGFnZ2l1bnRhIGFsIGNhbXBvIGRpIHRpcG8gXCJFbGVuY28gZ2VuZXJpY29cIlxyXG4gICAqIEBwYXJhbSBrZXkgTm9tZSBkZWxsYSBjaGlhdmUgZGEgcmltdW92ZXJlXHJcbiAgICovXHJcbiAgZGVsZXRlS2V5RnJvbURpY3Rpb25hcnkoa2V5OiBzdHJpbmcpIHtcclxuICAgIGRlbGV0ZSAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlyc1trZXldO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIG9wZW5Gb3JtdWxhRGlhbG9nXHJcbiAgb3BlbkZvcm11bGFEaWFsb2coKSB7XHJcbiAgICB0aGlzLmRpYWxvZ0Zvcm11bGFSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nRm9ybXVsYSwge1xyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICB3aWR0aDogXCI3NSVcIixcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIGZpZWxkczogdGhpcy5hdmFpbGFibGVGaWVsZHMsXHJcbiAgICAgICAgZm9ybXVsYTogdGhpcy5maWVsZC5Gb3JtdWxhLFxyXG4gICAgICAgIGZvcm11bGFPYmplY3Q6IHRoaXMuZm9ybXVsYU9iamVjdFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRpYWxvZ0Zvcm11bGFSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLmZpZWxkLkZvcm11bGEgPSByZXN1bHQuZm9ybXVsYS50b1N0cmluZygpID09IFwiXCIgPyBudWxsIDogcmVzdWx0LmZvcm11bGEudG9TdHJpbmcoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gb3BlbkZvcm11bGFEaWFsb2dcclxuXHJcblxyXG4gIC8vI3JlZ2lvbiBhdmFudGkgaW5kaWV0cm9cclxuICAvLyBhdmFudGlJbmRpZXRybyh3aGVyZTogc3RyaW5nKSB7XHJcbiAgLy8gICB0aGlzLmRpYWxvZ0F2YW50aUluZGlldHJvUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0F2YW50aUluZGlldHJvLCB7XHJcbiAgLy8gICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXHJcbiAgLy8gICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gIC8vICAgICB3aWR0aDogXCI3NSVcIixcclxuICAvLyAgICAgZGF0YToge1xyXG4gIC8vICAgICAgIHdoZXJlOiB3aGVyZVxyXG4gIC8vICAgICB9LFxyXG4gIC8vICAgfSk7XHJcbiAgLy8gICB0aGlzLmRpYWxvZ0F2YW50aUluZGlldHJvUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAvLyAgICAgY29uc29sZS5sb2cocmVzdWx0KVxyXG4gIC8vICAgICBpZiAocmVzdWx0Py5hY3Rpb24gPT09ICdzYXZlJykge1xyXG4gIC8vICAgICAgIC8vIGNvbnNvbGUubG9nKGBIYWkgc2NlbHRvIHNhbHZhICgke3Jlc3VsdC53aGVyZX0pYCk7XHJcbiAgLy8gICAgICAgaWYod2hlcmUgPT0gXCJhdmFudGlcIil7XHJcbiAgLy8gICAgICAgICB0aGlzLnNhdmVBbmRFeGl0QWRkRmllbGQodHJ1ZSwgMSk7XHJcbiAgLy8gICAgICAgfSBlbHNlIGlmICh3aGVyZSA9PSBcImluZGlldHJvXCIpe1xyXG4gIC8vICAgICAgICAgdGhpcy5zYXZlQW5kRXhpdEFkZEZpZWxkKHRydWUsIC0xKTtcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgIH1cclxuICAvLyAgICAgaWYgKHJlc3VsdD8uYWN0aW9uID09PSAnbm9zYXZlJykge1xyXG4gIC8vICAgICAgIC8vIGNvbnNvbGUubG9nKGBIYWkgc2NlbHRvIHZpYSBzZW56YSBzYWx2YXJlICgke3Jlc3VsdC53aGVyZX0pYCk7XHJcbiAgLy8gICAgICAgaWYod2hlcmUgPT0gXCJhdmFudGlcIil7XHJcbiAgLy8gICAgICAgICB0aGlzLnNhdmVBbmRFeGl0QWRkRmllbGQoZmFsc2UsIDEpO1xyXG4gIC8vICAgICAgIH0gZWxzZSBpZiAod2hlcmUgPT0gXCJpbmRpZXRyb1wiKXtcclxuICAvLyAgICAgICAgIHRoaXMuc2F2ZUFuZEV4aXRBZGRGaWVsZChmYWxzZSwgLTEpO1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfVxyXG4gIC8vICAgfSk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBDbG9zZVNhdmUoKSB7XHJcbiAgLy8gICB0aGlzLmRpYWxvZ0F2YW50aUluZGlldHJvUmVmLmNsb3NlKHsgYWN0aW9uOiAnc2F2ZScgfSk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBDbG9zZSgpIHtcclxuICAvLyAgIHRoaXMuZGlhbG9nQXZhbnRpSW5kaWV0cm9SZWYuY2xvc2UoeyBhY3Rpb246ICdub3NhdmUnfSk7XHJcbiAgLy8gfVxyXG4gIC8vI2VuZHJlZ2lvbiBhbmFudGlcclxuXHJcbiAgLy8jcmVnaW9uIG9wZW5WaXNpYmxlSWZEaWFsb2dcclxuICBvcGVuVmlzaWJsZUlmRGlhbG9nKCkge1xyXG4gICAgdGhpcy5kaWFsb2dWaXNpYmxlSWZSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nRm9ybXVsYSwge1xyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICB3aWR0aDogXCI3NSVcIixcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIGZpZWxkczogdGhpcy5hdmFpbGFibGVGaWVsZHMsXHJcbiAgICAgICAgZm9ybXVsYTogdGhpcy5maWVsZC5WaXNpYmxlSWYsXHJcbiAgICAgICAgZm9ybXVsYU9iamVjdDogdGhpcy5mb3JtdWxhT2JqZWN0XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICAgIHRoaXMuZGlhbG9nVmlzaWJsZUlmUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdGhpcy5maWVsZC5WaXNpYmxlSWYgPSByZXN1bHQuZm9ybXVsYS50b1N0cmluZygpID09IFwiXCIgPyBudWxsIDogcmVzdWx0LmZvcm11bGEudG9TdHJpbmcoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gb3BlblZpc2libGVJZkRpYWxvZ1xyXG5cclxuICAvLyNyZWdpb24gb3BlblJlYWRPbmx5SWZEaWFsb2dcclxuICBvcGVuUmVhZE9ubHlJZkRpYWxvZygpIHtcclxuICAgIHRoaXMuZGlhbG9nUmVhZE9ubHlJZlJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dGb3JtdWxhLCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBcIjc1JVwiLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgZmllbGRzOiB0aGlzLmF2YWlsYWJsZUZpZWxkcyxcclxuICAgICAgICBmb3JtdWxhOiB0aGlzLmZpZWxkLlJlYWRvbmx5SWYsXHJcbiAgICAgICAgZm9ybXVsYU9iamVjdDogdGhpcy5mb3JtdWxhT2JqZWN0XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICAgIHRoaXMuZGlhbG9nUmVhZE9ubHlJZlJlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHRoaXMuZmllbGQuUmVhZG9ubHlJZiA9IHJlc3VsdC5mb3JtdWxhLnRvU3RyaW5nKCkgPT0gXCJcIiA/IG51bGwgOiByZXN1bHQuZm9ybXVsYS50b1N0cmluZygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBvcGVuUmVhZE9ubHlJZkRpYWxvZ1xyXG5cclxuICAvLyNyZWdpb24gb3BlbkFuc3dlclN0eWxlVmlzaWJsZUlmRGlhbG9nXHJcbiAgb3BlbkFuc3dlclN0eWxlVmlzaWJsZUlmRGlhbG9nKCkge1xyXG4gICAgdGhpcy5kaWFsb2dWaXNpYmxlSWZSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nRm9ybXVsYSwge1xyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICB3aWR0aDogXCI3NSVcIixcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIGZpZWxkczogdGhpcy5hdmFpbGFibGVGaWVsZHMsXHJcbiAgICAgICAgZm9ybXVsYTogdGhpcy5maWVsZC5BbnN3ZXJTdHlsZS5WaXNpYmxlSWYsXHJcbiAgICAgICAgZm9ybXVsYU9iamVjdDogdGhpcy5mb3JtdWxhT2JqZWN0XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICAgIHRoaXMuZGlhbG9nVmlzaWJsZUlmUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdGhpcy5maWVsZC5BbnN3ZXJTdHlsZS5WaXNpYmxlSWYgPSByZXN1bHQuZm9ybXVsYS50b1N0cmluZygpID09IFwiXCIgPyBudWxsIDogcmVzdWx0LmZvcm11bGEudG9TdHJpbmcoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gb3BlbkFuc3dlclN0eWxlVmlzaWJsZUlmRGlhbG9nXHJcblxyXG4gIHN0cmluZ1Nhbml0aXplcih2YWx1ZSkge1xyXG4gICAgaWYgKCFVdGlsaXR5SGVscGVyU2VydmljZS5zdHJpbmdDaGVja1BhcmVudGVzaXModmFsdWUpKSB7XHJcbiAgICAgIC8vIGFsZXJ0KFwiZXJyb3JlIVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBkaXNhYmxlU2F2ZUZpZWxkXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBkaXNhYmlsaXRhcmUgaWwgcHVsc2FudGUgcGVyIHNhbHZhcmUgaWwgY2FtcG8gaW5zZXJpdG8vbW9kaWZpY2F0by5cclxuICAgKiBAcmV0dXJucyBSZXN0aXR1aXNjZSB1biBib29sZWFubywgc2UgdHJ1ZSBpbCBzYWx2YXRhZ2dpbyB2aWVuZSBkaXNhYmlsaXRhdG8uXHJcbiAgICovXHJcbiAgZGlzYWJsZVNhdmVGaWVsZCgpOiBib29sZWFuIHtcclxuXHJcbiAgICBpZiAodGhpcy5maWVsZEZvcm1Hcm91cC5pbnZhbGlkKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAodGhpcy5maWVsZC5GaWVsZFR5cGUpIHtcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGdlbmVyaWNvXCJdOlxyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuRm9ybXVsYSAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5Gb3JtdWxhICE9IFwiXCJcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGlmICghKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnMpIHtcclxuICAgICAgICAgICAgKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnMgPSB7fTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVN0cmluZyAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVN0cmluZyAhPSBudWxsICYmXHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVTdHJpbmcgIT0gXCJcIikge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgISh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzIHx8XHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycy5sZW5ndGggPT09IDBcclxuICAgICAgICApO1xyXG5cclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGltbWFnaW5pXCJdOlxyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgISh0aGlzLmZpZWxkIGFzIEltYWdlU2VsZWN0b3JGaWVsZCkuQXR0YWNobWVudExpc3QgfHxcclxuICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlU2VsZWN0b3JGaWVsZCkuQXR0YWNobWVudExpc3QubGVuZ3RoID09PSAwIHx8XHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZVNlbGVjdG9yRmllbGQpLkF0dGFjaG1lbnRMaXN0LmZpbmQoXHJcbiAgICAgICAgICAgIChpKSA9PiAoaS5CdXR0b25LZXkgPT0gbnVsbCB8fCBpLkJ1dHRvbktleSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBpLkJ1dHRvbktleSA9PSAnJykgfHwgKGkuQnV0dG9uVmFsdWUgPT0gbnVsbCB8fCBpLkJ1dHRvblZhbHVlID09PSBcInVuZGVmaW5lZFwiIHx8IGkuQnV0dG9uVmFsdWUgPT0gJycpXHJcbiAgICAgICAgICApICE9IG51bGxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtLkxvb2t1cDpcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgISh0aGlzLmZpZWxkIGFzIExvb2t1cEZpZWxkKS5GaWVsZE5hbWVzIHx8XHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBMb29rdXBGaWVsZCkuRmllbGROYW1lcy5sZW5ndGggPT09IDBcclxuICAgICAgICApO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGRpc2FibGVTYXZlRmllbGRcclxuXHJcbiAgLy8jcmVnaW9uIHNhdmVBbmRFeGl0QWRkRmllbGRcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHNhbHZhcmUgaWwgY2FtcG8gaW5zZXJpdG8vbW9kaWZpY2F0by5cclxuICAgKiBTZSDDqCBzdGF0byBpbnNlcml0byB1biBmaWVsZCBjb24gbGEgc3Rlc3NhIGxhYmVsIHZpZW5lIGdlbmVyYXRvIHVuIGVycm9yZSAobGUgbGFiZWwgZGV2b25vIGVzc2VyZSB1bml2b2NoZSkuXHJcbiAgICogVW5hIHZvbHRhIGFnZ2l1bnRvL2FnZ2lvcm5hdG8gaWwgY2FtcG8gbmVsbCdlbGVuY28gZGVpIEZpZWxkIGRlbGxhIEZvcm0gY2hpdWRlIGlsIGRpYWxvZyBlIHJpY2FyaWNhIGxhIHRhYmVsbGFcclxuICAgKiBjaGUgbW9zdHJhIGwnZWxlbmNvIGRlaSBjYW1waSBhZ2dpdW50aSBhbGxhIGZvcm0uXHJcbiAgICovXHJcbiAgc2F2ZUFuZEV4aXRBZGRGaWVsZChzYXZlOiBib29sZWFuLCBuZXh0UmVsYXRpdmVJbmRleDogbnVtYmVyID0gMCkge1xyXG4gICAgdGhpcy5zZXRSZXNpemVkSW1hZ2VzSGVpZ2h0UHgoKTtcclxuICAgIHRoaXMuc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKTtcclxuICAgIGlmICh0aGlzLmltYWdlU2VsZWN0b3JBdHRhY2htZW50cykgeyB0aGlzLmltYWdlU2VsZWN0b3JBdHRhY2htZW50cy5yZWxvYWREYXRhKCk7IH1cclxuICAgIGlmIChzYXZlKSB7XHJcblxyXG4gICAgICB0aGlzLmZpZWxkLk5hbWUgPSB0aGlzLmZpZWxkLkxhYmVsO1xyXG4gICAgICAvLyByZXRyb2NvbXBhdGliaWxpdMOgIGNvbiB2YWx1ZXBhaXJzIHBlciBFbGVuY28gR2VuZXJpY29cclxuICAgICAgaWYgKHRoaXMuZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bXCJFbGVuY28gZ2VuZXJpY29cIl0pIHtcclxuICAgICAgICBpZiAoKCh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5Gb3JtdWxhICYmICh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5Gb3JtdWxhICE9IFwiXCIpIHx8ICgodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVTdHJpbmcgJiYgKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlU3RyaW5nICE9IFwiXCIpKSB7XHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGltbWFnaW5pXCJdKSB7XHJcbiAgICAgICAgaWYgKCgodGhpcy5maWVsZCBhcyBJbWFnZVNlbGVjdG9yRmllbGQpLkF0dGFjaG1lbnRMaXN0Lmxlbmd0aCA+IDApKSB7XHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZVNlbGVjdG9yRmllbGQpLkF0dGFjaG1lbnRMaXN0LmZvckVhY2goKGF0dGFjaG1lbnQpID0+IHtcclxuICAgICAgICAgICAgYXR0YWNobWVudC5SZXNpemVkSW1hZ2VIZWlnaHRQeCA9ICh0aGlzLmZpZWxkIGFzIEltYWdlU2VsZWN0b3JGaWVsZCkuUmVzaXplZEltYWdlc0hlaWdodFB4O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtLkltbWFnaW5lKSB7XHJcbiAgICAgICAgaWYgKCgodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5EeW5BdHRhY2htZW50ICE9IG51bGwpKSB7XHJcbiAgICAgICAgICAodGhpcy5maWVsZCBhcyBJbWFnZUZpZWxkKS5EeW5BdHRhY2htZW50LlJlc2l6ZWRJbWFnZUhlaWdodFB4ID0gKHRoaXMuZmllbGQgYXMgSW1hZ2VGaWVsZCkuUmVzaXplZEltYWdlc0hlaWdodFB4O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5maWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVtcIkltbWFnaW5lIGNvbiBtYXJrZXJzXCJdKSB7XHJcbiAgICAgICAgaWYgKCgodGhpcy5maWVsZCBhcyBJbWFnZVdpdGhNYXJrZXJzRmllbGQpLkR5bkF0dGFjaG1lbnQgIT0gbnVsbCkpIHtcclxuICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEltYWdlV2l0aE1hcmtlcnNGaWVsZCkuRHluQXR0YWNobWVudC5SZXNpemVkSW1hZ2VIZWlnaHRQeCA9ICh0aGlzLmZpZWxkIGFzIEltYWdlV2l0aE1hcmtlcnNGaWVsZCkuUmVzaXplZEltYWdlc0hlaWdodFB4O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5maWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVtcIkJvdHRvbmUgYXppb25lXCJdKSB7XHJcbiAgICAgICAgaWYgKCgodGhpcy5maWVsZCBhcyBBY3Rpb25CdXR0b25GaWVsZCkuZm9ybXVsYXNUZW1wICE9IG51bGwpKSB7XHJcblxyXG4gICAgICAgICAgKHRoaXMuZmllbGQgYXMgQWN0aW9uQnV0dG9uRmllbGQpLmZvcm11bGFzID0gbmV3IEFycmF5PEtleVR5cGVWYWx1ZT4oKTtcclxuXHJcbiAgICAgICAgICB2YXIgZm9ybXVsYXMgPSAodGhpcy5maWVsZCBhcyBBY3Rpb25CdXR0b25GaWVsZCkuZm9ybXVsYXNUZW1wO1xyXG4gICAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhmb3JtdWxhcyk7XHJcblxyXG4gICAgICAgICAgaWYgKGtleXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5pc0FuQWN0aW9uS2V5KGtleSwgdGhpcy5maWVsZCwgZm9ybXVsYXMpKSB7IHJldHVybjsgfVxyXG4gICAgICAgICAgICAgIHZhciBrdHY6IEtleVR5cGVWYWx1ZSA9IG5ldyBLZXlUeXBlVmFsdWUoKTtcclxuICAgICAgICAgICAgICBrdHYua2V5ID0ga2V5O1xyXG4gICAgICAgICAgICAgIGt0di50b29sdGlwID0gZm9ybXVsYXNba2V5XS50b29sdGlwO1xyXG4gICAgICAgICAgICAgIGt0di50eXBlID0gZm9ybXVsYXNba2V5XS50eXBlO1xyXG4gICAgICAgICAgICAgIGt0di52YWx1ZSA9IGZvcm11bGFzW2tleV0udmFsdWU7XHJcbiAgICAgICAgICAgICAgLyoqIHBlciBjYW1waSBjb24gdmFsb3JpIHZpbmNvbGF0aSBhIHVuYSBsaXN0YSwgcG9ydG8gZGlldHJvIHNpYSBpbCB2YWxvcmUgc2VsZXppb25hdG8gY2hlIHF1ZWxsaSBhbW1pc3NpYmlsaSAqL1xyXG4gICAgICAgICAgICAgIGt0di5hbGxvd2VkVmFsdWVzID0gZm9ybXVsYXNba2V5XS5hbGxvd2VkVmFsdWVzO1xyXG4gICAgICAgICAgICAgIGt0di5zZWxlY3RlZEFsbG93ZWRWYWx1ZSA9IGZvcm11bGFzW2tleV0uc2VsZWN0ZWRBbGxvd2VkVmFsdWU7XHJcblxyXG4gICAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIEFjdGlvbkJ1dHRvbkZpZWxkKS5mb3JtdWxhcy5wdXNoKGt0dik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG5cclxuXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZXRDb2RlVG9FeHRyYUZpZWxkcygpO1xyXG5cclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnYWRkLWZvcm0tZmllbGQgc2F2ZScsIHRoaXMuZmllbGQpXHJcbiAgICAgIGxldCBvdXQgPSB7IGZpZWxkOiB0aGlzLmZpZWxkLCByZW9wZW46IG5leHRSZWxhdGl2ZUluZGV4IH1cclxuICAgICAgdGhpcy5zYXZlRmllbGRFdmVudC5lbWl0KG91dCk7XHJcblxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBvdXQgPSB7IGZpZWxkOiBudWxsLCByZW9wZW46IG5leHRSZWxhdGl2ZUluZGV4IH1cclxuICAgICAgdGhpcy5zYXZlRmllbGRFdmVudC5lbWl0KG91dCk7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gc2F2ZUFuZEV4aXRBZGRGaWVsZFxyXG5cclxuICBpc0FuQWN0aW9uS2V5KGtleSwgZmllbGQ6IEFjdGlvbkJ1dHRvbkZpZWxkLCBmb3JtdWxhczogQXJyYXk8YW55Pikge1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImlzQW5BY3Rpb25LZXkgLSBrZXlcIiwga2V5KTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJpc0FuQWN0aW9uS2V5IC0gZmllbGRcIiwgZmllbGQpO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImlzQW5BY3Rpb25LZXkgLSBmb3JtdWxhc1wiLCBmb3JtdWxhcyk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICAgIC8qdmFyIGNvZGUgPSBmaWVsZC5CdXR0b25Db2RlO1xyXG4gICAgdmFyIGVscyA9IGZvcm11bGFzW2NvZGVdO1xyXG4gICAgcmV0dXJuIChPYmplY3Qua2V5cyhlbHMpLmZpbmQoeCA9PiB4ID09IGtleSkgIT0gbnVsbCk7Ki9cclxuICB9XHJcblxyXG4gIHNldENvZGVUb0V4dHJhRmllbGRzKCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybS5GbGRFeHRyYUNvbmZpZ1ZhbHVlcyAhPSBudWxsICYmIHRoaXMuZm9ybS5GbGRFeHRyYUNvbmZpZ1ZhbHVlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5GbGRFeHRyYUNvbmZpZ1ZhbHVlcy5maWx0ZXIoeCA9PiB4LkZpZWxkQ29uZmlnUGFyZW50RmllbGRDb2RlID09PSB1bmRlZmluZWQpLmZvckVhY2goKHVmaWVsZHMpID0+IHtcclxuICAgICAgICB1ZmllbGRzLkZpZWxkQ29uZmlnUGFyZW50RmllbGRDb2RlID0gdGhpcy5maWVsZC5OYW1lO1xyXG4gICAgICAgIGlmICh0eXBlb2YgdWZpZWxkcy5GaWVsZENvbmZpZ1ZhbHVlID09IFwiYm9vbGVhblwiKSB7IHVmaWVsZHMuRmllbGRDb25maWdWYWx1ZSA9IHVmaWVsZHMuRmllbGRDb25maWdWYWx1ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiOyB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZm9ybS5PYmplY3RGbGRFeHRyYUNvbmZpZ1ZhbHVlcyAhPSBudWxsICYmIHRoaXMuZm9ybS5PYmplY3RGbGRFeHRyYUNvbmZpZ1ZhbHVlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5PYmplY3RGbGRFeHRyYUNvbmZpZ1ZhbHVlcy5maWx0ZXIoeCA9PiB4LkZpZWxkQ29uZmlnUGFyZW50RmllbGRDb2RlID09PSB1bmRlZmluZWQpLmZvckVhY2goKHVmaWVsZHMpID0+IHtcclxuICAgICAgICB1ZmllbGRzLkZpZWxkQ29uZmlnUGFyZW50RmllbGRDb2RlID0gdGhpcy5maWVsZC5OYW1lO1xyXG4gICAgICAgIGlmICh0eXBlb2YgdWZpZWxkcy5GaWVsZENvbmZpZ1ZhbHVlID09IFwiYm9vbGVhblwiKSB7IHVmaWVsZHMuRmllbGRDb25maWdWYWx1ZSA9IHVmaWVsZHMuRmllbGRDb25maWdWYWx1ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiOyB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIHJlc3RvcmVCYXNlRmllbGRQcm9wZXJ0aWVzXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaXByaXN0aW5hcmUgbCdvZ2dldHRvIGZpZWxkIGFsIGNhbWJpbyBkZWwgdGlwbyBzZWxlemlvbmF0by5cclxuICAgKiBMYXNjaWEgdmFsb3JpenphdGUgc29sbyBsZSBwcm9wcmlldMOgIGRlbGwnb2dnZXR0byBCYXNlRmllbGQgY29tdW5lIGEgdHV0dGkgaSB0aXBpIGRpIGNhbXBvLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVzdG9yZUJhc2VGaWVsZFByb3BlcnRpZXMoKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZCkge1xyXG4gICAgICBjb25zdCB0bXBCYXNlRmllbGQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZmllbGQpKTtcclxuICAgICAgdGhpcy5maWVsZCA9IG5ldyBCYXNlRmllbGQoKTtcclxuICAgICAgdGhpcy5maWVsZC5MYWJlbCA9IHRtcEJhc2VGaWVsZC5MYWJlbDtcclxuICAgICAgdGhpcy5maWVsZC5EZXNjcmlwdGlvbiA9IHRtcEJhc2VGaWVsZC5EZXNjcmlwdGlvbjtcclxuICAgICAgdGhpcy5maWVsZC5SZXF1aXJlZCA9IHRtcEJhc2VGaWVsZC5SZXF1aXJlZDtcclxuICAgICAgdGhpcy5maWVsZC5GaWVsZFR5cGUgPSB0bXBCYXNlRmllbGQuRmllbGRUeXBlO1xyXG4gICAgICB0aGlzLmZpZWxkLkZvcm11bGEgPSB0bXBCYXNlRmllbGQuRm9ybXVsYTtcclxuICAgICAgdGhpcy5maWVsZC5Db2xTcGFuU2l6ZXMgPSB0bXBCYXNlRmllbGQuQ29sU3BhblNpemVzO1xyXG4gICAgICB0aGlzLmZpZWxkLkluTGlzdFZpZXcgPSB0bXBCYXNlRmllbGQuSW5MaXN0VmlldztcclxuICAgICAgdGhpcy5maWVsZC5JbnZpc2liaWxpdHkgPSB0bXBCYXNlRmllbGQuSW52aXNpYmlsaXR5O1xyXG4gICAgICB0aGlzLmZpZWxkLlRvb2x0aXAgPSB0bXBCYXNlRmllbGQuVG9vbHRpcDtcclxuICAgICAgdGhpcy5maWVsZC5SZWFkb25seSA9IHRtcEJhc2VGaWVsZC5SZWFkb25seTtcclxuICAgICAgdGhpcy5maWVsZC5GaWVsZEdyb3VwID0gdG1wQmFzZUZpZWxkLkZpZWxkR3JvdXA7XHJcbiAgICAgIHRoaXMuZmllbGQuVmlzaWJsZUlmID0gdG1wQmFzZUZpZWxkLlZpc2libGVJZjtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jcmVnaW9uIHJlc3RvcmVCYXNlRmllbGRQcm9wZXJ0aWVzXHJcblxyXG4gIGNvdW50VmFsdWVQYWlycyh2YWx1ZVBhaXJzKTogbnVtYmVyIHtcclxuICAgIGlmICh2YWx1ZVBhaXJzKSB7XHJcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh2YWx1ZVBhaXJzKS5sZW5ndGg7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBDb25maWd1cmVDb2x1bW5zXHJcbiAgY29uZmlndXJlQ29sdW1ucygpIHtcclxuXHJcbiAgICAvLyBMaXN0YSBHZW5lcmljYSBkaSBpbW1hZ2luaVxyXG4gICAgdGhpcy5jb25maWdDb2x1bW5MaXN0SW1hZ2VzID0gW107XHJcblxyXG4gICAgdGhpcy5jb25maWdDb2x1bW5MaXN0SW1hZ2VzLnB1c2goe1xyXG4gICAgICBrZXk6ICdhY3Rpb24nLCBkaXNwbGF5OiAnJywgdHlwZTogVHlwZUNvbHVtbi5NZW51QWN0aW9uLCBidXR0b25NZW51SWNvbjogJ21vcmVfdmVydCcsIHN0eWxlczogeyBmbGV4OiAnMCAwIDYlJyB9LFxyXG4gICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgeyBuYW1lOiAnRWxpbWluYScsIGljb246ICdkZWxldGUnLCBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMuZGVsZXRlTGlzdEltYWdlKGVsZW1lbnQsIGluZGV4LCBjb2wpIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogXCJTcG9zdGEgc3VcIixcclxuICAgICAgICAgIGljb246IFwiYXJyb3dfdXB3YXJkXCIsXHJcbiAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+XHJcbiAgICAgICAgICAgIHRoaXMubW92ZUVsZW1lbnQoZWxlbWVudCwgdHJ1ZSksXHJcbiAgICAgICAgICBkaXNhYmxlZDogKGVsZW1lbnQpID0+IHRoaXMuZmllbGQuQXR0YWNobWVudExpc3QuaW5kZXhPZihlbGVtZW50KSA9PT0gMCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6IFwiU3Bvc3RhIGdpw7lcIixcclxuICAgICAgICAgIGljb246IFwiYXJyb3dfZG93bndhcmRcIixcclxuICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT5cclxuICAgICAgICAgICAgdGhpcy5tb3ZlRWxlbWVudChlbGVtZW50LCBmYWxzZSksXHJcbiAgICAgICAgICBkaXNhYmxlZDogKGVsZW1lbnQpID0+XHJcbiAgICAgICAgICAgIHRoaXMuZmllbGQuQXR0YWNobWVudExpc3QuaW5kZXhPZihlbGVtZW50KSA+PSB0aGlzLmZpZWxkLkF0dGFjaG1lbnRMaXN0Lmxlbmd0aCAtIDEsXHJcbiAgICAgICAgfSxcclxuICAgICAgXVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jb25maWdDb2x1bW5MaXN0SW1hZ2VzLnB1c2goe1xyXG4gICAgICBrZXk6IFwiRmlsZURhdGFCYXNlNjRcIixcclxuICAgICAgZGlzcGxheTogXCJJbW1hZ2luZVwiLFxyXG4gICAgICB0eXBlOiBUeXBlQ29sdW1uLkV4dGVybmFsVGVtcGxhdGUsXHJcbiAgICAgIGV4dGVybmFsVGVtcGxhdGU6IHRoaXMuR2VuZXJpY0xpc3RJbWFnZXNJbWFnZVRlbXBsYXRlLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNvbmZpZ0NvbHVtbkxpc3RJbWFnZXMucHVzaCh7XHJcbiAgICAgIGtleTogXCJCdXR0b25LZXlcIixcclxuICAgICAgZGlzcGxheTogXCJDaGlhdmUqXCIsXHJcbiAgICAgIHR5cGU6IFR5cGVDb2x1bW4uRXh0ZXJuYWxUZW1wbGF0ZSxcclxuICAgICAgZXh0ZXJuYWxUZW1wbGF0ZTogdGhpcy5HZW5lcmljTGlzdEltYWdlc0tleVRlbXBsYXRlLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNvbmZpZ0NvbHVtbkxpc3RJbWFnZXMucHVzaCh7XHJcbiAgICAgIGtleTogXCJCdXR0b25WYWx1ZVwiLFxyXG4gICAgICBkaXNwbGF5OiBcIlZhbG9yZSpcIixcclxuICAgICAgdHlwZTogVHlwZUNvbHVtbi5FeHRlcm5hbFRlbXBsYXRlLFxyXG4gICAgICBleHRlcm5hbFRlbXBsYXRlOiB0aGlzLkdlbmVyaWNMaXN0SW1hZ2VzVmFsdWVUZW1wbGF0ZSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jb25maWdDb2x1bW5MaXN0SW1hZ2VzLnB1c2goe1xyXG4gICAgICBrZXk6IFwiSW1hZ2VXaWR0aFB4XCIsXHJcbiAgICAgIGRpc3BsYXk6IFwiTGFyZ2hlenphXCJcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jb25maWdDb2x1bW5MaXN0SW1hZ2VzLnB1c2goe1xyXG4gICAgICBrZXk6IFwiSW1hZ2VIZWlnaHRQeFwiLFxyXG4gICAgICBkaXNwbGF5OiBcIkFsdGV6emFcIlxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gQ29uZmlndXJlQ29sdW1uc1xyXG5cclxuICAvLyNyZWdpb24gbW92ZUVsZW1lbnRcclxuICBwcml2YXRlIG1vdmVFbGVtZW50KFxyXG4gICAgZWxlbWVudDogRHluQXR0YWNobWVudCxcclxuICAgIG1vdmVVcDogYm9vbGVhblxyXG4gICkge1xyXG4gICAgY29uc3Qgc3RhcnRpbmdJbmRleCA9IHRoaXMuZmllbGQuQXR0YWNobWVudExpc3QuaW5kZXhPZihlbGVtZW50KTtcclxuICAgIGNvbnN0IGVuZGluZ0luZGV4ID0gc3RhcnRpbmdJbmRleCArIChtb3ZlVXAgPyAtMSA6IDEpO1xyXG5cclxuICAgIHRoaXMuZmllbGQuQXR0YWNobWVudExpc3Quc3BsaWNlKHN0YXJ0aW5nSW5kZXgsIDEpO1xyXG4gICAgdGhpcy5maWVsZC5BdHRhY2htZW50TGlzdC5zcGxpY2UoZW5kaW5nSW5kZXgsIDAsIGVsZW1lbnQpO1xyXG5cclxuICAgIHRoaXMuc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKTtcclxuICAgIGlmICh0aGlzLmltYWdlU2VsZWN0b3JBdHRhY2htZW50cykgeyB0aGlzLmltYWdlU2VsZWN0b3JBdHRhY2htZW50cy5yZWxvYWREYXRhKCk7IH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG1vdmVFbGVtZW50XHJcblxyXG4gIC8vI3JlZ2lvbiBzZXRGaWVsZE9yZGluYWxQb3NpdGlvblxyXG4gIHByaXZhdGUgc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZC5BdHRhY2htZW50TGlzdCkge1xyXG4gICAgICB0aGlzLmZpZWxkLkF0dGFjaG1lbnRMaXN0LmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgZmllbGQuT3JkaW5hbFBvc2l0aW9uID0gdGhpcy5maWVsZC5BdHRhY2htZW50TGlzdC5pbmRleE9mKGZpZWxkKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBzZXRGaWVsZE9yZGluYWxQb3NpdGlvblxyXG5cclxuICBzZXRSZXNpemVkSW1hZ2VzSGVpZ2h0UHgoKSB7XHJcbiAgICB0aGlzLnJlc2l6ZWRJbWFnZXNIZWlnaHRQeCA9IHRoaXMuZmllbGQuUmVzaXplZEltYWdlc0hlaWdodFB4O1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlTGlzdEltYWdlKGVsOiBEeW5BdHRhY2htZW50LCBpOiBudW1iZXIsIGNvbDogbnVtYmVyKSB7XHJcbiAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5Db25maXJtKCdFbGltaW5hcmUgcXVlc3RhIGltbWFnaW5lPycsICgpID0+IHtcclxuICAgICAgdGhpcy5maWVsZC5BdHRhY2htZW50TGlzdC5zcGxpY2UoZWwub3JpZ2luYWxJbmRleCwgMSk7XHJcbiAgICAgIGlmICh0aGlzLmltYWdlU2VsZWN0b3JBdHRhY2htZW50cykgeyB0aGlzLmltYWdlU2VsZWN0b3JBdHRhY2htZW50cy5yZWxvYWREYXRhKCk7IH1cclxuXHJcbiAgICB9LCBmYWxzZSwgJ1JpY2hpZXN0YSBjb25mZXJtYScpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlSW1hZ2UoZWw6IER5bkF0dGFjaG1lbnQpIHtcclxuICAgIHRoaXMuZmllbGQuRHluQXR0YWNobWVudCA9IG51bGw7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gREIgR0VUVEVSXHJcbiAgb3BlbkRCR2V0dGVyKCkge1xyXG4gICAgaWYgKHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQgIT0gbnVsbCAmJiAhdGhpcy5RdWVyeUVkaXRvckNvbXBvbmVudC5pbnB1dFBhcmFtcy51c2VEeW5hbWljTW9kdWxlTW9jaykge1xyXG5cclxuICAgICAgdGhpcy5RdWVyeUVkaXRvckNvbXBvbmVudC5pbnB1dFBhcmFtcy5jb25maWcubW9kZSA9IFF1ZXJ5RWRpdG9yTW9kZUVudW0uQ09NUE9TRVI7XHJcbiAgICAgIHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQuaW5wdXRQYXJhbXMuY29uZmlnLmxvYWRRdWVyeVN0YXR1c2VzID0gdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZTtcclxuXHJcbiAgICAgIHRoaXMuZGlhbG9nUUVSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nUUUsIHtcclxuICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgICAgcGFuZWxDbGFzczogJ3F1ZXJ5LWVkaXRvci1tb2RhbCcsXHJcbiAgICAgICAgd2lkdGg6ICc5MCUnXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICB0aGlzLmh0dHBDbGllbnQuZ2V0KCcuL2Fzc2V0cy9tb2NrdXBzL21vY2tlZEZyb21RdWVyeUVkaXRvcl9RVUVSWV9XSVRIX1FVRVNUSU9OLnR4dCcsIHsgcmVzcG9uc2VUeXBlOiAndGV4dCcgfSlcclxuICAgICAgICAuc3Vic2NyaWJlKG1vY2tlZEZyb21RdWVyeUVkaXRvciA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRyZWF0RGF0YUZyb21RdWVyeUVkaXRvcihKU09OLnBhcnNlKG1vY2tlZEZyb21RdWVyeUVkaXRvcikuUGFyYW1zKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbG9zZVFFTW9kYWwoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1FFUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICBvbkV4dGVybmFsQ29tcG9uZW50T3V0KGV2OiBldmVudE91dCkge1xyXG4gICAgaWYgKGV2LkJlaGF2aW91cnMuaW5kZXhPZihcInNlbmQtb3V0XCIpICE9IC0xKSB7IHRoaXMub3V0LmVtaXQoZXYpOyB9XHJcbiAgICBpZiAoZXYuQmVoYXZpb3Vycy5pbmRleE9mKFwiY2xvc2UtbW9kYWxcIikgIT0gLTEpIHsgdGhpcy5jbG9zZVFFTW9kYWwoKTsgfVxyXG4gICAgaWYgKGV2LkJlaGF2aW91cnMuaW5kZXhPZihcInNhdmUtcXVlcnlcIikgIT0gLTEpIHtcclxuXHJcbiAgICAgIHRoaXMudHJlYXREYXRhRnJvbVF1ZXJ5RWRpdG9yKGV2LlBhcmFtcyk7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdHJlYXREYXRhRnJvbVF1ZXJ5RWRpdG9yKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSA9IGRhdGE7XHJcbiAgICB0aGlzLmNyZWF0ZUNvbHVtbktleXMoZGF0YSk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVDb2x1bW5LZXlzKGRhdGEpIHtcclxuICAgIGlmIChkYXRhID09IG51bGwgJiYgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSAhPSBudWxsKSB7IGRhdGEgPSB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlOyB9XHJcbiAgICBpZiAoZGF0YSAhPSBudWxsICYmIHR5cGVvZiBkYXRhICE9IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGRhdGEuc2VsZWN0ZWRGaWVsZHMgIT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICB0aGlzLmNvbHVtbktleXMgPSBuZXcgQXJyYXk8eyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PigpO1xyXG4gICAgICBkYXRhLnNlbGVjdGVkRmllbGRzLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY29sdW1uS2V5cy5wdXNoKHsga2V5OiBrZXkuRGF0YWJhc2VUYWJsZU5hbWUgKyBcIl9cIiArIGtleS5Qcm9wZXJ0eU5hbWUgKyBcIl9fXCIgKyBrZXkuQ3VycmVudFRyYW5zbGF0ZS5yZXBsYWNlKFwiIFwiLCBcIl9cIiksIHZhbHVlOiBrZXkuQ3VycmVudFRyYW5zbGF0ZSB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBEQiBHRVRURVJcclxuXHJcbiAgZ2V0QWxsTW9kdWxlcygpIHtcclxuICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPVxyXG4gICAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgUGFyYW1OYW1lOiBcIm9yZ2FpZFwiLFxyXG4gICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm0uT3JnYUlELFxyXG4gICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEFsbEZvcm1FbmRQb2ludCxcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgKHJlczogQXJyYXk8Rm9ybT4pID0+IHtcclxuICAgICAgICB0aGlzLmZvcm1zID0gcmVzO1xyXG4gICAgICAgIHRoaXMuZm9ybXMgPSB0aGlzLmZvcm1zLnNvcnQoKHVubywgZHVlKSA9PiB1bm8uTmFtZS5sb2NhbGVDb21wYXJlKGR1ZS5OYW1lKSk7XHJcblxyXG4gICAgICAgIHRoaXMuRE1GaWVsZCA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuRE1Nb2R1bGUgPT0gbnVsbCAmJiB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuRE1Nb2R1bGUgPSB0aGlzLmZvcm1zLmZpbmQoeCA9PiB4LkNvZGUgPT0gdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSk7XHJcbiAgICAgICAgICB0aGlzLkRNTW9kdWxlLkZpZWxkcyA9IEpTT04ucGFyc2UodGhpcy5ETU1vZHVsZS5Kc29uRmllbGRzKTtcclxuICAgICAgICAgIHRoaXMuRE1GaWVsZHMgPSBuZXcgQXJyYXk8eyBrZXk6IHN0cmluZyB9PigpO1xyXG4gICAgICAgICAgdGhpcy5ETU1vZHVsZS5GaWVsZHMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5ETUZpZWxkcy5wdXNoKHsga2V5OiBlbGVtZW50LlZhbHVlLk5hbWUgfSk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0aGlzLkRNRmllbGRzID0gdGhpcy5ETUZpZWxkcy5zb3J0KCh1bm8sIGR1ZSkgPT4gdW5vLmtleS5sb2NhbGVDb21wYXJlKGR1ZS5rZXkpKTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuRE1GaWVsZCA9IHRoaXMuRE1GaWVsZHMuZmluZCh4ID0+IHgua2V5ID09IHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnIpID0+IHsgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlRE1Nb2R1bGUoKSB7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwidGhpcy4uZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWVcIiwgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSk7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwidGhpcy5ETU1vZHVsZVwiLCB0aGlzLkRNTW9kdWxlKTtcclxuICAgIGlmICh0aGlzLkRNTW9kdWxlICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5ETU1vZHVsZS5GaWVsZHMgPSBKU09OLnBhcnNlKHRoaXMuRE1Nb2R1bGUuSnNvbkZpZWxkcyk7XHJcbiAgICAgIHRoaXMuRE1GaWVsZHMgPSBuZXcgQXJyYXk8eyBrZXk6IHN0cmluZyB9PigpO1xyXG4gICAgICB0aGlzLkRNTW9kdWxlLkZpZWxkcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgIHRoaXMuRE1GaWVsZHMucHVzaCh7IGtleTogZWxlbWVudC5WYWx1ZS5OYW1lIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUgPSB0aGlzLkRNTW9kdWxlLkNvZGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLkRNTW9kdWxlID0gbnVsbDtcclxuICAgICAgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSA9IG51bGw7XHJcbiAgICAgIHRoaXMuRE1GaWVsZCA9IG51bGw7XHJcbiAgICAgIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2UgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VETUZpZWxkKCkge1xyXG4gICAgaWYgKHRoaXMuRE1GaWVsZCAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2UgPSB0aGlzLkRNRmllbGQua2V5O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZURNQ29udGVzdHVhbGl6YXRpb24oKSB7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwib25DaGFuZ2VETUNvbnRlc3R1YWxpemF0aW9uKClcIiwgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb250ZXN0dWFsaXphdGlvbik7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VkQnV0dG9uRmllbGQoZmllbGQ6IEFjdGlvbkJ1dHRvbkZpZWxkKSB7XHJcbiAgICB0aGlzLmZpZWxkID0gZmllbGQ7XHJcbiAgfVxyXG5cclxuICBjb25maWd1cmVGaWVsZHNFeHRyYSgpIHtcclxuXHJcbiAgICB2YXIgdGhpc0ZpZWxkRXh0cmFDb25maWdWYWx1ZXM6IEFycmF5PEZpZWxkRXh0cmFWYWx1ZXM+ID0gdGhpcy5mb3JtLkZsZEV4dHJhQ29uZmlnVmFsdWVzID09IG51bGwgPyBudWxsIDogdGhpcy5mb3JtLkZsZEV4dHJhQ29uZmlnVmFsdWVzLmZpbHRlcih4ID0+IHguRmllbGRDb25maWdQYXJlbnRGaWVsZENvZGUgPT0gdGhpcy5maWVsZC5OYW1lKTtcclxuXHJcbiAgICBpZiAodGhpcy5maWVsZHNFeHRyYUNvbmZpZyAhPSBudWxsICYmIHRoaXMuZmllbGRzRXh0cmFDb25maWcubGVuZ3RoID4gMCAmJiB0aGlzLmZvcm0uT2JqZWN0RmxkRXh0cmFDb25maWdWYWx1ZXMgPT0gbnVsbCAmJiAodGhpc0ZpZWxkRXh0cmFDb25maWdWYWx1ZXMgPT0gbnVsbCB8fCB0aGlzRmllbGRFeHRyYUNvbmZpZ1ZhbHVlcy5sZW5ndGggPT0gMCkpIHtcclxuICAgICAgdGhpcy5mb3JtLk9iamVjdEZsZEV4dHJhQ29uZmlnVmFsdWVzID0gbmV3IEFycmF5PGFueT4oKTtcclxuICAgICAgdGhpc0ZpZWxkRXh0cmFDb25maWdWYWx1ZXMgPSBuZXcgQXJyYXk8RmllbGRFeHRyYVZhbHVlcz4oKTtcclxuICAgICAgdGhpcy5maWVsZHNFeHRyYUNvbmZpZy5mb3JFYWNoKChmaWVsZEV4dHJhQ29uZmlnKSA9PiB7XHJcblxyXG4gICAgICAgIHZhciBuZXdmaWVsZDogRmllbGRFeHRyYVZhbHVlcyA9IG5ldyBGaWVsZEV4dHJhVmFsdWVzKCk7XHJcbiAgICAgICAgbmV3ZmllbGQuRmllbGRDb25maWdDb2RlID0gZmllbGRFeHRyYUNvbmZpZy5GaWVsZENvbmZpZ0NvZGU7XHJcbiAgICAgICAgbmV3ZmllbGQuRmllbGRDb25maWdQYXJlbnRGaWVsZENvZGUgPSB0aGlzLmZpZWxkLk5hbWU7XHJcblxyXG4gICAgICAgIGlmIChmaWVsZEV4dHJhQ29uZmlnLkZpZWxkQ29uZmlnVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydCb29sZWFubyddKSB7XHJcbiAgICAgICAgICBuZXdmaWVsZC5GaWVsZENvbmZpZ1ZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmaWVsZEV4dHJhQ29uZmlnLkZpZWxkQ29uZmlnVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydDYW1wbyBkaSB0ZXN0byddKSB7XHJcbiAgICAgICAgICBuZXdmaWVsZC5GaWVsZENvbmZpZ1ZhbHVlID0gXCJcIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybS5PYmplY3RGbGRFeHRyYUNvbmZpZ1ZhbHVlcy5wdXNoKG5ld2ZpZWxkKTtcclxuICAgICAgICB0aGlzRmllbGRFeHRyYUNvbmZpZ1ZhbHVlcy5wdXNoKG5ld2ZpZWxkKTtcclxuXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZm9ybS5GbGRFeHRyYUNvbmZpZ1ZhbHVlcyA9PSBudWxsKSB7IHRoaXMuZm9ybS5GbGRFeHRyYUNvbmZpZ1ZhbHVlcyA9IG5ldyBBcnJheTxGaWVsZEV4dHJhVmFsdWVzPigpOyB9XHJcbiAgICAgIHRoaXNGaWVsZEV4dHJhQ29uZmlnVmFsdWVzLmZvckVhY2goKGVjdikgPT4ge1xyXG4gICAgICAgIHRoaXMuZm9ybS5GbGRFeHRyYUNvbmZpZ1ZhbHVlcy5wdXNoKGVjdik7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZpZWxkc0V4dHJhQ29uZmlnICE9IG51bGwgJiYgdGhpcy5maWVsZHNFeHRyYUNvbmZpZy5sZW5ndGggPiAwICYmIHRoaXMuZm9ybS5PYmplY3RGbGRFeHRyYUNvbmZpZ1ZhbHVlcyAhPSBudWxsICYmICh0aGlzLmZvcm0uRmxkRXh0cmFDb25maWdWYWx1ZXMgPT0gbnVsbCB8fCB0aGlzLmZvcm0uRmxkRXh0cmFDb25maWdWYWx1ZXMubGVuZ3RoID09IDApKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5PYmplY3RGbGRFeHRyYUNvbmZpZ1ZhbHVlcy5mb3JFYWNoKChleHRyYWZpZWxkKSA9PiB7XHJcbiAgICAgICAgdGhpcy5mb3JtLkZsZEV4dHJhQ29uZmlnVmFsdWVzLnB1c2goZXh0cmFmaWVsZCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubG9hZGVkRmllbGRFeHRyYSA9IHRydWU7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8IS0tIDxkaXYgY2xhc3M9XCJhZGQtZm9ybS1maWVsZCBiaWd3cmFwcGVyXCIgc3R5bGU9XCJtYXgtaGVpZ2h0OiAxMDB2aCAhaW1wb3J0YW50OyBvdmVyZmxvdy14OiBoaWRkZW47IG92ZXJmbG93LXk6IGF1dG87XCI+IC0tPlxyXG5cclxuPG1hdC1jYXJkIGNsYXNzPVwiYWRkLWZvcm0tZmllbGRcIj5cclxuICAgIDxtYXQtY2FyZC1oZWFkZXIgY2xhc3M9XCJ3LTEwMFwiPlxyXG4gICAgICAgIDxtYXQtY2FyZC10aXRsZSBjbGFzcz1cInctMTAwIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAgKm5nSWY9XCJpbmRleEZpZWxkICE9IG51bGwgJiYgaW5kZXhGaWVsZCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uLW5leHQgYmctZGFuZ2VyIHRleHQtd2hpdGUgbWUtM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVBbmRFeGl0QWRkRmllbGQoZmFsc2UsIC0xKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEFubnVsbGEgaW5kaWV0cm8gXHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbi1uZXh0IGJnLXN1Y2Nlc3MgdGV4dC13aGl0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVBbmRFeGl0QWRkRmllbGQodHJ1ZSwgLTEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgU2FsdmEgaW5kaWV0cm8gXHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHgtNSBhbGlnbi1jb250ZW50LWFyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiSW5kZXgge3tpbmRleEZpZWxkfX1cIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3tpbmRleEZpZWxkICE9IG51bGwgJiYgaW5kZXhGaWVsZCA+PSAwID8gXCJNb2RpZmljYVwiIDogXCJBZ2dpdW5naVwifX0gY2FtcG8gXHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgICpuZ0lmPVwiaW5kZXhGaWVsZCAhPSBudWxsICYmIGluZGV4RmllbGQgPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b24tbmV4dCBiZy1kYW5nZXIgdGV4dC13aGl0ZSBtZS0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZUFuZEV4aXRBZGRGaWVsZChmYWxzZSwgMSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpbmRleEZpZWxkID09IHRoaXMuZm9ybS5GaWVsZHMubGVuZ3RoIC0xID8gXCJBbm51bGxhIGVhZ2dpdW5naVwiIDogXCJBbm51bGxhIGF2YW50aVwifX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbi1uZXh0IGJnLXN1Y2Nlc3MgdGV4dC13aGl0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVBbmRFeGl0QWRkRmllbGQodHJ1ZSwgMSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpbmRleEZpZWxkID09IHRoaXMuZm9ybS5GaWVsZHMubGVuZ3RoIC0xID8gXCJTYWx2YSBlIGFnZ2l1bmdpXCIgOiBcIlNhbHZhIGF2YW50aVwifX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSB7e3RoaXMuZm9ybS5GaWVsZHMubGVuZ3RofX0gLS0+XHJcbiAgICAgICAgPC9tYXQtY2FyZC10aXRsZT5cclxuICAgIDwvbWF0LWNhcmQtaGVhZGVyPlxyXG5cclxuICAgIDxtYXQtY2FyZC1jb250ZW50PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkIGNvbnRhaW5lckNvbnRlbnQgXCI+XHJcbiAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIiBzdHlsZT1cImhlaWdodDogMTAwJTtcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIEFSRUEgUFJJTkNJUEFMRSAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZXFwLWRmb3JtLWFkZC1mb3JtLWZpZWxkLW1haW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBUSVBPIENBTVBPIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMiB0aXBvQ2FtcG9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyd0ZXh0LWRhbmdlcic6IGZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydGaWVsZFR5cGUnXS5zdGF0dXMgIT0gJ1ZBTElEJyAmJiBmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snRmllbGRUeXBlJ10udG91Y2hlZCB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXBvIGNhbXBvICpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxlcXAtc2VsZWN0IFtlbnVtRGF0YV09XCJGaWVsZFR5cGVFbnVtXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLkZpZWxkVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0NhbmNlbEJ1dHRvbl09XCJmYWxzZVwiIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25GaWVsZFR5cGVDaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ0ZpZWxkVHlwZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VudW1EYXRhVG9FeGNsdWRlXT1cImZpZWxkVHlwZXNUb0V4Y2x1ZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIFRJUE8gQ0FNUE8gLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIENPRElDRSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyd0ZXh0LWRhbmdlcic6IGZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydMYWJlbCddLnN0YXR1cyAhPSAnVkFMSUQnICYmIGZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydMYWJlbCddLnRvdWNoZWQgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kaWNlICpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJMYWJlbFwiIHJlcXVpcmVkIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuTGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCIgc3BlbGxjaGVjaz1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLkxhYmVsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdMYWJlbCcpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0xhYmVsJ10uZXJyb3JzPy5bJ3JlcXVpcmVkJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iYmxpZ2F0b3Jpb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTGFiZWwnXS5lcnJvcnM/LlsncGF0dGVybiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaSBwb3Nzb25vIGluc2VyaXJlIHNvbG8gbGV0dGVyZSBhLXpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0xhYmVsJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBDT0RJQ0UgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIERFU0NSSVpJT05FIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3RleHQtZGFuZ2VyJzogZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0Rlc2NyaXB0aW9uJ10uc3RhdHVzICE9ICdWQUxJRCcgJiYgZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0Rlc2NyaXB0aW9uJ10udG91Y2hlZCB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcml6aW9uZSAqXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cIkRlc2NyaXB0aW9uXCIgZm9ybUNvbnRyb2xOYW1lPVwiRGVzY3JpcHRpb25cIiByZXF1aXJlZCBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGQuRGVzY3JpcHRpb25cIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5EZXNjcmlwdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1lcnJvciAqbmdJZj1cIiFmaWVsZC5EZXNjcmlwdGlvbi52YWxpZCAmJiBmaWVsZC5Gb3JtRm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLkRlc2NyaXB0aW9uXS50b3VjaGVkXCI+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdEZXNjcmlwdGlvbicpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0Rlc2NyaXB0aW9uJ10uZXJyb3JzPy5bJ3JlcXVpcmVkJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iYmxpZ2F0b3Jpb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snRGVzY3JpcHRpb24nXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIERFU0NSSVpJT05FIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBTRVpJT05FIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiICpuZ0lmPVwiZm9ybUZpZWxkc0dyb3Vwc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3RleHQtZGFuZ2VyJzogZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0ZpZWxkR3JvdXAnXS5zdGF0dXMgIT0gJ1ZBTElEJyAmJiBmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snRmllbGRHcm91cCddLnRvdWNoZWQgfVwiPlNlemlvbmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGVxcC1zZWxlY3QgW2FycmF5RGF0YV09XCJmb3JtRmllbGRzR3JvdXBzXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLkZpZWxkR3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FycmF5S2V5UHJvcGVydHldPVwiJ05hbWUnXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCInTmFtZSdcIiBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidGaWVsZEdyb3VwJ1wiIHJlcXVpcmVkIFtpbmNsdWRlRnVsbE9iamVjdF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdGaWVsZEdyb3VwJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0ZpZWxkR3JvdXAnXS5lcnJvcnM/LlsncmVxdWlyZWQnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmJsaWdhdG9yaW9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gU0VaSU9ORSAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gT0JCTElHQVRPUklPIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMiAgYWxpZ24tc2VsZi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5SZXF1aXJlZFwiIGZvcm1Db250cm9sTmFtZT1cIlJlcXVpcmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JibGlnYXRvcmlvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBPQkJMSUdBVE9SSU8gLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIFJFQURPTkxZIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMiAgYWxpZ24tc2VsZi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5SZWFkb25seVwiIGZvcm1Db250cm9sTmFtZT1cIlJlYWRvbmx5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZE9ubHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPiAgICBcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTIgIGFsaWduLXNlbGYtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZE9ubHkgSWYgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiUmVhZG9ubHlJZlwiIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuUmVhZG9ubHlJZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlblJlYWRPbmx5SWZEaWFsb2coKVwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuUmVhZG9ubHlJZilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBSRUFET05MWSAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gQUdHUkVHQVpJT05JLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMiAgYWxpZ24tc2VsZi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGVxcC1zZWxlY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWdncmVnYXRpb25GaWVsZExvYWRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0FnZ3JlZ2F6aW9uaSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzTXVsdGlTZWxlY3RdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZW51bURhdGFdPVwiYWdncmVnYXRpb25GdW5jdGlvbkVudW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLkFnZ3JlZ2F0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIEFHR1JFR0FaSU9OSS0tPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gQVJFQSBQUklOQ0lQQUxFIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIEFSRUEgVEFCUyAtLT5cclxuICAgICAgICAgICAgICAgIDxtYXQtdGFiLWdyb3VwIGNsYXNzPVwiZXFwLWRmb3JtLWFkZC1mb3JtLWZpZWxkLXRhYnNcIiBtYXQtc3RyZXRjaC10YWJzPVwiZmFsc2VcIiBtYXQtYWxpZ24tdGFicz1cInN0YXJ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gU1RJTEUgQ09NUElMQVpJT05FIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiU3RpbGUgQ29tcGlsYXppb25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBMQVJHSEVaWkEgQ0FNUE8gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkxhcmdoZXp6YSBjYW1wbzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlcXAtc2VsZWN0IFthcnJheURhdGFdPVwiYXZhaWxhYmxlQ29sU3BhblNpemVzQ29tcGlsYXppb25lXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLkNvbFNwYW5TaXplc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcnJheUtleVByb3BlcnR5XT1cIidrZXknXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCIndmFsdWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJvbkNvbFNwYW5TaXplU2VsZWN0KClcIiBbaXNNdWx0aVNlbGVjdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidDb2xTcGFuU2l6ZXMnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luY2x1ZGVGdWxsT2JqZWN0XT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBMQVJHSEVaWkEgQ0FNUE8gLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gTEFCRUwgQ1NTIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD4gTGFiZWwgY3NzIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJMYWJlbHN0eWxlQ1NTXCIgZm9ybUNvbnRyb2xOYW1lPVwiTGFiZWxzdHlsZUNTU1wiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLkxhYmVsc3R5bGVDU1NcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5MYWJlbHN0eWxlQ1NTKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnTGFiZWxzdHlsZUNTUycpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydMYWJlbHN0eWxlQ1NTJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIExBQkVMIENTUyAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBGSUVMRCBDU1MgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBGaWVsZCBjc3MgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cIkZpZWxkc3R5bGVDU1NcIiBmb3JtQ29udHJvbE5hbWU9XCJGaWVsZHN0eWxlQ1NTXCIgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGQuRmllbGRzdHlsZUNTU1wiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLkZpZWxkc3R5bGVDU1MpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdGaWVsZHN0eWxlQ1NTJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0ZpZWxkc3R5bGVDU1MnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gRklFTEQgQ1NTIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIFZJU0lCTEUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTIgYWxpZ24tc2VsZi1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiKGZpZWxkLlZpc2libGVJZiAhPSBudWxsIHx8IGZpZWxkLlZpc2libGVJZiAhPSB1bmRlZmluZWQpICYmIGZpZWxkLlZpc2libGVJZiAhPSAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIgYWxpZ24tc2VsZi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5Jbkxpc3RWaWV3XCIgZm9ybUNvbnRyb2xOYW1lPVwiSW5MaXN0Vmlld1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBbZGlzYWJsZWRdPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0luTGlzdFZpZXcnXS5kaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlzaWJpbGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBWSVNJQkxFIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIElOVklTSUJJTEUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTIgYWxpZ24tc2VsZi1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZC5Jbkxpc3RWaWV3ICYmIChmaWVsZC5WaXNpYmxlSWYgPT0gbnVsbCB8fCBmaWVsZC5WaXNpYmxlSWYgPT0gdW5kZWZpbmVkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIgYWxpZ24tc2VsZi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlwbyBkaSBpbnZpc2liaWxpdMOgIGRlbCBjYW1wb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXFwLXNlbGVjdCBbZW51bURhdGFdPVwiZmllbGRJbnZpc2liaWxpdHlFbnVtXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLkludmlzaWJpbGl0eVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInSW52aXNpYmlsaXR5J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmNsdWRlRnVsbE9iamVjdF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXFwLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gSU5WSVNJQkxFIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIFZJU0lCTEUgSUYgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBWaXNpYmxlSWYgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cIlZpc2libGVJZlwiIGZvcm1Db250cm9sTmFtZT1cIlZpc2libGVJZlwiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLlZpc2libGVJZlwiIChjbGljayk9XCJvcGVuVmlzaWJsZUlmRGlhbG9nKClcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5WaXNpYmxlSWYpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdWaXNpYmxlSWYnKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snVmlzaWJsZUlmJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJWaXNpYmxlSWZcIiBmb3JtQ29udHJvbE5hbWU9XCJWaXNpYmxlSWZcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLlZpc2libGVJZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiVmlzaWJsZUlmQXV0b2NvbXBsZXRlXCIgKGtleXVwKT1cInNldFZpc2libGVJZkF1dG9jb21wbGV0ZU9wdGlvbnMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJzZXRWaXNpYmxlSWZBdXRvY29tcGxldGVPcHRpb25zKG51bGwpXCIgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5WaXNpYmxlSWYpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI1Zpc2libGVJZkF1dG9jb21wbGV0ZT1cIm1hdEF1dG9jb21wbGV0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIFZpc2libGVJZkF1dG9jb21wbGV0ZU9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29wdGlvbi5sYWJlbH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gVklTSUJMRSBJRiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBNQUlOVEFJTiBWQUxVRSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMiBhbGlnbi1zZWxmLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGRlbl09XCIoZmllbGQuVmlzaWJsZUlmID09IG51bGwgfHwgZmllbGQuVmlzaWJsZUlmID09IHVuZGVmaW5lZCkgJiYgZmllbGQuVmlzaWJsZUlmICE9ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiBhbGlnbi1zZWxmLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImZpZWxkLk1haW50YWluX1ZhbHVlXCIgZm9ybUNvbnRyb2xOYW1lPVwiTWFpbnRhaW5fVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgW2Rpc2FibGVkXT1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNYWludGFpbl9WYWx1ZSddLmRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYW50aWVuaSBpbCB2YWxvcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBNQUlOVEFJTiBWQUxVRSAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBUT09MVElQIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD4gVG9vbHRpcCA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPVwiVG9vbHRpcFwiIGZvcm1Db250cm9sTmFtZT1cIlRvb2x0aXBcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5Ub29sdGlwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnVG9vbHRpcCcpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydUb29sdGlwJ10uZXJyb3JzPy5bJ3JlcXVpcmVkJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JibGlnYXRvcmlvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snVG9vbHRpcCddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBUT09MVElQIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIFNUSUxFIENPTVBJTEFaSU9ORSAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gU1RJTEUgREVMTEEgUklTUFNPVEEgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJTdGlsZSBSaXNwb3N0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gTEFSR0hFWlpBIENBTVBPIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5MYXJnaGV6emEgY2FtcG88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXFwLXNlbGVjdCBbYXJyYXlEYXRhXT1cImF2YWlsYWJsZUNvbFNwYW5TaXplc1Jpc3Bvc3RhXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLkFuc3dlclN0eWxlLkNvbFNwYW5TaXplc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcnJheUtleVByb3BlcnR5XT1cIidrZXknXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCIndmFsdWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJvbkNvbFNwYW5TaXplU2VsZWN0KClcIiBbaXNNdWx0aVNlbGVjdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidBbnN3ZXJTdHlsZUNvbFNwYW5TaXplcydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5jbHVkZUZ1bGxPYmplY3RdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIExBUkdIRVpaQSBDQU1QTyAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBMQUJFTCBDU1MgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBMYWJlbCBjc3MgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cIkFuc3dlclN0eWxlTGFiZWxzdHlsZUNTU1wiIGZvcm1Db250cm9sTmFtZT1cIkFuc3dlclN0eWxlTGFiZWxzdHlsZUNTU1wiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLkFuc3dlclN0eWxlLkxhYmVsc3R5bGVDU1NcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5BbnN3ZXJTdHlsZS5MYWJlbHN0eWxlQ1NTKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnTGFiZWxzdHlsZUNTUycpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydBbnN3ZXJTdHlsZUxhYmVsc3R5bGVDU1MnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gTEFCRUwgQ1NTIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIEZJRUxEIENTUyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+IEZpZWxkIGNzcyA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPVwiQW5zd2VyU3R5bGVGaWVsZHN0eWxlQ1NTXCIgZm9ybUNvbnRyb2xOYW1lPVwiQW5zd2VyU3R5bGVGaWVsZHN0eWxlQ1NTXCIgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGQuQW5zd2VyU3R5bGUuRmllbGRzdHlsZUNTU1wiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLkFuc3dlclN0eWxlLkZpZWxkc3R5bGVDU1MpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdGaWVsZHN0eWxlQ1NTJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0Fuc3dlclN0eWxlRmllbGRzdHlsZUNTUyddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBGSUVMRCBDU1MgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gVklTSUJMRSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMiBhbGlnbi1zZWxmLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGRlbl09XCIoZmllbGQuQW5zd2VyU3R5bGUuVmlzaWJsZUlmICE9IG51bGwgfHwgZmllbGQuQW5zd2VyU3R5bGUuVmlzaWJsZUlmICE9IHVuZGVmaW5lZCkgJiYgZmllbGQuQW5zd2VyU3R5bGUuVmlzaWJsZUlmICE9ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiBhbGlnbi1zZWxmLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImZpZWxkLkFuc3dlclN0eWxlLkluTGlzdFZpZXdcIiBmb3JtQ29udHJvbE5hbWU9XCJBbnN3ZXJTdHlsZUluTGlzdFZpZXdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgW2Rpc2FibGVkXT1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydBbnN3ZXJTdHlsZUluTGlzdFZpZXcnXS5kaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlzaWJpbGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBWSVNJQkxFIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBJTlZJU0lCSUxFIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yIGFsaWduLXNlbGYtY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkLkFuc3dlclN0eWxlLkluTGlzdFZpZXdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiIGFsaWduLXNlbGYtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpcG8gZGkgaW52aXNpYmlsaXTDoCBkZWwgY2FtcG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVxcC1zZWxlY3QgW2VudW1EYXRhXT1cImZpZWxkSW52aXNpYmlsaXR5RW51bVwiIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5BbnN3ZXJTdHlsZS5JbnZpc2liaWxpdHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ0Fuc3dlclN0eWxlSW52aXNpYmlsaXR5J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmNsdWRlRnVsbE9iamVjdF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXFwLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gSU5WSVNJQkxFIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIFZJU0lCTEUgSUYgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBWaXNpYmxlSWYgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cIkFuc3dlclN0eWxlVmlzaWJsZUlmXCIgZm9ybUNvbnRyb2xOYW1lPVwiQW5zd2VyU3R5bGVWaXNpYmxlSWZcIiBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWVsZC5BbnN3ZXJTdHlsZS5WaXNpYmxlSWZcIiAoY2xpY2spPVwib3BlbkFuc3dlclN0eWxlVmlzaWJsZUlmRGlhbG9nKClcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5BbnN3ZXJTdHlsZS5WaXNpYmxlSWYpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdWaXNpYmxlSWYnKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snQW5zd2VyU3R5bGVWaXNpYmxlSWYnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cIlZpc2libGVJZlwiIGZvcm1Db250cm9sTmFtZT1cIlZpc2libGVJZlwiIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuVmlzaWJsZUlmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJWaXNpYmxlSWZBdXRvY29tcGxldGVcIiAoa2V5dXApPVwic2V0VmlzaWJsZUlmQXV0b2NvbXBsZXRlT3B0aW9ucygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cInNldFZpc2libGVJZkF1dG9jb21wbGV0ZU9wdGlvbnMobnVsbClcIiAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLlZpc2libGVJZilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjVmlzaWJsZUlmQXV0b2NvbXBsZXRlPVwibWF0QXV0b2NvbXBsZXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgVmlzaWJsZUlmQXV0b2NvbXBsZXRlT3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b3B0aW9uLmxhYmVsfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBWSVNJQkxFIElGIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIFNUSUxFIERFTExBIFJJU1BTT1RBIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tI3JlZ2lvbiBTUEVDSUZJQ0hFIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiU3BlY2lmaWNoZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmllbGRUeXBlRm9ybVRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIFNQRUNJRklDSEUgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIE1PREFMSVRBJyBSRUNVUEVSTyBEQVRJIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiTW9kYWxpdMOgIHJlY3VwZXJvIGRhdGlcIiAqbmdJZj1cImZpZWxkLkZpZWxkVHlwZSAhPSBGaWVsZFR5cGVFbnVtWydCb3R0b25lIGF6aW9uZSddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlcXAtc2VsZWN0IFtlbnVtRGF0YV09XCJkYXRhR2V0dGVyVHlwZUVudW1cIiBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0NhbmNlbEJ1dHRvbl09XCJmYWxzZVwiIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25EYXRhR2V0dGVyVHlwZUNoYW5nZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInRGF0YUdldHRlclR5cGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCIgW2hpZGRlbl09XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlICE9IGRhdGFHZXR0ZXJUeXBlRW51bS5NYW51YWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD4gVmFsb3JlIGRpIERlZmF1bHQgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiRGF0YUdldHRlclZhbHVlXCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZVwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIiBbaGlkZGVuXT1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgIT0gZGF0YUdldHRlclR5cGVFbnVtLkZvcm11bGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBGb3JtdWxhIChKYXZhc2NyaXB0KSA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJGb3JtdWxhXCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5Gb3JtdWxhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuRm9ybXVsYURpYWxvZygpXCIgc3BlbGxjaGVjaz1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5Gb3JtdWxhKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnRm9ybXVsYScpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydGb3JtdWxhJ10uZXJyb3JzPy5bJ3JlcXVpcmVkJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JibGlnYXRvcmlvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snRm9ybXVsYSddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiICpuZ0lmPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBkYXRhR2V0dGVyVHlwZUVudW1bJ0RhIGRhdGFiYXNlJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG10LTQgY29uZmlndXJhUXVlcnlFZGl0b3JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPkNvbmZpZ3VyYSBpbiBRdWVyeSBFZGl0b3I8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwib3BlbkRCR2V0dGVyKClcIiAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlID09IG51bGxcIj5Qcm9jZWRpPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiIChjbGljayk9XCJvcGVuREJHZXR0ZXIoKVwiICpuZ0lmPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUgIT0gbnVsbFwiPk1vZGlmaWNhPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlICE9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlNlbGV6aW9uYSBjb2xvbm5hPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXFwLXNlbGVjdCBbYXJyYXlEYXRhXT1cImNvbHVtbktleXNcIiBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcnJheUtleVByb3BlcnR5XT1cIidrZXknXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCIndmFsdWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0NhbmNlbEJ1dHRvbl09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlICE9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlB1bHNhbnRlIHJlc2V0PzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJIYXNSZXNldEJ1dHRvblwiIGZvcm1Db250cm9sTmFtZT1cIkRhdGFHZXR0ZXJIYXNSZXNldEJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiICpuZ0lmPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBkYXRhR2V0dGVyVHlwZUVudW1bJ0RhIG1vZHVsbyBkaW5hbWljbyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtdC00XCIgKm5nSWY9XCJmb3Jtcy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPk1vZHVsbzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVxcC1zZWxlY3QgW3BsYWNlaG9sZGVyXT1cIidTZWxlemlvbmEgbW9kdWxvJ1wiIFthcnJheURhdGFdPVwiZm9ybXNcIiBbKG5nTW9kZWxJbnB1dCldPVwiRE1Nb2R1bGVcIiBbaXNTZWFyY2hhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcnJheUtleVByb3BlcnR5XT1cIidDb2RlJ1wiIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ05hbWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ0RNTW9kdWxlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJvbkNoYW5nZURNTW9kdWxlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSAhPSBudWxsICYmIERNTW9kdWxlICE9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPkNhbXBvPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXFwLXNlbGVjdCBbcGxhY2Vob2xkZXJdPVwiJ1NlbGV6aW9uYSBjYW1wbydcIiBbYXJyYXlEYXRhXT1cIkRNRmllbGRzXCIgWyhuZ01vZGVsSW5wdXQpXT1cIkRNRmllbGRcIiBbaXNTZWFyY2hhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcnJheUtleVByb3BlcnR5XT1cIidrZXknXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCIna2V5J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidETUZpZWxkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJvbkNoYW5nZURNRmllbGQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXFwLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ0FSRElOQUxJVEEgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlICE9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPkNhcmRpbmFsaXTDoDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVxcC1zZWxlY3QgW2VudW1EYXRhXT1cIkRNR2V0dGVyQ2FyZGluYWxpdGllc1wiIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDYXJkaW5hbGl0eVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dDYW5jZWxCdXR0b25dPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE5PTUVDQU1QTyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUgIT0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+Q29udGVzdHVhbGl6emF6aW9uZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVxcC1zZWxlY3QgW2FycmF5RGF0YV09XCJjb250ZXN0dWFsaXphdGlvblwiIFthcnJheUtleVByb3BlcnR5XT1cIidlbnRpdHlUYWJsZU5hbWUnXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCInZW50aXR5VGFibGVOYW1lJ1wiIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb250ZXN0dWFsaXphdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dDYW5jZWxCdXR0b25dPVwidHJ1ZVwiIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25DaGFuZ2VETUNvbnRlc3R1YWxpemF0aW9uKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC10YWI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gTU9EQUxJVEEnIFJFQ1VQRVJPIERBVEkgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jcmVnaW9uIEVYVFJBIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiRXh0cmFcIiAqbmdJZj1cImZpZWxkc0V4dHJhQ29uZmlnICE9IG51bGwgJiYgZmllbGRzRXh0cmFDb25maWcubGVuZ3RoID4gMCAmJiBsb2FkZWRGaWVsZEV4dHJhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZmllbGRFeHRyYUNvbmZpZ1wiICpuZ0Zvcj1cImxldCBmaWVsZEV4dHJhQ29uZmlnIG9mIGZpZWxkc0V4dHJhQ29uZmlnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR5bmFtaWMtbW9kdWxlLWZpZWxkLWV4dHJhLWZpeCAjZmllbGRFeHRyYUNvbmZpZ1RlbXBsYXRlIFtmaWVsZEV4dHJhQ29uZmlnXT1cImZpZWxkRXh0cmFDb25maWdcIiBbZm9ybV09XCJmb3JtXCIgW2ZpZWxkXT1cImZpZWxkXCIgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R5bmFtaWMtbW9kdWxlLWZpZWxkLWV4dHJhLWZpeD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPiAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIEVYVFJBIC0tPiAgICAgICAgICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAgICAgPC9tYXQtdGFiLWdyb3VwPlxyXG4gICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gQVJFQSBUQUJTIC0tPlxyXG5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSNyZWdpb24gbGlzdFZhbHVlRmllbGRGb3JtVGVtcGxhdGUgdmFsbHVlcyAtLT5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPCEtLSNlbmRyZWdpb24gbGlzdFZhbHVlRmllbGRGb3JtVGVtcGxhdGUgdmFsbHVlcyAtLT5cclxuXHJcbiAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuXHJcbiAgICA8bWF0LWNhcmQtZm9vdGVyPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgbXQtMiBtYi0xIG1lLTNcIj4gXHJcbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImJ1dHRvbnNGb3JtYVwiPiAtLT5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBtYXQtcmFpc2VkLWJ1dHRvbiBiZy1kYW5nZXIgdGV4dC13aGl0ZSBjYW5jZWxcIiAoY2xpY2spPVwic2F2ZUFuZEV4aXRBZGRGaWVsZChmYWxzZSlcIiB0eXBlPVwiYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICDinYwgQW5udWxsYVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0yXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiIGJnLXN1Y2Nlc3MgdGV4dC13aGl0ZSBtci0yIHNhdmVcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwic2F2ZUFuZEV4aXRBZGRGaWVsZCh0cnVlKVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZVNhdmVGaWVsZCgpXCIgdHlwZT1cImJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAg8J+SviBTYWx2YVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPCEtLSA8L2Rpdj4gLS0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1jYXJkLWZvb3Rlcj5cclxuPC9tYXQtY2FyZD5cclxuXHJcbjwhLS0gPC9kaXY+IC0tPlxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbjwhLS0jcmVnaW9uIEZPUk0gUFJPUFJJRVTDgCBDQU1QSSBESSBURVNUTyAtLT5cclxuPG5nLXRlbXBsYXRlICN0ZXh0RmllbGRGb3JtVGVtcGxhdGU+XHJcbiAgICA8IS0tI3JlZ2lvbiBNQVNDSEVSQSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTZcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPk1hc2NoZXJhPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPGVxcC1zZWxlY3QgW2VudW1EYXRhXT1cIlRleHRNYXNrRW51bVwiIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5UZXh0TWFza1wiIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiXHJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInVGV4dE1hc2snXCI+XHJcbiAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBNQVNDSEVSQSAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBTUEVFQ0ggVE8gVEVYVCAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMiAgYWxpZ24tc2VsZi1jZW50ZXJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCIgW2hpZGRlbl09XCJmaWVsZC5SZWFkb25seSB8fCBwbGF0Zm9ybSAhPSAnd2ViJ1wiPlxyXG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFsobmdNb2RlbCldPVwiZmllbGQuTWljcm9waG9uZVwiIGZvcm1Db250cm9sTmFtZT1cIk1pY3JvcGhvbmVcIiBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAgU3BlZWNoLVRvLVRleHRcclxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFNQRUVDSCBUTyBURVhUIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIExVTkdIRVpaQSBNSU5JTUEgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02XCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWxcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyd0ZXh0LWRhbmdlcic6IGZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNaW5MZW5naHQnXS5zdGF0dXMgIT0gJ1ZBTElEJyAmJiBmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWluTGVuZ2h0J10udG91Y2hlZCB9XCI+XHJcbiAgICAgICAgICAgIEx1bmdoZXp6YSBtaW5pbWEgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJsZW5ndGhNaW5cIiBmb3JtQ29udHJvbE5hbWU9XCJNaW5MZW5naHRcIiB0eXBlPVwibnVtYmVyXCIgW21pbl09XCIwXCIgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGQuTWluTGVuZ2h0XCIgc3BlbGxjaGVjaz1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5NaW5MZW5naHQpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdNaW5MZW5naHQnKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWluTGVuZ2h0J10uZXJyb3JzPy5bJ3BhdHRlcm4nXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBJbnNlcmlyZSB1biB2YWxvcmUgbnVtZXJpY28uXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWluTGVuZ2h0J10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBMVU5HSEVaWkEgTUlOSU1BIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIExVTkdIRVpaQSBNQVNTSU1BIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LWxhYmVsXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsndGV4dC1kYW5nZXInOiBmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWF4TGVuZ2h0J10uc3RhdHVzICE9ICdWQUxJRCcgJiYgZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01heExlbmdodCddLnRvdWNoZWQgfVwiPlxyXG4gICAgICAgICAgICBMdW5naGV6emEgbWFzc2ltYSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dCBpZD1cImxlbmd0aE1heFwiIGZvcm1Db250cm9sTmFtZT1cIk1heExlbmdodFwiIHR5cGU9XCJudW1iZXJcIiBbbWluXT1cIjBcIiBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWVsZC5NYXhMZW5naHRcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIiAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLk1heExlbmdodClcIj5cclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ01heExlbmdodCcpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNYXhMZW5naHQnXS5lcnJvcnM/LlsncGF0dGVybiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEluc2VyaXJlIHVuIHZhbG9yZSBudW1lcmljby5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNYXhMZW5naHQnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2UuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIExVTkdIRVpaQSBNQVNTSU1BIC0tPlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgREkgVEVTVE8gLS0+XHJcblxyXG48IS0tI3JlZ2lvbiBGT1JNIFBST1BSSUVUw4AgRVRJQ0hFVFRBIC0tPlxyXG48bmctdGVtcGxhdGUgI2xhYmVsRmllbGRGb3JtVGVtcGxhdGU+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gRVRJQ0hFVFRBIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yICBhbGlnbi1zZWxmLWNlbnRlclwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgICA8dGV4dGFyZWEgbmFtZT1cIkV0aWNoZXR0YVwiIHBsYWNlaG9sZGVyPVwiRXRpY2hldHRhXCIgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiRXRpY2hldHRhXCIgWyhuZ01vZGVsKV09XCJmaWVsZC5FdGljaGV0dGFcIj48L3RleHRhcmVhPlxyXG5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBFVElDSEVUVEEgLS0+XHJcblxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIFBST1BSSUVUw4AgRVRJQ0hFVFRBIC0tPlxyXG5cclxuPCEtLSNyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIEFSRUEgREkgVEVTVE8gLS0+XHJcbjxuZy10ZW1wbGF0ZSAjdGV4dGFyZWFGaWVsZEZvcm1UZW1wbGF0ZT5cclxuICAgIDwhLS0jcmVnaW9uIFJJR0hFIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+IFJpZ2hlIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInJpZ2hlXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInJvd3NcIiBmb3JtQ29udHJvbE5hbWU9XCJSb3dzXCIgdHlwZT1cIm51bWJlclwiIFttaW5dPVwiMFwiIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuUm93c1wiXHJcbiAgICAgICAgICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIiAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLlJvd3MpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdSb3dzJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ1Jvd3MnXS5lcnJvcnM/LlsncGF0dGVybiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEluc2VyaXJlIHVuIHZhbG9yZSBudW1lcmljby5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydSb3dzJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBSSUdIRSAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBTcGVlY2hUb1RleHQgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTIgIGFsaWduLXNlbGYtY2VudGVyXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiIFtoaWRkZW5dPVwiZmllbGQuUmVhZG9ubHkgfHwgcGxhdGZvcm0gIT0gJ3dlYidcIj5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImZpZWxkLk1pY3JvcGhvbmVcIiBmb3JtQ29udHJvbE5hbWU9XCJNaWNyb3Bob25lXCIgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICAgIFNwZWVjaC1Uby1UZXh0XHJcbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBTcGVlY2hUb1RleHQgLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gTFVOR0hFWlpBIE1JTklNQSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPiBMdW5naGV6emEgbWluaW1hIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGlucHV0IGlkPVwibGVuZ3RoTWluXCIgZm9ybUNvbnRyb2xOYW1lPVwiTWluTGVuZ2h0XCIgdHlwZT1cIm51bWJlclwiIFttaW5dPVwiMFwiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLk1pbkxlbmdodFwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuTWluTGVuZ2h0KVwiPlxyXG4gICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnTWluTGVuZ2h0JykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01pbkxlbmdodCddLmVycm9ycz8uWydwYXR0ZXJuJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSW5zZXJpcmUgdW4gdmFsb3JlIG51bWVyaWNvLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01pbkxlbmdodCddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZS5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gTFVOR0hFWlpBIE1JTklNQSAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBMVU5HSEVaWkEgTUFTU0lNQSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPiBMdW5naGV6emEgbWFzc2ltYSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dCBpZD1cImxlbmd0aE1heFwiIGZvcm1Db250cm9sTmFtZT1cIk1heExlbmdodFwiIHR5cGU9XCJudW1iZXJcIiBbbWluXT1cIjBcIiBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWVsZC5NYXhMZW5naHRcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIiAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLk1heExlbmdodClcIj5cclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ01heExlbmdodCcpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNYXhMZW5naHQnXS5lcnJvcnM/LlsncGF0dGVybiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEluc2VyaXJlIHVuIHZhbG9yZSBudW1lcmljby5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNYXhMZW5naHQnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2UuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIExVTkdIRVpaQSBNQVNTSU1BIC0tPlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgQVJFQSBESSBURVNUTyAtLT5cclxuXHJcbjwhLS0jcmVnaW9uIEZPUk0gUFJPUFJJRVTDgCBDQU1QSSBCT09MRUFOSSAtLT5cclxuPG5nLXRlbXBsYXRlICNib29sZWFkRmllbGRGb3JtVGVtcGxhdGU+XHJcbiAgICA8IS0tI3JlZ2lvbiBBIFRSRSBTVEFUSSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMiAgYWxpZ24tc2VsZi1jZW50ZXJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5Jc1RyaXN0YXRlXCIgZm9ybUNvbnRyb2xOYW1lPVwiSXNUcmlzdGF0ZVwiIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAgICBBIHRyZSBzdGF0aVxyXG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gQSBUUkUgU1RBVEkgLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gVElQTyBQUkVTRU5UQVpJT05FIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5UaXBvIGRpIHByZXNlbnRhemlvbmUgKjwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxlcXAtc2VsZWN0IFtlbnVtRGF0YV09XCJCb29sUHJlc2VudGFudGlvRW51bVwiIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5QcmVzZXRhdGlvblR5cGVcIiByZXF1aXJlZFxyXG4gICAgICAgICAgICBbc2hvd0NhbmNlbEJ1dHRvbl09XCJmYWxzZVwiIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInUHJlc2V0YXRpb25UeXBlJ1wiPlxyXG4gICAgICAgIDwvZXFwLXNlbGVjdD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gVElQTyBQUkVTRU5UQVpJT05FIC0tPlxyXG5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSNlbmRyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIEJPT0xFQU5JIC0tPlxyXG5cclxuPCEtLSNyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIERBVEEgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZGF0ZUZpZWxkRm9ybVRlbXBsYXRlPlxyXG4gICAgPCEtLSNyZWdpb24gVElQTyBESSBEQVRBIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5UaXBvIGRpIGRhdGE8L21hdC1sYWJlbD5cclxuICAgICAgICA8ZXFwLXNlbGVjdCBbZW51bURhdGFdPVwiRGF0ZVRpbWVUeXBlRW51bVwiIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5Jc09ubHlEYXRlXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgW3Nob3dDYW5jZWxCdXR0b25dPVwiZmFsc2VcIiBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ0lzT25seURhdGUnXCI+XHJcbiAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBUSVBPIERJIERBVEEgLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gRk9STUFUTyAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPiBGb3JtYXRvIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIkRhdGVGb3JtYXRcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLkRhdGVGb3JtYXRcIlxyXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ0luZGljYXJlIGlsIGZvcm1hdG8gc2VndWVuZG8gbGEgZ3VpZGEgZGVsIHBhY2NoZXR0byBtb21lbnRqcy4nXCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmaWVsZC5Gb3JtYXRvKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnRm9ybWF0bycpIH19IC0tPlxyXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBGT1JNQVRPIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIERBVEEgTUlOSU1BIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gRGF0YSBtaW5pbWEgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPHRtdy1kYXRldGltZXBpY2tlciAqbmdJZj1cImZpZWxkLklzT25seURhdGUgPT0gRGF0ZVRpbWVUeXBlRW51bVsnU29sbyBkYXRhJ11cIiBjbGFzcz1cImRhdGVcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuTWluRGF0ZVwiIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInTWluRGF0ZSdcIlxyXG4gICAgICAgICAgICBbcGlja2VyTW9kZV09XCJtb2RlLkRBVEVQSUNLRVJcIiBbb3V0cHV0Rm9ybWF0XT1cIidERC9NTS9ZWVlZJ1wiIFtzaG93U2Vjb25kc109XCJmYWxzZVwiPlxyXG4gICAgICAgIDwvdG13LWRhdGV0aW1lcGlja2VyPlxyXG4gICAgICAgIDx0bXctZGF0ZXRpbWVwaWNrZXIgKm5nSWY9XCJmaWVsZC5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bJ0RhdGEgZSBvcmEnXVwiIGNsYXNzPVwiZGF0ZVwiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbElucHV0KV09XCJmaWVsZC5NaW5EYXRlXCIgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidNaW5EYXRlJ1wiXHJcbiAgICAgICAgICAgIFtwaWNrZXJNb2RlXT1cIm1vZGUuREFURVRJTUVQSUNLRVJcIiBbb3V0cHV0Rm9ybWF0XT1cIidERC9NTS9ZWVlZIEhIOm1tJ1wiIFtzaG93U2Vjb25kc109XCJmYWxzZVwiPlxyXG4gICAgICAgIDwvdG13LWRhdGV0aW1lcGlja2VyPlxyXG4gICAgICAgIDx0bXctZGF0ZXRpbWVwaWNrZXIgKm5nSWY9XCJmaWVsZC5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bJ1NvbG8gb3JhcmlvJ11cIiBjbGFzcz1cImRhdGVcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuTWluRGF0ZVwiIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInTWluRGF0ZSdcIlxyXG4gICAgICAgICAgICBbcGlja2VyTW9kZV09XCJtb2RlLlRJTUVQSUNLRVJcIiBbb3V0cHV0Rm9ybWF0XT1cIidISDptbSdcIiBbc2hvd1NlY29uZHNdPVwiZmFsc2VcIj5cclxuICAgICAgICA8L3Rtdy1kYXRldGltZXBpY2tlcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gREFUQSBNSU5JTUEgLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gREFUQSBNQVNTSU1BIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gRGF0YSBtYXNzaW1hIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDx0bXctZGF0ZXRpbWVwaWNrZXIgKm5nSWY9XCJmaWVsZC5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bJ1NvbG8gZGF0YSddXCIgY2xhc3M9XCJkYXRlXCJcclxuICAgICAgICAgICAgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLk1heERhdGVcIiBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ01heERhdGUnXCJcclxuICAgICAgICAgICAgW3BpY2tlck1vZGVdPVwibW9kZS5EQVRFUElDS0VSXCIgW291dHB1dEZvcm1hdF09XCInREQvTU0vWVlZWSdcIiBbc2hvd1NlY29uZHNdPVwiZmFsc2VcIj5cclxuICAgICAgICA8L3Rtdy1kYXRldGltZXBpY2tlcj5cclxuICAgICAgICA8dG13LWRhdGV0aW1lcGlja2VyICpuZ0lmPVwiZmllbGQuSXNPbmx5RGF0ZSA9PSBEYXRlVGltZVR5cGVFbnVtWydEYXRhIGUgb3JhJ11cIiBjbGFzcz1cImRhdGVcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuTWF4RGF0ZVwiIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZEZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInTWF4RGF0ZSdcIlxyXG4gICAgICAgICAgICBbcGlja2VyTW9kZV09XCJtb2RlLkRBVEVUSU1FUElDS0VSXCIgW291dHB1dEZvcm1hdF09XCInREQvTU0vWVlZWSBISDptbSdcIiBbc2hvd1NlY29uZHNdPVwiZmFsc2VcIj5cclxuICAgICAgICA8L3Rtdy1kYXRldGltZXBpY2tlcj5cclxuICAgICAgICA8dG13LWRhdGV0aW1lcGlja2VyICpuZ0lmPVwiZmllbGQuSXNPbmx5RGF0ZSA9PSBEYXRlVGltZVR5cGVFbnVtWydTb2xvIG9yYXJpbyddXCIgY2xhc3M9XCJkYXRlXCJcclxuICAgICAgICAgICAgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLk1heERhdGVcIiBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGRGb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ01heERhdGUnXCJcclxuICAgICAgICAgICAgW3BpY2tlck1vZGVdPVwibW9kZS5USU1FUElDS0VSXCIgW291dHB1dEZvcm1hdF09XCInSEg6bW0nXCIgW3Nob3dTZWNvbmRzXT1cImZhbHNlXCI+XHJcbiAgICAgICAgPC90bXctZGF0ZXRpbWVwaWNrZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIERBVEEgTUFTU0lNQSAtLT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSNlbmRyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIERBVEEgLS0+XHJcblxyXG48IS0tI3JlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgTlVNRVJJQ0kgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjbnVtZXJpY0ZpZWxkRm9ybVRlbXBsYXRlPlxyXG4gICAgPCEtLSNyZWdpb24gVkFMT1JFIElOVEVSTyAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTYgbXQtMiAgYWxpZ24tc2VsZi1jZW50ZXJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5Jc0ludGVnZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJJc0ludGVnZXJcIiBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAgVmFsb3JlIGludGVyb1xyXG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gVkFMT1JFIElOVEVSTyAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBTRVBBUkFUT1JFIERFQ0lNQUxJIC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cIiFmaWVsZC5Jc0ludGVnZXJcIiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+IFNlcGFyYXRvcmUgZGVjaW1hbGkgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiRGVjaW1hbFNlcGFyYXRvclwiIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuRGVjaW1hbFNlcGFyYXRvclwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLkRlY2ltYWxTZXBhcmF0b3IpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdEZWNpbWFsU2VwYXJhdG9yJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0RlY2ltYWxTZXBhcmF0b3InXS5lcnJvcnM/LlsncGF0dGVybiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE5vbiDDqCBwb3NzaWJpbGUgaW5zZXJpcmUgZGVpIG51bWVyaS5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydEZWNpbWFsU2VwYXJhdG9yJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBTRVBBUkFUT1JFIERFQ0lNQUxJIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIFBSRUNJU0lPTkUgREVDSU1BTEkgLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiIWZpZWxkLklzSW50ZWdlclwiIGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gUHJlY2lzaW9uZSBkZWNpbWFsaSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJEZWNpbWFsUHJlY2lzaW9uXCIgdHlwZT1cIm51bWJlclwiIFttaW5dPVwiMFwiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLkRlY2ltYWxQcmVjaXNpb25cIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIiAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLkRlY2ltYWxQcmVjaXNpb24pXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdEZWNpbWFsUHJlY2lzaW9uJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ0RlY2ltYWxQcmVjaXNpb24nXS5lcnJvcnM/LlsncGF0dGVybiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEluc2VyaXJlIHVuIHZhbG9yZSBudW1lcmljby5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydEZWNpbWFsUHJlY2lzaW9uJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBQUkVDSVNJT05FIERFQ0lNQUxJIC0tPlxyXG5cclxuICAgIDwhLS0jcmVnaW9uIFNFUEFSQVRPUkUgTUlHTElBSUEgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gU2VwYXJhdG9yZSBtaWdsaWFpYSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJUaG91c2FuZHNTZXBhcmF0b3JcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLlRob3VzYW5kc1NlcGFyYXRvclwiXHJcbiAgICAgICAgICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIiAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLlRob3VzYW5kc1NlcGFyYXRvcilcIj5cclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ1Rob3VzYW5kc1NlcGFyYXRvcicpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydUaG91c2FuZHNTZXBhcmF0b3InXS5lcnJvcnM/LlsncGF0dGVybiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE5vbiDDqCBwb3NzaWJpbGUgaW5zZXJpcmUgZGVpIG51bWVyaS5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydUaG91c2FuZHNTZXBhcmF0b3InXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2UuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFNFUEFSQVRPUkUgTUlHTElBSUEgLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gU0lNQk9MTyBWQUxVVEEgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbFxyXG4gICAgICAgIG1hdFRvb2x0aXA9XCJTaW1ib2xvIHByaW1hIGRlbCB2YWxvcmVcIlxyXG4gICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cImV4YW1wbGUtdG9vbHRpcC11cHBlcmNhc2VcIlxyXG4gICAgICAgID4gU2ltYm9sbyB2YWx1dGEgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiQ3VycmVuY3lTeW1ib2xcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLkN1cnJlbmN5U3ltYm9sXCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuQ3VycmVuY3lTeW1ib2wpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8IS0tIHt7IGdldEZvcm1WYWxpZGF0aW9uRXJyb3JzKCdDdXJyZW5jeVN5bWJvbCcpIH19IC0tPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydDdXJyZW5jeVN5bWJvbCddLmVycm9ycz8uWydNaXNzaW5nIFBhcmVudGhlc2lzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW56aW9uZSwgY2kgc29ubyBwYXJlbnRlc2kgbm9uIGNoaXVzZS5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gU0lNQk9MTyBWQUxVVEEgLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gVU5JVEEgREkgTUlTVVJBIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWxcclxuICAgICAgICBtYXRUb29sdGlwPVwiU2ltYm9sbyBkb3BvIGlsIHZhbG9yZVwiXHJcbiAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwiZXhhbXBsZS10b29sdGlwLXVwcGVyY2FzZVwiXHJcbiAgICAgICAgPiBVbml0w6AgZGkgbWlzdXJhIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIk1lYXN1cmVVbml0XCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5NZWFzdXJlVW5pdFwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLk1lYXN1cmVVbml0KVwiPlxyXG4gICAgICAgICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnTWVhc3VyZVVuaXQnKSB9fSAtLT5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWVhc3VyZVVuaXQnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2UuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFVOSVRBIERJIE1JU1VSQSAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBWQUxPUkUgTUlOSU1PIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiBtdC0yXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+IFZhbG9yZSBtaW5pbW8gPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiTWluVmFsdWVcIiB0eXBlPVwibnVtYmVyXCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5NaW5WYWx1ZVwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuTWluVmFsdWUpXCJcclxuICAgICAgICAgICAgICAgIHBhdHRlcm49XCJeLT9bMC05XSsoLFswLTldK3xcXC5bMC05XSspPyRcIj5cclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ01pblZhbHVlJykgfX0gLS0+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01pblZhbHVlJ10uZXJyb3JzPy5bJ3BhdHRlcm4nXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBJbnNlcmlyZSB1biB2YWxvcmUgbnVtZXJpY28uXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWVsZEZvcm1Hcm91cC5jb250cm9sc1snTWluVmFsdWUnXS5lcnJvcnM/LlsnTWlzc2luZyBQYXJlbnRoZXNpcyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVuemlvbmUsIGNpIHNvbm8gcGFyZW50ZXNpIG5vbiBjaGl1c2UuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFZBTE9SRSBNSU5JTU8gLS0+XHJcblxyXG4gICAgPCEtLSNyZWdpb24gVkFMT1JFIE1BU1NJTU8gLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC02IG10LTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gVmFsb3JlIG1hc3NpbW8gPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiTWF4VmFsdWVcIiB0eXBlPVwibnVtYmVyXCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5NYXhWYWx1ZVwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZmllbGQuTWF4VmFsdWUpXCJcclxuICAgICAgICAgICAgICAgIHBhdHRlcm49XCJeLT9bMC05XSsoLFswLTldK3xcXC5bMC05XSspPyRcIj5cclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ01heFZhbHVlJykgfX0gIC0tPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpZWxkRm9ybUdyb3VwLmNvbnRyb2xzWydNYXhWYWx1ZSddLmVycm9ycz8uWydwYXR0ZXJuJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSW5zZXJpcmUgdW4gdmFsb3JlIG51bWVyaWNvLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmllbGRGb3JtR3JvdXAuY29udHJvbHNbJ01heFZhbHVlJ10uZXJyb3JzPy5bJ01pc3NpbmcgUGFyZW50aGVzaXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBdHRlbnppb25lLCBjaSBzb25vIHBhcmVudGVzaSBub24gY2hpdXNlLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBWQUxPUkUgTUFTU0lNTyAtLT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSNlbmRyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIE5VTUVSSUNJIC0tPlxyXG5cclxuPCEtLSNyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIEFMTEVHQVRPIC0tPlxyXG48bmctdGVtcGxhdGUgI2F0dGFjaG1lbnRGaWVsZEZvcm1UZW1wbGF0ZT5cclxuICAgIDwhLS0jcmVnaW9uIEFMTEVHQVRJIE1VTFRJUExJIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yICBhbGlnbi1zZWxmLWNlbnRlclwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImZpZWxkLmlzTXVsdGlBdHRhY2hcIiBmb3JtQ29udHJvbE5hbWU9XCJpc011bHRpQXR0YWNoXCIgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICAgIEFsbGVnYXRpIG11bHRpcGxpXHJcbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tI2VuZHJlZ2lvbiBBTExFR0FUSSBNVUxUSVBMSSAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBFU1RFTlNJT05JIEFDQ0VUVEFURSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+RXN0ZW5zaW9uaSBhY2NldHRhdGU8L21hdC1sYWJlbD5cclxuICAgICAgICA8ZXFwLXNlbGVjdCBbYXJyYXlEYXRhXT1cIkF2YWlsYWJsZUZpbGVFeHRlbnNpb25zLmNvbmNhdChBdmFpbGFibGVJbWFnZUV4dGVuc2lvbnMpXCJcclxuICAgICAgICAgICAgWyhuZ01vZGVsSW5wdXQpXT1cImZpZWxkLkFsbG93ZWRFeHRlbnNpb25zXCIgW2FycmF5S2V5UHJvcGVydHldPVwiJ2tleSdcIiBbYXJyYXlWYWx1ZVByb3BlcnR5XT1cIid2YWx1ZSdcIlxyXG4gICAgICAgICAgICBbaXNNdWx0aVNlbGVjdF09XCJ0cnVlXCIgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidBbGxvd2VkRXh0ZW5zaW9ucydcIlxyXG4gICAgICAgICAgICBbaW5jbHVkZUZ1bGxPYmplY3RdPVwiZmFsc2VcIj5cclxuICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIEVTVEVOU0lPTkkgQUNDRVRUQVRFIC0tPlxyXG5cclxuICAgIDwhLS0gPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBtdC0yXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtdC0yXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItdGl0bGUtc3RhbmRhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICBFbGVuY28gbWV0YWRhdGFcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNiB0ZXh0LXJpZ2h0IGJ1dHRvbnNGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHNhdmVcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3Blbk1ldGFkYXRhRGlhbG9nKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4O1wiPkFnZ2l1bmdpIGFsbGVnYXRvPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxlcXAtdGFibGUgI21ldGFkYXRhRmllbGRzVGFibGUgW2NyZWF0ZU1hdENhcmRdPVwiZmFsc2VcIiBbY29sdW1uc109XCJtZXRhZGF0YUNvbHVtbnNcIlxyXG4gICAgICAgICAgICBbZGF0YV09XCJmaWVsZC5NZXRhZGF0YUZpZWxkc1wiIFtlbXB0eVRhYmxlTWVzc2FnZV09XCInTmVzc3VuIG1ldGFkYXRhIGluc2VyaXRvJ1wiIFtzZWFyY2hUZXh0XT1cIidDZXJjYSdcIj5cclxuICAgICAgICA8L2VxcC10YWJsZT5cclxuICAgIDwvZGl2PiAtLT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSNlbmRyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIEFMTEVHQVRPIC0tPlxyXG5cclxuPCEtLSNyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIExJU1RBIERJIFZBTE9SSSAtLT5cclxuPG5nLXRlbXBsYXRlICNsaXN0VmFsdWVGaWVsZEZvcm1UZW1wbGF0ZT5cclxuICAgIDwhLS0jcmVnaW9uIFNDRUxUQSBNVUxUSVBMQSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMiAgYWxpZ24tc2VsZi1jZW50ZXJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgW2hpZGRlbl09XCJmaWVsZC5QcmVzZW50YXRpb25Nb2RlID09IExpc3RQcmVzZW50YXRpb25FbnVtWydSYWRpbyBidXR0b24nXVwiIFsobmdNb2RlbCldPVwiZmllbGQuSXNNdWx0aUNob2ljaGVcIiBmb3JtQ29udHJvbE5hbWU9XCJJc011bHRpQ2hvaWNoZVwiIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAgICBTY2VsdGEgbXVsdGlwbGFcclxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFNDRUxUQSBNVUxUSVBMQSAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBUSVBPIERJIFBSRVNFTlRBWklPTkUgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPlRpcG8gZGkgcHJlc2VudGF6aW9uZSo8L21hdC1sYWJlbD5cclxuICAgICAgICA8ZXFwLXNlbGVjdCBbZW51bURhdGFdPVwiTGlzdFByZXNlbnRhdGlvbkVudW1cIiBbKG5nTW9kZWxJbnB1dCldPVwiZmllbGQuUHJlc2VudGF0aW9uTW9kZVwiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgIFtzaG93Q2FuY2VsQnV0dG9uXT1cImZhbHNlXCIgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidQcmVzZW50YXRpb25Nb2RlJ1wiXHJcbiAgICAgICAgICAgIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25QcmVzZW50YXRpb25Nb2RlQ2hhbmdlKClcIj5cclxuICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0jZW5kcmVnaW9uIFRJUE8gREkgUFJFU0VOVEFaSU9ORSAtLT5cclxuXHJcblxyXG4gICAgPCEtLSNyZWdpb24gR0VTVElPTkUgT1BaSU9OSSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgbXQtMlwiPlxyXG5cclxuICAgICAgICA8bWF0LWxhYmVsPiBhcmVhIGRlaSB2YWxvcmkgZGEgaW5zZXJpcmUgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8dGV4dGFyZWEgbWF0SW5wdXQgXHJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImtleTF8dmFsdWUxO2tleTJ8dmFsdWUyXCIgXHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLlZhbHVlU3RyaW5nXCJcclxuICAgICAgICAgICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiIFxyXG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC90ZXh0YXJlYT5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJjb3VudFZhbHVlUGFpcnMoZmllbGQuVmFsdWVQYWlycykgPiAwXCI+XHJcbiAgICAgICAgICAgIDxoNCBjbGFzcz1cImtleS12YWx1ZS1saXN0LXNlY3Rpb24tdGl0bGVcIj4gPC9oND5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBMYWJlbCBvcHppb25lIChpbnZpbyBwZXIgY29uZmVybWFyZSk8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJrZXlWYWx1ZU9iamVjdC5rZXlcIiAoa2V5dXApPVwib25NdWx0aVNlbGVjdElucHV0S2V5dXAoJGV2ZW50LCBudWxsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD4gVmFsb3JlIG9wemlvbmUgKGludmlvIHBlciBjb25mZXJtYXJlKTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImtleVZhbHVlT2JqZWN0LnZhbHVlXCIgKGtleXVwKT1cIm9uTXVsdGlTZWxlY3RJbnB1dEtleXVwKCRldmVudCwgbnVsbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgIGFsaWduLXNlbGYtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yLTNcIj5PcHppb25pIGluc2VyaXRlOjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cInZhbHVlLXBhaXJzLWxpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGtleVZhbHVlUGFpciBvZiBnZXREaWN0aW9uYXJ5S2V5VmFsdWUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtci0xXCIgKGNsaWNrKT1cImRlbGV0ZUtleUZyb21EaWN0aW9uYXJ5KGtleVZhbHVlUGFpci5rZXkpXCI+Y2xvc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGI+TGFiZWw6IDwvYj4ge3trZXlWYWx1ZVBhaXIua2V5fX0gLSA8Yj5WYWxvcmU6IDwvYj4ge3trZXlWYWx1ZVBhaXIudmFsdWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+IFxyXG5cclxuICAgIDwvZGl2PiAgICBcclxuICAgIDwhLS0jZW5kcmVnaW9uIEdFU1RJT05FIE9QWklPTkkgLS0+XHJcblxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgTElTVEEgREkgVkFMT1JJIC0tPlxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbjwhLS0jcmVnaW9uIEJPVFRPTkUgQVpJT05FIC0tPlxyXG48bmctdGVtcGxhdGUgI2J1dHRvbkZpZWxkRm9ybVRlbXBsYXRlPlxyXG4gICAgPGFjdGlvbi1idXR0b24tY3JlYXRvciBcclxuICAgIFtJbkZpZWxkXT1cInRydWVcIiBcclxuICAgIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCIgXHJcbiAgICBbZm9ybV09XCJmb3JtXCIgXHJcbiAgICBbZm9ybXVsYXNdPVwiYWN0aW9uQnV0dG9uc1wiIFxyXG4gICAgW2Zvcm11bGFPYmplY3RdID0gXCJmb3JtdWxhT2JqZWN0XCJcclxuICAgIFthY3Rpb25CdXR0b25GaWVsZF09XCJmaWVsZFwiIFxyXG4gICAgKG9uQ2hhbmdlU29tZXRoaW5nKT1cImNoYW5nZWRCdXR0b25GaWVsZCgkZXZlbnQpXCI+XHJcbjwvYWN0aW9uLWJ1dHRvbi1jcmVhdG9yPlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBCT1RUT05FIEFaSU9ORSAtLT5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbjwhLS0jcmVnaW9uIEZPUk0gTElTVEEgSU1NQUdJTkkgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjaW1hZ2VGaWVsZFNlbGVjdG9yRm9ybVRlbXBsYXRlPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTMgY29sLXhzLTEyXCIgW2Zvcm1Hcm91cF09XCJmaWVsZEZvcm1Hcm91cFwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPiBBbHRlenphIGluIFBpeGVsIGRlbGxlIGltbWFnaW5pIHNjYWxhdGUqIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiUmVzaXplZEltYWdlc0hlaWdodFB4XCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5SZXNpemVkSW1hZ2VzSGVpZ2h0UHhcIiByZXF1aXJlZCBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChjaGFuZ2UpPVwic2V0UmVzaXplZEltYWdlc0hlaWdodFB4KClcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnMoJ1Jlc2l6ZWRJbWFnZXNIZWlnaHRQeCcpIH19XHJcbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD4gIFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMyBjb2wteHMtMTIgY29sLW1pZGRsZVwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5Jc011bHRpQ2hvaWNoZVwiIGZvcm1Db250cm9sTmFtZT1cIklzTXVsdGlDaG9pY2hlXCIgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICBTY2VsdGEgbXVsdGlwbGFcclxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgIDwvZGl2PiAgICAgICAgXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZXFwLWF0dGFjaG1lbnRzICNpbWFnZVNlbGVjdG9yQXR0YWNobWVudHMgW2F0dGFjaG1lbnRzTGlzdF09XCJmaWVsZC5BdHRhY2htZW50TGlzdFwiIFtzaG93TWF0Q2FyZF09XCJmYWxzZVwiIFthbGxvd09ubHlJbWFnZXNdPVwidHJ1ZVwiXHJcbiAgICBbaXNEaXNhYmxlZF09XCJmYWxzZVwiIFtzaG93SW5saW5lUHJldmlld109XCJ0cnVlXCIgW211bHRpcGxlQXR0YWNobWVudF09XCJ0cnVlXCIgW3Nob3dIZWFkZXJdPVwiZmFsc2VcIlxyXG4gICAgW2FsbG93ZWRUeXBlc109XCJbQXR0YWNobWVudFR5cGUuRklMRV1cIiAobG9jYWxFZGl0ZWRBdHRhY2htZW50cyk9XCJjYXRjaEJ1dHRvbkltYWdlc0NoYW5nZSgkZXZlbnQpXCJcclxuICAgIFthdHRhY2htZW50c0NvbHVtbnNdPVwiY29uZmlnQ29sdW1uTGlzdEltYWdlc1wiPlxyXG4gICAgPC9lcXAtYXR0YWNobWVudHM+XHJcblxyXG4gIFxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIExJU1RBIElNTUFHSU5JIC0tPlxyXG5cclxuPCEtLSNyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIElNTUFHSU5FIC0tPlxyXG48bmctdGVtcGxhdGUgI2ltYWdlRmllbGRGb3JtVGVtcGxhdGU+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJmaWVsZC5FbmFibGVEcmF3aW5nXCIgZm9ybUNvbnRyb2xOYW1lPVwiRW5hYmxlRHJhd2luZ1wiIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgSW1tYWdpbmUgZGlzZWduYWJpbGU/XHJcbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICA8L2Rpdj4gICBcclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBjb2wteHMtMTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+IEFsdGV6emEgaW4gUGl4ZWwgZGVsbGUgaW1tYWdpbmkgc2NhbGF0ZSogPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJSZXNpemVkSW1hZ2VzSGVpZ2h0UHhcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLlJlc2l6ZWRJbWFnZXNIZWlnaHRQeFwiIHJlcXVpcmVkIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGNoYW5nZSk9XCJzZXRSZXNpemVkSW1hZ2VzSGVpZ2h0UHgoKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnUmVzaXplZEltYWdlc0hlaWdodFB4JykgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAgXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IGNvbC14cy0xMlwiICpuZ0lmPVwiZmllbGQuRHluQXR0YWNobWVudCAhPSBudWxsXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+IEV0aWNoZXR0YSA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuRHluQXR0YWNobWVudC5CdXR0b25LZXlcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAgXHJcbiAgICAgICAgPC9kaXY+ICAgICAgICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgY29sLXhzLTEyXCIgKm5nSWY9XCJmaWVsZC5EeW5BdHRhY2htZW50ICE9IG51bGxcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD4gVmFsb3JlIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5EeW5BdHRhY2htZW50LkJ1dHRvblZhbHVlXCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD4gIFxyXG4gICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgIFxyXG4gICAgPC9kaXY+ICAgIFxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTggbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8ZXFwLWF0dGFjaG1lbnRzIFthdHRhY2htZW50c0xpc3RdPVwiW2ZpZWxkLkR5bkF0dGFjaG1lbnRdXCIgW3Nob3dNYXRDYXJkXT1cImZhbHNlXCIgW2FsbG93T25seUltYWdlc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgW2lzRGlzYWJsZWRdPVwiZmFsc2VcIiBbc2hvd0lubGluZVByZXZpZXddPVwidHJ1ZVwiIFttdWx0aXBsZUF0dGFjaG1lbnRdPVwiZmFsc2VcIiBbc2hvd0hlYWRlcl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIFthbGxvd2VkVHlwZXNdPVwiW0F0dGFjaG1lbnRUeXBlLkZJTEVdXCJcclxuICAgICAgICAgICAgKGxvY2FsRWRpdGVkQXR0YWNobWVudHMpPVwiY2F0Y2hCdXR0b25JbWFnZUNoYW5nZSgkZXZlbnQpXCIgKG9uRGVsZXRlQXR0YWNobWVudCk9XCJkZWxldGVJbWFnZSgkZXZlbnQpXCIgI2ltYWdlQXR0YWNobWVudD5cclxuICAgICAgICA8L2VxcC1hdHRhY2htZW50cz5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI3JlYWRvbmx5UHJvZmlsZUltYWdlPlxyXG4gICAgICAgICAgICA8aW1nICpuZ0lmPVwiZmllbGQuRHluQXR0YWNobWVudFwiXHJcbiAgICAgICAgICAgICAgc3JjPVwiZGF0YTp7e2ZpZWxkLkR5bkF0dGFjaG1lbnQuRmlsZUNvbnRlbnRUeXBlfX07YmFzZTY0LHt7ZmllbGQuRHluQXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NH19XCJcclxuICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+ICAgICAgICBcclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgSU1NQUdJTkUgLS0+XHJcblxyXG48IS0tI3JlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgSU1NQUdJTkUgQ09OIE1BUktFUlMgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjaW1hZ2VXaXRoTWFya2Vyc0ZpZWxkRm9ybVRlbXBsYXRlPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBjb2wteHMtMTJcIiBbZm9ybUdyb3VwXT1cImZpZWxkRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+IEFsdGV6emEgaW4gUGl4ZWwgZGVsbGUgaW1tYWdpbmkgc2NhbGF0ZSogPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJSZXNpemVkSW1hZ2VzSGVpZ2h0UHhcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpZWxkLlJlc2l6ZWRJbWFnZXNIZWlnaHRQeFwiIHJlcXVpcmVkIHNwZWxsY2hlY2s9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGNoYW5nZSk9XCJzZXRSZXNpemVkSW1hZ2VzSGVpZ2h0UHgoKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnUmVzaXplZEltYWdlc0hlaWdodFB4JykgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAgXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IGNvbC14cy0xMlwiICpuZ0lmPVwiZmllbGQuRHluQXR0YWNobWVudCAhPSBudWxsXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+IEV0aWNoZXR0YSA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuRHluQXR0YWNobWVudC5CdXR0b25LZXlcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAgXHJcbiAgICAgICAgPC9kaXY+ICAgICAgICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgY29sLXhzLTEyXCIgKm5nSWY9XCJmaWVsZC5EeW5BdHRhY2htZW50ICE9IG51bGxcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD4gVmFsb3JlIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5EeW5BdHRhY2htZW50LkJ1dHRvblZhbHVlXCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD4gIFxyXG4gICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgIFxyXG4gICAgPC9kaXY+ICAgIFxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTggbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8ZXFwLWF0dGFjaG1lbnRzIFthdHRhY2htZW50c0xpc3RdPVwiW2ZpZWxkLkR5bkF0dGFjaG1lbnRdXCIgW3Nob3dNYXRDYXJkXT1cImZhbHNlXCIgW2FsbG93T25seUltYWdlc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgW2lzRGlzYWJsZWRdPVwiZmFsc2VcIiBbc2hvd0lubGluZVByZXZpZXddPVwidHJ1ZVwiIFttdWx0aXBsZUF0dGFjaG1lbnRdPVwiZmFsc2VcIiBbc2hvd0hlYWRlcl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIFthbGxvd2VkVHlwZXNdPVwiW0F0dGFjaG1lbnRUeXBlLkZJTEVdXCJcclxuICAgICAgICAgICAgKGxvY2FsRWRpdGVkQXR0YWNobWVudHMpPVwiY2F0Y2hCdXR0b25JbWFnZVdpdGhNYXJrZXJzQ2hhbmdlKCRldmVudClcIiAob25EZWxldGVBdHRhY2htZW50KT1cImRlbGV0ZUltYWdlKCRldmVudClcIiAjaW1hZ2VBdHRhY2htZW50PlxyXG4gICAgICAgIDwvZXFwLWF0dGFjaG1lbnRzPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVhZG9ubHlQcm9maWxlSW1hZ2U+XHJcbiAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJmaWVsZC5EeW5BdHRhY2htZW50XCJcclxuICAgICAgICAgICAgICBzcmM9XCJkYXRhOnt7ZmllbGQuRHluQXR0YWNobWVudC5GaWxlQ29udGVudFR5cGV9fTtiYXNlNjQse3tmaWVsZC5EeW5BdHRhY2htZW50LkZpbGVEYXRhQmFzZTY0fX1cIlxyXG4gICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT4gICAgICAgIFxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0jZW5kcmVnaW9uIEZPUk0gUFJPUFJJRVTDgCBDQU1QSSBJTU1BR0lORSBDT04gTUFSS0VSUyAtLT5cclxuXHJcblxyXG5cclxuXHJcblxyXG48IS0tI3JlZ2lvbiBGT1JNIFBST1BSSUVUw4AgQ0FNUEkgTE9PS1VQIC0tPlxyXG48bmctdGVtcGxhdGUgI2xvb2t1cEZpZWxkRm9ybVRlbXBsYXRlPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yICBhbGlnbi1zZWxmLWNlbnRlclwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cImZpZWxkLlVzZUFzR2V0T3JEaXNjYXJkXCIgZm9ybUNvbnRyb2xOYW1lPVwiVXNlQXNHZXRPckRpc2NhcmRcIiBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiU2UgdHJ1ZSBsYSBsb29rdXAgdmllbmUgdmlzdWFsaXp6YXRhIGluIHVuYSBtb2RhbGUgcGVyIGxvIHNjZWdsaSBzY2FydGFcIj5cclxuICAgICAgICAgICAgVXNhIHBlciBzY2VnbGkgbyBzY2FydGFcclxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiIFtmb3JtR3JvdXBdPVwiZmllbGRGb3JtR3JvdXBcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPiBOb21lIGVudGl0w6AgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIG1hdFRvb2x0aXA9XCJOb21lIGRlbGwnZW50aXTDoCByZWxhemlvbmF0YVwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiRW50aXR5U291cmNlTmFtZVwiIHJlcXVpcmVkIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmllbGQuRW50aXR5U291cmNlTmFtZVwiXHJcbiAgICAgICAgICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIiAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZpZWxkLkVudGl0eVNvdXJjZU5hbWUpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICB7eyBnZXRGb3JtVmFsaWRhdGlvbkVycm9ycygnRW50aXR5U291cmNlTmFtZScpIH19XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgbXQtMlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBOb21pIGRlaSBjYW1waSAoaW52aW8gcGVyIGNvbmZlcm1hcmUpIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkVsZW5jbyBkaSBjYW1waSBvcmRpbmF0byBjaGUgdmVycsOgIHZpc3VhbGl6emF0byBuZWxsYSBsb29rdXAgKHByZW1lcmUgaW52aW8gcGVyIGNvbmZlcm1hcmUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IChrZXl1cCk9XCJvbk11bHRpU2VsZWN0SW5wdXRLZXl1cCgkZXZlbnQsICdGaWVsZE5hbWVzJylcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTggIGFsaWduLXNlbGYtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yLTNcIj5Ob21pIHNlbGV6aW9uYXRpOjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleHRlbnNpb24tY29udGFpbmVyXCIgKm5nRm9yPVwibGV0IGV4dGVuc2lvbiBvZiBmaWVsZC5GaWVsZE5hbWVzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tleHRlbnNpb259fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtbC0xXCIgKGNsaWNrKT1cImZpZWxkLkZpZWxkTmFtZXMuc3BsaWNlKGksMSlcIj5jbG9zZVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSNlbmRyZWdpb24gRk9STSBQUk9QUklFVMOAIENBTVBJIExPT0tVUCAtLT5cclxuXHJcbjwhLS0gRElBTE9HIFBFUiBBR0dJVU5HRVJFIFVOIE1FVEFEQVRBIE5FSSBDQU1QSSBESSBUSVBPIEFMTEVHQVRPIE8gSU1NQUdJTkUgLS0+XHJcbjwhLS0gPG5nLXRlbXBsYXRlICNkaWFsb2dNZXRhZGF0YT5cclxuICAgIDxlcXAtZHluYW1pYy1tb2R1bGUtYWRkLWZvcm0tZmllbGQgW2ZpZWxkXT1cInNlbGVjdGVkTWV0YWRhdGFcIiBbYXZhaWxhYmxlRmllbGRzXT1cImF2YWlsYWJsZUZpZWxkc1wiXHJcbiAgICAgICAgW2luZGV4RmllbGRdPVwiaW5kZXhTZWxlY3RlZE1ldGFkYXRhXCIgKHNhdmVGaWVsZEV2ZW50KT1cIm9uU2F2ZU1ldGFkYXRhKCRldmVudClcIiBbZmllbGRUeXBlc1RvRXhjbHVkZV09XCJbNiw3LDEwXVwiPlxyXG4gICAgPC9lcXAtZHluYW1pYy1tb2R1bGUtYWRkLWZvcm0tZmllbGQ+XHJcbjwvbmctdGVtcGxhdGU+IC0tPlxyXG5cclxuPG5nLXRlbXBsYXRlICNidXR0b25JbWFnZXNLZXlWYWx1ZUlucHV0Q29sdW1uIGxldC1yb3c9XCJyb3dcIiBsZXQtY29sPVwiY29sXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4ge3tjb2wuZGlzcGxheX19IDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInJvd1tjb2wua2V5XVwiIHJlcXVpcmVkIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLURJQUxPRyBQRVIgU0VNUExJRklDQVJFIExBIFNDUklUVFVSQSBERUwgQ0FNUE8gRk9STVVMQS0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ0Zvcm11bGE+XHJcbiAgICA8ZXFwLWR5bmFtaWMtbW9kdWxlLWFkZC1mb3JtdWxhLWNvbXBvbmVudD5cclxuICAgIDwvZXFwLWR5bmFtaWMtbW9kdWxlLWFkZC1mb3JtdWxhLWNvbXBvbmVudD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjR2VuZXJpY0xpc3RJbWFnZXNJbWFnZVRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtY29sPVwiY29sXCI+XHJcbiAgICA8aW1nIHNyYz1cImRhdGE6aW1hZ2UvanBlZztiYXNlNjQsIHt7cm93W2NvbC5rZXldfX1cIiBjbGFzcz1cIkdlbmVyaWNMaXN0SW1hZ2VzSW1hZ2VUZW1wbGF0ZVwiPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNHZW5lcmljTGlzdEltYWdlc0tleVRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtY29sPVwiY29sXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gQ2hpYXZlIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInJvd1tjb2wua2V5XVwiPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjR2VuZXJpY0xpc3RJbWFnZXNWYWx1ZVRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtY29sPVwiY29sXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1sYWJlbD4gVmFsb3JlIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInJvd1tjb2wua2V5XVwiPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gVEVNUExBVEUgUEVSIFFVRVJZIEVESVRPUiAtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dRRT5cclxuICAgIDxuZy10ZW1wbGF0ZSBbYXBwRHluYW1pY0xvYWRlcl0gW2RhdGFdPVwiUXVlcnlFZGl0b3JDb21wb25lbnRcIiAob3V0KT1cIm9uRXh0ZXJuYWxDb21wb25lbnRPdXQoJGV2ZW50KTtcIj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiAgXHJcblxyXG48IS0tIFRFTVBMQVRFIFBFUiBERUNJU0lPTkUgQVZBTlRJIE8gSU5ESUVUUk8gLS0+XHJcbjwhLS0gXHJcbjxuZy10ZW1wbGF0ZSAjZGlhbG9nQXZhbnRpSW5kaWV0cm8gbGV0LWRpYWxvZ1JlZj1cImRpYWxvZ1JlZlwiIGxldC1kYXRhPVwiZGF0YVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJhdmFudGktaW5kaWV0cm8gcC00IHRleHQtY2VudGVyXCI+XHJcbiAgICA8aDIgY2xhc3M9XCJtYi0zXCI+Q2hlIGZhcmU/PC9oMj5cclxuICAgIDxwIGNsYXNzPVwidGV4dC1tdXRlZCBtYi00XCI+XHJcbiAgICAgIFZ1b2kgc2FsdmFyZSBsZSBtb2RpZmljaGUgcHJpbWEgZGkgcHJvY2VkZXJlP1xyXG4gICAgPC9wPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBnYXAtM1wiPlxyXG4gICAgICA8YnV0dG9uIFxyXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uIFxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIkNsb3NlU2F2ZSgpXCI+XHJcbiAgICAgICAg8J+SviBTYWx2YVxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b24gXHJcbiAgICAgICAgY29sb3I9XCJ3YXJuXCJcclxuICAgICAgICAoY2xpY2spPVwiQ2xvc2UoKVwiPlxyXG4gICAgICAgIOKdjCBWaWEgc2VuemEgc2FsdmFyZVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPiBcclxuLS0+XHJcbiJdfQ==