@churchillliving/se-ui-toolkit 6.55.173 → 6.55.174

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.
@@ -3406,6 +3406,7 @@ export class GridComponent {
3406
3406
  this.checklist = [rowInfo];
3407
3407
  }
3408
3408
  this.selectedRows = [...this.checklist];
3409
+ this.cdr.markForCheck();
3409
3410
  this.onMultiSelectionChange.emit((this.selectedRows));
3410
3411
  }
3411
3412
  setRowsData(rowsData) {
@@ -4066,4 +4067,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
4066
4067
  type: HostListener,
4067
4068
  args: ['window:beforeunload', ['$event']]
4068
4069
  }] } });
4069
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2dyaWQvZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2dyaWQvZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUdaLFFBQVEsRUFFUixZQUFZLEVBR1osU0FBUyxFQUNULFlBQVksRUFFWixnQkFBZ0IsR0FJakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBUXJFLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUxQixPQUFPLEVBU0wsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixrQkFBa0IsRUFFbEIsY0FBYyxFQUNkLGVBQWUsRUFFZixjQUFjLEVBQ2QscUJBQXFCLEVBRXJCLFVBQVUsRUFDVixnQkFBZ0IsRUFFaEIsU0FBUyxFQUNULGNBQWMsR0FDZixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQWUsTUFBTSxpQ0FBaUMsQ0FBQztBQUcvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLHdDQUF3QyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFJNU8sT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1B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LEdBQUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtZQUN0TCxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7WUFDbkwsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1lBQ3RMLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtZQUMvTCxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcs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QkFBckIsTUFBTTtnQkFHRyxjQUFjO3NCQUF2QixNQUFNO2dCQUdHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFHRyxhQUFhO3NCQUF0QixNQUFNO2dCQUdHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFJUCx1QkFBdUI7c0JBRHRCLE1BQU07Z0JBTVAsWUFBWTtzQkFEWCxNQUFNO2dCQUlHLFdBQVc7c0JBQXBCLE1BQU07Z0JBRUcsaUJBQWlCO3NCQUExQixNQUFNO2dCQUdHLGVBQWU7c0JBQXhCLE1BQU07Z0JBR0csV0FBVztzQkFBcEIsTUFBTTtnQkFHRyxRQUFRO3NCQUFqQixNQUFNO2dCQUdHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFHRSxZQUFZO3NCQUFwQixLQUFLO2dCQUdHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUksYUFBYTtzQkFBdEIsTUFBTTtnQkFHRyxZQUFZO3NCQUFyQixNQUFNO2dCQUVFLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQXVKTixlQUFlO3NCQUZkLFlBQVk7dUJBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDOztzQkFDL0IsWUFBWTt1QkFBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBV1csT0FBTztzQkFBaEQsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxlQUFlLENBQUM7Z0JBUXhDLG1CQUFtQjtzQkFEbEIsWUFBWTt1QkFBQyxxQkFBcUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBPbkNoYW5nZXMsXG4gIE9wdGlvbmFsLFxuICBFbGVtZW50UmVmLFxuICBWaWV3Q2hpbGRyZW4sXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBIb3N0TGlzdGVuZXIsXG4gIE9uRGVzdHJveSxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgTmdab25lLFxuICBBZnRlclZpZXdJbml0LFxuICBSZW5kZXJlcjIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZ2V0Q2hhbmdlZFJvd3MgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXRpZXMuc2VydmljZSc7XG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtcbiAgRHluYW1pY0RpYWxvZ1JlZixcbiAgRHluYW1pY0RpYWxvZ0NvbmZpZyxcbiAgRGlhbG9nU2VydmljZSxcbiAgRHluYW1pY0RpYWxvZ0NvbXBvbmVudCxcbn0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCBqc1BERiBmcm9tICdqc3BkZic7XG5pbXBvcnQgeyBHcmlkU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2dyaWQuc2VydmljZSc7XG5pbXBvcnQge1xuICBJR3JpZENvbHVtbixcbiAgSUdyaWRTb3J0LFxuICBJR3JpZFNlcnZlclNpZGVFdmVudCxcbiAgSUdyaWRQYWdpbmF0aW9uRXZlbnQsXG4gIElHbG9iYWxGaWx0ZXIsXG4gIElHcmlkRmlsdGVyLFxuICBJR3JpZENvbHVtbkFjdGlvbixcbiAgSUdyaWRSb3dBY3Rpb24sXG4gIEVHcmlkU2VsZWN0aW9uVHlwZSxcbiAgRUdyaWRDb2x1bW5UeXBlLFxuICBFR3JpZFNvcnREaXJlY3Rpb24sXG4gIElHcmlkRGF0YUV4cG9ydCxcbiAgRUdyaWRBZ2dyZWdhdGUsXG4gIEVHcmlkRm9ybWF0VHlwZSxcbiAgSUdyaWRGaWx0ZXJJbmZvLFxuICBFR3JpZFZhbGlkYXRvcixcbiAgR3JpZEZpbHRlckNvbnRyb2xUeXBlLFxuICB1c2VyU2V0dGluZyxcbiAgRUdyaWRFeGNlbCxcbiAgRUdyaWRSb3dQcm9wTmFtZSxcbiAgSUdyaWRSZXBvcnRCdG4sXG4gIEVHcmlkbGluayxcbiAgRUdyaWRGb3JtYXR0ZXIsXG59IGZyb20gJy4uLy4uLy4uL21vZGVscy9ncmlkLm1vZGVsJztcbmltcG9ydCB7IEVQZXJtaXNzaW9uVHlwZSwgSVBlcm1pc3Npb24gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdXNlci1pbmZvLm1vZGVsJztcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBJZnJhbWVDb21wb25lbnQgfSBmcm9tICcuLi9pZnJhbWUvaWZyYW1lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlUGlwZSwgRGVjaW1hbFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgYXV0b1NldExvb2t1cERhdGEsIGNoYW5nZUNvbHVtbnNTdGF0ZSwgY3VycmVudFVybCwgZHJhZ2dhYmxlRGlhbG9nLCBvYmpDb252ZXJ0VG9Mb3dlciwgc2V0RGlhbG9nUmVzcG9uc2UsIHNldE1pbnV0ZXNJbnRlcnZhbCwgc2V0VGltZUluRGF0ZSwgb25HbG9iYWxGaWx0ZXJDb250cm9sUmlnaHRCdG5TdGF0ZUNoYW5nZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdGllcy5zZXJ2aWNlJztcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5pbXBvcnQgeyBNZW51IH0gZnJvbSAncHJpbWVuZy9tZW51JztcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgRUZvcm1hdFR5cGUsIEVNYXRjaE1vZGUsIEVPcGVyYXRvciB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsJztcbmltcG9ydCB7IFBhZ2VMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcGFnZS1sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGludGVydmFsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSHlwZXJsaW5rU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2h5cGVybGluay5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7IGRlbGF5LCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBSZXF1ZXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2xpYi9zZXJ2aWNlcy9yZXF1ZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVxdWVzdER0byB9IGZyb20gJ3Byb2plY3RzL3NlLXVpLXRvb2xraXQvc3JjL2xpYi9tb2RlbHMvcmVxdWVzdC5tb2RlbCc7XG5pbXBvcnQgeyBTeXN0ZW1Db25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc3lzdGVtLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IEVtYWlsRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZW1haWwvZW1haWwtZmlsdGVyL2VtYWlsLWZpbHRlci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZS1ncmlkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dyaWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ncmlkLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEdyaWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZCgndmlld0NvbnRhaW5lclJlZicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiB0cnVlIH0pXG4gIHB1YmxpYyBwYW5lbE92ZXJsYXlWaWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmXG5cbiAgQFZpZXdDaGlsZHJlbignZ3JpZFJvdycpIGdyaWRSb3c6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgQE91dHB1dCgpIGlubGluZVJvd0NhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgZ3JpZFNldHRpbmc6IGFueTtcbiAgc2VhcmNoYnRuSWQgPSAnc2VhcmNoR2xvYmFsRmlsdGVyQnRuJztcbiAgY3VycmVudFBhZ2U6IG51bWJlciA9IDA7XG4gIFBhZ2VDaGFuZ2U6IGJvb2xlYW47XG4gIHRlbXBTYXZlZFJvdzogYW55W10gPSBbXTtcbiAgc29ydERhdGE6IElHcmlkU29ydCA9IHt9O1xuICBASW5wdXQoKSBzZXQgYWN0aXZlVGVzdE1vZGUodmFsOiBhbnkpIHtcbiAgICBpZiAodmFsID09PSB0cnVlKSB7XG4gICAgICBkZWJ1Z2dlcjtcbiAgICB9XG4gIH1cbiAgc2VydmVyRmlsdGVyczogSUdyaWRTZXJ2ZXJTaWRlRXZlbnQgPSB7fTtcbiAgcm93c0RhdGE6IGFueVtdID0gW107XG4gIG9yaWdpbmFsUm93czogYW55W10gPSBbXTtcbiAgZ3JpZElkOiBzdHJpbmcgPSAnJztcbiAgcm93c0RhdGFDb3B5OiBhbnlbXSA9IFtdO1xuICBudW1lcmljVmFsdWU6IGFueSA9IHt9XG4gIHJvbGVzOiBzdHJpbmdbXSA9IFtdO1xuICBpc0NvbHVtbkhpZGRlbjogYm9vbGVhbiA9IGZhbHNlO1xuICByb3dDbGlja0RhdGE6IElHcmlkQ29sdW1uO1xuICBjb21wb25lbnRUYWJsZVJlZjogYW55O1xuICBsb29rdXBGaWx0ZXJPYmo6IGFueTtcbiAgY2hlY2tsaXN0OiBhbnlbXSA9IFtdXG4gIGxvb2t1cEJsdXI6IGJvb2xlYW4gPSB0cnVlO1xuICBnbG9iYWxGaWx0ZXJzQXJyYXk6IGFueVtdID0gW107XG4gIGNoZWNrQWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIGNhbGVuZGFyUHJldmlvdXNWYWx1ZTogc3RyaW5nID0gJyc7XG4gIGdyaWRGaWx0ZXJPYmo6IElHcmlkRmlsdGVySW5mbztcbiAgZGVmYXVsdERhdGU6IGFueTtcbiAgb3ZlcmxheVBhbmVsU3R5bGU6IHt9O1xuICAvLyBIb2xkcyB0aGUgaXRlbXMgdG8gZGlzcGxheSBpbiB0aGUgcGVyLXJvdyBcIk1vcmVcIiBtZW51IChQcmltZU5HIE1lbnUgbW9kZWwpXG4gIGN1cnJlbnRNb3JlTWVudTogTWVudUl0ZW1bXSA9IFtdO1xuICBncmlkZmlsdGVyOiBhbnk7XG4gIGRyb3BEb3duRmlsdGVyOiBhbnkgPSB7fTtcbiAgZHJvcGRvd25JbnB1dDogYm9vbGVhbiA9IGZhbHNlO1xuICBzYXZlQWxsUmVjb3JkOiBib29sZWFuID0gZmFsc2U7XG4gIGdlbmVyYXRlUm93c0RhdGFDb3B5OiBib29sZWFuID0gdHJ1ZTtcbiAgZWRpdEFsbFJlY29yZDogYm9vbGVhbiA9IGZhbHNlO1xuICBjYW5jZWxBbGxSZWNvcmRzOiBib29sZWFuID0gZmFsc2U7XG4gIGFkZE5ld1Jvd0NoZWNrOiBib29sZWFuID0gZmFsc2U7XG4gIGluRWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2F2ZVJlY29yZEFycmF5OiBhbnlbXSA9IFtdO1xuICBkaXNhYmxlZFNhdmVCdG46IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU2VsZWN0ZWRBbGxSb3dzOiBib29sZWFuID0gZmFsc2U7XG4gIENoZWNrZWQ6IGJvb2xlYW4gPSB0cnVlXG4gIHVuQ2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlXG4gIGVkaXRNb2RlQ2hlY2tlZDogYm9vbGVhbiA9IHRydWU7XG4gIGVkaXRNb2RldW5Da2Vja2VkOiBib29sZWFuID0gZmFsc2U7XG4gIGNhbGVuZGFyRm9ybWF0OiBzdHJpbmcgPSBcIm1tL2RkL3l5XCJcbiAgc2V0RHJvcGRvd25GaWx0ZXI6IGJvb2xlYW4gPSB0cnVlO1xuICByZWxvYWRQYWdlOiBTdWJzY3JpcHRpb247XG4gIHNldERyb3Bkb3duZGF0YVZhbHVlOiBib29sZWFuID0gdHJ1ZTtcbiAgc2hvd0ZpbHRlcmJ0bjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHRvb2dsZVNvcnRPcmRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBkaWFsb2dSZWY6IGFueVxuICB1c2VyU2V0dGluZzogdXNlclNldHRpbmcgPSB7fTtcbiAgcm93VXBkYXRlQ2hhbmdlOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU2VydmVyU2lkZUV2ZW50SW5pdGFsVHJpZ2dlcmVkID0gbmV3IFN1YmplY3QoKVxuXG4gIC8vYXBwbHkgQWRkL0RlbGV0ZS9FZGl0IHByb3AgZm9yIHRoZSBncmlkIHBlcm1pc3Npb25cbiAgYWRkUm93UGVybWlzc2lvbjogYm9vbGVhbiA9IHRydWU7XG4gIGRlbGV0ZVJvd1Blcm1pc3Npb246IGJvb2xlYW4gPSB0cnVlO1xuICBlZGl0Um93UGVybWlzc2lvbjogYm9vbGVhbiA9IHRydWU7XG4gIGVkaXRpbmdDZWxsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvLyBBcHBseSBwcm9wIHNldEFnZ3JlZ2F0ZUZvb3RlciBvbiBGb290ZXIgb2YgdGhlIFRhYmxlIGZvciBhZ2dyZWdhdGUuXG4gIHNldEFnZ3JlZ2F0ZUZvb3Rlcjogc3RyaW5nID0gJyc7XG5cbiAgcHJpdmF0ZSBjbGlja1RpbWVvdXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IEhpZGUgQWdncmVnYXRlIEZvb3RlciBXaGVuIEFnZ3JlZ2F0ZSBub3QgQXBwbHkgb24gVGFibGUuXG4gIGFnZ3JlZ2F0ZUZvb3RlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIE1haW50YWlucyBwcmV2aW91cyBzdGF0ZSBvZiByb3dzIGJlaW5nIGVkaXRlZFxuICBlZGl0Um93c1JlY29yZHM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgLy8gTWFpbnRhaW5zIHJlY29yZCBvZiByb3dzIGJlaW5nIGVkaXRlZFxuICBlZGl0aW5nUm93S2V5czogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICBjdXJyZW50VXJsOiBzdHJpbmcgPSBjdXJyZW50VXJsKCk7XG4gIG9uQ2xpY2tFdmVudFRyaWdnZXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHJlbWFpbmluZ1Jvd3NEYXRhOiBhbnlbXSA9IFtdO1xuXG4gIEBWaWV3Q2hpbGQoJ2R0JykgdGFibGU6IFRhYmxlO1xuICBAVmlld0NoaWxkKCdtb3JlTWVudScpIG1vcmVNZW51OiBNZW51O1xuXG4gIC8vIFNlbGVjdHMgaXRlbXMgaW4gdGhlIGdyaWQgYmFzZWQgb24gcGFzc2VkIG9uIGRhdGFcbiAgQElucHV0KCkgc2VsZWN0ZWRSb3dzOiBhbnkgPSBbXTtcblxuICBASW5wdXQoKSBzZXRHcmlkUmVmcmVzaFRpbWU6IG51bWJlciA9IDA7XG5cbiAgQElucHV0KCkgYWRkRGF0YUtleVZhbHVlID0gZmFsc2U7XG5cbiAgQElucHV0KCkgc3RvcERpYWxvZ0Nsb3NlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGF1dG9DaGVja05ld1JvdzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgZ2xvYmFsRGF0YTogSUdyaWRGaWx0ZXJbXSA9IFtdO1xuXG4gIHNvcnREaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHNvcnRJY29uSGlkZGVuOiBib29sZWFuID0gZmFsc2U7XG4gIGVkaXRBbGxyb3dzQXRPbmVUaW1lOiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKSBwdWJsaWMgc2hvd1JlZnJlc2hCdG46IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBwdWJsaWMgaGlkZVJlZnJlc2hCdG46IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8vIFN0b3JlcyBzZWxlY3RlZCBjb2x1bW5zXG4gIHByaXZhdGUgX3NlbGVjdGVkQ29sdW1uczogSUdyaWRDb2x1bW5bXSA9IFtdO1xuICBzZWxlY3RlZFRvZ2dsZUNvbHVtbnM6IElHcmlkQ29sdW1uW10gPSBbXTtcblxuICB2aXNpYmxlQ29sdW1uczogSUdyaWRDb2x1bW5bXSA9IFtdO1xuICAvLyBCb29sZWFuIHByb3AgdG8gYWxsb3cgaG9yaXpvbnRhbCBTY3JvbGwgb24gVGFibGUuXG4gIEBJbnB1dCgpIGhvcml6b250YWxTY3JvbGw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBCb29sZWFuIHByb3AgdG8gaGlkZSB0aGUgZGVsZXRlIHJvdyBidXR0b24uXG4gIEBJbnB1dCgpIGhpZGVEZWxldGVCdG4gPSBmYWxzZTtcblxuICAvLyBCb29sZWFuIHByb3AgdG8gaGlkZSB0aGUgZWRpdCByb3cgYnV0dG9uLlxuICBASW5wdXQoKSBoaWRlRWRpdEJ0biA9IGZhbHNlO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBoaWRlIHRoZSBhZGQgcm93IGJ1dHRvbi5cbiAgQElucHV0KCkgaGlkZUFkZEJ0biA9IGZhbHNlO1xuXG4gIC8vIFByb3AgdG8gaGFuZGxlIGxvYWRlciBvZiBncmlkXG4gIEBJbnB1dCgpIHB1YmxpYyBsb2FkaW5nID0gZmFsc2U7XG5cbiAgLy90aGlzIHByb3BlcnR5IGlzIHVzZWQgdG8gaGFuZGxlIHNlcnZlciBzaWRlIGV2ZW50IGJ5IGRlZmF1bHQgaXQgaXMgdHJ1ZSB3aGVuIGl0IGZhbHNlIHNlcnZlciBzaWRlIGV2ZW50IHdpbGwgbm90IGJlIGNhbGxlZFxuICBASW5wdXQoKSBhdXRvTG9hZERhdGE6IGJvb2xlYW4gPSB0cnVlO1xuXG5cbiAgLy90YWJsZSByb3cgc3R5bGVzXG4gIEBJbnB1dCgpIHJvd1N0eWxlOiBzdHJpbmc7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGNoZWNrIHdoZXJlIHNlbGVjdGVkIGlzIGFsbG93ZWQgb3Igbm90LlxuICBASW5wdXQoKSBhbGxvd1NlbGVjdGlvbiA9IGZhbHNlO1xuXG4gIC8vIFNldCBjb2x1bW4gd2lkdGggb2Ygc2VsZWN0ZWQgcm93LlxuICBASW5wdXQoKSBzZWxlY3Rpb25Db2x1bW5XaWR0aDogc3RyaW5nID0gJzgwcHgnO1xuXG4gIC8vIHNldCBzZWxlY3Rpb24gY2hlY2tCb3ggaGVhZGVyXG4gIEBJbnB1dCgpIGFsbG93U2VsZWN0aW9uSGVhZGVyOiBzdHJpbmcgPSAnJztcblxuICAvLyBCb29sZWFuIHByb3AgdG8gaGlkZSB0aGUgc2F2ZSBidXR0b24gb24gdG9wIG9mIGdyaWQuXG4gIEBJbnB1dCgpIGhpZGVHcmlkU2F2ZUJ1dHRvbiA9IGZhbHNlO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBoaWRlIHRoZSBzYXZlIGJ1dHRvbiBvbiB0b3Agb2YgZ3JpZC5cbiAgQElucHV0KCkgaGlkZUdyaWRDYW5jZWxCdXR0b24gPSBmYWxzZTtcblxuICAvLyBCb29sZWFuIHByb3AgdG8gYWxsb3cgZXhwb3J0IHRvIHBkZi5cbiAgQElucHV0KCkgYWxsb3dFeHBvcnRUb1BkZiA9IGZhbHNlO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBhbGxvdyBleHBvcnQgdG8gZXhjZWwuXG4gIEBJbnB1dCgpIGFsbG93RXhwb3J0VG9FeGNlbCA9IGZhbHNlO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBzZXQgdGhlIGFjdGlvbiBjb2x1bW4gYXMgZmlyc3QgY29sdW1uLlxuICBASW5wdXQoKSBzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ID0gZmFsc2U7XG5cbiAgLy8gSWYgdHJ1ZSwgZW5hYmxlcyBvcHRpb25zIHRvIHBlcmZvcm0gQ1JVRCB1c2luZyBpbmxpbmUgcm93IGZ1bmN0aW9uYWxpdHlcbiAgQElucHV0KCkgdXNlSW5saW5lQ1JVRCA9IGZhbHNlO1xuICAvLyBpZiB0cnVlLCBpdCB3b250IGFkZCBhIG5ldyByb3cgd2hlbiBjbGljayBhZGRcbiAgQElucHV0KCkgcHJldmVudE5ld1JvdyA9IGZhbHNlO1xuXG4gIC8vIEFycmF5IG9mIHJvdyBhY3Rpb25zXG4gIEBJbnB1dCgpIHJvd0FjdGlvbnM6IElHcmlkUm93QWN0aW9uW10gPSBbXTtcblxuICAvLyBTZXRzIHNlbGVjdGlvbiB0eXBlIGkuZTogc2luZ2xlL211bHRpcGxlIHNlbGVjdGlvblxuICBASW5wdXQoKSBzZWxlY3Rpb25UeXBlOiBFR3JpZFNlbGVjdGlvblR5cGUgPSBFR3JpZFNlbGVjdGlvblR5cGUuU0lOR0xFO1xuXG4gIC8vIFVuaXF1ZSBrZXkgcmVxdWlyZXMgZm9yIGJ1aWx0LWluIHJvdyBzZWxlY3Rpb24gb2YgcHJpbWVOZyBncmlkXG4gIEBJbnB1dCgpIGRhdGFLZXk6IHN0cmluZyA9ICd0ZW1wX2lkJztcblxuICAvLyBGbGFnIGZvciBjbGVhciBmaWx0ZXIgdmFsdWVzIGJ1dHRvblxuICBASW5wdXQoKSBjbGVhckdyaWRGaWx0ZXIgPSB0cnVlO1xuXG4gIC8vIEZsYWcgZm9yIHNlYXJjaCBmaWx0ZXIgdmFsdWVzIGJ1dHRvblxuICBASW5wdXQoKSBzZWFyY2hHcmlkRmlsdGVyID0gdHJ1ZTtcblxuICAvLyBGbGFnIGluIGNhc2UgdGFibGUgaXMgc2Nyb2xsYWJsZVxuICBASW5wdXQoKSBzY3JvbGxhYmxlID0gdHJ1ZTtcblxuICAvLyBTZXRzIHNjcm9sbCBoZWlnaHQgZm9yIHRoZSB0YWJsZVxuICBASW5wdXQoKSBzY3JvbGxIZWlnaHQgPSAnODB2aCc7XG5cbiAgLy8gVGFibGUgc3R5bGVcbiAgQElucHV0KCkgdGFibGVTdHlsZSA9ICcnO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBhbGxvdyB0byB3cmFwIG9yIHVuV3JhcCB0aGUgZ3JpZC5cbiAgQElucHV0KCkgd29yZFdyYXA6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBlbGxpcHNpczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIG5ld0dyaWRSb3c6IGFueSA9IHt9O1xuXG4gIEBJbnB1dCgpIGZpbHRlcmluZyA9IHRydWU7XG5cbiAgQElucHV0KCkgcmVwb3J0QnV0dG9uczogYW55W10gPSBbXTtcblxuICBASW5wdXQoKSByb3dIb3ZlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGhpZGVGaWx0ZXJPcHRpb25zOiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKSBhdXRvQ29tcGxldGU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8vIFNldHMgcGFnZW5hdGlvbiBmb3IgdGhlIHRhYmxlIERhdGEuXG4gIEBJbnB1dCgpIHNldFBhZ2luYXRpb25MZW5ndGg6IGFueVtdID0gWzUsIDEwLCAxNSwgeyBzaG93QWxsOiAnQWxsJyB9XTtcblxuICAvLyBzZXQgdGhlIGNoYW5nZSBpbiB0aGUgcm93RGF0YVxuICBAT3V0cHV0KCkgcm93c0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIC8qKlxuICAgKiBTdG9wcyB0aGUgbG9hZGVyIGFuZCBzZXRzIHRoZSBkYXRhIHRvIGdyaWRcbiAgICogQ2xlYXJzIHRoZSBlZGl0aW5nIHN0YWNrXG4gICAqIFNjcm9sbHMgdG8gc2VsZWN0ZWQgZWxlbWVudCBpZiBzZWxlY3Rpb24gZm91bmRcbiAgICovXG4gIEBJbnB1dCgpIHNldCByb3dzKGRhdGE6IGFueVtdKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5yZW1haW5pbmdSb3dzRGF0YSA9IFtdO1xuICAgIGlmICghdGhpcy5yb3dVcGRhdGVDaGFuZ2UpIHtcbiAgICAgIGlmICghdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQpIHtcbiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmRhdGFLZXkpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YUtleSA9ICd0ZW1wX2lkJztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgcm93c0RhdGEgPSB0aGlzLmdyaWRTZXJ2aWNlLnNldERhdGFGaWVsZHMoZGF0YSwgdGhpcy5kYXRhS2V5KTtcbiAgICAgICAgICB0aGlzLm9yaWdpbmFsUm93cyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocm93c0RhdGEpKTtcbiAgICAgICAgICBpZiAoZGF0YT8ubGVuZ3RoID4gNDAgJiYgIXRoaXMuZ3JpZFNlcnZpY2U/LnJvd1VwZGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgaW5pdGlhbGl6ZURhdGEgPSBbLi4ucm93c0RhdGFdO1xuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YSA9IGluaXRpYWxpemVEYXRhLnNwbGljZSgwLCA0MCk7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtYWluaW5nUm93c0RhdGEgPSByb3dzRGF0YS5zcGxpY2UoNDAsIHJvd3NEYXRhLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29sdW1ucyAmJiB0aGlzLmNvbHVtbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1ucz8uZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW4/LmFnZ3JlZ2F0ZT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWdncmVnYXRlVGV4dChjb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucm93c0RhdGEgPSByb3dzRGF0YTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5lZGl0Um93c1JlY29yZHMgPSB7fTtcblxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUm93cyAmJiB0aGlzLmdyaWRSb3c/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudFJlZiA9IHRoaXMuZ3JpZFJvdy5maW5kKFxuICAgICAgICAgICAgICAoeCkgPT4geC5uYXRpdmVFbGVtZW50LmlkID09PSB0aGlzLnNlbGVjdGVkUm93c1t0aGlzLmRhdGFLZXldXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50UmVmICYmXG4gICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MVGFibGVSb3dFbGVtZW50XG4gICAgICAgICAgICAgICkuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy9tYW5pcHVsYXRlIGNoZWNrYm94IHN0cmluZyB2YWx1ZSB0byB0cnVlIGFuZCBmYWxzZS5cbiAgICAgICAgICB0aGlzLmNoYW5nZUNoZWNrYm94U3RyaW5nVmFsdWUoKTtcbiAgICAgICAgICB0aGlzLnNldE51bWVyaWNWYWx1ZXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJvd3NEYXRhID0gW107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBHbG9iYWwgZmlsdGVyIHNlcnZlciByZXF1ZXN0XG4gIEBJbnB1dCgpIHNldCBnbG9iYWxGaWx0ZXJEYXRhKGdsb2JhbEZpbHRlcnM6IElHbG9iYWxGaWx0ZXJbXSkge1xuICAgIHRoaXMuZ2xvYmFsRGF0YSA9IHRoaXMuZ3JpZFNlcnZpY2VcbiAgICAgIC5wcmVwYXJlR2xvYmFsRmlsdGVycyhnbG9iYWxGaWx0ZXJzKVxuICAgICAgPy5maWx0ZXIoKHgpID0+IHg/LnZhbHVlICE9PSBmYWxzZSk7XG5cbiAgICBpZiAodGhpcy5lbmFibGVDbGllbnRTaWRlRmlsdGVyaW5nKSB7XG4gICAgICBjb25zdCBnbG9iYWxTZWFyY2hWYWx1ZSA9IGdsb2JhbEZpbHRlcnM/LmZpbmQoeCA9PiB4LmZpZWxkID09PSAnZ2xvYmFsU2VhcmNoJyk/LnZhbHVlO1xuICAgICAgaWYgKGdsb2JhbFNlYXJjaFZhbHVlICE9PSB1bmRlZmluZWQgJiYgdGhpcy50YWJsZSkge1xuICAgICAgICB0aGlzLnRhYmxlLmZpbHRlckdsb2JhbChnbG9iYWxTZWFyY2hWYWx1ZSwgJ2NvbnRhaW5zJyk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2VydmVyRmlsdGVyVmFsdWVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNlcnZlckZpbHRlcnMpKTtcbiAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycyA9IHRoaXMuc2VydmVyRmlsdGVycy5maWx0ZXJzXG4gICAgICA/IHRoaXMuc2VydmVyRmlsdGVycy5maWx0ZXJzLmNvbmNhdCh0aGlzLmdsb2JhbERhdGEpXG4gICAgICA6IHRoaXMuZ2xvYmFsRGF0YTtcblxuICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXBwbHlGaWx0ZXInKSA9PT0gJ2ZhbHNlJykge1xuICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkgPSB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheT8ubGVuZ3RoID4gMFxuICAgICAgICA/IHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5LmNvbmNhdChbLi4uc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnNdKVxuICAgICAgICA6IHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5O1xuICAgIH1cbiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FwcGx5RmlsdGVyJykgPT09ICd0cnVlJykge1xuICAgICAgZ2xvYmFsRmlsdGVycy5mb3JFYWNoKChnbG9iYWxGaWx0ZXIpID0+IHtcbiAgICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkuZm9yRWFjaCgoZmlsdGVyQXJyYXkpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmaWx0ZXJBcnJheS5maWVsZCA9PT0gZ2xvYmFsRmlsdGVyLmZpZWxkICYmXG4gICAgICAgICAgICBnbG9iYWxGaWx0ZXIudmFsdWUgJiZcbiAgICAgICAgICAgIGZpbHRlckFycmF5LnZhbHVlICE9PSBnbG9iYWxGaWx0ZXIudmFsdWVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGZpbHRlckFycmF5LnZhbHVlID0gZ2xvYmFsRmlsdGVyLnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBmaW5kSW5kZXggPSB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5maW5kSW5kZXgoXG4gICAgICAgICAgICAoaW5kZXgpID0+IGluZGV4LmZpZWxkID09PSBnbG9iYWxGaWx0ZXIuZmllbGQgJiYgIWdsb2JhbEZpbHRlci52YWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGZpbmRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5LnNwbGljZShmaW5kSW5kZXgsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZS8vdGhpcy5hdXRvTG9hZERhdGE7XG4gICAgICBpZiAodGhpcy5ncmlkU2VydmljZS5hcHBseUZpbHRlckV2ZW50IHx8IHRoaXMuYXV0b0xvYWREYXRhKSB7XG4gICAgICAgIHRoaXMub25BcHBseUZpbHRlci5lbWl0KCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkgJiYgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycyA9IHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzLmNvbmNhdChcbiAgICAgICAgICB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMgPSBBcnJheS5mcm9tKFxuICAgICAgICBuZXcgU2V0KFxuICAgICAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzXG4gICAgICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgICAgICAubWFwKChmaWx0ZXI6IGFueSkgPT4gZmlsdGVyLmZpZWxkKVxuICAgICAgICApXG4gICAgICApLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgcmV0dXJuIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzLmZpbmQoKHg6IGFueSkgPT4geC5maWVsZCA9PT0gZmllbGQpO1xuICAgICAgfSk7XG4gICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycyA9IHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzLmZpbHRlcihcbiAgICAgICAgKG9iajogYW55KSA9PlxuICAgICAgICAgIG9iaj8udmFsdWUgJiYgb2JqLnZhbHVlPy50b1N0cmluZygpPy5sZW5ndGggPiAwICYmIG9iai5maWVsZFxuICAgICAgKTtcbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3RoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsXSA9IHNlcnZlckZpbHRlclZhbHVlcztcbiAgICAgIGlmICh0aGlzLmdyaWRTZXJ2aWNlLmFwcGx5RmlsdGVyRXZlbnQgfHwgdGhpcy5hdXRvTG9hZERhdGEgPT09IHRydWUpIHtcbiAgICAgICAgLy8gc2V0dGluZyBwYWdpbmF0aW9uIHBhZ2UgYXMgZmlyc3RcbiAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLnBhZ2UgPSAxO1xuICAgICAgICB0aGlzLmF1dG9Mb2FkRGF0YSA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRSb3dzICYmIHRoaXMucGFnaW5hdGlvbikge1xuICAgICAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5wYWdlU2l6ZSA9IHRoaXMuZGVmYXVsdFJvd3M7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JpZFNlcnZpY2UuYXBwbHlGaWx0ZXJFdmVudCkge1xuICAgICAgICAgIHRoaXMuc2V0dXBFbnRlckxpc3RlbmVyKClcbiAgICAgICAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMub25TZXJ2ZXJTaWRlRXZlbnRDaGFuZ2UuZW1pdChzZXJ2ZXJGaWx0ZXJWYWx1ZXMpO1xuICAgICAgICAgIHRoaXMuZWRpdGluZ1Jvd0tleXMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnYXBwbHlGaWx0ZXInKTtcbiAgICAgICAgLy8gc2V0dGluZyBwYWdpbmF0aW9uIHBhZ2UgbnVtYmVyIFVJXG4gICAgICAgIHRoaXMudGFibGUuX2ZpcnN0ID0gMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgc2V0dXBFbnRlckxpc3RlbmVyKCkge1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5oYW5kbGVLZXlVcCk7XG4gIH1cbiAgaGFuZGxlS2V5VXAgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICBjb25zdCBmb2N1c2VkRWxlbWVudCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5vd25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICBpZiAoZm9jdXNlZEVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmIGZvY3VzZWRFbGVtZW50LnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNlbGVjdFJvb3RFbGVtZW50KGZvY3VzZWRFbGVtZW50KS5ibHVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8vIElucHV0IGRlY29yYXRvciB0byByZWNlaXZlIGNvbHVtbnMgdG8gYmUgZGlzcGxheWVkIGluIGhlYWRlclxuICBASW5wdXQoKSBjb2x1bW5zOiBJR3JpZENvbHVtbltdID0gW107XG5cbiAgQElucHV0KCkgcGVybWlzc2lvbnM6IElQZXJtaXNzaW9uW10gPSBbXTtcblxuICAvLyBPcHRpb25hbCBwcm9wIHRvIGhhbmRsZSB0b2dnbGluZyBvZiBjb2x1bW5zXG4gIEBJbnB1dCgpIGFsbG93Q29sdW1uVG9nZ2xlID0gZmFsc2U7XG5cbiAgLy8gT3B0aW9uYWwgcHJvcCB0byBoaWRlIGZpbHRlcmluZyBvZiBjb2x1bW5zXG4gIEBJbnB1dCgpIGhpZGVGaWx0ZXIgPSBmYWxzZTtcblxuICAvLyBPcHRpb25hbCBwcm9wIHRvIGhhbmRsZSBsb29rdXAgZmlsdGVyc1xuICBASW5wdXQoKSBsb29rdXBGaWx0ZXJzID0gZmFsc2U7XG5cbiAgLy8gT3B0aW9uYWwgcHJvcCB0byBoYW5kbGUgcGFnaW5hdGlvblxuICBASW5wdXQoKSBwYWdpbmF0aW9uID0gZmFsc2U7XG5cbiAgLy8gT3B0aW9uYWwgcHJvcCB0byBoYW5kbGUgc2hvdyBDdXJyZW50UGFnZSBSZXBvcnRcbiAgQElucHV0KCkgc2hvd0N1cnJlbnRQYWdlUmVwb3J0ID0gZmFsc2U7XG5cbiAgLy8gRGlzcGxheXMgdG90YWwgbnVtYmVyIG9mIHJlY29yZHNcbiAgQElucHV0KCkgdG90YWxSZWNvcmRzID0gMDtcblxuICAvLyBEaXNwbGF5cyBhZ2dyZWdhdGUgdGhhdCBmZXRjaCBmcm9tIHJlY29yZHNcbiAgQElucHV0KCkgYWdncmVnYXRlZFJlc3VsdDogYW55W10gPSBbXTtcblxuICBASW5wdXQoKSBzaG93Y29uZmlybURpYWxvZzogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KCkgc2F2ZUFsbERhdGE6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBTZXRzIG51bWJlciBvZiByb3dzIHRvIGJlIHNob3duIHRoZSBncmlkXG4gIEBJbnB1dCgpIGRlZmF1bHRSb3dzOiBudW1iZXIgPSAwO1xuXG4gIEBJbnB1dCgpIGNvbHVtbkFjdGlvbnM6IElHcmlkQ29sdW1uQWN0aW9uW10gPSBbXTtcblxuICAvLyBEZWNpZGVzIHRoZSBncmlkJ3MgYmVoYXZpb3IgZWl0aGVyIGZvciBjbGllbnQgc2lkZSBvciBzZXJ2ZXIgc2lkZSBldmVudHNcbiAgQElucHV0KCkgdXNlU2VydmVyU2lkZUV2ZW50cyA9IGZhbHNlO1xuICBASW5wdXQoKSBlbmFibGVDbGllbnRTaWRlRmlsdGVyaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2dsb2JhbEZpbHRlckZpZWxkczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIHNldCBnbG9iYWxGaWx0ZXJGaWVsZHMoZmllbGRzOiBzdHJpbmdbXSkge1xuICAgIGlmIChmaWVsZHMgJiYgZmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX2dsb2JhbEZpbHRlckZpZWxkcyA9IGZpZWxkcy5tYXAoZiA9PiBmLnRvTG93ZXJDYXNlKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9nbG9iYWxGaWx0ZXJGaWVsZHMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIGdldCBnbG9iYWxGaWx0ZXJGaWVsZHMoKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9nbG9iYWxGaWx0ZXJGaWVsZHM7XG4gIH1cblxuICAvLyBPdXRwdXQgZXZlbnQgdG8gaGFuZGxlIHJvdyBjbGlja1xuICBAT3V0cHV0KCkgb25Sb3dDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IGVtaXQgd2hlbiBjbGljayBvbiBncmlkIGNoZWNrYm94IGZpbHRlclxuICBAT3V0cHV0KCkgb25DaGVja0JveEZpbHRlckNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBPdXRwdXQgZXZlbnQgdG8gaGFuZGxlIHJvdyBDaGVja0JveFxuICBAT3V0cHV0KCkgb25Sb3dDaGVja0JveDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IHRvIHRyaWdnZXIgb24gc29ydCBjaGFuZ2VcbiAgQE91dHB1dCgpIG9uU29ydENoYW5nZTogRXZlbnRFbWl0dGVyPElHcmlkU29ydD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IHRvIHRyaWdnZXIgb24gZmlsdGVyIGNoYW5nZVxuICBAT3V0cHV0KCkgb25GaWx0ZXJDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIE91dHB1dCBldmVudCB0byBpbnZva2UgdGhlIG11bHRpU2VsZWN0aW9uIGNsaWNrIGV2ZW50XG4gIEBPdXRwdXQoKSBvbk11bHRpU2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBDYWxscyB3aGVuZXZlciBhIGdyaWQgYW5kIGdsb2JhbEZpbHRlcnMgY2FsbGVkXG4gIEBPdXRwdXQoKSBvbkFwcGx5RmlsdGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvL3NldCBoZWFkZXIgY2hlY2tib3ggdmFsdWUgZm9yIGdldHRpbmcgYWxsIGNvbHVtbnMgb24gc3RheSBhZG1pblxuICBAT3V0cHV0KCkgaXNJbmNsdWRlZEFsbENvbHVtbnM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIENhbGxzIHdoZW5ldmVyIGEgbGF6eSBldmVudCBpcyBkaXNwYXRjaGVkXG4gIEBPdXRwdXQoKVxuICBvblNlcnZlclNpZGVFdmVudENoYW5nZTogRXZlbnRFbWl0dGVyPElHcmlkU2VydmVyU2lkZUV2ZW50PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIE91dHB1dCBldmVudCB0byB0cmlnZ2VyIG9uIHBhZ2luYXRpb25cbiAgQE91dHB1dCgpXG4gIG9uUGFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPElHcmlkUGFnaW5hdGlvbkV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBEaXNwYXRjaCBvdXRwdXQgZXZlbnQgdHJpZ2dlciBvbiBlZGl0IHJvd1xuICBAT3V0cHV0KCkgb25Sb3dVcGRhdGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpIG9uUm93T3JkZXJDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIERpc3BhdGNoIG91dHB1dCBldmVudCB0cmlnZ2VyIGNhbmNlbCBhbGwgcm93c1xuICBAT3V0cHV0KCkgb25DYW5jZWxBbGxSb3dzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIERpc3BhdGNoIG91dHB1dCBldmVudCB0cmlnZ2VyIG9uIGRlbGV0ZSByb3dcbiAgQE91dHB1dCgpIG9uUm93RGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vRGlzcGF0Y2ggb3V0cHV0IGV2ZW50IHRyaWdnZXIgb24gYWRkIHJvd1xuICBAT3V0cHV0KCkgb25Sb3dBZGQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy9EaXNwYXRjaCBvdXRwdXQgZXZlbnQgdHJpZ2dlciBvbiBhZGQsIHVwZGF0ZSBhbmQgZGVsZXRlIHJvd1xuICBAT3V0cHV0KCkgb25HcmlkUm93QWN0aW9ucyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBzZXQgcHJvcGVydHkgYWxsb3dDYWNoaW5nIGZvciBMb2NhbFN0b3JhZ2VcbiAgQElucHV0KCkgYWxsb3dDYWNoaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy9zZXQgTXVsdGlzZWxlY3QgVG9nZ2xlIENvbHVtbnNcbiAgQElucHV0KCkgYWxsb3dQZXJzaXN0ZW5jZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgLy8gc2V0IHByb3BlcnR5IHNvZnRDYWNoaW5nIGZvciBzZXR0aW5nIHRoZSB2YWx1ZXMgb2YgZ3JpZEZpbHRlclxuICBASW5wdXQoKSBzb2Z0Q2FjaGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGVkaXRBbGxSb3dzOiBib29sZWFuID0gZmFsc2U7XG4gIC8vIHNldCB0aGUgcm93IFdoZW4gRWRpdCB0aGUgcm93IG9uIEdyaWRcbiAgQE91dHB1dCgpIG9uR3JpZFJvd0VkaXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gc2V0IHRoZSByb3cgV2hlbiBhZGRpbmcgdGhlIG5ldyBSb3cgb24gR3JpZFxuICBAT3V0cHV0KCkgb25HcmlkUm93QWRkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBJbnB1dCgpIGdyaWROYW1lOiBzdHJpbmcgPSAnJztcbiAgaXNHcmlkSGlkZGVuOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGF1dG9SZXNpemU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgYWxsb3dUZXh0Q29weTogYm9vbGVhbiA9IGZhbHNlO1xuXG5cbiAgcm93c1BlclBhZ2VPcHRpb25zOiBhbnlbXSA9IFs1LCAxMCwgMTUsIHsgc2hvd0FsbDogJ0FsbCcgfV07XG4gIGN1c3RvbVdpZHRoQ29sdW1uczogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuICBzZWxlY3RlZFJvd1JlY29yZDogYW55O1xuICBzY3JvbGxQb3NpdGlvblk6IG51bWJlciA9IDA7XG4gIHNjcm9sbFBvc2l0aW9uWDogbnVtYmVyID0gMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBTeXN0ZW1Db25maWdTZXJ2aWNlLFxuICAgIHB1YmxpYyBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybVNlcnZpY2U6IEZvcm1TZXJ2aWNlLFxuICAgIHB1YmxpYyBncmlkU2VydmljZTogR3JpZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoZW50aWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHB1YmxpYyBkZWNpbWFsUGlwZTogRGVjaW1hbFBpcGUsXG4gICAgcHJpdmF0ZSBwYWdlTG9nZ2VyU2VydmljZTogUGFnZUxvZ2dlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBoeXBlcmxpbmtTZXJ2aWNlOiBIeXBlcmxpbmtTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwdWJsaWMgY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHJlcXVlc3RTZXJ2aWNlOiBSZXF1ZXN0U2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwdWJsaWMgY29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnLFxuICAgIEBPcHRpb25hbCgpIHB1YmxpYyByZWY6IER5bmFtaWNEaWFsb2dSZWZcbiAgKSB7IH1cblxuICBjb25zb2xlTG9nKG1lc3NhZ2U6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UpO1xuICB9XG5cbiAgbW91c2VMZWF2ZUV2ZW50KG92ZXJsYXlQYW5lbCkge1xuICAgIG92ZXJsYXlQYW5lbC5oaWRlKCk7XG4gIH1cbiAgb25Db2x1bW5SZXNpemUoZXZlbnQ6IGFueSwgZHQpIHtcbiAgICBpZiAoZHQ/LmVsPy5uYXRpdmVFbGVtZW50Py5pZCkge1xuICAgICAgdGhpcy5ncmlkSWQgPSBkdC5lbC5uYXRpdmVFbGVtZW50LmlkO1xuICAgIH1cbiAgICBjb25zdCBuZXdXaWR0aCA9IGV2ZW50LmVsZW1lbnQuY2xpZW50V2lkdGggKyAyO1xuICAgIGxldCBjb2x1bW5IZWFkZXIgPSBldmVudD8uZWxlbWVudD8uaWQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGNvbHVtbkhlYWRlcikge1xuICAgICAgbGV0IGluZGV4OiBhbnkgPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5maW5kSW5kZXgoKGNvbHVtbikgPT4gY29sdW1uLmhlYWRlcj8udG9Mb3dlckNhc2UoKSA9PSBjb2x1bW5IZWFkZXIpO1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgaWYgKG5ld1dpZHRoKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnNbaW5kZXhdWydjdXN0b21XaWR0aCddID0gcGFyc2VJbnQobmV3V2lkdGgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2F2ZUNvbHVtbldpZHRocygpO1xuICB9XG4gIHNhdmVDb2x1bW5XaWR0aHModG9nZ2xlQ29sdW1uczogYW55W10gPSBbXSkge1xuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgaWYgKGNvbHVtbi5maWVsZCAmJiBjb2x1bW4uY3VzdG9tV2lkdGgpIHtcbiAgICAgICAgdGhpcy5jdXN0b21XaWR0aENvbHVtbnNbY29sdW1uLmZpZWxkXSA9IGNvbHVtbi5jdXN0b21XaWR0aDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBzZWxlY3RlZEZpZWxkcyA9IHRvZ2dsZUNvbHVtbnM/Lmxlbmd0aCA+IDAgPyB0b2dnbGVDb2x1bW5zIDogdGhpcy5fc2VsZWN0ZWRDb2x1bW5zLm1hcCgoeCkgPT4geC5maWVsZCk7XG4gICAgdGhpcy5zZXRNdWx0aVNlbGVjdFRvZ2dsZUNvbHVtbihzZWxlY3RlZEZpZWxkcyk7XG4gIH1cbiAgbG9hZENvbHVtbldpZHRocygpIHtcbiAgICBsZXQgY3VycmVudFVzZXJJbmZvID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnQ3VycmVudFVzZXJJbmZvJykpO1xuICAgIGlmIChjdXJyZW50VXNlckluZm8gJiYgY3VycmVudFVzZXJJbmZvLnBhZ2VTZXR0aW5nKSB7XG4gICAgICBsZXQgcGFnZVNldHRpbmdzID0gSlNPTi5wYXJzZShjdXJyZW50VXNlckluZm8ucGFnZVNldHRpbmcpXG4gICAgICBwYWdlU2V0dGluZ3MucGFnZVNldHRpbmdzLm1hcChwYWdlID0+IHtcbiAgICAgICAgaWYgKHBhZ2UudXJsID09PSB0aGlzLnJvdXRlci51cmwpIHtcbiAgICAgICAgICBwYWdlLmdyaWRTZXR0aW5ncy5tYXAoZ3JpZFNldHRpbmcgPT4ge1xuICAgICAgICAgICAgaWYgKGdyaWRTZXR0aW5nLmdyaWRJZCA9PT0gdGhpcy5ncmlkSWQgJiYgZ3JpZFNldHRpbmc/LmN1c3RvbUNvbHVtbnNXaWR0aCkge1xuICAgICAgICAgICAgICBjb25zdCBjb2x1bW5zV2lkdGhLZXlzID0gT2JqZWN0LmtleXMoZ3JpZFNldHRpbmc/LmN1c3RvbUNvbHVtbnNXaWR0aCk7XG4gICAgICAgICAgICAgIGNvbHVtbnNXaWR0aEtleXMuZm9yRWFjaCgoY29sdW1uS2V5OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY29sdW1ucy5maW5kSW5kZXgoKHNlbGVjdGVkQ29sdW1uKSA9PiBzZWxlY3RlZENvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gY29sdW1uS2V5Py50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5zW2luZGV4XVsnY3VzdG9tV2lkdGgnXSA9IGdyaWRTZXR0aW5nPy5jdXN0b21Db2x1bW5zV2lkdGhbY29sdW1uS2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcHJvY2Vzc0hvdmVyRGF0YShob3ZlckRhdGE6IGFueSwgcm93OiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHsgLi4uaG92ZXJEYXRhPy5kYXRhIH07XG4gICAgICBjb25zdCBkYXRhS2V5cyA9IE9iamVjdC5rZXlzKGRhdGEpO1xuICAgICAgY29uc3Qgcm93S2V5cyA9IE9iamVjdC5rZXlzKHJvdyk7XG4gICAgICBpZiAoZGF0YUtleXM/Lmxlbmd0aCA+IDAgJiYgcm93S2V5cz8ubGVuZ3RoID4gMCkge1xuICAgICAgICBkYXRhS2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgdmFyIHZhbHVlID0gZGF0YVtrZXldO1xuICAgICAgICAgIGlmICh2YWx1ZT8udG9TdHJpbmcoKS5pbmNsdWRlcygneycpICYmIHZhbHVlPy50b1N0cmluZygpLmluY2x1ZGVzKCd9JykpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZShcIntcIiwgXCJcIikucmVwbGFjZShcIn1cIiwgXCJcIik7XG4gICAgICAgICAgICBsZXQgcm93S2V5ID0gcm93S2V5cz8uZmluZCgoeCkgPT4geD8udG9Mb3dlckNhc2UoKSA9PT0gdmFsdWU/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgdmFyIGNvcnJlY3RWYWx1ZSA9IHJvd1tyb3dLZXldO1xuICAgICAgICAgICAgZGF0YVtrZXldID0gY29ycmVjdFZhbHVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaEtleSA9IHJvd0tleXM/LmZpbmQoKHgpID0+IHg/LnRvTG93ZXJDYXNlKCkgPT09IGtleT8udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICBpZiAobWF0Y2hLZXkgJiYgIWRhdGFba2V5XSkge1xuICAgICAgICAgICAgICBkYXRhW2tleV0gPSByb3dbbWF0Y2hLZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaG92ZXJEYXRhPy5zdHlsZSA/IHRoaXMub3ZlcmxheVBhbmVsU3R5bGUgPSBob3ZlckRhdGE/LnN0eWxlIDogXCJcIjtcbiAgICAgIHRoaXMucGFuZWxPdmVybGF5Vmlld0NvbnRhaW5lci5jbGVhcigpO1xuICAgICAgaWYgKHRoaXMucGFuZWxPdmVybGF5Vmlld0NvbnRhaW5lciAmJiBob3ZlckRhdGE/LmNvbXBvbmVudCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRSZWY6IGFueSA9IHRoaXMucGFuZWxPdmVybGF5Vmlld0NvbnRhaW5lcj8uY3JlYXRlQ29tcG9uZW50KGhvdmVyRGF0YT8uY29tcG9uZW50KTtcbiAgICAgICAgaWYgKGhvdmVyRGF0YS5kYXRhKSB7XG4gICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmNvbmZpZyA9IFtdO1xuICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5jb25maWcuZGF0YSA9IGRhdGE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGFkZER5bmFtaWNQYW5lbE92ZXJsYXlDb21wb25lbnQoaG92ZXJEYXRhOiBhbnksIG92ZXJsYXlQYW5lbDogYW55LCBldmVudDogYW55LCByb3c6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMucHJvY2Vzc0hvdmVyRGF0YShob3ZlckRhdGEsIHJvdyk7XG4gICAgb3ZlcmxheVBhbmVsLnNob3coZXZlbnQpO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGVkQ29sdW1ucygpOiBJR3JpZENvbHVtbltdIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRDb2x1bW5zO1xuICB9XG5cbiAgc2V0IHNlbGVjdGVkQ29sdW1ucyh2YWw6IElHcmlkQ29sdW1uW10pIHtcbiAgICAvLyBSZXNwZWN0IGBzaG93SW5Nb3JlYDogZG8gbm90IGFsbG93IHNlbGVjdGluZyBjb2x1bW5zIHRoYXQgYXJlIGludGVuZGVkIGZvciBNb3JlIG1lbnVcbiAgICB0aGlzLl9zZWxlY3RlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnM/LmZpbHRlcigoY29sKSA9PlxuICAgICAgIWNvbC5zaG93SW5Nb3JlICYmIHZhbD8uc29tZSgodikgPT4gdi5maWVsZCA9PT0gY29sLmZpZWxkICYmIHYuaGVhZGVyID09PSBjb2wuaGVhZGVyKVxuICAgICk7XG5cbiAgICBpZiAodGhpcy5hbGxvd1BlcnNpc3RlbmNlICYmIHRoaXMuYWxsb3dDb2x1bW5Ub2dnbGUpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkRmllbGRzID0gdGhpcy5fc2VsZWN0ZWRDb2x1bW5zLm1hcCgoeCkgPT4geC5maWVsZCk7XG4gICAgICB0aGlzLnNhdmVDb2x1bW5XaWR0aHMoc2VsZWN0ZWRGaWVsZHMpO1xuICAgIH1cbiAgfVxuICAvLyB0aGlzLl9zZWxlY3RlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnM/LmZpbHRlcigoY29sKSA9PiB2YWwuaW5jbHVkZXMoY29sKSk7XG4gIC8vIGlmICh0aGlzLmFsbG93UGVyc2lzdGVuY2UgJiYgdGhpcy5hbGxvd0NvbHVtblRvZ2dsZSkge1xuICAvLyAgIGNvbnN0IHNlbGVjdGVkRmllbGRzID0gdmFsLm1hcCgoeCkgPT4geC5maWVsZCk7XG4gIC8vICAgdGhpcy5zYXZlQ29sdW1uV2lkdGhzKHNlbGVjdGVkRmllbGRzKTtcbiAgLy8gfVxuICAvLyB1bmFibGUgdG8gYWxsb3cgdXNlciB0byBjb3B5IHRleHQgZnJvbSBncmlkIHdoZW4gdGhpcy5hbGxvd1RleHRDb3B5IGlzIHNldCB0byBmYWxzZS5cbiAgQEhvc3RMaXN0ZW5lcignY29weScsIFsnJGV2ZW50J10pXG4gIEBIb3N0TGlzdGVuZXIoJ2N1dCcsIFsnJGV2ZW50J10pXG4gIGhhbmRsZUNvcHlPckN1dChldmVudDogQ2xpcGJvYXJkRXZlbnQpIHtcbiAgICBjb25zdCBzZWxlY3Rpb246IGFueSA9IHdpbmRvdz8uZ2V0U2VsZWN0aW9uKCk/LnRvU3RyaW5nKCkgfHwgJyc7XG4gICAgY29uc3QgaXNNdWx0aUNlbGxTZWxlY3Rpb24gPSBzZWxlY3Rpb24uc3BsaXQoL1tcXG5cXHRdKy8pPy5maWx0ZXIoKHgpID0+IHggIT09ICcnKTtcblxuICAgIGlmICghdGhpcy5hbGxvd1RleHRDb3B5ICYmIGlzTXVsdGlDZWxsU2VsZWN0aW9uPy5sZW5ndGggPiAxKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudC50YXJnZXQnXSkgb25DbGljayhldmVudCkge1xuICAgIGlmICghdGhpcy5lZGl0QWxsUm93cyAmJiAhdGhpcy5pbkVkaXRNb2RlICYmIHRoaXMuc2VsZWN0ZWRSb3dSZWNvcmQpIHtcbiAgICAgIHRoaXMuaGFuZGxlUm93Q2xpY2sodGhpcy5zZWxlY3RlZFJvd1JlY29yZCk7XG4gICAgfVxuICB9XG5cbiAgLy8gYnJvd3NlciBjbG9zZSBldmVudFxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6YmVmb3JldW5sb2FkJywgWyckZXZlbnQnXSlcbiAgYmVmb3JldW5sb2FkSGFuZGxlcihldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQXNzaWdubWVudCBvZiBzZWxlY3RlZCBjb2x1bW5zIG9uIHBhZ2UgbG9hZFxuICAgKi9cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5ncmlkU2VydmljZS5pbmNyZW1lbnRDYWxscygpO1xuICAgIGlmICh0aGlzLmdyaWRTZXJ2aWNlLmdldE51bWJlck9mQ2FsbHMoKSA9PT0gMSkge1xuICAgICAgdGhpcy5zZWFyY2hidG5JZCA9ICdzZWFyY2hHbG9iYWxGaWx0ZXJCdG4nO1xuICAgICAgaWYgKHRoaXMudGFibGUpXG4gICAgICAgIHRoaXMudGFibGUuaWQgPSAnR3JpZENvbXBvbmVudFRhYmxlLSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VhcmNoYnRuSWQgPSBgRmlsdGVyXyR7Y3VycmVudFVybCgpfV8ke3RoaXMuZ3JpZFNlcnZpY2UuZ2V0TnVtYmVyT2ZDYWxscygpfWA7XG4gICAgICBpZiAodGhpcy50YWJsZSlcbiAgICAgICAgdGhpcy50YWJsZS5pZCA9ICdHcmlkQ29tcG9uZW50XycgKyB0aGlzLmdyaWRTZXJ2aWNlLmdldE51bWJlck9mQ2FsbHMoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2V0R3JpZFJlZnJlc2hUaW1lKSB7XG4gICAgICB0aGlzLnJlZnJlc2hHcmlkKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub25Sb3dVcGRhdGU/Lm9ic2VydmVycz8ubGVuZ3RoID09IDApIHtcbiAgICAgIHRoaXMuaGlkZUVkaXRCdG4gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVkaXRBbGxSb3dzICYmIHRoaXMub25Sb3dEZWxldGUub2JzZXJ2ZXJzLmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLmRpc2FibGVkU2F2ZUJ0biA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wb25lbnRUYWJsZVJlZiA9IHRoaXMudGFibGU7XG4gICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgIC5waXBlKHRha2UoMSkpIC8vIEVtaXQgb25seSBvbmNlIHdoZW4gdGhlIHpvbmUgYmVjb21lcyBzdGFibGVcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICAgIH0pO1xuICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgdGhpcy5zZXROdW1lcmljVmFsdWVzKCk7XG4gICAgLy8gfSwgNTAwKTtcbiAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgIGlmICh0aGlzLnJvd3NDaGFuZ2Uub2JzZXJ2ZXJzPy5sZW5ndGgpIHtcbiAgICAvLyAgICAgdGhpcy5yb3dzQ2hhbmdlLmVtaXQodGhpcy5yb3dzRGF0YSk7XG4gICAgLy8gICB9XG4gICAgLy8gfSwgMjAwMCk7XG4gIH1cbiAgLy8gbmdBZnRlclZpZXdJbml0KCkge1xuICAvLyAgIG9uR2xvYmFsRmlsdGVyQ29udHJvbFJpZ2h0QnRuU3RhdGVDaGFuZ2UoKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gIC8vICAgICB0aGlzLmNoZWNrbGlzdCA9IHJlc3BvbnNlO1xuICAvLyAgIH0pXG4gIC8vICAgLy8gdGhpcy5hZGREeW5hbWljUGFuZWxPdmVybGF5Q29tcG9uZW50KClcbiAgLy8gICB0aGlzLmNvbXBvbmVudFRhYmxlUmVmID0gdGhpcy50YWJsZTtcbiAgLy8gICBjb25zdCBsb29rdXBNb2RhbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5sb29rdXAtbW9kZWwnKTtcbiAgLy8gICBpZiAobG9va3VwTW9kYWwpIHtcbiAgLy8gICAgIGNvbnN0IGZvcm1Db250YWluZXIgPSBsb29rdXBNb2RhbC5xdWVyeVNlbGVjdG9yKCcuZm9ybS1jb250YWluZXInKTsgXG4gIC8vICAgICBpZiAoIWZvcm1Db250YWluZXIpIHtcbiAgLy8gICAgIHRoaXMuc2V0Rm9jdXNPdXRUb2ZpbHRlcnMobG9va3VwTW9kYWwpO1xuICAvLyAgICAgfVxuICAvLyAgIH1cbiAgLy8gICBlbHNle1xuICAvLyAgICAgdGhpcy5zZXRGb2N1c091dFRvZmlsdGVycygpO1xuICAvLyAgIH1cbiAgLy8gICB0aGlzLmlzQXBpRXJyb3JPY2N1cmVkKCk7XG4gIC8vICAgdGhpcy5uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAvLyAgICAgY29uc3Qga2V5ID0gdGhpcy50YWJsZT8uaWQgKyB0aGlzLmN1cnJlbnRVcmw7XG4gIC8vICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLnNvZnRDYWNoaW5nXG4gIC8vICAgICAgID8gdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNba2V5XVxuICAvLyAgICAgICA6IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1NldEZpbHRlcnMtJyArIGtleSkgfHwgJ251bGwnKTtcbiAgLy8gICAgIGlmICghY2FjaGVkPy5maWx0ZXJzPy5sZW5ndGgpIHJldHVybjtcbiAgLy8gICAgIGlmICh0aGlzLnVzZVNlcnZlclNpZGVFdmVudHMpIHtcbiAgLy8gICAgICAgdGhpcy50YWJsZSAmJiAodGhpcy50YWJsZS5fZmlyc3QgPSAwKTtcbiAgLy8gICAgICAgdGhpcy5vblNlcnZlclNpZGVFdmVudENoYW5nZS5lbWl0KGNhY2hlZCk7XG4gIC8vICAgICB9IGVsc2Uge1xuICAvLyAgICAgICBjYWNoZWQuZmlsdGVycy5mb3JFYWNoKChmOiBhbnkpID0+IHRoaXMudGFibGU/LmZpbHRlcj8uKGYudmFsdWUsIGYuZmllbGQsIGYubWF0Y2hNb2RlIHx8ICdzdGFydHNXaXRoJykpO1xuICAvLyAgICAgfVxuICAvLyAgIH0pO1xuICAvLyB9XG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBvbkdsb2JhbEZpbHRlckNvbnRyb2xSaWdodEJ0blN0YXRlQ2hhbmdlKCkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgdGhpcy5jaGVja2xpc3QgPSByZXNwb25zZTtcbiAgICB9KVxuICAgIC8vIHRoaXMuYWRkRHluYW1pY1BhbmVsT3ZlcmxheUNvbXBvbmVudCgpXG4gICAgdGhpcy5jb21wb25lbnRUYWJsZVJlZiA9IHRoaXMudGFibGU7XG4gICAgY29uc3QgbG9va3VwTW9kYWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubG9va3VwLW1vZGVsJyk7XG4gICAgaWYgKGxvb2t1cE1vZGFsKSB7XG4gICAgICBjb25zdCBmb3JtQ29udGFpbmVyID0gbG9va3VwTW9kYWwucXVlcnlTZWxlY3RvcignLmZvcm0tY29udGFpbmVyJyk7XG4gICAgICBpZiAoIWZvcm1Db250YWluZXIpIHtcbiAgICAgICAgdGhpcy5zZXRGb2N1c091dFRvZmlsdGVycyhsb29rdXBNb2RhbCk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5zZXRGb2N1c091dFRvZmlsdGVycygpO1xuICAgIH1cbiAgICB0aGlzLmlzQXBpRXJyb3JPY2N1cmVkKCk7XG4gICAgdGhpcy5uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gdGhpcy50YWJsZT8uaWQgKyB0aGlzLmN1cnJlbnRVcmw7XG4gICAgICBpZiAoIXRoaXMuYWxsb3dDYWNoaW5nICYmICF0aGlzLnNvZnRDYWNoaW5nKSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdTZXRGaWx0ZXJzLScgKyBrZXkpO1xuICAgICAgICBpZiAodGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNba2V5XSkge1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1trZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5hbGxvd0NhY2hpbmcgfHwgdGhpcy5zb2Z0Q2FjaGluZykge1xuICAgICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLnNvZnRDYWNoaW5nXG4gICAgICAgICAgPyB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1trZXldXG4gICAgICAgICAgOiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdTZXRGaWx0ZXJzLScgKyBrZXkpIHx8ICdudWxsJyk7XG5cbiAgICAgICAgaWYgKGNhY2hlZD8uZmlsdGVycz8ubGVuZ3RoKSB7XG4gICAgICAgICAgY2FjaGVkLmZpbHRlcnMuZm9yRWFjaCgoZjogYW55KSA9PiB0aGlzLnRhYmxlPy5maWx0ZXI/LihmLnZhbHVlLCBmLmZpZWxkLCBmLm1hdGNoTW9kZSB8fCAnc3RhcnRzV2l0aCcpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgIGNvbnN0IHRleHRhcmVhcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTFRleHRBcmVhRWxlbWVudD4oJy5wcmltZS10ZXh0YXJlYScpO1xuICAgIHRleHRhcmVhcy5mb3JFYWNoKHQgPT4gdGhpcy5hdXRvR3Jvdyh0KSk7XG4gIH1cblxuICBpc0FwaUVycm9yT2NjdXJlZCgpIHtcbiAgICB0aGlzLnJlcXVlc3RTZXJ2aWNlLmlzRXJyb3JPY2N1cmVkKCkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICBpZiAodGhpcy50ZW1wU2F2ZWRSb3c/Lmxlbmd0aCA+IDAgJiYgdGhpcy5yb3dzRGF0YT8ubGVuZ3RoID4gMCAmJiAhdGhpcy5lZGl0QWxsUm93cykge1xuICAgICAgICB0aGlzLmVkaXRpbmdSb3dLZXlzW3RoaXMucm93c0RhdGFbdGhpcy50ZW1wU2F2ZWRSb3dbMF1dW3RoaXMuZGF0YUtleV1dID0gcmVzO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHNldEZvY3VzT3V0VG9maWx0ZXJzKGxvb2t1cE1vZGFsPykge1xuICAgIGxldCBmaWx0ZXJzID0gODAwO1xuICAgIGxldCBmaWx0ZXI6IFN1YnNjcmlwdGlvbiA9IGludGVydmFsKGZpbHRlcnMpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBmaWx0ZXJzID0gMDtcbiAgICAgIGZpbHRlci51bnN1YnNjcmliZSgpO1xuICAgICAgY29uc3QgZmlsdGVyQ29sdW1uID0gdGhpcy5jb2x1bW5zPy5maW5kKChjb2x1bW4pID0+ICF0aGlzLmhpZGVGaWx0ZXIgJiYgIWNvbHVtbj8uaGlkZGVuICYmIGNvbHVtbj8uZmlsdGVyICYmIChjb2x1bW4/LmZpbHRlcmluZyA9PT0gdHJ1ZSB8fCBjb2x1bW4/LmZpbHRlcmluZyA9PT0gdW5kZWZpbmVkKSk7XG4gICAgICBjb25zdCBmaWx0ZXJGaWVsZDogYW55ID0gbG9va3VwTW9kYWw/LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZmlsdGVyQ29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKSk7XG4gICAgICBjb25zdCBmaWx0ZXJGaWVsZHM6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZmlsdGVyQ29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKSk7XG4gICAgICBpZiAoZmlsdGVyRmllbGQgfHwgZmlsdGVyRmllbGRzKSB7XG4gICAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyRmllbGQ/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZpbHRlckZpZWxkWzBdPy5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChmaWx0ZXJGaWVsZHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsdGVyRmllbGRzPy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBmaWx0ZXJGaWVsZHNbaV0/LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnJlZnJlc2hHcmlkVGVybWluYXRvcigpO1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UucmVzZXRDYWxscygpO1xuICB9XG5cbiAgLy8gc2V0IE11bHRpc2VsZWN0IFRvZ2dsZSBDb2x1bW4gLy9cbiAgc2V0TXVsdGlTZWxlY3RUb2dnbGVDb2x1bW4oc2VsZWN0ZWRGaWVsZHM6IGFueVtdID0gW10pIHtcbiAgICBpZiAodGhpcy51c2VyU2V0dGluZz8ucGFnZVNldHRpbmdzPy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBtYXRjaFVybCA9IHRoaXMudXNlclNldHRpbmc/LnBhZ2VTZXR0aW5ncz8uZmluZEluZGV4KChwYWdlKSA9PiBwYWdlPy51cmwgPT09IHRoaXMucm91dGVyLnVybClcbiAgICAgIGlmIChtYXRjaFVybCA+IC0xKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoR3JpZCA9IHRoaXMudXNlclNldHRpbmc/LnBhZ2VTZXR0aW5nc1ttYXRjaFVybF0/LmdyaWRTZXR0aW5ncz8uZmluZEluZGV4KChncmlkU2V0dGluZykgPT4gZ3JpZFNldHRpbmc/LmdyaWRJZCA9PT0gdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQpO1xuICAgICAgICBpZiAobWF0Y2hHcmlkID4gLTEpIHtcbiAgICAgICAgICB0aGlzLnVzZXJTZXR0aW5nPy5wYWdlU2V0dGluZ3NbbWF0Y2hVcmxdPy5ncmlkU2V0dGluZ3Muc3BsaWNlKG1hdGNoR3JpZCwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0Z3JpZFNldHRpbmdzKHNlbGVjdGVkRmllbGRzLCBtYXRjaFVybCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXNlclNldHRpbmcucGFnZVNldHRpbmdzID0gW107XG4gICAgICB0aGlzLnNldGdyaWRTZXR0aW5ncyhzZWxlY3RlZEZpZWxkcyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0U2VsZWN0ZWRDb2xGcm9tTG9jYWxTdHJvcmFnZShzZWxlY3RlZENvbHVtbikge1xuICAgIGxldCBhcnIgPSBbXTtcbiAgICBpZiAoc2VsZWN0ZWRDb2x1bW4gJiYgc2VsZWN0ZWRDb2x1bW4/LnBhZ2VTZXR0aW5ncz8ubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbWF0Y2hVcmwgPSBzZWxlY3RlZENvbHVtbj8ucGFnZVNldHRpbmdzPy5maW5kSW5kZXgoKHBhZ2UpID0+IHBhZ2U/LnVybCA9PT0gdGhpcy5yb3V0ZXIudXJsKVxuICAgICAgaWYgKG1hdGNoVXJsID4gLTEpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hHcmlkID0gc2VsZWN0ZWRDb2x1bW4/LnBhZ2VTZXR0aW5nc1ttYXRjaFVybF0/LmdyaWRTZXR0aW5ncz8uZmluZCgoZ3JpZFNldHRpbmcpID0+IGdyaWRTZXR0aW5nPy5ncmlkSWQgPT09IHRoaXMuZ3JpZElkKTtcbiAgICAgICAgaWYgKG1hdGNoR3JpZCAmJiBtYXRjaEdyaWQuc2VsZWN0ZWRDb2x1bW5zPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgaWYgKG1hdGNoR3JpZC5zZWxlY3RlZENvbHVtbnMuc29tZSgoZmllbGROYW1lKSA9PiBmaWVsZE5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IGNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgIGFyci5wdXNoKGNvbHVtbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhcnI/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBhcnI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICBzZXRncmlkU2V0dGluZ3Moc2VsZWN0ZWRGaWVsZHM6IGFueSwgbWF0Y2hVcmw/OiBhbnkpIHtcbiAgICBpZiAoc2VsZWN0ZWRGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IGdyaWRTZXR0aW5nczogYW55W10gPSBbXTtcbiAgICAgIGdyaWRTZXR0aW5ncy5wdXNoKHtcbiAgICAgICAgZ3JpZElkOiB0aGlzLmdyaWRJZCxcbiAgICAgICAgc2VsZWN0ZWRDb2x1bW5zOiBzZWxlY3RlZEZpZWxkcyxcbiAgICAgICAgY3VzdG9tQ29sdW1uc1dpZHRoOiB0aGlzLmN1c3RvbVdpZHRoQ29sdW1ucyxcbiAgICAgIH0pXG4gICAgICBjb25zdCBwYWdlU2V0dGluZyA9IHtcbiAgICAgICAgdXJsOiB0aGlzLnJvdXRlci51cmwsXG4gICAgICAgIGdyaWRTZXR0aW5nczogZ3JpZFNldHRpbmdzLFxuICAgICAgICBsYXN0VXBkYXRlZDogbmV3IERhdGUoKVxuICAgICAgfVxuICAgICAgdGhpcy51c2VyU2V0dGluZy5sYXN0VXBkYXRlZCA9IG5ldyBEYXRlKCk7XG4gICAgICBpZiAobWF0Y2hVcmwgPiAtMSkge1xuICAgICAgICB0aGlzLnVzZXJTZXR0aW5nLnBhZ2VTZXR0aW5nc1ttYXRjaFVybF0gPSBwYWdlU2V0dGluZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXNlclNldHRpbmcucGFnZVNldHRpbmdzLnB1c2gocGFnZVNldHRpbmcpO1xuICAgICAgfVxuICAgICAgY29uc3QgcGFnZUluZm8gPSBKU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJTZXR0aW5nKTtcbiAgICAgIGNoYW5nZUNvbHVtbnNTdGF0ZSh7IHBhZ2VTZXR0aW5nOiBwYWdlSW5mbyB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBhcHBseSB1c2VyIHJvbGUgcGVybWlzc2lvbnMgb24gZ3JpZCBjb2x1bW5zXG4gIGFwcGx5Q29sdW1uc1Blcm1pc3Npb25zKCkge1xuICAgIGlmICh0aGlzLmNvbHVtbnMpIHtcbiAgICAgIGxldCB0b3RhbEZpZWxkczogbnVtYmVyID0gMDtcbiAgICAgIGxldCBoaWRkZW5GaWVsZHM6IG51bWJlciA9IDA7XG5cbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IElHcmlkQ29sdW1uKSA9PiB7XG4gICAgICAgIGxldCBwZXJtaXNzaW9uczogSVBlcm1pc3Npb25bXSA9IGNvbHVtbi5wZXJtaXNzaW9ucztcbiAgICAgICAgbGV0IGhhc1ZhbGlkRWRpdFBlcm1pc3Npb24gPSBmYWxzZTtcblxuICAgICAgICBpZiAocGVybWlzc2lvbnMgJiYgcGVybWlzc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHBlcm1pc3Npb25zLmZvckVhY2goKHBlcm1pc3Npb24pID0+IHtcbiAgICAgICAgICAgIGxldCBpc1ZhbGlkOiBib29sZWFuID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAocGVybWlzc2lvbi5yb2xlcyAmJiBwZXJtaXNzaW9uLnJvbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgcGVybWlzc2lvbi5yb2xlcy5mb3JFYWNoKChyb2xlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkICYmIHRoaXMucm9sZXMgJiYgdGhpcy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLlZJRVcgJiZcbiAgICAgICAgICAgICAgICAhaGFzVmFsaWRFZGl0UGVybWlzc2lvblxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgICAgICAgICAgICAgY29sdW1uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgY29sdW1uLmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLkVESVQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgICAgICAgICAgICAgaGFzVmFsaWRFZGl0UGVybWlzc2lvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4uaGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0b3RhbEZpZWxkcysrO1xuICAgICAgICBpZiAoY29sdW1uLmhpZGRlbikge1xuICAgICAgICAgIGhpZGRlbkZpZWxkcysrO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5pc0NvbHVtbkhpZGRlbiA9IHRvdGFsRmllbGRzID4gMCAmJiB0b3RhbEZpZWxkcyA9PT0gaGlkZGVuRmllbGRzO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFwcGx5IGdsb2JhbCBwZXJtaXNzaW9ucyBvbiBlbnRpcmUgZ3JpZFxuICBhcHBseUdyaWRQZXJtaXNzaW9ucygpIHtcbiAgICBpZiAodGhpcy5wZXJtaXNzaW9ucyAmJiB0aGlzLnBlcm1pc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBoYXNWYWxpZEVkaXRQZXJtaXNzaW9uID0gZmFsc2U7XG5cbiAgICAgIC8vIGNoZWNrIGlmIGFueSBjb2x1bW4gaGFzIGFueSBwZXJtaXNzaW9uXG4gICAgICBsZXQgaGFzQ29sdW1uUGVybWlzc2lvbnMgPSB0aGlzLmNvbHVtbnM/LnNvbWUoXG4gICAgICAgICh4KSA9PiB4Py5wZXJtaXNzaW9ucyAmJiB4LnBlcm1pc3Npb25zLmxlbmd0aCA+IDBcbiAgICAgICk7XG5cbiAgICAgIHRoaXMucGVybWlzc2lvbnMuZm9yRWFjaCgocGVybWlzc2lvbikgPT4ge1xuICAgICAgICBsZXQgaXNWYWxpZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgICAgIHBlcm1pc3Npb24ucm9sZXMuZm9yRWFjaCgocm9sZSkgPT4ge1xuICAgICAgICAgIGlmICghaXNWYWxpZCAmJiB0aGlzLnJvbGVzICYmIHRoaXMucm9sZXMuaW5jbHVkZXMocm9sZSkpIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLkNSVUQgJiYgIWlzVmFsaWQpIHtcbiAgICAgICAgICB0aGlzLnVzZUlubGluZUNSVUQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICBwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5WSUVXICYmXG4gICAgICAgICAgIWhhc1ZhbGlkRWRpdFBlcm1pc3Npb25cbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy51c2VJbmxpbmVDUlVEID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgIWhhc0NvbHVtblBlcm1pc3Npb25zKSB7XG4gICAgICAgICAgICB0aGlzLmlzR3JpZEhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnVzZUlubGluZUNSVUQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuRURJVCAmJiAhaXNWYWxpZCkge1xuICAgICAgICAgIHRoaXMuaXNHcmlkSGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgaGFzVmFsaWRFZGl0UGVybWlzc2lvbiA9IHRydWU7XG4gICAgICAgICAgdGhpcy5lZGl0Um93UGVybWlzc2lvbiA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLkRFTEVURSAmJiAhaXNWYWxpZCkge1xuICAgICAgICAgIHRoaXMuZGVsZXRlUm93UGVybWlzc2lvbiA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLkFERFJPVyAmJiAhaXNWYWxpZCkge1xuICAgICAgICAgIHRoaXMuYWRkUm93UGVybWlzc2lvbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMub25Sb3dBZGQub2JzZXJ2ZXJzLmxlbmd0aCA9PSAwKSB0aGlzLmFkZFJvd1Blcm1pc3Npb24gPSBmYWxzZTtcbiAgICBpZiAodGhpcy5vblJvd0RlbGV0ZS5vYnNlcnZlcnMubGVuZ3RoID09IDApIHRoaXMuZGVsZXRlUm93UGVybWlzc2lvbiA9IGZhbHNlO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucmVtYWluaW5nUm93c0RhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLnJvd3NEYXRhID0gWy4uLnRoaXMucm93c0RhdGEsIC4uLnRoaXMucmVtYWluaW5nUm93c0RhdGFdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICBpZiAoIXRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkICYmICF0aGlzLmdyaWRTZXJ2aWNlLnJvd1VwZGF0ZSkge1xuICAgICAgdGhpcy5zZXRHcmlkSWQoKVxuICAgICAgdGhpcy5jb21wb25lbnRUYWJsZVJlZiA9IHRoaXMudGFibGU7XG4gICAgICBsZXQgZ2V0U2VsZWN0ZWRDb2wgPSBbXVxuICAgICAgaWYgKHRoaXMuYWxsb3dDYWNoaW5nICE9PSBmYWxzZSAmJiB0aGlzLnBhZ2luYXRpb24pIHtcbiAgICAgICAgdGhpcy5hbGxvd0NhY2hpbmcgPSB0aGlzLnBhZ2luYXRpb247XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdTZXRGaWx0ZXJzLScgKyB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHRoaXMuY3VycmVudFVybCk7XG4gICAgICB9XG4gICAgICAvLyBhZGQgZGVmYXVsdFJvdyBpbiBwYWdpbmF0aW9uIGFycmF5XG4gICAgICBpZiAoIXRoaXMuc2V0UGFnaW5hdGlvbkxlbmd0aC5pbmNsdWRlcyh0aGlzLmRlZmF1bHRSb3dzKSkge1xuICAgICAgICB0aGlzLnNldFBhZ2luYXRpb25MZW5ndGgudW5zaGlmdCh0aGlzLmRlZmF1bHRSb3dzKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhhc0NvbHVtbnM6IGJvb2xlYW4gPSB0aGlzLmNvbHVtbnMgJiYgdGhpcy5jb2x1bW5zLmxlbmd0aCA+IDA7XG4gICAgICBpZiAoaGFzQ29sdW1ucykge1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmdyaWRTZXJ2aWNlLnNldENvbHVtbkZpZWxkcyh0aGlzLmNvbHVtbnMpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVG9nZ2xlQ29sdW1ucyA9IHRoaXMuY29sdW1ucz8uZmlsdGVyKCh4KSA9PiAheC5oaWRkZW4gJiYgIXguc2hvd0luTW9yZSk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRVc2VySW5mbyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0N1cnJlbnRVc2VySW5mbycpKTtcbiAgICAgICAgLy9zZXQgZ2V0U2VsZWN0ZWRDb2wgY29sdW1ucyBmb3IgdG9nZ2xlQ291bG1uIFxuICAgICAgICBpZiAodGhpcy5hbGxvd1BlcnNpc3RlbmNlICYmIHRoaXMuYWxsb3dDb2x1bW5Ub2dnbGUpIHtcbiAgICAgICAgICBpZiAoY3VycmVudFVzZXJJbmZvICYmIGN1cnJlbnRVc2VySW5mby5wYWdlU2V0dGluZykge1xuICAgICAgICAgICAgZ2V0U2VsZWN0ZWRDb2wgPSB0aGlzLmdldFNlbGVjdGVkQ29sRnJvbUxvY2FsU3Ryb3JhZ2UoSlNPTi5wYXJzZShjdXJyZW50VXNlckluZm8ucGFnZVNldHRpbmcpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb2xlcyA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0VXNlclJvbGVzKCk7XG5cbiAgICAgICAgLy8gYXBwbHkgdXNlciByb2xlIHBlcm1pc3Npb25zIG9uIGdyaWQgY29sdW1uc1xuICAgICAgICB0aGlzLmFwcGx5Q29sdW1uc1Blcm1pc3Npb25zKCk7XG5cbiAgICAgICAgLy8gYXBwbHkgZ2xvYmFsIHBlcm1pc3Npb25zIG9uIGVudGlyZSBncmlkXG4gICAgICAgIHRoaXMuYXBwbHlHcmlkUGVybWlzc2lvbnMoKTtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zPy5maWx0ZXIoKHgpID0+ICh4LnNob3cgPT09IHRydWUgfHwgeC5zaG93ID09PSB1bmRlZmluZWQpICYmICF4LmhpZGRlbiAmJiAheC5zaG93SW5Nb3JlKTtcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIC8vbG9hZCBjb2x1bW4gd2l0ZHRoIG9uIHBhZ2UgcmVsb2FkXG4gICAgICAgIHRoaXMubG9hZENvbHVtbldpZHRocygpO1xuICAgICAgICBpZiAodGhpcy5yb3dzRGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5mb3JtU2VydmljZS5zZXRUb29sdGlwKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjaGVja2luZyBmaWx0ZXIgZXhpc3Qgb3Igbm90XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuX3NlbGVjdGVkQ29sdW1ucy5zb21lKFxuICAgICAgICAgIChjb2x1bW4pID0+IGNvbHVtbi5maWx0ZXJpbmcgPT09IHVuZGVmaW5lZCB8fCBjb2x1bW4uZmlsdGVyaW5nID09PSB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIGlmIChmaWx0ZXIgPT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5oaWRlRmlsdGVyID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZmlsdGVyRm9jdXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICAgICAgLy8gc2V0IGlzUmVxdWlyZWQgdHJ1ZSBmb3IgcmVxdWlyZWQgY29sdW1uIHRvIHNob3cgYXN0cmljIGluIGNvbHVtbiBoZWFkZXJcbiAgICAgICAgICBpZiAoY29sdW1uLnZhbGlkYXRpb25zPy5maW5kKHZhbGlkYXRpb24gPT4gdmFsaWRhdGlvbi50eXBlID09IEVHcmlkVmFsaWRhdG9yLlJFUVVJUkVEKSkge1xuICAgICAgICAgICAgY29sdW1uLmlzUmVxdWlyZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBzZXQgbnVtZXJpYyBudWxsIG9yIHVuZGVmaW5lIGRhdGEgZGVmYXVsdCB2YWx1ZVxuICAgICAgICAgIGlmICgoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5OVU1FUklDIHx8IGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTiB8fCBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLlRFWFQgfHwgY29sdW1uLnR5cGUgPT09IHVuZGVmaW5lZCB8fCBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUgfHwgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTikgJiYgY29sdW1uLnZhbHVlICYmIHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChjb2x1bW4udmFsdWUgJiYgKHJvd1tjb2x1bW4uZmllbGRdID09PSBudWxsIHx8IHJvd1tjb2x1bW4uZmllbGRdID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8udmFsdWUgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8udmFsdWUgOiBjb2x1bW4udmFsdWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIC8vc2V0IHRleHRUeXBlIGZvciBhIGNvbHVtbiB0aGF0IGlzIGZvcm1hdHRlZCB0byBiZSBhIHBhc3N3b3JkXG4gICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXQgPT0gJ3Bhc3N3b3JkJyAmJiAoIWNvbHVtbi50ZXh0VHlwZSB8fCBjb2x1bW4udGV4dFR5cGUgIT09ICd0ZXh0JykpIHtcbiAgICAgICAgICAgIGNvbHVtbi50ZXh0VHlwZSA9ICdwYXNzd29yZCc7XG4gICAgICAgICAgfSBlbHNlIGNvbHVtbi50ZXh0VHlwZSA9ICd0ZXh0JztcbiAgICAgICAgICAvLyBjb252ZXJ0IHN0cmluZyB0aW1lIGludG8gdGhlIGRhdGVcbiAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKSB7XG4gICAgICAgICAgICBpZiAoY29sdW1uLnRpbWVPbmx5ID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gJiZcbiAgICAgICAgICAgICAgICAgIChyb3dbY29sdW1uLmZpZWxkXS50b1N0cmluZygpLmluY2x1ZGVzKCdQTScpIHx8XG4gICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ0FNJykpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHNldFRpbWVJbkRhdGUocm93W2NvbHVtbi5maWVsZF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFjb2x1bW4ubWludXRlc0ludGVydmFsKSB7XG4gICAgICAgICAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZF0gJiYgdHlwZW9mIHJvd1tjb2x1bW4uZmllbGRdID09PSAnc3RyaW5nJyAmJiAhcm93W2NvbHVtbi5maWVsZF0uaW5jbHVkZXMoJ1QnKSkge1xuICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBuZXcgRGF0ZShyb3dbY29sdW1uLmZpZWxkXSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghdGhpcy5oaWRlRmlsdGVyICYmIGNvbHVtbi5maWx0ZXJWYWx1ZSAmJiBjb2x1bW4uZmlsdGVyICYmIGNvbHVtbi5maWx0ZXJpbmcgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAvLyBzZXQgZmlsdGVyIHZhbHVlXG4gICAgICAgICAgICB0aGlzLnNldEZpbHRlckZvY3VzT3V0KGNvbHVtbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gc2V0IERpc3BsYXlUZXh0IHdoZW4gdmFsdWUgaXMgaW4gY3VybHkgYnJhY2tldHMuXG4gICAgICAgICAgdGhpcy5zZXREaXNwbGF5VGV4dFZhbHVlKGNvbHVtbik7XG4gICAgICAgICAgdGhpcy5zZXREaXNwbGF5RmllbGRWYWx1ZShjb2x1bW4pO1xuXG4gICAgICAgICAgLy9BZ2dyZWdhdGUgc2NlbmFyaW9cbiAgICAgICAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSAmJiBjb2x1bW4uYWdncmVnYXRlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuYWdncmVnYXRlRm9vdGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2V0QWdncmVnYXRlVGV4dChjb2x1bW4pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBzZWFyY2hGaWx0ZXJzO1xuICAgICAgICAgIGlmICghdGhpcy5zb2Z0Q2FjaGluZyAmJiB0aGlzLnRhYmxlPy5pZCkge1xuICAgICAgICAgICAgc2VhcmNoRmlsdGVycyA9IEpTT04ucGFyc2UoXG4gICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdTZXRGaWx0ZXJzLScgKyB0aGlzLnRhYmxlPy5pZCArIHRoaXMuY3VycmVudFVybCkgYXMgYW55XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy50YWJsZT8uaWQpIHtcbiAgICAgICAgICAgIHNlYXJjaEZpbHRlcnMgPSB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1t0aGlzLnRhYmxlPy5pZCArIHRoaXMuY3VycmVudFVybF07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLmhpZGVGaWx0ZXIgJiZcbiAgICAgICAgICAgIHNlYXJjaEZpbHRlcnMgJiZcbiAgICAgICAgICAgIHNlYXJjaEZpbHRlcnMuZmlsdGVycyAmJlxuICAgICAgICAgICAgc2VhcmNoRmlsdGVycy5maWx0ZXJzPy5sZW5ndGggPiAwXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBzZWFyY2hGaWx0ZXJzLmZpbHRlcnMuZm9yRWFjaCgoeDogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGlmICh4LmZpZWxkID09PSBjb2x1bW4uZmllbGQpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uPy5maWx0ZXI/LnR5cGUgPT09ICdjYWxlbmRhcicgJiYgeC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZVN0cmluZyA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHgudmFsdWUsICdNTS1kZC15eXl5Jyk7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4uZmlsdGVyVmFsdWUgPSBuZXcgRGF0ZShkYXRlU3RyaW5nIGFzIHN0cmluZyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUICYmICFBcnJheS5pc0FycmF5KHgudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4uZmlsdGVyVmFsdWUgPSB4LnZhbHVlPy5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgY29sdW1uLmZpbHRlclZhbHVlID0gY29sdW1uLnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJiBjb2x1bW4uaGFzT3duUHJvcGVydHkoJ2ZpbHRlclZhbHVlX29iaicpID8gY29sdW1uWydmaWx0ZXJWYWx1ZV9vYmonXT8udGV4dCA6IHgudmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gY29udmVydGluZyBkaXNwbGF5RmllbGQgdG9Mb3dlcmNhc2VcbiAgICAgICAgICBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgY29sdW1uLmRpc3BsYXlGaWVsZCA9IGNvbHVtbi5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gc2V0IEF1dG9Db21wbGV0ZSBEYXRhXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUgJiZcbiAgICAgICAgICAgIHRoaXMucm93c0RhdGEgJiZcbiAgICAgICAgICAgIHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDBcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICAgIC8vIGNvbnZlcnQgc3RyaW5nIHRoYXQgY29udGFpbnMgY29tbWEgaW50byBhcnJheXNcbiAgICAgICAgICAgICAgaWYgKHJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpLmluY2x1ZGVzKCc7JykpIHtcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHJvd1tjb2x1bW4uZmllbGRdXG4gICAgICAgICAgICAgICAgICA/LnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgIC5zcGxpdCgnOycpXG4gICAgICAgICAgICAgICAgICA/Lm1hcCgodmFsdWU6IGFueSkgPT4gKHsgW2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldOiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF0sIFtjb2x1bW4ub3B0aW9uTGFiZWw/LnRvTG93ZXJDYXNlKCldOiB2YWx1ZSwgW2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV06IHZhbHVlIH0pKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBrZXk6IGFueSA9IE9iamVjdC5rZXlzKHJvdykuZmluZCgoeCkgPT4geCA9PT0gY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgICAvLyBjb252ZXJ0IHNpbXBsZSBzdHJpbmcgaW50byBhcnJheVxuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocm93W2tleV0pICYmIHJvd1trZXldKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICAgICAgICAgIHJvd1trZXldID0gW3sgW2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldOiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF0sIFtjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldOiByb3dba2V5XSB9XTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbi5vcHRpb25MYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICByb3dba2V5XSA9IFt7IFtjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldOiByb3dba2V5XSwgW2NvbHVtbi5vcHRpb25MYWJlbD8udG9Mb3dlckNhc2UoKV06IHJvd1trZXldIH1dO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcm93W2tleV0gPSBbeyBbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXTogcm93W2tleV0gfV07XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvL3doZW4gd2UgYWRkIGEgbmV3IHJvdywgaXQgc2V0IHRoZSBkZWZhdWx0IHZhbHVlXG4gICAgICAgICAgaWYgKGNvbHVtbi52YWx1ZSkge1xuICAgICAgICAgICAgbGV0IGtleSA9IE9iamVjdC5rZXlzKHRoaXMubmV3R3JpZFJvdykuZmluZCgoeCkgPT4geD8udG9Mb3dlckNhc2UoKSA9PT0gY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgICAgICAgdGhpcy5uZXdHcmlkUm93W2NvbHVtbi5maWVsZF0gPSBjb2x1bW4udmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSykge1xuICAgICAgICAgICAgdGhpcy5zZXRMaW5rVGFiU2V0dGluZ3MoY29sdW1uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmFsbG93UGVyc2lzdGVuY2UgJiYgZ2V0U2VsZWN0ZWRDb2w/Lmxlbmd0aCA+IDAgJiYgdGhpcy5hbGxvd0NvbHVtblRvZ2dsZSkge1xuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0Q29sdW1ucyhnZXRTZWxlY3RlZENvbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3RDb2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZ2xvYmFsRmlsdGVyQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zZWFyY2hidG5JZCk7XG4gICAgICAgIGlmIChnbG9iYWxGaWx0ZXJCdG4pIHtcbiAgICAgICAgICB0aGlzLnNob3dGaWx0ZXJidG4gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2Uucm93cykge1xuICAgICAgICAgIGNvbnN0IGNsYXNzRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2hpZ2hsaWdodGVkLXJvdycpO1xuICAgICAgICAgIGlmIChjbGFzc0VsZW1lbnQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY2xhc3NFbGVtZW50WzBdLnNjcm9sbEludG9WaWV3KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghKHRoaXMucGFnaW5hdGlvbiAmJiB0aGlzLmVkaXRBbGxSb3dzKSAmJiB0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnNvcnRJY29uSGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUN1c3RvbVNvcnRpbmcoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZWRpdEFsbFJvd3MgJiYgdGhpcy5yb3dzRGF0YT8ubGVuZ3RoID4gMCAmJiB0aGlzLmNvbHVtbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRBbGxSb3dzQXRPbmNlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnNldERyb3Bkb3duZGF0YVZhbHVlID0gdHJ1ZTtcbiAgICAgIGNvbnN0IGdsb2JhbFNlYXJjaGJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnbG9iYWxTZWFyY2hidG4nKTtcbiAgICAgIGlmIChnbG9iYWxTZWFyY2hidG4pIHtcbiAgICAgICAgdGhpcy5zZWFyY2hHcmlkRmlsdGVyID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5yb3dzRGF0YT8ubGVuZ3RoID4gMCAmJiB0aGlzLmdlbmVyYXRlUm93c0RhdGFDb3B5KSB7XG4gICAgICAgIHRoaXMucm93c0RhdGFDb3B5ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnJvd3NEYXRhKSk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuc3RvcERpYWxvZ0Nsb3NlKSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdFJvd0NsaWNrKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucm93VXBkYXRlQ2hhbmdlID0gZmFsc2U7XG4gICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSBmYWxzZTtcblxuICB9XG5cbiAgaGFuZGxlQ3VzdG9tU29ydGluZygpIHtcbiAgICB0aGlzLlBhZ2VDaGFuZ2UgPSBmYWxzZTtcbiAgICBjb25zdCB7IGZpZWxkLCBkaXJlY3Rpb24gfSA9IHRoaXMuc29ydERhdGE7XG4gICAgaWYgKCFmaWVsZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgQVNDID0gZGlyZWN0aW9uID09PSBFR3JpZFNvcnREaXJlY3Rpb24uQVNDO1xuICAgIGNvbnN0IHNvcnRlZCA9IFsuLi50aGlzLnJvd3NEYXRhXS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBjb25zdCBub3JtYWxpemUgPSAodmFsOiBhbnkpID0+XG4gICAgICAgIHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCA/ICcnIDogU3RyaW5nKHZhbCkudHJpbSgpO1xuXG4gICAgICBjb25zdCBhVmFsID0gbm9ybWFsaXplKGFbZmllbGRdKTtcbiAgICAgIGNvbnN0IGJWYWwgPSBub3JtYWxpemUoYltmaWVsZF0pO1xuXG4gICAgICBjb25zdCBhRW1wdHkgPSBhVmFsID09PSAnJztcbiAgICAgIGNvbnN0IGJFbXB0eSA9IGJWYWwgPT09ICcnO1xuXG4gICAgICBpZiAoYUVtcHR5ICYmIGJFbXB0eSkgcmV0dXJuIDA7XG4gICAgICBpZiAoYUVtcHR5KSByZXR1cm4gQVNDID8gLTEgOiAxO1xuICAgICAgaWYgKGJFbXB0eSkgcmV0dXJuIEFTQyA/IDEgOiAtMTtcblxuICAgICAgY29uc3QgYU51bSA9IHBhcnNlRmxvYXQoYVZhbCk7XG4gICAgICBjb25zdCBiTnVtID0gcGFyc2VGbG9hdChiVmFsKTtcbiAgICAgIGlmICghaXNOYU4oYU51bSkgJiYgIWlzTmFOKGJOdW0pKSByZXR1cm4gQVNDID8gYU51bSAtIGJOdW0gOiBiTnVtIC0gYU51bTtcblxuICAgICAgcmV0dXJuIEFTQyA/IGFWYWwubG9jYWxlQ29tcGFyZShiVmFsKSA6IGJWYWwubG9jYWxlQ29tcGFyZShhVmFsKTtcbiAgICB9KTtcblxuICAgIHRoaXMucm93c0RhdGEgPSBzb3J0ZWQ7XG4gICAgdGhpcy50YWJsZS5zb3J0RmllbGQgPSBmaWVsZDtcbiAgICB0aGlzLnRhYmxlLnNvcnRPcmRlciA9IEFTQyA/IDEgOiAtMTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBzZXRMaW5rVGFiU2V0dGluZ3MoY29sdW1uOiBJR3JpZENvbHVtbikge1xuICAgIGNvbnN0IHVzZXJTZXR0aW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJVc2VyU2V0dGluZ1wiKTtcbiAgICBpZiAodXNlclNldHRpbmcpIHtcbiAgICAgIGNvbnN0IHBhcnNlZFNldHRpbmcgPSBKU09OLnBhcnNlKHVzZXJTZXR0aW5nKTtcbiAgICAgIGlmIChjb2x1bW4/LnRhcmdldFVzZVVzZXJQcmVmKSB7XG4gICAgICAgIGNvbHVtbi50YXJnZXQgPSBwYXJzZWRTZXR0aW5nPy52YWx1ZSA9PT0gXCJvcGVuTGlua0luQ3VycmVudFRhYlwiID8gRUdyaWRsaW5rLlNFTEYgOiBFR3JpZGxpbmsuQkxBTks7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0R3JpZElkKCkge1xuICAgIGxldCBjb3VudGVyID0gMDtcbiAgICBsZXQgdGFibGVzID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgncC10YWJsZScpO1xuICAgIGlmICh0YWJsZXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRhYmxlcy5mb3JFYWNoKCh0YWJsZSwgaW5kZXgpID0+IHtcbiAgICAgICAgdGFibGUuc2V0QXR0cmlidXRlKCdpZCcsIHRoaXMuY3VycmVudFVybCArIGNvdW50ZXIrKyk7XG4gICAgICB9KVxuICAgIH1cbiAgfVxuICBzZXRTZWxlY3RDb2x1bW5zKGNvbHVtbnMpIHtcbiAgICB0aGlzLl9zZWxlY3RlZENvbHVtbnMgPSBbXTtcbiAgICBjb2x1bW5zPy5mb3JFYWNoKCh4LCBpKSA9PiB7XG4gICAgICBpZiAoKHguc2hvdyA9PT0gdHJ1ZSB8fCB4LnNob3cgPT09IHVuZGVmaW5lZCkgJiYgIXguaGlkZGVuICYmICF4LnNob3dJbk1vcmUpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zW2ldKSB7XG4gICAgICAgICAgeC52YWx1ZSA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zW2ldLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkQ29sdW1ucy5wdXNoKHgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXV0b0NvbXBsZXRlU2VsZWN0ZWRWYWx1ZShyb3c6IGFueSwgY29sdW1uOiBJR3JpZENvbHVtbiwgdmFsdWUpIHtcbiAgICBpZiAoY29sdW1uLm9wdGlvbkxhYmVsKSB7XG4gICAgICBjb25zdCB2YWx1ZUtleSA9IGNvbHVtbi5vcHRpb25WYWx1ZSA/IGNvbHVtbi5vcHRpb25WYWx1ZSA6IGNvbHVtbi5maWVsZDtcbiAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gWy4uLnJvd1tjb2x1bW4uZmllbGRdLCB7XG4gICAgICAgIFtjb2x1bW4ub3B0aW9uTGFiZWw/LnRvTG93ZXJDYXNlKCldOiB2YWx1ZVtjb2x1bW4ub3B0aW9uTGFiZWw/LnRvTG93ZXJDYXNlKCldLCBbdmFsdWVLZXk/LnRvTG93ZXJDYXNlKCldOiB2YWx1ZVt2YWx1ZUtleT8udG9Mb3dlckNhc2UoKV0sXG4gICAgICAgIFtjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldOiB2YWx1ZVt2YWx1ZUtleT8udG9Mb3dlckNhc2UoKV1cbiAgICAgIH1dO1xuICAgICAgY29uc3QgaW5kZXggPSByb3dbY29sdW1uLmZpZWxkXT8uZmluZEluZGV4KCh4KSA9PiBKU09OLnN0cmluZ2lmeSh4KSA9PT0gSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcbiAgICAgIHJvd1tjb2x1bW4uZmllbGRdLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgLy8gc2V0IERpc3BsYXlUZXh0IHdoZW4gdmFsdWUgaXMgaW4gY3VybHkgYnJhY2tldHMuXG4gIHNldERpc3BsYXlUZXh0VmFsdWUoY29sdW1uOiBJR3JpZENvbHVtbikge1xuICAgIHRoaXMucm93c0RhdGE/LmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTksgfHxcbiAgICAgICAgRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyB8fFxuICAgICAgICBFR3JpZENvbHVtblR5cGUuSUZSQU1FXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXTtcbiAgICAgICAgaWYgKGNvbHVtbi5kaXNwbGF5VGV4dCAmJiBjb2x1bW4uZGlzcGxheVRleHQuaW5jbHVkZXMoJ3snKSkge1xuICAgICAgICAgIGNvbnN0IGRpc3BsYXlUZXh0ID0gY29sdW1uLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAucmVwbGFjZSgneycsICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoJ30nLCAnJyk7XG4gICAgICAgICAgaWYgKGRpc3BsYXlUZXh0ICYmIGZpZWxkKSB7XG4gICAgICAgICAgICBmaWVsZC5kaXNwbGF5VGV4dCA9IHJvd1tkaXNwbGF5VGV4dC50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmRpc3BsYXlUZXh0ICYmIGZpZWxkKSB7XG4gICAgICAgICAgZmllbGQuZGlzcGxheVRleHQgPSBjb2x1bW4uZGlzcGxheVRleHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldERpc3BsYXlGaWVsZFZhbHVlKGNvbHVtbjogSUdyaWRDb2x1bW4pIHtcbiAgICB0aGlzLnJvd3NEYXRhPy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTkspIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXTtcbiAgICAgICAgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICBjb25zdCBkaXNwbGF5RmllbGQgPSBjb2x1bW4uZGlzcGxheUZpZWxkO1xuICAgICAgICAgIGlmIChkaXNwbGF5RmllbGQgJiYgZmllbGQpIHtcbiAgICAgICAgICAgIGZpZWxkLmRpc3BsYXlGaWVsZCA9IHJvd1tkaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV07XG5cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCAmJiBmaWVsZCkge1xuICAgICAgICAgIGZpZWxkLmRpc3BsYXlGaWVsZCA9IGNvbHVtbi5kaXNwbGF5RmllbGQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uVGV4dGFyZWFCbHVyKGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdzogYW55KSB7XG4gICAgY29uc3QgaWQgPSBjb2x1bW4uZmllbGQgKyAnLScgKyByb3dbdGhpcy5kYXRhS2V5XTtcbiAgICBjb25zdCB0ZXh0YXJlYSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYHRleHRhcmVhW2RhdGEtY2VsbD1cIiR7aWR9XCJdYCkgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcblxuICAgIGlmICh0ZXh0YXJlYSkge1xuICAgICAgdGV4dGFyZWEuc3R5bGUuaGVpZ2h0ID0gJyc7XG4gICAgICB0ZXh0YXJlYS5zdHlsZS53aWR0aCA9ICcnO1xuICAgIH1cbiAgICB0aGlzLmVkaXRpbmdDZWxsID0gbnVsbDtcbiAgICB0aGlzLm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdyk7XG4gIH1cblxuICBvblRleHRhcmVhRW50ZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdzogYW55KSB7XG4gICAgaWYgKGV2ZW50LmN0cmxLZXkgJiYgZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5vblRleHRhcmVhQmx1cihjb2x1bW4sIHJvdyk7XG4gICAgfVxuICB9XG4gIG9uSW5wdXRGb2N1cyhjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSkge1xuICAgIGlmICh0aGlzLmVkaXRpbmdDZWxsICYmICF0aGlzLmVkaXRpbmdDZWxsLnN0YXJ0c1dpdGgoY29sdW1uLmZpZWxkKSkge1xuICAgICAgdGhpcy5lZGl0aW5nQ2VsbCA9IG51bGw7XG4gICAgfVxuICB9XG4gIHNldE51bWVyaWNNaW5GcmFjdGlvbihjb2x1bW46IGFueSkge1xuICAgIGxldCBtaW5GcmFjdGlvbkRpZ2l0cyA9IDI7XG4gICAgaWYgKGNvbHVtbj8uZm9ybWF0Py50eXBlID09PSAncGVyY2VudCcgJiYgIWNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/Lm1pbkZyYWN0aW9uRGlnaXRzICYmICFjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvKSB7XG4gICAgICBtaW5GcmFjdGlvbkRpZ2l0cyA9IDA7XG4gICAgfSBlbHNlIGlmIChjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5taW5GcmFjdGlvbkRpZ2l0cyAhPSBudWxsKSB7XG4gICAgICBtaW5GcmFjdGlvbkRpZ2l0cyA9IGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zLm1pbkZyYWN0aW9uRGlnaXRzO1xuICAgIH0gZWxzZSBpZiAoY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbykge1xuICAgICAgbWluRnJhY3Rpb25EaWdpdHMgPSBOdW1iZXIoY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMuZGlnaXRzSW5mbyk7XG4gICAgfVxuICAgIHJldHVybiBtaW5GcmFjdGlvbkRpZ2l0cztcbiAgfVxuXG4gIHNldE51bWVyaWNNYXhGcmFjdGlvbihjb2x1bW46IGFueSkge1xuICAgIGxldCBtYXhGcmFjdGlvbkRpZ2l0cyA9IDI7XG4gICAgaWYgKGNvbHVtbj8uZm9ybWF0Py50eXBlID09PSAncGVyY2VudCcgJiYgIWNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/Lm1heEZyYWN0aW9uRGlnaXRzICYmICFjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvKSB7XG4gICAgICBtYXhGcmFjdGlvbkRpZ2l0cyA9IDA7XG4gICAgfSBlbHNlIGlmIChjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5tYXhGcmFjdGlvbkRpZ2l0cyAhPSBudWxsKSB7XG4gICAgICBtYXhGcmFjdGlvbkRpZ2l0cyA9IGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zLm1heEZyYWN0aW9uRGlnaXRzO1xuICAgIH0gZWxzZSBpZiAoY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbykge1xuICAgICAgbWF4RnJhY3Rpb25EaWdpdHMgPSBOdW1iZXIoY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMuZGlnaXRzSW5mbyk7XG4gICAgfVxuICAgIHJldHVybiBtYXhGcmFjdGlvbkRpZ2l0cztcbiAgfVxuXG4gIC8vIHNldCB0aGUgZm9ybWF0IG9mIGN1cnJlbmN5ICYmIG51bWJlciAmJiBkZWNpbWFsICYmIHBlcmNlbnRcbiAgc2V0TnVtZXJpY0Zvcm1hdChjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcbiAgICByb3cgPSBvYmpDb252ZXJ0VG9Mb3dlcihyb3cpO1xuICAgIGxldCB2YWx1ZTogYW55ID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0XG4gICAgICA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgOiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgID8gcm93W3Jvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXG4gICAgICAgIDogcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgPyByb3dbY29sdW1uLmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXVxuICAgICAgICAgIDogKHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy50ZXh0IHx8IHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy50ZXh0ID09PSAwIHx8IHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy50ZXh0ID09PSBudWxsKVxuICAgICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8udGV4dCA6IHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldO1xuICAgIGlmICh0aGlzLnR5cGVPZih2YWx1ZSkgPT09ICdudW1iZXInICYmIHZhbHVlID09PSAwKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIGxldCBmb3JtYXRQYXJhbXMgPSBjb2x1bW4uZm9ybWF0Py5mb3JtYXRQYXJhbXM7XG4gICAgaWYgKGNvbHVtbi5mb3JtYXQgJiYgdmFsdWUgIT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChjb2x1bW4uZm9ybWF0Py50eXBlKSB7XG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLkNVUlJFTkNZOlxuICAgICAgICAgIHZhbHVlID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KFxuICAgICAgICAgICAgZm9ybWF0UGFyYW1zPy5sb2NhbGUgPyBmb3JtYXRQYXJhbXMubG9jYWxlIDogJ2VuLVVTJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3R5bGU6ICdjdXJyZW5jeScsXG4gICAgICAgICAgICAgIGN1cnJlbmN5OiBmb3JtYXRQYXJhbXM/LmN1cnJlbmN5ID8gZm9ybWF0UGFyYW1zLmN1cnJlbmN5IDogJ1VTRCcsXG4gICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogdGhpcy5zZXROdW1lcmljTWluRnJhY3Rpb24oY29sdW1uKSxcbiAgICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiB0aGlzLnNldE51bWVyaWNNYXhGcmFjdGlvbihjb2x1bW4pLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk/LmZvcm1hdCh2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLkRFQ0lNQUw6XG4gICAgICAgICAgdmFsdWUgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoXG4gICAgICAgICAgICBmb3JtYXRQYXJhbXM/LmxvY2FsZSA/IGZvcm1hdFBhcmFtcy5sb2NhbGUgOiAnZW4tVVMnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdHlsZTogJ2RlY2ltYWwnLFxuICAgICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IHRoaXMuc2V0TnVtZXJpY01pbkZyYWN0aW9uKGNvbHVtbiksXG4gICAgICAgICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogdGhpcy5zZXROdW1lcmljTWF4RnJhY3Rpb24oY29sdW1uKSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApPy5mb3JtYXQodmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVHcmlkRm9ybWF0VHlwZS5QRVJDRU5UOlxuICAgICAgICAgIHZhbHVlID0gdmFsdWUgKyAnJSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8vQ2hhbmdlIGRyb3Bkb3duIHZsdWUgYmFzZWQgb24gb3B0aW9uIGxhYmVsIGFuZCBvcHRpb252YWx1ZVxuICBzZXREcm9wZG93blZhbHVlKGNvbHVtbjogSUdyaWRDb2x1bW4sIHNlbGVjdGVkUm93PzogYW55LCBjaGFuZ2U/OiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMucm93c0RhdGEgJiYgdGhpcy5yb3dzRGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMocm93KT8uZmluZCgoa2V5KSA9PiBrZXkgPT09IGNvbHVtbi5maWVsZCkpIHtcbiAgICAgICAgICBpZiAoY29sdW1uKSB7XG4gICAgICAgICAgICBjb2x1bW4ub3B0aW9uTGFiZWwgPSBjb2x1bW4ub3B0aW9uTGFiZWxcbiAgICAgICAgICAgICAgPyBjb2x1bW4ub3B0aW9uTGFiZWxcbiAgICAgICAgICAgICAgOiAnbGFiZWwnO1xuICAgICAgICAgICAgY29sdW1uLm9wdGlvblZhbHVlID0gY29sdW1uLm9wdGlvblZhbHVlXG4gICAgICAgICAgICAgID8gY29sdW1uLm9wdGlvblZhbHVlXG4gICAgICAgICAgICAgIDogJ3ZhbHVlJztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBjb2x1bW4uZGF0YT8uZmluZChcbiAgICAgICAgICAgIChyZWNvcmQ6IGFueSkgPT5cbiAgICAgICAgICAgICAgcmVjb3JkW2NvbHVtbi5vcHRpb25WYWx1ZV0/LnRvU3RyaW5nKCkgPT09XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBlZGl0ZWRSb3cgPSBzZWxlY3RlZFJvdyAmJiBPYmplY3Qua2V5cyhzZWxlY3RlZFJvdykubGVuZ3RoID4gMCA/IHNlbGVjdGVkUm93W3RoaXMuZGF0YUtleV0gPT09IHJvd1t0aGlzLmRhdGFLZXldIDogZmFsc2U7XG4gICAgICAgICAgaWYgKHZhbHVlICYmIGVkaXRlZFJvdykge1xuICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSB2YWx1ZVtjb2x1bW4ub3B0aW9uVmFsdWVdO1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgY2hhbmdlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSB2YWx1ZVtjb2x1bW4ub3B0aW9uTGFiZWxdO1xuICAgICAgICAgICAgaWYgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddKSB7XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddWydvcHRpb25WYWx1ZSddID0gdmFsdWVbY29sdW1uLm9wdGlvblZhbHVlXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddID0geyBvcHRpb25WYWx1ZTogdmFsdWVbY29sdW1uLm9wdGlvblZhbHVlXSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy9tYW5pcHVsYXRlIGNoZWNrYm94IHN0cmluZyB2YWx1ZSB0byB0cnVlIGFuZCBmYWxzZS5cbiAgY2hhbmdlQ2hlY2tib3hTdHJpbmdWYWx1ZSgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbHVtbnMgJiZcbiAgICAgIHRoaXMucm93c0RhdGEgJiZcbiAgICAgIHRoaXMucm93c0RhdGEubGVuZ3RoID4gMCAmJlxuICAgICAgdGhpcy5jb2x1bW5zLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTiAmJiB0aGlzLnNldERyb3Bkb3duZGF0YVZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5zZXREcm9wZG93blZhbHVlKGNvbHVtbiwge30sIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTikge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAodHlwZW9mIChyb3dbY29sdW1uLmZpZWxkXSA9PT0gJ3N0cmluZycpICYmXG4gICAgICAgICAgICAgICAgKHJvd1tjb2x1bW4uZmllbGRdID09PSAnMScgfHwgcm93W2NvbHVtbi5maWVsZF0gPT09ICcwJykpIHx8XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID09PSAnWScgfHxcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPT09ICdOJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID1cbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9PT0gJzEnIHx8IHJvd1tjb2x1bW4uZmllbGRdID09PSAnWSdcbiAgICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSByb3dEYXRhXG4gICAqIFBhc3NlcyBkYXRhIG9mIGNsaWNrZWQgcm93IHRvIHBhcmVudFxuICAgKi9cbiAgaGFuZGxlUm93Q2xpY2socm93RGF0YTogYW55KSB7XG4gICAgdGhpcy5yb3dDbGlja0RhdGEgPSByb3dEYXRhO1xuICAgIGlmICghdGhpcy5lZGl0QWxsUm93cykge1xuICAgICAgdGhpcy5vblJvd0NsaWNrLmVtaXQocm93RGF0YSk7XG4gICAgICB0aGlzLnNlbGVjdGVkUm93UmVjb3JkID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8vIGludm9rZSBvblJvd0NsaWNrIGV2ZW50IHdoZW4gb25seSBvbmUgcmVjb3JkIGV4aXN0O1xuICBkZWZhdWx0Um93Q2xpY2soKSB7XG4gICAgbGV0IGRpYWxvZ0V4aXN0OiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdwLWRpYWxvZycpO1xuICAgIGlmICh0aGlzLmNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgdGhpcy5yb3dzRGF0YSAmJiB0aGlzLnJvd3NEYXRhLmxlbmd0aCA9PT0gMSAmJiB0aGlzLm9uUm93Q2xpY2sub2JzZXJ2ZXJzPy5sZW5ndGggJiYgdGhpcy5ncmlkU2VydmljZS51c2VyU2VhcmNoZWQgJiYgZGlhbG9nRXhpc3QubGVuZ3RoKSB7XG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlLnVzZXJTZWFyY2hlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDMpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZVJvd0NsaWNrKHRoaXMucm93c0RhdGFbMF0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBjb2x1bW5EYXRhXG4gICAqIFBhc3NlcyBzb3J0aW5nIGluZm9ybWF0aW9uIHRvIHBhcmVudCBvbiBzb3J0IGNoYW5nZVxuICAgKi9cbiAgaGFuZGxlU29ydENoYW5nZShldmVudDogYW55KSB7XG4gICAgbGV0IHNvcnREaXJlY3Rpb24gPSBudWxsO1xuICAgIGxldCBzb3J0RmllbGQ6IHN0cmluZyA9ICcnO1xuICAgIGlmIChldmVudC5tdWx0aXNvcnRtZXRhICYmIGV2ZW50Lm11bHRpc29ydG1ldGFbMF0ub3JkZXIgIT0gbnVsbCkge1xuICAgICAgc29ydERpcmVjdGlvbiA9XG4gICAgICAgIGV2ZW50Lm11bHRpc29ydG1ldGFbMF0ub3JkZXIgPT0gMVxuICAgICAgICAgID8gRUdyaWRTb3J0RGlyZWN0aW9uLkFTQ1xuICAgICAgICAgIDogRUdyaWRTb3J0RGlyZWN0aW9uLkRFU0M7XG4gICAgICBzb3J0RmllbGQgPSBldmVudC5tdWx0aXNvcnRtZXRhWzBdLmZpZWxkO1xuICAgIH1cbiAgICBsZXQgc29ydHM6IElHcmlkU29ydCA9IHtcbiAgICAgIGZpZWxkOiBzb3J0RmllbGQsXG4gICAgICBkaXJlY3Rpb246IHNvcnREaXJlY3Rpb24gYXMgRUdyaWRTb3J0RGlyZWN0aW9uLFxuICAgICAgcHJpb3JpdHk6IDAsXG4gICAgfTtcblxuICAgIGlmICghdGhpcy5wYWdpbmF0aW9uIHx8ICh0aGlzLnBhZ2luYXRpb24gJiYgIXRoaXMuZWRpdEFsbFJvd3MpKSB7XG4gICAgICB0aGlzLnNvcnREYXRhID0gc29ydHM7XG4gICAgICB0aGlzLmhhbmRsZUN1c3RvbVNvcnRpbmcoKTtcbiAgICB9XG4gICAgdGhpcy5vblNvcnRDaGFuZ2UuZW1pdChzb3J0cyk7XG4gIH1cblxuICBzaG91bGRSdW5TZXJ2ZXJTaWRlKGV2ZW50OiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoKGV2ZW50LnNvcnRGaWVsZCAmJiAhKHRoaXMucGFnaW5hdGlvbiAmJiB0aGlzLmVkaXRBbGxSb3dzKSAmJiAhdGhpcy5QYWdlQ2hhbmdlKSB8fCAoZXZlbnQubXVsdGlTb3J0TWV0YSAmJiBldmVudC5tdWx0aVNvcnRNZXRhLmxlbmd0aCAmJiAhKHRoaXMucGFnaW5hdGlvbiAmJiB0aGlzLmVkaXRBbGxSb3dzKSAmJiAhdGhpcy5QYWdlQ2hhbmdlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICgoZXZlbnQuc29ydEZpZWxkICYmICh0aGlzLnBhZ2luYXRpb24gJiYgIXRoaXMuZWRpdEFsbFJvd3MpICYmIHRoaXMuUGFnZUNoYW5nZSkgfHwgKGV2ZW50Lm11bHRpU29ydE1ldGEgJiYgZXZlbnQubXVsdGlTb3J0TWV0YS5sZW5ndGggJiYgKHRoaXMucGFnaW5hdGlvbiAmJiAhdGhpcy5lZGl0QWxsUm93cykgJiYgdGhpcy5QYWdlQ2hhbmdlKSkge1xuICAgICAgdGhpcy5oYW5kbGVTZXJ2ZXJTaWRlRXZlbnRzKGV2ZW50KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hdXRvTG9hZERhdGEgJiYgdGhpcy51c2VTZXJ2ZXJTaWRlRXZlbnRzO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBQYXNzZXMgYXBwbGllZCBmaWx0ZXJzIHRvIHBhcmVudCBvbiBmaWx0ZXIgY2hhbmdlXG4gICAqL1xuICBoYW5kbGVGaWx0ZXJDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChmaWx0ZXI6IGFueSkgPT4ge1xuICAgICAgaWYgKCFldmVudC5maWx0ZXJzW2ZpbHRlci5maWVsZF0/LnZhbHVlICYmICFmaWx0ZXIudmFsdWUpIHtcbiAgICAgICAgZmlsdGVyLnZhbHVlID0gJyc7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5vbkZpbHRlckNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgOiBFdmVudFxuICAgKiBAcGFyYW0gY29sdW1uQWN0aW9uIDogSUdyaWRDb2x1bW5BY3Rpb25cbiAgICogQHBhcmFtIHJvdyA6IGFueVxuICAgKiBTdG9wIHRoZSBjbGljayBldmVudCBwcm9wYWdhdGlvbiB0byBwYXJlbnRcbiAgICogQ2FsbGJhY2tzIHRoZSByb3cgZGF0YSB0byBwYXJlbnRcbiAgICovXG5cbiAgLyoqXG4gICAqIGludm9rZSBvbkNsaWNrIGV2ZW50ICYgb3BlbiBJZnJhbWUgaW4gZ3JpZFxuICAgKi9cbiAgZ3JpZElGcmFtZShjb2x1bW46IGFueSwgcm93czogYW55LCByb3c6IGFueSkge1xuICAgIHRoaXMub25DbGlja0V2ZW50KGNvbHVtbiwgcm93KTtcbiAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihJZnJhbWVDb21wb25lbnQsIHtcbiAgICAgIGhlYWRlcjogY29sdW1uLmhlYWRlcixcbiAgICAgIHdpZHRoOiAnODAlJyxcbiAgICAgIGhlaWdodDogJzgwJScsXG4gICAgICBjbG9zYWJsZTogdHJ1ZSxcbiAgICAgIGZvY3VzT25TaG93OiBmYWxzZSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdmFsdWU6IHJvd3MsXG4gICAgICAgIGlGcmFtZUlkOiBjb2x1bW4uZGlzcGxheVRleHQgPyBjb2x1bW4uZGlzcGxheVRleHQgOiBjb2x1bW4uZmllbGQsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRoaXMuc2V0RHluYW1pY0RpYWxvZ1JlZihyZWYpO1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBjb2x1bW4uY29tcG9uZW50Py5uYW1lO1xuICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICB0aGlzLnBhZ2VMb2dnZXJTZXJ2aWNlLnNhdmVQYWdlTG9nZ2VySW5mbyh0aGlzLnJvdXRlci51cmw/LnN1YnN0cmluZygxKSwgY29tcG9uZW50TmFtZSk7XG4gICAgfVxuICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgZHJhZ2dhYmxlRGlhbG9nKGNvbHVtbj8uZmllbGQgPyBjb2x1bW4/LmZpZWxkIDogY29sdW1uPy5oZWFkZXIpXG4gICAgICB9KTtcbiAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgaWYgKHJlcyAmJiBjb2x1bW4ub25SZXR1cm4pIHtcbiAgICAgICAgY29sdW1uLm9uUmV0dXJuKHJlcyk7XG4gICAgICB9IGVsc2UgaWYgKHJlcyAmJiBjb2x1bW4ub25DaGFuZ2UpIHtcbiAgICAgICAgY29sdW1uLm9uQ2hhbmdlKHJlcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhZGROZXdSb3cocm93OiBhbnksIGFkZFJvdzogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5yZWZyZXNoR3JpZFRlcm1pbmF0b3IoKTtcbiAgICB0aGlzLmNvbXBvbmVudFRhYmxlUmVmID0gdGhpcy50YWJsZTtcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgaWYgKGNvbC5maWx0ZXI/LnR5cGUgPT09ICdjYWxlbmRhcicgJiYgY29sLmNvbXBvbmVudCkge1xuICAgICAgICAoYWRkUm93ID8gdGhpcy5yb3dzRGF0YVswXSA6IHJvdylbY29sLmZpZWxkICsgJ19zZWNvbmRUeXBlJ10gPSBFR3JpZENvbHVtblR5cGUuREFURTtcbiAgICAgIH1cbiAgICAgIGlmIChjb2wuYWdncmVnYXRlPy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5hZ2dyZWdhdGVGb290ZXIgPSB0cnVlO1xuICAgICAgICB0aGlzLnNldEFnZ3JlZ2F0ZVRleHQoY29sKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGlvblR5cGUgPT09IEVHcmlkU2VsZWN0aW9uVHlwZS5NVUxUSVBMRSAmJiB0aGlzLmF1dG9DaGVja05ld1Jvdykge1xuICAgICAgY29uc3QgYWRkZWRSb3cgPSB0aGlzLnJvd3NEYXRhICYmIHRoaXMucm93c0RhdGFbMF07XG4gICAgICBpZiAoYWRkZWRSb3cgJiYgIWFkZGVkUm93Ll9pc0VkaXRlZCkge1xuICAgICAgICBhZGRlZFJvdy5faXNFZGl0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkUm93cykgdGhpcy5zZWxlY3RlZFJvd3MgPSBbXTtcblxuICAgICAgaWYgKGFkZGVkUm93ICYmICF0aGlzLnNlbGVjdGVkUm93cy5zb21lKHIgPT4gci5pZCA9PT0gYWRkZWRSb3cuaWQpKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gWy4uLnRoaXMuc2VsZWN0ZWRSb3dzLCBhZGRlZFJvd107XG4gICAgICB9XG4gICAgICB0aGlzLmNoZWNrbGlzdCA9IFsuLi50aGlzLnNlbGVjdGVkUm93c107XG4gICAgICB0aGlzLnJvd0NsaWNrRGF0YSA9IGFkZGVkUm93O1xuICAgICAgdGhpcy5hZGROZXdSb3dDaGVjayA9IHRydWU7XG4gICAgICB0aGlzLmRyb3Bkb3duSW5wdXQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc29ydERpc2FibGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMub25NdWx0aVNlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKVxuICAgICAgdGhpcy5yb3dzQ2hhbmdlLmVtaXQodGhpcy5yb3dzRGF0YSk7XG4gICAgICB0aGlzLm9uR3JpZFJvd0FkZC5lbWl0KGFkZGVkUm93KTtcblxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvd0NsaWNrRGF0YSA9IHJvdztcbiAgICAgIHRoaXMuYWRkTmV3Um93Q2hlY2sgPSB0cnVlO1xuICAgICAgdGhpcy5kcm9wZG93bklucHV0ID0gZmFsc2U7XG4gICAgICB0aGlzLnNvcnREaXNhYmxlZCA9IHRydWU7XG4gICAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICAgIHRoaXMub25HcmlkUm93QWRkLmVtaXQocm93KTtcbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBvcGVuIERpYWxvZyBpbiBncmlkXG4gICAqL1xuICBvcGVuR3JpZERpYWxvZyhjb2x1bW46IElHcmlkQ29sdW1uIHwgYW55LCByb3c6IGFueSwgZXZlbnQ/OiBhbnkpIHtcbiAgICBjb25zdCBkYXRhUGFyYW1zID0gY29sdW1uLmRhdGE/LmRhdGEgPyBjb2x1bW4uZGF0YT8uZGF0YSA6IHt9O1xuICAgIGlmICgoZXZlbnQgJiYgZXZlbnQuY3RybEtleSkgfHwgY29sdW1uLm9wZW5Jbk5ld1RhYikge1xuICAgICAgdGhpcy5oeXBlcmxpbmtTZXJ2aWNlLm9wZW5EaWFsb2dJbk5ld1RhYihjb2x1bW4uY29tcG9uZW50LCBkYXRhUGFyYW1zLCByb3cpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMub3BlbkNvbXBvbmVudEluRGlhbG9nKGNvbHVtbiwgcm93KTtcbiAgICB9XG4gIH1cblxuICBvcGVuQ29tcG9uZW50SW5EaWFsb2coY29sdW1uOiBJR3JpZENvbHVtbiB8IGFueSwgcm93OiBhbnkpIHtcbiAgICB2YXIgaXNEaXNhYmxlZCA9IGNvbHVtbi5kaXNhYmxlZFxuICAgICAgPyB0cnVlXG4gICAgICA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNhYmxlZFxuICAgICAgICA/IHRydWVcbiAgICAgICAgOiBmYWxzZTtcbiAgICB0aGlzLm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdyk7XG4gICAgbGV0IGRhdGE6IGFueSA9IHt9O1xuICAgIGRhdGEgPSB7IC4uLmNvbHVtbj8uZGF0YSB9O1xuICAgIHRoaXMucm93Q2xpY2tEYXRhID0gcm93O1xuICAgIGlmIChkYXRhICYmIGRhdGEuZGF0YSAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8ubWF0Y2hEYXRhKSB7XG4gICAgICBkYXRhLmRhdGEgPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlhbG9nRGF0YT8uZGF0YSA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaWFsb2dEYXRhLmRhdGEgOiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlhbG9nRGF0YTtcbiAgICB9XG5cbiAgICBpZiAoY29sdW1uLmNvbXBvbmVudCAmJiB0aGlzLnJvd0NsaWNrRGF0YSAmJiAhaXNEaXNhYmxlZCkge1xuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgZGF0YS5kYXRhID0gYXV0b1NldExvb2t1cERhdGEoXG4gICAgICAgICAgZGF0YS5kYXRhLFxuICAgICAgICAgIHRoaXMucm93Q2xpY2tEYXRhXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBkYXRhID0geyAuLi5kYXRhLCBoZWlnaHQ6IGRhdGEuaGVpZ2h0ID8gZGF0YS5oZWlnaHQgOiAnOTB2aCcsIGNsb3NhYmxlOiB0cnVlLCBmb2N1c09uU2hvdzogZmFsc2UgfVxuICAgICAgY29uc3Qgb2JqRmllbGQgPSBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyBcIl9vYmpcIjtcbiAgICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4ocm93W29iakZpZWxkXSAmJiByb3dbb2JqRmllbGRdPy5jb21wb25lbnQgPyByb3dbb2JqRmllbGRdPy5jb21wb25lbnQgOiBjb2x1bW4uY29tcG9uZW50LCBkYXRhKTtcblxuICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgICAgLnBpcGUodGFrZSgxKSkgLy8gRW1pdCBvbmx5IG9uY2Ugd2hlbiB0aGUgem9uZSBiZWNvbWVzIHN0YWJsZVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmRpYWxvZ1JlZlsnZGlhbG9nQ2xvc2UnXSA9IHRoaXMuZGlhbG9nUmVmLmNsb3NlO1xuICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlID0gdGhpcy5pbnRlcmNlcHREaWFsb2dDbG9zZS5iaW5kKHRoaXMsIHRoaXMuZGlhbG9nUmVmKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gICB0aGlzLmRpYWxvZ1JlZlsnZGlhbG9nQ2xvc2UnXSA9IHRoaXMuZGlhbG9nUmVmLmNsb3NlO1xuICAgICAgLy8gICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSA9IHRoaXMuaW50ZXJjZXB0RGlhbG9nQ2xvc2UuYmluZCh0aGlzKTtcbiAgICAgIC8vIH0sIDgwMCk7XG5cbiAgICAgIHRoaXMuc2V0RHluYW1pY0RpYWxvZ1JlZih0aGlzLmRpYWxvZ1JlZik7XG4gICAgICBjb25zdCBjb21wb25lbnROYW1lID0gY29sdW1uLmNvbXBvbmVudD8ubmFtZTtcbiAgICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICAgIHRoaXMucGFnZUxvZ2dlclNlcnZpY2Uuc2F2ZVBhZ2VMb2dnZXJJbmZvKHRoaXMucm91dGVyLnVybD8uc3Vic3RyaW5nKDEpLCBjb21wb25lbnROYW1lKTtcbiAgICAgIH1cbiAgICAgIGlmIChjb2x1bW4uZHJhZ2dhYmxlIHx8IGNvbHVtbi5kcmFnZ2FibGUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAgICAgLnBpcGUodGFrZSgxKSkgLy8gRW1pdCBvbmx5IG9uY2Ugd2hlbiB0aGUgem9uZSBiZWNvbWVzIHN0YWJsZVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgZHJhZ2dhYmxlRGlhbG9nKGNvbHVtbj8uZmllbGQgPyBjb2x1bW4/LmZpZWxkIDogY29sdW1uPy5oZWFkZXIpXG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmRpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGlmIChkYXRhICYmIGNvbHVtbi5vblJldHVybikge1xuICAgICAgICAgIGNvbHVtbi5vblJldHVybihkYXRhLCB0aGlzLnJvd0NsaWNrRGF0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSkge1xuICAgICAgICAgIHRoaXMuYnJvd3NlckNsb3NlRXZlbnQodHJ1ZSk7XG4gICAgICAgICAgaWYgKGNvbHVtbi5vbkNoYW5nZSkge1xuICAgICAgICAgICAgY29sdW1uLm9uQ2hhbmdlKGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYnJvd3NlckNsb3NlRXZlbnQoZXZlbnQ6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCA9IGV2ZW50O1xuICB9XG5cbiAgc2V0TXVsdGlTZWxlY3REYXRhKGNvbHVtbjogSUdyaWRDb2x1bW4sIHNlbGVjdGVkVmFsdWU6IGFueSkge1xuICAgIGlmIChzZWxlY3RlZFZhbHVlICYmIGNvbHVtbi50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5NVUxUSVNFTEVDVCkge1xuICAgICAgaWYgKHNlbGVjdGVkVmFsdWUgJiYgc2VsZWN0ZWRWYWx1ZT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJywnKSkge1xuICAgICAgICBzZWxlY3RlZFZhbHVlID0gc2VsZWN0ZWRWYWx1ZT8udG9TdHJpbmcoKT8uc3BsaXQoJywnKT8ubWFwKCh2YWx1ZSkgPT4gY29sdW1uLmRhdGE/LmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlPy50b1N0cmluZygpID09PSB2YWx1ZT8udG9TdHJpbmcoKSk/LmxhYmVsKT8udG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGVjdGVkVmFsdWUgPSBjb2x1bW4uZGF0YT8uZmluZCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWU/LnRvU3RyaW5nKCkgPT09IHNlbGVjdGVkVmFsdWU/LnRvU3RyaW5nKCkpPy5sYWJlbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNlbGVjdGVkVmFsdWU7XG4gIH1cbiAgYXV0b0dyb3coZXZlbnQ6IEV2ZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudCkge1xuICAgIGNvbnN0IHRleHRhcmVhID0gZXZlbnQgaW5zdGFuY2VvZiBFdmVudCA/IGV2ZW50LnRhcmdldCBhcyBIVE1MVGV4dEFyZWFFbGVtZW50IDogZXZlbnQ7XG4gICAgaWYgKHRleHRhcmVhKSB7XG4gICAgICB0ZXh0YXJlYS5zdHlsZS5oZWlnaHQgPSAnYXV0byc7XG4gICAgICB0ZXh0YXJlYS5zdHlsZS5oZWlnaHQgPSB0ZXh0YXJlYS5zY3JvbGxIZWlnaHQgKyAncHgnO1xuICAgIH1cbiAgfVxuXG5cbiAgc2V0VGV4dEJveFJlYWRPbmx5VmFsdWUocm93OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgbGV0IHZhbHVlOiBhbnk7XG4gICAgaWYgKGNvbHVtbi5kaXNwbGF5VGV4dCkge1xuICAgICAgdmFsdWUgPSBjb2x1bW4uZGlzcGxheVRleHQ7XG4gICAgfSBlbHNlIGlmIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHQpIHtcbiAgICAgIHZhbHVlID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0O1xuICAgIH0gZWxzZSBpZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZCkge1xuICAgICAgdmFsdWUgPSByb3dbcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV07XG4gICAgfSBlbHNlIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkKSB7XG4gICAgICB2YWx1ZSA9IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSByb3dbY29sdW1uLmZpZWxkXTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIHJldHVybiBjb25kaXRpb25hbCBiYXNlIHZhbHVlIGFuZCB0aXRsZVxuICAgKi9cbiAgc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdzogYW55LCBjb2x1bW46IGFueSkge1xuICAgIGRlbGV0ZSByb3dbJ3VuZGVmaW5lZCddO1xuICAgIGxldCB2YWx1ZTogYW55O1xuICAgIGlmIChjb2x1bW4udHlwZSA9PSBFR3JpZENvbHVtblR5cGUuREFURSkge1xuICAgICAgbGV0IG5ld1ZhbHVlOiBhbnk7XG4gICAgICBpZiAodHlwZW9mIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSkgPT09IFwib2JqZWN0XCIgJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10pIHtcbiAgICAgICAgbmV3VmFsdWUgPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHRcbiAgICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgICAgIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgPyByb3dbcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgIDogcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LnRleHRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1ZhbHVlID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXdWYWx1ZSkge1xuICAgICAgICBpZiAoY29sdW1uLnRpbWVPbmx5KSB7XG4gICAgICAgICAgdmFsdWUgPSB0aGlzLnNldFRpbWVGb3JtYXQobmV3VmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBmb3JtYXQgPSB0aGlzLnNldEZvcm1hdChjb2x1bW4pO1xuICAgICAgICAgIHZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0obmV3VmFsdWU/LnRvU3RyaW5nKCkgPT09IFwiSW52YWxpZCBEYXRlXCIgPyBudWxsIDogbmV3VmFsdWUsIGZvcm1hdCA/IGZvcm1hdCA6IGNvbHVtbi5zaG93VGltZSA/IFwiTU0vZGQvWVlZWSwgaDptbSBhXCIgOiBcIk1NL2RkL3l5eXlcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPVxuICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHRcbiAgICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5mb3JtYXQgPyB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dCwgdGhpcy5zZXRGb3JtYXQoY29sdW1uKSkgOlxuICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0XG4gICAgICAgICAgOiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICA/IHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSAhPSB1bmRlZmluZWQgPyByb3dbcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZF0gOiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkXG4gICAgICAgICAgICA6IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXVxuICAgICAgICAgICAgICA/IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXVxuICAgICAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddICYmXG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQgPT09IG51bGwgJiYgY29sdW1uLnR5cGUgIT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0dcbiAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgOiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgIGNvbHVtbj8uZmlsdGVyPy50eXBlID09PSAnY2FsZW5kYXInICYmIGNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyA/XG4gICAgICAgICAgICAgICAgICAgIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dC50b1N0cmluZygpLmluY2x1ZGVzKCdBTScpIHx8IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1BNJykpID9cbiAgICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dCA6IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0LCAnaGg6bW0gYScpXG4gICAgICAgICAgICAgICAgICAgIDogY29sdW1uLmZvcm1hdCA/IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0LCB0aGlzLnNldEZvcm1hdChjb2x1bW4pKSA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgICA6IGNvbHVtbi5mb3JtYXQgPyB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyb3dbY29sdW1uLmZpZWxkXSwgdGhpcy5zZXRGb3JtYXQoY29sdW1uKSlcbiAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgICAgICA/IGNvbHVtbi5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgICAgIDogY29sdW1uLmljb24gPyBjb2x1bW4uaGVhZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgc2V0Rm9ybWF0KGNvbHVtbikge1xuICAgIGxldCBmb3JtYXQgPSAnJztcbiAgICBpZiAoY29sdW1uPy5mb3JtYXQpIHtcbiAgICAgIGNvbHVtbi5mb3JtYXQgPSBjb2x1bW4uZm9ybWF0Py50eXBlID8gY29sdW1uLmZvcm1hdC50eXBlIDogY29sdW1uLmZvcm1hdDtcbiAgICAgIHN3aXRjaCAoY29sdW1uLmZvcm1hdCkge1xuICAgICAgICBjYXNlIEVHcmlkRm9ybWF0VHlwZS5TTUFMTERBVEU6IHtcbiAgICAgICAgICBmb3JtYXQgPSAnTU0vZGQveXknO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLlNIT1JUREFURToge1xuICAgICAgICAgIGZvcm1hdCA9ICdNTS9kZC95eXl5JztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIEVHcmlkRm9ybWF0VHlwZS5NRURJVU1EQVRFOiB7XG4gICAgICAgICAgZm9ybWF0ID0gJ00gZCwgeXknO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLkxPTkdEQVRFOiB7XG4gICAgICAgICAgZm9ybWF0ID0gJ01NL2RkL3l5LCBoOm1tIGEnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLlBFUklPRDoge1xuICAgICAgICAgIGZvcm1hdCA9ICdNTS95eSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGZvcm1hdCA9IGNvbHVtbi5mb3JtYXQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZvcm1hdFxuICB9XG5cbiAgc2V0RHJvcGR3b25SZWFkT25seVZhbHVlKHJvdzogYW55LCBjb2x1bW46IGFueSkge1xuICAgIGRlbGV0ZSByb3dbJ3VuZGVmaW5lZCddO1xuICAgIGNvbnN0IHZhbHVlID0gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdXG4gICAgICA/IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXVxuICAgICAgOiBjb2x1bW4uZGF0YT8uZmluZChkcm9wZG93blZhbCA9PiBkcm9wZG93blZhbD8udmFsdWUgPT0gcm93W2NvbHVtbi5maWVsZF0pXG4gICAgICAgID8gY29sdW1uLmRhdGE/LmZpbmQoZHJvcGRvd25WYWwgPT4gZHJvcGRvd25WYWw/LnZhbHVlID09IHJvd1tjb2x1bW4uZmllbGRdKT8ubGFiZWxcbiAgICAgICAgOiByb3dbY29sdW1uLmZpZWxkXTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBvblJvd1Jlb3JkZXIoZXZlbnQpIHtcbiAgICB0aGlzLm9uUm93T3JkZXJDaGFuZ2VkLmVtaXQodGhpcy5yb3dzRGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBEZWxldGUgQ29uZmlybWF0aW9uIGRpYWxvZyB3aGVuIGNsaWNrIG9uIGRlbGV0ZSBpY29uIGluIEFjdGlvbiBjb2x1bW5cbiAgICovXG4gIGhhbmRsZUFjdGlvbkNsaWNrKGV2ZW50OiBFdmVudCwgY29sdW1uQWN0aW9uOiBJR3JpZENvbHVtbkFjdGlvbiwgcm93OiBhbnkpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB2YXIgbWVzc2FnZTogc3RyaW5nO1xuICAgIGlmIChyb3cuY2hpbGRmb2xkZXJjb3VudCA+IDApIHtcbiAgICAgIG1lc3NhZ2UgPSBgRGVsZXRpbmcgdGhpcyBmb2xkZXIgd2lsbCBhbHNvIGRlbGV0ZSAke3Jvdy5jaGlsZGZvbGRlcmNvdW50fSBjaGlsZCBmb2xkZXIke3Jvdy5jaGlsZGZvbGRlcmNvdW50ID4gMSA/ICdzJyA6ICcnfSBhbG9uZyB3aXRoIGFsbCBhc3NvY2lhdGVkIGRvY3VtZW50cy4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHByb2NlZWQ/YDtcbiAgICB9XG4gICAgaWYgKGNvbHVtbkFjdGlvbi50b29sdGlwLnRvTG93ZXJDYXNlKCkgPT09ICdkZWxldGUnKSB7XG4gICAgICBpZiAoY29sdW1uQWN0aW9uLmNvbmZpcm1EaWFsb2cgPT09IGZhbHNlKSB7XG4gICAgICAgIGNvbHVtbkFjdGlvbi5vbkNsaWNrKHJvdyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICAgICAgbWVzc2FnZTogbWVzc2FnZSA/PyAnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgcmVjb3JkPycsXG4gICAgICAgICAgaGVhZGVyOiAnRGVsZXRlIENvbmZpcm1hdGlvbicsXG4gICAgICAgICAgaWNvbjogJ3BpIHBpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJyxcbiAgICAgICAgICBrZXk6ICdoYW5kbGVjb2x1bW5BY3Rpb25zJyxcbiAgICAgICAgICBhY2NlcHQ6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbHVtbkFjdGlvbi5vbkNsaWNrKHJvdyk7XG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY2xvc2UoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlamVjdDogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbHVtbkFjdGlvbi5vbkNsaWNrKHJvdyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCA6IExhenlMb2FkRXZlbnRcbiAgICogVHJpZ2dlcnMgZXZlcnl0aW1lIGEgc2VydmVyIHNpZGUgZmlsdGVyIGlzIHRyaWdnZXJcbiAgICovXG4gIGhhbmRsZVNlcnZlclNpZGVFdmVudHMoZXZlbnQ6IGFueSwgZHQ6IGFueSA9ICcnKSB7XG4gICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmlzU2VydmVyU2lkZUV2ZW50SW5pdGFsVHJpZ2dlcmVkKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW5zPy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRHcmlkSWQoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZGZpbHRlciA9IGV2ZW50O1xuXG4gICAgICAgICAgICBpZiAoZHQ/LmVsPy5uYXRpdmVFbGVtZW50Py5pZCkge1xuICAgICAgICAgICAgICB0aGlzLmdyaWRJZCA9IGR0LmVsLm5hdGl2ZUVsZW1lbnQuaWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sdW1ucyAmJiB0aGlzLnNlbGVjdGVkQ29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKHg6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChldmVudD8uZmlsdGVyc1t4LmZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgZXZlbnQuZmlsdGVyc1t4LmZpZWxkXS52YWx1ZSA9IHgudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUID8geC5maWx0ZXJWYWx1ZT8udG9TdHJpbmcoKSA6IHgudHlwZSA9PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmIHguaGFzT3duUHJvcGVydHkoJ2ZpbHRlclZhbHVlX29iaicpID8geFsnZmlsdGVyVmFsdWVfb2JqJ10/LnZhbHVlIDogeC5maWx0ZXJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0aGlzLmF1dG9Mb2FkRGF0YTtcbiAgICAgICAgICAgIHRoaXMuc2VydmVyRmlsdGVycyA9IHtcbiAgICAgICAgICAgICAgZmlsdGVyczogdGhpcy5sb29rdXBGaWx0ZXJzXG4gICAgICAgICAgICAgICAgPyB0aGlzLmdyaWRTZXJ2aWNlLmdldEdyaWRGaWx0ZXJzKGV2ZW50LCB0aGlzLnNlbGVjdGVkQ29sdW1ucylcbiAgICAgICAgICAgICAgICA6IHRoaXMuZ3JpZFNlcnZpY2UucHJlcGFyZUJhc2ljRmlsdGVycyhldmVudCwgdGhpcy5zZWxlY3RlZENvbHVtbnMpLFxuICAgICAgICAgICAgICBzb3J0czogdGhpcy5ncmlkU2VydmljZS5nZXRHcmlkU29ydHMoZXZlbnQsIHRoaXMuc2VsZWN0ZWRDb2x1bW5zKSxcbiAgICAgICAgICAgICAgLi4uKHRoaXMucGFnaW5hdGlvbiAmJiB7XG4gICAgICAgICAgICAgICAgcGFnZTogdGhpcy5ncmlkU2VydmljZS5nZXRHcmlkUGFnaW5hdGlvbihldmVudCksXG4gICAgICAgICAgICAgICAgcGFnZVNpemU6IGV2ZW50LnJvd3MgfHwgMTAsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0aGlzLnNlcnZlckZpbHRlcnM/LmZpbHRlcnMgJiZcbiAgICAgICAgICAgICAgdGhpcy5zZXJ2ZXJGaWx0ZXJzPy5maWx0ZXJzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgKHRoaXMuYWxsb3dDYWNoaW5nIHx8IHRoaXMuc29mdENhY2hpbmcpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLnNvZnRDYWNoaW5nICYmIHRoaXMudGFibGU/LmlkKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ1NldEZpbHRlcnMtJyArIHRoaXMudGFibGU/LmlkICsgdGhpcy5jdXJyZW50VXJsLCBKU09OLnN0cmluZ2lmeSh0aGlzLnNlcnZlckZpbHRlcnMpKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3RoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsXSA9IHRoaXMuc2VydmVyRmlsdGVycztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNlcnZlckZpbHRlclZhbHVlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zZXJ2ZXJGaWx0ZXJzKSk7XG4gICAgICAgICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycyA9ICh0aGlzLnNlcnZlckZpbHRlcnMuZmlsdGVycyB8fCBbXSkuY29uY2F0KHRoaXMuZ2xvYmFsRGF0YSk7XG5cbiAgICAgICAgICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLnJvd1VwZGF0ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBsZXQgY29udGFpbnNFbXB0eUZpZWxkID0gdHJ1ZTtcbiAgICAgICAgICAgIHdoaWxlIChjb250YWluc0VtcHR5RmllbGQpIHtcbiAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycy5maW5kSW5kZXgoKGZpbHRlcikgPT4gIWZpbHRlci5maWVsZCk7XG4gICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb250YWluc0VtcHR5RmllbGQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm9uU2VydmVyU2lkZUV2ZW50Q2hhbmdlLmVtaXQoc2VydmVyRmlsdGVyVmFsdWVzKTtcbiAgICAgICAgICAgIHRoaXMuaXNTZXJ2ZXJTaWRlRXZlbnRJbml0YWxUcmlnZ2VyZWQubmV4dCgnJyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cblxuXG4gIC8vc2V0IGdyaWQgaWQgb24gcGFnZSBsb2FkIGZvciBsb2FkIGNvbHVtbiB3aWR0aHNcbiAgc2V0Q2xhc3NhQW5kSWQoZHQ6IGFueSkge1xuICAgIGlmIChkdD8uZWw/Lm5hdGl2ZUVsZW1lbnQ/LmlkKSB7XG4gICAgICB0aGlzLmdyaWRJZCA9IGR0LmVsLm5hdGl2ZUVsZW1lbnQuaWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLmhvcml6b250YWxTY3JvbGwpIHtcbiAgICAgIHJldHVybiB7ICdob3Jpem9udGFsLXNjcm9sbCc6IHRydWUgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4geyAnaG9yaXpvbnRhbC1zY3JvbGwnOiBmYWxzZSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBQYXNzZXMgYXBwbGllZCBwYWdpbmF0aW9uIHRvIHBhcmVudCBvbiBwYWdlIGNoYW5nZVxuICAgKi9cbiAgaGFuZGxlU2VydmVyU2lkZVBhZ2luYXRpb24oZXZlbnQ6IElHcmlkUGFnaW5hdGlvbkV2ZW50KSB7XG4gICAgdGhpcy5lZGl0aW5nUm93S2V5cyA9IHt9O1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSBldmVudC5maXJzdDtcbiAgICB0aGlzLlBhZ2VDaGFuZ2UgPSB0cnVlO1xuICAgIGlmICh0aGlzLnBhZ2luYXRpb24gJiYgdGhpcy5yZW1haW5pbmdSb3dzRGF0YT8ubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5yZW1haW5pbmdSb3dzRGF0YSA9IFtdO1xuICAgIH1cbiAgICB0aGlzLm9uUGFnZUNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgLnBpcGUodGFrZSgxKSkgLy8gRW1pdCBvbmx5IG9uY2Ugd2hlbiB0aGUgem9uZSBiZWNvbWVzIHN0YWJsZVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy51c2VTZXJ2ZXJTaWRlRXZlbnRzICYmIHRoaXMucGFnaW5hdGlvbiAmJiB0aGlzLmRlZmF1bHRSb3dzICYmIHRoaXMuZWRpdEFsbFJvd3MgJiYgdGhpcy5yb3dzRGF0YT8ubGVuZ3RoID4gMCAmJiB0aGlzLmNvbHVtbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmVkaXRBbGxSb3dzQXRPbmNlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgc2VsZWN0ZWRSb3cocm93OiBhbnkpIHtcbiAgICB0aGlzLm9uUm93Q2hlY2tCb3guZW1pdChyb3cpO1xuICB9XG5cbiAgLy8gc2V0IHRpbWUgZm9ybWF0XG4gIHNldFRpbWVGb3JtYXQoZGF0ZTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIGRhdGUgPT09ICdudW1iZXInIHx8ICh0eXBlb2YgZGF0ZSA9PT0gJ3N0cmluZycgJiYgIWlzTmFOKE51bWJlcihkYXRlKSkpKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0ZVN0cmluZyA9IGRhdGU/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgaXNUaW1lSW5BTSA9IHRoaXMuY2hlY2tUaW1lRm9ybWF0KGRhdGUsICdhbScpO1xuICAgIGNvbnN0IGlzVGltZUluUE0gPSB0aGlzLmNoZWNrVGltZUZvcm1hdChkYXRlLCAncG0nKTtcbiAgICBjb25zdCBpc1RJbmNsdWRlID0gdGhpcy5jaGVja1RpbWVGb3JtYXQoZGF0ZSwgJ3QnKTtcblxuICAgIGlmICgoaXNUaW1lSW5BTSB8fCBpc1RpbWVJblBNKSAmJiAoIWlzVEluY2x1ZGUpKSB7XG4gICAgICByZXR1cm4gZGF0ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY2hlY2tUaW1lRm9ybWF0KGRhdGUsICc6JykgJiYgKCFpc1RpbWVJbkFNICYmICFpc1RpbWVJblBNICYmICFpc1RJbmNsdWRlKSkge1xuICAgICAgY29uc3QgW2hvdXJzLCBtaW51dGVzXSA9IGRhdGVTdHJpbmc/LnNwbGl0KCc6Jyk/Lm1hcChOdW1iZXIpO1xuICAgICAgY29uc3QgcGVyaW9kID0gaG91cnMgPj0gMTIgPyAnUE0nIDogJ0FNJztcbiAgICAgIGNvbnN0IGZvcm1hdHRlZEhvdXJzID0gaG91cnMgJSAxMiB8fCAxMjtcbiAgICAgIHJldHVybiBgJHtmb3JtYXR0ZWRIb3Vyc306JHtTdHJpbmcobWludXRlcykucGFkU3RhcnQoMiwgJzAnKX0gJHtwZXJpb2R9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgJ2hoOm1tIGEnKSB8fCAnJztcbiAgfVxuXG4gIGNoZWNrVGltZUZvcm1hdChkYXRlLCBpc0luY2x1ZGU6IHN0cmluZykge1xuICAgIHJldHVybiBkYXRlPy50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpPy5pbmNsdWRlcyhpc0luY2x1ZGUpO1xuICB9XG5cbiAgLy9vcGVuIGh5cGVybGluayBpbiBlZGl0IGNhc2VcbiAgb3BlbkxpbmsodXJsOiBhbnkpIHtcbiAgICBpZiAodXJsKSB7XG4gICAgICBjb25zdCBsaW5rOiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICBsaW5rLmhyZWYgPSB1cmw7XG4gICAgICBsaW5rLnRhcmdldCA9ICdfYmxhbmsnO1xuICAgICAgbGluay5jbGljaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcm93XG4gICAqIFNldHMgdmFsdWVzIHRvIGVkaXRhYmxlIHJvd1xuICAgKiBSb3cncyBkYXRhIGlzIHByZXNldmVkIHRvIHByZXZlbnQgbXV0YXRpb25cbiAgICogUm93IGRhdGFLZXkgaXMgcHJlc2VydmVkIHRvIGtlZXAgdGhlIHJvdyB1bmlxdWUgYW5kIGluIGVkaXRhYmxlIHN0YXRlIGFzIGxvbmcgYXMgbm90IHNhdmVkXG4gICAqL1xuXG4gIHJlZnJlc2hHcmlkVGVybWluYXRvcigpIHtcbiAgICBpZiAodGhpcy5zZXRHcmlkUmVmcmVzaFRpbWUpIHtcbiAgICAgIHRoaXMucmVsb2FkUGFnZT8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICByZXNldE9yaWdpbmFsUm93cygpIHtcbiAgICB0aGlzLm9yaWdpbmFsUm93cyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5yb3dzRGF0YSkpO1xuICB9XG5cbiAgb25Sb3dFZGl0SW5pdChyb3c6IGFueSkge1xuICAgIHRoaXMucmVmcmVzaEdyaWRUZXJtaW5hdG9yKClcbiAgICBsZXQgc2VsZWN0ZWRSb3cgPSB7IC4uLnJvdyB9O1xuICAgIE9iamVjdC5lbnRyaWVzKHNlbGVjdGVkUm93KS5mb3JFYWNoKChba2V5LCB2YWx1ZV06IGFueSkgPT4ge1xuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbDogYW55KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNldERyb3Bkb3duRmlsdGVyKSB7XG4gICAgICAgICAgdGhpcy5zZXREcm9wZG93bkZpbHRlclZhbHVlKGNvbCwgcm93LCBrZXkpO1xuICAgICAgICAgIHRoaXMuc2V0RHJvcGRvd25GaWx0ZXIgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzZXQgdGhlIGF1dG9Db21wbGV0ZSBWYWx1ZSBpbiBlZGl0IG1vZGVcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFICYmXG4gICAgICAgICAgY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBrZXk/LnRvTG93ZXJDYXNlKCkgJiZcbiAgICAgICAgICB2YWx1ZSAmJlxuICAgICAgICAgIHZhbHVlLmxlbmd0aCA+IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGNvbC5kaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkUm93W2NvbC5maWVsZF0uZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICAgIHJvd1tjb2wuZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX3RlbXAnXSA9IHJvd1tjb2wuZGlzcGxheUZpZWxkXTtcbiAgICAgICAgICAgICAgcm93W2NvbC5kaXNwbGF5RmllbGRdID0gcm93W2NvbC5maWVsZF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IG5ld1ZhbHVlID0gdmFsdWUubWFwKCh4OiBhbnkpID0+IHhbY29sLmRpc3BsYXlGaWVsZF0pO1xuICAgICAgICAgIGlmIChuZXdWYWx1ZT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJzsnKSkge1xuICAgICAgICAgICAgcm93W2NvbC5maWVsZF0gPSBuZXdWYWx1ZVxuICAgICAgICAgICAgICA/LnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgPy5yZXBsYWNlQWxsKCc7JywgJywnKVxuICAgICAgICAgICAgICA/LnNwbGl0KCcsJylcbiAgICAgICAgICAgICAgPy5tYXAoKHg6IGFueSkgPT4gKHsgW2NvbC5kaXNwbGF5RmllbGQgPyBjb2wuZGlzcGxheUZpZWxkIDogY29sLmZpZWxkXTogeCwgW2NvbC5maWVsZCArICdfdGVtcCddOiB2YWx1ZVswXVtjb2wuZmllbGRdIH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTikge1xuICAgICAgICAgIGxldCBvcHRpb24gPSBjb2w/LmRhdGE/LmZpbmQoXG4gICAgICAgICAgICAoeDogYW55KSA9PiB4LmxhYmVsID09PSByb3dbY29sLmZpZWxkXT8udG9TdHJpbmcoKVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgICAgcm93W2NvbC5maWVsZF0gPSBvcHRpb24udmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUKSB7XG4gICAgICAgICAgcm93W2NvbC5maWVsZF0gPSB0aGlzLnNldE11bHRpU2VsZWN0VmFsdWUoY29sLCByb3cpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0ga2V5Py50b0xvd2VyQ2FzZSgpICYmXG4gICAgICAgICAgY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChyb3dbY29sLmZpZWxkXSAhPT0gbnVsbCAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHJvd1trZXkgKyAnX29iaiddICYmIE9iamVjdC5rZXlzKHJvd1trZXkgKyAnX29iaiddKT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICByb3dba2V5ICsgJ19vYmonXS50ZXh0ID0gbmV3IERhdGUodmFsdWUgYXMgc3RyaW5nKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJvd1trZXldID0gbmV3IERhdGUodmFsdWUgYXMgc3RyaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBjaGVjayB0aGUgTWludXRlcyBwYXR0ZXJuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGNvbC5zaG93VGltZSB8fCBjb2wudGltZU9ubHkpICYmXG4gICAgICAgICAgICBjb2wubWludXRlc0ludGVydmFsICYmXG4gICAgICAgICAgICByb3dba2V5XVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcm93W2tleV0gPSBuZXcgRGF0ZShzZXRNaW51dGVzSW50ZXJ2YWwocm93W2tleV0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRElBTE9HICYmXG4gICAgICAgICAgY29sLmZpbHRlcj8udHlwZSA9PT0gJ2NhbGVuZGFyJyAmJlxuICAgICAgICAgIGNvbC5maWVsZC50b0xvd2VyQ2FzZSgpID09PSBrZXkudG9Mb3dlckNhc2UoKVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHJvd1tjb2wuZmllbGRdID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LICYmXG4gICAgICAgICAgY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBrZXk/LnRvTG93ZXJDYXNlKCkgJiZcbiAgICAgICAgICAoY29sLmFsbG93U2F2ZSA9PT0gdHJ1ZSB8fCBjb2wuYWxsb3dTYXZlID09PSB1bmRlZmluZWQpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChjb2wuZWRpdExpbmsgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJvd1tjb2wuZmllbGQgKyAnX29iaiddLmh5cGVybGluayA9IHJvd1tjb2wuZmllbGQgKyAnX29iaiddPy5oeXBlcmxpbms7XG4gICAgICAgICAgICByb3dbY29sLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dCA9ICcnO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY29sLmVkaXRMaW5rID09PSBmYWxzZSB8fCBjb2wuZWRpdExpbmsgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcm93W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5lZGl0Um93c1JlY29yZHNbcm93W3RoaXMuZGF0YUtleV1dID0geyAuLi5yb3cgfTtcbiAgICB0aGlzLmVkaXRpbmdSb3dLZXlzW3Jvd1t0aGlzLmRhdGFLZXldXSA9IHRydWU7XG4gICAgdGhpcy5jaGVja0FjdGlvbiA9IHRydWU7XG4gICAgdGhpcy5kcm9wZG93bklucHV0ID0gdHJ1ZTtcbiAgICB0aGlzLnJvd0NsaWNrRGF0YSA9IHJvdztcbiAgICB0aGlzLmluRWRpdE1vZGUgPSB0cnVlO1xuICAgIHRoaXMucm93VXBkYXRlQ2hhbmdlID0gZmFsc2U7XG4gICAgdGhpcy5jYW5jZWxBbGxSZWNvcmRzID0gZmFsc2U7XG4gICAgdGhpcy5zYXZlQWxsUmVjb3JkID0gZmFsc2U7XG4gICAgdGhpcy5zb3J0RGlzYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMuZ3JpZFNlcnZpY2Uucm93VXBkYXRlID0gZmFsc2U7XG4gICAgdGhpcy5vbkdyaWRSb3dFZGl0LmVtaXQocm93KTtcbiAgfVxuXG4gIHR5cGVPZih2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgZHJvcGRvd24gZmlsdGVyIHZhbHVlXG4gICAqL1xuICBzZXREcm9wZG93bkZpbHRlclZhbHVlKGNvbDogYW55LCByb3c6IGFueSwga2V5OiBzdHJpbmcpIHtcbiAgICBpZiAoY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTiAmJiBjb2wuZHJvcERvd25Qcm9wKSB7XG4gICAgICBpZiAoT2JqZWN0LnZhbHVlcyhjb2wpLnNvbWUoKHZhbHVlKSA9PiB2YWx1ZSA9PSBrZXkpKSB7XG4gICAgICAgIGxldCBvYmogPSBjb2wuZHJvcERvd25Qcm9wO1xuICAgICAgICBsZXQgbmV3RmlsdGVyczogYW55ID0gW107XG4gICAgICAgIGlmIChvYmouZmlsdGVycyAmJiBvYmouZmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgb2JqLmZpbHRlcnMuZm9yRWFjaCgoZmlsdGVyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGxldCBuZXdGaWx0ZXIgPSB7IC4uLmZpbHRlciB9O1xuICAgICAgICAgICAgbGV0IGZpbHRlcktleSA9IE9iamVjdC5rZXlzKHJvdykuZmluZCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgIGxldCBtYXRjaEtleTogc3RyaW5nID0gJyc7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBmaWx0ZXIudmFsdWU/LmluY2x1ZGVzKCd7JykgJiZcbiAgICAgICAgICAgICAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT1cbiAgICAgICAgICAgICAgICBmaWx0ZXIudmFsdWVcbiAgICAgICAgICAgICAgICAgID8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZSgneycsICcnKVxuICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ30nLCAnJylcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2hLZXkgPSBrZXk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoS2V5O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoZmlsdGVyS2V5KSB7XG4gICAgICAgICAgICAgIG5ld0ZpbHRlci52YWx1ZSA9IHJvd1tmaWx0ZXJLZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3RmlsdGVycy5wdXNoKG5ld0ZpbHRlcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLnNldERyb3Bkb3duRGF0YShcbiAgICAgICAgICBjb2wsXG4gICAgICAgICAgb2JqLnVuaXF1ZUtleSxcbiAgICAgICAgICBvYmoudmFsdWVQcm9wLFxuICAgICAgICAgIG9iai5sYWJlbFByb3AsXG4gICAgICAgICAgbmV3RmlsdGVycyxcbiAgICAgICAgICByb3dcbiAgICAgICAgKTtcblxuICAgICAgICBsZXQgb3B0aW9uID0gY29sLmRhdGEuZmluZChcbiAgICAgICAgICAoeDogYW55KSA9PiB4LmxhYmVsID09PSByb3dbY29sLmZpZWxkXT8udG9TdHJpbmcoKVxuICAgICAgICApO1xuICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgcm93W2NvbC5maWVsZF0gPSBvcHRpb24udmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHJvd1xuICAgKiBQYXNzZXMgdGhlIGVkaXRlZCBvciBuZXdseSBjcmVhdGVkIGRhdGEgdG8gcGFyZW50XG4gICAqIEluIGNhc2Ugb2YgbmV3bHkgY3JlYXRlZCBkYXRhLCBkYXRhS2V5IGFuZCBpc05ldyBwcm9wIGlzIHJlbW92ZWRcbiAgICovXG4gIG9uUm93RWRpdFNhdmUoc2VsZWN0ZWRSb3c6IGFueSkge1xuICAgIHRoaXMudGVtcFNhdmVkUm93ID0gW107XG4gICAgbGV0IGF1dG9tQ29tcGxldGVUZW1wRGF0YSA9IFtdO1xuICAgIGxldCBsb29rdXBJbmZvOiBhbnkgPSB7fTtcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgZGVsZXRlIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZCArICctZGF0YSddO1xuICAgICAgZGVsZXRlIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZCArICdfc2Vjb25kVHlwZSddO1xuICAgICAgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJlxuICAgICAgICAoY29sdW1uLmFsbG93U2F2ZSA9PT0gdHJ1ZSB8fCBjb2x1bW4uYWxsb3dTYXZlID09PSB1bmRlZmluZWQpXG4gICAgICApIHtcbiAgICAgICAgaWYgKHR5cGVvZiAoc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/LnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0KSB7XG4gICAgICAgICAgbG9va3VwSW5mb1tjb2x1bW4uZmllbGRdID0gc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS50ZXh0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2x1bW4uZm9ybWF0dGVyKSB7XG4gICAgICAgIGxldCB2YWx1ZTogYW55ID0gc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXTtcbiAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgPT09ICdjaGFyJykge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWUgPT09IHRydWUgPyAnWScgOiAnTic7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmZvcm1hdHRlciA9PT0gJ251bWVyaWMnKSB7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSA9PT0gdHJ1ZSA/ICcxJyA6ICcwJztcbiAgICAgICAgfVxuICAgICAgICBzZWxlY3RlZFJvdyA9IHsgLi4uc2VsZWN0ZWRSb3csIFtjb2x1bW4uZmllbGRdOiB2YWx1ZSB9O1xuICAgICAgfVxuXG4gICAgICAvL2NvbnZlcnQgZHJvcERvd24gb3B0aW9uTGFiZWwgaW50byBvcHRpb25WYWx1ZVxuICAgICAgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmIGNvbHVtbi5kYXRhPy5sZW5ndGggPiAwICYmIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF1cbiAgICAgICkge1xuICAgICAgICBsZXQgb3B0aW9uTGFiZWw7XG4gICAgICAgIGlmIChpc05hTihOdW1iZXIoc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSkpKSB7XG4gICAgICAgICAgb3B0aW9uTGFiZWwgPSBjb2x1bW4uZGF0YS5maW5kKChyZWNvcmQpID0+IHJlY29yZFsnbGFiZWwnXT8udG9Mb3dlckNhc2UoKSA9PT0gc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3B0aW9uTGFiZWwgPSBjb2x1bW4uZGF0YS5maW5kKChyZWNvcmQpID0+IHJlY29yZFsnbGFiZWwnXSA9PT0gc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbkxhYmVsPy52YWx1ZSkge1xuICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBvcHRpb25MYWJlbC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvL2NvbnZlcnQgZGF0ZSBpbnRvIHRpbWUgZm9ybWF0XG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURVxuICAgICAgKSB7XG4gICAgICAgIGlmIChjb2x1bW4udGltZU9ubHkgJiYgY29sdW1uLnNhdmVBc1N0cmluZyAmJiBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0sICdoaDptbSBhJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnRpbWVPbmx5ICYmICFjb2x1bW4uc2F2ZUFzU3RyaW5nICYmIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0pIHtcbiAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSwgJ3l5eXktTU0tZGQgSEg6bW06c3MnKTtcbiAgICAgICAgfSBlbHNlIGlmICghY29sdW1uLnRpbWVPbmx5ICYmIChjb2x1bW4uc2hvd1RpbWUgfHwgY29sdW1uLmZvcm1hdCA9PT0gRUdyaWRGb3JtYXRUeXBlLkxPTkdEQVRFKSkge1xuICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdLCAneXl5eS1NTS1kZCBISDptbTpzcycpO1xuICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gJiYgIWNvbHVtbi50aW1lT25seSkge1xuICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBuZXcgRGF0ZShzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdKT8udG9Mb2NhbGVEYXRlU3RyaW5nKFwiZW4tVVNcIilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gaWYgYWxsb3dDYWxjdWxhdGU9dHJ1ZSwgZGl2aWRlIHRoZSBwZXJjZW50IGJ5IDEwMFxuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTlVNRVJJQykge1xuICAgICAgICBpZiAodGhpcy5udW1lcmljVmFsdWUpIHtcbiAgICAgICAgICB0aGlzLm51bWVyaWNWYWx1ZSA9IHt9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlnaXRzSW5mbyA9IGNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XG4gICAgICAgIGlmIChjb2x1bW4uZm9ybWF0Py50eXBlID09PSAncGVyY2VudCcpIHtcbiAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5hbGxvd0NhbGN1bGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgY2FsY3VsYXRlZFZhbHVlID0gc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJy4nKSA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBjYWxjdWxhdGVkVmFsdWUgPyBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdIDogc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSAvIDEwMDtcbiAgICAgICAgICAgIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBwYXJzZUZsb2F0KChzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdIC8gMTAwKT8udG9TdHJpbmcoKSkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvL2NvbnZlcnQgbXVsdGlzZWxlY3QgYXJyYXkgaW50byBzdHJpbmdcbiAgICAgIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5NVUxUSVNFTEVDVCAmJiBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdXG4gICAgICApIHtcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNhdmluZyBBdXRvQ29tcGxldGUgRGF0YVxuICAgICAgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURSAmJlxuICAgICAgICBjb2x1bW4uZGlzcGxheUZpZWxkICYmXG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/Lmxlbmd0aCA+IDBcbiAgICAgICkge1xuICAgICAgICBhdXRvbUNvbXBsZXRlVGVtcERhdGEgPSBbLi4uc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXV07XG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy5tYXAoKHJvdykgPT4gY29sdW1uPy5vcHRpb25WYWx1ZSAmJiByb3dbY29sdW1uLm9wdGlvblZhbHVlPy50b0xvd2VyQ2FzZSgpXSA/XG4gICAgICAgICAgcm93W2NvbHVtbi5vcHRpb25WYWx1ZT8udG9Mb3dlckNhc2UoKV0gOiByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXSk/LnRvU3RyaW5nKCk/LnJlcGxhY2VBbGwoJywnLCAnOycpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbGV0IHJvdzogYW55ID0geyAuLi5zZWxlY3RlZFJvdyB9O1xuICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMocm93KTtcbiAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKGtleS5pbmNsdWRlcygnX29iaicpKSB7XG4gICAgICAgIGxldCBvYmo6IGFueSA9IHJvd1trZXldXG4gICAgICAgIGlmICh0aGlzLmNoZWNrQWN0aW9uID09PSBmYWxzZSAmJiBvYmo/LnR5cGUgJiYgKG9iai50eXBlID09PSAnbGluaycgfHwgb2JqLnR5cGUgPT09ICdpZnJhbWUnIHx8IG9iai50eXBlID09PSAnZGlhbG9nJykpIHtcbiAgICAgICAgICByb3cgPSB7IC4uLnJvdywgW2tleS5zcGxpdCgnXycpWzBdXTogcm93W2tleV0uZGlzcGxheVRleHQgfTtcbiAgICAgICAgICB0aGlzLmNoZWNrQWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob2JqICYmIChvYmoudHlwZSA9PT0gJ2xpbmsnIHx8IG9iai50eXBlID09PSAnaWZyYW1lJyB8fCBvYmoudHlwZSA9PT0gJ2RpYWxvZycpKSB7XG4gICAgICAgICAgaWYgKCFvYmouZGlzcGxheVRleHQgJiYgb2JqLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09IGtleS5zcGxpdCgnXycpWzBdPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBvYmouZGlzcGxheVRleHQgPSByb3dba2V5LnNwbGl0KCdfJylbMF1dXG4gICAgICAgICAgfVxuICAgICAgICAgIHJvdyA9IHsgLi4ucm93LCBba2V5LnNwbGl0KCdfJylbMF1dOiByb3dba2V5XS5kaXNwbGF5VGV4dCB9O1xuICAgICAgICAgIGRlbGV0ZSByb3dba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIC8qKlxuICAgICAqIGp1c3QgZW1pdCB0aG9zZSBmaWVsZHMgd2hvIGV4aXN0IGluIHRoZSB0YWJsZVxuICAgICAqL1xuICAgIHJvdyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0Um93VmFsdWUocm93KTtcbiAgICAvL29uc29sZS5sb2coJ3JvdyBpbiBzYXZlJywgcm93KVxuICAgIGxldCBvYmo6IGFueSA9IHt9O1xuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAoY29sdW1uLmFsbG93U2F2ZSA9PT0gdHJ1ZSB8fCBjb2x1bW4uYWxsb3dTYXZlID09PSB1bmRlZmluZWQgfHwgdGhpcy5zYXZlQWxsRGF0YSlcbiAgICAgICkge1xuICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgJiZcbiAgICAgICAgICBjb2x1bW4uZmlsdGVyPy50eXBlID09PSAnY2FsZW5kYXInXG4gICAgICAgICkge1xuICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oXG4gICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSxcbiAgICAgICAgICAgICd5eXl5LU1NLWRkVDAwOjAwOjAwLjAwMFonXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vU2V0IERlY2ltYWwgRnJhY3Rpb24gVmFsdWVcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbHVtbi5mb3JtYXQgJiZcbiAgICAgICAgICBjb2x1bW4uZm9ybWF0LnR5cGUgPT09IEVGb3JtYXRUeXBlLkRFQ0lNQUwgJiZcbiAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSAmJlxuICAgICAgICAgICFyb3dbY29sdW1uLmZpZWxkXS50b1N0cmluZygpLmluY2x1ZGVzKCcuJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgbGV0IGRpZ2l0c0luZm8gPSAnLjAwJztcbiAgICAgICAgICBsZXQgemVybyA9ICcwJztcbiAgICAgICAgICBjb25zdCBmb3JtYXRQYXJhbXMgPSBjb2x1bW4uZm9ybWF0Py5mb3JtYXRQYXJhbXM7XG4gICAgICAgICAgY29uc3QgZnJhY0RpZ2l0cyA9IGNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XG4gICAgICAgICAgaWYgKGZyYWNEaWdpdHMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZnJhY0RpZ2l0czsgaSsrKSB7XG4gICAgICAgICAgICAgIHplcm8gPSB6ZXJvICsgJzAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGlnaXRzSW5mbyA9ICcuJyArIHplcm87XG4gICAgICAgICAgfVxuICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF0gKyBkaWdpdHNJbmZvO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICByb3cuaXNOZXcgfHwgcm93LmlzbmV3ICYmXG4gICAgICAgIChjb2x1bW4uYWxsb3dTYXZlID09PSBmYWxzZSB8fCBjb2x1bW4uZWRpdGFibGUgPT09IGZhbHNlIHx8ICF0aGlzLnNhdmVBbGxEYXRhKVxuICAgICAgKSB7XG4gICAgICAgIGRlbGV0ZSByb3dbY29sdW1uLmZpZWxkXTtcbiAgICAgIH1cbiAgICAgIGNvbHVtbi5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICAgIGNvbnN0IG9iaktleSA9IGNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaic7XG4gICAgICBpZiAocm93W29iaktleV0/LmVycm9yTWVzc2FnZSkge1xuICAgICAgICBkZWxldGUgcm93W29iaktleV0uZXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGRlbGV0ZSBzZWxlY3RlZFJvd1sndW5kZWZpbmVkJ107XG4gICAgb2JqW3RoaXMuZGF0YUtleV0gPSByb3dbdGhpcy5kYXRhS2V5XTsgLy8gZW5zdXJlIGRhdGFLZXkgKHRlbXBfaWQpIGlzIGF2YWlsYWJsZSBmb3IgZGlydHktcm93IGNvbXBhcmlzb25cbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmNoZWNrVmFsaWRpdHkodGhpcy5jb2x1bW5zLCByb3cpO1xuICAgIGNvbnN0IGlzVmFsaWQgPSB0aGlzLmdyaWRWYWxpZGF0aW9uKHRoaXMuY29sdW1ucywgcm93KTtcblxuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAvLyBzZXQgdGhlIGdyaWQgdXBkYXRlZC9pbnNlcnRlZCBkYXRhXG4gICAgICB0aGlzLnJvd0FjdGlvbkV2ZW50cyhzZWxlY3RlZFJvdyk7XG4gICAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KGZhbHNlKTtcbiAgICAgIGlmIChyb3cuaXNOZXcgfHwgcm93LmlzbmV3KSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yb3dzRGF0YS5maW5kSW5kZXgoKHgpID0+IHgudGVtcF9pZCA9PSByb3cudGVtcF9pZCk7XG4gICAgICAgIHRoaXMudGVtcFNhdmVkUm93LnB1c2goaW5kZXgpO1xuICAgICAgICBsZXQgeyBpc05ldywgaXNuZXcsIC4uLm5ld1Jvd09iaiB9ID0gcm93O1xuICAgICAgICBuZXdSb3dPYmogPSB0aGlzLmdyaWRTZXJ2aWNlLnJlbW92ZUV4dHJhTmV3Um93T2JqKG5ld1Jvd09iaiwgdGhpcy5jb2x1bW5zKTtcbiAgICAgICAgaWYgKCF0aGlzLmFkZERhdGFLZXlWYWx1ZSkge1xuICAgICAgICAgIGRlbGV0ZSBuZXdSb3dPYmpbdGhpcy5kYXRhS2V5XTtcbiAgICAgICAgfVxuICAgICAgICBuZXdSb3dPYmogPSB0aGlzLnNldFJvd3NEYXRhKG5ld1Jvd09iaik7XG4gICAgICAgIGlmICh0aGlzLnNhdmVBbGxSZWNvcmQpIHtcbiAgICAgICAgICB0aGlzLnNhdmVSZWNvcmRBcnJheS5wdXNoKG5ld1Jvd09iaik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vblJvd0FkZC5lbWl0KG5ld1Jvd09iaik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yb3dzRGF0YS5maW5kSW5kZXgoKHgpID0+IHgudGVtcF9pZCA9PSBzZWxlY3RlZFJvdy50ZW1wX2lkKTtcbiAgICAgICAgdGhpcy50ZW1wU2F2ZWRSb3cucHVzaChpbmRleCk7XG4gICAgICAgIGlmICh0aGlzLnNhdmVBbGxSZWNvcmQpIHtcbiAgICAgICAgICB0aGlzLnNhdmVSZWNvcmRBcnJheS5wdXNoKG9iaik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuY2hlY2tsaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrbGlzdFJvd3MgPSB0aGlzLnNldFJvd3NEYXRhKHRoaXMuY2hlY2tsaXN0KTtcbiAgICAgICAgICAgIGNoZWNrbGlzdFJvd3MuZm9yRWFjaChyb3cgPT4gZGVsZXRlIHJvd1t0aGlzLmRhdGFLZXldKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9yaWdpbmFsUm93cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkUm93cyA9IGdldENoYW5nZWRSb3dzKGNoZWNrbGlzdFJvd3MsIHRoaXMub3JpZ2luYWxSb3dzLCB0aGlzLmNvbHVtbnMsIHRoaXMuZGF0YUtleSk7XG4gICAgICAgICAgICAgIHRoaXMub25Sb3dVcGRhdGUuZW1pdChmaWx0ZXJlZFJvd3MpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5vblJvd1VwZGF0ZS5lbWl0KGNoZWNrbGlzdFJvd3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSBvYmpbdGhpcy5kYXRhS2V5XTsgLy8gcmVtb3ZlIHRlbXBfaWQgYmVmb3JlIGVtaXR0aW5nXG4gICAgICAgICAgICBpZiAodGhpcy5vcmlnaW5hbFJvd3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBzaW5nbGVSb3dBcnJheSA9IFtvYmpdO1xuICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZFJvd3MgPSBnZXRDaGFuZ2VkUm93cyhzaW5nbGVSb3dBcnJheSwgdGhpcy5vcmlnaW5hbFJvd3MsIHRoaXMuY29sdW1ucywgdGhpcy5kYXRhS2V5KTtcbiAgICAgICAgICAgICAgdGhpcy5vblJvd1VwZGF0ZS5lbWl0KGZpbHRlcmVkUm93cy5sZW5ndGggPiAwID8gZmlsdGVyZWRSb3dzWzBdIDogbnVsbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLm9uUm93VXBkYXRlLmVtaXQob2JqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuZWRpdGluZ1Jvd0tleXNbcm93W3RoaXMuZGF0YUtleV1dID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICAgIGlmIChjb2x1bW4uZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgaWYgKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpICsgJ19vYmonXSkge1xuICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkgKyAnX29iaiddID0geyAuLi5zZWxlY3RlZFJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLCBlcnJvck1lc3NhZ2U6IGNvbHVtbi5lcnJvck1lc3NhZ2UgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkgKyAnX29iaiddID0geyBlcnJvck1lc3NhZ2U6IGNvbHVtbi5lcnJvck1lc3NhZ2UgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICB0aGlzLmVkaXRpbmdSb3dLZXlzW3Jvd1t0aGlzLmRhdGFLZXldXSA9IHRydWU7XG4gICAgfVxuICAgIC8vIGlmIGFsbCByb3dzIGluIHJlYWQgb25seSBtb2RlIHRoZW4gc2hvdyBlZGl0QWxsUm93cyBidXR0b24uICAgIFxuICAgIGlmIChPYmplY3QudmFsdWVzKHRoaXMuZWRpdGluZ1Jvd0tleXMpLmV2ZXJ5KCh2YWx1ZSkgPT4gIXZhbHVlKSkge1xuICAgICAgdGhpcy5pbkVkaXRNb2RlID0gZmFsc2U7XG4gICAgICB0aGlzLnNvcnREaXNhYmxlZCA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgLy8gY29udmVydCBkYXRlIGludG8gdGltZVxuICAgICAgaWYgKFxuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdICYmXG4gICAgICAgIChzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpPy5pbmNsdWRlcygnUE0nKSB8fFxuICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCdBTScpKVxuICAgICAgKSB7XG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBzZXRUaW1lSW5EYXRlKHJvd1tjb2x1bW4uZmllbGRdKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTlVNRVJJQykge1xuICAgICAgICBjb25zdCBkaWdpdHNJbmZvID0gY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbztcbiAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXQ/LnR5cGUgPT09ICdwZXJjZW50Jykge1xuICAgICAgICAgIGlmIChjb2x1bW4uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmFsbG93Q2FsY3VsYXRlKSB7XG4gICAgICAgICAgICBpZiAoZGlnaXRzSW5mbykge1xuICAgICAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gcGFyc2VGbG9hdCgoc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSAqIDEwMCk/LnRvU3RyaW5nKCkpLnRvRml4ZWQoZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSAqIDEwMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFICYmXG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF1cbiAgICAgICkge1xuICAgICAgICAvLyBzZXQgYXV0b2NvbXBlbGV0IGFycmF5IGRhdGEgYWZ0ZXIgc2F2ZSByb3dcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IGF1dG9tQ29tcGxldGVUZW1wRGF0YTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmXG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gJiYgKGNvbHVtbi5hbGxvd1NhdmUgPT09IHRydWUgfHwgY29sdW1uLmFsbG93U2F2ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgKSB7XG4gICAgICAgIC8vIHNldCBMT09LVVBfSU5QVVQgZGF0YSBhZnRlciBzYXZlIHJvd1xuICAgICAgICBpZiAobG9va3VwSW5mb1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IGxvb2t1cEluZm9bY29sdW1uLmZpZWxkXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTiAmJlxuICAgICAgICBjb2x1bW4ub3B0aW9uTGFiZWwgJiZcbiAgICAgICAgY29sdW1uLm9wdGlvblZhbHVlXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5zZXREcm9wZG93blZhbHVlKGNvbHVtbiwgc2VsZWN0ZWRSb3cpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuYWRkTmV3Um93Q2hlY2sgPSBmYWxzZTtcbiAgICBpZiAoT2JqZWN0LnZhbHVlcyh0aGlzLmVkaXRpbmdSb3dLZXlzKS5ldmVyeSgodmFsdWUpID0+ICF2YWx1ZSkgJiYgdGhpcy5zZXRHcmlkUmVmcmVzaFRpbWUpIHtcbiAgICAgIHRoaXMucmVmcmVzaEdyaWQoKTtcbiAgICB9XG4gICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnJvd1VwZGF0ZSA9IGZhbHNlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8vIGNoZWNrIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBmaWVsZFxuICBncmlkVmFsaWRhdGlvbihjb2x1bW5zOiBhbnksIHJvdzogYW55LCBzaW5nbGVDZWxsOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuIHtcbiAgICBpZiAoc2luZ2xlQ2VsbCA9PSB0cnVlKSB7XG4gICAgICBjb2x1bW5zID0gW3sgLi4uY29sdW1ucyB9XVxuICAgIH1cbiAgICBpZiAoIXRoaXMuZ3JpZFNlcnZpY2UuY2hlY2tWYWxpZGl0eShjb2x1bW5zLCByb3csIHNpbmdsZUNlbGwpKSB7XG4gICAgICBsZXQgZXJyb3JNZXNzYWdlRGV0YWlsczogc3RyaW5nID0gJyc7XG4gICAgICBjb2x1bW5zPy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi5lcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICBlcnJvck1lc3NhZ2VEZXRhaWxzID0gZXJyb3JNZXNzYWdlRGV0YWlscyA/IGVycm9yTWVzc2FnZURldGFpbHMgKyAnICwgJyArIGNvbHVtbi5lcnJvck1lc3NhZ2UgOiBjb2x1bW4uZXJyb3JNZXNzYWdlO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgbGV0IGlzUmVxdWlyZWQgPSBjb2x1bW5zLnNvbWUoXG4gICAgICAgIChjb2x1bW46IGFueSkgPT4gY29sdW1uLmVycm9yTWVzc2FnZSAmJiAocm93W2NvbHVtbi5maWVsZF0gPT09IG51bGwgfHwgcm93W2NvbHVtbi5maWVsZF0gPT09IHVuZGVmaW5lZCB8fCByb3dbY29sdW1uLmZpZWxkXSA9PT0gJycpXG4gICAgICApO1xuICAgICAgaWYgKGlzUmVxdWlyZWQgJiYgIXNpbmdsZUNlbGwpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXG4gICAgICAgICAgZXJyb3JNZXNzYWdlRGV0YWlscyxcbiAgICAgICAgICA1MDAwLFxuICAgICAgICAgICdSRVFVSVJFRCBGSUVMRCdcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKGVycm9yTWVzc2FnZURldGFpbHMsIDUwMDAsICdJTlZBTElEIEZJRUxEJyk7XG4gICAgICAgIGlmIChzaW5nbGVDZWxsKSB7XG4gICAgICAgICAgdGhpcy5zZXRFcnJvckNlbGwoY29sdW1uc1swXSwgcm93KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzaW5nbGVDZWxsKSB7XG4gICAgICAgIHRoaXMuc2V0RXJyb3JDZWxsKGNvbHVtbnNbMF0sIHJvdylcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICBzZXRFcnJvckNlbGwoY29sdW1uLCByb3cpIHtcbiAgICBpZiAoY29sdW1uLmVycm9yTWVzc2FnZSkge1xuICAgICAgaWYgKHJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ10pIHtcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpICsgJ19vYmonXSA9IHsgLi4ucm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10sIGVycm9yTWVzc2FnZTogY29sdW1uLmVycm9yTWVzc2FnZSB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpICsgJ19vYmonXSA9IHsgZXJyb3JNZXNzYWdlOiBjb2x1bW4uZXJyb3JNZXNzYWdlIH07XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKHJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ10pIHtcbiAgICAgICAgZGVsZXRlIHJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ10uZXJyb3JNZXNzYWdlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcm93IDogYW55XG4gICAqIEBwYXJhbSBpbmRleCA6IG51bWJlclxuICAgKiBDbGVhcnMgb3V0IHRoZSBlZGl0IHJvdyBhbmQgcmVwbGFjZSB3aXRoIHJlYWRhYmxlIG9uZVxuICAgKi9cbiAgb25Sb3dFZGl0Q2FuY2VsKHJvdzogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgbGV0IHJvd0luRWRpdE1vZGU6IGJvb2xlYW4gPSBPYmplY3QudmFsdWVzKHRoaXMuZWRpdGluZ1Jvd0tleXMpLmV2ZXJ5KCh2YWx1ZSkgPT4gIXZhbHVlKTtcbiAgICBpZiAocm93Py5pc05ldykge1xuICAgICAgdGhpcy5yb3dzRGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvd3NEYXRhW2luZGV4XSA9IHRoaXMuZWRpdFJvd3NSZWNvcmRzW3Jvd1t0aGlzLmRhdGFLZXldXTtcbiAgICAgIGRlbGV0ZSB0aGlzLmVkaXRSb3dzUmVjb3Jkc1tyb3dbdGhpcy5kYXRhS2V5XV07XG4gICAgfVxuICAgIGRlbGV0ZSB0aGlzLmVkaXRpbmdSb3dLZXlzW3Jvd1t0aGlzLmRhdGFLZXldXTtcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTikge1xuICAgICAgICB0aGlzLnNldERyb3Bkb3duVmFsdWUoY29sdW1uLCByb3cpO1xuICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJiBjb2x1bW4uZGlzcGxheUZpZWxkKSB7XG4gICAgICAgIHRoaXMucm93c0RhdGFbaW5kZXhdW2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXT8udmFsdWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5pbkVkaXRNb2RlID0gZmFsc2U7XG4gICAgaWYgKHJvd0luRWRpdE1vZGUpIHtcbiAgICAgIHRoaXMuc29ydERpc2FibGVkID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuYWRkTmV3Um93Q2hlY2sgPSBmYWxzZTtcbiAgICB0aGlzLnJvd1VwZGF0ZUNoYW5nZSA9IGZhbHNlO1xuICAgIHRoaXMuaW5saW5lUm93Q2FuY2VsLmVtaXQocm93KTtcbiAgICBpZiAocm93SW5FZGl0TW9kZSAmJiB0aGlzLnNldEdyaWRSZWZyZXNoVGltZSkge1xuICAgICAgdGhpcy5yZWZyZXNoR3JpZCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBcbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHJvd1xuICAgKiBTZW5kcyB0aGUgcm93IHBheWxvYWQgdG8gcGFyZW50IGZvciBkZWxldGlvbnNcbiAgICovXG5cbiAgLyoqXG4gICpzZXQgdGhlIGdyaWREYXRhIG9uIHJvdyBhY3Rpb25zIGV2ZW50c1xuICAqL1xuICByb3dBY3Rpb25FdmVudHMocm93SW5mbywgZGVsZXRlUm93OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBsZXQgYWN0aW9uOiBzdHJpbmcgPSAnJztcbiAgICBsZXQgZ3JpZFJvd3NEYXRhOiBhbnlbXSA9IFsuLi50aGlzLnJvd3NEYXRhXTtcbiAgICBjb25zdCBpbmRleCA9IGdyaWRSb3dzRGF0YS5maW5kSW5kZXgoKHJvd0RhdGEpID0+IHJvd0luZm9bdGhpcy5kYXRhS2V5XSA9PT0gcm93RGF0YVt0aGlzLmRhdGFLZXldKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgaWYgKGRlbGV0ZVJvdykge1xuICAgICAgICBncmlkUm93c0RhdGEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5yb3dzRGF0YSA9IFsuLi5ncmlkUm93c0RhdGFdO1xuICAgICAgICBhY3Rpb24gPSAnZGVsZXRlJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmFkZE5ld1Jvd0NoZWNrKSB7XG4gICAgICAgICAgYWN0aW9uID0gJ2luc2VydCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWN0aW9uID0gJ3VwZGF0ZSc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub25HcmlkUm93QWN0aW9ucy5vYnNlcnZlcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgcm93SW5mb1sncm93QWN0aW9uJ10gPSBhY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgZ3JpZFJvd3NEYXRhW2luZGV4XSA9IHJvd0luZm87XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZ2VuZXJhdGVSb3dzRGF0YUNvcHkgPSBmYWxzZTtcbiAgICB0aGlzLnJvd1VwZGF0ZUNoYW5nZSA9IGZhbHNlO1xuICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgIHRoaXMub25HcmlkUm93QWN0aW9ucy5lbWl0KGdyaWRSb3dzRGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBEZWxldGUgY29uZmlybWF0aW9uIGRpYWxvZyB3aGVuIHRyeWluZyB0byBkZWxldGUgcm93XG4gICAqL1xuICBkZWxldGVSZWNvcmQocm93OiBhbnkpIHtcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICBtZXNzYWdlOiAnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgcmVjb3JkPycsXG4gICAgICBoZWFkZXI6ICdEZWxldGUgQ29uZmlybWF0aW9uJyxcbiAgICAgIGljb246ICdwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZScsXG4gICAgICBrZXk6ICdoYW5kbGVJbmxpbmVDUlVEJyxcbiAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy51c2VTZXJ2ZXJTaWRlRXZlbnRzKSB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzZXQgdGhlIGdyaWQgZGVsZXRlZCBkYXRhIFxuICAgICAgICB0aGlzLnJvd0FjdGlvbkV2ZW50cyhyb3csIHRydWUpO1xuICAgICAgICB0aGlzLm9uUm93RGVsZXRlLmVtaXQocm93KTtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlKCk7XG4gICAgICAgIHRoaXMuaW5FZGl0TW9kZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICByZWplY3Q6ICgpID0+IHtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlKCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvIHNldCBkaXNhYmxlZCB0aGUgY29udHJvbFxuICAgKi9cbiAgYWxsb3dEaXNhYmxlZChjb2x1bW46IGFueSwgcm93OiBhbnkpOiBib29sZWFuIHtcbiAgICBsZXQgdmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gJiYgdHlwZW9mIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSkgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIE9iamVjdC5rZXlzKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddKT8uaW5jbHVkZXMoJ2Rpc2FibGVkJykgJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc2FibGVkID09PSB0cnVlXG4gICAgICApIHtcbiAgICAgICAgdmFsdWUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoXG4gICAgICAgIE9iamVjdC5rZXlzKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddKT8uaW5jbHVkZXMoJ3Jvd0Rpc2FibGVkJykgJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnJvd0Rpc2FibGVkID09PSB0cnVlXG4gICAgICApIHtcbiAgICAgICAgdmFsdWUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29sdW1uLmRpc2FibGVkKSB7XG4gICAgICB2YWx1ZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUbyBzZXQgYWdncmVnYXRlIGluIGdyaWQgZm9vdGVyXG4gICAqL1xuICBzZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbjogSUdyaWRDb2x1bW4pIHtcbiAgICBpZiAoY29sdW1uPy5hZ2dyZWdhdGUpIHtcbiAgICAgIGNvbHVtbi5hZ2dyZWdhdGUuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucm93c0RhdGEgJiYgdGhpcy5yb3dzRGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbGV0IGNvbHVtblR5cGU6IEVHcmlkQWdncmVnYXRlID0gY29sLnR5cGU7XG4gICAgICAgICAgaWYgKGNvbHVtblR5cGUgPT09IEVHcmlkQWdncmVnYXRlLkNPVU5UKSB7XG4gICAgICAgICAgICBsZXQgY291bnQgPSB0aGlzLnJvd3NEYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIGNvdW50ID0gdGhpcy5zZXRGZXRjaEFnZ3JlZ2F0ZWRWYWx1ZShjb2x1bW4sIGNvdW50LCAxKTtcbiAgICAgICAgICAgIGNvbC5hZ2dyVmFsdWUgPSB0aGlzLnNldEFnZ3JlZ2F0ZUZvb3RlclRleHQoY29sLCBjb3VudCwgJ0NvdW50Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29sdW1uVHlwZSA9PT0gRUdyaWRBZ2dyZWdhdGUuU1VNIHx8XG4gICAgICAgICAgICBjb2x1bW5UeXBlID09PSBFR3JpZEFnZ3JlZ2F0ZS5BVkVSQUdFXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBjb2xWYWx1ZXM6IG51bWJlcltdID0gdGhpcy5nZXRDb2x1bW5WYWx1ZXMoY29sdW1uKTtcbiAgICAgICAgICAgIGlmIChjb2xWYWx1ZXMgJiYgY29sVmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgbGV0IHN1bSA9IGNvbFZhbHVlcy5yZWR1Y2UoKGFjYywgY3VyKSA9PiBhY2MgKyBjdXIsIDApO1xuICAgICAgICAgICAgICBpZiAoY29sdW1uVHlwZSA9PT0gRUdyaWRBZ2dyZWdhdGUuU1VNKSB7XG4gICAgICAgICAgICAgICAgc3VtID0gdGhpcy5zZXRGZXRjaEFnZ3JlZ2F0ZWRWYWx1ZShjb2x1bW4sIHN1bSwgMik7XG4gICAgICAgICAgICAgICAgY29sLmFnZ3JWYWx1ZSA9IHRoaXMuc2V0QWdncmVnYXRlRm9vdGVyVGV4dChjb2wsIHN1bSwgJ1N1bScpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChjb2x1bW5UeXBlID09PSBFR3JpZEFnZ3JlZ2F0ZS5BVkVSQUdFKSB7XG4gICAgICAgICAgICAgICAgbGV0IGF2ZXJhZ2UgPSBzdW0gLyBjb2xWYWx1ZXMubGVuZ3RoIHx8IDA7XG4gICAgICAgICAgICAgICAgYXZlcmFnZSA9IHRoaXMuc2V0RmV0Y2hBZ2dyZWdhdGVkVmFsdWUoY29sdW1uLCBzdW0sIDMpO1xuICAgICAgICAgICAgICAgIGNvbC5hZ2dyVmFsdWUgPSB0aGlzLnNldEFnZ3JlZ2F0ZUZvb3RlclRleHQoXG4gICAgICAgICAgICAgICAgICBjb2wsXG4gICAgICAgICAgICAgICAgICBhdmVyYWdlLFxuICAgICAgICAgICAgICAgICAgJ0F2ZydcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbC5hZ2dyVmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gc2V0IHRoZSBhZ2dyZWdhdGFpb24gdmFsdWUgdGhhdCBjb21pbmcgZnJvbSBmZXRjaFxuICBzZXRGZXRjaEFnZ3JlZ2F0ZWRWYWx1ZShjb2x1bW4sIGFnZ3JlZ2F0ZVZhbHVlLCBhZ2dyZWdhdGVBY3Rpb24pIHtcbiAgICBpZiAodGhpcy5hZ2dyZWdhdGVkUmVzdWx0Py5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBhZ2dyZWdhdGVkQ29sdW1uID0gdGhpcy5hZ2dyZWdhdGVkUmVzdWx0LmZpbmQoKGFnZ3JlZ2F0ZSkgPT4gYWdncmVnYXRlLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgJiYgYWdncmVnYXRlLmFnZ3JlZ2F0aW9uT3BlcmF0aW9uID09PSBhZ2dyZWdhdGVBY3Rpb24pO1xuICAgICAgaWYgKGFnZ3JlZ2F0ZWRDb2x1bW4pIHtcbiAgICAgICAgYWdncmVnYXRlVmFsdWUgPSBhZ2dyZWdhdGVkQ29sdW1uPy52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgYWdncmVnYXRlVmFsdWUgPSBpc05hTihOdW1iZXIoYWdncmVnYXRlVmFsdWUpKSA/IDAgOiBOdW1iZXIoYWdncmVnYXRlVmFsdWUpO1xuICAgIHJldHVybiBhZ2dyZWdhdGVWYWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgZ3JpZCBBZ2dyZWdhdGUgdmFsdWVzXG4gICAqL1xuICBzZXRBZ2dyZWdhdGVGb290ZXJUZXh0KGNvbHVtbjogYW55LCB2YWx1ZTogbnVtYmVyLCBkZWZhdWx0Q2FwdGlvbjogc3RyaW5nKSB7XG4gICAgY29uc3QgaXNEZWNpbWFsID0gY29sdW1uLmZvcm1hdD8udHlwZSA9PT0gJ2RlY2ltYWwnO1xuICAgIGNvbnN0IGZvcm1hdFBhcmFtcyA9IGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcztcbiAgICBjb25zdCBkaWdpdHNJbmZvID0gY29sdW1uLmZvcm1hdD8uZGlnaXRzSW5mbztcbiAgICBjb25zdCBtaW5GcmFjdGlvbkRpZ2l0cyA9IGZvcm1hdFBhcmFtcz8ubWluRnJhY3Rpb25EaWdpdHMgPz8gZGlnaXRzSW5mbyA/PyAyO1xuICAgIGNvbnN0IG1heEZyYWN0aW9uRGlnaXRzID0gZm9ybWF0UGFyYW1zPy5tYXhGcmFjdGlvbkRpZ2l0cyA/PyBkaWdpdHNJbmZvID8/IDI7XG4gICAgY29uc3QgY2FwdGlvbiA9IGNvbHVtbi5jYXB0aW9uPy5sZW5ndGggPiAwID8gY29sdW1uLmNhcHRpb24gOiBkZWZhdWx0Q2FwdGlvbjtcblxuICAgIGlmICghaXNEZWNpbWFsKSByZXR1cm4gYCR7Y2FwdGlvbn0gJHt2YWx1ZT8udG9GaXhlZCgwKT8ucmVwbGFjZSgvXFxCKD89KFxcZHszfSkrKD8hXFxkKSkvZywgJywnKX0gPC9icj5gO1xuICAgIGNvbnN0IGRlY2ltYWxQb2ludCA9ICgoKSA9PiB7XG4gICAgICBjb25zdCBmYWN0b3IgPSAxMCAqKiBtYXhGcmFjdGlvbkRpZ2l0cztcbiAgICAgIGNvbnN0IFtpbnRQYXJ0LCBkZWNQYXJ0ID0gJyddID0gKE1hdGgudHJ1bmModmFsdWUgKiBmYWN0b3IpIC8gZmFjdG9yKT8udG9TdHJpbmcoKT8uc3BsaXQoJy4nKTtcbiAgICAgIHJldHVybiBpbnRQYXJ0LnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csICcsJykgKyAnLicgKyBkZWNQYXJ0Py5wYWRFbmQobWluRnJhY3Rpb25EaWdpdHMsICcwJyk7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gYCR7Y2FwdGlvbn0gJHtkZWNpbWFsUG9pbnR9IDwvYnI+YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgZGVjaW1hdCBhbmQgbnVtZXJpYyB2YWx1ZXNcbiAgICovXG4gIGFsbG93TGVhZGluZ0RvdChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQ/LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGlmIChldmVudD8ua2V5ID09PSAnLicgJiYgaW5wdXQ/LnNlbGVjdGlvblN0YXJ0ID09PSAwKSB7XG4gICAgICBpbnB1dC52YWx1ZSA9ICcwLic7XG4gICAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICBzZXROdW1lcmljVmFsdWVzKCkge1xuICAgIGlmICh0aGlzLmNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgdGhpcy5yb3dzRGF0YT8ubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk5VTUVSSUMpIHtcbiAgICAgICAgICBjb25zdCBkaWdpdHNJbmZvID0gY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbztcbiAgICAgICAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbHVtbj8uZm9ybWF0Py50eXBlID09PSAncGVyY2VudCcgJiYgcm93W2NvbHVtbi5maWVsZF0pIHtcbiAgICAgICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uYWxsb3dDYWxjdWxhdGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGlnaXRzSW5mbykge1xuICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBwYXJzZUZsb2F0KChyb3dbY29sdW1uLmZpZWxkXSAqIDEwMCk/LnRvU3RyaW5nKCkpLnRvRml4ZWQoZGlnaXRzSW5mbyk7ICAgICAgICAgLy9USEVTRSBDT01NRU5URUQgT1VUIExJTkVTIFNIT1VMRCBSVU4gT04gU0FWRVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHJvd1tjb2x1bW4uZmllbGRdICogMTAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBwYXJzZUZsb2F0KHJvd1tjb2x1bW4uZmllbGRdKS50b0ZpeGVkKGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbj8uZm9ybWF0Py50eXBlID09PSAnZGVjaW1hbCcgJiYgcm93W2NvbHVtbi5maWVsZF0pIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBwYXJzZUZsb2F0KHJvd1tjb2x1bW4uZmllbGRdKS50b0ZpeGVkKDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgY29sdW1uIHZhbHVlIGJhc2VkIG9uIGNvbHVtbiBmaWVsZFxuICAgKi9cbiAgZ2V0Q29sdW1uVmFsdWVzKGNvbHVtbjogSUdyaWRDb2x1bW4pOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMucm93c0RhdGFcbiAgICAgIC5tYXAoKHJvdykgPT4ge1xuICAgICAgICBjb25zdCBvYmpUZXh0ID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQ7XG4gICAgICAgIGxldCB2YWx1ZSA9IG9ialRleHQgIT0gbnVsbCA/IG9ialRleHQgOiByb3dbY29sdW1uLmZpZWxkXTtcbiAgICAgICAgcmV0dXJuIGlzTmFOKE51bWJlcih2YWx1ZSkpID8gMCA6IE51bWJlcih2YWx1ZSk7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigodmFsKSA9PiB2YWwgIT0gbnVsbCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogRXhwb3J0IHRvIFBERlxuICAgKi9cbiAgZXhwb3J0UGRmKCkge1xuICAgIHZhciBleHBvcnREYXRhID0gdGhpcy5zZXRFeHBvcnREYXRhKFsuLi50aGlzLnJvd3NEYXRhXSwgdHJ1ZSk7XG4gICAgbGV0IGRvYyA9IG5ldyBqc1BERigncCcsICdwdCcpO1xuICAgIGRvYy50YWJsZSgxLCAxLCBleHBvcnREYXRhLnJvd3MsIGV4cG9ydERhdGEuaGVhZGluZ3MsIHsgYXV0b1NpemU6IHRydWUgfSk7XG4gICAgZG9jLnNhdmUoJ0V4cG9ydC5wZGYnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgU3ViLWZ1bmN0aW9uIHRvIHNldCByb3dzIGZvciBleHBvcnQgdG8gUGRmLCBhbmQgRXhjZWxcbiAgICogQHJvd3MgcGFyYW0gZm9yIHJvd3NcbiAgICogQGlzRXhjZWwgcGFyYW0gZm9yIGV4cG9ydCB0byBleGNlbCBpbmRpY2F0aW9uXG4gICAqL1xuICBzZXRFeHBvcnREYXRhKHJvd3M6IGFueVtdID0gW10sIGlzUGRmOiBib29sZWFuID0gZmFsc2UpOiBJR3JpZERhdGFFeHBvcnQge1xuICAgIGNvbnN0IGhlYWRpbmdzOiBhbnkgPSB0aGlzLmNvbHVtbnMubWFwKChjb2x1bW4pID0+IGNvbHVtbi5maWVsZCk7XG4gICAgcm93cy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGZvciAodmFyIHByb3AgaW4gcm93KSB7XG4gICAgICAgIGlmICghaGVhZGluZ3MuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICBkZWxldGUgcm93W3Byb3BdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1BkZikge1xuICAgICAgICAgIHJvd1twcm9wXSA9XG4gICAgICAgICAgICAhcm93W3Byb3BdICYmIHR5cGVvZiByb3dbcHJvcF0gIT09ICdib29sZWFuJ1xuICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgIDogcm93W3Byb3BdLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4geyByb3dzLCBoZWFkaW5ncyB9O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEV4cG9ydCB0byBFeGNlbFxuICAgKi9cbiAgZXhwb3J0RXhjZWwoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnU2VydmljZS5leHBvcnRUb0V4Y2VsPy51bmlxdWVLZXkpIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLmdldFVzZXJzRGF0YSgpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgbGV0IHJvd3MgPSB0aGlzLmdyaWRTZXJ2aWNlLnNldERhdGFGaWVsZHMocmVzcG9uc2U/LnJlY29yZHMpO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5leHBvcnRGaWxlKHJvd3MpO1xuICAgICAgfSxcbiAgICAgICAgKHsgZXJyb3IgfSkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFwaUVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5leHBvcnRGaWxlKHRoaXMucm93c0RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydEZpbGUocmVjb3Jkcykge1xuICAgIGxldCBhcnI6IGFueSA9IFtdO1xuICAgIHJlY29yZHMuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgIGxldCBvYmo6IGFueSA9IHt9O1xuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgZ3JpZEhlYWRlciA9IGNvbHVtbi5oZWFkZXI7XG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTkspIHtcbiAgICAgICAgICBjb25zdCBsaW5rT2JqID0gcm93W2NvbHVtbi5kaXNwbGF5VGV4dD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ107XG4gICAgICAgICAgb2JqW2dyaWRIZWFkZXJdID0gcm93W2NvbHVtbi5maWVsZF0gKyAnfCcgKyBsaW5rT2JqPy5oeXBlcmxpbms7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JqW2dyaWRIZWFkZXJdID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgYXJyLnB1c2gob2JqKTtcbiAgICB9KTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmV4cG9ydEV4Y2VsKGFyciwgdGhpcy5zZWxlY3RlZENvbHVtbnMsIEVHcmlkRXhjZWwuRVhQT1JUKTtcbiAgfVxuICBnZXRVc2Vyc0RhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFNlcnZpY2UuZ2V0PGFueVtdLCBSZXF1ZXN0RHRvPignL0RhdGEvRmV0Y2gnLCB7XG4gICAgICB1bmlxdWVLZXk6IHRoaXMuY29uZmlnU2VydmljZS5leHBvcnRUb0V4Y2VsPy51bmlxdWVLZXksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNvbmZpZ1NlcnZpY2UuZXhwb3J0VG9FeGNlbD8uZmlsdGVycyxcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICpzZXQgY29uZmlnIGRhdGEgb2YgbG9va3VwIGNvbnRyb2wgZGlhbG9nXG4gICAqL1xuICBzZXRMb29rdXBEaWFsb2dDb25maWcocm93OiBhbnksIGNvbHVtbjogYW55LCBkYXRhOiBhbnkpIHtcbiAgICBsZXQgc2VsZWN0aW9uOiBzdHJpbmcgPSAnJztcbiAgICBpZiAocm93W2NvbHVtbi5maWVsZF0gJiYgdHlwZW9mIHJvd1tjb2x1bW4uZmllbGRdID09PSAnb2JqZWN0Jykge1xuICAgICAgc2VsZWN0aW9uID0gcm93W2NvbHVtbi5maWVsZF0udGV4dDtcbiAgICB9IGVsc2UgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQgJiYgcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdKSB7XG4gICAgICBzZWxlY3Rpb24gPSByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGVjdGlvbiA9IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIH1cblxuICAgIGlmIChjb2x1bW4uZmllbGQgJiYgdHlwZW9mIHJvd1tjb2x1bW4uZmllbGRdID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3QgbmV3Um93ID0geyAuLi5yb3cgfTtcbiAgICAgIG5ld1Jvd1tjb2x1bW4uZmllbGRdID0gbmV3Um93W2NvbHVtbi5maWVsZF0/LnZhbHVlO1xuICAgICAgcm93ID0geyAuLi5uZXdSb3cgfTtcbiAgICB9XG5cbiAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQgJiYgZGF0YSkge1xuICAgICAgbGV0IG9iaiA9IGF1dG9TZXRMb29rdXBEYXRhKGRhdGEsIHJvdyk7XG4gICAgICByb3dbY29sdW1uLmZpZWxkICsgJy1kYXRhJ10gPSBvYmo7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICByb3dEYXRhOiByb3dbY29sdW1uLmZpZWxkICsgJy1kYXRhJ10sXG4gICAgICBzZWxlY3Rpb246IHNlbGVjdGlvbixcbiAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBsaW5rIG9uIGxvb2t1cENvbnRyb2wgY29udHJvbCBpbiByZWFkIG9ubHkgbW9kZSB3aGVuIGVkaXRMaW5rIHNldCB0cnVlXG4gICAqL1xuICBvcGVuTG9va3VwSHlwZXJsaW5rKGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdzogYW55KSB7XG4gICAgY29uc3QgbG9va3VwSW5mbyA9IGNvbHVtbi5sb29rdXBDb250cm9sO1xuICAgIGlmIChjb2x1bW4uZWRpdExpbmsgPT09IHRydWUgJiYgbG9va3VwSW5mby5jb21wb25lbnQpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBsb29rdXBJbmZvLmRhdGEgPyBsb29rdXBJbmZvLmRhdGEgOiBsb29rdXBJbmZvLmRhdGEuZGF0YTtcbiAgICAgIGxldCBvYmo6IGFueSA9IHRoaXMuc2V0TG9va3VwRGlhbG9nQ29uZmlnKHJvdywgY29sdW1uLCBkYXRhKTtcbiAgICAgIG9ialsnY29tcG9uZW50J10gPSBsb29rdXBJbmZvLmNvbXBvbmVudDtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXMub3Blbkxvb2t1cERpYWxvZyhvYmopO1xuICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgICAgLnBpcGUodGFrZSgxKSkgLy8gRW1pdCBvbmx5IG9uY2Ugd2hlbiB0aGUgem9uZSBiZWNvbWVzIHN0YWJsZVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBkcmFnZ2FibGVEaWFsb2coY29sdW1uPy5maWVsZCA/IGNvbHVtbj8uZmllbGQgOiBjb2x1bW4/LmhlYWRlcilcbiAgICAgICAgfSk7XG4gICAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICBpZiAocmVzICYmIGNvbHVtbi5vblJldHVybikge1xuICAgICAgICAgIGNvbHVtbi5vblJldHVybihyZXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBsb29rdXAgRGlhbG9nXG4gICAqL1xuICBvcGVuTG9va3VwRGlhbG9nKGNvbHVtbj86IGFueSwgcm93OiBhbnkgPSB7fSkge1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCA9IGZhbHNlO1xuICAgIHRoaXMuZm9ybVNlcnZpY2UuZmllbGRGb2N1c2VkT3V0ID0gZmFsc2U7XG4gICAgY29uc3QgY29sdW1uRGF0YSA9IGNvbHVtbi5jb2x1bW4/Lmxvb2t1cENvbnRyb2w/LmRhdGEgPyBjb2x1bW4uY29sdW1uLmxvb2t1cENvbnRyb2wuZGF0YSA6IGNvbHVtbi5jb2x1bW4uZGF0YTtcbiAgICBpZiAocm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sKSB7XG4gICAgICByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmhlYWRlciA/IGNvbHVtbkRhdGEuaGVhZGVyID0gcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5oZWFkZXIgOiAnJ1xuICAgICAgcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy53aWR0aCA/IGNvbHVtbkRhdGEud2lkdGggPSByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LndpZHRoIDogJydcbiAgICAgIHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8uaGVpZ2h0ID8gY29sdW1uRGF0YS5oZWlnaHQgPSByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmhlaWdodCA6ICcnXG4gICAgICByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LnZhbHVlUHJvcCA/IGNvbHVtbkRhdGEudmFsdWVQcm9wID0gcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy52YWx1ZVByb3AgOiBcIlwiXG4gICAgICByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmxhYmVsUHJvcCA/IGNvbHVtbkRhdGEubGFiZWxQcm9wID0gcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5sYWJlbFByb3AgOiBcIlwiXG4gICAgICByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmRhdGEgPyBjb2x1bW5EYXRhLmRhdGEgPSByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmRhdGEgOiAnJ1xuICAgIH1cblxuICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oY29sdW1uLmNvbXBvbmVudCwge1xuICAgICAgLi4uY29sdW1uRGF0YSxcbiAgICAgIHN0eWxlQ2xhc3M6ICdsb29rdXAtbW9kZWwnLFxuICAgICAgaGVpZ2h0OiBjb2x1bW5EYXRhPy5oZWlnaHQgPyBjb2x1bW5EYXRhPy5oZWlnaHQgOiAnOTB2aCcsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHNlbGVjdGlvbjogY29sdW1uLnNlbGVjdGlvbixcbiAgICAgICAgZmllbGQ6IGNvbHVtbi5jb2x1bW4uZmllbGQsXG4gICAgICAgIGxhYmVsUHJvcDogY29sdW1uLmNvbHVtbi5sb29rdXBDb250cm9sPy5kYXRhPy5sYWJlbFByb3AsXG4gICAgICAgIC4uLmNvbHVtbi5yb3dEYXRhLFxuICAgICAgfSxcbiAgICAgIGNsb3NhYmxlOiB0cnVlLFxuICAgICAgZm9jdXNPblNob3c6IGZhbHNlXG4gICAgfSk7XG4gICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgIC5waXBlKHRha2UoMSkpIC8vIEVtaXQgb25seSBvbmNlIHdoZW4gdGhlIHpvbmUgYmVjb21lcyBzdGFibGVcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZlsnZGlhbG9nQ2xvc2UnXSA9IHRoaXMuZGlhbG9nUmVmLmNsb3NlO1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSA9IHRoaXMuaW50ZXJjZXB0RGlhbG9nQ2xvc2UuYmluZCh0aGlzLCB0aGlzLmRpYWxvZ1JlZik7XG4gICAgICB9KTtcblxuICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgdGhpcy5kaWFsb2dSZWZbJ2RpYWxvZ0Nsb3NlJ10gPSB0aGlzLmRpYWxvZ1JlZi5jbG9zZTtcbiAgICAvLyAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlID0gdGhpcy5pbnRlcmNlcHREaWFsb2dDbG9zZS5iaW5kKHRoaXMpO1xuICAgIC8vIH0sIDgwMCk7XG5cbiAgICB0aGlzLnNldER5bmFtaWNEaWFsb2dSZWYodGhpcy5kaWFsb2dSZWYpO1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSByb3dbY29sdW1uLmNvbHVtbi5maWVsZF0/Lm5hbWU7XG4gICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgIHRoaXMucGFnZUxvZ2dlclNlcnZpY2Uuc2F2ZVBhZ2VMb2dnZXJJbmZvKHRoaXMucm91dGVyLnVybD8uc3Vic3RyaW5nKDEpLCBjb21wb25lbnROYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGlhbG9nUmVmO1xuICB9XG5cbiAgaW50ZXJjZXB0RGlhbG9nQ2xvc2UoZGlhbG9nUmVmOiBhbnksIGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBkaWFsb2dFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3AtZGlhbG9nJyk7XG4gICAgaWYgKCFkaWFsb2dFbCkge1xuICAgICAgZGlhbG9nUmVmPy5kaWFsb2dDbG9zZShldmVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZvcm1TYXZlQnV0dG9uID0gZGlhbG9nRWxbMF0/LnF1ZXJ5U2VsZWN0b3IoJy5mb3JtLXNhdmUtYnV0dG9uJyk7XG4gICAgY29uc3QgZ3JpZFNhdmVBbGxCdXR0b24gPSBkaWFsb2dFbFswXT8ucXVlcnlTZWxlY3RvcignLnNhdmUtYWxsLWdyaWQnKTtcbiAgICBjb25zdCBoYXNVbnNhdmVkID0gKGZvcm1TYXZlQnV0dG9uIHx8IGdyaWRTYXZlQWxsQnV0dG9uKSAmJiAodGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0IHx8IHRoaXMuZm9ybVNlcnZpY2UuZmllbGRGb2N1c2VkT3V0KTtcbiAgICBpZiAoaGFzVW5zYXZlZCkge1xuICAgICAgaWYgKGNvbmZpcm0oXCJZb3Ugd2lsbCBsb3NlIGNoYW5nZXMgbm90IHNhdmVkIG9uIHBhZ2UuIFdvdWxkIHlvdSBsaWtlIHRvIGNvbnRpbnVlP1wiKSkge1xuICAgICAgICBkaWFsb2dSZWY/LmRpYWxvZ0Nsb3NlKGV2ZW50KTtcbiAgICAgICAgdGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpYWxvZ1JlZj8uZGlhbG9nQ2xvc2UoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNldCBkaWFsb2cgcmVmIHdoZW4gcG9wdXAgb3BlblxuICBzZXREeW5hbWljRGlhbG9nUmVmKHJlZikge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5kaWFsb2dDb21wb25lbnRSZWZNYXAuZ2V0KHJlZik7XG4gICAgY29uc3QgZHluYW1pY0NvbXBvbmVudCA9IGRpYWxvZ1JlZj8uaW5zdGFuY2UgYXMgRHluYW1pY0RpYWxvZ0NvbXBvbmVudDtcbiAgICBjb25zdCBhcmlhTGFiZWxsZWRCeSA9IGR5bmFtaWNDb21wb25lbnQuZ2V0QXJpYUxhYmVsbGVkQnkoKTtcbiAgICBkeW5hbWljQ29tcG9uZW50LmdldEFyaWFMYWJlbGxlZEJ5ID0gKCkgPT4gYXJpYUxhYmVsbGVkQnk7XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBkaWFsb2cgb24gbG9va3VwQ29udHJvbCBmaWVsZFxuICAgKi9cbiAgc2VsZWN0TG9va3VwRmllbGQoY29sdW1uOiBhbnksIHJvdz86IGFueSkge1xuICAgIHRoaXMub25DbGlja0V2ZW50KGNvbHVtbiwgcm93KTtcbiAgICBsZXQgb2JqOiBhbnkgPSB0aGlzLnNldExvb2t1cERpYWxvZ0NvbmZpZyhcbiAgICAgIHJvdyxcbiAgICAgIGNvbHVtbixcbiAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5kYXRhXG4gICAgICAgID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmRhdGEgOiBjb2x1bW4/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmRhdGFcbiAgICApO1xuXG4gICAgb2JqWydjb21wb25lbnQnXSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5jb21wb25lbnQgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uY29tcG9uZW50IDogY29sdW1uLmxvb2t1cENvbnRyb2w/LmNvbXBvbmVudDtcbiAgICBjb25zdCByZWYgPSB0aGlzLm9wZW5Mb29rdXBEaWFsb2cob2JqLCByb3cpO1xuICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgZHJhZ2dhYmxlRGlhbG9nKGNvbHVtbj8uZmllbGQgPyBjb2x1bW4/LmZpZWxkIDogY29sdW1uPy5oZWFkZXIpXG4gICAgICB9KTtcbiAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoXG4gICAgICAocmVzKSA9PiB7XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICBpZiAoIXJvdy5faXNFZGl0ZWQpIHtcbiAgICAgICAgICAgIHJvdy5faXNFZGl0ZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByb3cuX2lzRWRpdGVkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLnVzZXJTZWFyY2hlZCA9IGZhbHNlO1xuICAgICAgICAgIGxldCB2YWx1ZSA9IHNldERpYWxvZ1Jlc3BvbnNlKFxuICAgICAgICAgICAgY29sdW1uLFxuICAgICAgICAgICAgY29sdW1uLmxvb2t1cENvbnRyb2wsXG4gICAgICAgICAgICByZXNcbiAgICAgICAgICApO1xuICAgICAgICAgIHJlcyA9IG9iakNvbnZlcnRUb0xvd2VyKHJlcyk7XG4gICAgICAgICAgbGV0IGxhYmVsUHJvcCA9IGNvbHVtbj8ubG9va3VwQ29udHJvbD8uZGF0YT8ubGFiZWxQcm9wPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGxldCB2YWx1ZVByb3AgPSBjb2x1bW4/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LnZhbHVlUHJvcD8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBsZXQgY29sdW1uRmllbGQgPSBjb2x1bW4/LmZpZWxkPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICBpZiAocm93Py5oYXNPd25Qcm9wZXJ0eShjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICAgICByb3dbY29sdW1uRmllbGRdID0gcmVzW3ZhbHVlUHJvcCA/IHZhbHVlUHJvcCA6IGNvbHVtbkZpZWxkXTtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldID0gcmVzW2xhYmVsUHJvcCA/IGxhYmVsUHJvcCA6IGNvbHVtbi5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByb3dbY29sdW1uRmllbGRdID0ge1xuICAgICAgICAgICAgICAgIHRleHQ6IHJlc1tsYWJlbFByb3AgPyBsYWJlbFByb3AgOiBjb2x1bW4uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldLFxuICAgICAgICAgICAgICAgIHZhbHVlOiByZXNbdmFsdWVQcm9wID8gdmFsdWVQcm9wIDogY29sdW1uRmllbGRdLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB2YWx1ZS52YWx1ZSkge1xuICAgICAgICAgICAgdmFsdWVbJ2ZpZWxkJ10gPSBjb2x1bW5GaWVsZDtcbiAgICAgICAgICAgIGlmIChsYWJlbFByb3AgfHwgdmFsdWVQcm9wKSB7XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW5GaWVsZF0gPSB7XG4gICAgICAgICAgICAgICAgdGV4dDogcmVzW2xhYmVsUHJvcCA/IGxhYmVsUHJvcCA6IHJlc1tsYWJlbFByb3BdXSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogcmVzW3ZhbHVlUHJvcCA/IHZhbHVlUHJvcCA6IHJlc1tsYWJlbFByb3BdXSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW5GaWVsZF0gPSB2YWx1ZS52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGxhYmVsUHJvcCB8fCB2YWx1ZVByb3ApIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbkZpZWxkXSA9IHtcbiAgICAgICAgICAgICAgICB0ZXh0OiByZXNbbGFiZWxQcm9wID8gbGFiZWxQcm9wIDogdmFsdWVQcm9wID8gdmFsdWVQcm9wIDogcmVzW2NvbHVtbkZpZWxkXV0sXG4gICAgICAgICAgICAgICAgdmFsdWU6IHJlc1t2YWx1ZVByb3AgPyB2YWx1ZVByb3AgOiByZXNbY29sdW1uRmllbGRdXSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW5GaWVsZF0gPSByZXNbY29sdW1uRmllbGRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIChyb3dbY29sdW1uLmZpZWxkXSkgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSA9IHsgLi4ucm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10sIHRleHQ6IHJvd1tjb2x1bW4uZmllbGRdIH07XG4gICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXT8udmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgIGlmIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSkge1xuICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gPSB7IC4uLnJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLCB0ZXh0OiB7IHRleHQ6IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSwgdmFsdWU6IHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldIH0gfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gPSB7IHRleHQ6IHsgdGV4dDogcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldLCB2YWx1ZTogcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0gfSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChyZXMpIHtcbiAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSA9IHsgLi4ucm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10sIHRleHQ6IHsgdGV4dDogcmVzW2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0sIHZhbHVlOiByZXNbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXSB9IH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbHVtbi5vblJldHVybikge1xuICAgICAgICAgIGNvbHVtbi5vblJldHVybihyZXMsIHJvdyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvd1tjb2x1bW4uZmllbGRdICE9PSBvYmouc2VsZWN0aW9uKSB7XG4gICAgICAgICAgdGhpcy5icm93c2VyQ2xvc2VFdmVudCh0cnVlKTtcbiAgICAgICAgICBpZiAoY29sdW1uLm9uQ2hhbmdlKSB7XG4gICAgICAgICAgICBjb2x1bW4ub25DaGFuZ2Uocm93KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoeyBlcnJvciB9KSA9PiB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFwaUVycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgc2V0RmlsdGVyTG9va3VwKGNvbHVtbjogYW55KSB7XG4gICAgdGhpcy5ncmlkU2VydmljZS5zZXRMb29rVXBGaWx0ZXIoY29sdW1uLCB0aGlzLmRpYWxvZ1NlcnZpY2UpO1xuICB9XG5cbiAgLy8gc2V0IGxvb2t1cCB2YWx1ZSB0aGF0IGRpc3BsYXkgaW4gcmVhZE9ubHlNb2RlXG4gIHNldExvb2t1cFJlYWRPbmx5VmFsdWUocm93LCBjb2x1bW4pIHtcbiAgICBsZXQgdmFsdWUgPSAnJztcbiAgICBpZiAodHlwZW9mIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8udGV4dCkgPT09IFwib2JqZWN0XCIgJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQgJiYgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0KT8uaGFzT3duUHJvcGVydHkoJ3RleHQnKSkge1xuICAgICAgdmFsdWUgPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8udGV4dC50ZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQpIHtcbiAgICAgICAgdmFsdWUgPSByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvLyBDaGVjayBjYWxlbmRhciB2YWx1ZSBpcyBjaGFuZ2VkIG9yIG5vdFxuICBjYWxlbmRhckNoYW5nZUV2ZW50KGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIGxldCB2YWx1ZUNoYW5nZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGlmIChcbiAgICAgIGNvbHVtbi50aW1lT25seSAmJlxuICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZF0sICdoaDptbSBhJykgIT09XG4gICAgICB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmNhbGVuZGFyUHJldmlvdXNWYWx1ZSwgJ2hoOm1tIGEnKVxuICAgICkge1xuICAgICAgdmFsdWVDaGFuZ2UgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBjb2x1bW4uc2hvd1RpbWUgJiZcbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGRdLCAneXl5eS1NTS1kZCBoaDptbScpICE9PVxuICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5jYWxlbmRhclByZXZpb3VzVmFsdWUsICd5eXl5LU1NLWRkIGhoOm1tJylcbiAgICApIHtcbiAgICAgIHZhbHVlQ2hhbmdlID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZF0sICd5eXl5LU1NLWRkJykgIT09XG4gICAgICB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmNhbGVuZGFyUHJldmlvdXNWYWx1ZSwgJ3l5eXktTU0tZGQnKVxuICAgICkge1xuICAgICAgdmFsdWVDaGFuZ2UgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodmFsdWVDaGFuZ2UpIHtcbiAgICAgIHRoaXMuYnJvd3NlckNsb3NlRXZlbnQodHJ1ZSk7XG4gICAgICB0aGlzLmdlbmVyYXRlUm93c0RhdGFDb3B5ID0gZmFsc2U7XG4gICAgICB0aGlzLnJvd1VwZGF0ZUNoYW5nZSA9IHRydWU7XG5cbiAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAgIC5waXBlKHRha2UoMSkpIC8vIEVtaXQgb25seSBvbmNlIHdoZW4gdGhlIHpvbmUgYmVjb21lcyBzdGFibGVcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yb3dzQ2hhbmdlLmVtaXQodGhpcy5yb3dzRGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgICAgLy8gfSwgMjUwKTtcbiAgICAgIGlmIChjb2x1bW4ub25DaGFuZ2UpIHtcbiAgICAgICAgY29sdW1uLm9uQ2hhbmdlKHJvdyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2FsZW5kYXJQcmV2aW91c1ZhbHVlID0gJyc7XG4gIH1cblxuICBzZXRBdXRvQ29tcGxldGV2YWx1ZU9uVHlwZShjb2x1bW46IGFueSwgcm93OiBhbnksIGV2ZW50OiBhbnkgPSBbXSkge1xuICAgIGxldCB2YWx1ZSA9IGV2ZW50Py50YXJnZXQ/LnZhbHVlO1xuICAgIGxldCBmaWVsZCA9IGNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFICYmIHZhbHVlICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgY29uc3QgdmFsdWVLZXkgPSBjb2x1bW4ub3B0aW9uVmFsdWUgPyBjb2x1bW4ub3B0aW9uVmFsdWUgOiBmaWVsZDtcbiAgICAgIGNvbnN0IGxhYmVsS2V5ID0gY29sdW1uLm9wdGlvbkxhYmVsID8gY29sdW1uLm9wdGlvbkxhYmVsIDogY29sdW1uLmRpc3BsYXlGaWVsZCA/IGNvbHVtbi5kaXNwbGF5RmllbGQgOiBmaWVsZDtcbiAgICAgIGlmIChyb3dbZmllbGRdPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGFscmVhZHlFeGlzdCA9IHJvd1tmaWVsZF0/LmZpbmQoKHJvd0luZm8pID0+IHJvd0luZm9bZmllbGRdID09PSB2YWx1ZSk7XG4gICAgICAgIGlmICghYWxyZWFkeUV4aXN0KSB7XG4gICAgICAgICAgcm93W2ZpZWxkXSA9IFsuLi5yb3dbZmllbGRdLCB7IFtsYWJlbEtleT8udG9Mb3dlckNhc2UoKV06IHZhbHVlLCBbdmFsdWVLZXk/LnRvTG93ZXJDYXNlKCldOiB2YWx1ZSwgW2ZpZWxkPy50b0xvd2VyQ2FzZSgpXTogdmFsdWUgfV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJvd1tmaWVsZF0gPSBbeyBbbGFiZWxLZXk/LnRvTG93ZXJDYXNlKCldOiB2YWx1ZSwgW3ZhbHVlS2V5Py50b0xvd2VyQ2FzZSgpXTogdmFsdWUsIFtmaWVsZD8udG9Mb3dlckNhc2UoKV06IHZhbHVlIH1dO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZXZlbnQ/LnRhcmdldD8udmFsdWUpIHtcbiAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9ICcnO1xuICAgIH1cblxuICB9XG5cbiAgb25BdXRvQ29tcGxldGVLZXlFbnRlckV2ZW50KGUsIGNvbHVtbiwgcm93KSB7XG4gICAgaWYgKGNvbHVtbi50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUpIHtcbiAgICAgIGlmIChjb2x1bW4uYWxsb3dBdXRvQ29tcGxldGVTYXZlICYmIGUudGFyZ2V0LnZhbHVlICYmICFjb2x1bW4uZGF0YT8ubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2V0QXV0b0NvbXBsZXRldmFsdWVPblR5cGUoY29sdW1uLCByb3csIGUpO1xuICAgICAgICAvLy9jaGVjayB0aGUgY29ycmVjdCBmb3JtYXQgaWYgZGF0YS5jb250YWlucyBjdXogaXRzIGFuIGFycmF5IG9mIGFycmF5cyB3aXRoIG9iamVjdHMuXG4gICAgICAgIGlmIChjb25maXJtKGBEbyB5b3Ugd2FudCB0byBhZGQgJHtlLnRhcmdldC52YWx1ZX0gdG8gdGhlIHNlbGVjdGlvbj9gKSkge1xuICAgICAgICAgIGlmIChjb2x1bW4udW5pcXVlS2V5KSB7XG4gICAgICAgICAgICB2YXIgbWVzc2FnZSA9IHRoaXMuZ3JpZFNlcnZpY2VcbiAgICAgICAgICAgICAgLmFkZEF1dG9Db21wbGV0ZVZhbHVlKGNvbHVtbi51bmlxdWVLZXksIGUudGFyZ2V0LnZhbHVlLCBjb2x1bW4sIHJvdylcbiAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbi5vblJldHVybikge1xuICAgICAgICAgICAgICAgICAgY29sdW1uLm9uUmV0dXJuKGUudGFyZ2V0LnZhbHVlLCBjb2x1bW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIG9uRm9jdXNFdmVudChjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSkge1xuICAgIHRoaXMubnVtZXJpY1ZhbHVlW2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXVxuICB9XG5cbiAgb25Gb2N1c091dEV2ZW50KGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdzogYW55LCBldmVudDogYW55ID0gJycpIHtcbiAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5OVU1FUklDICYmIHRoaXMubnVtZXJpY1ZhbHVlW2NvbHVtbi5maWVsZF0gIT09IHJvd1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpXG4gICAgfVxuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJiB0aGlzLmlzTG9va3VwSW5wdXRFZGl0YWJsZShjb2x1bW4sIHJvdykpIHtcbiAgICAgIHRoaXMucmVzb2x2ZUxvb2t1cElucHV0VmFsdWUoY29sdW1uLCByb3cpO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLnR5cGUgIT09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUgfHwgKCFjb2x1bW4uYWxsb3dBdXRvQ29tcGxldGVTYXZlKSkge1xuICAgICAgdGhpcy5ncmlkU2VydmljZS5jaGVja1ZhbGlkaXR5KFtjb2x1bW5dLCByb3cpO1xuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSkge1xuICAgICAgICB0aGlzLmNhbGVuZGFyQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbHVtbi5vbkZvY3VzT3V0KSB7XG4gICAgICAgIGNvbHVtbi5vbkZvY3VzT3V0KHJvdyk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBjb2x1bW4ub25SZXR1cm4gJiZcbiAgICAgICAgY29sdW1uLnR5cGUgIT09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVRcbiAgICAgICkge1xuICAgICAgICBjb2x1bW4ub25SZXR1cm4ocm93KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnJvd1VwZGF0ZSA9IGZhbHNlO1xuICB9XG5cbiAgc2V0UmVwb3J0TmFtZShjb2x1bW46IElHcmlkUmVwb3J0QnRuLCByb3c6IGFueSkge1xuICAgIGxldCByZXBvcnQ6IGFueSA9ICcnO1xuICAgIGlmIChjb2x1bW4ucmVwb3J0SWQpIHtcbiAgICAgIHJlcG9ydCA9IGNvbHVtbi5yZXBvcnRJZDtcbiAgICB9IGVsc2UgaWYgKHJvd1tjb2x1bW4/LmxhYmVsPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXSAmJiByb3dbY29sdW1uPy5sYWJlbD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LnJlcG9ydFVuaXF1ZUtleSkge1xuICAgICAgcmVwb3J0ID0gcm93W2NvbHVtbj8ubGFiZWw/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5yZXBvcnRVbmlxdWVLZXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcG9ydCA9IGNvbHVtbi5yZXBvcnRVbmlxdWVLZXk7XG4gICAgfVxuICAgIHJldHVybiByZXBvcnQ7XG4gIH1cblxuICBzZXRSZXBvcnRQYXJhbXMoY29sdW1uOiBJR3JpZFJlcG9ydEJ0biwgcm93OiBhbnkpIHtcbiAgICBsZXQgcmVwb3J0UGFyYW1zOiBhbnlbXSA9IFtdO1xuICAgIGlmIChyb3dbY29sdW1uPy5sYWJlbD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10gJiYgcm93W2NvbHVtbj8ubGFiZWw/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5yZXBvcnRQYXJhbSkge1xuICAgICAgcmVwb3J0UGFyYW1zID0gcm93W2NvbHVtbj8ubGFiZWw/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5yZXBvcnRQYXJhbTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVwb3J0UGFyYW1zID0gY29sdW1uLnBhcmFtcztcbiAgICB9XG4gICAgcmV0dXJuIHJlcG9ydFBhcmFtcztcbiAgfVxuXG4gIHNldEZpbHRlckZvY3VzT3V0KGNvbDogYW55LCBmaWx0ZXI/OiBhbnksIGV2ZW50PzogYW55KSB7XG4gICAgdGhpcy5zZXRHcmlkRmlsdGVyKGNvbCwgZmlsdGVyLCBldmVudCk7XG4gIH1cblxuICBsb29rdXBGaWx0ZXJJbnB1dE5nTW9kZWwoY29sdW1uOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB0eXBlb2YgY29sdW1uWydmaWx0ZXJWYWx1ZV9vYmonXSA9PT0gJ29iamVjdCcgJiYgY29sdW1uWydmaWx0ZXJWYWx1ZV9vYmonXT8udGV4dCAhPSB1bmRlZmluZWQgPyBjb2x1bW5bJ2ZpbHRlclZhbHVlX29iaiddLnRleHQgOiBjb2x1bW4uZmlsdGVyVmFsdWU7XG4gIH1cblxuICBzZXRHcmlkRmlsdGVyKGNvbDogSUdyaWRDb2x1bW4sIGZpbHRlcj86IGFueSwgZXZlbnQ/OiBhbnkpIHtcbiAgICB0aGlzLmdyaWRGaWx0ZXJPYmogPSB7IGNvbHVtbjogY29sLCBmaWx0ZXI6IGZpbHRlciwgZXZlbnQ6IGV2ZW50IH07XG4gICAgY29uc3QgbmV3Q29sdW1uOiBhbnkgPSB7IC4uLmNvbCB9O1xuICAgIC8vY2hhbmdlIGZpbHRlciBjYWxlbmRhciBmb3JtYXRcbiAgICBpZiAobmV3Q29sdW1uLnR5cGUgPT09ICdkYXRlJyAmJiBuZXdDb2x1bW4uZmlsdGVyVmFsdWUgJiYgbmV3Q29sdW1uLmZpbHRlcj8udHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSKSB7XG4gICAgICBuZXdDb2x1bW4uZmlsdGVyVmFsdWUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShjb2wuZmlsdGVyVmFsdWUudG9TdHJpbmcoKS50cmltKCksICd5eXl5LU1NLWRkJyk7XG4gICAgfVxuICAgIGlmIChuZXdDb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4gJiYgbmV3Q29sdW1uLmZpbHRlclZhbHVlICYmIG5ld0NvbHVtbi5maWx0ZXI/LnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DSEVDS0JPWCkge1xuICAgICAgbGV0IHZhbHVlID0gbmV3Q29sdW1uLmZpbHRlclZhbHVlO1xuICAgICAgaWYgKG5ld0NvbHVtbi5mb3JtYXR0ZXIgPT09IEVHcmlkRm9ybWF0dGVyLkNIQVIpIHtcbiAgICAgICAgbmV3Q29sdW1uLmZpbHRlclZhbHVlID0gdmFsdWUgPT09IHRydWUgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICdZJyB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJzEnID8gJ1knIDogJ04nO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmZpbHRlck9iaihuZXdDb2x1bW4pO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdhcHBseUZpbHRlcicsIEpTT04uc3RyaW5naWZ5KGZhbHNlKSk7XG4gIH1cblxuICBmaWx0ZXJPYmooY29sOiBhbnkpIHtcbiAgICBjb25zdCBvYmogPSB7XG4gICAgICBmaWVsZDogY29sLmZpZWxkLFxuICAgICAgbWF0Y2hNb2RlOiBjb2wubWF0Y2hNb2RlID8gY29sLm1hdGNoTW9kZSA6IGNvbC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQgPyBFTWF0Y2hNb2RlLkVRVUFMUyA6ICdzdGFydHNXaXRoJyxcbiAgICAgIG9wZXJhdG9yOiBjb2wub3BlcmF0b3IgPyBjb2wub3BlcmF0b3IgOiAnYW5kJyxcbiAgICAgIHRhYmxlQWxpYXM6IGNvbC50YWJsZUFsaWFzID8gY29sLnRhYmxlQWxpYXMgOiAnJyxcbiAgICAgIHZhbHVlOiBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUID8gY29sLmZpbHRlclZhbHVlLnRvU3RyaW5nKCkgOiBjb2wudHlwZSA9PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmIGNvbC5oYXNPd25Qcm9wZXJ0eSgnZmlsdGVyVmFsdWVfb2JqJykgPyBjb2xbJ2ZpbHRlclZhbHVlX29iaiddPy52YWx1ZSA6IGNvbC5maWx0ZXJWYWx1ZSxcbiAgICB9O1xuICAgIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5LnB1c2gob2JqKTtcbiAgfVxuXG4gIGFwcGx5RW50ZXJFdmVudChmaWx0ZXI6IGFueSwgZXZlbnQ6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnVzZXJTZWFyY2hlZCA9IHRydWU7XG4gICAgdGhpcy5ncmlkU2VydmljZS5hcHBseUZpbHRlckV2ZW50ID0gdHJ1ZTtcbiAgICB0aGlzLnJvd1VwZGF0ZUNoYW5nZSA9IGZhbHNlO1xuICAgIHRoaXMuYXV0b0xvYWREYXRhID0gdHJ1ZTtcbiAgICAvL3RoaXMubG9hZGluZz10cnVlO1xuICAgIHRoaXMub25BcHBseUZpbHRlci5lbWl0KCk7XG4gICAgdGhpcy5maWx0ZXJPYmooY29sdW1uKTtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYXBwbHlGaWx0ZXInLCBKU09OLnN0cmluZ2lmeSh0cnVlKSk7XG4gICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTVVMVElTRUxFQ1QpIHtcbiAgICAgIGZpbHRlcihjb2x1bW4/LmZpbHRlclZhbHVlPy50b1N0cmluZygpKVxuICAgIH0gZWxzZSBpZiAoY29sdW1uPy5maWx0ZXI/LnR5cGUgPT09IHRoaXMuZHJvcERvd25GaWx0ZXI/LmNvbHVtbj8uZmlsdGVyPy50eXBlKSB7XG4gICAgICB0aGlzLmRyb3BEb3duRmlsdGVyLmZpbHRlcih0aGlzLmRyb3BEb3duRmlsdGVyLmV2ZW50LnRhcmdldCk7XG4gICAgfSBlbHNlIGlmIChmaWx0ZXIgJiYgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOICYmIGNvbHVtbj8uZmlsdGVyPy50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0hFQ0tCT1ggJiYgY29sdW1uLmZpbHRlcmluZyAhPT0gZmFsc2UpIHtcbiAgICAgIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSBFR3JpZEZvcm1hdHRlci5DSEFSKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IGNvbHVtbi5maWx0ZXJWYWx1ZTtcbiAgICAgICAgY29sdW1uLmZpbHRlclZhbHVlID0gdmFsdWUgPT09IHRydWUgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICdZJyB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJzEnID8gJ1knIDogJ04nO1xuICAgICAgICBmaWx0ZXIoY29sdW1uLmZpbHRlclZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBmaWx0ZXIoZXZlbnQ/LmNoZWNrZWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZmlsdGVyKSB7XG4gICAgICBmaWx0ZXIoZXZlbnQ/LnRhcmdldD8udmFsdWUpO1xuICAgIH1cbiAgICBpZiAodGhpcy5nbG9iYWxEYXRhPy5sZW5ndGggPT0gMCkge1xuICAgICAgdGhpcy5oYW5kbGVTZXJ2ZXJTaWRlRXZlbnRzKHRoaXMuZ3JpZGZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlTnVsbENhbGVuZGFyKGNvbHVtbjogSUdyaWRDb2x1bW4sIGZpbHRlcjogYW55LCBldmVudDogYW55KSB7XG4gICAgaWYgKGNvbHVtbi5maWx0ZXJWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5yZW1vdmVOdWxsRmlsdGVycyhjb2x1bW4pO1xuICAgICAgdGhpcy5zZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGJhY2tzcGFjZUV2ZW50KGV2ZW50OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgaWYgKFxuICAgICAgZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyAmJlxuICAgICAgKGNvbHVtbi5maWx0ZXJWYWx1ZT8udG9TdHJpbmcoKS5sZW5ndGggPT09IDEgfHxcbiAgICAgICAgY29sdW1uLmZpbHRlclZhbHVlPy50b1N0cmluZygpID09PSAnJyB8fFxuICAgICAgICBjb2x1bW4uZmlsdGVyVmFsdWUgPT09IG51bGwpXG4gICAgKSB7XG4gICAgICB0aGlzLnJlbW92ZU51bGxGaWx0ZXJzKGNvbHVtbik7XG4gICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUgJiYgY29sdW1uLmZpbHRlclZhbHVlID09PSBudWxsKSB7XG4gICAgICB0aGlzLnJlbW92ZU51bGxGaWx0ZXJzKGNvbHVtbik7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlTnVsbEZpbHRlcnMoY29sdW1uOiBhbnkpIHtcbiAgICBpZiAodGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkgJiYgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IGFyciA9IFsuLi50aGlzLmdsb2JhbEZpbHRlcnNBcnJheV07XG4gICAgICBsZXQgaW5kZXggPSBhcnIuZmluZEluZGV4KChpKSA9PiBpLmZpZWxkID09PSBjb2x1bW4uZmllbGQpO1xuICAgICAgYXJyLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheSA9IGFycjtcbiAgICB9XG4gICAgbGV0IGluZGV4ID0gdGhpcy5zZXJ2ZXJGaWx0ZXJzPy5maWx0ZXJzPy5maW5kSW5kZXgoKGkpID0+IHsgaS5maWVsZCA9PT0gY29sdW1uLmZpZWxkIH0pXG4gICAgdGhpcy5zZXJ2ZXJGaWx0ZXJzPy5maWx0ZXJzPy5zcGxpY2UoaW5kZXgsIDEpXG4gIH1cblxuICAvLyBSZW1vdmluZyBIZWFkZXIgRmlsdGVyIFZhbHVlIHVzaW5nIEJhY2tzcGFjZSBrZXkgRXZlbnQgb3IgRGVsZXRlIGtleSBFdmVudC5cbiAgcmVtb3ZpbmdGaWx0ZXJzKGV2ZW50OiBhbnksIGNvbHVtbjogSUdyaWRDb2x1bW4pIHtcbiAgICBpZiAoXG4gICAgICAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyB8fCBldmVudC5rZXkgPT09ICdEZWxldGUnKSAmJlxuICAgICAgY29sdW1uLmZpbHRlclZhbHVlPy50b1N0cmluZygpLmxlbmd0aCA9PT0gMFxuICAgICkge1xuICAgICAgbGV0IHNlYXJjaEZpbHRlcnM7XG4gICAgICBpZiAoIXRoaXMuc29mdENhY2hpbmcgJiYgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQpIHtcbiAgICAgICAgc2VhcmNoRmlsdGVycyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1NldEZpbHRlcnMtJyArIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsKSBhcyBhbnkpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCkge1xuICAgICAgICBzZWFyY2hGaWx0ZXJzID0gdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdO1xuICAgICAgfVxuICAgICAgaWYgKHNlYXJjaEZpbHRlcnMgJiYgc2VhcmNoRmlsdGVycy5maWx0ZXJzKSB7XG4gICAgICAgIGlmIChzZWFyY2hGaWx0ZXJzLmZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxldCBpbmRleCA9IHNlYXJjaEZpbHRlcnMuZmlsdGVycy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoeDogYW55KSA9PiB4LmZpZWxkID09PSBjb2x1bW4uZmllbGRcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBpZiAoc2VhcmNoRmlsdGVycy5maWx0ZXJzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCkge1xuICAgICAgICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1t0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHRoaXMuY3VycmVudFVybF0gPSBbXTtcbiAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ1NldEZpbHRlcnMtJyArIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNlYXJjaEZpbHRlcnMuZmlsdGVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICBpZiAoIXRoaXMuc29mdENhY2hpbmcgJiYgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQpIHtcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnU2V0RmlsdGVycy0nICsgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmwsIEpTT04uc3RyaW5naWZ5KHNlYXJjaEZpbHRlcnMpKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3RoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsXSA9IHNlYXJjaEZpbHRlcnM7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBZGQgQ2xpY2sgQnV0dG9uIEV2ZW50IG9uIEdyaWQuXG4gIG9uQ2xpY2tCdXR0b24oY29sdW1uOiBhbnksIHJvdzogYW55KSB7XG4gICAgdGhpcy5vcGVuR3JpZERpYWxvZyhjb2x1bW4sIHJvdyk7XG4gIH1cblxuICAvLyBJbnZva2Ugb25DbGljayBFdmVudC5cbiAgb25DbGlja0V2ZW50KGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTksgJiYgKGNvbHVtbi5lZGl0TGluayA9PT0gZmFsc2UgfHwgY29sdW1uLmVkaXRMaW5rID09PSB1bmRlZmluZWQpICYmIGNvbHVtbi5lZGl0YWJsZSAhPT0gdHJ1ZSAmJiBjb2x1bW4uZGlzYWJsZWQgIT09IHRydWUpIHtcbiAgICAgIHRoaXMub25DbGlja0V2ZW50VHJpZ2dlcmVkID0gdHJ1ZTtcbiAgICB9XG4gICAgLy8gaWYoY29sdW1uLnR5cGU9PT1FR3JpZENvbHVtblR5cGUuRElBTE9HICYmIHJvd1tjb2x1bW4uZmllbGRdKXtcbiAgICAvLyAgIHRoaXMub3BlbkdyaWREaWFsb2coY29sdW1uLHJvdylcbiAgICAvLyB9XG4gICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSAmJiByb3dbY29sdW1uLmZpZWxkXSkge1xuICAgICAgdGhpcy5jYWxlbmRhclByZXZpb3VzVmFsdWUgPSByb3dbY29sdW1uLmZpZWxkXTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgIXJvd1tjb2x1bW4uZmllbGRdICYmXG4gICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUgJiZcbiAgICAgIChjb2x1bW4uc2hvd1RpbWUgfHwgY29sdW1uLnRpbWVPbmx5KSAmJlxuICAgICAgY29sdW1uLm1pbnV0ZXNJbnRlcnZhbFxuICAgICkge1xuICAgICAgdGhpcy5kZWZhdWx0RGF0ZSA9IG5ldyBEYXRlKHNldE1pbnV0ZXNJbnRlcnZhbChuZXcgRGF0ZSgpKSk7XG4gICAgfVxuICAgIGlmIChjb2x1bW4gJiYgY29sdW1uLm9uQ2xpY2sgJiYgY29sdW1uLmRpc2FibGVkICE9PSB0cnVlICYmIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uYWN0aW9uPy5kaXNhYmxlZCAhPT0gdHJ1ZSB8fCByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzYWJsZWQgIT09IHRydWUgJiYgY29sdW1uLnR5cGUgIT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOKSkge1xuICAgICAgY29sdW1uLm9uQ2xpY2socm93KTtcbiAgICB9XG4gIH1cblxuICBzZXRNdWx0aVNlbGVjdFZhbHVlKGNvbHVtbiwgcm93KSB7XG4gICAgaWYgKHJvd1tjb2x1bW4uZmllbGRdICYmICFBcnJheS5pc0FycmF5KHJvd1tjb2x1bW4uZmllbGRdKSkge1xuICAgICAgaWYgKHR5cGVvZiAocm93W2NvbHVtbi5maWVsZF0pID09PSBcInN0cmluZ1wiICYmICFyb3dbY29sdW1uLmZpZWxkXT8uaW5jbHVkZXMoJywnKSkge1xuICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IFtyb3dbY29sdW1uLmZpZWxkXV07XG4gICAgICB9IGVsc2UgaWYgKHJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpPy5pbmNsdWRlcygnLCcpKSB7XG4gICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF0/LnNwbGl0KCcsJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByb3dbY29sdW1uLmZpZWxkXTtcbiAgfVxuXG4gIC8vIHNldCB0aGUgc2VsZWN0IHZhbHVlIG9mIG11bHRpLXNlbGVjdFxuICBzaG93T3B0aW9uKGNvbHVtbiwgcm93KSB7XG4gICAgcm93W2NvbHVtbi5maWVsZF0gPSB0aGlzLnNldE11bHRpU2VsZWN0VmFsdWUoY29sdW1uLCByb3cpO1xuICB9XG5cbiAgb25DbGVhclZhbHVlKGNvbHVtbiwgcm93KSB7XG4gICAgaWYgKGNvbHVtbj8udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmICFyb3dbY29sdW1uLmZpZWxkXSkge1xuICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIEludm9rZSBvbkNoYW5nZSBFdmVudFxuICBvbkNoYW5nZUV2ZW50KGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIGlmICghcm93Ll9pc0VkaXRlZCkge1xuICAgICAgcm93Ll9pc0VkaXRlZCA9IHRydWU7XG4gICAgfVxuICAgIC8vIHNldCBkcm9wZG93biBkaXNwbGF5RmllbGQgdmFsdWUgYmFzZSBvbiBvcHRpb25MYWJlbCAmIG9wdGlvblZhbHVlLlxuICAgIHRoaXMuZ3JpZFZhbGlkYXRpb24oY29sdW1uLCByb3csIHRydWUpXG4gICAgdGhpcy5kaXNwbGF5RmllbGREcm9wZG93blZhbHVlKGNvbHVtbiwgcm93KTtcbiAgICB0aGlzLm9uQ2xlYXJWYWx1ZShjb2x1bW4sIHJvdyk7XG4gICAgdGhpcy5icm93c2VyQ2xvc2VFdmVudCh0cnVlKTtcbiAgICB0aGlzLnJvd1VwZGF0ZUNoYW5nZSA9IHRydWU7XG4gICAgaWYgKGNvbHVtbi5vbkNoYW5nZSkge1xuICAgICAgY29sdW1uLm9uQ2hhbmdlKHJvdyk7XG4gICAgfVxuICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm9uQ2xpY2tFdmVudFRyaWdnZXJlZCA9PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5yb3dzQ2hhbmdlLmVtaXQodGhpcy5yb3dzRGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgdGhpcy5zZXREcm9wZG93bmRhdGFWYWx1ZSA9IGZhbHNlXG4gICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnJvd1VwZGF0ZSA9IGZhbHNlO1xuICAgIHRoaXMuZ2VuZXJhdGVSb3dzRGF0YUNvcHkgPSBmYWxzZVxuICAgIGlmIChjb2x1bW4uYWdncmVnYXRlICYmIGNvbHVtbi5hZ2dyZWdhdGUubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5hZ2dyZWdhdGVGb290ZXIgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbik7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tCb3hDaGFuZ2VFdmVudChldmVudDogYW55LCBjb2x1bW46IElHcmlkQ29sdW1uLCByb3cpIHtcbiAgICBpZiAoIXJvdy5faXNFZGl0ZWQpIHtcbiAgICAgIHJvdy5faXNFZGl0ZWQgPSB0cnVlO1xuICAgIH1cbiAgICByb3cuX2lzRWRpdGVkID0gdHJ1ZTtcbiAgICByb3dbY29sdW1uLmZpZWxkXSA9IGV2ZW50O1xuICAgIGlmICh0aGlzLnJvd3NDaGFuZ2Uub2JzZXJ2ZXJzPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5ncmlkU2VydmljZS5yb3dVcGRhdGUgPSBmYWxzZTtcbiAgICB0aGlzLmdlbmVyYXRlUm93c0RhdGFDb3B5ID0gZmFsc2VcbiAgICB0aGlzLnJvd1VwZGF0ZUNoYW5nZSA9IHRydWU7XG4gICAgdGhpcy5yb3dzQ2hhbmdlLmVtaXQodGhpcy5yb3dzRGF0YSk7XG4gICAgaWYgKGNvbHVtbi5vbkNsaWNrKSB7XG4gICAgICBjb2x1bW4ub25DbGljayhyb3cpO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLm9uQ2hhbmdlKSB7XG4gICAgICBjb2x1bW4ub25DaGFuZ2Uocm93KTtcbiAgICB9XG4gIH1cblxuICAvLyBzZXQgZHJvcGRvd24gZGlzcGxheUZpZWxkIHZhbHVlIGJhc2Ugb24gb3B0aW9uTGFiZWwgJiBvcHRpb25WYWx1ZS5cbiAgZGlzcGxheUZpZWxkRHJvcGRvd25WYWx1ZShjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICBjb2x1bW4/LnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTiAmJlxuICAgICAgY29sdW1uLmRpc3BsYXlGaWVsZCAmJlxuICAgICAgY29sdW1uLmRpc3BsYXlGaWVsZD8ubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgY29uc3Qga2V5OiBhbnkgPSBPYmplY3Qua2V5cyhyb3cpPy5maW5kKFxuICAgICAgICAocm93SW5mbykgPT5cbiAgICAgICAgICByb3dJbmZvPy50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW4uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKClcbiAgICAgICk7XG4gICAgICBjb25zdCBkaXNwbGF5RmllbGRWYWx1ZSA9IGNvbHVtbi5kYXRhLmZpbmQoXG4gICAgICAgIChyZWNvcmQ6IGFueSkgPT5cbiAgICAgICAgICByZWNvcmRbY29sdW1uLm9wdGlvblZhbHVlXT8udG9TdHJpbmcoKSA9PT1cbiAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKVxuICAgICAgKTtcbiAgICAgIGlmIChrZXkgJiYgZGlzcGxheUZpZWxkVmFsdWUpIHtcbiAgICAgICAgcm93W2tleV0gPSBkaXNwbGF5RmllbGRWYWx1ZVtjb2x1bW4ub3B0aW9uTGFiZWxdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCBhdXRvU2VhcmNoIG9uIEdyaWQuXG4gIGF1dG9TZWFyY2goZXZlbnQ6IGFueSwgY29sdW1uOiBhbnksIHJvdzogYW55KSB7XG4gICAgaWYgKGV2ZW50ICYmIGNvbHVtbiAmJiByb3cpIHtcbiAgICAgIGNvbHVtbi5vblJldHVybihldmVudC5xdWVyeSwgY29sdW1uLCByb3cpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlZnJlc2ggZ3JpZFxuICByZWZyZXNoR3JpZCgpIHtcbiAgICB0aGlzLnJlbG9hZFBhZ2UgPSBpbnRlcnZhbCh0aGlzLnNldEdyaWRSZWZyZXNoVGltZSkuc3Vic2NyaWJlKCh4KSA9PiB7XG4gICAgICBpZiAodGhpcy5ncmlkZmlsdGVyID09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmdyaWRmaWx0ZXIgPSB7IGZpbHRlcnM6IFtdLCBzb3J0czogW10gfTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNldEdyaWRSZWZyZXNoVGltZSkge1xuICAgICAgICB0aGlzLmhhbmRsZVNlcnZlclNpZGVFdmVudHModGhpcy5ncmlkZmlsdGVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJlbW92ZSBGaWx0ZXJWYWx1ZXNcbiAgY2xlYXJncmlkRmlsdGVyc1ZhbHVlKCkge1xuICAgIGNvbnN0IGdsb2JhbEZpbHRlckNsZWFyVmFsdWVCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcbiAgICAgICdjbGVhckdsb2JhbEZpbHRlckJ0bidcbiAgICApO1xuICAgIGlmIChnbG9iYWxGaWx0ZXJDbGVhclZhbHVlQnRuKSB7XG4gICAgICBnbG9iYWxGaWx0ZXJDbGVhclZhbHVlQnRuLmNsaWNrKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sdW1ucyAmJiB0aGlzLnNlbGVjdGVkQ29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNlcnZlckZpbHRlcnMuZmlsdGVycyA9IFtdO1xuICAgICAgbGV0IHNlYXJjaEZpbHRlcnMgPSB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1t0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHRoaXMuY3VycmVudFVybF07XG4gICAgICBzZWFyY2hGaWx0ZXJzPy5maWx0ZXJzPy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgICAgY29sLnZhbHVlID0gbnVsbDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICAgIGNvbC5maWx0ZXJWYWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuZmlsdGVyT2JqKGNvbCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBlZGl0QWxsUm93c0F0T25jZSgpIHtcbiAgICBpZiAodGhpcy5lZGl0Um93UGVybWlzc2lvbikge1xuICAgICAgaWYgKHRoaXMuZ2V0Q2xhc3NGb3JFZGl0QWxsUm93cygnZWRpdFJvdycpKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sdW1ucy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTiAmJiAoY29sdW1uLmZpbHRlcmluZyA9PT0gdHJ1ZSB8fCBjb2x1bW4uZmlsdGVyaW5nID09PSB1bmRlZmluZWQpKSkge1xuICAgICAgICAgIHRoaXMuZWRpdEFsbFJlY29yZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGFnaW5hdGlvbiAmJiB0aGlzLmVkaXRBbGxSZWNvcmQpIHtcbiAgICAgICAgICB0aGlzLnNvcnREaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdGhpcy5zb3J0RGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNhdmVBbGxSb3dzQXRPbmNlKCkge1xuICAgIHRoaXMuZ2V0Q2xhc3NGb3JFZGl0QWxsUm93cygnc2F2ZVJvdycpO1xuICB9XG5cbiAgLy8gcmVzZXQgdGhlIGdyaWQgcm93c1ZhbHVlIHRvIG9yaWduYWwgdmFsdWVzXG4gIGNhbmNlbEFsbFJvd3NBdE9uY2UoKSB7XG4gICAgdGhpcy5yb3dzRGF0YSA9IFsuLi50aGlzLnJvd3NEYXRhQ29weV07XG4gICAgdGhpcy5yb3dzRGF0YUNvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMucm93c0RhdGEpKTtcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucz8uZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKSB7XG4gICAgICAgIHRoaXMucm93c0RhdGE/LmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgIGlmIChyb3dbY29sdW1uLmZpZWxkXSkge1xuICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBuZXcgRGF0ZShyb3dbY29sdW1uLmZpZWxkXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgfSk7XG4gICAgaWYgKHRoaXMuY29sdW1ucz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgIGlmIChjb2x1bW4uYWdncmVnYXRlICYmIGNvbHVtbi5hZ2dyZWdhdGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuYWdncmVnYXRlRm9vdGVyID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnNldEFnZ3JlZ2F0ZVRleHQoY29sdW1uKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgdGhpcy5vbkNhbmNlbEFsbFJvd3MuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgfVxuICBnZXRDbGFzc0ZvckVkaXRBbGxSb3dzKGNsYXNzTmFtZTogc3RyaW5nID0gJycpIHtcbiAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGlmIChjbGFzc05hbWUgPT09ICdlZGl0Um93Jykge1xuICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgIHRoaXMub25Sb3dFZGl0SW5pdChyb3cpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgZ2V0QnRuczogYW55ID0gdGhpcy5lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50Py5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZSk7XG4gICAgaWYgKGdldEJ0bnMgJiYgZ2V0QnRucy5sZW5ndGggPiAwKSB7XG4gICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgIGlmIChjbGFzc05hbWUgPT09ICdzYXZlUm93Jykge1xuICAgICAgICB0aGlzLmVkaXRBbGxSZWNvcmQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zYXZlQWxsUmVjb3JkID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgcmVjb3JkcyQgPSBbXTtcbiAgICAgICAgY29uc3QgYWxsQnRucyA9IEFycmF5LmZyb20oZ2V0QnRucyk7XG5cbiAgICAgICAgYWxsQnRucy5mb3JFYWNoKChpdGVtOiBhbnksIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5yb3dzRGF0YVtpbmRleF07XG4gICAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgICAgY29uc3Qgcm93U2F2ZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICAgIGl0ZW0uY2xpY2soKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZShpdGVtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVjb3JkcyQucHVzaChyb3dTYXZlKTtcbiAgICAgICAgICAgIHJvdy5faXNFZGl0ZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIFByb21pc2UuYWxsKHJlY29yZHMkKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmdyaWRTZXJ2aWNlLmlzR3JpZFZhbGlkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jaGVja2xpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBjaGVja2xpc3RSb3dzID0gdGhpcy5zZXRSb3dzRGF0YSh0aGlzLmNoZWNrbGlzdCk7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY2hlY2tsaXN0XCIsIHRoaXMuY2hlY2tsaXN0KTtcbiAgICAgICAgICAgICAgY2hlY2tsaXN0Um93cy5mb3JFYWNoKHJvdyA9PiBkZWxldGUgcm93W3RoaXMuZGF0YUtleV0pO1xuICAgICAgICAgICAgICBpZiAodGhpcy5vcmlnaW5hbFJvd3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkUm93cyA9IGdldENoYW5nZWRSb3dzKGNoZWNrbGlzdFJvd3MsIHRoaXMub3JpZ2luYWxSb3dzLCB0aGlzLmNvbHVtbnMsIHRoaXMuZGF0YUtleSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vblJvd1VwZGF0ZS5lbWl0KGZpbHRlcmVkUm93cyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblJvd1VwZGF0ZS5lbWl0KGNoZWNrbGlzdFJvd3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlUm93c0RhdGFDb3B5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2F2ZVJlY29yZEFycmF5Py5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplVmFsID0gKHY6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHYgPT0gbnVsbCB8fCB2ID09PSAnJykgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICBpZiAodiBpbnN0YW5jZW9mIERhdGUpIHJldHVybiB2LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycgJiYgL15cXGR7NH0tXFxkezJ9LVxcZHsyfVQvLnRlc3QodikpIHJldHVybiB2LnNwbGl0KCdUJylbMF07XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0kLy50ZXN0KHYpKSByZXR1cm4gdjtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycgJiYgL15cXGR7MSwyfVxcL1xcZHsxLDJ9XFwvXFxkezR9JC8udGVzdCh2KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBbbSwgZCwgeV0gPSB2LnNwbGl0KCcvJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHt5fS0ke20ucGFkU3RhcnQoMiwgJzAnKX0tJHtkLnBhZFN0YXJ0KDIsICcwJyl9YDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgZWRpdGFibGVGaWVsZHMgPSB0aGlzLmNvbHVtbnNcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoYyA9PiBjLmVkaXRhYmxlICE9PSBmYWxzZSAmJiBjLmFsbG93U2F2ZSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAubWFwKGMgPT4gYy5maWVsZD8udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgICAgbGV0IGRpcnR5Um93cyA9IHRoaXMuc2F2ZVJlY29yZEFycmF5O1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9yaWdpbmFsUm93cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICBkaXJ0eVJvd3MgPSBnZXRDaGFuZ2VkUm93cyh0aGlzLnNhdmVSZWNvcmRBcnJheSwgdGhpcy5vcmlnaW5hbFJvd3MsIHRoaXMuY29sdW1ucywgdGhpcy5kYXRhS2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGRpcnR5Um93cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICBkaXJ0eVJvd3MuZm9yRWFjaChyb3cgPT4gZGVsZXRlIHJvd1t0aGlzLmRhdGFLZXldKTsgLy8gcmVtb3ZlIHRlbXBfaWQgYmVmb3JlIGVtaXR0aW5nIOKAlCBpdCdzIG9ubHkgdXNlZCBmb3IgZGlydHktcm93IGNvbXBhcmlzb25cbiAgICAgICAgICAgICAgICAgIHRoaXMub25Sb3dVcGRhdGUuZW1pdChkaXJ0eVJvd3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnNhdmVSZWNvcmRBcnJheSA9IFtdO1xuICAgICAgICAgIHRoaXMuZWRpdEFsbFJvd3NBdE9uY2UoKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNhdmVBbGxSZWNvcmQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGNsYXNzTmFtZSA9PSAnY2FuY2VsUm93Jykge1xuICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgZ2V0QnRucykge1xuICAgICAgICAgICAgaXRlbS5jbGljaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfVxuICAvL0ZvY3VzZWQgY2FsZW5kYXIgaW5wdXQgb24gc2VsZWN0IGRhdGVcbiAgc2VsZWN0RGF0ZShjb2x1bW46IGFueSkge1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbHVtbi5maWVsZCk/LmZvY3VzKCk7XG4gIH1cblxuICAvL2FwcGx5IGZpbHRlciBvbiBncmlkIHdoZW4gc2VhcmNoIGJ0biBjbGlja2VkXG4gIGFwcGx5R3JpZEZpbHRlckJ0bigpIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnVzZXJTZWFyY2hlZCA9IHRydWU7XG4gICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnJvd1VwZGF0ZSA9IGZhbHNlO1xuICAgIHRoaXMucm93VXBkYXRlQ2hhbmdlID0gZmFsc2U7XG5cbiAgICBsZXQgZmlsdGVySW5EaWFsb2c6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3AtZGlhbG9nJyk7XG4gICAgbGV0IGdsb2JhbEZpbHRlckFwcGx5QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zZWFyY2hidG5JZCk7XG4gICAgaWYgKGZpbHRlckluRGlhbG9nICYmIGZpbHRlckluRGlhbG9nLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGdsb2JhbFNlYXJjaEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuc2VhcmNoYnRuSWQpO1xuICAgICAgaWYgKGdsb2JhbFNlYXJjaEJ0bikge1xuICAgICAgICBnbG9iYWxTZWFyY2hCdG4uY2xpY2soKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGdsb2JhbEZpbHRlckFwcGx5QnRuKSB7XG4gICAgICBnbG9iYWxGaWx0ZXJBcHBseUJ0bi5jbGljaygpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmdyaWRGaWx0ZXJPYmogJiYgT2JqZWN0LmtleXModGhpcy5ncmlkRmlsdGVyT2JqKT8ubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5hcHBseUVudGVyRXZlbnQoXG4gICAgICAgIHRoaXMuZ3JpZEZpbHRlck9iai5maWx0ZXIsXG4gICAgICAgIHRoaXMuZ3JpZEZpbHRlck9iai5ldmVudCxcbiAgICAgICAgdGhpcy5ncmlkRmlsdGVyT2JqLmNvbHVtblxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmNoZWNrbGlzdCA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gW107XG4gIH1cblxuICAvLyBpbnZva2UgbXVsdGlTZWxlY3Rpb24gY2xpY2sgZXZlbnRcbiAgbXVsdGlDaGVja0JveE9uY2xpY2socm93SW5mbzogYW55LCBldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uVHlwZSA9PT0gRUdyaWRTZWxlY3Rpb25UeXBlLk1VTFRJUExFKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyb3dJbmZvKSAmJiByb3dJbmZvPy5sZW5ndGggPiAwICYmIGV2ZW50Py50YXJnZXQ/LmNoZWNrZWQgJiYgZXZlbnQ/LnRhcmdldD8uY2hlY2tlZD8udG9TdHJpbmcoKSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgdGhpcy5jaGVja2xpc3QgPSBbLi4ucm93SW5mb107XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJvd0luZm8pICYmIChldmVudD8udGFyZ2V0Py5jaGVja2VkID09IG51bGwgfHwgZXZlbnQ/LnRhcmdldD8uY2hlY2tlZD8udG9TdHJpbmcoKSA9PT0gXCJmYWxzZVwiKSkge1xuICAgICAgICB0aGlzLmNoZWNrbGlzdCA9IFtdO1xuICAgICAgfVxuICAgICAgY29uc3QgYWxyZWFkeUV4aXN0ID0gdGhpcy5jaGVja2xpc3Quc29tZSgocm93KSA9PiByb3dbdGhpcy5kYXRhS2V5XSA9PSByb3dJbmZvW3RoaXMuZGF0YUtleV0pO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJvd0luZm8pICYmIGV2ZW50Py50YXJnZXQ/LmNoZWNrZWQgJiYgIWFscmVhZHlFeGlzdCkge1xuICAgICAgICB0aGlzLmNoZWNrbGlzdC5wdXNoKHJvd0luZm8pO1xuICAgICAgfSBlbHNlIGlmIChhbHJlYWR5RXhpc3QgJiYgKGV2ZW50Py50YXJnZXQ/LmNoZWNrZWQgPT0gbnVsbCB8fCBldmVudD8udGFyZ2V0Py5jaGVja2VkPy50b1N0cmluZygpID09PSBcImZhbHNlXCIpKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jaGVja2xpc3QuZmluZEluZGV4KChyb3cpID0+IHJvd1t0aGlzLmRhdGFLZXldID09IHJvd0luZm9bdGhpcy5kYXRhS2V5XSk7XG4gICAgICAgIHRoaXMuY2hlY2tsaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmNoZWNrbGlzdCA9IFtyb3dJbmZvXVxuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkUm93cyA9IFsuLi50aGlzLmNoZWNrbGlzdF07XG4gICAgdGhpcy5vbk11bHRpU2VsZWN0aW9uQ2hhbmdlLmVtaXQoKHRoaXMuc2VsZWN0ZWRSb3dzKSk7XG4gIH1cblxuICBzZXRSb3dzRGF0YShyb3dzRGF0YSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJvd3NEYXRhKSkge1xuICAgICAgcm93c0RhdGEuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgcm93ID0gdGhpcy5yZW1vdmVSb3dPYmoocm93KTtcbiAgICAgICAgcm93ID0gdGhpcy5ncmlkU2VydmljZS5zZXRSb3dWYWx1ZShyb3cpO1xuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgcm93c0RhdGEgPSB0aGlzLnJlbW92ZVJvd09iaihyb3dzRGF0YSk7XG4gICAgICByb3dzRGF0YSA9IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0Um93VmFsdWUocm93c0RhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gcm93c0RhdGE7XG4gIH1cblxuICByZW1vdmVSb3dPYmoocm93OiBhbnkpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocm93KTtcbiAgICBpZiAoa2V5cz8ubGVuZ3RoID4gMCkge1xuICAgICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgaWYgKGtleS5pbmNsdWRlcygnX29iaicpKSB7XG4gICAgICAgICAgZGVsZXRlIHJvd1trZXldO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gcm93O1xuICB9XG5cbiAgYXBwbHlEcm9wZG93bkZpbHRlcihmaWx0ZXI6IGFueSwgZXZlbnQ6IGFueSkge1xuICAgIGZpbHRlcihldmVudC50YXJnZXQpO1xuICB9XG5cbiAgc2VhcmNoRHJvcGRvd25GaWx0ZXIoZmlsdGVyOiBhbnksIGV2ZW50OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgdGhpcy5zZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgZXZlbnQpO1xuICAgIHRoaXMuZHJvcERvd25GaWx0ZXIgPSB7IGZpbHRlcjogZmlsdGVyLCBldmVudDogZXZlbnQsIGNvbHVtbjogY29sdW1uIH07XG4gICAgLy8gaWYgKGNvbHVtbi5hbGxvd1NlYXJjaCAhPT0gdHJ1ZSkge1xuICAgIC8vICAgdGhpcy5hcHBseURyb3Bkb3duRmlsdGVyKGZpbHRlciwgZXZlbnQpO1xuICAgIC8vIH1cbiAgfVxuXG4gIGxvb2t1cENsZWFyVmFsdWUoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93PzogYW55KSB7XG4gICAgaWYgKHJvdykge1xuICAgICAgY29sdW1uLmRpc3BsYXlGaWVsZCA/IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSA9ICcnIDogJydcbiAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0ID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10udGV4dCA9ICcnIDogJydcbiAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gJyc7XG4gICAgICBpZiAoIXJvdy5faXNFZGl0ZWQpIHtcbiAgICAgICAgcm93Ll9pc0VkaXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9ICcnO1xuICAgICAgZGVsZXRlIGNvbHVtblsnZmlsdGVyVmFsdWVfb2JqJ107XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuY29sdW1ucy5maW5kSW5kZXgoKGNvbCkgPT4gY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zW2luZGV4XS5maWx0ZXJWYWx1ZSA9ICcnO1xuICAgICAgICBkZWxldGUgdGhpcy5jb2x1bW5zW2luZGV4XVsnZmlsdGVyVmFsdWVfb2JqJ107XG4gICAgICB9XG4gICAgICB0aGlzLnNldEZpbHRlckZvY3VzT3V0KGNvbHVtbik7XG4gICAgfVxuICAgIHRoaXMuYnJvd3NlckNsb3NlRXZlbnQodHJ1ZSk7XG4gICAgaWYgKGNvbHVtbi5vbkNoYW5nZSkge1xuICAgICAgY29sdW1uLm9uQ2hhbmdlKHJvdyk7XG4gICAgfVxuICB9XG5cbiAgb25DYWxlbmRhck1vZGVsQ2hhbmdlKHZhbHVlOiBhbnksIHJvdzogYW55LCBjb2x1bW46IElHcmlkQ29sdW1uKTogdm9pZCB7XG4gICAgaWYgKCFyb3cuX2lzRWRpdGVkKSB7XG4gICAgICByb3cuX2lzRWRpdGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheUZpZWxkID0gdmFsdWU7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSAmJiBjb2x1bW4uZm9ybWF0ID09IEVHcmlkRm9ybWF0VHlwZS5TSE9SVERBVEUpIHtcbiAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsICdNTS9kZC95eXl5Jyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICAvLyBpbnZva2Ugd2hlbiBjbGljayBoZWFkZXIgY2hlY2tib3ggZmlsdGVyXG4gIGNsaWNrQ2hlY2tCb3hGaWx0ZXIoY29sdW1uOiBJR3JpZENvbHVtbiwgZXZlbnQpIHtcbiAgICBjb2x1bW4uZmlsdGVyVmFsdWUgPSBldmVudDtcbiAgICBpZiAoY29sdW1uLmFsbG93U2VsZWN0QWxsKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTlxuICAgICAgICAmJlxuICAgICAgICBjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gJ2NoZWNrYm94JyAmJiBjb2x1bW4uZmlsdGVyaW5nICE9IGZhbHNlXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LmRpc2FibGVkICE9PSB0cnVlICYmICFjb2x1bW4uZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJvdy5faXNFZGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0gPSBjb2x1bW4uZmlsdGVyVmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnJvd3NDaGFuZ2Uub2JzZXJ2ZXJzPy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5vbkNoZWNrQm94RmlsdGVyQ2xpY2suZW1pdChjb2x1bW4pO1xuICB9XG4gIC8vc2V0IGhlYWRlciBjaGVja2JveCB2YWx1ZSBmb3IgZ2V0dGluZyBhbGwgY29sdW1ucyBvbiBzdGF5IGFkbWluXG4gIHNldEhlYWRlckNoZWNrQm94VmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMuaXNJbmNsdWRlZEFsbENvbHVtbnMuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICAvLyBzZXQgY2FsZW5kYXIgMiBPciA0IGRpZ2l0IHllYXIgZm9ybWF0XG4gIGNhbGVuZGFySW5wdXRWYWx1ZShjb2x1bW46IGFueSwgcm93OiBhbnksIGlzRmlsdGVySW5wdXQgPSBmYWxzZSkge1xuICAgIGlmICghcm93Ll9pc0VkaXRlZCkge1xuICAgICAgcm93Ll9pc0VkaXRlZCA9IHRydWU7XG4gICAgfVxuICAgIGlmICghY29sdW1uLnRpbWVPbmx5KSB7XG4gICAgICBjb25zdCBjbGFzc05hbWUgPSBpc0ZpbHRlcklucHV0ID8gY29sdW1uLmZpZWxkICsgJy1maWx0ZXItaW5wdXQnIDogY29sdW1uLmZpZWxkICsgcm93W3RoaXMuZGF0YUtleV07XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZSlbMF0/LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgKHZhbDogYW55KSA9PiB7XG4gICAgICAgIGlmICghdmFsPy50YXJnZXQ/LnZhbHVlPy5pbmNsdWRlcygnLycpKSB7XG4gICAgICAgICAgaWYgKHZhbD8udGFyZ2V0Py52YWx1ZT8ubGVuZ3RoID09IDggfHwgY29sdW1uPy5mb3JtYXQ/LnR5cGUgPT09IEVHcmlkRm9ybWF0VHlwZS5TSE9SVERBVEUpIHtcbiAgICAgICAgICAgIHZhbC50YXJnZXQudmFsdWUgPSB2YWw/LnRhcmdldD8udmFsdWU/LnJlcGxhY2UoLyhcXGR7Mn0pKFxcZHsyfSkoXFxkezR9KS8sICckMS8kMi8kMycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmICh2YWw/LnRhcmdldD8udmFsdWU/Lmxlbmd0aCA9PSA2KSB7XG4gICAgICAgICAgICB2YWwudGFyZ2V0LnZhbHVlID0gdmFsPy50YXJnZXQ/LnZhbHVlPy5yZXBsYWNlKC8oXFxkezJ9KSg/PVxcZCkvZywgJyQxLycpO1xuICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSB2YWwudGFyZ2V0LnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCB5ZWFyID0gdmFsPy50YXJnZXQ/LnZhbHVlPy50b1N0cmluZygpPy5zcGxpdCgnLycpWzJdO1xuICAgICAgICBpZiAoeWVhciAmJiB5ZWFyLmxlbmd0aCA9PSA0KSB7XG4gICAgICAgICAgaWYgKGlzRmlsdGVySW5wdXQpIHtcbiAgICAgICAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9IG5ldyBEYXRlKHZhbD8udGFyZ2V0Py52YWx1ZSk/LnRvTG9jYWxlRGF0ZVN0cmluZyhcImVuLVVTXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmNhbGVuZGFyRm9ybWF0ID0gJ21tL2RkL3l5JztcbiAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IG5ldyBEYXRlKHZhbD8udGFyZ2V0Py52YWx1ZSk/LnRvTG9jYWxlRGF0ZVN0cmluZyhcImVuLVVTXCIpO1xuICAgICAgICB9IGVsc2UgaWYgKHllYXIgJiYgeWVhci5sZW5ndGggPT0gMikge1xuICAgICAgICAgIGlmIChpc0ZpbHRlcklucHV0KSB7XG4gICAgICAgICAgICBjb2x1bW4uZmlsdGVyVmFsdWUgPSBuZXcgRGF0ZSh2YWw/LnRhcmdldD8udmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmNhbGVuZGFyRm9ybWF0ID0gJ21tL2RkL3knO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgfVxuICBjaGFuZ2VQYXNzd29yZFR5cGUoY29sdW1uLCByb3cpIHtcbiAgICB2YXIgdGV4dFR5cGUgPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSA/IChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS50ZXh0VHlwZSA9PSAncGFzc3dvcmQnID8gJ3RleHQnIDogJ3Bhc3N3b3JkJykgOiBjb2x1bW4udGV4dFR5cGUgPT0gJ3Bhc3N3b3JkJyA/ICd0ZXh0JyA6ICdwYXNzd29yZCc7XG4gICAgdGhpcy5ncmlkU2VydmljZS5zZXRHcmlkUm93UHJvcFZhbHVlKHJvdywgW3sgcHJvcE5hbWU6IEVHcmlkUm93UHJvcE5hbWUuVEVYVFRZUEUsIHByb3BWYWx1ZTogdGV4dFR5cGUsIGZpZWxkOiBjb2x1bW4uZmllbGQgfV0pO1xuXG4gIH1cblxuICBzaG93Q29uZmlybWF0aW9uKGV2ZW50OiBJR3JpZFBhZ2luYXRpb25FdmVudCkge1xuICAgIGNvbnN0IHRhYmxlV3JhcHBlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIucC1kYXRhdGFibGUtd3JhcHBlclwiKTtcbiAgICBjb25zdCB0YWJsZVdyYXBwZXJTY3JvbGxUb3AgPSB0YWJsZVdyYXBwZXI/LnNjcm9sbFRvcDtcbiAgICBjb25zdCB0YWJsZVdyYXBwZXJTY3JvbGxMZWZ0ID0gdGFibGVXcmFwcGVyPy5zY3JvbGxMZWZ0O1xuICAgIGlmICh0YWJsZVdyYXBwZXJTY3JvbGxUb3ApIHtcbiAgICAgIHRoaXMuc2Nyb2xsUG9zaXRpb25ZID0gdGFibGVXcmFwcGVyU2Nyb2xsVG9wO1xuICAgICAgdGhpcy5zY3JvbGxQb3NpdGlvblggPSB0YWJsZVdyYXBwZXJTY3JvbGxMZWZ0O1xuICAgIH1cblxuICAgIGlmICghdGhpcy5QYWdlQ2hhbmdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gZXZlbnQuZmlyc3QgLyBldmVudC5yb3dzO1xuICAgIH1cbiAgICBpZiAoY29uZmlybShcIllvdSB3aWxsIGxvc2UgY2hhbmdlcyBub3Qgc2F2ZWQgb24gcGFnZS4gV291bGQgeW91IGxpa2UgdG8gY29udGludWU/XCIpID09IHRydWUpIHtcbiAgICAgIHRoaXMuYXV0b0xvYWREYXRhID0gdHJ1ZTtcbiAgICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpXG4gICAgICB0aGlzLmhhbmRsZVNlcnZlclNpZGVQYWdpbmF0aW9uKGV2ZW50KTtcbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCA9IGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLlBhZ2VDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMudGFibGUuZmlyc3QgPSB0aGlzLmN1cnJlbnRQYWdlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudGFibGUuZmlyc3QgPSBNYXRoLmZsb29yKHRoaXMuY3VycmVudFBhZ2UgLyBldmVudC5yb3dzKTtcbiAgICAgICAgICAgIHRoaXMudGFibGUucm93cyA9IGV2ZW50LnJvd3M7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0YWJsZVdyYXBwZXJTY3JvbGxUb3AgPT09IDApIHtcbiAgICAgICAgICAgIHRhYmxlV3JhcHBlci5zY3JvbGxUbyh0aGlzLnNjcm9sbFBvc2l0aW9uWCwgMCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGFibGVXcmFwcGVyLnNjcm9sbFRvKHRoaXMuc2Nyb2xsUG9zaXRpb25YLCB0aGlzLnNjcm9sbFBvc2l0aW9uWSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIHRoaXMuYXV0b0xvYWREYXRhID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgbG9va3VwSW5wdXROZ01vZGVsKHJvdzogYW55LCBjb2x1bW46IGFueSk6IGFueSB7XG4gICAgaWYgKHJvdz8uaXNOZXcgfHwgcm93Py5pc25ldykge1xuICAgICAgcmV0dXJuIHR5cGVvZiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSA9PT0gJ29iamVjdCcgJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQ/LnRleHQgIT0gdW5kZWZpbmVkID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQ/LnRleHQgOiByb3dbY29sdW1uLmZpZWxkXTtcbiAgICB9XG5cbiAgICBpZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZCkge1xuICAgICAgcmV0dXJuIHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0ID09PSAnb2JqZWN0JyAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8udGV4dD8udGV4dCAhPSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8udGV4dD8udGV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gY29sdW1uLmRpc3BsYXlGaWVsZCA/IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGRdO1xuICB9XG5cbiAgZ2V0TG9va3VwQ29udHJvbERhdGEoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpOiBhbnkge1xuICAgIHJldHVybiByb3c/Lltjb2x1bW4uZmllbGQgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhIHx8IGNvbHVtbj8ubG9va3VwQ29udHJvbD8uZGF0YSB8fCB7fTtcbiAgfVxuXG4gIGlzTG9va3VwSW5wdXRFZGl0YWJsZShjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGxvb2t1cERhdGEgPSB0aGlzLmdldExvb2t1cENvbnRyb2xEYXRhKGNvbHVtbiwgcm93KTtcbiAgICByZXR1cm4gbG9va3VwRGF0YT8uYWxsb3dJbnB1dCA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGdldExvb2t1cENvbmZpZ0RhdGEoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldExvb2t1cENvbnRyb2xEYXRhKGNvbHVtbiwgcm93KT8uZGF0YSB8fCB7fTtcbiAgfVxuXG4gIG5vcm1hbGl6ZUxvb2t1cElucHV0VmFsdWUodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh2YWx1ZSA/PyAnJykudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHI/XFxufFxcci9nLCAnICcpLnRyaW0oKTtcbiAgfVxuXG4gIHNldExvb2t1cElucHV0VmFsdWUocm93OiBhbnksIGNvbHVtbjogSUdyaWRDb2x1bW4sIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSB0aGlzLm5vcm1hbGl6ZUxvb2t1cElucHV0VmFsdWUodmFsdWUpO1xuICAgIGNvbnN0IGRpc3BsYXlGaWVsZEtleSA9IGNvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3Qgcm93T2JqS2V5ID0gY29sdW1uLmZpZWxkICsgJ19vYmonO1xuICAgIGNvbnN0IGN1cnJlbnRPYmogPSByb3dbcm93T2JqS2V5XSB8fCB7fTtcblxuICAgIHJvd1tjb2x1bW4uZmllbGRdID0gbm9ybWFsaXplZFZhbHVlO1xuICAgIGlmIChkaXNwbGF5RmllbGRLZXkpIHtcbiAgICAgIHJvd1tkaXNwbGF5RmllbGRLZXldID0gbm9ybWFsaXplZFZhbHVlO1xuICAgIH1cbiAgICByb3dbcm93T2JqS2V5XSA9IHtcbiAgICAgIC4uLmN1cnJlbnRPYmosXG4gICAgICB0ZXh0OiBub3JtYWxpemVkVmFsdWUgPyB7IHRleHQ6IG5vcm1hbGl6ZWRWYWx1ZSwgdmFsdWU6IG5vcm1hbGl6ZWRWYWx1ZSB9IDogJycsXG4gICAgfTtcbiAgfVxuXG4gIGJ1aWxkTG9va3VwUmVzb2x1dGlvbkZpbHRlcnMoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnksIGZpZWxkTmFtZTogc3RyaW5nLCBmaWVsZFZhbHVlOiBzdHJpbmcpOiBhbnlbXSB7XG4gICAgY29uc3QgbG9va3VwQ29uZmlnRGF0YSA9IHRoaXMuZ2V0TG9va3VwQ29uZmlnRGF0YShjb2x1bW4sIHJvdyk7XG4gICAgY29uc3QgZmlsdGVycyA9IEFycmF5LmlzQXJyYXkobG9va3VwQ29uZmlnRGF0YT8uZmlsdGVycykgPyBbLi4ubG9va3VwQ29uZmlnRGF0YS5maWx0ZXJzXSA6IFtdO1xuICAgIGNvbnN0IGxhYmVsUHJvcCA9IHRoaXMuZ2V0TG9va3VwQ29udHJvbERhdGEoY29sdW1uLCByb3cpPy5sYWJlbFByb3A/LnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgdmFsdWVQcm9wID0gdGhpcy5nZXRMb29rdXBDb250cm9sRGF0YShjb2x1bW4sIHJvdyk/LnZhbHVlUHJvcD8udG9Mb3dlckNhc2UoKTtcblxuICAgIE9iamVjdC5lbnRyaWVzKGxvb2t1cENvbmZpZ0RhdGEgfHwge30pLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBrZXk/LnRvTG93ZXJDYXNlKCkgIT09ICd1bmlxdWVrZXknICYmXG4gICAgICAgIGtleT8udG9Mb3dlckNhc2UoKSAhPT0gJ2ZpbHRlcnMnICYmXG4gICAgICAgIGtleT8udG9Mb3dlckNhc2UoKSAhPT0gbGFiZWxQcm9wICYmXG4gICAgICAgIGtleT8udG9Mb3dlckNhc2UoKSAhPT0gdmFsdWVQcm9wICYmXG4gICAgICAgIHZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICAgICAgdmFsdWUgIT09ICcnICYmXG4gICAgICAgIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCdcbiAgICAgICkge1xuICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgIGZpZWxkOiBrZXksXG4gICAgICAgICAgbWF0Y2hNb2RlOiBFTWF0Y2hNb2RlLkVRVUFMUyxcbiAgICAgICAgICBvcGVyYXRvcjogRU9wZXJhdG9yLkFORCxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgZmllbGQ6IGZpZWxkTmFtZSxcbiAgICAgIG1hdGNoTW9kZTogRU1hdGNoTW9kZS5FUVVBTFMsXG4gICAgICBvcGVyYXRvcjogRU9wZXJhdG9yLkFORCxcbiAgICAgIHZhbHVlOiBmaWVsZFZhbHVlLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZpbHRlcnM7XG4gIH1cblxuICBhc3luYyBmZXRjaExvb2t1cFJlc29sdXRpb25SZWNvcmQoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnksIGZpZWxkTmFtZTogc3RyaW5nLCBmaWVsZFZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IGxvb2t1cENvbmZpZ0RhdGEgPSB0aGlzLmdldExvb2t1cENvbmZpZ0RhdGEoY29sdW1uLCByb3cpO1xuICAgIGNvbnN0IHVuaXF1ZUtleSA9IGxvb2t1cENvbmZpZ0RhdGE/LnVuaXF1ZUtleTtcblxuICAgIGlmICghdW5pcXVlS2V5IHx8ICFmaWVsZE5hbWUgfHwgIWZpZWxkVmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlOiBhbnkgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5yZXF1ZXN0U2VydmljZS5nZXQ8YW55W10sIGFueT4oJy9EYXRhL0ZldGNoJywge1xuICAgICAgICB1bmlxdWVLZXksXG4gICAgICAgIGZpbHRlcnM6IHRoaXMuYnVpbGRMb29rdXBSZXNvbHV0aW9uRmlsdGVycyhjb2x1bW4sIHJvdywgZmllbGROYW1lLCBmaWVsZFZhbHVlKSxcbiAgICAgICAgcGFnZVNpemU6IDEsXG4gICAgICAgIHBhZ2U6IDEsXG4gICAgICB9KS5zdWJzY3JpYmUoXG4gICAgICAgIChyZXMpID0+IHJlc29sdmUocmVzKSxcbiAgICAgICAgKCkgPT4gcmVzb2x2ZShudWxsKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGlmICghcmVzcG9uc2U/LnJlY29yZHM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ3JpZFNlcnZpY2Uuc2V0RGF0YUZpZWxkcyhyZXNwb25zZS5yZWNvcmRzKT8uWzBdIHx8IG51bGw7XG4gIH1cblxuICBhcHBseVJlc29sdmVkTG9va3VwUmVjb3JkKHJvdzogYW55LCBjb2x1bW46IElHcmlkQ29sdW1uLCByZXNvbHZlZFJlY29yZDogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCFyZXNvbHZlZFJlY29yZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGxhYmVsUHJvcCA9IHRoaXMuZ2V0TG9va3VwQ29udHJvbERhdGEoY29sdW1uLCByb3cpPy5sYWJlbFByb3A/LnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgdmFsdWVQcm9wID0gdGhpcy5nZXRMb29rdXBDb250cm9sRGF0YShjb2x1bW4sIHJvdyk/LnZhbHVlUHJvcD8udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCByZXNvbHZlZFZhbHVlID0gcmVzb2x2ZWRSZWNvcmRbdmFsdWVQcm9wIHx8IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV07XG4gICAgY29uc3QgcmVzb2x2ZWRUZXh0ID0gcmVzb2x2ZWRSZWNvcmRbbGFiZWxQcm9wIHx8IGNvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCkgfHwgY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXTtcblxuICAgIGlmIChyZXNvbHZlZFZhbHVlID09PSB1bmRlZmluZWQgfHwgcmVzb2x2ZWRUZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByb3dbY29sdW1uLmZpZWxkXSA9IHJlc29sdmVkVmFsdWU7XG4gICAgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQpIHtcbiAgICAgIHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSA9IHJlc29sdmVkVGV4dDtcbiAgICB9XG4gICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gPSB7XG4gICAgICAuLi4ocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gfHwge30pLFxuICAgICAgdGV4dDogeyB0ZXh0OiByZXNvbHZlZFRleHQsIHZhbHVlOiByZXNvbHZlZFZhbHVlIH0sXG4gICAgfTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHJlc29sdmVMb29rdXBJbnB1dFZhbHVlKGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdzogYW55KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLmlzTG9va3VwSW5wdXRFZGl0YWJsZShjb2x1bW4sIHJvdykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlZFZhbHVlID0gdGhpcy5ub3JtYWxpemVMb29rdXBJbnB1dFZhbHVlKHRoaXMubG9va3VwSW5wdXROZ01vZGVsKHJvdywgY29sdW1uKSk7XG4gICAgY29uc3Qgc2VhcmNoRmllbGQgPSB0aGlzLmdldExvb2t1cENvbnRyb2xEYXRhKGNvbHVtbiwgcm93KT8uc2VhcmNoRmllbGQ7XG4gICAgY29uc3QgbGFiZWxQcm9wID0gdGhpcy5nZXRMb29rdXBDb250cm9sRGF0YShjb2x1bW4sIHJvdyk/LmxhYmVsUHJvcDtcbiAgICBjb25zdCB2YWx1ZVByb3AgPSB0aGlzLmdldExvb2t1cENvbnRyb2xEYXRhKGNvbHVtbiwgcm93KT8udmFsdWVQcm9wO1xuXG4gICAgaWYgKCF0eXBlZFZhbHVlIHx8ICghbGFiZWxQcm9wICYmICF2YWx1ZVByb3ApKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VhcmNoTWF0Y2ggPSBzZWFyY2hGaWVsZFxuICAgICAgPyBhd2FpdCB0aGlzLmZldGNoTG9va3VwUmVzb2x1dGlvblJlY29yZChjb2x1bW4sIHJvdywgc2VhcmNoRmllbGQsIHR5cGVkVmFsdWUpXG4gICAgICA6IG51bGw7XG5cbiAgICBpZiAodGhpcy5hcHBseVJlc29sdmVkTG9va3VwUmVjb3JkKHJvdywgY29sdW1uLCBzZWFyY2hNYXRjaCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGxhYmVsTWF0Y2ggPSBsYWJlbFByb3BcbiAgICAgID8gYXdhaXQgdGhpcy5mZXRjaExvb2t1cFJlc29sdXRpb25SZWNvcmQoY29sdW1uLCByb3csIGxhYmVsUHJvcCwgdHlwZWRWYWx1ZSlcbiAgICAgIDogbnVsbDtcblxuICAgIGlmICh0aGlzLmFwcGx5UmVzb2x2ZWRMb29rdXBSZWNvcmQocm93LCBjb2x1bW4sIGxhYmVsTWF0Y2gpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZU1hdGNoID1cbiAgICAgIHZhbHVlUHJvcCAmJiB2YWx1ZVByb3A/LnRvTG93ZXJDYXNlKCkgIT09IGxhYmVsUHJvcD8udG9Mb3dlckNhc2UoKVxuICAgICAgICA/IGF3YWl0IHRoaXMuZmV0Y2hMb29rdXBSZXNvbHV0aW9uUmVjb3JkKGNvbHVtbiwgcm93LCB2YWx1ZVByb3AsIHR5cGVkVmFsdWUpXG4gICAgICAgIDogbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmFwcGx5UmVzb2x2ZWRMb29rdXBSZWNvcmQocm93LCBjb2x1bW4sIHZhbHVlTWF0Y2gpO1xuICB9XG5cbiAgLy8gQ2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4gc2V0dGluZyB0aGUgbmdNb2RlbCB2YWx1ZVxuICBjaGFuZ2VMb29rdXBJbnB1dE5nTW9kZWwocm93OiBhbnksIGNvbHVtbjogYW55LCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKCFyb3cuX2lzRWRpdGVkKSB7XG4gICAgICByb3cuX2lzRWRpdGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcm93Ll9pc0VkaXRlZCA9IHRydWU7XG4gICAgaWYgKHRoaXMuaXNMb29rdXBJbnB1dEVkaXRhYmxlKGNvbHVtbiwgcm93KSkge1xuICAgICAgdGhpcy5zZXRMb29rdXBJbnB1dFZhbHVlKHJvdywgY29sdW1uLCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb25Mb29rdXBJbnB1dFBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCwgY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuaXNMb29rdXBJbnB1dEVkaXRhYmxlKGNvbHVtbiwgcm93KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhc3RlZFZhbHVlID0gdGhpcy5ub3JtYWxpemVMb29rdXBJbnB1dFZhbHVlKGV2ZW50LmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQnKSk7XG4gICAgaWYgKCFwYXN0ZWRWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5zZXRMb29rdXBJbnB1dFZhbHVlKHJvdywgY29sdW1uLCBwYXN0ZWRWYWx1ZSk7XG4gICAgYXdhaXQgdGhpcy5yZXNvbHZlTG9va3VwSW5wdXRWYWx1ZShjb2x1bW4sIHJvdyk7XG4gICAgdGhpcy5vbkNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KTtcbiAgfVxuXG4gIGFzeW5jIG9uTG9va3VwSW5wdXRFbnRlcihldmVudDogS2V5Ym9hcmRFdmVudCwgY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCB0eXBlZFZhbHVlID0gdGhpcy5ub3JtYWxpemVMb29rdXBJbnB1dFZhbHVlKHRhcmdldD8udmFsdWUpO1xuXG4gICAgaWYgKCF0aGlzLmlzTG9va3VwSW5wdXRFZGl0YWJsZShjb2x1bW4sIHJvdykpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnNlbGVjdExvb2t1cEZpZWxkKGNvbHVtbiwgcm93KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNldExvb2t1cElucHV0VmFsdWUocm93LCBjb2x1bW4sIHR5cGVkVmFsdWUpO1xuICAgIGNvbnN0IGlzUmVzb2x2ZWQgPSBhd2FpdCB0aGlzLnJlc29sdmVMb29rdXBJbnB1dFZhbHVlKGNvbHVtbiwgcm93KTtcbiAgICB0aGlzLm9uQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpO1xuXG4gICAgaWYgKFxuICAgICAgdHlwZWRWYWx1ZSAmJlxuICAgICAgIWlzUmVzb2x2ZWQgJiZcbiAgICAgIHRoaXMuaXNMb29rdXBJbnB1dEVkaXRhYmxlKGNvbHVtbiwgcm93KSAmJlxuICAgICAgY29sdW1uLmFsbG93QXV0b0NvbXBsZXRlU2F2ZSAmJlxuICAgICAgY29sdW1uLnVuaXF1ZUtleVxuICAgICkge1xuICAgICAgaWYgKGNvbmZpcm0oYERvIHlvdSB3YW50IHRvIGFkZCAke3R5cGVkVmFsdWV9IHRvIHRoZSBsb29rdXA/YCkpIHtcbiAgICAgICAgdGhpcy5ncmlkU2VydmljZS5hZGRBdXRvQ29tcGxldGVWYWx1ZShjb2x1bW4udW5pcXVlS2V5LCB0eXBlZFZhbHVlLCBjb2x1bW4sIHJvdykudGhlbigoKSA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbi5vblJldHVybikge1xuICAgICAgICAgICAgY29sdW1uLm9uUmV0dXJuKHR5cGVkVmFsdWUsIGNvbHVtbiwgcm93KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgZ2V0QXV0b0NvbXBsZXRlTmdNb2RlbChyb3c6IGFueSwgY29sdW1uOiBhbnkpOiBhbnkge1xuICAgIGlmIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkKSB7XG4gICAgICByZXR1cm4gcm93W3Jvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV07XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ29iamVjdCcgJiYgcm93W2NvbHVtbi5maWVsZF0/LnRleHQpIHtcbiAgICAgIHJldHVybiByb3dbY29sdW1uLmZpZWxkXT8udGV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gcm93W2NvbHVtbi5maWVsZF07XG4gIH1cblxuICAvLyBGdW5jdGlvbiB0byBzZXQgbmdNb2RlbCB2YWx1ZVxuICBjaGFuZ2VBdXRvQ29tcGxldGVOZ01vZGVsKHJvdzogYW55LCBjb2x1bW46IGFueSwgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGZpZWxkID0gY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpO1xuICAgIHJvd1tmaWVsZF0gPSB2YWx1ZTtcbiAgfVxuXG4gIHNldElucHV0TmdNb2RlbChyb3c6IGFueSwgY29sdW1uOiBhbnkpOiBhbnkge1xuICAgIGlmIChyb3cudW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gJyc7ICAvLyBJZiAncm93LnVuZGVmaW5lZCcgaXMgdHJ1ZSwgcmV0dXJuIGVtcHR5IHN0cmluZ1xuICAgIH1cblxuICAgIC8vIEV2YWx1YXRlIG90aGVyIGNvbmRpdGlvbnMgYmFzZWQgb24gcm93IGFuZCBjb2x1bW4gZGF0YVxuICAgIGlmICh0aGlzLmFsbG93RGlzYWJsZWQoY29sdW1uLCByb3cpICYmIHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXSkge1xuICAgICAgcmV0dXJuIHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXTtcbiAgICB9XG5cbiAgICBpZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10udmFsdWUpIHtcbiAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10udmFsdWU7XG4gICAgICByZXR1cm4gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10udmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvd1tjb2x1bW4uZmllbGRdOyAgLy8gRmFsbGJhY2sgdG8gJ3Jvd1tjb2x1bW4uZmllbGRdJ1xuICB9XG5cbiAgLy8gRnVuY3Rpb24gdG8gc2V0IHRoZSB2YWx1ZSAod2hlbiBuZ01vZGVsIGNoYW5nZXMpXG4gIGNoYW5nZUlucHV0TmdNb2RlbChyb3c6IGFueSwgY29sdW1uOiBhbnksIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBZb3UgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIHVwZGF0ZSB5b3VyIGRhdGEgbW9kZWwgYmFzZWQgb24gdGhlIHZhbHVlXG4gICAgaWYgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddKSB7XG4gICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHZhbHVlO1xuICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10udmFsdWUgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgb25JbnB1dENoYW5nZSh2YWx1ZTogYW55LCByb3c6IGFueSwgY29sdW1uOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmNoYW5nZUlucHV0TmdNb2RlbChyb3csIGNvbHVtbiwgdmFsdWUpO1xuICB9XG5cbiAgZ2V0Q2hlY2tib3hWYWx1ZShyb3c6IGFueSwgY29sdW1uOiBJR3JpZENvbHVtbik6IGJvb2xlYW4ge1xuICAgIGlmICghcm93W2NvbHVtbi5maWVsZF0pIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IHZhbHVlID0gcm93W2NvbHVtbi5maWVsZF07XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS50ZXh0KSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0NoZWNrZWQodmFsdWUudGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaXNDaGVja2VkKHZhbHVlKTtcbiAgfVxuXG4gIGlzQ2hlY2tlZCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgbWF0Y2hWYWx1ZSA9IFsnMScsICd0cnVlJywgJ3knXTtcbiAgICByZXR1cm4gbWF0Y2hWYWx1ZS5pbmNsdWRlcyh2YWx1ZT8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuICBnZXRNb3JlQ29sdW1ucygpOiBJR3JpZENvbHVtbltdIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zPy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbj8uc2hvd0luTW9yZSkgPz8gW107XG4gIH1cblxuICBidWlsZE1vcmVJdGVtc0ZvclJvdyhyb3c6IGFueSk6IE1lbnVJdGVtW10ge1xuICAgIGNvbnN0IGl0ZW1zOiBNZW51SXRlbVtdID0gW107XG4gICAgY29uc3QgbW9yZUNvbHVtbnMgPSB0aGlzLmdldE1vcmVDb2x1bW5zKCk7XG5cbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBtb3JlQ29sdW1ucykge1xuICAgICAgY29uc3QgbGFiZWwgPSBjb2wuaGVhZGVyIHx8IGNvbC5kaXNwbGF5VGV4dCB8fCBjb2wuZmllbGQ7XG4gICAgICBjb25zdCBoeXBlcmxpbmsgPSByb3c/LltgJHtjb2wuZmllbGR9X29iamBdPy5oeXBlcmxpbmsgfHwgcm93Py5bY29sLmZpZWxkXTtcblxuICAgICAgaWYgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSykge1xuICAgICAgICBpdGVtcy5wdXNoKGh5cGVybGluayA/IHtcbiAgICAgICAgICBsYWJlbCwgaWNvbjogY29sLmljb24sIHVybDogaHlwZXJsaW5rLFxuICAgICAgICAgIHRhcmdldDogY29sLm9wZW5Jbk5ld1RhYiB8fCBjb2wudGFyZ2V0ID09PSBFR3JpZGxpbmsuQkxBTksgPyBFR3JpZGxpbmsuQkxBTksgOiBFR3JpZGxpbmsuU0VMRlxuICAgICAgICB9IDogeyBsYWJlbCwgaWNvbjogY29sLmljb24sIGNvbW1hbmQ6ICgpID0+IGNvbC5vbkNsaWNrPy4ocm93KSB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRykge1xuICAgICAgICBpdGVtcy5wdXNoKHsgbGFiZWwsIGljb246IGNvbC5pY29uLCBjb21tYW5kOiAoKSA9PiB0aGlzLm9wZW5HcmlkRGlhbG9nKGNvbCwgcm93KSB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoY29sLm9uQ2xpY2spIHtcbiAgICAgICAgaXRlbXMucHVzaCh7IGxhYmVsLCBpY29uOiBjb2wuaWNvbiwgY29tbWFuZDogKCkgPT4gY29sLm9uQ2xpY2shKHJvdykgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIGhhc01vcmVDb2x1bW5zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldE1vcmVDb2x1bW5zKCk/Lmxlbmd0aCA+IDA7XG4gIH1cblxuICBoYXNNb3JlSXRlbXMocm93OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5idWlsZE1vcmVJdGVtc0ZvclJvdyhyb3cpPy5sZW5ndGggPiAwO1xuICB9XG5cbiAgc2hvd01vcmUoZXZlbnQ6IGFueSwgcm93OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRNb3JlTWVudSA9IHRoaXMuYnVpbGRNb3JlSXRlbXNGb3JSb3cocm93KTtcbiAgICB0aGlzLm1vcmVNZW51Py50b2dnbGUoZXZlbnQpO1xuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJncmlkLWNvbXBvbmVudC13cmFwcGVyXCI+XG4gIDxwLWNvbmZpcm1EaWFsb2cgW3N0eWxlXT1cInsgd2lkdGg6ICc1MHZ3JyB9XCIgKm5nSWY9XCJ1c2VJbmxpbmVDUlVEXCIga2V5PVwiaGFuZGxlSW5saW5lQ1JVRFwiPjwvcC1jb25maXJtRGlhbG9nPlxuICA8cC1jb25maXJtRGlhbG9nIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtY29uZmlybS1kaWFsb2dcIiAqbmdJZj1cImNvbHVtbkFjdGlvbnMubGVuZ3RoID4gMFwiXG4gICAga2V5PVwiaGFuZGxlY29sdW1uQWN0aW9uc1wiPjwvcC1jb25maXJtRGlhbG9nPlxuICA8ZGl2IGNsYXNzPVwiZ2xvYmFsLWZpbHRlci1idXR0b25zLXdyYXBwZXIgZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cblxuICAgIDwhLS0gYnV0dG9uIGZvciBhcHBseSB2YWx1ZSBvbiBHcmlkIC0tPlxuICAgIDxidXR0b24gKm5nSWY9XCIoKGZpbHRlcmluZyAmJiAhaGlkZUZpbHRlciApIHx8IHNob3dGaWx0ZXJidG4pXCIgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLXNlYXJjaFwiXG4gICAgICAoY2xpY2spPVwiYXBwbHlHcmlkRmlsdGVyQnRuKClcIiBbY2xhc3NdPVwiXG4gIHNlYXJjaEdyaWRGaWx0ZXIgPyAncC1idXR0b24tc3VjY2VzcyBhcHBseS1maWx0ZXItYnRuIGZpbHRlci1idG4nIDogJ2hpZGUtY2xlYXItZmlsdGVyLWJ1dHRvbiBhcHBseS1maWx0ZXItYnRuIGZpbHRlci1idG4nXG4gIFwiPjwvYnV0dG9uPlxuXG4gICAgPCEtLSBidXR0b24gZm9yIGNsZWFyIHZhbHVlIG9uIEdyaWQgLS0+XG4gICAgPGJ1dHRvbiAqbmdJZj1cIigoZmlsdGVyaW5nICYmICFoaWRlRmlsdGVyICl8fCBzaG93RmlsdGVyYnRuKVwiIHBCdXR0b24gaWQ9XCJjbGVhckdyaWRGaWx0ZXJWYWx1ZXNCdXR0b25cIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGljb249XCJwaSBwaS1yZXBsYXlcIiAoY2xpY2spPVwiY2xlYXJncmlkRmlsdGVyc1ZhbHVlKClcIiBbY2xhc3NdPVwiXG4gICAgICBjbGVhckdyaWRGaWx0ZXIgPyAnZmlsdGVyLWJ0bicgOiAnaGlkZS1jbGVhci1maWx0ZXItYnV0dG9uIGZpbHRlci1idG4nXG4gICAgICBcIiBjbGFzcz0nZ2xvYmFsLXJlZnJlc2ggZ2xvYmFsLWJ0bic+PC9idXR0b24+XG5cbiAgICA8IS0tIGJ1dHRvbiBmb3Igc2F2ZSBhbGwgZ3JpZCBhdCBvbmNlIC0tPlxuICAgIDxidXR0b24gcEJ1dHRvbiAqbmdJZj1cImVkaXRBbGxSb3dzICYmIGVkaXRSb3dQZXJtaXNzaW9uXCIgaWQ9XCJzYXZlQWxsR3JpZFZhbHVlc1wiIGljb249XCJwaSBwaS1jaGVja1wiIFtsYWJlbF09XCInU2F2ZSdcIlxuICAgICAgW2NsYXNzXT1cImhpZGVHcmlkU2F2ZUJ1dHRvbiA/ICdoaWRlLWNsZWFyLWZpbHRlci1idXR0b24gc2F2ZS1hbGwtZ3JpZCcgOiAndWktYnV0dG9uLWluZm8gc2F2ZS1hbGwtZ3JpZCdcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzYXZlQWxsUm93c0F0T25jZSgpXCI+PC9idXR0b24+XG5cbiAgICA8IS0tIGJ1dHRvbiBmb3IgY2FuY2VsIGFsbCBncmlkIGF0IG9uY2UgLS0+XG4gICAgPGJ1dHRvbiBwQnV0dG9uICpuZ0lmPVwiZWRpdEFsbFJvd3MgJiYgIWhpZGVHcmlkQ2FuY2VsQnV0dG9uXCIgaWQ9XCJlZGl0QnRuR2xvYmFsdmFsdWVzXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICBbbGFiZWxdPVwiJ0NhbmNlbCdcIiBpY29uPVwicGkgcGktdGltZXNcIiBjbGFzcz1cInVpLWJ1dHRvbi1pbmZvXCIgKGNsaWNrKT1cImNhbmNlbEFsbFJvd3NBdE9uY2UoKVwiPjwvYnV0dG9uPlxuXG4gICAgPCEtLSBoZWFkZXIgQnV0dG9uIGZvciBtdWx0aVNlbGVjdCBvbiBHcmlkIC0tPlxuICAgIDxzcGFuICpuZ0lmPVwiYWxsb3dDb2x1bW5Ub2dnbGVcIj5cbiAgICAgIDxwLW11bHRpU2VsZWN0IFtzaG93VG9nZ2xlQWxsXT1cImZhbHNlXCIgb3B0aW9uRGlzYWJsZWQ9XCJmYWxzZVwiIFtvcHRpb25zXT1cInNlbGVjdGVkVG9nZ2xlQ29sdW1uc1wiXG4gICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRDb2x1bW5zXCIgb3B0aW9uTGFiZWw9XCJoZWFkZXJcIiBzZWxlY3RlZEl0ZW1zTGFiZWw9XCJ7MH0gY29sdW1ucyBzZWxlY3RlZFwiXG4gICAgICAgIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtbXVsdGlzZWxlY3QtaGVhZGVyLWJ1dHRvblwiIHBsYWNlaG9sZGVyPVwiQ2hvb3NlIENvbHVtbnNcIj5cbiAgICAgIDwvcC1tdWx0aVNlbGVjdD5cbiAgICA8L3NwYW4+XG5cbiAgICA8IS0tIGhlYWRlciBCdXR0b24gZm9yIEFkZGluZyBuZXcgUm93IG9uIEdyaWQgLS0+XG4gICAgPGJ1dHRvbiBwQnV0dG9uICpuZ0lmPVwidXNlSW5saW5lQ1JVRCAmJiBhZGRSb3dQZXJtaXNzaW9uICYmICFoaWRlQWRkQnRuXCIgdHlwZT1cImJ1dHRvblwiIFtsYWJlbF09XCInQWRkJ1wiIHBBZGRSb3dcbiAgICAgIFt0YWJsZV09XCJjb21wb25lbnRUYWJsZVJlZlwiIFtwcmV2ZW50TmV3Um93XT1cInByZXZlbnROZXdSb3dcIiBbbmV3Um93XT1cIm5ld0dyaWRSb3dcIiBbaWRdPVwiZGF0YUtleVwiXG4gICAgICBwVG9vbHRpcD1cIkFkZCBOZXcgUm93XCIgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCIgaWNvbj1cInBpIHBpLXBsdXNcIlxuICAgICAgW2NsYXNzXT1cIid1aS1idXR0b24taW5mbyBnbG9iYWwtYWRkLWJ0bicrZ3JpZE5hbWVcIiAoY2xpY2spPVwiYWRkTmV3Um93KG5ld0dyaWRSb3csIHRydWUpXCIgcFJpcHBsZT48L2J1dHRvbj5cblxuXG4gICAgPCEtLSBoZWFkZXIgQnV0dG9uIGZvciBFeGNlbCBGaWxlIG9uIEdyaWQgLS0+XG4gICAgPGJ1dHRvbiAqbmdJZj1cImFsbG93RXhwb3J0VG9FeGNlbFwiIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIGljb249XCJwaSBwaS1maWxlLWV4Y2VsXCIgKGNsaWNrKT1cImV4cG9ydEV4Y2VsKClcIlxuICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1zdWNjZXNzXCIgcFRvb2x0aXA9XCJFeHBvcnQgdG8gRXhjZWxcIiB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIiBwUmlwcGxlPjwvYnV0dG9uPlxuXG4gICAgPCEtLSBoZWFkZXIgQnV0dG9uIGZvciBQREYgRmlsZSBvbiBHcmlkIC0tPlxuICAgIDxidXR0b24gKm5nSWY9XCJhbGxvd0V4cG9ydFRvUGRmXCIgdHlwZT1cImJ1dHRvblwiIHBCdXR0b24gaWNvbj1cInBpIHBpLWZpbGUtcGRmXCIgKGNsaWNrKT1cImV4cG9ydFBkZigpXCJcbiAgICAgIGNsYXNzPVwicC1idXR0b24td2FybmluZyBtci0yIG1sLTJcIiBwVG9vbHRpcD1cIkV4cG9ydCB0byBQZGZcIiB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIiBwUmlwcGxlPjwvYnV0dG9uPlxuXG4gICAgPCEtLSA8ZGl2ICpuZ0Zvcj1cImxldCByZXBvcnRCdXR0b24gb2YgcmVwb3J0QnV0dG9uc1wiIGNsYXNzPVwidWktYnV0dG9uLWluZm8gbXItMiBtbC0yXCI+XG4gICAgPHNlLWdlbmVyYXRlLXJlcG9ydC1idG4gKm5nSWYgPVwiIXJlcG9ydEJ1dHRvbi5oaWRkZW5cIltyZXBJZF09XCJyZXBvcnRCdXR0b24ucmVwb3J0SWRcIiBbbGFiZWxdPVwicmVwb3J0QnV0dG9uLmxhYmVsXCIgW3BhcmFtc109XCJyZXBvcnRCdXR0b24ucGFyYW1zXCJcbiAgICAgIFtzaG93RGlhbG9nXT1cInJlcG9ydEJ1dHRvbi5zaG93RGlhbG9nXCI+PC9zZS1nZW5lcmF0ZS1yZXBvcnQtYnRuPlxuICA8L2Rpdj4gLS0+XG5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByZXBvcnRCdXR0b24gb2YgcmVwb3J0QnV0dG9uc1wiPlxuICAgICAgPHNlLWdlbmVyYXRlLXJlcG9ydC1idG4gKm5nSWY9XCIhcmVwb3J0QnV0dG9uLmhpZGRlblwiIFtyZXBJbmZvXT1cInJlcG9ydEJ1dHRvblwiIFtsYWJlbF09XCJyZXBvcnRCdXR0b24ubGFiZWxcIlxuICAgICAgICBbcGFyYW1zXT1cInJlcG9ydEJ1dHRvbi5wYXJhbXNcIiBbaWNvbl09XCJyZXBvcnRCdXR0b24uaWNvblwiIFtjbGFzc109XCJyZXBvcnRCdXR0b24uY2xhc3NcIlxuICAgICAgICBbc2hvd0RpYWxvZ109XCJyZXBvcnRCdXR0b24uc2hvd0RpYWxvZ1wiIFtyZXBvcnRUeXBlXT1cIiByZXBvcnRCdXR0b24ucmVwb3J0VHlwZVwiXG4gICAgICAgIFtyZXBvcnRIZWFkZXJdPVwicmVwb3J0QnV0dG9uLnJlcG9ydEhlYWRlclwiIFtyZXBvcnRGb290ZXJdPVwicmVwb3J0QnV0dG9uLnJlcG9ydEZvb3RlclwiPjwvc2UtZ2VuZXJhdGUtcmVwb3J0LWJ0bj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICA8L2Rpdj5cblxuICA8cC10YWJsZSAqbmdJZj1cIiFpc0dyaWRIaWRkZW5cIiBpZD1cIm15LXRhYmxlXCIgW3ZhbHVlXT1cInJvd3NEYXRhXCIgW2NvbHVtbnNdPVwic2VsZWN0ZWRDb2x1bW5zXCIgc29ydE1vZGU9XCJtdWx0aXBsZVwiXG4gICAgW2xhenldPVwidXNlU2VydmVyU2lkZUV2ZW50cyB8fCBwYWdpbmF0aW9uXCIgW3BhZ2luYXRvcl09XCJwYWdpbmF0aW9uXCJcbiAgICBbYWx3YXlzU2hvd1BhZ2luYXRvcl09XCJwYWdpbmF0aW9uICYmIHRvdGFsUmVjb3JkcyA+IDBcIiBbZ2xvYmFsRmlsdGVyRmllbGRzXT1cImdsb2JhbEZpbHRlckZpZWxkc1wiXG4gICAgW2NsYXNzXT1cIicgZ3JpZC1jb21wb25lbnQtbWFpbi10YWJsZSAnICsgKHBhZ2luYXRpb24gfHwgIXJvd3NEYXRhLmxlbmd0aCA/ICcgcGFnaW5hdGlvbiAnIDogJycpICsgKHRhYmxlU3R5bGUuaW5jbHVkZXMoJ3dpZHRoJykgPyAnIGhhc1RhYmxlV2lkdGhTdHlsZSAnIDogJycpICsgKGF1dG9SZXNpemUgPyAnJyA6ICd0YWJsZS1sYXlvdXQtYXV0bycpIFwiXG4gICAgKG9uQ29sUmVzaXplKT1cIm9uQ29sdW1uUmVzaXplKCRldmVudCxkdClcIiBbcmVzaXphYmxlQ29sdW1uc109XCJ0cnVlXCIgcmVzcG9uc2l2ZUxheW91dD1cInNjcm9sbFwiXG4gICAgY29sdW1uUmVzaXplTW9kZT1cImV4cGFuZFwiIFtyb3dzXT1cImRlZmF1bHRSb3dzXCIgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxuICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwic2V0UGFnaW5hdGlvbkxlbmd0aFwiIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwic2hvd0N1cnJlbnRQYWdlUmVwb3J0XCJcbiAgICBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwiU2hvd2luZyB7Zmlyc3R9IHRvIHtsYXN0fSBvZiB7e1xuICAgICAgdG90YWxSZWNvcmRzXG4gICAgfX0gZW50cmllc1wiIFtsb2FkaW5nXT1cIiFzZXRHcmlkUmVmcmVzaFRpbWUgPyBsb2FkaW5nIDogZmFsc2VcIlxuICAgIChvblNvcnQpPVwic29ydERpc2FibGVkID8gJycgOiBoYW5kbGVTb3J0Q2hhbmdlKCRldmVudClcIiAob25GaWx0ZXIpPVwiaGFuZGxlRmlsdGVyQ2hhbmdlKCRldmVudClcIlxuICAgIChvbkxhenlMb2FkKT1cInNob3VsZFJ1blNlcnZlclNpZGUoJGV2ZW50KSA/IGhhbmRsZVNlcnZlclNpZGVFdmVudHMoJGV2ZW50LCBkdCkgOiBudWxsXCJcbiAgICAob25QYWdlKT1cImdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQgPyBzaG93Q29uZmlybWF0aW9uKCRldmVudCkgOiBoYW5kbGVTZXJ2ZXJTaWRlUGFnaW5hdGlvbigkZXZlbnQpXCIgI2R0XG4gICAgW2RhdGFLZXldPVwiZGF0YUtleVwiIFsoc2VsZWN0aW9uKV09XCJzZWxlY3RlZFJvd3NcIiBzZWxlY3Rpb25Nb2RlPVwibXVsdGlwbGVcIiBbc2Nyb2xsYWJsZV09XCJzY3JvbGxhYmxlXCJcbiAgICBbdGFibGVTdHlsZV09XCJ0YWJsZVN0eWxlXCIgW3Njcm9sbEhlaWdodF09XCJzY3JvbGxIZWlnaHRcIiBlZGl0TW9kZT1cInJvd1wiIFtlZGl0aW5nUm93S2V5c109XCJlZGl0aW5nUm93S2V5c1wiXG4gICAgW3Jvd0hvdmVyXT1cInJvd0hvdmVyXCIgW25nQ2xhc3NdPVwic2V0Q2xhc3NhQW5kSWQoZHQpXCIgKG9uUm93UmVvcmRlcik9XCJvblJvd1Jlb3JkZXIoJGV2ZW50KVwiPlxuXG4gICAgPGRpdiAqbmdJZj1cInJvd0FjdGlvbnMubGVuZ3RoID4gMCAmJiByb3dBY3Rpb25zLmxlbmd0aCA+IDBcIiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxuICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IHJvd0FjdGlvbiBvZiByb3dBY3Rpb25zXCI+XG4gICAgICAgIDxidXR0b24gcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW2xhYmVsXT1cInJvd0FjdGlvbi50aXRsZVwiIFtjbGFzc109XCJyb3dBY3Rpb24uY2xhc3NcIlxuICAgICAgICAgIChjbGljayk9XCJyb3dBY3Rpb24ub25DbGljayhzZWxlY3RlZFJvd3MpXCI+PC9idXR0b24+XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIGhlYWRlciBjb2x1bW5zIG9uIEdyaWQgLS0+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiIGxldC1jb2xzPlxuICAgICAgPHRyPlxuICAgICAgICA8dGggcFJlc2l6YWJsZUNvbHVtbiAqbmdJZj1cImFsbG93U2VsZWN0aW9uICYmIHNlbGVjdGlvblR5cGUgPT09ICdtdWx0aXBsZSdcIiBjbGFzcz1cImdyaWQtY29tcG9uZW50LXNlbGVjdGlvblwiXG4gICAgICAgICAgaWQ9XCJ7e2FsbG93U2VsZWN0aW9uSGVhZGVyfX1cIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRoLWNvbnRlbnQtd3JhcHBlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtY29tcG9uZW50LXRhYmxlLWhlYWRlci1pbm5lci1kaXYtMlxuICAgICAgICAgICAgICAgICAgdGFibGUtaGVhZGVyLWlubmVyLWRpdiBkaXYtbGFzdC1pbm5lci1odG1sLWlzLWljb25cIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmbGV4LWdyb3ctMVwiPiB7e2FsbG93U2VsZWN0aW9uSGVhZGVyfX0gPC9zcGFuPlxuICAgICAgICAgICAgICA8cC10YWJsZUhlYWRlckNoZWNrYm94ICpuZ0lmPVwic2VsZWN0aW9uVHlwZSA9PT0gJ211bHRpcGxlJ1wiIGJpbmFyeT1cInRydWVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJtdWx0aUNoZWNrQm94T25jbGljayhyb3dzRGF0YSwgJGV2ZW50KTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1wiPjwvcC10YWJsZUhlYWRlckNoZWNrYm94PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggcFJlc2l6YWJsZUNvbHVtbiAqbmdJZj1cImFsbG93U2VsZWN0aW9uICYmIHNlbGVjdGlvblR5cGUgPT09ICdzaW5nbGUnXCIgaWQ9XCJTZWxlY3RcIiBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCJcbiAgICAgICAgICBjbGFzcz1cImdyaWQtY29tcG9uZW50LXNlbGVjdGlvblwiPlxuICAgICAgICAgIFNlbGVjdFxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggcFJlc2l6YWJsZUNvbHVtbiBpZD1cIkFjdGlvbnNcIlxuICAgICAgICAgICpuZ0lmPVwic2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiAhZGlzYWJsZWRTYXZlQnRuICYmIGNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgKGNvbHVtbkFjdGlvbnMubGVuZ3RoID4gMCB8fCAodXNlSW5saW5lQ1JVRCAmJiAoZGVsZXRlUm93UGVybWlzc2lvbiB8fCBlZGl0Um93UGVybWlzc2lvbikpKVwiXG4gICAgICAgICAgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nIFwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5cbiAgICAgICAgICBBY3Rpb25zXG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCBwUmVzaXphYmxlQ29sdW1uICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sc1wiXG4gICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbHVtbj8uY29sdW1uV2lkdGggPyBjb2x1bW4/LmNvbHVtbldpZHRoKydweCcgOiBjb2x1bW4/LmN1c3RvbVdpZHRoKydweCdcIlxuICAgICAgICAgIGlkPVwie3tjb2x1bW4uaGVhZGVyfX1cIiBbYXR0ci5kYXRhLWNvbHVtbi1oZWFkZXJdPVwiY29sdW1uPy5oZWFkZXJcIiBbcFNvcnRhYmxlQ29sdW1uXT1cImNvbHVtbi5maWVsZFwiXG4gICAgICAgICAgW2NsYXNzXT1cImNvbHVtbi50eXBlID09PSAnYm9vbGVhbicgPyAnY2hlY2tib3gtdGgnIDogJydcIlxuICAgICAgICAgIFtwU29ydGFibGVDb2x1bW5EaXNhYmxlZF09XCJzb3J0RGlzYWJsZWQgJiYgdXNlU2VydmVyU2lkZUV2ZW50cyA/IHRydWUgOiBjb2x1bW4uc29ydGluZyA9PT0gZmFsc2VcIlxuICAgICAgICAgIGNsYXNzPVwiY29sdW1uPy50eXBlID09PSAnbXVsdGlwbGUnID8gJ2dyaWQtY29tcG9uZW50LXNlbGVjdC10aC1jb2x1bW4tdHlwZS1tdWx0aXBsZScgOiAnJ1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGgtY29udGVudC13cmFwcGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtdGFibGUtaGVhZGVyLWlubmVyLWRpdi0xIHRhYmxlLWhlYWRlci1pbm5lci1kaXYgZGl2LWxhc3QtaW5uZXItaHRtbC1pcy1pY29uXCI+XG4gICAgICAgICAgICAgIDxzcGFuIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCInc2VsZidcIiBbY2xhc3NdPVwiJ2ZsZXgtZ3Jvdy0xJ1wiPnt7IGNvbHVtbi5oZWFkZXIgfX1cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbi5pc1JlcXVpcmVkXCIgY2xhc3M9XCJncmlkLWNvbXBvbmVudCByZXF1aXJlZC1zdGFyXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8cC1zb3J0SWNvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uLnNvcnRpbmcgIT09IGZhbHNlICYmIGNvbHVtbj8udHlwZSAhPT0gJ211bHRpcGxlJyAmJiAoIShlZGl0QWxsUm93cyAmJiBwYWdpbmF0aW9uKSB8fCBzb3J0SWNvbkhpZGRlbilcIlxuICAgICAgICAgICAgICAgIFtmaWVsZF09XCJjb2x1bW4uZmllbGRcIiAoY2xpY2spPVwiaGFuZGxlQ3VzdG9tU29ydGluZygpXCI+PC9wLXNvcnRJY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggKm5nSWY9XCJoYXNNb3JlQ29sdW1ucygpXCIgcFJlc2l6YWJsZUNvbHVtbiBpZD1cIk1vcmVBY3Rpb25zXCIgY2xhc3M9XCJtb3JlLWFjdGlvbnMtdGhcIj5Nb3JlPC90aD5cbiAgICAgICAgPHRoIHBSZXNpemFibGVDb2x1bW4gaWQ9XCJBY3Rpb25zXCJcbiAgICAgICAgICAqbmdJZj1cIiFzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmICFkaXNhYmxlZFNhdmVCdG4gJiYgY29sdW1ucz8ubGVuZ3RoID4gMCAmJiAoY29sdW1uQWN0aW9ucy5sZW5ndGggPiAwIHx8ICh1c2VJbmxpbmVDUlVEICYmIChkZWxldGVSb3dQZXJtaXNzaW9uIHx8IGVkaXRSb3dQZXJtaXNzaW9uKSkpXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bidcIiBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCI+QWN0aW9uczwvdGg+XG4gICAgICA8L3RyPlxuICAgICAgPHRyICpuZ0lmPVwiZmlsdGVyaW5nICYmICFoaWRlRmlsdGVyXCI+XG4gICAgICAgIDx0aCBwUmVzaXphYmxlQ29sdW1uICpuZ0lmPVwiYWxsb3dTZWxlY3Rpb25cIiBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bidcIj48L3RoPlxuICAgICAgICA8dGggcFJlc2l6YWJsZUNvbHVtbiAqbmdJZj1cInNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgIWRpc2FibGVkU2F2ZUJ0biAmJiB1c2VJbmxpbmVDUlVEXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bidcIj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoIHBSZXNpemFibGVDb2x1bW4gKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2xzXCJcbiAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiY29sdW1uPy5jb2x1bW5XaWR0aCA/IGNvbHVtbj8uY29sdW1uV2lkdGgrJ3B4JyA6IGNvbHVtbj8uY3VzdG9tV2lkdGgrJ3B4J1wiXG4gICAgICAgICAgaWQ9XCJ7e2NvbHVtbi5oZWFkZXJ9fVwiIFtuZ1N3aXRjaF09XCJjb2x1bW4/LmZpbHRlcj8udHlwZVwiXG4gICAgICAgICAgW2NsYXNzXT1cImhpZGVGaWx0ZXJPcHRpb25zID8gJ2hpZGUtdGFibGUtZmlsdGVyIHRlbXAnIDogJ3RlbXAnXCI+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4uZmlsdGVyaW5nICE9PSBmYWxzZVwiIFtjbGFzc109XCJjb2x1bW4uZmlsdGVyPy5zaG93RmlsdGVyID8gJycgOiAnaGlkZS1maWx0ZXItaWNvbidcIj5cbiAgICAgICAgICAgIDwhLS0gVGV4dCBpbnB1dCBvbiBIZWFkZXIgRm9yIEZpbHRlci0tPlxuICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyIGNsYXNzPVwibm8tZmlsdGVyLWljb25cIiBbdHlwZV09XCIndGV4dCdcIiBbZmllbGRdPVwiY29sdW1uLmZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIidpbnB1dCdcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbHRlclwiIGxldC12YWx1ZSBsZXQtZmlsdGVyPVwiZmlsdGVyQ2FsbGJhY2tcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cImNvbHVtbi5maWx0ZXJWYWx1ZVwiIFtjbGFzc109XCJjb2x1bW4/LmZpZWxkPy50b0xvd2VyQ2FzZSgpXCJcbiAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJhcHBseUVudGVyRXZlbnQoZmlsdGVyLCAkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgKGJsdXIpPVwic2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uLCBmaWx0ZXIsICRldmVudClcIiBbbmFtZV09XCJjb2x1bW4uZmllbGRcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXV0b2NvbXBsZXRlXT1cIihjb2x1bW4uYXV0b0NvbXBsZXRlID09PSBmYWxzZSB8fCBjb2x1bW4uZmlsdGVyQXV0b0NvbXBsZXRlID09PSBmYWxzZSB8fCBhdXRvQ29tcGxldGUgPT09IGZhbHNlKSA/ICdvZmYnIDogJ29uJ1wiXG4gICAgICAgICAgICAgICAgICAoa2V5dXApPVwicmVtb3ZpbmdGaWx0ZXJzKCRldmVudCwgY29sdW1uKTtiYWNrc3BhY2VFdmVudCgkZXZlbnQsIGNvbHVtbilcIiBwSW5wdXRUZXh0IC8+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3AtY29sdW1uRmlsdGVyPlxuXG4gICAgICAgICAgICA8IS0tIE51bWVyaWMgaW5wdXQgb24gSGVhZGVyIEZvciBGaWx0ZXItLT5cbiAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciBjbGFzcz1cIm5vLWZpbHRlci1pY29uXCIgW3R5cGVdPVwiJ251bWVyaWMnXCIgW2ZpZWxkXT1cImNvbHVtbi5maWVsZFwiXG4gICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbnVtZXJpY19pbnB1dCdcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbHRlclwiIGxldC12YWx1ZSBsZXQtZmlsdGVyPVwiZmlsdGVyQ2FsbGJhY2tcIj5cbiAgICAgICAgICAgICAgICA8cC1pbnB1dE51bWJlciBbKG5nTW9kZWwpXT1cImNvbHVtbi5maWx0ZXJWYWx1ZVwiIFtjbGFzc109XCJjb2x1bW4/LmZpZWxkPy50b0xvd2VyQ2FzZSgpXCJcbiAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJhcHBseUVudGVyRXZlbnQoZmlsdGVyLCAkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgKG9uQmx1cik9XCJzZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAoa2V5dXApPVwicmVtb3ZpbmdGaWx0ZXJzKCRldmVudCwgY29sdW1uKTtiYWNrc3BhY2VFdmVudCgkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXV0b2NvbXBsZXRlXT1cImNvbHVtbi5maWx0ZXJBdXRvQ29tcGxldGUgPT09IHRydWUgPyAnb24nIDogJ29mZidcIj48L3AtaW5wdXROdW1iZXI+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3AtY29sdW1uRmlsdGVyPlxuXG4gICAgICAgICAgICA8IS0tIGxvb2t1cCBpbnB1dCBvbiBIZWFkZXIgRm9yIEZpbHRlci0tPlxuICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyIGNsYXNzPVwibm8tZmlsdGVyLWljb25cIiBbdHlwZV09XCIndGV4dCdcIiBbZmllbGRdPVwiY29sdW1uLmZpZWxkXCIgbWF0Y2hNb2RlPVwiZXF1YWxzXCJcbiAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidsb29rdXBfaW5wdXQnXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJcIiBsZXQtdmFsdWUgbGV0LWZpbHRlcj1cImZpbHRlckNhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsb3NlLWljb24td3JhcHBlciBncmlkLWNvbXBvbmVudCBsb29rdXAtZmlsdGVyLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb29rdXAtZmlsdGVyLWlucHV0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtpZF09XCJjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX2ZpbHRlcidcIiBjbGFzcz1cImdyaWQtY29tcG9uZW50IGxvb2t1cC1maWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmF1dG9jb21wbGV0ZV09XCIoY29sdW1uLmF1dG9Db21wbGV0ZSA9PT0gZmFsc2UgfHwgY29sdW1uLmZpbHRlckF1dG9Db21wbGV0ZSA9PT0gZmFsc2UgfHwgYXV0b0NvbXBsZXRlID09PSBmYWxzZSkgPyAnb2ZmJyA6ICdvbidcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCIgW25nTW9kZWxdPVwibG9va3VwRmlsdGVySW5wdXROZ01vZGVsKGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUxvb2t1cElucHV0TmdNb2RlbCgnbG9va3VwRmlsdGVyJywgY29sdW1uLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0RmlsdGVyTG9va3VwKGNvbHVtbilcIiAoa2V5dXAuZW50ZXIpPVwiYXBwbHlFbnRlckV2ZW50KGZpbHRlciwgJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJzZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgJGV2ZW50KVwiIFtuYW1lXT1cImNvbHVtbi5maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cInJlbW92aW5nRmlsdGVycygkZXZlbnQsIGNvbHVtbik7YmFja3NwYWNlRXZlbnQoJGV2ZW50LCBjb2x1bW4pXCIgcElucHV0VGV4dCAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGlyZWN0LXdyYXBwZXItY2xvc2UtaWNvbi1sb29rdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImNvbHVtbi5maWx0ZXJWYWx1ZVwiIGljb249XCJwaSBwaS10aW1lc1wiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImxvb2t1cENsZWFyVmFsdWUoY29sdW1uKVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cblxuICAgICAgICAgICAgPCEtLSBjaGVja2JveCBvbiBIZWFkZXIgRm9yIEZpbHRlci0tPlxuICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyIGNsYXNzPVwibm8tZmlsdGVyLWljb25cIiB0eXBlPVwiYm9vbGVhblwiIFtmaWVsZF09XCJjb2x1bW4uZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrYm94J1wiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsdGVyXCIgbGV0LXZhbHVlIGxldC1maWx0ZXI9XCJmaWx0ZXJDYWxsYmFja1wiPlxuICAgICAgICAgICAgICAgIDxwLWNoZWNrYm94IFtiaW5hcnldPVwidHJ1ZVwiIFtkaXNhYmxlZF09XCJjb2x1bW4uZGlzYWJsZWRcIiBbbmdNb2RlbF09XCJjb2x1bW4uZmlsdGVyVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImFwcGx5RW50ZXJFdmVudChmaWx0ZXIsICRldmVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwic2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uLCBmaWx0ZXIsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2xpY2tDaGVja0JveEZpbHRlcihjb2x1bW4sICRldmVudClcIiAoa2V5ZG93bik9XCJiYWNrc3BhY2VFdmVudCgkZXZlbnQsIGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICA8L3AtY2hlY2tib3g+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3AtY29sdW1uRmlsdGVyPlxuXG4gICAgICAgICAgICA8IS0tIG11bHRpU2VsZWN0IG9uIEhlYWRlciBGb3IgRmlsdGVyLS0+XG4gICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgY2xhc3M9XCJuby1maWx0ZXItaWNvblwiIFtmaWVsZF09XCJjb2x1bW4uZmllbGRcIiBtYXRjaE1vZGU9XCJpblwiIFtzaG93TWVudV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbXVsdGktc2VsZWN0J1wiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsdGVyXCIgbGV0LXZhbHVlIGxldC1maWx0ZXI9XCJmaWx0ZXJDYWxsYmFja1wiPlxuICAgICAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0IFsobmdNb2RlbCldPVwiY29sdW1uLmZpbHRlclZhbHVlXCIgW29wdGlvbnNdPVwiY29sdW1uLmZpbHRlci5kYXRhIHx8IFtdXCIgW2FwcGVuZFRvXT1cIidib2R5J1wiXG4gICAgICAgICAgICAgICAgICBbbmFtZV09XCJjb2x1bW4uZmllbGRcIiAoa2V5dXAuZW50ZXIpPVwiYXBwbHlFbnRlckV2ZW50KGZpbHRlciwgJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgIFtvcHRpb25WYWx1ZV09XCJjb2x1bW4ub3B0aW9uVmFsdWVcIiBbb3B0aW9uTGFiZWxdPVwiY29sdW1uLm9wdGlvbkxhYmVsXCJcbiAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJzZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgJGV2ZW50KVwiIChrZXlkb3duKT1cImJhY2tzcGFjZUV2ZW50KCRldmVudCwgY29sdW1uKVwiPlxuXG4gICAgICAgICAgICAgICAgPC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cblxuICAgICAgICAgICAgPCEtLSBkcm9wZG93biBvbiBIZWFkZXIgRm9yIEZpbHRlci0tPlxuICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyIGNsYXNzPVwibm8tZmlsdGVyLWljb25cIiBbZmllbGRdPVwiY29sdW1uLmZpZWxkXCIgbWF0Y2hNb2RlPVwiaW5cIiBbc2hvd01lbnVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2Ryb3Bkb3duJ1wiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsdGVyXCIgbGV0LXZhbHVlIGxldC1maWx0ZXI9XCJmaWx0ZXJDYWxsYmFja1wiPlxuICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duIFtzaG93Q2xlYXJdPVwidHJ1ZVwiIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0J1wiIFtmaWx0ZXJdPVwiY29sdW1uLmFsbG93U2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29sdW1uLmZpbHRlclZhbHVlXCIgKGtleXVwLmVudGVyKT1cImFwcGx5RHJvcGRvd25GaWx0ZXIoZmlsdGVyLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImNvbHVtbi5maWx0ZXIuZGF0YSB8fCBbXVwiIChvbkNoYW5nZSk9XCJzZWFyY2hEcm9wZG93bkZpbHRlcihmaWx0ZXIsICRldmVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwiJ2JvZHknXCIgZmlsdGVyTWF0Y2hNb2RlPVwic3RhcnRzV2l0aFwiPjwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG5cbiAgICAgICAgICAgIDwhLS0gY2FsZW5kYXIgb24gSGVhZGVyIEZvciBGaWx0ZXItLT5cbiAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciBjbGFzcz1cIm5vLWZpbHRlci1pY29uXCIgW2ZpZWxkXT1cImNvbHVtbi5maWVsZFwiIG1hdGNoTW9kZT1cImluXCIgW3Nob3dNZW51XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidjYWxlbmRhcidcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbHRlclwiIGxldC12YWx1ZSBsZXQtZmlsdGVyPVwiZmlsdGVyQ2FsbGJhY2tcIj5cbiAgICAgICAgICAgICAgICA8cC1kYXRlcGlja2VyIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0LURhdGUnXCIgWyhuZ01vZGVsKV09XCJjb2x1bW4uZmlsdGVyVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNvbHVtbi5maWVsZCArICctZmlsdGVyLWlucHV0J1wiIChrZXl1cC5lbnRlcik9XCJhcHBseUVudGVyRXZlbnQoZmlsdGVyLCAkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCIgKG9uU2VsZWN0KT1cInNlbGVjdERhdGUoY29sdW1uKVwiIFtpbnB1dElkXT1cImNvbHVtbi5maWVsZFwiIGhvdXJGb3JtYXQ9XCIxMlwiXG4gICAgICAgICAgICAgICAgICAoa2V5dXAuYmFja3NwYWNlKT1cInJlbW92ZU51bGxDYWxlbmRhcihjb2x1bW4sIGZpbHRlciwgJGV2ZW50KVwiIFtzaG93QnV0dG9uQmFyXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgKG9uQ2xvc2UpPVwic2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uLCBmaWx0ZXIsICRldmVudClcIiBbZGF0ZUZvcm1hdF09XCJjYWxlbmRhckZvcm1hdFwiXG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjYWxlbmRhcklucHV0VmFsdWUoY29sdW1uLCB7fSwgdHJ1ZSlcIiAob25DbGVhckNsaWNrKT1cImJhY2tzcGFjZUV2ZW50KCRldmVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJzZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDwvcC1kYXRlcGlja2VyPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cblxuICAgICAgICAgICAgPCEtLSBEZWZhdWx0IEZpbHRlciBGb3IgSGVhZGVyICAtLT5cbiAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciBjbGFzcz1cIm5vLWZpbHRlci1pY29uXCIgW3R5cGVdPVwiXG4gICAgICAgICAgICAgICAgY29sdW1uLnR5cGUgJiYgY29sdW1uLnR5cGUgIT09ICdsaW5rJyA/IGNvbHVtbi50eXBlIDogJ3RleHQnXG4gICAgICAgICAgICAgIFwiIFtmaWVsZF09XCJjb2x1bW4uZmllbGRcIiBkaXNwbGF5PVwibWVudVwiICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgICAgICAgICA8L3AtY29sdW1uRmlsdGVyPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoICpuZ0lmPVwiaGFzTW9yZUNvbHVtbnMoKVwiIHBSZXNpemFibGVDb2x1bW4gY2xhc3M9XCJtb3JlLWFjdGlvbnMtdGhcIj48L3RoPlxuICAgICAgICA8dGggcFJlc2l6YWJsZUNvbHVtblxuICAgICAgICAgICpuZ0lmPVwiIXNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgIWRpc2FibGVkU2F2ZUJ0biAmJiBjb2x1bW5zPy5sZW5ndGggPiAwICYmIChjb2x1bW5BY3Rpb25zLmxlbmd0aCA+IDAgfHwgKHVzZUlubGluZUNSVUQgJiYgKGRlbGV0ZVJvd1Blcm1pc3Npb24gfHwgZWRpdFJvd1Blcm1pc3Npb24pKSlcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiPjwvdGg+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8IS0tIEJvZHkgY29sdW1ucyBvbiBHcmlkIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXJvdyBsZXQtZWRpdGluZz1cImVkaXRpbmdcIiBsZXQtcmk9XCJyb3dJbmRleFwiPlxuICAgICAgPHRyIFtzdHlsZV09XCJyb3dTdHlsZVwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2hpZ2hsaWdodGVkLXJvdyc6IHJvdz8uaGlnaGxpZ2h0cm93LFxuICAgICAgICAnZWxsaXBzaXMtdHJ1ZSc6IGVsbGlwc2lzLFxuICAgICAgICAncC1zZWxlY3RhYmxlLXJvdyB3b3JkV3JhcFRydWUnOiB3b3JkV3JhcCxcbiAgICAgICAgJ3dvcmRXcmFwRmFsc2UgcC1zZWxlY3RhYmxlLXJvdyc6ICF3b3JkV3JhcFxuICAgICAgfVwiIChjbGljayk9XCJzZWxlY3RlZFJvd1JlY29yZCA9IHJvd1wiIFtwRWRpdGFibGVSb3ddPVwicm93XCIgW3BSZW9yZGVyYWJsZVJvd109XCJyaVwiICNncmlkUm93IFtpZF09XCJyb3dbZGF0YUtleV1cIj5cbiAgICAgICAgPHRkICpuZ0lmPVwiYWxsb3dTZWxlY3Rpb25cIiBjbGFzcz1cImdyaWQtY29tcG9uZW50LXNlbGVjdGlvblwiIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT5cbiAgICAgICAgICA8cC10YWJsZVJhZGlvQnV0dG9uIFt2YWx1ZV09XCJyb3dcIiAqbmdJZj1cInNlbGVjdGlvblR5cGUgPT09ICdzaW5nbGUnXCJcbiAgICAgICAgICAgIChjbGljayk9XCJtdWx0aUNoZWNrQm94T25jbGljayhyb3cgLCAkZXZlbnQpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCI+PC9wLXRhYmxlUmFkaW9CdXR0b24+XG4gICAgICAgICAgPHAtdGFibGVDaGVja2JveCBbdmFsdWVdPVwicm93XCIgKm5nSWY9XCJzZWxlY3Rpb25UeXBlID09PSAnbXVsdGlwbGUnXCJcbiAgICAgICAgICAgIChjbGljayk9XCJtdWx0aUNoZWNrQm94T25jbGljayhyb3csICRldmVudCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIj48L3AtdGFibGVDaGVja2JveD5cbiAgICAgICAgPC90ZD5cblxuICAgICAgICA8IS0tIGZpcnN0IGFjdGlvbnMgY29sdW1uIC0tPlxuICAgICAgICA8IS0tIDx0ZCAqbmdJZj1cInNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgY29sdW1uQWN0aW9ucy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJhY3Rpb24tYnRuXCIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb2x1bW5BY3Rpb25zXCI+XG4gICAgICAgICAgICA8aSBbdGl0bGVdPVwiYWN0aW9uLnRvb2x0aXBcIiBbY2xhc3NdPVwiYWN0aW9uLmljb25cIiAoY2xpY2spPVwiaGFuZGxlQWN0aW9uQ2xpY2soJGV2ZW50LCBhY3Rpb24sIHJvdylcIj48L2k+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RkPiAtLT5cbiAgICAgICAgPHRkICpuZ0lmPVwic2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiBjb2x1bW5BY3Rpb25zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29sdW1uQWN0aW9uc1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhY3Rpb24tYnRuXCIgKm5nSWY9XCJhY3Rpb24udmlzaWJsZSA/IGFjdGlvbi52aXNpYmxlKHJvdykgOiB0cnVlXCI+XG4gICAgICAgICAgICAgIDxpIFt0aXRsZV09XCJhY3Rpb24udG9vbHRpcFwiIFtjbGFzc109XCJhY3Rpb24uaWNvblwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFjdGlvbi1idG4tZGlzYWJsZWRdPVwiYWN0aW9uLmRpc2FibGVkID8gYWN0aW9uLmRpc2FibGVkKHJvdykgOiBmYWxzZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIihhY3Rpb24uZGlzYWJsZWQgJiYgYWN0aW9uLmRpc2FibGVkKHJvdykpID8gbnVsbCA6IGhhbmRsZUFjdGlvbkNsaWNrKCRldmVudCwgYWN0aW9uLCByb3cpXCI+PC9pPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgKm5nSWY9XCJzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmIHVzZUlubGluZUNSVUQgJiYgKGRlbGV0ZVJvd1Blcm1pc3Npb24gfHwgZWRpdFJvd1Blcm1pc3Npb24pXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bidcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImRpc2FibGVkU2F2ZUJ0biA/ICdoaWRlLWNsZWFyLWZpbHRlci1idXR0b24nIDogJydcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNldEFjdGlvbkNvbHVtbldpZHRoXCI+XG4gICAgICAgICAgICA8c2UtZ3JpZC1yb3ctYWN0aW9ucyBbZWRpdGluZ109XCJlZGl0aW5nXCIgW2VkaXRSb3dQZXJtaXNzaW9uXT1cImVkaXRSb3dQZXJtaXNzaW9uXCJcbiAgICAgICAgICAgICAgW2RlbGV0ZVJvd1Blcm1pc3Npb25dPVwiZGVsZXRlUm93UGVybWlzc2lvblwiIFtoaWRlRGVsZXRlQnRuXT1cImhpZGVEZWxldGVCdG5cIiBbaGlkZUVkaXRCdG5dPVwiaGlkZUVkaXRCdG5cIlxuICAgICAgICAgICAgICBbcm93XT1cInJvd1wiIChvblJvd0VkaXRJbml0QnRuKT1cIm9uUm93RWRpdEluaXQoJGV2ZW50KVwiIChkZWxldGVSZWNvcmRCdG4pPVwiZGVsZXRlUmVjb3JkKCRldmVudClcIlxuICAgICAgICAgICAgICAob25Sb3dFZGl0U2F2ZUJ0bik9XCJvblJvd0VkaXRTYXZlKCRldmVudClcIiAob25Sb3dFZGl0Q2FuY2VsQnRuKT1cIm9uUm93RWRpdENhbmNlbCgkZXZlbnQsIHJpKVwiXG4gICAgICAgICAgICAgIFtlZGl0QWxsUm93c109XCJlZGl0QWxsUm93c1wiPlxuICAgICAgICAgICAgPC9zZS1ncmlkLXJvdy1hY3Rpb25zPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90ZD5cblxuICAgICAgICA8IS0tIEdyaWQgUm93cyBEYXRhIEJpbmRpbmdzIFN0YXJ0IC0tPlxuICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBzZWxlY3RlZENvbHVtbnNcIiBbbmdTd2l0Y2hdPVwiY29sdW1uLnR5cGVcIiBbc3R5bGVdPVwiY29sdW1uLnN0eWxlXCJcbiAgICAgICAgICBbY2xhc3NdPVwiY29sdW1uLnN0eWxlID8gJycgOiAndy1zdGF0aWMtY29sJ1wiIFthdHRyLmRhdGEtY29sdW1uLWZpZWxkXT1cImNvbHVtbj8uZmllbGRcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbi5ob3ZlckRhdGEgJiYgIWNvbHVtbi5pc1RleHRhcmVhID8gJ3RkLW92ZXJsYXknIDogJydcIiBwUmVvcmRlcmFibGVSb3dIYW5kbGU+XG4gICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiY29sdW1uLmhvdmVyRGF0YSAmJiAhY29sdW1uLmlzVGV4dGFyZWEgPyAndGQtd3JhcHBlcicgOiAnJ1wiXG4gICAgICAgICAgICAobW91c2VlbnRlcik9XCIoY29sdW1uLmhvdmVyRGF0YSAmJiBjb2x1bW4uaG92ZXJEYXRhLmNvbXBvbmVudCAmJiAhY29sdW1uLmlzVGV4dGFyZWEpID8gYWRkRHluYW1pY1BhbmVsT3ZlcmxheUNvbXBvbmVudChjb2x1bW4uaG92ZXJEYXRhLCBvdmVybGF5UGFuZWwsICRldmVudCwgcm93KSA6ICcnXCJcbiAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIihjb2x1bW4uaG92ZXJEYXRhICYmIGNvbHVtbi5ob3ZlckRhdGEuY29tcG9uZW50ICYmICFjb2x1bW4uaXNUZXh0YXJlYSkgPyAgbW91c2VMZWF2ZUV2ZW50KG92ZXJsYXlQYW5lbCkgOiAnJ1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZC1jb250ZW50LXdyYXBwZXJcIiBbc3R5bGVdPVwiY29sdW1uLnN0eWxlXCI+XG5cbiAgICAgICAgICAgICAgPCEtLSBCb29sZWFuIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2Jvb2xlYW4nXCI+XG4gICAgICAgIDx0ZCAqbmdJZj1cIiFlZGl0aW5nICYmIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5zaG93ICE9IGZhbHNlXCI+XG4gICAgICAgICAgPHAtY2hlY2tib3ggW25nQ2xhc3NdPVwieydkaXNhYmxlZC1jaGVja2JveCc6IGNvbHVtbi5kaXNhYmxlZH1cIiBbYmluYXJ5XT1cInRydWVcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hlY2tCb3hDaGFuZ2VFdmVudCgkZXZlbnQsIGNvbHVtbiwgcm93KVwiIChjaGFuZ2UpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJnZXRDaGVja2JveFZhbHVlKHJvdywgY29sdW1uKVwiPlxuICAgICAgICAgIDwvcC1jaGVja2JveD5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkICpuZ0lmPVwiZWRpdGluZ1wiPlxuICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgPCEtLSBmb3IgZWRpdCBjaGVja0JveCAtLT5cbiAgICAgICAgICAgICAgPHAtY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwiY2hlY2tCb3hDaGFuZ2VFdmVudCgkZXZlbnQsIGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIiBbYmluYXJ5XT1cInRydWVcIiBbbmdNb2RlbF09XCJnZXRDaGVja2JveFZhbHVlKHJvdywgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCI+PC9wLWNoZWNrYm94PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAge3sgcm93W2NvbHVtbi5maWVsZF0gfX1cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8IS0tIGxpbmsgY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgIDxzcGFuIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdhLGlucHV0J1wiICpuZ1N3aXRjaENhc2U9XCInbGluaydcIj5cbiAgICAgICAgICA8IS0tIGxpbmsgY29sdW1uIGZvciBIeXBlckxpbmsgQ2FzZSAtLT5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbi5hbGxvd1NhdmUgPT09IGZhbHNlXCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbi50YXJnZXQgIT09ICdfc2VsZidcIiBbc3R5bGVdPVwiY29sdW1uLnN0eWxlXCJcbiAgICAgICAgICAgICAgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ2EnXCIgY2xhc3M9XCJjdXN0b20tbGlua1wiXG4gICAgICAgICAgICAgIFtjbGFzc109XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2Rpc2FibGVkLWxpbmsnIDogJydcIiBwUmVvcmRlcmFibGVSb3dIYW5kbGU+XG5cbiAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkLWlubGluZVwiIFtocmVmXT1cImNvbHVtbi5kaXNhYmxlZD8nJzpyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uaHlwZXJsaW5rXCIgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICBwUmVvcmRlcmFibGVSb3dIYW5kbGU+XG4gICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb2x1bW4uaWNvbiAmJiFyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlOyBlbHNlIG5vSWNvblwiIFtjbGFzc109XCJjb2x1bW4uaWNvblwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiY29sdW1uLmhlYWRlclwiPjwvaT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vSWNvbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJjb2x1bW4/Lm9uQ2xpY2sgPyBvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpIDogJydcIj5cbiAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZT8nJzpcbiAgICAgICAgICAgICAgICAgICAgc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdywgY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvYT5cblxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4udGFyZ2V0ID09PSAnX3NlbGYnXCIgW3N0eWxlXT1cImNvbHVtbi5zdHlsZVwiXG4gICAgICAgICAgICAgIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdhJ1wiIGNsYXNzPVwiY3VzdG9tLWxpbmtcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiIGFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1wiIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT5cblxuICAgICAgICAgICAgICA8YSBjbGFzcz1cImQtaW5saW5lXCIgW2hyZWZdPVwiY29sdW1uLmRpc2FibGVkPycnOnJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5oeXBlcmxpbmtcIlxuICAgICAgICAgICAgICAgIFt0YXJnZXRdPSdjb2x1bW4udGFyZ2V0JyBwUmVvcmRlcmFibGVSb3dIYW5kbGU+XG4gICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb2x1bW4uaWNvbiAmJiFyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlOyBlbHNlIG5vSWNvblwiIFtjbGFzc109XCJjb2x1bW4uaWNvblwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiY29sdW1uLmhlYWRlclwiPjwvaT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vSWNvbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJjb2x1bW4/Lm9uQ2xpY2sgPyBvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpIDogJydcIj5cbiAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZT8nJzpcbiAgICAgICAgICAgICAgICAgICAgc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdywgY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvYT5cblxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8IS0tIGxpbmsgY29sdW1uIGZvciBFZGl0IENhc2UgLS0+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4uYWxsb3dTYXZlIHx8IGNvbHVtbi5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZFwiPlxuICAgICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCIgcFJlb3JkZXJhYmxlUm93SGFuZGxlPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiKGNvbHVtbi5lZGl0YWJsZSA9PT0gdHJ1ZSApICYmIChjb2x1bW4uZWRpdExpbmsgPT09IHRydWUgKVwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwiIXJvdy5pc05ld1wiIHBJbnB1dFRleHRcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwicm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZCB8fCByb3dbY29sdW1uLmZpZWxkXSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5RmllbGQgPSAkZXZlbnQgOiByb3dbY29sdW1uLmZpZWxkXSA9ICRldmVudFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb2x1bW4/Lm9uQ2xpY2sgPyBvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpIDogJydcIiB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCIgW2F0dHIuYXV0b2NvbXBsZXRlXT1cIihjb2x1bW4uYXV0b0NvbXBsZXRlID09PSBmYWxzZSB8fCBhdXRvQ29tcGxldGUgPT09IGZhbHNlKSA/ICdvZmYnIDogJ29uJ1wiIChjaGFuZ2UpPVwib25DaGFuZ2VFdmVudChjb2x1bW4sIHJvdylcIiAvPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHBJbnB1dFRleHQgKm5nSWY9XCJyb3cuaXNOZXdcIiB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb2x1bW4/Lm9uQ2xpY2sgPyBvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpIDogJydcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQgPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZCA6IHJvd1tjb2x1bW4uZmllbGRdXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZCA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQgOiByb3dbY29sdW1uLmZpZWxkXSA9ICRldmVudFwiXG4gICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIiBbYXR0ci5hdXRvY29tcGxldGVdPVwiKGNvbHVtbi5hdXRvQ29tcGxldGUgPT09IGZhbHNlIHx8IGF1dG9Db21wbGV0ZSA9PT0gZmFsc2UpID8gJ29mZicgOiAnb24nXCIgKGNoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KVwiIC8+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4gKm5nSWY9XCJjb2x1bW4uZWRpdGFibGUgPT09IGZhbHNlfHwgY29sdW1uLmVkaXRhYmxlID09PSB1bmRlZmluZWRcIiA+XG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJjdXN0b20tbGlua1wiIChjbGljayk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCIgW2hyZWZdPVwicm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmh5cGVybGlua1wiIFt0YXJnZXRdPSdjb2x1bW4udGFyZ2V0J1xuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb2x1bW4uaWNvbiAmJiAhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZTsgZWxzZSBub0ljb25cIltjbGFzc109XCJjb2x1bW4uaWNvblwiIFt0aXRsZV09XCJjb2x1bW4uaGVhZGVyXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ljb24+XG4gICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlPycnOlxuICAgICAgICAgICAgICAgICAgICBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+IC0tPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIihjb2x1bW4uZWRpdExpbmsgPT09IGZhbHNlfHwgY29sdW1uLmVkaXRMaW5rID09PSB1bmRlZmluZWQpJiYoY29sdW1uLmVkaXRhYmxlID09PSBmYWxzZXx8IGNvbHVtbi5lZGl0YWJsZSA9PT0gdW5kZWZpbmVkKVwiPlxuICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkLWlubGluZVwiIFtocmVmXT1cInJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5oeXBlcmxpbmtcIlxuICAgICAgICAgICAgICAgICAgICBbdGFyZ2V0XT1cImNvbHVtbi50YXJnZXQgPyBjb2x1bW4udGFyZ2V0IDogJ19ibGFuaydcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY29sdW1uLmVkaXRhYmxlID09PSBmYWxzZSA/ICcnIDogYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdkaXNhYmxlZC1saW5rJyA6ICcnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiY29sdW1uLmljb24gJiYgIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU7IGVsc2Ugbm9JY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY29sdW1uLmljb25cIiBbdGl0bGVdPVwiY29sdW1uLmhlYWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbHVtbj8ub25DbGljayA/IG9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdykgOiAnJ1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cImNvbHVtbj8ub25DbGljayA/IG9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdykgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU/Jyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIFtzdHlsZV09XCJjb2x1bW4uc3R5bGVcIiBjbGFzcz1cImN1c3RvbS1saW5rXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjb2x1bW4uZWRpdGFibGUgPT09IGZhbHNlIHx8IGFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkLWlubGluZVwiIFtocmVmXT1cImNvbHVtbi5kaXNhYmxlZD8nJzpyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uaHlwZXJsaW5rXCJcbiAgICAgICAgICAgICAgICAgICAgW3RhcmdldF09XCJjb2x1bW4udGFyZ2V0ID8gY29sdW1uLnRhcmdldCA6ICdfYmxhbmsnXCIgcFJlb3JkZXJhYmxlUm93SGFuZGxlPlxuICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImNvbHVtbi5pY29uJiYgIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU7IGVsc2Ugbm9JY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiY29sdW1uLmhlYWRlclwiIFtjbGFzc109XCJjb2x1bW4uaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbHVtbj8ub25DbGljayA/IG9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdykgOiAnJ1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cImNvbHVtbj8ub25DbGljayA/IG9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdykgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU/Jyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDwvYT5cblxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gSWZyYW1lIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2lmcmFtZSdcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1saW5rXCIgKGNsaWNrKT1cImdyaWRJRnJhbWUoY29sdW1uLCByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uaHlwZXJsaW5rLCByb3cpXCIgW3RpdGxlXT1cIlxuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddICYmXG4gICAgICAgICAgICAgICAgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0ID09PSBudWxsIHx8IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0ID09PSAnJylcbiAgICAgICAgICAgICAgICAgID8gcm93W2NvbHVtbi5maWVsZF0gOiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgIDogY29sdW1uLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgICA/IGNvbHVtbi5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgOiByb3dbY29sdW1uLmZpZWxkXVxuXG4gICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImN1c3RvbS1pY29uLWJ0blwiICpuZ0lmPVwiY29sdW1uLmljb247IGVsc2Ugbm9JY29uXCIgW2Rpc2FibGVkXT1cImNvbHVtbi5kaXNhYmxlZFwiPlxuICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiY29sdW1uLmljb25cIiBbdGl0bGVdPVwiY29sdW1uLmhlYWRlclwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ljb24+XG4gICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddICYmXG4gICAgICAgICAgICAgIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dCA9PT0gbnVsbCB8fCByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dCA9PT0gJycpXG4gICAgICAgICAgICAgID8gcm93W2NvbHVtbi5maWVsZF0gOiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICA6IGNvbHVtbi5kaXNwbGF5VGV4dCA/IGNvbHVtbi5kaXNwbGF5VGV4dCA6IHJvd1tjb2x1bW4uZmllbGRdXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gZGlhbG9nIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2RpYWxvZydcIj5cbiAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uPy5maWx0ZXI/LnR5cGUgIT09ICdjYWxlbmRhcicgJiYgIXJvdz8uaGlkZWdyaWRidG5cIj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbi5lZGl0YWJsZSA9PT0gdHJ1ZSAmJiAhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICBwUmVvcmRlcmFibGVSb3dIYW5kbGU+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnXCIgcmVhZG9ubHlcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2hpZGUtYm9yZGVyJyA6ICcnXCIgdHlwZT1cInRleHRcIiBwSW5wdXRUZXh0XG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RMb29rdXBGaWVsZChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZCA/IHJvd1tyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0gOiByb3dbY29sdW1uLmZpZWxkXVwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQgPyByb3dbcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0gOiByb3dbY29sdW1uLmZpZWxkXSA9ICRldmVudFwiXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cInJvd1tjb2x1bW4uZmllbGRdXCIgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCIgLz5cblxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnc2VsZidcIiAqbmdJZj1cImNvbHVtbi5lZGl0YWJsZSA9PT0gZmFsc2UgfHwgY29sdW1uLmVkaXRhYmxlID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgXCIgY2xhc3M9XCJjdXN0b20tbGlua1wiIFtzdHlsZV09XCJjb2x1bW4uc3R5bGVcIiBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgIGFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1xuICAgICAgICAgICAgICAgICAgICBcIiAoY2xpY2spPVwib3BlbkdyaWREaWFsb2coY29sdW1uLCByb3csICRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiKGNvbHVtbi5pY29uIHx8IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbikgJiYgIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWUgOyBlbHNlIG5vSWNvblwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gOiBjb2x1bW4uaWNvblwiXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2x1bW4uaGVhZGVyXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ljb24+e3sgKCFjb2x1bW4uZGlzcGxheVRleHQgJiYgcm93LmlzTmV3ICkgfHxcbiAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZSA/ICcnIDogc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdywgY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICB9fTwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uPy5maWx0ZXI/LnR5cGUgPT09ICdjYWxlbmRhcicgJiYgY29sdW1uLmVkaXRhYmxlID09PSB0cnVlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnaW5wdXQnXCI+XG4gICAgICAgICAgICAgICAgPHAtZGF0ZXBpY2tlclxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICBbaWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdoaWRlLWJvcmRlcicgOiAnJ1wiIChvbkNsb3NlKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgW21pbkRhdGVdPVwiY29sdW1uLm1pbkRhdGVcIiBbbWF4RGF0ZV09XCJjb2x1bW4ubWF4RGF0ZVwiIFthcHBlbmRUb109XCInYm9keSdcIiBob3VyRm9ybWF0PVwiMTJcIlxuICAgICAgICAgICAgICAgICAgW3Nob3dUaW1lXT1cImNvbHVtbi5zaG93VGltZVwiIChjbGljayk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCIgW3RpbWVPbmx5XT1cImNvbHVtbi50aW1lT25seVwiXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZCA/IHJvd1tyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGRdXCJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQgP1xuICAgICAgICAgICAgICAgICAgcm93W3Jvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV0gOiByb3dbY29sdW1uLmZpZWxkXSA9ICRldmVudFwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiPjwvcC1kYXRlcGlja2VyPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uPy5maWx0ZXI/LnR5cGUgPT09ICdjYWxlbmRhcicgJiYgIWNvbHVtbi5lZGl0YWJsZVwiIGNsYXNzPVwiY3VzdG9tLWxpbmtcIlxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3cuZGlzYWJsZWQgICB8fCBhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2Rpc2FibGVkLWxpbmsnIDogJydcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuR3JpZERpYWxvZyhjb2x1bW4sIHJvdywgJGV2ZW50KVwiPnt7IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWUgPyAnJyA6XG4gICAgICAgICAgICAgICAgc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdywgY29sdW1uKSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1saW5rXCIgW3N0eWxlXT1cImNvbHVtbi5zdHlsZVwiIHBSZW9yZGVyYWJsZVJvd0hhbmRsZVxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3cuZGlzYWJsZWQgICB8fCBhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2Rpc2FibGVkLWxpbmsnIDogJydcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuR3JpZERpYWxvZyhjb2x1bW4sIHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnXCI+XG4gICAgICAgICAgICAgICAgPGkgKm5nSWY9XCIoY29sdW1uLmljb24gfHwgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5pY29uKSAmJiAhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZSA7IGVsc2Ugbm9JY29uXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2x1bW4uaG92ZXJEYXRhID8gJycgOiBjb2x1bW4uaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gOiBjb2x1bW4uaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vSWNvbj57eyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlID8gJycgOiBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LFxuICAgICAgICAgICAgICAgICAgY29sdW1uKSB9fTwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPCEtLSB7eyBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pIH19XG4gICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhcm93W2NvbHVtbi5maWVsZCArICdfc2Vjb25kVHlwZSddICYmICFyb3cuaGlkZWdyaWRidG5cIiAtLT5cblxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSB0ZXN0IC0tPlxuICAgICAgICA8IS0tIGxvb2t1cCBJbnB1dCBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidsb29rdXBfaW5wdXQnXCI+XG4gICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xvc2UtaWNvbi13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdzZWxmJ1wiXG4gICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiIWlzTG9va3VwSW5wdXRFZGl0YWJsZShjb2x1bW4sIHJvdylcIiB0eXBlPVwidGV4dFwiIFtuZ01vZGVsXT1cImxvb2t1cElucHV0TmdNb2RlbChyb3csIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTG9va3VwSW5wdXROZ01vZGVsKHJvdywgY29sdW1uLCAkZXZlbnQpXCIgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImlzTG9va3VwSW5wdXRFZGl0YWJsZShjb2x1bW4sIHJvdykgPyBvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpIDogc2VsZWN0TG9va3VwRmllbGQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VFdmVudChjb2x1bW4sIHJvdylcIiAoa2V5ZG93bi5lbnRlcik9XCJvbkxvb2t1cElucHV0RW50ZXIoJGV2ZW50LCBjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgKHBhc3RlKT1cIm9uTG9va3VwSW5wdXRQYXN0ZSgkZXZlbnQsIGNvbHVtbiwgcm93KVwiIFtpZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2hpZGUtYm9yZGVyJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJ3ByaW1lLWlucHV0J1wiXG4gICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCIgW2F0dHIuYXV0b2NvbXBsZXRlXT1cIihjb2x1bW4uYXV0b0NvbXBsZXRlID09PSBmYWxzZSB8fCBhdXRvQ29tcGxldGUgPT09IGZhbHNlKSA/ICdvZmYnIDogJ29uJ1wiIC8+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCI+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNMb29rdXBJbnB1dEVkaXRhYmxlKGNvbHVtbiwgcm93KSAmJiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmNvbXBvbmVudCB8fCBjb2x1bW4ubG9va3VwQ29udHJvbD8uY29tcG9uZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1zZWFyY2hcIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwic2VsZWN0TG9va3VwRmllbGQoY29sdW1uLCByb3cpXCI+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicm93W2NvbHVtbi5maWVsZF0gJiYgdHlwZU9mKHJvd1tjb2x1bW4uZmllbGRdKSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkXS50ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogcm93W2NvbHVtbi5maWVsZF0gJiYgIWNvbHVtbi5kaXNhYmxlZFwiIGljb249XCJwaSBwaS10aW1lc1wiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJsb29rdXBDbGVhclZhbHVlKGNvbHVtbixyb3cpXCI+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4ubGlua0lkXCI+XG4gICAgICAgICAgICAgICAgPGEgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnXCIgW2hyZWZdPVwicm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmh5cGVybGlua1wiXG4gICAgICAgICAgICAgICAgICBbdGFyZ2V0XT1cImNvbHVtbi50YXJnZXQgPT09ICdfc2VsZicgPyAnJyA6ICAnX2JsYW5rJ1wiPlxuICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgIHNldExvb2t1cFJlYWRPbmx5VmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnc2VsZidcIiAqbmdJZj1cIiFjb2x1bW4ubGlua0lkXCIgW3N0eWxlXT1cImNvbHVtbi5zdHlsZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cImNvbHVtbi5sb29rdXBDb250cm9sPy5jb21wb25lbnQgJiYgY29sdW1uLmVkaXRMaW5rID09PSB0cnVlID8gJ2N1c3RvbS1saW5rJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3Blbkxvb2t1cEh5cGVybGluayhjb2x1bW4sIHJvdylcIj5cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIHNldExvb2t1cFJlYWRPbmx5VmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gTnVtZXJpYyBJbnB1dCBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidudW1lcmljJ1wiPlxuICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgPCEtLSBmb3IgQ3VycmVuY3kgJiYgRGVjaW1hbCAmJiBQZXJjZW50IC0tPlxuICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnaW5wdXQnXCIgY2xhc3M9XCJpbnB1dC1udW1iZXJcIlxuICAgICAgICAgICAgICAgIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT5cbiAgICAgICAgICAgICAgICA8cC1pbnB1dE51bWJlciBbaWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdoaWRlLWJvcmRlcicgOiAnJ1wiIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICduZy1pbnZhbGlkIG5nLWRpcnR5J1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAnZm9ybS1jb250cm9sJ1xuICAgICAgICAgICAgICAgICAgICBcIiBbc2hvd0J1dHRvbnNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQgPyByb3dbcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldIDogcm93W2NvbHVtbi5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZCA/IHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGRdID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImNvbHVtbi5maWVsZFwiIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCIgKG9uRm9jdXMpPVwib25Gb2N1c0V2ZW50KGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAob25CbHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIiBhdXRvY29tcGxldGU9XCJvZmZcIiAoa2V5ZG93bik9XCJhbGxvd0xlYWRpbmdEb3QoJGV2ZW50KVwiIFttb2RlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0LnR5cGUgPT09ICdjdXJyZW5jeSdcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ2N1cnJlbmN5J1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAnZGVjaW1hbCdcbiAgICAgICAgICAgICAgICAgICAgXCIgW2N1cnJlbmN5XT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0LnR5cGUgPT09ICdjdXJyZW5jeScgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0LmZvcm1hdFBhcmFtcyAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zLmN1cnJlbmN5XG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zLmN1cnJlbmN5XG4gICAgICAgICAgICAgICAgICAgICAgICA6ICdVU0QnXG4gICAgICAgICAgICAgICAgICAgIFwiIFtsb2NhbGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQudHlwZSA9PT0gJ2N1cnJlbmN5JyAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMubG9jYWxlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zLmxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnZW4tVVMnXG4gICAgICAgICAgICAgICAgICAgIFwiIFttaW5GcmFjdGlvbkRpZ2l0c109XCJjb2x1bW4uZm9ybWF0ID8gc2V0TnVtZXJpY01pbkZyYWN0aW9uKGNvbHVtbikgOiAnMCdcIlxuICAgICAgICAgICAgICAgICAgW21heEZyYWN0aW9uRGlnaXRzXT1cImNvbHVtbi5mb3JtYXQgPyBzZXROdW1lcmljTWF4RnJhY3Rpb24oY29sdW1uKSA6ICcwJ1wiIFtzdWZmaXhdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQudHlwZSA9PT0gJ3BlcmNlbnQnICYmIFxuICAgICAgICAgICAgICAgICAgICAgICAgJyUnXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgPC9wLWlucHV0TnVtYmVyPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9ja2VkX2ZpZWxkPjxzcGFuICpuZ0lmPVwiIXJvdy5pc05ld1wiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnc2VsZidcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHJvd1tjb2x1bW4uZmllbGRdIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGF5b3V0LWZpeGVkXCIgcFJlb3JkZXJhYmxlUm93SGFuZGxlPlxuICAgICAgICAgICAgICAgIDxzcGFuIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdzZWxmJ1wiPlxuICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgIHNldE51bWVyaWNGb3JtYXQoY29sdW1uLCByb3cpXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gQnV0dG9uIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2FkZF9idXR0b24nXCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhcm93LmhpZGVncmlkYnRuXCIgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgW2ljb25dPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5pY29uID8gcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5pY29uIDogY29sdW1uLmljb25cIlxuICAgICAgICAgICAgICBbbmFtZV09XCJjb2x1bW4uaGVhZGVyXCIgY2xhc3M9XCJtZXJnZS1idG5cIiBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlUZXh0ID8gcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5VGV4dCA6IGNvbHVtbi52YWx1ZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtZ3JpZC1hZGQtYnRuXCIgKGNsaWNrKT1cIm9uQ2xpY2tCdXR0b24oY29sdW1uLCByb3cpXCI+PC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8IS0tIEdlbmVyYXRlIEZpbGUgQnV0dG9uIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2dlbmVyYXRlX2ZpbGVfYnV0dG9uJ1wiPlxuICAgICAgICAgIDxzZS1nZW5lcmF0ZS1pbXBvcnQtZmlsZVxuICAgICAgICAgICAgW2xhYmVsXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheVRleHQgPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlUZXh0IDogY29sdW1uLnZhbHVlXCJcbiAgICAgICAgICAgIFtpY29uXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA6IGNvbHVtbi5pY29uXCJcbiAgICAgICAgICAgIFtkaWFsb2dEYXRhXT1cImNvbHVtbi5kYXRhXCIgW3NlbGVjdGVkUm93XT1cInJvd1wiPjwvc2UtZ2VuZXJhdGUtaW1wb3J0LWZpbGU+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8IS0tIFNlbmQgZW1haWwgQnV0dG9uIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3NlbmRfZW1haWxfYnV0dG9uJ1wiPlxuICAgICAgICAgIDxzZS1lbWFpbC1nZW5lcmF0ZS1idG5cbiAgICAgICAgICAgIFtsYWJlbF09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlUZXh0ID8gcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5VGV4dCA6IGNvbHVtbi52YWx1ZVwiXG4gICAgICAgICAgICBbaWNvbl09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gOiBjb2x1bW4uaWNvblwiIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZFJvd109XCJyb3dcIj48L3NlLWVtYWlsLWdlbmVyYXRlLWJ0bj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gRGF0ZSBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgPCEtLSBjYWxlbmRhciBzZWxlY3RvciAtLT5cbiAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiXG4gICAgICAgICAgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGE/IG51bGw6IGVkaXRBbGxSb3dzID8gJ2lucHV0JyA6ICdzZWxmJyBcIj5cbiAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCIgcFJlb3JkZXJhYmxlUm93SGFuZGxlPlxuICAgICAgICAgICAgICA8cC1kYXRlcGlja2VyIFttaW5EYXRlXT1cImNvbHVtbi5taW5EYXRlXCIgW21heERhdGVdPVwiY29sdW1uLm1heERhdGVcIlxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHkgJyArIGNvbHVtbi5maWVsZCArIHJvd1tkYXRhS2V5XSA6IGNvbHVtbi5maWVsZCArIHJvd1tkYXRhS2V5XVwiXG4gICAgICAgICAgICAgICAgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIiAob25DbG9zZSk9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwiJ2JvZHknXCIgaG91ckZvcm1hdD1cIjEyXCIgW2RlZmF1bHREYXRlXT1cImRlZmF1bHREYXRlXCJcbiAgICAgICAgICAgICAgICBbc3RlcE1pbnV0ZV09XCJjb2x1bW4ubWludXRlc0ludGVydmFsID8gY29sdW1uLm1pbnV0ZXNJbnRlcnZhbCA6IDFcIiBbc2hvd1RpbWVdPVwiY29sdW1uLnNob3dUaW1lXCJcbiAgICAgICAgICAgICAgICBbdGltZU9ubHldPVwiY29sdW1uLnRpbWVPbmx5XCIgW2RhdGVGb3JtYXRdPVwiY29sdW1uLmZvcm1hdCA/IGNvbHVtbi5mb3JtYXQudHlwZSA6IGNhbGVuZGFyRm9ybWF0XCJcbiAgICAgICAgICAgICAgICAoa2V5dXApPVwiY2FsZW5kYXJJbnB1dFZhbHVlKGNvbHVtbiwgcm93KVwiIChvblNob3cpPVwib25DbGlja0V2ZW50KGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQgPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZCA6IHJvd1tjb2x1bW4uZmllbGRdXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNhbGVuZGFyTW9kZWxDaGFuZ2UoJGV2ZW50LCByb3csIGNvbHVtbilcIiBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiXG4gICAgICAgICAgICAgICAgW3Nob3dCdXR0b25CYXJdPVwiIWNvbHVtbi50aW1lT25seVwiPjwvcC1kYXRlcGlja2VyPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxheW91dC1maXhlZCB3aGl0ZS1zcGFjZS1ub3dyYXAgdGV4dC1jZW50ZXIgYm9yZGVyLXJlYWRvbmx5XCI+XG4gICAgICAgICAgICAgICAge3sgc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdyxjb2x1bW4pIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgIDwvc3Bhbj5cblxuXG4gICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgICAgICAgPHNwYW4gW25nU3dpdGNoXT1cImNvbHVtbi50eXBlXCI+XG4gICAgICAgICAgICA8IS0tIERyb3Bkb3duIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidkcm9wZG93bidcIiBbY2xhc3NdPVwiZHJvcGRvd25JbnB1dCA/ICcnIDogJ291dHB1dC1kcm9wZG93bidcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiIGNvbHVtbi5ob3ZlckRhdGE/IG51bGw6IGVkaXRBbGxSb3dzID8gJy5wLWRyb3Bkb3duLWxhYmVsJyA6ICdzZWxmJ1wiPlxuICAgICAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgPHAtZHJvcGRvd24gKm5nSWY9XCIhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRkZW5cIiBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkrJ19kYXRhJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpKydfZGF0YSddXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogY29sdW1uLmRhdGFcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKSA/IHJvd1tyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGRdXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKSA/IHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldIDogcm93W2NvbHVtbi5maWVsZF0gPSAkZXZlbnRcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiIFtwbGFjZWhvbGRlcl09XCJyb3dbY29sdW1uLmRpc3BsYXlGaWVsZF1cbiAgICAgICAgICAgICAgICAgICAgICA/IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXVxuICAgICAgICAgICAgICAgICAgICAgIDogcm93W2NvbHVtbi5maWVsZF0gPyByb3dbY29sdW1uLmZpZWxkXSA6ICdTZWxlY3QnXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dDbGVhcl09XCJyb3dbY29sdW1uLmZpZWxkXSA/IHRydWUgOiBmYWxzZVwiIFtvcHRpb25MYWJlbF09XCJjb2x1bW4ub3B0aW9uTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0V2ZW50KGNvbHVtbiwgcm93KVwiIFtvcHRpb25WYWx1ZV09XCJjb2x1bW4ub3B0aW9uVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIiAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpXCIgW2FwcGVuZFRvXT1cIidib2R5J1wiIFtmaWx0ZXJdPVwiY29sdW1uLmFsbG93U2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyTWF0Y2hNb2RlPVwic3RhcnRzV2l0aFwiPjwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sYXlvdXQtZml4ZWQgYm9yZGVyLXJlYWRvbmx5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8YSAqbmdJZj1cImNvbHVtbi5kaXNwbGF5QXNMaW5rXCIgY2xhc3M9XCJjdXN0b20tbGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJjb2x1bW4uZGlzYWJsZWQ/Jyc6cm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmh5cGVybGlua1wiIFt0YXJnZXRdPSdjb2x1bW4udGFyZ2V0Jz5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHNldERyb3Bkd29uUmVhZE9ubHlWYWx1ZShyb3csIGNvbHVtbikgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhY29sdW1uLmRpc3BsYXlBc0xpbmtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHNldERyb3Bkd29uUmVhZE9ubHlWYWx1ZShyb3csIGNvbHVtbikgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8IS0tIE11bHRpU2VsZWN0IGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICAgICAgPCEtLSBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpID8gcm93W3Jvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldIDpcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdXCIgLS0+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ211bHRpLXNlbGVjdCdcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnLnAtbXVsdGlzZWxlY3QtbGFiZWwnXCI+XG4gICAgICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgICAgICA8cC1tdWx0aVNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIiB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiXG4gICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfZGF0YSddID8gcm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpICsgJ19kYXRhJ10gOiBjb2x1bW4uZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgIFtvcHRpb25MYWJlbF09XCJjb2x1bW4ub3B0aW9uTGFiZWxcIiBbb3B0aW9uVmFsdWVdPVwiY29sdW1uLm9wdGlvblZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpXCIgKG9uUGFuZWxTaG93KT1cInNob3dPcHRpb24oY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdylcIiBbYXBwZW5kVG9dPVwiJ2JvZHknXCIgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiPlxuICAgICAgICAgICAgICAgICAgPC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXVxuICAgICAgICAgICAgICAgICAgICA/IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXSA6XG4gICAgICAgICAgICAgICAgICAgIHNldE11bHRpU2VsZWN0RGF0YShjb2x1bW4sIHJvd1tjb2x1bW4uZmllbGRdKVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8IS0tIEF1dG9Db21wbGV0ZSBTZWFyY2ggLS0+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ0F1dG9Db21wbGV0ZSdcIj5cbiAgICAgICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxwLWF1dG9Db21wbGV0ZVxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIiBbbmFtZV09XCJjb2x1bW4uaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW3N1Z2dlc3Rpb25zXT1cImNvbHVtbi5kYXRhXCIgKG9uU2VsZWN0KT1cImF1dG9Db21wbGV0ZVNlbGVjdGVkVmFsdWUocm93LCBjb2x1bW4sICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbZmllbGRdPVwiY29sdW1uLm9wdGlvbkxhYmVsID8gY29sdW1uLm9wdGlvbkxhYmVsPy50b0xvd2VyQ2FzZSgpIDogY29sdW1uLmRpc3BsYXlGaWVsZCA/IGNvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCkgOiBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKClcIlxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJnZXRBdXRvQ29tcGxldGVOZ01vZGVsKHJvdywgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUF1dG9Db21wbGV0ZU5nTW9kZWwocm93LCBjb2x1bW4sICRldmVudClcIiBbZHJvcGRvd25dPVwiY29sdW1uLnNob3dPcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KVwiIChjbGljayk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNvbXBsZXRlTWV0aG9kKT1cImF1dG9TZWFyY2goJGV2ZW50LCBjb2x1bW4sIHJvdylcIiAob25CbHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCIgW2FwcGVuZFRvXT1cIidib2R5J1wiIFttdWx0aXBsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25BdXRvQ29tcGxldGVLZXlFbnRlckV2ZW50KCRldmVudCwgY29sdW1uLCByb3cpXCI+XG4gICAgICAgICAgICAgICAgICA8L3AtYXV0b0NvbXBsZXRlPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3dbY29sdW1uLmZpZWxkXSAmJiByb3dbY29sdW1uLmZpZWxkXVswXSAmJiAgcm93W2NvbHVtbi5maWVsZF1bMF1bY29sdW1uLmRpc3BsYXlGaWVsZF1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IHZhbHVlIG9mIHJvd1tjb2x1bW4uZmllbGRdOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgcm93W2NvbHVtbi5maWVsZF0gJiYgcm93W2NvbHVtbi5maWVsZF0ubGVuZ3RoID4gMSA/IHJvd1tjb2x1bW4uZmllbGRdLmxlbmd0aCAtMSA9PT0gaSA/XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWVbY29sdW1uLmRpc3BsYXlGaWVsZF0gOiB2YWx1ZVtjb2x1bW4uZGlzcGxheUZpZWxkXSArICc7JyA6IHZhbHVlW2NvbHVtbi5kaXNwbGF5RmllbGRdIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicm93W2NvbHVtbi5maWVsZF0gJiYgcm93W2NvbHVtbi5maWVsZF1bMF0gJiYgIHJvd1tjb2x1bW4uZmllbGRdWzBdW2NvbHVtbi5maWVsZF0gJiYgIWNvbHVtbi5kaXNwbGF5RmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IHZhbHVlIG9mIHJvd1tjb2x1bW4uZmllbGRdOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgcm93W2NvbHVtbi5maWVsZF0gJiYgcm93W2NvbHVtbi5maWVsZF0ubGVuZ3RoID4gMSA/IHJvd1tjb2x1bW4uZmllbGRdLmxlbmd0aCAtMSA9PT0gaSA/XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWVbY29sdW1uLmZpZWxkXSA6IHZhbHVlW2NvbHVtbi5maWVsZF0gKyAnOycgOiB2YWx1ZVtjb2x1bW4uZmllbGRdIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwhLS0gQWRkIEdlbmVyYXRlIFJlcG9ydCBCdXR0b24gLS0+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3JlcG9ydCdcIj5cbiAgICAgICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgICAgICA8c2UtZ2VuZXJhdGUtcmVwb3J0LWJ0biBbcmVwSW5mb109XCJzZXRSZXBvcnROYW1lKGNvbHVtbiwgcm93KVwiIFtsYWJlbF09XCJjb2x1bW4ubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBbcGFyYW1zXT1cInNldFJlcG9ydFBhcmFtcyhjb2x1bW4sIHJvdylcIiBbY2xhc3NdPVwiY29sdW1uLmNsYXNzXCIgW3Nob3dEaWFsb2ddPVwiY29sdW1uLnNob3dEaWFsb2dcIlxuICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJjb2x1bW4uaWNvblwiIFtyZXBvcnRUeXBlXT1cImNvbHVtbi5yZXBvcnRUeXBlXCI+PC9zZS1nZW5lcmF0ZS1yZXBvcnQtYnRuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgICAgICA8c2UtZ2VuZXJhdGUtcmVwb3J0LWJ0biBbcmVwSW5mb109XCJzZXRSZXBvcnROYW1lKGNvbHVtbiwgcm93KVwiIFtsYWJlbF09XCJjb2x1bW4ubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBbcGFyYW1zXT1cInNldFJlcG9ydFBhcmFtcyhjb2x1bW4sIHJvdylcIiBbaWNvbl09XCJjb2x1bW4uaWNvblwiIFtjbGFzc109XCJjb2x1bW4uY2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd0RpYWxvZ109XCJjb2x1bW4uc2hvd0RpYWxvZ1wiIFtyZXBvcnRUeXBlXT1cImNvbHVtbi5yZXBvcnRUeXBlXCI+PC9zZS1nZW5lcmF0ZS1yZXBvcnQtYnRuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0IFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdpbnB1dCdcIj5cbiAgICAgICAgICAgICAgPCEtLSBJbnB1dCBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIFtzdHlsZV09XCJjb2x1bW4uc3R5bGUgPyBjb2x1bW4uc3R5bGUgOiAnZGlzcGxheTpmbGV4J1wiPlxuXG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSAqbmdJZj1cImNvbHVtbi5pc1RleHRhcmVhICYmIChlZGl0QWxsUm93cyB8fCBlZGl0aW5nUm93S2V5c1tyb3dbZGF0YUtleV1dKVwiXG4gICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmZpZWxkXVwiIFthdHRyLmRhdGEtY2VsbF09XCJjb2x1bW4uZmllbGQgKyAnLScgKyByb3dbZGF0YUtleV1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHJpbWUtdGV4dGFyZWFcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicmVzaXplOiBub25lOyBtaW4td2lkdGg6IDIwMHB4OyBtaW4taGVpZ2h0OiA0MHB4OyB3b3JkLWJyZWFrOiBicmVhay13b3JkOyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyBvdmVyZmxvdzogaGlkZGVuO1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIiAoYmx1cik9XCJvblRleHRhcmVhQmx1cihjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9uVGV4dGFyZWFFbnRlcigkZXZlbnQsIGNvbHVtbiwgcm93KVwiIGF1dG9mb2N1cz48L3RleHRhcmVhPlxuXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNvbHVtbi5pc1RleHRhcmVhICYmIChlZGl0QWxsUm93cyB8fCBlZGl0aW5nUm93S2V5c1tyb3dbZGF0YUtleV1dKSAmJiAgY29sdW1uLmZpZWxkICE9PSBkYXRhS2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LnRleHRUeXBlP3Jvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8udGV4dFR5cGU6Y29sdW1uLnRleHRUeXBlP2NvbHVtbi50ZXh0VHlwZTondGV4dCdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJ3ByaW1lLWlucHV0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIiBbbmdNb2RlbF09XCJzZXRJbnB1dE5nTW9kZWwocm93LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbklucHV0Q2hhbmdlKCRldmVudCwgcm93LCBjb2x1bW4pXCIgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIiAoY2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0J1dHRvbihjb2x1bW4sIHJvdylcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiEoZWRpdEFsbFJvd3MgfHwgZWRpdGluZ1Jvd0tleXNbcm93W2RhdGFLZXldXSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyByb3dbY29sdW1uLmZpZWxkXSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJmbG9hdDpyaWdodFwiICpuZ0lmPVwiY29sdW1uLmZvcm1hdD09J3Bhc3N3b3JkJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/KHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXS50ZXh0VHlwZT09J3Bhc3N3b3JkJz8ncGkgcGktZXllJzoncGkgcGktZXllLXNsYXNoJyk6Y29sdW1uLnRleHRUeXBlPT0ncGFzc3dvcmQnPydwaSBwaS1leWUnOidwaSBwaS1leWUtc2xhc2gnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VQYXNzd29yZFR5cGUoY29sdW1uLCByb3cpXCIgW3RpdGxlXT1cImNvbHVtbi5oZWFkZXJcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9ja2VkX2ZpZWxkPjxzcGFuICpuZ0lmPVwiIXJvdy5pc05ld1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgcm93W2NvbHVtbi5maWVsZF0gfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGF5b3V0LWZpeGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFtzdHlsZV09XCJjb2x1bW4uc3R5bGUgPyBjb2x1bW4uc3R5bGUgOiAnZGlzcGxheTpmbGV4J1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdzZWxmJyBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8udGV4dFR5cGUgPyhyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LnRleHRUeXBlPT0ncGFzc3dvcmQnICA/J3Bhc3N3b3JkJzonJykgOmNvbHVtbi50ZXh0VHlwZT09J3Bhc3N3b3JkJz8ncGFzc3dvcmQnOicnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBzZXRUZXh0Qm94UmVhZE9ubHlWYWx1ZShyb3csIGNvbHVtbikgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJmbG9hdDpyaWdodFwiICpuZ0lmPVwiY29sdW1uLmZvcm1hdD09J3Bhc3N3b3JkJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8ocm93W2NvbHVtbi5maWVsZCsnX29iaiddLnRleHRUeXBlPT0ncGFzc3dvcmQnPydwaSBwaS1leWUnOidwaSBwaS1leWUtc2xhc2gnKTpjb2x1bW4udGV4dFR5cGU9PSdwYXNzd29yZCc/J3BpIHBpLWV5ZSc6J3BpIHBpLWV5ZS1zbGFzaCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiY29sdW1uLmhlYWRlclwiIChjbGljayk9XCJjaGFuZ2VQYXNzd29yZFR5cGUoY29sdW1uLCByb3cpXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDwhLS0gR3JpZCBSb3dzIERhdGEgQmluZGluZ3MgRW5kIC0tPlxuXG4gICAgICAgIDwhLS0gTW9yZSBhY3Rpb25zIGNvbHVtbiAoZWxsaXBzaXMpIC0tPlxuICAgICAgICA8dGQgKm5nSWY9XCJoYXNNb3JlSXRlbXMocm93KVwiIGNsYXNzPVwiZm9yLW1vcmUtYWN0aW9uc1wiPlxuICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLWVsbGlwc2lzLXZcIiBjbGFzcz1cInAtYnV0dG9uLXRleHRcIiAoY2xpY2spPVwic2hvd01vcmUoJGV2ZW50LCByb3cpXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJNb3JlIGFjdGlvbnNcIj48L2J1dHRvbj5cbiAgICAgICAgPC90ZD5cblxuICAgICAgICA8IS0tIEFjdGlvbiBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgPCEtLSA8dGQgKm5nSWY9XCIhc2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiBjb2x1bW5zPy5sZW5ndGggPiAwICYmIGNvbHVtbkFjdGlvbnMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgY2xhc3M9XCJmb3ItYnV0dG9uc1wiXG4gICAgICAgICAgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJhY3Rpb24tYnRuXCIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb2x1bW5BY3Rpb25zXCI+XG4gICAgICAgICAgICA8aSBbdGl0bGVdPVwiYWN0aW9uLnRvb2x0aXBcIiBbY2xhc3NdPVwiYWN0aW9uLmljb25cIiAoY2xpY2spPVwiaGFuZGxlQWN0aW9uQ2xpY2soJGV2ZW50LCBhY3Rpb24sIHJvdylcIj48L2k+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RkPiAtLT5cbiAgICAgICAgPHRkICpuZ0lmPVwiIXNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgY29sdW1ucz8ubGVuZ3RoID4gMCAmJiBjb2x1bW5BY3Rpb25zLmxlbmd0aCA+IDBcIiBjbGFzcz1cImZvci1idXR0b25zXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bidcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29sdW1uQWN0aW9uc1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhY3Rpb24tYnRuXCIgKm5nSWY9XCJhY3Rpb24udmlzaWJsZSA/IGFjdGlvbi52aXNpYmxlKHJvdykgOiB0cnVlXCI+XG4gICAgICAgICAgICAgIDxpIFt0aXRsZV09XCJhY3Rpb24udG9vbHRpcFwiIFtjbGFzc109XCJhY3Rpb24uaWNvblwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFjdGlvbi1idG4tZGlzYWJsZWRdPVwiYWN0aW9uLmRpc2FibGVkID8gYWN0aW9uLmRpc2FibGVkKHJvdykgOiBmYWxzZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIihhY3Rpb24uZGlzYWJsZWQgJiYgYWN0aW9uLmRpc2FibGVkKHJvdykpID8gbnVsbCA6IGhhbmRsZUFjdGlvbkNsaWNrKCRldmVudCwgYWN0aW9uLCByb3cpXCI+PC9pPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGRcbiAgICAgICAgICAqbmdJZj1cIiFzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmIGNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgdXNlSW5saW5lQ1JVRCAmJiAoZGVsZXRlUm93UGVybWlzc2lvbiB8fCBlZGl0Um93UGVybWlzc2lvbilcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiIGNsYXNzPVwiZm9yLWJ1dHRvbnNcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImRpc2FibGVkU2F2ZUJ0biA/ICdoaWRlLWNsZWFyLWZpbHRlci1idXR0b24nIDogJydcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz0nc2V0QWN0aW9uQ29sdW1uV2lkdGgnPlxuICAgICAgICAgICAgPHNlLWdyaWQtcm93LWFjdGlvbnMgW2VkaXRpbmddPVwiZWRpdGluZ1wiIFtlZGl0Um93UGVybWlzc2lvbl09XCJlZGl0Um93UGVybWlzc2lvblwiXG4gICAgICAgICAgICAgIFtkZWxldGVSb3dQZXJtaXNzaW9uXT1cImRlbGV0ZVJvd1Blcm1pc3Npb25cIiBbaGlkZURlbGV0ZUJ0bl09XCJoaWRlRGVsZXRlQnRuXCIgW2hpZGVFZGl0QnRuXT1cImhpZGVFZGl0QnRuXCJcbiAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIiAob25Sb3dFZGl0SW5pdEJ0bik9XCJvblJvd0VkaXRJbml0KCRldmVudClcIiAoZGVsZXRlUmVjb3JkQnRuKT1cImRlbGV0ZVJlY29yZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKG9uUm93RWRpdFNhdmVCdG4pPVwib25Sb3dFZGl0U2F2ZSgkZXZlbnQpXCIgKG9uUm93RWRpdENhbmNlbEJ0bik9XCJvblJvd0VkaXRDYW5jZWwoJGV2ZW50LCByaSlcIlxuICAgICAgICAgICAgICBbZWRpdEFsbFJvd3NdPVwiZWRpdEFsbFJvd3NcIj5cbiAgICAgICAgICAgIDwvc2UtZ3JpZC1yb3ctYWN0aW9ucz5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8IS0tIEZvb3RlciBjb2x1bW5zIG9uIEdyaWQgLS0+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZvb3RlclwiPlxuICAgICAgPHRyICpuZ0lmPVwiYWdncmVnYXRlRm9vdGVyXCI+XG4gICAgICAgIDx0ZFxuICAgICAgICAgICpuZ0lmPVwic2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiAoY29sdW1uQWN0aW9ucy5sZW5ndGggPiAwIHx8ICh1c2VJbmxpbmVDUlVEICYmIChkZWxldGVSb3dQZXJtaXNzaW9uIHx8IGVkaXRSb3dQZXJtaXNzaW9uKSkpXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bidcIj48L3RkPlxuICAgICAgICA8dGQgKm5nSWY9XCJhbGxvd1NlbGVjdGlvblwiIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiPjwvdGQ+XG4gICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgb3V0ZXJDb2x1bW4gb2Ygc2VsZWN0ZWRDb2x1bW5zXCIgY2xhc3M9XCJncmlkLWNvbXBvbmVudC1vdXRlci1jb2x1bW5cIiBbc3R5bGVdPVwib3V0ZXJDb2x1bW4uc3R5bGVcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpbm5lckNvbHVtbiBvZiBzZWxlY3RlZENvbHVtbnNcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGFnZ3Igb2YgaW5uZXJDb2x1bW4/LmFnZ3JlZ2F0ZVwiPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWdnci5hZ2dyVmFsdWU/Lmxlbmd0aCAmJiAoKCFhZ2dyLmRpc3BsYXlGaWVsZCAmJiBpbm5lckNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gb3V0ZXJDb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICAgICAgICAgICAgICBhZ2dyLmRpc3BsYXlGaWVsZCAmJiBhZ2dyLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gb3V0ZXJDb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkpXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cImFnZ3IuYWdnclZhbHVlXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZFxuICAgICAgICAgICpuZ0lmPVwiIXNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgY29sdW1ucz8ubGVuZ3RoID4gMCAmJiB1c2VJbmxpbmVDUlVEICYmIChkZWxldGVSb3dQZXJtaXNzaW9uIHx8IGVkaXRSb3dQZXJtaXNzaW9uKVwiXG4gICAgICAgICAgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJkaXNhYmxlZFNhdmVCdG4gPyAnaGlkZS1jbGVhci1maWx0ZXItYnV0dG9uJyA6ICcnXCI+PC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDwhLS0gRm9vdGVyIGZvciBFbXB0eSBNZXNzYWdlIGNvbHVtbnMgb24gR3JpZCAtLT5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XG4gICAgICA8dHIgY2xhc3M9XCJncmlkLWNvbXBvbmVudCBuby1yZWNvcmRzLWZvdW5kXCI+XG4gICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cInNlbGVjdGVkQ29sdW1ucz8ubGVuZ3RoICsgMVwiPnt7dG90YWxSZWNvcmRzPT0wPyAnTm8gcmVjb3JkcyBmb3VuZCc6Jyd9fTwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvcC10YWJsZT5cbiAgPHAtb3ZlcmxheVBhbmVsIFtzdHlsZV09XCJvdmVybGF5UGFuZWxTdHlsZVwiICNvdmVybGF5UGFuZWw+XG4gICAgPG5nLWNvbnRhaW5lciAjdmlld0NvbnRhaW5lclJlZj48L25nLWNvbnRhaW5lcj5cbiAgPC9wLW92ZXJsYXlQYW5lbD5cbiAgPHAtbWVudSAjbW9yZU1lbnUgW3BvcHVwXT1cInRydWVcIiBbbW9kZWxdPVwiY3VycmVudE1vcmVNZW51XCIgYXBwZW5kVG89XCJib2R5XCIgc3R5bGVDbGFzcz1cImdyaWQtbW9yZS1tZW51XCI+PC9wLW1lbnU+XG48L2Rpdj5cbiJdfQ==
4070
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2dyaWQvZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2dyaWQvZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUdaLFFBQVEsRUFFUixZQUFZLEVBR1osU0FBUyxFQUNULFlBQVksRUFFWixnQkFBZ0IsR0FJakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBUXJFLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUxQixPQUFPLEVBU0wsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixrQkFBa0IsRUFFbEIsY0FBYyxFQUNkLGVBQWUsRUFFZixjQUFjLEVBQ2QscUJBQXFCLEVBRXJCLFVBQVUsRUFDVixnQkFBZ0IsRUFFaEIsU0FBUyxFQUNULGNBQWMsR0FDZixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQWUsTUFBTSxpQ0FBaUMsQ0FBQztBQUcvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLHdDQUF3QyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFJNU8sT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1B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LEdBQUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtZQUN0TCxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7WUFDbkwsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1lBQ3RMLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtZQUMvTCxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcs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LE1BQU07Z0JBR0csYUFBYTtzQkFBdEIsTUFBTTtnQkFHRyxZQUFZO3NCQUFyQixNQUFNO2dCQUdHLGNBQWM7c0JBQXZCLE1BQU07Z0JBR0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUdHLGFBQWE7c0JBQXRCLE1BQU07Z0JBR0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUlQLHVCQUF1QjtzQkFEdEIsTUFBTTtnQkFNUCxZQUFZO3NCQURYLE1BQU07Z0JBSUcsV0FBVztzQkFBcEIsTUFBTTtnQkFFRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBR0csZUFBZTtzQkFBeEIsTUFBTTtnQkFHRyxXQUFXO3NCQUFwQixNQUFNO2dCQUdHLFFBQVE7c0JBQWpCLE1BQU07Z0JBR0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUdFLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFFSSxhQUFhO3NCQUF0QixNQUFNO2dCQUdHLFlBQVk7c0JBQXJCLE1BQU07Z0JBRUUsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBdUpOLGVBQWU7c0JBRmQsWUFBWTt1QkFBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3NCQUMvQixZQUFZO3VCQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFXVyxPQUFPO3NCQUFoRCxZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLGVBQWUsQ0FBQztnQkFReEMsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLHFCQUFxQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIE9uQ2hhbmdlcyxcbiAgT3B0aW9uYWwsXG4gIEVsZW1lbnRSZWYsXG4gIFZpZXdDaGlsZHJlbixcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIEhvc3RMaXN0ZW5lcixcbiAgT25EZXN0cm95LFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBOZ1pvbmUsXG4gIEFmdGVyVmlld0luaXQsXG4gIFJlbmRlcmVyMixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBnZXRDaGFuZ2VkUm93cyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdGllcy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge1xuICBEeW5hbWljRGlhbG9nUmVmLFxuICBEeW5hbWljRGlhbG9nQ29uZmlnLFxuICBEaWFsb2dTZXJ2aWNlLFxuICBEeW5hbWljRGlhbG9nQ29tcG9uZW50LFxufSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuaW1wb3J0IGpzUERGIGZyb20gJ2pzcGRmJztcbmltcG9ydCB7IEdyaWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZ3JpZC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIElHcmlkQ29sdW1uLFxuICBJR3JpZFNvcnQsXG4gIElHcmlkU2VydmVyU2lkZUV2ZW50LFxuICBJR3JpZFBhZ2luYXRpb25FdmVudCxcbiAgSUdsb2JhbEZpbHRlcixcbiAgSUdyaWRGaWx0ZXIsXG4gIElHcmlkQ29sdW1uQWN0aW9uLFxuICBJR3JpZFJvd0FjdGlvbixcbiAgRUdyaWRTZWxlY3Rpb25UeXBlLFxuICBFR3JpZENvbHVtblR5cGUsXG4gIEVHcmlkU29ydERpcmVjdGlvbixcbiAgSUdyaWREYXRhRXhwb3J0LFxuICBFR3JpZEFnZ3JlZ2F0ZSxcbiAgRUdyaWRGb3JtYXRUeXBlLFxuICBJR3JpZEZpbHRlckluZm8sXG4gIEVHcmlkVmFsaWRhdG9yLFxuICBHcmlkRmlsdGVyQ29udHJvbFR5cGUsXG4gIHVzZXJTZXR0aW5nLFxuICBFR3JpZEV4Y2VsLFxuICBFR3JpZFJvd1Byb3BOYW1lLFxuICBJR3JpZFJlcG9ydEJ0bixcbiAgRUdyaWRsaW5rLFxuICBFR3JpZEZvcm1hdHRlcixcbn0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dyaWQubW9kZWwnO1xuaW1wb3J0IHsgRVBlcm1pc3Npb25UeXBlLCBJUGVybWlzc2lvbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy91c2VyLWluZm8ubW9kZWwnO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aGVudGljYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hbGVydC5zZXJ2aWNlJztcbmltcG9ydCB7IElmcmFtZUNvbXBvbmVudCB9IGZyb20gJy4uL2lmcmFtZS9pZnJhbWUuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVQaXBlLCBEZWNpbWFsUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBhdXRvU2V0TG9va3VwRGF0YSwgY2hhbmdlQ29sdW1uc1N0YXRlLCBjdXJyZW50VXJsLCBkcmFnZ2FibGVEaWFsb2csIG9iakNvbnZlcnRUb0xvd2VyLCBzZXREaWFsb2dSZXNwb25zZSwgc2V0TWludXRlc0ludGVydmFsLCBzZXRUaW1lSW5EYXRlLCBvbkdsb2JhbEZpbHRlckNvbnRyb2xSaWdodEJ0blN0YXRlQ2hhbmdlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0aWVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFibGUgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcbmltcG9ydCB7IE1lbnUgfSBmcm9tICdwcmltZW5nL21lbnUnO1xuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBFRm9ybWF0VHlwZSwgRU1hdGNoTW9kZSwgRU9wZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Zvcm0ubW9kZWwnO1xuaW1wb3J0IHsgUGFnZUxvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wYWdlLWxvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgaW50ZXJ2YWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBIeXBlcmxpbmtTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaHlwZXJsaW5rLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHsgZGVsYXksIHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFJlcXVlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vbGliL3NlcnZpY2VzL3JlcXVlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBSZXF1ZXN0RHRvIH0gZnJvbSAncHJvamVjdHMvc2UtdWktdG9vbGtpdC9zcmMvbGliL21vZGVscy9yZXF1ZXN0Lm1vZGVsJztcbmltcG9ydCB7IFN5c3RlbUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zeXN0ZW0tY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgRW1haWxGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi9lbWFpbC9lbWFpbC1maWx0ZXIvZW1haWwtZmlsdGVyLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NlLWdyaWQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dyaWQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgR3JpZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICBAVmlld0NoaWxkKCd2aWV3Q29udGFpbmVyUmVmJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgcHVibGljIHBhbmVsT3ZlcmxheVZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWZcblxuICBAVmlld0NoaWxkcmVuKCdncmlkUm93JykgZ3JpZFJvdzogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBAT3V0cHV0KCkgaW5saW5lUm93Q2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBncmlkU2V0dGluZzogYW55O1xuICBzZWFyY2hidG5JZCA9ICdzZWFyY2hHbG9iYWxGaWx0ZXJCdG4nO1xuICBjdXJyZW50UGFnZTogbnVtYmVyID0gMDtcbiAgUGFnZUNoYW5nZTogYm9vbGVhbjtcbiAgdGVtcFNhdmVkUm93OiBhbnlbXSA9IFtdO1xuICBzb3J0RGF0YTogSUdyaWRTb3J0ID0ge307XG4gIEBJbnB1dCgpIHNldCBhY3RpdmVUZXN0TW9kZSh2YWw6IGFueSkge1xuICAgIGlmICh2YWwgPT09IHRydWUpIHtcbiAgICAgIGRlYnVnZ2VyO1xuICAgIH1cbiAgfVxuICBzZXJ2ZXJGaWx0ZXJzOiBJR3JpZFNlcnZlclNpZGVFdmVudCA9IHt9O1xuICByb3dzRGF0YTogYW55W10gPSBbXTtcbiAgb3JpZ2luYWxSb3dzOiBhbnlbXSA9IFtdO1xuICBncmlkSWQ6IHN0cmluZyA9ICcnO1xuICByb3dzRGF0YUNvcHk6IGFueVtdID0gW107XG4gIG51bWVyaWNWYWx1ZTogYW55ID0ge31cbiAgcm9sZXM6IHN0cmluZ1tdID0gW107XG4gIGlzQ29sdW1uSGlkZGVuOiBib29sZWFuID0gZmFsc2U7XG4gIHJvd0NsaWNrRGF0YTogSUdyaWRDb2x1bW47XG4gIGNvbXBvbmVudFRhYmxlUmVmOiBhbnk7XG4gIGxvb2t1cEZpbHRlck9iajogYW55O1xuICBjaGVja2xpc3Q6IGFueVtdID0gW11cbiAgbG9va3VwQmx1cjogYm9vbGVhbiA9IHRydWU7XG4gIGdsb2JhbEZpbHRlcnNBcnJheTogYW55W10gPSBbXTtcbiAgY2hlY2tBY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2FsZW5kYXJQcmV2aW91c1ZhbHVlOiBzdHJpbmcgPSAnJztcbiAgZ3JpZEZpbHRlck9iajogSUdyaWRGaWx0ZXJJbmZvO1xuICBkZWZhdWx0RGF0ZTogYW55O1xuICBvdmVybGF5UGFuZWxTdHlsZToge307XG4gIC8vIEhvbGRzIHRoZSBpdGVtcyB0byBkaXNwbGF5IGluIHRoZSBwZXItcm93IFwiTW9yZVwiIG1lbnUgKFByaW1lTkcgTWVudSBtb2RlbClcbiAgY3VycmVudE1vcmVNZW51OiBNZW51SXRlbVtdID0gW107XG4gIGdyaWRmaWx0ZXI6IGFueTtcbiAgZHJvcERvd25GaWx0ZXI6IGFueSA9IHt9O1xuICBkcm9wZG93bklucHV0OiBib29sZWFuID0gZmFsc2U7XG4gIHNhdmVBbGxSZWNvcmQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZ2VuZXJhdGVSb3dzRGF0YUNvcHk6IGJvb2xlYW4gPSB0cnVlO1xuICBlZGl0QWxsUmVjb3JkOiBib29sZWFuID0gZmFsc2U7XG4gIGNhbmNlbEFsbFJlY29yZHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYWRkTmV3Um93Q2hlY2s6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaW5FZGl0TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICBzYXZlUmVjb3JkQXJyYXk6IGFueVtdID0gW107XG4gIGRpc2FibGVkU2F2ZUJ0bjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNTZWxlY3RlZEFsbFJvd3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQ2hlY2tlZDogYm9vbGVhbiA9IHRydWVcbiAgdW5DaGVja2VkOiBib29sZWFuID0gZmFsc2VcbiAgZWRpdE1vZGVDaGVja2VkOiBib29sZWFuID0gdHJ1ZTtcbiAgZWRpdE1vZGV1bkNrZWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2FsZW5kYXJGb3JtYXQ6IHN0cmluZyA9IFwibW0vZGQveXlcIlxuICBzZXREcm9wZG93bkZpbHRlcjogYm9vbGVhbiA9IHRydWU7XG4gIHJlbG9hZFBhZ2U6IFN1YnNjcmlwdGlvbjtcbiAgc2V0RHJvcGRvd25kYXRhVmFsdWU6IGJvb2xlYW4gPSB0cnVlO1xuICBzaG93RmlsdGVyYnRuOiBib29sZWFuID0gZmFsc2U7XG5cbiAgdG9vZ2xlU29ydE9yZGVyOiBib29sZWFuID0gZmFsc2U7XG4gIGRpYWxvZ1JlZjogYW55XG4gIHVzZXJTZXR0aW5nOiB1c2VyU2V0dGluZyA9IHt9O1xuICByb3dVcGRhdGVDaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNTZXJ2ZXJTaWRlRXZlbnRJbml0YWxUcmlnZ2VyZWQgPSBuZXcgU3ViamVjdCgpXG5cbiAgLy9hcHBseSBBZGQvRGVsZXRlL0VkaXQgcHJvcCBmb3IgdGhlIGdyaWQgcGVybWlzc2lvblxuICBhZGRSb3dQZXJtaXNzaW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgZGVsZXRlUm93UGVybWlzc2lvbjogYm9vbGVhbiA9IHRydWU7XG4gIGVkaXRSb3dQZXJtaXNzaW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgZWRpdGluZ0NlbGw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIC8vIEFwcGx5IHByb3Agc2V0QWdncmVnYXRlRm9vdGVyIG9uIEZvb3RlciBvZiB0aGUgVGFibGUgZm9yIGFnZ3JlZ2F0ZS5cbiAgc2V0QWdncmVnYXRlRm9vdGVyOiBzdHJpbmcgPSAnJztcblxuICBwcml2YXRlIGNsaWNrVGltZW91dDogYm9vbGVhbiA9IGZhbHNlO1xuICAvLyBCb29sZWFuIHByb3AgdG8gYWxsb3cgSGlkZSBBZ2dyZWdhdGUgRm9vdGVyIFdoZW4gQWdncmVnYXRlIG5vdCBBcHBseSBvbiBUYWJsZS5cbiAgYWdncmVnYXRlRm9vdGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gTWFpbnRhaW5zIHByZXZpb3VzIHN0YXRlIG9mIHJvd3MgYmVpbmcgZWRpdGVkXG4gIGVkaXRSb3dzUmVjb3JkczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAvLyBNYWludGFpbnMgcmVjb3JkIG9mIHJvd3MgYmVpbmcgZWRpdGVkXG4gIGVkaXRpbmdSb3dLZXlzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gIGN1cnJlbnRVcmw6IHN0cmluZyA9IGN1cnJlbnRVcmwoKTtcbiAgb25DbGlja0V2ZW50VHJpZ2dlcmVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcmVtYWluaW5nUm93c0RhdGE6IGFueVtdID0gW107XG5cbiAgQFZpZXdDaGlsZCgnZHQnKSB0YWJsZTogVGFibGU7XG4gIEBWaWV3Q2hpbGQoJ21vcmVNZW51JykgbW9yZU1lbnU6IE1lbnU7XG5cbiAgLy8gU2VsZWN0cyBpdGVtcyBpbiB0aGUgZ3JpZCBiYXNlZCBvbiBwYXNzZWQgb24gZGF0YVxuICBASW5wdXQoKSBzZWxlY3RlZFJvd3M6IGFueSA9IFtdO1xuXG4gIEBJbnB1dCgpIHNldEdyaWRSZWZyZXNoVGltZTogbnVtYmVyID0gMDtcblxuICBASW5wdXQoKSBhZGREYXRhS2V5VmFsdWUgPSBmYWxzZTtcblxuICBASW5wdXQoKSBzdG9wRGlhbG9nQ2xvc2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgYXV0b0NoZWNrTmV3Um93OiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBnbG9iYWxEYXRhOiBJR3JpZEZpbHRlcltdID0gW107XG5cbiAgc29ydERpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgc29ydEljb25IaWRkZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgZWRpdEFsbHJvd3NBdE9uZVRpbWU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBzaG93UmVmcmVzaEJ0bjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBoaWRlUmVmcmVzaEJ0bjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLy8gU3RvcmVzIHNlbGVjdGVkIGNvbHVtbnNcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRDb2x1bW5zOiBJR3JpZENvbHVtbltdID0gW107XG4gIHNlbGVjdGVkVG9nZ2xlQ29sdW1uczogSUdyaWRDb2x1bW5bXSA9IFtdO1xuXG4gIHZpc2libGVDb2x1bW5zOiBJR3JpZENvbHVtbltdID0gW107XG4gIC8vIEJvb2xlYW4gcHJvcCB0byBhbGxvdyBob3Jpem9udGFsIFNjcm9sbCBvbiBUYWJsZS5cbiAgQElucHV0KCkgaG9yaXpvbnRhbFNjcm9sbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBoaWRlIHRoZSBkZWxldGUgcm93IGJ1dHRvbi5cbiAgQElucHV0KCkgaGlkZURlbGV0ZUJ0biA9IGZhbHNlO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBoaWRlIHRoZSBlZGl0IHJvdyBidXR0b24uXG4gIEBJbnB1dCgpIGhpZGVFZGl0QnRuID0gZmFsc2U7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGhpZGUgdGhlIGFkZCByb3cgYnV0dG9uLlxuICBASW5wdXQoKSBoaWRlQWRkQnRuID0gZmFsc2U7XG5cbiAgLy8gUHJvcCB0byBoYW5kbGUgbG9hZGVyIG9mIGdyaWRcbiAgQElucHV0KCkgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcblxuICAvL3RoaXMgcHJvcGVydHkgaXMgdXNlZCB0byBoYW5kbGUgc2VydmVyIHNpZGUgZXZlbnQgYnkgZGVmYXVsdCBpdCBpcyB0cnVlIHdoZW4gaXQgZmFsc2Ugc2VydmVyIHNpZGUgZXZlbnQgd2lsbCBub3QgYmUgY2FsbGVkXG4gIEBJbnB1dCgpIGF1dG9Mb2FkRGF0YTogYm9vbGVhbiA9IHRydWU7XG5cblxuICAvL3RhYmxlIHJvdyBzdHlsZXNcbiAgQElucHV0KCkgcm93U3R5bGU6IHN0cmluZztcblxuICAvLyBCb29sZWFuIHByb3AgdG8gY2hlY2sgd2hlcmUgc2VsZWN0ZWQgaXMgYWxsb3dlZCBvciBub3QuXG4gIEBJbnB1dCgpIGFsbG93U2VsZWN0aW9uID0gZmFsc2U7XG5cbiAgLy8gU2V0IGNvbHVtbiB3aWR0aCBvZiBzZWxlY3RlZCByb3cuXG4gIEBJbnB1dCgpIHNlbGVjdGlvbkNvbHVtbldpZHRoOiBzdHJpbmcgPSAnODBweCc7XG5cbiAgLy8gc2V0IHNlbGVjdGlvbiBjaGVja0JveCBoZWFkZXJcbiAgQElucHV0KCkgYWxsb3dTZWxlY3Rpb25IZWFkZXI6IHN0cmluZyA9ICcnO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBoaWRlIHRoZSBzYXZlIGJ1dHRvbiBvbiB0b3Agb2YgZ3JpZC5cbiAgQElucHV0KCkgaGlkZUdyaWRTYXZlQnV0dG9uID0gZmFsc2U7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGhpZGUgdGhlIHNhdmUgYnV0dG9uIG9uIHRvcCBvZiBncmlkLlxuICBASW5wdXQoKSBoaWRlR3JpZENhbmNlbEJ1dHRvbiA9IGZhbHNlO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBhbGxvdyBleHBvcnQgdG8gcGRmLlxuICBASW5wdXQoKSBhbGxvd0V4cG9ydFRvUGRmID0gZmFsc2U7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IGV4cG9ydCB0byBleGNlbC5cbiAgQElucHV0KCkgYWxsb3dFeHBvcnRUb0V4Y2VsID0gZmFsc2U7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIHNldCB0aGUgYWN0aW9uIGNvbHVtbiBhcyBmaXJzdCBjb2x1bW4uXG4gIEBJbnB1dCgpIHNldEFjdGlvbkNvbHVtbkFzRmlyc3QgPSBmYWxzZTtcblxuICAvLyBJZiB0cnVlLCBlbmFibGVzIG9wdGlvbnMgdG8gcGVyZm9ybSBDUlVEIHVzaW5nIGlubGluZSByb3cgZnVuY3Rpb25hbGl0eVxuICBASW5wdXQoKSB1c2VJbmxpbmVDUlVEID0gZmFsc2U7XG4gIC8vIGlmIHRydWUsIGl0IHdvbnQgYWRkIGEgbmV3IHJvdyB3aGVuIGNsaWNrIGFkZFxuICBASW5wdXQoKSBwcmV2ZW50TmV3Um93ID0gZmFsc2U7XG5cbiAgLy8gQXJyYXkgb2Ygcm93IGFjdGlvbnNcbiAgQElucHV0KCkgcm93QWN0aW9uczogSUdyaWRSb3dBY3Rpb25bXSA9IFtdO1xuXG4gIC8vIFNldHMgc2VsZWN0aW9uIHR5cGUgaS5lOiBzaW5nbGUvbXVsdGlwbGUgc2VsZWN0aW9uXG4gIEBJbnB1dCgpIHNlbGVjdGlvblR5cGU6IEVHcmlkU2VsZWN0aW9uVHlwZSA9IEVHcmlkU2VsZWN0aW9uVHlwZS5TSU5HTEU7XG5cbiAgLy8gVW5pcXVlIGtleSByZXF1aXJlcyBmb3IgYnVpbHQtaW4gcm93IHNlbGVjdGlvbiBvZiBwcmltZU5nIGdyaWRcbiAgQElucHV0KCkgZGF0YUtleTogc3RyaW5nID0gJ3RlbXBfaWQnO1xuXG4gIC8vIEZsYWcgZm9yIGNsZWFyIGZpbHRlciB2YWx1ZXMgYnV0dG9uXG4gIEBJbnB1dCgpIGNsZWFyR3JpZEZpbHRlciA9IHRydWU7XG5cbiAgLy8gRmxhZyBmb3Igc2VhcmNoIGZpbHRlciB2YWx1ZXMgYnV0dG9uXG4gIEBJbnB1dCgpIHNlYXJjaEdyaWRGaWx0ZXIgPSB0cnVlO1xuXG4gIC8vIEZsYWcgaW4gY2FzZSB0YWJsZSBpcyBzY3JvbGxhYmxlXG4gIEBJbnB1dCgpIHNjcm9sbGFibGUgPSB0cnVlO1xuXG4gIC8vIFNldHMgc2Nyb2xsIGhlaWdodCBmb3IgdGhlIHRhYmxlXG4gIEBJbnB1dCgpIHNjcm9sbEhlaWdodCA9ICc4MHZoJztcblxuICAvLyBUYWJsZSBzdHlsZVxuICBASW5wdXQoKSB0YWJsZVN0eWxlID0gJyc7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IHRvIHdyYXAgb3IgdW5XcmFwIHRoZSBncmlkLlxuICBASW5wdXQoKSB3b3JkV3JhcDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGVsbGlwc2lzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgbmV3R3JpZFJvdzogYW55ID0ge307XG5cbiAgQElucHV0KCkgZmlsdGVyaW5nID0gdHJ1ZTtcblxuICBASW5wdXQoKSByZXBvcnRCdXR0b25zOiBhbnlbXSA9IFtdO1xuXG4gIEBJbnB1dCgpIHJvd0hvdmVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgaGlkZUZpbHRlck9wdGlvbnM6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIGF1dG9Db21wbGV0ZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgLy8gU2V0cyBwYWdlbmF0aW9uIGZvciB0aGUgdGFibGUgRGF0YS5cbiAgQElucHV0KCkgc2V0UGFnaW5hdGlvbkxlbmd0aDogYW55W10gPSBbNSwgMTAsIDE1LCB7IHNob3dBbGw6ICdBbGwnIH1dO1xuXG4gIC8vIHNldCB0aGUgY2hhbmdlIGluIHRoZSByb3dEYXRhXG4gIEBPdXRwdXQoKSByb3dzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLyoqXG4gICAqIFN0b3BzIHRoZSBsb2FkZXIgYW5kIHNldHMgdGhlIGRhdGEgdG8gZ3JpZFxuICAgKiBDbGVhcnMgdGhlIGVkaXRpbmcgc3RhY2tcbiAgICogU2Nyb2xscyB0byBzZWxlY3RlZCBlbGVtZW50IGlmIHNlbGVjdGlvbiBmb3VuZFxuICAgKi9cbiAgQElucHV0KCkgc2V0IHJvd3MoZGF0YTogYW55W10pIHtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnJlbWFpbmluZ1Jvd3NEYXRhID0gW107XG4gICAgaWYgKCF0aGlzLnJvd1VwZGF0ZUNoYW5nZSkge1xuICAgICAgaWYgKCF0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCkge1xuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZiAoIXRoaXMuZGF0YUtleSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhS2V5ID0gJ3RlbXBfaWQnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByb3dzRGF0YSA9IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0RGF0YUZpZWxkcyhkYXRhLCB0aGlzLmRhdGFLZXkpO1xuICAgICAgICAgIHRoaXMub3JpZ2luYWxSb3dzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyb3dzRGF0YSkpO1xuICAgICAgICAgIGlmIChkYXRhPy5sZW5ndGggPiA0MCAmJiAhdGhpcy5ncmlkU2VydmljZT8ucm93VXBkYXRlKSB7XG4gICAgICAgICAgICBjb25zdCBpbml0aWFsaXplRGF0YSA9IFsuLi5yb3dzRGF0YV07XG4gICAgICAgICAgICB0aGlzLnJvd3NEYXRhID0gaW5pdGlhbGl6ZURhdGEuc3BsaWNlKDAsIDQwKTtcbiAgICAgICAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAgICAgICAgIC5waXBlKHRha2UoMSkpIC8vIEVtaXQgb25seSBvbmNlIHdoZW4gdGhlIHpvbmUgYmVjb21lcyBzdGFibGVcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1haW5pbmdSb3dzRGF0YSA9IHJvd3NEYXRhLnNwbGljZSg0MCwgcm93c0RhdGEubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb2x1bW5zICYmIHRoaXMuY29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5zPy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbj8uYWdncmVnYXRlPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YSA9IHJvd3NEYXRhO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmVkaXRSb3dzUmVjb3JkcyA9IHt9O1xuXG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dzICYmIHRoaXMuZ3JpZFJvdz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50UmVmID0gdGhpcy5ncmlkUm93LmZpbmQoXG4gICAgICAgICAgICAgICh4KSA9PiB4Lm5hdGl2ZUVsZW1lbnQuaWQgPT09IHRoaXMuc2VsZWN0ZWRSb3dzW3RoaXMuZGF0YUtleV1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnRSZWYgJiZcbiAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxUYWJsZVJvd0VsZW1lbnRcbiAgICAgICAgICAgICAgKS5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvL21hbmlwdWxhdGUgY2hlY2tib3ggc3RyaW5nIHZhbHVlIHRvIHRydWUgYW5kIGZhbHNlLlxuICAgICAgICAgIHRoaXMuY2hhbmdlQ2hlY2tib3hTdHJpbmdWYWx1ZSgpO1xuICAgICAgICAgIHRoaXMuc2V0TnVtZXJpY1ZhbHVlcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucm93c0RhdGEgPSBbXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEdsb2JhbCBmaWx0ZXIgc2VydmVyIHJlcXVlc3RcbiAgQElucHV0KCkgc2V0IGdsb2JhbEZpbHRlckRhdGEoZ2xvYmFsRmlsdGVyczogSUdsb2JhbEZpbHRlcltdKSB7XG4gICAgdGhpcy5nbG9iYWxEYXRhID0gdGhpcy5ncmlkU2VydmljZVxuICAgICAgLnByZXBhcmVHbG9iYWxGaWx0ZXJzKGdsb2JhbEZpbHRlcnMpXG4gICAgICA/LmZpbHRlcigoeCkgPT4geD8udmFsdWUgIT09IGZhbHNlKTtcblxuICAgIGlmICh0aGlzLmVuYWJsZUNsaWVudFNpZGVGaWx0ZXJpbmcpIHtcbiAgICAgIGNvbnN0IGdsb2JhbFNlYXJjaFZhbHVlID0gZ2xvYmFsRmlsdGVycz8uZmluZCh4ID0+IHguZmllbGQgPT09ICdnbG9iYWxTZWFyY2gnKT8udmFsdWU7XG4gICAgICBpZiAoZ2xvYmFsU2VhcmNoVmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnRhYmxlKSB7XG4gICAgICAgIHRoaXMudGFibGUuZmlsdGVyR2xvYmFsKGdsb2JhbFNlYXJjaFZhbHVlLCAnY29udGFpbnMnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzZXJ2ZXJGaWx0ZXJWYWx1ZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuc2VydmVyRmlsdGVycykpO1xuICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzID0gdGhpcy5zZXJ2ZXJGaWx0ZXJzLmZpbHRlcnNcbiAgICAgID8gdGhpcy5zZXJ2ZXJGaWx0ZXJzLmZpbHRlcnMuY29uY2F0KHRoaXMuZ2xvYmFsRGF0YSlcbiAgICAgIDogdGhpcy5nbG9iYWxEYXRhO1xuXG4gICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhcHBseUZpbHRlcicpID09PSAnZmFsc2UnKSB7XG4gICAgICB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheSA9IHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5Py5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkuY29uY2F0KFsuLi5zZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVyc10pXG4gICAgICAgIDogdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXk7XG4gICAgfVxuICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXBwbHlGaWx0ZXInKSA9PT0gJ3RydWUnKSB7XG4gICAgICBnbG9iYWxGaWx0ZXJzLmZvckVhY2goKGdsb2JhbEZpbHRlcikgPT4ge1xuICAgICAgICB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5mb3JFYWNoKChmaWx0ZXJBcnJheSkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZpbHRlckFycmF5LmZpZWxkID09PSBnbG9iYWxGaWx0ZXIuZmllbGQgJiZcbiAgICAgICAgICAgIGdsb2JhbEZpbHRlci52YWx1ZSAmJlxuICAgICAgICAgICAgZmlsdGVyQXJyYXkudmFsdWUgIT09IGdsb2JhbEZpbHRlci52YWx1ZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZmlsdGVyQXJyYXkudmFsdWUgPSBnbG9iYWxGaWx0ZXIudmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5LmZpbmRJbmRleChcbiAgICAgICAgICAgIChpbmRleCkgPT4gaW5kZXguZmllbGQgPT09IGdsb2JhbEZpbHRlci5maWVsZCAmJiAhZ2xvYmFsRmlsdGVyLnZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoZmluZEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkuc3BsaWNlKGZpbmRJbmRleCwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlLy90aGlzLmF1dG9Mb2FkRGF0YTtcbiAgICAgIGlmICh0aGlzLmdyaWRTZXJ2aWNlLmFwcGx5RmlsdGVyRXZlbnQgfHwgdGhpcy5hdXRvTG9hZERhdGEpIHtcbiAgICAgICAgdGhpcy5vbkFwcGx5RmlsdGVyLmVtaXQoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmdsb2JhbEZpbHRlcnNBcnJheSAmJiB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzID0gc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMuY29uY2F0KFxuICAgICAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycyA9IEFycmF5LmZyb20oXG4gICAgICAgIG5ldyBTZXQoXG4gICAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnNcbiAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgIC5tYXAoKGZpbHRlcjogYW55KSA9PiBmaWx0ZXIuZmllbGQpXG4gICAgICAgIClcbiAgICAgICkubWFwKChmaWVsZCkgPT4ge1xuICAgICAgICByZXR1cm4gc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMuZmluZCgoeDogYW55KSA9PiB4LmZpZWxkID09PSBmaWVsZCk7XG4gICAgICB9KTtcbiAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzID0gc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMuZmlsdGVyKFxuICAgICAgICAob2JqOiBhbnkpID0+XG4gICAgICAgICAgb2JqPy52YWx1ZSAmJiBvYmoudmFsdWU/LnRvU3RyaW5nKCk/Lmxlbmd0aCA+IDAgJiYgb2JqLmZpZWxkXG4gICAgICApO1xuICAgICAgdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdID0gc2VydmVyRmlsdGVyVmFsdWVzO1xuICAgICAgaWYgKHRoaXMuZ3JpZFNlcnZpY2UuYXBwbHlGaWx0ZXJFdmVudCB8fCB0aGlzLmF1dG9Mb2FkRGF0YSA9PT0gdHJ1ZSkge1xuICAgICAgICAvLyBzZXR0aW5nIHBhZ2luYXRpb24gcGFnZSBhcyBmaXJzdFxuICAgICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMucGFnZSA9IDE7XG4gICAgICAgIHRoaXMuYXV0b0xvYWREYXRhID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdFJvd3MgJiYgdGhpcy5wYWdpbmF0aW9uKSB7XG4gICAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLnBhZ2VTaXplID0gdGhpcy5kZWZhdWx0Um93cztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncmlkU2VydmljZS5hcHBseUZpbHRlckV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5zZXR1cEVudGVyTGlzdGVuZXIoKVxuICAgICAgICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5vblNlcnZlclNpZGVFdmVudENoYW5nZS5lbWl0KHNlcnZlckZpbHRlclZhbHVlcyk7XG4gICAgICAgICAgdGhpcy5lZGl0aW5nUm93S2V5cyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdhcHBseUZpbHRlcicpO1xuICAgICAgICAvLyBzZXR0aW5nIHBhZ2luYXRpb24gcGFnZSBudW1iZXIgVUlcbiAgICAgICAgdGhpcy50YWJsZS5fZmlyc3QgPSAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBzZXR1cEVudGVyTGlzdGVuZXIoKSB7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLmhhbmRsZUtleVVwKTtcbiAgfVxuICBoYW5kbGVLZXlVcCA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgIGNvbnN0IGZvY3VzZWRFbGVtZW50ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgIGlmIChmb2N1c2VkRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiYgZm9jdXNlZEVsZW1lbnQudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2VsZWN0Um9vdEVsZW1lbnQoZm9jdXNlZEVsZW1lbnQpLmJsdXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLy8gSW5wdXQgZGVjb3JhdG9yIHRvIHJlY2VpdmUgY29sdW1ucyB0byBiZSBkaXNwbGF5ZWQgaW4gaGVhZGVyXG4gIEBJbnB1dCgpIGNvbHVtbnM6IElHcmlkQ29sdW1uW10gPSBbXTtcblxuICBASW5wdXQoKSBwZXJtaXNzaW9uczogSVBlcm1pc3Npb25bXSA9IFtdO1xuXG4gIC8vIE9wdGlvbmFsIHByb3AgdG8gaGFuZGxlIHRvZ2dsaW5nIG9mIGNvbHVtbnNcbiAgQElucHV0KCkgYWxsb3dDb2x1bW5Ub2dnbGUgPSBmYWxzZTtcblxuICAvLyBPcHRpb25hbCBwcm9wIHRvIGhpZGUgZmlsdGVyaW5nIG9mIGNvbHVtbnNcbiAgQElucHV0KCkgaGlkZUZpbHRlciA9IGZhbHNlO1xuXG4gIC8vIE9wdGlvbmFsIHByb3AgdG8gaGFuZGxlIGxvb2t1cCBmaWx0ZXJzXG4gIEBJbnB1dCgpIGxvb2t1cEZpbHRlcnMgPSBmYWxzZTtcblxuICAvLyBPcHRpb25hbCBwcm9wIHRvIGhhbmRsZSBwYWdpbmF0aW9uXG4gIEBJbnB1dCgpIHBhZ2luYXRpb24gPSBmYWxzZTtcblxuICAvLyBPcHRpb25hbCBwcm9wIHRvIGhhbmRsZSBzaG93IEN1cnJlbnRQYWdlIFJlcG9ydFxuICBASW5wdXQoKSBzaG93Q3VycmVudFBhZ2VSZXBvcnQgPSBmYWxzZTtcblxuICAvLyBEaXNwbGF5cyB0b3RhbCBudW1iZXIgb2YgcmVjb3Jkc1xuICBASW5wdXQoKSB0b3RhbFJlY29yZHMgPSAwO1xuXG4gIC8vIERpc3BsYXlzIGFnZ3JlZ2F0ZSB0aGF0IGZldGNoIGZyb20gcmVjb3Jkc1xuICBASW5wdXQoKSBhZ2dyZWdhdGVkUmVzdWx0OiBhbnlbXSA9IFtdO1xuXG4gIEBJbnB1dCgpIHNob3djb25maXJtRGlhbG9nOiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKSBzYXZlQWxsRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIFNldHMgbnVtYmVyIG9mIHJvd3MgdG8gYmUgc2hvd24gdGhlIGdyaWRcbiAgQElucHV0KCkgZGVmYXVsdFJvd3M6IG51bWJlciA9IDA7XG5cbiAgQElucHV0KCkgY29sdW1uQWN0aW9uczogSUdyaWRDb2x1bW5BY3Rpb25bXSA9IFtdO1xuXG4gIC8vIERlY2lkZXMgdGhlIGdyaWQncyBiZWhhdmlvciBlaXRoZXIgZm9yIGNsaWVudCBzaWRlIG9yIHNlcnZlciBzaWRlIGV2ZW50c1xuICBASW5wdXQoKSB1c2VTZXJ2ZXJTaWRlRXZlbnRzID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVuYWJsZUNsaWVudFNpZGVGaWx0ZXJpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZ2xvYmFsRmlsdGVyRmllbGRzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgc2V0IGdsb2JhbEZpbHRlckZpZWxkcyhmaWVsZHM6IHN0cmluZ1tdKSB7XG4gICAgaWYgKGZpZWxkcyAmJiBmaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5fZ2xvYmFsRmlsdGVyRmllbGRzID0gZmllbGRzLm1hcChmID0+IGYudG9Mb3dlckNhc2UoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2dsb2JhbEZpbHRlckZpZWxkcyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgZ2V0IGdsb2JhbEZpbHRlckZpZWxkcygpOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2dsb2JhbEZpbHRlckZpZWxkcztcbiAgfVxuXG4gIC8vIE91dHB1dCBldmVudCB0byBoYW5kbGUgcm93IGNsaWNrXG4gIEBPdXRwdXQoKSBvblJvd0NsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBPdXRwdXQgZXZlbnQgZW1pdCB3aGVuIGNsaWNrIG9uIGdyaWQgY2hlY2tib3ggZmlsdGVyXG4gIEBPdXRwdXQoKSBvbkNoZWNrQm94RmlsdGVyQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIE91dHB1dCBldmVudCB0byBoYW5kbGUgcm93IENoZWNrQm94XG4gIEBPdXRwdXQoKSBvblJvd0NoZWNrQm94OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBPdXRwdXQgZXZlbnQgdG8gdHJpZ2dlciBvbiBzb3J0IGNoYW5nZVxuICBAT3V0cHV0KCkgb25Tb3J0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8SUdyaWRTb3J0PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBPdXRwdXQgZXZlbnQgdG8gdHJpZ2dlciBvbiBmaWx0ZXIgY2hhbmdlXG4gIEBPdXRwdXQoKSBvbkZpbHRlckNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IHRvIGludm9rZSB0aGUgbXVsdGlTZWxlY3Rpb24gY2xpY2sgZXZlbnRcbiAgQE91dHB1dCgpIG9uTXVsdGlTZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIENhbGxzIHdoZW5ldmVyIGEgZ3JpZCBhbmQgZ2xvYmFsRmlsdGVycyBjYWxsZWRcbiAgQE91dHB1dCgpIG9uQXBwbHlGaWx0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vc2V0IGhlYWRlciBjaGVja2JveCB2YWx1ZSBmb3IgZ2V0dGluZyBhbGwgY29sdW1ucyBvbiBzdGF5IGFkbWluXG4gIEBPdXRwdXQoKSBpc0luY2x1ZGVkQWxsQ29sdW1uczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gQ2FsbHMgd2hlbmV2ZXIgYSBsYXp5IGV2ZW50IGlzIGRpc3BhdGNoZWRcbiAgQE91dHB1dCgpXG4gIG9uU2VydmVyU2lkZUV2ZW50Q2hhbmdlOiBFdmVudEVtaXR0ZXI8SUdyaWRTZXJ2ZXJTaWRlRXZlbnQ+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IHRvIHRyaWdnZXIgb24gcGFnaW5hdGlvblxuICBAT3V0cHV0KClcbiAgb25QYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SUdyaWRQYWdpbmF0aW9uRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIERpc3BhdGNoIG91dHB1dCBldmVudCB0cmlnZ2VyIG9uIGVkaXQgcm93XG4gIEBPdXRwdXQoKSBvblJvd1VwZGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KCkgb25Sb3dPcmRlckNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gRGlzcGF0Y2ggb3V0cHV0IGV2ZW50IHRyaWdnZXIgY2FuY2VsIGFsbCByb3dzXG4gIEBPdXRwdXQoKSBvbkNhbmNlbEFsbFJvd3MgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gRGlzcGF0Y2ggb3V0cHV0IGV2ZW50IHRyaWdnZXIgb24gZGVsZXRlIHJvd1xuICBAT3V0cHV0KCkgb25Sb3dEZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy9EaXNwYXRjaCBvdXRwdXQgZXZlbnQgdHJpZ2dlciBvbiBhZGQgcm93XG4gIEBPdXRwdXQoKSBvblJvd0FkZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvL0Rpc3BhdGNoIG91dHB1dCBldmVudCB0cmlnZ2VyIG9uIGFkZCwgdXBkYXRlIGFuZCBkZWxldGUgcm93XG4gIEBPdXRwdXQoKSBvbkdyaWRSb3dBY3Rpb25zID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIHNldCBwcm9wZXJ0eSBhbGxvd0NhY2hpbmcgZm9yIExvY2FsU3RvcmFnZVxuICBASW5wdXQoKSBhbGxvd0NhY2hpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvL3NldCBNdWx0aXNlbGVjdCBUb2dnbGUgQ29sdW1uc1xuICBASW5wdXQoKSBhbGxvd1BlcnNpc3RlbmNlOiBib29sZWFuID0gdHJ1ZTtcblxuICAvLyBzZXQgcHJvcGVydHkgc29mdENhY2hpbmcgZm9yIHNldHRpbmcgdGhlIHZhbHVlcyBvZiBncmlkRmlsdGVyXG4gIEBJbnB1dCgpIHNvZnRDYWNoaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgZWRpdEFsbFJvd3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gc2V0IHRoZSByb3cgV2hlbiBFZGl0IHRoZSByb3cgb24gR3JpZFxuICBAT3V0cHV0KCkgb25HcmlkUm93RWRpdCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBzZXQgdGhlIHJvdyBXaGVuIGFkZGluZyB0aGUgbmV3IFJvdyBvbiBHcmlkXG4gIEBPdXRwdXQoKSBvbkdyaWRSb3dBZGQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQElucHV0KCkgZ3JpZE5hbWU6IHN0cmluZyA9ICcnO1xuICBpc0dyaWRIaWRkZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgYXV0b1Jlc2l6ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBhbGxvd1RleHRDb3B5OiBib29sZWFuID0gZmFsc2U7XG5cblxuICByb3dzUGVyUGFnZU9wdGlvbnM6IGFueVtdID0gWzUsIDEwLCAxNSwgeyBzaG93QWxsOiAnQWxsJyB9XTtcbiAgY3VzdG9tV2lkdGhDb2x1bW5zOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge307XG4gIHNlbGVjdGVkUm93UmVjb3JkOiBhbnk7XG4gIHNjcm9sbFBvc2l0aW9uWTogbnVtYmVyID0gMDtcbiAgc2Nyb2xsUG9zaXRpb25YOiBudW1iZXIgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IFN5c3RlbUNvbmZpZ1NlcnZpY2UsXG4gICAgcHVibGljIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtU2VydmljZTogRm9ybVNlcnZpY2UsXG4gICAgcHVibGljIGdyaWRTZXJ2aWNlOiBHcmlkU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHVibGljIGRlY2ltYWxQaXBlOiBEZWNpbWFsUGlwZSxcbiAgICBwcml2YXRlIHBhZ2VMb2dnZXJTZXJ2aWNlOiBQYWdlTG9nZ2VyU2VydmljZSxcbiAgICBwcml2YXRlIGh5cGVybGlua1NlcnZpY2U6IEh5cGVybGlua1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgIHB1YmxpYyBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgcmVxdWVzdFNlcnZpY2U6IFJlcXVlc3RTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHB1YmxpYyBjb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcsXG4gICAgQE9wdGlvbmFsKCkgcHVibGljIHJlZjogRHluYW1pY0RpYWxvZ1JlZlxuICApIHsgfVxuXG4gIGNvbnNvbGVMb2cobWVzc2FnZTogYW55KSB7XG4gICAgY29uc29sZS5sb2cobWVzc2FnZSk7XG4gIH1cblxuICBtb3VzZUxlYXZlRXZlbnQob3ZlcmxheVBhbmVsKSB7XG4gICAgb3ZlcmxheVBhbmVsLmhpZGUoKTtcbiAgfVxuICBvbkNvbHVtblJlc2l6ZShldmVudDogYW55LCBkdCkge1xuICAgIGlmIChkdD8uZWw/Lm5hdGl2ZUVsZW1lbnQ/LmlkKSB7XG4gICAgICB0aGlzLmdyaWRJZCA9IGR0LmVsLm5hdGl2ZUVsZW1lbnQuaWQ7XG4gICAgfVxuICAgIGNvbnN0IG5ld1dpZHRoID0gZXZlbnQuZWxlbWVudC5jbGllbnRXaWR0aCArIDI7XG4gICAgbGV0IGNvbHVtbkhlYWRlciA9IGV2ZW50Py5lbGVtZW50Py5pZD8udG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoY29sdW1uSGVhZGVyKSB7XG4gICAgICBsZXQgaW5kZXg6IGFueSA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleCgoY29sdW1uKSA9PiBjb2x1bW4uaGVhZGVyPy50b0xvd2VyQ2FzZSgpID09IGNvbHVtbkhlYWRlcik7XG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICBpZiAobmV3V2lkdGgpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uc1tpbmRleF1bJ2N1c3RvbVdpZHRoJ10gPSBwYXJzZUludChuZXdXaWR0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zYXZlQ29sdW1uV2lkdGhzKCk7XG4gIH1cbiAgc2F2ZUNvbHVtbldpZHRocyh0b2dnbGVDb2x1bW5zOiBhbnlbXSA9IFtdKSB7XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICBpZiAoY29sdW1uLmZpZWxkICYmIGNvbHVtbi5jdXN0b21XaWR0aCkge1xuICAgICAgICB0aGlzLmN1c3RvbVdpZHRoQ29sdW1uc1tjb2x1bW4uZmllbGRdID0gY29sdW1uLmN1c3RvbVdpZHRoO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHNlbGVjdGVkRmllbGRzID0gdG9nZ2xlQ29sdW1ucz8ubGVuZ3RoID4gMCA/IHRvZ2dsZUNvbHVtbnMgOiB0aGlzLl9zZWxlY3RlZENvbHVtbnMubWFwKCh4KSA9PiB4LmZpZWxkKTtcbiAgICB0aGlzLnNldE11bHRpU2VsZWN0VG9nZ2xlQ29sdW1uKHNlbGVjdGVkRmllbGRzKTtcbiAgfVxuICBsb2FkQ29sdW1uV2lkdGhzKCkge1xuICAgIGxldCBjdXJyZW50VXNlckluZm8gPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdDdXJyZW50VXNlckluZm8nKSk7XG4gICAgaWYgKGN1cnJlbnRVc2VySW5mbyAmJiBjdXJyZW50VXNlckluZm8ucGFnZVNldHRpbmcpIHtcbiAgICAgIGxldCBwYWdlU2V0dGluZ3MgPSBKU09OLnBhcnNlKGN1cnJlbnRVc2VySW5mby5wYWdlU2V0dGluZylcbiAgICAgIHBhZ2VTZXR0aW5ncy5wYWdlU2V0dGluZ3MubWFwKHBhZ2UgPT4ge1xuICAgICAgICBpZiAocGFnZS51cmwgPT09IHRoaXMucm91dGVyLnVybCkge1xuICAgICAgICAgIHBhZ2UuZ3JpZFNldHRpbmdzLm1hcChncmlkU2V0dGluZyA9PiB7XG4gICAgICAgICAgICBpZiAoZ3JpZFNldHRpbmcuZ3JpZElkID09PSB0aGlzLmdyaWRJZCAmJiBncmlkU2V0dGluZz8uY3VzdG9tQ29sdW1uc1dpZHRoKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbHVtbnNXaWR0aEtleXMgPSBPYmplY3Qua2V5cyhncmlkU2V0dGluZz8uY3VzdG9tQ29sdW1uc1dpZHRoKTtcbiAgICAgICAgICAgICAgY29sdW1uc1dpZHRoS2V5cy5mb3JFYWNoKChjb2x1bW5LZXk6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jb2x1bW5zLmZpbmRJbmRleCgoc2VsZWN0ZWRDb2x1bW4pID0+IHNlbGVjdGVkQ29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW5LZXk/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbnNbaW5kZXhdWydjdXN0b21XaWR0aCddID0gZ3JpZFNldHRpbmc/LmN1c3RvbUNvbHVtbnNXaWR0aFtjb2x1bW5LZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBwcm9jZXNzSG92ZXJEYXRhKGhvdmVyRGF0YTogYW55LCByb3c6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0geyAuLi5ob3ZlckRhdGE/LmRhdGEgfTtcbiAgICAgIGNvbnN0IGRhdGFLZXlzID0gT2JqZWN0LmtleXMoZGF0YSk7XG4gICAgICBjb25zdCByb3dLZXlzID0gT2JqZWN0LmtleXMocm93KTtcbiAgICAgIGlmIChkYXRhS2V5cz8ubGVuZ3RoID4gMCAmJiByb3dLZXlzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGRhdGFLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBkYXRhW2tleV07XG4gICAgICAgICAgaWYgKHZhbHVlPy50b1N0cmluZygpLmluY2x1ZGVzKCd7JykgJiYgdmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ30nKSkge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKFwie1wiLCBcIlwiKS5yZXBsYWNlKFwifVwiLCBcIlwiKTtcbiAgICAgICAgICAgIGxldCByb3dLZXkgPSByb3dLZXlzPy5maW5kKCh4KSA9PiB4Py50b0xvd2VyQ2FzZSgpID09PSB2YWx1ZT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICB2YXIgY29ycmVjdFZhbHVlID0gcm93W3Jvd0tleV07XG4gICAgICAgICAgICBkYXRhW2tleV0gPSBjb3JyZWN0VmFsdWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoS2V5ID0gcm93S2V5cz8uZmluZCgoeCkgPT4geD8udG9Mb3dlckNhc2UoKSA9PT0ga2V5Py50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgIGlmIChtYXRjaEtleSAmJiAhZGF0YVtrZXldKSB7XG4gICAgICAgICAgICAgIGRhdGFba2V5XSA9IHJvd1ttYXRjaEtleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBob3ZlckRhdGE/LnN0eWxlID8gdGhpcy5vdmVybGF5UGFuZWxTdHlsZSA9IGhvdmVyRGF0YT8uc3R5bGUgOiBcIlwiO1xuICAgICAgdGhpcy5wYW5lbE92ZXJsYXlWaWV3Q29udGFpbmVyLmNsZWFyKCk7XG4gICAgICBpZiAodGhpcy5wYW5lbE92ZXJsYXlWaWV3Q29udGFpbmVyICYmIGhvdmVyRGF0YT8uY29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZjogYW55ID0gdGhpcy5wYW5lbE92ZXJsYXlWaWV3Q29udGFpbmVyPy5jcmVhdGVDb21wb25lbnQoaG92ZXJEYXRhPy5jb21wb25lbnQpO1xuICAgICAgICBpZiAoaG92ZXJEYXRhLmRhdGEpIHtcbiAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuY29uZmlnID0gW107XG4gICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmNvbmZpZy5kYXRhID0gZGF0YTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXNvbHZlKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgYWRkRHluYW1pY1BhbmVsT3ZlcmxheUNvbXBvbmVudChob3ZlckRhdGE6IGFueSwgb3ZlcmxheVBhbmVsOiBhbnksIGV2ZW50OiBhbnksIHJvdzogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5wcm9jZXNzSG92ZXJEYXRhKGhvdmVyRGF0YSwgcm93KTtcbiAgICBvdmVybGF5UGFuZWwuc2hvdyhldmVudCk7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRDb2x1bW5zKCk6IElHcmlkQ29sdW1uW10ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZENvbHVtbnM7XG4gIH1cblxuICBzZXQgc2VsZWN0ZWRDb2x1bW5zKHZhbDogSUdyaWRDb2x1bW5bXSkge1xuICAgIC8vIFJlc3BlY3QgYHNob3dJbk1vcmVgOiBkbyBub3QgYWxsb3cgc2VsZWN0aW5nIGNvbHVtbnMgdGhhdCBhcmUgaW50ZW5kZWQgZm9yIE1vcmUgbWVudVxuICAgIHRoaXMuX3NlbGVjdGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucz8uZmlsdGVyKChjb2wpID0+XG4gICAgICAhY29sLnNob3dJbk1vcmUgJiYgdmFsPy5zb21lKCh2KSA9PiB2LmZpZWxkID09PSBjb2wuZmllbGQgJiYgdi5oZWFkZXIgPT09IGNvbC5oZWFkZXIpXG4gICAgKTtcblxuICAgIGlmICh0aGlzLmFsbG93UGVyc2lzdGVuY2UgJiYgdGhpcy5hbGxvd0NvbHVtblRvZ2dsZSkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRGaWVsZHMgPSB0aGlzLl9zZWxlY3RlZENvbHVtbnMubWFwKCh4KSA9PiB4LmZpZWxkKTtcbiAgICAgIHRoaXMuc2F2ZUNvbHVtbldpZHRocyhzZWxlY3RlZEZpZWxkcyk7XG4gICAgfVxuICB9XG4gIC8vIHRoaXMuX3NlbGVjdGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucz8uZmlsdGVyKChjb2wpID0+IHZhbC5pbmNsdWRlcyhjb2wpKTtcbiAgLy8gaWYgKHRoaXMuYWxsb3dQZXJzaXN0ZW5jZSAmJiB0aGlzLmFsbG93Q29sdW1uVG9nZ2xlKSB7XG4gIC8vICAgY29uc3Qgc2VsZWN0ZWRGaWVsZHMgPSB2YWwubWFwKCh4KSA9PiB4LmZpZWxkKTtcbiAgLy8gICB0aGlzLnNhdmVDb2x1bW5XaWR0aHMoc2VsZWN0ZWRGaWVsZHMpO1xuICAvLyB9XG4gIC8vIHVuYWJsZSB0byBhbGxvdyB1c2VyIHRvIGNvcHkgdGV4dCBmcm9tIGdyaWQgd2hlbiB0aGlzLmFsbG93VGV4dENvcHkgaXMgc2V0IHRvIGZhbHNlLlxuICBASG9zdExpc3RlbmVyKCdjb3B5JywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcignY3V0JywgWyckZXZlbnQnXSlcbiAgaGFuZGxlQ29weU9yQ3V0KGV2ZW50OiBDbGlwYm9hcmRFdmVudCkge1xuICAgIGNvbnN0IHNlbGVjdGlvbjogYW55ID0gd2luZG93Py5nZXRTZWxlY3Rpb24oKT8udG9TdHJpbmcoKSB8fCAnJztcbiAgICBjb25zdCBpc011bHRpQ2VsbFNlbGVjdGlvbiA9IHNlbGVjdGlvbi5zcGxpdCgvW1xcblxcdF0rLyk/LmZpbHRlcigoeCkgPT4geCAhPT0gJycpO1xuXG4gICAgaWYgKCF0aGlzLmFsbG93VGV4dENvcHkgJiYgaXNNdWx0aUNlbGxTZWxlY3Rpb24/Lmxlbmd0aCA+IDEpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50LnRhcmdldCddKSBvbkNsaWNrKGV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmVkaXRBbGxSb3dzICYmICF0aGlzLmluRWRpdE1vZGUgJiYgdGhpcy5zZWxlY3RlZFJvd1JlY29yZCkge1xuICAgICAgdGhpcy5oYW5kbGVSb3dDbGljayh0aGlzLnNlbGVjdGVkUm93UmVjb3JkKTtcbiAgICB9XG4gIH1cblxuICAvLyBicm93c2VyIGNsb3NlIGV2ZW50XG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpiZWZvcmV1bmxvYWQnLCBbJyRldmVudCddKVxuICBiZWZvcmV1bmxvYWRIYW5kbGVyKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NpZ25tZW50IG9mIHNlbGVjdGVkIGNvbHVtbnMgb24gcGFnZSBsb2FkXG4gICAqL1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmluY3JlbWVudENhbGxzKCk7XG4gICAgaWYgKHRoaXMuZ3JpZFNlcnZpY2UuZ2V0TnVtYmVyT2ZDYWxscygpID09PSAxKSB7XG4gICAgICB0aGlzLnNlYXJjaGJ0bklkID0gJ3NlYXJjaEdsb2JhbEZpbHRlckJ0bic7XG4gICAgICBpZiAodGhpcy50YWJsZSlcbiAgICAgICAgdGhpcy50YWJsZS5pZCA9ICdHcmlkQ29tcG9uZW50VGFibGUtJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWFyY2hidG5JZCA9IGBGaWx0ZXJfJHtjdXJyZW50VXJsKCl9XyR7dGhpcy5ncmlkU2VydmljZS5nZXROdW1iZXJPZkNhbGxzKCl9YDtcbiAgICAgIGlmICh0aGlzLnRhYmxlKVxuICAgICAgICB0aGlzLnRhYmxlLmlkID0gJ0dyaWRDb21wb25lbnRfJyArIHRoaXMuZ3JpZFNlcnZpY2UuZ2V0TnVtYmVyT2ZDYWxscygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZXRHcmlkUmVmcmVzaFRpbWUpIHtcbiAgICAgIHRoaXMucmVmcmVzaEdyaWQoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vblJvd1VwZGF0ZT8ub2JzZXJ2ZXJzPy5sZW5ndGggPT0gMCkge1xuICAgICAgdGhpcy5oaWRlRWRpdEJ0biA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZWRpdEFsbFJvd3MgJiYgdGhpcy5vblJvd0RlbGV0ZS5vYnNlcnZlcnMubGVuZ3RoID09IDApIHtcbiAgICAgIHRoaXMuZGlzYWJsZWRTYXZlQnRuID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbXBvbmVudFRhYmxlUmVmID0gdGhpcy50YWJsZTtcbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgLnBpcGUodGFrZSgxKSkgLy8gRW1pdCBvbmx5IG9uY2Ugd2hlbiB0aGUgem9uZSBiZWNvbWVzIHN0YWJsZVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgICAgfSk7XG4gICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICB0aGlzLnNldE51bWVyaWNWYWx1ZXMoKTtcbiAgICAvLyB9LCA1MDApO1xuICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgaWYgKHRoaXMucm93c0NoYW5nZS5vYnNlcnZlcnM/Lmxlbmd0aCkge1xuICAgIC8vICAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICAvLyAgIH1cbiAgICAvLyB9LCAyMDAwKTtcbiAgfVxuICAvLyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gIC8vICAgb25HbG9iYWxGaWx0ZXJDb250cm9sUmlnaHRCdG5TdGF0ZUNoYW5nZSgpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgLy8gICAgIHRoaXMuY2hlY2tsaXN0ID0gcmVzcG9uc2U7XG4gIC8vICAgfSlcbiAgLy8gICAvLyB0aGlzLmFkZER5bmFtaWNQYW5lbE92ZXJsYXlDb21wb25lbnQoKVxuICAvLyAgIHRoaXMuY29tcG9uZW50VGFibGVSZWYgPSB0aGlzLnRhYmxlO1xuICAvLyAgIGNvbnN0IGxvb2t1cE1vZGFsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmxvb2t1cC1tb2RlbCcpO1xuICAvLyAgIGlmIChsb29rdXBNb2RhbCkge1xuICAvLyAgICAgY29uc3QgZm9ybUNvbnRhaW5lciA9IGxvb2t1cE1vZGFsLnF1ZXJ5U2VsZWN0b3IoJy5mb3JtLWNvbnRhaW5lcicpOyBcbiAgLy8gICAgIGlmICghZm9ybUNvbnRhaW5lcikge1xuICAvLyAgICAgdGhpcy5zZXRGb2N1c091dFRvZmlsdGVycyhsb29rdXBNb2RhbCk7XG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyAgIGVsc2V7XG4gIC8vICAgICB0aGlzLnNldEZvY3VzT3V0VG9maWx0ZXJzKCk7XG4gIC8vICAgfVxuICAvLyAgIHRoaXMuaXNBcGlFcnJvck9jY3VyZWQoKTtcbiAgLy8gICB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gIC8vICAgICBjb25zdCBrZXkgPSB0aGlzLnRhYmxlPy5pZCArIHRoaXMuY3VycmVudFVybDtcbiAgLy8gICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuc29mdENhY2hpbmdcbiAgLy8gICAgICAgPyB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1trZXldXG4gIC8vICAgICAgIDogSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnU2V0RmlsdGVycy0nICsga2V5KSB8fCAnbnVsbCcpO1xuICAvLyAgICAgaWYgKCFjYWNoZWQ/LmZpbHRlcnM/Lmxlbmd0aCkgcmV0dXJuO1xuICAvLyAgICAgaWYgKHRoaXMudXNlU2VydmVyU2lkZUV2ZW50cykge1xuICAvLyAgICAgICB0aGlzLnRhYmxlICYmICh0aGlzLnRhYmxlLl9maXJzdCA9IDApO1xuICAvLyAgICAgICB0aGlzLm9uU2VydmVyU2lkZUV2ZW50Q2hhbmdlLmVtaXQoY2FjaGVkKTtcbiAgLy8gICAgIH0gZWxzZSB7XG4gIC8vICAgICAgIGNhY2hlZC5maWx0ZXJzLmZvckVhY2goKGY6IGFueSkgPT4gdGhpcy50YWJsZT8uZmlsdGVyPy4oZi52YWx1ZSwgZi5maWVsZCwgZi5tYXRjaE1vZGUgfHwgJ3N0YXJ0c1dpdGgnKSk7XG4gIC8vICAgICB9XG4gIC8vICAgfSk7XG4gIC8vIH1cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIG9uR2xvYmFsRmlsdGVyQ29udHJvbFJpZ2h0QnRuU3RhdGVDaGFuZ2UoKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICB0aGlzLmNoZWNrbGlzdCA9IHJlc3BvbnNlO1xuICAgIH0pXG4gICAgLy8gdGhpcy5hZGREeW5hbWljUGFuZWxPdmVybGF5Q29tcG9uZW50KClcbiAgICB0aGlzLmNvbXBvbmVudFRhYmxlUmVmID0gdGhpcy50YWJsZTtcbiAgICBjb25zdCBsb29rdXBNb2RhbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5sb29rdXAtbW9kZWwnKTtcbiAgICBpZiAobG9va3VwTW9kYWwpIHtcbiAgICAgIGNvbnN0IGZvcm1Db250YWluZXIgPSBsb29rdXBNb2RhbC5xdWVyeVNlbGVjdG9yKCcuZm9ybS1jb250YWluZXInKTtcbiAgICAgIGlmICghZm9ybUNvbnRhaW5lcikge1xuICAgICAgICB0aGlzLnNldEZvY3VzT3V0VG9maWx0ZXJzKGxvb2t1cE1vZGFsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnNldEZvY3VzT3V0VG9maWx0ZXJzKCk7XG4gICAgfVxuICAgIHRoaXMuaXNBcGlFcnJvck9jY3VyZWQoKTtcbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLnRhYmxlPy5pZCArIHRoaXMuY3VycmVudFVybDtcbiAgICAgIGlmICghdGhpcy5hbGxvd0NhY2hpbmcgJiYgIXRoaXMuc29mdENhY2hpbmcpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ1NldEZpbHRlcnMtJyArIGtleSk7XG4gICAgICAgIGlmICh0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1trZXldKSB7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmFsbG93Q2FjaGluZyB8fCB0aGlzLnNvZnRDYWNoaW5nKSB7XG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuc29mdENhY2hpbmdcbiAgICAgICAgICA/IHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW2tleV1cbiAgICAgICAgICA6IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1NldEZpbHRlcnMtJyArIGtleSkgfHwgJ251bGwnKTtcblxuICAgICAgICBpZiAoY2FjaGVkPy5maWx0ZXJzPy5sZW5ndGgpIHtcbiAgICAgICAgICBjYWNoZWQuZmlsdGVycy5mb3JFYWNoKChmOiBhbnkpID0+IHRoaXMudGFibGU/LmZpbHRlcj8uKGYudmFsdWUsIGYuZmllbGQsIGYubWF0Y2hNb2RlIHx8ICdzdGFydHNXaXRoJykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgY29uc3QgdGV4dGFyZWFzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MVGV4dEFyZWFFbGVtZW50PignLnByaW1lLXRleHRhcmVhJyk7XG4gICAgdGV4dGFyZWFzLmZvckVhY2godCA9PiB0aGlzLmF1dG9Hcm93KHQpKTtcbiAgfVxuXG4gIGlzQXBpRXJyb3JPY2N1cmVkKCkge1xuICAgIHRoaXMucmVxdWVzdFNlcnZpY2UuaXNFcnJvck9jY3VyZWQoKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgIGlmICh0aGlzLnRlbXBTYXZlZFJvdz8ubGVuZ3RoID4gMCAmJiB0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwICYmICF0aGlzLmVkaXRBbGxSb3dzKSB7XG4gICAgICAgIHRoaXMuZWRpdGluZ1Jvd0tleXNbdGhpcy5yb3dzRGF0YVt0aGlzLnRlbXBTYXZlZFJvd1swXV1bdGhpcy5kYXRhS2V5XV0gPSByZXM7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgc2V0Rm9jdXNPdXRUb2ZpbHRlcnMobG9va3VwTW9kYWw/KSB7XG4gICAgbGV0IGZpbHRlcnMgPSA4MDA7XG4gICAgbGV0IGZpbHRlcjogU3Vic2NyaXB0aW9uID0gaW50ZXJ2YWwoZmlsdGVycykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGZpbHRlcnMgPSAwO1xuICAgICAgZmlsdGVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICBjb25zdCBmaWx0ZXJDb2x1bW4gPSB0aGlzLmNvbHVtbnM/LmZpbmQoKGNvbHVtbikgPT4gIXRoaXMuaGlkZUZpbHRlciAmJiAhY29sdW1uPy5oaWRkZW4gJiYgY29sdW1uPy5maWx0ZXIgJiYgKGNvbHVtbj8uZmlsdGVyaW5nID09PSB0cnVlIHx8IGNvbHVtbj8uZmlsdGVyaW5nID09PSB1bmRlZmluZWQpKTtcbiAgICAgIGNvbnN0IGZpbHRlckZpZWxkOiBhbnkgPSBsb29rdXBNb2RhbD8uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShmaWx0ZXJDb2x1bW4/LmZpZWxkPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIGNvbnN0IGZpbHRlckZpZWxkczogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShmaWx0ZXJDb2x1bW4/LmZpZWxkPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIGlmIChmaWx0ZXJGaWVsZCB8fCBmaWx0ZXJGaWVsZHMpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJGaWVsZD8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZmlsdGVyRmllbGRbMF0/LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGZpbHRlckZpZWxkcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWx0ZXJGaWVsZHM/Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGZpbHRlckZpZWxkc1tpXT8uZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMucmVmcmVzaEdyaWRUZXJtaW5hdG9yKCk7XG4gICAgdGhpcy5ncmlkU2VydmljZS5yZXNldENhbGxzKCk7XG4gIH1cblxuICAvLyBzZXQgTXVsdGlzZWxlY3QgVG9nZ2xlIENvbHVtbiAvL1xuICBzZXRNdWx0aVNlbGVjdFRvZ2dsZUNvbHVtbihzZWxlY3RlZEZpZWxkczogYW55W10gPSBbXSkge1xuICAgIGlmICh0aGlzLnVzZXJTZXR0aW5nPy5wYWdlU2V0dGluZ3M/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG1hdGNoVXJsID0gdGhpcy51c2VyU2V0dGluZz8ucGFnZVNldHRpbmdzPy5maW5kSW5kZXgoKHBhZ2UpID0+IHBhZ2U/LnVybCA9PT0gdGhpcy5yb3V0ZXIudXJsKVxuICAgICAgaWYgKG1hdGNoVXJsID4gLTEpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hHcmlkID0gdGhpcy51c2VyU2V0dGluZz8ucGFnZVNldHRpbmdzW21hdGNoVXJsXT8uZ3JpZFNldHRpbmdzPy5maW5kSW5kZXgoKGdyaWRTZXR0aW5nKSA9PiBncmlkU2V0dGluZz8uZ3JpZElkID09PSB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCk7XG4gICAgICAgIGlmIChtYXRjaEdyaWQgPiAtMSkge1xuICAgICAgICAgIHRoaXMudXNlclNldHRpbmc/LnBhZ2VTZXR0aW5nc1ttYXRjaFVybF0/LmdyaWRTZXR0aW5ncy5zcGxpY2UobWF0Y2hHcmlkLCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRncmlkU2V0dGluZ3Moc2VsZWN0ZWRGaWVsZHMsIG1hdGNoVXJsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51c2VyU2V0dGluZy5wYWdlU2V0dGluZ3MgPSBbXTtcbiAgICAgIHRoaXMuc2V0Z3JpZFNldHRpbmdzKHNlbGVjdGVkRmllbGRzKTtcbiAgICB9XG4gIH1cblxuICBnZXRTZWxlY3RlZENvbEZyb21Mb2NhbFN0cm9yYWdlKHNlbGVjdGVkQ29sdW1uKSB7XG4gICAgbGV0IGFyciA9IFtdO1xuICAgIGlmIChzZWxlY3RlZENvbHVtbiAmJiBzZWxlY3RlZENvbHVtbj8ucGFnZVNldHRpbmdzPy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBtYXRjaFVybCA9IHNlbGVjdGVkQ29sdW1uPy5wYWdlU2V0dGluZ3M/LmZpbmRJbmRleCgocGFnZSkgPT4gcGFnZT8udXJsID09PSB0aGlzLnJvdXRlci51cmwpXG4gICAgICBpZiAobWF0Y2hVcmwgPiAtMSkge1xuICAgICAgICBjb25zdCBtYXRjaEdyaWQgPSBzZWxlY3RlZENvbHVtbj8ucGFnZVNldHRpbmdzW21hdGNoVXJsXT8uZ3JpZFNldHRpbmdzPy5maW5kKChncmlkU2V0dGluZykgPT4gZ3JpZFNldHRpbmc/LmdyaWRJZCA9PT0gdGhpcy5ncmlkSWQpO1xuICAgICAgICBpZiAobWF0Y2hHcmlkICYmIG1hdGNoR3JpZC5zZWxlY3RlZENvbHVtbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBpZiAobWF0Y2hHcmlkLnNlbGVjdGVkQ29sdW1ucy5zb21lKChmaWVsZE5hbWUpID0+IGZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gY29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgYXJyLnB1c2goY29sdW1uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFycj8ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIHNldGdyaWRTZXR0aW5ncyhzZWxlY3RlZEZpZWxkczogYW55LCBtYXRjaFVybD86IGFueSkge1xuICAgIGlmIChzZWxlY3RlZEZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgZ3JpZFNldHRpbmdzOiBhbnlbXSA9IFtdO1xuICAgICAgZ3JpZFNldHRpbmdzLnB1c2goe1xuICAgICAgICBncmlkSWQ6IHRoaXMuZ3JpZElkLFxuICAgICAgICBzZWxlY3RlZENvbHVtbnM6IHNlbGVjdGVkRmllbGRzLFxuICAgICAgICBjdXN0b21Db2x1bW5zV2lkdGg6IHRoaXMuY3VzdG9tV2lkdGhDb2x1bW5zLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IHBhZ2VTZXR0aW5nID0ge1xuICAgICAgICB1cmw6IHRoaXMucm91dGVyLnVybCxcbiAgICAgICAgZ3JpZFNldHRpbmdzOiBncmlkU2V0dGluZ3MsXG4gICAgICAgIGxhc3RVcGRhdGVkOiBuZXcgRGF0ZSgpXG4gICAgICB9XG4gICAgICB0aGlzLnVzZXJTZXR0aW5nLmxhc3RVcGRhdGVkID0gbmV3IERhdGUoKTtcbiAgICAgIGlmIChtYXRjaFVybCA+IC0xKSB7XG4gICAgICAgIHRoaXMudXNlclNldHRpbmcucGFnZVNldHRpbmdzW21hdGNoVXJsXSA9IHBhZ2VTZXR0aW5nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51c2VyU2V0dGluZy5wYWdlU2V0dGluZ3MucHVzaChwYWdlU2V0dGluZyk7XG4gICAgICB9XG4gICAgICBjb25zdCBwYWdlSW5mbyA9IEpTT04uc3RyaW5naWZ5KHRoaXMudXNlclNldHRpbmcpO1xuICAgICAgY2hhbmdlQ29sdW1uc1N0YXRlKHsgcGFnZVNldHRpbmc6IHBhZ2VJbmZvIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFwcGx5IHVzZXIgcm9sZSBwZXJtaXNzaW9ucyBvbiBncmlkIGNvbHVtbnNcbiAgYXBwbHlDb2x1bW5zUGVybWlzc2lvbnMoKSB7XG4gICAgaWYgKHRoaXMuY29sdW1ucykge1xuICAgICAgbGV0IHRvdGFsRmllbGRzOiBudW1iZXIgPSAwO1xuICAgICAgbGV0IGhpZGRlbkZpZWxkczogbnVtYmVyID0gMDtcblxuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogSUdyaWRDb2x1bW4pID0+IHtcbiAgICAgICAgbGV0IHBlcm1pc3Npb25zOiBJUGVybWlzc2lvbltdID0gY29sdW1uLnBlcm1pc3Npb25zO1xuICAgICAgICBsZXQgaGFzVmFsaWRFZGl0UGVybWlzc2lvbiA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChwZXJtaXNzaW9ucyAmJiBwZXJtaXNzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcGVybWlzc2lvbnMuZm9yRWFjaCgocGVybWlzc2lvbikgPT4ge1xuICAgICAgICAgICAgbGV0IGlzVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uLnJvbGVzICYmIHBlcm1pc3Npb24ucm9sZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBwZXJtaXNzaW9uLnJvbGVzLmZvckVhY2goKHJvbGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgdGhpcy5yb2xlcyAmJiB0aGlzLnJvbGVzLmluY2x1ZGVzKHJvbGUpKSB7XG4gICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuVklFVyAmJlxuICAgICAgICAgICAgICAgICFoYXNWYWxpZEVkaXRQZXJtaXNzaW9uXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4uaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuRURJVCkge1xuICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICBoYXNWYWxpZEVkaXRQZXJtaXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRvdGFsRmllbGRzKys7XG4gICAgICAgIGlmIChjb2x1bW4uaGlkZGVuKSB7XG4gICAgICAgICAgaGlkZGVuRmllbGRzKys7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmlzQ29sdW1uSGlkZGVuID0gdG90YWxGaWVsZHMgPiAwICYmIHRvdGFsRmllbGRzID09PSBoaWRkZW5GaWVsZHM7XG4gICAgfVxuICB9XG5cbiAgLy8gYXBwbHkgZ2xvYmFsIHBlcm1pc3Npb25zIG9uIGVudGlyZSBncmlkXG4gIGFwcGx5R3JpZFBlcm1pc3Npb25zKCkge1xuICAgIGlmICh0aGlzLnBlcm1pc3Npb25zICYmIHRoaXMucGVybWlzc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IGhhc1ZhbGlkRWRpdFBlcm1pc3Npb24gPSBmYWxzZTtcblxuICAgICAgLy8gY2hlY2sgaWYgYW55IGNvbHVtbiBoYXMgYW55IHBlcm1pc3Npb25cbiAgICAgIGxldCBoYXNDb2x1bW5QZXJtaXNzaW9ucyA9IHRoaXMuY29sdW1ucz8uc29tZShcbiAgICAgICAgKHgpID0+IHg/LnBlcm1pc3Npb25zICYmIHgucGVybWlzc2lvbnMubGVuZ3RoID4gMFxuICAgICAgKTtcblxuICAgICAgdGhpcy5wZXJtaXNzaW9ucy5mb3JFYWNoKChwZXJtaXNzaW9uKSA9PiB7XG4gICAgICAgIGxldCBpc1ZhbGlkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAgICAgcGVybWlzc2lvbi5yb2xlcy5mb3JFYWNoKChyb2xlKSA9PiB7XG4gICAgICAgICAgaWYgKCFpc1ZhbGlkICYmIHRoaXMucm9sZXMgJiYgdGhpcy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuQ1JVRCAmJiAhaXNWYWxpZCkge1xuICAgICAgICAgIHRoaXMudXNlSW5saW5lQ1JVRCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgIHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLlZJRVcgJiZcbiAgICAgICAgICAhaGFzVmFsaWRFZGl0UGVybWlzc2lvblxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnVzZUlubGluZUNSVUQgPSB0cnVlO1xuICAgICAgICAgIGlmICghaXNWYWxpZCAmJiAhaGFzQ29sdW1uUGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuaXNHcmlkSGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudXNlSW5saW5lQ1JVRCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5FRElUICYmICFpc1ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5pc0dyaWRIaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICBoYXNWYWxpZEVkaXRQZXJtaXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmVkaXRSb3dQZXJtaXNzaW9uID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuREVMRVRFICYmICFpc1ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5kZWxldGVSb3dQZXJtaXNzaW9uID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuQUREUk9XICYmICFpc1ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5hZGRSb3dQZXJtaXNzaW9uID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5vblJvd0FkZC5vYnNlcnZlcnMubGVuZ3RoID09IDApIHRoaXMuYWRkUm93UGVybWlzc2lvbiA9IGZhbHNlO1xuICAgIGlmICh0aGlzLm9uUm93RGVsZXRlLm9ic2VydmVycy5sZW5ndGggPT0gMCkgdGhpcy5kZWxldGVSb3dQZXJtaXNzaW9uID0gZmFsc2U7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2U6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5yZW1haW5pbmdSb3dzRGF0YT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMucm93c0RhdGEgPSBbLi4udGhpcy5yb3dzRGF0YSwgLi4udGhpcy5yZW1haW5pbmdSb3dzRGF0YV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIGlmICghdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgJiYgIXRoaXMuZ3JpZFNlcnZpY2Uucm93VXBkYXRlKSB7XG4gICAgICB0aGlzLnNldEdyaWRJZCgpXG4gICAgICB0aGlzLmNvbXBvbmVudFRhYmxlUmVmID0gdGhpcy50YWJsZTtcbiAgICAgIGxldCBnZXRTZWxlY3RlZENvbCA9IFtdXG4gICAgICBpZiAodGhpcy5hbGxvd0NhY2hpbmcgIT09IGZhbHNlICYmIHRoaXMucGFnaW5hdGlvbikge1xuICAgICAgICB0aGlzLmFsbG93Q2FjaGluZyA9IHRoaXMucGFnaW5hdGlvbjtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ1NldEZpbHRlcnMtJyArIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsKTtcbiAgICAgIH1cbiAgICAgIC8vIGFkZCBkZWZhdWx0Um93IGluIHBhZ2luYXRpb24gYXJyYXlcbiAgICAgIGlmICghdGhpcy5zZXRQYWdpbmF0aW9uTGVuZ3RoLmluY2x1ZGVzKHRoaXMuZGVmYXVsdFJvd3MpKSB7XG4gICAgICAgIHRoaXMuc2V0UGFnaW5hdGlvbkxlbmd0aC51bnNoaWZ0KHRoaXMuZGVmYXVsdFJvd3MpO1xuICAgICAgfVxuICAgICAgY29uc3QgaGFzQ29sdW1uczogYm9vbGVhbiA9IHRoaXMuY29sdW1ucyAmJiB0aGlzLmNvbHVtbnMubGVuZ3RoID4gMDtcbiAgICAgIGlmIChoYXNDb2x1bW5zKSB7XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0Q29sdW1uRmllbGRzKHRoaXMuY29sdW1ucyk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUb2dnbGVDb2x1bW5zID0gdGhpcy5jb2x1bW5zPy5maWx0ZXIoKHgpID0+ICF4LmhpZGRlbiAmJiAheC5zaG93SW5Nb3JlKTtcbiAgICAgICAgY29uc3QgY3VycmVudFVzZXJJbmZvID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnQ3VycmVudFVzZXJJbmZvJykpO1xuICAgICAgICAvL3NldCBnZXRTZWxlY3RlZENvbCBjb2x1bW5zIGZvciB0b2dnbGVDb3VsbW4gXG4gICAgICAgIGlmICh0aGlzLmFsbG93UGVyc2lzdGVuY2UgJiYgdGhpcy5hbGxvd0NvbHVtblRvZ2dsZSkge1xuICAgICAgICAgIGlmIChjdXJyZW50VXNlckluZm8gJiYgY3VycmVudFVzZXJJbmZvLnBhZ2VTZXR0aW5nKSB7XG4gICAgICAgICAgICBnZXRTZWxlY3RlZENvbCA9IHRoaXMuZ2V0U2VsZWN0ZWRDb2xGcm9tTG9jYWxTdHJvcmFnZShKU09OLnBhcnNlKGN1cnJlbnRVc2VySW5mby5wYWdlU2V0dGluZykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJvbGVzID0gdGhpcy5hdXRoU2VydmljZS5nZXRVc2VyUm9sZXMoKTtcblxuICAgICAgICAvLyBhcHBseSB1c2VyIHJvbGUgcGVybWlzc2lvbnMgb24gZ3JpZCBjb2x1bW5zXG4gICAgICAgIHRoaXMuYXBwbHlDb2x1bW5zUGVybWlzc2lvbnMoKTtcblxuICAgICAgICAvLyBhcHBseSBnbG9iYWwgcGVybWlzc2lvbnMgb24gZW50aXJlIGdyaWRcbiAgICAgICAgdGhpcy5hcHBseUdyaWRQZXJtaXNzaW9ucygpO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnM/LmZpbHRlcigoeCkgPT4gKHguc2hvdyA9PT0gdHJ1ZSB8fCB4LnNob3cgPT09IHVuZGVmaW5lZCkgJiYgIXguaGlkZGVuICYmICF4LnNob3dJbk1vcmUpO1xuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgLy9sb2FkIGNvbHVtbiB3aXRkdGggb24gcGFnZSByZWxvYWRcbiAgICAgICAgdGhpcy5sb2FkQ29sdW1uV2lkdGhzKCk7XG4gICAgICAgIGlmICh0aGlzLnJvd3NEYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlLnNldFRvb2x0aXAoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNoZWNraW5nIGZpbHRlciBleGlzdCBvciBub3RcbiAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5fc2VsZWN0ZWRDb2x1bW5zLnNvbWUoXG4gICAgICAgICAgKGNvbHVtbikgPT4gY29sdW1uLmZpbHRlcmluZyA9PT0gdW5kZWZpbmVkIHx8IGNvbHVtbi5maWx0ZXJpbmcgPT09IHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGZpbHRlciA9PT0gZmFsc2UpIHtcbiAgICAgICAgICB0aGlzLmhpZGVGaWx0ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmaWx0ZXJGb2N1cyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyBzZXQgaXNSZXF1aXJlZCB0cnVlIGZvciByZXF1aXJlZCBjb2x1bW4gdG8gc2hvdyBhc3RyaWMgaW4gY29sdW1uIGhlYWRlclxuICAgICAgICAgIGlmIChjb2x1bW4udmFsaWRhdGlvbnM/LmZpbmQodmFsaWRhdGlvbiA9PiB2YWxpZGF0aW9uLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuUkVRVUlSRUQpKSB7XG4gICAgICAgICAgICBjb2x1bW4uaXNSZXF1aXJlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHNldCBudW1lcmljIG51bGwgb3IgdW5kZWZpbmUgZGF0YSBkZWZhdWx0IHZhbHVlXG4gICAgICAgICAgaWYgKChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk5VTUVSSUMgfHwgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOIHx8IGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuVEVYVCB8fCBjb2x1bW4udHlwZSA9PT0gdW5kZWZpbmVkIHx8IGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSB8fCBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOKSAmJiBjb2x1bW4udmFsdWUgJiYgdGhpcy5yb3dzRGF0YT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGNvbHVtbi52YWx1ZSAmJiAocm93W2NvbHVtbi5maWVsZF0gPT09IG51bGwgfHwgcm93W2NvbHVtbi5maWVsZF0gPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy52YWx1ZSA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy52YWx1ZSA6IGNvbHVtbi52YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgLy9zZXQgdGV4dFR5cGUgZm9yIGEgY29sdW1uIHRoYXQgaXMgZm9ybWF0dGVkIHRvIGJlIGEgcGFzc3dvcmRcbiAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdCA9PSAncGFzc3dvcmQnICYmICghY29sdW1uLnRleHRUeXBlIHx8IGNvbHVtbi50ZXh0VHlwZSAhPT0gJ3RleHQnKSkge1xuICAgICAgICAgICAgY29sdW1uLnRleHRUeXBlID0gJ3Bhc3N3b3JkJztcbiAgICAgICAgICB9IGVsc2UgY29sdW1uLnRleHRUeXBlID0gJ3RleHQnO1xuICAgICAgICAgIC8vIGNvbnZlcnQgc3RyaW5nIHRpbWUgaW50byB0aGUgZGF0ZVxuICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpIHtcbiAgICAgICAgICAgIGlmIChjb2x1bW4udGltZU9ubHkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSAmJlxuICAgICAgICAgICAgICAgICAgKHJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1BNJykgfHxcbiAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0udG9TdHJpbmcoKS5pbmNsdWRlcygnQU0nKSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gc2V0VGltZUluRGF0ZShyb3dbY29sdW1uLmZpZWxkXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNvbHVtbi5taW51dGVzSW50ZXJ2YWwpIHtcbiAgICAgICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyb3dbY29sdW1uLmZpZWxkXSAmJiB0eXBlb2Ygcm93W2NvbHVtbi5maWVsZF0gPT09ICdzdHJpbmcnICYmICFyb3dbY29sdW1uLmZpZWxkXS5pbmNsdWRlcygnVCcpKSB7XG4gICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IG5ldyBEYXRlKHJvd1tjb2x1bW4uZmllbGRdIGFzIHN0cmluZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF0aGlzLmhpZGVGaWx0ZXIgJiYgY29sdW1uLmZpbHRlclZhbHVlICYmIGNvbHVtbi5maWx0ZXIgJiYgY29sdW1uLmZpbHRlcmluZyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIC8vIHNldCBmaWx0ZXIgdmFsdWVcbiAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBzZXQgRGlzcGxheVRleHQgd2hlbiB2YWx1ZSBpcyBpbiBjdXJseSBicmFja2V0cy5cbiAgICAgICAgICB0aGlzLnNldERpc3BsYXlUZXh0VmFsdWUoY29sdW1uKTtcbiAgICAgICAgICB0aGlzLnNldERpc3BsYXlGaWVsZFZhbHVlKGNvbHVtbik7XG5cbiAgICAgICAgICAvL0FnZ3JlZ2F0ZSBzY2VuYXJpb1xuICAgICAgICAgIGlmIChjb2x1bW4uYWdncmVnYXRlICYmIGNvbHVtbi5hZ2dyZWdhdGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5hZ2dyZWdhdGVGb290ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IHNlYXJjaEZpbHRlcnM7XG4gICAgICAgICAgaWYgKCF0aGlzLnNvZnRDYWNoaW5nICYmIHRoaXMudGFibGU/LmlkKSB7XG4gICAgICAgICAgICBzZWFyY2hGaWx0ZXJzID0gSlNPTi5wYXJzZShcbiAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1NldEZpbHRlcnMtJyArIHRoaXMudGFibGU/LmlkICsgdGhpcy5jdXJyZW50VXJsKSBhcyBhbnlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRhYmxlPy5pZCkge1xuICAgICAgICAgICAgc2VhcmNoRmlsdGVycyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3RoaXMudGFibGU/LmlkICsgdGhpcy5jdXJyZW50VXJsXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuaGlkZUZpbHRlciAmJlxuICAgICAgICAgICAgc2VhcmNoRmlsdGVycyAmJlxuICAgICAgICAgICAgc2VhcmNoRmlsdGVycy5maWx0ZXJzICYmXG4gICAgICAgICAgICBzZWFyY2hGaWx0ZXJzLmZpbHRlcnM/Lmxlbmd0aCA+IDBcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHNlYXJjaEZpbHRlcnMuZmlsdGVycy5mb3JFYWNoKCh4OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHguZmllbGQgPT09IGNvbHVtbi5maWVsZCkge1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gJ2NhbGVuZGFyJyAmJiB4LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBkYXRlU3RyaW5nID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oeC52YWx1ZSwgJ01NLWRkLXl5eXknKTtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9IG5ldyBEYXRlKGRhdGVTdHJpbmcgYXMgc3RyaW5nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTVVMVElTRUxFQ1QgJiYgIUFycmF5LmlzQXJyYXkoeC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9IHgudmFsdWU/LnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh4LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4uZmlsdGVyVmFsdWUgPSBjb2x1bW4udHlwZSA9PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmIGNvbHVtbi5oYXNPd25Qcm9wZXJ0eSgnZmlsdGVyVmFsdWVfb2JqJykgPyBjb2x1bW5bJ2ZpbHRlclZhbHVlX29iaiddPy50ZXh0IDogeC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBjb252ZXJ0aW5nIGRpc3BsYXlGaWVsZCB0b0xvd2VyY2FzZVxuICAgICAgICAgIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICBjb2x1bW4uZGlzcGxheUZpZWxkID0gY29sdW1uLmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBzZXQgQXV0b0NvbXBsZXRlIERhdGFcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURSAmJlxuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YSAmJlxuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YT8ubGVuZ3RoID4gMFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgLy8gY29udmVydCBzdHJpbmcgdGhhdCBjb250YWlucyBjb21tYSBpbnRvIGFycmF5c1xuICAgICAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJzsnKSkge1xuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF1cbiAgICAgICAgICAgICAgICAgID8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgLnNwbGl0KCc7JylcbiAgICAgICAgICAgICAgICAgID8ubWFwKCh2YWx1ZTogYW55KSA9PiAoeyBbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV06IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXSwgW2NvbHVtbi5vcHRpb25MYWJlbD8udG9Mb3dlckNhc2UoKV06IHZhbHVlLCBbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXTogdmFsdWUgfSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGtleTogYW55ID0gT2JqZWN0LmtleXMocm93KS5maW5kKCh4KSA9PiB4ID09PSBjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgIC8vIGNvbnZlcnQgc2ltcGxlIHN0cmluZyBpbnRvIGFycmF5XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyb3dba2V5XSkgJiYgcm93W2tleV0pIHtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgICAgICAgcm93W2tleV0gPSBbeyBbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV06IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXSwgW2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV06IHJvd1trZXldIH1dO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBpZiAoY29sdW1uLm9wdGlvbkxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd1trZXldID0gW3sgW2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV06IHJvd1trZXldLCBbY29sdW1uLm9wdGlvbkxhYmVsPy50b0xvd2VyQ2FzZSgpXTogcm93W2tleV0gfV07XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByb3dba2V5XSA9IFt7IFtjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldOiByb3dba2V5XSB9XTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vd2hlbiB3ZSBhZGQgYSBuZXcgcm93LCBpdCBzZXQgdGhlIGRlZmF1bHQgdmFsdWVcbiAgICAgICAgICBpZiAoY29sdW1uLnZhbHVlKSB7XG4gICAgICAgICAgICBsZXQga2V5ID0gT2JqZWN0LmtleXModGhpcy5uZXdHcmlkUm93KS5maW5kKCh4KSA9PiB4Py50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgICB0aGlzLm5ld0dyaWRSb3dbY29sdW1uLmZpZWxkXSA9IGNvbHVtbi52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LKSB7XG4gICAgICAgICAgICB0aGlzLnNldExpbmtUYWJTZXR0aW5ncyhjb2x1bW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuYWxsb3dQZXJzaXN0ZW5jZSAmJiBnZXRTZWxlY3RlZENvbD8ubGVuZ3RoID4gMCAmJiB0aGlzLmFsbG93Q29sdW1uVG9nZ2xlKSB7XG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3RDb2x1bW5zKGdldFNlbGVjdGVkQ29sKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldFNlbGVjdENvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBnbG9iYWxGaWx0ZXJCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnNlYXJjaGJ0bklkKTtcbiAgICAgICAgaWYgKGdsb2JhbEZpbHRlckJ0bikge1xuICAgICAgICAgIHRoaXMuc2hvd0ZpbHRlcmJ0biA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZS5yb3dzKSB7XG4gICAgICAgICAgY29uc3QgY2xhc3NFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaGlnaGxpZ2h0ZWQtcm93Jyk7XG4gICAgICAgICAgaWYgKGNsYXNzRWxlbWVudC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjbGFzc0VsZW1lbnRbMF0uc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCEodGhpcy5wYWdpbmF0aW9uICYmIHRoaXMuZWRpdEFsbFJvd3MpICYmIHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc29ydEljb25IaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ3VzdG9tU29ydGluZygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5lZGl0QWxsUm93cyAmJiB0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwICYmIHRoaXMuY29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZWRpdEFsbFJvd3NBdE9uY2UoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0RHJvcGRvd25kYXRhVmFsdWUgPSB0cnVlO1xuICAgICAgY29uc3QgZ2xvYmFsU2VhcmNoYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dsb2JhbFNlYXJjaGJ0bicpO1xuICAgICAgaWYgKGdsb2JhbFNlYXJjaGJ0bikge1xuICAgICAgICB0aGlzLnNlYXJjaEdyaWRGaWx0ZXIgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwICYmIHRoaXMuZ2VuZXJhdGVSb3dzRGF0YUNvcHkpIHtcbiAgICAgICAgdGhpcy5yb3dzRGF0YUNvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMucm93c0RhdGEpKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5zdG9wRGlhbG9nQ2xvc2UpIHtcbiAgICAgICAgdGhpcy5kZWZhdWx0Um93Q2xpY2soKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5yb3dVcGRhdGVDaGFuZ2UgPSBmYWxzZTtcbiAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IGZhbHNlO1xuXG4gIH1cblxuICBoYW5kbGVDdXN0b21Tb3J0aW5nKCkge1xuICAgIHRoaXMuUGFnZUNoYW5nZSA9IGZhbHNlO1xuICAgIGNvbnN0IHsgZmllbGQsIGRpcmVjdGlvbiB9ID0gdGhpcy5zb3J0RGF0YTtcbiAgICBpZiAoIWZpZWxkKSByZXR1cm47XG5cbiAgICBjb25zdCBBU0MgPSBkaXJlY3Rpb24gPT09IEVHcmlkU29ydERpcmVjdGlvbi5BU0M7XG4gICAgY29uc3Qgc29ydGVkID0gWy4uLnRoaXMucm93c0RhdGFdLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZSA9ICh2YWw6IGFueSkgPT5cbiAgICAgICAgdmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkID8gJycgOiBTdHJpbmcodmFsKS50cmltKCk7XG5cbiAgICAgIGNvbnN0IGFWYWwgPSBub3JtYWxpemUoYVtmaWVsZF0pO1xuICAgICAgY29uc3QgYlZhbCA9IG5vcm1hbGl6ZShiW2ZpZWxkXSk7XG5cbiAgICAgIGNvbnN0IGFFbXB0eSA9IGFWYWwgPT09ICcnO1xuICAgICAgY29uc3QgYkVtcHR5ID0gYlZhbCA9PT0gJyc7XG5cbiAgICAgIGlmIChhRW1wdHkgJiYgYkVtcHR5KSByZXR1cm4gMDtcbiAgICAgIGlmIChhRW1wdHkpIHJldHVybiBBU0MgPyAtMSA6IDE7XG4gICAgICBpZiAoYkVtcHR5KSByZXR1cm4gQVNDID8gMSA6IC0xO1xuXG4gICAgICBjb25zdCBhTnVtID0gcGFyc2VGbG9hdChhVmFsKTtcbiAgICAgIGNvbnN0IGJOdW0gPSBwYXJzZUZsb2F0KGJWYWwpO1xuICAgICAgaWYgKCFpc05hTihhTnVtKSAmJiAhaXNOYU4oYk51bSkpIHJldHVybiBBU0MgPyBhTnVtIC0gYk51bSA6IGJOdW0gLSBhTnVtO1xuXG4gICAgICByZXR1cm4gQVNDID8gYVZhbC5sb2NhbGVDb21wYXJlKGJWYWwpIDogYlZhbC5sb2NhbGVDb21wYXJlKGFWYWwpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yb3dzRGF0YSA9IHNvcnRlZDtcbiAgICB0aGlzLnRhYmxlLnNvcnRGaWVsZCA9IGZpZWxkO1xuICAgIHRoaXMudGFibGUuc29ydE9yZGVyID0gQVNDID8gMSA6IC0xO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHNldExpbmtUYWJTZXR0aW5ncyhjb2x1bW46IElHcmlkQ29sdW1uKSB7XG4gICAgY29uc3QgdXNlclNldHRpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIlVzZXJTZXR0aW5nXCIpO1xuICAgIGlmICh1c2VyU2V0dGluZykge1xuICAgICAgY29uc3QgcGFyc2VkU2V0dGluZyA9IEpTT04ucGFyc2UodXNlclNldHRpbmcpO1xuICAgICAgaWYgKGNvbHVtbj8udGFyZ2V0VXNlVXNlclByZWYpIHtcbiAgICAgICAgY29sdW1uLnRhcmdldCA9IHBhcnNlZFNldHRpbmc/LnZhbHVlID09PSBcIm9wZW5MaW5rSW5DdXJyZW50VGFiXCIgPyBFR3JpZGxpbmsuU0VMRiA6IEVHcmlkbGluay5CTEFOSztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRHcmlkSWQoKSB7XG4gICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgIGxldCB0YWJsZXMgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdwLXRhYmxlJyk7XG4gICAgaWYgKHRhYmxlcz8ubGVuZ3RoID4gMCkge1xuICAgICAgdGFibGVzLmZvckVhY2goKHRhYmxlLCBpbmRleCkgPT4ge1xuICAgICAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoJ2lkJywgdGhpcy5jdXJyZW50VXJsICsgY291bnRlcisrKTtcbiAgICAgIH0pXG4gICAgfVxuICB9XG4gIHNldFNlbGVjdENvbHVtbnMoY29sdW1ucykge1xuICAgIHRoaXMuX3NlbGVjdGVkQ29sdW1ucyA9IFtdO1xuICAgIGNvbHVtbnM/LmZvckVhY2goKHgsIGkpID0+IHtcbiAgICAgIGlmICgoeC5zaG93ID09PSB0cnVlIHx8IHguc2hvdyA9PT0gdW5kZWZpbmVkKSAmJiAheC5oaWRkZW4gJiYgIXguc2hvd0luTW9yZSkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnNbaV0pIHtcbiAgICAgICAgICB4LnZhbHVlID0gdGhpcy5zZWxlY3RlZENvbHVtbnNbaV0udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zLnB1c2goeCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhdXRvQ29tcGxldGVTZWxlY3RlZFZhbHVlKHJvdzogYW55LCBjb2x1bW46IElHcmlkQ29sdW1uLCB2YWx1ZSkge1xuICAgIGlmIChjb2x1bW4ub3B0aW9uTGFiZWwpIHtcbiAgICAgIGNvbnN0IHZhbHVlS2V5ID0gY29sdW1uLm9wdGlvblZhbHVlID8gY29sdW1uLm9wdGlvblZhbHVlIDogY29sdW1uLmZpZWxkO1xuICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBbLi4ucm93W2NvbHVtbi5maWVsZF0sIHtcbiAgICAgICAgW2NvbHVtbi5vcHRpb25MYWJlbD8udG9Mb3dlckNhc2UoKV06IHZhbHVlW2NvbHVtbi5vcHRpb25MYWJlbD8udG9Mb3dlckNhc2UoKV0sIFt2YWx1ZUtleT8udG9Mb3dlckNhc2UoKV06IHZhbHVlW3ZhbHVlS2V5Py50b0xvd2VyQ2FzZSgpXSxcbiAgICAgICAgW2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV06IHZhbHVlW3ZhbHVlS2V5Py50b0xvd2VyQ2FzZSgpXVxuICAgICAgfV07XG4gICAgICBjb25zdCBpbmRleCA9IHJvd1tjb2x1bW4uZmllbGRdPy5maW5kSW5kZXgoKHgpID0+IEpTT04uc3RyaW5naWZ5KHgpID09PSBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgICAgcm93W2NvbHVtbi5maWVsZF0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICAvLyBzZXQgRGlzcGxheVRleHQgd2hlbiB2YWx1ZSBpcyBpbiBjdXJseSBicmFja2V0cy5cbiAgc2V0RGlzcGxheVRleHRWYWx1ZShjb2x1bW46IElHcmlkQ29sdW1uKSB7XG4gICAgdGhpcy5yb3dzRGF0YT8uZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSyB8fFxuICAgICAgICBFR3JpZENvbHVtblR5cGUuRElBTE9HIHx8XG4gICAgICAgIEVHcmlkQ29sdW1uVHlwZS5JRlJBTUVcbiAgICAgICkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddO1xuICAgICAgICBpZiAoY29sdW1uLmRpc3BsYXlUZXh0ICYmIGNvbHVtbi5kaXNwbGF5VGV4dC5pbmNsdWRlcygneycpKSB7XG4gICAgICAgICAgY29uc3QgZGlzcGxheVRleHQgPSBjb2x1bW4uZGlzcGxheVRleHRcbiAgICAgICAgICAgIC5yZXBsYWNlKCd7JywgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgnfScsICcnKTtcbiAgICAgICAgICBpZiAoZGlzcGxheVRleHQgJiYgZmllbGQpIHtcbiAgICAgICAgICAgIGZpZWxkLmRpc3BsYXlUZXh0ID0gcm93W2Rpc3BsYXlUZXh0LnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZGlzcGxheVRleHQgJiYgZmllbGQpIHtcbiAgICAgICAgICBmaWVsZC5kaXNwbGF5VGV4dCA9IGNvbHVtbi5kaXNwbGF5VGV4dDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0RGlzcGxheUZpZWxkVmFsdWUoY29sdW1uOiBJR3JpZENvbHVtbikge1xuICAgIHRoaXMucm93c0RhdGE/LmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSykge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddO1xuICAgICAgICBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZCA9IGNvbHVtbi5kaXNwbGF5RmllbGQ7XG4gICAgICAgICAgaWYgKGRpc3BsYXlGaWVsZCAmJiBmaWVsZCkge1xuICAgICAgICAgICAgZmllbGQuZGlzcGxheUZpZWxkID0gcm93W2Rpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXTtcblxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkICYmIGZpZWxkKSB7XG4gICAgICAgICAgZmllbGQuZGlzcGxheUZpZWxkID0gY29sdW1uLmRpc3BsYXlGaWVsZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25UZXh0YXJlYUJsdXIoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpIHtcbiAgICBjb25zdCBpZCA9IGNvbHVtbi5maWVsZCArICctJyArIHJvd1t0aGlzLmRhdGFLZXldO1xuICAgIGNvbnN0IHRleHRhcmVhID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgdGV4dGFyZWFbZGF0YS1jZWxsPVwiJHtpZH1cIl1gKSBhcyBIVE1MVGV4dEFyZWFFbGVtZW50O1xuXG4gICAgaWYgKHRleHRhcmVhKSB7XG4gICAgICB0ZXh0YXJlYS5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICAgIHRleHRhcmVhLnN0eWxlLndpZHRoID0gJyc7XG4gICAgfVxuICAgIHRoaXMuZWRpdGluZ0NlbGwgPSBudWxsO1xuICAgIHRoaXMub25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KTtcbiAgfVxuXG4gIG9uVGV4dGFyZWFFbnRlcihldmVudDogS2V5Ym9hcmRFdmVudCwgY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpIHtcbiAgICBpZiAoZXZlbnQuY3RybEtleSAmJiBldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLm9uVGV4dGFyZWFCbHVyKGNvbHVtbiwgcm93KTtcbiAgICB9XG4gIH1cbiAgb25JbnB1dEZvY3VzKGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdzogYW55KSB7XG4gICAgaWYgKHRoaXMuZWRpdGluZ0NlbGwgJiYgIXRoaXMuZWRpdGluZ0NlbGwuc3RhcnRzV2l0aChjb2x1bW4uZmllbGQpKSB7XG4gICAgICB0aGlzLmVkaXRpbmdDZWxsID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgc2V0TnVtZXJpY01pbkZyYWN0aW9uKGNvbHVtbjogYW55KSB7XG4gICAgbGV0IG1pbkZyYWN0aW9uRGlnaXRzID0gMjtcbiAgICBpZiAoY29sdW1uPy5mb3JtYXQ/LnR5cGUgPT09ICdwZXJjZW50JyAmJiAhY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8ubWluRnJhY3Rpb25EaWdpdHMgJiYgIWNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm8pIHtcbiAgICAgIG1pbkZyYWN0aW9uRGlnaXRzID0gMDtcbiAgICB9IGVsc2UgaWYgKGNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/Lm1pbkZyYWN0aW9uRGlnaXRzICE9IG51bGwpIHtcbiAgICAgIG1pbkZyYWN0aW9uRGlnaXRzID0gY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMubWluRnJhY3Rpb25EaWdpdHM7XG4gICAgfSBlbHNlIGlmIChjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvKSB7XG4gICAgICBtaW5GcmFjdGlvbkRpZ2l0cyA9IE51bWJlcihjb2x1bW4uZm9ybWF0LmZvcm1hdFBhcmFtcy5kaWdpdHNJbmZvKTtcbiAgICB9XG4gICAgcmV0dXJuIG1pbkZyYWN0aW9uRGlnaXRzO1xuICB9XG5cbiAgc2V0TnVtZXJpY01heEZyYWN0aW9uKGNvbHVtbjogYW55KSB7XG4gICAgbGV0IG1heEZyYWN0aW9uRGlnaXRzID0gMjtcbiAgICBpZiAoY29sdW1uPy5mb3JtYXQ/LnR5cGUgPT09ICdwZXJjZW50JyAmJiAhY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8ubWF4RnJhY3Rpb25EaWdpdHMgJiYgIWNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm8pIHtcbiAgICAgIG1heEZyYWN0aW9uRGlnaXRzID0gMDtcbiAgICB9IGVsc2UgaWYgKGNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/Lm1heEZyYWN0aW9uRGlnaXRzICE9IG51bGwpIHtcbiAgICAgIG1heEZyYWN0aW9uRGlnaXRzID0gY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMubWF4RnJhY3Rpb25EaWdpdHM7XG4gICAgfSBlbHNlIGlmIChjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvKSB7XG4gICAgICBtYXhGcmFjdGlvbkRpZ2l0cyA9IE51bWJlcihjb2x1bW4uZm9ybWF0LmZvcm1hdFBhcmFtcy5kaWdpdHNJbmZvKTtcbiAgICB9XG4gICAgcmV0dXJuIG1heEZyYWN0aW9uRGlnaXRzO1xuICB9XG5cbiAgLy8gc2V0IHRoZSBmb3JtYXQgb2YgY3VycmVuY3kgJiYgbnVtYmVyICYmIGRlY2ltYWwgJiYgcGVyY2VudFxuICBzZXROdW1lcmljRm9ybWF0KGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIHJvdyA9IG9iakNvbnZlcnRUb0xvd2VyKHJvdyk7XG4gICAgbGV0IHZhbHVlOiBhbnkgPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHRcbiAgICAgID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0XG4gICAgICA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgPyByb3dbcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV1cbiAgICAgICAgOiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICA/IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgOiAocm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LnRleHQgfHwgcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LnRleHQgPT09IDAgfHwgcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LnRleHQgPT09IG51bGwpXG4gICAgICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy50ZXh0IDogcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV07XG4gICAgaWYgKHRoaXMudHlwZU9mKHZhbHVlKSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPT09IDApIHtcbiAgICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgbGV0IGZvcm1hdFBhcmFtcyA9IGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcztcbiAgICBpZiAoY29sdW1uLmZvcm1hdCAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgICBzd2l0Y2ggKGNvbHVtbi5mb3JtYXQ/LnR5cGUpIHtcbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuQ1VSUkVOQ1k6XG4gICAgICAgICAgdmFsdWUgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoXG4gICAgICAgICAgICBmb3JtYXRQYXJhbXM/LmxvY2FsZSA/IGZvcm1hdFBhcmFtcy5sb2NhbGUgOiAnZW4tVVMnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdHlsZTogJ2N1cnJlbmN5JyxcbiAgICAgICAgICAgICAgY3VycmVuY3k6IGZvcm1hdFBhcmFtcz8uY3VycmVuY3kgPyBmb3JtYXRQYXJhbXMuY3VycmVuY3kgOiAnVVNEJyxcbiAgICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiB0aGlzLnNldE51bWVyaWNNaW5GcmFjdGlvbihjb2x1bW4pLFxuICAgICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IHRoaXMuc2V0TnVtZXJpY01heEZyYWN0aW9uKGNvbHVtbiksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKT8uZm9ybWF0KHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuREVDSU1BTDpcbiAgICAgICAgICB2YWx1ZSA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChcbiAgICAgICAgICAgIGZvcm1hdFBhcmFtcz8ubG9jYWxlID8gZm9ybWF0UGFyYW1zLmxvY2FsZSA6ICdlbi1VUycsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0eWxlOiAnZGVjaW1hbCcsXG4gICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogdGhpcy5zZXROdW1lcmljTWluRnJhY3Rpb24oY29sdW1uKSxcbiAgICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiB0aGlzLnNldE51bWVyaWNNYXhGcmFjdGlvbihjb2x1bW4pLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk/LmZvcm1hdCh2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLlBFUkNFTlQ6XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSArICclJztcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLy9DaGFuZ2UgZHJvcGRvd24gdmx1ZSBiYXNlZCBvbiBvcHRpb24gbGFiZWwgYW5kIG9wdGlvbnZhbHVlXG4gIHNldERyb3Bkb3duVmFsdWUoY29sdW1uOiBJR3JpZENvbHVtbiwgc2VsZWN0ZWRSb3c/OiBhbnksIGNoYW5nZT86IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5yb3dzRGF0YSAmJiB0aGlzLnJvd3NEYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhyb3cpPy5maW5kKChrZXkpID0+IGtleSA9PT0gY29sdW1uLmZpZWxkKSkge1xuICAgICAgICAgIGlmIChjb2x1bW4pIHtcbiAgICAgICAgICAgIGNvbHVtbi5vcHRpb25MYWJlbCA9IGNvbHVtbi5vcHRpb25MYWJlbFxuICAgICAgICAgICAgICA/IGNvbHVtbi5vcHRpb25MYWJlbFxuICAgICAgICAgICAgICA6ICdsYWJlbCc7XG4gICAgICAgICAgICBjb2x1bW4ub3B0aW9uVmFsdWUgPSBjb2x1bW4ub3B0aW9uVmFsdWVcbiAgICAgICAgICAgICAgPyBjb2x1bW4ub3B0aW9uVmFsdWVcbiAgICAgICAgICAgICAgOiAndmFsdWUnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbHVtbi5kYXRhPy5maW5kKFxuICAgICAgICAgICAgKHJlY29yZDogYW55KSA9PlxuICAgICAgICAgICAgICByZWNvcmRbY29sdW1uLm9wdGlvblZhbHVlXT8udG9TdHJpbmcoKSA9PT1cbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKClcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGVkaXRlZFJvdyA9IHNlbGVjdGVkUm93ICYmIE9iamVjdC5rZXlzKHNlbGVjdGVkUm93KS5sZW5ndGggPiAwID8gc2VsZWN0ZWRSb3dbdGhpcy5kYXRhS2V5XSA9PT0gcm93W3RoaXMuZGF0YUtleV0gOiBmYWxzZTtcbiAgICAgICAgICBpZiAodmFsdWUgJiYgZWRpdGVkUm93KSB7XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHZhbHVlW2NvbHVtbi5vcHRpb25WYWx1ZV07XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSAmJiBjaGFuZ2UgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHZhbHVlW2NvbHVtbi5vcHRpb25MYWJlbF07XG4gICAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10pIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ11bJ29wdGlvblZhbHVlJ10gPSB2YWx1ZVtjb2x1bW4ub3B0aW9uVmFsdWVdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gPSB7IG9wdGlvblZhbHVlOiB2YWx1ZVtjb2x1bW4ub3B0aW9uVmFsdWVdIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvL21hbmlwdWxhdGUgY2hlY2tib3ggc3RyaW5nIHZhbHVlIHRvIHRydWUgYW5kIGZhbHNlLlxuICBjaGFuZ2VDaGVja2JveFN0cmluZ1ZhbHVlKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuY29sdW1ucyAmJlxuICAgICAgdGhpcy5yb3dzRGF0YSAmJlxuICAgICAgdGhpcy5yb3dzRGF0YS5sZW5ndGggPiAwICYmXG4gICAgICB0aGlzLmNvbHVtbnMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmIHRoaXMuc2V0RHJvcGRvd25kYXRhVmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnNldERyb3Bkb3duVmFsdWUoY29sdW1uLCB7fSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICh0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGRdID09PSAnc3RyaW5nJykgJiZcbiAgICAgICAgICAgICAgICAocm93W2NvbHVtbi5maWVsZF0gPT09ICcxJyB8fCByb3dbY29sdW1uLmZpZWxkXSA9PT0gJzAnKSkgfHxcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPT09ICdZJyB8fFxuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ04nXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPVxuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID09PSAnMScgfHwgcm93W2NvbHVtbi5maWVsZF0gPT09ICdZJ1xuICAgICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHJvd0RhdGFcbiAgICogUGFzc2VzIGRhdGEgb2YgY2xpY2tlZCByb3cgdG8gcGFyZW50XG4gICAqL1xuICBoYW5kbGVSb3dDbGljayhyb3dEYXRhOiBhbnkpIHtcbiAgICB0aGlzLnJvd0NsaWNrRGF0YSA9IHJvd0RhdGE7XG4gICAgaWYgKCF0aGlzLmVkaXRBbGxSb3dzKSB7XG4gICAgICB0aGlzLm9uUm93Q2xpY2suZW1pdChyb3dEYXRhKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dSZWNvcmQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLy8gaW52b2tlIG9uUm93Q2xpY2sgZXZlbnQgd2hlbiBvbmx5IG9uZSByZWNvcmQgZXhpc3Q7XG4gIGRlZmF1bHRSb3dDbGljaygpIHtcbiAgICBsZXQgZGlhbG9nRXhpc3Q6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3AtZGlhbG9nJyk7XG4gICAgaWYgKHRoaXMuY29sdW1ucz8ubGVuZ3RoID4gMCAmJiB0aGlzLnJvd3NEYXRhICYmIHRoaXMucm93c0RhdGEubGVuZ3RoID09PSAxICYmIHRoaXMub25Sb3dDbGljay5vYnNlcnZlcnM/Lmxlbmd0aCAmJiB0aGlzLmdyaWRTZXJ2aWNlLnVzZXJTZWFyY2hlZCAmJiBkaWFsb2dFeGlzdC5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2UudXNlclNlYXJjaGVkID0gZmFsc2U7XG4gICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMykpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlUm93Q2xpY2sodGhpcy5yb3dzRGF0YVswXSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGNvbHVtbkRhdGFcbiAgICogUGFzc2VzIHNvcnRpbmcgaW5mb3JtYXRpb24gdG8gcGFyZW50IG9uIHNvcnQgY2hhbmdlXG4gICAqL1xuICBoYW5kbGVTb3J0Q2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBsZXQgc29ydERpcmVjdGlvbiA9IG51bGw7XG4gICAgbGV0IHNvcnRGaWVsZDogc3RyaW5nID0gJyc7XG4gICAgaWYgKGV2ZW50Lm11bHRpc29ydG1ldGEgJiYgZXZlbnQubXVsdGlzb3J0bWV0YVswXS5vcmRlciAhPSBudWxsKSB7XG4gICAgICBzb3J0RGlyZWN0aW9uID1cbiAgICAgICAgZXZlbnQubXVsdGlzb3J0bWV0YVswXS5vcmRlciA9PSAxXG4gICAgICAgICAgPyBFR3JpZFNvcnREaXJlY3Rpb24uQVNDXG4gICAgICAgICAgOiBFR3JpZFNvcnREaXJlY3Rpb24uREVTQztcbiAgICAgIHNvcnRGaWVsZCA9IGV2ZW50Lm11bHRpc29ydG1ldGFbMF0uZmllbGQ7XG4gICAgfVxuICAgIGxldCBzb3J0czogSUdyaWRTb3J0ID0ge1xuICAgICAgZmllbGQ6IHNvcnRGaWVsZCxcbiAgICAgIGRpcmVjdGlvbjogc29ydERpcmVjdGlvbiBhcyBFR3JpZFNvcnREaXJlY3Rpb24sXG4gICAgICBwcmlvcml0eTogMCxcbiAgICB9O1xuXG4gICAgaWYgKCF0aGlzLnBhZ2luYXRpb24gfHwgKHRoaXMucGFnaW5hdGlvbiAmJiAhdGhpcy5lZGl0QWxsUm93cykpIHtcbiAgICAgIHRoaXMuc29ydERhdGEgPSBzb3J0cztcbiAgICAgIHRoaXMuaGFuZGxlQ3VzdG9tU29ydGluZygpO1xuICAgIH1cbiAgICB0aGlzLm9uU29ydENoYW5nZS5lbWl0KHNvcnRzKTtcbiAgfVxuXG4gIHNob3VsZFJ1blNlcnZlclNpZGUoZXZlbnQ6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICgoZXZlbnQuc29ydEZpZWxkICYmICEodGhpcy5wYWdpbmF0aW9uICYmIHRoaXMuZWRpdEFsbFJvd3MpICYmICF0aGlzLlBhZ2VDaGFuZ2UpIHx8IChldmVudC5tdWx0aVNvcnRNZXRhICYmIGV2ZW50Lm11bHRpU29ydE1ldGEubGVuZ3RoICYmICEodGhpcy5wYWdpbmF0aW9uICYmIHRoaXMuZWRpdEFsbFJvd3MpICYmICF0aGlzLlBhZ2VDaGFuZ2UpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKChldmVudC5zb3J0RmllbGQgJiYgKHRoaXMucGFnaW5hdGlvbiAmJiAhdGhpcy5lZGl0QWxsUm93cykgJiYgdGhpcy5QYWdlQ2hhbmdlKSB8fCAoZXZlbnQubXVsdGlTb3J0TWV0YSAmJiBldmVudC5tdWx0aVNvcnRNZXRhLmxlbmd0aCAmJiAodGhpcy5wYWdpbmF0aW9uICYmICF0aGlzLmVkaXRBbGxSb3dzKSAmJiB0aGlzLlBhZ2VDaGFuZ2UpKSB7XG4gICAgICB0aGlzLmhhbmRsZVNlcnZlclNpZGVFdmVudHMoZXZlbnQpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmF1dG9Mb2FkRGF0YSAmJiB0aGlzLnVzZVNlcnZlclNpZGVFdmVudHM7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIFBhc3NlcyBhcHBsaWVkIGZpbHRlcnMgdG8gcGFyZW50IG9uIGZpbHRlciBjaGFuZ2VcbiAgICovXG4gIGhhbmRsZUZpbHRlckNoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGZpbHRlcjogYW55KSA9PiB7XG4gICAgICBpZiAoIWV2ZW50LmZpbHRlcnNbZmlsdGVyLmZpZWxkXT8udmFsdWUgJiYgIWZpbHRlci52YWx1ZSkge1xuICAgICAgICBmaWx0ZXIudmFsdWUgPSAnJztcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLm9uRmlsdGVyQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCA6IEV2ZW50XG4gICAqIEBwYXJhbSBjb2x1bW5BY3Rpb24gOiBJR3JpZENvbHVtbkFjdGlvblxuICAgKiBAcGFyYW0gcm93IDogYW55XG4gICAqIFN0b3AgdGhlIGNsaWNrIGV2ZW50IHByb3BhZ2F0aW9uIHRvIHBhcmVudFxuICAgKiBDYWxsYmFja3MgdGhlIHJvdyBkYXRhIHRvIHBhcmVudFxuICAgKi9cblxuICAvKipcbiAgICogaW52b2tlIG9uQ2xpY2sgZXZlbnQgJiBvcGVuIElmcmFtZSBpbiBncmlkXG4gICAqL1xuICBncmlkSUZyYW1lKGNvbHVtbjogYW55LCByb3dzOiBhbnksIHJvdzogYW55KSB7XG4gICAgdGhpcy5vbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpO1xuICAgIGNvbnN0IHJlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKElmcmFtZUNvbXBvbmVudCwge1xuICAgICAgaGVhZGVyOiBjb2x1bW4uaGVhZGVyLFxuICAgICAgd2lkdGg6ICc4MCUnLFxuICAgICAgaGVpZ2h0OiAnODAlJyxcbiAgICAgIGNsb3NhYmxlOiB0cnVlLFxuICAgICAgZm9jdXNPblNob3c6IGZhbHNlLFxuICAgICAgZGF0YToge1xuICAgICAgICB2YWx1ZTogcm93cyxcbiAgICAgICAgaUZyYW1lSWQ6IGNvbHVtbi5kaXNwbGF5VGV4dCA/IGNvbHVtbi5kaXNwbGF5VGV4dCA6IGNvbHVtbi5maWVsZCxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy5zZXREeW5hbWljRGlhbG9nUmVmKHJlZik7XG4gICAgY29uc3QgY29tcG9uZW50TmFtZSA9IGNvbHVtbi5jb21wb25lbnQ/Lm5hbWU7XG4gICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgIHRoaXMucGFnZUxvZ2dlclNlcnZpY2Uuc2F2ZVBhZ2VMb2dnZXJJbmZvKHRoaXMucm91dGVyLnVybD8uc3Vic3RyaW5nKDEpLCBjb21wb25lbnROYW1lKTtcbiAgICB9XG4gICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgIC5waXBlKHRha2UoMSkpIC8vIEVtaXQgb25seSBvbmNlIHdoZW4gdGhlIHpvbmUgYmVjb21lcyBzdGFibGVcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBkcmFnZ2FibGVEaWFsb2coY29sdW1uPy5maWVsZCA/IGNvbHVtbj8uZmllbGQgOiBjb2x1bW4/LmhlYWRlcilcbiAgICAgIH0pO1xuICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICBpZiAocmVzICYmIGNvbHVtbi5vblJldHVybikge1xuICAgICAgICBjb2x1bW4ub25SZXR1cm4ocmVzKTtcbiAgICAgIH0gZWxzZSBpZiAocmVzICYmIGNvbHVtbi5vbkNoYW5nZSkge1xuICAgICAgICBjb2x1bW4ub25DaGFuZ2UocmVzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFkZE5ld1Jvdyhyb3c6IGFueSwgYWRkUm93OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLnJlZnJlc2hHcmlkVGVybWluYXRvcigpO1xuICAgIHRoaXMuY29tcG9uZW50VGFibGVSZWYgPSB0aGlzLnRhYmxlO1xuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICBpZiAoY29sLmZpbHRlcj8udHlwZSA9PT0gJ2NhbGVuZGFyJyAmJiBjb2wuY29tcG9uZW50KSB7XG4gICAgICAgIChhZGRSb3cgPyB0aGlzLnJvd3NEYXRhWzBdIDogcm93KVtjb2wuZmllbGQgKyAnX3NlY29uZFR5cGUnXSA9IEVHcmlkQ29sdW1uVHlwZS5EQVRFO1xuICAgICAgfVxuICAgICAgaWYgKGNvbC5hZ2dyZWdhdGU/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLmFnZ3JlZ2F0ZUZvb3RlciA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0QWdncmVnYXRlVGV4dChjb2wpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uVHlwZSA9PT0gRUdyaWRTZWxlY3Rpb25UeXBlLk1VTFRJUExFICYmIHRoaXMuYXV0b0NoZWNrTmV3Um93KSB7XG4gICAgICBjb25zdCBhZGRlZFJvdyA9IHRoaXMucm93c0RhdGEgJiYgdGhpcy5yb3dzRGF0YVswXTtcbiAgICAgIGlmIChhZGRlZFJvdyAmJiAhYWRkZWRSb3cuX2lzRWRpdGVkKSB7XG4gICAgICAgIGFkZGVkUm93Ll9pc0VkaXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRSb3dzKSB0aGlzLnNlbGVjdGVkUm93cyA9IFtdO1xuXG4gICAgICBpZiAoYWRkZWRSb3cgJiYgIXRoaXMuc2VsZWN0ZWRSb3dzLnNvbWUociA9PiByLmlkID09PSBhZGRlZFJvdy5pZCkpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBbLi4udGhpcy5zZWxlY3RlZFJvd3MsIGFkZGVkUm93XTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2hlY2tsaXN0ID0gWy4uLnRoaXMuc2VsZWN0ZWRSb3dzXTtcbiAgICAgIHRoaXMucm93Q2xpY2tEYXRhID0gYWRkZWRSb3c7XG4gICAgICB0aGlzLmFkZE5ld1Jvd0NoZWNrID0gdHJ1ZTtcbiAgICAgIHRoaXMuZHJvcGRvd25JbnB1dCA9IGZhbHNlO1xuICAgICAgdGhpcy5zb3J0RGlzYWJsZWQgPSB0cnVlO1xuICAgICAgdGhpcy5vbk11bHRpU2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpXG4gICAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICAgIHRoaXMub25HcmlkUm93QWRkLmVtaXQoYWRkZWRSb3cpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm93Q2xpY2tEYXRhID0gcm93O1xuICAgICAgdGhpcy5hZGROZXdSb3dDaGVjayA9IHRydWU7XG4gICAgICB0aGlzLmRyb3Bkb3duSW5wdXQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc29ydERpc2FibGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgICAgdGhpcy5vbkdyaWRSb3dBZGQuZW1pdChyb3cpO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIG9wZW4gRGlhbG9nIGluIGdyaWRcbiAgICovXG4gIG9wZW5HcmlkRGlhbG9nKGNvbHVtbjogSUdyaWRDb2x1bW4gfCBhbnksIHJvdzogYW55LCBldmVudD86IGFueSkge1xuICAgIGNvbnN0IGRhdGFQYXJhbXMgPSBjb2x1bW4uZGF0YT8uZGF0YSA/IGNvbHVtbi5kYXRhPy5kYXRhIDoge307XG4gICAgaWYgKChldmVudCAmJiBldmVudC5jdHJsS2V5KSB8fCBjb2x1bW4ub3BlbkluTmV3VGFiKSB7XG4gICAgICB0aGlzLmh5cGVybGlua1NlcnZpY2Uub3BlbkRpYWxvZ0luTmV3VGFiKGNvbHVtbi5jb21wb25lbnQsIGRhdGFQYXJhbXMsIHJvdyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5vcGVuQ29tcG9uZW50SW5EaWFsb2coY29sdW1uLCByb3cpO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5Db21wb25lbnRJbkRpYWxvZyhjb2x1bW46IElHcmlkQ29sdW1uIHwgYW55LCByb3c6IGFueSkge1xuICAgIHZhciBpc0Rpc2FibGVkID0gY29sdW1uLmRpc2FibGVkXG4gICAgICA/IHRydWVcbiAgICAgIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc2FibGVkXG4gICAgICAgID8gdHJ1ZVxuICAgICAgICA6IGZhbHNlO1xuICAgIHRoaXMub25DbGlja0V2ZW50KGNvbHVtbiwgcm93KTtcbiAgICBsZXQgZGF0YTogYW55ID0ge307XG4gICAgZGF0YSA9IHsgLi4uY29sdW1uPy5kYXRhIH07XG4gICAgdGhpcy5yb3dDbGlja0RhdGEgPSByb3c7XG4gICAgaWYgKGRhdGEgJiYgZGF0YS5kYXRhICYmIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddICYmIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5tYXRjaERhdGEpIHtcbiAgICAgIGRhdGEuZGF0YSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaWFsb2dEYXRhPy5kYXRhID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpYWxvZ0RhdGEuZGF0YSA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaWFsb2dEYXRhO1xuICAgIH1cblxuICAgIGlmIChjb2x1bW4uY29tcG9uZW50ICYmIHRoaXMucm93Q2xpY2tEYXRhICYmICFpc0Rpc2FibGVkKSB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBkYXRhLmRhdGEgPSBhdXRvU2V0TG9va3VwRGF0YShcbiAgICAgICAgICBkYXRhLmRhdGEsXG4gICAgICAgICAgdGhpcy5yb3dDbGlja0RhdGFcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGRhdGEgPSB7IC4uLmRhdGEsIGhlaWdodDogZGF0YS5oZWlnaHQgPyBkYXRhLmhlaWdodCA6ICc5MHZoJywgY2xvc2FibGU6IHRydWUsIGZvY3VzT25TaG93OiBmYWxzZSB9XG4gICAgICBjb25zdCBvYmpGaWVsZCA9IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArIFwiX29ialwiO1xuICAgICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3Blbihyb3dbb2JqRmllbGRdICYmIHJvd1tvYmpGaWVsZF0/LmNvbXBvbmVudCA/IHJvd1tvYmpGaWVsZF0/LmNvbXBvbmVudCA6IGNvbHVtbi5jb21wb25lbnQsIGRhdGEpO1xuXG4gICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGlhbG9nUmVmWydkaWFsb2dDbG9zZSddID0gdGhpcy5kaWFsb2dSZWYuY2xvc2U7XG4gICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UgPSB0aGlzLmludGVyY2VwdERpYWxvZ0Nsb3NlLmJpbmQodGhpcywgdGhpcy5kaWFsb2dSZWYpO1xuICAgICAgICB9KTtcblxuICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyAgIHRoaXMuZGlhbG9nUmVmWydkaWFsb2dDbG9zZSddID0gdGhpcy5kaWFsb2dSZWYuY2xvc2U7XG4gICAgICAvLyAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlID0gdGhpcy5pbnRlcmNlcHREaWFsb2dDbG9zZS5iaW5kKHRoaXMpO1xuICAgICAgLy8gfSwgODAwKTtcblxuICAgICAgdGhpcy5zZXREeW5hbWljRGlhbG9nUmVmKHRoaXMuZGlhbG9nUmVmKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBjb2x1bW4uY29tcG9uZW50Py5uYW1lO1xuICAgICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgICAgdGhpcy5wYWdlTG9nZ2VyU2VydmljZS5zYXZlUGFnZUxvZ2dlckluZm8odGhpcy5yb3V0ZXIudXJsPy5zdWJzdHJpbmcoMSksIGNvbXBvbmVudE5hbWUpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbHVtbi5kcmFnZ2FibGUgfHwgY29sdW1uLmRyYWdnYWJsZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBkcmFnZ2FibGVEaWFsb2coY29sdW1uPy5maWVsZCA/IGNvbHVtbj8uZmllbGQgOiBjb2x1bW4/LmhlYWRlcilcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGRhdGEgJiYgY29sdW1uLm9uUmV0dXJuKSB7XG4gICAgICAgICAgY29sdW1uLm9uUmV0dXJuKGRhdGEsIHRoaXMucm93Q2xpY2tEYXRhKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAgICAgdGhpcy5icm93c2VyQ2xvc2VFdmVudCh0cnVlKTtcbiAgICAgICAgICBpZiAoY29sdW1uLm9uQ2hhbmdlKSB7XG4gICAgICAgICAgICBjb2x1bW4ub25DaGFuZ2UoZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBicm93c2VyQ2xvc2VFdmVudChldmVudDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0ID0gZXZlbnQ7XG4gIH1cblxuICBzZXRNdWx0aVNlbGVjdERhdGEoY29sdW1uOiBJR3JpZENvbHVtbiwgc2VsZWN0ZWRWYWx1ZTogYW55KSB7XG4gICAgaWYgKHNlbGVjdGVkVmFsdWUgJiYgY29sdW1uLnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUKSB7XG4gICAgICBpZiAoc2VsZWN0ZWRWYWx1ZSAmJiBzZWxlY3RlZFZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnLCcpKSB7XG4gICAgICAgIHNlbGVjdGVkVmFsdWUgPSBzZWxlY3RlZFZhbHVlPy50b1N0cmluZygpPy5zcGxpdCgnLCcpPy5tYXAoKHZhbHVlKSA9PiBjb2x1bW4uZGF0YT8uZmluZCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWU/LnRvU3RyaW5nKCkgPT09IHZhbHVlPy50b1N0cmluZygpKT8ubGFiZWwpPy50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZWN0ZWRWYWx1ZSA9IGNvbHVtbi5kYXRhPy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZT8udG9TdHJpbmcoKSA9PT0gc2VsZWN0ZWRWYWx1ZT8udG9TdHJpbmcoKSk/LmxhYmVsO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2VsZWN0ZWRWYWx1ZTtcbiAgfVxuICBhdXRvR3JvdyhldmVudDogRXZlbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XG4gICAgY29uc3QgdGV4dGFyZWEgPSBldmVudCBpbnN0YW5jZW9mIEV2ZW50ID8gZXZlbnQudGFyZ2V0IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQgOiBldmVudDtcbiAgICBpZiAodGV4dGFyZWEpIHtcbiAgICAgIHRleHRhcmVhLnN0eWxlLmhlaWdodCA9ICdhdXRvJztcbiAgICAgIHRleHRhcmVhLnN0eWxlLmhlaWdodCA9IHRleHRhcmVhLnNjcm9sbEhlaWdodCArICdweCc7XG4gICAgfVxuICB9XG5cblxuICBzZXRUZXh0Qm94UmVhZE9ubHlWYWx1ZShyb3c6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICBsZXQgdmFsdWU6IGFueTtcbiAgICBpZiAoY29sdW1uLmRpc3BsYXlUZXh0KSB7XG4gICAgICB2YWx1ZSA9IGNvbHVtbi5kaXNwbGF5VGV4dDtcbiAgICB9IGVsc2UgaWYgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dCkge1xuICAgICAgdmFsdWUgPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHQ7XG4gICAgfSBlbHNlIGlmIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkKSB7XG4gICAgICB2YWx1ZSA9IHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXTtcbiAgICB9IGVsc2UgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQpIHtcbiAgICAgIHZhbHVlID0gcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJuIGNvbmRpdGlvbmFsIGJhc2UgdmFsdWUgYW5kIHRpdGxlXG4gICAqL1xuICBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgZGVsZXRlIHJvd1sndW5kZWZpbmVkJ107XG4gICAgbGV0IHZhbHVlOiBhbnk7XG4gICAgaWYgKGNvbHVtbi50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKSB7XG4gICAgICBsZXQgbmV3VmFsdWU6IGFueTtcbiAgICAgIGlmICh0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddKSA9PT0gXCJvYmplY3RcIiAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSkge1xuICAgICAgICBuZXdWYWx1ZSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgICAgID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0XG4gICAgICAgICAgOiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICA/IHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXVxuICAgICAgICAgICAgOiByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8udGV4dFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3VmFsdWUgPSByb3dbY29sdW1uLmZpZWxkXTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmIChjb2x1bW4udGltZU9ubHkpIHtcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMuc2V0VGltZUZvcm1hdChuZXdWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IGZvcm1hdCA9IHRoaXMuc2V0Rm9ybWF0KGNvbHVtbik7XG4gICAgICAgICAgdmFsdWUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShuZXdWYWx1ZT8udG9TdHJpbmcoKSA9PT0gXCJJbnZhbGlkIERhdGVcIiA/IG51bGwgOiBuZXdWYWx1ZSwgZm9ybWF0ID8gZm9ybWF0IDogY29sdW1uLnNob3dUaW1lID8gXCJNTS9kZC9ZWVlZLCBoOm1tIGFcIiA6IFwiTU0vZGQveXl5eVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9XG4gICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgICAgID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmZvcm1hdCA/IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0LCB0aGlzLnNldEZvcm1hdChjb2x1bW4pKSA6XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHRcbiAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgID8gcm93W3Jvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldICE9IHVuZGVmaW5lZCA/IHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkXSA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGRcbiAgICAgICAgICAgIDogcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICAgIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gJiZcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dCA9PT0gbnVsbCAmJiBjb2x1bW4udHlwZSAhPT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPR1xuICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgY29sdW1uPy5maWx0ZXI/LnR5cGUgPT09ICdjYWxlbmRhcicgJiYgY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRElBTE9HID9cbiAgICAgICAgICAgICAgICAgICAgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ0FNJykgfHwgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQudG9TdHJpbmcoKS5pbmNsdWRlcygnUE0nKSkgP1xuICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0IDogdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQsICdoaDptbSBhJylcbiAgICAgICAgICAgICAgICAgICAgOiBjb2x1bW4uZm9ybWF0ID8gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQsIHRoaXMuc2V0Rm9ybWF0KGNvbHVtbikpIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgIDogY29sdW1uLmZvcm1hdCA/IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGRdLCB0aGlzLnNldEZvcm1hdChjb2x1bW4pKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgICAgID8gY29sdW1uLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgOiBjb2x1bW4uaWNvbiA/IGNvbHVtbi5oZWFkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBzZXRGb3JtYXQoY29sdW1uKSB7XG4gICAgbGV0IGZvcm1hdCA9ICcnO1xuICAgIGlmIChjb2x1bW4/LmZvcm1hdCkge1xuICAgICAgY29sdW1uLmZvcm1hdCA9IGNvbHVtbi5mb3JtYXQ/LnR5cGUgPyBjb2x1bW4uZm9ybWF0LnR5cGUgOiBjb2x1bW4uZm9ybWF0O1xuICAgICAgc3dpdGNoIChjb2x1bW4uZm9ybWF0KSB7XG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLlNNQUxMREFURToge1xuICAgICAgICAgIGZvcm1hdCA9ICdNTS9kZC95eSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuU0hPUlREQVRFOiB7XG4gICAgICAgICAgZm9ybWF0ID0gJ01NL2RkL3l5eXknO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLk1FRElVTURBVEU6IHtcbiAgICAgICAgICBmb3JtYXQgPSAnTSBkLCB5eSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuTE9OR0RBVEU6IHtcbiAgICAgICAgICBmb3JtYXQgPSAnTU0vZGQveXksIGg6bW0gYSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuUEVSSU9EOiB7XG4gICAgICAgICAgZm9ybWF0ID0gJ01NL3l5JztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgZm9ybWF0ID0gY29sdW1uLmZvcm1hdDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZm9ybWF0XG4gIH1cblxuICBzZXREcm9wZHdvblJlYWRPbmx5VmFsdWUocm93OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgZGVsZXRlIHJvd1sndW5kZWZpbmVkJ107XG4gICAgY29uc3QgdmFsdWUgPSByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF1cbiAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdXG4gICAgICA6IGNvbHVtbi5kYXRhPy5maW5kKGRyb3Bkb3duVmFsID0+IGRyb3Bkb3duVmFsPy52YWx1ZSA9PSByb3dbY29sdW1uLmZpZWxkXSlcbiAgICAgICAgPyBjb2x1bW4uZGF0YT8uZmluZChkcm9wZG93blZhbCA9PiBkcm9wZG93blZhbD8udmFsdWUgPT0gcm93W2NvbHVtbi5maWVsZF0pPy5sYWJlbFxuICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIG9uUm93UmVvcmRlcihldmVudCkge1xuICAgIHRoaXMub25Sb3dPcmRlckNoYW5nZWQuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIERlbGV0ZSBDb25maXJtYXRpb24gZGlhbG9nIHdoZW4gY2xpY2sgb24gZGVsZXRlIGljb24gaW4gQWN0aW9uIGNvbHVtblxuICAgKi9cbiAgaGFuZGxlQWN0aW9uQ2xpY2soZXZlbnQ6IEV2ZW50LCBjb2x1bW5BY3Rpb246IElHcmlkQ29sdW1uQWN0aW9uLCByb3c6IGFueSkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHZhciBtZXNzYWdlOiBzdHJpbmc7XG4gICAgaWYgKHJvdy5jaGlsZGZvbGRlcmNvdW50ID4gMCkge1xuICAgICAgbWVzc2FnZSA9IGBEZWxldGluZyB0aGlzIGZvbGRlciB3aWxsIGFsc28gZGVsZXRlICR7cm93LmNoaWxkZm9sZGVyY291bnR9IGNoaWxkIGZvbGRlciR7cm93LmNoaWxkZm9sZGVyY291bnQgPiAxID8gJ3MnIDogJyd9IGFsb25nIHdpdGggYWxsIGFzc29jaWF0ZWQgZG9jdW1lbnRzLiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcHJvY2VlZD9gO1xuICAgIH1cbiAgICBpZiAoY29sdW1uQWN0aW9uLnRvb2x0aXAudG9Mb3dlckNhc2UoKSA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgIGlmIChjb2x1bW5BY3Rpb24uY29uZmlybURpYWxvZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgY29sdW1uQWN0aW9uLm9uQ2xpY2socm93KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlID8/ICdBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyByZWNvcmQ/JyxcbiAgICAgICAgICBoZWFkZXI6ICdEZWxldGUgQ29uZmlybWF0aW9uJyxcbiAgICAgICAgICBpY29uOiAncGkgcGktZXhjbGFtYXRpb24tdHJpYW5nbGUnLFxuICAgICAgICAgIGtleTogJ2hhbmRsZWNvbHVtbkFjdGlvbnMnLFxuICAgICAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICAgICAgY29sdW1uQWN0aW9uLm9uQ2xpY2socm93KTtcbiAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jbG9zZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVqZWN0OiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY2xvc2UoKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29sdW1uQWN0aW9uLm9uQ2xpY2socm93KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IDogTGF6eUxvYWRFdmVudFxuICAgKiBUcmlnZ2VycyBldmVyeXRpbWUgYSBzZXJ2ZXIgc2lkZSBmaWx0ZXIgaXMgdHJpZ2dlclxuICAgKi9cbiAgaGFuZGxlU2VydmVyU2lkZUV2ZW50cyhldmVudDogYW55LCBkdDogYW55ID0gJycpIHtcbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuaXNTZXJ2ZXJTaWRlRXZlbnRJbml0YWxUcmlnZ2VyZWQpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbnM/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldEdyaWRJZCgpO1xuICAgICAgICAgICAgdGhpcy5ncmlkZmlsdGVyID0gZXZlbnQ7XG5cbiAgICAgICAgICAgIGlmIChkdD8uZWw/Lm5hdGl2ZUVsZW1lbnQ/LmlkKSB7XG4gICAgICAgICAgICAgIHRoaXMuZ3JpZElkID0gZHQuZWwubmF0aXZlRWxlbWVudC5pZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zICYmIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaCgoeDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50Py5maWx0ZXJzW3guZmllbGRdKSB7XG4gICAgICAgICAgICAgICAgICBldmVudC5maWx0ZXJzW3guZmllbGRdLnZhbHVlID0geC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTVVMVElTRUxFQ1QgPyB4LmZpbHRlclZhbHVlPy50b1N0cmluZygpIDogeC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQgJiYgeC5oYXNPd25Qcm9wZXJ0eSgnZmlsdGVyVmFsdWVfb2JqJykgPyB4WydmaWx0ZXJWYWx1ZV9vYmonXT8udmFsdWUgOiB4LmZpbHRlclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRoaXMuYXV0b0xvYWREYXRhO1xuICAgICAgICAgICAgdGhpcy5zZXJ2ZXJGaWx0ZXJzID0ge1xuICAgICAgICAgICAgICBmaWx0ZXJzOiB0aGlzLmxvb2t1cEZpbHRlcnNcbiAgICAgICAgICAgICAgICA/IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0R3JpZEZpbHRlcnMoZXZlbnQsIHRoaXMuc2VsZWN0ZWRDb2x1bW5zKVxuICAgICAgICAgICAgICAgIDogdGhpcy5ncmlkU2VydmljZS5wcmVwYXJlQmFzaWNGaWx0ZXJzKGV2ZW50LCB0aGlzLnNlbGVjdGVkQ29sdW1ucyksXG4gICAgICAgICAgICAgIHNvcnRzOiB0aGlzLmdyaWRTZXJ2aWNlLmdldEdyaWRTb3J0cyhldmVudCwgdGhpcy5zZWxlY3RlZENvbHVtbnMpLFxuICAgICAgICAgICAgICAuLi4odGhpcy5wYWdpbmF0aW9uICYmIHtcbiAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLmdyaWRTZXJ2aWNlLmdldEdyaWRQYWdpbmF0aW9uKGV2ZW50KSxcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZTogZXZlbnQucm93cyB8fCAxMCxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMuc2VydmVyRmlsdGVycz8uZmlsdGVycyAmJlxuICAgICAgICAgICAgICB0aGlzLnNlcnZlckZpbHRlcnM/LmZpbHRlcnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAodGhpcy5hbGxvd0NhY2hpbmcgfHwgdGhpcy5zb2Z0Q2FjaGluZylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAoIXRoaXMuc29mdENhY2hpbmcgJiYgdGhpcy50YWJsZT8uaWQpIHtcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnU2V0RmlsdGVycy0nICsgdGhpcy50YWJsZT8uaWQgKyB0aGlzLmN1cnJlbnRVcmwsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2VydmVyRmlsdGVycykpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdID0gdGhpcy5zZXJ2ZXJGaWx0ZXJzO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1t0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHRoaXMuY3VycmVudFVybF0gPSB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc2VydmVyRmlsdGVyVmFsdWVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNlcnZlckZpbHRlcnMpKTtcbiAgICAgICAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzID0gKHRoaXMuc2VydmVyRmlsdGVycy5maWx0ZXJzIHx8IFtdKS5jb25jYXQodGhpcy5nbG9iYWxEYXRhKTtcblxuICAgICAgICAgICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uucm93VXBkYXRlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGxldCBjb250YWluc0VtcHR5RmllbGQgPSB0cnVlO1xuICAgICAgICAgICAgd2hpbGUgKGNvbnRhaW5zRW1wdHlGaWVsZCkge1xuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzLmZpbmRJbmRleCgoZmlsdGVyKSA9PiAhZmlsdGVyLmZpZWxkKTtcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5zRW1wdHlGaWVsZCA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub25TZXJ2ZXJTaWRlRXZlbnRDaGFuZ2UuZW1pdChzZXJ2ZXJGaWx0ZXJWYWx1ZXMpO1xuICAgICAgICAgICAgdGhpcy5pc1NlcnZlclNpZGVFdmVudEluaXRhbFRyaWdnZXJlZC5uZXh0KCcnKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuXG5cbiAgLy9zZXQgZ3JpZCBpZCBvbiBwYWdlIGxvYWQgZm9yIGxvYWQgY29sdW1uIHdpZHRoc1xuICBzZXRDbGFzc2FBbmRJZChkdDogYW55KSB7XG4gICAgaWYgKGR0Py5lbD8ubmF0aXZlRWxlbWVudD8uaWQpIHtcbiAgICAgIHRoaXMuZ3JpZElkID0gZHQuZWwubmF0aXZlRWxlbWVudC5pZDtcbiAgICB9XG4gICAgaWYgKHRoaXMuaG9yaXpvbnRhbFNjcm9sbCkge1xuICAgICAgcmV0dXJuIHsgJ2hvcml6b250YWwtc2Nyb2xsJzogdHJ1ZSB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7ICdob3Jpem9udGFsLXNjcm9sbCc6IGZhbHNlIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIFBhc3NlcyBhcHBsaWVkIHBhZ2luYXRpb24gdG8gcGFyZW50IG9uIHBhZ2UgY2hhbmdlXG4gICAqL1xuICBoYW5kbGVTZXJ2ZXJTaWRlUGFnaW5hdGlvbihldmVudDogSUdyaWRQYWdpbmF0aW9uRXZlbnQpIHtcbiAgICB0aGlzLmVkaXRpbmdSb3dLZXlzID0ge307XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IGV2ZW50LmZpcnN0O1xuICAgIHRoaXMuUGFnZUNoYW5nZSA9IHRydWU7XG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbiAmJiB0aGlzLnJlbWFpbmluZ1Jvd3NEYXRhPy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnJlbWFpbmluZ1Jvd3NEYXRhID0gW107XG4gICAgfVxuICAgIHRoaXMub25QYWdlQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnVzZVNlcnZlclNpZGVFdmVudHMgJiYgdGhpcy5wYWdpbmF0aW9uICYmIHRoaXMuZGVmYXVsdFJvd3MgJiYgdGhpcy5lZGl0QWxsUm93cyAmJiB0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwICYmIHRoaXMuY29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuZWRpdEFsbFJvd3NBdE9uY2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBzZWxlY3RlZFJvdyhyb3c6IGFueSkge1xuICAgIHRoaXMub25Sb3dDaGVja0JveC5lbWl0KHJvdyk7XG4gIH1cblxuICAvLyBzZXQgdGltZSBmb3JtYXRcbiAgc2V0VGltZUZvcm1hdChkYXRlOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgZGF0ZSA9PT0gJ251bWJlcicgfHwgKHR5cGVvZiBkYXRlID09PSAnc3RyaW5nJyAmJiAhaXNOYU4oTnVtYmVyKGRhdGUpKSkpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBkYXRlU3RyaW5nID0gZGF0ZT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBpc1RpbWVJbkFNID0gdGhpcy5jaGVja1RpbWVGb3JtYXQoZGF0ZSwgJ2FtJyk7XG4gICAgY29uc3QgaXNUaW1lSW5QTSA9IHRoaXMuY2hlY2tUaW1lRm9ybWF0KGRhdGUsICdwbScpO1xuICAgIGNvbnN0IGlzVEluY2x1ZGUgPSB0aGlzLmNoZWNrVGltZUZvcm1hdChkYXRlLCAndCcpO1xuXG4gICAgaWYgKChpc1RpbWVJbkFNIHx8IGlzVGltZUluUE0pICYmICghaXNUSW5jbHVkZSkpIHtcbiAgICAgIHJldHVybiBkYXRlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jaGVja1RpbWVGb3JtYXQoZGF0ZSwgJzonKSAmJiAoIWlzVGltZUluQU0gJiYgIWlzVGltZUluUE0gJiYgIWlzVEluY2x1ZGUpKSB7XG4gICAgICBjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gZGF0ZVN0cmluZz8uc3BsaXQoJzonKT8ubWFwKE51bWJlcik7XG4gICAgICBjb25zdCBwZXJpb2QgPSBob3VycyA+PSAxMiA/ICdQTScgOiAnQU0nO1xuICAgICAgY29uc3QgZm9ybWF0dGVkSG91cnMgPSBob3VycyAlIDEyIHx8IDEyO1xuICAgICAgcmV0dXJuIGAke2Zvcm1hdHRlZEhvdXJzfToke1N0cmluZyhtaW51dGVzKS5wYWRTdGFydCgyLCAnMCcpfSAke3BlcmlvZH1gO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCAnaGg6bW0gYScpIHx8ICcnO1xuICB9XG5cbiAgY2hlY2tUaW1lRm9ybWF0KGRhdGUsIGlzSW5jbHVkZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGRhdGU/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCk/LmluY2x1ZGVzKGlzSW5jbHVkZSk7XG4gIH1cblxuICAvL29wZW4gaHlwZXJsaW5rIGluIGVkaXQgY2FzZVxuICBvcGVuTGluayh1cmw6IGFueSkge1xuICAgIGlmICh1cmwpIHtcbiAgICAgIGNvbnN0IGxpbms6IGFueSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIGxpbmsuaHJlZiA9IHVybDtcbiAgICAgIGxpbmsudGFyZ2V0ID0gJ19ibGFuayc7XG4gICAgICBsaW5rLmNsaWNrKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSByb3dcbiAgICogU2V0cyB2YWx1ZXMgdG8gZWRpdGFibGUgcm93XG4gICAqIFJvdydzIGRhdGEgaXMgcHJlc2V2ZWQgdG8gcHJldmVudCBtdXRhdGlvblxuICAgKiBSb3cgZGF0YUtleSBpcyBwcmVzZXJ2ZWQgdG8ga2VlcCB0aGUgcm93IHVuaXF1ZSBhbmQgaW4gZWRpdGFibGUgc3RhdGUgYXMgbG9uZyBhcyBub3Qgc2F2ZWRcbiAgICovXG5cbiAgcmVmcmVzaEdyaWRUZXJtaW5hdG9yKCkge1xuICAgIGlmICh0aGlzLnNldEdyaWRSZWZyZXNoVGltZSkge1xuICAgICAgdGhpcy5yZWxvYWRQYWdlPy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0T3JpZ2luYWxSb3dzKCkge1xuICAgIHRoaXMub3JpZ2luYWxSb3dzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnJvd3NEYXRhKSk7XG4gIH1cblxuICBvblJvd0VkaXRJbml0KHJvdzogYW55KSB7XG4gICAgdGhpcy5yZWZyZXNoR3JpZFRlcm1pbmF0b3IoKVxuICAgIGxldCBzZWxlY3RlZFJvdyA9IHsgLi4ucm93IH07XG4gICAgT2JqZWN0LmVudHJpZXMoc2VsZWN0ZWRSb3cpLmZvckVhY2goKFtrZXksIHZhbHVlXTogYW55KSA9PiB7XG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc2V0RHJvcGRvd25GaWx0ZXIpIHtcbiAgICAgICAgICB0aGlzLnNldERyb3Bkb3duRmlsdGVyVmFsdWUoY29sLCByb3csIGtleSk7XG4gICAgICAgICAgdGhpcy5zZXREcm9wZG93bkZpbHRlciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNldCB0aGUgYXV0b0NvbXBsZXRlIFZhbHVlIGluIGVkaXQgbW9kZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUgJiZcbiAgICAgICAgICBjb2wuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGtleT8udG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICAgIHZhbHVlICYmXG4gICAgICAgICAgdmFsdWUubGVuZ3RoID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoY29sLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sLmZpZWxkXS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgcm93W2NvbC5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfdGVtcCddID0gcm93W2NvbC5kaXNwbGF5RmllbGRdO1xuICAgICAgICAgICAgICByb3dbY29sLmRpc3BsYXlGaWVsZF0gPSByb3dbY29sLmZpZWxkXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgbmV3VmFsdWUgPSB2YWx1ZS5tYXAoKHg6IGFueSkgPT4geFtjb2wuZGlzcGxheUZpZWxkXSk7XG4gICAgICAgICAgaWYgKG5ld1ZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnOycpKSB7XG4gICAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IG5ld1ZhbHVlXG4gICAgICAgICAgICAgID8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICA/LnJlcGxhY2VBbGwoJzsnLCAnLCcpXG4gICAgICAgICAgICAgID8uc3BsaXQoJywnKVxuICAgICAgICAgICAgICA/Lm1hcCgoeDogYW55KSA9PiAoeyBbY29sLmRpc3BsYXlGaWVsZCA/IGNvbC5kaXNwbGF5RmllbGQgOiBjb2wuZmllbGRdOiB4LCBbY29sLmZpZWxkICsgJ190ZW1wJ106IHZhbHVlWzBdW2NvbC5maWVsZF0gfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOKSB7XG4gICAgICAgICAgbGV0IG9wdGlvbiA9IGNvbD8uZGF0YT8uZmluZChcbiAgICAgICAgICAgICh4OiBhbnkpID0+IHgubGFiZWwgPT09IHJvd1tjb2wuZmllbGRdPy50b1N0cmluZygpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IG9wdGlvbi52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTVVMVElTRUxFQ1QpIHtcbiAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IHRoaXMuc2V0TXVsdGlTZWxlY3RWYWx1ZShjb2wsIHJvdylcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBrZXk/LnRvTG93ZXJDYXNlKCkgJiZcbiAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEVcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHJvd1tjb2wuZmllbGRdICE9PSBudWxsICYmIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAocm93W2tleSArICdfb2JqJ10gJiYgT2JqZWN0LmtleXMocm93W2tleSArICdfb2JqJ10pPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHJvd1trZXkgKyAnX29iaiddLnRleHQgPSBuZXcgRGF0ZSh2YWx1ZSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W2tleV0gPSBuZXcgRGF0ZSh2YWx1ZSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNoZWNrIHRoZSBNaW51dGVzIHBhdHRlcm5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoY29sLnNob3dUaW1lIHx8IGNvbC50aW1lT25seSkgJiZcbiAgICAgICAgICAgIGNvbC5taW51dGVzSW50ZXJ2YWwgJiZcbiAgICAgICAgICAgIHJvd1trZXldXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByb3dba2V5XSA9IG5ldyBEYXRlKHNldE1pbnV0ZXNJbnRlcnZhbChyb3dba2V5XSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgJiZcbiAgICAgICAgICBjb2wuZmlsdGVyPy50eXBlID09PSAnY2FsZW5kYXInICYmXG4gICAgICAgICAgY29sLmZpZWxkLnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgcm93W2NvbC5maWVsZF0gPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTksgJiZcbiAgICAgICAgICBjb2wuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGtleT8udG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICAgIChjb2wuYWxsb3dTYXZlID09PSB0cnVlIHx8IGNvbC5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGNvbC5lZGl0TGluayA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcm93W2NvbC5maWVsZCArICdfb2JqJ10uaHlwZXJsaW5rID0gcm93W2NvbC5maWVsZCArICdfb2JqJ10/Lmh5cGVybGluaztcbiAgICAgICAgICAgIHJvd1tjb2wuZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0ID0gJyc7XG4gICAgICAgICAgfSBlbHNlIGlmIChjb2wuZWRpdExpbmsgPT09IGZhbHNlIHx8IGNvbC5lZGl0TGluayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByb3dba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmVkaXRSb3dzUmVjb3Jkc1tyb3dbdGhpcy5kYXRhS2V5XV0gPSB7IC4uLnJvdyB9O1xuICAgIHRoaXMuZWRpdGluZ1Jvd0tleXNbcm93W3RoaXMuZGF0YUtleV1dID0gdHJ1ZTtcbiAgICB0aGlzLmNoZWNrQWN0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLmRyb3Bkb3duSW5wdXQgPSB0cnVlO1xuICAgIHRoaXMucm93Q2xpY2tEYXRhID0gcm93O1xuICAgIHRoaXMuaW5FZGl0TW9kZSA9IHRydWU7XG4gICAgdGhpcy5yb3dVcGRhdGVDaGFuZ2UgPSBmYWxzZTtcbiAgICB0aGlzLmNhbmNlbEFsbFJlY29yZHMgPSBmYWxzZTtcbiAgICB0aGlzLnNhdmVBbGxSZWNvcmQgPSBmYWxzZTtcbiAgICB0aGlzLnNvcnREaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5ncmlkU2VydmljZS5yb3dVcGRhdGUgPSBmYWxzZTtcbiAgICB0aGlzLm9uR3JpZFJvd0VkaXQuZW1pdChyb3cpO1xuICB9XG5cbiAgdHlwZU9mKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldCBkcm9wZG93biBmaWx0ZXIgdmFsdWVcbiAgICovXG4gIHNldERyb3Bkb3duRmlsdGVyVmFsdWUoY29sOiBhbnksIHJvdzogYW55LCBrZXk6IHN0cmluZykge1xuICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmIGNvbC5kcm9wRG93blByb3ApIHtcbiAgICAgIGlmIChPYmplY3QudmFsdWVzKGNvbCkuc29tZSgodmFsdWUpID0+IHZhbHVlID09IGtleSkpIHtcbiAgICAgICAgbGV0IG9iaiA9IGNvbC5kcm9wRG93blByb3A7XG4gICAgICAgIGxldCBuZXdGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICAgICAgaWYgKG9iai5maWx0ZXJzICYmIG9iai5maWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBvYmouZmlsdGVycy5mb3JFYWNoKChmaWx0ZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgbGV0IG5ld0ZpbHRlciA9IHsgLi4uZmlsdGVyIH07XG4gICAgICAgICAgICBsZXQgZmlsdGVyS2V5ID0gT2JqZWN0LmtleXMocm93KS5maW5kKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgbGV0IG1hdGNoS2V5OiBzdHJpbmcgPSAnJztcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZT8uaW5jbHVkZXMoJ3snKSAmJlxuICAgICAgICAgICAgICAgIGtleS50b0xvd2VyQ2FzZSgpID09PVxuICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZVxuICAgICAgICAgICAgICAgICAgPy50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICA/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCd7JywgJycpXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZSgnfScsICcnKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBtYXRjaEtleSA9IGtleTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hLZXk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJLZXkpIHtcbiAgICAgICAgICAgICAgbmV3RmlsdGVyLnZhbHVlID0gcm93W2ZpbHRlcktleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXdGaWx0ZXJzLnB1c2gobmV3RmlsdGVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc2V0RHJvcGRvd25EYXRhKFxuICAgICAgICAgIGNvbCxcbiAgICAgICAgICBvYmoudW5pcXVlS2V5LFxuICAgICAgICAgIG9iai52YWx1ZVByb3AsXG4gICAgICAgICAgb2JqLmxhYmVsUHJvcCxcbiAgICAgICAgICBuZXdGaWx0ZXJzLFxuICAgICAgICAgIHJvd1xuICAgICAgICApO1xuXG4gICAgICAgIGxldCBvcHRpb24gPSBjb2wuZGF0YS5maW5kKFxuICAgICAgICAgICh4OiBhbnkpID0+IHgubGFiZWwgPT09IHJvd1tjb2wuZmllbGRdPy50b1N0cmluZygpXG4gICAgICAgICk7XG4gICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IG9wdGlvbi52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcm93XG4gICAqIFBhc3NlcyB0aGUgZWRpdGVkIG9yIG5ld2x5IGNyZWF0ZWQgZGF0YSB0byBwYXJlbnRcbiAgICogSW4gY2FzZSBvZiBuZXdseSBjcmVhdGVkIGRhdGEsIGRhdGFLZXkgYW5kIGlzTmV3IHByb3AgaXMgcmVtb3ZlZFxuICAgKi9cbiAgb25Sb3dFZGl0U2F2ZShzZWxlY3RlZFJvdzogYW55KSB7XG4gICAgdGhpcy50ZW1wU2F2ZWRSb3cgPSBbXTtcbiAgICBsZXQgYXV0b21Db21wbGV0ZVRlbXBEYXRhID0gW107XG4gICAgbGV0IGxvb2t1cEluZm86IGFueSA9IHt9O1xuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICBkZWxldGUgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkICsgJy1kYXRhJ107XG4gICAgICBkZWxldGUgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkICsgJ19zZWNvbmRUeXBlJ107XG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmXG4gICAgICAgIChjb2x1bW4uYWxsb3dTYXZlID09PSB0cnVlIHx8IGNvbHVtbi5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZClcbiAgICAgICkge1xuICAgICAgICBpZiAodHlwZW9mIChzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQpIHtcbiAgICAgICAgICBsb29rdXBJbmZvW2NvbHVtbi5maWVsZF0gPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLnRleHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIpIHtcbiAgICAgICAgbGV0IHZhbHVlOiBhbnkgPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlciA9PT0gJ2NoYXInKSB7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSA9PT0gdHJ1ZSA/ICdZJyA6ICdOJztcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSAnbnVtZXJpYycpIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlID09PSB0cnVlID8gJzEnIDogJzAnO1xuICAgICAgICB9XG4gICAgICAgIHNlbGVjdGVkUm93ID0geyAuLi5zZWxlY3RlZFJvdywgW2NvbHVtbi5maWVsZF06IHZhbHVlIH07XG4gICAgICB9XG5cbiAgICAgIC8vY29udmVydCBkcm9wRG93biBvcHRpb25MYWJlbCBpbnRvIG9wdGlvblZhbHVlXG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiYgY29sdW1uLmRhdGE/Lmxlbmd0aCA+IDAgJiYgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXVxuICAgICAgKSB7XG4gICAgICAgIGxldCBvcHRpb25MYWJlbDtcbiAgICAgICAgaWYgKGlzTmFOKE51bWJlcihzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdKSkpIHtcbiAgICAgICAgICBvcHRpb25MYWJlbCA9IGNvbHVtbi5kYXRhLmZpbmQoKHJlY29yZCkgPT4gcmVjb3JkWydsYWJlbCddPy50b0xvd2VyQ2FzZSgpID09PSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvcHRpb25MYWJlbCA9IGNvbHVtbi5kYXRhLmZpbmQoKHJlY29yZCkgPT4gcmVjb3JkWydsYWJlbCddID09PSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9uTGFiZWw/LnZhbHVlKSB7XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IG9wdGlvbkxhYmVsLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vY29udmVydCBkYXRlIGludG8gdGltZSBmb3JtYXRcbiAgICAgIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFXG4gICAgICApIHtcbiAgICAgICAgaWYgKGNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4uc2F2ZUFzU3RyaW5nICYmIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0pIHtcbiAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSwgJ2hoOm1tIGEnKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udGltZU9ubHkgJiYgIWNvbHVtbi5zYXZlQXNTdHJpbmcgJiYgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSkge1xuICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdLCAneXl5eS1NTS1kZCBISDptbTpzcycpO1xuICAgICAgICB9IGVsc2UgaWYgKCFjb2x1bW4udGltZU9ubHkgJiYgKGNvbHVtbi5zaG93VGltZSB8fCBjb2x1bW4uZm9ybWF0ID09PSBFR3JpZEZvcm1hdFR5cGUuTE9OR0RBVEUpKSB7XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0sICd5eXl5LU1NLWRkIEhIOm1tOnNzJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSAmJiAhY29sdW1uLnRpbWVPbmx5KSB7XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IG5ldyBEYXRlKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0pPy50b0xvY2FsZURhdGVTdHJpbmcoXCJlbi1VU1wiKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBpZiBhbGxvd0NhbGN1bGF0ZT10cnVlLCBkaXZpZGUgdGhlIHBlcmNlbnQgYnkgMTAwXG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5OVU1FUklDKSB7XG4gICAgICAgIGlmICh0aGlzLm51bWVyaWNWYWx1ZSkge1xuICAgICAgICAgIHRoaXMubnVtZXJpY1ZhbHVlID0ge31cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaWdpdHNJbmZvID0gY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbztcbiAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXQ/LnR5cGUgPT09ICdwZXJjZW50Jykge1xuICAgICAgICAgIGlmIChjb2x1bW4uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmFsbG93Q2FsY3VsYXRlKSB7XG4gICAgICAgICAgICBjb25zdCBjYWxjdWxhdGVkVmFsdWUgPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpPy5pbmNsdWRlcygnLicpID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IGNhbGN1bGF0ZWRWYWx1ZSA/IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gOiBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdIC8gMTAwO1xuICAgICAgICAgICAgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHBhcnNlRmxvYXQoKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gLyAxMDApPy50b1N0cmluZygpKS50b0ZpeGVkKGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vY29udmVydCBtdWx0aXNlbGVjdCBhcnJheSBpbnRvIHN0cmluZ1xuICAgICAgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUICYmIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF1cbiAgICAgICkge1xuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2F2aW5nIEF1dG9Db21wbGV0ZSBEYXRhXG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFICYmXG4gICAgICAgIGNvbHVtbi5kaXNwbGF5RmllbGQgJiZcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8ubGVuZ3RoID4gMFxuICAgICAgKSB7XG4gICAgICAgIGF1dG9tQ29tcGxldGVUZW1wRGF0YSA9IFsuLi5zZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdXTtcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/Lm1hcCgocm93KSA9PiBjb2x1bW4/Lm9wdGlvblZhbHVlICYmIHJvd1tjb2x1bW4ub3B0aW9uVmFsdWU/LnRvTG93ZXJDYXNlKCldID9cbiAgICAgICAgICByb3dbY29sdW1uLm9wdGlvblZhbHVlPy50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldKT8udG9TdHJpbmcoKT8ucmVwbGFjZUFsbCgnLCcsICc7Jyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBsZXQgcm93OiBhbnkgPSB7IC4uLnNlbGVjdGVkUm93IH07XG4gICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoa2V5LmluY2x1ZGVzKCdfb2JqJykpIHtcbiAgICAgICAgbGV0IG9iajogYW55ID0gcm93W2tleV1cbiAgICAgICAgaWYgKHRoaXMuY2hlY2tBY3Rpb24gPT09IGZhbHNlICYmIG9iaj8udHlwZSAmJiAob2JqLnR5cGUgPT09ICdsaW5rJyB8fCBvYmoudHlwZSA9PT0gJ2lmcmFtZScgfHwgb2JqLnR5cGUgPT09ICdkaWFsb2cnKSkge1xuICAgICAgICAgIHJvdyA9IHsgLi4ucm93LCBba2V5LnNwbGl0KCdfJylbMF1dOiByb3dba2V5XS5kaXNwbGF5VGV4dCB9O1xuICAgICAgICAgIHRoaXMuY2hlY2tBY3Rpb24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvYmogJiYgKG9iai50eXBlID09PSAnbGluaycgfHwgb2JqLnR5cGUgPT09ICdpZnJhbWUnIHx8IG9iai50eXBlID09PSAnZGlhbG9nJykpIHtcbiAgICAgICAgICBpZiAoIW9iai5kaXNwbGF5VGV4dCAmJiBvYmouZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT0ga2V5LnNwbGl0KCdfJylbMF0/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIG9iai5kaXNwbGF5VGV4dCA9IHJvd1trZXkuc3BsaXQoJ18nKVswXV1cbiAgICAgICAgICB9XG4gICAgICAgICAgcm93ID0geyAuLi5yb3csIFtrZXkuc3BsaXQoJ18nKVswXV06IHJvd1trZXldLmRpc3BsYXlUZXh0IH07XG4gICAgICAgICAgZGVsZXRlIHJvd1trZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgLyoqXG4gICAgICoganVzdCBlbWl0IHRob3NlIGZpZWxkcyB3aG8gZXhpc3QgaW4gdGhlIHRhYmxlXG4gICAgICovXG4gICAgcm93ID0gdGhpcy5ncmlkU2VydmljZS5zZXRSb3dWYWx1ZShyb3cpO1xuICAgIC8vb25zb2xlLmxvZygncm93IGluIHNhdmUnLCByb3cpXG4gICAgbGV0IG9iajogYW55ID0ge307XG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIChjb2x1bW4uYWxsb3dTYXZlID09PSB0cnVlIHx8IGNvbHVtbi5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnNhdmVBbGxEYXRhKVxuICAgICAgKSB7XG4gICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyAmJlxuICAgICAgICAgIGNvbHVtbi5maWx0ZXI/LnR5cGUgPT09ICdjYWxlbmRhcidcbiAgICAgICAgKSB7XG4gICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShcbiAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdLFxuICAgICAgICAgICAgJ3l5eXktTU0tZGRUMDA6MDA6MDAuMDAwWidcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9TZXQgRGVjaW1hbCBGcmFjdGlvbiBWYWx1ZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sdW1uLmZvcm1hdCAmJlxuICAgICAgICAgIGNvbHVtbi5mb3JtYXQudHlwZSA9PT0gRUZvcm1hdFR5cGUuREVDSU1BTCAmJlxuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdICYmXG4gICAgICAgICAgIXJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkuaW5jbHVkZXMoJy4nKVxuICAgICAgICApIHtcbiAgICAgICAgICBsZXQgZGlnaXRzSW5mbyA9ICcuMDAnO1xuICAgICAgICAgIGxldCB6ZXJvID0gJzAnO1xuICAgICAgICAgIGNvbnN0IGZvcm1hdFBhcmFtcyA9IGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcztcbiAgICAgICAgICBjb25zdCBmcmFjRGlnaXRzID0gY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbztcbiAgICAgICAgICBpZiAoZnJhY0RpZ2l0cykge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBmcmFjRGlnaXRzOyBpKyspIHtcbiAgICAgICAgICAgICAgemVybyA9IHplcm8gKyAnMCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkaWdpdHNJbmZvID0gJy4nICsgemVybztcbiAgICAgICAgICB9XG4gICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXSArIGRpZ2l0c0luZm87XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHJvdy5pc05ldyB8fCByb3cuaXNuZXcgJiZcbiAgICAgICAgKGNvbHVtbi5hbGxvd1NhdmUgPT09IGZhbHNlIHx8IGNvbHVtbi5lZGl0YWJsZSA9PT0gZmFsc2UgfHwgIXRoaXMuc2F2ZUFsbERhdGEpXG4gICAgICApIHtcbiAgICAgICAgZGVsZXRlIHJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgfVxuICAgICAgY29sdW1uLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgICAgY29uc3Qgb2JqS2V5ID0gY29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJztcbiAgICAgIGlmIChyb3dbb2JqS2V5XT8uZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIGRlbGV0ZSByb3dbb2JqS2V5XS5lcnJvck1lc3NhZ2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZGVsZXRlIHNlbGVjdGVkUm93Wyd1bmRlZmluZWQnXTtcbiAgICBvYmpbdGhpcy5kYXRhS2V5XSA9IHJvd1t0aGlzLmRhdGFLZXldOyAvLyBlbnN1cmUgZGF0YUtleSAodGVtcF9pZCkgaXMgYXZhaWxhYmxlIGZvciBkaXJ0eS1yb3cgY29tcGFyaXNvblxuICAgIHRoaXMuZ3JpZFNlcnZpY2UuY2hlY2tWYWxpZGl0eSh0aGlzLmNvbHVtbnMsIHJvdyk7XG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuZ3JpZFZhbGlkYXRpb24odGhpcy5jb2x1bW5zLCByb3cpO1xuXG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgIC8vIHNldCB0aGUgZ3JpZCB1cGRhdGVkL2luc2VydGVkIGRhdGFcbiAgICAgIHRoaXMucm93QWN0aW9uRXZlbnRzKHNlbGVjdGVkUm93KTtcbiAgICAgIHRoaXMuYnJvd3NlckNsb3NlRXZlbnQoZmFsc2UpO1xuICAgICAgaWYgKHJvdy5pc05ldyB8fCByb3cuaXNuZXcpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJvd3NEYXRhLmZpbmRJbmRleCgoeCkgPT4geC50ZW1wX2lkID09IHJvdy50ZW1wX2lkKTtcbiAgICAgICAgdGhpcy50ZW1wU2F2ZWRSb3cucHVzaChpbmRleCk7XG4gICAgICAgIGxldCB7IGlzTmV3LCBpc25ldywgLi4ubmV3Um93T2JqIH0gPSByb3c7XG4gICAgICAgIG5ld1Jvd09iaiA9IHRoaXMuZ3JpZFNlcnZpY2UucmVtb3ZlRXh0cmFOZXdSb3dPYmoobmV3Um93T2JqLCB0aGlzLmNvbHVtbnMpO1xuICAgICAgICBpZiAoIXRoaXMuYWRkRGF0YUtleVZhbHVlKSB7XG4gICAgICAgICAgZGVsZXRlIG5ld1Jvd09ialt0aGlzLmRhdGFLZXldO1xuICAgICAgICB9XG4gICAgICAgIG5ld1Jvd09iaiA9IHRoaXMuc2V0Um93c0RhdGEobmV3Um93T2JqKTtcbiAgICAgICAgaWYgKHRoaXMuc2F2ZUFsbFJlY29yZCkge1xuICAgICAgICAgIHRoaXMuc2F2ZVJlY29yZEFycmF5LnB1c2gobmV3Um93T2JqKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9uUm93QWRkLmVtaXQobmV3Um93T2JqKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJvd3NEYXRhLmZpbmRJbmRleCgoeCkgPT4geC50ZW1wX2lkID09IHNlbGVjdGVkUm93LnRlbXBfaWQpO1xuICAgICAgICB0aGlzLnRlbXBTYXZlZFJvdy5wdXNoKGluZGV4KTtcbiAgICAgICAgaWYgKHRoaXMuc2F2ZUFsbFJlY29yZCkge1xuICAgICAgICAgIHRoaXMuc2F2ZVJlY29yZEFycmF5LnB1c2gob2JqKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5jaGVja2xpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgY2hlY2tsaXN0Um93cyA9IHRoaXMuc2V0Um93c0RhdGEodGhpcy5jaGVja2xpc3QpO1xuICAgICAgICAgICAgY2hlY2tsaXN0Um93cy5mb3JFYWNoKHJvdyA9PiBkZWxldGUgcm93W3RoaXMuZGF0YUtleV0pO1xuICAgICAgICAgICAgaWYgKHRoaXMub3JpZ2luYWxSb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRSb3dzID0gZ2V0Q2hhbmdlZFJvd3MoY2hlY2tsaXN0Um93cywgdGhpcy5vcmlnaW5hbFJvd3MsIHRoaXMuY29sdW1ucywgdGhpcy5kYXRhS2V5KTtcbiAgICAgICAgICAgICAgdGhpcy5vblJvd1VwZGF0ZS5lbWl0KGZpbHRlcmVkUm93cyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLm9uUm93VXBkYXRlLmVtaXQoY2hlY2tsaXN0Um93cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIG9ialt0aGlzLmRhdGFLZXldOyAvLyByZW1vdmUgdGVtcF9pZCBiZWZvcmUgZW1pdHRpbmdcbiAgICAgICAgICAgIGlmICh0aGlzLm9yaWdpbmFsUm93cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHNpbmdsZVJvd0FycmF5ID0gW29ial07XG4gICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkUm93cyA9IGdldENoYW5nZWRSb3dzKHNpbmdsZVJvd0FycmF5LCB0aGlzLm9yaWdpbmFsUm93cywgdGhpcy5jb2x1bW5zLCB0aGlzLmRhdGFLZXkpO1xuICAgICAgICAgICAgICB0aGlzLm9uUm93VXBkYXRlLmVtaXQoZmlsdGVyZWRSb3dzLmxlbmd0aCA+IDAgPyBmaWx0ZXJlZFJvd3NbMF0gOiBudWxsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMub25Sb3dVcGRhdGUuZW1pdChvYmopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5lZGl0aW5nUm93S2V5c1tyb3dbdGhpcy5kYXRhS2V5XV0gPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi5lcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkgKyAnX29iaiddKSB7XG4gICAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ10gPSB7IC4uLnNlbGVjdGVkUm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10sIGVycm9yTWVzc2FnZTogY29sdW1uLmVycm9yTWVzc2FnZSB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ10gPSB7IGVycm9yTWVzc2FnZTogY29sdW1uLmVycm9yTWVzc2FnZSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHRoaXMuZWRpdGluZ1Jvd0tleXNbcm93W3RoaXMuZGF0YUtleV1dID0gdHJ1ZTtcbiAgICB9XG4gICAgLy8gaWYgYWxsIHJvd3MgaW4gcmVhZCBvbmx5IG1vZGUgdGhlbiBzaG93IGVkaXRBbGxSb3dzIGJ1dHRvbi4gICAgXG4gICAgaWYgKE9iamVjdC52YWx1ZXModGhpcy5lZGl0aW5nUm93S2V5cykuZXZlcnkoKHZhbHVlKSA9PiAhdmFsdWUpKSB7XG4gICAgICB0aGlzLmluRWRpdE1vZGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuc29ydERpc2FibGVkID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICAvLyBjb252ZXJ0IGRhdGUgaW50byB0aW1lXG4gICAgICBpZiAoXG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gJiZcbiAgICAgICAgKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCdQTScpIHx8XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJ0FNJykpXG4gICAgICApIHtcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHNldFRpbWVJbkRhdGUocm93W2NvbHVtbi5maWVsZF0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5OVU1FUklDKSB7XG4gICAgICAgIGNvbnN0IGRpZ2l0c0luZm8gPSBjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvO1xuICAgICAgICBpZiAoY29sdW1uLmZvcm1hdD8udHlwZSA9PT0gJ3BlcmNlbnQnKSB7XG4gICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uYWxsb3dDYWxjdWxhdGUpIHtcbiAgICAgICAgICAgIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBwYXJzZUZsb2F0KChzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdICogMTAwKT8udG9TdHJpbmcoKSkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdICogMTAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUgJiZcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXVxuICAgICAgKSB7XG4gICAgICAgIC8vIHNldCBhdXRvY29tcGVsZXQgYXJyYXkgZGF0YSBhZnRlciBzYXZlIHJvd1xuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gYXV0b21Db21wbGV0ZVRlbXBEYXRhO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQgJiZcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSAmJiAoY29sdW1uLmFsbG93U2F2ZSA9PT0gdHJ1ZSB8fCBjb2x1bW4uYWxsb3dTYXZlID09PSB1bmRlZmluZWQpXG4gICAgICApIHtcbiAgICAgICAgLy8gc2V0IExPT0tVUF9JTlBVVCBkYXRhIGFmdGVyIHNhdmUgcm93XG4gICAgICAgIGlmIChsb29rdXBJbmZvW2NvbHVtbi5maWVsZF0pIHtcbiAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gbG9va3VwSW5mb1tjb2x1bW4uZmllbGRdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmXG4gICAgICAgIGNvbHVtbi5vcHRpb25MYWJlbCAmJlxuICAgICAgICBjb2x1bW4ub3B0aW9uVmFsdWVcbiAgICAgICkge1xuICAgICAgICB0aGlzLnNldERyb3Bkb3duVmFsdWUoY29sdW1uLCBzZWxlY3RlZFJvdyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5hZGROZXdSb3dDaGVjayA9IGZhbHNlO1xuICAgIGlmIChPYmplY3QudmFsdWVzKHRoaXMuZWRpdGluZ1Jvd0tleXMpLmV2ZXJ5KCh2YWx1ZSkgPT4gIXZhbHVlKSAmJiB0aGlzLnNldEdyaWRSZWZyZXNoVGltZSkge1xuICAgICAgdGhpcy5yZWZyZXNoR3JpZCgpO1xuICAgIH1cbiAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuZ3JpZFNlcnZpY2Uucm93VXBkYXRlID0gZmFsc2U7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgLy8gY2hlY2sgdGhlIHZhbGlkYXRpb24gb2YgdGhlIGZpZWxkXG4gIGdyaWRWYWxpZGF0aW9uKGNvbHVtbnM6IGFueSwgcm93OiBhbnksIHNpbmdsZUNlbGw6IGJvb2xlYW4gPSBmYWxzZSk6IGJvb2xlYW4ge1xuICAgIGlmIChzaW5nbGVDZWxsID09IHRydWUpIHtcbiAgICAgIGNvbHVtbnMgPSBbeyAuLi5jb2x1bW5zIH1dXG4gICAgfVxuICAgIGlmICghdGhpcy5ncmlkU2VydmljZS5jaGVja1ZhbGlkaXR5KGNvbHVtbnMsIHJvdywgc2luZ2xlQ2VsbCkpIHtcbiAgICAgIGxldCBlcnJvck1lc3NhZ2VEZXRhaWxzOiBzdHJpbmcgPSAnJztcbiAgICAgIGNvbHVtbnM/LmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICBpZiAoY29sdW1uLmVycm9yTWVzc2FnZSkge1xuICAgICAgICAgIGVycm9yTWVzc2FnZURldGFpbHMgPSBlcnJvck1lc3NhZ2VEZXRhaWxzID8gZXJyb3JNZXNzYWdlRGV0YWlscyArICcgLCAnICsgY29sdW1uLmVycm9yTWVzc2FnZSA6IGNvbHVtbi5lcnJvck1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICBsZXQgaXNSZXF1aXJlZCA9IGNvbHVtbnMuc29tZShcbiAgICAgICAgKGNvbHVtbjogYW55KSA9PiBjb2x1bW4uZXJyb3JNZXNzYWdlICYmIChyb3dbY29sdW1uLmZpZWxkXSA9PT0gbnVsbCB8fCByb3dbY29sdW1uLmZpZWxkXSA9PT0gdW5kZWZpbmVkIHx8IHJvd1tjb2x1bW4uZmllbGRdID09PSAnJylcbiAgICAgICk7XG4gICAgICBpZiAoaXNSZXF1aXJlZCAmJiAhc2luZ2xlQ2VsbCkge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcbiAgICAgICAgICBlcnJvck1lc3NhZ2VEZXRhaWxzLFxuICAgICAgICAgIDUwMDAsXG4gICAgICAgICAgJ1JFUVVJUkVEIEZJRUxEJ1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoZXJyb3JNZXNzYWdlRGV0YWlscywgNTAwMCwgJ0lOVkFMSUQgRklFTEQnKTtcbiAgICAgICAgaWYgKHNpbmdsZUNlbGwpIHtcbiAgICAgICAgICB0aGlzLnNldEVycm9yQ2VsbChjb2x1bW5zWzBdLCByb3cpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNpbmdsZUNlbGwpIHtcbiAgICAgICAgdGhpcy5zZXRFcnJvckNlbGwoY29sdW1uc1swXSwgcm93KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHNldEVycm9yQ2VsbChjb2x1bW4sIHJvdykge1xuICAgIGlmIChjb2x1bW4uZXJyb3JNZXNzYWdlKSB7XG4gICAgICBpZiAocm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpICsgJ19vYmonXSkge1xuICAgICAgICByb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkgKyAnX29iaiddID0geyAuLi5yb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSwgZXJyb3JNZXNzYWdlOiBjb2x1bW4uZXJyb3JNZXNzYWdlIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkgKyAnX29iaiddID0geyBlcnJvck1lc3NhZ2U6IGNvbHVtbi5lcnJvck1lc3NhZ2UgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpZiAocm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpICsgJ19vYmonXSkge1xuICAgICAgICBkZWxldGUgcm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpICsgJ19vYmonXS5lcnJvck1lc3NhZ2VcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSByb3cgOiBhbnlcbiAgICogQHBhcmFtIGluZGV4IDogbnVtYmVyXG4gICAqIENsZWFycyBvdXQgdGhlIGVkaXQgcm93IGFuZCByZXBsYWNlIHdpdGggcmVhZGFibGUgb25lXG4gICAqL1xuICBvblJvd0VkaXRDYW5jZWwocm93OiBhbnksIGluZGV4OiBudW1iZXIpIHtcbiAgICBsZXQgcm93SW5FZGl0TW9kZTogYm9vbGVhbiA9IE9iamVjdC52YWx1ZXModGhpcy5lZGl0aW5nUm93S2V5cykuZXZlcnkoKHZhbHVlKSA9PiAhdmFsdWUpO1xuICAgIGlmIChyb3c/LmlzTmV3KSB7XG4gICAgICB0aGlzLnJvd3NEYXRhLnNwbGljZShpbmRleCwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm93c0RhdGFbaW5kZXhdID0gdGhpcy5lZGl0Um93c1JlY29yZHNbcm93W3RoaXMuZGF0YUtleV1dO1xuICAgICAgZGVsZXRlIHRoaXMuZWRpdFJvd3NSZWNvcmRzW3Jvd1t0aGlzLmRhdGFLZXldXTtcbiAgICB9XG4gICAgZGVsZXRlIHRoaXMuZWRpdGluZ1Jvd0tleXNbcm93W3RoaXMuZGF0YUtleV1dO1xuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOKSB7XG4gICAgICAgIHRoaXMuc2V0RHJvcGRvd25WYWx1ZShjb2x1bW4sIHJvdyk7XG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmIGNvbHVtbi5kaXNwbGF5RmllbGQpIHtcbiAgICAgICAgdGhpcy5yb3dzRGF0YVtpbmRleF1bY29sdW1uLmZpZWxkXSA9IHJvd1tjb2x1bW4uZmllbGRdPy52YWx1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmluRWRpdE1vZGUgPSBmYWxzZTtcbiAgICBpZiAocm93SW5FZGl0TW9kZSkge1xuICAgICAgdGhpcy5zb3J0RGlzYWJsZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5hZGROZXdSb3dDaGVjayA9IGZhbHNlO1xuICAgIHRoaXMucm93VXBkYXRlQ2hhbmdlID0gZmFsc2U7XG4gICAgdGhpcy5pbmxpbmVSb3dDYW5jZWwuZW1pdChyb3cpO1xuICAgIGlmIChyb3dJbkVkaXRNb2RlICYmIHRoaXMuc2V0R3JpZFJlZnJlc2hUaW1lKSB7XG4gICAgICB0aGlzLnJlZnJlc2hHcmlkKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0gcm93XG4gICAqIFNlbmRzIHRoZSByb3cgcGF5bG9hZCB0byBwYXJlbnQgZm9yIGRlbGV0aW9uc1xuICAgKi9cblxuICAvKipcbiAgKnNldCB0aGUgZ3JpZERhdGEgb24gcm93IGFjdGlvbnMgZXZlbnRzXG4gICovXG4gIHJvd0FjdGlvbkV2ZW50cyhyb3dJbmZvLCBkZWxldGVSb3c6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGxldCBhY3Rpb246IHN0cmluZyA9ICcnO1xuICAgIGxldCBncmlkUm93c0RhdGE6IGFueVtdID0gWy4uLnRoaXMucm93c0RhdGFdO1xuICAgIGNvbnN0IGluZGV4ID0gZ3JpZFJvd3NEYXRhLmZpbmRJbmRleCgocm93RGF0YSkgPT4gcm93SW5mb1t0aGlzLmRhdGFLZXldID09PSByb3dEYXRhW3RoaXMuZGF0YUtleV0pO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICBpZiAoZGVsZXRlUm93KSB7XG4gICAgICAgIGdyaWRSb3dzRGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB0aGlzLnJvd3NEYXRhID0gWy4uLmdyaWRSb3dzRGF0YV07XG4gICAgICAgIGFjdGlvbiA9ICdkZWxldGUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuYWRkTmV3Um93Q2hlY2spIHtcbiAgICAgICAgICBhY3Rpb24gPSAnaW5zZXJ0JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhY3Rpb24gPSAndXBkYXRlJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vbkdyaWRSb3dBY3Rpb25zLm9ic2VydmVycy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICByb3dJbmZvWydyb3dBY3Rpb24nXSA9IGFjdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBncmlkUm93c0RhdGFbaW5kZXhdID0gcm93SW5mbztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5nZW5lcmF0ZVJvd3NEYXRhQ29weSA9IGZhbHNlO1xuICAgIHRoaXMucm93VXBkYXRlQ2hhbmdlID0gZmFsc2U7XG4gICAgdGhpcy5yb3dzQ2hhbmdlLmVtaXQodGhpcy5yb3dzRGF0YSk7XG4gICAgdGhpcy5vbkdyaWRSb3dBY3Rpb25zLmVtaXQoZ3JpZFJvd3NEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIERlbGV0ZSBjb25maXJtYXRpb24gZGlhbG9nIHdoZW4gdHJ5aW5nIHRvIGRlbGV0ZSByb3dcbiAgICovXG4gIGRlbGV0ZVJlY29yZChyb3c6IGFueSkge1xuICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgIG1lc3NhZ2U6ICdBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyByZWNvcmQ/JyxcbiAgICAgIGhlYWRlcjogJ0RlbGV0ZSBDb25maXJtYXRpb24nLFxuICAgICAgaWNvbjogJ3BpIHBpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJyxcbiAgICAgIGtleTogJ2hhbmRsZUlubGluZUNSVUQnLFxuICAgICAgYWNjZXB0OiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnVzZVNlcnZlclNpZGVFdmVudHMpIHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNldCB0aGUgZ3JpZCBkZWxldGVkIGRhdGEgXG4gICAgICAgIHRoaXMucm93QWN0aW9uRXZlbnRzKHJvdywgdHJ1ZSk7XG4gICAgICAgIHRoaXMub25Sb3dEZWxldGUuZW1pdChyb3cpO1xuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5pbkVkaXRNb2RlID0gZmFsc2U7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIHJlamVjdDogKCkgPT4ge1xuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY2xvc2UoKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVG8gc2V0IGRpc2FibGVkIHRoZSBjb250cm9sXG4gICAqL1xuICBhbGxvd0Rpc2FibGVkKGNvbHVtbjogYW55LCByb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIGxldCB2YWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGlmIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSAmJiB0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgT2JqZWN0LmtleXMocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10pPy5pbmNsdWRlcygnZGlzYWJsZWQnKSAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzYWJsZWQgPT09IHRydWVcbiAgICAgICkge1xuICAgICAgICB2YWx1ZSA9IHRydWU7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChcbiAgICAgICAgT2JqZWN0LmtleXMocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10pPy5pbmNsdWRlcygncm93RGlzYWJsZWQnKSAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8ucm93RGlzYWJsZWQgPT09IHRydWVcbiAgICAgICkge1xuICAgICAgICB2YWx1ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjb2x1bW4uZGlzYWJsZWQpIHtcbiAgICAgIHZhbHVlID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvIHNldCBhZ2dyZWdhdGUgaW4gZ3JpZCBmb290ZXJcbiAgICovXG4gIHNldEFnZ3JlZ2F0ZVRleHQoY29sdW1uOiBJR3JpZENvbHVtbikge1xuICAgIGlmIChjb2x1bW4/LmFnZ3JlZ2F0ZSkge1xuICAgICAgY29sdW1uLmFnZ3JlZ2F0ZS5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5yb3dzRGF0YSAmJiB0aGlzLnJvd3NEYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBsZXQgY29sdW1uVHlwZTogRUdyaWRBZ2dyZWdhdGUgPSBjb2wudHlwZTtcbiAgICAgICAgICBpZiAoY29sdW1uVHlwZSA9PT0gRUdyaWRBZ2dyZWdhdGUuQ09VTlQpIHtcbiAgICAgICAgICAgIGxldCBjb3VudCA9IHRoaXMucm93c0RhdGEubGVuZ3RoO1xuICAgICAgICAgICAgY291bnQgPSB0aGlzLnNldEZldGNoQWdncmVnYXRlZFZhbHVlKGNvbHVtbiwgY291bnQsIDEpO1xuICAgICAgICAgICAgY29sLmFnZ3JWYWx1ZSA9IHRoaXMuc2V0QWdncmVnYXRlRm9vdGVyVGV4dChjb2wsIGNvdW50LCAnQ291bnQnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb2x1bW5UeXBlID09PSBFR3JpZEFnZ3JlZ2F0ZS5TVU0gfHxcbiAgICAgICAgICAgIGNvbHVtblR5cGUgPT09IEVHcmlkQWdncmVnYXRlLkFWRVJBR0VcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbFZhbHVlczogbnVtYmVyW10gPSB0aGlzLmdldENvbHVtblZhbHVlcyhjb2x1bW4pO1xuICAgICAgICAgICAgaWYgKGNvbFZhbHVlcyAmJiBjb2xWYWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBsZXQgc3VtID0gY29sVmFsdWVzLnJlZHVjZSgoYWNjLCBjdXIpID0+IGFjYyArIGN1ciwgMCk7XG4gICAgICAgICAgICAgIGlmIChjb2x1bW5UeXBlID09PSBFR3JpZEFnZ3JlZ2F0ZS5TVU0pIHtcbiAgICAgICAgICAgICAgICBzdW0gPSB0aGlzLnNldEZldGNoQWdncmVnYXRlZFZhbHVlKGNvbHVtbiwgc3VtLCAyKTtcbiAgICAgICAgICAgICAgICBjb2wuYWdnclZhbHVlID0gdGhpcy5zZXRBZ2dyZWdhdGVGb290ZXJUZXh0KGNvbCwgc3VtLCAnU3VtJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGNvbHVtblR5cGUgPT09IEVHcmlkQWdncmVnYXRlLkFWRVJBR0UpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXZlcmFnZSA9IHN1bSAvIGNvbFZhbHVlcy5sZW5ndGggfHwgMDtcbiAgICAgICAgICAgICAgICBhdmVyYWdlID0gdGhpcy5zZXRGZXRjaEFnZ3JlZ2F0ZWRWYWx1ZShjb2x1bW4sIHN1bSwgMyk7XG4gICAgICAgICAgICAgICAgY29sLmFnZ3JWYWx1ZSA9IHRoaXMuc2V0QWdncmVnYXRlRm9vdGVyVGV4dChcbiAgICAgICAgICAgICAgICAgIGNvbCxcbiAgICAgICAgICAgICAgICAgIGF2ZXJhZ2UsXG4gICAgICAgICAgICAgICAgICAnQXZnJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sLmFnZ3JWYWx1ZSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBzZXQgdGhlIGFnZ3JlZ2F0YWlvbiB2YWx1ZSB0aGF0IGNvbWluZyBmcm9tIGZldGNoXG4gIHNldEZldGNoQWdncmVnYXRlZFZhbHVlKGNvbHVtbiwgYWdncmVnYXRlVmFsdWUsIGFnZ3JlZ2F0ZUFjdGlvbikge1xuICAgIGlmICh0aGlzLmFnZ3JlZ2F0ZWRSZXN1bHQ/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGFnZ3JlZ2F0ZWRDb2x1bW4gPSB0aGlzLmFnZ3JlZ2F0ZWRSZXN1bHQuZmluZCgoYWdncmVnYXRlKSA9PiBhZ2dyZWdhdGUuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSAmJiBhZ2dyZWdhdGUuYWdncmVnYXRpb25PcGVyYXRpb24gPT09IGFnZ3JlZ2F0ZUFjdGlvbik7XG4gICAgICBpZiAoYWdncmVnYXRlZENvbHVtbikge1xuICAgICAgICBhZ2dyZWdhdGVWYWx1ZSA9IGFnZ3JlZ2F0ZWRDb2x1bW4/LnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICBhZ2dyZWdhdGVWYWx1ZSA9IGlzTmFOKE51bWJlcihhZ2dyZWdhdGVWYWx1ZSkpID8gMCA6IE51bWJlcihhZ2dyZWdhdGVWYWx1ZSk7XG4gICAgcmV0dXJuIGFnZ3JlZ2F0ZVZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldCBncmlkIEFnZ3JlZ2F0ZSB2YWx1ZXNcbiAgICovXG4gIHNldEFnZ3JlZ2F0ZUZvb3RlclRleHQoY29sdW1uOiBhbnksIHZhbHVlOiBudW1iZXIsIGRlZmF1bHRDYXB0aW9uOiBzdHJpbmcpIHtcbiAgICBjb25zdCBpc0RlY2ltYWwgPSBjb2x1bW4uZm9ybWF0Py50eXBlID09PSAnZGVjaW1hbCc7XG4gICAgY29uc3QgZm9ybWF0UGFyYW1zID0gY29sdW1uLmZvcm1hdD8uZm9ybWF0UGFyYW1zO1xuICAgIGNvbnN0IGRpZ2l0c0luZm8gPSBjb2x1bW4uZm9ybWF0Py5kaWdpdHNJbmZvO1xuICAgIGNvbnN0IG1pbkZyYWN0aW9uRGlnaXRzID0gZm9ybWF0UGFyYW1zPy5taW5GcmFjdGlvbkRpZ2l0cyA/PyBkaWdpdHNJbmZvID8/IDI7XG4gICAgY29uc3QgbWF4RnJhY3Rpb25EaWdpdHMgPSBmb3JtYXRQYXJhbXM/Lm1heEZyYWN0aW9uRGlnaXRzID8/IGRpZ2l0c0luZm8gPz8gMjtcbiAgICBjb25zdCBjYXB0aW9uID0gY29sdW1uLmNhcHRpb24/Lmxlbmd0aCA+IDAgPyBjb2x1bW4uY2FwdGlvbiA6IGRlZmF1bHRDYXB0aW9uO1xuXG4gICAgaWYgKCFpc0RlY2ltYWwpIHJldHVybiBgJHtjYXB0aW9ufSAke3ZhbHVlPy50b0ZpeGVkKDApPy5yZXBsYWNlKC9cXEIoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCAnLCcpfSA8L2JyPmA7XG4gICAgY29uc3QgZGVjaW1hbFBvaW50ID0gKCgpID0+IHtcbiAgICAgIGNvbnN0IGZhY3RvciA9IDEwICoqIG1heEZyYWN0aW9uRGlnaXRzO1xuICAgICAgY29uc3QgW2ludFBhcnQsIGRlY1BhcnQgPSAnJ10gPSAoTWF0aC50cnVuYyh2YWx1ZSAqIGZhY3RvcikgLyBmYWN0b3IpPy50b1N0cmluZygpPy5zcGxpdCgnLicpO1xuICAgICAgcmV0dXJuIGludFBhcnQucmVwbGFjZSgvXFxCKD89KFxcZHszfSkrKD8hXFxkKSkvZywgJywnKSArICcuJyArIGRlY1BhcnQ/LnBhZEVuZChtaW5GcmFjdGlvbkRpZ2l0cywgJzAnKTtcbiAgICB9KSgpO1xuICAgIHJldHVybiBgJHtjYXB0aW9ufSAke2RlY2ltYWxQb2ludH0gPC9icj5gO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldCBkZWNpbWF0IGFuZCBudW1lcmljIHZhbHVlc1xuICAgKi9cbiAgYWxsb3dMZWFkaW5nRG90KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgY29uc3QgaW5wdXQgPSBldmVudD8udGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgaWYgKGV2ZW50Py5rZXkgPT09ICcuJyAmJiBpbnB1dD8uc2VsZWN0aW9uU3RhcnQgPT09IDApIHtcbiAgICAgIGlucHV0LnZhbHVlID0gJzAuJztcbiAgICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIHNldE51bWVyaWNWYWx1ZXMoKSB7XG4gICAgaWYgKHRoaXMuY29sdW1ucz8ubGVuZ3RoID4gMCAmJiB0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTlVNRVJJQykge1xuICAgICAgICAgIGNvbnN0IGRpZ2l0c0luZm8gPSBjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvO1xuICAgICAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICBpZiAoY29sdW1uPy5mb3JtYXQ/LnR5cGUgPT09ICdwZXJjZW50JyAmJiByb3dbY29sdW1uLmZpZWxkXSkge1xuICAgICAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5hbGxvd0NhbGN1bGF0ZSkge1xuICAgICAgICAgICAgICAgIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHBhcnNlRmxvYXQoKHJvd1tjb2x1bW4uZmllbGRdICogMTAwKT8udG9TdHJpbmcoKSkudG9GaXhlZChkaWdpdHNJbmZvKTsgICAgICAgICAvL1RIRVNFIENPTU1FTlRFRCBPVVQgTElORVMgU0hPVUxEIFJVTiBPTiBTQVZFXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF0gKiAxMDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHBhcnNlRmxvYXQocm93W2NvbHVtbi5maWVsZF0pLnRvRml4ZWQoZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uPy5mb3JtYXQ/LnR5cGUgPT09ICdkZWNpbWFsJyAmJiByb3dbY29sdW1uLmZpZWxkXSkge1xuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHBhcnNlRmxvYXQocm93W2NvbHVtbi5maWVsZF0pLnRvRml4ZWQoMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGdldCBjb2x1bW4gdmFsdWUgYmFzZWQgb24gY29sdW1uIGZpZWxkXG4gICAqL1xuICBnZXRDb2x1bW5WYWx1ZXMoY29sdW1uOiBJR3JpZENvbHVtbik6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5yb3dzRGF0YVxuICAgICAgLm1hcCgocm93KSA9PiB7XG4gICAgICAgIGNvbnN0IG9ialRleHQgPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8udGV4dDtcbiAgICAgICAgbGV0IHZhbHVlID0gb2JqVGV4dCAhPSBudWxsID8gb2JqVGV4dCA6IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgICByZXR1cm4gaXNOYU4oTnVtYmVyKHZhbHVlKSkgPyAwIDogTnVtYmVyKHZhbHVlKTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKCh2YWwpID0+IHZhbCAhPSBudWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBFeHBvcnQgdG8gUERGXG4gICAqL1xuICBleHBvcnRQZGYoKSB7XG4gICAgdmFyIGV4cG9ydERhdGEgPSB0aGlzLnNldEV4cG9ydERhdGEoWy4uLnRoaXMucm93c0RhdGFdLCB0cnVlKTtcbiAgICBsZXQgZG9jID0gbmV3IGpzUERGKCdwJywgJ3B0Jyk7XG4gICAgZG9jLnRhYmxlKDEsIDEsIGV4cG9ydERhdGEucm93cywgZXhwb3J0RGF0YS5oZWFkaW5ncywgeyBhdXRvU2l6ZTogdHJ1ZSB9KTtcbiAgICBkb2Muc2F2ZSgnRXhwb3J0LnBkZicpO1xuICB9XG5cbiAgLyoqXG4gICAqICBTdWItZnVuY3Rpb24gdG8gc2V0IHJvd3MgZm9yIGV4cG9ydCB0byBQZGYsIGFuZCBFeGNlbFxuICAgKiBAcm93cyBwYXJhbSBmb3Igcm93c1xuICAgKiBAaXNFeGNlbCBwYXJhbSBmb3IgZXhwb3J0IHRvIGV4Y2VsIGluZGljYXRpb25cbiAgICovXG4gIHNldEV4cG9ydERhdGEocm93czogYW55W10gPSBbXSwgaXNQZGY6IGJvb2xlYW4gPSBmYWxzZSk6IElHcmlkRGF0YUV4cG9ydCB7XG4gICAgY29uc3QgaGVhZGluZ3M6IGFueSA9IHRoaXMuY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gY29sdW1uLmZpZWxkKTtcbiAgICByb3dzLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgZm9yICh2YXIgcHJvcCBpbiByb3cpIHtcbiAgICAgICAgaWYgKCFoZWFkaW5ncy5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgIGRlbGV0ZSByb3dbcHJvcF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUGRmKSB7XG4gICAgICAgICAgcm93W3Byb3BdID1cbiAgICAgICAgICAgICFyb3dbcHJvcF0gJiYgdHlwZW9mIHJvd1twcm9wXSAhPT0gJ2Jvb2xlYW4nXG4gICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgOiByb3dbcHJvcF0udG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB7IHJvd3MsIGhlYWRpbmdzIH07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogRXhwb3J0IHRvIEV4Y2VsXG4gICAqL1xuICBleHBvcnRFeGNlbCgpIHtcbiAgICBpZiAodGhpcy5jb25maWdTZXJ2aWNlLmV4cG9ydFRvRXhjZWw/LnVuaXF1ZUtleSkge1xuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuZ2V0VXNlcnNEYXRhKCkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgICBsZXQgcm93cyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0RGF0YUZpZWxkcyhyZXNwb25zZT8ucmVjb3Jkcyk7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmV4cG9ydEZpbGUocm93cyk7XG4gICAgICB9LFxuICAgICAgICAoeyBlcnJvciB9KSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYXBpRXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmV4cG9ydEZpbGUodGhpcy5yb3dzRGF0YSk7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0RmlsZShyZWNvcmRzKSB7XG4gICAgbGV0IGFycjogYW55ID0gW107XG4gICAgcmVjb3Jkcy5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgbGV0IG9iajogYW55ID0ge307XG4gICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBncmlkSGVhZGVyID0gY29sdW1uLmhlYWRlcjtcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSykge1xuICAgICAgICAgIGNvbnN0IGxpbmtPYmogPSByb3dbY29sdW1uLmRpc3BsYXlUZXh0Py50b0xvd2VyQ2FzZSgpICsgJ19vYmonXTtcbiAgICAgICAgICBvYmpbZ3JpZEhlYWRlcl0gPSByb3dbY29sdW1uLmZpZWxkXSArICd8JyArIGxpbmtPYmo/Lmh5cGVybGluaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvYmpbZ3JpZEhlYWRlcl0gPSByb3dbY29sdW1uLmZpZWxkXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBhcnIucHVzaChvYmopO1xuICAgIH0pO1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UuZXhwb3J0RXhjZWwoYXJyLCB0aGlzLnNlbGVjdGVkQ29sdW1ucywgRUdyaWRFeGNlbC5FWFBPUlQpO1xuICB9XG4gIGdldFVzZXJzRGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0U2VydmljZS5nZXQ8YW55W10sIFJlcXVlc3REdG8+KCcvRGF0YS9GZXRjaCcsIHtcbiAgICAgIHVuaXF1ZUtleTogdGhpcy5jb25maWdTZXJ2aWNlLmV4cG9ydFRvRXhjZWw/LnVuaXF1ZUtleSxcbiAgICAgIGZpbHRlcnM6IHRoaXMuY29uZmlnU2VydmljZS5leHBvcnRUb0V4Y2VsPy5maWx0ZXJzLFxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKnNldCBjb25maWcgZGF0YSBvZiBsb29rdXAgY29udHJvbCBkaWFsb2dcbiAgICovXG4gIHNldExvb2t1cERpYWxvZ0NvbmZpZyhyb3c6IGFueSwgY29sdW1uOiBhbnksIGRhdGE6IGFueSkge1xuICAgIGxldCBzZWxlY3Rpb246IHN0cmluZyA9ICcnO1xuICAgIGlmIChyb3dbY29sdW1uLmZpZWxkXSAmJiB0eXBlb2Ygcm93W2NvbHVtbi5maWVsZF0gPT09ICdvYmplY3QnKSB7XG4gICAgICBzZWxlY3Rpb24gPSByb3dbY29sdW1uLmZpZWxkXS50ZXh0O1xuICAgIH0gZWxzZSBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCAmJiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF0pIHtcbiAgICAgIHNlbGVjdGlvbiA9IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0aW9uID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgfVxuXG4gICAgaWYgKGNvbHVtbi5maWVsZCAmJiB0eXBlb2Ygcm93W2NvbHVtbi5maWVsZF0gPT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zdCBuZXdSb3cgPSB7IC4uLnJvdyB9O1xuICAgICAgbmV3Um93W2NvbHVtbi5maWVsZF0gPSBuZXdSb3dbY29sdW1uLmZpZWxkXT8udmFsdWU7XG4gICAgICByb3cgPSB7IC4uLm5ld1JvdyB9O1xuICAgIH1cblxuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJiBkYXRhKSB7XG4gICAgICBsZXQgb2JqID0gYXV0b1NldExvb2t1cERhdGEoZGF0YSwgcm93KTtcbiAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnLWRhdGEnXSA9IG9iajtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvd0RhdGE6IHJvd1tjb2x1bW4uZmllbGQgKyAnLWRhdGEnXSxcbiAgICAgIHNlbGVjdGlvbjogc2VsZWN0aW9uLFxuICAgICAgY29sdW1uOiBjb2x1bW4sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIGxpbmsgb24gbG9va3VwQ29udHJvbCBjb250cm9sIGluIHJlYWQgb25seSBtb2RlIHdoZW4gZWRpdExpbmsgc2V0IHRydWVcbiAgICovXG4gIG9wZW5Mb29rdXBIeXBlcmxpbmsoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpIHtcbiAgICBjb25zdCBsb29rdXBJbmZvID0gY29sdW1uLmxvb2t1cENvbnRyb2w7XG4gICAgaWYgKGNvbHVtbi5lZGl0TGluayA9PT0gdHJ1ZSAmJiBsb29rdXBJbmZvLmNvbXBvbmVudCkge1xuICAgICAgY29uc3QgZGF0YSA9IGxvb2t1cEluZm8uZGF0YSA/IGxvb2t1cEluZm8uZGF0YSA6IGxvb2t1cEluZm8uZGF0YS5kYXRhO1xuICAgICAgbGV0IG9iajogYW55ID0gdGhpcy5zZXRMb29rdXBEaWFsb2dDb25maWcocm93LCBjb2x1bW4sIGRhdGEpO1xuICAgICAgb2JqWydjb21wb25lbnQnXSA9IGxvb2t1cEluZm8uY29tcG9uZW50O1xuICAgICAgY29uc3QgcmVmID0gdGhpcy5vcGVuTG9va3VwRGlhbG9nKG9iaik7XG4gICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIGRyYWdnYWJsZURpYWxvZyhjb2x1bW4/LmZpZWxkID8gY29sdW1uPy5maWVsZCA6IGNvbHVtbj8uaGVhZGVyKVxuICAgICAgICB9KTtcbiAgICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgIGlmIChyZXMgJiYgY29sdW1uLm9uUmV0dXJuKSB7XG4gICAgICAgICAgY29sdW1uLm9uUmV0dXJuKHJlcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIGxvb2t1cCBEaWFsb2dcbiAgICovXG4gIG9wZW5Mb29rdXBEaWFsb2coY29sdW1uPzogYW55LCByb3c6IGFueSA9IHt9KSB7XG4gICAgdGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0ID0gZmFsc2U7XG4gICAgdGhpcy5mb3JtU2VydmljZS5maWVsZEZvY3VzZWRPdXQgPSBmYWxzZTtcbiAgICBjb25zdCBjb2x1bW5EYXRhID0gY29sdW1uLmNvbHVtbj8ubG9va3VwQ29udHJvbD8uZGF0YSA/IGNvbHVtbi5jb2x1bW4ubG9va3VwQ29udHJvbC5kYXRhIDogY29sdW1uLmNvbHVtbi5kYXRhO1xuICAgIGlmIChyb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2wpIHtcbiAgICAgIHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8uaGVhZGVyID8gY29sdW1uRGF0YS5oZWFkZXIgPSByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmhlYWRlciA6ICcnXG4gICAgICByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LndpZHRoID8gY29sdW1uRGF0YS53aWR0aCA9IHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8ud2lkdGggOiAnJ1xuICAgICAgcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5oZWlnaHQgPyBjb2x1bW5EYXRhLmhlaWdodCA9IHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8uaGVpZ2h0IDogJydcbiAgICAgIHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8udmFsdWVQcm9wID8gY29sdW1uRGF0YS52YWx1ZVByb3AgPSByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LnZhbHVlUHJvcCA6IFwiXCJcbiAgICAgIHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8ubGFiZWxQcm9wID8gY29sdW1uRGF0YS5sYWJlbFByb3AgPSByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmxhYmVsUHJvcCA6IFwiXCJcbiAgICAgIHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8uZGF0YSA/IGNvbHVtbkRhdGEuZGF0YSA9IHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8uZGF0YSA6ICcnXG4gICAgfVxuXG4gICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3Blbihjb2x1bW4uY29tcG9uZW50LCB7XG4gICAgICAuLi5jb2x1bW5EYXRhLFxuICAgICAgc3R5bGVDbGFzczogJ2xvb2t1cC1tb2RlbCcsXG4gICAgICBoZWlnaHQ6IGNvbHVtbkRhdGE/LmhlaWdodCA/IGNvbHVtbkRhdGE/LmhlaWdodCA6ICc5MHZoJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgc2VsZWN0aW9uOiBjb2x1bW4uc2VsZWN0aW9uLFxuICAgICAgICBmaWVsZDogY29sdW1uLmNvbHVtbi5maWVsZCxcbiAgICAgICAgbGFiZWxQcm9wOiBjb2x1bW4uY29sdW1uLmxvb2t1cENvbnRyb2w/LmRhdGE/LmxhYmVsUHJvcCxcbiAgICAgICAgLi4uY29sdW1uLnJvd0RhdGEsXG4gICAgICB9LFxuICAgICAgY2xvc2FibGU6IHRydWUsXG4gICAgICBmb2N1c09uU2hvdzogZmFsc2VcbiAgICB9KTtcbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgLnBpcGUodGFrZSgxKSkgLy8gRW1pdCBvbmx5IG9uY2Ugd2hlbiB0aGUgem9uZSBiZWNvbWVzIHN0YWJsZVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmWydkaWFsb2dDbG9zZSddID0gdGhpcy5kaWFsb2dSZWYuY2xvc2U7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlID0gdGhpcy5pbnRlcmNlcHREaWFsb2dDbG9zZS5iaW5kKHRoaXMsIHRoaXMuZGlhbG9nUmVmKTtcbiAgICAgIH0pO1xuXG4gICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICB0aGlzLmRpYWxvZ1JlZlsnZGlhbG9nQ2xvc2UnXSA9IHRoaXMuZGlhbG9nUmVmLmNsb3NlO1xuICAgIC8vICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UgPSB0aGlzLmludGVyY2VwdERpYWxvZ0Nsb3NlLmJpbmQodGhpcyk7XG4gICAgLy8gfSwgODAwKTtcblxuICAgIHRoaXMuc2V0RHluYW1pY0RpYWxvZ1JlZih0aGlzLmRpYWxvZ1JlZik7XG4gICAgY29uc3QgY29tcG9uZW50TmFtZSA9IHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkXT8ubmFtZTtcbiAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgdGhpcy5wYWdlTG9nZ2VyU2VydmljZS5zYXZlUGFnZUxvZ2dlckluZm8odGhpcy5yb3V0ZXIudXJsPy5zdWJzdHJpbmcoMSksIGNvbXBvbmVudE5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kaWFsb2dSZWY7XG4gIH1cblxuICBpbnRlcmNlcHREaWFsb2dDbG9zZShkaWFsb2dSZWY6IGFueSwgZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGRpYWxvZ0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncC1kaWFsb2cnKTtcbiAgICBpZiAoIWRpYWxvZ0VsKSB7XG4gICAgICBkaWFsb2dSZWY/LmRpYWxvZ0Nsb3NlKGV2ZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZm9ybVNhdmVCdXR0b24gPSBkaWFsb2dFbFswXT8ucXVlcnlTZWxlY3RvcignLmZvcm0tc2F2ZS1idXR0b24nKTtcbiAgICBjb25zdCBncmlkU2F2ZUFsbEJ1dHRvbiA9IGRpYWxvZ0VsWzBdPy5xdWVyeVNlbGVjdG9yKCcuc2F2ZS1hbGwtZ3JpZCcpO1xuICAgIGNvbnN0IGhhc1Vuc2F2ZWQgPSAoZm9ybVNhdmVCdXR0b24gfHwgZ3JpZFNhdmVBbGxCdXR0b24pICYmICh0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQgfHwgdGhpcy5mb3JtU2VydmljZS5maWVsZEZvY3VzZWRPdXQpO1xuICAgIGlmIChoYXNVbnNhdmVkKSB7XG4gICAgICBpZiAoY29uZmlybShcIllvdSB3aWxsIGxvc2UgY2hhbmdlcyBub3Qgc2F2ZWQgb24gcGFnZS4gV291bGQgeW91IGxpa2UgdG8gY29udGludWU/XCIpKSB7XG4gICAgICAgIGRpYWxvZ1JlZj8uZGlhbG9nQ2xvc2UoZXZlbnQpO1xuICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGlhbG9nUmVmPy5kaWFsb2dDbG9zZShldmVudCk7XG4gICAgfVxuICB9XG5cbiAgLy8gc2V0IGRpYWxvZyByZWYgd2hlbiBwb3B1cCBvcGVuXG4gIHNldER5bmFtaWNEaWFsb2dSZWYocmVmKSB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLmRpYWxvZ0NvbXBvbmVudFJlZk1hcC5nZXQocmVmKTtcbiAgICBjb25zdCBkeW5hbWljQ29tcG9uZW50ID0gZGlhbG9nUmVmPy5pbnN0YW5jZSBhcyBEeW5hbWljRGlhbG9nQ29tcG9uZW50O1xuICAgIGNvbnN0IGFyaWFMYWJlbGxlZEJ5ID0gZHluYW1pY0NvbXBvbmVudC5nZXRBcmlhTGFiZWxsZWRCeSgpO1xuICAgIGR5bmFtaWNDb21wb25lbnQuZ2V0QXJpYUxhYmVsbGVkQnkgPSAoKSA9PiBhcmlhTGFiZWxsZWRCeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIGRpYWxvZyBvbiBsb29rdXBDb250cm9sIGZpZWxkXG4gICAqL1xuICBzZWxlY3RMb29rdXBGaWVsZChjb2x1bW46IGFueSwgcm93PzogYW55KSB7XG4gICAgdGhpcy5vbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpO1xuICAgIGxldCBvYmo6IGFueSA9IHRoaXMuc2V0TG9va3VwRGlhbG9nQ29uZmlnKFxuICAgICAgcm93LFxuICAgICAgY29sdW1uLFxuICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmRhdGFcbiAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8uZGF0YSA6IGNvbHVtbj8ubG9va3VwQ29udHJvbD8uZGF0YT8uZGF0YVxuICAgICk7XG5cbiAgICBvYmpbJ2NvbXBvbmVudCddID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmNvbXBvbmVudCA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5jb21wb25lbnQgOiBjb2x1bW4ubG9va3VwQ29udHJvbD8uY29tcG9uZW50O1xuICAgIGNvbnN0IHJlZiA9IHRoaXMub3Blbkxvb2t1cERpYWxvZyhvYmosIHJvdyk7XG4gICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgIC5waXBlKHRha2UoMSkpIC8vIEVtaXQgb25seSBvbmNlIHdoZW4gdGhlIHpvbmUgYmVjb21lcyBzdGFibGVcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBkcmFnZ2FibGVEaWFsb2coY29sdW1uPy5maWVsZCA/IGNvbHVtbj8uZmllbGQgOiBjb2x1bW4/LmhlYWRlcilcbiAgICAgIH0pO1xuICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZShcbiAgICAgIChyZXMpID0+IHtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIGlmICghcm93Ll9pc0VkaXRlZCkge1xuICAgICAgICAgICAgcm93Ll9pc0VkaXRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJvdy5faXNFZGl0ZWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuZ3JpZFNlcnZpY2UudXNlclNlYXJjaGVkID0gZmFsc2U7XG4gICAgICAgICAgbGV0IHZhbHVlID0gc2V0RGlhbG9nUmVzcG9uc2UoXG4gICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgICBjb2x1bW4ubG9va3VwQ29udHJvbCxcbiAgICAgICAgICAgIHJlc1xuICAgICAgICAgICk7XG4gICAgICAgICAgcmVzID0gb2JqQ29udmVydFRvTG93ZXIocmVzKTtcbiAgICAgICAgICBsZXQgbGFiZWxQcm9wID0gY29sdW1uPy5sb29rdXBDb250cm9sPy5kYXRhPy5sYWJlbFByb3A/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgbGV0IHZhbHVlUHJvcCA9IGNvbHVtbj8ubG9va3VwQ29udHJvbD8uZGF0YT8udmFsdWVQcm9wPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGxldCBjb2x1bW5GaWVsZCA9IGNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICAgIGlmIChyb3c/Lmhhc093blByb3BlcnR5KGNvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW5GaWVsZF0gPSByZXNbdmFsdWVQcm9wID8gdmFsdWVQcm9wIDogY29sdW1uRmllbGRdO1xuICAgICAgICAgICAgICByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0gPSByZXNbbGFiZWxQcm9wID8gbGFiZWxQcm9wIDogY29sdW1uLmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW5GaWVsZF0gPSB7XG4gICAgICAgICAgICAgICAgdGV4dDogcmVzW2xhYmVsUHJvcCA/IGxhYmVsUHJvcCA6IGNvbHVtbi5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV0sXG4gICAgICAgICAgICAgICAgdmFsdWU6IHJlc1t2YWx1ZVByb3AgPyB2YWx1ZVByb3AgOiBjb2x1bW5GaWVsZF0sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLnZhbHVlKSB7XG4gICAgICAgICAgICB2YWx1ZVsnZmllbGQnXSA9IGNvbHVtbkZpZWxkO1xuICAgICAgICAgICAgaWYgKGxhYmVsUHJvcCB8fCB2YWx1ZVByb3ApIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbkZpZWxkXSA9IHtcbiAgICAgICAgICAgICAgICB0ZXh0OiByZXNbbGFiZWxQcm9wID8gbGFiZWxQcm9wIDogcmVzW2xhYmVsUHJvcF1dLFxuICAgICAgICAgICAgICAgIHZhbHVlOiByZXNbdmFsdWVQcm9wID8gdmFsdWVQcm9wIDogcmVzW2xhYmVsUHJvcF1dLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbkZpZWxkXSA9IHZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobGFiZWxQcm9wIHx8IHZhbHVlUHJvcCkge1xuICAgICAgICAgICAgICByb3dbY29sdW1uRmllbGRdID0ge1xuICAgICAgICAgICAgICAgIHRleHQ6IHJlc1tsYWJlbFByb3AgPyBsYWJlbFByb3AgOiB2YWx1ZVByb3AgPyB2YWx1ZVByb3AgOiByZXNbY29sdW1uRmllbGRdXSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogcmVzW3ZhbHVlUHJvcCA/IHZhbHVlUHJvcCA6IHJlc1tjb2x1bW5GaWVsZF1dLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbkZpZWxkXSA9IHJlc1tjb2x1bW5GaWVsZF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGRdKSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddID0geyAuLi5yb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSwgdGV4dDogcm93W2NvbHVtbi5maWVsZF0gfTtcbiAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHJvd1tjb2x1bW4uZmllbGRdPy52YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgaWYgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddKSB7XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSA9IHsgLi4ucm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10sIHRleHQ6IHsgdGV4dDogcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldLCB2YWx1ZTogcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0gfSB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSA9IHsgdGV4dDogeyB0ZXh0OiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0sIHZhbHVlOiByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXSB9IH07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHJlcykge1xuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddID0geyAuLi5yb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSwgdGV4dDogeyB0ZXh0OiByZXNbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXSwgdmFsdWU6IHJlc1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldIH0gfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sdW1uLm9uUmV0dXJuKSB7XG4gICAgICAgICAgY29sdW1uLm9uUmV0dXJuKHJlcywgcm93KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZF0gIT09IG9iai5zZWxlY3Rpb24pIHtcbiAgICAgICAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KHRydWUpO1xuICAgICAgICAgIGlmIChjb2x1bW4ub25DaGFuZ2UpIHtcbiAgICAgICAgICAgIGNvbHVtbi5vbkNoYW5nZShyb3cpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgICh7IGVycm9yIH0pID0+IHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYXBpRXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBzZXRGaWx0ZXJMb29rdXAoY29sdW1uOiBhbnkpIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnNldExvb2tVcEZpbHRlcihjb2x1bW4sIHRoaXMuZGlhbG9nU2VydmljZSk7XG4gIH1cblxuICAvLyBzZXQgbG9va3VwIHZhbHVlIHRoYXQgZGlzcGxheSBpbiByZWFkT25seU1vZGVcbiAgc2V0TG9va3VwUmVhZE9ubHlWYWx1ZShyb3csIGNvbHVtbikge1xuICAgIGxldCB2YWx1ZSA9ICcnO1xuICAgIGlmICh0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0KSA9PT0gXCJvYmplY3RcIiAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8udGV4dCAmJiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQpPy5oYXNPd25Qcm9wZXJ0eSgndGV4dCcpKSB7XG4gICAgICB2YWx1ZSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0LnRleHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgICBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICB2YWx1ZSA9IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8vIENoZWNrIGNhbGVuZGFyIHZhbHVlIGlzIGNoYW5nZWQgb3Igbm90XG4gIGNhbGVuZGFyQ2hhbmdlRXZlbnQoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XG4gICAgbGV0IHZhbHVlQ2hhbmdlOiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYgKFxuICAgICAgY29sdW1uLnRpbWVPbmx5ICYmXG4gICAgICB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyb3dbY29sdW1uLmZpZWxkXSwgJ2hoOm1tIGEnKSAhPT1cbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuY2FsZW5kYXJQcmV2aW91c1ZhbHVlLCAnaGg6bW0gYScpXG4gICAgKSB7XG4gICAgICB2YWx1ZUNoYW5nZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGNvbHVtbi5zaG93VGltZSAmJlxuICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZF0sICd5eXl5LU1NLWRkIGhoOm1tJykgIT09XG4gICAgICB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmNhbGVuZGFyUHJldmlvdXNWYWx1ZSwgJ3l5eXktTU0tZGQgaGg6bW0nKVxuICAgICkge1xuICAgICAgdmFsdWVDaGFuZ2UgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyb3dbY29sdW1uLmZpZWxkXSwgJ3l5eXktTU0tZGQnKSAhPT1cbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuY2FsZW5kYXJQcmV2aW91c1ZhbHVlLCAneXl5eS1NTS1kZCcpXG4gICAgKSB7XG4gICAgICB2YWx1ZUNoYW5nZSA9IHRydWU7XG4gICAgfVxuICAgIGlmICh2YWx1ZUNoYW5nZSkge1xuICAgICAgdGhpcy5icm93c2VyQ2xvc2VFdmVudCh0cnVlKTtcbiAgICAgIHRoaXMuZ2VuZXJhdGVSb3dzRGF0YUNvcHkgPSBmYWxzZTtcbiAgICAgIHRoaXMucm93VXBkYXRlQ2hhbmdlID0gdHJ1ZTtcblxuICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgICAgLnBpcGUodGFrZSgxKSkgLy8gRW1pdCBvbmx5IG9uY2Ugd2hlbiB0aGUgem9uZSBiZWNvbWVzIHN0YWJsZVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vICAgdGhpcy5yb3dzQ2hhbmdlLmVtaXQodGhpcy5yb3dzRGF0YSk7XG4gICAgICAvLyB9LCAyNTApO1xuICAgICAgaWYgKGNvbHVtbi5vbkNoYW5nZSkge1xuICAgICAgICBjb2x1bW4ub25DaGFuZ2Uocm93KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jYWxlbmRhclByZXZpb3VzVmFsdWUgPSAnJztcbiAgfVxuXG4gIHNldEF1dG9Db21wbGV0ZXZhbHVlT25UeXBlKGNvbHVtbjogYW55LCByb3c6IGFueSwgZXZlbnQ6IGFueSA9IFtdKSB7XG4gICAgbGV0IHZhbHVlID0gZXZlbnQ/LnRhcmdldD8udmFsdWU7XG4gICAgbGV0IGZpZWxkID0gY29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUgJiYgdmFsdWUgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBjb25zdCB2YWx1ZUtleSA9IGNvbHVtbi5vcHRpb25WYWx1ZSA/IGNvbHVtbi5vcHRpb25WYWx1ZSA6IGZpZWxkO1xuICAgICAgY29uc3QgbGFiZWxLZXkgPSBjb2x1bW4ub3B0aW9uTGFiZWwgPyBjb2x1bW4ub3B0aW9uTGFiZWwgOiBjb2x1bW4uZGlzcGxheUZpZWxkID8gY29sdW1uLmRpc3BsYXlGaWVsZCA6IGZpZWxkO1xuICAgICAgaWYgKHJvd1tmaWVsZF0/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgYWxyZWFkeUV4aXN0ID0gcm93W2ZpZWxkXT8uZmluZCgocm93SW5mbykgPT4gcm93SW5mb1tmaWVsZF0gPT09IHZhbHVlKTtcbiAgICAgICAgaWYgKCFhbHJlYWR5RXhpc3QpIHtcbiAgICAgICAgICByb3dbZmllbGRdID0gWy4uLnJvd1tmaWVsZF0sIHsgW2xhYmVsS2V5Py50b0xvd2VyQ2FzZSgpXTogdmFsdWUsIFt2YWx1ZUtleT8udG9Mb3dlckNhc2UoKV06IHZhbHVlLCBbZmllbGQ/LnRvTG93ZXJDYXNlKCldOiB2YWx1ZSB9XTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm93W2ZpZWxkXSA9IFt7IFtsYWJlbEtleT8udG9Mb3dlckNhc2UoKV06IHZhbHVlLCBbdmFsdWVLZXk/LnRvTG93ZXJDYXNlKCldOiB2YWx1ZSwgW2ZpZWxkPy50b0xvd2VyQ2FzZSgpXTogdmFsdWUgfV07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChldmVudD8udGFyZ2V0Py52YWx1ZSkge1xuICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gJyc7XG4gICAgfVxuXG4gIH1cblxuICBvbkF1dG9Db21wbGV0ZUtleUVudGVyRXZlbnQoZSwgY29sdW1uLCByb3cpIHtcbiAgICBpZiAoY29sdW1uLnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURSkge1xuICAgICAgaWYgKGNvbHVtbi5hbGxvd0F1dG9Db21wbGV0ZVNhdmUgJiYgZS50YXJnZXQudmFsdWUgJiYgIWNvbHVtbi5kYXRhPy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zZXRBdXRvQ29tcGxldGV2YWx1ZU9uVHlwZShjb2x1bW4sIHJvdywgZSk7XG4gICAgICAgIC8vL2NoZWNrIHRoZSBjb3JyZWN0IGZvcm1hdCBpZiBkYXRhLmNvbnRhaW5zIGN1eiBpdHMgYW4gYXJyYXkgb2YgYXJyYXlzIHdpdGggb2JqZWN0cy5cbiAgICAgICAgaWYgKGNvbmZpcm0oYERvIHlvdSB3YW50IHRvIGFkZCAke2UudGFyZ2V0LnZhbHVlfSB0byB0aGUgc2VsZWN0aW9uP2ApKSB7XG4gICAgICAgICAgaWYgKGNvbHVtbi51bmlxdWVLZXkpIHtcbiAgICAgICAgICAgIHZhciBtZXNzYWdlID0gdGhpcy5ncmlkU2VydmljZVxuICAgICAgICAgICAgICAuYWRkQXV0b0NvbXBsZXRlVmFsdWUoY29sdW1uLnVuaXF1ZUtleSwgZS50YXJnZXQudmFsdWUsIGNvbHVtbiwgcm93KVxuICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uLm9uUmV0dXJuKSB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4ub25SZXR1cm4oZS50YXJnZXQudmFsdWUsIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgb25Gb2N1c0V2ZW50KGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdzogYW55KSB7XG4gICAgdGhpcy5udW1lcmljVmFsdWVbY29sdW1uLmZpZWxkXSA9IHJvd1tjb2x1bW4uZmllbGRdXG4gIH1cblxuICBvbkZvY3VzT3V0RXZlbnQoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnksIGV2ZW50OiBhbnkgPSAnJykge1xuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk5VTUVSSUMgJiYgdGhpcy5udW1lcmljVmFsdWVbY29sdW1uLmZpZWxkXSAhPT0gcm93W2NvbHVtbi5maWVsZF0pIHtcbiAgICAgIHRoaXMub25DaGFuZ2VFdmVudChjb2x1bW4sIHJvdylcbiAgICB9XG4gICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmIHRoaXMuaXNMb29rdXBJbnB1dEVkaXRhYmxlKGNvbHVtbiwgcm93KSkge1xuICAgICAgdGhpcy5yZXNvbHZlTG9va3VwSW5wdXRWYWx1ZShjb2x1bW4sIHJvdyk7XG4gICAgfVxuICAgIGlmIChjb2x1bW4udHlwZSAhPT0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURSB8fCAoIWNvbHVtbi5hbGxvd0F1dG9Db21wbGV0ZVNhdmUpKSB7XG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlLmNoZWNrVmFsaWRpdHkoW2NvbHVtbl0sIHJvdyk7XG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKSB7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJDaGFuZ2VFdmVudChjb2x1bW4sIHJvdyk7XG4gICAgICB9XG4gICAgICBpZiAoY29sdW1uLm9uRm9jdXNPdXQpIHtcbiAgICAgICAgY29sdW1uLm9uRm9jdXNPdXQocm93KTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGNvbHVtbi5vblJldHVybiAmJlxuICAgICAgICBjb2x1bW4udHlwZSAhPT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVFxuICAgICAgKSB7XG4gICAgICAgIGNvbHVtbi5vblJldHVybihyb3cpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuZ3JpZFNlcnZpY2Uucm93VXBkYXRlID0gZmFsc2U7XG4gIH1cblxuICBzZXRSZXBvcnROYW1lKGNvbHVtbjogSUdyaWRSZXBvcnRCdG4sIHJvdzogYW55KSB7XG4gICAgbGV0IHJlcG9ydDogYW55ID0gJyc7XG4gICAgaWYgKGNvbHVtbi5yZXBvcnRJZCkge1xuICAgICAgcmVwb3J0ID0gY29sdW1uLnJlcG9ydElkO1xuICAgIH0gZWxzZSBpZiAocm93W2NvbHVtbj8ubGFiZWw/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddICYmIHJvd1tjb2x1bW4/LmxhYmVsPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ucmVwb3J0VW5pcXVlS2V5KSB7XG4gICAgICByZXBvcnQgPSByb3dbY29sdW1uPy5sYWJlbD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LnJlcG9ydFVuaXF1ZUtleTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVwb3J0ID0gY29sdW1uLnJlcG9ydFVuaXF1ZUtleTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcG9ydDtcbiAgfVxuXG4gIHNldFJlcG9ydFBhcmFtcyhjb2x1bW46IElHcmlkUmVwb3J0QnRuLCByb3c6IGFueSkge1xuICAgIGxldCByZXBvcnRQYXJhbXM6IGFueVtdID0gW107XG4gICAgaWYgKHJvd1tjb2x1bW4/LmxhYmVsPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXSAmJiByb3dbY29sdW1uPy5sYWJlbD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LnJlcG9ydFBhcmFtKSB7XG4gICAgICByZXBvcnRQYXJhbXMgPSByb3dbY29sdW1uPy5sYWJlbD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LnJlcG9ydFBhcmFtO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXBvcnRQYXJhbXMgPSBjb2x1bW4ucGFyYW1zO1xuICAgIH1cbiAgICByZXR1cm4gcmVwb3J0UGFyYW1zO1xuICB9XG5cbiAgc2V0RmlsdGVyRm9jdXNPdXQoY29sOiBhbnksIGZpbHRlcj86IGFueSwgZXZlbnQ/OiBhbnkpIHtcbiAgICB0aGlzLnNldEdyaWRGaWx0ZXIoY29sLCBmaWx0ZXIsIGV2ZW50KTtcbiAgfVxuXG4gIGxvb2t1cEZpbHRlcklucHV0TmdNb2RlbChjb2x1bW46IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIHR5cGVvZiBjb2x1bW5bJ2ZpbHRlclZhbHVlX29iaiddID09PSAnb2JqZWN0JyAmJiBjb2x1bW5bJ2ZpbHRlclZhbHVlX29iaiddPy50ZXh0ICE9IHVuZGVmaW5lZCA/IGNvbHVtblsnZmlsdGVyVmFsdWVfb2JqJ10udGV4dCA6IGNvbHVtbi5maWx0ZXJWYWx1ZTtcbiAgfVxuXG4gIHNldEdyaWRGaWx0ZXIoY29sOiBJR3JpZENvbHVtbiwgZmlsdGVyPzogYW55LCBldmVudD86IGFueSkge1xuICAgIHRoaXMuZ3JpZEZpbHRlck9iaiA9IHsgY29sdW1uOiBjb2wsIGZpbHRlcjogZmlsdGVyLCBldmVudDogZXZlbnQgfTtcbiAgICBjb25zdCBuZXdDb2x1bW46IGFueSA9IHsgLi4uY29sIH07XG4gICAgLy9jaGFuZ2UgZmlsdGVyIGNhbGVuZGFyIGZvcm1hdFxuICAgIGlmIChuZXdDb2x1bW4udHlwZSA9PT0gJ2RhdGUnICYmIG5ld0NvbHVtbi5maWx0ZXJWYWx1ZSAmJiBuZXdDb2x1bW4uZmlsdGVyPy50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVIpIHtcbiAgICAgIG5ld0NvbHVtbi5maWx0ZXJWYWx1ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGNvbC5maWx0ZXJWYWx1ZS50b1N0cmluZygpLnRyaW0oKSwgJ3l5eXktTU0tZGQnKTtcbiAgICB9XG4gICAgaWYgKG5ld0NvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTiAmJiBuZXdDb2x1bW4uZmlsdGVyVmFsdWUgJiYgbmV3Q29sdW1uLmZpbHRlcj8udHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNIRUNLQk9YKSB7XG4gICAgICBsZXQgdmFsdWUgPSBuZXdDb2x1bW4uZmlsdGVyVmFsdWU7XG4gICAgICBpZiAobmV3Q29sdW1uLmZvcm1hdHRlciA9PT0gRUdyaWRGb3JtYXR0ZXIuQ0hBUikge1xuICAgICAgICBuZXdDb2x1bW4uZmlsdGVyVmFsdWUgPSB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJ1knIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnMScgPyAnWScgOiAnTic7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZmlsdGVyT2JqKG5ld0NvbHVtbik7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2FwcGx5RmlsdGVyJywgSlNPTi5zdHJpbmdpZnkoZmFsc2UpKTtcbiAgfVxuXG4gIGZpbHRlck9iaihjb2w6IGFueSkge1xuICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgIGZpZWxkOiBjb2wuZmllbGQsXG4gICAgICBtYXRjaE1vZGU6IGNvbC5tYXRjaE1vZGUgPyBjb2wubWF0Y2hNb2RlIDogY29sLnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCA/IEVNYXRjaE1vZGUuRVFVQUxTIDogJ3N0YXJ0c1dpdGgnLFxuICAgICAgb3BlcmF0b3I6IGNvbC5vcGVyYXRvciA/IGNvbC5vcGVyYXRvciA6ICdhbmQnLFxuICAgICAgdGFibGVBbGlhczogY29sLnRhYmxlQWxpYXMgPyBjb2wudGFibGVBbGlhcyA6ICcnLFxuICAgICAgdmFsdWU6IGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTVVMVElTRUxFQ1QgPyBjb2wuZmlsdGVyVmFsdWUudG9TdHJpbmcoKSA6IGNvbC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQgJiYgY29sLmhhc093blByb3BlcnR5KCdmaWx0ZXJWYWx1ZV9vYmonKSA/IGNvbFsnZmlsdGVyVmFsdWVfb2JqJ10/LnZhbHVlIDogY29sLmZpbHRlclZhbHVlLFxuICAgIH07XG4gICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkucHVzaChvYmopO1xuICB9XG5cbiAgYXBwbHlFbnRlckV2ZW50KGZpbHRlcjogYW55LCBldmVudDogYW55LCBjb2x1bW46IGFueSkge1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UudXNlclNlYXJjaGVkID0gdHJ1ZTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmFwcGx5RmlsdGVyRXZlbnQgPSB0cnVlO1xuICAgIHRoaXMucm93VXBkYXRlQ2hhbmdlID0gZmFsc2U7XG4gICAgdGhpcy5hdXRvTG9hZERhdGEgPSB0cnVlO1xuICAgIC8vdGhpcy5sb2FkaW5nPXRydWU7XG4gICAgdGhpcy5vbkFwcGx5RmlsdGVyLmVtaXQoKTtcbiAgICB0aGlzLmZpbHRlck9iaihjb2x1bW4pO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdhcHBseUZpbHRlcicsIEpTT04uc3RyaW5naWZ5KHRydWUpKTtcbiAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5NVUxUSVNFTEVDVCkge1xuICAgICAgZmlsdGVyKGNvbHVtbj8uZmlsdGVyVmFsdWU/LnRvU3RyaW5nKCkpXG4gICAgfSBlbHNlIGlmIChjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gdGhpcy5kcm9wRG93bkZpbHRlcj8uY29sdW1uPy5maWx0ZXI/LnR5cGUpIHtcbiAgICAgIHRoaXMuZHJvcERvd25GaWx0ZXIuZmlsdGVyKHRoaXMuZHJvcERvd25GaWx0ZXIuZXZlbnQudGFyZ2V0KTtcbiAgICB9IGVsc2UgaWYgKGZpbHRlciAmJiBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4gJiYgY29sdW1uPy5maWx0ZXI/LnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DSEVDS0JPWCAmJiBjb2x1bW4uZmlsdGVyaW5nICE9PSBmYWxzZSkge1xuICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgPT09IEVHcmlkRm9ybWF0dGVyLkNIQVIpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gY29sdW1uLmZpbHRlclZhbHVlO1xuICAgICAgICBjb2x1bW4uZmlsdGVyVmFsdWUgPSB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJ1knIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnMScgPyAnWScgOiAnTic7XG4gICAgICAgIGZpbHRlcihjb2x1bW4uZmlsdGVyVmFsdWUpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGZpbHRlcihldmVudD8uY2hlY2tlZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmaWx0ZXIpIHtcbiAgICAgIGZpbHRlcihldmVudD8udGFyZ2V0Py52YWx1ZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmdsb2JhbERhdGE/Lmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLmhhbmRsZVNlcnZlclNpZGVFdmVudHModGhpcy5ncmlkZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVOdWxsQ2FsZW5kYXIoY29sdW1uOiBJR3JpZENvbHVtbiwgZmlsdGVyOiBhbnksIGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoY29sdW1uLmZpbHRlclZhbHVlID09PSBudWxsKSB7XG4gICAgICB0aGlzLnJlbW92ZU51bGxGaWx0ZXJzKGNvbHVtbik7XG4gICAgICB0aGlzLnNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCBldmVudCk7XG4gICAgfVxuICB9XG5cbiAgYmFja3NwYWNlRXZlbnQoZXZlbnQ6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICBldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnICYmXG4gICAgICAoY29sdW1uLmZpbHRlclZhbHVlPy50b1N0cmluZygpLmxlbmd0aCA9PT0gMSB8fFxuICAgICAgICBjb2x1bW4uZmlsdGVyVmFsdWU/LnRvU3RyaW5nKCkgPT09ICcnIHx8XG4gICAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9PT0gbnVsbClcbiAgICApIHtcbiAgICAgIHRoaXMucmVtb3ZlTnVsbEZpbHRlcnMoY29sdW1uKTtcbiAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSAmJiBjb2x1bW4uZmlsdGVyVmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMucmVtb3ZlTnVsbEZpbHRlcnMoY29sdW1uKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVOdWxsRmlsdGVycyhjb2x1bW46IGFueSkge1xuICAgIGlmICh0aGlzLmdsb2JhbEZpbHRlcnNBcnJheSAmJiB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgYXJyID0gWy4uLnRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5XTtcbiAgICAgIGxldCBpbmRleCA9IGFyci5maW5kSW5kZXgoKGkpID0+IGkuZmllbGQgPT09IGNvbHVtbi5maWVsZCk7XG4gICAgICBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5ID0gYXJyO1xuICAgIH1cbiAgICBsZXQgaW5kZXggPSB0aGlzLnNlcnZlckZpbHRlcnM/LmZpbHRlcnM/LmZpbmRJbmRleCgoaSkgPT4geyBpLmZpZWxkID09PSBjb2x1bW4uZmllbGQgfSlcbiAgICB0aGlzLnNlcnZlckZpbHRlcnM/LmZpbHRlcnM/LnNwbGljZShpbmRleCwgMSlcbiAgfVxuXG4gIC8vIFJlbW92aW5nIEhlYWRlciBGaWx0ZXIgVmFsdWUgdXNpbmcgQmFja3NwYWNlIGtleSBFdmVudCBvciBEZWxldGUga2V5IEV2ZW50LlxuICByZW1vdmluZ0ZpbHRlcnMoZXZlbnQ6IGFueSwgY29sdW1uOiBJR3JpZENvbHVtbikge1xuICAgIGlmIChcbiAgICAgIChldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnIHx8IGV2ZW50LmtleSA9PT0gJ0RlbGV0ZScpICYmXG4gICAgICBjb2x1bW4uZmlsdGVyVmFsdWU/LnRvU3RyaW5nKCkubGVuZ3RoID09PSAwXG4gICAgKSB7XG4gICAgICBsZXQgc2VhcmNoRmlsdGVycztcbiAgICAgIGlmICghdGhpcy5zb2Z0Q2FjaGluZyAmJiB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCkge1xuICAgICAgICBzZWFyY2hGaWx0ZXJzID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnU2V0RmlsdGVycy0nICsgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmwpIGFzIGFueSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgIHNlYXJjaEZpbHRlcnMgPSB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1t0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHRoaXMuY3VycmVudFVybF07XG4gICAgICB9XG4gICAgICBpZiAoc2VhcmNoRmlsdGVycyAmJiBzZWFyY2hGaWx0ZXJzLmZpbHRlcnMpIHtcbiAgICAgICAgaWYgKHNlYXJjaEZpbHRlcnMuZmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbGV0IGluZGV4ID0gc2VhcmNoRmlsdGVycy5maWx0ZXJzLmZpbmRJbmRleChcbiAgICAgICAgICAgICh4OiBhbnkpID0+IHguZmllbGQgPT09IGNvbHVtbi5maWVsZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIGlmIChzZWFyY2hGaWx0ZXJzLmZpbHRlcnMubGVuZ3RoID09PSAxICYmIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3RoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsXSA9IFtdO1xuICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnU2V0RmlsdGVycy0nICsgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VhcmNoRmlsdGVycy5maWx0ZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgIGlmICghdGhpcy5zb2Z0Q2FjaGluZyAmJiB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCkge1xuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdTZXRGaWx0ZXJzLScgKyB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHRoaXMuY3VycmVudFVybCwgSlNPTi5zdHJpbmdpZnkoc2VhcmNoRmlsdGVycykpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdID0gc2VhcmNoRmlsdGVycztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCBDbGljayBCdXR0b24gRXZlbnQgb24gR3JpZC5cbiAgb25DbGlja0J1dHRvbihjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcbiAgICB0aGlzLm9wZW5HcmlkRGlhbG9nKGNvbHVtbiwgcm93KTtcbiAgfVxuXG4gIC8vIEludm9rZSBvbkNsaWNrIEV2ZW50LlxuICBvbkNsaWNrRXZlbnQoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XG4gICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSyAmJiAoY29sdW1uLmVkaXRMaW5rID09PSBmYWxzZSB8fCBjb2x1bW4uZWRpdExpbmsgPT09IHVuZGVmaW5lZCkgJiYgY29sdW1uLmVkaXRhYmxlICE9PSB0cnVlICYmIGNvbHVtbi5kaXNhYmxlZCAhPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5vbkNsaWNrRXZlbnRUcmlnZ2VyZWQgPSB0cnVlO1xuICAgIH1cbiAgICAvLyBpZihjb2x1bW4udHlwZT09PUVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgJiYgcm93W2NvbHVtbi5maWVsZF0pe1xuICAgIC8vICAgdGhpcy5vcGVuR3JpZERpYWxvZyhjb2x1bW4scm93KVxuICAgIC8vIH1cbiAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFICYmIHJvd1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICB0aGlzLmNhbGVuZGFyUHJldmlvdXNWYWx1ZSA9IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAhcm93W2NvbHVtbi5maWVsZF0gJiZcbiAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSAmJlxuICAgICAgKGNvbHVtbi5zaG93VGltZSB8fCBjb2x1bW4udGltZU9ubHkpICYmXG4gICAgICBjb2x1bW4ubWludXRlc0ludGVydmFsXG4gICAgKSB7XG4gICAgICB0aGlzLmRlZmF1bHREYXRlID0gbmV3IERhdGUoc2V0TWludXRlc0ludGVydmFsKG5ldyBEYXRlKCkpKTtcbiAgICB9XG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4ub25DbGljayAmJiBjb2x1bW4uZGlzYWJsZWQgIT09IHRydWUgJiYgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5hY3Rpb24/LmRpc2FibGVkICE9PSB0cnVlIHx8IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNhYmxlZCAhPT0gdHJ1ZSAmJiBjb2x1bW4udHlwZSAhPT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4pKSB7XG4gICAgICBjb2x1bW4ub25DbGljayhyb3cpO1xuICAgIH1cbiAgfVxuXG4gIHNldE11bHRpU2VsZWN0VmFsdWUoY29sdW1uLCByb3cpIHtcbiAgICBpZiAocm93W2NvbHVtbi5maWVsZF0gJiYgIUFycmF5LmlzQXJyYXkocm93W2NvbHVtbi5maWVsZF0pKSB7XG4gICAgICBpZiAodHlwZW9mIChyb3dbY29sdW1uLmZpZWxkXSkgPT09IFwic3RyaW5nXCIgJiYgIXJvd1tjb2x1bW4uZmllbGRdPy5pbmNsdWRlcygnLCcpKSB7XG4gICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gW3Jvd1tjb2x1bW4uZmllbGRdXTtcbiAgICAgIH0gZWxzZSBpZiAocm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCcsJykpIHtcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXT8uc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJvd1tjb2x1bW4uZmllbGRdO1xuICB9XG5cbiAgLy8gc2V0IHRoZSBzZWxlY3QgdmFsdWUgb2YgbXVsdGktc2VsZWN0XG4gIHNob3dPcHRpb24oY29sdW1uLCByb3cpIHtcbiAgICByb3dbY29sdW1uLmZpZWxkXSA9IHRoaXMuc2V0TXVsdGlTZWxlY3RWYWx1ZShjb2x1bW4sIHJvdyk7XG4gIH1cblxuICBvbkNsZWFyVmFsdWUoY29sdW1uLCByb3cpIHtcbiAgICBpZiAoY29sdW1uPy50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiYgIXJvd1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICByb3dbY29sdW1uLmZpZWxkXSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gSW52b2tlIG9uQ2hhbmdlIEV2ZW50XG4gIG9uQ2hhbmdlRXZlbnQoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XG4gICAgaWYgKCFyb3cuX2lzRWRpdGVkKSB7XG4gICAgICByb3cuX2lzRWRpdGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgLy8gc2V0IGRyb3Bkb3duIGRpc3BsYXlGaWVsZCB2YWx1ZSBiYXNlIG9uIG9wdGlvbkxhYmVsICYgb3B0aW9uVmFsdWUuXG4gICAgdGhpcy5ncmlkVmFsaWRhdGlvbihjb2x1bW4sIHJvdywgdHJ1ZSlcbiAgICB0aGlzLmRpc3BsYXlGaWVsZERyb3Bkb3duVmFsdWUoY29sdW1uLCByb3cpO1xuICAgIHRoaXMub25DbGVhclZhbHVlKGNvbHVtbiwgcm93KTtcbiAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KHRydWUpO1xuICAgIHRoaXMucm93VXBkYXRlQ2hhbmdlID0gdHJ1ZTtcbiAgICBpZiAoY29sdW1uLm9uQ2hhbmdlKSB7XG4gICAgICBjb2x1bW4ub25DaGFuZ2Uocm93KTtcbiAgICB9XG4gICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMub25DbGlja0V2ZW50VHJpZ2dlcmVkID09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLnNldERyb3Bkb3duZGF0YVZhbHVlID0gZmFsc2VcbiAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuZ3JpZFNlcnZpY2Uucm93VXBkYXRlID0gZmFsc2U7XG4gICAgdGhpcy5nZW5lcmF0ZVJvd3NEYXRhQ29weSA9IGZhbHNlXG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgJiYgY29sdW1uLmFnZ3JlZ2F0ZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmFnZ3JlZ2F0ZUZvb3RlciA9IHRydWU7XG4gICAgICB0aGlzLnNldEFnZ3JlZ2F0ZVRleHQoY29sdW1uKTtcbiAgICB9XG4gIH1cblxuICBjaGVja0JveENoYW5nZUV2ZW50KGV2ZW50OiBhbnksIGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdykge1xuICAgIGlmICghcm93Ll9pc0VkaXRlZCkge1xuICAgICAgcm93Ll9pc0VkaXRlZCA9IHRydWU7XG4gICAgfVxuICAgIHJvdy5faXNFZGl0ZWQgPSB0cnVlO1xuICAgIHJvd1tjb2x1bW4uZmllbGRdID0gZXZlbnQ7XG4gICAgaWYgKHRoaXMucm93c0NoYW5nZS5vYnNlcnZlcnM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnJvd1VwZGF0ZSA9IGZhbHNlO1xuICAgIHRoaXMuZ2VuZXJhdGVSb3dzRGF0YUNvcHkgPSBmYWxzZVxuICAgIHRoaXMucm93VXBkYXRlQ2hhbmdlID0gdHJ1ZTtcbiAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICBpZiAoY29sdW1uLm9uQ2xpY2spIHtcbiAgICAgIGNvbHVtbi5vbkNsaWNrKHJvdyk7XG4gICAgfVxuICAgIGlmIChjb2x1bW4ub25DaGFuZ2UpIHtcbiAgICAgIGNvbHVtbi5vbkNoYW5nZShyb3cpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNldCBkcm9wZG93biBkaXNwbGF5RmllbGQgdmFsdWUgYmFzZSBvbiBvcHRpb25MYWJlbCAmIG9wdGlvblZhbHVlLlxuICBkaXNwbGF5RmllbGREcm9wZG93blZhbHVlKGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIGlmIChcbiAgICAgIGNvbHVtbj8udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmXG4gICAgICBjb2x1bW4uZGlzcGxheUZpZWxkICYmXG4gICAgICBjb2x1bW4uZGlzcGxheUZpZWxkPy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICBjb25zdCBrZXk6IGFueSA9IE9iamVjdC5rZXlzKHJvdyk/LmZpbmQoXG4gICAgICAgIChyb3dJbmZvKSA9PlxuICAgICAgICAgIHJvd0luZm8/LnRvTG93ZXJDYXNlKCkgPT09IGNvbHVtbi5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZFZhbHVlID0gY29sdW1uLmRhdGEuZmluZChcbiAgICAgICAgKHJlY29yZDogYW55KSA9PlxuICAgICAgICAgIHJlY29yZFtjb2x1bW4ub3B0aW9uVmFsdWVdPy50b1N0cmluZygpID09PVxuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpXG4gICAgICApO1xuICAgICAgaWYgKGtleSAmJiBkaXNwbGF5RmllbGRWYWx1ZSkge1xuICAgICAgICByb3dba2V5XSA9IGRpc3BsYXlGaWVsZFZhbHVlW2NvbHVtbi5vcHRpb25MYWJlbF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIGF1dG9TZWFyY2ggb24gR3JpZC5cbiAgYXV0b1NlYXJjaChldmVudDogYW55LCBjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcbiAgICBpZiAoZXZlbnQgJiYgY29sdW1uICYmIHJvdykge1xuICAgICAgY29sdW1uLm9uUmV0dXJuKGV2ZW50LnF1ZXJ5LCBjb2x1bW4sIHJvdyk7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVmcmVzaCBncmlkXG4gIHJlZnJlc2hHcmlkKCkge1xuICAgIHRoaXMucmVsb2FkUGFnZSA9IGludGVydmFsKHRoaXMuc2V0R3JpZFJlZnJlc2hUaW1lKS5zdWJzY3JpYmUoKHgpID0+IHtcbiAgICAgIGlmICh0aGlzLmdyaWRmaWx0ZXIgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuZ3JpZGZpbHRlciA9IHsgZmlsdGVyczogW10sIHNvcnRzOiBbXSB9O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2V0R3JpZFJlZnJlc2hUaW1lKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlU2VydmVyU2lkZUV2ZW50cyh0aGlzLmdyaWRmaWx0ZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gUmVtb3ZlIEZpbHRlclZhbHVlc1xuICBjbGVhcmdyaWRGaWx0ZXJzVmFsdWUoKSB7XG4gICAgY29uc3QgZ2xvYmFsRmlsdGVyQ2xlYXJWYWx1ZUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxuICAgICAgJ2NsZWFyR2xvYmFsRmlsdGVyQnRuJ1xuICAgICk7XG4gICAgaWYgKGdsb2JhbEZpbHRlckNsZWFyVmFsdWVCdG4pIHtcbiAgICAgIGdsb2JhbEZpbHRlckNsZWFyVmFsdWVCdG4uY2xpY2soKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zICYmIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2VydmVyRmlsdGVycy5maWx0ZXJzID0gW107XG4gICAgICBsZXQgc2VhcmNoRmlsdGVycyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3RoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsXTtcbiAgICAgIHNlYXJjaEZpbHRlcnM/LmZpbHRlcnM/LmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgICBjb2wudmFsdWUgPSBudWxsO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgICAgY29sLmZpbHRlclZhbHVlID0gbnVsbDtcbiAgICAgICAgdGhpcy5maWx0ZXJPYmooY29sKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGVkaXRBbGxSb3dzQXRPbmNlKCkge1xuICAgIGlmICh0aGlzLmVkaXRSb3dQZXJtaXNzaW9uKSB7XG4gICAgICBpZiAodGhpcy5nZXRDbGFzc0ZvckVkaXRBbGxSb3dzKCdlZGl0Um93JykpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnNvbWUoKGNvbHVtbikgPT4gY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOICYmIChjb2x1bW4uZmlsdGVyaW5nID09PSB0cnVlIHx8IGNvbHVtbi5maWx0ZXJpbmcgPT09IHVuZGVmaW5lZCkpKSB7XG4gICAgICAgICAgdGhpcy5lZGl0QWxsUmVjb3JkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wYWdpbmF0aW9uICYmIHRoaXMuZWRpdEFsbFJlY29yZCkge1xuICAgICAgICAgIHRoaXMuc29ydERpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNvcnREaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2F2ZUFsbFJvd3NBdE9uY2UoKSB7XG4gICAgdGhpcy5nZXRDbGFzc0ZvckVkaXRBbGxSb3dzKCdzYXZlUm93Jyk7XG4gIH1cblxuICAvLyByZXNldCB0aGUgZ3JpZCByb3dzVmFsdWUgdG8gb3JpZ25hbCB2YWx1ZXNcbiAgY2FuY2VsQWxsUm93c0F0T25jZSgpIHtcbiAgICB0aGlzLnJvd3NEYXRhID0gWy4uLnRoaXMucm93c0RhdGFDb3B5XTtcbiAgICB0aGlzLnJvd3NEYXRhQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5yb3dzRGF0YSkpO1xuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zPy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpIHtcbiAgICAgICAgdGhpcy5yb3dzRGF0YT8uZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgaWYgKHJvd1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IG5ldyBEYXRlKHJvd1tjb2x1bW4uZmllbGRdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICB9KTtcbiAgICBpZiAodGhpcy5jb2x1bW5zPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgJiYgY29sdW1uLmFnZ3JlZ2F0ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5hZ2dyZWdhdGVGb290ZXIgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuc2V0QWdncmVnYXRlVGV4dChjb2x1bW4pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgICB0aGlzLm9uQ2FuY2VsQWxsUm93cy5lbWl0KHRoaXMucm93c0RhdGEpO1xuICB9XG4gIGdldENsYXNzRm9yRWRpdEFsbFJvd3MoY2xhc3NOYW1lOiBzdHJpbmcgPSAnJykge1xuICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYgKGNsYXNzTmFtZSA9PT0gJ2VkaXRSb3cnKSB7XG4gICAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgdGhpcy5vblJvd0VkaXRJbml0KHJvdyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBnZXRCdG5zOiBhbnkgPSB0aGlzLmVsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQ/LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lKTtcbiAgICBpZiAoZ2V0QnRucyAmJiBnZXRCdG5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gJ3NhdmVSb3cnKSB7XG4gICAgICAgIHRoaXMuZWRpdEFsbFJlY29yZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNhdmVBbGxSZWNvcmQgPSB0cnVlO1xuICAgICAgICBjb25zdCByZWNvcmRzJCA9IFtdO1xuICAgICAgICBjb25zdCBhbGxCdG5zID0gQXJyYXkuZnJvbShnZXRCdG5zKTtcblxuICAgICAgICBhbGxCdG5zLmZvckVhY2goKGl0ZW06IGFueSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLnJvd3NEYXRhW2luZGV4XTtcbiAgICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgICBjb25zdCByb3dTYXZlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgICAgaXRlbS5jbGljaygpO1xuICAgICAgICAgICAgICByZXNvbHZlKGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZWNvcmRzJC5wdXNoKHJvd1NhdmUpO1xuICAgICAgICAgICAgcm93Ll9pc0VkaXRlZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgUHJvbWlzZS5hbGwocmVjb3JkcyQpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuZ3JpZFNlcnZpY2UuaXNHcmlkVmFsaWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrbGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNoZWNrbGlzdFJvd3MgPSB0aGlzLnNldFJvd3NEYXRhKHRoaXMuY2hlY2tsaXN0KTtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJjaGVja2xpc3RcIiwgdGhpcy5jaGVja2xpc3QpO1xuICAgICAgICAgICAgICBjaGVja2xpc3RSb3dzLmZvckVhY2gocm93ID0+IGRlbGV0ZSByb3dbdGhpcy5kYXRhS2V5XSk7XG4gICAgICAgICAgICAgIGlmICh0aGlzLm9yaWdpbmFsUm93cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRSb3dzID0gZ2V0Q2hhbmdlZFJvd3MoY2hlY2tsaXN0Um93cywgdGhpcy5vcmlnaW5hbFJvd3MsIHRoaXMuY29sdW1ucywgdGhpcy5kYXRhS2V5KTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uUm93VXBkYXRlLmVtaXQoZmlsdGVyZWRSb3dzKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uUm93VXBkYXRlLmVtaXQoY2hlY2tsaXN0Um93cyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVSb3dzRGF0YUNvcHkgPSB0cnVlO1xuICAgICAgICAgICAgICBpZiAodGhpcy5zYXZlUmVjb3JkQXJyYXk/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVWYWwgPSAodjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAodiA9PSBudWxsIHx8IHYgPT09ICcnKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgIGlmICh2IGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIHYudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdO1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9VC8udGVzdCh2KSkgcmV0dXJuIHYuc3BsaXQoJ1QnKVswXTtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycgJiYgL15cXGR7NH0tXFxkezJ9LVxcZHsyfSQvLnRlc3QodikpIHJldHVybiB2O1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiAvXlxcZHsxLDJ9XFwvXFxkezEsMn1cXC9cXGR7NH0kLy50ZXN0KHYpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFttLCBkLCB5XSA9IHYuc3BsaXQoJy8nKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke3l9LSR7bS5wYWRTdGFydCgyLCAnMCcpfS0ke2QucGFkU3RhcnQoMiwgJzAnKX1gO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBlZGl0YWJsZUZpZWxkcyA9IHRoaXMuY29sdW1uc1xuICAgICAgICAgICAgICAgICAgLmZpbHRlcihjID0+IGMuZWRpdGFibGUgIT09IGZhbHNlICYmIGMuYWxsb3dTYXZlICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgIC5tYXAoYyA9PiBjLmZpZWxkPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICBsZXQgZGlydHlSb3dzID0gdGhpcy5zYXZlUmVjb3JkQXJyYXk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3JpZ2luYWxSb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIGRpcnR5Um93cyA9IGdldENoYW5nZWRSb3dzKHRoaXMuc2F2ZVJlY29yZEFycmF5LCB0aGlzLm9yaWdpbmFsUm93cywgdGhpcy5jb2x1bW5zLCB0aGlzLmRhdGFLZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZGlydHlSb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIGRpcnR5Um93cy5mb3JFYWNoKHJvdyA9PiBkZWxldGUgcm93W3RoaXMuZGF0YUtleV0pOyAvLyByZW1vdmUgdGVtcF9pZCBiZWZvcmUgZW1pdHRpbmcg4oCUIGl0J3Mgb25seSB1c2VkIGZvciBkaXJ0eS1yb3cgY29tcGFyaXNvblxuICAgICAgICAgICAgICAgICAgdGhpcy5vblJvd1VwZGF0ZS5lbWl0KGRpcnR5Um93cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2F2ZVJlY29yZEFycmF5ID0gW107XG4gICAgICAgICAgdGhpcy5lZGl0QWxsUm93c0F0T25jZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2F2ZUFsbFJlY29yZCA9IGZhbHNlO1xuICAgICAgICBpZiAoY2xhc3NOYW1lID09ICdjYW5jZWxSb3cnKSB7XG4gICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBnZXRCdG5zKSB7XG4gICAgICAgICAgICBpdGVtLmNsaWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdWNjZXNzO1xuICB9XG4gIC8vRm9jdXNlZCBjYWxlbmRhciBpbnB1dCBvbiBzZWxlY3QgZGF0ZVxuICBzZWxlY3REYXRlKGNvbHVtbjogYW55KSB7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29sdW1uLmZpZWxkKT8uZm9jdXMoKTtcbiAgfVxuXG4gIC8vYXBwbHkgZmlsdGVyIG9uIGdyaWQgd2hlbiBzZWFyY2ggYnRuIGNsaWNrZWRcbiAgYXBwbHlHcmlkRmlsdGVyQnRuKCkge1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UudXNlclNlYXJjaGVkID0gdHJ1ZTtcbiAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuZ3JpZFNlcnZpY2Uucm93VXBkYXRlID0gZmFsc2U7XG4gICAgdGhpcy5yb3dVcGRhdGVDaGFuZ2UgPSBmYWxzZTtcblxuICAgIGxldCBmaWx0ZXJJbkRpYWxvZzogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncC1kaWFsb2cnKTtcbiAgICBsZXQgZ2xvYmFsRmlsdGVyQXBwbHlCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnNlYXJjaGJ0bklkKTtcbiAgICBpZiAoZmlsdGVySW5EaWFsb2cgJiYgZmlsdGVySW5EaWFsb2cubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZ2xvYmFsU2VhcmNoQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zZWFyY2hidG5JZCk7XG4gICAgICBpZiAoZ2xvYmFsU2VhcmNoQnRuKSB7XG4gICAgICAgIGdsb2JhbFNlYXJjaEJ0bi5jbGljaygpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZ2xvYmFsRmlsdGVyQXBwbHlCdG4pIHtcbiAgICAgIGdsb2JhbEZpbHRlckFwcGx5QnRuLmNsaWNrKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZ3JpZEZpbHRlck9iaiAmJiBPYmplY3Qua2V5cyh0aGlzLmdyaWRGaWx0ZXJPYmopPy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmFwcGx5RW50ZXJFdmVudChcbiAgICAgICAgdGhpcy5ncmlkRmlsdGVyT2JqLmZpbHRlcixcbiAgICAgICAgdGhpcy5ncmlkRmlsdGVyT2JqLmV2ZW50LFxuICAgICAgICB0aGlzLmdyaWRGaWx0ZXJPYmouY29sdW1uXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuY2hlY2tsaXN0ID0gW107XG4gICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBbXTtcbiAgfVxuXG4gIC8vIGludm9rZSBtdWx0aVNlbGVjdGlvbiBjbGljayBldmVudFxuICBtdWx0aUNoZWNrQm94T25jbGljayhyb3dJbmZvOiBhbnksIGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25UeXBlID09PSBFR3JpZFNlbGVjdGlvblR5cGUuTVVMVElQTEUpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJvd0luZm8pICYmIHJvd0luZm8/Lmxlbmd0aCA+IDAgJiYgZXZlbnQ/LnRhcmdldD8uY2hlY2tlZCAmJiBldmVudD8udGFyZ2V0Py5jaGVja2VkPy50b1N0cmluZygpID09PSBcInRydWVcIikge1xuICAgICAgICB0aGlzLmNoZWNrbGlzdCA9IFsuLi5yb3dJbmZvXTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocm93SW5mbykgJiYgKGV2ZW50Py50YXJnZXQ/LmNoZWNrZWQgPT0gbnVsbCB8fCBldmVudD8udGFyZ2V0Py5jaGVja2VkPy50b1N0cmluZygpID09PSBcImZhbHNlXCIpKSB7XG4gICAgICAgIHRoaXMuY2hlY2tsaXN0ID0gW107XG4gICAgICB9XG4gICAgICBjb25zdCBhbHJlYWR5RXhpc3QgPSB0aGlzLmNoZWNrbGlzdC5zb21lKChyb3cpID0+IHJvd1t0aGlzLmRhdGFLZXldID09IHJvd0luZm9bdGhpcy5kYXRhS2V5XSk7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocm93SW5mbykgJiYgZXZlbnQ/LnRhcmdldD8uY2hlY2tlZCAmJiAhYWxyZWFkeUV4aXN0KSB7XG4gICAgICAgIHRoaXMuY2hlY2tsaXN0LnB1c2gocm93SW5mbyk7XG4gICAgICB9IGVsc2UgaWYgKGFscmVhZHlFeGlzdCAmJiAoZXZlbnQ/LnRhcmdldD8uY2hlY2tlZCA9PSBudWxsIHx8IGV2ZW50Py50YXJnZXQ/LmNoZWNrZWQ/LnRvU3RyaW5nKCkgPT09IFwiZmFsc2VcIikpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmNoZWNrbGlzdC5maW5kSW5kZXgoKHJvdykgPT4gcm93W3RoaXMuZGF0YUtleV0gPT0gcm93SW5mb1t0aGlzLmRhdGFLZXldKTtcbiAgICAgICAgdGhpcy5jaGVja2xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuY2hlY2tsaXN0ID0gW3Jvd0luZm9dXG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gWy4uLnRoaXMuY2hlY2tsaXN0XTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLm9uTXVsdGlTZWxlY3Rpb25DaGFuZ2UuZW1pdCgodGhpcy5zZWxlY3RlZFJvd3MpKTtcbiAgfVxuXG4gIHNldFJvd3NEYXRhKHJvd3NEYXRhKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocm93c0RhdGEpKSB7XG4gICAgICByb3dzRGF0YS5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICByb3cgPSB0aGlzLnJlbW92ZVJvd09iaihyb3cpO1xuICAgICAgICByb3cgPSB0aGlzLmdyaWRTZXJ2aWNlLnNldFJvd1ZhbHVlKHJvdyk7XG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByb3dzRGF0YSA9IHRoaXMucmVtb3ZlUm93T2JqKHJvd3NEYXRhKTtcbiAgICAgIHJvd3NEYXRhID0gdGhpcy5ncmlkU2VydmljZS5zZXRSb3dWYWx1ZShyb3dzRGF0YSk7XG4gICAgfVxuICAgIHJldHVybiByb3dzRGF0YTtcbiAgfVxuXG4gIHJlbW92ZVJvd09iaihyb3c6IGFueSkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgIGlmIChrZXlzPy5sZW5ndGggPiAwKSB7XG4gICAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCdfb2JqJykpIHtcbiAgICAgICAgICBkZWxldGUgcm93W2tleV07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiByb3c7XG4gIH1cblxuICBhcHBseURyb3Bkb3duRmlsdGVyKGZpbHRlcjogYW55LCBldmVudDogYW55KSB7XG4gICAgZmlsdGVyKGV2ZW50LnRhcmdldCk7XG4gIH1cblxuICBzZWFyY2hEcm9wZG93bkZpbHRlcihmaWx0ZXI6IGFueSwgZXZlbnQ6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICB0aGlzLnNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCBldmVudCk7XG4gICAgdGhpcy5kcm9wRG93bkZpbHRlciA9IHsgZmlsdGVyOiBmaWx0ZXIsIGV2ZW50OiBldmVudCwgY29sdW1uOiBjb2x1bW4gfTtcbiAgICAvLyBpZiAoY29sdW1uLmFsbG93U2VhcmNoICE9PSB0cnVlKSB7XG4gICAgLy8gICB0aGlzLmFwcGx5RHJvcGRvd25GaWx0ZXIoZmlsdGVyLCBldmVudCk7XG4gICAgLy8gfVxuICB9XG5cbiAgbG9va3VwQ2xlYXJWYWx1ZShjb2x1bW46IElHcmlkQ29sdW1uLCByb3c/OiBhbnkpIHtcbiAgICBpZiAocm93KSB7XG4gICAgICBjb2x1bW4uZGlzcGxheUZpZWxkID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldID0gJycgOiAnJ1xuICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS50ZXh0ID0gJycgOiAnJ1xuICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSAnJztcbiAgICAgIGlmICghcm93Ll9pc0VkaXRlZCkge1xuICAgICAgICByb3cuX2lzRWRpdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29sdW1uLmZpbHRlclZhbHVlID0gJyc7XG4gICAgICBkZWxldGUgY29sdW1uWydmaWx0ZXJWYWx1ZV9vYmonXTtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jb2x1bW5zLmZpbmRJbmRleCgoY29sKSA9PiBjb2wuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSk7XG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICB0aGlzLmNvbHVtbnNbaW5kZXhdLmZpbHRlclZhbHVlID0gJyc7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmNvbHVtbnNbaW5kZXhdWydmaWx0ZXJWYWx1ZV9vYmonXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uKTtcbiAgICB9XG4gICAgdGhpcy5icm93c2VyQ2xvc2VFdmVudCh0cnVlKTtcbiAgICBpZiAoY29sdW1uLm9uQ2hhbmdlKSB7XG4gICAgICBjb2x1bW4ub25DaGFuZ2Uocm93KTtcbiAgICB9XG4gIH1cblxuICBvbkNhbGVuZGFyTW9kZWxDaGFuZ2UodmFsdWU6IGFueSwgcm93OiBhbnksIGNvbHVtbjogSUdyaWRDb2x1bW4pOiB2b2lkIHtcbiAgICBpZiAoIXJvdy5faXNFZGl0ZWQpIHtcbiAgICAgIHJvdy5faXNFZGl0ZWQgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5RmllbGQgPSB2YWx1ZTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlICYmIGNvbHVtbi5mb3JtYXQgPT0gRUdyaWRGb3JtYXRUeXBlLlNIT1JUREFURSkge1xuICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh2YWx1ZSwgJ01NL2RkL3l5eXknKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIGludm9rZSB3aGVuIGNsaWNrIGhlYWRlciBjaGVja2JveCBmaWx0ZXJcbiAgY2xpY2tDaGVja0JveEZpbHRlcihjb2x1bW46IElHcmlkQ29sdW1uLCBldmVudCkge1xuICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9IGV2ZW50O1xuICAgIGlmIChjb2x1bW4uYWxsb3dTZWxlY3RBbGwpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOXG4gICAgICAgICYmXG4gICAgICAgIGNvbHVtbj8uZmlsdGVyPy50eXBlID09PSAnY2hlY2tib3gnICYmIGNvbHVtbi5maWx0ZXJpbmcgIT0gZmFsc2VcbiAgICAgICkge1xuICAgICAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgIGlmIChyb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8uZGlzYWJsZWQgIT09IHRydWUgJiYgIWNvbHVtbi5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcm93Ll9pc0VkaXRlZCA9IHRydWU7XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXSA9IGNvbHVtbi5maWx0ZXJWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucm93c0NoYW5nZS5vYnNlcnZlcnM/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9uQ2hlY2tCb3hGaWx0ZXJDbGljay5lbWl0KGNvbHVtbik7XG4gIH1cbiAgLy9zZXQgaGVhZGVyIGNoZWNrYm94IHZhbHVlIGZvciBnZXR0aW5nIGFsbCBjb2x1bW5zIG9uIHN0YXkgYWRtaW5cbiAgc2V0SGVhZGVyQ2hlY2tCb3hWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5pc0luY2x1ZGVkQWxsQ29sdW1ucy5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIC8vIHNldCBjYWxlbmRhciAyIE9yIDQgZGlnaXQgeWVhciBmb3JtYXRcbiAgY2FsZW5kYXJJbnB1dFZhbHVlKGNvbHVtbjogYW55LCByb3c6IGFueSwgaXNGaWx0ZXJJbnB1dCA9IGZhbHNlKSB7XG4gICAgaWYgKCFyb3cuX2lzRWRpdGVkKSB7XG4gICAgICByb3cuX2lzRWRpdGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFjb2x1bW4udGltZU9ubHkpIHtcbiAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IGlzRmlsdGVySW5wdXQgPyBjb2x1bW4uZmllbGQgKyAnLWZpbHRlci1pbnB1dCcgOiBjb2x1bW4uZmllbGQgKyByb3dbdGhpcy5kYXRhS2V5XTtcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lKVswXT8uYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCAodmFsOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCF2YWw/LnRhcmdldD8udmFsdWU/LmluY2x1ZGVzKCcvJykpIHtcbiAgICAgICAgICBpZiAodmFsPy50YXJnZXQ/LnZhbHVlPy5sZW5ndGggPT0gOCB8fCBjb2x1bW4/LmZvcm1hdD8udHlwZSA9PT0gRUdyaWRGb3JtYXRUeXBlLlNIT1JUREFURSkge1xuICAgICAgICAgICAgdmFsLnRhcmdldC52YWx1ZSA9IHZhbD8udGFyZ2V0Py52YWx1ZT8ucmVwbGFjZSgvKFxcZHsyfSkoXFxkezJ9KShcXGR7NH0pLywgJyQxLyQyLyQzJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKHZhbD8udGFyZ2V0Py52YWx1ZT8ubGVuZ3RoID09IDYpIHtcbiAgICAgICAgICAgIHZhbC50YXJnZXQudmFsdWUgPSB2YWw/LnRhcmdldD8udmFsdWU/LnJlcGxhY2UoLyhcXGR7Mn0pKD89XFxkKS9nLCAnJDEvJyk7XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHZhbC50YXJnZXQudmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHllYXIgPSB2YWw/LnRhcmdldD8udmFsdWU/LnRvU3RyaW5nKCk/LnNwbGl0KCcvJylbMl07XG4gICAgICAgIGlmICh5ZWFyICYmIHllYXIubGVuZ3RoID09IDQpIHtcbiAgICAgICAgICBpZiAoaXNGaWx0ZXJJbnB1dCkge1xuICAgICAgICAgICAgY29sdW1uLmZpbHRlclZhbHVlID0gbmV3IERhdGUodmFsPy50YXJnZXQ/LnZhbHVlKT8udG9Mb2NhbGVEYXRlU3RyaW5nKFwiZW4tVVNcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY2FsZW5kYXJGb3JtYXQgPSAnbW0vZGQveXknO1xuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gbmV3IERhdGUodmFsPy50YXJnZXQ/LnZhbHVlKT8udG9Mb2NhbGVEYXRlU3RyaW5nKFwiZW4tVVNcIik7XG4gICAgICAgIH0gZWxzZSBpZiAoeWVhciAmJiB5ZWFyLmxlbmd0aCA9PSAyKSB7XG4gICAgICAgICAgaWYgKGlzRmlsdGVySW5wdXQpIHtcbiAgICAgICAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9IG5ldyBEYXRlKHZhbD8udGFyZ2V0Py52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY2FsZW5kYXJGb3JtYXQgPSAnbW0vZGQveSc7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICB9XG4gIGNoYW5nZVBhc3N3b3JkVHlwZShjb2x1bW4sIHJvdykge1xuICAgIHZhciB0ZXh0VHlwZSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddID8gKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLnRleHRUeXBlID09ICdwYXNzd29yZCcgPyAndGV4dCcgOiAncGFzc3dvcmQnKSA6IGNvbHVtbi50ZXh0VHlwZSA9PSAncGFzc3dvcmQnID8gJ3RleHQnIDogJ3Bhc3N3b3JkJztcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnNldEdyaWRSb3dQcm9wVmFsdWUocm93LCBbeyBwcm9wTmFtZTogRUdyaWRSb3dQcm9wTmFtZS5URVhUVFlQRSwgcHJvcFZhbHVlOiB0ZXh0VHlwZSwgZmllbGQ6IGNvbHVtbi5maWVsZCB9XSk7XG5cbiAgfVxuXG4gIHNob3dDb25maXJtYXRpb24oZXZlbnQ6IElHcmlkUGFnaW5hdGlvbkV2ZW50KSB7XG4gICAgY29uc3QgdGFibGVXcmFwcGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5wLWRhdGF0YWJsZS13cmFwcGVyXCIpO1xuICAgIGNvbnN0IHRhYmxlV3JhcHBlclNjcm9sbFRvcCA9IHRhYmxlV3JhcHBlcj8uc2Nyb2xsVG9wO1xuICAgIGNvbnN0IHRhYmxlV3JhcHBlclNjcm9sbExlZnQgPSB0YWJsZVdyYXBwZXI/LnNjcm9sbExlZnQ7XG4gICAgaWYgKHRhYmxlV3JhcHBlclNjcm9sbFRvcCkge1xuICAgICAgdGhpcy5zY3JvbGxQb3NpdGlvblkgPSB0YWJsZVdyYXBwZXJTY3JvbGxUb3A7XG4gICAgICB0aGlzLnNjcm9sbFBvc2l0aW9uWCA9IHRhYmxlV3JhcHBlclNjcm9sbExlZnQ7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLlBhZ2VDaGFuZ2UpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBldmVudC5maXJzdCAvIGV2ZW50LnJvd3M7XG4gICAgfVxuICAgIGlmIChjb25maXJtKFwiWW91IHdpbGwgbG9zZSBjaGFuZ2VzIG5vdCBzYXZlZCBvbiBwYWdlLiBXb3VsZCB5b3UgbGlrZSB0byBjb250aW51ZT9cIikgPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5hdXRvTG9hZERhdGEgPSB0cnVlO1xuICAgICAgdGhpcy5yb3dzQ2hhbmdlLmVtaXQodGhpcy5yb3dzRGF0YSlcbiAgICAgIHRoaXMuaGFuZGxlU2VydmVyU2lkZVBhZ2luYXRpb24oZXZlbnQpO1xuICAgICAgdGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0ID0gZmFsc2U7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuUGFnZUNoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy50YWJsZS5maXJzdCA9IHRoaXMuY3VycmVudFBhZ2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50YWJsZS5maXJzdCA9IE1hdGguZmxvb3IodGhpcy5jdXJyZW50UGFnZSAvIGV2ZW50LnJvd3MpO1xuICAgICAgICAgICAgdGhpcy50YWJsZS5yb3dzID0gZXZlbnQucm93cztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRhYmxlV3JhcHBlclNjcm9sbFRvcCA9PT0gMCkge1xuICAgICAgICAgICAgdGFibGVXcmFwcGVyLnNjcm9sbFRvKHRoaXMuc2Nyb2xsUG9zaXRpb25YLCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0YWJsZVdyYXBwZXIuc2Nyb2xsVG8odGhpcy5zY3JvbGxQb3NpdGlvblgsIHRoaXMuc2Nyb2xsUG9zaXRpb25ZKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgdGhpcy5hdXRvTG9hZERhdGEgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBsb29rdXBJbnB1dE5nTW9kZWwocm93OiBhbnksIGNvbHVtbjogYW55KTogYW55IHtcbiAgICBpZiAocm93Py5pc05ldyB8fCByb3c/LmlzbmV3KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddID09PSAnb2JqZWN0JyAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8udGV4dD8udGV4dCAhPSB1bmRlZmluZWQgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8udGV4dD8udGV4dCA6IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIH1cblxuICAgIGlmIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkKSB7XG4gICAgICByZXR1cm4gcm93W3Jvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQgPT09ICdvYmplY3QnICYmIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0Py50ZXh0ICE9IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0Py50ZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBjb2x1bW4uZGlzcGxheUZpZWxkID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldIDogcm93W2NvbHVtbi5maWVsZF07XG4gIH1cblxuICBnZXRMb29rdXBDb250cm9sRGF0YShjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIHJvdz8uW2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGEgfHwgY29sdW1uPy5sb29rdXBDb250cm9sPy5kYXRhIHx8IHt9O1xuICB9XG5cbiAgaXNMb29rdXBJbnB1dEVkaXRhYmxlKGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdzogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgbG9va3VwRGF0YSA9IHRoaXMuZ2V0TG9va3VwQ29udHJvbERhdGEoY29sdW1uLCByb3cpO1xuICAgIHJldHVybiBsb29rdXBEYXRhPy5hbGxvd0lucHV0ID09PSB0cnVlO1xuICB9XG5cbiAgZ2V0TG9va3VwQ29uZmlnRGF0YShjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9va3VwQ29udHJvbERhdGEoY29sdW1uLCByb3cpPy5kYXRhIHx8IHt9O1xuICB9XG5cbiAgbm9ybWFsaXplTG9va3VwSW5wdXRWYWx1ZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHZhbHVlID8/ICcnKS50b1N0cmluZygpLnJlcGxhY2UoL1xccj9cXG58XFxyL2csICcgJykudHJpbSgpO1xuICB9XG5cbiAgc2V0TG9va3VwSW5wdXRWYWx1ZShyb3c6IGFueSwgY29sdW1uOiBJR3JpZENvbHVtbiwgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IHRoaXMubm9ybWFsaXplTG9va3VwSW5wdXRWYWx1ZSh2YWx1ZSk7XG4gICAgY29uc3QgZGlzcGxheUZpZWxkS2V5ID0gY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCByb3dPYmpLZXkgPSBjb2x1bW4uZmllbGQgKyAnX29iaic7XG4gICAgY29uc3QgY3VycmVudE9iaiA9IHJvd1tyb3dPYmpLZXldIHx8IHt9O1xuXG4gICAgcm93W2NvbHVtbi5maWVsZF0gPSBub3JtYWxpemVkVmFsdWU7XG4gICAgaWYgKGRpc3BsYXlGaWVsZEtleSkge1xuICAgICAgcm93W2Rpc3BsYXlGaWVsZEtleV0gPSBub3JtYWxpemVkVmFsdWU7XG4gICAgfVxuICAgIHJvd1tyb3dPYmpLZXldID0ge1xuICAgICAgLi4uY3VycmVudE9iaixcbiAgICAgIHRleHQ6IG5vcm1hbGl6ZWRWYWx1ZSA/IHsgdGV4dDogbm9ybWFsaXplZFZhbHVlLCB2YWx1ZTogbm9ybWFsaXplZFZhbHVlIH0gOiAnJyxcbiAgICB9O1xuICB9XG5cbiAgYnVpbGRMb29rdXBSZXNvbHV0aW9uRmlsdGVycyhjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSwgZmllbGROYW1lOiBzdHJpbmcsIGZpZWxkVmFsdWU6IHN0cmluZyk6IGFueVtdIHtcbiAgICBjb25zdCBsb29rdXBDb25maWdEYXRhID0gdGhpcy5nZXRMb29rdXBDb25maWdEYXRhKGNvbHVtbiwgcm93KTtcbiAgICBjb25zdCBmaWx0ZXJzID0gQXJyYXkuaXNBcnJheShsb29rdXBDb25maWdEYXRhPy5maWx0ZXJzKSA/IFsuLi5sb29rdXBDb25maWdEYXRhLmZpbHRlcnNdIDogW107XG4gICAgY29uc3QgbGFiZWxQcm9wID0gdGhpcy5nZXRMb29rdXBDb250cm9sRGF0YShjb2x1bW4sIHJvdyk/LmxhYmVsUHJvcD8udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCB2YWx1ZVByb3AgPSB0aGlzLmdldExvb2t1cENvbnRyb2xEYXRhKGNvbHVtbiwgcm93KT8udmFsdWVQcm9wPy50b0xvd2VyQ2FzZSgpO1xuXG4gICAgT2JqZWN0LmVudHJpZXMobG9va3VwQ29uZmlnRGF0YSB8fCB7fSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGtleT8udG9Mb3dlckNhc2UoKSAhPT0gJ3VuaXF1ZWtleScgJiZcbiAgICAgICAga2V5Py50b0xvd2VyQ2FzZSgpICE9PSAnZmlsdGVycycgJiZcbiAgICAgICAga2V5Py50b0xvd2VyQ2FzZSgpICE9PSBsYWJlbFByb3AgJiZcbiAgICAgICAga2V5Py50b0xvd2VyQ2FzZSgpICE9PSB2YWx1ZVByb3AgJiZcbiAgICAgICAgdmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICB2YWx1ZSAhPT0gJycgJiZcbiAgICAgICAgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0J1xuICAgICAgKSB7XG4gICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgZmllbGQ6IGtleSxcbiAgICAgICAgICBtYXRjaE1vZGU6IEVNYXRjaE1vZGUuRVFVQUxTLFxuICAgICAgICAgIG9wZXJhdG9yOiBFT3BlcmF0b3IuQU5ELFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICBmaWVsZDogZmllbGROYW1lLFxuICAgICAgbWF0Y2hNb2RlOiBFTWF0Y2hNb2RlLkVRVUFMUyxcbiAgICAgIG9wZXJhdG9yOiBFT3BlcmF0b3IuQU5ELFxuICAgICAgdmFsdWU6IGZpZWxkVmFsdWUsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmlsdGVycztcbiAgfVxuXG4gIGFzeW5jIGZldGNoTG9va3VwUmVzb2x1dGlvblJlY29yZChjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSwgZmllbGROYW1lOiBzdHJpbmcsIGZpZWxkVmFsdWU6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgbG9va3VwQ29uZmlnRGF0YSA9IHRoaXMuZ2V0TG9va3VwQ29uZmlnRGF0YShjb2x1bW4sIHJvdyk7XG4gICAgY29uc3QgdW5pcXVlS2V5ID0gbG9va3VwQ29uZmlnRGF0YT8udW5pcXVlS2V5O1xuXG4gICAgaWYgKCF1bmlxdWVLZXkgfHwgIWZpZWxkTmFtZSB8fCAhZmllbGRWYWx1ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2U6IGFueSA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLnJlcXVlc3RTZXJ2aWNlLmdldDxhbnlbXSwgYW55PignL0RhdGEvRmV0Y2gnLCB7XG4gICAgICAgIHVuaXF1ZUtleSxcbiAgICAgICAgZmlsdGVyczogdGhpcy5idWlsZExvb2t1cFJlc29sdXRpb25GaWx0ZXJzKGNvbHVtbiwgcm93LCBmaWVsZE5hbWUsIGZpZWxkVmFsdWUpLFxuICAgICAgICBwYWdlU2l6ZTogMSxcbiAgICAgICAgcGFnZTogMSxcbiAgICAgIH0pLnN1YnNjcmliZShcbiAgICAgICAgKHJlcykgPT4gcmVzb2x2ZShyZXMpLFxuICAgICAgICAoKSA9PiByZXNvbHZlKG51bGwpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaWYgKCFyZXNwb25zZT8ucmVjb3Jkcz8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5ncmlkU2VydmljZS5zZXREYXRhRmllbGRzKHJlc3BvbnNlLnJlY29yZHMpPy5bMF0gfHwgbnVsbDtcbiAgfVxuXG4gIGFwcGx5UmVzb2x2ZWRMb29rdXBSZWNvcmQocm93OiBhbnksIGNvbHVtbjogSUdyaWRDb2x1bW4sIHJlc29sdmVkUmVjb3JkOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXJlc29sdmVkUmVjb3JkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgbGFiZWxQcm9wID0gdGhpcy5nZXRMb29rdXBDb250cm9sRGF0YShjb2x1bW4sIHJvdyk/LmxhYmVsUHJvcD8udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCB2YWx1ZVByb3AgPSB0aGlzLmdldExvb2t1cENvbnRyb2xEYXRhKGNvbHVtbiwgcm93KT8udmFsdWVQcm9wPy50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHJlc29sdmVkVmFsdWUgPSByZXNvbHZlZFJlY29yZFt2YWx1ZVByb3AgfHwgY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXTtcbiAgICBjb25zdCByZXNvbHZlZFRleHQgPSByZXNvbHZlZFJlY29yZFtsYWJlbFByb3AgfHwgY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKSB8fCBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldO1xuXG4gICAgaWYgKHJlc29sdmVkVmFsdWUgPT09IHVuZGVmaW5lZCB8fCByZXNvbHZlZFRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcmVzb2x2ZWRWYWx1ZTtcbiAgICBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCkge1xuICAgICAgcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldID0gcmVzb2x2ZWRUZXh0O1xuICAgIH1cbiAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSA9IHtcbiAgICAgIC4uLihyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSB8fCB7fSksXG4gICAgICB0ZXh0OiB7IHRleHQ6IHJlc29sdmVkVGV4dCwgdmFsdWU6IHJlc29sdmVkVmFsdWUgfSxcbiAgICB9O1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgcmVzb2x2ZUxvb2t1cElucHV0VmFsdWUoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuaXNMb29rdXBJbnB1dEVkaXRhYmxlKGNvbHVtbiwgcm93KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGVkVmFsdWUgPSB0aGlzLm5vcm1hbGl6ZUxvb2t1cElucHV0VmFsdWUodGhpcy5sb29rdXBJbnB1dE5nTW9kZWwocm93LCBjb2x1bW4pKTtcbiAgICBjb25zdCBzZWFyY2hGaWVsZCA9IHRoaXMuZ2V0TG9va3VwQ29udHJvbERhdGEoY29sdW1uLCByb3cpPy5zZWFyY2hGaWVsZDtcbiAgICBjb25zdCBsYWJlbFByb3AgPSB0aGlzLmdldExvb2t1cENvbnRyb2xEYXRhKGNvbHVtbiwgcm93KT8ubGFiZWxQcm9wO1xuICAgIGNvbnN0IHZhbHVlUHJvcCA9IHRoaXMuZ2V0TG9va3VwQ29udHJvbERhdGEoY29sdW1uLCByb3cpPy52YWx1ZVByb3A7XG5cbiAgICBpZiAoIXR5cGVkVmFsdWUgfHwgKCFsYWJlbFByb3AgJiYgIXZhbHVlUHJvcCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBzZWFyY2hNYXRjaCA9IHNlYXJjaEZpZWxkXG4gICAgICA/IGF3YWl0IHRoaXMuZmV0Y2hMb29rdXBSZXNvbHV0aW9uUmVjb3JkKGNvbHVtbiwgcm93LCBzZWFyY2hGaWVsZCwgdHlwZWRWYWx1ZSlcbiAgICAgIDogbnVsbDtcblxuICAgIGlmICh0aGlzLmFwcGx5UmVzb2x2ZWRMb29rdXBSZWNvcmQocm93LCBjb2x1bW4sIHNlYXJjaE1hdGNoKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgbGFiZWxNYXRjaCA9IGxhYmVsUHJvcFxuICAgICAgPyBhd2FpdCB0aGlzLmZldGNoTG9va3VwUmVzb2x1dGlvblJlY29yZChjb2x1bW4sIHJvdywgbGFiZWxQcm9wLCB0eXBlZFZhbHVlKVxuICAgICAgOiBudWxsO1xuXG4gICAgaWYgKHRoaXMuYXBwbHlSZXNvbHZlZExvb2t1cFJlY29yZChyb3csIGNvbHVtbiwgbGFiZWxNYXRjaCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlTWF0Y2ggPVxuICAgICAgdmFsdWVQcm9wICYmIHZhbHVlUHJvcD8udG9Mb3dlckNhc2UoKSAhPT0gbGFiZWxQcm9wPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgID8gYXdhaXQgdGhpcy5mZXRjaExvb2t1cFJlc29sdXRpb25SZWNvcmQoY29sdW1uLCByb3csIHZhbHVlUHJvcCwgdHlwZWRWYWx1ZSlcbiAgICAgICAgOiBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBwbHlSZXNvbHZlZExvb2t1cFJlY29yZChyb3csIGNvbHVtbiwgdmFsdWVNYXRjaCk7XG4gIH1cblxuICAvLyBDYWxsIHRoaXMgZnVuY3Rpb24gd2hlbiBzZXR0aW5nIHRoZSBuZ01vZGVsIHZhbHVlXG4gIGNoYW5nZUxvb2t1cElucHV0TmdNb2RlbChyb3c6IGFueSwgY29sdW1uOiBhbnksIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXJvdy5faXNFZGl0ZWQpIHtcbiAgICAgIHJvdy5faXNFZGl0ZWQgPSB0cnVlO1xuICAgIH1cbiAgICByb3cuX2lzRWRpdGVkID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5pc0xvb2t1cElucHV0RWRpdGFibGUoY29sdW1uLCByb3cpKSB7XG4gICAgICB0aGlzLnNldExvb2t1cElucHV0VmFsdWUocm93LCBjb2x1bW4sIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBvbkxvb2t1cElucHV0UGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50LCBjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5pc0xvb2t1cElucHV0RWRpdGFibGUoY29sdW1uLCByb3cpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFzdGVkVmFsdWUgPSB0aGlzLm5vcm1hbGl6ZUxvb2t1cElucHV0VmFsdWUoZXZlbnQuY2xpcGJvYXJkRGF0YT8uZ2V0RGF0YSgndGV4dCcpKTtcbiAgICBpZiAoIXBhc3RlZFZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnNldExvb2t1cElucHV0VmFsdWUocm93LCBjb2x1bW4sIHBhc3RlZFZhbHVlKTtcbiAgICBhd2FpdCB0aGlzLnJlc29sdmVMb29rdXBJbnB1dFZhbHVlKGNvbHVtbiwgcm93KTtcbiAgICB0aGlzLm9uQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpO1xuICB9XG5cbiAgYXN5bmMgb25Mb29rdXBJbnB1dEVudGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGNvbnN0IHR5cGVkVmFsdWUgPSB0aGlzLm5vcm1hbGl6ZUxvb2t1cElucHV0VmFsdWUodGFyZ2V0Py52YWx1ZSk7XG5cbiAgICBpZiAoIXRoaXMuaXNMb29rdXBJbnB1dEVkaXRhYmxlKGNvbHVtbiwgcm93KSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuc2VsZWN0TG9va3VwRmllbGQoY29sdW1uLCByb3cpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0TG9va3VwSW5wdXRWYWx1ZShyb3csIGNvbHVtbiwgdHlwZWRWYWx1ZSk7XG4gICAgY29uc3QgaXNSZXNvbHZlZCA9IGF3YWl0IHRoaXMucmVzb2x2ZUxvb2t1cElucHV0VmFsdWUoY29sdW1uLCByb3cpO1xuICAgIHRoaXMub25DaGFuZ2VFdmVudChjb2x1bW4sIHJvdyk7XG5cbiAgICBpZiAoXG4gICAgICB0eXBlZFZhbHVlICYmXG4gICAgICAhaXNSZXNvbHZlZCAmJlxuICAgICAgdGhpcy5pc0xvb2t1cElucHV0RWRpdGFibGUoY29sdW1uLCByb3cpICYmXG4gICAgICBjb2x1bW4uYWxsb3dBdXRvQ29tcGxldGVTYXZlICYmXG4gICAgICBjb2x1bW4udW5pcXVlS2V5XG4gICAgKSB7XG4gICAgICBpZiAoY29uZmlybShgRG8geW91IHdhbnQgdG8gYWRkICR7dHlwZWRWYWx1ZX0gdG8gdGhlIGxvb2t1cD9gKSkge1xuICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLmFkZEF1dG9Db21wbGV0ZVZhbHVlKGNvbHVtbi51bmlxdWVLZXksIHR5cGVkVmFsdWUsIGNvbHVtbiwgcm93KS50aGVuKCgpID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLm9uUmV0dXJuKSB7XG4gICAgICAgICAgICBjb2x1bW4ub25SZXR1cm4odHlwZWRWYWx1ZSwgY29sdW1uLCByb3cpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICBnZXRBdXRvQ29tcGxldGVOZ01vZGVsKHJvdzogYW55LCBjb2x1bW46IGFueSk6IGFueSB7XG4gICAgaWYgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQpIHtcbiAgICAgIHJldHVybiByb3dbcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJvd1tjb2x1bW4uZmllbGRdID09PSAnb2JqZWN0JyAmJiByb3dbY29sdW1uLmZpZWxkXT8udGV4dCkge1xuICAgICAgcmV0dXJuIHJvd1tjb2x1bW4uZmllbGRdPy50ZXh0O1xuICAgIH1cblxuICAgIHJldHVybiByb3dbY29sdW1uLmZpZWxkXTtcbiAgfVxuXG4gIC8vIEZ1bmN0aW9uIHRvIHNldCBuZ01vZGVsIHZhbHVlXG4gIGNoYW5nZUF1dG9Db21wbGV0ZU5nTW9kZWwocm93OiBhbnksIGNvbHVtbjogYW55LCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgZmllbGQgPSBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgcm93W2ZpZWxkXSA9IHZhbHVlO1xuICB9XG5cbiAgc2V0SW5wdXROZ01vZGVsKHJvdzogYW55LCBjb2x1bW46IGFueSk6IGFueSB7XG4gICAgaWYgKHJvdy51bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAnJzsgIC8vIElmICdyb3cudW5kZWZpbmVkJyBpcyB0cnVlLCByZXR1cm4gZW1wdHkgc3RyaW5nXG4gICAgfVxuXG4gICAgLy8gRXZhbHVhdGUgb3RoZXIgY29uZGl0aW9ucyBiYXNlZCBvbiByb3cgYW5kIGNvbHVtbiBkYXRhXG4gICAgaWYgKHRoaXMuYWxsb3dEaXNhYmxlZChjb2x1bW4sIHJvdykgJiYgcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdKSB7XG4gICAgICByZXR1cm4gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdO1xuICAgIH1cblxuICAgIGlmIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS52YWx1ZSkge1xuICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS52YWx1ZTtcbiAgICAgIHJldHVybiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS52YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm93W2NvbHVtbi5maWVsZF07ICAvLyBGYWxsYmFjayB0byAncm93W2NvbHVtbi5maWVsZF0nXG4gIH1cblxuICAvLyBGdW5jdGlvbiB0byBzZXQgdGhlIHZhbHVlICh3aGVuIG5nTW9kZWwgY2hhbmdlcylcbiAgY2hhbmdlSW5wdXROZ01vZGVsKHJvdzogYW55LCBjb2x1bW46IGFueSwgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIC8vIFlvdSBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gdG8gdXBkYXRlIHlvdXIgZGF0YSBtb2RlbCBiYXNlZCBvbiB0aGUgdmFsdWVcbiAgICBpZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10pIHtcbiAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gdmFsdWU7XG4gICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS52YWx1ZSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICBvbklucHV0Q2hhbmdlKHZhbHVlOiBhbnksIHJvdzogYW55LCBjb2x1bW46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY2hhbmdlSW5wdXROZ01vZGVsKHJvdywgY29sdW1uLCB2YWx1ZSk7XG4gIH1cblxuICBnZXRDaGVja2JveFZhbHVlKHJvdzogYW55LCBjb2x1bW46IElHcmlkQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgaWYgKCFyb3dbY29sdW1uLmZpZWxkXSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgdmFsdWUgPSByb3dbY29sdW1uLmZpZWxkXTtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLnRleHQpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ2hlY2tlZCh2YWx1ZS50ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5pc0NoZWNrZWQodmFsdWUpO1xuICB9XG5cbiAgaXNDaGVja2VkKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBtYXRjaFZhbHVlID0gWycxJywgJ3RydWUnLCAneSddO1xuICAgIHJldHVybiBtYXRjaFZhbHVlLmluY2x1ZGVzKHZhbHVlPy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpO1xuICB9XG4gIGdldE1vcmVDb2x1bW5zKCk6IElHcmlkQ29sdW1uW10ge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbnM/LmZpbHRlcihjb2x1bW4gPT4gY29sdW1uPy5zaG93SW5Nb3JlKSA/PyBbXTtcbiAgfVxuXG4gIGJ1aWxkTW9yZUl0ZW1zRm9yUm93KHJvdzogYW55KTogTWVudUl0ZW1bXSB7XG4gICAgY29uc3QgaXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcbiAgICBjb25zdCBtb3JlQ29sdW1ucyA9IHRoaXMuZ2V0TW9yZUNvbHVtbnMoKTtcblxuICAgIGZvciAoY29uc3QgY29sIG9mIG1vcmVDb2x1bW5zKSB7XG4gICAgICBjb25zdCBsYWJlbCA9IGNvbC5oZWFkZXIgfHwgY29sLmRpc3BsYXlUZXh0IHx8IGNvbC5maWVsZDtcbiAgICAgIGNvbnN0IGh5cGVybGluayA9IHJvdz8uW2Ake2NvbC5maWVsZH1fb2JqYF0/Lmh5cGVybGluayB8fCByb3c/Lltjb2wuZmllbGRdO1xuXG4gICAgICBpZiAoY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LKSB7XG4gICAgICAgIGl0ZW1zLnB1c2goaHlwZXJsaW5rID8ge1xuICAgICAgICAgIGxhYmVsLCBpY29uOiBjb2wuaWNvbiwgdXJsOiBoeXBlcmxpbmssXG4gICAgICAgICAgdGFyZ2V0OiBjb2wub3BlbkluTmV3VGFiIHx8IGNvbC50YXJnZXQgPT09IEVHcmlkbGluay5CTEFOSyA/IEVHcmlkbGluay5CTEFOSyA6IEVHcmlkbGluay5TRUxGXG4gICAgICAgIH0gOiB7IGxhYmVsLCBpY29uOiBjb2wuaWNvbiwgY29tbWFuZDogKCkgPT4gY29sLm9uQ2xpY2s/Lihyb3cpIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRElBTE9HKSB7XG4gICAgICAgIGl0ZW1zLnB1c2goeyBsYWJlbCwgaWNvbjogY29sLmljb24sIGNvbW1hbmQ6ICgpID0+IHRoaXMub3BlbkdyaWREaWFsb2coY29sLCByb3cpIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChjb2wub25DbGljaykge1xuICAgICAgICBpdGVtcy5wdXNoKHsgbGFiZWwsIGljb246IGNvbC5pY29uLCBjb21tYW5kOiAoKSA9PiBjb2wub25DbGljayEocm93KSB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG5cbiAgaGFzTW9yZUNvbHVtbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TW9yZUNvbHVtbnMoKT8ubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGhhc01vcmVJdGVtcyhyb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkTW9yZUl0ZW1zRm9yUm93KHJvdyk/Lmxlbmd0aCA+IDA7XG4gIH1cblxuICBzaG93TW9yZShldmVudDogYW55LCByb3c6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudE1vcmVNZW51ID0gdGhpcy5idWlsZE1vcmVJdGVtc0ZvclJvdyhyb3cpO1xuICAgIHRoaXMubW9yZU1lbnU/LnRvZ2dsZShldmVudCk7XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cImdyaWQtY29tcG9uZW50LXdyYXBwZXJcIj5cbiAgPHAtY29uZmlybURpYWxvZyBbc3R5bGVdPVwieyB3aWR0aDogJzUwdncnIH1cIiAqbmdJZj1cInVzZUlubGluZUNSVURcIiBrZXk9XCJoYW5kbGVJbmxpbmVDUlVEXCI+PC9wLWNvbmZpcm1EaWFsb2c+XG4gIDxwLWNvbmZpcm1EaWFsb2cgY2xhc3M9XCJncmlkLWNvbXBvbmVudC1jb25maXJtLWRpYWxvZ1wiICpuZ0lmPVwiY29sdW1uQWN0aW9ucy5sZW5ndGggPiAwXCJcbiAgICBrZXk9XCJoYW5kbGVjb2x1bW5BY3Rpb25zXCI+PC9wLWNvbmZpcm1EaWFsb2c+XG4gIDxkaXYgY2xhc3M9XCJnbG9iYWwtZmlsdGVyLWJ1dHRvbnMtd3JhcHBlciBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuXG4gICAgPCEtLSBidXR0b24gZm9yIGFwcGx5IHZhbHVlIG9uIEdyaWQgLS0+XG4gICAgPGJ1dHRvbiAqbmdJZj1cIigoZmlsdGVyaW5nICYmICFoaWRlRmlsdGVyICkgfHwgc2hvd0ZpbHRlcmJ0bilcIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktc2VhcmNoXCJcbiAgICAgIChjbGljayk9XCJhcHBseUdyaWRGaWx0ZXJCdG4oKVwiIFtjbGFzc109XCJcbiAgc2VhcmNoR3JpZEZpbHRlciA/ICdwLWJ1dHRvbi1zdWNjZXNzIGFwcGx5LWZpbHRlci1idG4gZmlsdGVyLWJ0bicgOiAnaGlkZS1jbGVhci1maWx0ZXItYnV0dG9uIGFwcGx5LWZpbHRlci1idG4gZmlsdGVyLWJ0bidcbiAgXCI+PC9idXR0b24+XG5cbiAgICA8IS0tIGJ1dHRvbiBmb3IgY2xlYXIgdmFsdWUgb24gR3JpZCAtLT5cbiAgICA8YnV0dG9uICpuZ0lmPVwiKChmaWx0ZXJpbmcgJiYgIWhpZGVGaWx0ZXIgKXx8IHNob3dGaWx0ZXJidG4pXCIgcEJ1dHRvbiBpZD1cImNsZWFyR3JpZEZpbHRlclZhbHVlc0J1dHRvblwiIHR5cGU9XCJidXR0b25cIlxuICAgICAgaWNvbj1cInBpIHBpLXJlcGxheVwiIChjbGljayk9XCJjbGVhcmdyaWRGaWx0ZXJzVmFsdWUoKVwiIFtjbGFzc109XCJcbiAgICAgIGNsZWFyR3JpZEZpbHRlciA/ICdmaWx0ZXItYnRuJyA6ICdoaWRlLWNsZWFyLWZpbHRlci1idXR0b24gZmlsdGVyLWJ0bidcbiAgICAgIFwiIGNsYXNzPSdnbG9iYWwtcmVmcmVzaCBnbG9iYWwtYnRuJz48L2J1dHRvbj5cblxuICAgIDwhLS0gYnV0dG9uIGZvciBzYXZlIGFsbCBncmlkIGF0IG9uY2UgLS0+XG4gICAgPGJ1dHRvbiBwQnV0dG9uICpuZ0lmPVwiZWRpdEFsbFJvd3MgJiYgZWRpdFJvd1Blcm1pc3Npb25cIiBpZD1cInNhdmVBbGxHcmlkVmFsdWVzXCIgaWNvbj1cInBpIHBpLWNoZWNrXCIgW2xhYmVsXT1cIidTYXZlJ1wiXG4gICAgICBbY2xhc3NdPVwiaGlkZUdyaWRTYXZlQnV0dG9uID8gJ2hpZGUtY2xlYXItZmlsdGVyLWJ1dHRvbiBzYXZlLWFsbC1ncmlkJyA6ICd1aS1idXR0b24taW5mbyBzYXZlLWFsbC1ncmlkJ1wiXG4gICAgICB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInNhdmVBbGxSb3dzQXRPbmNlKClcIj48L2J1dHRvbj5cblxuICAgIDwhLS0gYnV0dG9uIGZvciBjYW5jZWwgYWxsIGdyaWQgYXQgb25jZSAtLT5cbiAgICA8YnV0dG9uIHBCdXR0b24gKm5nSWY9XCJlZGl0QWxsUm93cyAmJiAhaGlkZUdyaWRDYW5jZWxCdXR0b25cIiBpZD1cImVkaXRCdG5HbG9iYWx2YWx1ZXNcIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIFtsYWJlbF09XCInQ2FuY2VsJ1wiIGljb249XCJwaSBwaS10aW1lc1wiIGNsYXNzPVwidWktYnV0dG9uLWluZm9cIiAoY2xpY2spPVwiY2FuY2VsQWxsUm93c0F0T25jZSgpXCI+PC9idXR0b24+XG5cbiAgICA8IS0tIGhlYWRlciBCdXR0b24gZm9yIG11bHRpU2VsZWN0IG9uIEdyaWQgLS0+XG4gICAgPHNwYW4gKm5nSWY9XCJhbGxvd0NvbHVtblRvZ2dsZVwiPlxuICAgICAgPHAtbXVsdGlTZWxlY3QgW3Nob3dUb2dnbGVBbGxdPVwiZmFsc2VcIiBvcHRpb25EaXNhYmxlZD1cImZhbHNlXCIgW29wdGlvbnNdPVwic2VsZWN0ZWRUb2dnbGVDb2x1bW5zXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZENvbHVtbnNcIiBvcHRpb25MYWJlbD1cImhlYWRlclwiIHNlbGVjdGVkSXRlbXNMYWJlbD1cInswfSBjb2x1bW5zIHNlbGVjdGVkXCJcbiAgICAgICAgY2xhc3M9XCJncmlkLWNvbXBvbmVudC1tdWx0aXNlbGVjdC1oZWFkZXItYnV0dG9uXCIgcGxhY2Vob2xkZXI9XCJDaG9vc2UgQ29sdW1uc1wiPlxuICAgICAgPC9wLW11bHRpU2VsZWN0PlxuICAgIDwvc3Bhbj5cblxuICAgIDwhLS0gaGVhZGVyIEJ1dHRvbiBmb3IgQWRkaW5nIG5ldyBSb3cgb24gR3JpZCAtLT5cbiAgICA8YnV0dG9uIHBCdXR0b24gKm5nSWY9XCJ1c2VJbmxpbmVDUlVEICYmIGFkZFJvd1Blcm1pc3Npb24gJiYgIWhpZGVBZGRCdG5cIiB0eXBlPVwiYnV0dG9uXCIgW2xhYmVsXT1cIidBZGQnXCIgcEFkZFJvd1xuICAgICAgW3RhYmxlXT1cImNvbXBvbmVudFRhYmxlUmVmXCIgW3ByZXZlbnROZXdSb3ddPVwicHJldmVudE5ld1Jvd1wiIFtuZXdSb3ddPVwibmV3R3JpZFJvd1wiIFtpZF09XCJkYXRhS2V5XCJcbiAgICAgIHBUb29sdGlwPVwiQWRkIE5ldyBSb3dcIiB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIiBpY29uPVwicGkgcGktcGx1c1wiXG4gICAgICBbY2xhc3NdPVwiJ3VpLWJ1dHRvbi1pbmZvIGdsb2JhbC1hZGQtYnRuJytncmlkTmFtZVwiIChjbGljayk9XCJhZGROZXdSb3cobmV3R3JpZFJvdywgdHJ1ZSlcIiBwUmlwcGxlPjwvYnV0dG9uPlxuXG5cbiAgICA8IS0tIGhlYWRlciBCdXR0b24gZm9yIEV4Y2VsIEZpbGUgb24gR3JpZCAtLT5cbiAgICA8YnV0dG9uICpuZ0lmPVwiYWxsb3dFeHBvcnRUb0V4Y2VsXCIgdHlwZT1cImJ1dHRvblwiIHBCdXR0b24gaWNvbj1cInBpIHBpLWZpbGUtZXhjZWxcIiAoY2xpY2spPVwiZXhwb3J0RXhjZWwoKVwiXG4gICAgICBjbGFzcz1cInAtYnV0dG9uLXN1Y2Nlc3NcIiBwVG9vbHRpcD1cIkV4cG9ydCB0byBFeGNlbFwiIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiIHBSaXBwbGU+PC9idXR0b24+XG5cbiAgICA8IS0tIGhlYWRlciBCdXR0b24gZm9yIFBERiBGaWxlIG9uIEdyaWQgLS0+XG4gICAgPGJ1dHRvbiAqbmdJZj1cImFsbG93RXhwb3J0VG9QZGZcIiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBpY29uPVwicGkgcGktZmlsZS1wZGZcIiAoY2xpY2spPVwiZXhwb3J0UGRmKClcIlxuICAgICAgY2xhc3M9XCJwLWJ1dHRvbi13YXJuaW5nIG1yLTIgbWwtMlwiIHBUb29sdGlwPVwiRXhwb3J0IHRvIFBkZlwiIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiIHBSaXBwbGU+PC9idXR0b24+XG5cbiAgICA8IS0tIDxkaXYgKm5nRm9yPVwibGV0IHJlcG9ydEJ1dHRvbiBvZiByZXBvcnRCdXR0b25zXCIgY2xhc3M9XCJ1aS1idXR0b24taW5mbyBtci0yIG1sLTJcIj5cbiAgICA8c2UtZ2VuZXJhdGUtcmVwb3J0LWJ0biAqbmdJZiA9XCIhcmVwb3J0QnV0dG9uLmhpZGRlblwiW3JlcElkXT1cInJlcG9ydEJ1dHRvbi5yZXBvcnRJZFwiIFtsYWJlbF09XCJyZXBvcnRCdXR0b24ubGFiZWxcIiBbcGFyYW1zXT1cInJlcG9ydEJ1dHRvbi5wYXJhbXNcIlxuICAgICAgW3Nob3dEaWFsb2ddPVwicmVwb3J0QnV0dG9uLnNob3dEaWFsb2dcIj48L3NlLWdlbmVyYXRlLXJlcG9ydC1idG4+XG4gIDwvZGl2PiAtLT5cblxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cblxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJlcG9ydEJ1dHRvbiBvZiByZXBvcnRCdXR0b25zXCI+XG4gICAgICA8c2UtZ2VuZXJhdGUtcmVwb3J0LWJ0biAqbmdJZj1cIiFyZXBvcnRCdXR0b24uaGlkZGVuXCIgW3JlcEluZm9dPVwicmVwb3J0QnV0dG9uXCIgW2xhYmVsXT1cInJlcG9ydEJ1dHRvbi5sYWJlbFwiXG4gICAgICAgIFtwYXJhbXNdPVwicmVwb3J0QnV0dG9uLnBhcmFtc1wiIFtpY29uXT1cInJlcG9ydEJ1dHRvbi5pY29uXCIgW2NsYXNzXT1cInJlcG9ydEJ1dHRvbi5jbGFzc1wiXG4gICAgICAgIFtzaG93RGlhbG9nXT1cInJlcG9ydEJ1dHRvbi5zaG93RGlhbG9nXCIgW3JlcG9ydFR5cGVdPVwiIHJlcG9ydEJ1dHRvbi5yZXBvcnRUeXBlXCJcbiAgICAgICAgW3JlcG9ydEhlYWRlcl09XCJyZXBvcnRCdXR0b24ucmVwb3J0SGVhZGVyXCIgW3JlcG9ydEZvb3Rlcl09XCJyZXBvcnRCdXR0b24ucmVwb3J0Rm9vdGVyXCI+PC9zZS1nZW5lcmF0ZS1yZXBvcnQtYnRuPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gIDwvZGl2PlxuXG4gIDxwLXRhYmxlICpuZ0lmPVwiIWlzR3JpZEhpZGRlblwiIGlkPVwibXktdGFibGVcIiBbdmFsdWVdPVwicm93c0RhdGFcIiBbY29sdW1uc109XCJzZWxlY3RlZENvbHVtbnNcIiBzb3J0TW9kZT1cIm11bHRpcGxlXCJcbiAgICBbbGF6eV09XCJ1c2VTZXJ2ZXJTaWRlRXZlbnRzIHx8IHBhZ2luYXRpb25cIiBbcGFnaW5hdG9yXT1cInBhZ2luYXRpb25cIlxuICAgIFthbHdheXNTaG93UGFnaW5hdG9yXT1cInBhZ2luYXRpb24gJiYgdG90YWxSZWNvcmRzID4gMFwiIFtnbG9iYWxGaWx0ZXJGaWVsZHNdPVwiZ2xvYmFsRmlsdGVyRmllbGRzXCJcbiAgICBbY2xhc3NdPVwiJyBncmlkLWNvbXBvbmVudC1tYWluLXRhYmxlICcgKyAocGFnaW5hdGlvbiB8fCAhcm93c0RhdGEubGVuZ3RoID8gJyBwYWdpbmF0aW9uICcgOiAnJykgKyAodGFibGVTdHlsZS5pbmNsdWRlcygnd2lkdGgnKSA/ICcgaGFzVGFibGVXaWR0aFN0eWxlICcgOiAnJykgKyAoYXV0b1Jlc2l6ZSA/ICcnIDogJ3RhYmxlLWxheW91dC1hdXRvJykgXCJcbiAgICAob25Db2xSZXNpemUpPVwib25Db2x1bW5SZXNpemUoJGV2ZW50LGR0KVwiIFtyZXNpemFibGVDb2x1bW5zXT1cInRydWVcIiByZXNwb25zaXZlTGF5b3V0PVwic2Nyb2xsXCJcbiAgICBjb2x1bW5SZXNpemVNb2RlPVwiZXhwYW5kXCIgW3Jvd3NdPVwiZGVmYXVsdFJvd3NcIiBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3Jkc1wiXG4gICAgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJzZXRQYWdpbmF0aW9uTGVuZ3RoXCIgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJzaG93Q3VycmVudFBhZ2VSZXBvcnRcIlxuICAgIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJTaG93aW5nIHtmaXJzdH0gdG8ge2xhc3R9IG9mIHt7XG4gICAgICB0b3RhbFJlY29yZHNcbiAgICB9fSBlbnRyaWVzXCIgW2xvYWRpbmddPVwiIXNldEdyaWRSZWZyZXNoVGltZSA/IGxvYWRpbmcgOiBmYWxzZVwiXG4gICAgKG9uU29ydCk9XCJzb3J0RGlzYWJsZWQgPyAnJyA6IGhhbmRsZVNvcnRDaGFuZ2UoJGV2ZW50KVwiIChvbkZpbHRlcik9XCJoYW5kbGVGaWx0ZXJDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKG9uTGF6eUxvYWQpPVwic2hvdWxkUnVuU2VydmVyU2lkZSgkZXZlbnQpID8gaGFuZGxlU2VydmVyU2lkZUV2ZW50cygkZXZlbnQsIGR0KSA6IG51bGxcIlxuICAgIChvblBhZ2UpPVwiZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCA/IHNob3dDb25maXJtYXRpb24oJGV2ZW50KSA6IGhhbmRsZVNlcnZlclNpZGVQYWdpbmF0aW9uKCRldmVudClcIiAjZHRcbiAgICBbZGF0YUtleV09XCJkYXRhS2V5XCIgWyhzZWxlY3Rpb24pXT1cInNlbGVjdGVkUm93c1wiIHNlbGVjdGlvbk1vZGU9XCJtdWx0aXBsZVwiIFtzY3JvbGxhYmxlXT1cInNjcm9sbGFibGVcIlxuICAgIFt0YWJsZVN0eWxlXT1cInRhYmxlU3R5bGVcIiBbc2Nyb2xsSGVpZ2h0XT1cInNjcm9sbEhlaWdodFwiIGVkaXRNb2RlPVwicm93XCIgW2VkaXRpbmdSb3dLZXlzXT1cImVkaXRpbmdSb3dLZXlzXCJcbiAgICBbcm93SG92ZXJdPVwicm93SG92ZXJcIiBbbmdDbGFzc109XCJzZXRDbGFzc2FBbmRJZChkdClcIiAob25Sb3dSZW9yZGVyKT1cIm9uUm93UmVvcmRlcigkZXZlbnQpXCI+XG5cbiAgICA8ZGl2ICpuZ0lmPVwicm93QWN0aW9ucy5sZW5ndGggPiAwICYmIHJvd0FjdGlvbnMubGVuZ3RoID4gMFwiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG4gICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgcm93QWN0aW9uIG9mIHJvd0FjdGlvbnNcIj5cbiAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBbbGFiZWxdPVwicm93QWN0aW9uLnRpdGxlXCIgW2NsYXNzXT1cInJvd0FjdGlvbi5jbGFzc1wiXG4gICAgICAgICAgKGNsaWNrKT1cInJvd0FjdGlvbi5vbkNsaWNrKHNlbGVjdGVkUm93cylcIj48L2J1dHRvbj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gaGVhZGVyIGNvbHVtbnMgb24gR3JpZCAtLT5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCIgbGV0LWNvbHM+XG4gICAgICA8dHI+XG4gICAgICAgIDx0aCBwUmVzaXphYmxlQ29sdW1uICpuZ0lmPVwiYWxsb3dTZWxlY3Rpb24gJiYgc2VsZWN0aW9uVHlwZSA9PT0gJ211bHRpcGxlJ1wiIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtc2VsZWN0aW9uXCJcbiAgICAgICAgICBpZD1cInt7YWxsb3dTZWxlY3Rpb25IZWFkZXJ9fVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGgtY29udGVudC13cmFwcGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtdGFibGUtaGVhZGVyLWlubmVyLWRpdi0yXG4gICAgICAgICAgICAgICAgICB0YWJsZS1oZWFkZXItaW5uZXItZGl2IGRpdi1sYXN0LWlubmVyLWh0bWwtaXMtaWNvblwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXgtZ3Jvdy0xXCI+IHt7YWxsb3dTZWxlY3Rpb25IZWFkZXJ9fSA8L3NwYW4+XG4gICAgICAgICAgICAgIDxwLXRhYmxlSGVhZGVyQ2hlY2tib3ggKm5nSWY9XCJzZWxlY3Rpb25UeXBlID09PSAnbXVsdGlwbGUnXCIgYmluYXJ5PVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm11bHRpQ2hlY2tCb3hPbmNsaWNrKHJvd3NEYXRhLCAkZXZlbnQpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCI+PC9wLXRhYmxlSGVhZGVyQ2hlY2tib3g+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCBwUmVzaXphYmxlQ29sdW1uICpuZ0lmPVwiYWxsb3dTZWxlY3Rpb24gJiYgc2VsZWN0aW9uVHlwZSA9PT0gJ3NpbmdsZSdcIiBpZD1cIlNlbGVjdFwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIlxuICAgICAgICAgIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtc2VsZWN0aW9uXCI+XG4gICAgICAgICAgU2VsZWN0XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCBwUmVzaXphYmxlQ29sdW1uIGlkPVwiQWN0aW9uc1wiXG4gICAgICAgICAgKm5nSWY9XCJzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmICFkaXNhYmxlZFNhdmVCdG4gJiYgY29sdW1ucz8ubGVuZ3RoID4gMCAmJiAoY29sdW1uQWN0aW9ucy5sZW5ndGggPiAwIHx8ICh1c2VJbmxpbmVDUlVEICYmIChkZWxldGVSb3dQZXJtaXNzaW9uIHx8IGVkaXRSb3dQZXJtaXNzaW9uKSkpXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bicgXCIgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiPlxuICAgICAgICAgIEFjdGlvbnNcbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoIHBSZXNpemFibGVDb2x1bW4gKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2xzXCJcbiAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiY29sdW1uPy5jb2x1bW5XaWR0aCA/IGNvbHVtbj8uY29sdW1uV2lkdGgrJ3B4JyA6IGNvbHVtbj8uY3VzdG9tV2lkdGgrJ3B4J1wiXG4gICAgICAgICAgaWQ9XCJ7e2NvbHVtbi5oZWFkZXJ9fVwiIFthdHRyLmRhdGEtY29sdW1uLWhlYWRlcl09XCJjb2x1bW4/LmhlYWRlclwiIFtwU29ydGFibGVDb2x1bW5dPVwiY29sdW1uLmZpZWxkXCJcbiAgICAgICAgICBbY2xhc3NdPVwiY29sdW1uLnR5cGUgPT09ICdib29sZWFuJyA/ICdjaGVja2JveC10aCcgOiAnJ1wiXG4gICAgICAgICAgW3BTb3J0YWJsZUNvbHVtbkRpc2FibGVkXT1cInNvcnREaXNhYmxlZCAmJiB1c2VTZXJ2ZXJTaWRlRXZlbnRzID8gdHJ1ZSA6IGNvbHVtbi5zb3J0aW5nID09PSBmYWxzZVwiXG4gICAgICAgICAgY2xhc3M9XCJjb2x1bW4/LnR5cGUgPT09ICdtdWx0aXBsZScgPyAnZ3JpZC1jb21wb25lbnQtc2VsZWN0LXRoLWNvbHVtbi10eXBlLW11bHRpcGxlJyA6ICcnXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aC1jb250ZW50LXdyYXBwZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLWNvbXBvbmVudC10YWJsZS1oZWFkZXItaW5uZXItZGl2LTEgdGFibGUtaGVhZGVyLWlubmVyLWRpdiBkaXYtbGFzdC1pbm5lci1odG1sLWlzLWljb25cIj5cbiAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cIidzZWxmJ1wiIFtjbGFzc109XCInZmxleC1ncm93LTEnXCI+e3sgY29sdW1uLmhlYWRlciB9fVxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uLmlzUmVxdWlyZWRcIiBjbGFzcz1cImdyaWQtY29tcG9uZW50IHJlcXVpcmVkLXN0YXJcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxwLXNvcnRJY29uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4uc29ydGluZyAhPT0gZmFsc2UgJiYgY29sdW1uPy50eXBlICE9PSAnbXVsdGlwbGUnICYmICghKGVkaXRBbGxSb3dzICYmIHBhZ2luYXRpb24pIHx8IHNvcnRJY29uSGlkZGVuKVwiXG4gICAgICAgICAgICAgICAgW2ZpZWxkXT1cImNvbHVtbi5maWVsZFwiIChjbGljayk9XCJoYW5kbGVDdXN0b21Tb3J0aW5nKClcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCAqbmdJZj1cImhhc01vcmVDb2x1bW5zKClcIiBwUmVzaXphYmxlQ29sdW1uIGlkPVwiTW9yZUFjdGlvbnNcIiBjbGFzcz1cIm1vcmUtYWN0aW9ucy10aFwiPk1vcmU8L3RoPlxuICAgICAgICA8dGggcFJlc2l6YWJsZUNvbHVtbiBpZD1cIkFjdGlvbnNcIlxuICAgICAgICAgICpuZ0lmPVwiIXNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgIWRpc2FibGVkU2F2ZUJ0biAmJiBjb2x1bW5zPy5sZW5ndGggPiAwICYmIChjb2x1bW5BY3Rpb25zLmxlbmd0aCA+IDAgfHwgKHVzZUlubGluZUNSVUQgJiYgKGRlbGV0ZVJvd1Blcm1pc3Npb24gfHwgZWRpdFJvd1Blcm1pc3Npb24pKSlcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5BY3Rpb25zPC90aD5cbiAgICAgIDwvdHI+XG4gICAgICA8dHIgKm5nSWY9XCJmaWx0ZXJpbmcgJiYgIWhpZGVGaWx0ZXJcIj5cbiAgICAgICAgPHRoIHBSZXNpemFibGVDb2x1bW4gKm5nSWY9XCJhbGxvd1NlbGVjdGlvblwiIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiPjwvdGg+XG4gICAgICAgIDx0aCBwUmVzaXphYmxlQ29sdW1uICpuZ0lmPVwic2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiAhZGlzYWJsZWRTYXZlQnRuICYmIHVzZUlubGluZUNSVURcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggcFJlc2l6YWJsZUNvbHVtbiAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHNcIlxuICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2x1bW4/LmNvbHVtbldpZHRoID8gY29sdW1uPy5jb2x1bW5XaWR0aCsncHgnIDogY29sdW1uPy5jdXN0b21XaWR0aCsncHgnXCJcbiAgICAgICAgICBpZD1cInt7Y29sdW1uLmhlYWRlcn19XCIgW25nU3dpdGNoXT1cImNvbHVtbj8uZmlsdGVyPy50eXBlXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaGlkZUZpbHRlck9wdGlvbnMgPyAnaGlkZS10YWJsZS1maWx0ZXIgdGVtcCcgOiAndGVtcCdcIj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbi5maWx0ZXJpbmcgIT09IGZhbHNlXCIgW2NsYXNzXT1cImNvbHVtbi5maWx0ZXI/LnNob3dGaWx0ZXIgPyAnJyA6ICdoaWRlLWZpbHRlci1pY29uJ1wiPlxuICAgICAgICAgICAgPCEtLSBUZXh0IGlucHV0IG9uIEhlYWRlciBGb3IgRmlsdGVyLS0+XG4gICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgY2xhc3M9XCJuby1maWx0ZXItaWNvblwiIFt0eXBlXT1cIid0ZXh0J1wiIFtmaWVsZF09XCJjb2x1bW4uZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ2lucHV0J1wiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsdGVyXCIgbGV0LXZhbHVlIGxldC1maWx0ZXI9XCJmaWx0ZXJDYWxsYmFja1wiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiY29sdW1uLmZpbHRlclZhbHVlXCIgW2NsYXNzXT1cImNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKClcIlxuICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImFwcGx5RW50ZXJFdmVudChmaWx0ZXIsICRldmVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAoYmx1cik9XCJzZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgJGV2ZW50KVwiIFtuYW1lXT1cImNvbHVtbi5maWVsZFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hdXRvY29tcGxldGVdPVwiKGNvbHVtbi5hdXRvQ29tcGxldGUgPT09IGZhbHNlIHx8IGNvbHVtbi5maWx0ZXJBdXRvQ29tcGxldGUgPT09IGZhbHNlIHx8IGF1dG9Db21wbGV0ZSA9PT0gZmFsc2UpID8gJ29mZicgOiAnb24nXCJcbiAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJyZW1vdmluZ0ZpbHRlcnMoJGV2ZW50LCBjb2x1bW4pO2JhY2tzcGFjZUV2ZW50KCRldmVudCwgY29sdW1uKVwiIHBJbnB1dFRleHQgLz5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG5cbiAgICAgICAgICAgIDwhLS0gTnVtZXJpYyBpbnB1dCBvbiBIZWFkZXIgRm9yIEZpbHRlci0tPlxuICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyIGNsYXNzPVwibm8tZmlsdGVyLWljb25cIiBbdHlwZV09XCInbnVtZXJpYydcIiBbZmllbGRdPVwiY29sdW1uLmZpZWxkXCJcbiAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidudW1lcmljX2lucHV0J1wiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsdGVyXCIgbGV0LXZhbHVlIGxldC1maWx0ZXI9XCJmaWx0ZXJDYWxsYmFja1wiPlxuICAgICAgICAgICAgICAgIDxwLWlucHV0TnVtYmVyIFsobmdNb2RlbCldPVwiY29sdW1uLmZpbHRlclZhbHVlXCIgW2NsYXNzXT1cImNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKClcIlxuICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImFwcGx5RW50ZXJFdmVudChmaWx0ZXIsICRldmVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAob25CbHVyKT1cInNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJyZW1vdmluZ0ZpbHRlcnMoJGV2ZW50LCBjb2x1bW4pO2JhY2tzcGFjZUV2ZW50KCRldmVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hdXRvY29tcGxldGVdPVwiY29sdW1uLmZpbHRlckF1dG9Db21wbGV0ZSA9PT0gdHJ1ZSA/ICdvbicgOiAnb2ZmJ1wiPjwvcC1pbnB1dE51bWJlcj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG5cbiAgICAgICAgICAgIDwhLS0gbG9va3VwIGlucHV0IG9uIEhlYWRlciBGb3IgRmlsdGVyLS0+XG4gICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgY2xhc3M9XCJuby1maWx0ZXItaWNvblwiIFt0eXBlXT1cIid0ZXh0J1wiIFtmaWVsZF09XCJjb2x1bW4uZmllbGRcIiBtYXRjaE1vZGU9XCJlcXVhbHNcIlxuICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2xvb2t1cF9pbnB1dCdcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbHRlclwiIGxldC12YWx1ZSBsZXQtZmlsdGVyPVwiZmlsdGVyQ2FsbGJhY2tcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xvc2UtaWNvbi13cmFwcGVyIGdyaWQtY29tcG9uZW50IGxvb2t1cC1maWx0ZXItd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvb2t1cC1maWx0ZXItaW5wdXQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2lkXT1cImNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfZmlsdGVyJ1wiIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQgbG9va3VwLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXV0b2NvbXBsZXRlXT1cIihjb2x1bW4uYXV0b0NvbXBsZXRlID09PSBmYWxzZSB8fCBjb2x1bW4uZmlsdGVyQXV0b0NvbXBsZXRlID09PSBmYWxzZSB8fCBhdXRvQ29tcGxldGUgPT09IGZhbHNlKSA/ICdvZmYnIDogJ29uJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIiBbbmdNb2RlbF09XCJsb29rdXBGaWx0ZXJJbnB1dE5nTW9kZWwoY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTG9va3VwSW5wdXROZ01vZGVsKCdsb29rdXBGaWx0ZXInLCBjb2x1bW4sICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRGaWx0ZXJMb29rdXAoY29sdW1uKVwiIChrZXl1cC5lbnRlcik9XCJhcHBseUVudGVyRXZlbnQoZmlsdGVyLCAkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cInNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCAkZXZlbnQpXCIgW25hbWVdPVwiY29sdW1uLmZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwicmVtb3ZpbmdGaWx0ZXJzKCRldmVudCwgY29sdW1uKTtiYWNrc3BhY2VFdmVudCgkZXZlbnQsIGNvbHVtbilcIiBwSW5wdXRUZXh0IC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXJlY3Qtd3JhcHBlci1jbG9zZS1pY29uLWxvb2t1cFwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiY29sdW1uLmZpbHRlclZhbHVlXCIgaWNvbj1cInBpIHBpLXRpbWVzXCIgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibG9va3VwQ2xlYXJWYWx1ZShjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3AtY29sdW1uRmlsdGVyPlxuXG4gICAgICAgICAgICA8IS0tIGNoZWNrYm94IG9uIEhlYWRlciBGb3IgRmlsdGVyLS0+XG4gICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgY2xhc3M9XCJuby1maWx0ZXItaWNvblwiIHR5cGU9XCJib29sZWFuXCIgW2ZpZWxkXT1cImNvbHVtbi5maWVsZFwiICpuZ1N3aXRjaENhc2U9XCInY2hlY2tib3gnXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJcIiBsZXQtdmFsdWUgbGV0LWZpbHRlcj1cImZpbHRlckNhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgPHAtY2hlY2tib3ggW2JpbmFyeV09XCJ0cnVlXCIgW2Rpc2FibGVkXT1cImNvbHVtbi5kaXNhYmxlZFwiIFtuZ01vZGVsXT1cImNvbHVtbi5maWx0ZXJWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiYXBwbHlFbnRlckV2ZW50KGZpbHRlciwgJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJzZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjbGlja0NoZWNrQm94RmlsdGVyKGNvbHVtbiwgJGV2ZW50KVwiIChrZXlkb3duKT1cImJhY2tzcGFjZUV2ZW50KCRldmVudCwgY29sdW1uKVwiPlxuICAgICAgICAgICAgICAgIDwvcC1jaGVja2JveD5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG5cbiAgICAgICAgICAgIDwhLS0gbXVsdGlTZWxlY3Qgb24gSGVhZGVyIEZvciBGaWx0ZXItLT5cbiAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciBjbGFzcz1cIm5vLWZpbHRlci1pY29uXCIgW2ZpZWxkXT1cImNvbHVtbi5maWVsZFwiIG1hdGNoTW9kZT1cImluXCIgW3Nob3dNZW51XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidtdWx0aS1zZWxlY3QnXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJcIiBsZXQtdmFsdWUgbGV0LWZpbHRlcj1cImZpbHRlckNhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgPHAtbXVsdGlTZWxlY3QgWyhuZ01vZGVsKV09XCJjb2x1bW4uZmlsdGVyVmFsdWVcIiBbb3B0aW9uc109XCJjb2x1bW4uZmlsdGVyLmRhdGEgfHwgW11cIiBbYXBwZW5kVG9dPVwiJ2JvZHknXCJcbiAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImNvbHVtbi5maWVsZFwiIChrZXl1cC5lbnRlcik9XCJhcHBseUVudGVyRXZlbnQoZmlsdGVyLCAkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgW29wdGlvblZhbHVlXT1cImNvbHVtbi5vcHRpb25WYWx1ZVwiIFtvcHRpb25MYWJlbF09XCJjb2x1bW4ub3B0aW9uTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cInNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCAkZXZlbnQpXCIgKGtleWRvd24pPVwiYmFja3NwYWNlRXZlbnQoJGV2ZW50LCBjb2x1bW4pXCI+XG5cbiAgICAgICAgICAgICAgICA8L3AtbXVsdGlTZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3AtY29sdW1uRmlsdGVyPlxuXG4gICAgICAgICAgICA8IS0tIGRyb3Bkb3duIG9uIEhlYWRlciBGb3IgRmlsdGVyLS0+XG4gICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgY2xhc3M9XCJuby1maWx0ZXItaWNvblwiIFtmaWVsZF09XCJjb2x1bW4uZmllbGRcIiBtYXRjaE1vZGU9XCJpblwiIFtzaG93TWVudV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInZHJvcGRvd24nXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJcIiBsZXQtdmFsdWUgbGV0LWZpbHRlcj1cImZpbHRlckNhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgPHAtZHJvcGRvd24gW3Nob3dDbGVhcl09XCJ0cnVlXCIgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QnXCIgW2ZpbHRlcl09XCJjb2x1bW4uYWxsb3dTZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb2x1bW4uZmlsdGVyVmFsdWVcIiAoa2V5dXAuZW50ZXIpPVwiYXBwbHlEcm9wZG93bkZpbHRlcihmaWx0ZXIsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiY29sdW1uLmZpbHRlci5kYXRhIHx8IFtdXCIgKG9uQ2hhbmdlKT1cInNlYXJjaERyb3Bkb3duRmlsdGVyKGZpbHRlciwgJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgIFthcHBlbmRUb109XCInYm9keSdcIiBmaWx0ZXJNYXRjaE1vZGU9XCJzdGFydHNXaXRoXCI+PC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cblxuICAgICAgICAgICAgPCEtLSBjYWxlbmRhciBvbiBIZWFkZXIgRm9yIEZpbHRlci0tPlxuICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyIGNsYXNzPVwibm8tZmlsdGVyLWljb25cIiBbZmllbGRdPVwiY29sdW1uLmZpZWxkXCIgbWF0Y2hNb2RlPVwiaW5cIiBbc2hvd01lbnVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2NhbGVuZGFyJ1wiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsdGVyXCIgbGV0LXZhbHVlIGxldC1maWx0ZXI9XCJmaWx0ZXJDYWxsYmFja1wiPlxuICAgICAgICAgICAgICAgIDxwLWRhdGVwaWNrZXIgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QtRGF0ZSdcIiBbKG5nTW9kZWwpXT1cImNvbHVtbi5maWx0ZXJWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY29sdW1uLmZpZWxkICsgJy1maWx0ZXItaW5wdXQnXCIgKGtleXVwLmVudGVyKT1cImFwcGx5RW50ZXJFdmVudChmaWx0ZXIsICRldmVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICBhcHBlbmRUbz1cImJvZHlcIiAob25TZWxlY3QpPVwic2VsZWN0RGF0ZShjb2x1bW4pXCIgW2lucHV0SWRdPVwiY29sdW1uLmZpZWxkXCIgaG91ckZvcm1hdD1cIjEyXCJcbiAgICAgICAgICAgICAgICAgIChrZXl1cC5iYWNrc3BhY2UpPVwicmVtb3ZlTnVsbENhbGVuZGFyKGNvbHVtbiwgZmlsdGVyLCAkZXZlbnQpXCIgW3Nob3dCdXR0b25CYXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAob25DbG9zZSk9XCJzZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgJGV2ZW50KVwiIFtkYXRlRm9ybWF0XT1cImNhbGVuZGFyRm9ybWF0XCJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNhbGVuZGFySW5wdXRWYWx1ZShjb2x1bW4sIHt9LCB0cnVlKVwiIChvbkNsZWFyQ2xpY2spPVwiYmFja3NwYWNlRXZlbnQoJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cInNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCAkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPC9wLWRhdGVwaWNrZXI+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3AtY29sdW1uRmlsdGVyPlxuXG4gICAgICAgICAgICA8IS0tIERlZmF1bHQgRmlsdGVyIEZvciBIZWFkZXIgIC0tPlxuICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyIGNsYXNzPVwibm8tZmlsdGVyLWljb25cIiBbdHlwZV09XCJcbiAgICAgICAgICAgICAgICBjb2x1bW4udHlwZSAmJiBjb2x1bW4udHlwZSAhPT0gJ2xpbmsnID8gY29sdW1uLnR5cGUgOiAndGV4dCdcbiAgICAgICAgICAgICAgXCIgW2ZpZWxkXT1cImNvbHVtbi5maWVsZFwiIGRpc3BsYXk9XCJtZW51XCIgKm5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggKm5nSWY9XCJoYXNNb3JlQ29sdW1ucygpXCIgcFJlc2l6YWJsZUNvbHVtbiBjbGFzcz1cIm1vcmUtYWN0aW9ucy10aFwiPjwvdGg+XG4gICAgICAgIDx0aCBwUmVzaXphYmxlQ29sdW1uXG4gICAgICAgICAgKm5nSWY9XCIhc2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiAhZGlzYWJsZWRTYXZlQnRuICYmIGNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgKGNvbHVtbkFjdGlvbnMubGVuZ3RoID4gMCB8fCAodXNlSW5saW5lQ1JVRCAmJiAoZGVsZXRlUm93UGVybWlzc2lvbiB8fCBlZGl0Um93UGVybWlzc2lvbikpKVwiXG4gICAgICAgICAgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCI+PC90aD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDwhLS0gQm9keSBjb2x1bW5zIG9uIEdyaWQgLS0+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtcm93IGxldC1lZGl0aW5nPVwiZWRpdGluZ1wiIGxldC1yaT1cInJvd0luZGV4XCI+XG4gICAgICA8dHIgW3N0eWxlXT1cInJvd1N0eWxlXCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAnaGlnaGxpZ2h0ZWQtcm93Jzogcm93Py5oaWdobGlnaHRyb3csXG4gICAgICAgICdlbGxpcHNpcy10cnVlJzogZWxsaXBzaXMsXG4gICAgICAgICdwLXNlbGVjdGFibGUtcm93IHdvcmRXcmFwVHJ1ZSc6IHdvcmRXcmFwLFxuICAgICAgICAnd29yZFdyYXBGYWxzZSBwLXNlbGVjdGFibGUtcm93JzogIXdvcmRXcmFwXG4gICAgICB9XCIgKGNsaWNrKT1cInNlbGVjdGVkUm93UmVjb3JkID0gcm93XCIgW3BFZGl0YWJsZVJvd109XCJyb3dcIiBbcFJlb3JkZXJhYmxlUm93XT1cInJpXCIgI2dyaWRSb3cgW2lkXT1cInJvd1tkYXRhS2V5XVwiPlxuICAgICAgICA8dGQgKm5nSWY9XCJhbGxvd1NlbGVjdGlvblwiIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtc2VsZWN0aW9uXCIgcFJlb3JkZXJhYmxlUm93SGFuZGxlPlxuICAgICAgICAgIDxwLXRhYmxlUmFkaW9CdXR0b24gW3ZhbHVlXT1cInJvd1wiICpuZ0lmPVwic2VsZWN0aW9uVHlwZSA9PT0gJ3NpbmdsZSdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm11bHRpQ2hlY2tCb3hPbmNsaWNrKHJvdyAsICRldmVudCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIj48L3AtdGFibGVSYWRpb0J1dHRvbj5cbiAgICAgICAgICA8cC10YWJsZUNoZWNrYm94IFt2YWx1ZV09XCJyb3dcIiAqbmdJZj1cInNlbGVjdGlvblR5cGUgPT09ICdtdWx0aXBsZSdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm11bHRpQ2hlY2tCb3hPbmNsaWNrKHJvdywgJGV2ZW50KTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1wiPjwvcC10YWJsZUNoZWNrYm94PlxuICAgICAgICA8L3RkPlxuXG4gICAgICAgIDwhLS0gZmlyc3QgYWN0aW9ucyBjb2x1bW4gLS0+XG4gICAgICAgIDwhLS0gPHRkICpuZ0lmPVwic2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiBjb2x1bW5BY3Rpb25zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImFjdGlvbi1idG5cIiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGNvbHVtbkFjdGlvbnNcIj5cbiAgICAgICAgICAgIDxpIFt0aXRsZV09XCJhY3Rpb24udG9vbHRpcFwiIFtjbGFzc109XCJhY3Rpb24uaWNvblwiIChjbGljayk9XCJoYW5kbGVBY3Rpb25DbGljaygkZXZlbnQsIGFjdGlvbiwgcm93KVwiPjwvaT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGQ+IC0tPlxuICAgICAgICA8dGQgKm5nSWY9XCJzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmIGNvbHVtbkFjdGlvbnMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb2x1bW5BY3Rpb25zXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFjdGlvbi1idG5cIiAqbmdJZj1cImFjdGlvbi52aXNpYmxlID8gYWN0aW9uLnZpc2libGUocm93KSA6IHRydWVcIj5cbiAgICAgICAgICAgICAgPGkgW3RpdGxlXT1cImFjdGlvbi50b29sdGlwXCIgW2NsYXNzXT1cImFjdGlvbi5pY29uXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aW9uLWJ0bi1kaXNhYmxlZF09XCJhY3Rpb24uZGlzYWJsZWQgPyBhY3Rpb24uZGlzYWJsZWQocm93KSA6IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiKGFjdGlvbi5kaXNhYmxlZCAmJiBhY3Rpb24uZGlzYWJsZWQocm93KSkgPyBudWxsIDogaGFuZGxlQWN0aW9uQ2xpY2soJGV2ZW50LCBhY3Rpb24sIHJvdylcIj48L2k+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCAqbmdJZj1cInNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgdXNlSW5saW5lQ1JVRCAmJiAoZGVsZXRlUm93UGVybWlzc2lvbiB8fCBlZGl0Um93UGVybWlzc2lvbilcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZGlzYWJsZWRTYXZlQnRuID8gJ2hpZGUtY2xlYXItZmlsdGVyLWJ1dHRvbicgOiAnJ1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2V0QWN0aW9uQ29sdW1uV2lkdGhcIj5cbiAgICAgICAgICAgIDxzZS1ncmlkLXJvdy1hY3Rpb25zIFtlZGl0aW5nXT1cImVkaXRpbmdcIiBbZWRpdFJvd1Blcm1pc3Npb25dPVwiZWRpdFJvd1Blcm1pc3Npb25cIlxuICAgICAgICAgICAgICBbZGVsZXRlUm93UGVybWlzc2lvbl09XCJkZWxldGVSb3dQZXJtaXNzaW9uXCIgW2hpZGVEZWxldGVCdG5dPVwiaGlkZURlbGV0ZUJ0blwiIFtoaWRlRWRpdEJ0bl09XCJoaWRlRWRpdEJ0blwiXG4gICAgICAgICAgICAgIFtyb3ddPVwicm93XCIgKG9uUm93RWRpdEluaXRCdG4pPVwib25Sb3dFZGl0SW5pdCgkZXZlbnQpXCIgKGRlbGV0ZVJlY29yZEJ0bik9XCJkZWxldGVSZWNvcmQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChvblJvd0VkaXRTYXZlQnRuKT1cIm9uUm93RWRpdFNhdmUoJGV2ZW50KVwiIChvblJvd0VkaXRDYW5jZWxCdG4pPVwib25Sb3dFZGl0Q2FuY2VsKCRldmVudCwgcmkpXCJcbiAgICAgICAgICAgICAgW2VkaXRBbGxSb3dzXT1cImVkaXRBbGxSb3dzXCI+XG4gICAgICAgICAgICA8L3NlLWdyaWQtcm93LWFjdGlvbnM+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RkPlxuXG4gICAgICAgIDwhLS0gR3JpZCBSb3dzIERhdGEgQmluZGluZ3MgU3RhcnQgLS0+XG4gICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHNlbGVjdGVkQ29sdW1uc1wiIFtuZ1N3aXRjaF09XCJjb2x1bW4udHlwZVwiIFtzdHlsZV09XCJjb2x1bW4uc3R5bGVcIlxuICAgICAgICAgIFtjbGFzc109XCJjb2x1bW4uc3R5bGUgPyAnJyA6ICd3LXN0YXRpYy1jb2wnXCIgW2F0dHIuZGF0YS1jb2x1bW4tZmllbGRdPVwiY29sdW1uPy5maWVsZFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uLmhvdmVyRGF0YSAmJiAhY29sdW1uLmlzVGV4dGFyZWEgPyAndGQtb3ZlcmxheScgOiAnJ1wiIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT5cbiAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJjb2x1bW4uaG92ZXJEYXRhICYmICFjb2x1bW4uaXNUZXh0YXJlYSA/ICd0ZC13cmFwcGVyJyA6ICcnXCJcbiAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIihjb2x1bW4uaG92ZXJEYXRhICYmIGNvbHVtbi5ob3ZlckRhdGEuY29tcG9uZW50ICYmICFjb2x1bW4uaXNUZXh0YXJlYSkgPyBhZGREeW5hbWljUGFuZWxPdmVybGF5Q29tcG9uZW50KGNvbHVtbi5ob3ZlckRhdGEsIG92ZXJsYXlQYW5lbCwgJGV2ZW50LCByb3cpIDogJydcIlxuICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwiKGNvbHVtbi5ob3ZlckRhdGEgJiYgY29sdW1uLmhvdmVyRGF0YS5jb21wb25lbnQgJiYgIWNvbHVtbi5pc1RleHRhcmVhKSA/ICBtb3VzZUxlYXZlRXZlbnQob3ZlcmxheVBhbmVsKSA6ICcnXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRkLWNvbnRlbnQtd3JhcHBlclwiIFtzdHlsZV09XCJjb2x1bW4uc3R5bGVcIj5cblxuICAgICAgICAgICAgICA8IS0tIEJvb2xlYW4gY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInYm9vbGVhbidcIj5cbiAgICAgICAgPHRkICpuZ0lmPVwiIWVkaXRpbmcgJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnNob3cgIT0gZmFsc2VcIj5cbiAgICAgICAgICA8cC1jaGVja2JveCBbbmdDbGFzc109XCJ7J2Rpc2FibGVkLWNoZWNrYm94JzogY29sdW1uLmRpc2FibGVkfVwiIFtiaW5hcnldPVwidHJ1ZVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGVja0JveENoYW5nZUV2ZW50KCRldmVudCwgY29sdW1uLCByb3cpXCIgKGNoYW5nZSk9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cImdldENoZWNrYm94VmFsdWUocm93LCBjb2x1bW4pXCI+XG4gICAgICAgICAgPC9wLWNoZWNrYm94PlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgKm5nSWY9XCJlZGl0aW5nXCI+XG4gICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICA8IS0tIGZvciBlZGl0IGNoZWNrQm94IC0tPlxuICAgICAgICAgICAgICA8cC1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJjaGVja0JveENoYW5nZUV2ZW50KCRldmVudCwgY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiIFtiaW5hcnldPVwidHJ1ZVwiIFtuZ01vZGVsXT1cImdldENoZWNrYm94VmFsdWUocm93LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIj48L3AtY2hlY2tib3g+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICB7eyByb3dbY29sdW1uLmZpZWxkXSB9fVxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gbGluayBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgPHNwYW4gW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ2EsaW5wdXQnXCIgKm5nU3dpdGNoQ2FzZT1cIidsaW5rJ1wiPlxuICAgICAgICAgIDwhLS0gbGluayBjb2x1bW4gZm9yIEh5cGVyTGluayBDYXNlIC0tPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uLmFsbG93U2F2ZSA9PT0gZmFsc2VcIj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uLnRhcmdldCAhPT0gJ19zZWxmJ1wiIFtzdHlsZV09XCJjb2x1bW4uc3R5bGVcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnYSdcIiBjbGFzcz1cImN1c3RvbS1saW5rXCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1wiIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT5cblxuICAgICAgICAgICAgICA8YSBjbGFzcz1cImQtaW5saW5lXCIgW2hyZWZdPVwiY29sdW1uLmRpc2FibGVkPycnOnJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5oeXBlcmxpbmtcIiB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT5cbiAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImNvbHVtbi5pY29uICYmIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU7IGVsc2Ugbm9JY29uXCIgW2NsYXNzXT1cImNvbHVtbi5pY29uXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2x1bW4uaGVhZGVyXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cImNvbHVtbj8ub25DbGljayA/IG9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdykgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlPycnOlxuICAgICAgICAgICAgICAgICAgICBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbi50YXJnZXQgPT09ICdfc2VsZidcIiBbc3R5bGVdPVwiY29sdW1uLnN0eWxlXCJcbiAgICAgICAgICAgICAgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ2EnXCIgY2xhc3M9XCJjdXN0b20tbGlua1wiXG4gICAgICAgICAgICAgIFtjbGFzc109XCIgYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdkaXNhYmxlZC1saW5rJyA6ICcnXCIgcFJlb3JkZXJhYmxlUm93SGFuZGxlPlxuXG4gICAgICAgICAgICAgIDxhIGNsYXNzPVwiZC1pbmxpbmVcIiBbaHJlZl09XCJjb2x1bW4uZGlzYWJsZWQ/Jyc6cm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmh5cGVybGlua1wiXG4gICAgICAgICAgICAgICAgW3RhcmdldF09J2NvbHVtbi50YXJnZXQnIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT5cbiAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImNvbHVtbi5pY29uICYmIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU7IGVsc2Ugbm9JY29uXCIgW2NsYXNzXT1cImNvbHVtbi5pY29uXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2x1bW4uaGVhZGVyXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cImNvbHVtbj8ub25DbGljayA/IG9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdykgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlPycnOlxuICAgICAgICAgICAgICAgICAgICBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwhLS0gbGluayBjb2x1bW4gZm9yIEVkaXQgQ2FzZSAtLT5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbi5hbGxvd1NhdmUgfHwgY29sdW1uLmFsbG93U2F2ZSA9PT0gdW5kZWZpbmVkXCI+XG4gICAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIiBwUmVvcmRlcmFibGVSb3dIYW5kbGU+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIoY29sdW1uLmVkaXRhYmxlID09PSB0cnVlICkgJiYgKGNvbHVtbi5lZGl0TGluayA9PT0gdHJ1ZSApXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCIhcm93LmlzTmV3XCIgcElucHV0VGV4dFxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkIHx8IHJvd1tjb2x1bW4uZmllbGRdIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZCA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlGaWVsZCA9ICRldmVudCA6IHJvd1tjb2x1bW4uZmllbGRdID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbHVtbj8ub25DbGljayA/IG9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdykgOiAnJ1wiIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIiBbYXR0ci5hdXRvY29tcGxldGVdPVwiKGNvbHVtbi5hdXRvQ29tcGxldGUgPT09IGZhbHNlIHx8IGF1dG9Db21wbGV0ZSA9PT0gZmFsc2UpID8gJ29mZicgOiAnb24nXCIgKGNoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KVwiIC8+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgcElucHV0VGV4dCAqbmdJZj1cInJvdy5pc05ld1wiIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbHVtbj8ub25DbGljayA/IG9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdykgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJydcIlxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZCA/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkIDogcm93W2NvbHVtbi5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZCA6IHJvd1tjb2x1bW4uZmllbGRdID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiIFthdHRyLmF1dG9jb21wbGV0ZV09XCIoY29sdW1uLmF1dG9Db21wbGV0ZSA9PT0gZmFsc2UgfHwgYXV0b0NvbXBsZXRlID09PSBmYWxzZSkgPyAnb2ZmJyA6ICdvbidcIiAoY2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpXCIgLz5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPCEtLSA8c3BhbiAqbmdJZj1cImNvbHVtbi5lZGl0YWJsZSA9PT0gZmFsc2V8fCBjb2x1bW4uZWRpdGFibGUgPT09IHVuZGVmaW5lZFwiID5cbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImN1c3RvbS1saW5rXCIgKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdylcIiBbaHJlZl09XCJyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uaHlwZXJsaW5rXCIgW3RhcmdldF09J2NvbHVtbi50YXJnZXQnXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdkaXNhYmxlZC1saW5rJyA6ICcnXCI+XG4gICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImNvbHVtbi5pY29uICYmICFyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlOyBlbHNlIG5vSWNvblwiW2NsYXNzXT1cImNvbHVtbi5pY29uXCIgW3RpdGxlXT1cImNvbHVtbi5oZWFkZXJcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vSWNvbj5cbiAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU/Jyc6XG4gICAgICAgICAgICAgICAgICAgIHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj4gLS0+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKGNvbHVtbi5lZGl0TGluayA9PT0gZmFsc2V8fCBjb2x1bW4uZWRpdExpbmsgPT09IHVuZGVmaW5lZCkmJihjb2x1bW4uZWRpdGFibGUgPT09IGZhbHNlfHwgY29sdW1uLmVkaXRhYmxlID09PSB1bmRlZmluZWQpXCI+XG4gICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImQtaW5saW5lXCIgW2hyZWZdPVwicm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmh5cGVybGlua1wiXG4gICAgICAgICAgICAgICAgICAgIFt0YXJnZXRdPVwiY29sdW1uLnRhcmdldCA/IGNvbHVtbi50YXJnZXQgOiAnX2JsYW5rJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjb2x1bW4uZWRpdGFibGUgPT09IGZhbHNlID8gJycgOiBhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2Rpc2FibGVkLWxpbmsnIDogJydcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb2x1bW4uaWNvbiAmJiAhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZTsgZWxzZSBub0ljb25cIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjb2x1bW4uaWNvblwiIFt0aXRsZV09XCJjb2x1bW4uaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29sdW1uPy5vbkNsaWNrID8gb25DbGlja0V2ZW50KGNvbHVtbiwgcm93KSA6ICcnXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vSWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwiY29sdW1uPy5vbkNsaWNrID8gb25DbGlja0V2ZW50KGNvbHVtbiwgcm93KSA6ICcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZT8nJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gW3N0eWxlXT1cImNvbHVtbi5zdHlsZVwiIGNsYXNzPVwiY3VzdG9tLWxpbmtcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNvbHVtbi5lZGl0YWJsZSA9PT0gZmFsc2UgfHwgYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdkaXNhYmxlZC1saW5rJyA6ICcnXCI+XG4gICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImQtaW5saW5lXCIgW2hyZWZdPVwiY29sdW1uLmRpc2FibGVkPycnOnJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5oeXBlcmxpbmtcIlxuICAgICAgICAgICAgICAgICAgICBbdGFyZ2V0XT1cImNvbHVtbi50YXJnZXQgPyBjb2x1bW4udGFyZ2V0IDogJ19ibGFuaydcIiBwUmVvcmRlcmFibGVSb3dIYW5kbGU+XG4gICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiY29sdW1uLmljb24mJiAhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZTsgZWxzZSBub0ljb25cIlxuICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2x1bW4uaGVhZGVyXCIgW2NsYXNzXT1cImNvbHVtbi5pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29sdW1uPy5vbkNsaWNrID8gb25DbGlja0V2ZW50KGNvbHVtbiwgcm93KSA6ICcnXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vSWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwiY29sdW1uPy5vbkNsaWNrID8gb25DbGlja0V2ZW50KGNvbHVtbiwgcm93KSA6ICcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZT8nJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBJZnJhbWUgY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInaWZyYW1lJ1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWxpbmtcIiAoY2xpY2spPVwiZ3JpZElGcmFtZShjb2x1bW4sIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5oeXBlcmxpbmssIHJvdylcIiBbdGl0bGVdPVwiXG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gJiZcbiAgICAgICAgICAgICAgICAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQgPT09IG51bGwgfHwgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQgPT09ICcnKVxuICAgICAgICAgICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkXSA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgOiBjb2x1bW4uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgID8gY29sdW1uLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGRdXG5cbiAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY3VzdG9tLWljb24tYnRuXCIgKm5nSWY9XCJjb2x1bW4uaWNvbjsgZWxzZSBub0ljb25cIiBbZGlzYWJsZWRdPVwiY29sdW1uLmRpc2FibGVkXCI+XG4gICAgICAgICAgICAgIDxpIFtjbGFzc109XCJjb2x1bW4uaWNvblwiIFt0aXRsZV09XCJjb2x1bW4uaGVhZGVyXCI+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vSWNvbj5cbiAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gJiZcbiAgICAgICAgICAgICAgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0ID09PSBudWxsIHx8IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0ID09PSAnJylcbiAgICAgICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkXSA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgIDogY29sdW1uLmRpc3BsYXlUZXh0ID8gY29sdW1uLmRpc3BsYXlUZXh0IDogcm93W2NvbHVtbi5maWVsZF1cbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBkaWFsb2cgY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInZGlhbG9nJ1wiPlxuICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4/LmZpbHRlcj8udHlwZSAhPT0gJ2NhbGVuZGFyJyAmJiAhcm93Py5oaWRlZ3JpZGJ0blwiPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uLmVkaXRhYmxlID09PSB0cnVlICYmICFyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnc2VsZidcIiByZWFkb25seVxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIiB0eXBlPVwidGV4dFwiIHBJbnB1dFRleHRcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdExvb2t1cEZpZWxkKGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkID8gcm93W3Jvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGRdXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZCA/IHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGRdID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwicm93W2NvbHVtbi5maWVsZF1cIiBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiXG4gICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIiAvPlxuXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdzZWxmJ1wiICpuZ0lmPVwiY29sdW1uLmVkaXRhYmxlID09PSBmYWxzZSB8fCBjb2x1bW4uZWRpdGFibGUgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICBcIiBjbGFzcz1cImN1c3RvbS1saW5rXCIgW3N0eWxlXT1cImNvbHVtbi5zdHlsZVwiIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdkaXNhYmxlZC1saW5rJyA6ICcnXG4gICAgICAgICAgICAgICAgICAgIFwiIChjbGljayk9XCJvcGVuR3JpZERpYWxvZyhjb2x1bW4sIHJvdywgJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCIoY29sdW1uLmljb24gfHwgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5pY29uKSAmJiAhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZSA7IGVsc2Ugbm9JY29uXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA6IGNvbHVtbi5pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImNvbHVtbi5oZWFkZXJcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vSWNvbj57eyAoIWNvbHVtbi5kaXNwbGF5VGV4dCAmJiByb3cuaXNOZXcgKSB8fFxuICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlID8gJycgOiBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgIH19PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gJ2NhbGVuZGFyJyAmJiBjb2x1bW4uZWRpdGFibGUgPT09IHRydWVcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdpbnB1dCdcIj5cbiAgICAgICAgICAgICAgICA8cC1kYXRlcGlja2VyXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgIFtpZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2hpZGUtYm9yZGVyJyA6ICcnXCIgKG9uQ2xvc2UpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICBbbWluRGF0ZV09XCJjb2x1bW4ubWluRGF0ZVwiIFttYXhEYXRlXT1cImNvbHVtbi5tYXhEYXRlXCIgW2FwcGVuZFRvXT1cIidib2R5J1wiIGhvdXJGb3JtYXQ9XCIxMlwiXG4gICAgICAgICAgICAgICAgICBbc2hvd1RpbWVdPVwiY29sdW1uLnNob3dUaW1lXCIgKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdylcIiBbdGltZU9ubHldPVwiY29sdW1uLnRpbWVPbmx5XCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkID8gcm93W3Jvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldIDogcm93W2NvbHVtbi5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZCA/XG4gICAgICAgICAgICAgICAgICByb3dbcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGRdID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCI+PC9wLWRhdGVwaWNrZXI+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gJ2NhbGVuZGFyJyAmJiAhY29sdW1uLmVkaXRhYmxlXCIgY2xhc3M9XCJjdXN0b20tbGlua1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvdy5kaXNhYmxlZCAgIHx8IGFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5HcmlkRGlhbG9nKGNvbHVtbiwgcm93LCAkZXZlbnQpXCI+e3sgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZSA/ICcnIDpcbiAgICAgICAgICAgICAgICBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWxpbmtcIiBbc3R5bGVdPVwiY29sdW1uLnN0eWxlXCIgcFJlb3JkZXJhYmxlUm93SGFuZGxlXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvdy5kaXNhYmxlZCAgIHx8IGFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5HcmlkRGlhbG9nKGNvbHVtbiwgcm93LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnc2VsZidcIj5cbiAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIihjb2x1bW4uaWNvbiB8fCByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24pICYmICFyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlIDsgZWxzZSBub0ljb25cIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImNvbHVtbi5ob3ZlckRhdGEgPyAnJyA6IGNvbHVtbi5oZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA6IGNvbHVtbi5pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JY29uPnt7IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWUgPyAnJyA6IHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3csXG4gICAgICAgICAgICAgICAgICBjb2x1bW4pIH19PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8IS0tIHt7IHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3csIGNvbHVtbikgfX1cbiAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFyb3dbY29sdW1uLmZpZWxkICsgJ19zZWNvbmRUeXBlJ10gJiYgIXJvdy5oaWRlZ3JpZGJ0blwiIC0tPlxuXG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8IS0tIHRlc3QgLS0+XG4gICAgICAgIDwhLS0gbG9va3VwIElucHV0IGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2xvb2t1cF9pbnB1dCdcIj5cbiAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbG9zZS1pY29uLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnXCJcbiAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhaXNMb29rdXBJbnB1dEVkaXRhYmxlKGNvbHVtbiwgcm93KVwiIHR5cGU9XCJ0ZXh0XCIgW25nTW9kZWxdPVwibG9va3VwSW5wdXROZ01vZGVsKHJvdywgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VMb29rdXBJbnB1dE5nTW9kZWwocm93LCBjb2x1bW4sICRldmVudClcIiBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaXNMb29rdXBJbnB1dEVkaXRhYmxlKGNvbHVtbiwgcm93KSA/IG9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdykgOiBzZWxlY3RMb29rdXBGaWVsZChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KVwiIChrZXlkb3duLmVudGVyKT1cIm9uTG9va3VwSW5wdXRFbnRlcigkZXZlbnQsIGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAocGFzdGUpPVwib25Mb29rdXBJbnB1dFBhc3RlKCRldmVudCwgY29sdW1uLCByb3cpXCIgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAncHJpbWUtaW5wdXQnXCJcbiAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIiBbYXR0ci5hdXRvY29tcGxldGVdPVwiKGNvbHVtbi5hdXRvQ29tcGxldGUgPT09IGZhbHNlIHx8IGF1dG9Db21wbGV0ZSA9PT0gZmFsc2UpID8gJ29mZicgOiAnb24nXCIgLz5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc0xvb2t1cElucHV0RWRpdGFibGUoY29sdW1uLCByb3cpICYmIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uY29tcG9uZW50IHx8IGNvbHVtbi5sb29rdXBDb250cm9sPy5jb21wb25lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXNlYXJjaFwiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzZWxlY3RMb29rdXBGaWVsZChjb2x1bW4sIHJvdylcIj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJyb3dbY29sdW1uLmZpZWxkXSAmJiB0eXBlT2Yocm93W2NvbHVtbi5maWVsZF0pID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGRdLnRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiByb3dbY29sdW1uLmZpZWxkXSAmJiAhY29sdW1uLmRpc2FibGVkXCIgaWNvbj1cInBpIHBpLXRpbWVzXCIgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImxvb2t1cENsZWFyVmFsdWUoY29sdW1uLHJvdylcIj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbi5saW5rSWRcIj5cbiAgICAgICAgICAgICAgICA8YSBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnc2VsZidcIiBbaHJlZl09XCJyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uaHlwZXJsaW5rXCJcbiAgICAgICAgICAgICAgICAgIFt0YXJnZXRdPVwiY29sdW1uLnRhcmdldCA9PT0gJ19zZWxmJyA/ICcnIDogICdfYmxhbmsnXCI+XG4gICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgc2V0TG9va3VwUmVhZE9ubHlWYWx1ZShyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdzZWxmJ1wiICpuZ0lmPVwiIWNvbHVtbi5saW5rSWRcIiBbc3R5bGVdPVwiY29sdW1uLnN0eWxlXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY29sdW1uLmxvb2t1cENvbnRyb2w/LmNvbXBvbmVudCAmJiBjb2x1bW4uZWRpdExpbmsgPT09IHRydWUgPyAnY3VzdG9tLWxpbmsnIDogJydcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuTG9va3VwSHlwZXJsaW5rKGNvbHVtbiwgcm93KVwiPlxuICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgc2V0TG9va3VwUmVhZE9ubHlWYWx1ZShyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBOdW1lcmljIElucHV0IGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ251bWVyaWMnXCI+XG4gICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICA8IS0tIGZvciBDdXJyZW5jeSAmJiBEZWNpbWFsICYmIFBlcmNlbnQgLS0+XG4gICAgICAgICAgICAgIDxzcGFuIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdpbnB1dCdcIiBjbGFzcz1cImlucHV0LW51bWJlclwiXG4gICAgICAgICAgICAgICAgcFJlb3JkZXJhYmxlUm93SGFuZGxlPlxuICAgICAgICAgICAgICAgIDxwLWlucHV0TnVtYmVyIFtpZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2hpZGUtYm9yZGVyJyA6ICcnXCIgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ25nLWludmFsaWQgbmctZGlydHknXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICdmb3JtLWNvbnRyb2wnXG4gICAgICAgICAgICAgICAgICAgIFwiIFtzaG93QnV0dG9uc109XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZCA/IHJvd1tyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0gOiByb3dbY29sdW1uLmZpZWxkXVwiXG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkID8gcm93W3Jvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldIDogcm93W2NvbHVtbi5maWVsZF0gPSAkZXZlbnRcIlxuICAgICAgICAgICAgICAgICAgW25hbWVdPVwiY29sdW1uLmZpZWxkXCIgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIiAob25Gb2N1cyk9XCJvbkZvY3VzRXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgIChvbkJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChrZXlkb3duKT1cImFsbG93TGVhZGluZ0RvdCgkZXZlbnQpXCIgW21vZGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQudHlwZSA9PT0gJ2N1cnJlbmN5J1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAnY3VycmVuY3knXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICdkZWNpbWFsJ1xuICAgICAgICAgICAgICAgICAgICBcIiBbY3VycmVuY3ldPVwiXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQudHlwZSA9PT0gJ2N1cnJlbmN5JyAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMuY3VycmVuY3lcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMuY3VycmVuY3lcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ1VTRCdcbiAgICAgICAgICAgICAgICAgICAgXCIgW2xvY2FsZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdC50eXBlID09PSAnY3VycmVuY3knICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0LmZvcm1hdFBhcmFtcy5sb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMubG9jYWxlXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICdlbi1VUydcbiAgICAgICAgICAgICAgICAgICAgXCIgW21pbkZyYWN0aW9uRGlnaXRzXT1cImNvbHVtbi5mb3JtYXQgPyBzZXROdW1lcmljTWluRnJhY3Rpb24oY29sdW1uKSA6ICcwJ1wiXG4gICAgICAgICAgICAgICAgICBbbWF4RnJhY3Rpb25EaWdpdHNdPVwiY29sdW1uLmZvcm1hdCA/IHNldE51bWVyaWNNYXhGcmFjdGlvbihjb2x1bW4pIDogJzAnXCIgW3N1ZmZpeF09XCJcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdC50eXBlID09PSAncGVyY2VudCcgJiYgXG4gICAgICAgICAgICAgICAgICAgICAgICAnJSdcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8L3AtaW5wdXROdW1iZXI+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsb2NrZWRfZmllbGQ+PHNwYW4gKm5nSWY9XCIhcm93LmlzTmV3XCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdzZWxmJ1wiPlxuICAgICAgICAgICAgICAgICAge3sgcm93W2NvbHVtbi5maWVsZF0gfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sYXlvdXQtZml4ZWRcIiBwUmVvcmRlcmFibGVSb3dIYW5kbGU+XG4gICAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnXCI+XG4gICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgc2V0TnVtZXJpY0Zvcm1hdChjb2x1bW4sIHJvdylcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBCdXR0b24gY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInYWRkX2J1dHRvbidcIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFyb3cuaGlkZWdyaWRidG5cIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBbaWNvbl09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gOiBjb2x1bW4uaWNvblwiXG4gICAgICAgICAgICAgIFtuYW1lXT1cImNvbHVtbi5oZWFkZXJcIiBjbGFzcz1cIm1lcmdlLWJ0blwiIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheVRleHQgPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlUZXh0IDogY29sdW1uLnZhbHVlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJncmlkLWNvbXBvbmVudC1ncmlkLWFkZC1idG5cIiAoY2xpY2spPVwib25DbGlja0J1dHRvbihjb2x1bW4sIHJvdylcIj48L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gR2VuZXJhdGUgRmlsZSBCdXR0b24gY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInZ2VuZXJhdGVfZmlsZV9idXR0b24nXCI+XG4gICAgICAgICAgPHNlLWdlbmVyYXRlLWltcG9ydC1maWxlXG4gICAgICAgICAgICBbbGFiZWxdPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5VGV4dCA/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheVRleHQgOiBjb2x1bW4udmFsdWVcIlxuICAgICAgICAgICAgW2ljb25dPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5pY29uID8gcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5pY29uIDogY29sdW1uLmljb25cIlxuICAgICAgICAgICAgW2RpYWxvZ0RhdGFdPVwiY29sdW1uLmRhdGFcIiBbc2VsZWN0ZWRSb3ddPVwicm93XCI+PC9zZS1nZW5lcmF0ZS1pbXBvcnQtZmlsZT5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gU2VuZCBlbWFpbCBCdXR0b24gY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInc2VuZF9lbWFpbF9idXR0b24nXCI+XG4gICAgICAgICAgPHNlLWVtYWlsLWdlbmVyYXRlLWJ0blxuICAgICAgICAgICAgW2xhYmVsXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheVRleHQgPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlUZXh0IDogY29sdW1uLnZhbHVlXCJcbiAgICAgICAgICAgIFtpY29uXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA6IGNvbHVtbi5pY29uXCIgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgW3NlbGVjdGVkUm93XT1cInJvd1wiPjwvc2UtZW1haWwtZ2VuZXJhdGUtYnRuPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBEYXRlIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8IS0tIGNhbGVuZGFyIHNlbGVjdG9yIC0tPlxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCJcbiAgICAgICAgICBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YT8gbnVsbDogZWRpdEFsbFJvd3MgPyAnaW5wdXQnIDogJ3NlbGYnIFwiPlxuICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIiBwUmVvcmRlcmFibGVSb3dIYW5kbGU+XG4gICAgICAgICAgICAgIDxwLWRhdGVwaWNrZXIgW21pbkRhdGVdPVwiY29sdW1uLm1pbkRhdGVcIiBbbWF4RGF0ZV09XCJjb2x1bW4ubWF4RGF0ZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eSAnICsgY29sdW1uLmZpZWxkICsgcm93W2RhdGFLZXldIDogY29sdW1uLmZpZWxkICsgcm93W2RhdGFLZXldXCJcbiAgICAgICAgICAgICAgICBbaWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdoaWRlLWJvcmRlcicgOiAnJ1wiIChvbkNsb3NlKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgIFthcHBlbmRUb109XCInYm9keSdcIiBob3VyRm9ybWF0PVwiMTJcIiBbZGVmYXVsdERhdGVdPVwiZGVmYXVsdERhdGVcIlxuICAgICAgICAgICAgICAgIFtzdGVwTWludXRlXT1cImNvbHVtbi5taW51dGVzSW50ZXJ2YWwgPyBjb2x1bW4ubWludXRlc0ludGVydmFsIDogMVwiIFtzaG93VGltZV09XCJjb2x1bW4uc2hvd1RpbWVcIlxuICAgICAgICAgICAgICAgIFt0aW1lT25seV09XCJjb2x1bW4udGltZU9ubHlcIiBbZGF0ZUZvcm1hdF09XCJjb2x1bW4uZm9ybWF0ID8gY29sdW1uLmZvcm1hdC50eXBlIDogY2FsZW5kYXJGb3JtYXRcIlxuICAgICAgICAgICAgICAgIChrZXl1cCk9XCJjYWxlbmRhcklucHV0VmFsdWUoY29sdW1uLCByb3cpXCIgKG9uU2hvdyk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZCA/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkIDogcm93W2NvbHVtbi5maWVsZF1cIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2FsZW5kYXJNb2RlbENoYW5nZSgkZXZlbnQsIHJvdywgY29sdW1uKVwiIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCJcbiAgICAgICAgICAgICAgICBbc2hvd0J1dHRvbkJhcl09XCIhY29sdW1uLnRpbWVPbmx5XCI+PC9wLWRhdGVwaWNrZXI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGF5b3V0LWZpeGVkIHdoaXRlLXNwYWNlLW5vd3JhcCB0ZXh0LWNlbnRlciBib3JkZXItcmVhZG9ubHlcIj5cbiAgICAgICAgICAgICAgICB7eyBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LGNvbHVtbikgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgPC9zcGFuPlxuXG5cbiAgICAgICAgPHNwYW4gKm5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgICA8c3BhbiBbbmdTd2l0Y2hdPVwiY29sdW1uLnR5cGVcIj5cbiAgICAgICAgICAgIDwhLS0gRHJvcGRvd24gY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2Ryb3Bkb3duJ1wiIFtjbGFzc109XCJkcm9wZG93bklucHV0ID8gJycgOiAnb3V0cHV0LWRyb3Bkb3duJ1wiXG4gICAgICAgICAgICAgIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCIgY29sdW1uLmhvdmVyRGF0YT8gbnVsbDogZWRpdEFsbFJvd3MgPyAnLnAtZHJvcGRvd24tbGFiZWwnIDogJ3NlbGYnXCI+XG4gICAgICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgICAgICA8cC1kcm9wZG93biAqbmdJZj1cIiFyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGRlblwiIFtvcHRpb25zXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSsnX2RhdGEnXVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkrJ19kYXRhJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjb2x1bW4uZGF0YVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpID8gcm93W3Jvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldIDogcm93W2NvbHVtbi5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpID8gcm93W3Jvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV0gOiByb3dbY29sdW1uLmZpZWxkXSA9ICRldmVudFwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCIgW3BsYWNlaG9sZGVyXT1cInJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXVxuICAgICAgICAgICAgICAgICAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdXG4gICAgICAgICAgICAgICAgICAgICAgOiByb3dbY29sdW1uLmZpZWxkXSA/IHJvd1tjb2x1bW4uZmllbGRdIDogJ1NlbGVjdCdcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd0NsZWFyXT1cInJvd1tjb2x1bW4uZmllbGRdID8gdHJ1ZSA6IGZhbHNlXCIgW29wdGlvbkxhYmVsXT1cImNvbHVtbi5vcHRpb25MYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCIgW29wdGlvblZhbHVlXT1cImNvbHVtbi5vcHRpb25WYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJydcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdoaWRlLWJvcmRlcicgOiAnJ1wiIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25DaGFuZ2VFdmVudChjb2x1bW4sIHJvdylcIiBbYXBwZW5kVG9dPVwiJ2JvZHknXCIgW2ZpbHRlcl09XCJjb2x1bW4uYWxsb3dTZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJNYXRjaE1vZGU9XCJzdGFydHNXaXRoXCI+PC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxheW91dC1maXhlZCBib3JkZXItcmVhZG9ubHlcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxhICpuZ0lmPVwiY29sdW1uLmRpc3BsYXlBc0xpbmtcIiBjbGFzcz1cImN1c3RvbS1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cImNvbHVtbi5kaXNhYmxlZD8nJzpyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uaHlwZXJsaW5rXCIgW3RhcmdldF09J2NvbHVtbi50YXJnZXQnPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgc2V0RHJvcGR3b25SZWFkT25seVZhbHVlKHJvdywgY29sdW1uKSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFjb2x1bW4uZGlzcGxheUFzTGlua1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgc2V0RHJvcGR3b25SZWFkT25seVZhbHVlKHJvdywgY29sdW1uKSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDwhLS0gTXVsdGlTZWxlY3QgY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgICAgICA8IS0tIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCkgPyByb3dbcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV0gOlxuICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF1cIiAtLT5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInbXVsdGktc2VsZWN0J1wiXG4gICAgICAgICAgICAgIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICcucC1tdWx0aXNlbGVjdC1sYWJlbCdcIj5cbiAgICAgICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJydcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdoaWRlLWJvcmRlcicgOiAnJ1wiIHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmZpZWxkXVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpICsgJ19kYXRhJ10gPyByb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkgKyAnX2RhdGEnXSA6IGNvbHVtbi5kYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgW29wdGlvbkxhYmVsXT1cImNvbHVtbi5vcHRpb25MYWJlbFwiIFtvcHRpb25WYWx1ZV09XCJjb2x1bW4ub3B0aW9uVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25DaGFuZ2VFdmVudChjb2x1bW4sIHJvdylcIiAob25QYW5lbFNob3cpPVwic2hvd09wdGlvbihjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0V2ZW50KGNvbHVtbiwgcm93KVwiIFthcHBlbmRUb109XCInYm9keSdcIiAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCI+XG4gICAgICAgICAgICAgICAgICA8L3AtbXVsdGlTZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnc2VsZidcIj5cbiAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdXG4gICAgICAgICAgICAgICAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdIDpcbiAgICAgICAgICAgICAgICAgICAgc2V0TXVsdGlTZWxlY3REYXRhKGNvbHVtbiwgcm93W2NvbHVtbi5maWVsZF0pXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDwhLS0gQXV0b0NvbXBsZXRlIFNlYXJjaCAtLT5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInQXV0b0NvbXBsZXRlJ1wiPlxuICAgICAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgPHAtYXV0b0NvbXBsZXRlXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJydcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdoaWRlLWJvcmRlcicgOiAnJ1wiIFtuYW1lXT1cImNvbHVtbi5oZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgICBbc3VnZ2VzdGlvbnNdPVwiY29sdW1uLmRhdGFcIiAob25TZWxlY3QpPVwiYXV0b0NvbXBsZXRlU2VsZWN0ZWRWYWx1ZShyb3csIGNvbHVtbiwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtmaWVsZF09XCJjb2x1bW4ub3B0aW9uTGFiZWwgPyBjb2x1bW4ub3B0aW9uTGFiZWw/LnRvTG93ZXJDYXNlKCkgOiBjb2x1bW4uZGlzcGxheUZpZWxkID8gY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKSA6IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImdldEF1dG9Db21wbGV0ZU5nTW9kZWwocm93LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQXV0b0NvbXBsZXRlTmdNb2RlbChyb3csIGNvbHVtbiwgJGV2ZW50KVwiIFtkcm9wZG93bl09XCJjb2x1bW4uc2hvd09wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpXCIgKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAoY29tcGxldGVNZXRob2QpPVwiYXV0b1NlYXJjaCgkZXZlbnQsIGNvbHVtbiwgcm93KVwiIChvbkJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIiBbYXBwZW5kVG9dPVwiJ2JvZHknXCIgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJvbkF1dG9Db21wbGV0ZUtleUVudGVyRXZlbnQoJGV2ZW50LCBjb2x1bW4sIHJvdylcIj5cbiAgICAgICAgICAgICAgICAgIDwvcC1hdXRvQ29tcGxldGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInJvd1tjb2x1bW4uZmllbGRdICYmIHJvd1tjb2x1bW4uZmllbGRdWzBdICYmICByb3dbY29sdW1uLmZpZWxkXVswXVtjb2x1bW4uZGlzcGxheUZpZWxkXVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgdmFsdWUgb2Ygcm93W2NvbHVtbi5maWVsZF07IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyByb3dbY29sdW1uLmZpZWxkXSAmJiByb3dbY29sdW1uLmZpZWxkXS5sZW5ndGggPiAxID8gcm93W2NvbHVtbi5maWVsZF0ubGVuZ3RoIC0xID09PSBpID9cbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVtjb2x1bW4uZGlzcGxheUZpZWxkXSA6IHZhbHVlW2NvbHVtbi5kaXNwbGF5RmllbGRdICsgJzsnIDogdmFsdWVbY29sdW1uLmRpc3BsYXlGaWVsZF0gfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJyb3dbY29sdW1uLmZpZWxkXSAmJiByb3dbY29sdW1uLmZpZWxkXVswXSAmJiAgcm93W2NvbHVtbi5maWVsZF1bMF1bY29sdW1uLmZpZWxkXSAmJiAhY29sdW1uLmRpc3BsYXlGaWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgdmFsdWUgb2Ygcm93W2NvbHVtbi5maWVsZF07IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyByb3dbY29sdW1uLmZpZWxkXSAmJiByb3dbY29sdW1uLmZpZWxkXS5sZW5ndGggPiAxID8gcm93W2NvbHVtbi5maWVsZF0ubGVuZ3RoIC0xID09PSBpID9cbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVtjb2x1bW4uZmllbGRdIDogdmFsdWVbY29sdW1uLmZpZWxkXSArICc7JyA6IHZhbHVlW2NvbHVtbi5maWVsZF0gfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPCEtLSBBZGQgR2VuZXJhdGUgUmVwb3J0IEJ1dHRvbiAtLT5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCIncmVwb3J0J1wiPlxuICAgICAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxzZS1nZW5lcmF0ZS1yZXBvcnQtYnRuIFtyZXBJbmZvXT1cInNldFJlcG9ydE5hbWUoY29sdW1uLCByb3cpXCIgW2xhYmVsXT1cImNvbHVtbi5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIFtwYXJhbXNdPVwic2V0UmVwb3J0UGFyYW1zKGNvbHVtbiwgcm93KVwiIFtjbGFzc109XCJjb2x1bW4uY2xhc3NcIiBbc2hvd0RpYWxvZ109XCJjb2x1bW4uc2hvd0RpYWxvZ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpY29uXT1cImNvbHVtbi5pY29uXCIgW3JlcG9ydFR5cGVdPVwiY29sdW1uLnJlcG9ydFR5cGVcIj48L3NlLWdlbmVyYXRlLXJlcG9ydC1idG4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxzZS1nZW5lcmF0ZS1yZXBvcnQtYnRuIFtyZXBJbmZvXT1cInNldFJlcG9ydE5hbWUoY29sdW1uLCByb3cpXCIgW2xhYmVsXT1cImNvbHVtbi5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIFtwYXJhbXNdPVwic2V0UmVwb3J0UGFyYW1zKGNvbHVtbiwgcm93KVwiIFtpY29uXT1cImNvbHVtbi5pY29uXCIgW2NsYXNzXT1cImNvbHVtbi5jbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93RGlhbG9nXT1cImNvbHVtbi5zaG93RGlhbG9nXCIgW3JlcG9ydFR5cGVdPVwiY29sdW1uLnJlcG9ydFR5cGVcIj48L3NlLWdlbmVyYXRlLXJlcG9ydC1idG4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ2lucHV0J1wiPlxuICAgICAgICAgICAgICA8IS0tIElucHV0IGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gW3N0eWxlXT1cImNvbHVtbi5zdHlsZSA/IGNvbHVtbi5zdHlsZSA6ICdkaXNwbGF5OmZsZXgnXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhICpuZ0lmPVwiY29sdW1uLmlzVGV4dGFyZWEgJiYgKGVkaXRBbGxSb3dzIHx8IGVkaXRpbmdSb3dLZXlzW3Jvd1tkYXRhS2V5XV0pXCJcbiAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uZmllbGRdXCIgW2F0dHIuZGF0YS1jZWxsXT1cImNvbHVtbi5maWVsZCArICctJyArIHJvd1tkYXRhS2V5XVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwcmltZS10ZXh0YXJlYVwiXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJyZXNpemU6IG5vbmU7IG1pbi13aWR0aDogMjAwcHg7IG1pbi1oZWlnaHQ6IDQwcHg7IHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7IHRleHQtYWxpZ246IGp1c3RpZnk7IG92ZXJmbG93OiBoaWRkZW47XCJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiIChibHVyKT1cIm9uVGV4dGFyZWFCbHVyKGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25UZXh0YXJlYUVudGVyKCRldmVudCwgY29sdW1uLCByb3cpXCIgYXV0b2ZvY3VzPjwvdGV4dGFyZWE+XG5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhY29sdW1uLmlzVGV4dGFyZWEgJiYgKGVkaXRBbGxSb3dzIHx8IGVkaXRpbmdSb3dLZXlzW3Jvd1tkYXRhS2V5XV0pICYmICBjb2x1bW4uZmllbGQgIT09IGRhdGFLZXlcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8udGV4dFR5cGU/cm93W2NvbHVtbi5maWVsZCsnX29iaiddPy50ZXh0VHlwZTpjb2x1bW4udGV4dFR5cGU/Y29sdW1uLnRleHRUeXBlOid0ZXh0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAncHJpbWUtaW5wdXQnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdoaWRlLWJvcmRlcicgOiAnJ1wiIFtuZ01vZGVsXT1cInNldElucHV0TmdNb2RlbChyb3csIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uSW5wdXRDaGFuZ2UoJGV2ZW50LCByb3csIGNvbHVtbilcIiBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiIChjaGFuZ2UpPVwib25DaGFuZ2VFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrQnV0dG9uKGNvbHVtbiwgcm93KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIShlZGl0QWxsUm93cyB8fCBlZGl0aW5nUm93S2V5c1tyb3dbZGF0YUtleV1dKVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IHJvd1tjb2x1bW4uZmllbGRdIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImZsb2F0OnJpZ2h0XCIgKm5nSWY9XCJjb2x1bW4uZm9ybWF0PT0ncGFzc3dvcmQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8ocm93W2NvbHVtbi5maWVsZCsnX29iaiddLnRleHRUeXBlPT0ncGFzc3dvcmQnPydwaSBwaS1leWUnOidwaSBwaS1leWUtc2xhc2gnKTpjb2x1bW4udGV4dFR5cGU9PSdwYXNzd29yZCc/J3BpIHBpLWV5ZSc6J3BpIHBpLWV5ZS1zbGFzaCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZVBhc3N3b3JkVHlwZShjb2x1bW4sIHJvdylcIiBbdGl0bGVdPVwiY29sdW1uLmhlYWRlclwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsb2NrZWRfZmllbGQ+PHNwYW4gKm5nSWY9XCIhcm93LmlzTmV3XCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnc2VsZidcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyByb3dbY29sdW1uLmZpZWxkXSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sYXlvdXQtZml4ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW3N0eWxlXT1cImNvbHVtbi5zdHlsZSA/IGNvbHVtbi5zdHlsZSA6ICdkaXNwbGF5OmZsZXgnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy50ZXh0VHlwZSA/KHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8udGV4dFR5cGU9PSdwYXNzd29yZCcgID8ncGFzc3dvcmQnOicnKSA6Y29sdW1uLnRleHRUeXBlPT0ncGFzc3dvcmQnPydwYXNzd29yZCc6JydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHNldFRleHRCb3hSZWFkT25seVZhbHVlKHJvdywgY29sdW1uKSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImZsb2F0OnJpZ2h0XCIgKm5nSWY9XCJjb2x1bW4uZm9ybWF0PT0ncGFzc3dvcmQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPyhyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10udGV4dFR5cGU9PSdwYXNzd29yZCc/J3BpIHBpLWV5ZSc6J3BpIHBpLWV5ZS1zbGFzaCcpOmNvbHVtbi50ZXh0VHlwZT09J3Bhc3N3b3JkJz8ncGkgcGktZXllJzoncGkgcGktZXllLXNsYXNoJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2x1bW4uaGVhZGVyXCIgKGNsaWNrKT1cImNoYW5nZVBhc3N3b3JkVHlwZShjb2x1bW4sIHJvdylcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPCEtLSBHcmlkIFJvd3MgRGF0YSBCaW5kaW5ncyBFbmQgLS0+XG5cbiAgICAgICAgPCEtLSBNb3JlIGFjdGlvbnMgY29sdW1uIChlbGxpcHNpcykgLS0+XG4gICAgICAgIDx0ZCAqbmdJZj1cImhhc01vcmVJdGVtcyhyb3cpXCIgY2xhc3M9XCJmb3ItbW9yZS1hY3Rpb25zXCI+XG4gICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktZWxsaXBzaXMtdlwiIGNsYXNzPVwicC1idXR0b24tdGV4dFwiIChjbGljayk9XCJzaG93TW9yZSgkZXZlbnQsIHJvdylcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIk1vcmUgYWN0aW9uc1wiPjwvYnV0dG9uPlxuICAgICAgICA8L3RkPlxuXG4gICAgICAgIDwhLS0gQWN0aW9uIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8IS0tIDx0ZCAqbmdJZj1cIiFzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmIGNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgY29sdW1uQWN0aW9ucy5sZW5ndGggPiAwXCJcbiAgICAgICAgICBjbGFzcz1cImZvci1idXR0b25zXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bidcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImFjdGlvbi1idG5cIiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGNvbHVtbkFjdGlvbnNcIj5cbiAgICAgICAgICAgIDxpIFt0aXRsZV09XCJhY3Rpb24udG9vbHRpcFwiIFtjbGFzc109XCJhY3Rpb24uaWNvblwiIChjbGljayk9XCJoYW5kbGVBY3Rpb25DbGljaygkZXZlbnQsIGFjdGlvbiwgcm93KVwiPjwvaT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGQ+IC0tPlxuICAgICAgICA8dGQgKm5nSWY9XCIhc2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiBjb2x1bW5zPy5sZW5ndGggPiAwICYmIGNvbHVtbkFjdGlvbnMubGVuZ3RoID4gMFwiIGNsYXNzPVwiZm9yLWJ1dHRvbnNcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb2x1bW5BY3Rpb25zXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFjdGlvbi1idG5cIiAqbmdJZj1cImFjdGlvbi52aXNpYmxlID8gYWN0aW9uLnZpc2libGUocm93KSA6IHRydWVcIj5cbiAgICAgICAgICAgICAgPGkgW3RpdGxlXT1cImFjdGlvbi50b29sdGlwXCIgW2NsYXNzXT1cImFjdGlvbi5pY29uXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aW9uLWJ0bi1kaXNhYmxlZF09XCJhY3Rpb24uZGlzYWJsZWQgPyBhY3Rpb24uZGlzYWJsZWQocm93KSA6IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiKGFjdGlvbi5kaXNhYmxlZCAmJiBhY3Rpb24uZGlzYWJsZWQocm93KSkgPyBudWxsIDogaGFuZGxlQWN0aW9uQ2xpY2soJGV2ZW50LCBhY3Rpb24sIHJvdylcIj48L2k+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZFxuICAgICAgICAgICpuZ0lmPVwiIXNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgY29sdW1ucz8ubGVuZ3RoID4gMCAmJiB1c2VJbmxpbmVDUlVEICYmIChkZWxldGVSb3dQZXJtaXNzaW9uIHx8IGVkaXRSb3dQZXJtaXNzaW9uKVwiXG4gICAgICAgICAgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCIgY2xhc3M9XCJmb3ItYnV0dG9uc1wiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZGlzYWJsZWRTYXZlQnRuID8gJ2hpZGUtY2xlYXItZmlsdGVyLWJ1dHRvbicgOiAnJ1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSdzZXRBY3Rpb25Db2x1bW5XaWR0aCc+XG4gICAgICAgICAgICA8c2UtZ3JpZC1yb3ctYWN0aW9ucyBbZWRpdGluZ109XCJlZGl0aW5nXCIgW2VkaXRSb3dQZXJtaXNzaW9uXT1cImVkaXRSb3dQZXJtaXNzaW9uXCJcbiAgICAgICAgICAgICAgW2RlbGV0ZVJvd1Blcm1pc3Npb25dPVwiZGVsZXRlUm93UGVybWlzc2lvblwiIFtoaWRlRGVsZXRlQnRuXT1cImhpZGVEZWxldGVCdG5cIiBbaGlkZUVkaXRCdG5dPVwiaGlkZUVkaXRCdG5cIlxuICAgICAgICAgICAgICBbcm93XT1cInJvd1wiIChvblJvd0VkaXRJbml0QnRuKT1cIm9uUm93RWRpdEluaXQoJGV2ZW50KVwiIChkZWxldGVSZWNvcmRCdG4pPVwiZGVsZXRlUmVjb3JkKCRldmVudClcIlxuICAgICAgICAgICAgICAob25Sb3dFZGl0U2F2ZUJ0bik9XCJvblJvd0VkaXRTYXZlKCRldmVudClcIiAob25Sb3dFZGl0Q2FuY2VsQnRuKT1cIm9uUm93RWRpdENhbmNlbCgkZXZlbnQsIHJpKVwiXG4gICAgICAgICAgICAgIFtlZGl0QWxsUm93c109XCJlZGl0QWxsUm93c1wiPlxuICAgICAgICAgICAgPC9zZS1ncmlkLXJvdy1hY3Rpb25zPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDwhLS0gRm9vdGVyIGNvbHVtbnMgb24gR3JpZCAtLT5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZm9vdGVyXCI+XG4gICAgICA8dHIgKm5nSWY9XCJhZ2dyZWdhdGVGb290ZXJcIj5cbiAgICAgICAgPHRkXG4gICAgICAgICAgKm5nSWY9XCJzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmIChjb2x1bW5BY3Rpb25zLmxlbmd0aCA+IDAgfHwgKHVzZUlubGluZUNSVUQgJiYgKGRlbGV0ZVJvd1Blcm1pc3Npb24gfHwgZWRpdFJvd1Blcm1pc3Npb24pKSlcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiPjwvdGQ+XG4gICAgICAgIDx0ZCAqbmdJZj1cImFsbG93U2VsZWN0aW9uXCIgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCI+PC90ZD5cbiAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBvdXRlckNvbHVtbiBvZiBzZWxlY3RlZENvbHVtbnNcIiBjbGFzcz1cImdyaWQtY29tcG9uZW50LW91dGVyLWNvbHVtblwiIFtzdHlsZV09XCJvdXRlckNvbHVtbi5zdHlsZVwiPlxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGlubmVyQ29sdW1uIG9mIHNlbGVjdGVkQ29sdW1uc1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYWdnciBvZiBpbm5lckNvbHVtbj8uYWdncmVnYXRlXCI+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhZ2dyLmFnZ3JWYWx1ZT8ubGVuZ3RoICYmICgoIWFnZ3IuZGlzcGxheUZpZWxkICYmIGlubmVyQ29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBvdXRlckNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgICAgICAgICAgICAgIGFnZ3IuZGlzcGxheUZpZWxkICYmIGFnZ3IuZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBvdXRlckNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IFtpbm5lckhUTUxdPVwiYWdnci5hZ2dyVmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkXG4gICAgICAgICAgKm5nSWY9XCIhc2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiBjb2x1bW5zPy5sZW5ndGggPiAwICYmIHVzZUlubGluZUNSVUQgJiYgKGRlbGV0ZVJvd1Blcm1pc3Npb24gfHwgZWRpdFJvd1Blcm1pc3Npb24pXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bidcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImRpc2FibGVkU2F2ZUJ0biA/ICdoaWRlLWNsZWFyLWZpbHRlci1idXR0b24nIDogJydcIj48L3RkPlxuICAgICAgPC90cj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPCEtLSBGb290ZXIgZm9yIEVtcHR5IE1lc3NhZ2UgY29sdW1ucyBvbiBHcmlkIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJlbXB0eW1lc3NhZ2VcIj5cbiAgICAgIDx0ciBjbGFzcz1cImdyaWQtY29tcG9uZW50IG5vLXJlY29yZHMtZm91bmRcIj5cbiAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwic2VsZWN0ZWRDb2x1bW5zPy5sZW5ndGggKyAxXCI+e3t0b3RhbFJlY29yZHM9PTA/ICdObyByZWNvcmRzIGZvdW5kJzonJ319PC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9wLXRhYmxlPlxuICA8cC1vdmVybGF5UGFuZWwgW3N0eWxlXT1cIm92ZXJsYXlQYW5lbFN0eWxlXCIgI292ZXJsYXlQYW5lbD5cbiAgICA8bmctY29udGFpbmVyICN2aWV3Q29udGFpbmVyUmVmPjwvbmctY29udGFpbmVyPlxuICA8L3Atb3ZlcmxheVBhbmVsPlxuICA8cC1tZW51ICNtb3JlTWVudSBbcG9wdXBdPVwidHJ1ZVwiIFttb2RlbF09XCJjdXJyZW50TW9yZU1lbnVcIiBhcHBlbmRUbz1cImJvZHlcIiBzdHlsZUNsYXNzPVwiZ3JpZC1tb3JlLW1lbnVcIj48L3AtbWVudT5cbjwvZGl2PlxuIl19