kwikid-forms 0.6.45 → 0.6.47

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.
@@ -236,9 +236,13 @@ export class KwikIDFormViewComponent {
236
236
  const image = response === null || response === void 0 ? void 0 : response.image_url;
237
237
  const imageOcr = response === null || response === void 0 ? void 0 : response.image_ocr;
238
238
  const imageFacematch = response === null || response === void 0 ? void 0 : response.image_facematch;
239
+ const imageLiveliness = response === null || response === void 0 ? void 0 : response.image_liveliness;
239
240
  const imageWatermark = response === null || response === void 0 ? void 0 : response.image_watermark;
240
- const imageData = imageOcr || imageFacematch || imageWatermark
241
- ? Object.assign(Object.assign(Object.assign({ image }, (imageOcr && { ocr: imageOcr })), (imageFacematch && { facematch: imageFacematch })), (imageWatermark && { watermark: imageWatermark })) : image;
241
+ const isCheckCameraFeatures = () => {
242
+ return (imageOcr || imageLiveliness || imageFacematch || imageWatermark);
243
+ };
244
+ const imageData = isCheckCameraFeatures()
245
+ ? Object.assign(Object.assign(Object.assign(Object.assign({ image }, (imageOcr && { ocr: imageOcr })), (imageFacematch && { facematch: imageFacematch })), (imageLiveliness && { liveliness: imageLiveliness })), (imageWatermark && { watermark: imageWatermark })) : image;
242
246
  this.formData[field.key] = getObjectDeepCopy([imageData]);
243
247
  this.cameraData[field.key] = getObjectDeepCopy(imageData);
244
248
  this.mediaFiles[field.key] = getObjectDeepCopy([imageData]);
@@ -1207,7 +1211,7 @@ export class KwikIDFormViewComponent {
1207
1211
  * This is a api upload mocking method. Set's to loading at first at point when API is called and then changes the status to random status after 2 seconds of delay showing a mocked response from API.
1208
1212
  */
1209
1213
  uploadFile(field, file) {
1210
- var _a, _b, _c, _d, _e, _f;
1214
+ var _a, _b, _c, _d, _e, _f, _g, _h;
1211
1215
  return __awaiter(this, void 0, void 0, function* () {
1212
1216
  switch (field.type) {
1213
1217
  case EFieldType.FILE:
@@ -1305,12 +1309,18 @@ export class KwikIDFormViewComponent {
1305
1309
  watermarkPayload.data.push(watermarkSource);
1306
1310
  }
1307
1311
  }
1308
- const imageUploadPayload = Object.assign(Object.assign(Object.assign({ image: file }, ((ocrPayload === null || ocrPayload === void 0 ? void 0 : ocrPayload.isEnabled) && {
1312
+ let livelinessPayload = {};
1313
+ if (isNotEmptyValue((_h = (_g = field === null || field === void 0 ? void 0 : field.properties) === null || _g === void 0 ? void 0 : _g.features) === null || _h === void 0 ? void 0 : _h.liveliness)) {
1314
+ livelinessPayload = field.properties.features.liveliness;
1315
+ }
1316
+ const imageUploadPayload = Object.assign(Object.assign(Object.assign(Object.assign({ image: file }, ((ocrPayload === null || ocrPayload === void 0 ? void 0 : ocrPayload.isEnabled) && {
1309
1317
  ocr: ocrPayload
1310
1318
  })), ((facematchPayload === null || facematchPayload === void 0 ? void 0 : facematchPayload.isEnabled) && {
1311
1319
  facematch: facematchPayload
1312
1320
  })), ((watermarkPayload === null || watermarkPayload === void 0 ? void 0 : watermarkPayload.isEnabled) && {
1313
1321
  watermark: watermarkPayload
1322
+ })), ((livelinessPayload === null || livelinessPayload === void 0 ? void 0 : livelinessPayload.isEnabled) && {
1323
+ liveliness: livelinessPayload
1314
1324
  }));
1315
1325
  this.triggerLogs(ELogEventType.FORM__API_REQUEST_UPLOAD_IMAGE, {
1316
1326
  field_key: field.key,
@@ -3401,4 +3411,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
3401
3411
  }], onClickViewForms: [{
3402
3412
  type: Output
3403
3413
  }], resetCamera: [], ngOnInit: [], ngOnChanges: [], ngOnDestroy: [], triggerLogs: [], initFormConfig: [], setFormFieldsFromFormConfig: [], setFormFieldGroupsFromFormConfig: [], setFormDataFromAllFormsData: [], handleConnectedElementFieldGroupActions: [], handleConnectedElementFieldGroup: [], handleConnectedElementFieldActions: [], handleConnectedElementFields: [], handleConnectedElements: [], handleRemovedFile: [], handleViewButtonClick: [], handleGetKeyValueFile: [], handleOnClickGetRemovedMediaFile: [], handleOnClickInputCamera: [], setCameraMedia: [], handleGetCameraMedia: [], handleOnClickSaveCameraMedia: [], handleOnClickCameraBack: [], handleOnClickCameraClose: [], updateFiles: [], uploadFile: [], handleOnClickFormFieldButton: [], handleOnLocationPermission: [], handleOnClickLiveLocation: [], handleGetKeyValue: [], handleOnClickResetFormFields: [], handleFieldApiCall: [], handleApiCall: [], executeApiCall: [], isValidRequestHeadersAndBody: [], handleOnClickApiCall: [], handleOnClickGoBack: [], handleOnClickViewForms: [], handleOnClickSaveForm: [], handleOnApiTimerStop: [], handleOnScrollToField: [], toggleErrorNotification: [], togglePermissionErrorNotification: [], fieldHide: [], fieldGroupHide: [], fieldShow: [], fieldGroupShow: [], fieldDisable: [], fieldGroupDisable: [], fieldEnable: [], fieldGroupEnable: [], fieldReset: [], fieldGroupReset: [], fieldHideApiLoader: [], fieldShowApiLoader: [], setHtml: [], fieldErrorShow: [], fieldErrorHide: [], fieldMessageShow: [], fieldMessageHide: [], setValue: [], setFieldDefaultValue: [], setApiStatus: [], setApiHeaderValue: [], setApiHeaderValidity: [], setApiBodyValue: [], setApiBodyValidity: [], setFieldValidity: [], setDropdownOptions: [], apiCall: [], fieldApiCall: [], fieldMultipleApiCalls: [], fieldMultipleApiCallsEnd: [], taskApiCall: [], taskMultipleApiCalls: [], taskMultipleApiCallsEnd: [], dialogShow: [], dialogHide: [], redirectToUrl: [], patchFieldControlValue: [], setFieldControlValue: [], patchFormGroup: [], isFieldValid: [], isFieldEnabled: [], getFormGroupRawValues: [], showPreview: [], showErrorPreview: [], showPopupForm: [], alertShow: [], takeActionOnFieldGroup: [], takeAction: [] } });
3404
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2t3aWtpZC1mb3Jtcy9zcmMvbGliL3JlbmRlcmVyL2Zvcm0tdmlldy9mb3JtLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvZm9ybS12aWV3L2Zvcm0tdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsbUNBQW1DO0FBQ25DLHNEQUFzRDtBQUN0RCxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUlMLE1BQU0sRUFLTixTQUFTLEVBQ1QsWUFBWSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRSxPQUFPLEVBQ0wsZUFBZSxFQUVmLGdCQUFnQixFQUNoQixlQUFlLEVBQ2hCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvQyxPQUFPLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxVQUFVLEVBQ1YsSUFBSSxFQUNKLFVBQVUsRUFDVixNQUFNLEVBR04sb0JBQW9CLEVBQ3BCLHFCQUFxQixFQUNyQixpQkFBaUIsRUFDakIsc0JBQXNCLEVBQ3RCLGFBQWEsRUFDYixZQUFZLEVBQ1osZUFBZSxFQUNmLE1BQU0sRUFDTixXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLG9CQUFvQixFQUNyQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztB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QyxNQU1qQyxTQUFTLE1BZ0JULGNBQWMsTUFPZCxTQUFTLE1BZ0JULGNBQWMsTUFPZCxZQUFZLE1BMEJaLGlCQUFpQixNQU9qQixXQUFXLE1BMEJYLGdCQUFnQixNQU9oQixVQUFVLE1BcUVWLGVBQWUsTUFPZixrQkFBa0IsTUEyQmxCLGtCQUFrQixNQTJCbEIsT0FBTyxNQVlQLGNBQWMsTUFtQmQsY0FBYyxNQW1CZCxnQkFBZ0IsTUFrQmhCLGdCQUFnQixNQTBGVixRQUFRLE1Ba0JSLG9CQUFvQixNQXlDcEIsWUFBWSxNQXNCWixpQkFBaUIsTUFzQmpCLG9CQUFvQixNQXNCcEIsZUFBZSxNQXNCZixrQkFBa0IsTUFzQmxCLGdCQUFnQixNQXVCaEIsa0JBQWtCLE1Bd0NsQixPQUFPLE1BcUJQLFlBQVksTUFTWixxQkFBcUIsTUFpQnJCLHdCQUF3QixNQW1CeEIsV0FBVyxNQWVYLG9CQUFvQixNQTZDcEIsdUJBQXVCLE1BeUI3QixVQUFVLE1Bc0JWLFVBQVUsTUFPVixhQUFhLE1BNkJiLHNCQUFzQixNQUt0QixvQkFBb0IsTUFLcEIsY0FBYyxNQW1CZCxZQUFZLE1BS1osY0FBYyxNQUtkLHFCQUFxQixNQUtyQixXQUFXLE1BZ0dYLGdCQUFnQixNQVVoQixhQUFhLE1BY2IsU0FBUyxNQTRCSCxzQkFBc0IsTUF5Q3RCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBSZW5kZXJlcjIsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlblxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBUdWlQcmV2aWV3RGlhbG9nU2VydmljZSB9IGZyb20gXCJAdGFpZ2EtdWkvYWRkb24tcHJldmlld1wiO1xuaW1wb3J0IHtcbiAgVHVpQWxlcnRTZXJ2aWNlLFxuICBUdWlEaWFsb2dDb250ZXh0LFxuICBUdWlEaWFsb2dTZXJ2aWNlLFxuICBUdWlOb3RpZmljYXRpb25cbn0gZnJvbSBcIkB0YWlnYS11aS9jb3JlXCI7XG5pbXBvcnQgeyBUdWlQdXNoU2VydmljZSB9IGZyb20gXCJAdGFpZ2EtdWkva2l0XCI7XG5pbXBvcnQgeyBLd2lrSURDYW1lcmFSZWNvcmRTZXJ2aWNlIH0gZnJvbSBcImt3aWtpZC1jYW1lcmFcIjtcbmltcG9ydCB7XG4gIEFjdGlvbixcbiAgQ29uZGl0aW9uLFxuICBFU291cmNlS2V5LFxuICBSdWxlLFxuICBSdWxlRW5naW5lLFxuICBTb3VyY2UsXG4gIFRBY3Rpb24sXG4gIFRFbmdpbmUsXG4gIGNoZWNrT2JqZWN0S2V5RXhpc3RzLFxuICBjaGVja09iamVjdFBhdGhFeGlzdHMsXG4gIGdldE9iamVjdERlZXBDb3B5LFxuICBnZXRPYmplY3RWYWx1ZUZyb21QYXRoLFxuICBpc0VtcHR5U3RyaW5nLFxuICBpc0VtcHR5VmFsdWUsXG4gIGlzTm90RW1wdHlWYWx1ZSxcbiAgaXNOdWxsLFxuICBpc1VuZGVmaW5lZCxcbiAgbG9nTWV0aG9kLFxuICBtZXJnZU9iamVjdHMsXG4gIG1lcmdlT2JqZWN0c0RlZXAsXG4gIHJlcGxhY2VTdHJpbmcsXG4gIHNldFZhbHVlVG9PYmplY3RQYXRoXG59IGZyb20gXCJrd2lraWQtdG9vbGtpdFwiO1xuaW1wb3J0IHsgS3dpa1VJTG9hZGVyU2VydmljZSB9IGZyb20gXCJrd2lrdWlcIjtcbmltcG9ydCB7IHBhaXJ3aXNlIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tIFwidXVpZFwiO1xuaW1wb3J0IHsgQ29udmVydGVyIH0gZnJvbSBcIi4uL2NvbmZpZy1jb252ZXJ0ZXIvY29uZmlnLWNvbnZlcnRlclwiO1xuaW1wb3J0IHsgRklFTERfUFJPUEVSVElFUyB9IGZyb20gXCIuLi9jb25maWctY29udmVydGVyL2NvbmZpZy1jb252ZXJ0ZXIuY29uc3RhbnRzXCI7XG5pbXBvcnQge1xuICBnZXRMYW5ndWFnZSxcbiAgdXBkYXRlTGFuZ3VhZ2Vcbn0gZnJvbSBcIi4uL2NvbmZpZy1jb252ZXJ0ZXIvY29uZmlnLWNvbnZlcnRlci5oZWxwZXJcIjtcbmltcG9ydCB7IEVGb3Jtc0xpc3RTdGF0dXMgfSBmcm9tIFwiLi4vZm9ybXMtbGlzdC9mb3Jtcy1saXN0LmRlZmluaXRpb25zXCI7XG5pbXBvcnQgeyBFQWN0aW9uS2V5IH0gZnJvbSBcIi4vZGVmaW5pdGlvbnMvZm9ybS12aWV3LmFjdGlvbnMuZGVmaW5pdGlvblwiO1xuaW1wb3J0IHtcbiAgRUFwaVJlcXVlc3RVcmxUeXBlLFxuICBFQXBpU3RhdHVzVHlwZSxcbiAgVEFwaSxcbiAgVEFwaUVuZHBvaW50LFxuICBUQXBpVGltZXJcbn0gZnJvbSBcIi4vZGVmaW5pdGlvbnMvZm9ybS12aWV3LmFwaXMuZGVmaW5pdGlvblwiO1xuaW1wb3J0IHtcbiAgRU1lc3NhZ2VUeXBlLFxuICBURm9ybVZpZXdHb0JhY2tNb2RlLFxuICBUTWVzc2FnZVxufSBmcm9tIFwiLi9kZWZpbml0aW9ucy9mb3JtLXZpZXcuY29tbW9ucy5kZWZpbml0aW9uXCI7XG5pbXBvcnQge1xuICBFRmllbGRUeXBlLFxuICBURmllbGRBcGlDYWxsLFxuICBURmllbGRMaXZlTG9jYXRpb24sXG4gIFRGaWVsZFRpdGxlXG59IGZyb20gXCIuL2RlZmluaXRpb25zL2Zvcm0tdmlldy5maWVsZHMuZGVmaW5pdGlvblwiO1xuaW1wb3J0IHsgRUxvZ0V2ZW50VHlwZSB9IGZyb20gXCIuL2RlZmluaXRpb25zL2Zvcm0tdmlldy5sb2dzLmRlZmluaXRpb25cIjtcbmltcG9ydCB7IEt3aWtJREZvcm1WaWV3QXBpU2VydmljZSB9IGZyb20gXCIuL2Zvcm0tdmlldy5hcGkuc2VydmljZVwiO1xuaW1wb3J0IHsgRk9STV9WSUVXX1RJTUVSUyB9IGZyb20gXCIuL2Zvcm0tdmlldy5jb25zdGFudHNcIjtcbmltcG9ydCB7IEt3aWtJREZvcm1WaWV3U2VydmljZSB9IGZyb20gXCIuL2Zvcm0tdmlldy5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBcGlzIH0gZnJvbSBcIi4vaGVscGVycy9mb3JtLXZpZXcuYXBpcy5oZWxwZXJcIjtcbmltcG9ydCB7IENhbWVyYUhlbHBlciB9IGZyb20gXCIuL2hlbHBlcnMvZm9ybS12aWV3LmNhbWVyYS5oZWxwZXJcIjtcbmltcG9ydCB7XG4gIGFwcGVuZEZvcm1GaWVsZE1lc3NhZ2UsXG4gIGFwcGVuZEh0bWxNZXNzYWdlLFxuICBjb252ZXJ0Rm9ybUZpZWxkRW1wdHlWYWx1ZVRvS3dpa1VJRm9ybWF0LFxuICBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb0t3aWtVSUZvcm1hdCxcbiAgY29udmVydEZvcm1GaWVsZFZhbHVlVG9TdGFuZGFyZEZvcm1hdCxcbiAgZmlsdGVyRHVwbGljYXRlc0ZpbGVzLFxuICBmaWx0ZXJEdXBsaWNhdGVzTWVkaWFGaWxlcyxcbiAgZ2V0Rm9ybUZpZWxkQnlLZXksXG4gIGdldEZvcm1GaWVsZEluZGV4QnlLZXksXG4gIGhpZ2hsaWdodEZvcm1GaWVsZEVycm9yLFxuICByZW1vdmVGb3JtRmllbGRNZXNzYWdlLFxuICBzZXRBcGlUaW1lck1lc3NhZ2UsXG4gIHNob3dGb3JtRmllbGRFcnJvclxufSBmcm9tIFwiLi9oZWxwZXJzL2Zvcm0tdmlldy5maWVsZHMuaGVscGVyXCI7XG5pbXBvcnQgeyBGb3JtVmFsaWRhdGlvbiB9IGZyb20gXCIuL2hlbHBlcnMvZm9ybS12aWV3LmZvcm0tdmFsaWRhdGlvbnMuaGVscGVyXCI7XG5pbXBvcnQgeyBmb3JtYXRFdmVudExvZ3MgfSBmcm9tIFwiLi9oZWxwZXJzL2Zvcm0tdmlldy5sb2dzLmhlbHBlclwiO1xuaW1wb3J0IHsgVGFza3MgfSBmcm9tIFwiLi9oZWxwZXJzL2Zvcm0tdmlldy50YXNrcy5oZWxwZXJcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImt3aWtpZC1mb3JtLXZpZXdcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9mb3JtLXZpZXcuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2Zvcm0tdmlldy5jb21wb25lbnQuc2Nzc1wiLCBcIi4uL3NoYXJlZC5zY3NzXCJdLFxuICBwcm92aWRlcnM6IFtLd2lrSURGb3JtVmlld1NlcnZpY2UsIEt3aWtJREZvcm1WaWV3QXBpU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgS3dpa0lERm9ybVZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZChcImZvcm1GaWVsZENvbnRhaW5lclJlZlwiKSBmb3JtRmllbGRDb250YWluZXJSZWY6IEVsZW1lbnRSZWY7XG5cbiAgQFZpZXdDaGlsZHJlbihcImZvcm1GaWVsZHNSZWZcIikgZm9ybUZpZWxkc1JlZjogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dcIikgcmVhZG9ubHkgZGlhbG9nOiBUZW1wbGF0ZVJlZjxUdWlEaWFsb2dDb250ZXh0PHZvaWQ+PjtcblxuICBAVmlld0NoaWxkKFwicHJldmlld1wiKSByZWFkb25seSBwcmV2aWV3OiBUZW1wbGF0ZVJlZjxUdWlEaWFsb2dDb250ZXh0PHZvaWQ+PjtcblxuICBASW5wdXQoKSBhbGxGb3Jtc0RhdGE6IGFueTtcblxuICBASW5wdXQoKSBleHRyYURhdGE6IGFueTtcblxuICBASW5wdXQoKSBhcGlDYWxsUmVzcG9uc2U6IGFueTtcblxuICBASW5wdXQoKSBidXR0b25DbGlja1Jlc3BvbnNlOiBhbnk7XG5cbiAgQElucHV0KCkgZm9ybUNvbmZpZzogYW55O1xuXG4gIEBJbnB1dCgpIGZvcm1EYXRhOiBhbnk7XG5cbiAgQElucHV0KCkgaXNNb2JpbGVWaWV3ID0gZmFsc2U7XG5cbiAgQElucHV0KCkgcG9wdXBGb3JtQ2FsbGJhY2s6IGFueSA9IHVuZGVmaW5lZDtcblxuICBASW5wdXQoKSB1c2VyQ29uZmlnOiBhbnk7XG5cbiAgQElucHV0KCkgc3RlcENvbmZpZzogYW55O1xuXG4gIEBPdXRwdXQoKSBnZXRMb2dzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSBnZXRVbnNhdmVkRGF0YVN0YXRlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSBvbkFjdGlvblNob3dQb3B1cEZvcm06IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpIG9uQ2xpY2tBcGlDYWxsOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSBvbkNsaWNrVmlld0ZpbGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpIG9uQ2xpY2tGb3JtRmllbGRCdXR0b246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpIG9uQ2xpY2tHb0JhY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpIG9uQ2xpY2tTYXZlRm9ybTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgb25DbGlja1ZpZXdGb3JtczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBmaWVsZEdyb3VwczogYW55ID0ge307XG5cbiAgZm9ybUZpZWxkczogYW55W10gPSBbXTtcblxuICBwcmV2aW91c0Zvcm1EYXRhOiBhbnkgPSB7fTtcblxuICBjYW1lcmFEYXRhOiBhbnkgPSB7fTtcblxuICBpc1Nob3dDYW1lcmEgPSBmYWxzZTtcblxuICBpc1Nob3dDYW1lcmFGdWxsc2NyZWVuID0gZmFsc2U7XG5cbiAgYWN0aXZlQ2FtZXJhRmllbGRLZXkgPSBcIlwiO1xuXG4gIGFjdGl2ZUNhbWVyYURhdGE6IGFueSA9IHt9O1xuXG4gIGFjdGl2ZUNhbWVyYVR5cGU6IFwiQ0FQVFVSRVwiIHwgXCJSRUNPUkRcIiA9IHVuZGVmaW5lZDtcblxuICBhY3RpdmVDYW1lcmFJbWFnZSA9IFwiXCI7XG5cbiAgYWN0aXZlQ2FtZXJhVmlkZW8gPSBcIlwiO1xuXG4gIGFjdGl2ZUNhbWVyYUNvbmZpZzogYW55ID0gdW5kZWZpbmVkO1xuXG4gIGFjdGl2ZUNhbWVyYVJlY29yZGluZ1RpbWUgPSAwO1xuXG4gIGFjdGl2ZUNhbWVyYVJlY29yZGluZ1RpbWVyU3ViY3JpcHRpb246IGFueSA9IHVuZGVmaW5lZDtcblxuICBhY3RpdmVDYW1lcmFSZWNvcmRpbmdTdGF0ZSA9IFwiTk9ORVwiO1xuXG4gIGFjdGl2ZUNhbWVyYVJlY29yZGluZ1N0YXRlU3ViY3JpcHRpb246IGFueSA9IHVuZGVmaW5lZDtcblxuICBAbG9nTWV0aG9kXG4gIHJlc2V0Q2FtZXJhKCk6IHZvaWQge1xuICAgIHRoaXMuaXNTaG93Q2FtZXJhID0gZmFsc2U7XG4gICAgdGhpcy5pc1Nob3dDYW1lcmFGdWxsc2NyZWVuID0gZmFsc2U7XG4gICAgdGhpcy5hY3RpdmVDYW1lcmFGaWVsZEtleSA9IFwiXCI7XG4gICAgdGhpcy5hY3RpdmVDYW1lcmFEYXRhID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYWN0aXZlQ2FtZXJhVHlwZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmFjdGl2ZUNhbWVyYUltYWdlID0gXCJcIjtcbiAgICB0aGlzLmFjdGl2ZUNhbWVyYVZpZGVvID0gXCJcIjtcbiAgICB0aGlzLmFjdGl2ZUNhbWVyYUNvbmZpZyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmFjdGl2ZUNhbWVyYVJlY29yZGluZ1RpbWUgPSAwO1xuICAgIHRoaXMuYWN0aXZlQ2FtZXJhUmVjb3JkaW5nU3RhdGUgPSBcIk5PTkVcIjtcbiAgfVxuXG4gIHByZXZpZXdQcm9wZXJ0aWVzOiBhbnkgPSB7XG4gICAgaHRtbDoge1xuICAgICAgYmVmb3JlOiBcIlwiLFxuICAgICAgYmVmb3JlU3R5bGVzOiBcIlwiLFxuICAgICAgYWZ0ZXI6IFwiXCIsXG4gICAgICBhZnRlclN0eWxlczogXCJcIlxuICAgIH0sXG4gICAgaWZyYW1lOiB7XG4gICAgICBzcmM6IFwiXCIsXG4gICAgICB0aXRsZTogXCJcIlxuICAgIH0sXG4gICAgdHlwZTogXCJkaWFsb2dcIixcbiAgICBzaXplOiBcImF1dG9cIixcbiAgICBwb3B1cEZvcm1LZXk6IFwiXCIsXG4gICAgdGl0bGU6IFwiXCIsXG4gICAgdW5hdmFpbGFibGU6IGZhbHNlXG4gIH07XG5cbiAgbG9hZGluZyA9IHRydWU7XG5cbiAgYXBpTG9hZGluZyA9IGZhbHNlO1xuXG4gIGJhY2tCdXR0b24gPSB7XG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIHNob3dMb2FkZXI6IGZhbHNlXG4gIH07XG5cbiAgdmlld0Zvcm1zQnV0dG9uID0ge1xuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBzaG93TG9hZGVyOiBmYWxzZVxuICB9O1xuXG4gIHNhdmVGb3JtQnV0dG9uID0ge1xuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBzaG93TG9hZGVyOiBmYWxzZVxuICB9O1xuXG4gIGZpbGVzOiBhbnkgPSB7fTtcblxuICBtZWRpYUZpbGVzOiBhbnkgPSB7fTtcblxuICBzdG9wVGFza0V4ZWN1dGlvbiA9IGZhbHNlO1xuXG4gIHdhaXRpbmdGb3JDaGFuZ2VzID0gZmFsc2U7XG5cbiAgcG9wdXBGb3JtQ29uZmlnOiBhbnkgPSB1bmRlZmluZWQ7XG5cbiAgcG9wdXBGb3JtRGF0YTogYW55ID0ge307XG5cbiAgdGFza0RhdGE6IGFueSA9IHt9O1xuXG4gIHByZXZpZXdEaWFsb2dSZWY6IGFueTtcblxuICBmb3JtR3JvdXA6IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZm9ybVZpZXdTZXJ2aWNlOiBLd2lrSURGb3JtVmlld1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtVmlld0FwaVNlcnZpY2U6IEt3aWtJREZvcm1WaWV3QXBpU2VydmljZSxcbiAgICBASW5qZWN0KFR1aVB1c2hTZXJ2aWNlKVxuICAgIHByb3RlY3RlZCByZWFkb25seSBwdXNoU2VydmljZTogVHVpUHVzaFNlcnZpY2UsXG4gICAgQEluamVjdChUdWlBbGVydFNlcnZpY2UpXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGFsZXJ0U2VydmljZTogVHVpQWxlcnRTZXJ2aWNlLFxuICAgIEBJbmplY3QoVHVpUHJldmlld0RpYWxvZ1NlcnZpY2UpXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcmV2aWV3RGlhbG9nU2VydmljZTogVHVpUHJldmlld0RpYWxvZ1NlcnZpY2UsXG4gICAgQEluamVjdChUdWlEaWFsb2dTZXJ2aWNlKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nU2VydmljZTogVHVpRGlhbG9nU2VydmljZSxcbiAgICBwdWJsaWMgbG9hZGVyU2VydmljZTogS3dpa1VJTG9hZGVyU2VydmljZSxcbiAgICBwcml2YXRlIGNhbWVyYVJlY29yZFNlcnZpY2U6IEt3aWtJRENhbWVyYVJlY29yZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMlxuICApIHt9XG5cbiAgQGxvZ01ldGhvZFxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5pbml0Rm9ybUNvbmZpZyh0aGlzLmZvcm1Db25maWcpO1xuXG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhUmVjb3JkaW5nVGltZXJTdWJjcmlwdGlvbiA9IHRoaXMuY2FtZXJhUmVjb3JkU2VydmljZVxuICAgICAgICAgIC5nZXRUaW1lclVwZGF0ZSgpXG4gICAgICAgICAgLnN1YnNjcmliZSgodGltZTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYVJlY29yZGluZ1RpbWUgPSB0aW1lO1xuICAgICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYVJlY29yZGluZ1N0YXRlU3ViY3JpcHRpb24gPSB0aGlzLmNhbWVyYVJlY29yZFNlcnZpY2VcbiAgICAgICAgICAuZ2V0UmVjb3JkaW5nU3RhdGUoKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKHN0YXRlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhUmVjb3JkaW5nU3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgdmVyaWZ5Q2hhbmdlID0gKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gY2hlY2tPYmplY3RLZXlFeGlzdHMoY2hhbmdlcywga2V5KSAmJiAhY2hhbmdlc1trZXldLmZpcnN0Q2hhbmdlO1xuICAgIH07XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImV4dHJhRGF0YVwiKSkge1xuICAgICAgdGhpcy5leHRyYURhdGEgPSBjaGFuZ2VzLmV4dHJhRGF0YS5jdXJyZW50VmFsdWU7XG4gICAgfVxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJ1c2VyQ29uZmlnXCIpKSB7XG4gICAgICB0aGlzLnVzZXJDb25maWcgPSBjaGFuZ2VzLnVzZXJDb25maWcuY3VycmVudFZhbHVlO1xuICAgIH1cbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwic3RlcENvbmZpZ1wiKSkge1xuICAgICAgdGhpcy5zdGVwQ29uZmlnID0gY2hhbmdlcy5zdGVwQ29uZmlnLmN1cnJlbnRWYWx1ZTtcbiAgICB9XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImZvcm1EYXRhXCIpKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGNoYW5nZXMuZm9ybURhdGEuY3VycmVudFZhbHVlLCBcImRhdGFcIikgJiZcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoY2hhbmdlcy5mb3JtRGF0YS5jdXJyZW50VmFsdWUsIFwiZXh0ZW5kZWREYXRhXCIpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcbiAgICAgICAgICAuLi50aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIC4uLmNoYW5nZXMuZm9ybURhdGEuY3VycmVudFZhbHVlLmRhdGFcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZm9ybURhdGEgPSB7XG4gICAgICAgICAgLi4udGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAuLi5jaGFuZ2VzLmZvcm1EYXRhLmN1cnJlbnRWYWx1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwicG9wdXBGb3JtQ2FsbGJhY2tcIikpIHtcbiAgICAgIGlmIChpc05vdEVtcHR5VmFsdWUoY2hhbmdlcy5wb3B1cEZvcm1DYWxsYmFjay5jdXJyZW50VmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IHBvcHVwRm9ybURhdGEgPVxuICAgICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKFxuICAgICAgICAgICAgY2hhbmdlcy5wb3B1cEZvcm1DYWxsYmFjay5jdXJyZW50VmFsdWUucG9wdXBGb3JtRGF0YSxcbiAgICAgICAgICAgIFwiZGF0YVwiXG4gICAgICAgICAgKSAmJlxuICAgICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKFxuICAgICAgICAgICAgY2hhbmdlcy5wb3B1cEZvcm1DYWxsYmFjay5jdXJyZW50VmFsdWUucG9wdXBGb3JtRGF0YSxcbiAgICAgICAgICAgIFwiZXh0ZW5kZWREYXRhXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICA/IGNoYW5nZXMucG9wdXBGb3JtQ2FsbGJhY2suY3VycmVudFZhbHVlLnBvcHVwRm9ybURhdGEuZGF0YVxuICAgICAgICAgICAgOiBjaGFuZ2VzLnBvcHVwRm9ybUNhbGxiYWNrLmN1cnJlbnRWYWx1ZS5wb3B1cEZvcm1EYXRhO1xuXG4gICAgICAgIGNvbnN0IHsgcG9wdXBGb3JtQ29uZmlnIH0gPSBjaGFuZ2VzLnBvcHVwRm9ybUNhbGxiYWNrLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgICB0aGlzLnBvcHVwRm9ybURhdGEgPSBtZXJnZU9iamVjdHModGhpcy5wb3B1cEZvcm1EYXRhLCB7XG4gICAgICAgICAgW3BvcHVwRm9ybUNvbmZpZy5rZXldOiBwb3B1cEZvcm1EYXRhXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZm9ybURhdGEgPSBtZXJnZU9iamVjdHModGhpcy5mb3JtRGF0YSwgdGhpcy5wb3B1cEZvcm1EYXRhKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoXG4gICAgICAgICAgICBjaGFuZ2VzLnBvcHVwRm9ybUNhbGxiYWNrLmN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgIFwic3RvcFRhc2tFeGVjdXRpb25cIlxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5zdG9wVGFza0V4ZWN1dGlvbiA9XG4gICAgICAgICAgICBjaGFuZ2VzLnBvcHVwRm9ybUNhbGxiYWNrLmN1cnJlbnRWYWx1ZS5zdG9wVGFza0V4ZWN1dGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN0b3BUYXNrRXhlY3V0aW9uID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy53YWl0aW5nRm9yQ2hhbmdlcyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiaXNNb2JpbGVWaWV3XCIpKSB7XG4gICAgICB0aGlzLmlzTW9iaWxlVmlldyA9IGNoYW5nZXMuaXNNb2JpbGVWaWV3LmN1cnJlbnRWYWx1ZTtcbiAgICB9XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImFwaUNhbGxSZXNwb25zZVwiKSkge1xuICAgICAgdGhpcy5hcGlDYWxsUmVzcG9uc2UgPSBjaGFuZ2VzLmFwaUNhbGxSZXNwb25zZS5jdXJyZW50VmFsdWU7XG5cbiAgICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkoXG4gICAgICAgIHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5XG4gICAgICApO1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IHRoaXMuYXBpQ2FsbFJlc3BvbnNlPy5yZXNwb25zZTtcblxuICAgICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICAgIGNhc2UgRUZpZWxkVHlwZS5GSUxFOlxuICAgICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlZEZpbGUgPSBnZXRPYmplY3REZWVwQ29weSh7XG4gICAgICAgICAgICAgIGlkOiB1dWlkdjQoKSxcbiAgICAgICAgICAgICAgLi4ucmVzcG9uc2VcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fQVBJX1JFU1BPTlNFX1VQTE9BRF9GSUxFLCB7XG4gICAgICAgICAgICAgIGFwaV9rZXk6IHRoaXMuYXBpQ2FsbFJlc3BvbnNlLmtleSxcbiAgICAgICAgICAgICAgZmllbGRfa2V5OiB0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXksXG4gICAgICAgICAgICAgIHJlc3BvbnNlX3R5cGU6IFwiRklMRV9VUExPQURfQVBJX1NVQ0NFU1NcIixcbiAgICAgICAgICAgICAgcmVzcG9uc2VcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZpbGVzKHVwZGF0ZWRGaWxlLCBcIk5PUk1BTFwiLCB0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkRmlsZSA9IGdldE9iamVjdERlZXBDb3B5KHtcbiAgICAgICAgICAgICAgaWQ6IHV1aWR2NCgpLFxuICAgICAgICAgICAgICAuLi50aGlzLmFwaUNhbGxSZXNwb25zZT8ucGF5bG9hZD8ubWV0YWRhdGFcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fQVBJX1JFU1BPTlNFX1VQTE9BRF9GSUxFLCB7XG4gICAgICAgICAgICAgIGFwaV9rZXk6IHRoaXMuYXBpQ2FsbFJlc3BvbnNlLmtleSxcbiAgICAgICAgICAgICAgZmllbGRfa2V5OiB0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXksXG4gICAgICAgICAgICAgIHJlc3BvbnNlX3R5cGU6IFwiRklMRV9VUExPQURfQVBJX0VSUk9SXCJcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZpbGVzKHVwZGF0ZWRGaWxlLCBcIkVSUk9SXCIsIHRoaXMuYXBpQ2FsbFJlc3BvbnNlLmtleSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRUZpZWxkVHlwZS5DQVBUVVJFOlxuICAgICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldENhbWVyYSgpO1xuXG4gICAgICAgICAgICBjb25zdCBpbWFnZSA9IHJlc3BvbnNlPy5pbWFnZV91cmw7XG4gICAgICAgICAgICBjb25zdCBpbWFnZU9jciA9IHJlc3BvbnNlPy5pbWFnZV9vY3I7XG4gICAgICAgICAgICBjb25zdCBpbWFnZUZhY2VtYXRjaCA9IHJlc3BvbnNlPy5pbWFnZV9mYWNlbWF0Y2g7XG4gICAgICAgICAgICBjb25zdCBpbWFnZVdhdGVybWFyayA9IHJlc3BvbnNlPy5pbWFnZV93YXRlcm1hcms7XG5cbiAgICAgICAgICAgIGNvbnN0IGltYWdlRGF0YSA9XG4gICAgICAgICAgICAgIGltYWdlT2NyIHx8IGltYWdlRmFjZW1hdGNoIHx8IGltYWdlV2F0ZXJtYXJrXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGltYWdlLFxuICAgICAgICAgICAgICAgICAgICAuLi4oaW1hZ2VPY3IgJiYgeyBvY3I6IGltYWdlT2NyIH0pLFxuICAgICAgICAgICAgICAgICAgICAuLi4oaW1hZ2VGYWNlbWF0Y2ggJiYgeyBmYWNlbWF0Y2g6IGltYWdlRmFjZW1hdGNoIH0pLFxuICAgICAgICAgICAgICAgICAgICAuLi4oaW1hZ2VXYXRlcm1hcmsgJiYgeyB3YXRlcm1hcms6IGltYWdlV2F0ZXJtYXJrIH0pXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBpbWFnZTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtRGF0YVtmaWVsZC5rZXldID0gZ2V0T2JqZWN0RGVlcENvcHkoW2ltYWdlRGF0YV0pO1xuICAgICAgICAgICAgdGhpcy5jYW1lcmFEYXRhW2ZpZWxkLmtleV0gPSBnZXRPYmplY3REZWVwQ29weShpbWFnZURhdGEpO1xuICAgICAgICAgICAgdGhpcy5tZWRpYUZpbGVzW2ZpZWxkLmtleV0gPSBnZXRPYmplY3REZWVwQ29weShbaW1hZ2VEYXRhXSk7XG5cbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0ucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgICAgZ2V0T2JqZWN0RGVlcENvcHkoW2ltYWdlRGF0YV0pLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBvbmx5U2VsZjogZmFsc2VcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBbZmllbGQua2V5XTogZ2V0T2JqZWN0RGVlcENvcHkoW2ltYWdlRGF0YV0pXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtcbiAgICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtcbiAgICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuZ2V0VW5zYXZlZERhdGFTdGF0ZS5lbWl0KHRydWUpO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkLmlzRm9ybUVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwidmFsaWRhdGlvblwiKSAmJlxuICAgICAgICAgICAgICBmaWVsZC52YWxpZGF0aW9uLnRyaWdnZXJzLmluY2x1ZGVzKFwiT05fQ0hBTkdFXCIpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29uc3QgcnVsZUVuZ2luZSA9IG5ldyBSdWxlRW5naW5lKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgICAgICAgQ0FNRVJBX0RBVEE6IHRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgICAgICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBydWxlRW5naW5lLnJ1bihmaWVsZC52YWxpZGF0aW9uKTtcbiAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmaWVsZC5pc0Zvcm1FbGVtZW50ICYmXG4gICAgICAgICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcImNvbm5lY3RlZEVsZW1lbnRzXCIpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50cyhcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIk9OX0NIQU5HRVwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BUElfUkVTUE9OU0VfVVBMT0FEX0lNQUdFLCB7XG4gICAgICAgICAgICAgIGFwaV9rZXk6IHRoaXMuYXBpQ2FsbFJlc3BvbnNlLmtleSxcbiAgICAgICAgICAgICAgZmllbGRfa2V5OiB0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXksXG4gICAgICAgICAgICAgIHJlc3BvbnNlX3R5cGU6IFwiSU1BR0VfVVBMT0FEX0FQSV9TVUNDRVNTXCIsXG4gICAgICAgICAgICAgIHJlc3BvbnNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0FQSV9SRVNQT05TRV9VUExPQURfSU1BR0UsIHtcbiAgICAgICAgICAgICAgYXBpX2tleTogdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5LFxuICAgICAgICAgICAgICBmaWVsZF9rZXk6IHRoaXMuYXBpQ2FsbFJlc3BvbnNlLmtleSxcbiAgICAgICAgICAgICAgcmVzcG9uc2VfdHlwZTogXCJJTUFHRV9VUExPQURfQVBJX0VSUk9SXCJcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRmlsZSBVcGxvYWQgZm9yIEltYWdlIEZhaWxlZFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRUZpZWxkVHlwZS5SRUNPUkQ6XG4gICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0Q2FtZXJhKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHZpZGVvID0gcmVzcG9uc2U/LnZpZGVvX3VybDtcblxuICAgICAgICAgICAgdGhpcy5mb3JtRGF0YVtmaWVsZC5rZXldID0gZ2V0T2JqZWN0RGVlcENvcHkoW3ZpZGVvXSk7XG4gICAgICAgICAgICB0aGlzLmNhbWVyYURhdGFbZmllbGQua2V5XSA9IGdldE9iamVjdERlZXBDb3B5KHZpZGVvKTtcbiAgICAgICAgICAgIHRoaXMubWVkaWFGaWxlc1tmaWVsZC5rZXldID0gZ2V0T2JqZWN0RGVlcENvcHkoW3ZpZGVvXSk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnBhdGNoVmFsdWUoXG4gICAgICAgICAgICAgIGdldE9iamVjdERlZXBDb3B5KFt2aWRlb10pLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBvbmx5U2VsZjogZmFsc2VcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBbZmllbGQua2V5XTogZ2V0T2JqZWN0RGVlcENvcHkoW3ZpZGVvXSlcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe1xuICAgICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe1xuICAgICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5nZXRVbnNhdmVkRGF0YVN0YXRlLmVtaXQodHJ1ZSk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZmllbGQuaXNGb3JtRWxlbWVudCAmJlxuICAgICAgICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJ2YWxpZGF0aW9uXCIpICYmXG4gICAgICAgICAgICAgIGZpZWxkLnZhbGlkYXRpb24udHJpZ2dlcnMuaW5jbHVkZXMoXCJPTl9DSEFOR0VcIilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjb25zdCBydWxlRW5naW5lID0gbmV3IFJ1bGVFbmdpbmUoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHJ1bGVFbmdpbmUucnVuKGZpZWxkLnZhbGlkYXRpb24pO1xuICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkLmlzRm9ybUVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwiY29ubmVjdGVkRWxlbWVudHNcIilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRzKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiT05fQ0hBTkdFXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0FQSV9SRVNQT05TRV9VUExPQURfVklERU8sIHtcbiAgICAgICAgICAgICAgYXBpX2tleTogdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5LFxuICAgICAgICAgICAgICBmaWVsZF9rZXk6IHRoaXMuYXBpQ2FsbFJlc3BvbnNlLmtleSxcbiAgICAgICAgICAgICAgcmVzcG9uc2VfdHlwZTogXCJWSURFT19VUExPQURfQVBJX1NVQ0NFU1NcIixcbiAgICAgICAgICAgICAgcmVzcG9uc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fQVBJX1JFU1BPTlNFX1VQTE9BRF9WSURFTywge1xuICAgICAgICAgICAgICBhcGlfa2V5OiB0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXksXG4gICAgICAgICAgICAgIGZpZWxkX2tleTogdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5LFxuICAgICAgICAgICAgICByZXNwb25zZV90eXBlOiBcIlZJREVPX1VQTE9BRF9BUElfRVJST1JcIlxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGaWxlIFVwbG9hZCBmb3IgVmlkZW8gRmFpbGVkXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLkxJVkVfTE9DQVRJT046XG4gICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1EYXRhW2ZpZWxkLmtleV0gPSBnZXRPYmplY3REZWVwQ29weShyZXNwb25zZSk7XG5cbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0ucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgICAgZ2V0T2JqZWN0RGVlcENvcHkocmVzcG9uc2UpLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBvbmx5U2VsZjogZmFsc2VcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBbZmllbGQua2V5XTogZ2V0T2JqZWN0RGVlcENvcHkocmVzcG9uc2UpXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtcbiAgICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtcbiAgICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuZ2V0VW5zYXZlZERhdGFTdGF0ZS5lbWl0KHRydWUpO1xuXG4gICAgICAgICAgICBjb25zdCBhcGlzID0gbmV3IEFwaXMoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBGSUVMRF9DT05GSUc6IGZpZWxkLFxuICAgICAgICAgICAgICAgIEFQSV9DT05GSUc6IGZpZWxkLmFwaSxcbiAgICAgICAgICAgICAgICBBUElfUkVTUE9OU0U6IHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgYXBpID0gYXdhaXQgYXBpcy52YWxpZGF0ZVJlc3BvbnNlKCk7XG4gICAgICAgICAgICAgIGZpZWxkLmFwaSA9IGFwaTtcbiAgICAgICAgICAgIH0pKCk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZmllbGQuaXNGb3JtRWxlbWVudCAmJlxuICAgICAgICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJ2YWxpZGF0aW9uXCIpICYmXG4gICAgICAgICAgICAgIGZpZWxkLnZhbGlkYXRpb24udHJpZ2dlcnMuaW5jbHVkZXMoXCJPTl9DSEFOR0VcIilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjb25zdCBydWxlRW5naW5lID0gbmV3IFJ1bGVFbmdpbmUoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHJ1bGVFbmdpbmUucnVuKGZpZWxkLnZhbGlkYXRpb24pO1xuICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkLmlzRm9ybUVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwiY29ubmVjdGVkRWxlbWVudHNcIilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRzKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiT05fQ0hBTkdFXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG5cbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoXG4gICAgICAgICAgICAgIEVMb2dFdmVudFR5cGUuRk9STV9fQVBJX1JFU1BPTlNFX1JFVkVSU0VfTEFUX0xPTkcsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhcGlfa2V5OiB0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXksXG4gICAgICAgICAgICAgICAgZmllbGRfa2V5OiB0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXksXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VfdHlwZTogXCJSRVZFUlNFX0xBVF9MT05HX0FQSV9TVUNDRVNTXCIsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhcbiAgICAgICAgICAgICAgRUxvZ0V2ZW50VHlwZS5GT1JNX19BUElfUkVTUE9OU0VfUkVWRVJTRV9MQVRfTE9ORyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFwaV9rZXk6IHRoaXMuYXBpQ2FsbFJlc3BvbnNlLmtleSxcbiAgICAgICAgICAgICAgICBmaWVsZF9rZXk6IHRoaXMuYXBpQ2FsbFJlc3BvbnNlLmtleSxcbiAgICAgICAgICAgICAgICByZXNwb25zZV90eXBlOiBcIlJFVkVSU0VfTEFUX0xPTkdfQVBJX0VSUk9SXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgYXBpcyA9IG5ldyBBcGlzKFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICAgICAgICBBUElfQ09ORklHOiBmaWVsZC5hcGksXG4gICAgICAgICAgICAgICAgQVBJX1JFU1BPTlNFOiB7fSxcbiAgICAgICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGFwaSA9IGF3YWl0IGFwaXMudmFsaWRhdGVSZXNwb25zZSgpO1xuICAgICAgICAgICAgICBmaWVsZC5hcGkgPSBhcGk7XG4gICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiUmV2ZXJzZSBMb2NhdGlvbiBmb3IgTGF0TG9uZyBGYWlsZWRcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJidXR0b25DbGlja1Jlc3BvbnNlXCIpKSB7XG4gICAgICB0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UgPSBjaGFuZ2VzLmJ1dHRvbkNsaWNrUmVzcG9uc2UuY3VycmVudFZhbHVlO1xuXG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5idXR0b25DbGlja1Jlc3BvbnNlLCBcImtleVwiKSkge1xuICAgICAgICBsZXQgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleShcbiAgICAgICAgICB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgdGhpcy5idXR0b25DbGlja1Jlc3BvbnNlPy5rZXlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5idXR0b25DbGlja1Jlc3BvbnNlLCBcImRlZmF1bHRcIikpIHtcbiAgICAgICAgICBmaWVsZC5kZWZhdWx0ID0gZ2V0T2JqZWN0RGVlcENvcHkodGhpcy5idXR0b25DbGlja1Jlc3BvbnNlLmRlZmF1bHQpO1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UuZGVmYXVsdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5idXR0b25DbGlja1Jlc3BvbnNlLCBcIm1lc3NhZ2VzXCIpKSB7XG4gICAgICAgICAgZmllbGQubWVzc2FnZXMgPSBnZXRPYmplY3REZWVwQ29weSh0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UubWVzc2FnZXMpO1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UubWVzc2FnZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuYnV0dG9uQ2xpY2tSZXNwb25zZSwgXCJ2YWxpZGF0aW9uXCIpKSB7XG4gICAgICAgICAgZmllbGQudmFsaWRhdGlvbiA9IGdldE9iamVjdERlZXBDb3B5KFxuICAgICAgICAgICAgdGhpcy5idXR0b25DbGlja1Jlc3BvbnNlLnZhbGlkYXRpb25cbiAgICAgICAgICApO1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UudmFsaWRhdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpZWxkID0gZ2V0T2JqZWN0RGVlcENvcHkoXG4gICAgICAgICAgbWVyZ2VPYmplY3RzKGZpZWxkLCB0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInZhbGlkYXRpb25cIikpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZC52YWxpZGF0aW9uLCBcInRyaWdnZXJzXCIpICYmXG4gICAgICAgICAgICBmaWVsZC52YWxpZGF0aW9uLnRyaWdnZXJzLmluY2x1ZGVzKFwiT05fUkVTUE9OU0VcIilcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGVFbmdpbmUgPSBuZXcgUnVsZUVuZ2luZShcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICAgICAgQ0FNRVJBX0RBVEE6IHRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgICAgICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICBhd2FpdCBydWxlRW5naW5lLnJ1bihmaWVsZC52YWxpZGF0aW9uKTtcbiAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJhbGxGb3Jtc0RhdGFcIikpIHtcbiAgICAgIHRoaXMuYWxsRm9ybXNEYXRhID0gY2hhbmdlcy5hbGxGb3Jtc0RhdGEuY3VycmVudFZhbHVlO1xuICAgIH1cbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiZm9ybUNvbmZpZ1wiKSkge1xuICAgICAgdGhpcy5mb3JtQ29uZmlnID0gY2hhbmdlcy5mb3JtQ29uZmlnLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0Rm9ybUNvbmZpZyh0aGlzLmZvcm1Db25maWcpO1xuICAgICAgfSkoKTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFjdGl2ZUNhbWVyYVJlY29yZGluZ1RpbWVyU3ViY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhUmVjb3JkaW5nVGltZXJTdWJjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5hY3RpdmVDYW1lcmFSZWNvcmRpbmdTdGF0ZVN1YmNyaXB0aW9uKSB7XG4gICAgICB0aGlzLmFjdGl2ZUNhbWVyYVJlY29yZGluZ1N0YXRlU3ViY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHRyaWdnZXJMb2dzKGV2ZW50VHlwZTogRUxvZ0V2ZW50VHlwZSwgbG9nczogYW55KSB7XG4gICAgdGhpcy5nZXRMb2dzLmVtaXQoXG4gICAgICBmb3JtYXRFdmVudExvZ3MoXG4gICAgICAgIGV2ZW50VHlwZSxcbiAgICAgICAgdGhpcy5zdGVwQ29uZmlnLFxuICAgICAgICB0aGlzLmZvcm1Db25maWcsXG4gICAgICAgIGdldE9iamVjdERlZXBDb3B5KGxvZ3MpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaW5pdEZvcm1Db25maWcoZm9ybUNvbmZpZzogYW55KSB7XG4gICAgZm9ybUNvbmZpZyA9IG5ldyBDb252ZXJ0ZXIoKS5jb252ZXJ0Rm9ybUNvbmZpZyhmb3JtQ29uZmlnKTtcblxuICAgIGZvcm1Db25maWcgPSBuZXcgQ29udmVydGVyKCkudXBkYXRlRm9ybUNvbmZpZ1Byb3BlcnRpZXMoZm9ybUNvbmZpZyk7XG5cbiAgICB0aGlzLnNldEZvcm1GaWVsZHNGcm9tRm9ybUNvbmZpZyhmb3JtQ29uZmlnKTtcblxuICAgIHRoaXMuc2V0Rm9ybUZpZWxkR3JvdXBzRnJvbUZvcm1Db25maWcoZm9ybUNvbmZpZyk7XG5cbiAgICB0aGlzLnNldEZvcm1EYXRhRnJvbUFsbEZvcm1zRGF0YSgpO1xuXG4gICAgdGhpcy5mb3JtQ29uZmlnID0gZm9ybUNvbmZpZztcblxuICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19DT05GSUdfTE9BRF9TVUNDRVNTLCB7XG4gICAgICAuLi4oZm9ybUNvbmZpZy5zZXF1ZW5jZU5vICYmIHtcbiAgICAgICAgZm9ybV9zZXF1ZW5jZV9ubzogZm9ybUNvbmZpZy5zZXF1ZW5jZU5vXG4gICAgICB9KSxcbiAgICAgIC4uLihmb3JtQ29uZmlnLnN0YXR1cyAmJiB7IGZvcm1fc3RhdHVzOiBmb3JtQ29uZmlnLnN0YXR1cyB9KVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUFJFIEZvcm0gVGFza3NcbiAgICAgKiAxLiBBUEkgQ2FsbHMuXG4gICAgICogMi4gQWx0ZXIgRGF0YSBTdHJ1Y3R1cmUuXG4gICAgICogMy4gQWx0ZXIgRm9ybSBDb25maWcuXG4gICAgICovXG4gICAgaWYgKFxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5mb3JtQ29uZmlnLCBcInRhc2tzXCIpICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmZvcm1Db25maWcudGFza3MsIFwicHJlXCIpXG4gICAgKSB7XG4gICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fVEFTS19QUkUsIHt9KTtcblxuICAgICAgZm9yIChjb25zdCBwcmVUYXNrIG9mIHRoaXMuZm9ybUNvbmZpZy50YXNrcy5wcmUpIHtcbiAgICAgICAgY29uc3QgdGFzayA9IG5ldyBUYXNrcyhcbiAgICAgICAgICBwcmVUYXNrLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIEZPUk1fQ09ORklHOiB0aGlzLmZvcm1Db25maWcsXG4gICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgQ0FNRVJBX0RBVEE6IHRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zdG9wVGFza0V4ZWN1dGlvbiA9IGZhbHNlO1xuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMocHJlVGFzaywgXCJ3YWl0XCIpKSB7XG4gICAgICAgICAgdGhpcy53YWl0aW5nRm9yQ2hhbmdlcyA9IHByZVRhc2sud2FpdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLndhaXRpbmdGb3JDaGFuZ2VzID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0YXNrLmV4ZWN1dGUoKTtcblxuICAgICAgICAvLyBXYWl0IGZvciBuZ09uQ2hhbmdlcyB0byBiZSBjYWxsZWQgYmVmb3JlIGNvbnRpbnVpbmcgdG8gdGhlIG5leHQgdGFza1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMud2FpdGluZ0ZvckNoYW5nZXMpIHtcbiAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIEZPUk1fVklFV19USU1FUlMuV0FJVF9GT1JfQ0hBTkdFU19CRUZPUkVfTU9WSU5HX1RPX05FWFRfVEFTSyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLnN0b3BUYXNrRXhlY3V0aW9uKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5mb3JtRGF0YSA9IG1lcmdlT2JqZWN0cyh0aGlzLmZvcm1EYXRhLCB0aGlzLnBvcHVwRm9ybURhdGEpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0b3BUYXNrRXhlY3V0aW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5mb3JtR3JvdXAgPSBhd2FpdCB0aGlzLmZvcm1WaWV3U2VydmljZS5jcmVhdGVGb3JtR3JvdXAoXG4gICAgICB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICB7XG4gICAgICAgIEZPUk1fQ09ORklHOiB0aGlzLmZvcm1Db25maWcsXG4gICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgQ0FNRVJBX0RBVEE6IHRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgfSxcbiAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIEZvciBzb21lIHJlYXNvbiBpZiB0aGVpciBhIGZpZWxkIG9mIHR5cGUgJ0lNQUdFJyB0aGVuXG4gICAgICogZm9ybURhdGEgaXMgYWRkaW5nIGEgJ3VuZGVmaW5lZCcga2V5IHdpdGggbGFzdCBpbWFnZSdzIHZhbHVlIGZyb20gdGhlIGFycmF5LlxuICAgICAqIEJlbG93IHBpZWNlIG9mIGNvZGUgaXMgdG8gcmVtb3ZlIHRoYXQgcmVkdW5kZW50IHZhbHVlIGZyb20gZm9ybURhdGEuXG4gICAgICovXG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuZm9ybURhdGEsIFwidW5kZWZpbmVkXCIpKSB7XG4gICAgICBkZWxldGUgdGhpcy5mb3JtRGF0YS51bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiB0aGlzLmZvcm1GaWVsZHMpIHtcbiAgICAgIGlmIChmaWVsZC5pc0Zvcm1FbGVtZW50KSB7XG4gICAgICAgIHRoaXMucHJldmlvdXNGb3JtRGF0YSA9IHtcbiAgICAgICAgICAuLi50aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgW2ZpZWxkLmtleV06IGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvU3RhbmRhcmRGb3JtYXQoXG4gICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVcbiAgICAgICAgICApXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcbiAgICAgICAgICAuLi50aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIFtmaWVsZC5rZXldOiBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0KFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlXG4gICAgICAgICAgKVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChmaWVsZC50eXBlID09PSBFRmllbGRUeXBlLkZJTEUpIHtcbiAgICAgICAgICB0aGlzLmZpbGVzW2ZpZWxkLmtleV0gPSB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWVsZC50eXBlID09PSBFRmllbGRUeXBlLkNBUFRVUkUpIHtcbiAgICAgICAgICB0aGlzLnJlc2V0Q2FtZXJhKCk7XG5cbiAgICAgICAgICB0aGlzLmNhbWVyYURhdGEgPSB7XG4gICAgICAgICAgICAuLi50aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgICBbZmllbGQua2V5XTogY29udmVydEZvcm1GaWVsZFZhbHVlVG9TdGFuZGFyZEZvcm1hdChcbiAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgdGhpcy5tZWRpYUZpbGVzW2ZpZWxkLmtleV0gPSB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWVsZC50eXBlID09PSBFRmllbGRUeXBlLlJFQ09SRCkge1xuICAgICAgICAgIHRoaXMucmVzZXRDYW1lcmEoKTtcblxuICAgICAgICAgIHRoaXMuY2FtZXJhRGF0YSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICAgIFtmaWVsZC5rZXldOiBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0KFxuICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICB0aGlzLm1lZGlhRmlsZXNbZmllbGQua2V5XSA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgIC5waXBlKHBhaXJ3aXNlKCkpXG4gICAgICAgICAgLnN1YnNjcmliZSgoW3ByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZV0pID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNGb3JtRGF0YSA9IHtcbiAgICAgICAgICAgICAgLi4udGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgICBbZmllbGQua2V5XTogY29udmVydEZvcm1GaWVsZFZhbHVlVG9TdGFuZGFyZEZvcm1hdChcbiAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICBwcmV2aW91c1ZhbHVlXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuZm9ybURhdGEgPSB7XG4gICAgICAgICAgICAgIC4uLnRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICAgIFtmaWVsZC5rZXldOiBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0KFxuICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gRUZpZWxkVHlwZS5GSUxFKSB7XG4gICAgICAgICAgICAgIHRoaXMuZmlsZXNbZmllbGQua2V5XSA9IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSBFRmllbGRUeXBlLkNBUFRVUkUpIHtcbiAgICAgICAgICAgICAgdGhpcy5yZXNldENhbWVyYSgpO1xuXG4gICAgICAgICAgICAgIHRoaXMuY2FtZXJhRGF0YSA9IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgICAgICAgW2ZpZWxkLmtleV06IGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvU3RhbmRhcmRGb3JtYXQoXG4gICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICB0aGlzLm1lZGlhRmlsZXNbZmllbGQua2V5XSA9IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSBFRmllbGRUeXBlLlJFQ09SRCkge1xuICAgICAgICAgICAgICB0aGlzLnJlc2V0Q2FtZXJhKCk7XG5cbiAgICAgICAgICAgICAgdGhpcy5jYW1lcmFEYXRhID0ge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICAgICAgICBbZmllbGQua2V5XTogY29udmVydEZvcm1GaWVsZFZhbHVlVG9TdGFuZGFyZEZvcm1hdChcbiAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHRoaXMubWVkaWFGaWxlc1tmaWVsZC5rZXldID0gY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgZmllbGQgb2YgdGhpcy5mb3JtRmllbGRzKSB7XG4gICAgICBpZiAoZmllbGQuaXNGb3JtRWxlbWVudCkge1xuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwidmFsaWRhdGlvblwiKSkge1xuICAgICAgICAgIGlmIChmaWVsZC52YWxpZGF0aW9uLnRyaWdnZXJzLmluY2x1ZGVzKFwiT05fSU5JVFwiKSkge1xuICAgICAgICAgICAgY29uc3QgcnVsZUVuZ2luZSA9IG5ldyBSdWxlRW5naW5lKFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGF3YWl0IHJ1bGVFbmdpbmUucnVuKGZpZWxkLnZhbGlkYXRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJjb25uZWN0ZWRFbGVtZW50c1wiKSkge1xuICAgICAgICAgIHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudHMoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiT05fSU5JVFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBzZXRGb3JtRmllbGRzRnJvbUZvcm1Db25maWcoZm9ybUNvbmZpZzogYW55KSB7XG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm1Db25maWcsIFwiZmllbGRzXCIpKSB7XG4gICAgICB0aGlzLmZvcm1GaWVsZHMgPSBmb3JtQ29uZmlnLmZpZWxkcztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybUNvbmZpZywgXCJtdWx0aUZvcm1cIikgJiZcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm1Db25maWcubXVsdGlGb3JtLCBcImZpZWxkc1wiKVxuICAgICkge1xuICAgICAgdGhpcy5mb3JtRmllbGRzID0gZm9ybUNvbmZpZy5tdWx0aUZvcm0uZmllbGRzO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgc2V0Rm9ybUZpZWxkR3JvdXBzRnJvbUZvcm1Db25maWcoZm9ybUNvbmZpZzogYW55KSB7XG4gICAgdGhpcy5maWVsZEdyb3VwcyA9IGZvcm1Db25maWcuZmllbGRHcm91cHM7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHNldEZvcm1EYXRhRnJvbUFsbEZvcm1zRGF0YSgpIHtcbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5hbGxGb3Jtc0RhdGEsIHRoaXMuZm9ybUNvbmZpZy5rZXkpKSB7XG4gICAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuYWxsRm9ybXNEYXRhW3RoaXMuZm9ybUNvbmZpZy5rZXldO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm1EYXRhLCBcImRhdGFcIikgJiZcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybURhdGEsIFwiZXh0ZW5kZWREYXRhXCIpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcbiAgICAgICAgICAuLi50aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIC4uLmZvcm1EYXRhLmRhdGFcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZm9ybURhdGEgPSB7XG4gICAgICAgICAgLi4udGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAuLi5mb3JtRGF0YVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvcm1EYXRhID0ge307XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRHcm91cEFjdGlvbnMoXG4gICAgY2hpbGRGaWVsZEdyb3VwQ29uZmlnOiBhbnksXG4gICAgcGFyZW50RmllbGQ6IGFueVxuICApIHtcbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoY2hpbGRGaWVsZEdyb3VwQ29uZmlnLCBcInJ1bGVzXCIpKSB7XG4gICAgICBjb25zdCBydWxlc01hcHBpbmcgPSBuZXcgUnVsZShjaGlsZEZpZWxkR3JvdXBDb25maWcucnVsZXMsIHtcbiAgICAgICAgRklFTERfQ09ORklHOiBwYXJlbnRGaWVsZCxcbiAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICB9KS5tYXBwaW5nKCk7XG5cbiAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGNoaWxkRmllbGRHcm91cENvbmZpZy5hY3Rpb25zKSB7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvblN1Y2Nlc3MgPSBuZXcgQ29uZGl0aW9uKFxuICAgICAgICAgIGFjdGlvbi5jb25kaXRpb24sXG4gICAgICAgICAgcnVsZXNNYXBwaW5nXG4gICAgICAgICkuZXZhbHVhdGUoKTtcblxuICAgICAgICBpZiAoY29uZGl0aW9uU3VjY2Vzcykge1xuICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSBuZXcgQWN0aW9uKFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgcnVsZXNNYXBwaW5nLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBGSUVMRF9DT05GSUc6IHBhcmVudEZpZWxkLFxuICAgICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLnRha2VBY3Rpb25PbkZpZWxkR3JvdXAuYmluZCh0aGlzKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBhd2FpdCBhY3Rpb25zLmV4ZWN1dGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkR3JvdXAoXG4gICAgY3VycmVudEZpZWxkOiBhbnksXG4gICAgY29ubmVjdGVkRmllbGRHcm91cENvbmZpZzogYW55LFxuICAgIGV2ZW50VHlwZTogc3RyaW5nXG4gICkge1xuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhjb25uZWN0ZWRGaWVsZEdyb3VwQ29uZmlnLCBcInRyaWdnZXJzXCIpKSB7XG4gICAgICBpZiAoY29ubmVjdGVkRmllbGRHcm91cENvbmZpZy50cmlnZ2Vycy5pbmNsdWRlcyhldmVudFR5cGUpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkR3JvdXBBY3Rpb25zKFxuICAgICAgICAgIGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWcsXG4gICAgICAgICAgY3VycmVudEZpZWxkXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRBY3Rpb25zKFxuICAgIGNvbm5lY3RlZEZpZWxkQ29uZmlnOiBhbnksXG4gICAgY29ubmVjdGVkRmllbGQ6IGFueVxuICApIHtcbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoY29ubmVjdGVkRmllbGRDb25maWcsIFwicnVsZXNcIikpIHtcbiAgICAgIGNvbnN0IHJ1bGVzTWFwcGluZyA9IG5ldyBSdWxlKGNvbm5lY3RlZEZpZWxkQ29uZmlnLnJ1bGVzLCB7XG4gICAgICAgIEZJRUxEX0NPTkZJRzogY29ubmVjdGVkRmllbGQsXG4gICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgQ0FNRVJBX0RBVEE6IHRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgfSkubWFwcGluZygpO1xuXG4gICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiBjb25uZWN0ZWRGaWVsZENvbmZpZy5hY3Rpb25zKSB7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvblN1Y2Nlc3MgPSBuZXcgQ29uZGl0aW9uKFxuICAgICAgICAgIGFjdGlvbi5jb25kaXRpb24sXG4gICAgICAgICAgcnVsZXNNYXBwaW5nXG4gICAgICAgICkuZXZhbHVhdGUoKTtcblxuICAgICAgICBpZiAoY29uZGl0aW9uU3VjY2Vzcykge1xuICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSBuZXcgQWN0aW9uKFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgcnVsZXNNYXBwaW5nLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgICBGSUVMRF9DT05GSUc6IGNvbm5lY3RlZEZpZWxkLFxuICAgICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBhd2FpdCBhY3Rpb25zLmV4ZWN1dGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb25uZWN0ZWRGaWVsZDtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkcyhcbiAgICBjdXJyZW50RmllbGQ6IGFueSxcbiAgICBjb25uZWN0ZWRGaWVsZENvbmZpZzogYW55LFxuICAgIGV2ZW50VHlwZTogc3RyaW5nLFxuICAgIG5lc3RlZDogc3RyaW5nXG4gICkge1xuICAgIGxldCBjb25uZWN0ZWRGaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KFxuICAgICAgdGhpcy5mb3JtRmllbGRzLFxuICAgICAgY29ubmVjdGVkRmllbGRDb25maWcua2V5XG4gICAgKTtcblxuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhjb25uZWN0ZWRGaWVsZENvbmZpZywgXCJ0cmlnZ2Vyc1wiKSkge1xuICAgICAgaWYgKGNvbm5lY3RlZEZpZWxkQ29uZmlnLnRyaWdnZXJzLmluY2x1ZGVzKGV2ZW50VHlwZSkpIHtcbiAgICAgICAgY29ubmVjdGVkRmllbGQgPSBhd2FpdCB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEFjdGlvbnMoXG4gICAgICAgICAgY29ubmVjdGVkRmllbGRDb25maWcsXG4gICAgICAgICAgY29ubmVjdGVkRmllbGRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGNvbm5lY3RlZEZpZWxkQ29uZmlnLCBcImhhbmRsZU5lc3RlZEZpZWxkc1wiKSkge1xuICAgICAgaWYgKGNvbm5lY3RlZEZpZWxkQ29uZmlnLmhhbmRsZU5lc3RlZEZpZWxkcykge1xuICAgICAgICB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRzKFxuICAgICAgICAgIHsga2V5OiBjb25uZWN0ZWRGaWVsZENvbmZpZy5rZXkgfSxcbiAgICAgICAgICBldmVudFR5cGVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRGaWVsZDtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaGFuZGxlQ29ubmVjdGVkRWxlbWVudHMoZTogYW55LCBldmVudFR5cGU6IHN0cmluZykge1xuICAgIGxldCBjdXJyZW50RmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGUua2V5KTtcblxuICAgIGlmIChjdXJyZW50RmllbGQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGN1cnJlbnRGaWVsZCwgXCJjb25uZWN0ZWRFbGVtZW50c1wiKSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoXG4gICAgICAgICAgICBjdXJyZW50RmllbGQuY29ubmVjdGVkRWxlbWVudHMsXG4gICAgICAgICAgICBcImNvbm5lY3RlZEZpZWxkR3JvdXBzXCJcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IHsgY29ubmVjdGVkRmllbGRHcm91cHMgfSA9IGN1cnJlbnRGaWVsZC5jb25uZWN0ZWRFbGVtZW50cztcbiAgICAgICAgICBmb3IgKGNvbnN0IGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWcgb2YgY29ubmVjdGVkRmllbGRHcm91cHMpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkR3JvdXAoXG4gICAgICAgICAgICAgIGN1cnJlbnRGaWVsZCxcbiAgICAgICAgICAgICAgY29ubmVjdGVkRmllbGRHcm91cENvbmZpZyxcbiAgICAgICAgICAgICAgZXZlbnRUeXBlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoXG4gICAgICAgICAgICBjdXJyZW50RmllbGQuY29ubmVjdGVkRWxlbWVudHMsXG4gICAgICAgICAgICBcImNvbm5lY3RlZEZpZWxkc1wiXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCB7IGNvbm5lY3RlZEZpZWxkcyB9ID0gY3VycmVudEZpZWxkLmNvbm5lY3RlZEVsZW1lbnRzO1xuICAgICAgICAgIGZvciAoY29uc3QgY29ubmVjdGVkRmllbGRDb25maWcgb2YgY29ubmVjdGVkRmllbGRzKSB7XG4gICAgICAgICAgICBjdXJyZW50RmllbGQgPSBhd2FpdCB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZHMoXG4gICAgICAgICAgICAgIGN1cnJlbnRGaWVsZCxcbiAgICAgICAgICAgICAgY29ubmVjdGVkRmllbGRDb25maWcsXG4gICAgICAgICAgICAgIGV2ZW50VHlwZSxcbiAgICAgICAgICAgICAgZXZlbnRUeXBlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBGaWVsZCBmb3IgdGhlIGdpdmVuIGtleSBbJyR7ZS5rZXl9J10gaXMgbm90IGZvdW5kIHdpdGggZXZlbnRUeXBlOiAnJHtldmVudFR5cGV9Jy5gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlUmVtb3ZlZEZpbGUoZTogYW55KSB7XG4gICAgdGhpcy5zaG93QXBpTG9hZGVyKCk7XG5cbiAgICBpZiAodGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZS5rZXldLmVuYWJsZWQpIHtcbiAgICAgIHRoaXMuZmlsZXNbZS5rZXldID0gZS5maWxlcztcblxuICAgICAgdGhpcy5mb3JtRGF0YVtlLmtleV0gPSBmaWx0ZXJEdXBsaWNhdGVzRmlsZXModGhpcy5maWxlc1tlLmtleV0pO1xuXG4gICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKFxuICAgICAgICB7XG4gICAgICAgICAgW2Uua2V5XTogdGhpcy5mb3JtRGF0YVtlLmtleV1cbiAgICAgICAgfSxcbiAgICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0ZJRUxEX0ZJTEVfUkVNT1ZFLCB7XG4gICAgICBmaWVsZF9rZXk6IGUua2V5LFxuICAgICAgLi4uKGUuZmlsZT8ubmFtZSA/PyB7IGZpbGVfbmFtZTogZS5maWxlPy5uYW1lIH0pLFxuICAgICAgLi4uKGUuZmlsZT8uc2l6ZSA/PyB7IGZpbGVfc2l6ZTogZS5maWxlPy5zaXplIH0pLFxuICAgICAgLi4uKGUuZmlsZT8udHlwZSA/PyB7IGZpbGVfdHlwZTogZS5maWxlPy50eXBlIH0pXG4gICAgfSk7XG5cbiAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlVmlld0J1dHRvbkNsaWNrKGU6IGFueSwgZmllbGQ6IGFueSkge1xuICAgIHRoaXMub25DbGlja1ZpZXdGaWxlLmVtaXQoe1xuICAgICAga2V5OiBmaWVsZD8ua2V5LFxuICAgICAgdHlwZTogZmllbGQ/LnR5cGUsXG4gICAgICBwYXlsb2FkOiB7XG4gICAgICAgIGZpZWxkLFxuICAgICAgICBldmVudDogZVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVHZXRLZXlWYWx1ZUZpbGUoZTogYW55KSB7XG4gICAgdGhpcy5zaG93QXBpTG9hZGVyKCk7XG5cbiAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZS5rZXkpO1xuXG4gICAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheShlLnZhbHVlKSA/IGUudmFsdWUgOiBbZS52YWx1ZV07XG5cbiAgICBpZiAoXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJwcm9wZXJ0aWVzXCIpICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZC5wcm9wZXJ0aWVzLCBcInVwbG9hZEZpbGVUb1NlcnZlclwiKSAmJlxuICAgICAgZmllbGQucHJvcGVydGllcy51cGxvYWRGaWxlVG9TZXJ2ZXJcbiAgICApIHtcbiAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudXBsb2FkRmlsZShmaWVsZCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbGVzKHZhbHVlLCBcIkxPQURJTkdcIiwgZS5rZXkpO1xuXG4gICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19GSUVMRF9GSUxFX0FERCwge1xuICAgICAgICAgIGZpZWxkX2tleTogZS5rZXksXG4gICAgICAgICAgLi4uKGUuZmlsZT8ubmFtZSA/PyB7IGZpbGVfbmFtZTogZS5maWxlPy5uYW1lIH0pLFxuICAgICAgICAgIC4uLihlLmZpbGU/LnNpemUgPz8geyBmaWxlX3NpemU6IGUuZmlsZT8uc2l6ZSB9KSxcbiAgICAgICAgICAuLi4oZS5maWxlPy50eXBlID8/IHsgZmlsZV90eXBlOiBlLmZpbGU/LnR5cGUgfSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdXBkYXRlZEZpbGUgPSBnZXRPYmplY3REZWVwQ29weShcbiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgIGlkOiB1dWlkdjQoKSxcbiAgICAgICAgICAgICAgICBuYW1lOiB2YWx1ZS5uYW1lLFxuICAgICAgICAgICAgICAgIHR5cGU6IHZhbHVlLnR5cGUsXG4gICAgICAgICAgICAgICAgc2l6ZTogdmFsdWUuc2l6ZSxcbiAgICAgICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHZhbHVlLmxhc3RNb2RpZmllZCxcbiAgICAgICAgICAgICAgICB3ZWJraXRSZWxhdGl2ZVBhdGg6IHZhbHVlLndlYmtpdFJlbGF0aXZlUGF0aFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIEZPUk1fVklFV19USU1FUlMuV0FJVF9GT1JfRklMRV9NRVRBREFUQV9ERUVQQ09QWSk7IC8vIDEwMDAgbXMgPSAxIHNlY1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVGaWxlcyh1cGRhdGVkRmlsZSwgXCJOT1JNQUxcIiwgZS5rZXkpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICB9XG4gIH1cblxuICAvKiogTWV0aG9kcyBmb3IgQ2FtZXJhIHJlbGF0ZWQgZmllbGRzIGxpa2UgJ0NBUFRVUkUnIG9yICAnUkVDT1JEJyAqL1xuICBAbG9nTWV0aG9kXG4gIGhhbmRsZU9uQ2xpY2tHZXRSZW1vdmVkTWVkaWFGaWxlKGU6IGFueSkge1xuICAgIGlmICh0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tlLmtleV0uZW5hYmxlZCkge1xuICAgICAgdGhpcy5zaG93QXBpTG9hZGVyKCk7XG5cbiAgICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBlLmtleSk7XG5cbiAgICAgIHRoaXMucmVzZXRDYW1lcmEoKTtcblxuICAgICAgdGhpcy5tZWRpYUZpbGVzW2Uua2V5XSA9IGUubWVkaWFGaWxlcztcblxuICAgICAgdGhpcy5mb3JtRGF0YVtlLmtleV0gPSBmaWx0ZXJEdXBsaWNhdGVzTWVkaWFGaWxlcyh0aGlzLm1lZGlhRmlsZXNbZS5rZXldKTtcblxuICAgICAgdGhpcy5jYW1lcmFEYXRhW2Uua2V5XSA9IGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvU3RhbmRhcmRGb3JtYXQoXG4gICAgICAgIGZpZWxkLFxuICAgICAgICB0aGlzLmZvcm1EYXRhW2Uua2V5XVxuICAgICAgKTtcblxuICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShcbiAgICAgICAge1xuICAgICAgICAgIFtlLmtleV06IHRoaXMuZm9ybURhdGFbZS5rZXldXG4gICAgICAgIH0sXG4gICAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XG4gICAgICApO1xuXG4gICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRklFTERfTUVESUFfRklMRV9SRU1PVkUsIHtcbiAgICAgICAgZmllbGRfa2V5OiBlLmtleSxcbiAgICAgICAgLi4uKGUuZmlsZT8ubmFtZSA/PyB7IGZpbGVfbmFtZTogZS5maWxlPy5uYW1lIH0pLFxuICAgICAgICAuLi4oZS5maWxlPy5zaXplID8/IHsgZmlsZV9zaXplOiBlLmZpbGU/LnNpemUgfSksXG4gICAgICAgIC4uLihlLmZpbGU/LnR5cGUgPz8geyBmaWxlX3R5cGU6IGUuZmlsZT8udHlwZSB9KVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuZ2V0VW5zYXZlZERhdGFTdGF0ZS5lbWl0KHRydWUpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGZpZWxkLmlzRm9ybUVsZW1lbnQgJiZcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwidmFsaWRhdGlvblwiKSAmJlxuICAgICAgICBmaWVsZC52YWxpZGF0aW9uLnRyaWdnZXJzLmluY2x1ZGVzKFwiT05fQ0hBTkdFXCIpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgcnVsZUVuZ2luZSA9IG5ldyBSdWxlRW5naW5lKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgQ0FNRVJBX0RBVEE6IHRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICk7XG5cbiAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCBydWxlRW5naW5lLnJ1bihmaWVsZC52YWxpZGF0aW9uKTtcbiAgICAgICAgfSkoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBmaWVsZC5pc0Zvcm1FbGVtZW50ICYmXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcImNvbm5lY3RlZEVsZW1lbnRzXCIpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50cyhcbiAgICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIk9OX0NIQU5HRVwiXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICAgIH0sIDUwMCk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVPbkNsaWNrSW5wdXRDYW1lcmEoZTogYW55LCBmaWVsZDogYW55KSB7XG4gICAgdGhpcy5sb2FkZXJTZXJ2aWNlLnNob3coe1xuICAgICAgbG9hZGVyVGV4dDogXCJMb2FkaW5nIENhbWVyYS4uLlwiLFxuICAgICAgZnVsbHNjcmVlbjogdHJ1ZVxuICAgIH0pO1xuXG4gICAgY29uc3QgZmllbGRLZXkgPSBmaWVsZC5rZXk7XG4gICAgY29uc3QgZmllbGRDYW1lcmFDb25maWcgPSBmaWVsZD8ucHJvcGVydGllcyA/PyB7fTtcblxuICAgIHRoaXMuYWN0aXZlQ2FtZXJhVHlwZSA9IGZpZWxkPy50eXBlLnRvVXBwZXJDYXNlKCkgfHwgXCJcIjtcbiAgICB0aGlzLmFjdGl2ZUNhbWVyYUZpZWxkS2V5ID0gZmllbGRLZXk7XG5cbiAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRklFTERfQ0FNRVJBX0JVVFRPTl9DTElDSywge1xuICAgICAgZmllbGRfa2V5OiBmaWVsZC5rZXksXG4gICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlLFxuICAgICAgY2FtZXJhX3R5cGU6IHRoaXMuYWN0aXZlQ2FtZXJhVHlwZVxuICAgIH0pO1xuXG4gICAgc3dpdGNoICh0aGlzLmFjdGl2ZUNhbWVyYVR5cGUpIHtcbiAgICAgIGNhc2UgXCJDQVBUVVJFXCI6XG4gICAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhQ29uZmlnID0gbWVyZ2VPYmplY3RzRGVlcChbXG4gICAgICAgICAgRklFTERfUFJPUEVSVElFUy5jYXB0dXJlLFxuICAgICAgICAgIGZpZWxkQ2FtZXJhQ29uZmlnXG4gICAgICAgIF0pO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhRGF0YSA9IHt9O1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYUNvbmZpZz8uZmVhdHVyZXM/LndhdGVybWFyaz8uaXNFbmFibGVkICYmXG4gICAgICAgICAgIXRoaXMuYWN0aXZlQ2FtZXJhQ29uZmlnLmZlYXR1cmVzPy53YXRlcm1hcms/LmlzV2F0ZXJtYXJrRnJvbVNlcnZlclxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBjYW1lcmFIZWxwZXIgPSBuZXcgQ2FtZXJhSGVscGVyKGZpZWxkLCB7XG4gICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYURhdGEgPSB7XG4gICAgICAgICAgICB3YXRlcm1hcms6IGF3YWl0IGNhbWVyYUhlbHBlci5nZXRDYW1lcmFXYXRlcm1hcmtEYXRhKClcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIlJFQ09SRFwiOlxuICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYUNvbmZpZyA9IG1lcmdlT2JqZWN0c0RlZXAoW1xuICAgICAgICAgIEZJRUxEX1BST1BFUlRJRVMucmVjb3JkLFxuICAgICAgICAgIGZpZWxkQ2FtZXJhQ29uZmlnXG4gICAgICAgIF0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMucmVzZXRDYW1lcmEoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29uZmlnIGFuZCBvdGhlciBkYXRhIGlzIHNldCBub3csIHNvIHdlIGNhbiBzaG93IHRoZSBjYW1lcmEuXG4gICAgICovXG4gICAgdGhpcy5pc1Nob3dDYW1lcmEgPSB0cnVlO1xuXG4gICAgdGhpcy5sb2FkZXJTZXJ2aWNlLmhpZGUoKTtcbiAgfVxuXG4gIC8qKiBLd2lrSUQgQ2FtZXJhIE1ldGhvZHMgKi9cbiAgLyoqIENhbWVyYVR5cGUgPSBDQVBUVVJFICovXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgc2V0Q2FtZXJhTWVkaWEobWVkaWE6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCB0aGlzLmFjdGl2ZUNhbWVyYUZpZWxkS2V5KTtcblxuICAgIGlmIChcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInByb3BlcnRpZXNcIikgJiZcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLnByb3BlcnRpZXMsIFwidXBsb2FkRmlsZVRvU2VydmVyXCIpICYmXG4gICAgICBmaWVsZC5wcm9wZXJ0aWVzLnVwbG9hZEZpbGVUb1NlcnZlclxuICAgICkge1xuICAgICAgYXdhaXQgdGhpcy51cGxvYWRGaWxlKGZpZWxkLCBtZWRpYSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGFjdGl2ZUNhbWVyYURhdGEgPSB0aGlzLmFjdGl2ZUNhbWVyYURhdGE7XG5cbiAgICAgIHRoaXMucmVzZXRDYW1lcmEoKTtcblxuICAgICAgbGV0IHVwZGF0ZWRNZWRpYTogYW55ID0ge307XG5cbiAgICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuQ0FQVFVSRTpcbiAgICAgICAgICB1cGRhdGVkTWVkaWEgPSB7XG4gICAgICAgICAgICAuLi4oaXNOb3RFbXB0eVZhbHVlKGFjdGl2ZUNhbWVyYURhdGEpID8gYWN0aXZlQ2FtZXJhRGF0YSA6IHt9KSxcbiAgICAgICAgICAgIGltYWdlOiBtZWRpYVxuICAgICAgICAgIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRUZpZWxkVHlwZS5SRUNPUkQ6XG4gICAgICAgICAgdXBkYXRlZE1lZGlhID0ge1xuICAgICAgICAgICAgLi4uKGlzTm90RW1wdHlWYWx1ZShhY3RpdmVDYW1lcmFEYXRhKSA/IGFjdGl2ZUNhbWVyYURhdGEgOiB7fSksXG4gICAgICAgICAgICB2aWRlbzogbWVkaWFcbiAgICAgICAgICB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZvcm1EYXRhW2ZpZWxkLmtleV0gPSBnZXRPYmplY3REZWVwQ29weShbdXBkYXRlZE1lZGlhXSk7XG4gICAgICB0aGlzLmNhbWVyYURhdGFbZmllbGQua2V5XSA9IGdldE9iamVjdERlZXBDb3B5KHVwZGF0ZWRNZWRpYSk7XG4gICAgICB0aGlzLm1lZGlhRmlsZXNbZmllbGQua2V5XSA9IGdldE9iamVjdERlZXBDb3B5KFt1cGRhdGVkTWVkaWFdKTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0ucGF0Y2hWYWx1ZShcbiAgICAgICAgZ2V0T2JqZWN0RGVlcENvcHkoW3VwZGF0ZWRNZWRpYV0pLFxuICAgICAgICB7XG4gICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgICBvbmx5U2VsZjogZmFsc2VcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoXG4gICAgICAgIHtcbiAgICAgICAgICBbZmllbGQua2V5XTogZ2V0T2JqZWN0RGVlcENvcHkoW3VwZGF0ZWRNZWRpYV0pXG4gICAgICAgIH0sXG4gICAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XG4gICAgICApO1xuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtcbiAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgfSk7XG4gICAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtcbiAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuZ2V0VW5zYXZlZERhdGFTdGF0ZS5lbWl0KHRydWUpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGZpZWxkLmlzRm9ybUVsZW1lbnQgJiZcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwidmFsaWRhdGlvblwiKSAmJlxuICAgICAgICBmaWVsZC52YWxpZGF0aW9uLnRyaWdnZXJzLmluY2x1ZGVzKFwiT05fQ0hBTkdFXCIpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgcnVsZUVuZ2luZSA9IG5ldyBSdWxlRW5naW5lKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgQ0FNRVJBX0RBVEE6IHRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICk7XG5cbiAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCBydWxlRW5naW5lLnJ1bihmaWVsZC52YWxpZGF0aW9uKTtcbiAgICAgICAgfSkoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBmaWVsZC5pc0Zvcm1FbGVtZW50ICYmXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcImNvbm5lY3RlZEVsZW1lbnRzXCIpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50cyhcbiAgICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIk9OX0NIQU5HRVwiXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19GSUVMRF9GSUxFX0FERCwge1xuICAgICAgICBmaWVsZF9rZXk6IGZpZWxkLmtleSxcbiAgICAgICAgZmllbGRfdHlwZTogZmllbGQudHlwZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIENhbWVyYSBDb21tb24gTWV0aG9kcyAqL1xuICBAbG9nTWV0aG9kXG4gIGhhbmRsZUdldENhbWVyYU1lZGlhKGU6IGFueSwgYWN0aXZlQ2FtZXJhVHlwZTogXCJDQVBUVVJFXCIgfCBcIlJFQ09SRFwiKSB7XG4gICAgc3dpdGNoIChhY3RpdmVDYW1lcmFUeXBlKSB7XG4gICAgICBjYXNlIFwiQ0FQVFVSRVwiOlxuICAgICAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYUltYWdlID0gXCJcIjtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBQcmlvcml0eSBvZiBJbWFnZSB0byBTZXQgZm9yIENvbmZpZyBCYXNlZFxuICAgICAgICAgICAqIDEuIE1hc2tlZFxuICAgICAgICAgICAqIDIuIENyb3BwZWRcbiAgICAgICAgICAgKiAzLiBPcmlnaW5hbFxuICAgICAgICAgICAqXG4gICAgICAgICAgICogSWYgbm8gbWFza2VkIG9yIGNyb3BwZWQgaW1hZ2UgaXMgYXZhaWxhYmxlIHRoZW4gZGlyZWN0bHkgc2V0IE9yaWdpbmFsIEltYWdlXG4gICAgICAgICAgICovXG4gICAgICAgICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleShcbiAgICAgICAgICAgIHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhRmllbGRLZXlcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgaW1hZ2UgPSBmaWVsZC5wcm9wZXJ0aWVzPy5pc01hc2tlZEltYWdlXG4gICAgICAgICAgICA/IGU/Lm1hc2tlZEltYWdlID8/IGU/Lm9yaWdpbmFsSW1hZ2VcbiAgICAgICAgICAgIDogZmllbGQucHJvcGVydGllcz8uaXNDcm9wcGVkSW1hZ2VcbiAgICAgICAgICAgICAgPyBlPy5jcm9wcGVkSW1hZ2UgPz8gZT8ub3JpZ2luYWxJbWFnZVxuICAgICAgICAgICAgICA6IGU/Lm9yaWdpbmFsSW1hZ2U7XG5cbiAgICAgICAgICBjb25zdCBpc1Nob3dJbWFnZVByZXZpZXcgPVxuICAgICAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmFDb25maWc/LmNhbWVyYUNvbmZpZz8ub3RoZXJzPy5wcmV2aWV3Py5zaG93O1xuXG4gICAgICAgICAgaWYgKGlzU2hvd0ltYWdlUHJldmlldykge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmFJbWFnZSA9IGltYWdlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldENhbWVyYU1lZGlhKGltYWdlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICAgICAgfSwgRk9STV9WSUVXX1RJTUVSUy5XQUlUX0ZPUl9LV0lLSURfQ0FNRVJBX1RPX0xPQUQpOyAvLyBEZWxheSBpcyBhZGRlZCBkdWUgdG8gaXNzdXMgd2l0aCBLd2lrSUQgQ2FtZXJhIG5vdCBiZWluZyBhYmxlIHRvIGhhbmRsZSB0byBmYXN0IHByb2Nlc3NpbmcuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIlJFQ09SRFwiOlxuICAgICAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYVZpZGVvID0gXCJcIjtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBQcmlvcml0eSBvZiBJbWFnZSB0byBTZXQgZm9yIENvbmZpZyBCYXNlZFxuICAgICAgICAgICAqIDEuIE9yaWdpbmFsXG4gICAgICAgICAgICovXG4gICAgICAgICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleShcbiAgICAgICAgICAgIHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhRmllbGRLZXlcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgdmlkZW8gPSBlPy5vcmlnaW5hbFZpZGVvO1xuXG4gICAgICAgICAgY29uc3QgaXNTaG93VmlkZW9QcmV2aWV3ID1cbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhQ29uZmlnPy5vdGhlcnM/LnByZXZpZXc/LnNob3c7XG5cbiAgICAgICAgICBpZiAoaXNTaG93VmlkZW9QcmV2aWV3KSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYVZpZGVvID0gdmlkZW87XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FtZXJhTWVkaWEodmlkZW8pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICAgICAgICB9LCBGT1JNX1ZJRVdfVElNRVJTLldBSVRfRk9SX0tXSUtJRF9DQU1FUkFfVE9fTE9BRCk7IC8vIERlbGF5IGlzIGFkZGVkIGR1ZSB0byBpc3N1cyB3aXRoIEt3aWtJRCBDYW1lcmEgbm90IGJlaW5nIGFibGUgdG8gaGFuZGxlIHRvIGZhc3QgcHJvY2Vzc2luZy5cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGhhbmRsZU9uQ2xpY2tTYXZlQ2FtZXJhTWVkaWEoZTogYW55LCBhY3RpdmVDYW1lcmFUeXBlOiBcIkNBUFRVUkVcIiB8IFwiUkVDT1JEXCIpIHtcbiAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCB0aGlzLmFjdGl2ZUNhbWVyYUZpZWxkS2V5KTtcblxuICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19DQU1FUkFfU0FWRV9CVVRUT05fQ0xJQ0ssIHtcbiAgICAgIGZpZWxkX2tleTogZmllbGQua2V5LFxuICAgICAgZmllbGRfdHlwZTogZmllbGQudHlwZSxcbiAgICAgIGNhbWVyYV90eXBlOiBhY3RpdmVDYW1lcmFUeXBlXG4gICAgfSk7XG5cbiAgICBzd2l0Y2ggKGFjdGl2ZUNhbWVyYVR5cGUpIHtcbiAgICAgIGNhc2UgXCJDQVBUVVJFXCI6XG4gICAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhSW1hZ2UgPSBcIlwiO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIFByaW9yaXR5IG9mIEltYWdlIHRvIFNldCBmb3IgQ29uZmlnIEJhc2VkXG4gICAgICAgICAgICogMS4gTWFza2VkXG4gICAgICAgICAgICogMi4gQ3JvcHBlZFxuICAgICAgICAgICAqIDMuIE9yaWdpbmFsXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBJZiBubyBtYXNrZWQgb3IgY3JvcHBlZCBpbWFnZSBpcyBhdmFpbGFibGUgdGhlbiBkaXJlY3RseSBzZXQgT3JpZ2luYWwgSW1hZ2VcbiAgICAgICAgICAgKi9cbiAgICAgICAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KFxuICAgICAgICAgICAgdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmFGaWVsZEtleVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBpbWFnZSA9IGZpZWxkLnByb3BlcnRpZXM/LmlzTWFza2VkSW1hZ2VcbiAgICAgICAgICAgID8gZT8ubWFza2VkSW1hZ2UgPz8gZT8ub3JpZ2luYWxJbWFnZVxuICAgICAgICAgICAgOiBmaWVsZC5wcm9wZXJ0aWVzPy5pc0Nyb3BwZWRJbWFnZVxuICAgICAgICAgICAgICA/IGU/LmNyb3BwZWRJbWFnZSA/PyBlPy5vcmlnaW5hbEltYWdlXG4gICAgICAgICAgICAgIDogZT8ub3JpZ2luYWxJbWFnZTtcblxuICAgICAgICAgIHRoaXMuc2V0Q2FtZXJhTWVkaWEoaW1hZ2UpO1xuXG4gICAgICAgICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gICAgICAgIH0sIEZPUk1fVklFV19USU1FUlMuV0FJVF9GT1JfS1dJS0lEX0NBTUVSQV9UT19MT0FEKTsgLy8gRGVsYXkgaXMgYWRkZWQgZHVlIHRvIGlzc3VzIHdpdGggS3dpa0lEIENhbWVyYSBub3QgYmVpbmcgYWJsZSB0byBoYW5kbGUgdG8gZmFzdCBwcm9jZXNzaW5nLlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJSRUNPUkRcIjpcbiAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmFWaWRlbyA9IFwiXCI7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogUHJpb3JpdHkgb2YgSW1hZ2UgdG8gU2V0IGZvciBDb25maWcgQmFzZWRcbiAgICAgICAgICAgKiAxLiBPcmlnaW5hbFxuICAgICAgICAgICAqL1xuICAgICAgICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkoXG4gICAgICAgICAgICB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYUZpZWxkS2V5XG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IHZpZGVvID0gZT8ub3JpZ2luYWxWaWRlbztcblxuICAgICAgICAgIHRoaXMuc2V0Q2FtZXJhTWVkaWEodmlkZW8pO1xuXG4gICAgICAgICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gICAgICAgIH0sIEZPUk1fVklFV19USU1FUlMuV0FJVF9GT1JfS1dJS0lEX0NBTUVSQV9UT19MT0FEKTsgLy8gRGVsYXkgaXMgYWRkZWQgZHVlIHRvIGlzc3VzIHdpdGggS3dpa0lEIENhbWVyYSBub3QgYmVpbmcgYWJsZSB0byBoYW5kbGUgdG8gZmFzdCBwcm9jZXNzaW5nLlxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja0NhbWVyYUJhY2soZTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIHRoaXMuYWN0aXZlQ2FtZXJhRmllbGRLZXkpO1xuXG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0NBTUVSQV9CQUNLX0JVVFRPTl9DTElDSywge1xuICAgICAgZmllbGRfa2V5OiBmaWVsZC5rZXksXG4gICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlc2V0Q2FtZXJhKCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGhhbmRsZU9uQ2xpY2tDYW1lcmFDbG9zZShlOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgdGhpcy5hY3RpdmVDYW1lcmFGaWVsZEtleSk7XG5cbiAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fQ0FNRVJBX0NMT1NFX0JVVFRPTl9DTElDSywge1xuICAgICAgZmllbGRfa2V5OiBmaWVsZC5rZXksXG4gICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlc2V0Q2FtZXJhKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byB1cGRhdGUgdGhlIGZpbGVzIGFycmF5IHdpdGggdGhlIG5ldyBmaWxlIGFuZCBpdCdzIHN0YXRlIGFuZCByZXNwb25zZSBmcm9tIHRoZSBhcGkgb2YgdXBsb2FkaW5nIHRoZSBmaWxlLlxuICAgKi9cbiAgQGxvZ01ldGhvZFxuICB1cGRhdGVGaWxlcyhmaWxlOiBhbnksIHN0YXRlOiBzdHJpbmcsIGtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgZmlsZVdpdGhTdGF0ZSA9IG1lcmdlT2JqZWN0cyhmaWxlIGFzIGFueSwgeyBzdGF0ZSB9KTtcblxuICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBrZXkpO1xuXG4gICAgaWYgKGZpZWxkLnByb3BlcnRpZXM/Lm11bHRpcGxlKSB7XG4gICAgICAvLyBJZiBmaWVsZC5wcm9wZXJ0aWVzPy5tdWx0aXBsZSBpcyB0cnVlLCBpdCBtZWFucyBtdWx0aXBsZSBmaWxlcyBhcmUgYWxsb3dlZCBmb3IgdGhpcyBmaWVsZC5cbiAgICAgIC8vIFVwZGF0ZSB0aGUgZXhpc3RpbmcgZmlsZXMgYXJyYXkgZm9yIHRoZSBzcGVjaWZpYyBrZXkgd2l0aCB0aGUgbmV3IGZpbGUuXG4gICAgICBjb25zdCB1cGRhdGVkRmlsZXMgPSBbXG4gICAgICAgIC4uLnRoaXMuZmlsZXNba2V5XS5maWx0ZXIoXG4gICAgICAgICAgKGYpID0+IGYubmFtZSAhPT0gZmlsZVdpdGhTdGF0ZS5uYW1lIHx8IGYuc2l6ZSAhPT0gZmlsZVdpdGhTdGF0ZS5zaXplXG4gICAgICAgICksXG4gICAgICAgIGZpbGVXaXRoU3RhdGVcbiAgICAgIF07XG5cbiAgICAgIC8vIEFwcGx5IHRoZSBmaWx0ZXJEdXBsaWNhdGVzRmlsZXMgZnVuY3Rpb24gdG8gZW5zdXJlIHVuaXF1ZW5lc3MgaW4gdGhlIHVwZGF0ZWRGaWxlcyBhcnJheS5cbiAgICAgIHRoaXMuZmlsZXNba2V5XSA9IGZpbHRlckR1cGxpY2F0ZXNGaWxlcyh1cGRhdGVkRmlsZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiBmaWVsZC5wcm9wZXJ0aWVzPy5tdWx0aXBsZSBpcyBmYWxzZSwgb25seSBvbmUgZmlsZSBpcyBhbGxvd2VkIGZvciB0aGlzIGZpZWxkLlxuICAgICAgLy8gUmVwbGFjZSB0aGUgZXhpc3RpbmcgZmlsZXMgYXJyYXkgZm9yIHRoZSBzcGVjaWZpYyBrZXkgd2l0aCBhbiBhcnJheSBjb250YWluaW5nIHRoZSBuZXcgZmlsZS5cbiAgICAgIHRoaXMuZmlsZXNba2V5XSA9IFtmaWxlV2l0aFN0YXRlXTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGhlIGZvcm1EYXRhIGFuZCBmb3JtR3JvdXAgY29udHJvbHMgZm9yIHRoZSBzcGVjaWZpYyBrZXkgd2l0aCB0aGUgbm9ybWFsRmlsZXMgYXJyYXkuXG4gICAgY29uc3Qgbm9ybWFsRmlsZXMgPSB0aGlzLmZpbGVzW2tleV0uZmlsdGVyKChmaWxlKSA9PiB7XG4gICAgICByZXR1cm4gZmlsZS5zdGF0ZSA9PT0gXCJOT1JNQUxcIjtcbiAgICB9KTtcblxuICAgIHRoaXMuZm9ybURhdGFba2V5XSA9IG5vcm1hbEZpbGVzO1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2tleV0ucGF0Y2hWYWx1ZShub3JtYWxGaWxlcywge1xuICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgIG9ubHlTZWxmOiBmYWxzZVxuICAgIH0pO1xuICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoXG4gICAgICB7XG4gICAgICAgIFtrZXldOiBub3JtYWxGaWxlc1xuICAgICAgfSxcbiAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XG4gICAgKTtcblxuICAgIHRoaXMuZ2V0VW5zYXZlZERhdGFTdGF0ZS5lbWl0KHRydWUpO1xuXG4gICAgaWYgKFxuICAgICAgZmllbGQuaXNGb3JtRWxlbWVudCAmJlxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwidmFsaWRhdGlvblwiKSAmJlxuICAgICAgZmllbGQudmFsaWRhdGlvbi50cmlnZ2Vycy5pbmNsdWRlcyhcIk9OX0NIQU5HRVwiKVxuICAgICkge1xuICAgICAgY29uc3QgcnVsZUVuZ2luZSA9IG5ldyBSdWxlRW5naW5lKFxuICAgICAgICB7XG4gICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICk7XG5cbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHJ1bGVFbmdpbmUucnVuKGZpZWxkLnZhbGlkYXRpb24pO1xuICAgICAgfSkoKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBmaWVsZC5pc0Zvcm1FbGVtZW50ICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJjb25uZWN0ZWRFbGVtZW50c1wiKVxuICAgICkge1xuICAgICAgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50cyhcbiAgICAgICAge1xuICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiT05fQ0hBTkdFXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBhcGkgdXBsb2FkIG1vY2tpbmcgbWV0aG9kLiBTZXQncyB0byBsb2FkaW5nIGF0IGZpcnN0IGF0IHBvaW50IHdoZW4gQVBJIGlzIGNhbGxlZCBhbmQgdGhlbiBjaGFuZ2VzIHRoZSBzdGF0dXMgdG8gcmFuZG9tIHN0YXR1cyBhZnRlciAyIHNlY29uZHMgb2YgZGVsYXkgc2hvd2luZyBhIG1vY2tlZCByZXNwb25zZSBmcm9tIEFQSS5cbiAgICovXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgdXBsb2FkRmlsZShmaWVsZDogYW55LCBmaWxlOiBhbnkpIHtcbiAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgIGNhc2UgRUZpZWxkVHlwZS5GSUxFOlxuICAgICAgICB0aGlzLnVwZGF0ZUZpbGVzKGZpbGUsIFwiTE9BRElOR1wiLCBmaWVsZC5rZXkpO1xuXG4gICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BUElfUkVRVUVTVF9VUExPQURfRklMRSwge1xuICAgICAgICAgIGZpZWxkX2tleTogZmllbGQua2V5LFxuICAgICAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGUsXG4gICAgICAgICAgcmVxdWVzdDogZ2V0T2JqZWN0RGVlcENvcHkoe1xuICAgICAgICAgICAgbmFtZTogZmlsZS5uYW1lLFxuICAgICAgICAgICAgdHlwZTogZmlsZS50eXBlLFxuICAgICAgICAgICAgc2l6ZTogZmlsZS5zaXplLFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiBmaWxlLmxhc3RNb2RpZmllZCxcbiAgICAgICAgICAgIHdlYmtpdFJlbGF0aXZlUGF0aDogZmlsZS53ZWJraXRSZWxhdGl2ZVBhdGhcbiAgICAgICAgICB9KVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBBY3R1YWwgQVBJIENhbGxcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLm9uQ2xpY2tBcGlDYWxsLmVtaXQoe1xuICAgICAgICAgICAga2V5OiBmaWVsZC5rZXksXG4gICAgICAgICAgICB0eXBlOiBmaWVsZC50eXBlLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBmaWxlLFxuICAgICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIG5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgICAgICAgICB0eXBlOiBmaWxlLnR5cGUsXG4gICAgICAgICAgICAgICAgc2l6ZTogZmlsZS5zaXplLFxuICAgICAgICAgICAgICAgIGxhc3RNb2RpZmllZDogZmlsZS5sYXN0TW9kaWZpZWQsXG4gICAgICAgICAgICAgICAgd2Via2l0UmVsYXRpdmVQYXRoOiBmaWxlLndlYmtpdFJlbGF0aXZlUGF0aFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRoaXMudXBkYXRlRmlsZXMoZmlsZSwgXCJFUlJPUlwiLCBmaWVsZC5rZXkpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRmllbGRUeXBlLkNBUFRVUkU6IHtcbiAgICAgICAgLy8gQWN0dWFsIEFQSSBDYWxsXG5cbiAgICAgICAgbGV0IG9jclBheWxvYWQ6IGFueSA9IHt9O1xuICAgICAgICBpZiAoaXNOb3RFbXB0eVZhbHVlKGZpZWxkPy5wcm9wZXJ0aWVzPy5mZWF0dXJlcz8ub2NyKSkge1xuICAgICAgICAgIG9jclBheWxvYWQgPSBmaWVsZC5wcm9wZXJ0aWVzLmZlYXR1cmVzLm9jcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZhY2VtYXRjaFBheWxvYWQ6IGFueSA9IHt9O1xuICAgICAgICBpZiAoaXNOb3RFbXB0eVZhbHVlKGZpZWxkPy5wcm9wZXJ0aWVzPy5mZWF0dXJlcz8uZmFjZW1hdGNoKSkge1xuICAgICAgICAgIGZhY2VtYXRjaFBheWxvYWQuaXNFbmFibGVkID1cbiAgICAgICAgICAgIGZpZWxkLnByb3BlcnRpZXMuZmVhdHVyZXMuZmFjZW1hdGNoLmlzRW5hYmxlZDtcblxuICAgICAgICAgIGZhY2VtYXRjaFBheWxvYWQuaXNGYWNlbWF0Y2hGcm9tU2VydmVyID1cbiAgICAgICAgICAgIGZpZWxkLnByb3BlcnRpZXMuZmVhdHVyZXMuZmFjZW1hdGNoLmlzRmFjZW1hdGNoRnJvbVNlcnZlcjtcblxuICAgICAgICAgIGZhY2VtYXRjaFBheWxvYWQuaW1hZ2VzID0gW107XG4gICAgICAgICAgY29uc3QgZmFjZW1hdGNoU291cmNlcyA9IGZpZWxkLnByb3BlcnRpZXMuZmVhdHVyZXMuZmFjZW1hdGNoLnNvdXJjZXM7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGZhY2VtYXRjaFNvdXJjZUNvbmZpZyBvZiBmYWNlbWF0Y2hTb3VyY2VzKSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBuZXcgU291cmNlKHtcbiAgICAgICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3Qgc291cmNlVmFsdWUgPSBhd2FpdCBzb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKFxuICAgICAgICAgICAgICBmYWNlbWF0Y2hTb3VyY2VDb25maWdcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IGZhY2VtYXRjaFNvdXJjZSA9IHtcbiAgICAgICAgICAgICAga2V5OiBmYWNlbWF0Y2hTb3VyY2VDb25maWcuaWQsXG4gICAgICAgICAgICAgIHZhbHVlOiBzb3VyY2VWYWx1ZVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZmFjZW1hdGNoUGF5bG9hZC5pbWFnZXMucHVzaChmYWNlbWF0Y2hTb3VyY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHdhdGVybWFya1BheWxvYWQ6IGFueSA9IHt9O1xuICAgICAgICBpZiAoaXNOb3RFbXB0eVZhbHVlKGZpZWxkPy5wcm9wZXJ0aWVzPy5mZWF0dXJlcz8ud2F0ZXJtYXJrKSkge1xuICAgICAgICAgIHdhdGVybWFya1BheWxvYWQuaXNFbmFibGVkID1cbiAgICAgICAgICAgIGZpZWxkLnByb3BlcnRpZXMuZmVhdHVyZXMud2F0ZXJtYXJrLmlzRW5hYmxlZDtcblxuICAgICAgICAgIHdhdGVybWFya1BheWxvYWQuaXNXYXRlcm1hcmtGcm9tU2VydmVyID1cbiAgICAgICAgICAgIGZpZWxkLnByb3BlcnRpZXMuZmVhdHVyZXMud2F0ZXJtYXJrLmlzV2F0ZXJtYXJrRnJvbVNlcnZlcjtcblxuICAgICAgICAgIHdhdGVybWFya1BheWxvYWQuZGF0YSA9IFtdO1xuICAgICAgICAgIGNvbnN0IHdhdGVybWFya1NvdXJjZXMgPSBmaWVsZC5wcm9wZXJ0aWVzLmZlYXR1cmVzLndhdGVybWFyay5zb3VyY2VzO1xuXG4gICAgICAgICAgd2F0ZXJtYXJrUGF5bG9hZC5jb25maWcgPSBmaWVsZC5wcm9wZXJ0aWVzLmZlYXR1cmVzLndhdGVybWFyay5zb3VyY2VzO1xuXG4gICAgICAgICAgZm9yIChjb25zdCB3YXRlcm1hcmtTb3VyY2VDb25maWcgb2Ygd2F0ZXJtYXJrU291cmNlcykge1xuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gbmV3IFNvdXJjZSh7XG4gICAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgICAgQ0FNRVJBX0RBVEE6IHRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gYXdhaXQgc291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShcbiAgICAgICAgICAgICAgd2F0ZXJtYXJrU291cmNlQ29uZmlnXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCB3YXRlcm1hcmtTb3VyY2UgPSB7XG4gICAgICAgICAgICAgIGtleTogd2F0ZXJtYXJrU291cmNlQ29uZmlnLmlkLFxuICAgICAgICAgICAgICB2YWx1ZTogc291cmNlVmFsdWVcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHdhdGVybWFya1BheWxvYWQuZGF0YS5wdXNoKHdhdGVybWFya1NvdXJjZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW1hZ2VVcGxvYWRQYXlsb2FkID0ge1xuICAgICAgICAgIGltYWdlOiBmaWxlLFxuICAgICAgICAgIC4uLihvY3JQYXlsb2FkPy5pc0VuYWJsZWQgJiYge1xuICAgICAgICAgICAgb2NyOiBvY3JQYXlsb2FkXG4gICAgICAgICAgfSksXG4gICAgICAgICAgLi4uKGZhY2VtYXRjaFBheWxvYWQ/LmlzRW5hYmxlZCAmJiB7XG4gICAgICAgICAgICBmYWNlbWF0Y2g6IGZhY2VtYXRjaFBheWxvYWRcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAuLi4od2F0ZXJtYXJrUGF5bG9hZD8uaXNFbmFibGVkICYmIHtcbiAgICAgICAgICAgIHdhdGVybWFyazogd2F0ZXJtYXJrUGF5bG9hZFxuICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0FQSV9SRVFVRVNUX1VQTE9BRF9JTUFHRSwge1xuICAgICAgICAgIGZpZWxkX2tleTogZmllbGQua2V5LFxuICAgICAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGUsXG4gICAgICAgICAgcmVxdWVzdDogaW1hZ2VVcGxvYWRQYXlsb2FkXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5vbkNsaWNrQXBpQ2FsbC5lbWl0KHtcbiAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgICAgIHBheWxvYWQ6IGltYWdlVXBsb2FkUGF5bG9hZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkZhaWxlZCB0byB1cGxvYWQgaW1hZ2UgdG8gc2VydmVyIVwiKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgRUZpZWxkVHlwZS5SRUNPUkQ6XG4gICAgICAgIC8vIEFjdHVhbCBBUEkgQ2FsbFxuXG4gICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BUElfUkVRVUVTVF9VUExPQURfVklERU8sIHtcbiAgICAgICAgICBmaWVsZF9rZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlLFxuICAgICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICAgIHZpZGVvOiBmaWxlXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMub25DbGlja0FwaUNhbGwuZW1pdCh7XG4gICAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICAgIHR5cGU6IGZpZWxkLnR5cGUsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHZpZGVvOiBmaWxlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiRmFpbGVkIHRvIHVwbG9hZCB2aWRlbyB0byBzZXJ2ZXIhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkNsaWNrRm9ybUZpZWxkQnV0dG9uKGZpZWxkOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG5cbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHRoaXMuZm9ybUZpZWxkcykge1xuICAgICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGZpZWxkLmhpZGRlbikge1xuICAgICAgICAgIGRlbGV0ZSBmb3JtRGF0YVtmaWVsZC5rZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvcm1EYXRhW2ZpZWxkLmtleV0gPSBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0KFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICBmb3JtRGF0YVtmaWVsZC5rZXldXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGV4dGVuZGVkRm9ybURhdGEgPSB0aGlzLmZvcm1GaWVsZHMucmVkdWNlKChyZXN1bHQsIGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQgJiYgIWZpZWxkLmhpZGRlbikge1xuICAgICAgICBjb25zdCBmaWVsZERhdGEgPSB7XG4gICAgICAgICAgW2ZpZWxkLmtleV06IHtcbiAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgbGFiZWw6IGZpZWxkLmxhYmVsLFxuICAgICAgICAgICAgdmFsdWU6IGlzRW1wdHlWYWx1ZShmb3JtRGF0YVtmaWVsZC5rZXldKSA/IFwiXCIgOiBmb3JtRGF0YVtmaWVsZC5rZXldLFxuICAgICAgICAgICAgdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXN1bHRbZmllbGQua2V5XSA9IGZpZWxkRGF0YVtmaWVsZC5rZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSk7XG5cbiAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRklFTERfQlVUVE9OX0NMSUNLLCB7XG4gICAgICBmaWVsZF9rZXk6IGZpZWxkLmtleSxcbiAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGUsXG4gICAgICBmaWVsZF9sYWJlbDogZmllbGQubGFiZWxcbiAgICB9KTtcblxuICAgIHRoaXMub25DbGlja0Zvcm1GaWVsZEJ1dHRvbi5lbWl0KHtcbiAgICAgIGNvbmZpZzogZmllbGQsXG4gICAgICBkYXRhOiBtZXJnZU9iamVjdHModGhpcy5mb3JtRGF0YSwgdGhpcy5wb3B1cEZvcm1EYXRhLCB0aGlzLnRhc2tEYXRhKSxcbiAgICAgIGV4dGVuZGVkRGF0YTogZXh0ZW5kZWRGb3JtRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkxvY2F0aW9uUGVybWlzc2lvbihlOiBhbnkpIHtcbiAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZS5rZXkpO1xuICAgIGNvbnN0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgLy8gc2V0IGJ1dHRvbiBzdGF0dXMgdG8gZGVmYXVsdFxuICAgIGZpZWxkLmFwaS5zdGF0dXMudmFsdWUgPSBFQXBpU3RhdHVzVHlwZS5MT0FESU5HO1xuICAgIGZpZWxkLnNob3dMb2FkZXIgPSB0cnVlO1xuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xuICAgIHRoaXMuc2hvd0FwaUxvYWRlcigpO1xuICAgIHRoaXMuZmllbGRTaG93QXBpTG9hZGVyKGZpZWxkLmtleSk7XG5cbiAgICBpZiAoIWUucGVybWlzc2lvbikge1xuICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0xJVkVfTE9DQVRJT05fUEVSTUlTU0lPTl9FUlJPUiwge1xuICAgICAgICBmaWVsZF9rZXk6IGZpZWxkLmtleSxcbiAgICAgICAgZmllbGRfdHlwZTogZmllbGQudHlwZVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMudG9nZ2xlUGVybWlzc2lvbkVycm9yTm90aWZpY2F0aW9uKHRydWUpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudG9nZ2xlUGVybWlzc2lvbkVycm9yTm90aWZpY2F0aW9uKGZhbHNlKTtcbiAgICAgIH0sIEZPUk1fVklFV19USU1FUlMuTE9DQVRJT05fUEVSTUlTU0lPTl9FUlJPUl9UT0dHTEUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fTElWRV9MT0NBVElPTl9QRVJNSVNTSU9OX1NVQ0NFU1MsIHtcbiAgICAgICAgZmllbGRfa2V5OiBmaWVsZC5rZXksXG4gICAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gc2V0IGJ1dHRvbiBzdGF0dXMgdG8gZGVmYXVsdFxuICAgICAgZmllbGQuYXBpLnN0YXR1cy52YWx1ZSA9IEVBcGlTdGF0dXNUeXBlLkRFRkFVTFQ7XG4gICAgICBmaWVsZC5zaG93TG9hZGVyID0gZmFsc2U7XG4gICAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0gPSBmaWVsZDtcbiAgICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICAgICAgdGhpcy5maWVsZEhpZGVBcGlMb2FkZXIoZmllbGQua2V5KTtcbiAgICB9LCBGT1JNX1ZJRVdfVElNRVJTLkxPQ0FUSU9OX1BFUk1JU1NJT05fUkVTRVRfQlVUVE9OX1NUQVRVUyk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZU9uQ2xpY2tMaXZlTG9jYXRpb24oZTogYW55KSB7XG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGUua2V5KTtcblxuICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19MSVZFX0xPQ0FUSU9OX0JVVFRPTl9DTElDSywge1xuICAgICAgZmllbGRfa2V5OiBmaWVsZC5rZXksXG4gICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlXG4gICAgfSk7XG5cbiAgICAvLyBzZXQgYnV0dG9uIHN0YXR1cyB0byBsb2FkaW5nXG4gICAgZmllbGQuYXBpLnN0YXR1cy52YWx1ZSA9IEVBcGlTdGF0dXNUeXBlLkxPQURJTkc7XG4gICAgZmllbGQuc2hvd0xvYWRlciA9IHRydWU7XG5cbiAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoXG4gICAgICB7XG4gICAgICAgIFtlLmtleV06IGUudmFsdWVcbiAgICAgIH0sXG4gICAgICB7IGVtaXRFdmVudDogZmFsc2UgfVxuICAgICk7XG5cbiAgICB0aGlzLmZvcm1EYXRhW2Uua2V5XSA9IGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvU3RhbmRhcmRGb3JtYXQoXG4gICAgICBmaWVsZCxcbiAgICAgIGUudmFsdWVcbiAgICApO1xuXG4gICAgdGhpcy5nZXRVbnNhdmVkRGF0YVN0YXRlLmVtaXQodHJ1ZSk7XG5cbiAgICBpZiAoXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJwcm9wZXJ0aWVzXCIpICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZC5wcm9wZXJ0aWVzLCBcImlzR2V0TG9jYXRpb25Gcm9tTGF0TG9uZ1wiKSAmJlxuICAgICAgZmllbGQucHJvcGVydGllcy5pc0dldExvY2F0aW9uRnJvbUxhdExvbmdcbiAgICApIHtcbiAgICAgIHRoaXMub25DbGlja0FwaUNhbGwuZW1pdCh7XG4gICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICB0eXBlOiBmaWVsZC50eXBlLFxuICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgLi4uZS5saXZlTG9jYXRpb25cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgIH0sIEZPUk1fVklFV19USU1FUlMuVElNRVJfMzAwKTsgLy8gMTAwMCBtcyA9IDEgc2VjXG4gICAgICB9KTtcblxuICAgICAgLy8gc2V0IGJ1dHRvbiBzdGF0dXMgdG8gc3VjY2Vzc1xuICAgICAgZmllbGQuYXBpLnN0YXR1cy52YWx1ZSA9IEVBcGlTdGF0dXNUeXBlLlNVQ0NFU1M7XG4gICAgICBmaWVsZC5zaG93TG9hZGVyID0gZmFsc2U7XG5cbiAgICAgIGlmIChcbiAgICAgICAgZmllbGQuaXNGb3JtRWxlbWVudCAmJlxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJ2YWxpZGF0aW9uXCIpICYmXG4gICAgICAgIGZpZWxkLnZhbGlkYXRpb24udHJpZ2dlcnMuaW5jbHVkZXMoXCJPTl9DSEFOR0VcIilcbiAgICAgICkge1xuICAgICAgICBjb25zdCBydWxlRW5naW5lID0gbmV3IFJ1bGVFbmdpbmUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgKTtcblxuICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IHJ1bGVFbmdpbmUucnVuKGZpZWxkLnZhbGlkYXRpb24pO1xuICAgICAgICB9KSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGZpZWxkLmlzRm9ybUVsZW1lbnQgJiZcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwiY29ubmVjdGVkRWxlbWVudHNcIilcbiAgICAgICkge1xuICAgICAgICB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRzKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiT05fQ0hBTkdFXCJcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gRE9NIEV2ZW50IEhhbmRsZXJzXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlR2V0S2V5VmFsdWUoZTogYW55KSB7XG4gICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShcbiAgICAgIHtcbiAgICAgICAgW2Uua2V5XTogZS52YWx1ZVxuICAgICAgfSxcbiAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XG4gICAgKTtcblxuICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBlLmtleSk7XG4gICAgdGhpcy5mb3JtRGF0YVtlLmtleV0gPSBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0KFxuICAgICAgZmllbGQsXG4gICAgICBlLnZhbHVlXG4gICAgKTtcblxuICAgIHRoaXMuZ2V0VW5zYXZlZERhdGFTdGF0ZS5lbWl0KHRydWUpO1xuXG4gICAgaWYgKFxuICAgICAgZmllbGQuaXNGb3JtRWxlbWVudCAmJlxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwidmFsaWRhdGlvblwiKSAmJlxuICAgICAgZmllbGQudmFsaWRhdGlvbi50cmlnZ2Vycy5pbmNsdWRlcyhcIk9OX0NIQU5HRVwiKVxuICAgICkge1xuICAgICAgY29uc3QgcnVsZUVuZ2luZSA9IG5ldyBSdWxlRW5naW5lKFxuICAgICAgICB7XG4gICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICk7XG5cbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHJ1bGVFbmdpbmUucnVuKGZpZWxkLnZhbGlkYXRpb24pO1xuICAgICAgfSkoKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBmaWVsZC5pc0Zvcm1FbGVtZW50ICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJjb25uZWN0ZWRFbGVtZW50c1wiKVxuICAgICkge1xuICAgICAgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50cyhcbiAgICAgICAge1xuICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiT05fQ0hBTkdFXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVPbkNsaWNrUmVzZXRGb3JtRmllbGRzKGU6IGFueSwgZmllbGQ6IFRGaWVsZFRpdGxlKSB7XG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0ZJRUxEX1JFU0VUX0JVVFRPTl9DTElDSywge1xuICAgICAgZmllbGRfa2V5OiBmaWVsZC5rZXlcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc2V0Rm9ybUZpZWxkcyA9IGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChjaGVja09iamVjdFBhdGhFeGlzdHMoZmllbGQsIFwicmVzZXQuZmllbGRzXCIpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZiBvZiBmaWVsZC5yZXNldC5maWVsZHMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiBmLmFjdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc2V0RmllbGQgPSBnZXRGb3JtRmllbGRCeUtleShcbiAgICAgICAgICAgICAgdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgICBhY3Rpb24ucHJvcHMuZmllbGRLZXlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb25zID0gbmV3IEFjdGlvbihcbiAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogcmVzZXRGaWVsZCxcbiAgICAgICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhd2FpdCBhY3Rpb25zLmV4ZWN1dGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjaGVja09iamVjdFBhdGhFeGlzdHMoZmllbGQsIFwicmVzZXQuZmllbGRHcm91cHNcIikpIHtcbiAgICAgICAgZm9yIChjb25zdCBmZyBvZiBmaWVsZC5yZXNldC5maWVsZEdyb3Vwcykge1xuICAgICAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGZnLmFjdGlvbnMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGRLZXkgb2YgdGhpcy5maWVsZEdyb3Vwc1tmZy5ncm91cEtleV0pIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzZXRGaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuICAgICAgICAgICAgICBjb25zdCBhY3Rpb25zID0gbmV3IEFjdGlvbihcbiAgICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgRklFTERfQ09ORklHOiByZXNldEZpZWxkLFxuICAgICAgICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICAgICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGlzLnRha2VBY3Rpb25PbkZpZWxkR3JvdXAuYmluZCh0aGlzKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBhd2FpdCBhY3Rpb25zLmV4ZWN1dGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgQllQQVNTX1JFU0VUX0NPTkZJUk0gPSBmaWVsZD8ucHJvcGVydGllcz8uYnlwYXNzUmVzZXRDb25maXJtYXRpb247XG5cbiAgICBpZiAoIUJZUEFTU19SRVNFVF9DT05GSVJNKSB7XG4gICAgICBjb25zdCBDT05GSVJNX1JFU0VUID0gd2luZG93LmNvbmZpcm0oXG4gICAgICAgIFwiVGhpcyBhY3Rpb24gd2lsbCByZXNldCBhbGwgdGhlIGZpZWxkcy4gRG8geW91IHN0aWxsIHdhbnQgdG8gY29udGludWU/XCJcbiAgICAgICk7XG5cbiAgICAgIGlmIChDT05GSVJNX1JFU0VUKSB7XG4gICAgICAgIHJlc2V0Rm9ybUZpZWxkcygpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXNldEZvcm1GaWVsZHMoKTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZUZpZWxkQXBpQ2FsbChmaWVsZDogVEZpZWxkQXBpQ2FsbCwgYXBpOiBhbnkpIHtcbiAgICBhcGkgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBcGlDYWxsKGFwaSwge1xuICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgIEFQSV9DT05GSUc6IGFwaSxcbiAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuaXNWYWxpZFJlcXVlc3RIZWFkZXJzQW5kQm9keShhcGkpKSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQuYXBpLCBcInJlcXVlc3RcIikpIHtcbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcbiAgICAgICAgICAuLi50aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIFtmaWVsZC5rZXldOiBhcGkucmVzcG9uc2UudmFsdWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFtmaWVsZC5rZXldOiBhcGkucmVzcG9uc2UudmFsdWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFwaXMgPSBuZXcgQXBpcyhcbiAgICAgICAge1xuICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgQVBJX0NPTkZJRzogYXBpLFxuICAgICAgICAgIEFQSV9SRVNQT05TRTogYXBpLnJlc3BvbnNlLFxuICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICB9LFxuICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgKTtcblxuICAgICAgYXBpID0gYXdhaXQgYXBpcy52YWxpZGF0ZVJlc3BvbnNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBmaWVsZC5hcGkuc3RhdHVzLnZhbHVlID0gRUFwaVN0YXR1c1R5cGUuRkFJTEVEO1xuICAgICAgICAoZmllbGQgYXMgYW55KS5zaG93TG9hZGVyID0gZmFsc2U7XG4gICAgICB9LCBGT1JNX1ZJRVdfVElNRVJTLlRJTUVSXzUwMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgZmllbGQsIGFwaSB9O1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVBcGlDYWxsKGFwaTogYW55KSB7XG4gICAgYXBpID0gYXdhaXQgdGhpcy5leGVjdXRlQXBpQ2FsbChhcGksIHtcbiAgICAgIEZPUk1fQ09ORklHOiB0aGlzLmZvcm1Db25maWcsXG4gICAgICBBUElfQ09ORklHOiBhcGksXG4gICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgQ0FNRVJBX0RBVEE6IHRoaXMuY2FtZXJhRGF0YSxcbiAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICB9KTtcblxuICAgIGNvbnN0IGFwaXMgPSBuZXcgQXBpcyhcbiAgICAgIHtcbiAgICAgICAgRk9STV9DT05GSUc6IHRoaXMuZm9ybUNvbmZpZyxcbiAgICAgICAgQVBJX0NPTkZJRzogYXBpLFxuICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgIH0sXG4gICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICk7XG5cbiAgICBpZiAodGhpcy5pc1ZhbGlkUmVxdWVzdEhlYWRlcnNBbmRCb2R5KGFwaSkpIHtcbiAgICAgIGFwaSA9IGF3YWl0IGFwaXMudmFsaWRhdGVSZXNwb25zZSgpO1xuICAgIH1cblxuICAgIHJldHVybiB7IGFwaSB9O1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBleGVjdXRlQXBpQ2FsbChhcGk6IGFueSwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IGFwaXMgPSBuZXcgQXBpcyhvYmplY3QsIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpKTtcblxuICAgIGFwaSA9IGF3YWl0IGFwaXMuc2V0VXJsKCk7XG4gICAgYXBpID0gYXdhaXQgYXBpcy5zZXRSZXF1ZXN0SGVhZGVycygpO1xuICAgIGFwaSA9IGF3YWl0IGFwaXMudmFsaWRhdGVSZXF1ZXN0SGVhZGVycygpO1xuICAgIGFwaSA9IGF3YWl0IGFwaXMuc2V0UmVxdWVzdEJvZHkoKTtcbiAgICBhcGkgPSBhd2FpdCBhcGlzLnZhbGlkYXRlUmVxdWVzdEJvZHkoKTtcblxuICAgIGxldCBhcGlDYWxsUmVzcG9uc2U6IGFueSA9IHt9O1xuICAgIGxldCBhcGlDYWxsUmVzcG9uc2VTdGF0dXNDb2RlO1xuXG4gICAgaWYgKHRoaXMuaXNWYWxpZFJlcXVlc3RIZWFkZXJzQW5kQm9keShhcGkpKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFwaS5yZXF1ZXN0LnVybCwgXCJ0eXBlXCIpICYmXG4gICAgICAgIGFwaS5yZXF1ZXN0LnVybC50eXBlID09PSBFQXBpUmVxdWVzdFVybFR5cGUuTU9DS1xuICAgICAgKSB7XG4gICAgICAgIGFwaUNhbGxSZXNwb25zZSA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKGFwaS5yZXF1ZXN0LnVybC5wcm9wcy5tb2NrZWREYXRhKTtcbiAgICAgICAgICB9LCBGT1JNX1ZJRVdfVElNRVJTLldBSVRfRk9SX0FQSV9NT0NLX0RBVEEpOyAvLyAxMDAwIG1zID0gMSBzZWNcbiAgICAgICAgfSk7XG4gICAgICAgIGFwaUNhbGxSZXNwb25zZVN0YXR1c0NvZGUgPVxuICAgICAgICAgIGFwaS5yZXF1ZXN0LnVybC5wcm9wcz8uc3RhdHVzQ29kZSA/P1xuICAgICAgICAgIEZPUk1fVklFV19USU1FUlMuQVBJX01PQ0tfU1VDQ0VTU19TVEFUVVNfQ09ERTsgLy8gRGVmYXVsdCBTdGF0dXMgQ29kZSBmb3IgTW9ja2VkIEFQSXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHVybDogc3RyaW5nID0gYXBpLnJlcXVlc3QudXJsLnZhbHVlO1xuICAgICAgICBjb25zdCBtZXRob2Q6IHN0cmluZyA9IGFwaS5yZXF1ZXN0Py5tZXRob2QgPz8gXCJQT1NUXCI7XG4gICAgICAgIGNvbnN0IGhlYWRlcnM6IGFueSA9IHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAuLi4oYXBpLnJlcXVlc3Q/LmhlYWRlcnM/LnZhbHVlIHx8IHt9KVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChtZXRob2QgPT09IFwiR0VUXCIpIHtcbiAgICAgICAgICAvLyBUcmlnZ2VyIGxvZ3MgZm9yIEFQSSByZXF1ZXN0IHdpdGggdGhlIG1ldGhvZCBhbmQgQVBJIGtleVxuICAgICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BUElfUkVRVUVTVCwge1xuICAgICAgICAgICAgZm9ybV9hcGlfbWV0aG9kOiBtZXRob2QsXG4gICAgICAgICAgICBmb3JtX2FwaV9rZXk6IGFwaT8uYXBpS2V5ID8/IFwiXCJcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmVzcG9uc2UgbmVlZHMgdG8gYmUgZGVjcnlwdGVkXG4gICAgICAgICAgICBjb25zdCBpc0RlY3J5cHRSZXNwb25zZTogYm9vbGVhbiA9IGFwaT8ucmVzcG9uc2U/LmlzU2VjdXJlID8/IGZhbHNlO1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJlc3BvbnNlIHNpZ25hdHVyZSBuZWVkcyB0byBiZSB2ZXJpZmllZFxuICAgICAgICAgICAgY29uc3QgaXNWZXJpZnlTaWduYXR1cmU6IGJvb2xlYW4gPVxuICAgICAgICAgICAgICBhcGk/LnJlc3BvbnNlPy5pc1ZlcmlmeVNpZ25hdHVyZSA/PyBmYWxzZTtcblxuICAgICAgICAgICAgLy8gRXhlY3V0ZSB0aGUgQVBJIGNhbGwgZm9yIEdFVCBtZXRob2RcbiAgICAgICAgICAgIGNvbnN0IGV4ZWN1dGVkQXBpQ2FsbDogYW55ID1cbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5mb3JtVmlld0FwaVNlcnZpY2UuZXhlY3V0ZUFwaUNhbGwoXG4gICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgIFwiR0VUXCIsXG4gICAgICAgICAgICAgICAge30sIC8vIE5vIHJlcXVlc3QgYm9keSBmb3IgR0VUIG1ldGhvZFxuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgZmFsc2UsIC8vIGlzRW5jcnlwdFJlcXVlc3RCb2R5IGlzIG5vdCBhcHBsaWNhYmxlIGZvciBHRVQgbWV0aG9kXG4gICAgICAgICAgICAgICAgaXNEZWNyeXB0UmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgaXNWZXJpZnlTaWduYXR1cmVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGFwaUNhbGxSZXNwb25zZSA9IGV4ZWN1dGVkQXBpQ2FsbC5kYXRhO1xuICAgICAgICAgICAgYXBpQ2FsbFJlc3BvbnNlU3RhdHVzQ29kZSA9IGV4ZWN1dGVkQXBpQ2FsbC5zdGF0dXM7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgYW55IGVycm9yc1xuICAgICAgICAgICAgYXBpQ2FsbFJlc3BvbnNlID0ge307XG4gICAgICAgICAgICBhcGlDYWxsUmVzcG9uc2VTdGF0dXNDb2RlID1cbiAgICAgICAgICAgICAgRk9STV9WSUVXX1RJTUVSUy5BUElfTU9DS19FUlJPUl9TVEFUVVNfQ09ERTsgLy8gSW50ZXJuYWwgU2VydmVyIEVycm9yXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEV4dHJhY3QgdGhlIHJlcXVlc3QgYm9keSBmcm9tIHRoZSBBUEkgY29uZmlndXJhdGlvblxuICAgICAgICAgIGNvbnN0IGJvZHk6IGFueSA9IGFwaT8ucmVxdWVzdD8uYm9keT8udmFsdWUgPz8ge307XG5cbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmVxdWVzdCBib2R5IG5lZWRzIHRvIGJlIGVuY3J5cHRlZFxuICAgICAgICAgIGNvbnN0IGlzRW5jcnlwdFJlcXVlc3RCb2R5OiBib29sZWFuID1cbiAgICAgICAgICAgIGFwaT8ucmVxdWVzdD8uYm9keT8uaXNTZWN1cmUgPz8gZmFsc2U7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJlc3BvbnNlIG5lZWRzIHRvIGJlIGRlY3J5cHRlZFxuICAgICAgICAgIGNvbnN0IGlzRGVjcnlwdFJlc3BvbnNlOiBib29sZWFuID0gYXBpPy5yZXNwb25zZT8uaXNTZWN1cmUgPz8gZmFsc2U7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJlc3BvbnNlIHNpZ25hdHVyZSBuZWVkcyB0byBiZSB2ZXJpZmllZFxuICAgICAgICAgIGNvbnN0IGlzVmVyaWZ5U2lnbmF0dXJlOiBib29sZWFuID1cbiAgICAgICAgICAgIGFwaT8ucmVzcG9uc2U/LmlzVmVyaWZ5U2lnbmF0dXJlID8/IGZhbHNlO1xuXG4gICAgICAgICAgLy8gVHJpZ2dlciBsb2dzIGZvciBBUEkgcmVxdWVzdCB3aXRoIHRoZSBtZXRob2QgYW5kIEFQSSBrZXlcbiAgICAgICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fQVBJX1JFUVVFU1QsIHtcbiAgICAgICAgICAgIGZvcm1fYXBpX21ldGhvZDogbWV0aG9kLFxuICAgICAgICAgICAgZm9ybV9hcGlfa2V5OiBhcGk/LmFwaUtleSA/PyBcIlwiLFxuICAgICAgICAgICAgZm9ybV9hcGlfcmVxdWVzdF9lbmNyeXB0ZWQ6IGlzRW5jcnlwdFJlcXVlc3RCb2R5LFxuICAgICAgICAgICAgLi4uKCFpc0VuY3J5cHRSZXF1ZXN0Qm9keSAmJiB7XG4gICAgICAgICAgICAgIGZvcm1fYXBpX3JlcXVlc3RfYm9keTogYm9keVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBFeGVjdXRlIHRoZSBBUEkgY2FsbCBmb3IgUE9TVCBtZXRob2RcbiAgICAgICAgICAgIGNvbnN0IGV4ZWN1dGVkQXBpQ2FsbDogYW55ID1cbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5mb3JtVmlld0FwaVNlcnZpY2UuZXhlY3V0ZUFwaUNhbGwoXG4gICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgIFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgICAgICBpc0VuY3J5cHRSZXF1ZXN0Qm9keSxcbiAgICAgICAgICAgICAgICBpc0RlY3J5cHRSZXNwb25zZSxcbiAgICAgICAgICAgICAgICBpc1ZlcmlmeVNpZ25hdHVyZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYXBpQ2FsbFJlc3BvbnNlID0gZXhlY3V0ZWRBcGlDYWxsLmRhdGE7XG4gICAgICAgICAgICBhcGlDYWxsUmVzcG9uc2VTdGF0dXNDb2RlID0gZXhlY3V0ZWRBcGlDYWxsLnN0YXR1cztcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBhbnkgZXJyb3JzXG4gICAgICAgICAgICBhcGlDYWxsUmVzcG9uc2UgPSB7fTtcbiAgICAgICAgICAgIGFwaUNhbGxSZXNwb25zZVN0YXR1c0NvZGUgPVxuICAgICAgICAgICAgICBGT1JNX1ZJRVdfVElNRVJTLkFQSV9NT0NLX0VSUk9SX1NUQVRVU19DT0RFOyAvLyBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXBpLnJlc3BvbnNlID0gc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICAgIGFwaS5yZXNwb25zZSxcbiAgICAgICAgXCJ2YWx1ZVwiLFxuICAgICAgICBhcGlDYWxsUmVzcG9uc2VcbiAgICAgICk7XG5cbiAgICAgIGFwaS5yZXNwb25zZSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgICBhcGkucmVzcG9uc2UsXG4gICAgICAgIFwic3RhdHVzXCIsXG4gICAgICAgIGFwaUNhbGxSZXNwb25zZVN0YXR1c0NvZGVcbiAgICAgICk7XG5cbiAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BUElfUkVTUE9OU0UsIHtcbiAgICAgICAgZm9ybV9hcGlfa2V5OiBhcGk/LmFwaUtleSA/PyBcIlwiLFxuICAgICAgICBmb3JtX2FwaV9yZXNwb25zZV9lbmNyeXB0ZWQ6IGFwaT8ucmVzcG9uc2U/LmlzU2VjdXJlID8/IGZhbHNlLFxuICAgICAgICAuLi4oKCFhcGk/LnJlc3BvbnNlPy5pc1NlY3VyZSA/PyBmYWxzZSkgJiYge1xuICAgICAgICAgIGZvcm1fYXBpX3Jlc3BvbnNlX2JvZHk6IGFwaUNhbGxSZXNwb25zZSA/PyB7fVxuICAgICAgICB9KSxcbiAgICAgICAgZm9ybV9hcGlfc3RhdHVzX2NvZGU6IGFwaUNhbGxSZXNwb25zZVN0YXR1c0NvZGVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fQVBJX1JFUVVFU1RfSU5WQUxJRCwge1xuICAgICAgICBmb3JtX2FwaV9rZXk6IGFwaT8uYXBpS2V5ID8/IFwiXCIsXG4gICAgICAgIGZvcm1fYXBpX3JlcXVlc3RfZW5jcnlwdGVkOiBhcGk/LnJlcXVlc3Q/LmJvZHk/LmlzU2VjdXJlID8/IGZhbHNlLFxuICAgICAgICAuLi4oKCFhcGk/LnJlcXVlc3Q/LmJvZHk/LmlzU2VjdXJlID8/IGZhbHNlKSAmJiB7XG4gICAgICAgICAgZm9ybV9hcGlfcmVxdWVzdF9ib2R5OiBhcGk/LnJlcXVlc3Q/LmJvZHk/LnZhbHVlID8/IHt9XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXBpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBpc1ZhbGlkUmVxdWVzdEhlYWRlcnNBbmRCb2R5KGFwaTogVEFwaSkge1xuICAgIGNvbnN0IGJvZHlWYWxpZGF0aW9uID1cbiAgICAgIChhcGkucmVxdWVzdC5ib2R5Py52YWxpZGF0aW9uIGFzIFRFbmdpbmUgJiB7XG4gICAgICAgIGlzX3ZhbGlkOiBib29sZWFuO1xuICAgICAgfSkgfHxcbiAgICAgIChhcGkucmVxdWVzdC5ib2R5IGFzIGFueSAmIHtcbiAgICAgICAgaXNfdmFsaWQ6IGJvb2xlYW47XG4gICAgICB9KTtcbiAgICBjb25zdCBoZWFkZXJzVmFsaWRhdGlvbiA9XG4gICAgICAoYXBpLnJlcXVlc3QuaGVhZGVycz8udmFsaWRhdGlvbiBhcyBURW5naW5lICYge1xuICAgICAgICBpc192YWxpZDogYm9vbGVhbjtcbiAgICAgIH0pIHx8XG4gICAgICAoYXBpLnJlcXVlc3QuaGVhZGVycyBhcyBhbnkgJiB7XG4gICAgICAgIGlzX3ZhbGlkOiBib29sZWFuO1xuICAgICAgfSk7XG5cbiAgICBpZiAoIWJvZHlWYWxpZGF0aW9uICYmICFoZWFkZXJzVmFsaWRhdGlvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAoYm9keVZhbGlkYXRpb24/LmlzX3ZhbGlkIHx8IGZhbHNlKSAmJlxuICAgICAgKGhlYWRlcnNWYWxpZGF0aW9uPy5pc192YWxpZCB8fCBmYWxzZSlcbiAgICApO1xuICB9XG5cbiAgc2hvd0FwaUxvYWRlcigpIHtcbiAgICB0aGlzLmxvYWRlclNlcnZpY2Uuc2hvdyh7XG4gICAgICBmdWxsc2NyZWVuOiB0cnVlLFxuICAgICAgbG9hZGVyVGV4dDogXCJQbGVhc2Ugd2FpdFwiXG4gICAgfSk7XG4gICAgdGhpcy52aWV3Rm9ybXNCdXR0b24uZGlzYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMudmlld0Zvcm1zQnV0dG9uLnNob3dMb2FkZXIgPSB0cnVlO1xuICAgIHRoaXMuc2F2ZUZvcm1CdXR0b24uZGlzYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMuc2F2ZUZvcm1CdXR0b24uc2hvd0xvYWRlciA9IHRydWU7XG4gIH1cblxuICBoaWRlQXBpTG9hZGVyKCkge1xuICAgIHRoaXMubG9hZGVyU2VydmljZS5oaWRlKCk7XG4gICAgdGhpcy52aWV3Rm9ybXNCdXR0b24uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLnZpZXdGb3Jtc0J1dHRvbi5zaG93TG9hZGVyID0gZmFsc2U7XG4gICAgdGhpcy5zYXZlRm9ybUJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMuc2F2ZUZvcm1CdXR0b24uc2hvd0xvYWRlciA9IGZhbHNlO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVPbkNsaWNrQXBpQ2FsbChlOiBhbnkpIHtcbiAgICBjb25zdCBmaWVsZDogVEZpZWxkQXBpQ2FsbCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZS5rZXkpO1xuXG4gICAgaWYgKGZpZWxkLnR5cGUgPT09IEVGaWVsZFR5cGUuQVBJKSB7XG4gICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fQVBJX0JVVFRPTl9DTElDSywge1xuICAgICAgICBmaWVsZF9rZXk6IGZpZWxkLmtleSxcbiAgICAgICAgZmllbGRfdHlwZTogZmllbGQudHlwZVxuICAgICAgfSk7XG5cbiAgICAgIC8vIHNldCBidXR0b24gc3RhdHVzIHRvIGxvYWRpbmdcbiAgICAgIGZpZWxkLmFwaS5zdGF0dXMudmFsdWUgPSBFQXBpU3RhdHVzVHlwZS5MT0FESU5HO1xuICAgICAgZmllbGQuc2hvd0xvYWRlciA9IHRydWU7XG5cbiAgICAgIHRoaXMuc2hvd0FwaUxvYWRlcigpO1xuXG4gICAgICAvLyBEZXRlcm1pbmUgQVBJIENhbGwgdGltZVxuXG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQuYXBpLCBcInJlcXVlc3RcIikpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVGaWVsZEFwaUNhbGwoZmllbGQsIGZpZWxkLmFwaSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBhcGlzID0gbmV3IEFwaXMoXG4gICAgICAgICAge1xuICAgICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICAgIEFQSV9DT05GSUc6IHt9LFxuICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICApO1xuXG4gICAgICAgIGF3YWl0IGFwaXMuY2FsbE5leHRBcGkoZmllbGQuYXBpLmVudHJ5cG9pbnQpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRvIG9wdGltaXplIHRoZSBET00gdXBkYXRlIGJ5IEFuZ3VsYXIgZm9yIHVzaW5nICpuZ0ZvciBvbiBsYXJnZSBuby4gb2YgaXRlbXMuXG4gICAqIEBwYXJhbSBpbmRleCBudW1iZXJcbiAgICogQHBhcmFtIGl0ZW0gZmllbGRDb25maWdcbiAgICogQHJldHVybnMgc3RyaW5nXG4gICAqL1xuICBnZXRVbmlxdWVJZGVudGlmaWVyKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGl0ZW0ua2V5O1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkNsaWNrR29CYWNrKGU6IGFueSwgbW9kZTogVEZvcm1WaWV3R29CYWNrTW9kZSkge1xuICAgIGlmICh0aGlzLmZvcm1Db25maWcuc3RhdHVzID09PSBFRm9ybXNMaXN0U3RhdHVzLkNPTVBMRVRFRCkge1xuICAgICAgdGhpcy5vbkNsaWNrR29CYWNrLmVtaXQoe1xuICAgICAgICBjbGlja2VkOiB0cnVlLFxuICAgICAgICBtb2RlXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5mb3JtQ29uZmlnLnByb3BlcnRpZXMuaGVhZGVyLmJhY2tCdXR0b24uYnlwYXNzQ29uZmlybWF0aW9uIHx8XG4gICAgICB3aW5kb3cuY29uZmlybShcIllvdXIgZGF0YSB3aWxsIGJlIGxvc3QgaWYgeW91IGxlYXZlIHRoaXMgcGFnZSEgQ29udGludWU/XCIpXG4gICAgKSB7XG4gICAgICB0aGlzLm9uQ2xpY2tHb0JhY2suZW1pdCh7XG4gICAgICAgIGNsaWNrZWQ6IHRydWUsXG4gICAgICAgIG1vZGVcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja1ZpZXdGb3JtcyhlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5mb3JtQ29uZmlnLnN0YXR1cyA9PT0gRUZvcm1zTGlzdFN0YXR1cy5DT01QTEVURUQpIHtcbiAgICAgIHRoaXMub25DbGlja1ZpZXdGb3Jtcy5lbWl0KHtcbiAgICAgICAgY2xpY2tlZDogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLmZvb3Rlci52aWV3Rm9ybXNCdXR0b24uYnlwYXNzQ29uZmlybWF0aW9uIHx8XG4gICAgICB3aW5kb3cuY29uZmlybShcIllvdXIgZGF0YSB3aWxsIGJlIGxvc3QgaWYgeW91IGxlYXZlIHRoaXMgcGFnZSEgQ29udGludWU/XCIpXG4gICAgKSB7XG4gICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fVklFV19CVVRUT05fQ0xJQ0ssIHt9KTtcblxuICAgICAgdGhpcy5vbkNsaWNrVmlld0Zvcm1zLmVtaXQoe1xuICAgICAgICBjbGlja2VkOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZU9uQ2xpY2tTYXZlRm9ybShlOiBhbnkpIHtcbiAgICBpZiAoZSkge1xuICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX1NBVkVfQlVUVE9OX0NMSUNLLCB7fSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19TQVZFX0FVVE8sIHt9KTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250cm9scyA9IG5ldyBGb3JtVmFsaWRhdGlvbigpLmdldEZvcm1GaWVsZHNJbnZhbGlkQ29udHJvbHMoXG4gICAgICB0aGlzLmZvcm1Hcm91cFxuICAgICk7XG5cbiAgICBsZXQgZmlyc3RGaWVsZFdpdGhFcnJvciA9IFwiXCI7XG5cbiAgICBmb3IgKGNvbnN0IGNvbnRyb2wgb2YgY29udHJvbHMpIHtcbiAgICAgIGlmIChjb250cm9sLmludmFsaWQpIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGNvbnRyb2wua2V5KTtcbiAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0ZJRUxEX0VSUk9SX1NIT1csIHtcbiAgICAgICAgICBmaWVsZF9rZXk6IGNvbnRyb2wua2V5LFxuICAgICAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGUsXG4gICAgICAgICAgZmllbGRfZXJyb3JfdHlwZXM6IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRyb2wua2V5XS5lcnJvcnNcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGlzRW1wdHlWYWx1ZShmaXJzdEZpZWxkV2l0aEVycm9yKSkge1xuICAgICAgICAgIGZpcnN0RmllbGRXaXRoRXJyb3IgPSBjb250cm9sLmtleTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5mb3JtRmllbGRzID0gc2hvd0Zvcm1GaWVsZEVycm9yKFxuICAgICAgICB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRyb2wua2V5XS5lcnJvcnMsXG4gICAgICAgIGNvbnRyb2wua2V5LFxuICAgICAgICBjb250cm9sLmludmFsaWRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGlzTm90RW1wdHlWYWx1ZShmaXJzdEZpZWxkV2l0aEVycm9yKSkge1xuICAgICAgdGhpcy5oYW5kbGVPblNjcm9sbFRvRmllbGQoZmlyc3RGaWVsZFdpdGhFcnJvcik7XG5cbiAgICAgIC8vIHRoaXMudG9nZ2xlRXJyb3JOb3RpZmljYXRpb24odHJ1ZSk7XG4gICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vICAgdGhpcy50b2dnbGVFcnJvck5vdGlmaWNhdGlvbihmYWxzZSk7XG4gICAgICAvLyB9LCAzMDAwKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZmllbGQgb2YgdGhpcy5mb3JtRmllbGRzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGZpZWxkLmlzRm9ybUVsZW1lbnQgJiZcbiAgICAgICAgIWZpZWxkLmhpZGRlbiAmJlxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJ2YWxpZGF0aW9uXCIpICYmXG4gICAgICAgIGZpZWxkLnZhbGlkYXRpb24udHJpZ2dlcnMuaW5jbHVkZXMoXCJPTl9TQVZFXCIpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgcnVsZUVuZ2luZSA9IG5ldyBSdWxlRW5naW5lKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgQ0FNRVJBX0RBVEE6IHRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICk7XG5cbiAgICAgICAgYXdhaXQgcnVsZUVuZ2luZS5ydW4oZmllbGQudmFsaWRhdGlvbik7XG5cbiAgICAgICAgaWYgKCFmaWVsZC52YWxpZGF0aW9uLmlzX3ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy50b2dnbGVFcnJvck5vdGlmaWNhdGlvbih0cnVlKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlRXJyb3JOb3RpZmljYXRpb24oZmFsc2UpO1xuICAgICAgICAgIH0sIEZPUk1fVklFV19USU1FUlMuSU5WQUxJRF9GSUVMRFNfU0FWRV9GT1JNX0VSUk9SX1RPR0dMRSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG5cbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHRoaXMuZm9ybUZpZWxkcykge1xuICAgICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGZpZWxkLmhpZGRlbikge1xuICAgICAgICAgIGRlbGV0ZSBmb3JtRGF0YVtmaWVsZC5rZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvcm1EYXRhW2ZpZWxkLmtleV0gPSBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0KFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICBmb3JtRGF0YVtmaWVsZC5rZXldXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGV4dGVuZGVkRm9ybURhdGEgPSB0aGlzLmZvcm1GaWVsZHMucmVkdWNlKChyZXN1bHQsIGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQgJiYgIWZpZWxkLmhpZGRlbikge1xuICAgICAgICBjb25zdCBmaWVsZERhdGEgPSB7XG4gICAgICAgICAgW2ZpZWxkLmtleV06IHtcbiAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgbGFiZWw6IGZpZWxkLmxhYmVsLFxuICAgICAgICAgICAgdmFsdWU6IGlzRW1wdHlWYWx1ZShmb3JtRGF0YVtmaWVsZC5rZXldKSA/IFwiXCIgOiBmb3JtRGF0YVtmaWVsZC5rZXldLFxuICAgICAgICAgICAgdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXN1bHRbZmllbGQua2V5XSA9IGZpZWxkRGF0YVtmaWVsZC5rZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSk7XG5cbiAgICBPYmplY3Qua2V5cyhmb3JtRGF0YSkubWFwKChrZXkpID0+IHtcbiAgICAgIGlmIChpc0VtcHR5VmFsdWUoZm9ybURhdGFba2V5XSkpIHtcbiAgICAgICAgZm9ybURhdGFba2V5XSA9IFwiXCI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUE9TVCBUYXNrc1xuICAgICAqIDEuIEFQSSBDYWxscy5cbiAgICAgKiAyLiBBbHRlciBEYXRhIFN0cnVjdHVyZS5cbiAgICAgKiAzLiBUcmlnZ2VyIGFuIEludGVybmFsIFBvcHVwIEZvcm0uXG4gICAgICogNC4gVVJMIFJlZGlyZWN0aW9uIG9yIG5ldyBvcGVuaW5nIG9mIFVSTCBpbiBleHRlcm5hbCB0YWIuXG4gICAgICovXG4gICAgaWYgKFxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5mb3JtQ29uZmlnLCBcInRhc2tzXCIpICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmZvcm1Db25maWcudGFza3MsIFwicG9zdFwiKVxuICAgICkge1xuICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX1RBU0tfUE9TVCwge30pO1xuXG4gICAgICBmb3IgKGNvbnN0IHBvc3RUYXNrIG9mIHRoaXMuZm9ybUNvbmZpZy50YXNrcy5wb3N0KSB7XG4gICAgICAgIGNvbnN0IHRhc2sgPSBuZXcgVGFza3MoXG4gICAgICAgICAgcG9zdFRhc2ssXG4gICAgICAgICAge1xuICAgICAgICAgICAgRk9STV9DT05GSUc6IHRoaXMuZm9ybUNvbmZpZyxcbiAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnN0b3BUYXNrRXhlY3V0aW9uID0gZmFsc2U7XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhwb3N0VGFzaywgXCJ3YWl0XCIpKSB7XG4gICAgICAgICAgdGhpcy53YWl0aW5nRm9yQ2hhbmdlcyA9IHBvc3RUYXNrLndhaXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy53YWl0aW5nRm9yQ2hhbmdlcyA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGFzay5leGVjdXRlKCk7XG5cbiAgICAgICAgLy8gV2FpdCBmb3IgbmdPbkNoYW5nZXMgdG8gYmUgY2FsbGVkIGJlZm9yZSBjb250aW51aW5nIHRvIHRoZSBuZXh0IHRhc2tcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgICBjb25zdCBpbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLndhaXRpbmdGb3JDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBGT1JNX1ZJRVdfVElNRVJTLldBSVRfRk9SX0NIQU5HRVNfQkVGT1JFX01PVklOR19UT19ORVhUX1RBU0spO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5zdG9wVGFza0V4ZWN1dGlvbikge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnN0b3BUYXNrRXhlY3V0aW9uIHx8IHRoaXMud2FpdGluZ0ZvckNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5zdG9wVGFza0V4ZWN1dGlvbiA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMub25DbGlja1NhdmVGb3JtLmVtaXQoe1xuICAgICAgICBmb3JtQ29uZmlnOiB0aGlzLmZvcm1Db25maWcsXG4gICAgICAgIGRhdGE6IG1lcmdlT2JqZWN0cyhcbiAgICAgICAgICB0aGlzLmFsbEZvcm1zRGF0YVt0aGlzLmZvcm1Db25maWcua2V5XSxcbiAgICAgICAgICBmb3JtRGF0YSxcbiAgICAgICAgICB0aGlzLnBvcHVwRm9ybURhdGEsXG4gICAgICAgICAgdGhpcy50YXNrRGF0YVxuICAgICAgICApLFxuICAgICAgICBleHRlbmRlZERhdGE6IGV4dGVuZGVkRm9ybURhdGFcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdldFVuc2F2ZWREYXRhU3RhdGUuZW1pdChmYWxzZSk7XG4gICAgICB0aGlzLm9uQ2xpY2tTYXZlRm9ybS5lbWl0KHtcbiAgICAgICAgZm9ybUNvbmZpZzogdGhpcy5mb3JtQ29uZmlnLFxuICAgICAgICBkYXRhOiBtZXJnZU9iamVjdHMoZm9ybURhdGEsIHRoaXMucG9wdXBGb3JtRGF0YSwgdGhpcy50YXNrRGF0YSksXG4gICAgICAgIGV4dGVuZGVkRGF0YTogZXh0ZW5kZWRGb3JtRGF0YVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVPbkFwaVRpbWVyU3RvcChlOiBhbnkpIHtcbiAgICB0aGlzLmZpZWxkQXBpVGltZXJNZXNzYWdlSGlkZShlLmtleSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGhhbmRsZU9uU2Nyb2xsVG9GaWVsZChmaWVsZEtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgdGFyZ2V0RmllbGQgPSB0aGlzLmZvcm1GaWVsZHNSZWZcbiAgICAgIC50b0FycmF5KClcbiAgICAgIC5maW5kKFxuICAgICAgICAoZm9ybUZpZWxkUmVmKSA9PiBmb3JtRmllbGRSZWYubmF0aXZlRWxlbWVudC5pZCA9PT0gYGZpZWxkXyR7ZmllbGRLZXl9YFxuICAgICAgKTtcblxuICAgIGlmICh0YXJnZXRGaWVsZCkge1xuICAgICAgY29uc3QgY29udGFpbmVyRWwgPSB0aGlzLmZvcm1GaWVsZENvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgY29uc3QgZmllbGRFbCA9IHRhcmdldEZpZWxkLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkoXG4gICAgICAgIGNvbnRhaW5lckVsLFxuICAgICAgICBcInNjcm9sbFRvcFwiLFxuICAgICAgICBmaWVsZEVsLm9mZnNldFRvcCAtIGNvbnRhaW5lckVsLm9mZnNldFRvcFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBzaG93RXJyb3JOb3RpZmljYXRpb24gPSBmYWxzZTtcblxuICBAbG9nTWV0aG9kXG4gIHRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKHNob3c6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnNob3dFcnJvck5vdGlmaWNhdGlvbiA9IHNob3c7XG4gIH1cblxuICBzaG93UGVybWlzc2lvbkVycm9yTm90aWZpY2F0aW9uID0gZmFsc2U7XG5cbiAgQGxvZ01ldGhvZFxuICB0b2dnbGVQZXJtaXNzaW9uRXJyb3JOb3RpZmljYXRpb24oc2hvdzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2hvd1Blcm1pc3Npb25FcnJvck5vdGlmaWNhdGlvbiA9IHNob3c7XG4gIH1cblxuICAvLyBDb21wb25lbnQgSGVscGVyc1xuICBAbG9nTWV0aG9kXG4gIGZpZWxkSGlkZShmaWVsZEtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBjb25zdCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcbiAgICB9KTtcblxuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XS5oaWRkZW4gPSB0cnVlO1xuICAgIHRoaXMuZm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcblxuICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19GSUVMRF9ISURFLCB7XG4gICAgICBmaWVsZF9rZXk6IGZpZWxkS2V5LFxuICAgICAgZmllbGRfdHlwZTogZmllbGQudHlwZVxuICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZEdyb3VwSGlkZShmaWVsZEdyb3VwOiBzdHJpbmcpIHtcbiAgICBmb3IgKGNvbnN0IGZpZWxkS2V5IG9mIHRoaXMuZmllbGRHcm91cHNbZmllbGRHcm91cF0pIHtcbiAgICAgIHRoaXMuZmllbGRIaWRlKGZpZWxkS2V5KTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkU2hvdyhmaWVsZEtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBjb25zdCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcbiAgICB9KTtcblxuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XS5oaWRkZW4gPSBmYWxzZTtcbiAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG5cbiAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRklFTERfU0hPVywge1xuICAgICAgZmllbGRfa2V5OiBmaWVsZEtleSxcbiAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGVcbiAgICB9KTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmllbGRHcm91cFNob3coZmllbGRHcm91cDogc3RyaW5nKSB7XG4gICAgZm9yIChjb25zdCBmaWVsZEtleSBvZiB0aGlzLmZpZWxkR3JvdXBzW2ZpZWxkR3JvdXBdKSB7XG4gICAgICB0aGlzLmZpZWxkU2hvdyhmaWVsZEtleSk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZERpc2FibGUoZmllbGRLZXk6IHN0cmluZykge1xuICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgY29uc3QgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XG4gICAgfSk7XG5cbiAgICBpZiAoZmllbGQuaXNGb3JtRWxlbWVudCkge1xuICAgICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdLmRpc2FibGVkID0gdHJ1ZTtcblxuICAgICAgaWYgKGlzTm90RW1wdHlWYWx1ZSh0aGlzLmZvcm1Hcm91cC5jb250cm9scykpIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS5kaXNhYmxlKHtcbiAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5mb3JtR3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gRUZpZWxkVHlwZS5CVVRUT04pIHtcbiAgICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XS5kaXNhYmxlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0ZJRUxEX0RJU0FCTEUsIHtcbiAgICAgIGZpZWxkX2tleTogZmllbGRLZXksXG4gICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlXG4gICAgfSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkR3JvdXBEaXNhYmxlKGZpZWxkR3JvdXA6IHN0cmluZykge1xuICAgIGZvciAoY29uc3QgZmllbGRLZXkgb2YgdGhpcy5maWVsZEdyb3Vwc1tmaWVsZEdyb3VwXSkge1xuICAgICAgdGhpcy5maWVsZERpc2FibGUoZmllbGRLZXkpO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmllbGRFbmFibGUoZmllbGRLZXk6IHN0cmluZykge1xuICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgY29uc3QgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XG4gICAgfSk7XG5cbiAgICBpZiAoZmllbGQuaXNGb3JtRWxlbWVudCkge1xuICAgICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdLmRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAgIGlmIChpc05vdEVtcHR5VmFsdWUodGhpcy5mb3JtR3JvdXAuY29udHJvbHMpKSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0uZW5hYmxlKHtcbiAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5mb3JtR3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gRUZpZWxkVHlwZS5CVVRUT04pIHtcbiAgICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XS5kaXNhYmxlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19GSUVMRF9FTkFCTEUsIHtcbiAgICAgIGZpZWxkX2tleTogZmllbGRLZXksXG4gICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlXG4gICAgfSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkR3JvdXBFbmFibGUoZmllbGRHcm91cDogc3RyaW5nKSB7XG4gICAgZm9yIChjb25zdCBmaWVsZEtleSBvZiB0aGlzLmZpZWxkR3JvdXBzW2ZpZWxkR3JvdXBdKSB7XG4gICAgICB0aGlzLmZpZWxkRW5hYmxlKGZpZWxkS2V5KTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkUmVzZXQoZmllbGRLZXk6IHN0cmluZykge1xuICAgIC8vIEZpbmQgdGhlIGZpZWxkIGFuZCBpdHMgaW5kZXggaW4gdGhlIGZvcm1GaWVsZHMgYXJyYXlcbiAgICBsZXQgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBjb25zdCBmaWVsZEluZGV4ID0gZ2V0Rm9ybUZpZWxkSW5kZXhCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcblxuICAgIC8vIFJlc2V0IHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgaW4gdGhlIGZvcm1Hcm91cFxuICAgIGNvbnN0IHJlc2V0VmFsdWUgPSBjb252ZXJ0Rm9ybUZpZWxkRW1wdHlWYWx1ZVRvS3dpa1VJRm9ybWF0KGZpZWxkKTtcblxuICAgIHRoaXMuZm9ybURhdGFbZmllbGRLZXldID0gcmVzZXRWYWx1ZTtcblxuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0ucmVzZXQocmVzZXRWYWx1ZSwge1xuICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgIG9ubHlTZWxmOiB0cnVlXG4gICAgfSk7XG5cbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKFxuICAgICAge1xuICAgICAgICBbZmllbGQua2V5XTogcmVzZXRWYWx1ZVxuICAgICAgfSxcbiAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XG4gICAgKTtcblxuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XG4gICAgICBlbWl0RXZlbnQ6IHRydWVcbiAgICB9KTtcblxuICAgIC8vIFJlc2V0IHRoZSBtZXNzYWdlcyBhbmQgZXJyb3JzIGZvciB0aGUgZmllbGRcbiAgICBmaWVsZCA9IHJlbW92ZUZvcm1GaWVsZE1lc3NhZ2UoZmllbGQsIHtcbiAgICAgIHR5cGU6IEVNZXNzYWdlVHlwZS5XQVJOSU5HLFxuICAgICAgbWVzc2FnZTogXCJcIlxuICAgIH0pO1xuICAgIGZpZWxkID0gcmVtb3ZlRm9ybUZpZWxkTWVzc2FnZShmaWVsZCwge1xuICAgICAgdHlwZTogRU1lc3NhZ2VUeXBlLlNVQ0NFU1MsXG4gICAgICBtZXNzYWdlOiBcIlwiXG4gICAgfSk7XG4gICAgdGhpcy5maWVsZEVycm9ySGlkZShmaWVsZEtleSwge1xuICAgICAgdHlwZTogRU1lc3NhZ2VUeXBlLkVSUk9SLFxuICAgICAgbWVzc2FnZTogXCJcIlxuICAgIH0pO1xuXG4gICAgLy8gUmVzZXQgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBpbiB0aGUgZm9ybUZpZWxkcyBhcnJheVxuICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgY2FzZSBFRmllbGRUeXBlLkFQSToge1xuICAgICAgICBjb25zdCBmaWVsZEFwaUNhbGwgPSBmaWVsZCBhcyBURmllbGRBcGlDYWxsO1xuICAgICAgICBmaWVsZEFwaUNhbGwuYXBpLnN0YXR1cy52YWx1ZSA9IEVBcGlTdGF0dXNUeXBlLkRFRkFVTFQ7XG4gICAgICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkQXBpQ2FsbDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIEVGaWVsZFR5cGUuTElWRV9MT0NBVElPTjoge1xuICAgICAgICBjb25zdCBmaWVsZExpdmVMb2NhdGlvbiA9IGZpZWxkIGFzIFRGaWVsZExpdmVMb2NhdGlvbjtcbiAgICAgICAgZmllbGRMaXZlTG9jYXRpb24uYXBpLnN0YXR1cy52YWx1ZSA9IEVBcGlTdGF0dXNUeXBlLkRFRkFVTFQ7XG4gICAgICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkTGl2ZUxvY2F0aW9uO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgZmllbGQuZm9jdXMgPSBmYWxzZTtcbiAgICAgICAgZmllbGQuaW52YWxpZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0gPSBmaWVsZDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0ZJRUxEX1JFU0VULCB7XG4gICAgICBmaWVsZF9rZXk6IGZpZWxkS2V5LFxuICAgICAgZmllbGRfdHlwZTogZmllbGQudHlwZVxuICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZEdyb3VwUmVzZXQoZmllbGRHcm91cDogc3RyaW5nKSB7XG4gICAgZm9yIChjb25zdCBmaWVsZEtleSBvZiB0aGlzLmZpZWxkR3JvdXBzW2ZpZWxkR3JvdXBdKSB7XG4gICAgICB0aGlzLmZpZWxkUmVzZXQoZmllbGRLZXkpO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmllbGRIaWRlQXBpTG9hZGVyKGZpZWxkS2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuICAgIGNvbnN0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgLy8gUmVzZXQgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBpbiB0aGUgZm9ybUZpZWxkcyBhcnJheVxuICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgY2FzZSBFRmllbGRUeXBlLkFQSToge1xuICAgICAgICBjb25zdCBmaWVsZEFwaUNhbGwgPSBmaWVsZCBhcyBURmllbGRBcGlDYWxsO1xuICAgICAgICBmaWVsZEFwaUNhbGwuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGRBcGlDYWxsO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgRUZpZWxkVHlwZS5MSVZFX0xPQ0FUSU9OOiB7XG4gICAgICAgIGNvbnN0IGZpZWxkTGl2ZUxvY2F0aW9uID0gZmllbGQgYXMgVEZpZWxkTGl2ZUxvY2F0aW9uO1xuICAgICAgICBmaWVsZExpdmVMb2NhdGlvbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0gPSBmaWVsZExpdmVMb2NhdGlvbjtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmllbGRTaG93QXBpTG9hZGVyKGZpZWxkS2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuICAgIGNvbnN0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgLy8gUmVzZXQgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBpbiB0aGUgZm9ybUZpZWxkcyBhcnJheVxuICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgY2FzZSBFRmllbGRUeXBlLkFQSToge1xuICAgICAgICBjb25zdCBmaWVsZEFwaUNhbGwgPSBmaWVsZCBhcyBURmllbGRBcGlDYWxsO1xuICAgICAgICBmaWVsZEFwaUNhbGwuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0gPSBmaWVsZEFwaUNhbGw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBFRmllbGRUeXBlLkxJVkVfTE9DQVRJT046IHtcbiAgICAgICAgY29uc3QgZmllbGRMaXZlTG9jYXRpb24gPSBmaWVsZCBhcyBURmllbGRMaXZlTG9jYXRpb247XG4gICAgICAgIGZpZWxkTGl2ZUxvY2F0aW9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGRMaXZlTG9jYXRpb247XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHNldEh0bWwoZmllbGRLZXk6IHN0cmluZywgbWVzc2FnZTogVE1lc3NhZ2UpIHtcbiAgICBsZXQgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBjb25zdCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcbiAgICB9KTtcblxuICAgIGZpZWxkID0gYXBwZW5kSHRtbE1lc3NhZ2UoZmllbGQsIG1lc3NhZ2UpO1xuXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGQ7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkRXJyb3JTaG93KGZpZWxkS2V5OiBzdHJpbmcsIG1lc3NhZ2U6IFRNZXNzYWdlKSB7XG4gICAgbGV0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgY29uc3QgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XG4gICAgfSk7XG5cbiAgICBmaWVsZCA9IGhpZ2hsaWdodEZvcm1GaWVsZEVycm9yKGZpZWxkLCB0cnVlKTtcbiAgICBmaWVsZCA9IGFwcGVuZEZvcm1GaWVsZE1lc3NhZ2UoZmllbGQsIG1lc3NhZ2UpO1xuXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGQ7XG5cbiAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRklFTERfRVJST1JfU0hPVywge1xuICAgICAgZmllbGRfa2V5OiBmaWVsZEtleSxcbiAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGUsXG4gICAgICBmaWVsZF9lcnJvcl9tZXNzYWdlOiBtZXNzYWdlXG4gICAgfSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkRXJyb3JIaWRlKGZpZWxkS2V5OiBzdHJpbmcsIG1lc3NhZ2U6IFRNZXNzYWdlKSB7XG4gICAgbGV0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgY29uc3QgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XG4gICAgfSk7XG5cbiAgICBmaWVsZCA9IGhpZ2hsaWdodEZvcm1GaWVsZEVycm9yKGZpZWxkLCBmYWxzZSk7XG4gICAgZmllbGQgPSByZW1vdmVGb3JtRmllbGRNZXNzYWdlKGZpZWxkLCBtZXNzYWdlKTtcblxuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xuXG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0ZJRUxEX0VSUk9SX0hJREUsIHtcbiAgICAgIGZpZWxkX2tleTogZmllbGRLZXksXG4gICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlLFxuICAgICAgZmllbGRfZXJyb3JfbWVzc2FnZTogbWVzc2FnZVxuICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZE1lc3NhZ2VTaG93KGZpZWxkS2V5OiBzdHJpbmcsIG1lc3NhZ2U6IFRNZXNzYWdlKSB7XG4gICAgbGV0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgY29uc3QgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XG4gICAgfSk7XG5cbiAgICBmaWVsZCA9IGFwcGVuZEZvcm1GaWVsZE1lc3NhZ2UoZmllbGQsIG1lc3NhZ2UpO1xuXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGQ7XG5cbiAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRklFTERfTUVTU0FHRV9TSE9XLCB7XG4gICAgICBmaWVsZF9rZXk6IGZpZWxkS2V5LFxuICAgICAgZmllbGRfdHlwZTogZmllbGQudHlwZSxcbiAgICAgIGZpZWxkX21lc3NhZ2U6IG1lc3NhZ2VcbiAgICB9KTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmllbGRNZXNzYWdlSGlkZShmaWVsZEtleTogc3RyaW5nLCBtZXNzYWdlOiBUTWVzc2FnZSkge1xuICAgIGxldCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuICAgIGNvbnN0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgZmllbGQgPSByZW1vdmVGb3JtRmllbGRNZXNzYWdlKGZpZWxkLCBtZXNzYWdlKTtcblxuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xuXG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0ZJRUxEX01FU1NBR0VfSElERSwge1xuICAgICAgZmllbGRfa2V5OiBmaWVsZEtleSxcbiAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGUsXG4gICAgICBmaWVsZF9tZXNzYWdlOiBtZXNzYWdlXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmaWVsZEFwaVRpbWVyTWVzc2FnZVNob3coXG4gICAgZmllbGRLZXk6IHN0cmluZyxcbiAgICB0aW1lcjogVEFwaVRpbWVyXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuICAgIGNvbnN0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgZmllbGQgPSBzZXRBcGlUaW1lck1lc3NhZ2UoZmllbGQsIHRpbWVyKTtcblxuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0ZJRUxEX0FQSV9USU1FUl9NRVNTQUdFX1NIT1csIHtcbiAgICAgIGZpZWxkX2tleTogZmllbGRLZXksXG4gICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlLFxuICAgICAgZmllbGRfdGltZXI6IHRpbWVyXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmaWVsZEFwaVRpbWVyTWVzc2FnZUhpZGUoZmllbGRLZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuICAgIGNvbnN0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgZmllbGQgPSBzZXRBcGlUaW1lck1lc3NhZ2UoZmllbGQsIHVuZGVmaW5lZCk7XG5cbiAgICBpZiAoXG4gICAgICBmaWVsZC5pc0Zvcm1FbGVtZW50ICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJ2YWxpZGF0aW9uXCIpICYmXG4gICAgICBmaWVsZC52YWxpZGF0aW9uLnRyaWdnZXJzLmluY2x1ZGVzKFwiT05fQVBJX1RJTUVSX1NUT1BcIilcbiAgICApIHtcbiAgICAgIGNvbnN0IHJ1bGVFbmdpbmUgPSBuZXcgUnVsZUVuZ2luZShcbiAgICAgICAge1xuICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgQ0FNRVJBX0RBVEE6IHRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICApO1xuXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBydWxlRW5naW5lLnJ1bihmaWVsZC52YWxpZGF0aW9uKTtcbiAgICAgIH0pKCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcImNvbm5lY3RlZEVsZW1lbnRzXCIpKSB7XG4gICAgICB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRzKFxuICAgICAgICB7XG4gICAgICAgICAga2V5OiBmaWVsZC5rZXksXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVcbiAgICAgICAgfSxcbiAgICAgICAgXCJPTl9BUElfVElNRVJfU1RPUFwiXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0ZJRUxEX0FQSV9USU1FUl9NRVNTQUdFX0hJREUsIHtcbiAgICAgIGZpZWxkX2tleTogZmllbGRLZXksXG4gICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlXG4gICAgfSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHNldFZhbHVlKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICBjb25zdCBzb3VyY2VWYWx1ZSA9IGF3YWl0IHNvdXJjZS5nZXRWYWx1ZUZyb21Tb3VyY2UoXG4gICAgICBhY3Rpb24ucHJvcHMudmFsdWUuc291cmNlXG4gICAgKTtcbiAgICBzb3VyY2Uuc2V0VmFsdWVUb1NvdXJjZShhY3Rpb24ucHJvcHMudmFsdWUuZGVzdGluYXRpb24sIHNvdXJjZVZhbHVlKTtcblxuICAgIG9iamVjdC5GSUVMRF9DT05GSUcgPSBzb3VyY2Uub2JqZWN0LkZJRUxEX0NPTkZJRztcblxuICAgIHRoaXMuZm9ybURhdGEgPSBzb3VyY2Uub2JqZWN0LkZPUk1fREFUQTtcbiAgICB0aGlzLnBhdGNoRm9ybUdyb3VwKHRoaXMuZm9ybURhdGEpO1xuICAgIHRoaXMuYWxsRm9ybXNEYXRhID0gc291cmNlLm9iamVjdC5BTExfRk9STVNfREFUQTtcbiAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEgPSBzb3VyY2Uub2JqZWN0LlBSRVZJT1VTX0ZPUk1fREFUQTtcbiAgICB0aGlzLmV4dHJhRGF0YSA9IHNvdXJjZS5vYmplY3QuRVhUUkFfREFUQTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgc2V0RmllbGREZWZhdWx0VmFsdWUoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBTb3VyY2Uob2JqZWN0KTtcblxuICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gYXdhaXQgc291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShcbiAgICAgIGFjdGlvbi5wcm9wcy52YWx1ZS5zb3VyY2VcbiAgICApO1xuXG4gICAgc291cmNlLnNldFZhbHVlVG9Tb3VyY2UoXG4gICAgICB7XG4gICAgICAgIGtleTogRVNvdXJjZUtleS5PQkpFQ1QsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgICBrZXk6IFwiRklFTERfQ09ORklHXCIsXG4gICAgICAgICAgICBwYXRoOiBcImRlZmF1bHQudmFsdWUudmFsdWVcIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNvdXJjZVZhbHVlXG4gICAgKTtcbiAgICBzb3VyY2Uuc2V0VmFsdWVUb1NvdXJjZShcbiAgICAgIHtcbiAgICAgICAga2V5OiBFU291cmNlS2V5Lk9CSkVDVCxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICAgIGtleTogXCJGT1JNX0RBVEFcIixcbiAgICAgICAgICAgIHBhdGg6IFN0cmluZyhhY3Rpb24ucHJvcHMuZmllbGRLZXkpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc291cmNlVmFsdWVcbiAgICApO1xuXG4gICAgb2JqZWN0LkZJRUxEX0NPTkZJRyA9IHNvdXJjZS5vYmplY3QuRklFTERfQ09ORklHO1xuICAgIHRoaXMuZm9ybURhdGEgPSBzb3VyY2Uub2JqZWN0LkZPUk1fREFUQTtcbiAgICB0aGlzLnBhdGNoRm9ybUdyb3VwKHRoaXMuZm9ybURhdGEpO1xuICAgIHRoaXMuYWxsRm9ybXNEYXRhID0gc291cmNlLm9iamVjdC5BTExfRk9STVNfREFUQTtcbiAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEgPSBzb3VyY2Uub2JqZWN0LlBSRVZJT1VTX0ZPUk1fREFUQTtcbiAgICB0aGlzLmV4dHJhRGF0YSA9IHNvdXJjZS5vYmplY3QuRVhUUkFfREFUQTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgc2V0QXBpU3RhdHVzKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICBjb25zdCBzb3VyY2VWYWx1ZSA9IGFjdGlvbi5wcm9wcy5zdGF0dXM7XG5cbiAgICBzb3VyY2Uuc2V0VmFsdWVUb1NvdXJjZShcbiAgICAgIHtcbiAgICAgICAga2V5OiBFU291cmNlS2V5Lk9CSkVDVCxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICAgIGtleTogXCJGSUVMRF9DT05GSUdcIixcbiAgICAgICAgICAgIHBhdGg6IFwiYXBpLnN0YXR1cy52YWx1ZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc291cmNlVmFsdWVcbiAgICApO1xuXG4gICAgb2JqZWN0LkZJRUxEX0NPTkZJRyA9IHNvdXJjZS5vYmplY3QuRklFTERfQ09ORklHO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBzZXRBcGlIZWFkZXJWYWx1ZShhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc291cmNlID0gbmV3IFNvdXJjZShvYmplY3QpO1xuXG4gICAgY29uc3Qgc291cmNlVmFsdWUgPSBhd2FpdCBzb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKGFjdGlvbi5wcm9wcy5zb3VyY2UpO1xuXG4gICAgc291cmNlLnNldFZhbHVlVG9Tb3VyY2UoXG4gICAgICB7XG4gICAgICAgIGtleTogRVNvdXJjZUtleS5PQkpFQ1QsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgICBrZXk6IFwiQVBJX0NPTkZJR1wiLFxuICAgICAgICAgICAgcGF0aDogYHJlcXVlc3QuaGVhZGVycy52YWx1ZS4ke2FjdGlvbi5wcm9wcy5rZXl9YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNvdXJjZVZhbHVlXG4gICAgKTtcblxuICAgIG9iamVjdC5BUElfQ09ORklHID0gc291cmNlLm9iamVjdC5BUElfQ09ORklHO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBzZXRBcGlIZWFkZXJWYWxpZGl0eShhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc291cmNlID0gbmV3IFNvdXJjZShvYmplY3QpO1xuXG4gICAgY29uc3Qgc291cmNlVmFsdWUgPSBhY3Rpb24ucHJvcHMudmFsaWQ7XG5cbiAgICBzb3VyY2Uuc2V0VmFsdWVUb1NvdXJjZShcbiAgICAgIHtcbiAgICAgICAga2V5OiBFU291cmNlS2V5Lk9CSkVDVCxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICAgIGtleTogXCJBUElfQ09ORklHXCIsXG4gICAgICAgICAgICBwYXRoOiBcInJlcXVlc3QuaGVhZGVycy5pc192YWxpZFwiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc291cmNlVmFsdWVcbiAgICApO1xuXG4gICAgb2JqZWN0LkFQSV9DT05GSUcgPSBzb3VyY2Uub2JqZWN0LkFQSV9DT05GSUc7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHNldEFwaUJvZHlWYWx1ZShhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc291cmNlID0gbmV3IFNvdXJjZShvYmplY3QpO1xuXG4gICAgY29uc3Qgc291cmNlVmFsdWUgPSBhd2FpdCBzb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKGFjdGlvbi5wcm9wcy5zb3VyY2UpO1xuXG4gICAgc291cmNlLnNldFZhbHVlVG9Tb3VyY2UoXG4gICAgICB7XG4gICAgICAgIGtleTogRVNvdXJjZUtleS5PQkpFQ1QsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgICBrZXk6IFwiQVBJX0NPTkZJR1wiLFxuICAgICAgICAgICAgcGF0aDogYHJlcXVlc3QuYm9keS52YWx1ZS4ke2FjdGlvbi5wcm9wcy5rZXl9YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNvdXJjZVZhbHVlXG4gICAgKTtcblxuICAgIG9iamVjdC5BUElfQ09ORklHID0gc291cmNlLm9iamVjdC5BUElfQ09ORklHO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBzZXRBcGlCb2R5VmFsaWRpdHkoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBTb3VyY2Uob2JqZWN0KTtcblxuICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gYWN0aW9uLnByb3BzLnZhbGlkO1xuXG4gICAgc291cmNlLnNldFZhbHVlVG9Tb3VyY2UoXG4gICAgICB7XG4gICAgICAgIGtleTogRVNvdXJjZUtleS5PQkpFQ1QsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgICBrZXk6IFwiQVBJX0NPTkZJR1wiLFxuICAgICAgICAgICAgcGF0aDogXCJyZXF1ZXN0LmJvZHkuaXNfdmFsaWRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNvdXJjZVZhbHVlXG4gICAgKTtcblxuICAgIG9iamVjdC5BUElfQ09ORklHID0gc291cmNlLm9iamVjdC5BUElfQ09ORklHO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBzZXRGaWVsZFZhbGlkaXR5KGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICBjb25zdCBzb3VyY2VWYWx1ZSA9IGFjdGlvbi5wcm9wcy52YWxpZDtcblxuICAgIHNvdXJjZS5zZXRWYWx1ZVRvU291cmNlKFxuICAgICAge1xuICAgICAgICBrZXk6IEVTb3VyY2VLZXkuT0JKRUNULFxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAga2V5OiBcIkZJRUxEX0NPTkZJR1wiLFxuICAgICAgICAgICAgcGF0aDogXCJ2YWxpZGF0aW9uLmlzX3ZhbGlkXCJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzb3VyY2VWYWx1ZVxuICAgICk7XG5cbiAgICBvYmplY3QuRklFTERfQ09ORklHID0gc291cmNlLm9iamVjdC5GSUVMRF9DT05GSUc7XG4gICAgb2JqZWN0LkFQSV9DT05GSUcgPSBzb3VyY2Uub2JqZWN0LkFQSV9DT05GSUc7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHNldERyb3Bkb3duT3B0aW9ucyhhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc291cmNlID0gbmV3IFNvdXJjZShvYmplY3QpO1xuXG4gICAgbGV0IHNvdXJjZVZhbHVlID0gYXdhaXQgc291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShcbiAgICAgIGFjdGlvbi5wcm9wcy52YWx1ZS5zb3VyY2VcbiAgICApO1xuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3Rpb24ucHJvcHMsIFwib3B0aW9uc1wiKSkge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcy5vcHRpb25zLCBcImFwcGVuZFRvUGF0aFwiKSkge1xuICAgICAgICBjb25zdCBhcHBlbmRUb1BhdGggPSBhd2FpdCBzb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKFxuICAgICAgICAgIGFjdGlvbi5wcm9wcy5vcHRpb25zLmFwcGVuZFRvUGF0aC5zb3VyY2VcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGlzTm90RW1wdHlWYWx1ZShhcHBlbmRUb1BhdGgpKSB7XG4gICAgICAgICAgY29uc3QgYXBwZW5kVG9QYXRoU3RyID0gcmVwbGFjZVN0cmluZyhcbiAgICAgICAgICAgIGFwcGVuZFRvUGF0aC5tYXRjaChcbiAgICAgICAgICAgICAgYCR7YWN0aW9uLnByb3BzLm9wdGlvbnMuYXBwZW5kVG9QYXRoLmZpbHRlclNvdXJjZVZhbHVlfWBcbiAgICAgICAgICAgIClbMF0sXG4gICAgICAgICAgICBcIlteYS16QS1aMC05X11cIixcbiAgICAgICAgICAgIFwiX1wiXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IG9wdGlvbnNQYXRoID0gYCR7YWN0aW9uLnByb3BzLm9wdGlvbnMucGF0aH0ke2FwcGVuZFRvUGF0aFN0cn1gO1xuICAgICAgICAgIHNvdXJjZVZhbHVlID0gZ2V0T2JqZWN0VmFsdWVGcm9tUGF0aChzb3VyY2VWYWx1ZSwgb3B0aW9uc1BhdGgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb3VyY2VWYWx1ZSA9IGdldE9iamVjdFZhbHVlRnJvbVBhdGgoXG4gICAgICAgICAgc291cmNlVmFsdWUsXG4gICAgICAgICAgYWN0aW9uLnByb3BzLm9wdGlvbnMucGF0aFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3VyY2Uuc2V0VmFsdWVUb1NvdXJjZShhY3Rpb24ucHJvcHMudmFsdWUuZGVzdGluYXRpb24sIHNvdXJjZVZhbHVlKTtcblxuICAgIG9iamVjdC5GSUVMRF9DT05GSUcgPSBzb3VyY2Uub2JqZWN0LkZJRUxEX0NPTkZJRztcbiAgICB0aGlzLmZvcm1EYXRhID0gc291cmNlLm9iamVjdC5GT1JNX0RBVEE7XG4gICAgdGhpcy5hbGxGb3Jtc0RhdGEgPSBzb3VyY2Uub2JqZWN0LkFMTF9GT1JNU19EQVRBO1xuICAgIHRoaXMucHJldmlvdXNGb3JtRGF0YSA9IHNvdXJjZS5vYmplY3QuUFJFVklPVVNfRk9STV9EQVRBO1xuICAgIHRoaXMuZXh0cmFEYXRhID0gc291cmNlLm9iamVjdC5FWFRSQV9EQVRBO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBhcGlDYWxsKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPFRBcGk+IHtcbiAgICBsZXQgYXBpQ29uZmlnID0gdGhpcy5mb3JtQ29uZmlnLmFwaXNbYWN0aW9uLnByb3BzLmZvcm1BcGlLZXldO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmhhbmRsZUFwaUNhbGwoYXBpQ29uZmlnKTtcblxuICAgIGFwaUNvbmZpZyA9IHJlc3BvbnNlLmFwaTtcblxuICAgIHRoaXMuZm9ybUNvbmZpZyA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgdGhpcy5mb3JtQ29uZmlnLFxuICAgICAgYGFwaXMuJHthY3Rpb24ucHJvcHMuZm9ybUFwaUtleX1gLFxuICAgICAgYXBpQ29uZmlnXG4gICAgKTtcblxuICAgIHRoaXMuZm9ybURhdGEgPSBtZXJnZU9iamVjdHModGhpcy5mb3JtRGF0YSwge1xuICAgICAgW2FjdGlvbi5wcm9wcy5mb3JtQXBpS2V5XTogYXBpQ29uZmlnLnJlc3BvbnNlLnZhbHVlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXBpQ29uZmlnO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBmaWVsZEFwaUNhbGwoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc2hvd0FwaUxvYWRlcigpO1xuXG4gICAgY29uc3QgYXBpQ29uZmlnID0gYXdhaXQgdGhpcy5hcGlDYWxsKGFjdGlvbiwgb2JqZWN0KTtcblxuICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBmaWVsZE11bHRpcGxlQXBpQ2FsbHMoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGVudHJ5cG9pbnRBcGlLZXkgPSBhY3Rpb24ucHJvcHMuYXBpS2V5O1xuICAgIGxldCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcbiAgICBjb25zdCB7IGVuZHBvaW50cyB9ID0gZmllbGQuYXBpO1xuICAgIGNvbnN0IG5leHRBcGlJbmRleCA9IGVuZHBvaW50cy5maW5kSW5kZXgoXG4gICAgICAoYXBpOiBUQXBpRW5kcG9pbnQpID0+IGFwaS5hcGlLZXkgPT09IGVudHJ5cG9pbnRBcGlLZXlcbiAgICApO1xuICAgIGNvbnN0IGFwaUNvbmZpZyA9IGVuZHBvaW50c1tuZXh0QXBpSW5kZXhdO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmhhbmRsZUZpZWxkQXBpQ2FsbChmaWVsZCwgYXBpQ29uZmlnKTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xuICAgIGZpZWxkID0gcmVzcG9uc2UuZmllbGQ7XG4gICAgZmllbGQuYXBpLmVuZHBvaW50c1tuZXh0QXBpSW5kZXhdID0gcmVzcG9uc2UuYXBpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBmaWVsZE11bHRpcGxlQXBpQ2FsbHNFbmQoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBhY3Rpb24ucHJvcHMuZmllbGRLZXkpO1xuICAgIGxldCBtdWx0aXBsZUFwaUNhbGxSZXNwb25zZXMgPSB7fTtcbiAgICBmaWVsZC5hcGkuZW5kcG9pbnRzLmZvckVhY2goKGFwaTogVEFwaUVuZHBvaW50KSA9PiB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYXBpLnJlc3BvbnNlLCBcInZhbHVlXCIpKVxuICAgICAgICBtdWx0aXBsZUFwaUNhbGxSZXNwb25zZXMgPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgICBtdWx0aXBsZUFwaUNhbGxSZXNwb25zZXMsXG4gICAgICAgICAgYCR7YXBpLmFwaUtleX1gLFxuICAgICAgICAgIGFwaS5yZXNwb25zZS52YWx1ZVxuICAgICAgICApO1xuICAgIH0pO1xuICAgIHRoaXMuZm9ybURhdGEgPSB7XG4gICAgICAuLi50aGlzLmZvcm1EYXRhLFxuICAgICAgW2ZpZWxkLmtleV06IG11bHRpcGxlQXBpQ2FsbFJlc3BvbnNlc1xuICAgIH07XG4gICAgdGhpcy5wYXRjaEZvcm1Hcm91cCh0aGlzLmZvcm1EYXRhKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgdGFza0FwaUNhbGwoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc2hvd0FwaUxvYWRlcigpO1xuXG4gICAgY29uc3QgYXBpQ29uZmlnID0gYXdhaXQgdGhpcy5hcGlDYWxsKGFjdGlvbiwgb2JqZWN0KTtcblxuICAgIHRoaXMudGFza0RhdGEgPSBtZXJnZU9iamVjdHModGhpcy50YXNrRGF0YSwge1xuICAgICAgW2FjdGlvbi5wcm9wcy5mb3JtQXBpS2V5XTogYXBpQ29uZmlnLnJlc3BvbnNlLnZhbHVlXG4gICAgfSk7XG5cbiAgICB0aGlzLndhaXRpbmdGb3JDaGFuZ2VzID0gZmFsc2U7XG5cbiAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgdGFza011bHRpcGxlQXBpQ2FsbHMoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc2hvd0FwaUxvYWRlcigpO1xuXG4gICAgY29uc3QgbXVsdGlwbGVBcGlDb25maWcgPSB0aGlzLmZvcm1Db25maWcuYXBpc1thY3Rpb24ucHJvcHMuZm9ybUFwaUtleV07XG5cbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aW9uLnByb3BzLCBcImFwaUtleVwiKSkge1xuICAgICAgY29uc3QgZW50cnlwb2ludEFwaUtleSA9IGFjdGlvbi5wcm9wcy5hcGlLZXk7XG4gICAgICBjb25zdCB7IGVuZHBvaW50cyB9ID0gbXVsdGlwbGVBcGlDb25maWc7XG4gICAgICBjb25zdCBuZXh0QXBpSW5kZXggPSBlbmRwb2ludHMuZmluZEluZGV4KFxuICAgICAgICAoYXBpOiBUQXBpRW5kcG9pbnQpID0+IGFwaS5hcGlLZXkgPT09IGVudHJ5cG9pbnRBcGlLZXlcbiAgICAgICk7XG4gICAgICBjb25zdCBhcGlDb25maWcgPSBlbmRwb2ludHNbbmV4dEFwaUluZGV4XTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmhhbmRsZUFwaUNhbGwoYXBpQ29uZmlnKTtcblxuICAgICAgbXVsdGlwbGVBcGlDb25maWcuZW5kcG9pbnRzW25leHRBcGlJbmRleF0gPSByZXNwb25zZS5hcGk7XG5cbiAgICAgIHRoaXMuZm9ybUNvbmZpZyA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgICB0aGlzLmZvcm1Db25maWcsXG4gICAgICAgIGBhcGlzLiR7YWN0aW9uLnByb3BzLmZvcm1BcGlLZXl9YCxcbiAgICAgICAgbXVsdGlwbGVBcGlDb25maWdcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBhcGlzID0gbmV3IEFwaXMoXG4gICAgICAgIHtcbiAgICAgICAgICBGT1JNX0NPTkZJRzogdGhpcy5mb3JtQ29uZmlnLFxuICAgICAgICAgIEFQSV9DT05GSUc6IG11bHRpcGxlQXBpQ29uZmlnLFxuICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICB9LFxuICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgKTtcblxuICAgICAgYXdhaXQgYXBpcy5jYWxsTmV4dEFwaShtdWx0aXBsZUFwaUNvbmZpZy5lbnRyeXBvaW50KTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHRhc2tNdWx0aXBsZUFwaUNhbGxzRW5kKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtdWx0aXBsZUFwaUNvbmZpZyA9IHRoaXMuZm9ybUNvbmZpZy5hcGlzW2FjdGlvbi5wcm9wcy5mb3JtQXBpS2V5XTtcblxuICAgIGxldCBtdWx0aXBsZUFwaUNhbGxSZXNwb25zZXMgPSB7fTtcbiAgICBtdWx0aXBsZUFwaUNvbmZpZy5lbmRwb2ludHMuZm9yRWFjaCgoYXBpOiBUQXBpRW5kcG9pbnQpID0+IHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhcGkucmVzcG9uc2UsIFwidmFsdWVcIikpXG4gICAgICAgIG11bHRpcGxlQXBpQ2FsbFJlc3BvbnNlcyA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgICAgIG11bHRpcGxlQXBpQ2FsbFJlc3BvbnNlcyxcbiAgICAgICAgICBgJHthcGkuYXBpS2V5fWAsXG4gICAgICAgICAgYXBpLnJlc3BvbnNlLnZhbHVlXG4gICAgICAgICk7XG4gICAgfSk7XG4gICAgdGhpcy50YXNrRGF0YSA9IHtcbiAgICAgIC4uLnRoaXMudGFza0RhdGEsXG4gICAgICBbYWN0aW9uLnByb3BzLmZvcm1BcGlLZXldOiBtdWx0aXBsZUFwaUNhbGxSZXNwb25zZXNcbiAgICB9O1xuXG4gICAgdGhpcy53YWl0aW5nRm9yQ2hhbmdlcyA9IGZhbHNlO1xuXG4gICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gIH1cblxuICBkaWFsb2dSZWY6IGFueSA9IHVuZGVmaW5lZDtcblxuICBAbG9nTWV0aG9kXG4gIGRpYWxvZ1Nob3cob3B0aW9uczogYW55KSB7XG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0RJQUxPR19TSE9XLCB7fSk7XG5cbiAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZVxuICAgICAgLm9wZW4ob3B0aW9ucz8uaHRtbCwge1xuICAgICAgICBjbG9zZWFibGU6IHRydWUsXG4gICAgICAgIGRpc21pc3NpYmxlOiB0cnVlLFxuICAgICAgICBsYWJlbDogb3B0aW9ucz8ubGFiZWwsXG4gICAgICAgIHNpemU6IG9wdGlvbnM/LnNpemUgPz8gXCJzXCIsXG4gICAgICAgIGRhdGE6IHsgYnV0dG9uOiBvcHRpb25zPy5idXR0b24gfVxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19ESUFMT0dfRVJST1IsIHt9KTtcbiAgICAgICAgfSxcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRElBTE9HX0hJREUsIHt9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGRpYWxvZ0hpZGUoKSB7XG4gICAgaWYgKHRoaXMuZGlhbG9nUmVmKSB7XG4gICAgICB0aGlzLmRpYWxvZ1JlZi5jb21wbGV0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgcmVkaXJlY3RUb1VybChhY3Rpb246IFRBY3Rpb24pIHtcbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aW9uLnByb3BzLCBcInVybFwiKSkge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcy51cmwsIFwidXJsXCIpKSB7XG4gICAgICAgIGxldCB0aW1lb3V0ID0gMjAwMDtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcy51cmwsIFwidGltZW91dFwiKSAmJlxuICAgICAgICAgIHR5cGVvZiBhY3Rpb24ucHJvcHMudXJsLnRpbWVvdXQgPT09IFwibnVtYmVyXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICAgICAgdGltZW91dCA9IGFjdGlvbi5wcm9wcy51cmwudGltZW91dDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19SRURJUkVDVF9VUkwsIHtcbiAgICAgICAgICB0aW1lb3V0LFxuICAgICAgICAgIHJlZGlyZWN0X3VybDogYWN0aW9uLnByb3BzLnVybFxuICAgICAgICB9KTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aW9uLnByb3BzLnVybCwgXCJ0YXJnZXRcIikpIHtcbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKGFjdGlvbi5wcm9wcy51cmwudXJsLCBhY3Rpb24ucHJvcHMudXJsLnRhcmdldCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKGFjdGlvbi5wcm9wcy51cmwudXJsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHRpbWVvdXQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgcGF0Y2hGaWVsZENvbnRyb2xWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2tleV0ucGF0Y2hWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBzZXRGaWVsZENvbnRyb2xWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2tleV0uc2V0VmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgcGF0Y2hGb3JtR3JvdXAoZm9ybURhdGE6IGFueSkge1xuICAgIGlmIChpc1VuZGVmaW5lZCh0aGlzLmZvcm1Hcm91cCkgfHwgaXNVbmRlZmluZWQoZm9ybURhdGEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGZvcm1Hcm91cCBvciBmb3JtRGF0YSBpcyAndW5kZWZpbmVkJy5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZm9ybURhdGFJbkt3aWtVSUZvcm1hdCA9IHt9O1xuICAgICAgZm9yIChjb25zdCBmaWVsZEtleSBpbiBmb3JtRGF0YSkge1xuICAgICAgICBpZiAoaXNOb3RFbXB0eVZhbHVlKGZpZWxkS2V5KSkge1xuICAgICAgICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmaWVsZCkgJiYgIWlzTnVsbChmaWVsZCkpIHtcbiAgICAgICAgICAgIGZvcm1EYXRhSW5Ld2lrVUlGb3JtYXRbZmllbGRLZXldID1cbiAgICAgICAgICAgICAgY29udmVydEZvcm1GaWVsZFZhbHVlVG9Ld2lrVUlGb3JtYXQoZmllbGQsIGZvcm1EYXRhW2ZpZWxkS2V5XSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKGZvcm1EYXRhSW5Ld2lrVUlGb3JtYXQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGlzRmllbGRWYWxpZChmaWVsZEtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkS2V5XS52YWxpZDtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaXNGaWVsZEVuYWJsZWQoZmllbGRLZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZEtleV0uZW5hYmxlZDtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZ2V0Rm9ybUdyb3VwUmF3VmFsdWVzKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBzaG93UHJldmlldyhwcmV2aWV3UHJvcGVydGllczogYW55KTogdm9pZCB7XG4gICAgdGhpcy5wcmV2aWV3UHJvcGVydGllcyA9IG1lcmdlT2JqZWN0cyhcbiAgICAgIHRoaXMucHJldmlld1Byb3BlcnRpZXMsXG4gICAgICBwcmV2aWV3UHJvcGVydGllc1xuICAgICk7XG5cbiAgICBpZiAoXG4gICAgICBpc0VtcHR5VmFsdWUodGhpcy5wcmV2aWV3UHJvcGVydGllcy5pZnJhbWUuc3JjKSAmJlxuICAgICAgaXNFbXB0eVZhbHVlKHRoaXMucHJldmlld1Byb3BlcnRpZXMuaHRtbC5iZWZvcmUpICYmXG4gICAgICBpc0VtcHR5VmFsdWUodGhpcy5wcmV2aWV3UHJvcGVydGllcy5odG1sLmFmdGVyKVxuICAgICkge1xuICAgICAgdGhpcy5wcmV2aWV3UHJvcGVydGllcy51bmF2YWlsYWJsZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJldmlld1Byb3BlcnRpZXMudW5hdmFpbGFibGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNldFByZXZpZXdQcm9wZXJ0aWVzID0gKCkgPT4ge1xuICAgICAgdGhpcy5wcmV2aWV3UHJvcGVydGllcyA9IHtcbiAgICAgICAgaHRtbDoge1xuICAgICAgICAgIGJlZm9yZTogXCJcIixcbiAgICAgICAgICBiZWZvcmVTdHlsZXM6IFwiXCIsXG4gICAgICAgICAgYWZ0ZXI6IFwiXCIsXG4gICAgICAgICAgYWZ0ZXJTdHlsZXM6IFwiXCJcbiAgICAgICAgfSxcbiAgICAgICAgaWZyYW1lOiB7XG4gICAgICAgICAgc3JjOiBcIlwiLFxuICAgICAgICAgIHRpdGxlOiBcIlwiXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IFwiZGlhbG9nXCIsXG4gICAgICAgIHBvcHVwRm9ybUtleTogXCJcIixcbiAgICAgICAgdGl0bGU6IFwiXCIsXG4gICAgICAgIHNpemU6IFwiYXV0b1wiLFxuICAgICAgICB1bmF2YWlsYWJsZTogZmFsc2VcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHNob3dEaWFsb2cgPSAoKSA9PiB7XG4gICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRElBTE9HX1NIT1csIHt9KTtcblxuICAgICAgdGhpcy5wcmV2aWV3RGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlXG4gICAgICAgIC5vcGVuKHRoaXMuZGlhbG9nLCB7XG4gICAgICAgICAgY2xvc2VhYmxlOiB0cnVlLFxuICAgICAgICAgIGRpc21pc3NpYmxlOiB0cnVlLFxuICAgICAgICAgIHNpemU6IHRoaXMucHJldmlld1Byb3BlcnRpZXM/LnNpemUgfHwgXCJhdXRvXCIsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJldmlld0RpYWxvZ1JlZi5jb21wbGV0ZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19ESUFMT0dfRVJST1IsIHt9KTtcblxuICAgICAgICAgICAgcmVzZXRQcmV2aWV3UHJvcGVydGllcygpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19ESUFMT0dfSElERSwge30pO1xuXG4gICAgICAgICAgICByZXNldFByZXZpZXdQcm9wZXJ0aWVzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2hvd1ByZXZpZXcgPSAoKSA9PiB7XG4gICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fUFJFVklFV19TSE9XLCB7fSk7XG5cbiAgICAgIHRoaXMucHJldmlld0RpYWxvZ1JlZiA9IHRoaXMucHJldmlld0RpYWxvZ1NlcnZpY2VcbiAgICAgICAgLm9wZW4odGhpcy5wcmV2aWV3IHx8IFwiXCIpXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fUFJFVklFV19FUlJPUiwge30pO1xuXG4gICAgICAgICAgICByZXNldFByZXZpZXdQcm9wZXJ0aWVzKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX1BSRVZJRVdfSElERSwge30pO1xuXG4gICAgICAgICAgICByZXNldFByZXZpZXdQcm9wZXJ0aWVzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgc3dpdGNoICh0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLnR5cGUpIHtcbiAgICAgIGNhc2UgXCJkaWFsb2dcIjpcbiAgICAgICAgc2hvd0RpYWxvZygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJwb3B1cFwiOlxuICAgICAgICBzaG93UHJldmlldygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHNob3dEaWFsb2coKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBzaG93RXJyb3JQcmV2aWV3KHByZXZpZXdQcm9wZXJ0aWVzOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dQcmV2aWV3KHtcbiAgICAgIGh0bWw6IHtcbiAgICAgICAgYWZ0ZXI6IGA8ZGl2IHN0eWxlPVwicGFkZGluZy1ib3R0b206MC4yNXJlbTtwYWRkaW5nLXRvcDogMC4yNXJlbTtwb3NpdGlvbjogYWJzb2x1dGU7bWFyZ2luLXRvcDogY2FsYyg1MHZoKTtmb250LXNpemU6IDEuNHJlbTtiYWNrZ3JvdW5kOiB3aGl0ZTtwYWRkaW5nOiAycmVtO2JvcmRlci1yYWRpdXM6IDFyZW07Ym94LXNoYWRvdzogMHB4IDBweCAxMHB4IC0zcHggYmxhY2s7b3ZlcmZsb3c6IGF1dG87aGVpZ2h0OiBmaXQtY29udGVudDttYXgtaGVpZ2h0OiA5MHZoOyB3aWR0aDogNzB2dzsgbWFyZ2luLWxlZnQ6IGNhbGMoMTV2dyk7IGxpbmUtaGVpZ2h0OiAycmVtO1wiPkVycm9yOiAke3ByZXZpZXdQcm9wZXJ0aWVzLm1lc3NhZ2UubWVzc2FnZX08L2Rpdj5gXG4gICAgICB9LFxuICAgICAgdHlwZTogXCJwb3B1cFwiXG4gICAgfSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHNob3dQb3B1cEZvcm0oXG4gICAgcG9wdXBGb3JtS2V5OiBzdHJpbmcsXG4gICAgcG9wdXBUeXBlOiBcIkRJQUxPR1wiIHwgXCJQT1BVUFwiID0gXCJESUFMT0dcIlxuICApOiB2b2lkIHtcbiAgICBjb25zdCBwb3B1cEZvcm1Db25maWcgPSB0aGlzLmZvcm1Db25maWcucG9wdXBGb3Jtc1twb3B1cEZvcm1LZXldO1xuXG4gICAgdGhpcy5vbkFjdGlvblNob3dQb3B1cEZvcm0uZW1pdCh7XG4gICAgICBhY3RpdmVGb3JtRGF0YTogbWVyZ2VPYmplY3RzKHRoaXMuZm9ybURhdGEsIHRoaXMudGFza0RhdGEpLFxuICAgICAgcG9wdXBGb3JtQ29uZmlnLFxuICAgICAgcG9wdXBUeXBlXG4gICAgfSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFsZXJ0U2hvdyh0eXBlOiBUdWlOb3RpZmljYXRpb24sIG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BTEVSVF9TSE9XLCB7XG4gICAgICBhbGVydF9tZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgYWxlcnRfdHlwZTogdHlwZVxuICAgIH0pO1xuXG4gICAgdGhpcy5hbGVydFNlcnZpY2VcbiAgICAgIC5vcGVuKGAke21lc3NhZ2V9YCwge1xuICAgICAgICBzdGF0dXM6XG4gICAgICAgICAgdHlwZSA9PT0gXCJlcnJvclwiXG4gICAgICAgICAgICA/IFR1aU5vdGlmaWNhdGlvbi5FcnJvclxuICAgICAgICAgICAgOiB0eXBlID09PSBcIndhcm5pbmdcIlxuICAgICAgICAgICAgICA/IFR1aU5vdGlmaWNhdGlvbi5XYXJuaW5nXG4gICAgICAgICAgICAgIDogdHlwZSA9PT0gXCJzdWNjZXNzXCJcbiAgICAgICAgICAgICAgICA/IFR1aU5vdGlmaWNhdGlvbi5TdWNjZXNzXG4gICAgICAgICAgICAgICAgOiBUdWlOb3RpZmljYXRpb24uSW5mb1xuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BTEVSVF9FUlJPUiwge30pO1xuICAgICAgICB9LFxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BTEVSVF9ISURFLCB7fSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyB0YWtlQWN0aW9uT25GaWVsZEdyb3VwKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIGJlbG93IGNvZGUgaXMgY3VycmVudGx5IGNvbW1lbnRlZCBiZWNhdXNlIG5vdCBhbGwgYWN0aW9ucyBuZWVkIHRvIGJlIGxvZ2dlZCBhdCBiYWNrZW5kLlxuICAgICAqIFdpbGwgbG9vayBsYXRlciBpbnRvIHdoZXJlIG9ubHkgc3BlY2lmaWMgYWN0aW9ucyBuZWVkcyB0byBiZSBsb2dnZWQgb3IgYWxsLlxuICAgICAqIEN1cnJlbnRseSBsb2dzIGFyZSBzZW50IGZyb20gd2l0aGluZyB0aGUgYWN0aW9uJ3Mgc3BlY2lmaWMgbWV0aG9kcy5cbiAgICAgKiBDb2RlIC1cbiAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0FDVElPTl9FWEVDVVRFX0dST1VQLCB7XG4gICAgICAgICAgYWN0aW9uX2tleTogYWN0aW9uLmtleSxcbiAgICAgICAgICAuLi4oYWN0aW9uLmlkICYmIHsgYWN0aW9uX2lkOiBhY3Rpb24uaWQgfSksXG4gICAgICAgICAgLi4uKGFjdGlvbi5wcm9wcy5ncm91cEtleSAmJiB7IGFjdGlvbl9pZDogYWN0aW9uLnByb3BzLmdyb3VwS2V5IH0pXG4gICAgICAgIH0pO1xuICAgICovXG5cbiAgICBzd2l0Y2ggKGFjdGlvbi5rZXkpIHtcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9HUk9VUF9ISURFOlxuICAgICAgICB0aGlzLmZpZWxkR3JvdXBIaWRlKGFjdGlvbi5wcm9wcy5ncm91cEtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0dST1VQX1NIT1c6XG4gICAgICAgIHRoaXMuZmllbGRHcm91cFNob3coYWN0aW9uLnByb3BzLmdyb3VwS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfR1JPVVBfRU5BQkxFOlxuICAgICAgICB0aGlzLmZpZWxkR3JvdXBFbmFibGUoYWN0aW9uLnByb3BzLmdyb3VwS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfR1JPVVBfRElTQUJMRTpcbiAgICAgICAgdGhpcy5maWVsZEdyb3VwRGlzYWJsZShhY3Rpb24ucHJvcHMuZ3JvdXBLZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9HUk9VUF9SRVNFVDpcbiAgICAgICAgdGhpcy5maWVsZEdyb3VwUmVzZXQoYWN0aW9uLnByb3BzLmdyb3VwS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfR1JPVVBfU0hPV19BUElfTE9BREVSOlxuICAgICAgICB0aGlzLmZpZWxkR3JvdXBEaXNhYmxlKGFjdGlvbi5wcm9wcy5ncm91cEtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0dST1VQX0hJREVfQVBJX0xPQURFUjpcbiAgICAgICAgdGhpcy5maWVsZEdyb3VwRGlzYWJsZShhY3Rpb24ucHJvcHMuZ3JvdXBLZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgdGFrZUFjdGlvbihhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KSB7XG4gICAgLyoqXG4gICAgICogVGhpcyBiZWxvdyBjb2RlIGlzIGN1cnJlbnRseSBjb21tZW50ZWQgYmVjYXVzZSBub3QgYWxsIGFjdGlvbnMgbmVlZCB0byBiZSBsb2dnZWQgYXQgYmFja2VuZC5cbiAgICAgKiBXaWxsIGxvb2sgbGF0ZXIgaW50byB3aGVyZSBvbmx5IHNwZWNpZmljIGFjdGlvbnMgbmVlZHMgdG8gYmUgbG9nZ2VkIG9yIGFsbC5cbiAgICAgKiBDdXJyZW50bHkgbG9ncyBhcmUgc2VudCBmcm9tIHdpdGhpbmcgdGhlIGFjdGlvbidzIHNwZWNpZmljIG1ldGhvZHMuXG4gICAgICogQ29kZSAtXG4gICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BQ1RJT05fRVhFQ1VURSwge1xuICAgICAgICAgIGFjdGlvbl9rZXk6IGFjdGlvbi5rZXksXG4gICAgICAgICAgLi4uKGFjdGlvbi5pZCAmJiB7IGFjdGlvbl9pZDogYWN0aW9uLmlkIH0pXG4gICAgICAgIH0pO1xuICAgICovXG5cbiAgICBzd2l0Y2ggKGFjdGlvbi5rZXkpIHtcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9ISURFOlxuICAgICAgICB0aGlzLmZpZWxkSGlkZShhY3Rpb24ucHJvcHMuZmllbGRLZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9TSE9XOlxuICAgICAgICB0aGlzLmZpZWxkU2hvdyhhY3Rpb24ucHJvcHMuZmllbGRLZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9ESVNBQkxFOlxuICAgICAgICB0aGlzLmZpZWxkRGlzYWJsZShhY3Rpb24ucHJvcHMuZmllbGRLZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9FTkFCTEU6XG4gICAgICAgIHRoaXMuZmllbGRFbmFibGUoYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfU0hPV19BUElfTE9BREVSOlxuICAgICAgICB0aGlzLmZpZWxkRW5hYmxlKGFjdGlvbi5wcm9wcy5maWVsZEtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0hJREVfQVBJX0xPQURFUjpcbiAgICAgICAgdGhpcy5maWVsZEVuYWJsZShhY3Rpb24ucHJvcHMuZmllbGRLZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9SRVNFVDpcbiAgICAgICAgdGhpcy5maWVsZFJlc2V0KGFjdGlvbi5wcm9wcy5maWVsZEtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0VSUk9SX1NIT1c6XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3Rpb24ucHJvcHMubWVzc2FnZSwgXCJzb3VyY2VcIikpIHtcbiAgICAgICAgICBjb25zdCBmaWVsZEVycm9yU2hvd1NvdXJjZSA9IG5ldyBTb3VyY2Uob2JqZWN0KTtcblxuICAgICAgICAgIGxldCBmaWVsZEVycm9yU2hvd1NvdXJjZVZhbHVlID1cbiAgICAgICAgICAgIGF3YWl0IGZpZWxkRXJyb3JTaG93U291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShcbiAgICAgICAgICAgICAgYWN0aW9uLnByb3BzLm1lc3NhZ2Uuc291cmNlXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGZpZWxkRXJyb3JTaG93U291cmNlVmFsdWUgPT09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgICAgIHR5cGVvZiBmaWVsZEVycm9yU2hvd1NvdXJjZVZhbHVlID09PSBcIm51bWJlclwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmaWVsZEVycm9yU2hvd1NvdXJjZVZhbHVlID0gU3RyaW5nKGZpZWxkRXJyb3JTaG93U291cmNlVmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWVsZEVycm9yU2hvd1NvdXJjZVZhbHVlID0gXCJcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhY3Rpb24gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIFwicHJvcHMubWVzc2FnZS5tZXNzYWdlXCIsXG4gICAgICAgICAgICBmaWVsZEVycm9yU2hvd1NvdXJjZVZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBhY3Rpb24ucHJvcHMubWVzc2FnZS5tZXNzYWdlID0gdXBkYXRlTGFuZ3VhZ2UoXG4gICAgICAgICAgYWN0aW9uLnByb3BzLm1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgICBnZXRMYW5ndWFnZSgpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZmllbGRFcnJvclNob3coYWN0aW9uLnByb3BzLmZpZWxkS2V5LCBhY3Rpb24ucHJvcHMubWVzc2FnZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0VSUk9SX0hJREU6XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3Rpb24ucHJvcHMubWVzc2FnZSwgXCJzb3VyY2VcIikpIHtcbiAgICAgICAgICBjb25zdCBmaWVsZEVycm9ySGlkZVNvdXJjZSA9IG5ldyBTb3VyY2Uob2JqZWN0KTtcblxuICAgICAgICAgIGxldCBmaWVsZEVycm9ySGlkZVNvdXJjZVZhbHVlID1cbiAgICAgICAgICAgIGF3YWl0IGZpZWxkRXJyb3JIaWRlU291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShcbiAgICAgICAgICAgICAgYWN0aW9uLnByb3BzLm1lc3NhZ2Uuc291cmNlXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGZpZWxkRXJyb3JIaWRlU291cmNlVmFsdWUgPT09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgICAgIHR5cGVvZiBmaWVsZEVycm9ySGlkZVNvdXJjZVZhbHVlID09PSBcIm51bWJlclwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmaWVsZEVycm9ySGlkZVNvdXJjZVZhbHVlID0gU3RyaW5nKGZpZWxkRXJyb3JIaWRlU291cmNlVmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWVsZEVycm9ySGlkZVNvdXJjZVZhbHVlID0gXCJcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhY3Rpb24gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIFwicHJvcHMubWVzc2FnZS5tZXNzYWdlXCIsXG4gICAgICAgICAgICBmaWVsZEVycm9ySGlkZVNvdXJjZVZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpZWxkRXJyb3JIaWRlKGFjdGlvbi5wcm9wcy5maWVsZEtleSwgYWN0aW9uLnByb3BzLm1lc3NhZ2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9NRVNTQUdFX1NIT1c6XG4gICAgICAgIHRoaXMuZmllbGRNZXNzYWdlU2hvdyhhY3Rpb24ucHJvcHMuZmllbGRLZXksIGFjdGlvbi5wcm9wcy5tZXNzYWdlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfTUVTU0FHRVNfSElERTpcbiAgICAgICAgdGhpcy5maWVsZE1lc3NhZ2VIaWRlKGFjdGlvbi5wcm9wcy5maWVsZEtleSwgYWN0aW9uLnByb3BzLm1lc3NhZ2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9BUElfVElNRVJfTUVTU0FHRV9TSE9XOlxuICAgICAgICBhd2FpdCB0aGlzLmZpZWxkQXBpVGltZXJNZXNzYWdlU2hvdyhcbiAgICAgICAgICBhY3Rpb24ucHJvcHMuZmllbGRLZXksXG4gICAgICAgICAgYWN0aW9uLnByb3BzLnRpbWVyXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0FQSV9USU1FUl9NRVNTQUdFX0hJREU6XG4gICAgICAgIGF3YWl0IHRoaXMuZmllbGRBcGlUaW1lck1lc3NhZ2VIaWRlKGFjdGlvbi5wcm9wcy5maWVsZEtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNFVF9WQUxVRTpcbiAgICAgICAgYXdhaXQgdGhpcy5zZXRWYWx1ZShhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNFVF9GSUVMRF9ERUZBVUxUX1ZBTFVFOlxuICAgICAgICBhd2FpdCB0aGlzLnNldEZpZWxkRGVmYXVsdFZhbHVlKGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuU0VUX0FQSV9TVEFUVVM6XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0QXBpU3RhdHVzKGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuU0VUX0FQSV9IRUFERVJfVkFMVUU6XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0QXBpSGVhZGVyVmFsdWUoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5TRVRfQVBJX0hFQURFUl9WQUxJRElUWTpcbiAgICAgICAgYXdhaXQgdGhpcy5zZXRBcGlIZWFkZXJWYWxpZGl0eShhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNFVF9BUElfQk9EWV9WQUxVRTpcbiAgICAgICAgYXdhaXQgdGhpcy5zZXRBcGlCb2R5VmFsdWUoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5TRVRfQVBJX0JPRFlfVkFMSURJVFk6XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0QXBpQm9keVZhbGlkaXR5KGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuU0VUX0RST1BET1dOX09QVElPTlM6XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0RHJvcGRvd25PcHRpb25zKGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuU0VUX0ZJRUxEX1ZBTElESVRZOlxuICAgICAgICBhd2FpdCB0aGlzLnNldEZpZWxkVmFsaWRpdHkoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5IQU5ETEVfQ09OTkVDVEVEX0VMRU1FTlRTOlxuICAgICAgICB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRzKFxuICAgICAgICAgIHsga2V5OiBhY3Rpb24ucHJvcHMuZmllbGRLZXkgfSxcbiAgICAgICAgICBcIk9OX0FDVElPTlwiXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkFQSV9DQUxMOlxuICAgICAgICBhd2FpdCB0aGlzLmZpZWxkQXBpQ2FsbChhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkFQSV9DQUxMX01VTFRJUExFOlxuICAgICAgICBhd2FpdCB0aGlzLmZpZWxkTXVsdGlwbGVBcGlDYWxscyhhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkFQSV9DQUxMX01VTFRJUExFX0VORDpcbiAgICAgICAgYXdhaXQgdGhpcy5maWVsZE11bHRpcGxlQXBpQ2FsbHNFbmQoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5UQVNLX0FQSV9DQUxMOlxuICAgICAgICBhd2FpdCB0aGlzLnRhc2tBcGlDYWxsKGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuVEFTS19BUElfQ0FMTF9NVUxUSVBMRTpcbiAgICAgICAgYXdhaXQgdGhpcy50YXNrTXVsdGlwbGVBcGlDYWxscyhhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlRBU0tfQVBJX0NBTExfTVVMVElQTEVfRU5EOlxuICAgICAgICBhd2FpdCB0aGlzLnRhc2tNdWx0aXBsZUFwaUNhbGxzRW5kKGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuUkVESVJFQ1RfVE9fVVJMOlxuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aW9uLnByb3BzLnVybCwgXCJzb3VyY2VcIikpIHtcbiAgICAgICAgICBjb25zdCByZWRpcmVjdFRvVXJsU291cmNlID0gbmV3IFNvdXJjZShvYmplY3QpO1xuXG4gICAgICAgICAgbGV0IHJlZGlyZWN0VG9VcmxTb3VyY2VWYWx1ZSA9XG4gICAgICAgICAgICBhd2FpdCByZWRpcmVjdFRvVXJsU291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShcbiAgICAgICAgICAgICAgYWN0aW9uLnByb3BzLnVybC5zb3VyY2VcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoaXNFbXB0eVN0cmluZyhyZWRpcmVjdFRvVXJsU291cmNlVmFsdWUpKSB7XG4gICAgICAgICAgICByZWRpcmVjdFRvVXJsU291cmNlVmFsdWUgPSBcIlwiO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFjdGlvbiA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgXCJwcm9wcy51cmwudXJsXCIsXG4gICAgICAgICAgICByZWRpcmVjdFRvVXJsU291cmNlVmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVkaXJlY3RUb1VybChhY3Rpb24pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5QUkVWSUVXX0RJQUxPR19TSE9XOlxuICAgICAgICB0aGlzLnNob3dQcmV2aWV3KGFjdGlvbi5wcm9wcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlBSRVZJRVdfRVJST1JfU0hPVzpcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcy5tZXNzYWdlLCBcInNvdXJjZVwiKSkge1xuICAgICAgICAgIGNvbnN0IHByZXZpZXdFcnJvclNob3dTb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICAgICAgICBsZXQgcHJldmlld0Vycm9yU2hvd1NvdXJjZVZhbHVlID1cbiAgICAgICAgICAgIGF3YWl0IHByZXZpZXdFcnJvclNob3dTb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKFxuICAgICAgICAgICAgICBhY3Rpb24ucHJvcHMubWVzc2FnZS5zb3VyY2VcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgcHJldmlld0Vycm9yU2hvd1NvdXJjZVZhbHVlID09PSBcInN0cmluZ1wiIHx8XG4gICAgICAgICAgICB0eXBlb2YgcHJldmlld0Vycm9yU2hvd1NvdXJjZVZhbHVlID09PSBcIm51bWJlclwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwcmV2aWV3RXJyb3JTaG93U291cmNlVmFsdWUgPSBTdHJpbmcocHJldmlld0Vycm9yU2hvd1NvdXJjZVZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJldmlld0Vycm9yU2hvd1NvdXJjZVZhbHVlID0gXCJcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhY3Rpb24gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIFwicHJvcHMubWVzc2FnZS5tZXNzYWdlXCIsXG4gICAgICAgICAgICBwcmV2aWV3RXJyb3JTaG93U291cmNlVmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2hvd0Vycm9yUHJldmlldyhhY3Rpb24ucHJvcHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5QT1BVUF9GT1JNX1NIT1c6XG4gICAgICAgIHRoaXMuc2hvd1BvcHVwRm9ybShcbiAgICAgICAgICBhY3Rpb24ucHJvcHMucG9wdXBGb3JtS2V5LFxuICAgICAgICAgIGFjdGlvbi5wcm9wcz8ucG9wdXBUeXBlID8/IFwiRElBTE9HXCJcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuU1RPUF9XQUlUSU5HOlxuICAgICAgICB0aGlzLndhaXRpbmdGb3JDaGFuZ2VzID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNDUk9MTF9UT19GSUVMRDpcbiAgICAgICAgdGhpcy5oYW5kbGVPblNjcm9sbFRvRmllbGQoYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuTk9USUZJQ0FUSU9OX0VSUk9SX1NIT1c6XG4gICAgICAgIHRoaXMudG9nZ2xlRXJyb3JOb3RpZmljYXRpb24odHJ1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5Lk5PVElGSUNBVElPTl9FUlJPUl9ISURFOlxuICAgICAgICB0aGlzLnRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKGZhbHNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuUkVTVU1FX1RBU0tfRVhFQ1VUSU9OOlxuICAgICAgICB0aGlzLnN0b3BUYXNrRXhlY3V0aW9uID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNUT1BfVEFTS19FWEVDVVRJT046XG4gICAgICAgIHRoaXMuc3RvcFRhc2tFeGVjdXRpb24gPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5ESUFMT0dfU0hPVzpcbiAgICAgICAgdGhpcy5kaWFsb2dTaG93KHtcbiAgICAgICAgICBodG1sOiBhY3Rpb24ucHJvcHM/Lmh0bWwsXG4gICAgICAgICAgbGFiZWw6IGFjdGlvbi5wcm9wcz8ubGFiZWwsXG4gICAgICAgICAgc2l6ZTogYWN0aW9uLnByb3BzPy5zaXplLFxuICAgICAgICAgIGJ1dHRvbjogYWN0aW9uLnByb3BzPy5idXR0b25cbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkRJQUxPR19ISURFOlxuICAgICAgICB0aGlzLmRpYWxvZ0hpZGUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuU0FWRV9GT1JNOlxuICAgICAgICB0aGlzLmhhbmRsZU9uQ2xpY2tTYXZlRm9ybSh1bmRlZmluZWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5BTEVSVF9TSE9XOlxuICAgICAgICB0aGlzLmFsZXJ0U2hvdyhhY3Rpb24ucHJvcHMudHlwZSwgYWN0aW9uLnByb3BzLm1lc3NhZ2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5TRVRfSFRNTDpcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcy5tZXNzYWdlLCBcInNvdXJjZVwiKSkge1xuICAgICAgICAgIGNvbnN0IGZpZWxkSHRtbE1lc3NhZ2VTb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICAgICAgICBsZXQgZmllbGRIdG1sTWVzc2FnZVNvdXJjZVZhbHVlID1cbiAgICAgICAgICAgIGF3YWl0IGZpZWxkSHRtbE1lc3NhZ2VTb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKFxuICAgICAgICAgICAgICBhY3Rpb24ucHJvcHMubWVzc2FnZS5zb3VyY2VcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgZmllbGRIdG1sTWVzc2FnZVNvdXJjZVZhbHVlID09PSBcInN0cmluZ1wiIHx8XG4gICAgICAgICAgICB0eXBlb2YgZmllbGRIdG1sTWVzc2FnZVNvdXJjZVZhbHVlID09PSBcIm51bWJlclwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmaWVsZEh0bWxNZXNzYWdlU291cmNlVmFsdWUgPSBTdHJpbmcoZmllbGRIdG1sTWVzc2FnZVNvdXJjZVZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmllbGRIdG1sTWVzc2FnZVNvdXJjZVZhbHVlID0gXCJcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhY3Rpb24gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIFwicHJvcHMubWVzc2FnZS5tZXNzYWdlXCIsXG4gICAgICAgICAgICBmaWVsZEh0bWxNZXNzYWdlU291cmNlVmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGFjdGlvbi5wcm9wcy5tZXNzYWdlLm1lc3NhZ2UgPSB1cGRhdGVMYW5ndWFnZShcbiAgICAgICAgICBhY3Rpb24ucHJvcHMubWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICAgIGdldExhbmd1YWdlKClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXRIdG1sKGFjdGlvbi5wcm9wcy5maWVsZEtleSwgYWN0aW9uLnByb3BzLm1lc3NhZ2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImt3aWtpZC1mb3JtLWNvbnRhaW5lclwiXG4gICpuZ0lmPVwiIWxvYWRpbmdcIlxuPlxuICA8ZGl2XG4gICAgaWQ9XCJ1Zi1mb3JtLWZpZWxkcy1oZWFkZXItY29udGFpbmVyXCJcbiAgICAqbmdJZj1cIlxuICAgICAgIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyPy50aXRsZT8uaGlkZGVuIHx8XG4gICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXI/LmxvZ28/LmhpZGRlbiB8fFxuICAgICAgIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyPy5zdGVwcz8uaGlkZGVuIHx8XG4gICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXI/LmJhY2tCdXR0b24/LmhpZGRlblxuICAgIFwiXG4gID5cbiAgICA8aW1nXG4gICAgICBpZD1cInVmLWhlYWRlci1sb2dvXCJcbiAgICAgICpuZ0lmPVwiIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyPy5sb2dvPy5oaWRkZW4gJiYgaXNNb2JpbGVWaWV3XCJcbiAgICAgIFtzcmNdPVwiZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXI/LmxvZ28/LnNyY1wiXG4gICAgICBbYWx0XT1cImZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyPy5sb2dvPy5hbHRcIlxuICAgICAgW3N0eWxlXT1cIlxuICAgICAgICBmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlcj8ubG9nbz8uc3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcbiAgICAgIFwiXG4gICAgLz5cbiAgICA8ZGl2IGlkPVwidWYtZm9ybS1maWVsZHMtaGVhZGVyLW1haW5cIj5cbiAgICAgIDxkaXYgaWQ9XCJ1Zi1mb3JtLWZpZWxkcy1oZWFkZXItbGVmdFwiPlxuICAgICAgICA8a3dpa3VpLWJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXIuYmFja0J1dHRvbi5oaWRkZW4gJiYgaXNNb2JpbGVWaWV3XG4gICAgICAgICAgXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiYmFja0J1dHRvbi5kaXNhYmxlZFwiXG4gICAgICAgICAgW3Nob3dMb2FkZXJdPVwiYmFja0J1dHRvbi5zaG93TG9hZGVyXCJcbiAgICAgICAgICBhcHBlYXJhbmNlPVwibW9ub1wiXG4gICAgICAgICAgaWNvbj1cInR1aUljb25BcnJvd0xlZnRcIlxuICAgICAgICAgIHNoYXBlPVwicm91bmRlZFwiXG4gICAgICAgICAgKG9uQ2xpY2spPVwiXG4gICAgICAgICAgICBoYW5kbGVPbkNsaWNrR29CYWNrKFxuICAgICAgICAgICAgICAkZXZlbnQsXG4gICAgICAgICAgICAgIGZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyLmJhY2tCdXR0b24ubW9kZVxuICAgICAgICAgICAgKVxuICAgICAgICAgIFwiXG4gICAgICAgID48L2t3aWt1aS1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgaWQ9XCJ1Zi1mb3JtLWZpZWxkcy1oZWFkZXItcmlnaHRcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGlkPVwidWYtZm9ybS1maWVsZHMtdGl0bGVcIlxuICAgICAgICAgICpuZ0lmPVwiIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyLnRpdGxlLmhpZGRlblwiXG4gICAgICAgICAgPnt7IGZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyLnRpdGxlLmxhYmVsIH19PC9kaXZcbiAgICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgaWQ9XCJ1Zi1mb3JtLWZpZWxkcy1zdGVwc1wiXG4gICAgICAgICAgKm5nSWY9XCIhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXIuc3RlcHMuaGlkZGVuXCJcbiAgICAgICAgPlxuICAgICAgICAgIFN0ZXAge3sgZm9ybUNvbmZpZy5zZXF1ZW5jZU5vIH19IG9mIHt7IGZvcm1Db25maWcuZm9ybXNMaXN0TGVuZ3RoIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGhyXG4gICAgICAqbmdJZj1cIlxuICAgICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXIudGl0bGUuaGlkZGVuIHx8XG4gICAgICAgICFmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlci5zdGVwcy5oaWRkZW4gfHxcbiAgICAgICAgIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyLmJhY2tCdXR0b24uaGlkZGVuXG4gICAgICBcIlxuICAgIC8+XG4gIDwvZGl2PlxuICA8Zm9ybVxuICAgICNmb3JtRmllbGRDb250YWluZXJSZWZcbiAgICBjbGFzcz1cImt3aWtpZC1mb3JtIHNob3dcIlxuICAgIFtzdHlsZV09XCJmb3JtQ29uZmlnLnByb3BlcnRpZXM/Lm1haW4/LnN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdGb3I9XCJcbiAgICAgICAgbGV0IGZpZWxkIG9mIGZvcm1GaWVsZHM7XG4gICAgICAgIGxldCBpID0gaW5kZXg7XG4gICAgICAgIHRyYWNrQnk6IGdldFVuaXF1ZUlkZW50aWZpZXJcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZmllbGQudHlwZVwiPlxuICAgICAgICA8IS0tIEhUTUwgQ29udGVudCAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2h0bWwnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IFtpbm5lckh0bWxdPVwiZmllbGQuaHRtbCB8IGt3aWt1aVNhZmVIdG1sXCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIEZvcm0gVGl0bGUgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0aXRsZSdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgY2xhc3M9XCJ0aXRsZVwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAge3sgZmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGt3aWt1aS1idXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZD8ucmVzZXRcIlxuICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwid2hpdGVibG9ja1wiXG4gICAgICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5yZXNldEJ1dHRvbkxhYmVsID8/ICdSZXNldCdcIlxuICAgICAgICAgICAgICAob25DbGljayk9XCJoYW5kbGVPbkNsaWNrUmVzZXRGb3JtRmllbGRzKCRldmVudCwgZmllbGQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIEJ1dHRvbiAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2J1dHRvbidcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktYnV0dG9uXG4gICAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5hcHBlYXJhbmNlID8/ICdwcmltYXJ5J1wiXG4gICAgICAgICAgICAgIFtjbGFzc109XCJmaWVsZD8ucHJvcGVydGllcz8uY2xhc3NcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2ljb25dPVwiZmllbGQ/LnByb3BlcnRpZXM/Lmljb25cIlxuICAgICAgICAgICAgICBbaWNvblJpZ2h0XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5pY29uUmlnaHRcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQ/LmtleVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbc2hhcGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNoYXBlXCJcbiAgICAgICAgICAgICAgW3Nob3dMb2FkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmxvYWRpbmcgPz8gZmFsc2VcIlxuICAgICAgICAgICAgICBbc2l6ZV09XCJmaWVsZD8ucHJvcGVydGllcz8uc2l6ZVwiXG4gICAgICAgICAgICAgIFtzdHlsZXNdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnN0eWxlc1wiXG4gICAgICAgICAgICAgIFt0eXBlXT1cIididXR0b24nXCJcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlT25DbGlja0Zvcm1GaWVsZEJ1dHRvbihmaWVsZClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWJ1dHRvbj5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIElucHV0IFRleHQgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0J1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNmb3JtRmllbGRzUmVmXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dFxuICAgICAgICAgICAgICBbY2FzZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY2FzZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwb3N0Zml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wb3N0Zml4XCJcbiAgICAgICAgICAgICAgW3ByZWZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucHJlZml4XCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dD5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIElucHV0IEN1cnJlbmN5IC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY3VycmVuY3knXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LWN1cnJlbmN5XG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2N1cnJlbmN5VHlwZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY3VycmVuY3lUeXBlXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBbcG9zdGZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucG9zdGZpeFwiXG4gICAgICAgICAgICAgIFtwcmVmaXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnByZWZpeFwiXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVcIlxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtY3VycmVuY3k+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBFbWFpbCAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2VtYWlsJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNmb3JtRmllbGRzUmVmXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1lbWFpbFxuICAgICAgICAgICAgICBbY2FzZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY2FzZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZG9tYWluc109XCJmaWVsZD8ucHJvcGVydGllcz8uZG9tYWluc1wiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3Bvc3RmaXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBvc3RmaXhcIlxuICAgICAgICAgICAgICBbcHJlZml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wcmVmaXhcIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LWVtYWlsPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gUGFzc3dvcmQgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidwYXNzd29yZCdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtcGFzc3dvcmRcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtoaW50Q29udGVudF09XCJmaWVsZD8ucHJvcGVydGllcz8uaGludENvbnRlbnRcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwb3N0Zml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wb3N0Zml4XCJcbiAgICAgICAgICAgICAgW3ByZWZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucHJlZml4XCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1wYXNzd29yZD5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIFRleHRhcmVhIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGV4dGFyZWEnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLXRleHRhcmVhXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktdGV4dGFyZWE+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBDaGVja2JveCAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrYm94J1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNmb3JtRmllbGRzUmVmXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1jaGVja2JveFxuICAgICAgICAgICAgICBbY29udGVudEFsaWduXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250ZW50QWxpZ24gPz8gJ2xlZnQnXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbc2l6ZV09XCJmaWVsZD8ucHJvcGVydGllcz8uc2l6ZSA/PyAnbCdcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIFt2YXJpYW50XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy52YXJpYW50ID8/ICdibG9jaydcIlxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktY2hlY2tib3g+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBJbnB1dCBOdW1iZXIgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LW51bWJlclxuICAgICAgICAgICAgICBbZGVjaW1hbF09XCJmaWVsZD8ucHJvcGVydGllcz8uZGVjaW1hbFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW21heF09XCJmaWVsZD8ucHJvcGVydGllcz8ubWF4XCJcbiAgICAgICAgICAgICAgW21pbl09XCJmaWVsZD8ucHJvcGVydGllcz8ubWluXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwb3N0Zml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wb3N0Zml4ID8/ICcnXCJcbiAgICAgICAgICAgICAgW3ByZWNpc2lvbl09XCJmaWVsZD8ucHJvcGVydGllcz8ucHJlY2lzaW9uXCJcbiAgICAgICAgICAgICAgW3ByZWZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucHJlZml4ID8/ICcnXCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1udW1iZXI+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBJbnB1dCBEYXRlIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtZGF0ZVxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgIFttYXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm1heFwiXG4gICAgICAgICAgICAgIFttYXhDYWxjdWxhdGVkRnJvbVRvZGF5XT1cIlxuICAgICAgICAgICAgICAgIGZpZWxkPy5wcm9wZXJ0aWVzPy5tYXhDYWxjdWxhdGVkRnJvbVRvZGF5XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFttaW5dPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm1pblwiXG4gICAgICAgICAgICAgIFttaW5DYWxjdWxhdGVkRnJvbVRvZGF5XT1cIlxuICAgICAgICAgICAgICAgIGZpZWxkPy5wcm9wZXJ0aWVzPy5taW5DYWxjdWxhdGVkRnJvbVRvZGF5XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBbcG9zdGZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucG9zdGZpeFwiXG4gICAgICAgICAgICAgIFtwcmVmaXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnByZWZpeFwiXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtZGF0ZT5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIElucHV0IFRpbWUgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0aW1lJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNmb3JtRmllbGRzUmVmXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC10aW1lXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbaXRlbXNdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lml0ZW1zXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgIFttb2RlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5tb2RlXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwb3N0Zml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wb3N0Zml4XCJcbiAgICAgICAgICAgICAgW3ByZWZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucHJlZml4XCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC10aW1lPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gSW5wdXQgUGhvbmUgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidwaG9uZSdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtcGhvbmVcbiAgICAgICAgICAgICAgW2NvdW50cnlDb2RlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb3VudHJ5Q29kZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW3Bob25lTWFza0FmdGVyQ291bnRyeUNvZGVdPVwiXG4gICAgICAgICAgICAgICAgZmllbGQ/LnByb3BlcnRpZXM/LnBob25lTWFza0FmdGVyQ291bnRyeUNvZGVcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwb3N0Zml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wb3N0Zml4XCJcbiAgICAgICAgICAgICAgW3ByZWZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucHJlZml4XCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbcmVtb3ZlQ291bnRyeUNvZGVGcm9tVmFsdWVdPVwiXG4gICAgICAgICAgICAgICAgZmllbGQ/LnByb3BlcnRpZXM/LnJlbW92ZUNvdW50cnlDb2RlRnJvbVZhbHVlXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LXBob25lPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gSW5wdXQgUmFkaW8gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidyYWRpbydcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBbdHVpTGFiZWxdPVwibGFiZWxUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgIHN0eWxlPVwibWluLWhlaWdodDogYXV0bzsgcGFkZGluZzogMHB4IDAuNXJlbVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtcmFkaW9cbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgICAgW2l0ZW1zXT1cImZpZWxkPy5vcHRpb25zXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgICBbb3JpZW50YXRpb25dPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm9yaWVudGF0aW9uXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgICAgW3NpemVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNpemVcIlxuICAgICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1yYWRpbz5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xhYmVsVGVtcGxhdGU+XG4gICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0dWktc3BhY2VfYm90dG9tLTJcIlxuICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGI+XG4gICAgICAgICAgICAgICAgICB7eyBmaWVsZC5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmaWVsZC52YWxpZGF0b3JzPy5yZXF1aXJlZFwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9iPlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gRHJvcGRvd24gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzZWxlY3QnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LXNlbGVjdFxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgIFtvcHRpb25zXT1cImZpZWxkLm9wdGlvbnNcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbc2VhcmNoYWJsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uc2VhcmNoYWJsZVwiXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LXNlbGVjdD5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIElucHV0IFNsaWRlciAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3NsaWRlcidcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtc2xpZGVyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW21heF09XCJmaWVsZD8ucHJvcGVydGllcz8ubWF4XCJcbiAgICAgICAgICAgICAgW21pbl09XCJmaWVsZD8ucHJvcGVydGllcz8ubWluXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwb3N0Zml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wb3N0Zml4XCJcbiAgICAgICAgICAgICAgW3ByZWZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucHJlZml4XCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbcXVhbnR1bV09XCJmaWVsZD8ucHJvcGVydGllcz8ucXVhbnR1bVwiXG4gICAgICAgICAgICAgIFtzaXplXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zaXplXCJcbiAgICAgICAgICAgICAgW3N0ZXBzXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zdGVwc1wiXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LXNsaWRlcj5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIEFQSSBDYWxsIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYXBpJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNmb3JtRmllbGRzUmVmXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1idXR0b24tYXBpLWNhbGxcbiAgICAgICAgICAgICAgW2FwaVN0YXR1c109XCJmaWVsZD8uYXBpPy5zdGF0dXM/LnZhbHVlXCJcbiAgICAgICAgICAgICAgW2FwaVRpbWVyXT1cImZpZWxkPy5hcGk/LnRpbWVyXCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cImZpZWxkPy5jbGFzc1wiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5hcGk/LnN0YXR1cz8ubGFiZWxzW2ZpZWxkPy5hcGk/LnN0YXR1cz8udmFsdWVdXCJcbiAgICAgICAgICAgICAgW3Nob3dMb2FkZXJdPVwiZmllbGQ/LmRpc2FibGVkID09PSAnbG9hZGluZydcIlxuICAgICAgICAgICAgICBbc2l6ZV09XCJmaWVsZD8ucHJvcGVydGllcz8uc2l6ZVwiXG4gICAgICAgICAgICAgIFtzdHlsZXNdPVwiXG4gICAgICAgICAgICAgICAgZmllbGQ/LnByb3BlcnRpZXM/LnN0eWxlc1xuICAgICAgICAgICAgICAgICAgPyBmaWVsZD8ucHJvcGVydGllcz8uc3R5bGVzXG4gICAgICAgICAgICAgICAgICA6ICd3aWR0aDogZml0LWNvbnRlbnQnXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImhhbmRsZU9uQ2xpY2tBcGlDYWxsKCRldmVudClcIlxuICAgICAgICAgICAgICAob25BcGlUaW1lclN0b3ApPVwiaGFuZGxlT25BcGlUaW1lclN0b3AoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktYnV0dG9uLWFwaS1jYWxsPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gTGl2ZSBMb2NhdGlvbiAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2xpdmUtbG9jYXRpb24nXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWJ1dHRvbi1saXZlLWxvY2F0aW9uXG4gICAgICAgICAgICAgIFtjbGFzc109XCJmaWVsZD8uY2xhc3NcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8uYXBpPy5zdGF0dXM/LmxhYmVsc1tmaWVsZD8uYXBpPy5zdGF0dXM/LnZhbHVlXVwiXG4gICAgICAgICAgICAgIFtsaXZlTG9jYXRpb25TdGF0dXNdPVwiZmllbGQ/LmFwaT8uc3RhdHVzPy52YWx1ZVwiXG4gICAgICAgICAgICAgIFtzaGFwZV09XCJmaWVsZD8ucHJvcGVydGllcz8uc2hhcGVcIlxuICAgICAgICAgICAgICBbaXNTaG93TGF0TG9uZ0NhcHR1cmVUaW1lc3RhbXBdPVwiXG4gICAgICAgICAgICAgICAgZmllbGQ/LnByb3BlcnRpZXM/LmlzU2hvd0xhdExvbmdDYXB0dXJlVGltZXN0YW1wXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtzaG93TG9hZGVyXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtzaXplXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zaXplXCJcbiAgICAgICAgICAgICAgc3R5bGVzPVwid2lkdGg6IGZpdC1jb250ZW50XCJcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlT25DbGlja0xpdmVMb2NhdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKG9uTG9jYXRpb25QZXJtaXNzaW9uKT1cImhhbmRsZU9uTG9jYXRpb25QZXJtaXNzaW9uKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWJ1dHRvbi1saXZlLWxvY2F0aW9uPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gTW9iaWxlIE9UUCAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ290cCdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtb3RwXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW21hc2tdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm1hc2tcIlxuICAgICAgICAgICAgICBbbW9kZV09XCJmaWVsZD8ucHJvcGVydGllcz8ubW9kZVwiXG4gICAgICAgICAgICAgIFtvdHBMZW5ndGhdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm90cExlbmd0aFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFtzaXplXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zaXplXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtb3RwPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gQWFkaGFhciBOdW1iZXIgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidhYWRoYWFyLW51bWJlcidcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtYWFkaGFhclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgIFttYXNrXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5tYXNrXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtYWFkaGFhcj5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIFByZXZpZXcgSW1hZ2UgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidpbWFnZSdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktaW1hZ2VcbiAgICAgICAgICAgICAgW2FsdFRleHRdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmFsdFRleHRcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNsYXNzXCJcbiAgICAgICAgICAgICAgW2h0bWxdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lmh0bWxcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ltYWdlU3JjXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlID8/ICcnXCJcbiAgICAgICAgICAgICAgW2ltYWdlVHlwZV09XCJmaWVsZD8ucHJvcGVydGllcz8uaW1hZ2VUeXBlXCJcbiAgICAgICAgICAgICAgW2xvYWRpbmdUeXBlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5sb2FkaW5nVHlwZVwiXG4gICAgICAgICAgICAgIFtzdHlsZXNdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnN0eWxlc1wiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW1hZ2U+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBGaWxlIFVwbG9hZCAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2ZpbGUnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgW3R1aUxhYmVsXT1cImxhYmVsVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBzdHlsZT1cIm1pbi1oZWlnaHQ6IGF1dG9cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8a3dpa3VpLWlucHV0LWZpbGVzXG4gICAgICAgICAgICAgICAgW2FjY2VwdF09XCJmaWVsZD8ucHJvcGVydGllcz8uYWNjZXB0XCJcbiAgICAgICAgICAgICAgICBbY2xhc3NdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNsYXNzXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbZmlsZXNdPVwiZmlsZXNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgICAgW2lkXT1cImZpZWxkPy5rZXlcIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ucHJvcGVydGllcz8ubGFiZWxcIlxuICAgICAgICAgICAgICAgIFtsaW5rXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5saW5rXCJcbiAgICAgICAgICAgICAgICBbbWF4RmlsZVNpemVdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm1heEZpbGVTaXplXCJcbiAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm11bHRpcGxlXCJcbiAgICAgICAgICAgICAgICBbc2V0RmlsZVR5cGVzVG9Gb3JtXT1cIlsnTk9STUFMJ11cIlxuICAgICAgICAgICAgICAgIFtzdHlsZXNdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnN0eWxlc1wiXG4gICAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAgIFtzaG93Vmlld0J1dHRvbl09XCJmaWVsZD8ucHJvcGVydGllcz8uc2hvd1ZpZXdCdXR0b25cIlxuICAgICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZUZpbGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGdldFJlbW92ZWRGaWxlKT1cImhhbmRsZVJlbW92ZWRGaWxlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChnZXRWaWV3QnV0dG9uQ2xpY2spPVwiaGFuZGxlVmlld0J1dHRvbkNsaWNrKCRldmVudCwgZmllbGQpXCJcbiAgICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LWZpbGVzPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGFiZWxUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDBweCAwLjI1cmVtOyBtYXJnaW4tYm90dG9tOiAwLjI1cmVtXCJcbiAgICAgICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxiPlxuICAgICAgICAgICAgICAgICAge3sgZmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmllbGQudmFsaWRhdG9ycz8ucmVxdWlyZWRcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYj5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIENhbWVyYSBDYXB0dXJlIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2FwdHVyZSdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIGZpZWxkPy5sYWJlbCAhPT0gJycgJiZcbiAgICAgICAgICAgICAgICBmaWVsZD8ubGFiZWwgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIGZpZWxkPy5sYWJlbCAhPT0gbnVsbFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBzdHlsZT1cIm1pbi1oZWlnaHQ6IGF1dG9cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8cFxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZmllbGQ/LmxhYmVsICE9PSAnJ1wiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAwcHggMC4yNXJlbTsgbWFyZ2luLWJvdHRvbTogMC41cmVtXCJcbiAgICAgICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxiPlxuICAgICAgICAgICAgICAgICAge3sgZmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmllbGQudmFsaWRhdG9ycz8ucmVxdWlyZWRcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYj5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtY2FtZXJhXG4gICAgICAgICAgICAgIFtidXR0b25UZXh0XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5idXR0b25UZXh0XCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpY29uXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5pY29uXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgW21lZGlhRmlsZXNdPVwiXG4gICAgICAgICAgICAgICAgbWVkaWFGaWxlc1tmaWVsZC5rZXldIHwgZmlsdGVySW1hZ2VVcmxPckJhc2U2NEZyb21PYmplY3RcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbc2hvd01lZGlhRmlsZXNdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNob3dNZWRpYUZpbGVzXCJcbiAgICAgICAgICAgICAgW3R5cGVdPVwiJ2NhcHR1cmUnXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAob25DbGljayk9XCJoYW5kbGVPbkNsaWNrSW5wdXRDYW1lcmEoJGV2ZW50LCBmaWVsZClcIlxuICAgICAgICAgICAgICAoZ2V0UmVtb3ZlZEZpbGUpPVwiaGFuZGxlT25DbGlja0dldFJlbW92ZWRNZWRpYUZpbGUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtY2FtZXJhPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gQ2FtZXJhIFJlY29yZCAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3JlY29yZCdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIGZpZWxkPy5sYWJlbCAhPT0gJycgJiZcbiAgICAgICAgICAgICAgICBmaWVsZD8ubGFiZWwgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIGZpZWxkPy5sYWJlbCAhPT0gbnVsbFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBzdHlsZT1cIm1pbi1oZWlnaHQ6IGF1dG9cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8cFxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZmllbGQ/LmxhYmVsICE9PSAnJ1wiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAwcHggMC4yNXJlbTsgbWFyZ2luLWJvdHRvbTogMC41cmVtXCJcbiAgICAgICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxiPlxuICAgICAgICAgICAgICAgICAge3sgZmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmllbGQudmFsaWRhdG9ycz8ucmVxdWlyZWRcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYj5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtY2FtZXJhXG4gICAgICAgICAgICAgIFtidXR0b25UZXh0XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5idXR0b25UZXh0XCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpY29uXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5pY29uXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgW21lZGlhRmlsZXNdPVwiXG4gICAgICAgICAgICAgICAgbWVkaWFGaWxlc1tmaWVsZC5rZXldIHwgZmlsdGVyVmlkZW9VcmxPckJhc2U2NEZyb21PYmplY3RcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbc2hvd01lZGlhRmlsZXNdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNob3dNZWRpYUZpbGVzXCJcbiAgICAgICAgICAgICAgW3R5cGVdPVwiJ3JlY29yZCdcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImhhbmRsZU9uQ2xpY2tJbnB1dENhbWVyYSgkZXZlbnQsIGZpZWxkKVwiXG4gICAgICAgICAgICAgIChnZXRSZW1vdmVkRmlsZSk9XCJoYW5kbGVPbkNsaWNrR2V0UmVtb3ZlZE1lZGlhRmlsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1jYW1lcmE+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBTdGFyIFJhdGluZyAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3N0YXItcmF0aW5nJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNmb3JtRmllbGRzUmVmXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIFt0dWlMYWJlbF09XCJsYWJlbFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJtaW4taGVpZ2h0OiBhdXRvOyBwYWRkaW5nOiAwcHggMC41cmVtXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGt3aWt1aS1zdGFyLXJhdGluZ1xuICAgICAgICAgICAgICAgIFtjb2xvcl09XCJmaWVsZD8ucHJvcGVydGllcz8uY29sb3JcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICAgIFtpY29uXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5pY29uXCJcbiAgICAgICAgICAgICAgICBbaWNvbk1hcmtlZF09XCJmaWVsZD8ucHJvcGVydGllcz8uaWNvbk1hcmtlZFwiXG4gICAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICAgIFttYXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm1heFwiXG4gICAgICAgICAgICAgICAgW21pbl09XCJmaWVsZD8ucHJvcGVydGllcz8ubWluXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgICAgW3NpemVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNpemVcIlxuICAgICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgID48L2t3aWt1aS1zdGFyLXJhdGluZz5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xhYmVsVGVtcGxhdGU+XG4gICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgIDxiXG4gICAgICAgICAgICAgICAgICA+e3sgZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyIH19XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpZWxkLnZhbGlkYXRvcnM/LnJlcXVpcmVkXCI+Kjwvc3Bhbj48L2JcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Zvcm0+XG4gIDxkaXZcbiAgICBjbGFzcz1cImt3aWtpZC1mb3JtLWJ1dHRvbnNcIlxuICAgICpuZ0lmPVwiXG4gICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLmZvb3Rlci52aWV3Rm9ybXNCdXR0b24uaGlkZGVuIHx8XG4gICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLmZvb3Rlci5zYXZlQnV0dG9uLmhpZGRlblxuICAgIFwiXG4gID5cbiAgICA8a3dpa3VpLWJ1dHRvblxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgIWZvcm1Db25maWcucHJvcGVydGllcy5mb290ZXIudmlld0Zvcm1zQnV0dG9uLmhpZGRlbiAmJiBpc01vYmlsZVZpZXdcbiAgICAgIFwiXG4gICAgICBbYXBwZWFyYW5jZV09XCInc2Vjb25kYXJ5J1wiXG4gICAgICBbZGlzYWJsZWRdPVwidmlld0Zvcm1zQnV0dG9uLmRpc2FibGVkXCJcbiAgICAgIFtsYWJlbF09XCJmb3JtQ29uZmlnLnByb3BlcnRpZXMuZm9vdGVyLnZpZXdGb3Jtc0J1dHRvbi5sYWJlbFwiXG4gICAgICBbc2hvd0xvYWRlcl09XCJ2aWV3Rm9ybXNCdXR0b24uc2hvd0xvYWRlclwiXG4gICAgICBbc3R5bGVzXT1cIid3aWR0aDogMTAwJSdcIlxuICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlT25DbGlja1ZpZXdGb3JtcygkZXZlbnQpXCJcbiAgICA+PC9rd2lrdWktYnV0dG9uPlxuICAgIDxrd2lrdWktYnV0dG9uXG4gICAgICAqbmdJZj1cIiFmb3JtQ29uZmlnLnByb3BlcnRpZXMuZm9vdGVyLnNhdmVCdXR0b24uaGlkZGVuXCJcbiAgICAgIFtkaXNhYmxlZF09XCJzYXZlRm9ybUJ1dHRvbi5kaXNhYmxlZFwiXG4gICAgICBbbGFiZWxdPVwiZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLmZvb3Rlci5zYXZlQnV0dG9uLmxhYmVsXCJcbiAgICAgIFtzaG93TG9hZGVyXT1cInNhdmVGb3JtQnV0dG9uLnNob3dMb2FkZXJcIlxuICAgICAgW3N0eWxlc109XCInd2lkdGg6IDEwMCUnXCJcbiAgICAgIChvbkNsaWNrKT1cImhhbmRsZU9uQ2xpY2tTYXZlRm9ybSgkZXZlbnQpXCJcbiAgICA+PC9rd2lrdWktYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdlxuICBjbGFzcz1cImt3aWtpZC1mb3JtLWNvbnRhaW5lci1sb2FkaW5nXCJcbiAgKm5nSWY9XCJsb2FkaW5nXCJcbj5cbiAgPGRpdlxuICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIFtdLmNvbnN0cnVjdG9yKDcpOyBsZXQgaSA9IGluZGV4XCJcbiAgICBjbGFzcz1cImxhcmdlLXdyYXBwZXIgdHVpLXNrZWxldG9uIHR1aS1za2VsZXRvbl9yb3VuZGVkXCJcbiAgPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48a3dpa3VpLWxvYWRlcj48L2t3aWt1aS1sb2FkZXI+XG5cbjx0dWktcHVzaFxuICBpZD1cImZpZWxkLWVycm9yLW5vdGlmaWNhdGlvblwiXG4gICp0dWlQdXNoPVwic2hvd0Vycm9yTm90aWZpY2F0aW9uXCJcbiAgaGVhZGluZz1cIk1pc3NpbmcvSW5jb3JyZWN0IEZpZWxkcyFcIlxuICB0eXBlPVwiRXJyb3JcIlxuICAoY2xvc2UpPVwidG9nZ2xlRXJyb3JOb3RpZmljYXRpb24oZmFsc2UpXCJcbj5cbiAgPHR1aS1zdmdcbiAgICBzcmM9XCJ0dWlJY29uWENpcmNsZVwiXG4gICAgc3R5bGU9XCJjb2xvcjogI2ZmZiAhaW1wb3J0YW50XCJcbiAgPlxuICA8L3R1aS1zdmc+XG48L3R1aS1wdXNoPlxuXG48dHVpLXB1c2hcbiAgaWQ9XCJwZXJtaXNzaW9uLWVycm9yLW5vdGlmaWNhdGlvblwiXG4gICp0dWlQdXNoPVwic2hvd1Blcm1pc3Npb25FcnJvck5vdGlmaWNhdGlvblwiXG4gIGhlYWRpbmc9XCJQbGVhc2UgcHJvdmlkZSByZXF1aXJlZCBwZXJtaXNzaW9ucyFcIlxuICB0eXBlPVwiRXJyb3JcIlxuICAoY2xvc2UpPVwidG9nZ2xlUGVybWlzc2lvbkVycm9yTm90aWZpY2F0aW9uKGZhbHNlKVwiXG4+XG4gIDx0dWktc3ZnXG4gICAgc3JjPVwidHVpSWNvblhDaXJjbGVcIlxuICAgIHN0eWxlPVwiY29sb3I6ICNmZmYgIWltcG9ydGFudFwiXG4gID5cbiAgPC90dWktc3ZnPlxuPC90dWktcHVzaD5cblxuPG5nLXRlbXBsYXRlXG4gICNwcmV2aWV3XG4gIGxldC1wcmV2aWV3XG4+XG4gIDx0dWktcHJldmlld1xuICAgIFtyb3RhdGFibGVdPVwiZmFsc2VcIlxuICAgIFt6b29tYWJsZV09XCJmYWxzZVwiXG4gICAgY2xhc3M9XCJwcmV2aWV3LWNvbnRhaW5lclwiXG4gID5cbiAgICA8dHVpLXByZXZpZXctdGl0bGUgKm5nSWY9XCJwcmV2aWV3UHJvcGVydGllcy50aXRsZSAhPT0gJydcIj57e1xuICAgICAgcHJldmlld1Byb3BlcnRpZXMudGl0bGVcbiAgICB9fTwvdHVpLXByZXZpZXctdGl0bGU+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXByZXZpZXdQcm9wZXJ0aWVzLnVuYXZhaWxhYmxlXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwicHJldmlld1Byb3BlcnRpZXM/Lmh0bWw/LmJlZm9yZSAhPT0gJydcIlxuICAgICAgICBjbGFzcz1cInByZXZpZXctaHRtbCBwcmV2aWV3LWh0bWwtYmVmb3JlXCJcbiAgICAgICAgW3N0eWxlXT1cInByZXZpZXdQcm9wZXJ0aWVzPy5odG1sPy5iZWZvcmVTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgIFtpbm5lckh0bWxdPVwicHJldmlld1Byb3BlcnRpZXMuaHRtbC5iZWZvcmUgfCBrd2lrdWlTYWZlSHRtbFwiXG4gICAgICA+PC9kaXY+XG5cbiAgICAgIDwhLS0gQ29udGVudCB3aXRoaW4gdGhlIGlmcmFtZSAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJwcmV2aWV3LWlmcmFtZS1jb250ZW50XCJcbiAgICAgICAgW3N0eWxlXT1cIlxuICAgICAgICAgIHByZXZpZXdQcm9wZXJ0aWVzPy5pZnJhbWU/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXG4gICAgICAgIFwiXG4gICAgICAgICpuZ0lmPVwicHJldmlld1Byb3BlcnRpZXMuaWZyYW1lLnNyYyAhPT0gJydcIlxuICAgICAgPlxuICAgICAgICA8IS0tIFlvdXIgSFRNTCBjb250ZW50IGhlcmUgLS0+XG4gICAgICAgIDxpZnJhbWVcbiAgICAgICAgICBbc3JjXT1cInByZXZpZXdQcm9wZXJ0aWVzLmlmcmFtZS5zcmMgfCBrd2lrdWlTYWZlVXJsXCJcbiAgICAgICAgICBmcmFtZWJvcmRlcj1cIjBcIlxuICAgICAgICAgIGFsbG93PVwiYWNjZWxlcm9tZXRlcjsgYXV0b3BsYXk7IGVuY3J5cHRlZC1tZWRpYTsgZ3lyb3Njb3BlOyBwaWN0dXJlLWluLXBpY3R1cmVcIlxuICAgICAgICAgIGFsbG93ZnVsbHNjcmVlblxuICAgICAgICAgIFt0aXRsZV09XCJwcmV2aWV3UHJvcGVydGllcy5pZnJhbWUudGl0bGVcIlxuICAgICAgICAgIGNsYXNzPVwicHJldmlldy1pZnJhbWVcIlxuICAgICAgICAgIHNjcm9sbGluZz1cImF1dG9cIlxuICAgICAgICA+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cInByZXZpZXdQcm9wZXJ0aWVzPy5odG1sPy5hZnRlciAhPT0gJydcIlxuICAgICAgICBjbGFzcz1cInByZXZpZXctaHRtbCBwcmV2aWV3LWh0bWwtYWZ0ZXJcIlxuICAgICAgICBbc3R5bGVdPVwicHJldmlld1Byb3BlcnRpZXM/Lmh0bWw/LmFmdGVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICBbaW5uZXJIdG1sXT1cInByZXZpZXdQcm9wZXJ0aWVzLmh0bWwuYWZ0ZXIgfCBrd2lrdWlTYWZlSHRtbFwiXG4gICAgICA+PC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJldmlld1Byb3BlcnRpZXMudW5hdmFpbGFibGVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LXVuYXZhaWxhYmxlXCI+XG4gICAgICAgIDx0dWktc3ZnXG4gICAgICAgICAgc3JjPVwidHVpSWNvbkZpbGVMYXJnZVwiXG4gICAgICAgICAgY2xhc3M9XCJ0LWljb25cIlxuICAgICAgICA+PC90dWktc3ZnPlxuICAgICAgICA8ZGl2PlByZXZpZXcgdW5hdmFpbGFibGU8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPGJ1dHRvblxuICAgICAgdHVpSWNvbkJ1dHRvblxuICAgICAgdHVpUHJldmlld0FjdGlvblxuICAgICAgaWNvbj1cInR1aUljb25DbG9zZUxhcmdlXCJcbiAgICAgIHRpdGxlPVwiQ2xvc2VcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwicHJldmlldy5jb21wbGV0ZSgpXCJcbiAgICA+PC9idXR0b24+XG4gIDwvdHVpLXByZXZpZXc+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI2RpYWxvZ1xuICBsZXQtZGlhbG9nXG4+XG4gIDxkaXYgY2xhc3M9XCJwcmV2aWV3LWNvbnRhaW5lclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcHJldmlld1Byb3BlcnRpZXMudW5hdmFpbGFibGVcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJwcmV2aWV3UHJvcGVydGllcz8uaHRtbD8uYmVmb3JlICE9PSAnJ1wiXG4gICAgICAgIGNsYXNzPVwicHJldmlldy1odG1sIHByZXZpZXctaHRtbC1iZWZvcmVcIlxuICAgICAgICBbc3R5bGVdPVwicHJldmlld1Byb3BlcnRpZXM/Lmh0bWw/LmJlZm9yZVN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgW2lubmVySHRtbF09XCJwcmV2aWV3UHJvcGVydGllcy5odG1sLmJlZm9yZSB8IGt3aWt1aVNhZmVIdG1sXCJcbiAgICAgID48L2Rpdj5cblxuICAgICAgPCEtLSBDb250ZW50IHdpdGhpbiB0aGUgaWZyYW1lIC0tPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInByZXZpZXctaWZyYW1lLWNvbnRlbnRcIlxuICAgICAgICBbc3R5bGVdPVwiXG4gICAgICAgICAgcHJldmlld1Byb3BlcnRpZXM/LmlmcmFtZT8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcbiAgICAgICAgXCJcbiAgICAgICAgKm5nSWY9XCJwcmV2aWV3UHJvcGVydGllcy5pZnJhbWUuc3JjICE9PSAnJ1wiXG4gICAgICA+XG4gICAgICAgIDwhLS0gWW91ciBIVE1MIGNvbnRlbnQgaGVyZSAtLT5cbiAgICAgICAgPGlmcmFtZVxuICAgICAgICAgIFtzcmNdPVwicHJldmlld1Byb3BlcnRpZXMuaWZyYW1lLnNyYyB8IGt3aWt1aVNhZmVVcmxcIlxuICAgICAgICAgIGZyYW1lYm9yZGVyPVwiMFwiXG4gICAgICAgICAgYWxsb3c9XCJhY2NlbGVyb21ldGVyOyBhdXRvcGxheTsgZW5jcnlwdGVkLW1lZGlhOyBneXJvc2NvcGU7IHBpY3R1cmUtaW4tcGljdHVyZVwiXG4gICAgICAgICAgYWxsb3dmdWxsc2NyZWVuXG4gICAgICAgICAgW3RpdGxlXT1cInByZXZpZXdQcm9wZXJ0aWVzLmlmcmFtZS50aXRsZVwiXG4gICAgICAgICAgY2xhc3M9XCJwcmV2aWV3LWlmcmFtZVwiXG4gICAgICAgICAgc2Nyb2xsaW5nPVwiYXV0b1wiXG4gICAgICAgID48L2lmcmFtZT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwicHJldmlld1Byb3BlcnRpZXM/Lmh0bWw/LmFmdGVyICE9PSAnJ1wiXG4gICAgICAgIGNsYXNzPVwicHJldmlldy1odG1sIHByZXZpZXctaHRtbC1hZnRlclwiXG4gICAgICAgIFtzdHlsZV09XCJwcmV2aWV3UHJvcGVydGllcz8uaHRtbD8uYWZ0ZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgIFtpbm5lckh0bWxdPVwicHJldmlld1Byb3BlcnRpZXMuaHRtbC5hZnRlciB8IGt3aWt1aVNhZmVIdG1sXCJcbiAgICAgID48L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwcmV2aWV3UHJvcGVydGllcy51bmF2YWlsYWJsZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctdW5hdmFpbGFibGVcIj5cbiAgICAgICAgPHR1aS1zdmdcbiAgICAgICAgICBzcmM9XCJ0dWlJY29uRmlsZUxhcmdlXCJcbiAgICAgICAgICBjbGFzcz1cInQtaWNvblwiXG4gICAgICAgID48L3R1aS1zdmc+XG4gICAgICAgIDxkaXY+UHJldmlldyB1bmF2YWlsYWJsZTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPGRpdlxuICBpZD1cImt3aWtpZC1jYW1lcmEtY29udGFpbmVyXCJcbiAgKm5nSWY9XCJpc1Nob3dDYW1lcmFcIlxuPlxuICA8ZGl2XG4gICAgaWQ9XCJrd2lraWQtY2FtZXJhLXdyYXBwZXJcIlxuICAgIFtjbGFzcy5mdWxsc2NyZWVuXT1cImlzU2hvd0NhbWVyYUZ1bGxzY3JlZW5cIlxuICA+XG4gICAgPGt3aWtpZC1jYW1lcmFcbiAgICAgIFt0eXBlXT1cImFjdGl2ZUNhbWVyYVR5cGVcIlxuICAgICAgW2RhdGFdPVwiYWN0aXZlQ2FtZXJhRGF0YVwiXG4gICAgICBbaW1hZ2VdPVwiYWN0aXZlQ2FtZXJhSW1hZ2VcIlxuICAgICAgW3ZpZGVvXT1cImFjdGl2ZUNhbWVyYVZpZGVvXCJcbiAgICAgIFtjb25maWddPVwiYWN0aXZlQ2FtZXJhQ29uZmlnPy5jYW1lcmFDb25maWdcIlxuICAgICAgKGdldEltYWdlKT1cImhhbmRsZUdldENhbWVyYU1lZGlhKCRldmVudCwgJ0NBUFRVUkUnKVwiXG4gICAgICAoZ2V0VmlkZW8pPVwiaGFuZGxlR2V0Q2FtZXJhTWVkaWEoJGV2ZW50LCAnUkVDT1JEJylcIlxuICAgICAgKG9uQ2xpY2tCYWNrKT1cImhhbmRsZU9uQ2xpY2tDYW1lcmFCYWNrKCRldmVudClcIlxuICAgICAgKG9uQ2xpY2tDbG9zZSk9XCJoYW5kbGVPbkNsaWNrQ2FtZXJhQ2xvc2UoJGV2ZW50KVwiXG4gICAgICAob25DbGlja1NhdmUpPVwiaGFuZGxlT25DbGlja1NhdmVDYW1lcmFNZWRpYSgkZXZlbnQsIGFjdGl2ZUNhbWVyYVR5cGUpXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiYWN0aXZlQ2FtZXJhVHlwZSA9PT0gJ0NBUFRVUkUnXCJcbiAgICAgICAgc2xvdD1cImNhcHR1cmUtaGVhZGVyXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcHR1cmUtaGVhZGVyLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXB0dXJlLWhlYWRlci1sZWZ0XCI+IDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXB0dXJlLWhlYWRlci1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxrd2lrdWktYnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlQ2FtZXJhQ29uZmlnPy5jYW1lcmFDb25maWc/LmhlYWRlcj8udGl0bGUgIT09ICcnXCJcbiAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cIndoaXRlYmxvY2tcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiYWN0aXZlQ2FtZXJhQ29uZmlnPy5jYW1lcmFDb25maWc/LmhlYWRlcj8udGl0bGVcIlxuICAgICAgICAgICAgICBzaGFwZT1cInJvdW5kZWRcIlxuICAgICAgICAgICAgICBzaXplPVwic1wiXG4gICAgICAgICAgICA+PC9rd2lrdWktYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXB0dXJlLWhlYWRlci1yaWdodFwiPlxuICAgICAgICAgICAgPGt3aWt1aS1idXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJhY3RpdmVDYW1lcmFDb25maWc/LmNhbWVyYUNvbmZpZz8uaGVhZGVyPy5pc0V4cGFuZFwiXG4gICAgICAgICAgICAgIGlkPVwia3dpa2lkLWNhbWVyYS1oZWFkZXItZW5sYXJnZS1idXR0b25cIlxuICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwid2hpdGVibG9ja1wiXG4gICAgICAgICAgICAgIFtpY29uXT1cIlxuICAgICAgICAgICAgICAgIGlzU2hvd0NhbWVyYUZ1bGxzY3JlZW4gPyAndHVpSWNvbk1pbmltaXplMicgOiAndHVpSWNvbk1heGltaXplMidcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgc2hhcGU9XCJyb3VuZGVkXCJcbiAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaXNTaG93Q2FtZXJhRnVsbHNjcmVlbiA9ICFpc1Nob3dDYW1lcmFGdWxsc2NyZWVuXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1idXR0b24+XG4gICAgICAgICAgICA8a3dpa3VpLWJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cImFjdGl2ZUNhbWVyYUNvbmZpZz8uY2FtZXJhQ29uZmlnPy5oZWFkZXI/LmlzQ2xvc2VcIlxuICAgICAgICAgICAgICBpZD1cImt3aWtpZC1jYW1lcmEtaGVhZGVyLWNsb3NlLWJ1dHRvblwiXG4gICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJ3aGl0ZWJsb2NrXCJcbiAgICAgICAgICAgICAgaWNvbj1cInR1aUljb25DbG9zZUxhcmdlXCJcbiAgICAgICAgICAgICAgc2hhcGU9XCJyb3VuZGVkXCJcbiAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlT25DbGlja0NhbWVyYUNsb3NlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWJ1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nSWY9XCJhY3RpdmVDYW1lcmFUeXBlID09PSAnUkVDT1JEJ1wiXG4gICAgICAgIHNsb3Q9XCJyZWNvcmQtaGVhZGVyXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC1oZWFkZXItY29udGFpbmVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC1oZWFkZXItcm93IHJvdy0xXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVjb3JkLWhlYWRlci1sZWZ0XCI+XG4gICAgICAgICAgICAgIDxrd2lrdWktYnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgIGFjdGl2ZUNhbWVyYUNvbmZpZz8uY2FtZXJhQ29uZmlnPy5oZWFkZXI/LmlzQmFjayAmJlxuICAgICAgICAgICAgICAgICAgYWN0aXZlQ2FtZXJhUmVjb3JkaW5nU3RhdGUgPT0gJ05PTkUnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwid2hpdGVibG9ja1wiXG4gICAgICAgICAgICAgICAgaWNvbj1cInR1aUljb25BcnJvd0xlZnRcIlxuICAgICAgICAgICAgICAgIHNoYXBlPVwicm91bmRlZFwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVPbkNsaWNrQ2FtZXJhQ2xvc2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgID48L2t3aWt1aS1idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtaGVhZGVyLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8a3dpa3VpLWJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlQ2FtZXJhQ29uZmlnPy5jYW1lcmFDb25maWc/LmhlYWRlcj8udGl0bGUgIT09ICcnXCJcbiAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwid2hpdGVibG9ja1wiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cImFjdGl2ZUNhbWVyYUNvbmZpZz8uY2FtZXJhQ29uZmlnPy5oZWFkZXI/LnRpdGxlXCJcbiAgICAgICAgICAgICAgICBzaGFwZT1cInJvdW5kZWRcIlxuICAgICAgICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICAgICAgPjwva3dpa3VpLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC1oZWFkZXItcmlnaHRcIj5cbiAgICAgICAgICAgICAgPGt3aWt1aS1idXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGl2ZUNhbWVyYUNvbmZpZz8uY2FtZXJhQ29uZmlnPy5oZWFkZXI/LmlzRXhwYW5kXCJcbiAgICAgICAgICAgICAgICBpZD1cImt3aWtpZC1jYW1lcmEtaGVhZGVyLWVubGFyZ2UtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwid2hpdGVibG9ja1wiXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiXG4gICAgICAgICAgICAgICAgICBpc1Nob3dDYW1lcmFGdWxsc2NyZWVuXG4gICAgICAgICAgICAgICAgICAgID8gJ3R1aUljb25NaW5pbWl6ZTInXG4gICAgICAgICAgICAgICAgICAgIDogJ3R1aUljb25NYXhpbWl6ZTInXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBzaGFwZT1cInJvdW5kZWRcIlxuICAgICAgICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaXNTaG93Q2FtZXJhRnVsbHNjcmVlbiA9ICFpc1Nob3dDYW1lcmFGdWxsc2NyZWVuXCJcbiAgICAgICAgICAgICAgPjwva3dpa3VpLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtaGVhZGVyLXJvdyByb3ctMlwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBpZD1cImJsaW5raW5nLWRvdC1jb250YWluZXJcIlxuICAgICAgICAgICAgICBbY2xhc3MucmVjb3JkaW5nXT1cImFjdGl2ZUNhbWVyYVJlY29yZGluZ1N0YXRlID09ICdSRUNPUkRJTkcnXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnBhdXNlZF09XCJhY3RpdmVDYW1lcmFSZWNvcmRpbmdTdGF0ZSA9PSAnUEFVU0VEJ1wiXG4gICAgICAgICAgICAgIFtjbGFzcy5yZWNvcmRlZF09XCJcbiAgICAgICAgICAgICAgICBhY3RpdmVDYW1lcmFSZWNvcmRpbmdTdGF0ZSA9PSAnTk9ORScgfHxcbiAgICAgICAgICAgICAgICBhY3RpdmVDYW1lcmFSZWNvcmRpbmdTdGF0ZSA9PT0gJ1JFQ09SREVEJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJhY3RpdmVDYW1lcmFSZWNvcmRpbmdTdGF0ZSA9PSAnUkVDT1JESU5HJ1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkb3QgcmVjb3JkaW5nIGJsaW5rXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlQ2FtZXJhUmVjb3JkaW5nU3RhdGUgPT09ICdQQVVTRUQnXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRvdCBwYXVzZWRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgIGFjdGl2ZUNhbWVyYVJlY29yZGluZ1N0YXRlID09ICdOT05FJyB8fFxuICAgICAgICAgICAgICAgICAgYWN0aXZlQ2FtZXJhUmVjb3JkaW5nU3RhdGUgPT09ICdSRUNPUkRFRCdcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZG90IHJlY29yZGVkXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAmbmJzcDt7eyBhY3RpdmVDYW1lcmFSZWNvcmRpbmdUaW1lIHwgZm9ybWF0VGltZXIgfX1cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICBhY3RpdmVDYW1lcmFDb25maWc/LmNhbWVyYUNvbmZpZz8ub3RoZXJzXG4gICAgICAgICAgICAgICAgICAgICAgPy5tYXhSZWNvcmRpbmdUaW1lSW5TZWNvbmRzXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIC9cbiAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUNhbWVyYUNvbmZpZz8uY2FtZXJhQ29uZmlnPy5vdGhlcnNcbiAgICAgICAgICAgICAgICAgICAgICA/Lm1heFJlY29yZGluZ1RpbWVJblNlY29uZHMgfCBmb3JtYXRUaW1lclxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2t3aWtpZC1jYW1lcmE+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
3414
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2t3aWtpZC1mb3Jtcy9zcmMvbGliL3JlbmRlcmVyL2Zvcm0tdmlldy9mb3JtLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvZm9ybS12aWV3L2Zvcm0tdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsbUNBQW1DO0FBQ25DLHNEQUFzRDtBQUN0RCxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUlMLE1BQU0sRUFLTixTQUFTLEVBQ1QsWUFBWSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRSxPQUFPLEVBQ0wsZUFBZSxFQUVmLGdCQUFnQixFQUNoQixlQUFlLEVBQ2hCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvQyxPQUFPLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxVQUFVLEVBQ1YsSUFBSSxFQUNKLFVBQVUsRUFDVixNQUFNLEVBR04sb0JBQW9CLEVBQ3BCLHFCQUFxQixFQUNyQixpQkFBaUIsRUFDakIsc0JBQXNCLEVBQ3RCLGFBQWEsRUFDYixZQUFZLEVBQ1osZUFBZSxFQUNmLE1BQU0sRUFDTixXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLG9CQUFvQixFQUNyQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztB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b0IsTUE2Q3BCLHVCQUF1QixNQXlCN0IsVUFBVSxNQXNCVixVQUFVLE1BT1YsYUFBYSxNQTZCYixzQkFBc0IsTUFLdEIsb0JBQW9CLE1BS3BCLGNBQWMsTUFtQmQsWUFBWSxNQUtaLGNBQWMsTUFLZCxxQkFBcUIsTUFLckIsV0FBVyxNQWdHWCxnQkFBZ0IsTUFVaEIsYUFBYSxNQWNiLFNBQVMsTUE0Qkgsc0JBQXNCLE1BeUN0QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgVHVpUHJldmlld0RpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiQHRhaWdhLXVpL2FkZG9uLXByZXZpZXdcIjtcbmltcG9ydCB7XG4gIFR1aUFsZXJ0U2VydmljZSxcbiAgVHVpRGlhbG9nQ29udGV4dCxcbiAgVHVpRGlhbG9nU2VydmljZSxcbiAgVHVpTm90aWZpY2F0aW9uXG59IGZyb20gXCJAdGFpZ2EtdWkvY29yZVwiO1xuaW1wb3J0IHsgVHVpUHVzaFNlcnZpY2UgfSBmcm9tIFwiQHRhaWdhLXVpL2tpdFwiO1xuaW1wb3J0IHsgS3dpa0lEQ2FtZXJhUmVjb3JkU2VydmljZSB9IGZyb20gXCJrd2lraWQtY2FtZXJhXCI7XG5pbXBvcnQge1xuICBBY3Rpb24sXG4gIENvbmRpdGlvbixcbiAgRVNvdXJjZUtleSxcbiAgUnVsZSxcbiAgUnVsZUVuZ2luZSxcbiAgU291cmNlLFxuICBUQWN0aW9uLFxuICBURW5naW5lLFxuICBjaGVja09iamVjdEtleUV4aXN0cyxcbiAgY2hlY2tPYmplY3RQYXRoRXhpc3RzLFxuICBnZXRPYmplY3REZWVwQ29weSxcbiAgZ2V0T2JqZWN0VmFsdWVGcm9tUGF0aCxcbiAgaXNFbXB0eVN0cmluZyxcbiAgaXNFbXB0eVZhbHVlLFxuICBpc05vdEVtcHR5VmFsdWUsXG4gIGlzTnVsbCxcbiAgaXNVbmRlZmluZWQsXG4gIGxvZ01ldGhvZCxcbiAgbWVyZ2VPYmplY3RzLFxuICBtZXJnZU9iamVjdHNEZWVwLFxuICByZXBsYWNlU3RyaW5nLFxuICBzZXRWYWx1ZVRvT2JqZWN0UGF0aFxufSBmcm9tIFwia3dpa2lkLXRvb2xraXRcIjtcbmltcG9ydCB7IEt3aWtVSUxvYWRlclNlcnZpY2UgfSBmcm9tIFwia3dpa3VpXCI7XG5pbXBvcnQgeyBwYWlyd2lzZSB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSBcInV1aWRcIjtcbmltcG9ydCB7IENvbnZlcnRlciB9IGZyb20gXCIuLi9jb25maWctY29udmVydGVyL2NvbmZpZy1jb252ZXJ0ZXJcIjtcbmltcG9ydCB7IEZJRUxEX1BST1BFUlRJRVMgfSBmcm9tIFwiLi4vY29uZmlnLWNvbnZlcnRlci9jb25maWctY29udmVydGVyLmNvbnN0YW50c1wiO1xuaW1wb3J0IHtcbiAgZ2V0TGFuZ3VhZ2UsXG4gIHVwZGF0ZUxhbmd1YWdlXG59IGZyb20gXCIuLi9jb25maWctY29udmVydGVyL2NvbmZpZy1jb252ZXJ0ZXIuaGVscGVyXCI7XG5pbXBvcnQgeyBFRm9ybXNMaXN0U3RhdHVzIH0gZnJvbSBcIi4uL2Zvcm1zLWxpc3QvZm9ybXMtbGlzdC5kZWZpbml0aW9uc1wiO1xuaW1wb3J0IHsgRUFjdGlvbktleSB9IGZyb20gXCIuL2RlZmluaXRpb25zL2Zvcm0tdmlldy5hY3Rpb25zLmRlZmluaXRpb25cIjtcbmltcG9ydCB7XG4gIEVBcGlSZXF1ZXN0VXJsVHlwZSxcbiAgRUFwaVN0YXR1c1R5cGUsXG4gIFRBcGksXG4gIFRBcGlFbmRwb2ludCxcbiAgVEFwaVRpbWVyXG59IGZyb20gXCIuL2RlZmluaXRpb25zL2Zvcm0tdmlldy5hcGlzLmRlZmluaXRpb25cIjtcbmltcG9ydCB7XG4gIEVNZXNzYWdlVHlwZSxcbiAgVEZvcm1WaWV3R29CYWNrTW9kZSxcbiAgVE1lc3NhZ2Vcbn0gZnJvbSBcIi4vZGVmaW5pdGlvbnMvZm9ybS12aWV3LmNvbW1vbnMuZGVmaW5pdGlvblwiO1xuaW1wb3J0IHtcbiAgRUZpZWxkVHlwZSxcbiAgVEZpZWxkQXBpQ2FsbCxcbiAgVEZpZWxkTGl2ZUxvY2F0aW9uLFxuICBURmllbGRUaXRsZVxufSBmcm9tIFwiLi9kZWZpbml0aW9ucy9mb3JtLXZpZXcuZmllbGRzLmRlZmluaXRpb25cIjtcbmltcG9ydCB7IEVMb2dFdmVudFR5cGUgfSBmcm9tIFwiLi9kZWZpbml0aW9ucy9mb3JtLXZpZXcubG9ncy5kZWZpbml0aW9uXCI7XG5pbXBvcnQgeyBLd2lrSURGb3JtVmlld0FwaVNlcnZpY2UgfSBmcm9tIFwiLi9mb3JtLXZpZXcuYXBpLnNlcnZpY2VcIjtcbmltcG9ydCB7IEZPUk1fVklFV19USU1FUlMgfSBmcm9tIFwiLi9mb3JtLXZpZXcuY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBLd2lrSURGb3JtVmlld1NlcnZpY2UgfSBmcm9tIFwiLi9mb3JtLXZpZXcuc2VydmljZVwiO1xuaW1wb3J0IHsgQXBpcyB9IGZyb20gXCIuL2hlbHBlcnMvZm9ybS12aWV3LmFwaXMuaGVscGVyXCI7XG5pbXBvcnQgeyBDYW1lcmFIZWxwZXIgfSBmcm9tIFwiLi9oZWxwZXJzL2Zvcm0tdmlldy5jYW1lcmEuaGVscGVyXCI7XG5pbXBvcnQge1xuICBhcHBlbmRGb3JtRmllbGRNZXNzYWdlLFxuICBhcHBlbmRIdG1sTWVzc2FnZSxcbiAgY29udmVydEZvcm1GaWVsZEVtcHR5VmFsdWVUb0t3aWtVSUZvcm1hdCxcbiAgY29udmVydEZvcm1GaWVsZFZhbHVlVG9Ld2lrVUlGb3JtYXQsXG4gIGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvU3RhbmRhcmRGb3JtYXQsXG4gIGZpbHRlckR1cGxpY2F0ZXNGaWxlcyxcbiAgZmlsdGVyRHVwbGljYXRlc01lZGlhRmlsZXMsXG4gIGdldEZvcm1GaWVsZEJ5S2V5LFxuICBnZXRGb3JtRmllbGRJbmRleEJ5S2V5LFxuICBoaWdobGlnaHRGb3JtRmllbGRFcnJvcixcbiAgcmVtb3ZlRm9ybUZpZWxkTWVzc2FnZSxcbiAgc2V0QXBpVGltZXJNZXNzYWdlLFxuICBzaG93Rm9ybUZpZWxkRXJyb3Jcbn0gZnJvbSBcIi4vaGVscGVycy9mb3JtLXZpZXcuZmllbGRzLmhlbHBlclwiO1xuaW1wb3J0IHsgRm9ybVZhbGlkYXRpb24gfSBmcm9tIFwiLi9oZWxwZXJzL2Zvcm0tdmlldy5mb3JtLXZhbGlkYXRpb25zLmhlbHBlclwiO1xuaW1wb3J0IHsgZm9ybWF0RXZlbnRMb2dzIH0gZnJvbSBcIi4vaGVscGVycy9mb3JtLXZpZXcubG9ncy5oZWxwZXJcIjtcbmltcG9ydCB7IFRhc2tzIH0gZnJvbSBcIi4vaGVscGVycy9mb3JtLXZpZXcudGFza3MuaGVscGVyXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJrd2lraWQtZm9ybS12aWV3XCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vZm9ybS12aWV3LmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9mb3JtLXZpZXcuY29tcG9uZW50LnNjc3NcIiwgXCIuLi9zaGFyZWQuc2Nzc1wiXSxcbiAgcHJvdmlkZXJzOiBbS3dpa0lERm9ybVZpZXdTZXJ2aWNlLCBLd2lrSURGb3JtVmlld0FwaVNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIEt3aWtJREZvcm1WaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoXCJmb3JtRmllbGRDb250YWluZXJSZWZcIikgZm9ybUZpZWxkQ29udGFpbmVyUmVmOiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGRyZW4oXCJmb3JtRmllbGRzUmVmXCIpIGZvcm1GaWVsZHNSZWY6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICBAVmlld0NoaWxkKFwiZGlhbG9nXCIpIHJlYWRvbmx5IGRpYWxvZzogVGVtcGxhdGVSZWY8VHVpRGlhbG9nQ29udGV4dDx2b2lkPj47XG5cbiAgQFZpZXdDaGlsZChcInByZXZpZXdcIikgcmVhZG9ubHkgcHJldmlldzogVGVtcGxhdGVSZWY8VHVpRGlhbG9nQ29udGV4dDx2b2lkPj47XG5cbiAgQElucHV0KCkgYWxsRm9ybXNEYXRhOiBhbnk7XG5cbiAgQElucHV0KCkgZXh0cmFEYXRhOiBhbnk7XG5cbiAgQElucHV0KCkgYXBpQ2FsbFJlc3BvbnNlOiBhbnk7XG5cbiAgQElucHV0KCkgYnV0dG9uQ2xpY2tSZXNwb25zZTogYW55O1xuXG4gIEBJbnB1dCgpIGZvcm1Db25maWc6IGFueTtcblxuICBASW5wdXQoKSBmb3JtRGF0YTogYW55O1xuXG4gIEBJbnB1dCgpIGlzTW9iaWxlVmlldyA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHBvcHVwRm9ybUNhbGxiYWNrOiBhbnkgPSB1bmRlZmluZWQ7XG5cbiAgQElucHV0KCkgdXNlckNvbmZpZzogYW55O1xuXG4gIEBJbnB1dCgpIHN0ZXBDb25maWc6IGFueTtcblxuICBAT3V0cHV0KCkgZ2V0TG9nczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgZ2V0VW5zYXZlZERhdGFTdGF0ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgb25BY3Rpb25TaG93UG9wdXBGb3JtOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSBvbkNsaWNrQXBpQ2FsbDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgb25DbGlja1ZpZXdGaWxlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSBvbkNsaWNrRm9ybUZpZWxkQnV0dG9uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSBvbkNsaWNrR29CYWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSBvbkNsaWNrU2F2ZUZvcm06IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpIG9uQ2xpY2tWaWV3Rm9ybXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgZmllbGRHcm91cHM6IGFueSA9IHt9O1xuXG4gIGZvcm1GaWVsZHM6IGFueVtdID0gW107XG5cbiAgcHJldmlvdXNGb3JtRGF0YTogYW55ID0ge307XG5cbiAgY2FtZXJhRGF0YTogYW55ID0ge307XG5cbiAgaXNTaG93Q2FtZXJhID0gZmFsc2U7XG5cbiAgaXNTaG93Q2FtZXJhRnVsbHNjcmVlbiA9IGZhbHNlO1xuXG4gIGFjdGl2ZUNhbWVyYUZpZWxkS2V5ID0gXCJcIjtcblxuICBhY3RpdmVDYW1lcmFEYXRhOiBhbnkgPSB7fTtcblxuICBhY3RpdmVDYW1lcmFUeXBlOiBcIkNBUFRVUkVcIiB8IFwiUkVDT1JEXCIgPSB1bmRlZmluZWQ7XG5cbiAgYWN0aXZlQ2FtZXJhSW1hZ2UgPSBcIlwiO1xuXG4gIGFjdGl2ZUNhbWVyYVZpZGVvID0gXCJcIjtcblxuICBhY3RpdmVDYW1lcmFDb25maWc6IGFueSA9IHVuZGVmaW5lZDtcblxuICBhY3RpdmVDYW1lcmFSZWNvcmRpbmdUaW1lID0gMDtcblxuICBhY3RpdmVDYW1lcmFSZWNvcmRpbmdUaW1lclN1YmNyaXB0aW9uOiBhbnkgPSB1bmRlZmluZWQ7XG5cbiAgYWN0aXZlQ2FtZXJhUmVjb3JkaW5nU3RhdGUgPSBcIk5PTkVcIjtcblxuICBhY3RpdmVDYW1lcmFSZWNvcmRpbmdTdGF0ZVN1YmNyaXB0aW9uOiBhbnkgPSB1bmRlZmluZWQ7XG5cbiAgQGxvZ01ldGhvZFxuICByZXNldENhbWVyYSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzU2hvd0NhbWVyYSA9IGZhbHNlO1xuICAgIHRoaXMuaXNTaG93Q2FtZXJhRnVsbHNjcmVlbiA9IGZhbHNlO1xuICAgIHRoaXMuYWN0aXZlQ2FtZXJhRmllbGRLZXkgPSBcIlwiO1xuICAgIHRoaXMuYWN0aXZlQ2FtZXJhRGF0YSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmFjdGl2ZUNhbWVyYVR5cGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5hY3RpdmVDYW1lcmFJbWFnZSA9IFwiXCI7XG4gICAgdGhpcy5hY3RpdmVDYW1lcmFWaWRlbyA9IFwiXCI7XG4gICAgdGhpcy5hY3RpdmVDYW1lcmFDb25maWcgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5hY3RpdmVDYW1lcmFSZWNvcmRpbmdUaW1lID0gMDtcbiAgICB0aGlzLmFjdGl2ZUNhbWVyYVJlY29yZGluZ1N0YXRlID0gXCJOT05FXCI7XG4gIH1cblxuICBwcmV2aWV3UHJvcGVydGllczogYW55ID0ge1xuICAgIGh0bWw6IHtcbiAgICAgIGJlZm9yZTogXCJcIixcbiAgICAgIGJlZm9yZVN0eWxlczogXCJcIixcbiAgICAgIGFmdGVyOiBcIlwiLFxuICAgICAgYWZ0ZXJTdHlsZXM6IFwiXCJcbiAgICB9LFxuICAgIGlmcmFtZToge1xuICAgICAgc3JjOiBcIlwiLFxuICAgICAgdGl0bGU6IFwiXCJcbiAgICB9LFxuICAgIHR5cGU6IFwiZGlhbG9nXCIsXG4gICAgc2l6ZTogXCJhdXRvXCIsXG4gICAgcG9wdXBGb3JtS2V5OiBcIlwiLFxuICAgIHRpdGxlOiBcIlwiLFxuICAgIHVuYXZhaWxhYmxlOiBmYWxzZVxuICB9O1xuXG4gIGxvYWRpbmcgPSB0cnVlO1xuXG4gIGFwaUxvYWRpbmcgPSBmYWxzZTtcblxuICBiYWNrQnV0dG9uID0ge1xuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBzaG93TG9hZGVyOiBmYWxzZVxuICB9O1xuXG4gIHZpZXdGb3Jtc0J1dHRvbiA9IHtcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgc2hvd0xvYWRlcjogZmFsc2VcbiAgfTtcblxuICBzYXZlRm9ybUJ1dHRvbiA9IHtcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgc2hvd0xvYWRlcjogZmFsc2VcbiAgfTtcblxuICBmaWxlczogYW55ID0ge307XG5cbiAgbWVkaWFGaWxlczogYW55ID0ge307XG5cbiAgc3RvcFRhc2tFeGVjdXRpb24gPSBmYWxzZTtcblxuICB3YWl0aW5nRm9yQ2hhbmdlcyA9IGZhbHNlO1xuXG4gIHBvcHVwRm9ybUNvbmZpZzogYW55ID0gdW5kZWZpbmVkO1xuXG4gIHBvcHVwRm9ybURhdGE6IGFueSA9IHt9O1xuXG4gIHRhc2tEYXRhOiBhbnkgPSB7fTtcblxuICBwcmV2aWV3RGlhbG9nUmVmOiBhbnk7XG5cbiAgZm9ybUdyb3VwOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGZvcm1WaWV3U2VydmljZTogS3dpa0lERm9ybVZpZXdTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybVZpZXdBcGlTZXJ2aWNlOiBLd2lrSURGb3JtVmlld0FwaVNlcnZpY2UsXG4gICAgQEluamVjdChUdWlQdXNoU2VydmljZSlcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcHVzaFNlcnZpY2U6IFR1aVB1c2hTZXJ2aWNlLFxuICAgIEBJbmplY3QoVHVpQWxlcnRTZXJ2aWNlKVxuICAgIHByb3RlY3RlZCByZWFkb25seSBhbGVydFNlcnZpY2U6IFR1aUFsZXJ0U2VydmljZSxcbiAgICBASW5qZWN0KFR1aVByZXZpZXdEaWFsb2dTZXJ2aWNlKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJldmlld0RpYWxvZ1NlcnZpY2U6IFR1aVByZXZpZXdEaWFsb2dTZXJ2aWNlLFxuICAgIEBJbmplY3QoVHVpRGlhbG9nU2VydmljZSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZ1NlcnZpY2U6IFR1aURpYWxvZ1NlcnZpY2UsXG4gICAgcHVibGljIGxvYWRlclNlcnZpY2U6IEt3aWtVSUxvYWRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjYW1lcmFSZWNvcmRTZXJ2aWNlOiBLd2lrSURDYW1lcmFSZWNvcmRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjJcbiAgKSB7fVxuXG4gIEBsb2dNZXRob2RcbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuaW5pdEZvcm1Db25maWcodGhpcy5mb3JtQ29uZmlnKTtcblxuICAgICAgaWYgKHJlcykge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYVJlY29yZGluZ1RpbWVyU3ViY3JpcHRpb24gPSB0aGlzLmNhbWVyYVJlY29yZFNlcnZpY2VcbiAgICAgICAgICAuZ2V0VGltZXJVcGRhdGUoKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKHRpbWU6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmFSZWNvcmRpbmdUaW1lID0gdGltZTtcbiAgICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmFSZWNvcmRpbmdTdGF0ZVN1YmNyaXB0aW9uID0gdGhpcy5jYW1lcmFSZWNvcmRTZXJ2aWNlXG4gICAgICAgICAgLmdldFJlY29yZGluZ1N0YXRlKClcbiAgICAgICAgICAuc3Vic2NyaWJlKChzdGF0ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYVJlY29yZGluZ1N0YXRlID0gc3RhdGU7XG4gICAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IHZlcmlmeUNoYW5nZSA9IChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgcmV0dXJuIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGNoYW5nZXMsIGtleSkgJiYgIWNoYW5nZXNba2V5XS5maXJzdENoYW5nZTtcbiAgICB9O1xuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJleHRyYURhdGFcIikpIHtcbiAgICAgIHRoaXMuZXh0cmFEYXRhID0gY2hhbmdlcy5leHRyYURhdGEuY3VycmVudFZhbHVlO1xuICAgIH1cbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwidXNlckNvbmZpZ1wiKSkge1xuICAgICAgdGhpcy51c2VyQ29uZmlnID0gY2hhbmdlcy51c2VyQ29uZmlnLmN1cnJlbnRWYWx1ZTtcbiAgICB9XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcInN0ZXBDb25maWdcIikpIHtcbiAgICAgIHRoaXMuc3RlcENvbmZpZyA9IGNoYW5nZXMuc3RlcENvbmZpZy5jdXJyZW50VmFsdWU7XG4gICAgfVxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJmb3JtRGF0YVwiKSkge1xuICAgICAgaWYgKFxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhjaGFuZ2VzLmZvcm1EYXRhLmN1cnJlbnRWYWx1ZSwgXCJkYXRhXCIpICYmXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGNoYW5nZXMuZm9ybURhdGEuY3VycmVudFZhbHVlLCBcImV4dGVuZGVkRGF0YVwiKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZm9ybURhdGEgPSB7XG4gICAgICAgICAgLi4udGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAuLi5jaGFuZ2VzLmZvcm1EYXRhLmN1cnJlbnRWYWx1ZS5kYXRhXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZvcm1EYXRhID0ge1xuICAgICAgICAgIC4uLnRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgLi4uY2hhbmdlcy5mb3JtRGF0YS5jdXJyZW50VmFsdWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcInBvcHVwRm9ybUNhbGxiYWNrXCIpKSB7XG4gICAgICBpZiAoaXNOb3RFbXB0eVZhbHVlKGNoYW5nZXMucG9wdXBGb3JtQ2FsbGJhY2suY3VycmVudFZhbHVlKSkge1xuICAgICAgICBjb25zdCBwb3B1cEZvcm1EYXRhID1cbiAgICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhcbiAgICAgICAgICAgIGNoYW5nZXMucG9wdXBGb3JtQ2FsbGJhY2suY3VycmVudFZhbHVlLnBvcHVwRm9ybURhdGEsXG4gICAgICAgICAgICBcImRhdGFcIlxuICAgICAgICAgICkgJiZcbiAgICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhcbiAgICAgICAgICAgIGNoYW5nZXMucG9wdXBGb3JtQ2FsbGJhY2suY3VycmVudFZhbHVlLnBvcHVwRm9ybURhdGEsXG4gICAgICAgICAgICBcImV4dGVuZGVkRGF0YVwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgPyBjaGFuZ2VzLnBvcHVwRm9ybUNhbGxiYWNrLmN1cnJlbnRWYWx1ZS5wb3B1cEZvcm1EYXRhLmRhdGFcbiAgICAgICAgICAgIDogY2hhbmdlcy5wb3B1cEZvcm1DYWxsYmFjay5jdXJyZW50VmFsdWUucG9wdXBGb3JtRGF0YTtcblxuICAgICAgICBjb25zdCB7IHBvcHVwRm9ybUNvbmZpZyB9ID0gY2hhbmdlcy5wb3B1cEZvcm1DYWxsYmFjay5jdXJyZW50VmFsdWU7XG5cbiAgICAgICAgdGhpcy5wb3B1cEZvcm1EYXRhID0gbWVyZ2VPYmplY3RzKHRoaXMucG9wdXBGb3JtRGF0YSwge1xuICAgICAgICAgIFtwb3B1cEZvcm1Db25maWcua2V5XTogcG9wdXBGb3JtRGF0YVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZvcm1EYXRhID0gbWVyZ2VPYmplY3RzKHRoaXMuZm9ybURhdGEsIHRoaXMucG9wdXBGb3JtRGF0YSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKFxuICAgICAgICAgICAgY2hhbmdlcy5wb3B1cEZvcm1DYWxsYmFjay5jdXJyZW50VmFsdWUsXG4gICAgICAgICAgICBcInN0b3BUYXNrRXhlY3V0aW9uXCJcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuc3RvcFRhc2tFeGVjdXRpb24gPVxuICAgICAgICAgICAgY2hhbmdlcy5wb3B1cEZvcm1DYWxsYmFjay5jdXJyZW50VmFsdWUuc3RvcFRhc2tFeGVjdXRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zdG9wVGFza0V4ZWN1dGlvbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMud2FpdGluZ0ZvckNoYW5nZXMgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImlzTW9iaWxlVmlld1wiKSkge1xuICAgICAgdGhpcy5pc01vYmlsZVZpZXcgPSBjaGFuZ2VzLmlzTW9iaWxlVmlldy5jdXJyZW50VmFsdWU7XG4gICAgfVxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJhcGlDYWxsUmVzcG9uc2VcIikpIHtcbiAgICAgIHRoaXMuYXBpQ2FsbFJlc3BvbnNlID0gY2hhbmdlcy5hcGlDYWxsUmVzcG9uc2UuY3VycmVudFZhbHVlO1xuXG4gICAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KFxuICAgICAgICB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgIHRoaXMuYXBpQ2FsbFJlc3BvbnNlLmtleVxuICAgICAgKTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSB0aGlzLmFwaUNhbGxSZXNwb25zZT8ucmVzcG9uc2U7XG5cbiAgICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuRklMRTpcbiAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRGaWxlID0gZ2V0T2JqZWN0RGVlcENvcHkoe1xuICAgICAgICAgICAgICBpZDogdXVpZHY0KCksXG4gICAgICAgICAgICAgIC4uLnJlc3BvbnNlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0FQSV9SRVNQT05TRV9VUExPQURfRklMRSwge1xuICAgICAgICAgICAgICBhcGlfa2V5OiB0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXksXG4gICAgICAgICAgICAgIGZpZWxkX2tleTogdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5LFxuICAgICAgICAgICAgICByZXNwb25zZV90eXBlOiBcIkZJTEVfVVBMT0FEX0FQSV9TVUNDRVNTXCIsXG4gICAgICAgICAgICAgIHJlc3BvbnNlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVGaWxlcyh1cGRhdGVkRmlsZSwgXCJOT1JNQUxcIiwgdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlZEZpbGUgPSBnZXRPYmplY3REZWVwQ29weSh7XG4gICAgICAgICAgICAgIGlkOiB1dWlkdjQoKSxcbiAgICAgICAgICAgICAgLi4udGhpcy5hcGlDYWxsUmVzcG9uc2U/LnBheWxvYWQ/Lm1ldGFkYXRhXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0FQSV9SRVNQT05TRV9VUExPQURfRklMRSwge1xuICAgICAgICAgICAgICBhcGlfa2V5OiB0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXksXG4gICAgICAgICAgICAgIGZpZWxkX2tleTogdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5LFxuICAgICAgICAgICAgICByZXNwb25zZV90eXBlOiBcIkZJTEVfVVBMT0FEX0FQSV9FUlJPUlwiXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVGaWxlcyh1cGRhdGVkRmlsZSwgXCJFUlJPUlwiLCB0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuQ0FQVFVSRTpcbiAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRDYW1lcmEoKTtcblxuICAgICAgICAgICAgY29uc3QgaW1hZ2UgPSByZXNwb25zZT8uaW1hZ2VfdXJsO1xuICAgICAgICAgICAgY29uc3QgaW1hZ2VPY3IgPSByZXNwb25zZT8uaW1hZ2Vfb2NyO1xuICAgICAgICAgICAgY29uc3QgaW1hZ2VGYWNlbWF0Y2ggPSByZXNwb25zZT8uaW1hZ2VfZmFjZW1hdGNoO1xuICAgICAgICAgICAgY29uc3QgaW1hZ2VMaXZlbGluZXNzID0gcmVzcG9uc2U/LmltYWdlX2xpdmVsaW5lc3M7XG4gICAgICAgICAgICBjb25zdCBpbWFnZVdhdGVybWFyayA9IHJlc3BvbnNlPy5pbWFnZV93YXRlcm1hcms7XG5cbiAgICAgICAgICAgIGNvbnN0IGlzQ2hlY2tDYW1lcmFGZWF0dXJlcyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBpbWFnZU9jciB8fCBpbWFnZUxpdmVsaW5lc3MgfHwgaW1hZ2VGYWNlbWF0Y2ggfHwgaW1hZ2VXYXRlcm1hcmtcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGltYWdlRGF0YSA9IGlzQ2hlY2tDYW1lcmFGZWF0dXJlcygpXG4gICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgaW1hZ2UsXG4gICAgICAgICAgICAgICAgICAuLi4oaW1hZ2VPY3IgJiYgeyBvY3I6IGltYWdlT2NyIH0pLFxuICAgICAgICAgICAgICAgICAgLi4uKGltYWdlRmFjZW1hdGNoICYmIHsgZmFjZW1hdGNoOiBpbWFnZUZhY2VtYXRjaCB9KSxcbiAgICAgICAgICAgICAgICAgIC4uLihpbWFnZUxpdmVsaW5lc3MgJiYgeyBsaXZlbGluZXNzOiBpbWFnZUxpdmVsaW5lc3MgfSksXG4gICAgICAgICAgICAgICAgICAuLi4oaW1hZ2VXYXRlcm1hcmsgJiYgeyB3YXRlcm1hcms6IGltYWdlV2F0ZXJtYXJrIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA6IGltYWdlO1xuXG4gICAgICAgICAgICB0aGlzLmZvcm1EYXRhW2ZpZWxkLmtleV0gPSBnZXRPYmplY3REZWVwQ29weShbaW1hZ2VEYXRhXSk7XG4gICAgICAgICAgICB0aGlzLmNhbWVyYURhdGFbZmllbGQua2V5XSA9IGdldE9iamVjdERlZXBDb3B5KGltYWdlRGF0YSk7XG4gICAgICAgICAgICB0aGlzLm1lZGlhRmlsZXNbZmllbGQua2V5XSA9IGdldE9iamVjdERlZXBDb3B5KFtpbWFnZURhdGFdKTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS5wYXRjaFZhbHVlKFxuICAgICAgICAgICAgICBnZXRPYmplY3REZWVwQ29weShbaW1hZ2VEYXRhXSksXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG9ubHlTZWxmOiBmYWxzZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFtmaWVsZC5rZXldOiBnZXRPYmplY3REZWVwQ29weShbaW1hZ2VEYXRhXSlcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe1xuICAgICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe1xuICAgICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5nZXRVbnNhdmVkRGF0YVN0YXRlLmVtaXQodHJ1ZSk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZmllbGQuaXNGb3JtRWxlbWVudCAmJlxuICAgICAgICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJ2YWxpZGF0aW9uXCIpICYmXG4gICAgICAgICAgICAgIGZpZWxkLnZhbGlkYXRpb24udHJpZ2dlcnMuaW5jbHVkZXMoXCJPTl9DSEFOR0VcIilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjb25zdCBydWxlRW5naW5lID0gbmV3IFJ1bGVFbmdpbmUoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHJ1bGVFbmdpbmUucnVuKGZpZWxkLnZhbGlkYXRpb24pO1xuICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkLmlzRm9ybUVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwiY29ubmVjdGVkRWxlbWVudHNcIilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRzKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiT05fQ0hBTkdFXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0FQSV9SRVNQT05TRV9VUExPQURfSU1BR0UsIHtcbiAgICAgICAgICAgICAgYXBpX2tleTogdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5LFxuICAgICAgICAgICAgICBmaWVsZF9rZXk6IHRoaXMuYXBpQ2FsbFJlc3BvbnNlLmtleSxcbiAgICAgICAgICAgICAgcmVzcG9uc2VfdHlwZTogXCJJTUFHRV9VUExPQURfQVBJX1NVQ0NFU1NcIixcbiAgICAgICAgICAgICAgcmVzcG9uc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fQVBJX1JFU1BPTlNFX1VQTE9BRF9JTUFHRSwge1xuICAgICAgICAgICAgICBhcGlfa2V5OiB0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXksXG4gICAgICAgICAgICAgIGZpZWxkX2tleTogdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5LFxuICAgICAgICAgICAgICByZXNwb25zZV90eXBlOiBcIklNQUdFX1VQTE9BRF9BUElfRVJST1JcIlxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGaWxlIFVwbG9hZCBmb3IgSW1hZ2UgRmFpbGVkXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLlJFQ09SRDpcbiAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRDYW1lcmEoKTtcblxuICAgICAgICAgICAgY29uc3QgdmlkZW8gPSByZXNwb25zZT8udmlkZW9fdXJsO1xuXG4gICAgICAgICAgICB0aGlzLmZvcm1EYXRhW2ZpZWxkLmtleV0gPSBnZXRPYmplY3REZWVwQ29weShbdmlkZW9dKTtcbiAgICAgICAgICAgIHRoaXMuY2FtZXJhRGF0YVtmaWVsZC5rZXldID0gZ2V0T2JqZWN0RGVlcENvcHkodmlkZW8pO1xuICAgICAgICAgICAgdGhpcy5tZWRpYUZpbGVzW2ZpZWxkLmtleV0gPSBnZXRPYmplY3REZWVwQ29weShbdmlkZW9dKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0ucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgICAgZ2V0T2JqZWN0RGVlcENvcHkoW3ZpZGVvXSksXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG9ubHlTZWxmOiBmYWxzZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFtmaWVsZC5rZXldOiBnZXRPYmplY3REZWVwQ29weShbdmlkZW9dKVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7IGVtaXRFdmVudDogZmFsc2UgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XG4gICAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XG4gICAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmdldFVuc2F2ZWREYXRhU3RhdGUuZW1pdCh0cnVlKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmaWVsZC5pc0Zvcm1FbGVtZW50ICYmXG4gICAgICAgICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInZhbGlkYXRpb25cIikgJiZcbiAgICAgICAgICAgICAgZmllbGQudmFsaWRhdGlvbi50cmlnZ2Vycy5pbmNsdWRlcyhcIk9OX0NIQU5HRVwiKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJ1bGVFbmdpbmUgPSBuZXcgUnVsZUVuZ2luZShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBGSUVMRF9DT05GSUc6IGZpZWxkLFxuICAgICAgICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICAgICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgcnVsZUVuZ2luZS5ydW4oZmllbGQudmFsaWRhdGlvbik7XG4gICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZmllbGQuaXNGb3JtRWxlbWVudCAmJlxuICAgICAgICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJjb25uZWN0ZWRFbGVtZW50c1wiKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudHMoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAga2V5OiBmaWVsZC5rZXksXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCJPTl9DSEFOR0VcIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fQVBJX1JFU1BPTlNFX1VQTE9BRF9WSURFTywge1xuICAgICAgICAgICAgICBhcGlfa2V5OiB0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXksXG4gICAgICAgICAgICAgIGZpZWxkX2tleTogdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5LFxuICAgICAgICAgICAgICByZXNwb25zZV90eXBlOiBcIlZJREVPX1VQTE9BRF9BUElfU1VDQ0VTU1wiLFxuICAgICAgICAgICAgICByZXNwb25zZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BUElfUkVTUE9OU0VfVVBMT0FEX1ZJREVPLCB7XG4gICAgICAgICAgICAgIGFwaV9rZXk6IHRoaXMuYXBpQ2FsbFJlc3BvbnNlLmtleSxcbiAgICAgICAgICAgICAgZmllbGRfa2V5OiB0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXksXG4gICAgICAgICAgICAgIHJlc3BvbnNlX3R5cGU6IFwiVklERU9fVVBMT0FEX0FQSV9FUlJPUlwiXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkZpbGUgVXBsb2FkIGZvciBWaWRlbyBGYWlsZWRcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuTElWRV9MT0NBVElPTjpcbiAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybURhdGFbZmllbGQua2V5XSA9IGdldE9iamVjdERlZXBDb3B5KHJlc3BvbnNlKTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS5wYXRjaFZhbHVlKFxuICAgICAgICAgICAgICBnZXRPYmplY3REZWVwQ29weShyZXNwb25zZSksXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG9ubHlTZWxmOiBmYWxzZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFtmaWVsZC5rZXldOiBnZXRPYmplY3REZWVwQ29weShyZXNwb25zZSlcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe1xuICAgICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe1xuICAgICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5nZXRVbnNhdmVkRGF0YVN0YXRlLmVtaXQodHJ1ZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGFwaXMgPSBuZXcgQXBpcyhcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgICAgICAgQVBJX0NPTkZJRzogZmllbGQuYXBpLFxuICAgICAgICAgICAgICAgIEFQSV9SRVNQT05TRTogcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICAgICAgQ0FNRVJBX0RBVEE6IHRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgICAgICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBhcGkgPSBhd2FpdCBhcGlzLnZhbGlkYXRlUmVzcG9uc2UoKTtcbiAgICAgICAgICAgICAgZmllbGQuYXBpID0gYXBpO1xuICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmaWVsZC5pc0Zvcm1FbGVtZW50ICYmXG4gICAgICAgICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInZhbGlkYXRpb25cIikgJiZcbiAgICAgICAgICAgICAgZmllbGQudmFsaWRhdGlvbi50cmlnZ2Vycy5pbmNsdWRlcyhcIk9OX0NIQU5HRVwiKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJ1bGVFbmdpbmUgPSBuZXcgUnVsZUVuZ2luZShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBGSUVMRF9DT05GSUc6IGZpZWxkLFxuICAgICAgICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICAgICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgcnVsZUVuZ2luZS5ydW4oZmllbGQudmFsaWRhdGlvbik7XG4gICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZmllbGQuaXNGb3JtRWxlbWVudCAmJlxuICAgICAgICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJjb25uZWN0ZWRFbGVtZW50c1wiKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudHMoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAga2V5OiBmaWVsZC5rZXksXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCJPTl9DSEFOR0VcIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcblxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhcbiAgICAgICAgICAgICAgRUxvZ0V2ZW50VHlwZS5GT1JNX19BUElfUkVTUE9OU0VfUkVWRVJTRV9MQVRfTE9ORyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFwaV9rZXk6IHRoaXMuYXBpQ2FsbFJlc3BvbnNlLmtleSxcbiAgICAgICAgICAgICAgICBmaWVsZF9rZXk6IHRoaXMuYXBpQ2FsbFJlc3BvbnNlLmtleSxcbiAgICAgICAgICAgICAgICByZXNwb25zZV90eXBlOiBcIlJFVkVSU0VfTEFUX0xPTkdfQVBJX1NVQ0NFU1NcIixcbiAgICAgICAgICAgICAgICByZXNwb25zZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJMb2dzKFxuICAgICAgICAgICAgICBFTG9nRXZlbnRUeXBlLkZPUk1fX0FQSV9SRVNQT05TRV9SRVZFUlNFX0xBVF9MT05HLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYXBpX2tleTogdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5LFxuICAgICAgICAgICAgICAgIGZpZWxkX2tleTogdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlX3R5cGU6IFwiUkVWRVJTRV9MQVRfTE9OR19BUElfRVJST1JcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBhcGlzID0gbmV3IEFwaXMoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBGSUVMRF9DT05GSUc6IGZpZWxkLFxuICAgICAgICAgICAgICAgIEFQSV9DT05GSUc6IGZpZWxkLmFwaSxcbiAgICAgICAgICAgICAgICBBUElfUkVTUE9OU0U6IHt9LFxuICAgICAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgYXBpID0gYXdhaXQgYXBpcy52YWxpZGF0ZVJlc3BvbnNlKCk7XG4gICAgICAgICAgICAgIGZpZWxkLmFwaSA9IGFwaTtcbiAgICAgICAgICAgIH0pKCk7XG5cbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJSZXZlcnNlIExvY2F0aW9uIGZvciBMYXRMb25nIEZhaWxlZFwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImJ1dHRvbkNsaWNrUmVzcG9uc2VcIikpIHtcbiAgICAgIHRoaXMuYnV0dG9uQ2xpY2tSZXNwb25zZSA9IGNoYW5nZXMuYnV0dG9uQ2xpY2tSZXNwb25zZS5jdXJyZW50VmFsdWU7XG5cbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UsIFwia2V5XCIpKSB7XG4gICAgICAgIGxldCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KFxuICAgICAgICAgIHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICB0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2U/LmtleVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UsIFwiZGVmYXVsdFwiKSkge1xuICAgICAgICAgIGZpZWxkLmRlZmF1bHQgPSBnZXRPYmplY3REZWVwQ29weSh0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UuZGVmYXVsdCk7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuYnV0dG9uQ2xpY2tSZXNwb25zZS5kZWZhdWx0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UsIFwibWVzc2FnZXNcIikpIHtcbiAgICAgICAgICBmaWVsZC5tZXNzYWdlcyA9IGdldE9iamVjdERlZXBDb3B5KHRoaXMuYnV0dG9uQ2xpY2tSZXNwb25zZS5tZXNzYWdlcyk7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuYnV0dG9uQ2xpY2tSZXNwb25zZS5tZXNzYWdlcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5idXR0b25DbGlja1Jlc3BvbnNlLCBcInZhbGlkYXRpb25cIikpIHtcbiAgICAgICAgICBmaWVsZC52YWxpZGF0aW9uID0gZ2V0T2JqZWN0RGVlcENvcHkoXG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UudmFsaWRhdGlvblxuICAgICAgICAgICk7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuYnV0dG9uQ2xpY2tSZXNwb25zZS52YWxpZGF0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgZmllbGQgPSBnZXRPYmplY3REZWVwQ29weShcbiAgICAgICAgICBtZXJnZU9iamVjdHMoZmllbGQsIHRoaXMuYnV0dG9uQ2xpY2tSZXNwb25zZSlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwidmFsaWRhdGlvblwiKSkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLnZhbGlkYXRpb24sIFwidHJpZ2dlcnNcIikgJiZcbiAgICAgICAgICAgIGZpZWxkLnZhbGlkYXRpb24udHJpZ2dlcnMuaW5jbHVkZXMoXCJPTl9SRVNQT05TRVwiKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgcnVsZUVuZ2luZSA9IG5ldyBSdWxlRW5naW5lKFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIGF3YWl0IHJ1bGVFbmdpbmUucnVuKGZpZWxkLnZhbGlkYXRpb24pO1xuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImFsbEZvcm1zRGF0YVwiKSkge1xuICAgICAgdGhpcy5hbGxGb3Jtc0RhdGEgPSBjaGFuZ2VzLmFsbEZvcm1zRGF0YS5jdXJyZW50VmFsdWU7XG4gICAgfVxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJmb3JtQ29uZmlnXCIpKSB7XG4gICAgICB0aGlzLmZvcm1Db25maWcgPSBjaGFuZ2VzLmZvcm1Db25maWcuY3VycmVudFZhbHVlO1xuXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmluaXRGb3JtQ29uZmlnKHRoaXMuZm9ybUNvbmZpZyk7XG4gICAgICB9KSgpO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWN0aXZlQ2FtZXJhUmVjb3JkaW5nVGltZXJTdWJjcmlwdGlvbikge1xuICAgICAgdGhpcy5hY3RpdmVDYW1lcmFSZWNvcmRpbmdUaW1lclN1YmNyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmFjdGl2ZUNhbWVyYVJlY29yZGluZ1N0YXRlU3ViY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhUmVjb3JkaW5nU3RhdGVTdWJjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgdHJpZ2dlckxvZ3MoZXZlbnRUeXBlOiBFTG9nRXZlbnRUeXBlLCBsb2dzOiBhbnkpIHtcbiAgICB0aGlzLmdldExvZ3MuZW1pdChcbiAgICAgIGZvcm1hdEV2ZW50TG9ncyhcbiAgICAgICAgZXZlbnRUeXBlLFxuICAgICAgICB0aGlzLnN0ZXBDb25maWcsXG4gICAgICAgIHRoaXMuZm9ybUNvbmZpZyxcbiAgICAgICAgZ2V0T2JqZWN0RGVlcENvcHkobG9ncylcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBpbml0Rm9ybUNvbmZpZyhmb3JtQ29uZmlnOiBhbnkpIHtcbiAgICBmb3JtQ29uZmlnID0gbmV3IENvbnZlcnRlcigpLmNvbnZlcnRGb3JtQ29uZmlnKGZvcm1Db25maWcpO1xuXG4gICAgZm9ybUNvbmZpZyA9IG5ldyBDb252ZXJ0ZXIoKS51cGRhdGVGb3JtQ29uZmlnUHJvcGVydGllcyhmb3JtQ29uZmlnKTtcblxuICAgIHRoaXMuc2V0Rm9ybUZpZWxkc0Zyb21Gb3JtQ29uZmlnKGZvcm1Db25maWcpO1xuXG4gICAgdGhpcy5zZXRGb3JtRmllbGRHcm91cHNGcm9tRm9ybUNvbmZpZyhmb3JtQ29uZmlnKTtcblxuICAgIHRoaXMuc2V0Rm9ybURhdGFGcm9tQWxsRm9ybXNEYXRhKCk7XG5cbiAgICB0aGlzLmZvcm1Db25maWcgPSBmb3JtQ29uZmlnO1xuXG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0NPTkZJR19MT0FEX1NVQ0NFU1MsIHtcbiAgICAgIC4uLihmb3JtQ29uZmlnLnNlcXVlbmNlTm8gJiYge1xuICAgICAgICBmb3JtX3NlcXVlbmNlX25vOiBmb3JtQ29uZmlnLnNlcXVlbmNlTm9cbiAgICAgIH0pLFxuICAgICAgLi4uKGZvcm1Db25maWcuc3RhdHVzICYmIHsgZm9ybV9zdGF0dXM6IGZvcm1Db25maWcuc3RhdHVzIH0pXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBQUkUgRm9ybSBUYXNrc1xuICAgICAqIDEuIEFQSSBDYWxscy5cbiAgICAgKiAyLiBBbHRlciBEYXRhIFN0cnVjdHVyZS5cbiAgICAgKiAzLiBBbHRlciBGb3JtIENvbmZpZy5cbiAgICAgKi9cbiAgICBpZiAoXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmZvcm1Db25maWcsIFwidGFza3NcIikgJiZcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuZm9ybUNvbmZpZy50YXNrcywgXCJwcmVcIilcbiAgICApIHtcbiAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19UQVNLX1BSRSwge30pO1xuXG4gICAgICBmb3IgKGNvbnN0IHByZVRhc2sgb2YgdGhpcy5mb3JtQ29uZmlnLnRhc2tzLnByZSkge1xuICAgICAgICBjb25zdCB0YXNrID0gbmV3IFRhc2tzKFxuICAgICAgICAgIHByZVRhc2ssXG4gICAgICAgICAge1xuICAgICAgICAgICAgRk9STV9DT05GSUc6IHRoaXMuZm9ybUNvbmZpZyxcbiAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnN0b3BUYXNrRXhlY3V0aW9uID0gZmFsc2U7XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhwcmVUYXNrLCBcIndhaXRcIikpIHtcbiAgICAgICAgICB0aGlzLndhaXRpbmdGb3JDaGFuZ2VzID0gcHJlVGFzay53YWl0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMud2FpdGluZ0ZvckNoYW5nZXMgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRhc2suZXhlY3V0ZSgpO1xuXG4gICAgICAgIC8vIFdhaXQgZm9yIG5nT25DaGFuZ2VzIHRvIGJlIGNhbGxlZCBiZWZvcmUgY29udGludWluZyB0byB0aGUgbmV4dCB0YXNrXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgY29uc3QgaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy53YWl0aW5nRm9yQ2hhbmdlcykge1xuICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgRk9STV9WSUVXX1RJTUVSUy5XQUlUX0ZPUl9DSEFOR0VTX0JFRk9SRV9NT1ZJTkdfVE9fTkVYVF9UQVNLKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuc3RvcFRhc2tFeGVjdXRpb24pIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmZvcm1EYXRhID0gbWVyZ2VPYmplY3RzKHRoaXMuZm9ybURhdGEsIHRoaXMucG9wdXBGb3JtRGF0YSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RvcFRhc2tFeGVjdXRpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmZvcm1Hcm91cCA9IGF3YWl0IHRoaXMuZm9ybVZpZXdTZXJ2aWNlLmNyZWF0ZUZvcm1Hcm91cChcbiAgICAgIHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgIHtcbiAgICAgICAgRk9STV9DT05GSUc6IHRoaXMuZm9ybUNvbmZpZyxcbiAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICB9LFxuICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogRm9yIHNvbWUgcmVhc29uIGlmIHRoZWlyIGEgZmllbGQgb2YgdHlwZSAnSU1BR0UnIHRoZW5cbiAgICAgKiBmb3JtRGF0YSBpcyBhZGRpbmcgYSAndW5kZWZpbmVkJyBrZXkgd2l0aCBsYXN0IGltYWdlJ3MgdmFsdWUgZnJvbSB0aGUgYXJyYXkuXG4gICAgICogQmVsb3cgcGllY2Ugb2YgY29kZSBpcyB0byByZW1vdmUgdGhhdCByZWR1bmRlbnQgdmFsdWUgZnJvbSBmb3JtRGF0YS5cbiAgICAgKi9cbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5mb3JtRGF0YSwgXCJ1bmRlZmluZWRcIikpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmZvcm1EYXRhLnVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHRoaXMuZm9ybUZpZWxkcykge1xuICAgICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhID0ge1xuICAgICAgICAgIC4uLnRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICBbZmllbGQua2V5XTogY29udmVydEZvcm1GaWVsZFZhbHVlVG9TdGFuZGFyZEZvcm1hdChcbiAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZVxuICAgICAgICAgIClcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmZvcm1EYXRhID0ge1xuICAgICAgICAgIC4uLnRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgW2ZpZWxkLmtleV06IGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvU3RhbmRhcmRGb3JtYXQoXG4gICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVcbiAgICAgICAgICApXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IEVGaWVsZFR5cGUuRklMRSkge1xuICAgICAgICAgIHRoaXMuZmlsZXNbZmllbGQua2V5XSA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IEVGaWVsZFR5cGUuQ0FQVFVSRSkge1xuICAgICAgICAgIHRoaXMucmVzZXRDYW1lcmEoKTtcblxuICAgICAgICAgIHRoaXMuY2FtZXJhRGF0YSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICAgIFtmaWVsZC5rZXldOiBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0KFxuICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICB0aGlzLm1lZGlhRmlsZXNbZmllbGQua2V5XSA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IEVGaWVsZFR5cGUuUkVDT1JEKSB7XG4gICAgICAgICAgdGhpcy5yZXNldENhbWVyYSgpO1xuXG4gICAgICAgICAgdGhpcy5jYW1lcmFEYXRhID0ge1xuICAgICAgICAgICAgLi4udGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgW2ZpZWxkLmtleV06IGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvU3RhbmRhcmRGb3JtYXQoXG4gICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlXG4gICAgICAgICAgICApXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHRoaXMubWVkaWFGaWxlc1tmaWVsZC5rZXldID0gdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVDaGFuZ2VzXG4gICAgICAgICAgLnBpcGUocGFpcndpc2UoKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKChbcHJldmlvdXNWYWx1ZSwgY3VycmVudFZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhID0ge1xuICAgICAgICAgICAgICAuLi50aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICAgIFtmaWVsZC5rZXldOiBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0KFxuICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsdWVcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcbiAgICAgICAgICAgICAgLi4udGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgICAgW2ZpZWxkLmtleV06IGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvU3RhbmRhcmRGb3JtYXQoXG4gICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSBFRmllbGRUeXBlLkZJTEUpIHtcbiAgICAgICAgICAgICAgdGhpcy5maWxlc1tmaWVsZC5rZXldID0gY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IEVGaWVsZFR5cGUuQ0FQVFVSRSkge1xuICAgICAgICAgICAgICB0aGlzLnJlc2V0Q2FtZXJhKCk7XG5cbiAgICAgICAgICAgICAgdGhpcy5jYW1lcmFEYXRhID0ge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICAgICAgICBbZmllbGQua2V5XTogY29udmVydEZvcm1GaWVsZFZhbHVlVG9TdGFuZGFyZEZvcm1hdChcbiAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHRoaXMubWVkaWFGaWxlc1tmaWVsZC5rZXldID0gY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IEVGaWVsZFR5cGUuUkVDT1JEKSB7XG4gICAgICAgICAgICAgIHRoaXMucmVzZXRDYW1lcmEoKTtcblxuICAgICAgICAgICAgICB0aGlzLmNhbWVyYURhdGEgPSB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgICAgIFtmaWVsZC5rZXldOiBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0KFxuICAgICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWVcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgdGhpcy5tZWRpYUZpbGVzW2ZpZWxkLmtleV0gPSBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiB0aGlzLmZvcm1GaWVsZHMpIHtcbiAgICAgIGlmIChmaWVsZC5pc0Zvcm1FbGVtZW50KSB7XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJ2YWxpZGF0aW9uXCIpKSB7XG4gICAgICAgICAgaWYgKGZpZWxkLnZhbGlkYXRpb24udHJpZ2dlcnMuaW5jbHVkZXMoXCJPTl9JTklUXCIpKSB7XG4gICAgICAgICAgICBjb25zdCBydWxlRW5naW5lID0gbmV3IFJ1bGVFbmdpbmUoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBGSUVMRF9DT05GSUc6IGZpZWxkLFxuICAgICAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgYXdhaXQgcnVsZUVuZ2luZS5ydW4oZmllbGQudmFsaWRhdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcImNvbm5lY3RlZEVsZW1lbnRzXCIpKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50cyhcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAga2V5OiBmaWVsZC5rZXksXG4gICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJPTl9JTklUXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHNldEZvcm1GaWVsZHNGcm9tRm9ybUNvbmZpZyhmb3JtQ29uZmlnOiBhbnkpIHtcbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybUNvbmZpZywgXCJmaWVsZHNcIikpIHtcbiAgICAgIHRoaXMuZm9ybUZpZWxkcyA9IGZvcm1Db25maWcuZmllbGRzO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmb3JtQ29uZmlnLCBcIm11bHRpRm9ybVwiKSAmJlxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybUNvbmZpZy5tdWx0aUZvcm0sIFwiZmllbGRzXCIpXG4gICAgKSB7XG4gICAgICB0aGlzLmZvcm1GaWVsZHMgPSBmb3JtQ29uZmlnLm11bHRpRm9ybS5maWVsZHM7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBzZXRGb3JtRmllbGRHcm91cHNGcm9tRm9ybUNvbmZpZyhmb3JtQ29uZmlnOiBhbnkpIHtcbiAgICB0aGlzLmZpZWxkR3JvdXBzID0gZm9ybUNvbmZpZy5maWVsZEdyb3VwcztcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgc2V0Rm9ybURhdGFGcm9tQWxsRm9ybXNEYXRhKCkge1xuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmFsbEZvcm1zRGF0YSwgdGhpcy5mb3JtQ29uZmlnLmtleSkpIHtcbiAgICAgIGNvbnN0IGZvcm1EYXRhID0gdGhpcy5hbGxGb3Jtc0RhdGFbdGhpcy5mb3JtQ29uZmlnLmtleV07XG5cbiAgICAgIGlmIChcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybURhdGEsIFwiZGF0YVwiKSAmJlxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmb3JtRGF0YSwgXCJleHRlbmRlZERhdGFcIilcbiAgICAgICkge1xuICAgICAgICB0aGlzLmZvcm1EYXRhID0ge1xuICAgICAgICAgIC4uLnRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgLi4uZm9ybURhdGEuZGF0YVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcbiAgICAgICAgICAuLi50aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIC4uLmZvcm1EYXRhXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybURhdGEgPSB7fTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEdyb3VwQWN0aW9ucyhcbiAgICBjaGlsZEZpZWxkR3JvdXBDb25maWc6IGFueSxcbiAgICBwYXJlbnRGaWVsZDogYW55XG4gICkge1xuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhjaGlsZEZpZWxkR3JvdXBDb25maWcsIFwicnVsZXNcIikpIHtcbiAgICAgIGNvbnN0IHJ1bGVzTWFwcGluZyA9IG5ldyBSdWxlKGNoaWxkRmllbGRHcm91cENvbmZpZy5ydWxlcywge1xuICAgICAgICBGSUVMRF9DT05GSUc6IHBhcmVudEZpZWxkLFxuICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgIH0pLm1hcHBpbmcoKTtcblxuICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgY2hpbGRGaWVsZEdyb3VwQ29uZmlnLmFjdGlvbnMpIHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uU3VjY2VzcyA9IG5ldyBDb25kaXRpb24oXG4gICAgICAgICAgYWN0aW9uLmNvbmRpdGlvbixcbiAgICAgICAgICBydWxlc01hcHBpbmdcbiAgICAgICAgKS5ldmFsdWF0ZSgpO1xuXG4gICAgICAgIGlmIChjb25kaXRpb25TdWNjZXNzKSB7XG4gICAgICAgICAgY29uc3QgYWN0aW9ucyA9IG5ldyBBY3Rpb24oXG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBydWxlc01hcHBpbmcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogcGFyZW50RmllbGQsXG4gICAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgICAgQ0FNRVJBX0RBVEE6IHRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMudGFrZUFjdGlvbk9uRmllbGRHcm91cC5iaW5kKHRoaXMpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGF3YWl0IGFjdGlvbnMuZXhlY3V0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRHcm91cChcbiAgICBjdXJyZW50RmllbGQ6IGFueSxcbiAgICBjb25uZWN0ZWRGaWVsZEdyb3VwQ29uZmlnOiBhbnksXG4gICAgZXZlbnRUeXBlOiBzdHJpbmdcbiAgKSB7XG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWcsIFwidHJpZ2dlcnNcIikpIHtcbiAgICAgIGlmIChjb25uZWN0ZWRGaWVsZEdyb3VwQ29uZmlnLnRyaWdnZXJzLmluY2x1ZGVzKGV2ZW50VHlwZSkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRHcm91cEFjdGlvbnMoXG4gICAgICAgICAgY29ubmVjdGVkRmllbGRHcm91cENvbmZpZyxcbiAgICAgICAgICBjdXJyZW50RmllbGRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEFjdGlvbnMoXG4gICAgY29ubmVjdGVkRmllbGRDb25maWc6IGFueSxcbiAgICBjb25uZWN0ZWRGaWVsZDogYW55XG4gICkge1xuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhjb25uZWN0ZWRGaWVsZENvbmZpZywgXCJydWxlc1wiKSkge1xuICAgICAgY29uc3QgcnVsZXNNYXBwaW5nID0gbmV3IFJ1bGUoY29ubmVjdGVkRmllbGRDb25maWcucnVsZXMsIHtcbiAgICAgICAgRklFTERfQ09ORklHOiBjb25uZWN0ZWRGaWVsZCxcbiAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICB9KS5tYXBwaW5nKCk7XG5cbiAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGNvbm5lY3RlZEZpZWxkQ29uZmlnLmFjdGlvbnMpIHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uU3VjY2VzcyA9IG5ldyBDb25kaXRpb24oXG4gICAgICAgICAgYWN0aW9uLmNvbmRpdGlvbixcbiAgICAgICAgICBydWxlc01hcHBpbmdcbiAgICAgICAgKS5ldmFsdWF0ZSgpO1xuXG4gICAgICAgIGlmIChjb25kaXRpb25TdWNjZXNzKSB7XG4gICAgICAgICAgY29uc3QgYWN0aW9ucyA9IG5ldyBBY3Rpb24oXG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBydWxlc01hcHBpbmcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogY29ubmVjdGVkRmllbGQsXG4gICAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgICAgQ0FNRVJBX0RBVEE6IHRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGF3YWl0IGFjdGlvbnMuZXhlY3V0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbm5lY3RlZEZpZWxkO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRzKFxuICAgIGN1cnJlbnRGaWVsZDogYW55LFxuICAgIGNvbm5lY3RlZEZpZWxkQ29uZmlnOiBhbnksXG4gICAgZXZlbnRUeXBlOiBzdHJpbmcsXG4gICAgbmVzdGVkOiBzdHJpbmdcbiAgKSB7XG4gICAgbGV0IGNvbm5lY3RlZEZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkoXG4gICAgICB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICBjb25uZWN0ZWRGaWVsZENvbmZpZy5rZXlcbiAgICApO1xuXG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGNvbm5lY3RlZEZpZWxkQ29uZmlnLCBcInRyaWdnZXJzXCIpKSB7XG4gICAgICBpZiAoY29ubmVjdGVkRmllbGRDb25maWcudHJpZ2dlcnMuaW5jbHVkZXMoZXZlbnRUeXBlKSkge1xuICAgICAgICBjb25uZWN0ZWRGaWVsZCA9IGF3YWl0IHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkQWN0aW9ucyhcbiAgICAgICAgICBjb25uZWN0ZWRGaWVsZENvbmZpZyxcbiAgICAgICAgICBjb25uZWN0ZWRGaWVsZFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoY29ubmVjdGVkRmllbGRDb25maWcsIFwiaGFuZGxlTmVzdGVkRmllbGRzXCIpKSB7XG4gICAgICBpZiAoY29ubmVjdGVkRmllbGRDb25maWcuaGFuZGxlTmVzdGVkRmllbGRzKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudHMoXG4gICAgICAgICAgeyBrZXk6IGNvbm5lY3RlZEZpZWxkQ29uZmlnLmtleSB9LFxuICAgICAgICAgIGV2ZW50VHlwZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3VycmVudEZpZWxkO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVDb25uZWN0ZWRFbGVtZW50cyhlOiBhbnksIGV2ZW50VHlwZTogc3RyaW5nKSB7XG4gICAgbGV0IGN1cnJlbnRGaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZS5rZXkpO1xuXG4gICAgaWYgKGN1cnJlbnRGaWVsZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoY3VycmVudEZpZWxkLCBcImNvbm5lY3RlZEVsZW1lbnRzXCIpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhcbiAgICAgICAgICAgIGN1cnJlbnRGaWVsZC5jb25uZWN0ZWRFbGVtZW50cyxcbiAgICAgICAgICAgIFwiY29ubmVjdGVkRmllbGRHcm91cHNcIlxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgeyBjb25uZWN0ZWRGaWVsZEdyb3VwcyB9ID0gY3VycmVudEZpZWxkLmNvbm5lY3RlZEVsZW1lbnRzO1xuICAgICAgICAgIGZvciAoY29uc3QgY29ubmVjdGVkRmllbGRHcm91cENvbmZpZyBvZiBjb25uZWN0ZWRGaWVsZEdyb3Vwcykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRHcm91cChcbiAgICAgICAgICAgICAgY3VycmVudEZpZWxkLFxuICAgICAgICAgICAgICBjb25uZWN0ZWRGaWVsZEdyb3VwQ29uZmlnLFxuICAgICAgICAgICAgICBldmVudFR5cGVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhcbiAgICAgICAgICAgIGN1cnJlbnRGaWVsZC5jb25uZWN0ZWRFbGVtZW50cyxcbiAgICAgICAgICAgIFwiY29ubmVjdGVkRmllbGRzXCJcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IHsgY29ubmVjdGVkRmllbGRzIH0gPSBjdXJyZW50RmllbGQuY29ubmVjdGVkRWxlbWVudHM7XG4gICAgICAgICAgZm9yIChjb25zdCBjb25uZWN0ZWRGaWVsZENvbmZpZyBvZiBjb25uZWN0ZWRGaWVsZHMpIHtcbiAgICAgICAgICAgIGN1cnJlbnRGaWVsZCA9IGF3YWl0IHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkcyhcbiAgICAgICAgICAgICAgY3VycmVudEZpZWxkLFxuICAgICAgICAgICAgICBjb25uZWN0ZWRGaWVsZENvbmZpZyxcbiAgICAgICAgICAgICAgZXZlbnRUeXBlLFxuICAgICAgICAgICAgICBldmVudFR5cGVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEZpZWxkIGZvciB0aGUgZ2l2ZW4ga2V5IFsnJHtlLmtleX0nXSBpcyBub3QgZm91bmQgd2l0aCBldmVudFR5cGU6ICcke2V2ZW50VHlwZX0nLmBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVSZW1vdmVkRmlsZShlOiBhbnkpIHtcbiAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgIGlmICh0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tlLmtleV0uZW5hYmxlZCkge1xuICAgICAgdGhpcy5maWxlc1tlLmtleV0gPSBlLmZpbGVzO1xuXG4gICAgICB0aGlzLmZvcm1EYXRhW2Uua2V5XSA9IGZpbHRlckR1cGxpY2F0ZXNGaWxlcyh0aGlzLmZpbGVzW2Uua2V5XSk7XG5cbiAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoXG4gICAgICAgIHtcbiAgICAgICAgICBbZS5rZXldOiB0aGlzLmZvcm1EYXRhW2Uua2V5XVxuICAgICAgICB9LFxuICAgICAgICB7IGVtaXRFdmVudDogZmFsc2UgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRklFTERfRklMRV9SRU1PVkUsIHtcbiAgICAgIGZpZWxkX2tleTogZS5rZXksXG4gICAgICAuLi4oZS5maWxlPy5uYW1lID8/IHsgZmlsZV9uYW1lOiBlLmZpbGU/Lm5hbWUgfSksXG4gICAgICAuLi4oZS5maWxlPy5zaXplID8/IHsgZmlsZV9zaXplOiBlLmZpbGU/LnNpemUgfSksXG4gICAgICAuLi4oZS5maWxlPy50eXBlID8/IHsgZmlsZV90eXBlOiBlLmZpbGU/LnR5cGUgfSlcbiAgICB9KTtcblxuICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVWaWV3QnV0dG9uQ2xpY2soZTogYW55LCBmaWVsZDogYW55KSB7XG4gICAgdGhpcy5vbkNsaWNrVmlld0ZpbGUuZW1pdCh7XG4gICAgICBrZXk6IGZpZWxkPy5rZXksXG4gICAgICB0eXBlOiBmaWVsZD8udHlwZSxcbiAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgZmllbGQsXG4gICAgICAgIGV2ZW50OiBlXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZUdldEtleVZhbHVlRmlsZShlOiBhbnkpIHtcbiAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBlLmtleSk7XG5cbiAgICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KGUudmFsdWUpID8gZS52YWx1ZSA6IFtlLnZhbHVlXTtcblxuICAgIGlmIChcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInByb3BlcnRpZXNcIikgJiZcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLnByb3BlcnRpZXMsIFwidXBsb2FkRmlsZVRvU2VydmVyXCIpICYmXG4gICAgICBmaWVsZC5wcm9wZXJ0aWVzLnVwbG9hZEZpbGVUb1NlcnZlclxuICAgICkge1xuICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgYXdhaXQgdGhpcy51cGxvYWRGaWxlKGZpZWxkLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRmlsZXModmFsdWUsIFwiTE9BRElOR1wiLCBlLmtleSk7XG5cbiAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0ZJRUxEX0ZJTEVfQURELCB7XG4gICAgICAgICAgZmllbGRfa2V5OiBlLmtleSxcbiAgICAgICAgICAuLi4oZS5maWxlPy5uYW1lID8/IHsgZmlsZV9uYW1lOiBlLmZpbGU/Lm5hbWUgfSksXG4gICAgICAgICAgLi4uKGUuZmlsZT8uc2l6ZSA/PyB7IGZpbGVfc2l6ZTogZS5maWxlPy5zaXplIH0pLFxuICAgICAgICAgIC4uLihlLmZpbGU/LnR5cGUgPz8geyBmaWxlX3R5cGU6IGUuZmlsZT8udHlwZSB9KVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB1cGRhdGVkRmlsZSA9IGdldE9iamVjdERlZXBDb3B5KFxuICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgaWQ6IHV1aWR2NCgpLFxuICAgICAgICAgICAgICAgIG5hbWU6IHZhbHVlLm5hbWUsXG4gICAgICAgICAgICAgICAgdHlwZTogdmFsdWUudHlwZSxcbiAgICAgICAgICAgICAgICBzaXplOiB2YWx1ZS5zaXplLFxuICAgICAgICAgICAgICAgIGxhc3RNb2RpZmllZDogdmFsdWUubGFzdE1vZGlmaWVkLFxuICAgICAgICAgICAgICAgIHdlYmtpdFJlbGF0aXZlUGF0aDogdmFsdWUud2Via2l0UmVsYXRpdmVQYXRoXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgRk9STV9WSUVXX1RJTUVSUy5XQUlUX0ZPUl9GSUxFX01FVEFEQVRBX0RFRVBDT1BZKTsgLy8gMTAwMCBtcyA9IDEgc2VjXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZUZpbGVzKHVwZGF0ZWRGaWxlLCBcIk5PUk1BTFwiLCBlLmtleSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBNZXRob2RzIGZvciBDYW1lcmEgcmVsYXRlZCBmaWVsZHMgbGlrZSAnQ0FQVFVSRScgb3IgICdSRUNPUkQnICovXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja0dldFJlbW92ZWRNZWRpYUZpbGUoZTogYW55KSB7XG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2Uua2V5XS5lbmFibGVkKSB7XG4gICAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGUua2V5KTtcblxuICAgICAgdGhpcy5yZXNldENhbWVyYSgpO1xuXG4gICAgICB0aGlzLm1lZGlhRmlsZXNbZS5rZXldID0gZS5tZWRpYUZpbGVzO1xuXG4gICAgICB0aGlzLmZvcm1EYXRhW2Uua2V5XSA9IGZpbHRlckR1cGxpY2F0ZXNNZWRpYUZpbGVzKHRoaXMubWVkaWFGaWxlc1tlLmtleV0pO1xuXG4gICAgICB0aGlzLmNhbWVyYURhdGFbZS5rZXldID0gY29udmVydEZvcm1GaWVsZFZhbHVlVG9TdGFuZGFyZEZvcm1hdChcbiAgICAgICAgZmllbGQsXG4gICAgICAgIHRoaXMuZm9ybURhdGFbZS5rZXldXG4gICAgICApO1xuXG4gICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKFxuICAgICAgICB7XG4gICAgICAgICAgW2Uua2V5XTogdGhpcy5mb3JtRGF0YVtlLmtleV1cbiAgICAgICAgfSxcbiAgICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICAgICk7XG5cbiAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19GSUVMRF9NRURJQV9GSUxFX1JFTU9WRSwge1xuICAgICAgICBmaWVsZF9rZXk6IGUua2V5LFxuICAgICAgICAuLi4oZS5maWxlPy5uYW1lID8/IHsgZmlsZV9uYW1lOiBlLmZpbGU/Lm5hbWUgfSksXG4gICAgICAgIC4uLihlLmZpbGU/LnNpemUgPz8geyBmaWxlX3NpemU6IGUuZmlsZT8uc2l6ZSB9KSxcbiAgICAgICAgLi4uKGUuZmlsZT8udHlwZSA/PyB7IGZpbGVfdHlwZTogZS5maWxlPy50eXBlIH0pXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5nZXRVbnNhdmVkRGF0YVN0YXRlLmVtaXQodHJ1ZSk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgZmllbGQuaXNGb3JtRWxlbWVudCAmJlxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJ2YWxpZGF0aW9uXCIpICYmXG4gICAgICAgIGZpZWxkLnZhbGlkYXRpb24udHJpZ2dlcnMuaW5jbHVkZXMoXCJPTl9DSEFOR0VcIilcbiAgICAgICkge1xuICAgICAgICBjb25zdCBydWxlRW5naW5lID0gbmV3IFJ1bGVFbmdpbmUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgKTtcblxuICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IHJ1bGVFbmdpbmUucnVuKGZpZWxkLnZhbGlkYXRpb24pO1xuICAgICAgICB9KSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGZpZWxkLmlzRm9ybUVsZW1lbnQgJiZcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwiY29ubmVjdGVkRWxlbWVudHNcIilcbiAgICAgICkge1xuICAgICAgICB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRzKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiT05fQ0hBTkdFXCJcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICAgICAgfSwgNTAwKTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZU9uQ2xpY2tJbnB1dENhbWVyYShlOiBhbnksIGZpZWxkOiBhbnkpIHtcbiAgICB0aGlzLmxvYWRlclNlcnZpY2Uuc2hvdyh7XG4gICAgICBsb2FkZXJUZXh0OiBcIkxvYWRpbmcgQ2FtZXJhLi4uXCIsXG4gICAgICBmdWxsc2NyZWVuOiB0cnVlXG4gICAgfSk7XG5cbiAgICBjb25zdCBmaWVsZEtleSA9IGZpZWxkLmtleTtcbiAgICBjb25zdCBmaWVsZENhbWVyYUNvbmZpZyA9IGZpZWxkPy5wcm9wZXJ0aWVzID8/IHt9O1xuXG4gICAgdGhpcy5hY3RpdmVDYW1lcmFUeXBlID0gZmllbGQ/LnR5cGUudG9VcHBlckNhc2UoKSB8fCBcIlwiO1xuICAgIHRoaXMuYWN0aXZlQ2FtZXJhRmllbGRLZXkgPSBmaWVsZEtleTtcblxuICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19GSUVMRF9DQU1FUkFfQlVUVE9OX0NMSUNLLCB7XG4gICAgICBmaWVsZF9rZXk6IGZpZWxkLmtleSxcbiAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGUsXG4gICAgICBjYW1lcmFfdHlwZTogdGhpcy5hY3RpdmVDYW1lcmFUeXBlXG4gICAgfSk7XG5cbiAgICBzd2l0Y2ggKHRoaXMuYWN0aXZlQ2FtZXJhVHlwZSkge1xuICAgICAgY2FzZSBcIkNBUFRVUkVcIjpcbiAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmFDb25maWcgPSBtZXJnZU9iamVjdHNEZWVwKFtcbiAgICAgICAgICBGSUVMRF9QUk9QRVJUSUVTLmNhcHR1cmUsXG4gICAgICAgICAgZmllbGRDYW1lcmFDb25maWdcbiAgICAgICAgXSk7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmFEYXRhID0ge307XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhQ29uZmlnPy5mZWF0dXJlcz8ud2F0ZXJtYXJrPy5pc0VuYWJsZWQgJiZcbiAgICAgICAgICAhdGhpcy5hY3RpdmVDYW1lcmFDb25maWcuZmVhdHVyZXM/LndhdGVybWFyaz8uaXNXYXRlcm1hcmtGcm9tU2VydmVyXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGNhbWVyYUhlbHBlciA9IG5ldyBDYW1lcmFIZWxwZXIoZmllbGQsIHtcbiAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICBGSUVMRF9DT05GSUc6IGZpZWxkLFxuICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgQ0FNRVJBX0RBVEE6IHRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhRGF0YSA9IHtcbiAgICAgICAgICAgIHdhdGVybWFyazogYXdhaXQgY2FtZXJhSGVscGVyLmdldENhbWVyYVdhdGVybWFya0RhdGEoKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiUkVDT1JEXCI6XG4gICAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhQ29uZmlnID0gbWVyZ2VPYmplY3RzRGVlcChbXG4gICAgICAgICAgRklFTERfUFJPUEVSVElFUy5yZWNvcmQsXG4gICAgICAgICAgZmllbGRDYW1lcmFDb25maWdcbiAgICAgICAgXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5yZXNldENhbWVyYSgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb25maWcgYW5kIG90aGVyIGRhdGEgaXMgc2V0IG5vdywgc28gd2UgY2FuIHNob3cgdGhlIGNhbWVyYS5cbiAgICAgKi9cbiAgICB0aGlzLmlzU2hvd0NhbWVyYSA9IHRydWU7XG5cbiAgICB0aGlzLmxvYWRlclNlcnZpY2UuaGlkZSgpO1xuICB9XG5cbiAgLyoqIEt3aWtJRCBDYW1lcmEgTWV0aG9kcyAqL1xuICAvKiogQ2FtZXJhVHlwZSA9IENBUFRVUkUgKi9cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBzZXRDYW1lcmFNZWRpYShtZWRpYTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIHRoaXMuYWN0aXZlQ2FtZXJhRmllbGRLZXkpO1xuXG4gICAgaWYgKFxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwicHJvcGVydGllc1wiKSAmJlxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQucHJvcGVydGllcywgXCJ1cGxvYWRGaWxlVG9TZXJ2ZXJcIikgJiZcbiAgICAgIGZpZWxkLnByb3BlcnRpZXMudXBsb2FkRmlsZVRvU2VydmVyXG4gICAgKSB7XG4gICAgICBhd2FpdCB0aGlzLnVwbG9hZEZpbGUoZmllbGQsIG1lZGlhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYWN0aXZlQ2FtZXJhRGF0YSA9IHRoaXMuYWN0aXZlQ2FtZXJhRGF0YTtcblxuICAgICAgdGhpcy5yZXNldENhbWVyYSgpO1xuXG4gICAgICBsZXQgdXBkYXRlZE1lZGlhOiBhbnkgPSB7fTtcblxuICAgICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICAgIGNhc2UgRUZpZWxkVHlwZS5DQVBUVVJFOlxuICAgICAgICAgIHVwZGF0ZWRNZWRpYSA9IHtcbiAgICAgICAgICAgIC4uLihpc05vdEVtcHR5VmFsdWUoYWN0aXZlQ2FtZXJhRGF0YSkgPyBhY3RpdmVDYW1lcmFEYXRhIDoge30pLFxuICAgICAgICAgICAgaW1hZ2U6IG1lZGlhXG4gICAgICAgICAgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLlJFQ09SRDpcbiAgICAgICAgICB1cGRhdGVkTWVkaWEgPSB7XG4gICAgICAgICAgICAuLi4oaXNOb3RFbXB0eVZhbHVlKGFjdGl2ZUNhbWVyYURhdGEpID8gYWN0aXZlQ2FtZXJhRGF0YSA6IHt9KSxcbiAgICAgICAgICAgIHZpZGVvOiBtZWRpYVxuICAgICAgICAgIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZm9ybURhdGFbZmllbGQua2V5XSA9IGdldE9iamVjdERlZXBDb3B5KFt1cGRhdGVkTWVkaWFdKTtcbiAgICAgIHRoaXMuY2FtZXJhRGF0YVtmaWVsZC5rZXldID0gZ2V0T2JqZWN0RGVlcENvcHkodXBkYXRlZE1lZGlhKTtcbiAgICAgIHRoaXMubWVkaWFGaWxlc1tmaWVsZC5rZXldID0gZ2V0T2JqZWN0RGVlcENvcHkoW3VwZGF0ZWRNZWRpYV0pO1xuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS5wYXRjaFZhbHVlKFxuICAgICAgICBnZXRPYmplY3REZWVwQ29weShbdXBkYXRlZE1lZGlhXSksXG4gICAgICAgIHtcbiAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICAgIG9ubHlTZWxmOiBmYWxzZVxuICAgICAgICB9XG4gICAgICApO1xuICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShcbiAgICAgICAge1xuICAgICAgICAgIFtmaWVsZC5rZXldOiBnZXRPYmplY3REZWVwQ29weShbdXBkYXRlZE1lZGlhXSlcbiAgICAgICAgfSxcbiAgICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICAgICk7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe1xuICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe1xuICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5nZXRVbnNhdmVkRGF0YVN0YXRlLmVtaXQodHJ1ZSk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgZmllbGQuaXNGb3JtRWxlbWVudCAmJlxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJ2YWxpZGF0aW9uXCIpICYmXG4gICAgICAgIGZpZWxkLnZhbGlkYXRpb24udHJpZ2dlcnMuaW5jbHVkZXMoXCJPTl9DSEFOR0VcIilcbiAgICAgICkge1xuICAgICAgICBjb25zdCBydWxlRW5naW5lID0gbmV3IFJ1bGVFbmdpbmUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgKTtcblxuICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IHJ1bGVFbmdpbmUucnVuKGZpZWxkLnZhbGlkYXRpb24pO1xuICAgICAgICB9KSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGZpZWxkLmlzRm9ybUVsZW1lbnQgJiZcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwiY29ubmVjdGVkRWxlbWVudHNcIilcbiAgICAgICkge1xuICAgICAgICB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRzKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiT05fQ0hBTkdFXCJcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0ZJRUxEX0ZJTEVfQURELCB7XG4gICAgICAgIGZpZWxkX2tleTogZmllbGQua2V5LFxuICAgICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogQ2FtZXJhIENvbW1vbiBNZXRob2RzICovXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlR2V0Q2FtZXJhTWVkaWEoZTogYW55LCBhY3RpdmVDYW1lcmFUeXBlOiBcIkNBUFRVUkVcIiB8IFwiUkVDT1JEXCIpIHtcbiAgICBzd2l0Y2ggKGFjdGl2ZUNhbWVyYVR5cGUpIHtcbiAgICAgIGNhc2UgXCJDQVBUVVJFXCI6XG4gICAgICAgIHRoaXMuc2hvd0FwaUxvYWRlcigpO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhSW1hZ2UgPSBcIlwiO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIFByaW9yaXR5IG9mIEltYWdlIHRvIFNldCBmb3IgQ29uZmlnIEJhc2VkXG4gICAgICAgICAgICogMS4gTWFza2VkXG4gICAgICAgICAgICogMi4gQ3JvcHBlZFxuICAgICAgICAgICAqIDMuIE9yaWdpbmFsXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBJZiBubyBtYXNrZWQgb3IgY3JvcHBlZCBpbWFnZSBpcyBhdmFpbGFibGUgdGhlbiBkaXJlY3RseSBzZXQgT3JpZ2luYWwgSW1hZ2VcbiAgICAgICAgICAgKi9cbiAgICAgICAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KFxuICAgICAgICAgICAgdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmFGaWVsZEtleVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBpbWFnZSA9IGZpZWxkLnByb3BlcnRpZXM/LmlzTWFza2VkSW1hZ2VcbiAgICAgICAgICAgID8gZT8ubWFza2VkSW1hZ2UgPz8gZT8ub3JpZ2luYWxJbWFnZVxuICAgICAgICAgICAgOiBmaWVsZC5wcm9wZXJ0aWVzPy5pc0Nyb3BwZWRJbWFnZVxuICAgICAgICAgICAgICA/IGU/LmNyb3BwZWRJbWFnZSA/PyBlPy5vcmlnaW5hbEltYWdlXG4gICAgICAgICAgICAgIDogZT8ub3JpZ2luYWxJbWFnZTtcblxuICAgICAgICAgIGNvbnN0IGlzU2hvd0ltYWdlUHJldmlldyA9XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYUNvbmZpZz8uY2FtZXJhQ29uZmlnPy5vdGhlcnM/LnByZXZpZXc/LnNob3c7XG5cbiAgICAgICAgICBpZiAoaXNTaG93SW1hZ2VQcmV2aWV3KSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYUltYWdlID0gaW1hZ2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FtZXJhTWVkaWEoaW1hZ2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICAgICAgICB9LCBGT1JNX1ZJRVdfVElNRVJTLldBSVRfRk9SX0tXSUtJRF9DQU1FUkFfVE9fTE9BRCk7IC8vIERlbGF5IGlzIGFkZGVkIGR1ZSB0byBpc3N1cyB3aXRoIEt3aWtJRCBDYW1lcmEgbm90IGJlaW5nIGFibGUgdG8gaGFuZGxlIHRvIGZhc3QgcHJvY2Vzc2luZy5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiUkVDT1JEXCI6XG4gICAgICAgIHRoaXMuc2hvd0FwaUxvYWRlcigpO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhVmlkZW8gPSBcIlwiO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIFByaW9yaXR5IG9mIEltYWdlIHRvIFNldCBmb3IgQ29uZmlnIEJhc2VkXG4gICAgICAgICAgICogMS4gT3JpZ2luYWxcbiAgICAgICAgICAgKi9cbiAgICAgICAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KFxuICAgICAgICAgICAgdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmFGaWVsZEtleVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCB2aWRlbyA9IGU/Lm9yaWdpbmFsVmlkZW87XG5cbiAgICAgICAgICBjb25zdCBpc1Nob3dWaWRlb1ByZXZpZXcgPVxuICAgICAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmFDb25maWc/Lm90aGVycz8ucHJldmlldz8uc2hvdztcblxuICAgICAgICAgIGlmIChpc1Nob3dWaWRlb1ByZXZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhVmlkZW8gPSB2aWRlbztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRDYW1lcmFNZWRpYSh2aWRlbyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gICAgICAgIH0sIEZPUk1fVklFV19USU1FUlMuV0FJVF9GT1JfS1dJS0lEX0NBTUVSQV9UT19MT0FEKTsgLy8gRGVsYXkgaXMgYWRkZWQgZHVlIHRvIGlzc3VzIHdpdGggS3dpa0lEIENhbWVyYSBub3QgYmVpbmcgYWJsZSB0byBoYW5kbGUgdG8gZmFzdCBwcm9jZXNzaW5nLlxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja1NhdmVDYW1lcmFNZWRpYShlOiBhbnksIGFjdGl2ZUNhbWVyYVR5cGU6IFwiQ0FQVFVSRVwiIHwgXCJSRUNPUkRcIikge1xuICAgIHRoaXMuc2hvd0FwaUxvYWRlcigpO1xuXG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIHRoaXMuYWN0aXZlQ2FtZXJhRmllbGRLZXkpO1xuXG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0NBTUVSQV9TQVZFX0JVVFRPTl9DTElDSywge1xuICAgICAgZmllbGRfa2V5OiBmaWVsZC5rZXksXG4gICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlLFxuICAgICAgY2FtZXJhX3R5cGU6IGFjdGl2ZUNhbWVyYVR5cGVcbiAgICB9KTtcblxuICAgIHN3aXRjaCAoYWN0aXZlQ2FtZXJhVHlwZSkge1xuICAgICAgY2FzZSBcIkNBUFRVUkVcIjpcbiAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmFJbWFnZSA9IFwiXCI7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogUHJpb3JpdHkgb2YgSW1hZ2UgdG8gU2V0IGZvciBDb25maWcgQmFzZWRcbiAgICAgICAgICAgKiAxLiBNYXNrZWRcbiAgICAgICAgICAgKiAyLiBDcm9wcGVkXG4gICAgICAgICAgICogMy4gT3JpZ2luYWxcbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIElmIG5vIG1hc2tlZCBvciBjcm9wcGVkIGltYWdlIGlzIGF2YWlsYWJsZSB0aGVuIGRpcmVjdGx5IHNldCBPcmlnaW5hbCBJbWFnZVxuICAgICAgICAgICAqL1xuICAgICAgICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkoXG4gICAgICAgICAgICB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYUZpZWxkS2V5XG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IGltYWdlID0gZmllbGQucHJvcGVydGllcz8uaXNNYXNrZWRJbWFnZVxuICAgICAgICAgICAgPyBlPy5tYXNrZWRJbWFnZSA/PyBlPy5vcmlnaW5hbEltYWdlXG4gICAgICAgICAgICA6IGZpZWxkLnByb3BlcnRpZXM/LmlzQ3JvcHBlZEltYWdlXG4gICAgICAgICAgICAgID8gZT8uY3JvcHBlZEltYWdlID8/IGU/Lm9yaWdpbmFsSW1hZ2VcbiAgICAgICAgICAgICAgOiBlPy5vcmlnaW5hbEltYWdlO1xuXG4gICAgICAgICAgdGhpcy5zZXRDYW1lcmFNZWRpYShpbWFnZSk7XG5cbiAgICAgICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICAgICAgfSwgRk9STV9WSUVXX1RJTUVSUy5XQUlUX0ZPUl9LV0lLSURfQ0FNRVJBX1RPX0xPQUQpOyAvLyBEZWxheSBpcyBhZGRlZCBkdWUgdG8gaXNzdXMgd2l0aCBLd2lrSUQgQ2FtZXJhIG5vdCBiZWluZyBhYmxlIHRvIGhhbmRsZSB0byBmYXN0IHByb2Nlc3NpbmcuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIlJFQ09SRFwiOlxuICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYVZpZGVvID0gXCJcIjtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBQcmlvcml0eSBvZiBJbWFnZSB0byBTZXQgZm9yIENvbmZpZyBCYXNlZFxuICAgICAgICAgICAqIDEuIE9yaWdpbmFsXG4gICAgICAgICAgICovXG4gICAgICAgICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleShcbiAgICAgICAgICAgIHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhRmllbGRLZXlcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgdmlkZW8gPSBlPy5vcmlnaW5hbFZpZGVvO1xuXG4gICAgICAgICAgdGhpcy5zZXRDYW1lcmFNZWRpYSh2aWRlbyk7XG5cbiAgICAgICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICAgICAgfSwgRk9STV9WSUVXX1RJTUVSUy5XQUlUX0ZPUl9LV0lLSURfQ0FNRVJBX1RPX0xPQUQpOyAvLyBEZWxheSBpcyBhZGRlZCBkdWUgdG8gaXNzdXMgd2l0aCBLd2lrSUQgQ2FtZXJhIG5vdCBiZWluZyBhYmxlIHRvIGhhbmRsZSB0byBmYXN0IHByb2Nlc3NpbmcuXG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkNsaWNrQ2FtZXJhQmFjayhlOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgdGhpcy5hY3RpdmVDYW1lcmFGaWVsZEtleSk7XG5cbiAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fQ0FNRVJBX0JBQ0tfQlVUVE9OX0NMSUNLLCB7XG4gICAgICBmaWVsZF9rZXk6IGZpZWxkLmtleSxcbiAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGVcbiAgICB9KTtcblxuICAgIHRoaXMucmVzZXRDYW1lcmEoKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja0NhbWVyYUNsb3NlKGU6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCB0aGlzLmFjdGl2ZUNhbWVyYUZpZWxkS2V5KTtcblxuICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19DQU1FUkFfQ0xPU0VfQlVUVE9OX0NMSUNLLCB7XG4gICAgICBmaWVsZF9rZXk6IGZpZWxkLmtleSxcbiAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGVcbiAgICB9KTtcblxuICAgIHRoaXMucmVzZXRDYW1lcmEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHVwZGF0ZSB0aGUgZmlsZXMgYXJyYXkgd2l0aCB0aGUgbmV3IGZpbGUgYW5kIGl0J3Mgc3RhdGUgYW5kIHJlc3BvbnNlIGZyb20gdGhlIGFwaSBvZiB1cGxvYWRpbmcgdGhlIGZpbGUuXG4gICAqL1xuICBAbG9nTWV0aG9kXG4gIHVwZGF0ZUZpbGVzKGZpbGU6IGFueSwgc3RhdGU6IHN0cmluZywga2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCBmaWxlV2l0aFN0YXRlID0gbWVyZ2VPYmplY3RzKGZpbGUgYXMgYW55LCB7IHN0YXRlIH0pO1xuXG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGtleSk7XG5cbiAgICBpZiAoZmllbGQucHJvcGVydGllcz8ubXVsdGlwbGUpIHtcbiAgICAgIC8vIElmIGZpZWxkLnByb3BlcnRpZXM/Lm11bHRpcGxlIGlzIHRydWUsIGl0IG1lYW5zIG11bHRpcGxlIGZpbGVzIGFyZSBhbGxvd2VkIGZvciB0aGlzIGZpZWxkLlxuICAgICAgLy8gVXBkYXRlIHRoZSBleGlzdGluZyBmaWxlcyBhcnJheSBmb3IgdGhlIHNwZWNpZmljIGtleSB3aXRoIHRoZSBuZXcgZmlsZS5cbiAgICAgIGNvbnN0IHVwZGF0ZWRGaWxlcyA9IFtcbiAgICAgICAgLi4udGhpcy5maWxlc1trZXldLmZpbHRlcihcbiAgICAgICAgICAoZikgPT4gZi5uYW1lICE9PSBmaWxlV2l0aFN0YXRlLm5hbWUgfHwgZi5zaXplICE9PSBmaWxlV2l0aFN0YXRlLnNpemVcbiAgICAgICAgKSxcbiAgICAgICAgZmlsZVdpdGhTdGF0ZVxuICAgICAgXTtcblxuICAgICAgLy8gQXBwbHkgdGhlIGZpbHRlckR1cGxpY2F0ZXNGaWxlcyBmdW5jdGlvbiB0byBlbnN1cmUgdW5pcXVlbmVzcyBpbiB0aGUgdXBkYXRlZEZpbGVzIGFycmF5LlxuICAgICAgdGhpcy5maWxlc1trZXldID0gZmlsdGVyRHVwbGljYXRlc0ZpbGVzKHVwZGF0ZWRGaWxlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIGZpZWxkLnByb3BlcnRpZXM/Lm11bHRpcGxlIGlzIGZhbHNlLCBvbmx5IG9uZSBmaWxlIGlzIGFsbG93ZWQgZm9yIHRoaXMgZmllbGQuXG4gICAgICAvLyBSZXBsYWNlIHRoZSBleGlzdGluZyBmaWxlcyBhcnJheSBmb3IgdGhlIHNwZWNpZmljIGtleSB3aXRoIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG5ldyBmaWxlLlxuICAgICAgdGhpcy5maWxlc1trZXldID0gW2ZpbGVXaXRoU3RhdGVdO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgZm9ybURhdGEgYW5kIGZvcm1Hcm91cCBjb250cm9scyBmb3IgdGhlIHNwZWNpZmljIGtleSB3aXRoIHRoZSBub3JtYWxGaWxlcyBhcnJheS5cbiAgICBjb25zdCBub3JtYWxGaWxlcyA9IHRoaXMuZmlsZXNba2V5XS5maWx0ZXIoKGZpbGUpID0+IHtcbiAgICAgIHJldHVybiBmaWxlLnN0YXRlID09PSBcIk5PUk1BTFwiO1xuICAgIH0pO1xuXG4gICAgdGhpcy5mb3JtRGF0YVtrZXldID0gbm9ybWFsRmlsZXM7XG4gICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNba2V5XS5wYXRjaFZhbHVlKG5vcm1hbEZpbGVzLCB7XG4gICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgb25seVNlbGY6IGZhbHNlXG4gICAgfSk7XG4gICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShcbiAgICAgIHtcbiAgICAgICAgW2tleV06IG5vcm1hbEZpbGVzXG4gICAgICB9LFxuICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICApO1xuXG4gICAgdGhpcy5nZXRVbnNhdmVkRGF0YVN0YXRlLmVtaXQodHJ1ZSk7XG5cbiAgICBpZiAoXG4gICAgICBmaWVsZC5pc0Zvcm1FbGVtZW50ICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJ2YWxpZGF0aW9uXCIpICYmXG4gICAgICBmaWVsZC52YWxpZGF0aW9uLnRyaWdnZXJzLmluY2x1ZGVzKFwiT05fQ0hBTkdFXCIpXG4gICAgKSB7XG4gICAgICBjb25zdCBydWxlRW5naW5lID0gbmV3IFJ1bGVFbmdpbmUoXG4gICAgICAgIHtcbiAgICAgICAgICBGSUVMRF9DT05GSUc6IGZpZWxkLFxuICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICB9LFxuICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgKTtcblxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgcnVsZUVuZ2luZS5ydW4oZmllbGQudmFsaWRhdGlvbik7XG4gICAgICB9KSgpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGZpZWxkLmlzRm9ybUVsZW1lbnQgJiZcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcImNvbm5lY3RlZEVsZW1lbnRzXCIpXG4gICAgKSB7XG4gICAgICB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRzKFxuICAgICAgICB7XG4gICAgICAgICAga2V5OiBmaWVsZC5rZXksXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVcbiAgICAgICAgfSxcbiAgICAgICAgXCJPTl9DSEFOR0VcIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBhIGFwaSB1cGxvYWQgbW9ja2luZyBtZXRob2QuIFNldCdzIHRvIGxvYWRpbmcgYXQgZmlyc3QgYXQgcG9pbnQgd2hlbiBBUEkgaXMgY2FsbGVkIGFuZCB0aGVuIGNoYW5nZXMgdGhlIHN0YXR1cyB0byByYW5kb20gc3RhdHVzIGFmdGVyIDIgc2Vjb25kcyBvZiBkZWxheSBzaG93aW5nIGEgbW9ja2VkIHJlc3BvbnNlIGZyb20gQVBJLlxuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBhc3luYyB1cGxvYWRGaWxlKGZpZWxkOiBhbnksIGZpbGU6IGFueSkge1xuICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgY2FzZSBFRmllbGRUeXBlLkZJTEU6XG4gICAgICAgIHRoaXMudXBkYXRlRmlsZXMoZmlsZSwgXCJMT0FESU5HXCIsIGZpZWxkLmtleSk7XG5cbiAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0FQSV9SRVFVRVNUX1VQTE9BRF9GSUxFLCB7XG4gICAgICAgICAgZmllbGRfa2V5OiBmaWVsZC5rZXksXG4gICAgICAgICAgZmllbGRfdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgICByZXF1ZXN0OiBnZXRPYmplY3REZWVwQ29weSh7XG4gICAgICAgICAgICBuYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgICAgICB0eXBlOiBmaWxlLnR5cGUsXG4gICAgICAgICAgICBzaXplOiBmaWxlLnNpemUsXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IGZpbGUubGFzdE1vZGlmaWVkLFxuICAgICAgICAgICAgd2Via2l0UmVsYXRpdmVQYXRoOiBmaWxlLndlYmtpdFJlbGF0aXZlUGF0aFxuICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEFjdHVhbCBBUEkgQ2FsbFxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMub25DbGlja0FwaUNhbGwuZW1pdCh7XG4gICAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICAgIHR5cGU6IGZpZWxkLnR5cGUsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogZmlsZS5uYW1lLFxuICAgICAgICAgICAgICAgIHR5cGU6IGZpbGUudHlwZSxcbiAgICAgICAgICAgICAgICBzaXplOiBmaWxlLnNpemUsXG4gICAgICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiBmaWxlLmxhc3RNb2RpZmllZCxcbiAgICAgICAgICAgICAgICB3ZWJraXRSZWxhdGl2ZVBhdGg6IGZpbGUud2Via2l0UmVsYXRpdmVQYXRoXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVGaWxlcyhmaWxlLCBcIkVSUk9SXCIsIGZpZWxkLmtleSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVGaWVsZFR5cGUuQ0FQVFVSRToge1xuICAgICAgICAvLyBBY3R1YWwgQVBJIENhbGxcblxuICAgICAgICBsZXQgb2NyUGF5bG9hZDogYW55ID0ge307XG4gICAgICAgIGlmIChpc05vdEVtcHR5VmFsdWUoZmllbGQ/LnByb3BlcnRpZXM/LmZlYXR1cmVzPy5vY3IpKSB7XG4gICAgICAgICAgb2NyUGF5bG9hZCA9IGZpZWxkLnByb3BlcnRpZXMuZmVhdHVyZXMub2NyO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmFjZW1hdGNoUGF5bG9hZDogYW55ID0ge307XG4gICAgICAgIGlmIChpc05vdEVtcHR5VmFsdWUoZmllbGQ/LnByb3BlcnRpZXM/LmZlYXR1cmVzPy5mYWNlbWF0Y2gpKSB7XG4gICAgICAgICAgZmFjZW1hdGNoUGF5bG9hZC5pc0VuYWJsZWQgPVxuICAgICAgICAgICAgZmllbGQucHJvcGVydGllcy5mZWF0dXJlcy5mYWNlbWF0Y2guaXNFbmFibGVkO1xuXG4gICAgICAgICAgZmFjZW1hdGNoUGF5bG9hZC5pc0ZhY2VtYXRjaEZyb21TZXJ2ZXIgPVxuICAgICAgICAgICAgZmllbGQucHJvcGVydGllcy5mZWF0dXJlcy5mYWNlbWF0Y2guaXNGYWNlbWF0Y2hGcm9tU2VydmVyO1xuXG4gICAgICAgICAgZmFjZW1hdGNoUGF5bG9hZC5pbWFnZXMgPSBbXTtcbiAgICAgICAgICBjb25zdCBmYWNlbWF0Y2hTb3VyY2VzID0gZmllbGQucHJvcGVydGllcy5mZWF0dXJlcy5mYWNlbWF0Y2guc291cmNlcztcblxuICAgICAgICAgIGZvciAoY29uc3QgZmFjZW1hdGNoU291cmNlQ29uZmlnIG9mIGZhY2VtYXRjaFNvdXJjZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBTb3VyY2Uoe1xuICAgICAgICAgICAgICBGSUVMRF9DT05GSUc6IGZpZWxkLFxuICAgICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBzb3VyY2VWYWx1ZSA9IGF3YWl0IHNvdXJjZS5nZXRWYWx1ZUZyb21Tb3VyY2UoXG4gICAgICAgICAgICAgIGZhY2VtYXRjaFNvdXJjZUNvbmZpZ1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgZmFjZW1hdGNoU291cmNlID0ge1xuICAgICAgICAgICAgICBrZXk6IGZhY2VtYXRjaFNvdXJjZUNvbmZpZy5pZCxcbiAgICAgICAgICAgICAgdmFsdWU6IHNvdXJjZVZhbHVlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBmYWNlbWF0Y2hQYXlsb2FkLmltYWdlcy5wdXNoKGZhY2VtYXRjaFNvdXJjZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgd2F0ZXJtYXJrUGF5bG9hZDogYW55ID0ge307XG4gICAgICAgIGlmIChpc05vdEVtcHR5VmFsdWUoZmllbGQ/LnByb3BlcnRpZXM/LmZlYXR1cmVzPy53YXRlcm1hcmspKSB7XG4gICAgICAgICAgd2F0ZXJtYXJrUGF5bG9hZC5pc0VuYWJsZWQgPVxuICAgICAgICAgICAgZmllbGQucHJvcGVydGllcy5mZWF0dXJlcy53YXRlcm1hcmsuaXNFbmFibGVkO1xuXG4gICAgICAgICAgd2F0ZXJtYXJrUGF5bG9hZC5pc1dhdGVybWFya0Zyb21TZXJ2ZXIgPVxuICAgICAgICAgICAgZmllbGQucHJvcGVydGllcy5mZWF0dXJlcy53YXRlcm1hcmsuaXNXYXRlcm1hcmtGcm9tU2VydmVyO1xuXG4gICAgICAgICAgd2F0ZXJtYXJrUGF5bG9hZC5kYXRhID0gW107XG4gICAgICAgICAgY29uc3Qgd2F0ZXJtYXJrU291cmNlcyA9IGZpZWxkLnByb3BlcnRpZXMuZmVhdHVyZXMud2F0ZXJtYXJrLnNvdXJjZXM7XG5cbiAgICAgICAgICB3YXRlcm1hcmtQYXlsb2FkLmNvbmZpZyA9IGZpZWxkLnByb3BlcnRpZXMuZmVhdHVyZXMud2F0ZXJtYXJrLnNvdXJjZXM7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IHdhdGVybWFya1NvdXJjZUNvbmZpZyBvZiB3YXRlcm1hcmtTb3VyY2VzKSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBuZXcgU291cmNlKHtcbiAgICAgICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3Qgc291cmNlVmFsdWUgPSBhd2FpdCBzb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKFxuICAgICAgICAgICAgICB3YXRlcm1hcmtTb3VyY2VDb25maWdcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IHdhdGVybWFya1NvdXJjZSA9IHtcbiAgICAgICAgICAgICAga2V5OiB3YXRlcm1hcmtTb3VyY2VDb25maWcuaWQsXG4gICAgICAgICAgICAgIHZhbHVlOiBzb3VyY2VWYWx1ZVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgd2F0ZXJtYXJrUGF5bG9hZC5kYXRhLnB1c2god2F0ZXJtYXJrU291cmNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbGl2ZWxpbmVzc1BheWxvYWQ6IGFueSA9IHt9O1xuICAgICAgICBpZiAoaXNOb3RFbXB0eVZhbHVlKGZpZWxkPy5wcm9wZXJ0aWVzPy5mZWF0dXJlcz8ubGl2ZWxpbmVzcykpIHtcbiAgICAgICAgICBsaXZlbGluZXNzUGF5bG9hZCA9IGZpZWxkLnByb3BlcnRpZXMuZmVhdHVyZXMubGl2ZWxpbmVzcztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGltYWdlVXBsb2FkUGF5bG9hZCA9IHtcbiAgICAgICAgICBpbWFnZTogZmlsZSxcbiAgICAgICAgICAuLi4ob2NyUGF5bG9hZD8uaXNFbmFibGVkICYmIHtcbiAgICAgICAgICAgIG9jcjogb2NyUGF5bG9hZFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIC4uLihmYWNlbWF0Y2hQYXlsb2FkPy5pc0VuYWJsZWQgJiYge1xuICAgICAgICAgICAgZmFjZW1hdGNoOiBmYWNlbWF0Y2hQYXlsb2FkXG4gICAgICAgICAgfSksXG4gICAgICAgICAgLi4uKHdhdGVybWFya1BheWxvYWQ/LmlzRW5hYmxlZCAmJiB7XG4gICAgICAgICAgICB3YXRlcm1hcms6IHdhdGVybWFya1BheWxvYWRcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAuLi4obGl2ZWxpbmVzc1BheWxvYWQ/LmlzRW5hYmxlZCAmJiB7XG4gICAgICAgICAgICBsaXZlbGluZXNzOiBsaXZlbGluZXNzUGF5bG9hZFxuICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0FQSV9SRVFVRVNUX1VQTE9BRF9JTUFHRSwge1xuICAgICAgICAgIGZpZWxkX2tleTogZmllbGQua2V5LFxuICAgICAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGUsXG4gICAgICAgICAgcmVxdWVzdDogaW1hZ2VVcGxvYWRQYXlsb2FkXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5vbkNsaWNrQXBpQ2FsbC5lbWl0KHtcbiAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgICAgIHBheWxvYWQ6IGltYWdlVXBsb2FkUGF5bG9hZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkZhaWxlZCB0byB1cGxvYWQgaW1hZ2UgdG8gc2VydmVyIVwiKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgRUZpZWxkVHlwZS5SRUNPUkQ6XG4gICAgICAgIC8vIEFjdHVhbCBBUEkgQ2FsbFxuXG4gICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BUElfUkVRVUVTVF9VUExPQURfVklERU8sIHtcbiAgICAgICAgICBmaWVsZF9rZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlLFxuICAgICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICAgIHZpZGVvOiBmaWxlXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMub25DbGlja0FwaUNhbGwuZW1pdCh7XG4gICAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICAgIHR5cGU6IGZpZWxkLnR5cGUsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHZpZGVvOiBmaWxlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiRmFpbGVkIHRvIHVwbG9hZCB2aWRlbyB0byBzZXJ2ZXIhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkNsaWNrRm9ybUZpZWxkQnV0dG9uKGZpZWxkOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG5cbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHRoaXMuZm9ybUZpZWxkcykge1xuICAgICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGZpZWxkLmhpZGRlbikge1xuICAgICAgICAgIGRlbGV0ZSBmb3JtRGF0YVtmaWVsZC5rZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvcm1EYXRhW2ZpZWxkLmtleV0gPSBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0KFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICBmb3JtRGF0YVtmaWVsZC5rZXldXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGV4dGVuZGVkRm9ybURhdGEgPSB0aGlzLmZvcm1GaWVsZHMucmVkdWNlKChyZXN1bHQsIGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQgJiYgIWZpZWxkLmhpZGRlbikge1xuICAgICAgICBjb25zdCBmaWVsZERhdGEgPSB7XG4gICAgICAgICAgW2ZpZWxkLmtleV06IHtcbiAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgbGFiZWw6IGZpZWxkLmxhYmVsLFxuICAgICAgICAgICAgdmFsdWU6IGlzRW1wdHlWYWx1ZShmb3JtRGF0YVtmaWVsZC5rZXldKSA/IFwiXCIgOiBmb3JtRGF0YVtmaWVsZC5rZXldLFxuICAgICAgICAgICAgdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXN1bHRbZmllbGQua2V5XSA9IGZpZWxkRGF0YVtmaWVsZC5rZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSk7XG5cbiAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRklFTERfQlVUVE9OX0NMSUNLLCB7XG4gICAgICBmaWVsZF9rZXk6IGZpZWxkLmtleSxcbiAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGUsXG4gICAgICBmaWVsZF9sYWJlbDogZmllbGQubGFiZWxcbiAgICB9KTtcblxuICAgIHRoaXMub25DbGlja0Zvcm1GaWVsZEJ1dHRvbi5lbWl0KHtcbiAgICAgIGNvbmZpZzogZmllbGQsXG4gICAgICBkYXRhOiBtZXJnZU9iamVjdHModGhpcy5mb3JtRGF0YSwgdGhpcy5wb3B1cEZvcm1EYXRhLCB0aGlzLnRhc2tEYXRhKSxcbiAgICAgIGV4dGVuZGVkRGF0YTogZXh0ZW5kZWRGb3JtRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkxvY2F0aW9uUGVybWlzc2lvbihlOiBhbnkpIHtcbiAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZS5rZXkpO1xuICAgIGNvbnN0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgLy8gc2V0IGJ1dHRvbiBzdGF0dXMgdG8gZGVmYXVsdFxuICAgIGZpZWxkLmFwaS5zdGF0dXMudmFsdWUgPSBFQXBpU3RhdHVzVHlwZS5MT0FESU5HO1xuICAgIGZpZWxkLnNob3dMb2FkZXIgPSB0cnVlO1xuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xuICAgIHRoaXMuc2hvd0FwaUxvYWRlcigpO1xuICAgIHRoaXMuZmllbGRTaG93QXBpTG9hZGVyKGZpZWxkLmtleSk7XG5cbiAgICBpZiAoIWUucGVybWlzc2lvbikge1xuICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0xJVkVfTE9DQVRJT05fUEVSTUlTU0lPTl9FUlJPUiwge1xuICAgICAgICBmaWVsZF9rZXk6IGZpZWxkLmtleSxcbiAgICAgICAgZmllbGRfdHlwZTogZmllbGQudHlwZVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMudG9nZ2xlUGVybWlzc2lvbkVycm9yTm90aWZpY2F0aW9uKHRydWUpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudG9nZ2xlUGVybWlzc2lvbkVycm9yTm90aWZpY2F0aW9uKGZhbHNlKTtcbiAgICAgIH0sIEZPUk1fVklFV19USU1FUlMuTE9DQVRJT05fUEVSTUlTU0lPTl9FUlJPUl9UT0dHTEUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fTElWRV9MT0NBVElPTl9QRVJNSVNTSU9OX1NVQ0NFU1MsIHtcbiAgICAgICAgZmllbGRfa2V5OiBmaWVsZC5rZXksXG4gICAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gc2V0IGJ1dHRvbiBzdGF0dXMgdG8gZGVmYXVsdFxuICAgICAgZmllbGQuYXBpLnN0YXR1cy52YWx1ZSA9IEVBcGlTdGF0dXNUeXBlLkRFRkFVTFQ7XG4gICAgICBmaWVsZC5zaG93TG9hZGVyID0gZmFsc2U7XG4gICAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0gPSBmaWVsZDtcbiAgICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICAgICAgdGhpcy5maWVsZEhpZGVBcGlMb2FkZXIoZmllbGQua2V5KTtcbiAgICB9LCBGT1JNX1ZJRVdfVElNRVJTLkxPQ0FUSU9OX1BFUk1JU1NJT05fUkVTRVRfQlVUVE9OX1NUQVRVUyk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZU9uQ2xpY2tMaXZlTG9jYXRpb24oZTogYW55KSB7XG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGUua2V5KTtcblxuICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19MSVZFX0xPQ0FUSU9OX0JVVFRPTl9DTElDSywge1xuICAgICAgZmllbGRfa2V5OiBmaWVsZC5rZXksXG4gICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlXG4gICAgfSk7XG5cbiAgICAvLyBzZXQgYnV0dG9uIHN0YXR1cyB0byBsb2FkaW5nXG4gICAgZmllbGQuYXBpLnN0YXR1cy52YWx1ZSA9IEVBcGlTdGF0dXNUeXBlLkxPQURJTkc7XG4gICAgZmllbGQuc2hvd0xvYWRlciA9IHRydWU7XG5cbiAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoXG4gICAgICB7XG4gICAgICAgIFtlLmtleV06IGUudmFsdWVcbiAgICAgIH0sXG4gICAgICB7IGVtaXRFdmVudDogZmFsc2UgfVxuICAgICk7XG5cbiAgICB0aGlzLmZvcm1EYXRhW2Uua2V5XSA9IGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvU3RhbmRhcmRGb3JtYXQoXG4gICAgICBmaWVsZCxcbiAgICAgIGUudmFsdWVcbiAgICApO1xuXG4gICAgdGhpcy5nZXRVbnNhdmVkRGF0YVN0YXRlLmVtaXQodHJ1ZSk7XG5cbiAgICBpZiAoXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJwcm9wZXJ0aWVzXCIpICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZC5wcm9wZXJ0aWVzLCBcImlzR2V0TG9jYXRpb25Gcm9tTGF0TG9uZ1wiKSAmJlxuICAgICAgZmllbGQucHJvcGVydGllcy5pc0dldExvY2F0aW9uRnJvbUxhdExvbmdcbiAgICApIHtcbiAgICAgIHRoaXMub25DbGlja0FwaUNhbGwuZW1pdCh7XG4gICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICB0eXBlOiBmaWVsZC50eXBlLFxuICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgLi4uZS5saXZlTG9jYXRpb25cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgIH0sIEZPUk1fVklFV19USU1FUlMuVElNRVJfMzAwKTsgLy8gMTAwMCBtcyA9IDEgc2VjXG4gICAgICB9KTtcblxuICAgICAgLy8gc2V0IGJ1dHRvbiBzdGF0dXMgdG8gc3VjY2Vzc1xuICAgICAgZmllbGQuYXBpLnN0YXR1cy52YWx1ZSA9IEVBcGlTdGF0dXNUeXBlLlNVQ0NFU1M7XG4gICAgICBmaWVsZC5zaG93TG9hZGVyID0gZmFsc2U7XG5cbiAgICAgIGlmIChcbiAgICAgICAgZmllbGQuaXNGb3JtRWxlbWVudCAmJlxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJ2YWxpZGF0aW9uXCIpICYmXG4gICAgICAgIGZpZWxkLnZhbGlkYXRpb24udHJpZ2dlcnMuaW5jbHVkZXMoXCJPTl9DSEFOR0VcIilcbiAgICAgICkge1xuICAgICAgICBjb25zdCBydWxlRW5naW5lID0gbmV3IFJ1bGVFbmdpbmUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgKTtcblxuICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IHJ1bGVFbmdpbmUucnVuKGZpZWxkLnZhbGlkYXRpb24pO1xuICAgICAgICB9KSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGZpZWxkLmlzRm9ybUVsZW1lbnQgJiZcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwiY29ubmVjdGVkRWxlbWVudHNcIilcbiAgICAgICkge1xuICAgICAgICB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRzKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiT05fQ0hBTkdFXCJcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gRE9NIEV2ZW50IEhhbmRsZXJzXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlR2V0S2V5VmFsdWUoZTogYW55KSB7XG4gICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShcbiAgICAgIHtcbiAgICAgICAgW2Uua2V5XTogZS52YWx1ZVxuICAgICAgfSxcbiAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XG4gICAgKTtcblxuICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBlLmtleSk7XG4gICAgdGhpcy5mb3JtRGF0YVtlLmtleV0gPSBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0KFxuICAgICAgZmllbGQsXG4gICAgICBlLnZhbHVlXG4gICAgKTtcblxuICAgIHRoaXMuZ2V0VW5zYXZlZERhdGFTdGF0ZS5lbWl0KHRydWUpO1xuXG4gICAgaWYgKFxuICAgICAgZmllbGQuaXNGb3JtRWxlbWVudCAmJlxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwidmFsaWRhdGlvblwiKSAmJlxuICAgICAgZmllbGQudmFsaWRhdGlvbi50cmlnZ2Vycy5pbmNsdWRlcyhcIk9OX0NIQU5HRVwiKVxuICAgICkge1xuICAgICAgY29uc3QgcnVsZUVuZ2luZSA9IG5ldyBSdWxlRW5naW5lKFxuICAgICAgICB7XG4gICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICk7XG5cbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHJ1bGVFbmdpbmUucnVuKGZpZWxkLnZhbGlkYXRpb24pO1xuICAgICAgfSkoKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBmaWVsZC5pc0Zvcm1FbGVtZW50ICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJjb25uZWN0ZWRFbGVtZW50c1wiKVxuICAgICkge1xuICAgICAgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50cyhcbiAgICAgICAge1xuICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiT05fQ0hBTkdFXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVPbkNsaWNrUmVzZXRGb3JtRmllbGRzKGU6IGFueSwgZmllbGQ6IFRGaWVsZFRpdGxlKSB7XG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0ZJRUxEX1JFU0VUX0JVVFRPTl9DTElDSywge1xuICAgICAgZmllbGRfa2V5OiBmaWVsZC5rZXlcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc2V0Rm9ybUZpZWxkcyA9IGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChjaGVja09iamVjdFBhdGhFeGlzdHMoZmllbGQsIFwicmVzZXQuZmllbGRzXCIpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZiBvZiBmaWVsZC5yZXNldC5maWVsZHMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiBmLmFjdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc2V0RmllbGQgPSBnZXRGb3JtRmllbGRCeUtleShcbiAgICAgICAgICAgICAgdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgICBhY3Rpb24ucHJvcHMuZmllbGRLZXlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb25zID0gbmV3IEFjdGlvbihcbiAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogcmVzZXRGaWVsZCxcbiAgICAgICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhd2FpdCBhY3Rpb25zLmV4ZWN1dGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjaGVja09iamVjdFBhdGhFeGlzdHMoZmllbGQsIFwicmVzZXQuZmllbGRHcm91cHNcIikpIHtcbiAgICAgICAgZm9yIChjb25zdCBmZyBvZiBmaWVsZC5yZXNldC5maWVsZEdyb3Vwcykge1xuICAgICAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGZnLmFjdGlvbnMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGRLZXkgb2YgdGhpcy5maWVsZEdyb3Vwc1tmZy5ncm91cEtleV0pIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzZXRGaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuICAgICAgICAgICAgICBjb25zdCBhY3Rpb25zID0gbmV3IEFjdGlvbihcbiAgICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgRklFTERfQ09ORklHOiByZXNldEZpZWxkLFxuICAgICAgICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICAgICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGlzLnRha2VBY3Rpb25PbkZpZWxkR3JvdXAuYmluZCh0aGlzKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBhd2FpdCBhY3Rpb25zLmV4ZWN1dGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgQllQQVNTX1JFU0VUX0NPTkZJUk0gPSBmaWVsZD8ucHJvcGVydGllcz8uYnlwYXNzUmVzZXRDb25maXJtYXRpb247XG5cbiAgICBpZiAoIUJZUEFTU19SRVNFVF9DT05GSVJNKSB7XG4gICAgICBjb25zdCBDT05GSVJNX1JFU0VUID0gd2luZG93LmNvbmZpcm0oXG4gICAgICAgIFwiVGhpcyBhY3Rpb24gd2lsbCByZXNldCBhbGwgdGhlIGZpZWxkcy4gRG8geW91IHN0aWxsIHdhbnQgdG8gY29udGludWU/XCJcbiAgICAgICk7XG5cbiAgICAgIGlmIChDT05GSVJNX1JFU0VUKSB7XG4gICAgICAgIHJlc2V0Rm9ybUZpZWxkcygpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXNldEZvcm1GaWVsZHMoKTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZUZpZWxkQXBpQ2FsbChmaWVsZDogVEZpZWxkQXBpQ2FsbCwgYXBpOiBhbnkpIHtcbiAgICBhcGkgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBcGlDYWxsKGFwaSwge1xuICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgIEFQSV9DT05GSUc6IGFwaSxcbiAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuaXNWYWxpZFJlcXVlc3RIZWFkZXJzQW5kQm9keShhcGkpKSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQuYXBpLCBcInJlcXVlc3RcIikpIHtcbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcbiAgICAgICAgICAuLi50aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIFtmaWVsZC5rZXldOiBhcGkucmVzcG9uc2UudmFsdWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFtmaWVsZC5rZXldOiBhcGkucmVzcG9uc2UudmFsdWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFwaXMgPSBuZXcgQXBpcyhcbiAgICAgICAge1xuICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgQVBJX0NPTkZJRzogYXBpLFxuICAgICAgICAgIEFQSV9SRVNQT05TRTogYXBpLnJlc3BvbnNlLFxuICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICB9LFxuICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgKTtcblxuICAgICAgYXBpID0gYXdhaXQgYXBpcy52YWxpZGF0ZVJlc3BvbnNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBmaWVsZC5hcGkuc3RhdHVzLnZhbHVlID0gRUFwaVN0YXR1c1R5cGUuRkFJTEVEO1xuICAgICAgICAoZmllbGQgYXMgYW55KS5zaG93TG9hZGVyID0gZmFsc2U7XG4gICAgICB9LCBGT1JNX1ZJRVdfVElNRVJTLlRJTUVSXzUwMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgZmllbGQsIGFwaSB9O1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVBcGlDYWxsKGFwaTogYW55KSB7XG4gICAgYXBpID0gYXdhaXQgdGhpcy5leGVjdXRlQXBpQ2FsbChhcGksIHtcbiAgICAgIEZPUk1fQ09ORklHOiB0aGlzLmZvcm1Db25maWcsXG4gICAgICBBUElfQ09ORklHOiBhcGksXG4gICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgQ0FNRVJBX0RBVEE6IHRoaXMuY2FtZXJhRGF0YSxcbiAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICB9KTtcblxuICAgIGNvbnN0IGFwaXMgPSBuZXcgQXBpcyhcbiAgICAgIHtcbiAgICAgICAgRk9STV9DT05GSUc6IHRoaXMuZm9ybUNvbmZpZyxcbiAgICAgICAgQVBJX0NPTkZJRzogYXBpLFxuICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgIH0sXG4gICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICk7XG5cbiAgICBpZiAodGhpcy5pc1ZhbGlkUmVxdWVzdEhlYWRlcnNBbmRCb2R5KGFwaSkpIHtcbiAgICAgIGFwaSA9IGF3YWl0IGFwaXMudmFsaWRhdGVSZXNwb25zZSgpO1xuICAgIH1cblxuICAgIHJldHVybiB7IGFwaSB9O1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBleGVjdXRlQXBpQ2FsbChhcGk6IGFueSwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IGFwaXMgPSBuZXcgQXBpcyhvYmplY3QsIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpKTtcblxuICAgIGFwaSA9IGF3YWl0IGFwaXMuc2V0VXJsKCk7XG4gICAgYXBpID0gYXdhaXQgYXBpcy5zZXRSZXF1ZXN0SGVhZGVycygpO1xuICAgIGFwaSA9IGF3YWl0IGFwaXMudmFsaWRhdGVSZXF1ZXN0SGVhZGVycygpO1xuICAgIGFwaSA9IGF3YWl0IGFwaXMuc2V0UmVxdWVzdEJvZHkoKTtcbiAgICBhcGkgPSBhd2FpdCBhcGlzLnZhbGlkYXRlUmVxdWVzdEJvZHkoKTtcblxuICAgIGxldCBhcGlDYWxsUmVzcG9uc2U6IGFueSA9IHt9O1xuICAgIGxldCBhcGlDYWxsUmVzcG9uc2VTdGF0dXNDb2RlO1xuXG4gICAgaWYgKHRoaXMuaXNWYWxpZFJlcXVlc3RIZWFkZXJzQW5kQm9keShhcGkpKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFwaS5yZXF1ZXN0LnVybCwgXCJ0eXBlXCIpICYmXG4gICAgICAgIGFwaS5yZXF1ZXN0LnVybC50eXBlID09PSBFQXBpUmVxdWVzdFVybFR5cGUuTU9DS1xuICAgICAgKSB7XG4gICAgICAgIGFwaUNhbGxSZXNwb25zZSA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKGFwaS5yZXF1ZXN0LnVybC5wcm9wcy5tb2NrZWREYXRhKTtcbiAgICAgICAgICB9LCBGT1JNX1ZJRVdfVElNRVJTLldBSVRfRk9SX0FQSV9NT0NLX0RBVEEpOyAvLyAxMDAwIG1zID0gMSBzZWNcbiAgICAgICAgfSk7XG4gICAgICAgIGFwaUNhbGxSZXNwb25zZVN0YXR1c0NvZGUgPVxuICAgICAgICAgIGFwaS5yZXF1ZXN0LnVybC5wcm9wcz8uc3RhdHVzQ29kZSA/P1xuICAgICAgICAgIEZPUk1fVklFV19USU1FUlMuQVBJX01PQ0tfU1VDQ0VTU19TVEFUVVNfQ09ERTsgLy8gRGVmYXVsdCBTdGF0dXMgQ29kZSBmb3IgTW9ja2VkIEFQSXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHVybDogc3RyaW5nID0gYXBpLnJlcXVlc3QudXJsLnZhbHVlO1xuICAgICAgICBjb25zdCBtZXRob2Q6IHN0cmluZyA9IGFwaS5yZXF1ZXN0Py5tZXRob2QgPz8gXCJQT1NUXCI7XG4gICAgICAgIGNvbnN0IGhlYWRlcnM6IGFueSA9IHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAuLi4oYXBpLnJlcXVlc3Q/LmhlYWRlcnM/LnZhbHVlIHx8IHt9KVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChtZXRob2QgPT09IFwiR0VUXCIpIHtcbiAgICAgICAgICAvLyBUcmlnZ2VyIGxvZ3MgZm9yIEFQSSByZXF1ZXN0IHdpdGggdGhlIG1ldGhvZCBhbmQgQVBJIGtleVxuICAgICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BUElfUkVRVUVTVCwge1xuICAgICAgICAgICAgZm9ybV9hcGlfbWV0aG9kOiBtZXRob2QsXG4gICAgICAgICAgICBmb3JtX2FwaV9rZXk6IGFwaT8uYXBpS2V5ID8/IFwiXCJcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmVzcG9uc2UgbmVlZHMgdG8gYmUgZGVjcnlwdGVkXG4gICAgICAgICAgICBjb25zdCBpc0RlY3J5cHRSZXNwb25zZTogYm9vbGVhbiA9IGFwaT8ucmVzcG9uc2U/LmlzU2VjdXJlID8/IGZhbHNlO1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJlc3BvbnNlIHNpZ25hdHVyZSBuZWVkcyB0byBiZSB2ZXJpZmllZFxuICAgICAgICAgICAgY29uc3QgaXNWZXJpZnlTaWduYXR1cmU6IGJvb2xlYW4gPVxuICAgICAgICAgICAgICBhcGk/LnJlc3BvbnNlPy5pc1ZlcmlmeVNpZ25hdHVyZSA/PyBmYWxzZTtcblxuICAgICAgICAgICAgLy8gRXhlY3V0ZSB0aGUgQVBJIGNhbGwgZm9yIEdFVCBtZXRob2RcbiAgICAgICAgICAgIGNvbnN0IGV4ZWN1dGVkQXBpQ2FsbDogYW55ID1cbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5mb3JtVmlld0FwaVNlcnZpY2UuZXhlY3V0ZUFwaUNhbGwoXG4gICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgIFwiR0VUXCIsXG4gICAgICAgICAgICAgICAge30sIC8vIE5vIHJlcXVlc3QgYm9keSBmb3IgR0VUIG1ldGhvZFxuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgZmFsc2UsIC8vIGlzRW5jcnlwdFJlcXVlc3RCb2R5IGlzIG5vdCBhcHBsaWNhYmxlIGZvciBHRVQgbWV0aG9kXG4gICAgICAgICAgICAgICAgaXNEZWNyeXB0UmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgaXNWZXJpZnlTaWduYXR1cmVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGFwaUNhbGxSZXNwb25zZSA9IGV4ZWN1dGVkQXBpQ2FsbC5kYXRhO1xuICAgICAgICAgICAgYXBpQ2FsbFJlc3BvbnNlU3RhdHVzQ29kZSA9IGV4ZWN1dGVkQXBpQ2FsbC5zdGF0dXM7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgYW55IGVycm9yc1xuICAgICAgICAgICAgYXBpQ2FsbFJlc3BvbnNlID0ge307XG4gICAgICAgICAgICBhcGlDYWxsUmVzcG9uc2VTdGF0dXNDb2RlID1cbiAgICAgICAgICAgICAgRk9STV9WSUVXX1RJTUVSUy5BUElfTU9DS19FUlJPUl9TVEFUVVNfQ09ERTsgLy8gSW50ZXJuYWwgU2VydmVyIEVycm9yXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEV4dHJhY3QgdGhlIHJlcXVlc3QgYm9keSBmcm9tIHRoZSBBUEkgY29uZmlndXJhdGlvblxuICAgICAgICAgIGNvbnN0IGJvZHk6IGFueSA9IGFwaT8ucmVxdWVzdD8uYm9keT8udmFsdWUgPz8ge307XG5cbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmVxdWVzdCBib2R5IG5lZWRzIHRvIGJlIGVuY3J5cHRlZFxuICAgICAgICAgIGNvbnN0IGlzRW5jcnlwdFJlcXVlc3RCb2R5OiBib29sZWFuID1cbiAgICAgICAgICAgIGFwaT8ucmVxdWVzdD8uYm9keT8uaXNTZWN1cmUgPz8gZmFsc2U7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJlc3BvbnNlIG5lZWRzIHRvIGJlIGRlY3J5cHRlZFxuICAgICAgICAgIGNvbnN0IGlzRGVjcnlwdFJlc3BvbnNlOiBib29sZWFuID0gYXBpPy5yZXNwb25zZT8uaXNTZWN1cmUgPz8gZmFsc2U7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJlc3BvbnNlIHNpZ25hdHVyZSBuZWVkcyB0byBiZSB2ZXJpZmllZFxuICAgICAgICAgIGNvbnN0IGlzVmVyaWZ5U2lnbmF0dXJlOiBib29sZWFuID1cbiAgICAgICAgICAgIGFwaT8ucmVzcG9uc2U/LmlzVmVyaWZ5U2lnbmF0dXJlID8/IGZhbHNlO1xuXG4gICAgICAgICAgLy8gVHJpZ2dlciBsb2dzIGZvciBBUEkgcmVxdWVzdCB3aXRoIHRoZSBtZXRob2QgYW5kIEFQSSBrZXlcbiAgICAgICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fQVBJX1JFUVVFU1QsIHtcbiAgICAgICAgICAgIGZvcm1fYXBpX21ldGhvZDogbWV0aG9kLFxuICAgICAgICAgICAgZm9ybV9hcGlfa2V5OiBhcGk/LmFwaUtleSA/PyBcIlwiLFxuICAgICAgICAgICAgZm9ybV9hcGlfcmVxdWVzdF9lbmNyeXB0ZWQ6IGlzRW5jcnlwdFJlcXVlc3RCb2R5LFxuICAgICAgICAgICAgLi4uKCFpc0VuY3J5cHRSZXF1ZXN0Qm9keSAmJiB7XG4gICAgICAgICAgICAgIGZvcm1fYXBpX3JlcXVlc3RfYm9keTogYm9keVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBFeGVjdXRlIHRoZSBBUEkgY2FsbCBmb3IgUE9TVCBtZXRob2RcbiAgICAgICAgICAgIGNvbnN0IGV4ZWN1dGVkQXBpQ2FsbDogYW55ID1cbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5mb3JtVmlld0FwaVNlcnZpY2UuZXhlY3V0ZUFwaUNhbGwoXG4gICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgIFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgICAgICBpc0VuY3J5cHRSZXF1ZXN0Qm9keSxcbiAgICAgICAgICAgICAgICBpc0RlY3J5cHRSZXNwb25zZSxcbiAgICAgICAgICAgICAgICBpc1ZlcmlmeVNpZ25hdHVyZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYXBpQ2FsbFJlc3BvbnNlID0gZXhlY3V0ZWRBcGlDYWxsLmRhdGE7XG4gICAgICAgICAgICBhcGlDYWxsUmVzcG9uc2VTdGF0dXNDb2RlID0gZXhlY3V0ZWRBcGlDYWxsLnN0YXR1cztcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBhbnkgZXJyb3JzXG4gICAgICAgICAgICBhcGlDYWxsUmVzcG9uc2UgPSB7fTtcbiAgICAgICAgICAgIGFwaUNhbGxSZXNwb25zZVN0YXR1c0NvZGUgPVxuICAgICAgICAgICAgICBGT1JNX1ZJRVdfVElNRVJTLkFQSV9NT0NLX0VSUk9SX1NUQVRVU19DT0RFOyAvLyBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXBpLnJlc3BvbnNlID0gc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICAgIGFwaS5yZXNwb25zZSxcbiAgICAgICAgXCJ2YWx1ZVwiLFxuICAgICAgICBhcGlDYWxsUmVzcG9uc2VcbiAgICAgICk7XG5cbiAgICAgIGFwaS5yZXNwb25zZSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgICBhcGkucmVzcG9uc2UsXG4gICAgICAgIFwic3RhdHVzXCIsXG4gICAgICAgIGFwaUNhbGxSZXNwb25zZVN0YXR1c0NvZGVcbiAgICAgICk7XG5cbiAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BUElfUkVTUE9OU0UsIHtcbiAgICAgICAgZm9ybV9hcGlfa2V5OiBhcGk/LmFwaUtleSA/PyBcIlwiLFxuICAgICAgICBmb3JtX2FwaV9yZXNwb25zZV9lbmNyeXB0ZWQ6IGFwaT8ucmVzcG9uc2U/LmlzU2VjdXJlID8/IGZhbHNlLFxuICAgICAgICAuLi4oKCFhcGk/LnJlc3BvbnNlPy5pc1NlY3VyZSA/PyBmYWxzZSkgJiYge1xuICAgICAgICAgIGZvcm1fYXBpX3Jlc3BvbnNlX2JvZHk6IGFwaUNhbGxSZXNwb25zZSA/PyB7fVxuICAgICAgICB9KSxcbiAgICAgICAgZm9ybV9hcGlfc3RhdHVzX2NvZGU6IGFwaUNhbGxSZXNwb25zZVN0YXR1c0NvZGVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fQVBJX1JFUVVFU1RfSU5WQUxJRCwge1xuICAgICAgICBmb3JtX2FwaV9rZXk6IGFwaT8uYXBpS2V5ID8/IFwiXCIsXG4gICAgICAgIGZvcm1fYXBpX3JlcXVlc3RfZW5jcnlwdGVkOiBhcGk/LnJlcXVlc3Q/LmJvZHk/LmlzU2VjdXJlID8/IGZhbHNlLFxuICAgICAgICAuLi4oKCFhcGk/LnJlcXVlc3Q/LmJvZHk/LmlzU2VjdXJlID8/IGZhbHNlKSAmJiB7XG4gICAgICAgICAgZm9ybV9hcGlfcmVxdWVzdF9ib2R5OiBhcGk/LnJlcXVlc3Q/LmJvZHk/LnZhbHVlID8/IHt9XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXBpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBpc1ZhbGlkUmVxdWVzdEhlYWRlcnNBbmRCb2R5KGFwaTogVEFwaSkge1xuICAgIGNvbnN0IGJvZHlWYWxpZGF0aW9uID1cbiAgICAgIChhcGkucmVxdWVzdC5ib2R5Py52YWxpZGF0aW9uIGFzIFRFbmdpbmUgJiB7XG4gICAgICAgIGlzX3ZhbGlkOiBib29sZWFuO1xuICAgICAgfSkgfHxcbiAgICAgIChhcGkucmVxdWVzdC5ib2R5IGFzIGFueSAmIHtcbiAgICAgICAgaXNfdmFsaWQ6IGJvb2xlYW47XG4gICAgICB9KTtcbiAgICBjb25zdCBoZWFkZXJzVmFsaWRhdGlvbiA9XG4gICAgICAoYXBpLnJlcXVlc3QuaGVhZGVycz8udmFsaWRhdGlvbiBhcyBURW5naW5lICYge1xuICAgICAgICBpc192YWxpZDogYm9vbGVhbjtcbiAgICAgIH0pIHx8XG4gICAgICAoYXBpLnJlcXVlc3QuaGVhZGVycyBhcyBhbnkgJiB7XG4gICAgICAgIGlzX3ZhbGlkOiBib29sZWFuO1xuICAgICAgfSk7XG5cbiAgICBpZiAoIWJvZHlWYWxpZGF0aW9uICYmICFoZWFkZXJzVmFsaWRhdGlvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAoYm9keVZhbGlkYXRpb24/LmlzX3ZhbGlkIHx8IGZhbHNlKSAmJlxuICAgICAgKGhlYWRlcnNWYWxpZGF0aW9uPy5pc192YWxpZCB8fCBmYWxzZSlcbiAgICApO1xuICB9XG5cbiAgc2hvd0FwaUxvYWRlcigpIHtcbiAgICB0aGlzLmxvYWRlclNlcnZpY2Uuc2hvdyh7XG4gICAgICBmdWxsc2NyZWVuOiB0cnVlLFxuICAgICAgbG9hZGVyVGV4dDogXCJQbGVhc2Ugd2FpdFwiXG4gICAgfSk7XG4gICAgdGhpcy52aWV3Rm9ybXNCdXR0b24uZGlzYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMudmlld0Zvcm1zQnV0dG9uLnNob3dMb2FkZXIgPSB0cnVlO1xuICAgIHRoaXMuc2F2ZUZvcm1CdXR0b24uZGlzYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMuc2F2ZUZvcm1CdXR0b24uc2hvd0xvYWRlciA9IHRydWU7XG4gIH1cblxuICBoaWRlQXBpTG9hZGVyKCkge1xuICAgIHRoaXMubG9hZGVyU2VydmljZS5oaWRlKCk7XG4gICAgdGhpcy52aWV3Rm9ybXNCdXR0b24uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLnZpZXdGb3Jtc0J1dHRvbi5zaG93TG9hZGVyID0gZmFsc2U7XG4gICAgdGhpcy5zYXZlRm9ybUJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMuc2F2ZUZvcm1CdXR0b24uc2hvd0xvYWRlciA9IGZhbHNlO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVPbkNsaWNrQXBpQ2FsbChlOiBhbnkpIHtcbiAgICBjb25zdCBmaWVsZDogVEZpZWxkQXBpQ2FsbCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZS5rZXkpO1xuXG4gICAgaWYgKGZpZWxkLnR5cGUgPT09IEVGaWVsZFR5cGUuQVBJKSB7XG4gICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fQVBJX0JVVFRPTl9DTElDSywge1xuICAgICAgICBmaWVsZF9rZXk6IGZpZWxkLmtleSxcbiAgICAgICAgZmllbGRfdHlwZTogZmllbGQudHlwZVxuICAgICAgfSk7XG5cbiAgICAgIC8vIHNldCBidXR0b24gc3RhdHVzIHRvIGxvYWRpbmdcbiAgICAgIGZpZWxkLmFwaS5zdGF0dXMudmFsdWUgPSBFQXBpU3RhdHVzVHlwZS5MT0FESU5HO1xuICAgICAgZmllbGQuc2hvd0xvYWRlciA9IHRydWU7XG5cbiAgICAgIHRoaXMuc2hvd0FwaUxvYWRlcigpO1xuXG4gICAgICAvLyBEZXRlcm1pbmUgQVBJIENhbGwgdGltZVxuXG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQuYXBpLCBcInJlcXVlc3RcIikpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVGaWVsZEFwaUNhbGwoZmllbGQsIGZpZWxkLmFwaSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBhcGlzID0gbmV3IEFwaXMoXG4gICAgICAgICAge1xuICAgICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICAgIEFQSV9DT05GSUc6IHt9LFxuICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICApO1xuXG4gICAgICAgIGF3YWl0IGFwaXMuY2FsbE5leHRBcGkoZmllbGQuYXBpLmVudHJ5cG9pbnQpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRvIG9wdGltaXplIHRoZSBET00gdXBkYXRlIGJ5IEFuZ3VsYXIgZm9yIHVzaW5nICpuZ0ZvciBvbiBsYXJnZSBuby4gb2YgaXRlbXMuXG4gICAqIEBwYXJhbSBpbmRleCBudW1iZXJcbiAgICogQHBhcmFtIGl0ZW0gZmllbGRDb25maWdcbiAgICogQHJldHVybnMgc3RyaW5nXG4gICAqL1xuICBnZXRVbmlxdWVJZGVudGlmaWVyKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGl0ZW0ua2V5O1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkNsaWNrR29CYWNrKGU6IGFueSwgbW9kZTogVEZvcm1WaWV3R29CYWNrTW9kZSkge1xuICAgIGlmICh0aGlzLmZvcm1Db25maWcuc3RhdHVzID09PSBFRm9ybXNMaXN0U3RhdHVzLkNPTVBMRVRFRCkge1xuICAgICAgdGhpcy5vbkNsaWNrR29CYWNrLmVtaXQoe1xuICAgICAgICBjbGlja2VkOiB0cnVlLFxuICAgICAgICBtb2RlXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5mb3JtQ29uZmlnLnByb3BlcnRpZXMuaGVhZGVyLmJhY2tCdXR0b24uYnlwYXNzQ29uZmlybWF0aW9uIHx8XG4gICAgICB3aW5kb3cuY29uZmlybShcIllvdXIgZGF0YSB3aWxsIGJlIGxvc3QgaWYgeW91IGxlYXZlIHRoaXMgcGFnZSEgQ29udGludWU/XCIpXG4gICAgKSB7XG4gICAgICB0aGlzLm9uQ2xpY2tHb0JhY2suZW1pdCh7XG4gICAgICAgIGNsaWNrZWQ6IHRydWUsXG4gICAgICAgIG1vZGVcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja1ZpZXdGb3JtcyhlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5mb3JtQ29uZmlnLnN0YXR1cyA9PT0gRUZvcm1zTGlzdFN0YXR1cy5DT01QTEVURUQpIHtcbiAgICAgIHRoaXMub25DbGlja1ZpZXdGb3Jtcy5lbWl0KHtcbiAgICAgICAgY2xpY2tlZDogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLmZvb3Rlci52aWV3Rm9ybXNCdXR0b24uYnlwYXNzQ29uZmlybWF0aW9uIHx8XG4gICAgICB3aW5kb3cuY29uZmlybShcIllvdXIgZGF0YSB3aWxsIGJlIGxvc3QgaWYgeW91IGxlYXZlIHRoaXMgcGFnZSEgQ29udGludWU/XCIpXG4gICAgKSB7XG4gICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fVklFV19CVVRUT05fQ0xJQ0ssIHt9KTtcblxuICAgICAgdGhpcy5vbkNsaWNrVmlld0Zvcm1zLmVtaXQoe1xuICAgICAgICBjbGlja2VkOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZU9uQ2xpY2tTYXZlRm9ybShlOiBhbnkpIHtcbiAgICBpZiAoZSkge1xuICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX1NBVkVfQlVUVE9OX0NMSUNLLCB7fSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19TQVZFX0FVVE8sIHt9KTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250cm9scyA9IG5ldyBGb3JtVmFsaWRhdGlvbigpLmdldEZvcm1GaWVsZHNJbnZhbGlkQ29udHJvbHMoXG4gICAgICB0aGlzLmZvcm1Hcm91cFxuICAgICk7XG5cbiAgICBsZXQgZmlyc3RGaWVsZFdpdGhFcnJvciA9IFwiXCI7XG5cbiAgICBmb3IgKGNvbnN0IGNvbnRyb2wgb2YgY29udHJvbHMpIHtcbiAgICAgIGlmIChjb250cm9sLmludmFsaWQpIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGNvbnRyb2wua2V5KTtcbiAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0ZJRUxEX0VSUk9SX1NIT1csIHtcbiAgICAgICAgICBmaWVsZF9rZXk6IGNvbnRyb2wua2V5LFxuICAgICAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGUsXG4gICAgICAgICAgZmllbGRfZXJyb3JfdHlwZXM6IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRyb2wua2V5XS5lcnJvcnNcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGlzRW1wdHlWYWx1ZShmaXJzdEZpZWxkV2l0aEVycm9yKSkge1xuICAgICAgICAgIGZpcnN0RmllbGRXaXRoRXJyb3IgPSBjb250cm9sLmtleTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5mb3JtRmllbGRzID0gc2hvd0Zvcm1GaWVsZEVycm9yKFxuICAgICAgICB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRyb2wua2V5XS5lcnJvcnMsXG4gICAgICAgIGNvbnRyb2wua2V5LFxuICAgICAgICBjb250cm9sLmludmFsaWRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGlzTm90RW1wdHlWYWx1ZShmaXJzdEZpZWxkV2l0aEVycm9yKSkge1xuICAgICAgdGhpcy5oYW5kbGVPblNjcm9sbFRvRmllbGQoZmlyc3RGaWVsZFdpdGhFcnJvcik7XG5cbiAgICAgIC8vIHRoaXMudG9nZ2xlRXJyb3JOb3RpZmljYXRpb24odHJ1ZSk7XG4gICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vICAgdGhpcy50b2dnbGVFcnJvck5vdGlmaWNhdGlvbihmYWxzZSk7XG4gICAgICAvLyB9LCAzMDAwKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZmllbGQgb2YgdGhpcy5mb3JtRmllbGRzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGZpZWxkLmlzRm9ybUVsZW1lbnQgJiZcbiAgICAgICAgIWZpZWxkLmhpZGRlbiAmJlxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJ2YWxpZGF0aW9uXCIpICYmXG4gICAgICAgIGZpZWxkLnZhbGlkYXRpb24udHJpZ2dlcnMuaW5jbHVkZXMoXCJPTl9TQVZFXCIpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgcnVsZUVuZ2luZSA9IG5ldyBSdWxlRW5naW5lKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgQ0FNRVJBX0RBVEE6IHRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICk7XG5cbiAgICAgICAgYXdhaXQgcnVsZUVuZ2luZS5ydW4oZmllbGQudmFsaWRhdGlvbik7XG5cbiAgICAgICAgaWYgKCFmaWVsZC52YWxpZGF0aW9uLmlzX3ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy50b2dnbGVFcnJvck5vdGlmaWNhdGlvbih0cnVlKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlRXJyb3JOb3RpZmljYXRpb24oZmFsc2UpO1xuICAgICAgICAgIH0sIEZPUk1fVklFV19USU1FUlMuSU5WQUxJRF9GSUVMRFNfU0FWRV9GT1JNX0VSUk9SX1RPR0dMRSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG5cbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHRoaXMuZm9ybUZpZWxkcykge1xuICAgICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGZpZWxkLmhpZGRlbikge1xuICAgICAgICAgIGRlbGV0ZSBmb3JtRGF0YVtmaWVsZC5rZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvcm1EYXRhW2ZpZWxkLmtleV0gPSBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0KFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICBmb3JtRGF0YVtmaWVsZC5rZXldXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGV4dGVuZGVkRm9ybURhdGEgPSB0aGlzLmZvcm1GaWVsZHMucmVkdWNlKChyZXN1bHQsIGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQgJiYgIWZpZWxkLmhpZGRlbikge1xuICAgICAgICBjb25zdCBmaWVsZERhdGEgPSB7XG4gICAgICAgICAgW2ZpZWxkLmtleV06IHtcbiAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgbGFiZWw6IGZpZWxkLmxhYmVsLFxuICAgICAgICAgICAgdmFsdWU6IGlzRW1wdHlWYWx1ZShmb3JtRGF0YVtmaWVsZC5rZXldKSA/IFwiXCIgOiBmb3JtRGF0YVtmaWVsZC5rZXldLFxuICAgICAgICAgICAgdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXN1bHRbZmllbGQua2V5XSA9IGZpZWxkRGF0YVtmaWVsZC5rZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSk7XG5cbiAgICBPYmplY3Qua2V5cyhmb3JtRGF0YSkubWFwKChrZXkpID0+IHtcbiAgICAgIGlmIChpc0VtcHR5VmFsdWUoZm9ybURhdGFba2V5XSkpIHtcbiAgICAgICAgZm9ybURhdGFba2V5XSA9IFwiXCI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUE9TVCBUYXNrc1xuICAgICAqIDEuIEFQSSBDYWxscy5cbiAgICAgKiAyLiBBbHRlciBEYXRhIFN0cnVjdHVyZS5cbiAgICAgKiAzLiBUcmlnZ2VyIGFuIEludGVybmFsIFBvcHVwIEZvcm0uXG4gICAgICogNC4gVVJMIFJlZGlyZWN0aW9uIG9yIG5ldyBvcGVuaW5nIG9mIFVSTCBpbiBleHRlcm5hbCB0YWIuXG4gICAgICovXG4gICAgaWYgKFxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5mb3JtQ29uZmlnLCBcInRhc2tzXCIpICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmZvcm1Db25maWcudGFza3MsIFwicG9zdFwiKVxuICAgICkge1xuICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX1RBU0tfUE9TVCwge30pO1xuXG4gICAgICBmb3IgKGNvbnN0IHBvc3RUYXNrIG9mIHRoaXMuZm9ybUNvbmZpZy50YXNrcy5wb3N0KSB7XG4gICAgICAgIGNvbnN0IHRhc2sgPSBuZXcgVGFza3MoXG4gICAgICAgICAgcG9zdFRhc2ssXG4gICAgICAgICAge1xuICAgICAgICAgICAgRk9STV9DT05GSUc6IHRoaXMuZm9ybUNvbmZpZyxcbiAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnN0b3BUYXNrRXhlY3V0aW9uID0gZmFsc2U7XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhwb3N0VGFzaywgXCJ3YWl0XCIpKSB7XG4gICAgICAgICAgdGhpcy53YWl0aW5nRm9yQ2hhbmdlcyA9IHBvc3RUYXNrLndhaXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy53YWl0aW5nRm9yQ2hhbmdlcyA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGFzay5leGVjdXRlKCk7XG5cbiAgICAgICAgLy8gV2FpdCBmb3IgbmdPbkNoYW5nZXMgdG8gYmUgY2FsbGVkIGJlZm9yZSBjb250aW51aW5nIHRvIHRoZSBuZXh0IHRhc2tcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgICBjb25zdCBpbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLndhaXRpbmdGb3JDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBGT1JNX1ZJRVdfVElNRVJTLldBSVRfRk9SX0NIQU5HRVNfQkVGT1JFX01PVklOR19UT19ORVhUX1RBU0spO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5zdG9wVGFza0V4ZWN1dGlvbikge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnN0b3BUYXNrRXhlY3V0aW9uIHx8IHRoaXMud2FpdGluZ0ZvckNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5zdG9wVGFza0V4ZWN1dGlvbiA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMub25DbGlja1NhdmVGb3JtLmVtaXQoe1xuICAgICAgICBmb3JtQ29uZmlnOiB0aGlzLmZvcm1Db25maWcsXG4gICAgICAgIGRhdGE6IG1lcmdlT2JqZWN0cyhcbiAgICAgICAgICB0aGlzLmFsbEZvcm1zRGF0YVt0aGlzLmZvcm1Db25maWcua2V5XSxcbiAgICAgICAgICBmb3JtRGF0YSxcbiAgICAgICAgICB0aGlzLnBvcHVwRm9ybURhdGEsXG4gICAgICAgICAgdGhpcy50YXNrRGF0YVxuICAgICAgICApLFxuICAgICAgICBleHRlbmRlZERhdGE6IGV4dGVuZGVkRm9ybURhdGFcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdldFVuc2F2ZWREYXRhU3RhdGUuZW1pdChmYWxzZSk7XG4gICAgICB0aGlzLm9uQ2xpY2tTYXZlRm9ybS5lbWl0KHtcbiAgICAgICAgZm9ybUNvbmZpZzogdGhpcy5mb3JtQ29uZmlnLFxuICAgICAgICBkYXRhOiBtZXJnZU9iamVjdHMoZm9ybURhdGEsIHRoaXMucG9wdXBGb3JtRGF0YSwgdGhpcy50YXNrRGF0YSksXG4gICAgICAgIGV4dGVuZGVkRGF0YTogZXh0ZW5kZWRGb3JtRGF0YVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVPbkFwaVRpbWVyU3RvcChlOiBhbnkpIHtcbiAgICB0aGlzLmZpZWxkQXBpVGltZXJNZXNzYWdlSGlkZShlLmtleSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGhhbmRsZU9uU2Nyb2xsVG9GaWVsZChmaWVsZEtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgdGFyZ2V0RmllbGQgPSB0aGlzLmZvcm1GaWVsZHNSZWZcbiAgICAgIC50b0FycmF5KClcbiAgICAgIC5maW5kKFxuICAgICAgICAoZm9ybUZpZWxkUmVmKSA9PiBmb3JtRmllbGRSZWYubmF0aXZlRWxlbWVudC5pZCA9PT0gYGZpZWxkXyR7ZmllbGRLZXl9YFxuICAgICAgKTtcblxuICAgIGlmICh0YXJnZXRGaWVsZCkge1xuICAgICAgY29uc3QgY29udGFpbmVyRWwgPSB0aGlzLmZvcm1GaWVsZENvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgY29uc3QgZmllbGRFbCA9IHRhcmdldEZpZWxkLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkoXG4gICAgICAgIGNvbnRhaW5lckVsLFxuICAgICAgICBcInNjcm9sbFRvcFwiLFxuICAgICAgICBmaWVsZEVsLm9mZnNldFRvcCAtIGNvbnRhaW5lckVsLm9mZnNldFRvcFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBzaG93RXJyb3JOb3RpZmljYXRpb24gPSBmYWxzZTtcblxuICBAbG9nTWV0aG9kXG4gIHRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKHNob3c6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnNob3dFcnJvck5vdGlmaWNhdGlvbiA9IHNob3c7XG4gIH1cblxuICBzaG93UGVybWlzc2lvbkVycm9yTm90aWZpY2F0aW9uID0gZmFsc2U7XG5cbiAgQGxvZ01ldGhvZFxuICB0b2dnbGVQZXJtaXNzaW9uRXJyb3JOb3RpZmljYXRpb24oc2hvdzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2hvd1Blcm1pc3Npb25FcnJvck5vdGlmaWNhdGlvbiA9IHNob3c7XG4gIH1cblxuICAvLyBDb21wb25lbnQgSGVscGVyc1xuICBAbG9nTWV0aG9kXG4gIGZpZWxkSGlkZShmaWVsZEtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBjb25zdCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcbiAgICB9KTtcblxuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XS5oaWRkZW4gPSB0cnVlO1xuICAgIHRoaXMuZm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcblxuICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19GSUVMRF9ISURFLCB7XG4gICAgICBmaWVsZF9rZXk6IGZpZWxkS2V5LFxuICAgICAgZmllbGRfdHlwZTogZmllbGQudHlwZVxuICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZEdyb3VwSGlkZShmaWVsZEdyb3VwOiBzdHJpbmcpIHtcbiAgICBmb3IgKGNvbnN0IGZpZWxkS2V5IG9mIHRoaXMuZmllbGRHcm91cHNbZmllbGRHcm91cF0pIHtcbiAgICAgIHRoaXMuZmllbGRIaWRlKGZpZWxkS2V5KTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkU2hvdyhmaWVsZEtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBjb25zdCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcbiAgICB9KTtcblxuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XS5oaWRkZW4gPSBmYWxzZTtcbiAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG5cbiAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRklFTERfU0hPVywge1xuICAgICAgZmllbGRfa2V5OiBmaWVsZEtleSxcbiAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGVcbiAgICB9KTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmllbGRHcm91cFNob3coZmllbGRHcm91cDogc3RyaW5nKSB7XG4gICAgZm9yIChjb25zdCBmaWVsZEtleSBvZiB0aGlzLmZpZWxkR3JvdXBzW2ZpZWxkR3JvdXBdKSB7XG4gICAgICB0aGlzLmZpZWxkU2hvdyhmaWVsZEtleSk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZERpc2FibGUoZmllbGRLZXk6IHN0cmluZykge1xuICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgY29uc3QgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XG4gICAgfSk7XG5cbiAgICBpZiAoZmllbGQuaXNGb3JtRWxlbWVudCkge1xuICAgICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdLmRpc2FibGVkID0gdHJ1ZTtcblxuICAgICAgaWYgKGlzTm90RW1wdHlWYWx1ZSh0aGlzLmZvcm1Hcm91cC5jb250cm9scykpIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS5kaXNhYmxlKHtcbiAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5mb3JtR3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gRUZpZWxkVHlwZS5CVVRUT04pIHtcbiAgICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XS5kaXNhYmxlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0ZJRUxEX0RJU0FCTEUsIHtcbiAgICAgIGZpZWxkX2tleTogZmllbGRLZXksXG4gICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlXG4gICAgfSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkR3JvdXBEaXNhYmxlKGZpZWxkR3JvdXA6IHN0cmluZykge1xuICAgIGZvciAoY29uc3QgZmllbGRLZXkgb2YgdGhpcy5maWVsZEdyb3Vwc1tmaWVsZEdyb3VwXSkge1xuICAgICAgdGhpcy5maWVsZERpc2FibGUoZmllbGRLZXkpO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmllbGRFbmFibGUoZmllbGRLZXk6IHN0cmluZykge1xuICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgY29uc3QgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XG4gICAgfSk7XG5cbiAgICBpZiAoZmllbGQuaXNGb3JtRWxlbWVudCkge1xuICAgICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdLmRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAgIGlmIChpc05vdEVtcHR5VmFsdWUodGhpcy5mb3JtR3JvdXAuY29udHJvbHMpKSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0uZW5hYmxlKHtcbiAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5mb3JtR3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gRUZpZWxkVHlwZS5CVVRUT04pIHtcbiAgICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XS5kaXNhYmxlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19GSUVMRF9FTkFCTEUsIHtcbiAgICAgIGZpZWxkX2tleTogZmllbGRLZXksXG4gICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlXG4gICAgfSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkR3JvdXBFbmFibGUoZmllbGRHcm91cDogc3RyaW5nKSB7XG4gICAgZm9yIChjb25zdCBmaWVsZEtleSBvZiB0aGlzLmZpZWxkR3JvdXBzW2ZpZWxkR3JvdXBdKSB7XG4gICAgICB0aGlzLmZpZWxkRW5hYmxlKGZpZWxkS2V5KTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkUmVzZXQoZmllbGRLZXk6IHN0cmluZykge1xuICAgIC8vIEZpbmQgdGhlIGZpZWxkIGFuZCBpdHMgaW5kZXggaW4gdGhlIGZvcm1GaWVsZHMgYXJyYXlcbiAgICBsZXQgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBjb25zdCBmaWVsZEluZGV4ID0gZ2V0Rm9ybUZpZWxkSW5kZXhCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcblxuICAgIC8vIFJlc2V0IHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgaW4gdGhlIGZvcm1Hcm91cFxuICAgIGNvbnN0IHJlc2V0VmFsdWUgPSBjb252ZXJ0Rm9ybUZpZWxkRW1wdHlWYWx1ZVRvS3dpa1VJRm9ybWF0KGZpZWxkKTtcblxuICAgIHRoaXMuZm9ybURhdGFbZmllbGRLZXldID0gcmVzZXRWYWx1ZTtcblxuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0ucmVzZXQocmVzZXRWYWx1ZSwge1xuICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgIG9ubHlTZWxmOiB0cnVlXG4gICAgfSk7XG5cbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKFxuICAgICAge1xuICAgICAgICBbZmllbGQua2V5XTogcmVzZXRWYWx1ZVxuICAgICAgfSxcbiAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XG4gICAgKTtcblxuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XG4gICAgICBlbWl0RXZlbnQ6IHRydWVcbiAgICB9KTtcblxuICAgIC8vIFJlc2V0IHRoZSBtZXNzYWdlcyBhbmQgZXJyb3JzIGZvciB0aGUgZmllbGRcbiAgICBmaWVsZCA9IHJlbW92ZUZvcm1GaWVsZE1lc3NhZ2UoZmllbGQsIHtcbiAgICAgIHR5cGU6IEVNZXNzYWdlVHlwZS5XQVJOSU5HLFxuICAgICAgbWVzc2FnZTogXCJcIlxuICAgIH0pO1xuICAgIGZpZWxkID0gcmVtb3ZlRm9ybUZpZWxkTWVzc2FnZShmaWVsZCwge1xuICAgICAgdHlwZTogRU1lc3NhZ2VUeXBlLlNVQ0NFU1MsXG4gICAgICBtZXNzYWdlOiBcIlwiXG4gICAgfSk7XG4gICAgdGhpcy5maWVsZEVycm9ySGlkZShmaWVsZEtleSwge1xuICAgICAgdHlwZTogRU1lc3NhZ2VUeXBlLkVSUk9SLFxuICAgICAgbWVzc2FnZTogXCJcIlxuICAgIH0pO1xuXG4gICAgLy8gUmVzZXQgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBpbiB0aGUgZm9ybUZpZWxkcyBhcnJheVxuICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgY2FzZSBFRmllbGRUeXBlLkFQSToge1xuICAgICAgICBjb25zdCBmaWVsZEFwaUNhbGwgPSBmaWVsZCBhcyBURmllbGRBcGlDYWxsO1xuICAgICAgICBmaWVsZEFwaUNhbGwuYXBpLnN0YXR1cy52YWx1ZSA9IEVBcGlTdGF0dXNUeXBlLkRFRkFVTFQ7XG4gICAgICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkQXBpQ2FsbDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIEVGaWVsZFR5cGUuTElWRV9MT0NBVElPTjoge1xuICAgICAgICBjb25zdCBmaWVsZExpdmVMb2NhdGlvbiA9IGZpZWxkIGFzIFRGaWVsZExpdmVMb2NhdGlvbjtcbiAgICAgICAgZmllbGRMaXZlTG9jYXRpb24uYXBpLnN0YXR1cy52YWx1ZSA9IEVBcGlTdGF0dXNUeXBlLkRFRkFVTFQ7XG4gICAgICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkTGl2ZUxvY2F0aW9uO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgZmllbGQuZm9jdXMgPSBmYWxzZTtcbiAgICAgICAgZmllbGQuaW52YWxpZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0gPSBmaWVsZDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0ZJRUxEX1JFU0VULCB7XG4gICAgICBmaWVsZF9rZXk6IGZpZWxkS2V5LFxuICAgICAgZmllbGRfdHlwZTogZmllbGQudHlwZVxuICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZEdyb3VwUmVzZXQoZmllbGRHcm91cDogc3RyaW5nKSB7XG4gICAgZm9yIChjb25zdCBmaWVsZEtleSBvZiB0aGlzLmZpZWxkR3JvdXBzW2ZpZWxkR3JvdXBdKSB7XG4gICAgICB0aGlzLmZpZWxkUmVzZXQoZmllbGRLZXkpO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmllbGRIaWRlQXBpTG9hZGVyKGZpZWxkS2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuICAgIGNvbnN0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgLy8gUmVzZXQgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBpbiB0aGUgZm9ybUZpZWxkcyBhcnJheVxuICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgY2FzZSBFRmllbGRUeXBlLkFQSToge1xuICAgICAgICBjb25zdCBmaWVsZEFwaUNhbGwgPSBmaWVsZCBhcyBURmllbGRBcGlDYWxsO1xuICAgICAgICBmaWVsZEFwaUNhbGwuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGRBcGlDYWxsO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgRUZpZWxkVHlwZS5MSVZFX0xPQ0FUSU9OOiB7XG4gICAgICAgIGNvbnN0IGZpZWxkTGl2ZUxvY2F0aW9uID0gZmllbGQgYXMgVEZpZWxkTGl2ZUxvY2F0aW9uO1xuICAgICAgICBmaWVsZExpdmVMb2NhdGlvbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0gPSBmaWVsZExpdmVMb2NhdGlvbjtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmllbGRTaG93QXBpTG9hZGVyKGZpZWxkS2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuICAgIGNvbnN0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgLy8gUmVzZXQgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBpbiB0aGUgZm9ybUZpZWxkcyBhcnJheVxuICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgY2FzZSBFRmllbGRUeXBlLkFQSToge1xuICAgICAgICBjb25zdCBmaWVsZEFwaUNhbGwgPSBmaWVsZCBhcyBURmllbGRBcGlDYWxsO1xuICAgICAgICBmaWVsZEFwaUNhbGwuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0gPSBmaWVsZEFwaUNhbGw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBFRmllbGRUeXBlLkxJVkVfTE9DQVRJT046IHtcbiAgICAgICAgY29uc3QgZmllbGRMaXZlTG9jYXRpb24gPSBmaWVsZCBhcyBURmllbGRMaXZlTG9jYXRpb247XG4gICAgICAgIGZpZWxkTGl2ZUxvY2F0aW9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGRMaXZlTG9jYXRpb247XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHNldEh0bWwoZmllbGRLZXk6IHN0cmluZywgbWVzc2FnZTogVE1lc3NhZ2UpIHtcbiAgICBsZXQgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBjb25zdCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcbiAgICB9KTtcblxuICAgIGZpZWxkID0gYXBwZW5kSHRtbE1lc3NhZ2UoZmllbGQsIG1lc3NhZ2UpO1xuXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGQ7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkRXJyb3JTaG93KGZpZWxkS2V5OiBzdHJpbmcsIG1lc3NhZ2U6IFRNZXNzYWdlKSB7XG4gICAgbGV0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgY29uc3QgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XG4gICAgfSk7XG5cbiAgICBmaWVsZCA9IGhpZ2hsaWdodEZvcm1GaWVsZEVycm9yKGZpZWxkLCB0cnVlKTtcbiAgICBmaWVsZCA9IGFwcGVuZEZvcm1GaWVsZE1lc3NhZ2UoZmllbGQsIG1lc3NhZ2UpO1xuXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGQ7XG5cbiAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRklFTERfRVJST1JfU0hPVywge1xuICAgICAgZmllbGRfa2V5OiBmaWVsZEtleSxcbiAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGUsXG4gICAgICBmaWVsZF9lcnJvcl9tZXNzYWdlOiBtZXNzYWdlXG4gICAgfSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkRXJyb3JIaWRlKGZpZWxkS2V5OiBzdHJpbmcsIG1lc3NhZ2U6IFRNZXNzYWdlKSB7XG4gICAgbGV0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgY29uc3QgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XG4gICAgfSk7XG5cbiAgICBmaWVsZCA9IGhpZ2hsaWdodEZvcm1GaWVsZEVycm9yKGZpZWxkLCBmYWxzZSk7XG4gICAgZmllbGQgPSByZW1vdmVGb3JtRmllbGRNZXNzYWdlKGZpZWxkLCBtZXNzYWdlKTtcblxuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xuXG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0ZJRUxEX0VSUk9SX0hJREUsIHtcbiAgICAgIGZpZWxkX2tleTogZmllbGRLZXksXG4gICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlLFxuICAgICAgZmllbGRfZXJyb3JfbWVzc2FnZTogbWVzc2FnZVxuICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZE1lc3NhZ2VTaG93KGZpZWxkS2V5OiBzdHJpbmcsIG1lc3NhZ2U6IFRNZXNzYWdlKSB7XG4gICAgbGV0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgY29uc3QgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XG4gICAgfSk7XG5cbiAgICBmaWVsZCA9IGFwcGVuZEZvcm1GaWVsZE1lc3NhZ2UoZmllbGQsIG1lc3NhZ2UpO1xuXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGQ7XG5cbiAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRklFTERfTUVTU0FHRV9TSE9XLCB7XG4gICAgICBmaWVsZF9rZXk6IGZpZWxkS2V5LFxuICAgICAgZmllbGRfdHlwZTogZmllbGQudHlwZSxcbiAgICAgIGZpZWxkX21lc3NhZ2U6IG1lc3NhZ2VcbiAgICB9KTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmllbGRNZXNzYWdlSGlkZShmaWVsZEtleTogc3RyaW5nLCBtZXNzYWdlOiBUTWVzc2FnZSkge1xuICAgIGxldCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuICAgIGNvbnN0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgZmllbGQgPSByZW1vdmVGb3JtRmllbGRNZXNzYWdlKGZpZWxkLCBtZXNzYWdlKTtcblxuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xuXG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0ZJRUxEX01FU1NBR0VfSElERSwge1xuICAgICAgZmllbGRfa2V5OiBmaWVsZEtleSxcbiAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGUsXG4gICAgICBmaWVsZF9tZXNzYWdlOiBtZXNzYWdlXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmaWVsZEFwaVRpbWVyTWVzc2FnZVNob3coXG4gICAgZmllbGRLZXk6IHN0cmluZyxcbiAgICB0aW1lcjogVEFwaVRpbWVyXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuICAgIGNvbnN0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgZmllbGQgPSBzZXRBcGlUaW1lck1lc3NhZ2UoZmllbGQsIHRpbWVyKTtcblxuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0ZJRUxEX0FQSV9USU1FUl9NRVNTQUdFX1NIT1csIHtcbiAgICAgIGZpZWxkX2tleTogZmllbGRLZXksXG4gICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlLFxuICAgICAgZmllbGRfdGltZXI6IHRpbWVyXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmaWVsZEFwaVRpbWVyTWVzc2FnZUhpZGUoZmllbGRLZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuICAgIGNvbnN0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgZmllbGQgPSBzZXRBcGlUaW1lck1lc3NhZ2UoZmllbGQsIHVuZGVmaW5lZCk7XG5cbiAgICBpZiAoXG4gICAgICBmaWVsZC5pc0Zvcm1FbGVtZW50ICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJ2YWxpZGF0aW9uXCIpICYmXG4gICAgICBmaWVsZC52YWxpZGF0aW9uLnRyaWdnZXJzLmluY2x1ZGVzKFwiT05fQVBJX1RJTUVSX1NUT1BcIilcbiAgICApIHtcbiAgICAgIGNvbnN0IHJ1bGVFbmdpbmUgPSBuZXcgUnVsZUVuZ2luZShcbiAgICAgICAge1xuICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgQ0FNRVJBX0RBVEE6IHRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICApO1xuXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBydWxlRW5naW5lLnJ1bihmaWVsZC52YWxpZGF0aW9uKTtcbiAgICAgIH0pKCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcImNvbm5lY3RlZEVsZW1lbnRzXCIpKSB7XG4gICAgICB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRzKFxuICAgICAgICB7XG4gICAgICAgICAga2V5OiBmaWVsZC5rZXksXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVcbiAgICAgICAgfSxcbiAgICAgICAgXCJPTl9BUElfVElNRVJfU1RPUFwiXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0ZJRUxEX0FQSV9USU1FUl9NRVNTQUdFX0hJREUsIHtcbiAgICAgIGZpZWxkX2tleTogZmllbGRLZXksXG4gICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlXG4gICAgfSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHNldFZhbHVlKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICBjb25zdCBzb3VyY2VWYWx1ZSA9IGF3YWl0IHNvdXJjZS5nZXRWYWx1ZUZyb21Tb3VyY2UoXG4gICAgICBhY3Rpb24ucHJvcHMudmFsdWUuc291cmNlXG4gICAgKTtcbiAgICBzb3VyY2Uuc2V0VmFsdWVUb1NvdXJjZShhY3Rpb24ucHJvcHMudmFsdWUuZGVzdGluYXRpb24sIHNvdXJjZVZhbHVlKTtcblxuICAgIG9iamVjdC5GSUVMRF9DT05GSUcgPSBzb3VyY2Uub2JqZWN0LkZJRUxEX0NPTkZJRztcblxuICAgIHRoaXMuZm9ybURhdGEgPSBzb3VyY2Uub2JqZWN0LkZPUk1fREFUQTtcbiAgICB0aGlzLnBhdGNoRm9ybUdyb3VwKHRoaXMuZm9ybURhdGEpO1xuICAgIHRoaXMuYWxsRm9ybXNEYXRhID0gc291cmNlLm9iamVjdC5BTExfRk9STVNfREFUQTtcbiAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEgPSBzb3VyY2Uub2JqZWN0LlBSRVZJT1VTX0ZPUk1fREFUQTtcbiAgICB0aGlzLmV4dHJhRGF0YSA9IHNvdXJjZS5vYmplY3QuRVhUUkFfREFUQTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgc2V0RmllbGREZWZhdWx0VmFsdWUoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBTb3VyY2Uob2JqZWN0KTtcblxuICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gYXdhaXQgc291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShcbiAgICAgIGFjdGlvbi5wcm9wcy52YWx1ZS5zb3VyY2VcbiAgICApO1xuXG4gICAgc291cmNlLnNldFZhbHVlVG9Tb3VyY2UoXG4gICAgICB7XG4gICAgICAgIGtleTogRVNvdXJjZUtleS5PQkpFQ1QsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgICBrZXk6IFwiRklFTERfQ09ORklHXCIsXG4gICAgICAgICAgICBwYXRoOiBcImRlZmF1bHQudmFsdWUudmFsdWVcIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNvdXJjZVZhbHVlXG4gICAgKTtcbiAgICBzb3VyY2Uuc2V0VmFsdWVUb1NvdXJjZShcbiAgICAgIHtcbiAgICAgICAga2V5OiBFU291cmNlS2V5Lk9CSkVDVCxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICAgIGtleTogXCJGT1JNX0RBVEFcIixcbiAgICAgICAgICAgIHBhdGg6IFN0cmluZyhhY3Rpb24ucHJvcHMuZmllbGRLZXkpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc291cmNlVmFsdWVcbiAgICApO1xuXG4gICAgb2JqZWN0LkZJRUxEX0NPTkZJRyA9IHNvdXJjZS5vYmplY3QuRklFTERfQ09ORklHO1xuICAgIHRoaXMuZm9ybURhdGEgPSBzb3VyY2Uub2JqZWN0LkZPUk1fREFUQTtcbiAgICB0aGlzLnBhdGNoRm9ybUdyb3VwKHRoaXMuZm9ybURhdGEpO1xuICAgIHRoaXMuYWxsRm9ybXNEYXRhID0gc291cmNlLm9iamVjdC5BTExfRk9STVNfREFUQTtcbiAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEgPSBzb3VyY2Uub2JqZWN0LlBSRVZJT1VTX0ZPUk1fREFUQTtcbiAgICB0aGlzLmV4dHJhRGF0YSA9IHNvdXJjZS5vYmplY3QuRVhUUkFfREFUQTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgc2V0QXBpU3RhdHVzKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICBjb25zdCBzb3VyY2VWYWx1ZSA9IGFjdGlvbi5wcm9wcy5zdGF0dXM7XG5cbiAgICBzb3VyY2Uuc2V0VmFsdWVUb1NvdXJjZShcbiAgICAgIHtcbiAgICAgICAga2V5OiBFU291cmNlS2V5Lk9CSkVDVCxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICAgIGtleTogXCJGSUVMRF9DT05GSUdcIixcbiAgICAgICAgICAgIHBhdGg6IFwiYXBpLnN0YXR1cy52YWx1ZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc291cmNlVmFsdWVcbiAgICApO1xuXG4gICAgb2JqZWN0LkZJRUxEX0NPTkZJRyA9IHNvdXJjZS5vYmplY3QuRklFTERfQ09ORklHO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBzZXRBcGlIZWFkZXJWYWx1ZShhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc291cmNlID0gbmV3IFNvdXJjZShvYmplY3QpO1xuXG4gICAgY29uc3Qgc291cmNlVmFsdWUgPSBhd2FpdCBzb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKGFjdGlvbi5wcm9wcy5zb3VyY2UpO1xuXG4gICAgc291cmNlLnNldFZhbHVlVG9Tb3VyY2UoXG4gICAgICB7XG4gICAgICAgIGtleTogRVNvdXJjZUtleS5PQkpFQ1QsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgICBrZXk6IFwiQVBJX0NPTkZJR1wiLFxuICAgICAgICAgICAgcGF0aDogYHJlcXVlc3QuaGVhZGVycy52YWx1ZS4ke2FjdGlvbi5wcm9wcy5rZXl9YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNvdXJjZVZhbHVlXG4gICAgKTtcblxuICAgIG9iamVjdC5BUElfQ09ORklHID0gc291cmNlLm9iamVjdC5BUElfQ09ORklHO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBzZXRBcGlIZWFkZXJWYWxpZGl0eShhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc291cmNlID0gbmV3IFNvdXJjZShvYmplY3QpO1xuXG4gICAgY29uc3Qgc291cmNlVmFsdWUgPSBhY3Rpb24ucHJvcHMudmFsaWQ7XG5cbiAgICBzb3VyY2Uuc2V0VmFsdWVUb1NvdXJjZShcbiAgICAgIHtcbiAgICAgICAga2V5OiBFU291cmNlS2V5Lk9CSkVDVCxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICAgIGtleTogXCJBUElfQ09ORklHXCIsXG4gICAgICAgICAgICBwYXRoOiBcInJlcXVlc3QuaGVhZGVycy5pc192YWxpZFwiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc291cmNlVmFsdWVcbiAgICApO1xuXG4gICAgb2JqZWN0LkFQSV9DT05GSUcgPSBzb3VyY2Uub2JqZWN0LkFQSV9DT05GSUc7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHNldEFwaUJvZHlWYWx1ZShhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc291cmNlID0gbmV3IFNvdXJjZShvYmplY3QpO1xuXG4gICAgY29uc3Qgc291cmNlVmFsdWUgPSBhd2FpdCBzb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKGFjdGlvbi5wcm9wcy5zb3VyY2UpO1xuXG4gICAgc291cmNlLnNldFZhbHVlVG9Tb3VyY2UoXG4gICAgICB7XG4gICAgICAgIGtleTogRVNvdXJjZUtleS5PQkpFQ1QsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgICBrZXk6IFwiQVBJX0NPTkZJR1wiLFxuICAgICAgICAgICAgcGF0aDogYHJlcXVlc3QuYm9keS52YWx1ZS4ke2FjdGlvbi5wcm9wcy5rZXl9YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNvdXJjZVZhbHVlXG4gICAgKTtcblxuICAgIG9iamVjdC5BUElfQ09ORklHID0gc291cmNlLm9iamVjdC5BUElfQ09ORklHO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBzZXRBcGlCb2R5VmFsaWRpdHkoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBTb3VyY2Uob2JqZWN0KTtcblxuICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gYWN0aW9uLnByb3BzLnZhbGlkO1xuXG4gICAgc291cmNlLnNldFZhbHVlVG9Tb3VyY2UoXG4gICAgICB7XG4gICAgICAgIGtleTogRVNvdXJjZUtleS5PQkpFQ1QsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgICBrZXk6IFwiQVBJX0NPTkZJR1wiLFxuICAgICAgICAgICAgcGF0aDogXCJyZXF1ZXN0LmJvZHkuaXNfdmFsaWRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNvdXJjZVZhbHVlXG4gICAgKTtcblxuICAgIG9iamVjdC5BUElfQ09ORklHID0gc291cmNlLm9iamVjdC5BUElfQ09ORklHO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBzZXRGaWVsZFZhbGlkaXR5KGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICBjb25zdCBzb3VyY2VWYWx1ZSA9IGFjdGlvbi5wcm9wcy52YWxpZDtcblxuICAgIHNvdXJjZS5zZXRWYWx1ZVRvU291cmNlKFxuICAgICAge1xuICAgICAgICBrZXk6IEVTb3VyY2VLZXkuT0JKRUNULFxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAga2V5OiBcIkZJRUxEX0NPTkZJR1wiLFxuICAgICAgICAgICAgcGF0aDogXCJ2YWxpZGF0aW9uLmlzX3ZhbGlkXCJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzb3VyY2VWYWx1ZVxuICAgICk7XG5cbiAgICBvYmplY3QuRklFTERfQ09ORklHID0gc291cmNlLm9iamVjdC5GSUVMRF9DT05GSUc7XG4gICAgb2JqZWN0LkFQSV9DT05GSUcgPSBzb3VyY2Uub2JqZWN0LkFQSV9DT05GSUc7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHNldERyb3Bkb3duT3B0aW9ucyhhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc291cmNlID0gbmV3IFNvdXJjZShvYmplY3QpO1xuXG4gICAgbGV0IHNvdXJjZVZhbHVlID0gYXdhaXQgc291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShcbiAgICAgIGFjdGlvbi5wcm9wcy52YWx1ZS5zb3VyY2VcbiAgICApO1xuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3Rpb24ucHJvcHMsIFwib3B0aW9uc1wiKSkge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcy5vcHRpb25zLCBcImFwcGVuZFRvUGF0aFwiKSkge1xuICAgICAgICBjb25zdCBhcHBlbmRUb1BhdGggPSBhd2FpdCBzb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKFxuICAgICAgICAgIGFjdGlvbi5wcm9wcy5vcHRpb25zLmFwcGVuZFRvUGF0aC5zb3VyY2VcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGlzTm90RW1wdHlWYWx1ZShhcHBlbmRUb1BhdGgpKSB7XG4gICAgICAgICAgY29uc3QgYXBwZW5kVG9QYXRoU3RyID0gcmVwbGFjZVN0cmluZyhcbiAgICAgICAgICAgIGFwcGVuZFRvUGF0aC5tYXRjaChcbiAgICAgICAgICAgICAgYCR7YWN0aW9uLnByb3BzLm9wdGlvbnMuYXBwZW5kVG9QYXRoLmZpbHRlclNvdXJjZVZhbHVlfWBcbiAgICAgICAgICAgIClbMF0sXG4gICAgICAgICAgICBcIlteYS16QS1aMC05X11cIixcbiAgICAgICAgICAgIFwiX1wiXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IG9wdGlvbnNQYXRoID0gYCR7YWN0aW9uLnByb3BzLm9wdGlvbnMucGF0aH0ke2FwcGVuZFRvUGF0aFN0cn1gO1xuICAgICAgICAgIHNvdXJjZVZhbHVlID0gZ2V0T2JqZWN0VmFsdWVGcm9tUGF0aChzb3VyY2VWYWx1ZSwgb3B0aW9uc1BhdGgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb3VyY2VWYWx1ZSA9IGdldE9iamVjdFZhbHVlRnJvbVBhdGgoXG4gICAgICAgICAgc291cmNlVmFsdWUsXG4gICAgICAgICAgYWN0aW9uLnByb3BzLm9wdGlvbnMucGF0aFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3VyY2Uuc2V0VmFsdWVUb1NvdXJjZShhY3Rpb24ucHJvcHMudmFsdWUuZGVzdGluYXRpb24sIHNvdXJjZVZhbHVlKTtcblxuICAgIG9iamVjdC5GSUVMRF9DT05GSUcgPSBzb3VyY2Uub2JqZWN0LkZJRUxEX0NPTkZJRztcbiAgICB0aGlzLmZvcm1EYXRhID0gc291cmNlLm9iamVjdC5GT1JNX0RBVEE7XG4gICAgdGhpcy5hbGxGb3Jtc0RhdGEgPSBzb3VyY2Uub2JqZWN0LkFMTF9GT1JNU19EQVRBO1xuICAgIHRoaXMucHJldmlvdXNGb3JtRGF0YSA9IHNvdXJjZS5vYmplY3QuUFJFVklPVVNfRk9STV9EQVRBO1xuICAgIHRoaXMuZXh0cmFEYXRhID0gc291cmNlLm9iamVjdC5FWFRSQV9EQVRBO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBhcGlDYWxsKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPFRBcGk+IHtcbiAgICBsZXQgYXBpQ29uZmlnID0gdGhpcy5mb3JtQ29uZmlnLmFwaXNbYWN0aW9uLnByb3BzLmZvcm1BcGlLZXldO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmhhbmRsZUFwaUNhbGwoYXBpQ29uZmlnKTtcblxuICAgIGFwaUNvbmZpZyA9IHJlc3BvbnNlLmFwaTtcblxuICAgIHRoaXMuZm9ybUNvbmZpZyA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgdGhpcy5mb3JtQ29uZmlnLFxuICAgICAgYGFwaXMuJHthY3Rpb24ucHJvcHMuZm9ybUFwaUtleX1gLFxuICAgICAgYXBpQ29uZmlnXG4gICAgKTtcblxuICAgIHRoaXMuZm9ybURhdGEgPSBtZXJnZU9iamVjdHModGhpcy5mb3JtRGF0YSwge1xuICAgICAgW2FjdGlvbi5wcm9wcy5mb3JtQXBpS2V5XTogYXBpQ29uZmlnLnJlc3BvbnNlLnZhbHVlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXBpQ29uZmlnO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBmaWVsZEFwaUNhbGwoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc2hvd0FwaUxvYWRlcigpO1xuXG4gICAgY29uc3QgYXBpQ29uZmlnID0gYXdhaXQgdGhpcy5hcGlDYWxsKGFjdGlvbiwgb2JqZWN0KTtcblxuICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBmaWVsZE11bHRpcGxlQXBpQ2FsbHMoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGVudHJ5cG9pbnRBcGlLZXkgPSBhY3Rpb24ucHJvcHMuYXBpS2V5O1xuICAgIGxldCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcbiAgICBjb25zdCB7IGVuZHBvaW50cyB9ID0gZmllbGQuYXBpO1xuICAgIGNvbnN0IG5leHRBcGlJbmRleCA9IGVuZHBvaW50cy5maW5kSW5kZXgoXG4gICAgICAoYXBpOiBUQXBpRW5kcG9pbnQpID0+IGFwaS5hcGlLZXkgPT09IGVudHJ5cG9pbnRBcGlLZXlcbiAgICApO1xuICAgIGNvbnN0IGFwaUNvbmZpZyA9IGVuZHBvaW50c1tuZXh0QXBpSW5kZXhdO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmhhbmRsZUZpZWxkQXBpQ2FsbChmaWVsZCwgYXBpQ29uZmlnKTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xuICAgIGZpZWxkID0gcmVzcG9uc2UuZmllbGQ7XG4gICAgZmllbGQuYXBpLmVuZHBvaW50c1tuZXh0QXBpSW5kZXhdID0gcmVzcG9uc2UuYXBpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBmaWVsZE11bHRpcGxlQXBpQ2FsbHNFbmQoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBhY3Rpb24ucHJvcHMuZmllbGRLZXkpO1xuICAgIGxldCBtdWx0aXBsZUFwaUNhbGxSZXNwb25zZXMgPSB7fTtcbiAgICBmaWVsZC5hcGkuZW5kcG9pbnRzLmZvckVhY2goKGFwaTogVEFwaUVuZHBvaW50KSA9PiB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYXBpLnJlc3BvbnNlLCBcInZhbHVlXCIpKVxuICAgICAgICBtdWx0aXBsZUFwaUNhbGxSZXNwb25zZXMgPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgICBtdWx0aXBsZUFwaUNhbGxSZXNwb25zZXMsXG4gICAgICAgICAgYCR7YXBpLmFwaUtleX1gLFxuICAgICAgICAgIGFwaS5yZXNwb25zZS52YWx1ZVxuICAgICAgICApO1xuICAgIH0pO1xuICAgIHRoaXMuZm9ybURhdGEgPSB7XG4gICAgICAuLi50aGlzLmZvcm1EYXRhLFxuICAgICAgW2ZpZWxkLmtleV06IG11bHRpcGxlQXBpQ2FsbFJlc3BvbnNlc1xuICAgIH07XG4gICAgdGhpcy5wYXRjaEZvcm1Hcm91cCh0aGlzLmZvcm1EYXRhKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgdGFza0FwaUNhbGwoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc2hvd0FwaUxvYWRlcigpO1xuXG4gICAgY29uc3QgYXBpQ29uZmlnID0gYXdhaXQgdGhpcy5hcGlDYWxsKGFjdGlvbiwgb2JqZWN0KTtcblxuICAgIHRoaXMudGFza0RhdGEgPSBtZXJnZU9iamVjdHModGhpcy50YXNrRGF0YSwge1xuICAgICAgW2FjdGlvbi5wcm9wcy5mb3JtQXBpS2V5XTogYXBpQ29uZmlnLnJlc3BvbnNlLnZhbHVlXG4gICAgfSk7XG5cbiAgICB0aGlzLndhaXRpbmdGb3JDaGFuZ2VzID0gZmFsc2U7XG5cbiAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgdGFza011bHRpcGxlQXBpQ2FsbHMoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc2hvd0FwaUxvYWRlcigpO1xuXG4gICAgY29uc3QgbXVsdGlwbGVBcGlDb25maWcgPSB0aGlzLmZvcm1Db25maWcuYXBpc1thY3Rpb24ucHJvcHMuZm9ybUFwaUtleV07XG5cbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aW9uLnByb3BzLCBcImFwaUtleVwiKSkge1xuICAgICAgY29uc3QgZW50cnlwb2ludEFwaUtleSA9IGFjdGlvbi5wcm9wcy5hcGlLZXk7XG4gICAgICBjb25zdCB7IGVuZHBvaW50cyB9ID0gbXVsdGlwbGVBcGlDb25maWc7XG4gICAgICBjb25zdCBuZXh0QXBpSW5kZXggPSBlbmRwb2ludHMuZmluZEluZGV4KFxuICAgICAgICAoYXBpOiBUQXBpRW5kcG9pbnQpID0+IGFwaS5hcGlLZXkgPT09IGVudHJ5cG9pbnRBcGlLZXlcbiAgICAgICk7XG4gICAgICBjb25zdCBhcGlDb25maWcgPSBlbmRwb2ludHNbbmV4dEFwaUluZGV4XTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmhhbmRsZUFwaUNhbGwoYXBpQ29uZmlnKTtcblxuICAgICAgbXVsdGlwbGVBcGlDb25maWcuZW5kcG9pbnRzW25leHRBcGlJbmRleF0gPSByZXNwb25zZS5hcGk7XG5cbiAgICAgIHRoaXMuZm9ybUNvbmZpZyA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgICB0aGlzLmZvcm1Db25maWcsXG4gICAgICAgIGBhcGlzLiR7YWN0aW9uLnByb3BzLmZvcm1BcGlLZXl9YCxcbiAgICAgICAgbXVsdGlwbGVBcGlDb25maWdcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBhcGlzID0gbmV3IEFwaXMoXG4gICAgICAgIHtcbiAgICAgICAgICBGT1JNX0NPTkZJRzogdGhpcy5mb3JtQ29uZmlnLFxuICAgICAgICAgIEFQSV9DT05GSUc6IG11bHRpcGxlQXBpQ29uZmlnLFxuICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICB9LFxuICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgKTtcblxuICAgICAgYXdhaXQgYXBpcy5jYWxsTmV4dEFwaShtdWx0aXBsZUFwaUNvbmZpZy5lbnRyeXBvaW50KTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHRhc2tNdWx0aXBsZUFwaUNhbGxzRW5kKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtdWx0aXBsZUFwaUNvbmZpZyA9IHRoaXMuZm9ybUNvbmZpZy5hcGlzW2FjdGlvbi5wcm9wcy5mb3JtQXBpS2V5XTtcblxuICAgIGxldCBtdWx0aXBsZUFwaUNhbGxSZXNwb25zZXMgPSB7fTtcbiAgICBtdWx0aXBsZUFwaUNvbmZpZy5lbmRwb2ludHMuZm9yRWFjaCgoYXBpOiBUQXBpRW5kcG9pbnQpID0+IHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhcGkucmVzcG9uc2UsIFwidmFsdWVcIikpXG4gICAgICAgIG11bHRpcGxlQXBpQ2FsbFJlc3BvbnNlcyA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgICAgIG11bHRpcGxlQXBpQ2FsbFJlc3BvbnNlcyxcbiAgICAgICAgICBgJHthcGkuYXBpS2V5fWAsXG4gICAgICAgICAgYXBpLnJlc3BvbnNlLnZhbHVlXG4gICAgICAgICk7XG4gICAgfSk7XG4gICAgdGhpcy50YXNrRGF0YSA9IHtcbiAgICAgIC4uLnRoaXMudGFza0RhdGEsXG4gICAgICBbYWN0aW9uLnByb3BzLmZvcm1BcGlLZXldOiBtdWx0aXBsZUFwaUNhbGxSZXNwb25zZXNcbiAgICB9O1xuXG4gICAgdGhpcy53YWl0aW5nRm9yQ2hhbmdlcyA9IGZhbHNlO1xuXG4gICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gIH1cblxuICBkaWFsb2dSZWY6IGFueSA9IHVuZGVmaW5lZDtcblxuICBAbG9nTWV0aG9kXG4gIGRpYWxvZ1Nob3cob3B0aW9uczogYW55KSB7XG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0RJQUxPR19TSE9XLCB7fSk7XG5cbiAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZVxuICAgICAgLm9wZW4ob3B0aW9ucz8uaHRtbCwge1xuICAgICAgICBjbG9zZWFibGU6IHRydWUsXG4gICAgICAgIGRpc21pc3NpYmxlOiB0cnVlLFxuICAgICAgICBsYWJlbDogb3B0aW9ucz8ubGFiZWwsXG4gICAgICAgIHNpemU6IG9wdGlvbnM/LnNpemUgPz8gXCJzXCIsXG4gICAgICAgIGRhdGE6IHsgYnV0dG9uOiBvcHRpb25zPy5idXR0b24gfVxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19ESUFMT0dfRVJST1IsIHt9KTtcbiAgICAgICAgfSxcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRElBTE9HX0hJREUsIHt9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGRpYWxvZ0hpZGUoKSB7XG4gICAgaWYgKHRoaXMuZGlhbG9nUmVmKSB7XG4gICAgICB0aGlzLmRpYWxvZ1JlZi5jb21wbGV0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgcmVkaXJlY3RUb1VybChhY3Rpb246IFRBY3Rpb24pIHtcbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aW9uLnByb3BzLCBcInVybFwiKSkge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcy51cmwsIFwidXJsXCIpKSB7XG4gICAgICAgIGxldCB0aW1lb3V0ID0gMjAwMDtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcy51cmwsIFwidGltZW91dFwiKSAmJlxuICAgICAgICAgIHR5cGVvZiBhY3Rpb24ucHJvcHMudXJsLnRpbWVvdXQgPT09IFwibnVtYmVyXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICAgICAgdGltZW91dCA9IGFjdGlvbi5wcm9wcy51cmwudGltZW91dDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19SRURJUkVDVF9VUkwsIHtcbiAgICAgICAgICB0aW1lb3V0LFxuICAgICAgICAgIHJlZGlyZWN0X3VybDogYWN0aW9uLnByb3BzLnVybFxuICAgICAgICB9KTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aW9uLnByb3BzLnVybCwgXCJ0YXJnZXRcIikpIHtcbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKGFjdGlvbi5wcm9wcy51cmwudXJsLCBhY3Rpb24ucHJvcHMudXJsLnRhcmdldCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKGFjdGlvbi5wcm9wcy51cmwudXJsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHRpbWVvdXQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgcGF0Y2hGaWVsZENvbnRyb2xWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2tleV0ucGF0Y2hWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBzZXRGaWVsZENvbnRyb2xWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2tleV0uc2V0VmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgcGF0Y2hGb3JtR3JvdXAoZm9ybURhdGE6IGFueSkge1xuICAgIGlmIChpc1VuZGVmaW5lZCh0aGlzLmZvcm1Hcm91cCkgfHwgaXNVbmRlZmluZWQoZm9ybURhdGEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGZvcm1Hcm91cCBvciBmb3JtRGF0YSBpcyAndW5kZWZpbmVkJy5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZm9ybURhdGFJbkt3aWtVSUZvcm1hdCA9IHt9O1xuICAgICAgZm9yIChjb25zdCBmaWVsZEtleSBpbiBmb3JtRGF0YSkge1xuICAgICAgICBpZiAoaXNOb3RFbXB0eVZhbHVlKGZpZWxkS2V5KSkge1xuICAgICAgICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmaWVsZCkgJiYgIWlzTnVsbChmaWVsZCkpIHtcbiAgICAgICAgICAgIGZvcm1EYXRhSW5Ld2lrVUlGb3JtYXRbZmllbGRLZXldID1cbiAgICAgICAgICAgICAgY29udmVydEZvcm1GaWVsZFZhbHVlVG9Ld2lrVUlGb3JtYXQoZmllbGQsIGZvcm1EYXRhW2ZpZWxkS2V5XSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKGZvcm1EYXRhSW5Ld2lrVUlGb3JtYXQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGlzRmllbGRWYWxpZChmaWVsZEtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkS2V5XS52YWxpZDtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaXNGaWVsZEVuYWJsZWQoZmllbGRLZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZEtleV0uZW5hYmxlZDtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZ2V0Rm9ybUdyb3VwUmF3VmFsdWVzKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBzaG93UHJldmlldyhwcmV2aWV3UHJvcGVydGllczogYW55KTogdm9pZCB7XG4gICAgdGhpcy5wcmV2aWV3UHJvcGVydGllcyA9IG1lcmdlT2JqZWN0cyhcbiAgICAgIHRoaXMucHJldmlld1Byb3BlcnRpZXMsXG4gICAgICBwcmV2aWV3UHJvcGVydGllc1xuICAgICk7XG5cbiAgICBpZiAoXG4gICAgICBpc0VtcHR5VmFsdWUodGhpcy5wcmV2aWV3UHJvcGVydGllcy5pZnJhbWUuc3JjKSAmJlxuICAgICAgaXNFbXB0eVZhbHVlKHRoaXMucHJldmlld1Byb3BlcnRpZXMuaHRtbC5iZWZvcmUpICYmXG4gICAgICBpc0VtcHR5VmFsdWUodGhpcy5wcmV2aWV3UHJvcGVydGllcy5odG1sLmFmdGVyKVxuICAgICkge1xuICAgICAgdGhpcy5wcmV2aWV3UHJvcGVydGllcy51bmF2YWlsYWJsZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJldmlld1Byb3BlcnRpZXMudW5hdmFpbGFibGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNldFByZXZpZXdQcm9wZXJ0aWVzID0gKCkgPT4ge1xuICAgICAgdGhpcy5wcmV2aWV3UHJvcGVydGllcyA9IHtcbiAgICAgICAgaHRtbDoge1xuICAgICAgICAgIGJlZm9yZTogXCJcIixcbiAgICAgICAgICBiZWZvcmVTdHlsZXM6IFwiXCIsXG4gICAgICAgICAgYWZ0ZXI6IFwiXCIsXG4gICAgICAgICAgYWZ0ZXJTdHlsZXM6IFwiXCJcbiAgICAgICAgfSxcbiAgICAgICAgaWZyYW1lOiB7XG4gICAgICAgICAgc3JjOiBcIlwiLFxuICAgICAgICAgIHRpdGxlOiBcIlwiXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IFwiZGlhbG9nXCIsXG4gICAgICAgIHBvcHVwRm9ybUtleTogXCJcIixcbiAgICAgICAgdGl0bGU6IFwiXCIsXG4gICAgICAgIHNpemU6IFwiYXV0b1wiLFxuICAgICAgICB1bmF2YWlsYWJsZTogZmFsc2VcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHNob3dEaWFsb2cgPSAoKSA9PiB7XG4gICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRElBTE9HX1NIT1csIHt9KTtcblxuICAgICAgdGhpcy5wcmV2aWV3RGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlXG4gICAgICAgIC5vcGVuKHRoaXMuZGlhbG9nLCB7XG4gICAgICAgICAgY2xvc2VhYmxlOiB0cnVlLFxuICAgICAgICAgIGRpc21pc3NpYmxlOiB0cnVlLFxuICAgICAgICAgIHNpemU6IHRoaXMucHJldmlld1Byb3BlcnRpZXM/LnNpemUgfHwgXCJhdXRvXCIsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJldmlld0RpYWxvZ1JlZi5jb21wbGV0ZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19ESUFMT0dfRVJST1IsIHt9KTtcblxuICAgICAgICAgICAgcmVzZXRQcmV2aWV3UHJvcGVydGllcygpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19ESUFMT0dfSElERSwge30pO1xuXG4gICAgICAgICAgICByZXNldFByZXZpZXdQcm9wZXJ0aWVzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2hvd1ByZXZpZXcgPSAoKSA9PiB7XG4gICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fUFJFVklFV19TSE9XLCB7fSk7XG5cbiAgICAgIHRoaXMucHJldmlld0RpYWxvZ1JlZiA9IHRoaXMucHJldmlld0RpYWxvZ1NlcnZpY2VcbiAgICAgICAgLm9wZW4odGhpcy5wcmV2aWV3IHx8IFwiXCIpXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fUFJFVklFV19FUlJPUiwge30pO1xuXG4gICAgICAgICAgICByZXNldFByZXZpZXdQcm9wZXJ0aWVzKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX1BSRVZJRVdfSElERSwge30pO1xuXG4gICAgICAgICAgICByZXNldFByZXZpZXdQcm9wZXJ0aWVzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgc3dpdGNoICh0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLnR5cGUpIHtcbiAgICAgIGNhc2UgXCJkaWFsb2dcIjpcbiAgICAgICAgc2hvd0RpYWxvZygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJwb3B1cFwiOlxuICAgICAgICBzaG93UHJldmlldygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHNob3dEaWFsb2coKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBzaG93RXJyb3JQcmV2aWV3KHByZXZpZXdQcm9wZXJ0aWVzOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dQcmV2aWV3KHtcbiAgICAgIGh0bWw6IHtcbiAgICAgICAgYWZ0ZXI6IGA8ZGl2IHN0eWxlPVwicGFkZGluZy1ib3R0b206MC4yNXJlbTtwYWRkaW5nLXRvcDogMC4yNXJlbTtwb3NpdGlvbjogYWJzb2x1dGU7bWFyZ2luLXRvcDogY2FsYyg1MHZoKTtmb250LXNpemU6IDEuNHJlbTtiYWNrZ3JvdW5kOiB3aGl0ZTtwYWRkaW5nOiAycmVtO2JvcmRlci1yYWRpdXM6IDFyZW07Ym94LXNoYWRvdzogMHB4IDBweCAxMHB4IC0zcHggYmxhY2s7b3ZlcmZsb3c6IGF1dG87aGVpZ2h0OiBmaXQtY29udGVudDttYXgtaGVpZ2h0OiA5MHZoOyB3aWR0aDogNzB2dzsgbWFyZ2luLWxlZnQ6IGNhbGMoMTV2dyk7IGxpbmUtaGVpZ2h0OiAycmVtO1wiPkVycm9yOiAke3ByZXZpZXdQcm9wZXJ0aWVzLm1lc3NhZ2UubWVzc2FnZX08L2Rpdj5gXG4gICAgICB9LFxuICAgICAgdHlwZTogXCJwb3B1cFwiXG4gICAgfSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHNob3dQb3B1cEZvcm0oXG4gICAgcG9wdXBGb3JtS2V5OiBzdHJpbmcsXG4gICAgcG9wdXBUeXBlOiBcIkRJQUxPR1wiIHwgXCJQT1BVUFwiID0gXCJESUFMT0dcIlxuICApOiB2b2lkIHtcbiAgICBjb25zdCBwb3B1cEZvcm1Db25maWcgPSB0aGlzLmZvcm1Db25maWcucG9wdXBGb3Jtc1twb3B1cEZvcm1LZXldO1xuXG4gICAgdGhpcy5vbkFjdGlvblNob3dQb3B1cEZvcm0uZW1pdCh7XG4gICAgICBhY3RpdmVGb3JtRGF0YTogbWVyZ2VPYmplY3RzKHRoaXMuZm9ybURhdGEsIHRoaXMudGFza0RhdGEpLFxuICAgICAgcG9wdXBGb3JtQ29uZmlnLFxuICAgICAgcG9wdXBUeXBlXG4gICAgfSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFsZXJ0U2hvdyh0eXBlOiBUdWlOb3RpZmljYXRpb24sIG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BTEVSVF9TSE9XLCB7XG4gICAgICBhbGVydF9tZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgYWxlcnRfdHlwZTogdHlwZVxuICAgIH0pO1xuXG4gICAgdGhpcy5hbGVydFNlcnZpY2VcbiAgICAgIC5vcGVuKGAke21lc3NhZ2V9YCwge1xuICAgICAgICBzdGF0dXM6XG4gICAgICAgICAgdHlwZSA9PT0gXCJlcnJvclwiXG4gICAgICAgICAgICA/IFR1aU5vdGlmaWNhdGlvbi5FcnJvclxuICAgICAgICAgICAgOiB0eXBlID09PSBcIndhcm5pbmdcIlxuICAgICAgICAgICAgICA/IFR1aU5vdGlmaWNhdGlvbi5XYXJuaW5nXG4gICAgICAgICAgICAgIDogdHlwZSA9PT0gXCJzdWNjZXNzXCJcbiAgICAgICAgICAgICAgICA/IFR1aU5vdGlmaWNhdGlvbi5TdWNjZXNzXG4gICAgICAgICAgICAgICAgOiBUdWlOb3RpZmljYXRpb24uSW5mb1xuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BTEVSVF9FUlJPUiwge30pO1xuICAgICAgICB9LFxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BTEVSVF9ISURFLCB7fSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyB0YWtlQWN0aW9uT25GaWVsZEdyb3VwKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIGJlbG93IGNvZGUgaXMgY3VycmVudGx5IGNvbW1lbnRlZCBiZWNhdXNlIG5vdCBhbGwgYWN0aW9ucyBuZWVkIHRvIGJlIGxvZ2dlZCBhdCBiYWNrZW5kLlxuICAgICAqIFdpbGwgbG9vayBsYXRlciBpbnRvIHdoZXJlIG9ubHkgc3BlY2lmaWMgYWN0aW9ucyBuZWVkcyB0byBiZSBsb2dnZWQgb3IgYWxsLlxuICAgICAqIEN1cnJlbnRseSBsb2dzIGFyZSBzZW50IGZyb20gd2l0aGluZyB0aGUgYWN0aW9uJ3Mgc3BlY2lmaWMgbWV0aG9kcy5cbiAgICAgKiBDb2RlIC1cbiAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0FDVElPTl9FWEVDVVRFX0dST1VQLCB7XG4gICAgICAgICAgYWN0aW9uX2tleTogYWN0aW9uLmtleSxcbiAgICAgICAgICAuLi4oYWN0aW9uLmlkICYmIHsgYWN0aW9uX2lkOiBhY3Rpb24uaWQgfSksXG4gICAgICAgICAgLi4uKGFjdGlvbi5wcm9wcy5ncm91cEtleSAmJiB7IGFjdGlvbl9pZDogYWN0aW9uLnByb3BzLmdyb3VwS2V5IH0pXG4gICAgICAgIH0pO1xuICAgICovXG5cbiAgICBzd2l0Y2ggKGFjdGlvbi5rZXkpIHtcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9HUk9VUF9ISURFOlxuICAgICAgICB0aGlzLmZpZWxkR3JvdXBIaWRlKGFjdGlvbi5wcm9wcy5ncm91cEtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0dST1VQX1NIT1c6XG4gICAgICAgIHRoaXMuZmllbGRHcm91cFNob3coYWN0aW9uLnByb3BzLmdyb3VwS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfR1JPVVBfRU5BQkxFOlxuICAgICAgICB0aGlzLmZpZWxkR3JvdXBFbmFibGUoYWN0aW9uLnByb3BzLmdyb3VwS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfR1JPVVBfRElTQUJMRTpcbiAgICAgICAgdGhpcy5maWVsZEdyb3VwRGlzYWJsZShhY3Rpb24ucHJvcHMuZ3JvdXBLZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9HUk9VUF9SRVNFVDpcbiAgICAgICAgdGhpcy5maWVsZEdyb3VwUmVzZXQoYWN0aW9uLnByb3BzLmdyb3VwS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfR1JPVVBfU0hPV19BUElfTE9BREVSOlxuICAgICAgICB0aGlzLmZpZWxkR3JvdXBEaXNhYmxlKGFjdGlvbi5wcm9wcy5ncm91cEtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0dST1VQX0hJREVfQVBJX0xPQURFUjpcbiAgICAgICAgdGhpcy5maWVsZEdyb3VwRGlzYWJsZShhY3Rpb24ucHJvcHMuZ3JvdXBLZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgdGFrZUFjdGlvbihhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KSB7XG4gICAgLyoqXG4gICAgICogVGhpcyBiZWxvdyBjb2RlIGlzIGN1cnJlbnRseSBjb21tZW50ZWQgYmVjYXVzZSBub3QgYWxsIGFjdGlvbnMgbmVlZCB0byBiZSBsb2dnZWQgYXQgYmFja2VuZC5cbiAgICAgKiBXaWxsIGxvb2sgbGF0ZXIgaW50byB3aGVyZSBvbmx5IHNwZWNpZmljIGFjdGlvbnMgbmVlZHMgdG8gYmUgbG9nZ2VkIG9yIGFsbC5cbiAgICAgKiBDdXJyZW50bHkgbG9ncyBhcmUgc2VudCBmcm9tIHdpdGhpbmcgdGhlIGFjdGlvbidzIHNwZWNpZmljIG1ldGhvZHMuXG4gICAgICogQ29kZSAtXG4gICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BQ1RJT05fRVhFQ1VURSwge1xuICAgICAgICAgIGFjdGlvbl9rZXk6IGFjdGlvbi5rZXksXG4gICAgICAgICAgLi4uKGFjdGlvbi5pZCAmJiB7IGFjdGlvbl9pZDogYWN0aW9uLmlkIH0pXG4gICAgICAgIH0pO1xuICAgICovXG5cbiAgICBzd2l0Y2ggKGFjdGlvbi5rZXkpIHtcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9ISURFOlxuICAgICAgICB0aGlzLmZpZWxkSGlkZShhY3Rpb24ucHJvcHMuZmllbGRLZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9TSE9XOlxuICAgICAgICB0aGlzLmZpZWxkU2hvdyhhY3Rpb24ucHJvcHMuZmllbGRLZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9ESVNBQkxFOlxuICAgICAgICB0aGlzLmZpZWxkRGlzYWJsZShhY3Rpb24ucHJvcHMuZmllbGRLZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9FTkFCTEU6XG4gICAgICAgIHRoaXMuZmllbGRFbmFibGUoYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfU0hPV19BUElfTE9BREVSOlxuICAgICAgICB0aGlzLmZpZWxkRW5hYmxlKGFjdGlvbi5wcm9wcy5maWVsZEtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0hJREVfQVBJX0xPQURFUjpcbiAgICAgICAgdGhpcy5maWVsZEVuYWJsZShhY3Rpb24ucHJvcHMuZmllbGRLZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9SRVNFVDpcbiAgICAgICAgdGhpcy5maWVsZFJlc2V0KGFjdGlvbi5wcm9wcy5maWVsZEtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0VSUk9SX1NIT1c6XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3Rpb24ucHJvcHMubWVzc2FnZSwgXCJzb3VyY2VcIikpIHtcbiAgICAgICAgICBjb25zdCBmaWVsZEVycm9yU2hvd1NvdXJjZSA9IG5ldyBTb3VyY2Uob2JqZWN0KTtcblxuICAgICAgICAgIGxldCBmaWVsZEVycm9yU2hvd1NvdXJjZVZhbHVlID1cbiAgICAgICAgICAgIGF3YWl0IGZpZWxkRXJyb3JTaG93U291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShcbiAgICAgICAgICAgICAgYWN0aW9uLnByb3BzLm1lc3NhZ2Uuc291cmNlXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGZpZWxkRXJyb3JTaG93U291cmNlVmFsdWUgPT09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgICAgIHR5cGVvZiBmaWVsZEVycm9yU2hvd1NvdXJjZVZhbHVlID09PSBcIm51bWJlclwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmaWVsZEVycm9yU2hvd1NvdXJjZVZhbHVlID0gU3RyaW5nKGZpZWxkRXJyb3JTaG93U291cmNlVmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWVsZEVycm9yU2hvd1NvdXJjZVZhbHVlID0gXCJcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhY3Rpb24gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIFwicHJvcHMubWVzc2FnZS5tZXNzYWdlXCIsXG4gICAgICAgICAgICBmaWVsZEVycm9yU2hvd1NvdXJjZVZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBhY3Rpb24ucHJvcHMubWVzc2FnZS5tZXNzYWdlID0gdXBkYXRlTGFuZ3VhZ2UoXG4gICAgICAgICAgYWN0aW9uLnByb3BzLm1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgICBnZXRMYW5ndWFnZSgpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZmllbGRFcnJvclNob3coYWN0aW9uLnByb3BzLmZpZWxkS2V5LCBhY3Rpb24ucHJvcHMubWVzc2FnZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0VSUk9SX0hJREU6XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3Rpb24ucHJvcHMubWVzc2FnZSwgXCJzb3VyY2VcIikpIHtcbiAgICAgICAgICBjb25zdCBmaWVsZEVycm9ySGlkZVNvdXJjZSA9IG5ldyBTb3VyY2Uob2JqZWN0KTtcblxuICAgICAgICAgIGxldCBmaWVsZEVycm9ySGlkZVNvdXJjZVZhbHVlID1cbiAgICAgICAgICAgIGF3YWl0IGZpZWxkRXJyb3JIaWRlU291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShcbiAgICAgICAgICAgICAgYWN0aW9uLnByb3BzLm1lc3NhZ2Uuc291cmNlXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGZpZWxkRXJyb3JIaWRlU291cmNlVmFsdWUgPT09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgICAgIHR5cGVvZiBmaWVsZEVycm9ySGlkZVNvdXJjZVZhbHVlID09PSBcIm51bWJlclwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmaWVsZEVycm9ySGlkZVNvdXJjZVZhbHVlID0gU3RyaW5nKGZpZWxkRXJyb3JIaWRlU291cmNlVmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWVsZEVycm9ySGlkZVNvdXJjZVZhbHVlID0gXCJcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhY3Rpb24gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIFwicHJvcHMubWVzc2FnZS5tZXNzYWdlXCIsXG4gICAgICAgICAgICBmaWVsZEVycm9ySGlkZVNvdXJjZVZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpZWxkRXJyb3JIaWRlKGFjdGlvbi5wcm9wcy5maWVsZEtleSwgYWN0aW9uLnByb3BzLm1lc3NhZ2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9NRVNTQUdFX1NIT1c6XG4gICAgICAgIHRoaXMuZmllbGRNZXNzYWdlU2hvdyhhY3Rpb24ucHJvcHMuZmllbGRLZXksIGFjdGlvbi5wcm9wcy5tZXNzYWdlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfTUVTU0FHRVNfSElERTpcbiAgICAgICAgdGhpcy5maWVsZE1lc3NhZ2VIaWRlKGFjdGlvbi5wcm9wcy5maWVsZEtleSwgYWN0aW9uLnByb3BzLm1lc3NhZ2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9BUElfVElNRVJfTUVTU0FHRV9TSE9XOlxuICAgICAgICBhd2FpdCB0aGlzLmZpZWxkQXBpVGltZXJNZXNzYWdlU2hvdyhcbiAgICAgICAgICBhY3Rpb24ucHJvcHMuZmllbGRLZXksXG4gICAgICAgICAgYWN0aW9uLnByb3BzLnRpbWVyXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0FQSV9USU1FUl9NRVNTQUdFX0hJREU6XG4gICAgICAgIGF3YWl0IHRoaXMuZmllbGRBcGlUaW1lck1lc3NhZ2VIaWRlKGFjdGlvbi5wcm9wcy5maWVsZEtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNFVF9WQUxVRTpcbiAgICAgICAgYXdhaXQgdGhpcy5zZXRWYWx1ZShhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNFVF9GSUVMRF9ERUZBVUxUX1ZBTFVFOlxuICAgICAgICBhd2FpdCB0aGlzLnNldEZpZWxkRGVmYXVsdFZhbHVlKGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuU0VUX0FQSV9TVEFUVVM6XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0QXBpU3RhdHVzKGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuU0VUX0FQSV9IRUFERVJfVkFMVUU6XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0QXBpSGVhZGVyVmFsdWUoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5TRVRfQVBJX0hFQURFUl9WQUxJRElUWTpcbiAgICAgICAgYXdhaXQgdGhpcy5zZXRBcGlIZWFkZXJWYWxpZGl0eShhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNFVF9BUElfQk9EWV9WQUxVRTpcbiAgICAgICAgYXdhaXQgdGhpcy5zZXRBcGlCb2R5VmFsdWUoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5TRVRfQVBJX0JPRFlfVkFMSURJVFk6XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0QXBpQm9keVZhbGlkaXR5KGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuU0VUX0RST1BET1dOX09QVElPTlM6XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0RHJvcGRvd25PcHRpb25zKGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuU0VUX0ZJRUxEX1ZBTElESVRZOlxuICAgICAgICBhd2FpdCB0aGlzLnNldEZpZWxkVmFsaWRpdHkoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5IQU5ETEVfQ09OTkVDVEVEX0VMRU1FTlRTOlxuICAgICAgICB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRzKFxuICAgICAgICAgIHsga2V5OiBhY3Rpb24ucHJvcHMuZmllbGRLZXkgfSxcbiAgICAgICAgICBcIk9OX0FDVElPTlwiXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkFQSV9DQUxMOlxuICAgICAgICBhd2FpdCB0aGlzLmZpZWxkQXBpQ2FsbChhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkFQSV9DQUxMX01VTFRJUExFOlxuICAgICAgICBhd2FpdCB0aGlzLmZpZWxkTXVsdGlwbGVBcGlDYWxscyhhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkFQSV9DQUxMX01VTFRJUExFX0VORDpcbiAgICAgICAgYXdhaXQgdGhpcy5maWVsZE11bHRpcGxlQXBpQ2FsbHNFbmQoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5UQVNLX0FQSV9DQUxMOlxuICAgICAgICBhd2FpdCB0aGlzLnRhc2tBcGlDYWxsKGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuVEFTS19BUElfQ0FMTF9NVUxUSVBMRTpcbiAgICAgICAgYXdhaXQgdGhpcy50YXNrTXVsdGlwbGVBcGlDYWxscyhhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlRBU0tfQVBJX0NBTExfTVVMVElQTEVfRU5EOlxuICAgICAgICBhd2FpdCB0aGlzLnRhc2tNdWx0aXBsZUFwaUNhbGxzRW5kKGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuUkVESVJFQ1RfVE9fVVJMOlxuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aW9uLnByb3BzLnVybCwgXCJzb3VyY2VcIikpIHtcbiAgICAgICAgICBjb25zdCByZWRpcmVjdFRvVXJsU291cmNlID0gbmV3IFNvdXJjZShvYmplY3QpO1xuXG4gICAgICAgICAgbGV0IHJlZGlyZWN0VG9VcmxTb3VyY2VWYWx1ZSA9XG4gICAgICAgICAgICBhd2FpdCByZWRpcmVjdFRvVXJsU291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShcbiAgICAgICAgICAgICAgYWN0aW9uLnByb3BzLnVybC5zb3VyY2VcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoaXNFbXB0eVN0cmluZyhyZWRpcmVjdFRvVXJsU291cmNlVmFsdWUpKSB7XG4gICAgICAgICAgICByZWRpcmVjdFRvVXJsU291cmNlVmFsdWUgPSBcIlwiO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFjdGlvbiA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgXCJwcm9wcy51cmwudXJsXCIsXG4gICAgICAgICAgICByZWRpcmVjdFRvVXJsU291cmNlVmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVkaXJlY3RUb1VybChhY3Rpb24pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5QUkVWSUVXX0RJQUxPR19TSE9XOlxuICAgICAgICB0aGlzLnNob3dQcmV2aWV3KGFjdGlvbi5wcm9wcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlBSRVZJRVdfRVJST1JfU0hPVzpcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcy5tZXNzYWdlLCBcInNvdXJjZVwiKSkge1xuICAgICAgICAgIGNvbnN0IHByZXZpZXdFcnJvclNob3dTb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICAgICAgICBsZXQgcHJldmlld0Vycm9yU2hvd1NvdXJjZVZhbHVlID1cbiAgICAgICAgICAgIGF3YWl0IHByZXZpZXdFcnJvclNob3dTb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKFxuICAgICAgICAgICAgICBhY3Rpb24ucHJvcHMubWVzc2FnZS5zb3VyY2VcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgcHJldmlld0Vycm9yU2hvd1NvdXJjZVZhbHVlID09PSBcInN0cmluZ1wiIHx8XG4gICAgICAgICAgICB0eXBlb2YgcHJldmlld0Vycm9yU2hvd1NvdXJjZVZhbHVlID09PSBcIm51bWJlclwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwcmV2aWV3RXJyb3JTaG93U291cmNlVmFsdWUgPSBTdHJpbmcocHJldmlld0Vycm9yU2hvd1NvdXJjZVZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJldmlld0Vycm9yU2hvd1NvdXJjZVZhbHVlID0gXCJcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhY3Rpb24gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIFwicHJvcHMubWVzc2FnZS5tZXNzYWdlXCIsXG4gICAgICAgICAgICBwcmV2aWV3RXJyb3JTaG93U291cmNlVmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2hvd0Vycm9yUHJldmlldyhhY3Rpb24ucHJvcHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5QT1BVUF9GT1JNX1NIT1c6XG4gICAgICAgIHRoaXMuc2hvd1BvcHVwRm9ybShcbiAgICAgICAgICBhY3Rpb24ucHJvcHMucG9wdXBGb3JtS2V5LFxuICAgICAgICAgIGFjdGlvbi5wcm9wcz8ucG9wdXBUeXBlID8/IFwiRElBTE9HXCJcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuU1RPUF9XQUlUSU5HOlxuICAgICAgICB0aGlzLndhaXRpbmdGb3JDaGFuZ2VzID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNDUk9MTF9UT19GSUVMRDpcbiAgICAgICAgdGhpcy5oYW5kbGVPblNjcm9sbFRvRmllbGQoYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuTk9USUZJQ0FUSU9OX0VSUk9SX1NIT1c6XG4gICAgICAgIHRoaXMudG9nZ2xlRXJyb3JOb3RpZmljYXRpb24odHJ1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5Lk5PVElGSUNBVElPTl9FUlJPUl9ISURFOlxuICAgICAgICB0aGlzLnRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKGZhbHNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuUkVTVU1FX1RBU0tfRVhFQ1VUSU9OOlxuICAgICAgICB0aGlzLnN0b3BUYXNrRXhlY3V0aW9uID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNUT1BfVEFTS19FWEVDVVRJT046XG4gICAgICAgIHRoaXMuc3RvcFRhc2tFeGVjdXRpb24gPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5ESUFMT0dfU0hPVzpcbiAgICAgICAgdGhpcy5kaWFsb2dTaG93KHtcbiAgICAgICAgICBodG1sOiBhY3Rpb24ucHJvcHM/Lmh0bWwsXG4gICAgICAgICAgbGFiZWw6IGFjdGlvbi5wcm9wcz8ubGFiZWwsXG4gICAgICAgICAgc2l6ZTogYWN0aW9uLnByb3BzPy5zaXplLFxuICAgICAgICAgIGJ1dHRvbjogYWN0aW9uLnByb3BzPy5idXR0b25cbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkRJQUxPR19ISURFOlxuICAgICAgICB0aGlzLmRpYWxvZ0hpZGUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuU0FWRV9GT1JNOlxuICAgICAgICB0aGlzLmhhbmRsZU9uQ2xpY2tTYXZlRm9ybSh1bmRlZmluZWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5BTEVSVF9TSE9XOlxuICAgICAgICB0aGlzLmFsZXJ0U2hvdyhhY3Rpb24ucHJvcHMudHlwZSwgYWN0aW9uLnByb3BzLm1lc3NhZ2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5TRVRfSFRNTDpcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcy5tZXNzYWdlLCBcInNvdXJjZVwiKSkge1xuICAgICAgICAgIGNvbnN0IGZpZWxkSHRtbE1lc3NhZ2VTb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICAgICAgICBsZXQgZmllbGRIdG1sTWVzc2FnZVNvdXJjZVZhbHVlID1cbiAgICAgICAgICAgIGF3YWl0IGZpZWxkSHRtbE1lc3NhZ2VTb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKFxuICAgICAgICAgICAgICBhY3Rpb24ucHJvcHMubWVzc2FnZS5zb3VyY2VcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgZmllbGRIdG1sTWVzc2FnZVNvdXJjZVZhbHVlID09PSBcInN0cmluZ1wiIHx8XG4gICAgICAgICAgICB0eXBlb2YgZmllbGRIdG1sTWVzc2FnZVNvdXJjZVZhbHVlID09PSBcIm51bWJlclwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmaWVsZEh0bWxNZXNzYWdlU291cmNlVmFsdWUgPSBTdHJpbmcoZmllbGRIdG1sTWVzc2FnZVNvdXJjZVZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmllbGRIdG1sTWVzc2FnZVNvdXJjZVZhbHVlID0gXCJcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhY3Rpb24gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIFwicHJvcHMubWVzc2FnZS5tZXNzYWdlXCIsXG4gICAgICAgICAgICBmaWVsZEh0bWxNZXNzYWdlU291cmNlVmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGFjdGlvbi5wcm9wcy5tZXNzYWdlLm1lc3NhZ2UgPSB1cGRhdGVMYW5ndWFnZShcbiAgICAgICAgICBhY3Rpb24ucHJvcHMubWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICAgIGdldExhbmd1YWdlKClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXRIdG1sKGFjdGlvbi5wcm9wcy5maWVsZEtleSwgYWN0aW9uLnByb3BzLm1lc3NhZ2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImt3aWtpZC1mb3JtLWNvbnRhaW5lclwiXG4gICpuZ0lmPVwiIWxvYWRpbmdcIlxuPlxuICA8ZGl2XG4gICAgaWQ9XCJ1Zi1mb3JtLWZpZWxkcy1oZWFkZXItY29udGFpbmVyXCJcbiAgICAqbmdJZj1cIlxuICAgICAgIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyPy50aXRsZT8uaGlkZGVuIHx8XG4gICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXI/LmxvZ28/LmhpZGRlbiB8fFxuICAgICAgIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyPy5zdGVwcz8uaGlkZGVuIHx8XG4gICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXI/LmJhY2tCdXR0b24/LmhpZGRlblxuICAgIFwiXG4gID5cbiAgICA8aW1nXG4gICAgICBpZD1cInVmLWhlYWRlci1sb2dvXCJcbiAgICAgICpuZ0lmPVwiIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyPy5sb2dvPy5oaWRkZW4gJiYgaXNNb2JpbGVWaWV3XCJcbiAgICAgIFtzcmNdPVwiZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXI/LmxvZ28/LnNyY1wiXG4gICAgICBbYWx0XT1cImZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyPy5sb2dvPy5hbHRcIlxuICAgICAgW3N0eWxlXT1cIlxuICAgICAgICBmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlcj8ubG9nbz8uc3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcbiAgICAgIFwiXG4gICAgLz5cbiAgICA8ZGl2IGlkPVwidWYtZm9ybS1maWVsZHMtaGVhZGVyLW1haW5cIj5cbiAgICAgIDxkaXYgaWQ9XCJ1Zi1mb3JtLWZpZWxkcy1oZWFkZXItbGVmdFwiPlxuICAgICAgICA8a3dpa3VpLWJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXIuYmFja0J1dHRvbi5oaWRkZW4gJiYgaXNNb2JpbGVWaWV3XG4gICAgICAgICAgXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiYmFja0J1dHRvbi5kaXNhYmxlZFwiXG4gICAgICAgICAgW3Nob3dMb2FkZXJdPVwiYmFja0J1dHRvbi5zaG93TG9hZGVyXCJcbiAgICAgICAgICBhcHBlYXJhbmNlPVwibW9ub1wiXG4gICAgICAgICAgaWNvbj1cInR1aUljb25BcnJvd0xlZnRcIlxuICAgICAgICAgIHNoYXBlPVwicm91bmRlZFwiXG4gICAgICAgICAgKG9uQ2xpY2spPVwiXG4gICAgICAgICAgICBoYW5kbGVPbkNsaWNrR29CYWNrKFxuICAgICAgICAgICAgICAkZXZlbnQsXG4gICAgICAgICAgICAgIGZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyLmJhY2tCdXR0b24ubW9kZVxuICAgICAgICAgICAgKVxuICAgICAgICAgIFwiXG4gICAgICAgID48L2t3aWt1aS1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgaWQ9XCJ1Zi1mb3JtLWZpZWxkcy1oZWFkZXItcmlnaHRcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGlkPVwidWYtZm9ybS1maWVsZHMtdGl0bGVcIlxuICAgICAgICAgICpuZ0lmPVwiIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyLnRpdGxlLmhpZGRlblwiXG4gICAgICAgICAgPnt7IGZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyLnRpdGxlLmxhYmVsIH19PC9kaXZcbiAgICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgaWQ9XCJ1Zi1mb3JtLWZpZWxkcy1zdGVwc1wiXG4gICAgICAgICAgKm5nSWY9XCIhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXIuc3RlcHMuaGlkZGVuXCJcbiAgICAgICAgPlxuICAgICAgICAgIFN0ZXAge3sgZm9ybUNvbmZpZy5zZXF1ZW5jZU5vIH19IG9mIHt7IGZvcm1Db25maWcuZm9ybXNMaXN0TGVuZ3RoIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGhyXG4gICAgICAqbmdJZj1cIlxuICAgICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXIudGl0bGUuaGlkZGVuIHx8XG4gICAgICAgICFmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlci5zdGVwcy5oaWRkZW4gfHxcbiAgICAgICAgIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyLmJhY2tCdXR0b24uaGlkZGVuXG4gICAgICBcIlxuICAgIC8+XG4gIDwvZGl2PlxuICA8Zm9ybVxuICAgICNmb3JtRmllbGRDb250YWluZXJSZWZcbiAgICBjbGFzcz1cImt3aWtpZC1mb3JtIHNob3dcIlxuICAgIFtzdHlsZV09XCJmb3JtQ29uZmlnLnByb3BlcnRpZXM/Lm1haW4/LnN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdGb3I9XCJcbiAgICAgICAgbGV0IGZpZWxkIG9mIGZvcm1GaWVsZHM7XG4gICAgICAgIGxldCBpID0gaW5kZXg7XG4gICAgICAgIHRyYWNrQnk6IGdldFVuaXF1ZUlkZW50aWZpZXJcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZmllbGQudHlwZVwiPlxuICAgICAgICA8IS0tIEhUTUwgQ29udGVudCAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2h0bWwnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IFtpbm5lckh0bWxdPVwiZmllbGQuaHRtbCB8IGt3aWt1aVNhZmVIdG1sXCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIEZvcm0gVGl0bGUgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0aXRsZSdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgY2xhc3M9XCJ0aXRsZVwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAge3sgZmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGt3aWt1aS1idXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZD8ucmVzZXRcIlxuICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwid2hpdGVibG9ja1wiXG4gICAgICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5yZXNldEJ1dHRvbkxhYmVsID8/ICdSZXNldCdcIlxuICAgICAgICAgICAgICAob25DbGljayk9XCJoYW5kbGVPbkNsaWNrUmVzZXRGb3JtRmllbGRzKCRldmVudCwgZmllbGQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIEJ1dHRvbiAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2J1dHRvbidcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktYnV0dG9uXG4gICAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5hcHBlYXJhbmNlID8/ICdwcmltYXJ5J1wiXG4gICAgICAgICAgICAgIFtjbGFzc109XCJmaWVsZD8ucHJvcGVydGllcz8uY2xhc3NcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2ljb25dPVwiZmllbGQ/LnByb3BlcnRpZXM/Lmljb25cIlxuICAgICAgICAgICAgICBbaWNvblJpZ2h0XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5pY29uUmlnaHRcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQ/LmtleVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbc2hhcGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNoYXBlXCJcbiAgICAgICAgICAgICAgW3Nob3dMb2FkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmxvYWRpbmcgPz8gZmFsc2VcIlxuICAgICAgICAgICAgICBbc2l6ZV09XCJmaWVsZD8ucHJvcGVydGllcz8uc2l6ZVwiXG4gICAgICAgICAgICAgIFtzdHlsZXNdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnN0eWxlc1wiXG4gICAgICAgICAgICAgIFt0eXBlXT1cIididXR0b24nXCJcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlT25DbGlja0Zvcm1GaWVsZEJ1dHRvbihmaWVsZClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWJ1dHRvbj5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIElucHV0IFRleHQgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0J1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNmb3JtRmllbGRzUmVmXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dFxuICAgICAgICAgICAgICBbY2FzZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY2FzZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwb3N0Zml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wb3N0Zml4XCJcbiAgICAgICAgICAgICAgW3ByZWZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucHJlZml4XCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dD5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIElucHV0IEN1cnJlbmN5IC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY3VycmVuY3knXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LWN1cnJlbmN5XG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2N1cnJlbmN5VHlwZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY3VycmVuY3lUeXBlXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBbcG9zdGZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucG9zdGZpeFwiXG4gICAgICAgICAgICAgIFtwcmVmaXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnByZWZpeFwiXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVcIlxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtY3VycmVuY3k+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBFbWFpbCAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2VtYWlsJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNmb3JtRmllbGRzUmVmXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1lbWFpbFxuICAgICAgICAgICAgICBbY2FzZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY2FzZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZG9tYWluc109XCJmaWVsZD8ucHJvcGVydGllcz8uZG9tYWluc1wiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3Bvc3RmaXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBvc3RmaXhcIlxuICAgICAgICAgICAgICBbcHJlZml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wcmVmaXhcIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LWVtYWlsPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gUGFzc3dvcmQgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidwYXNzd29yZCdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtcGFzc3dvcmRcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtoaW50Q29udGVudF09XCJmaWVsZD8ucHJvcGVydGllcz8uaGludENvbnRlbnRcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwb3N0Zml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wb3N0Zml4XCJcbiAgICAgICAgICAgICAgW3ByZWZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucHJlZml4XCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1wYXNzd29yZD5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIFRleHRhcmVhIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGV4dGFyZWEnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLXRleHRhcmVhXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktdGV4dGFyZWE+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBDaGVja2JveCAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrYm94J1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNmb3JtRmllbGRzUmVmXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1jaGVja2JveFxuICAgICAgICAgICAgICBbY29udGVudEFsaWduXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250ZW50QWxpZ24gPz8gJ2xlZnQnXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbc2l6ZV09XCJmaWVsZD8ucHJvcGVydGllcz8uc2l6ZSA/PyAnbCdcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIFt2YXJpYW50XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy52YXJpYW50ID8/ICdibG9jaydcIlxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktY2hlY2tib3g+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBJbnB1dCBOdW1iZXIgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LW51bWJlclxuICAgICAgICAgICAgICBbZGVjaW1hbF09XCJmaWVsZD8ucHJvcGVydGllcz8uZGVjaW1hbFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW21heF09XCJmaWVsZD8ucHJvcGVydGllcz8ubWF4XCJcbiAgICAgICAgICAgICAgW21pbl09XCJmaWVsZD8ucHJvcGVydGllcz8ubWluXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwb3N0Zml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wb3N0Zml4ID8/ICcnXCJcbiAgICAgICAgICAgICAgW3ByZWNpc2lvbl09XCJmaWVsZD8ucHJvcGVydGllcz8ucHJlY2lzaW9uXCJcbiAgICAgICAgICAgICAgW3ByZWZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucHJlZml4ID8/ICcnXCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1udW1iZXI+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBJbnB1dCBEYXRlIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtZGF0ZVxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgIFttYXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm1heFwiXG4gICAgICAgICAgICAgIFttYXhDYWxjdWxhdGVkRnJvbVRvZGF5XT1cIlxuICAgICAgICAgICAgICAgIGZpZWxkPy5wcm9wZXJ0aWVzPy5tYXhDYWxjdWxhdGVkRnJvbVRvZGF5XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFttaW5dPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm1pblwiXG4gICAgICAgICAgICAgIFttaW5DYWxjdWxhdGVkRnJvbVRvZGF5XT1cIlxuICAgICAgICAgICAgICAgIGZpZWxkPy5wcm9wZXJ0aWVzPy5taW5DYWxjdWxhdGVkRnJvbVRvZGF5XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBbcG9zdGZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucG9zdGZpeFwiXG4gICAgICAgICAgICAgIFtwcmVmaXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnByZWZpeFwiXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtZGF0ZT5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIElucHV0IFRpbWUgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0aW1lJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNmb3JtRmllbGRzUmVmXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC10aW1lXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbaXRlbXNdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lml0ZW1zXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgIFttb2RlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5tb2RlXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwb3N0Zml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wb3N0Zml4XCJcbiAgICAgICAgICAgICAgW3ByZWZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucHJlZml4XCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC10aW1lPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gSW5wdXQgUGhvbmUgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidwaG9uZSdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtcGhvbmVcbiAgICAgICAgICAgICAgW2NvdW50cnlDb2RlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb3VudHJ5Q29kZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW3Bob25lTWFza0FmdGVyQ291bnRyeUNvZGVdPVwiXG4gICAgICAgICAgICAgICAgZmllbGQ/LnByb3BlcnRpZXM/LnBob25lTWFza0FmdGVyQ291bnRyeUNvZGVcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwb3N0Zml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wb3N0Zml4XCJcbiAgICAgICAgICAgICAgW3ByZWZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucHJlZml4XCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbcmVtb3ZlQ291bnRyeUNvZGVGcm9tVmFsdWVdPVwiXG4gICAgICAgICAgICAgICAgZmllbGQ/LnByb3BlcnRpZXM/LnJlbW92ZUNvdW50cnlDb2RlRnJvbVZhbHVlXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LXBob25lPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gSW5wdXQgUmFkaW8gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidyYWRpbydcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBbdHVpTGFiZWxdPVwibGFiZWxUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgIHN0eWxlPVwibWluLWhlaWdodDogYXV0bzsgcGFkZGluZzogMHB4IDAuNXJlbVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtcmFkaW9cbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgICAgW2l0ZW1zXT1cImZpZWxkPy5vcHRpb25zXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgICBbb3JpZW50YXRpb25dPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm9yaWVudGF0aW9uXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgICAgW3NpemVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNpemVcIlxuICAgICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1yYWRpbz5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xhYmVsVGVtcGxhdGU+XG4gICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0dWktc3BhY2VfYm90dG9tLTJcIlxuICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGI+XG4gICAgICAgICAgICAgICAgICB7eyBmaWVsZC5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmaWVsZC52YWxpZGF0b3JzPy5yZXF1aXJlZFwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9iPlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gRHJvcGRvd24gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzZWxlY3QnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LXNlbGVjdFxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgIFtvcHRpb25zXT1cImZpZWxkLm9wdGlvbnNcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbc2VhcmNoYWJsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uc2VhcmNoYWJsZVwiXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LXNlbGVjdD5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIElucHV0IFNsaWRlciAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3NsaWRlcidcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtc2xpZGVyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW21heF09XCJmaWVsZD8ucHJvcGVydGllcz8ubWF4XCJcbiAgICAgICAgICAgICAgW21pbl09XCJmaWVsZD8ucHJvcGVydGllcz8ubWluXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwb3N0Zml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wb3N0Zml4XCJcbiAgICAgICAgICAgICAgW3ByZWZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucHJlZml4XCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbcXVhbnR1bV09XCJmaWVsZD8ucHJvcGVydGllcz8ucXVhbnR1bVwiXG4gICAgICAgICAgICAgIFtzaXplXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zaXplXCJcbiAgICAgICAgICAgICAgW3N0ZXBzXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zdGVwc1wiXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LXNsaWRlcj5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIEFQSSBDYWxsIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYXBpJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNmb3JtRmllbGRzUmVmXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1idXR0b24tYXBpLWNhbGxcbiAgICAgICAgICAgICAgW2FwaVN0YXR1c109XCJmaWVsZD8uYXBpPy5zdGF0dXM/LnZhbHVlXCJcbiAgICAgICAgICAgICAgW2FwaVRpbWVyXT1cImZpZWxkPy5hcGk/LnRpbWVyXCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cImZpZWxkPy5jbGFzc1wiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5hcGk/LnN0YXR1cz8ubGFiZWxzW2ZpZWxkPy5hcGk/LnN0YXR1cz8udmFsdWVdXCJcbiAgICAgICAgICAgICAgW3Nob3dMb2FkZXJdPVwiZmllbGQ/LmRpc2FibGVkID09PSAnbG9hZGluZydcIlxuICAgICAgICAgICAgICBbc2l6ZV09XCJmaWVsZD8ucHJvcGVydGllcz8uc2l6ZVwiXG4gICAgICAgICAgICAgIFtzdHlsZXNdPVwiXG4gICAgICAgICAgICAgICAgZmllbGQ/LnByb3BlcnRpZXM/LnN0eWxlc1xuICAgICAgICAgICAgICAgICAgPyBmaWVsZD8ucHJvcGVydGllcz8uc3R5bGVzXG4gICAgICAgICAgICAgICAgICA6ICd3aWR0aDogZml0LWNvbnRlbnQnXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImhhbmRsZU9uQ2xpY2tBcGlDYWxsKCRldmVudClcIlxuICAgICAgICAgICAgICAob25BcGlUaW1lclN0b3ApPVwiaGFuZGxlT25BcGlUaW1lclN0b3AoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktYnV0dG9uLWFwaS1jYWxsPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gTGl2ZSBMb2NhdGlvbiAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2xpdmUtbG9jYXRpb24nXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWJ1dHRvbi1saXZlLWxvY2F0aW9uXG4gICAgICAgICAgICAgIFtjbGFzc109XCJmaWVsZD8uY2xhc3NcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8uYXBpPy5zdGF0dXM/LmxhYmVsc1tmaWVsZD8uYXBpPy5zdGF0dXM/LnZhbHVlXVwiXG4gICAgICAgICAgICAgIFtsaXZlTG9jYXRpb25TdGF0dXNdPVwiZmllbGQ/LmFwaT8uc3RhdHVzPy52YWx1ZVwiXG4gICAgICAgICAgICAgIFtzaGFwZV09XCJmaWVsZD8ucHJvcGVydGllcz8uc2hhcGVcIlxuICAgICAgICAgICAgICBbaXNTaG93TGF0TG9uZ0NhcHR1cmVUaW1lc3RhbXBdPVwiXG4gICAgICAgICAgICAgICAgZmllbGQ/LnByb3BlcnRpZXM/LmlzU2hvd0xhdExvbmdDYXB0dXJlVGltZXN0YW1wXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtzaG93TG9hZGVyXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtzaXplXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zaXplXCJcbiAgICAgICAgICAgICAgc3R5bGVzPVwid2lkdGg6IGZpdC1jb250ZW50XCJcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlT25DbGlja0xpdmVMb2NhdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKG9uTG9jYXRpb25QZXJtaXNzaW9uKT1cImhhbmRsZU9uTG9jYXRpb25QZXJtaXNzaW9uKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWJ1dHRvbi1saXZlLWxvY2F0aW9uPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gTW9iaWxlIE9UUCAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ290cCdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtb3RwXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW21hc2tdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm1hc2tcIlxuICAgICAgICAgICAgICBbbW9kZV09XCJmaWVsZD8ucHJvcGVydGllcz8ubW9kZVwiXG4gICAgICAgICAgICAgIFtvdHBMZW5ndGhdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm90cExlbmd0aFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFtzaXplXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zaXplXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtb3RwPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gQWFkaGFhciBOdW1iZXIgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidhYWRoYWFyLW51bWJlcidcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtYWFkaGFhclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgIFttYXNrXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5tYXNrXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtYWFkaGFhcj5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIFByZXZpZXcgSW1hZ2UgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidpbWFnZSdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktaW1hZ2VcbiAgICAgICAgICAgICAgW2FsdFRleHRdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmFsdFRleHRcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNsYXNzXCJcbiAgICAgICAgICAgICAgW2h0bWxdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lmh0bWxcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ltYWdlU3JjXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlID8/ICcnXCJcbiAgICAgICAgICAgICAgW2ltYWdlVHlwZV09XCJmaWVsZD8ucHJvcGVydGllcz8uaW1hZ2VUeXBlXCJcbiAgICAgICAgICAgICAgW2xvYWRpbmdUeXBlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5sb2FkaW5nVHlwZVwiXG4gICAgICAgICAgICAgIFtzdHlsZXNdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnN0eWxlc1wiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW1hZ2U+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBGaWxlIFVwbG9hZCAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2ZpbGUnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgW3R1aUxhYmVsXT1cImxhYmVsVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBzdHlsZT1cIm1pbi1oZWlnaHQ6IGF1dG9cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8a3dpa3VpLWlucHV0LWZpbGVzXG4gICAgICAgICAgICAgICAgW2FjY2VwdF09XCJmaWVsZD8ucHJvcGVydGllcz8uYWNjZXB0XCJcbiAgICAgICAgICAgICAgICBbY2xhc3NdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNsYXNzXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbZmlsZXNdPVwiZmlsZXNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgICAgW2lkXT1cImZpZWxkPy5rZXlcIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ucHJvcGVydGllcz8ubGFiZWxcIlxuICAgICAgICAgICAgICAgIFtsaW5rXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5saW5rXCJcbiAgICAgICAgICAgICAgICBbbWF4RmlsZVNpemVdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm1heEZpbGVTaXplXCJcbiAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm11bHRpcGxlXCJcbiAgICAgICAgICAgICAgICBbc2V0RmlsZVR5cGVzVG9Gb3JtXT1cIlsnTk9STUFMJ11cIlxuICAgICAgICAgICAgICAgIFtzdHlsZXNdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnN0eWxlc1wiXG4gICAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAgIFtzaG93Vmlld0J1dHRvbl09XCJmaWVsZD8ucHJvcGVydGllcz8uc2hvd1ZpZXdCdXR0b25cIlxuICAgICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZUZpbGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGdldFJlbW92ZWRGaWxlKT1cImhhbmRsZVJlbW92ZWRGaWxlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChnZXRWaWV3QnV0dG9uQ2xpY2spPVwiaGFuZGxlVmlld0J1dHRvbkNsaWNrKCRldmVudCwgZmllbGQpXCJcbiAgICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LWZpbGVzPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGFiZWxUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDBweCAwLjI1cmVtOyBtYXJnaW4tYm90dG9tOiAwLjI1cmVtXCJcbiAgICAgICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxiPlxuICAgICAgICAgICAgICAgICAge3sgZmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmllbGQudmFsaWRhdG9ycz8ucmVxdWlyZWRcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYj5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIENhbWVyYSBDYXB0dXJlIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2FwdHVyZSdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIGZpZWxkPy5sYWJlbCAhPT0gJycgJiZcbiAgICAgICAgICAgICAgICBmaWVsZD8ubGFiZWwgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIGZpZWxkPy5sYWJlbCAhPT0gbnVsbFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBzdHlsZT1cIm1pbi1oZWlnaHQ6IGF1dG9cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8cFxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZmllbGQ/LmxhYmVsICE9PSAnJ1wiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAwcHggMC4yNXJlbTsgbWFyZ2luLWJvdHRvbTogMC41cmVtXCJcbiAgICAgICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxiPlxuICAgICAgICAgICAgICAgICAge3sgZmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmllbGQudmFsaWRhdG9ycz8ucmVxdWlyZWRcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYj5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtY2FtZXJhXG4gICAgICAgICAgICAgIFtidXR0b25UZXh0XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5idXR0b25UZXh0XCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpY29uXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5pY29uXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgW21lZGlhRmlsZXNdPVwiXG4gICAgICAgICAgICAgICAgbWVkaWFGaWxlc1tmaWVsZC5rZXldIHwgZmlsdGVySW1hZ2VVcmxPckJhc2U2NEZyb21PYmplY3RcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbc2hvd01lZGlhRmlsZXNdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNob3dNZWRpYUZpbGVzXCJcbiAgICAgICAgICAgICAgW3R5cGVdPVwiJ2NhcHR1cmUnXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAob25DbGljayk9XCJoYW5kbGVPbkNsaWNrSW5wdXRDYW1lcmEoJGV2ZW50LCBmaWVsZClcIlxuICAgICAgICAgICAgICAoZ2V0UmVtb3ZlZEZpbGUpPVwiaGFuZGxlT25DbGlja0dldFJlbW92ZWRNZWRpYUZpbGUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtY2FtZXJhPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gQ2FtZXJhIFJlY29yZCAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3JlY29yZCdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIGZpZWxkPy5sYWJlbCAhPT0gJycgJiZcbiAgICAgICAgICAgICAgICBmaWVsZD8ubGFiZWwgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIGZpZWxkPy5sYWJlbCAhPT0gbnVsbFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBzdHlsZT1cIm1pbi1oZWlnaHQ6IGF1dG9cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8cFxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZmllbGQ/LmxhYmVsICE9PSAnJ1wiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAwcHggMC4yNXJlbTsgbWFyZ2luLWJvdHRvbTogMC41cmVtXCJcbiAgICAgICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxiPlxuICAgICAgICAgICAgICAgICAge3sgZmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmllbGQudmFsaWRhdG9ycz8ucmVxdWlyZWRcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYj5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtY2FtZXJhXG4gICAgICAgICAgICAgIFtidXR0b25UZXh0XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5idXR0b25UZXh0XCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpY29uXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5pY29uXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgW21lZGlhRmlsZXNdPVwiXG4gICAgICAgICAgICAgICAgbWVkaWFGaWxlc1tmaWVsZC5rZXldIHwgZmlsdGVyVmlkZW9VcmxPckJhc2U2NEZyb21PYmplY3RcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbc2hvd01lZGlhRmlsZXNdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNob3dNZWRpYUZpbGVzXCJcbiAgICAgICAgICAgICAgW3R5cGVdPVwiJ3JlY29yZCdcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImhhbmRsZU9uQ2xpY2tJbnB1dENhbWVyYSgkZXZlbnQsIGZpZWxkKVwiXG4gICAgICAgICAgICAgIChnZXRSZW1vdmVkRmlsZSk9XCJoYW5kbGVPbkNsaWNrR2V0UmVtb3ZlZE1lZGlhRmlsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1jYW1lcmE+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBTdGFyIFJhdGluZyAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3N0YXItcmF0aW5nJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNmb3JtRmllbGRzUmVmXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIFt0dWlMYWJlbF09XCJsYWJlbFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJtaW4taGVpZ2h0OiBhdXRvOyBwYWRkaW5nOiAwcHggMC41cmVtXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGt3aWt1aS1zdGFyLXJhdGluZ1xuICAgICAgICAgICAgICAgIFtjb2xvcl09XCJmaWVsZD8ucHJvcGVydGllcz8uY29sb3JcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICAgIFtpY29uXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5pY29uXCJcbiAgICAgICAgICAgICAgICBbaWNvbk1hcmtlZF09XCJmaWVsZD8ucHJvcGVydGllcz8uaWNvbk1hcmtlZFwiXG4gICAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICAgIFttYXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm1heFwiXG4gICAgICAgICAgICAgICAgW21pbl09XCJmaWVsZD8ucHJvcGVydGllcz8ubWluXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgICAgW3NpemVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNpemVcIlxuICAgICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgID48L2t3aWt1aS1zdGFyLXJhdGluZz5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xhYmVsVGVtcGxhdGU+XG4gICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgIDxiXG4gICAgICAgICAgICAgICAgICA+e3sgZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyIH19XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpZWxkLnZhbGlkYXRvcnM/LnJlcXVpcmVkXCI+Kjwvc3Bhbj48L2JcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Zvcm0+XG4gIDxkaXZcbiAgICBjbGFzcz1cImt3aWtpZC1mb3JtLWJ1dHRvbnNcIlxuICAgICpuZ0lmPVwiXG4gICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLmZvb3Rlci52aWV3Rm9ybXNCdXR0b24uaGlkZGVuIHx8XG4gICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLmZvb3Rlci5zYXZlQnV0dG9uLmhpZGRlblxuICAgIFwiXG4gID5cbiAgICA8a3dpa3VpLWJ1dHRvblxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgIWZvcm1Db25maWcucHJvcGVydGllcy5mb290ZXIudmlld0Zvcm1zQnV0dG9uLmhpZGRlbiAmJiBpc01vYmlsZVZpZXdcbiAgICAgIFwiXG4gICAgICBbYXBwZWFyYW5jZV09XCInc2Vjb25kYXJ5J1wiXG4gICAgICBbZGlzYWJsZWRdPVwidmlld0Zvcm1zQnV0dG9uLmRpc2FibGVkXCJcbiAgICAgIFtsYWJlbF09XCJmb3JtQ29uZmlnLnByb3BlcnRpZXMuZm9vdGVyLnZpZXdGb3Jtc0J1dHRvbi5sYWJlbFwiXG4gICAgICBbc2hvd0xvYWRlcl09XCJ2aWV3Rm9ybXNCdXR0b24uc2hvd0xvYWRlclwiXG4gICAgICBbc3R5bGVzXT1cIid3aWR0aDogMTAwJSdcIlxuICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlT25DbGlja1ZpZXdGb3JtcygkZXZlbnQpXCJcbiAgICA+PC9rd2lrdWktYnV0dG9uPlxuICAgIDxrd2lrdWktYnV0dG9uXG4gICAgICAqbmdJZj1cIiFmb3JtQ29uZmlnLnByb3BlcnRpZXMuZm9vdGVyLnNhdmVCdXR0b24uaGlkZGVuXCJcbiAgICAgIFtkaXNhYmxlZF09XCJzYXZlRm9ybUJ1dHRvbi5kaXNhYmxlZFwiXG4gICAgICBbbGFiZWxdPVwiZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLmZvb3Rlci5zYXZlQnV0dG9uLmxhYmVsXCJcbiAgICAgIFtzaG93TG9hZGVyXT1cInNhdmVGb3JtQnV0dG9uLnNob3dMb2FkZXJcIlxuICAgICAgW3N0eWxlc109XCInd2lkdGg6IDEwMCUnXCJcbiAgICAgIChvbkNsaWNrKT1cImhhbmRsZU9uQ2xpY2tTYXZlRm9ybSgkZXZlbnQpXCJcbiAgICA+PC9rd2lrdWktYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdlxuICBjbGFzcz1cImt3aWtpZC1mb3JtLWNvbnRhaW5lci1sb2FkaW5nXCJcbiAgKm5nSWY9XCJsb2FkaW5nXCJcbj5cbiAgPGRpdlxuICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIFtdLmNvbnN0cnVjdG9yKDcpOyBsZXQgaSA9IGluZGV4XCJcbiAgICBjbGFzcz1cImxhcmdlLXdyYXBwZXIgdHVpLXNrZWxldG9uIHR1aS1za2VsZXRvbl9yb3VuZGVkXCJcbiAgPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48a3dpa3VpLWxvYWRlcj48L2t3aWt1aS1sb2FkZXI+XG5cbjx0dWktcHVzaFxuICBpZD1cImZpZWxkLWVycm9yLW5vdGlmaWNhdGlvblwiXG4gICp0dWlQdXNoPVwic2hvd0Vycm9yTm90aWZpY2F0aW9uXCJcbiAgaGVhZGluZz1cIk1pc3NpbmcvSW5jb3JyZWN0IEZpZWxkcyFcIlxuICB0eXBlPVwiRXJyb3JcIlxuICAoY2xvc2UpPVwidG9nZ2xlRXJyb3JOb3RpZmljYXRpb24oZmFsc2UpXCJcbj5cbiAgPHR1aS1zdmdcbiAgICBzcmM9XCJ0dWlJY29uWENpcmNsZVwiXG4gICAgc3R5bGU9XCJjb2xvcjogI2ZmZiAhaW1wb3J0YW50XCJcbiAgPlxuICA8L3R1aS1zdmc+XG48L3R1aS1wdXNoPlxuXG48dHVpLXB1c2hcbiAgaWQ9XCJwZXJtaXNzaW9uLWVycm9yLW5vdGlmaWNhdGlvblwiXG4gICp0dWlQdXNoPVwic2hvd1Blcm1pc3Npb25FcnJvck5vdGlmaWNhdGlvblwiXG4gIGhlYWRpbmc9XCJQbGVhc2UgcHJvdmlkZSByZXF1aXJlZCBwZXJtaXNzaW9ucyFcIlxuICB0eXBlPVwiRXJyb3JcIlxuICAoY2xvc2UpPVwidG9nZ2xlUGVybWlzc2lvbkVycm9yTm90aWZpY2F0aW9uKGZhbHNlKVwiXG4+XG4gIDx0dWktc3ZnXG4gICAgc3JjPVwidHVpSWNvblhDaXJjbGVcIlxuICAgIHN0eWxlPVwiY29sb3I6ICNmZmYgIWltcG9ydGFudFwiXG4gID5cbiAgPC90dWktc3ZnPlxuPC90dWktcHVzaD5cblxuPG5nLXRlbXBsYXRlXG4gICNwcmV2aWV3XG4gIGxldC1wcmV2aWV3XG4+XG4gIDx0dWktcHJldmlld1xuICAgIFtyb3RhdGFibGVdPVwiZmFsc2VcIlxuICAgIFt6b29tYWJsZV09XCJmYWxzZVwiXG4gICAgY2xhc3M9XCJwcmV2aWV3LWNvbnRhaW5lclwiXG4gID5cbiAgICA8dHVpLXByZXZpZXctdGl0bGUgKm5nSWY9XCJwcmV2aWV3UHJvcGVydGllcy50aXRsZSAhPT0gJydcIj57e1xuICAgICAgcHJldmlld1Byb3BlcnRpZXMudGl0bGVcbiAgICB9fTwvdHVpLXByZXZpZXctdGl0bGU+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXByZXZpZXdQcm9wZXJ0aWVzLnVuYXZhaWxhYmxlXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwicHJldmlld1Byb3BlcnRpZXM/Lmh0bWw/LmJlZm9yZSAhPT0gJydcIlxuICAgICAgICBjbGFzcz1cInByZXZpZXctaHRtbCBwcmV2aWV3LWh0bWwtYmVmb3JlXCJcbiAgICAgICAgW3N0eWxlXT1cInByZXZpZXdQcm9wZXJ0aWVzPy5odG1sPy5iZWZvcmVTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgIFtpbm5lckh0bWxdPVwicHJldmlld1Byb3BlcnRpZXMuaHRtbC5iZWZvcmUgfCBrd2lrdWlTYWZlSHRtbFwiXG4gICAgICA+PC9kaXY+XG5cbiAgICAgIDwhLS0gQ29udGVudCB3aXRoaW4gdGhlIGlmcmFtZSAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJwcmV2aWV3LWlmcmFtZS1jb250ZW50XCJcbiAgICAgICAgW3N0eWxlXT1cIlxuICAgICAgICAgIHByZXZpZXdQcm9wZXJ0aWVzPy5pZnJhbWU/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXG4gICAgICAgIFwiXG4gICAgICAgICpuZ0lmPVwicHJldmlld1Byb3BlcnRpZXMuaWZyYW1lLnNyYyAhPT0gJydcIlxuICAgICAgPlxuICAgICAgICA8IS0tIFlvdXIgSFRNTCBjb250ZW50IGhlcmUgLS0+XG4gICAgICAgIDxpZnJhbWVcbiAgICAgICAgICBbc3JjXT1cInByZXZpZXdQcm9wZXJ0aWVzLmlmcmFtZS5zcmMgfCBrd2lrdWlTYWZlVXJsXCJcbiAgICAgICAgICBmcmFtZWJvcmRlcj1cIjBcIlxuICAgICAgICAgIGFsbG93PVwiYWNjZWxlcm9tZXRlcjsgYXV0b3BsYXk7IGVuY3J5cHRlZC1tZWRpYTsgZ3lyb3Njb3BlOyBwaWN0dXJlLWluLXBpY3R1cmVcIlxuICAgICAgICAgIGFsbG93ZnVsbHNjcmVlblxuICAgICAgICAgIFt0aXRsZV09XCJwcmV2aWV3UHJvcGVydGllcy5pZnJhbWUudGl0bGVcIlxuICAgICAgICAgIGNsYXNzPVwicHJldmlldy1pZnJhbWVcIlxuICAgICAgICAgIHNjcm9sbGluZz1cImF1dG9cIlxuICAgICAgICA+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cInByZXZpZXdQcm9wZXJ0aWVzPy5odG1sPy5hZnRlciAhPT0gJydcIlxuICAgICAgICBjbGFzcz1cInByZXZpZXctaHRtbCBwcmV2aWV3LWh0bWwtYWZ0ZXJcIlxuICAgICAgICBbc3R5bGVdPVwicHJldmlld1Byb3BlcnRpZXM/Lmh0bWw/LmFmdGVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICBbaW5uZXJIdG1sXT1cInByZXZpZXdQcm9wZXJ0aWVzLmh0bWwuYWZ0ZXIgfCBrd2lrdWlTYWZlSHRtbFwiXG4gICAgICA+PC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJldmlld1Byb3BlcnRpZXMudW5hdmFpbGFibGVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LXVuYXZhaWxhYmxlXCI+XG4gICAgICAgIDx0dWktc3ZnXG4gICAgICAgICAgc3JjPVwidHVpSWNvbkZpbGVMYXJnZVwiXG4gICAgICAgICAgY2xhc3M9XCJ0LWljb25cIlxuICAgICAgICA+PC90dWktc3ZnPlxuICAgICAgICA8ZGl2PlByZXZpZXcgdW5hdmFpbGFibGU8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPGJ1dHRvblxuICAgICAgdHVpSWNvbkJ1dHRvblxuICAgICAgdHVpUHJldmlld0FjdGlvblxuICAgICAgaWNvbj1cInR1aUljb25DbG9zZUxhcmdlXCJcbiAgICAgIHRpdGxlPVwiQ2xvc2VcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwicHJldmlldy5jb21wbGV0ZSgpXCJcbiAgICA+PC9idXR0b24+XG4gIDwvdHVpLXByZXZpZXc+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI2RpYWxvZ1xuICBsZXQtZGlhbG9nXG4+XG4gIDxkaXYgY2xhc3M9XCJwcmV2aWV3LWNvbnRhaW5lclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcHJldmlld1Byb3BlcnRpZXMudW5hdmFpbGFibGVcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJwcmV2aWV3UHJvcGVydGllcz8uaHRtbD8uYmVmb3JlICE9PSAnJ1wiXG4gICAgICAgIGNsYXNzPVwicHJldmlldy1odG1sIHByZXZpZXctaHRtbC1iZWZvcmVcIlxuICAgICAgICBbc3R5bGVdPVwicHJldmlld1Byb3BlcnRpZXM/Lmh0bWw/LmJlZm9yZVN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgW2lubmVySHRtbF09XCJwcmV2aWV3UHJvcGVydGllcy5odG1sLmJlZm9yZSB8IGt3aWt1aVNhZmVIdG1sXCJcbiAgICAgID48L2Rpdj5cblxuICAgICAgPCEtLSBDb250ZW50IHdpdGhpbiB0aGUgaWZyYW1lIC0tPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInByZXZpZXctaWZyYW1lLWNvbnRlbnRcIlxuICAgICAgICBbc3R5bGVdPVwiXG4gICAgICAgICAgcHJldmlld1Byb3BlcnRpZXM/LmlmcmFtZT8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcbiAgICAgICAgXCJcbiAgICAgICAgKm5nSWY9XCJwcmV2aWV3UHJvcGVydGllcy5pZnJhbWUuc3JjICE9PSAnJ1wiXG4gICAgICA+XG4gICAgICAgIDwhLS0gWW91ciBIVE1MIGNvbnRlbnQgaGVyZSAtLT5cbiAgICAgICAgPGlmcmFtZVxuICAgICAgICAgIFtzcmNdPVwicHJldmlld1Byb3BlcnRpZXMuaWZyYW1lLnNyYyB8IGt3aWt1aVNhZmVVcmxcIlxuICAgICAgICAgIGZyYW1lYm9yZGVyPVwiMFwiXG4gICAgICAgICAgYWxsb3c9XCJhY2NlbGVyb21ldGVyOyBhdXRvcGxheTsgZW5jcnlwdGVkLW1lZGlhOyBneXJvc2NvcGU7IHBpY3R1cmUtaW4tcGljdHVyZVwiXG4gICAgICAgICAgYWxsb3dmdWxsc2NyZWVuXG4gICAgICAgICAgW3RpdGxlXT1cInByZXZpZXdQcm9wZXJ0aWVzLmlmcmFtZS50aXRsZVwiXG4gICAgICAgICAgY2xhc3M9XCJwcmV2aWV3LWlmcmFtZVwiXG4gICAgICAgICAgc2Nyb2xsaW5nPVwiYXV0b1wiXG4gICAgICAgID48L2lmcmFtZT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwicHJldmlld1Byb3BlcnRpZXM/Lmh0bWw/LmFmdGVyICE9PSAnJ1wiXG4gICAgICAgIGNsYXNzPVwicHJldmlldy1odG1sIHByZXZpZXctaHRtbC1hZnRlclwiXG4gICAgICAgIFtzdHlsZV09XCJwcmV2aWV3UHJvcGVydGllcz8uaHRtbD8uYWZ0ZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgIFtpbm5lckh0bWxdPVwicHJldmlld1Byb3BlcnRpZXMuaHRtbC5hZnRlciB8IGt3aWt1aVNhZmVIdG1sXCJcbiAgICAgID48L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwcmV2aWV3UHJvcGVydGllcy51bmF2YWlsYWJsZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctdW5hdmFpbGFibGVcIj5cbiAgICAgICAgPHR1aS1zdmdcbiAgICAgICAgICBzcmM9XCJ0dWlJY29uRmlsZUxhcmdlXCJcbiAgICAgICAgICBjbGFzcz1cInQtaWNvblwiXG4gICAgICAgID48L3R1aS1zdmc+XG4gICAgICAgIDxkaXY+UHJldmlldyB1bmF2YWlsYWJsZTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPGRpdlxuICBpZD1cImt3aWtpZC1jYW1lcmEtY29udGFpbmVyXCJcbiAgKm5nSWY9XCJpc1Nob3dDYW1lcmFcIlxuPlxuICA8ZGl2XG4gICAgaWQ9XCJrd2lraWQtY2FtZXJhLXdyYXBwZXJcIlxuICAgIFtjbGFzcy5mdWxsc2NyZWVuXT1cImlzU2hvd0NhbWVyYUZ1bGxzY3JlZW5cIlxuICA+XG4gICAgPGt3aWtpZC1jYW1lcmFcbiAgICAgIFt0eXBlXT1cImFjdGl2ZUNhbWVyYVR5cGVcIlxuICAgICAgW2RhdGFdPVwiYWN0aXZlQ2FtZXJhRGF0YVwiXG4gICAgICBbaW1hZ2VdPVwiYWN0aXZlQ2FtZXJhSW1hZ2VcIlxuICAgICAgW3ZpZGVvXT1cImFjdGl2ZUNhbWVyYVZpZGVvXCJcbiAgICAgIFtjb25maWddPVwiYWN0aXZlQ2FtZXJhQ29uZmlnPy5jYW1lcmFDb25maWdcIlxuICAgICAgKGdldEltYWdlKT1cImhhbmRsZUdldENhbWVyYU1lZGlhKCRldmVudCwgJ0NBUFRVUkUnKVwiXG4gICAgICAoZ2V0VmlkZW8pPVwiaGFuZGxlR2V0Q2FtZXJhTWVkaWEoJGV2ZW50LCAnUkVDT1JEJylcIlxuICAgICAgKG9uQ2xpY2tCYWNrKT1cImhhbmRsZU9uQ2xpY2tDYW1lcmFCYWNrKCRldmVudClcIlxuICAgICAgKG9uQ2xpY2tDbG9zZSk9XCJoYW5kbGVPbkNsaWNrQ2FtZXJhQ2xvc2UoJGV2ZW50KVwiXG4gICAgICAob25DbGlja1NhdmUpPVwiaGFuZGxlT25DbGlja1NhdmVDYW1lcmFNZWRpYSgkZXZlbnQsIGFjdGl2ZUNhbWVyYVR5cGUpXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiYWN0aXZlQ2FtZXJhVHlwZSA9PT0gJ0NBUFRVUkUnXCJcbiAgICAgICAgc2xvdD1cImNhcHR1cmUtaGVhZGVyXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcHR1cmUtaGVhZGVyLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXB0dXJlLWhlYWRlci1sZWZ0XCI+IDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXB0dXJlLWhlYWRlci1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxrd2lrdWktYnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlQ2FtZXJhQ29uZmlnPy5jYW1lcmFDb25maWc/LmhlYWRlcj8udGl0bGUgIT09ICcnXCJcbiAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cIndoaXRlYmxvY2tcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiYWN0aXZlQ2FtZXJhQ29uZmlnPy5jYW1lcmFDb25maWc/LmhlYWRlcj8udGl0bGVcIlxuICAgICAgICAgICAgICBzaGFwZT1cInJvdW5kZWRcIlxuICAgICAgICAgICAgICBzaXplPVwic1wiXG4gICAgICAgICAgICA+PC9rd2lrdWktYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXB0dXJlLWhlYWRlci1yaWdodFwiPlxuICAgICAgICAgICAgPGt3aWt1aS1idXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJhY3RpdmVDYW1lcmFDb25maWc/LmNhbWVyYUNvbmZpZz8uaGVhZGVyPy5pc0V4cGFuZFwiXG4gICAgICAgICAgICAgIGlkPVwia3dpa2lkLWNhbWVyYS1oZWFkZXItZW5sYXJnZS1idXR0b25cIlxuICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwid2hpdGVibG9ja1wiXG4gICAgICAgICAgICAgIFtpY29uXT1cIlxuICAgICAgICAgICAgICAgIGlzU2hvd0NhbWVyYUZ1bGxzY3JlZW4gPyAndHVpSWNvbk1pbmltaXplMicgOiAndHVpSWNvbk1heGltaXplMidcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgc2hhcGU9XCJyb3VuZGVkXCJcbiAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaXNTaG93Q2FtZXJhRnVsbHNjcmVlbiA9ICFpc1Nob3dDYW1lcmFGdWxsc2NyZWVuXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1idXR0b24+XG4gICAgICAgICAgICA8a3dpa3VpLWJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cImFjdGl2ZUNhbWVyYUNvbmZpZz8uY2FtZXJhQ29uZmlnPy5oZWFkZXI/LmlzQ2xvc2VcIlxuICAgICAgICAgICAgICBpZD1cImt3aWtpZC1jYW1lcmEtaGVhZGVyLWNsb3NlLWJ1dHRvblwiXG4gICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJ3aGl0ZWJsb2NrXCJcbiAgICAgICAgICAgICAgaWNvbj1cInR1aUljb25DbG9zZUxhcmdlXCJcbiAgICAgICAgICAgICAgc2hhcGU9XCJyb3VuZGVkXCJcbiAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlT25DbGlja0NhbWVyYUNsb3NlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWJ1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nSWY9XCJhY3RpdmVDYW1lcmFUeXBlID09PSAnUkVDT1JEJ1wiXG4gICAgICAgIHNsb3Q9XCJyZWNvcmQtaGVhZGVyXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC1oZWFkZXItY29udGFpbmVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC1oZWFkZXItcm93IHJvdy0xXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVjb3JkLWhlYWRlci1sZWZ0XCI+XG4gICAgICAgICAgICAgIDxrd2lrdWktYnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgIGFjdGl2ZUNhbWVyYUNvbmZpZz8uY2FtZXJhQ29uZmlnPy5oZWFkZXI/LmlzQmFjayAmJlxuICAgICAgICAgICAgICAgICAgYWN0aXZlQ2FtZXJhUmVjb3JkaW5nU3RhdGUgPT0gJ05PTkUnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwid2hpdGVibG9ja1wiXG4gICAgICAgICAgICAgICAgaWNvbj1cInR1aUljb25BcnJvd0xlZnRcIlxuICAgICAgICAgICAgICAgIHNoYXBlPVwicm91bmRlZFwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVPbkNsaWNrQ2FtZXJhQ2xvc2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgID48L2t3aWt1aS1idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtaGVhZGVyLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8a3dpa3VpLWJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlQ2FtZXJhQ29uZmlnPy5jYW1lcmFDb25maWc/LmhlYWRlcj8udGl0bGUgIT09ICcnXCJcbiAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwid2hpdGVibG9ja1wiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cImFjdGl2ZUNhbWVyYUNvbmZpZz8uY2FtZXJhQ29uZmlnPy5oZWFkZXI/LnRpdGxlXCJcbiAgICAgICAgICAgICAgICBzaGFwZT1cInJvdW5kZWRcIlxuICAgICAgICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICAgICAgPjwva3dpa3VpLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC1oZWFkZXItcmlnaHRcIj5cbiAgICAgICAgICAgICAgPGt3aWt1aS1idXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGl2ZUNhbWVyYUNvbmZpZz8uY2FtZXJhQ29uZmlnPy5oZWFkZXI/LmlzRXhwYW5kXCJcbiAgICAgICAgICAgICAgICBpZD1cImt3aWtpZC1jYW1lcmEtaGVhZGVyLWVubGFyZ2UtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwid2hpdGVibG9ja1wiXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiXG4gICAgICAgICAgICAgICAgICBpc1Nob3dDYW1lcmFGdWxsc2NyZWVuXG4gICAgICAgICAgICAgICAgICAgID8gJ3R1aUljb25NaW5pbWl6ZTInXG4gICAgICAgICAgICAgICAgICAgIDogJ3R1aUljb25NYXhpbWl6ZTInXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBzaGFwZT1cInJvdW5kZWRcIlxuICAgICAgICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaXNTaG93Q2FtZXJhRnVsbHNjcmVlbiA9ICFpc1Nob3dDYW1lcmFGdWxsc2NyZWVuXCJcbiAgICAgICAgICAgICAgPjwva3dpa3VpLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtaGVhZGVyLXJvdyByb3ctMlwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBpZD1cImJsaW5raW5nLWRvdC1jb250YWluZXJcIlxuICAgICAgICAgICAgICBbY2xhc3MucmVjb3JkaW5nXT1cImFjdGl2ZUNhbWVyYVJlY29yZGluZ1N0YXRlID09ICdSRUNPUkRJTkcnXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnBhdXNlZF09XCJhY3RpdmVDYW1lcmFSZWNvcmRpbmdTdGF0ZSA9PSAnUEFVU0VEJ1wiXG4gICAgICAgICAgICAgIFtjbGFzcy5yZWNvcmRlZF09XCJcbiAgICAgICAgICAgICAgICBhY3RpdmVDYW1lcmFSZWNvcmRpbmdTdGF0ZSA9PSAnTk9ORScgfHxcbiAgICAgICAgICAgICAgICBhY3RpdmVDYW1lcmFSZWNvcmRpbmdTdGF0ZSA9PT0gJ1JFQ09SREVEJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJhY3RpdmVDYW1lcmFSZWNvcmRpbmdTdGF0ZSA9PSAnUkVDT1JESU5HJ1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkb3QgcmVjb3JkaW5nIGJsaW5rXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlQ2FtZXJhUmVjb3JkaW5nU3RhdGUgPT09ICdQQVVTRUQnXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRvdCBwYXVzZWRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgIGFjdGl2ZUNhbWVyYVJlY29yZGluZ1N0YXRlID09ICdOT05FJyB8fFxuICAgICAgICAgICAgICAgICAgYWN0aXZlQ2FtZXJhUmVjb3JkaW5nU3RhdGUgPT09ICdSRUNPUkRFRCdcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZG90IHJlY29yZGVkXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAmbmJzcDt7eyBhY3RpdmVDYW1lcmFSZWNvcmRpbmdUaW1lIHwgZm9ybWF0VGltZXIgfX1cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICBhY3RpdmVDYW1lcmFDb25maWc/LmNhbWVyYUNvbmZpZz8ub3RoZXJzXG4gICAgICAgICAgICAgICAgICAgICAgPy5tYXhSZWNvcmRpbmdUaW1lSW5TZWNvbmRzXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIC9cbiAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUNhbWVyYUNvbmZpZz8uY2FtZXJhQ29uZmlnPy5vdGhlcnNcbiAgICAgICAgICAgICAgICAgICAgICA/Lm1heFJlY29yZGluZ1RpbWVJblNlY29uZHMgfCBmb3JtYXRUaW1lclxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2t3aWtpZC1jYW1lcmE+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=