@churchillliving/se-ui-toolkit 6.54.439 → 6.54.440

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.
@@ -3140,7 +3140,7 @@ export class GridComponent {
3140
3140
  this.scrollPositionY = tableWrapperScrollTop;
3141
3141
  this.scrollPositionX = tableWrapperScrollLeft;
3142
3142
  }
3143
- if (tableWrapperScrollTop === 0) {
3143
+ if (tableWrapperScrollTop == 0) {
3144
3144
  tableWrapper.scrollTo(this.scrollPositionX, 0);
3145
3145
  }
3146
3146
  else {
@@ -3369,4 +3369,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
3369
3369
  type: HostListener,
3370
3370
  args: ['window:beforeunload', ['$event']]
3371
3371
  }] } });
3372
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2dyaWQvZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2dyaWQvZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUdaLFFBQVEsRUFFUixZQUFZLEVBR1osU0FBUyxFQUNULFlBQVksRUFFWixnQkFBZ0IsR0FJakIsTUFBTSxlQUFlLENBQUM7QUFRdkIsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE9BQU8sRUFTTCxrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLGtCQUFrQixFQUVsQixjQUFjLEVBQ2QsZUFBZSxFQUVmLGNBQWMsRUFDZCxxQkFBcUIsRUFFckIsVUFBVSxFQUNWLGdCQUFnQixFQUVoQixTQUFTLEdBQ1YsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFlLE1BQU0saUNBQWlDLENBQUM7QUFHL0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTdELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRWxNLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsT0FBTyxFQUFnQixRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJdkQsT0FBTyxFQUFTLElB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SyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7WUFDdEwsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1lBQ25MLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtZQUN0TCxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7WUFDL0wsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFF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TTtnQkFHRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBSVAsdUJBQXVCO3NCQUR0QixNQUFNO2dCQU1QLFlBQVk7c0JBRFgsTUFBTTtnQkFJRyxXQUFXO3NCQUFwQixNQUFNO2dCQUdHLGVBQWU7c0JBQXhCLE1BQU07Z0JBR0csV0FBVztzQkFBcEIsTUFBTTtnQkFHRyxRQUFRO3NCQUFqQixNQUFNO2dCQUdHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFHRSxZQUFZO3NCQUFwQixLQUFLO2dCQUdHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUksYUFBYTtzQkFBdEIsTUFBTTtnQkFHRyxZQUFZO3NCQUFyQixNQUFNO2dCQUVFLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQThJTixlQUFlO3NCQUZkLFlBQVk7dUJBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDOztzQkFDL0IsWUFBWTt1QkFBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBV1csT0FBTztzQkFBaEQsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxlQUFlLENBQUM7Z0JBUXhDLG1CQUFtQjtzQkFEbEIsWUFBWTt1QkFBQyxxQkFBcUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBPbkNoYW5nZXMsXG4gIE9wdGlvbmFsLFxuICBFbGVtZW50UmVmLFxuICBWaWV3Q2hpbGRyZW4sXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBIb3N0TGlzdGVuZXIsXG4gIE9uRGVzdHJveSxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgTmdab25lLFxuICBBZnRlclZpZXdJbml0LFxuICBSZW5kZXJlcjIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7XG4gIER5bmFtaWNEaWFsb2dSZWYsXG4gIER5bmFtaWNEaWFsb2dDb25maWcsXG4gIERpYWxvZ1NlcnZpY2UsXG4gIER5bmFtaWNEaWFsb2dDb21wb25lbnQsXG59IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XG5pbXBvcnQganNQREYgZnJvbSAnanNwZGYnO1xuaW1wb3J0IHsgR3JpZFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ncmlkLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgSUdyaWRDb2x1bW4sXG4gIElHcmlkU29ydCxcbiAgSUdyaWRTZXJ2ZXJTaWRlRXZlbnQsXG4gIElHcmlkUGFnaW5hdGlvbkV2ZW50LFxuICBJR2xvYmFsRmlsdGVyLFxuICBJR3JpZEZpbHRlcixcbiAgSUdyaWRDb2x1bW5BY3Rpb24sXG4gIElHcmlkUm93QWN0aW9uLFxuICBFR3JpZFNlbGVjdGlvblR5cGUsXG4gIEVHcmlkQ29sdW1uVHlwZSxcbiAgRUdyaWRTb3J0RGlyZWN0aW9uLFxuICBJR3JpZERhdGFFeHBvcnQsXG4gIEVHcmlkQWdncmVnYXRlLFxuICBFR3JpZEZvcm1hdFR5cGUsXG4gIElHcmlkRmlsdGVySW5mbyxcbiAgRUdyaWRWYWxpZGF0b3IsXG4gIEdyaWRGaWx0ZXJDb250cm9sVHlwZSxcbiAgdXNlclNldHRpbmcsXG4gIEVHcmlkRXhjZWwsXG4gIEVHcmlkUm93UHJvcE5hbWUsXG4gIElHcmlkUmVwb3J0QnRuLFxuICBFR3JpZGxpbmssXG59IGZyb20gJy4uLy4uLy4uL21vZGVscy9ncmlkLm1vZGVsJztcbmltcG9ydCB7IEVQZXJtaXNzaW9uVHlwZSwgSVBlcm1pc3Npb24gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdXNlci1pbmZvLm1vZGVsJztcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBJZnJhbWVDb21wb25lbnQgfSBmcm9tICcuLi9pZnJhbWUvaWZyYW1lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlUGlwZSwgRGVjaW1hbFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgYXV0b1NldExvb2t1cERhdGEsIGNoYW5nZUNvbHVtbnNTdGF0ZSwgY3VycmVudFVybCwgZHJhZ2dhYmxlRGlhbG9nLCBvYmpDb252ZXJ0VG9Mb3dlciwgc2V0RGlhbG9nUmVzcG9uc2UsIHNldE1pbnV0ZXNJbnRlcnZhbCwgc2V0VGltZUluRGF0ZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdGllcy5zZXJ2aWNlJztcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5pbXBvcnQgeyBFRm9ybWF0VHlwZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsJztcbmltcG9ydCB7IFBhZ2VMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcGFnZS1sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGludGVydmFsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSHlwZXJsaW5rU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2h5cGVybGluay5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7IGRlbGF5LCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBSZXF1ZXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2xpYi9zZXJ2aWNlcy9yZXF1ZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVxdWVzdER0byB9IGZyb20gJ3Byb2plY3RzL3NlLXVpLXRvb2xraXQvc3JjL2xpYi9tb2RlbHMvcmVxdWVzdC5tb2RlbCc7XG5pbXBvcnQgeyBTeXN0ZW1Db25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc3lzdGVtLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IEVtYWlsRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZW1haWwvZW1haWwtZmlsdGVyL2VtYWlsLWZpbHRlci5jb21wb25lbnQnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2UtZ3JpZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9ncmlkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ3JpZC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBHcmlkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ3ZpZXdDb250YWluZXJSZWYnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICBwdWJsaWMgcGFuZWxPdmVybGF5Vmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZlxuXG4gIEBWaWV3Q2hpbGRyZW4oJ2dyaWRSb3cnKSBncmlkUm93OiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG4gIEBPdXRwdXQoKSBpbmxpbmVSb3dDYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIGdyaWRTZXR0aW5nOiBhbnk7XG4gIHNlYXJjaGJ0bklkID0gJ3NlYXJjaEdsb2JhbEZpbHRlckJ0bic7XG4gIGN1cnJlbnRQYWdlOiBudW1iZXIgPSAwO1xuICBQYWdlQ2hhbmdlOiBib29sZWFuO1xuICB0ZW1wU2F2ZWRSb3c6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIHNldCBhY3RpdmVUZXN0TW9kZSh2YWw6IGFueSkge1xuICAgIGlmICh2YWwgPT09IHRydWUpIHtcbiAgICAgIGRlYnVnZ2VyO1xuICAgIH1cbiAgfVxuICBzZXJ2ZXJGaWx0ZXJzOiBJR3JpZFNlcnZlclNpZGVFdmVudCA9IHt9O1xuICByb3dzRGF0YTogYW55W10gPSBbXTtcbiAgZ3JpZElkOiBzdHJpbmcgPSAnJztcbiAgcm93c0RhdGFDb3B5OiBhbnlbXSA9IFtdO1xuICBudW1lcmljVmFsdWU6IGFueSA9IHt9XG4gIHJvbGVzOiBzdHJpbmdbXSA9IFtdO1xuICBpc0NvbHVtbkhpZGRlbjogYm9vbGVhbiA9IGZhbHNlO1xuICByb3dDbGlja0RhdGE6IElHcmlkQ29sdW1uO1xuICBjb21wb25lbnRUYWJsZVJlZjogYW55O1xuICBsb29rdXBGaWx0ZXJPYmo6IGFueTtcbiAgY2hlY2tsaXN0OiBhbnlbXSA9IFtdXG4gIGxvb2t1cEJsdXI6IGJvb2xlYW4gPSB0cnVlO1xuICBnbG9iYWxGaWx0ZXJzQXJyYXk6IGFueVtdID0gW107XG4gIGNoZWNrQWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIGNhbGVuZGFyUHJldmlvdXNWYWx1ZTogc3RyaW5nID0gJyc7XG4gIGdyaWRGaWx0ZXJPYmo6IElHcmlkRmlsdGVySW5mbztcbiAgZGVmYXVsdERhdGU6IGFueTtcbiAgb3ZlcmxheVBhbmVsU3R5bGU6IHt9O1xuICBncmlkZmlsdGVyOiBhbnk7XG4gIGRyb3BEb3duRmlsdGVyOiBhbnkgPSB7fTtcbiAgZHJvcGRvd25JbnB1dDogYm9vbGVhbiA9IGZhbHNlO1xuICBzYXZlQWxsUmVjb3JkOiBib29sZWFuID0gZmFsc2U7XG4gIGdlbmVyYXRlUm93c0RhdGFDb3B5OiBib29sZWFuID0gdHJ1ZTtcbiAgZWRpdEFsbFJlY29yZDogYm9vbGVhbiA9IGZhbHNlO1xuICBjYW5jZWxBbGxSZWNvcmRzOiBib29sZWFuID0gZmFsc2U7XG4gIGFkZE5ld1Jvd0NoZWNrOiBib29sZWFuID0gZmFsc2U7XG4gIGluRWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2F2ZVJlY29yZEFycmF5OiBhbnlbXSA9IFtdO1xuICBkaXNhYmxlZFNhdmVCdG46IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU2VsZWN0ZWRBbGxSb3dzOiBib29sZWFuID0gZmFsc2U7XG4gIENoZWNrZWQ6IGJvb2xlYW4gPSB0cnVlXG4gIHVuQ2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlXG4gIGVkaXRNb2RlQ2hlY2tlZDogYm9vbGVhbiA9IHRydWU7XG4gIGVkaXRNb2RldW5Da2Vja2VkOiBib29sZWFuID0gZmFsc2U7XG4gIGNhbGVuZGFyRm9ybWF0OiBzdHJpbmcgPSBcIm1tL2RkL3l5XCJcbiAgc2V0RHJvcGRvd25GaWx0ZXI6IGJvb2xlYW4gPSB0cnVlO1xuICByZWxvYWRQYWdlOiBTdWJzY3JpcHRpb247XG4gIHNldERyb3Bkb3duZGF0YVZhbHVlOiBib29sZWFuID0gdHJ1ZTtcbiAgc2hvd0ZpbHRlcmJ0bjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHRvb2dsZVNvcnRPcmRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBkaWFsb2dSZWY6IGFueVxuICB1c2VyU2V0dGluZzogdXNlclNldHRpbmcgPSB7fTtcbiAgcm93VXBkYXRlQ2hhbmdlOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU2VydmVyU2lkZUV2ZW50SW5pdGFsVHJpZ2dlcmVkID0gbmV3IFN1YmplY3QoKVxuXG4gIC8vYXBwbHkgQWRkL0RlbGV0ZS9FZGl0IHByb3AgZm9yIHRoZSBncmlkIHBlcm1pc3Npb25cbiAgYWRkUm93UGVybWlzc2lvbjogYm9vbGVhbiA9IHRydWU7XG4gIGRlbGV0ZVJvd1Blcm1pc3Npb246IGJvb2xlYW4gPSB0cnVlO1xuICBlZGl0Um93UGVybWlzc2lvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLy8gQXBwbHkgcHJvcCBzZXRBZ2dyZWdhdGVGb290ZXIgb24gRm9vdGVyIG9mIHRoZSBUYWJsZSBmb3IgYWdncmVnYXRlLlxuICBzZXRBZ2dyZWdhdGVGb290ZXI6IHN0cmluZyA9ICcnO1xuICBcbiAgcHJpdmF0ZSBjbGlja1RpbWVvdXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IEhpZGUgQWdncmVnYXRlIEZvb3RlciBXaGVuIEFnZ3JlZ2F0ZSBub3QgQXBwbHkgb24gVGFibGUuXG4gIGFnZ3JlZ2F0ZUZvb3RlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIE1haW50YWlucyBwcmV2aW91cyBzdGF0ZSBvZiByb3dzIGJlaW5nIGVkaXRlZFxuICBlZGl0Um93c1JlY29yZHM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgLy8gTWFpbnRhaW5zIHJlY29yZCBvZiByb3dzIGJlaW5nIGVkaXRlZFxuICBlZGl0aW5nUm93S2V5czogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICBjdXJyZW50VXJsOiBzdHJpbmcgPSBjdXJyZW50VXJsKCk7XG4gIG9uQ2xpY2tFdmVudFRyaWdnZXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBcbiAgcmVtYWluaW5nUm93c0RhdGE6YW55W10gPSBbXTtcbiAgXG4gIEBWaWV3Q2hpbGQoJ2R0JykgdGFibGU6IFRhYmxlO1xuXG4gIC8vIFNlbGVjdHMgaXRlbXMgaW4gdGhlIGdyaWQgYmFzZWQgb24gcGFzc2VkIG9uIGRhdGFcbiAgQElucHV0KCkgc2VsZWN0ZWRSb3dzOiBhbnkgPSBbXTtcblxuICBASW5wdXQoKSBzZXRHcmlkUmVmcmVzaFRpbWU6IG51bWJlciA9IDA7XG5cbiAgQElucHV0KCkgYWRkRGF0YUtleVZhbHVlID0gZmFsc2U7XG5cbiAgQElucHV0KCkgc3RvcERpYWxvZ0Nsb3NlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBnbG9iYWxEYXRhOiBJR3JpZEZpbHRlcltdID0gW107XG5cbiAgc29ydERpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZWRpdEFsbHJvd3NBdE9uZVRpbWU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBzaG93UmVmcmVzaEJ0bjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBoaWRlUmVmcmVzaEJ0bjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLy8gU3RvcmVzIHNlbGVjdGVkIGNvbHVtbnNcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRDb2x1bW5zOiBJR3JpZENvbHVtbltdID0gW107XG4gIHNlbGVjdGVkVG9nZ2xlQ29sdW1uczogSUdyaWRDb2x1bW5bXSA9IFtdO1xuICBcbiAgdmlzaWJsZUNvbHVtbnM6IElHcmlkQ29sdW1uW10gPSBbXTtcbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IGhvcml6b250YWwgU2Nyb2xsIG9uIFRhYmxlLlxuICBASW5wdXQoKSBob3Jpem9udGFsU2Nyb2xsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGhpZGUgdGhlIGRlbGV0ZSByb3cgYnV0dG9uLlxuICBASW5wdXQoKSBoaWRlRGVsZXRlQnRuID0gZmFsc2U7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGhpZGUgdGhlIGVkaXQgcm93IGJ1dHRvbi5cbiAgQElucHV0KCkgaGlkZUVkaXRCdG4gPSBmYWxzZTtcblxuICAvLyBCb29sZWFuIHByb3AgdG8gaGlkZSB0aGUgYWRkIHJvdyBidXR0b24uXG4gIEBJbnB1dCgpIGhpZGVBZGRCdG4gPSBmYWxzZTtcblxuICAvLyBQcm9wIHRvIGhhbmRsZSBsb2FkZXIgb2YgZ3JpZFxuICBASW5wdXQoKSBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuXG4gIC8vdGhpcyBwcm9wZXJ0eSBpcyB1c2VkIHRvIGhhbmRsZSBzZXJ2ZXIgc2lkZSBldmVudCBieSBkZWZhdWx0IGl0IGlzIHRydWUgd2hlbiBpdCBmYWxzZSBzZXJ2ZXIgc2lkZSBldmVudCB3aWxsIG5vdCBiZSBjYWxsZWRcbiAgQElucHV0KCkgYXV0b0xvYWREYXRhOiBib29sZWFuID0gdHJ1ZTtcblxuXG4gIC8vdGFibGUgcm93IHN0eWxlc1xuICBASW5wdXQoKSByb3dTdHlsZTogc3RyaW5nO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBjaGVjayB3aGVyZSBzZWxlY3RlZCBpcyBhbGxvd2VkIG9yIG5vdC5cbiAgQElucHV0KCkgYWxsb3dTZWxlY3Rpb24gPSBmYWxzZTtcblxuICAvLyBTZXQgY29sdW1uIHdpZHRoIG9mIHNlbGVjdGVkIHJvdy5cbiAgQElucHV0KCkgc2VsZWN0aW9uQ29sdW1uV2lkdGg6IHN0cmluZyA9ICc4MHB4JztcblxuICAvLyBzZXQgc2VsZWN0aW9uIGNoZWNrQm94IGhlYWRlclxuICBASW5wdXQoKSBhbGxvd1NlbGVjdGlvbkhlYWRlcjogc3RyaW5nID0gJyc7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGhpZGUgdGhlIHNhdmUgYnV0dG9uIG9uIHRvcCBvZiBncmlkLlxuICBASW5wdXQoKSBoaWRlR3JpZFNhdmVCdXR0b24gPSBmYWxzZTtcblxuICAvLyBCb29sZWFuIHByb3AgdG8gaGlkZSB0aGUgc2F2ZSBidXR0b24gb24gdG9wIG9mIGdyaWQuXG4gIEBJbnB1dCgpIGhpZGVHcmlkQ2FuY2VsQnV0dG9uID0gZmFsc2U7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IGV4cG9ydCB0byBwZGYuXG4gIEBJbnB1dCgpIGFsbG93RXhwb3J0VG9QZGYgPSBmYWxzZTtcblxuICAvLyBCb29sZWFuIHByb3AgdG8gYWxsb3cgZXhwb3J0IHRvIGV4Y2VsLlxuICBASW5wdXQoKSBhbGxvd0V4cG9ydFRvRXhjZWwgPSBmYWxzZTtcblxuICAvLyBCb29sZWFuIHByb3AgdG8gc2V0IHRoZSBhY3Rpb24gY29sdW1uIGFzIGZpcnN0IGNvbHVtbi5cbiAgQElucHV0KCkgc2V0QWN0aW9uQ29sdW1uQXNGaXJzdCA9IGZhbHNlO1xuXG4gIC8vIElmIHRydWUsIGVuYWJsZXMgb3B0aW9ucyB0byBwZXJmb3JtIENSVUQgdXNpbmcgaW5saW5lIHJvdyBmdW5jdGlvbmFsaXR5XG4gIEBJbnB1dCgpIHVzZUlubGluZUNSVUQgPSBmYWxzZTtcbiAgLy8gaWYgdHJ1ZSwgaXQgd29udCBhZGQgYSBuZXcgcm93IHdoZW4gY2xpY2sgYWRkXG4gIEBJbnB1dCgpIHByZXZlbnROZXdSb3cgPSBmYWxzZTtcblxuICAvLyBBcnJheSBvZiByb3cgYWN0aW9uc1xuICBASW5wdXQoKSByb3dBY3Rpb25zOiBJR3JpZFJvd0FjdGlvbltdID0gW107XG5cbiAgLy8gU2V0cyBzZWxlY3Rpb24gdHlwZSBpLmU6IHNpbmdsZS9tdWx0aXBsZSBzZWxlY3Rpb25cbiAgQElucHV0KCkgc2VsZWN0aW9uVHlwZTogRUdyaWRTZWxlY3Rpb25UeXBlID0gRUdyaWRTZWxlY3Rpb25UeXBlLlNJTkdMRTtcblxuICAvLyBVbmlxdWUga2V5IHJlcXVpcmVzIGZvciBidWlsdC1pbiByb3cgc2VsZWN0aW9uIG9mIHByaW1lTmcgZ3JpZFxuICBASW5wdXQoKSBkYXRhS2V5OiBzdHJpbmcgPSAndGVtcF9pZCc7XG5cbiAgLy8gRmxhZyBmb3IgY2xlYXIgZmlsdGVyIHZhbHVlcyBidXR0b25cbiAgQElucHV0KCkgY2xlYXJHcmlkRmlsdGVyID0gdHJ1ZTtcblxuICAvLyBGbGFnIGZvciBzZWFyY2ggZmlsdGVyIHZhbHVlcyBidXR0b25cbiAgQElucHV0KCkgc2VhcmNoR3JpZEZpbHRlciA9IHRydWU7XG5cbiAgLy8gRmxhZyBpbiBjYXNlIHRhYmxlIGlzIHNjcm9sbGFibGVcbiAgQElucHV0KCkgc2Nyb2xsYWJsZSA9IHRydWU7XG5cbiAgLy8gU2V0cyBzY3JvbGwgaGVpZ2h0IGZvciB0aGUgdGFibGVcbiAgQElucHV0KCkgc2Nyb2xsSGVpZ2h0ID0gJzgwdmgnO1xuXG4gIC8vIFRhYmxlIHN0eWxlXG4gIEBJbnB1dCgpIHRhYmxlU3R5bGUgPSAnJztcblxuICAvLyBCb29sZWFuIHByb3AgdG8gYWxsb3cgdG8gd3JhcCBvciB1bldyYXAgdGhlIGdyaWQuXG4gIEBJbnB1dCgpIHdvcmRXcmFwOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgbmV3R3JpZFJvdzogYW55ID0ge307XG5cbiAgQElucHV0KCkgZmlsdGVyaW5nID0gdHJ1ZTtcblxuICBASW5wdXQoKSByZXBvcnRCdXR0b25zOiBhbnlbXSA9IFtdO1xuXG4gIEBJbnB1dCgpIHJvd0hvdmVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgaGlkZUZpbHRlck9wdGlvbnM6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIGlzRXJyb3JPY2N1cmVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gU2V0cyBwYWdlbmF0aW9uIGZvciB0aGUgdGFibGUgRGF0YS5cbiAgQElucHV0KCkgc2V0UGFnaW5hdGlvbkxlbmd0aDogYW55W10gPSBbNSwgMTAsIDE1LCB7IHNob3dBbGw6ICdBbGwnIH1dO1xuXG4gIC8vIHNldCB0aGUgY2hhbmdlIGluIHRoZSByb3dEYXRhXG4gIEBPdXRwdXQoKSByb3dzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLyoqXG4gICAqIFN0b3BzIHRoZSBsb2FkZXIgYW5kIHNldHMgdGhlIGRhdGEgdG8gZ3JpZFxuICAgKiBDbGVhcnMgdGhlIGVkaXRpbmcgc3RhY2tcbiAgICogU2Nyb2xscyB0byBzZWxlY3RlZCBlbGVtZW50IGlmIHNlbGVjdGlvbiBmb3VuZFxuICAgKi9cbiAgQElucHV0KCkgc2V0IHJvd3MoZGF0YTogYW55W10pIHtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICBpZiAoIXRoaXMucm93VXBkYXRlQ2hhbmdlKSB7XG4gICAgICBpZiAoIXRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkKSB7XG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlmICghdGhpcy5kYXRhS2V5KSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFLZXkgPSAndGVtcF9pZCc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJvd3NEYXRhID0gdGhpcy5ncmlkU2VydmljZS5zZXREYXRhRmllbGRzKGRhdGEsIHRoaXMuZGF0YUtleSk7XG4gICAgICAgICAgaWYgKGRhdGE/Lmxlbmd0aCA+IDQwICYmICF0aGlzLnBhZ2luYXRpb24gJiYgIXRoaXMuZ3JpZFNlcnZpY2U/LnJvd1VwZGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgaW5pdGlhbGl6ZURhdGEgPSBbLi4ucm93c0RhdGFdO1xuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YSA9IGluaXRpYWxpemVEYXRhLnNwbGljZSgwLCA0MCk7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtYWluaW5nUm93c0RhdGEgPSBpbml0aWFsaXplRGF0YS5zcGxpY2UoNDEsIHJvd3NEYXRhPy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbHVtbnMgJiYgdGhpcy5jb2x1bW5zPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbnM/LmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW1uPy5hZ2dyZWdhdGU/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFnZ3JlZ2F0ZVRleHQoY29sdW1uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJvd3NEYXRhID0gcm93c0RhdGE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZWRpdFJvd3NSZWNvcmRzID0ge307XG5cbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFJvd3MgJiYgdGhpcy5ncmlkUm93Py5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRSZWYgPSB0aGlzLmdyaWRSb3cuZmluZChcbiAgICAgICAgICAgICAgKHgpID0+IHgubmF0aXZlRWxlbWVudC5pZCA9PT0gdGhpcy5zZWxlY3RlZFJvd3NbdGhpcy5kYXRhS2V5XVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudFJlZiAmJlxuICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTFRhYmxlUm93RWxlbWVudFxuICAgICAgICAgICAgICApLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vbWFuaXB1bGF0ZSBjaGVja2JveCBzdHJpbmcgdmFsdWUgdG8gdHJ1ZSBhbmQgZmFsc2UuXG4gICAgICAgICAgdGhpcy5jaGFuZ2VDaGVja2JveFN0cmluZ1ZhbHVlKCk7XG4gICAgICAgICAgdGhpcy5zZXROdW1lcmljVmFsdWVzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yb3dzRGF0YSA9IFtdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gR2xvYmFsIGZpbHRlciBzZXJ2ZXIgcmVxdWVzdFxuICBASW5wdXQoKSBzZXQgZ2xvYmFsRmlsdGVyRGF0YShnbG9iYWxGaWx0ZXJzOiBJR2xvYmFsRmlsdGVyW10pIHtcbiAgICB0aGlzLmdsb2JhbERhdGEgPSB0aGlzLmdyaWRTZXJ2aWNlXG4gICAgICAucHJlcGFyZUdsb2JhbEZpbHRlcnMoZ2xvYmFsRmlsdGVycylcbiAgICAgID8uZmlsdGVyKCh4KSA9PiB4Py52YWx1ZSAhPT0gZmFsc2UpO1xuICAgIGNvbnN0IHNlcnZlckZpbHRlclZhbHVlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zZXJ2ZXJGaWx0ZXJzKSk7XG4gICAgc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMgPSB0aGlzLnNlcnZlckZpbHRlcnMuZmlsdGVyc1xuICAgICAgPyB0aGlzLnNlcnZlckZpbHRlcnMuZmlsdGVycy5jb25jYXQodGhpcy5nbG9iYWxEYXRhKVxuICAgICAgOiB0aGlzLmdsb2JhbERhdGE7XG5cbiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FwcGx5RmlsdGVyJykgPT09ICdmYWxzZScpIHtcbiAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5ID0gdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXk/Lmxlbmd0aCA+IDBcbiAgICAgICAgPyB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5jb25jYXQoWy4uLnNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzXSlcbiAgICAgICAgOiB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheTtcbiAgICB9XG4gICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhcHBseUZpbHRlcicpID09PSAndHJ1ZScpIHtcbiAgICAgIGdsb2JhbEZpbHRlcnMuZm9yRWFjaCgoZ2xvYmFsRmlsdGVyKSA9PiB7XG4gICAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5LmZvckVhY2goKGZpbHRlckFycmF5KSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZmlsdGVyQXJyYXkuZmllbGQgPT09IGdsb2JhbEZpbHRlci5maWVsZCAmJlxuICAgICAgICAgICAgZ2xvYmFsRmlsdGVyLnZhbHVlICYmXG4gICAgICAgICAgICBmaWx0ZXJBcnJheS52YWx1ZSAhPT0gZ2xvYmFsRmlsdGVyLnZhbHVlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmaWx0ZXJBcnJheS52YWx1ZSA9IGdsb2JhbEZpbHRlci52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgZmluZEluZGV4ID0gdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkuZmluZEluZGV4KFxuICAgICAgICAgICAgKGluZGV4KSA9PiBpbmRleC5maWVsZCA9PT0gZ2xvYmFsRmlsdGVyLmZpZWxkICYmICFnbG9iYWxGaWx0ZXIudmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChmaW5kSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5zcGxpY2UoZmluZEluZGV4LCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWUvL3RoaXMuYXV0b0xvYWREYXRhO1xuICAgICAgaWYgKHRoaXMuZ3JpZFNlcnZpY2UuYXBwbHlGaWx0ZXJFdmVudCB8fCB0aGlzLmF1dG9Mb2FkRGF0YSkge1xuICAgICAgICB0aGlzLm9uQXBwbHlGaWx0ZXIuZW1pdCgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5ICYmIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMgPSBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycy5jb25jYXQoXG4gICAgICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzID0gQXJyYXkuZnJvbShcbiAgICAgICAgbmV3IFNldChcbiAgICAgICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVyc1xuICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgICAgLm1hcCgoZmlsdGVyOiBhbnkpID0+IGZpbHRlci5maWVsZClcbiAgICAgICAgKVxuICAgICAgKS5tYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgIHJldHVybiBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycy5maW5kKCh4OiBhbnkpID0+IHguZmllbGQgPT09IGZpZWxkKTtcbiAgICAgIH0pO1xuICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMgPSBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycy5maWx0ZXIoXG4gICAgICAgIChvYmo6IGFueSkgPT5cbiAgICAgICAgICBvYmo/LnZhbHVlICYmIG9iai52YWx1ZT8udG9TdHJpbmcoKT8ubGVuZ3RoID4gMCAmJiBvYmouZmllbGRcbiAgICAgICk7XG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1t0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHRoaXMuY3VycmVudFVybF0gPSBzZXJ2ZXJGaWx0ZXJWYWx1ZXM7XG4gICAgICBpZiAodGhpcy5ncmlkU2VydmljZS5hcHBseUZpbHRlckV2ZW50IHx8IHRoaXMuYXV0b0xvYWREYXRhID09PSB0cnVlKSB7XG4gICAgICAgIC8vIHNldHRpbmcgcGFnaW5hdGlvbiBwYWdlIGFzIGZpcnN0XG4gICAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5wYWdlID0gMTtcbiAgICAgICAgdGhpcy5hdXRvTG9hZERhdGEgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0Um93cyAmJiB0aGlzLnBhZ2luYXRpb24pIHtcbiAgICAgICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMucGFnZVNpemUgPSB0aGlzLmRlZmF1bHRSb3dzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdyaWRTZXJ2aWNlLmFwcGx5RmlsdGVyRXZlbnQpIHtcbiAgICAgICAgICB0aGlzLnNldHVwRW50ZXJMaXN0ZW5lcigpXG4gICAgICAgICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLm9uU2VydmVyU2lkZUV2ZW50Q2hhbmdlLmVtaXQoc2VydmVyRmlsdGVyVmFsdWVzKTtcbiAgICAgICAgICB0aGlzLmVkaXRpbmdSb3dLZXlzID0ge307XG4gICAgICAgIH1cbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2FwcGx5RmlsdGVyJyk7XG4gICAgICAgIC8vIHNldHRpbmcgcGFnaW5hdGlvbiBwYWdlIG51bWJlciBVSVxuICAgICAgICB0aGlzLnRhYmxlLl9maXJzdCA9IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHNldHVwRW50ZXJMaXN0ZW5lcigpIHtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuaGFuZGxlS2V5VXApO1xuICB9XG4gIGhhbmRsZUtleVVwID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgY29uc3QgZm9jdXNlZEVsZW1lbnQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgaWYgKGZvY3VzZWRFbGVtZW50IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJiBmb2N1c2VkRWxlbWVudC50eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZWxlY3RSb290RWxlbWVudChmb2N1c2VkRWxlbWVudCkuYmx1cigpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBJbnB1dCBkZWNvcmF0b3IgdG8gcmVjZWl2ZSBjb2x1bW5zIHRvIGJlIGRpc3BsYXllZCBpbiBoZWFkZXJcbiAgQElucHV0KCkgY29sdW1uczogSUdyaWRDb2x1bW5bXSA9IFtdO1xuXG4gIEBJbnB1dCgpIHBlcm1pc3Npb25zOiBJUGVybWlzc2lvbltdID0gW107XG5cbiAgLy8gT3B0aW9uYWwgcHJvcCB0byBoYW5kbGUgdG9nZ2xpbmcgb2YgY29sdW1uc1xuICBASW5wdXQoKSBhbGxvd0NvbHVtblRvZ2dsZSA9IGZhbHNlO1xuXG4gIC8vIE9wdGlvbmFsIHByb3AgdG8gaGlkZSBmaWx0ZXJpbmcgb2YgY29sdW1uc1xuICBASW5wdXQoKSBoaWRlRmlsdGVyID0gZmFsc2U7XG5cbiAgLy8gT3B0aW9uYWwgcHJvcCB0byBoYW5kbGUgbG9va3VwIGZpbHRlcnNcbiAgQElucHV0KCkgbG9va3VwRmlsdGVycyA9IGZhbHNlO1xuXG4gIC8vIE9wdGlvbmFsIHByb3AgdG8gaGFuZGxlIHBhZ2luYXRpb25cbiAgQElucHV0KCkgcGFnaW5hdGlvbiA9IGZhbHNlO1xuXG4gIC8vIE9wdGlvbmFsIHByb3AgdG8gaGFuZGxlIHNob3cgQ3VycmVudFBhZ2UgUmVwb3J0XG4gIEBJbnB1dCgpIHNob3dDdXJyZW50UGFnZVJlcG9ydCA9IGZhbHNlO1xuXG4gIC8vIERpc3BsYXlzIHRvdGFsIG51bWJlciBvZiByZWNvcmRzXG4gIEBJbnB1dCgpIHRvdGFsUmVjb3JkcyA9IDA7XG5cbiAgLy8gRGlzcGxheXMgYWdncmVnYXRlIHRoYXQgZmV0Y2ggZnJvbSByZWNvcmRzXG4gIEBJbnB1dCgpIGFnZ3JlZ2F0ZWRSZXN1bHQ6IGFueVtdID0gW107XG5cbiAgQElucHV0KCkgc2hvd2NvbmZpcm1EaWFsb2c6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIHNhdmVBbGxEYXRhOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gU2V0cyBudW1iZXIgb2Ygcm93cyB0byBiZSBzaG93biB0aGUgZ3JpZFxuICBASW5wdXQoKSBkZWZhdWx0Um93czogbnVtYmVyID0gMDtcblxuICBASW5wdXQoKSBjb2x1bW5BY3Rpb25zOiBJR3JpZENvbHVtbkFjdGlvbltdID0gW107XG5cbiAgLy8gRGVjaWRlcyB0aGUgZ3JpZCdzIGJlaGF2aW9yIGVpdGhlciBmb3IgY2xpZW50IHNpZGUgb3Igc2VydmVyIHNpZGUgZXZlbnRzXG4gIEBJbnB1dCgpIHVzZVNlcnZlclNpZGVFdmVudHMgPSBmYWxzZTtcblxuICAvLyBPdXRwdXQgZXZlbnQgdG8gaGFuZGxlIHJvdyBjbGlja1xuICBAT3V0cHV0KCkgb25Sb3dDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IGVtaXQgd2hlbiBjbGljayBvbiBncmlkIGNoZWNrYm94IGZpbHRlclxuICBAT3V0cHV0KCkgb25DaGVja0JveEZpbHRlckNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBPdXRwdXQgZXZlbnQgdG8gaGFuZGxlIHJvdyBDaGVja0JveFxuICBAT3V0cHV0KCkgb25Sb3dDaGVja0JveDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IHRvIHRyaWdnZXIgb24gc29ydCBjaGFuZ2VcbiAgQE91dHB1dCgpIG9uU29ydENoYW5nZTogRXZlbnRFbWl0dGVyPElHcmlkU29ydD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IHRvIHRyaWdnZXIgb24gZmlsdGVyIGNoYW5nZVxuICBAT3V0cHV0KCkgb25GaWx0ZXJDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIE91dHB1dCBldmVudCB0byBpbnZva2UgdGhlIG11bHRpU2VsZWN0aW9uIGNsaWNrIGV2ZW50XG4gIEBPdXRwdXQoKSBvbk11bHRpU2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBDYWxscyB3aGVuZXZlciBhIGdyaWQgYW5kIGdsb2JhbEZpbHRlcnMgY2FsbGVkXG4gIEBPdXRwdXQoKSBvbkFwcGx5RmlsdGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvL3NldCBoZWFkZXIgY2hlY2tib3ggdmFsdWUgZm9yIGdldHRpbmcgYWxsIGNvbHVtbnMgb24gc3RheSBhZG1pblxuICBAT3V0cHV0KCkgaXNJbmNsdWRlZEFsbENvbHVtbnM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIENhbGxzIHdoZW5ldmVyIGEgbGF6eSBldmVudCBpcyBkaXNwYXRjaGVkXG4gIEBPdXRwdXQoKVxuICBvblNlcnZlclNpZGVFdmVudENoYW5nZTogRXZlbnRFbWl0dGVyPElHcmlkU2VydmVyU2lkZUV2ZW50PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIE91dHB1dCBldmVudCB0byB0cmlnZ2VyIG9uIHBhZ2luYXRpb25cbiAgQE91dHB1dCgpXG4gIG9uUGFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPElHcmlkUGFnaW5hdGlvbkV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBEaXNwYXRjaCBvdXRwdXQgZXZlbnQgdHJpZ2dlciBvbiBlZGl0IHJvd1xuICBAT3V0cHV0KCkgb25Sb3dVcGRhdGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gRGlzcGF0Y2ggb3V0cHV0IGV2ZW50IHRyaWdnZXIgY2FuY2VsIGFsbCByb3dzXG4gIEBPdXRwdXQoKSBvbkNhbmNlbEFsbFJvd3MgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gRGlzcGF0Y2ggb3V0cHV0IGV2ZW50IHRyaWdnZXIgb24gZGVsZXRlIHJvd1xuICBAT3V0cHV0KCkgb25Sb3dEZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy9EaXNwYXRjaCBvdXRwdXQgZXZlbnQgdHJpZ2dlciBvbiBhZGQgcm93XG4gIEBPdXRwdXQoKSBvblJvd0FkZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvL0Rpc3BhdGNoIG91dHB1dCBldmVudCB0cmlnZ2VyIG9uIGFkZCwgdXBkYXRlIGFuZCBkZWxldGUgcm93XG4gIEBPdXRwdXQoKSBvbkdyaWRSb3dBY3Rpb25zID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIHNldCBwcm9wZXJ0eSBhbGxvd0NhY2hpbmcgZm9yIExvY2FsU3RvcmFnZVxuICBASW5wdXQoKSBhbGxvd0NhY2hpbmc6IGJvb2xlYW47XG5cbiAgLy9zZXQgTXVsdGlzZWxlY3QgVG9nZ2xlIENvbHVtbnNcbiAgQElucHV0KCkgYWxsb3dQZXJzaXN0ZW5jZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgLy8gc2V0IHByb3BlcnR5IHNvZnRDYWNoaW5nIGZvciBzZXR0aW5nIHRoZSB2YWx1ZXMgb2YgZ3JpZEZpbHRlclxuICBASW5wdXQoKSBzb2Z0Q2FjaGluZzogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KCkgZWRpdEFsbFJvd3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gc2V0IHRoZSByb3cgV2hlbiBFZGl0IHRoZSByb3cgb24gR3JpZFxuICBAT3V0cHV0KCkgb25HcmlkUm93RWRpdCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBzZXQgdGhlIHJvdyBXaGVuIGFkZGluZyB0aGUgbmV3IFJvdyBvbiBHcmlkXG4gIEBPdXRwdXQoKSBvbkdyaWRSb3dBZGQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQElucHV0KCkgZ3JpZE5hbWU6IHN0cmluZyA9ICcnO1xuICBpc0dyaWRIaWRkZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgYXV0b1Jlc2l6ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBhbGxvd1RleHRDb3B5OiBib29sZWFuID0gZmFsc2U7XG5cblxuICByb3dzUGVyUGFnZU9wdGlvbnM6IGFueVtdID0gWzUsIDEwLCAxNSwgeyBzaG93QWxsOiAnQWxsJyB9XTtcbiAgY3VzdG9tV2lkdGhDb2x1bW5zOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge307XG4gIHNlbGVjdGVkUm93UmVjb3JkOmFueTtcbiAgc2Nyb2xsUG9zaXRpb25ZOiBudW1iZXIgPSAwO1xuICBzY3JvbGxQb3NpdGlvblg6IG51bWJlciA9IDA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogU3lzdGVtQ29uZmlnU2VydmljZSxcbiAgICBwdWJsaWMgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1TZXJ2aWNlOiBGb3JtU2VydmljZSxcbiAgICBwdWJsaWMgZ3JpZFNlcnZpY2U6IEdyaWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwdWJsaWMgZGVjaW1hbFBpcGU6IERlY2ltYWxQaXBlLFxuICAgIHByaXZhdGUgcGFnZUxvZ2dlclNlcnZpY2U6IFBhZ2VMb2dnZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgaHlwZXJsaW5rU2VydmljZTogSHlwZXJsaW5rU2VydmljZSxcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHVibGljIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZiwgXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgcmVxdWVzdFNlcnZpY2UgOiBSZXF1ZXN0U2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwdWJsaWMgY29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnLFxuICAgIEBPcHRpb25hbCgpIHB1YmxpYyByZWY6IER5bmFtaWNEaWFsb2dSZWZcbiAgKSB7IH1cblxuICBjb25zb2xlTG9nKG1lc3NhZ2U6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UpO1xuICB9XG5cbiAgbW91c2VMZWF2ZUV2ZW50KG92ZXJsYXlQYW5lbCl7XG4gICAgb3ZlcmxheVBhbmVsLmhpZGUoKTtcbiAgfSBcbiAgb25Db2x1bW5SZXNpemUoZXZlbnQ6IGFueSxkdCkge1xuICAgIGlmKGR0Py5lbD8ubmF0aXZlRWxlbWVudD8uaWQpe1xuICAgICAgdGhpcy5ncmlkSWQgPSBkdC5lbC5uYXRpdmVFbGVtZW50LmlkO1xuICAgIH1cbiAgICBjb25zdCBuZXdXaWR0aCA9IGV2ZW50LmVsZW1lbnQuY2xpZW50V2lkdGggKyAyO1xuICAgIGxldCBjb2x1bW5IZWFkZXIgPSBldmVudD8uZWxlbWVudD8uaWQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGNvbHVtbkhlYWRlcikge1xuICAgICAgbGV0IGluZGV4OiBhbnkgPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5maW5kSW5kZXgoKGNvbHVtbikgPT4gY29sdW1uLmhlYWRlcj8udG9Mb3dlckNhc2UoKSA9PSBjb2x1bW5IZWFkZXIpO1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgaWYgKG5ld1dpZHRoKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnNbaW5kZXhdWydjdXN0b21XaWR0aCddID0gcGFyc2VJbnQobmV3V2lkdGgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2F2ZUNvbHVtbldpZHRocygpO1xuICB9XG4gIHNhdmVDb2x1bW5XaWR0aHModG9nZ2xlQ29sdW1uczogYW55W10gPSBbXSkge1xuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgaWYgKGNvbHVtbi5maWVsZCAmJiBjb2x1bW4uY3VzdG9tV2lkdGgpIHtcbiAgICAgICAgdGhpcy5jdXN0b21XaWR0aENvbHVtbnNbY29sdW1uLmZpZWxkXSA9IGNvbHVtbi5jdXN0b21XaWR0aDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBzZWxlY3RlZEZpZWxkcyA9IHRvZ2dsZUNvbHVtbnM/Lmxlbmd0aCA+IDAgPyB0b2dnbGVDb2x1bW5zIDogdGhpcy5fc2VsZWN0ZWRDb2x1bW5zLm1hcCgoeCkgPT4geC5maWVsZCk7XG4gICAgdGhpcy5zZXRNdWx0aVNlbGVjdFRvZ2dsZUNvbHVtbihzZWxlY3RlZEZpZWxkcyk7XG4gIH1cbiAgbG9hZENvbHVtbldpZHRocygpIHtcbiAgICBsZXQgY3VycmVudFVzZXJJbmZvID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnQ3VycmVudFVzZXJJbmZvJykpO1xuICAgIGlmIChjdXJyZW50VXNlckluZm8gJiYgY3VycmVudFVzZXJJbmZvLnBhZ2VTZXR0aW5nKSB7XG4gICAgICBsZXQgcGFnZVNldHRpbmdzID0gSlNPTi5wYXJzZShjdXJyZW50VXNlckluZm8ucGFnZVNldHRpbmcpXG4gICAgICBwYWdlU2V0dGluZ3MucGFnZVNldHRpbmdzLm1hcChwYWdlID0+IHtcbiAgICAgICAgaWYgKHBhZ2UudXJsID09PSB0aGlzLnJvdXRlci51cmwpIHtcbiAgICAgICAgICBwYWdlLmdyaWRTZXR0aW5ncy5tYXAoZ3JpZFNldHRpbmcgPT4ge1xuICAgICAgICAgICAgaWYgKGdyaWRTZXR0aW5nLmdyaWRJZCA9PT0gdGhpcy5ncmlkSWQgJiYgZ3JpZFNldHRpbmc/LmN1c3RvbUNvbHVtbnNXaWR0aCkge1xuICAgICAgICAgICAgICBjb25zdCBjb2x1bW5zV2lkdGhLZXlzID0gT2JqZWN0LmtleXMoZ3JpZFNldHRpbmc/LmN1c3RvbUNvbHVtbnNXaWR0aCk7XG4gICAgICAgICAgICAgIGNvbHVtbnNXaWR0aEtleXMuZm9yRWFjaCgoY29sdW1uS2V5OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY29sdW1ucy5maW5kSW5kZXgoKHNlbGVjdGVkQ29sdW1uKSA9PiBzZWxlY3RlZENvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gY29sdW1uS2V5Py50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5zW2luZGV4XVsnY3VzdG9tV2lkdGgnXSA9IGdyaWRTZXR0aW5nPy5jdXN0b21Db2x1bW5zV2lkdGhbY29sdW1uS2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyBwcm9jZXNzSG92ZXJEYXRhKGhvdmVyRGF0YTogYW55LCByb3c6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0geyAuLi5ob3ZlckRhdGE/LmRhdGEgfTtcbiAgICAgIGNvbnN0IGRhdGFLZXlzID0gT2JqZWN0LmtleXMoZGF0YSk7XG4gICAgICBjb25zdCByb3dLZXlzID0gT2JqZWN0LmtleXMocm93KTtcbiAgICAgIGlmIChkYXRhS2V5cz8ubGVuZ3RoID4gMCAmJiByb3dLZXlzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGRhdGFLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBkYXRhW2tleV07XG4gICAgICAgICAgaWYgKHZhbHVlPy50b1N0cmluZygpLmluY2x1ZGVzKCd7JykgJiYgdmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ30nKSkge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKFwie1wiLCBcIlwiKS5yZXBsYWNlKFwifVwiLCBcIlwiKTtcbiAgICAgICAgICAgIGxldCByb3dLZXkgPSByb3dLZXlzPy5maW5kKCh4KSA9PiB4Py50b0xvd2VyQ2FzZSgpID09PSB2YWx1ZT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICB2YXIgY29ycmVjdFZhbHVlID0gcm93W3Jvd0tleV07XG4gICAgICAgICAgICBkYXRhW2tleV0gPSBjb3JyZWN0VmFsdWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoS2V5ID0gcm93S2V5cz8uZmluZCgoeCkgPT4geD8udG9Mb3dlckNhc2UoKSA9PT0ga2V5Py50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgIGlmIChtYXRjaEtleSAmJiAhZGF0YVtrZXldKSB7XG4gICAgICAgICAgICAgIGRhdGFba2V5XSA9IHJvd1ttYXRjaEtleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBob3ZlckRhdGE/LnN0eWxlID8gdGhpcy5vdmVybGF5UGFuZWxTdHlsZSA9IGhvdmVyRGF0YT8uc3R5bGUgOiBcIlwiO1xuICAgICAgdGhpcy5wYW5lbE92ZXJsYXlWaWV3Q29udGFpbmVyLmNsZWFyKCk7XG4gICAgICBpZiAodGhpcy5wYW5lbE92ZXJsYXlWaWV3Q29udGFpbmVyICYmIGhvdmVyRGF0YT8uY29tcG9uZW50KXtcbiAgICAgICAgY29uc3QgY29tcG9uZW50UmVmOiBhbnkgPSB0aGlzLnBhbmVsT3ZlcmxheVZpZXdDb250YWluZXI/LmNyZWF0ZUNvbXBvbmVudChob3ZlckRhdGE/LmNvbXBvbmVudCk7XG4gICAgICAgIGlmIChob3ZlckRhdGEuZGF0YSkge1xuICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5jb25maWcgPSBbXTtcbiAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuY29uZmlnLmRhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgICB9IFxuICAgICAgICAgIFxuICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICB9KTtcbiAgfVxuICBcbiAgYXN5bmMgYWRkRHluYW1pY1BhbmVsT3ZlcmxheUNvbXBvbmVudChob3ZlckRhdGE6IGFueSwgb3ZlcmxheVBhbmVsOiBhbnksIGV2ZW50OiBhbnksIHJvdzogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5wcm9jZXNzSG92ZXJEYXRhKGhvdmVyRGF0YSwgcm93KTtcbiAgICBvdmVybGF5UGFuZWwuc2hvdyhldmVudCk7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRDb2x1bW5zKCk6IElHcmlkQ29sdW1uW10ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZENvbHVtbnM7XG4gIH1cblxuICBzZXQgc2VsZWN0ZWRDb2x1bW5zKHZhbDogSUdyaWRDb2x1bW5bXSkge1xuICAgIHRoaXMuX3NlbGVjdGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucz8uZmlsdGVyKChjb2wpID0+IHZhbC5pbmNsdWRlcyhjb2wpKTtcbiAgICBpZiAodGhpcy5hbGxvd1BlcnNpc3RlbmNlICYmIHRoaXMuYWxsb3dDb2x1bW5Ub2dnbGUpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkRmllbGRzID0gdmFsLm1hcCgoeCkgPT4geC5maWVsZCk7XG4gICAgICB0aGlzLnNhdmVDb2x1bW5XaWR0aHMoc2VsZWN0ZWRGaWVsZHMpO1xuICAgIH1cbiAgfVxuICAvLyB1bmFibGUgdG8gYWxsb3cgdXNlciB0byBjb3B5IHRleHQgZnJvbSBncmlkIHdoZW4gdGhpcy5hbGxvd1RleHRDb3B5IGlzIHNldCB0byBmYWxzZS5cbiAgQEhvc3RMaXN0ZW5lcignY29weScsIFsnJGV2ZW50J10pXG4gIEBIb3N0TGlzdGVuZXIoJ2N1dCcsIFsnJGV2ZW50J10pXG4gIGhhbmRsZUNvcHlPckN1dChldmVudDogQ2xpcGJvYXJkRXZlbnQpIHtcbiAgICBjb25zdCBzZWxlY3Rpb246YW55ID0gd2luZG93Py5nZXRTZWxlY3Rpb24oKT8udG9TdHJpbmcoKSB8fCAnJztcbiAgICBjb25zdCBpc011bHRpQ2VsbFNlbGVjdGlvbiA9IHNlbGVjdGlvbi5zcGxpdCgvW1xcblxcdF0rLyk/LmZpbHRlcigoeCk9PiB4ICE9PSAnJyk7XG5cbiAgICBpZiAoIXRoaXMuYWxsb3dUZXh0Q29weSAmJiBpc011bHRpQ2VsbFNlbGVjdGlvbj8ubGVuZ3RoID4gMSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfVxuICBcbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudC50YXJnZXQnXSkgb25DbGljayhldmVudCkge1xuICAgIGlmKCF0aGlzLmVkaXRBbGxSb3dzICYmICF0aGlzLmluRWRpdE1vZGUgJiYgdGhpcy5zZWxlY3RlZFJvd1JlY29yZCl7XG4gICAgICB0aGlzLmhhbmRsZVJvd0NsaWNrKHRoaXMuc2VsZWN0ZWRSb3dSZWNvcmQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGJyb3dzZXIgY2xvc2UgZXZlbnRcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcsIFsnJGV2ZW50J10pXG4gIGJlZm9yZXVubG9hZEhhbmRsZXIoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFzc2lnbm1lbnQgb2Ygc2VsZWN0ZWQgY29sdW1ucyBvbiBwYWdlIGxvYWRcbiAgICovXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UuaW5jcmVtZW50Q2FsbHMoKTtcbiAgICBpZiAodGhpcy5ncmlkU2VydmljZS5nZXROdW1iZXJPZkNhbGxzKCkgPT09IDEpIHtcbiAgICAgIHRoaXMuc2VhcmNoYnRuSWQgPSAnc2VhcmNoR2xvYmFsRmlsdGVyQnRuJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWFyY2hidG5JZCA9IGBGaWx0ZXJfJHtjdXJyZW50VXJsKCl9XyR7dGhpcy5ncmlkU2VydmljZS5nZXROdW1iZXJPZkNhbGxzKCl9YDtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2V0R3JpZFJlZnJlc2hUaW1lKSB7XG4gICAgICB0aGlzLnJlZnJlc2hHcmlkKCk7XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLm9uUm93VXBkYXRlPy5vYnNlcnZlcnM/Lmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLmhpZGVFZGl0QnRuID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lZGl0QWxsUm93cyAmJiB0aGlzLm9uUm93RGVsZXRlLm9ic2VydmVycy5sZW5ndGggPT0gMCkge1xuICAgICAgdGhpcy5kaXNhYmxlZFNhdmVCdG4gPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuY29tcG9uZW50VGFibGVSZWYgPSB0aGlzLnRhYmxlO1xuICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5yb3dzQ2hhbmdlLmVtaXQodGhpcy5yb3dzRGF0YSk7XG4gICAgfSk7IFxuICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgdGhpcy5zZXROdW1lcmljVmFsdWVzKCk7XG4gICAgLy8gfSwgNTAwKTtcbiAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgIGlmICh0aGlzLnJvd3NDaGFuZ2Uub2JzZXJ2ZXJzPy5sZW5ndGgpIHtcbiAgICAvLyAgICAgdGhpcy5yb3dzQ2hhbmdlLmVtaXQodGhpcy5yb3dzRGF0YSk7XG4gICAgLy8gICB9XG4gICAgLy8gfSwgMjAwMCk7XG4gIH1cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIHRoaXMuYWRkRHluYW1pY1BhbmVsT3ZlcmxheUNvbXBvbmVudCgpXG4gICAgbGV0IGZpbHRlcnMgPSAxMDAwO1xuICAgIHRoaXMuY29tcG9uZW50VGFibGVSZWYgPSB0aGlzLnRhYmxlO1xuICAgIGxldCBmaWx0ZXI6IFN1YnNjcmlwdGlvbiA9IGludGVydmFsKGZpbHRlcnMpLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgZmlsdGVycyA9IDA7XG4gICAgICBmaWx0ZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgIGNvbnN0IGZpbHRlckNvbHVtbiA9IHRoaXMuY29sdW1ucz8uZmluZCgoY29sdW1uKSA9PiAhdGhpcy5oaWRlRmlsdGVyICYmICFjb2x1bW4/LmhpZGRlbiAmJiBjb2x1bW4/LmZpbHRlciAmJiAoY29sdW1uPy5maWx0ZXJpbmcgPT09IHRydWUgfHwgY29sdW1uPy5maWx0ZXJpbmcgPT09IHVuZGVmaW5lZCkpO1xuICAgICAgY29uc3QgbG9va3VwTW9kYWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubG9va3VwLW1vZGVsJyk7XG4gICAgICBjb25zdCBmaWx0ZXJGaWVsZDogYW55ID0gbG9va3VwTW9kYWw/LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZmlsdGVyQ29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKSk7XG4gICAgICBjb25zdCBmaWx0ZXJGaWVsZHM6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZmlsdGVyQ29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKSk7XG4gICAgICBpZiAoZmlsdGVyRmllbGQgfHwgZmlsdGVyRmllbGRzKSB7XG4gICAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJGaWVsZD8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBmaWx0ZXJGaWVsZFswXT8uZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWx0ZXJGaWVsZHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgZmlsdGVyRmllbGRzWzBdPy5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0Rm9jdXNPdXRUb2ZpbHRlcnMoKSB7XG4gICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb25zdCBjb2x1bW5GaWx0ZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucC1jb2x1bW4tZmlsdGVyJylcbiAgICAgIGlmKGNvbHVtbkZpbHRlcil7XG4gICAgICAgICAgY29uc3QgaW5wdXQgPSBjb2x1bW5GaWx0ZXJbMF0uY2hpbGRyZW5bMF0ucXVlcnlTZWxlY3RvcignaW5wdXQnKVxuICAgICAgICAgIGlmKGlucHV0KXtcbiAgICAgICAgICAgICAgaW5wdXQuZm9jdXMoKVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMucmVmcmVzaEdyaWRUZXJtaW5hdG9yKCk7XG4gIH1cblxuICAvLyBzZXQgTXVsdGlzZWxlY3QgVG9nZ2xlIENvbHVtbiAvL1xuICBzZXRNdWx0aVNlbGVjdFRvZ2dsZUNvbHVtbihzZWxlY3RlZEZpZWxkczogYW55W10gPSBbXSkge1xuICAgIGlmICh0aGlzLnVzZXJTZXR0aW5nPy5wYWdlU2V0dGluZ3M/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG1hdGNoVXJsID0gdGhpcy51c2VyU2V0dGluZz8ucGFnZVNldHRpbmdzPy5maW5kSW5kZXgoKHBhZ2UpID0+IHBhZ2U/LnVybCA9PT0gdGhpcy5yb3V0ZXIudXJsKVxuICAgICAgaWYgKG1hdGNoVXJsID4gLTEpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hHcmlkID0gdGhpcy51c2VyU2V0dGluZz8ucGFnZVNldHRpbmdzW21hdGNoVXJsXT8uZ3JpZFNldHRpbmdzPy5maW5kSW5kZXgoKGdyaWRTZXR0aW5nKSA9PiBncmlkU2V0dGluZz8uZ3JpZElkID09PSB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCk7XG4gICAgICAgIGlmIChtYXRjaEdyaWQgPiAtMSkge1xuICAgICAgICAgIHRoaXMudXNlclNldHRpbmc/LnBhZ2VTZXR0aW5nc1ttYXRjaFVybF0/LmdyaWRTZXR0aW5ncy5zcGxpY2UobWF0Y2hHcmlkLCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRncmlkU2V0dGluZ3Moc2VsZWN0ZWRGaWVsZHMsIG1hdGNoVXJsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51c2VyU2V0dGluZy5wYWdlU2V0dGluZ3MgPSBbXTtcbiAgICAgIHRoaXMuc2V0Z3JpZFNldHRpbmdzKHNlbGVjdGVkRmllbGRzKTtcbiAgICB9XG4gIH1cblxuICBnZXRTZWxlY3RlZENvbEZyb21Mb2NhbFN0cm9yYWdlKHNlbGVjdGVkQ29sdW1uKSB7XG4gICAgbGV0IGFyciA9IFtdO1xuICAgIGlmIChzZWxlY3RlZENvbHVtbiAmJiBzZWxlY3RlZENvbHVtbj8ucGFnZVNldHRpbmdzPy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBtYXRjaFVybCA9IHNlbGVjdGVkQ29sdW1uPy5wYWdlU2V0dGluZ3M/LmZpbmRJbmRleCgocGFnZSkgPT4gcGFnZT8udXJsID09PSB0aGlzLnJvdXRlci51cmwpXG4gICAgICBpZiAobWF0Y2hVcmwgPiAtMSkge1xuICAgICAgICBjb25zdCBtYXRjaEdyaWQgPSBzZWxlY3RlZENvbHVtbj8ucGFnZVNldHRpbmdzW21hdGNoVXJsXT8uZ3JpZFNldHRpbmdzPy5maW5kKChncmlkU2V0dGluZykgPT4gZ3JpZFNldHRpbmc/LmdyaWRJZCA9PT0gdGhpcy5ncmlkSWQpO1xuICAgICAgICBpZiAobWF0Y2hHcmlkICYmIG1hdGNoR3JpZC5zZWxlY3RlZENvbHVtbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBpZiAobWF0Y2hHcmlkLnNlbGVjdGVkQ29sdW1ucy5zb21lKChmaWVsZE5hbWUpID0+IGZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gY29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgYXJyLnB1c2goY29sdW1uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFycj8ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIHNldGdyaWRTZXR0aW5ncyhzZWxlY3RlZEZpZWxkczogYW55LCBtYXRjaFVybD86IGFueSkge1xuICAgIGlmIChzZWxlY3RlZEZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgZ3JpZFNldHRpbmdzOiBhbnlbXSA9IFtdO1xuICAgICAgZ3JpZFNldHRpbmdzLnB1c2goe1xuICAgICAgICBncmlkSWQ6IHRoaXMuZ3JpZElkLFxuICAgICAgICBzZWxlY3RlZENvbHVtbnM6IHNlbGVjdGVkRmllbGRzLFxuICAgICAgICBjdXN0b21Db2x1bW5zV2lkdGg6IHRoaXMuY3VzdG9tV2lkdGhDb2x1bW5zLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IHBhZ2VTZXR0aW5nID0ge1xuICAgICAgICB1cmw6IHRoaXMucm91dGVyLnVybCxcbiAgICAgICAgZ3JpZFNldHRpbmdzOiBncmlkU2V0dGluZ3MsXG4gICAgICAgIGxhc3RVcGRhdGVkOiBuZXcgRGF0ZSgpXG4gICAgICB9XG4gICAgICB0aGlzLnVzZXJTZXR0aW5nLmxhc3RVcGRhdGVkID0gbmV3IERhdGUoKTtcbiAgICAgIGlmIChtYXRjaFVybCA+IC0xKSB7XG4gICAgICAgIHRoaXMudXNlclNldHRpbmcucGFnZVNldHRpbmdzW21hdGNoVXJsXSA9IHBhZ2VTZXR0aW5nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51c2VyU2V0dGluZy5wYWdlU2V0dGluZ3MucHVzaChwYWdlU2V0dGluZyk7XG4gICAgICB9XG4gICAgICBjb25zdCBwYWdlSW5mbyA9IEpTT04uc3RyaW5naWZ5KHRoaXMudXNlclNldHRpbmcpO1xuICAgICAgY2hhbmdlQ29sdW1uc1N0YXRlKHsgcGFnZVNldHRpbmc6IHBhZ2VJbmZvIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFwcGx5IHVzZXIgcm9sZSBwZXJtaXNzaW9ucyBvbiBncmlkIGNvbHVtbnNcbiAgYXBwbHlDb2x1bW5zUGVybWlzc2lvbnMoKSB7XG4gICAgaWYgKHRoaXMuY29sdW1ucykge1xuICAgICAgbGV0IHRvdGFsRmllbGRzOiBudW1iZXIgPSAwO1xuICAgICAgbGV0IGhpZGRlbkZpZWxkczogbnVtYmVyID0gMDtcblxuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogSUdyaWRDb2x1bW4pID0+IHtcbiAgICAgICAgbGV0IHBlcm1pc3Npb25zOiBJUGVybWlzc2lvbltdID0gY29sdW1uLnBlcm1pc3Npb25zO1xuICAgICAgICBsZXQgaGFzVmFsaWRFZGl0UGVybWlzc2lvbiA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChwZXJtaXNzaW9ucyAmJiBwZXJtaXNzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcGVybWlzc2lvbnMuZm9yRWFjaCgocGVybWlzc2lvbikgPT4ge1xuICAgICAgICAgICAgbGV0IGlzVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uLnJvbGVzICYmIHBlcm1pc3Npb24ucm9sZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBwZXJtaXNzaW9uLnJvbGVzLmZvckVhY2goKHJvbGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgdGhpcy5yb2xlcyAmJiB0aGlzLnJvbGVzLmluY2x1ZGVzKHJvbGUpKSB7XG4gICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuVklFVyAmJlxuICAgICAgICAgICAgICAgICFoYXNWYWxpZEVkaXRQZXJtaXNzaW9uXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4uaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuRURJVCkge1xuICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICBoYXNWYWxpZEVkaXRQZXJtaXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRvdGFsRmllbGRzKys7XG4gICAgICAgIGlmIChjb2x1bW4uaGlkZGVuKSB7XG4gICAgICAgICAgaGlkZGVuRmllbGRzKys7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmlzQ29sdW1uSGlkZGVuID0gdG90YWxGaWVsZHMgPiAwICYmIHRvdGFsRmllbGRzID09PSBoaWRkZW5GaWVsZHM7XG4gICAgfVxuICB9XG5cbiAgLy8gYXBwbHkgZ2xvYmFsIHBlcm1pc3Npb25zIG9uIGVudGlyZSBncmlkXG4gIGFwcGx5R3JpZFBlcm1pc3Npb25zKCkge1xuICAgIGlmICh0aGlzLnBlcm1pc3Npb25zICYmIHRoaXMucGVybWlzc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IGhhc1ZhbGlkRWRpdFBlcm1pc3Npb24gPSBmYWxzZTtcblxuICAgICAgLy8gY2hlY2sgaWYgYW55IGNvbHVtbiBoYXMgYW55IHBlcm1pc3Npb25cbiAgICAgIGxldCBoYXNDb2x1bW5QZXJtaXNzaW9ucyA9IHRoaXMuY29sdW1ucz8uc29tZShcbiAgICAgICAgKHgpID0+IHg/LnBlcm1pc3Npb25zICYmIHgucGVybWlzc2lvbnMubGVuZ3RoID4gMFxuICAgICAgKTtcblxuICAgICAgdGhpcy5wZXJtaXNzaW9ucy5mb3JFYWNoKChwZXJtaXNzaW9uKSA9PiB7XG4gICAgICAgIGxldCBpc1ZhbGlkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAgICAgcGVybWlzc2lvbi5yb2xlcy5mb3JFYWNoKChyb2xlKSA9PiB7XG4gICAgICAgICAgaWYgKCFpc1ZhbGlkICYmIHRoaXMucm9sZXMgJiYgdGhpcy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuQ1JVRCAmJiAhaXNWYWxpZCkge1xuICAgICAgICAgIHRoaXMudXNlSW5saW5lQ1JVRCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgIHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLlZJRVcgJiZcbiAgICAgICAgICAhaGFzVmFsaWRFZGl0UGVybWlzc2lvblxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnVzZUlubGluZUNSVUQgPSB0cnVlO1xuICAgICAgICAgIGlmICghaXNWYWxpZCAmJiAhaGFzQ29sdW1uUGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuaXNHcmlkSGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudXNlSW5saW5lQ1JVRCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5FRElUICYmICFpc1ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5pc0dyaWRIaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICBoYXNWYWxpZEVkaXRQZXJtaXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmVkaXRSb3dQZXJtaXNzaW9uID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuREVMRVRFICYmICFpc1ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5kZWxldGVSb3dQZXJtaXNzaW9uID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuQUREUk9XICYmICFpc1ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5hZGRSb3dQZXJtaXNzaW9uID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5vblJvd0FkZC5vYnNlcnZlcnMubGVuZ3RoID09IDApIHRoaXMuYWRkUm93UGVybWlzc2lvbiA9IGZhbHNlO1xuICAgIGlmICh0aGlzLm9uUm93RGVsZXRlLm9ic2VydmVycy5sZW5ndGggPT0gMCkgdGhpcy5kZWxldGVSb3dQZXJtaXNzaW9uID0gZmFsc2U7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2U6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5yZW1haW5pbmdSb3dzRGF0YT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMucm93c0RhdGEgPSBbLi4udGhpcy5yb3dzRGF0YSwgLi4udGhpcy5yZW1haW5pbmdSb3dzRGF0YV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIGlmICghdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgJiYgIXRoaXMuZ3JpZFNlcnZpY2Uucm93VXBkYXRlKSB7XG4gICAgICB0aGlzLnNldEdyaWRJZCgpXG4gICAgICB0aGlzLmNvbXBvbmVudFRhYmxlUmVmID0gdGhpcy50YWJsZTtcbiAgICAgIGxldCBnZXRTZWxlY3RlZENvbCA9IFtdXG4gICAgICBpZiAodGhpcy5hbGxvd0NhY2hpbmcgIT09IGZhbHNlICYmIHRoaXMucGFnaW5hdGlvbikge1xuICAgICAgICB0aGlzLmFsbG93Q2FjaGluZyA9IHRoaXMucGFnaW5hdGlvbjtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ1NldEZpbHRlcnMtJyArIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsKTtcbiAgICAgIH1cbiAgICAgIC8vIGFkZCBkZWZhdWx0Um93IGluIHBhZ2luYXRpb24gYXJyYXlcbiAgICAgIGlmICghdGhpcy5zZXRQYWdpbmF0aW9uTGVuZ3RoLmluY2x1ZGVzKHRoaXMuZGVmYXVsdFJvd3MpKSB7XG4gICAgICAgIHRoaXMuc2V0UGFnaW5hdGlvbkxlbmd0aC51bnNoaWZ0KHRoaXMuZGVmYXVsdFJvd3MpO1xuICAgICAgfVxuICAgICAgY29uc3QgaGFzQ29sdW1uczogYm9vbGVhbiA9IHRoaXMuY29sdW1ucyAmJiB0aGlzLmNvbHVtbnMubGVuZ3RoID4gMDtcbiAgICAgIGlmIChoYXNDb2x1bW5zKSB7XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0Q29sdW1uRmllbGRzKHRoaXMuY29sdW1ucyk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUb2dnbGVDb2x1bW5zID0gdGhpcy5jb2x1bW5zPy5maWx0ZXIoKHgpID0+ICF4LmhpZGRlbik7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRVc2VySW5mbyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0N1cnJlbnRVc2VySW5mbycpKTtcbiAgICAgICAgLy9zZXQgZ2V0U2VsZWN0ZWRDb2wgY29sdW1ucyBmb3IgdG9nZ2xlQ291bG1uIFxuICAgICAgICBpZiAodGhpcy5hbGxvd1BlcnNpc3RlbmNlICYmIHRoaXMuYWxsb3dDb2x1bW5Ub2dnbGUpIHtcbiAgICAgICAgICBpZiAoY3VycmVudFVzZXJJbmZvICYmIGN1cnJlbnRVc2VySW5mby5wYWdlU2V0dGluZykge1xuICAgICAgICAgICAgZ2V0U2VsZWN0ZWRDb2wgPSB0aGlzLmdldFNlbGVjdGVkQ29sRnJvbUxvY2FsU3Ryb3JhZ2UoSlNPTi5wYXJzZShjdXJyZW50VXNlckluZm8ucGFnZVNldHRpbmcpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb2xlcyA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0VXNlclJvbGVzKCk7XG5cbiAgICAgICAgLy8gYXBwbHkgdXNlciByb2xlIHBlcm1pc3Npb25zIG9uIGdyaWQgY29sdW1uc1xuICAgICAgICB0aGlzLmFwcGx5Q29sdW1uc1Blcm1pc3Npb25zKCk7XG5cbiAgICAgICAgLy8gYXBwbHkgZ2xvYmFsIHBlcm1pc3Npb25zIG9uIGVudGlyZSBncmlkXG4gICAgICAgIHRoaXMuYXBwbHlHcmlkUGVybWlzc2lvbnMoKTtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zPy5maWx0ZXIoKHgpID0+ICh4LnNob3cgPT09IHRydWUgfHwgeC5zaG93ID09PSB1bmRlZmluZWQpICYmICF4LmhpZGRlbik7XG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAvL2xvYWQgY29sdW1uIHdpdGR0aCBvbiBwYWdlIHJlbG9hZFxuICAgICAgICB0aGlzLmxvYWRDb2x1bW5XaWR0aHMoKTtcbiAgICAgICAgaWYodGhpcy5yb3dzRGF0YS5sZW5ndGggPiAwKXtcbiAgICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlLnNldFRvb2x0aXAoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNoZWNraW5nIGZpbHRlciBleGlzdCBvciBub3RcbiAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5fc2VsZWN0ZWRDb2x1bW5zLnNvbWUoXG4gICAgICAgICAgKGNvbHVtbikgPT4gY29sdW1uLmZpbHRlcmluZyA9PT0gdW5kZWZpbmVkIHx8IGNvbHVtbi5maWx0ZXJpbmcgPT09IHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGZpbHRlciA9PT0gZmFsc2UpIHtcbiAgICAgICAgICB0aGlzLmhpZGVGaWx0ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmaWx0ZXJGb2N1cyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyBzZXQgaXNSZXF1aXJlZCB0cnVlIGZvciByZXF1aXJlZCBjb2x1bW4gdG8gc2hvdyBhc3RyaWMgaW4gY29sdW1uIGhlYWRlclxuICAgICAgICAgIGlmIChjb2x1bW4udmFsaWRhdGlvbnM/LmZpbmQodmFsaWRhdGlvbiA9PiB2YWxpZGF0aW9uLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuUkVRVUlSRUQpKSB7XG4gICAgICAgICAgICBjb2x1bW4uaXNSZXF1aXJlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHNldCBudW1lcmljIG51bGwgb3IgdW5kZWZpbmUgZGF0YSBkZWZhdWx0IHZhbHVlXG4gICAgICAgICAgaWYgKChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk5VTUVSSUMgfHwgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOIHx8IGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuVEVYVCB8fCBjb2x1bW4udHlwZSA9PT0gdW5kZWZpbmVkIHx8IGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSB8fCBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOKSAmJiBjb2x1bW4udmFsdWUgJiYgdGhpcy5yb3dzRGF0YT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGNvbHVtbi52YWx1ZSAmJiAocm93W2NvbHVtbi5maWVsZF0gPT09IG51bGwgfHwgcm93W2NvbHVtbi5maWVsZF0gPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy52YWx1ZSA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy52YWx1ZSA6IGNvbHVtbi52YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgLy9zZXQgdGV4dFR5cGUgZm9yIGEgY29sdW1uIHRoYXQgaXMgZm9ybWF0dGVkIHRvIGJlIGEgcGFzc3dvcmRcbiAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdCA9PSAncGFzc3dvcmQnICYmICghY29sdW1uLnRleHRUeXBlIHx8IGNvbHVtbi50ZXh0VHlwZSAhPT0gJ3RleHQnKSkge1xuICAgICAgICAgICAgY29sdW1uLnRleHRUeXBlID0gJ3Bhc3N3b3JkJztcbiAgICAgICAgICB9IGVsc2UgY29sdW1uLnRleHRUeXBlID0gJ3RleHQnO1xuICAgICAgICAgIC8vIGNvbnZlcnQgc3RyaW5nIHRpbWUgaW50byB0aGUgZGF0ZVxuICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpIHtcbiAgICAgICAgICAgIGlmIChjb2x1bW4udGltZU9ubHkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSAmJlxuICAgICAgICAgICAgICAgICAgKHJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1BNJykgfHxcbiAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0udG9TdHJpbmcoKS5pbmNsdWRlcygnQU0nKSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gc2V0VGltZUluRGF0ZShyb3dbY29sdW1uLmZpZWxkXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNvbHVtbi5taW51dGVzSW50ZXJ2YWwpIHtcbiAgICAgICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyb3dbY29sdW1uLmZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBuZXcgRGF0ZShyb3dbY29sdW1uLmZpZWxkXSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghdGhpcy5oaWRlRmlsdGVyICYmIGNvbHVtbi5maWx0ZXJWYWx1ZSAmJiBjb2x1bW4uZmlsdGVyICYmIGNvbHVtbi5maWx0ZXJpbmcgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAvLyBzZXQgZmlsdGVyIHZhbHVlXG4gICAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBzZXQgRGlzcGxheVRleHQgd2hlbiB2YWx1ZSBpcyBpbiBjdXJseSBicmFja2V0cy5cbiAgICAgICAgICB0aGlzLnNldERpc3BsYXlUZXh0VmFsdWUoY29sdW1uKTtcblxuICAgICAgICAgIC8vQWdncmVnYXRlIHNjZW5hcmlvXG4gICAgICAgICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgJiYgY29sdW1uLmFnZ3JlZ2F0ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmFnZ3JlZ2F0ZUZvb3RlciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNldEFnZ3JlZ2F0ZVRleHQoY29sdW1uKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgc2VhcmNoRmlsdGVycztcbiAgICAgICAgICBpZiAoIXRoaXMuc29mdENhY2hpbmcgJiYgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQpIHtcbiAgICAgICAgICAgIHNlYXJjaEZpbHRlcnMgPSBKU09OLnBhcnNlKFxuICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnU2V0RmlsdGVycy0nICsgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmwpIGFzIGFueVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgICAgICBzZWFyY2hGaWx0ZXJzID0gdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5oaWRlRmlsdGVyICYmXG4gICAgICAgICAgICBzZWFyY2hGaWx0ZXJzICYmXG4gICAgICAgICAgICBzZWFyY2hGaWx0ZXJzLmZpbHRlcnMgJiZcbiAgICAgICAgICAgIHNlYXJjaEZpbHRlcnMuZmlsdGVycz8ubGVuZ3RoID4gMFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgc2VhcmNoRmlsdGVycy5maWx0ZXJzLmZvckVhY2goKHg6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoeC5maWVsZCA9PT0gY29sdW1uLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbj8uZmlsdGVyPy50eXBlID09PSAnY2FsZW5kYXInICYmIHgudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9IG5ldyBEYXRlKHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHgudmFsdWUsICdNTS1kZC1ZWScpIGFzIHN0cmluZyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUICYmICFBcnJheS5pc0FycmF5KHgudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4uZmlsdGVyVmFsdWUgPSB4LnZhbHVlPy5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgY29sdW1uLmZpbHRlclZhbHVlID0geC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBjb252ZXJ0aW5nIGRpc3BsYXlGaWVsZCB0b0xvd2VyY2FzZVxuICAgICAgICAgIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICBjb2x1bW4uZGlzcGxheUZpZWxkID0gY29sdW1uLmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBzZXQgQXV0b0NvbXBsZXRlIERhdGFcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURSAmJlxuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YSAmJlxuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YT8ubGVuZ3RoID4gMFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgLy8gY29udmVydCBzdHJpbmcgdGhhdCBjb250YWlucyBjb21tYSBpbnRvIGFycmF5c1xuICAgICAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJzsnKSkge1xuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF1cbiAgICAgICAgICAgICAgICAgID8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgLnNwbGl0KCc7JylcbiAgICAgICAgICAgICAgICAgID8ubWFwKCh2YWx1ZTogYW55KSA9PiAoeyBbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV06IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXSwgW2NvbHVtbi5vcHRpb25MYWJlbD8udG9Mb3dlckNhc2UoKV06IHZhbHVlLCBbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXTogdmFsdWUgfSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGtleTogYW55ID0gT2JqZWN0LmtleXMocm93KS5maW5kKCh4KSA9PiB4ID09PSBjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgIC8vIGNvbnZlcnQgc2ltcGxlIHN0cmluZyBpbnRvIGFycmF5XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyb3dba2V5XSkgJiYgcm93W2tleV0pIHtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgICAgICAgcm93W2tleV0gPSBbeyBbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV06IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXSwgW2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV06IHJvd1trZXldIH1dO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBpZiAoY29sdW1uLm9wdGlvbkxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd1trZXldID0gW3sgW2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV06IHJvd1trZXldLCBbY29sdW1uLm9wdGlvbkxhYmVsPy50b0xvd2VyQ2FzZSgpXTogcm93W2tleV0gfV07XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByb3dba2V5XSA9IFt7IFtjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldOiByb3dba2V5XSB9XTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vd2hlbiB3ZSBhZGQgYSBuZXcgcm93LCBpdCBzZXQgdGhlIGRlZmF1bHQgdmFsdWVcbiAgICAgICAgICBpZiAoY29sdW1uLnZhbHVlKSB7XG4gICAgICAgICAgICBsZXQga2V5ID0gT2JqZWN0LmtleXModGhpcy5uZXdHcmlkUm93KS5maW5kKCh4KSA9PiB4Py50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgICB0aGlzLm5ld0dyaWRSb3dbY29sdW1uLmZpZWxkXSA9IGNvbHVtbi52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZihjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTkspe1xuICAgICAgICAgICAgdGhpcy5zZXRMaW5rVGFiU2V0dGluZ3MoY29sdW1uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmFsbG93UGVyc2lzdGVuY2UgJiYgZ2V0U2VsZWN0ZWRDb2w/Lmxlbmd0aCA+IDAgJiYgdGhpcy5hbGxvd0NvbHVtblRvZ2dsZSkge1xuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0Q29sdW1ucyhnZXRTZWxlY3RlZENvbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3RDb2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZ2xvYmFsRmlsdGVyQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zZWFyY2hidG5JZCk7XG4gICAgICAgIGlmIChnbG9iYWxGaWx0ZXJCdG4pIHtcbiAgICAgICAgICB0aGlzLnNob3dGaWx0ZXJidG4gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2Uucm93cykge1xuICAgICAgICAgIGNvbnN0IGNsYXNzRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2hpZ2hsaWdodGVkLXJvdycpO1xuICAgICAgICAgIGlmIChjbGFzc0VsZW1lbnQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY2xhc3NFbGVtZW50WzBdLnNjcm9sbEludG9WaWV3KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmVkaXRBbGxSb3dzICYmIHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDAgJiYgdGhpcy5jb2x1bW5zPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0QWxsUm93c0F0T25jZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zZXREcm9wZG93bmRhdGFWYWx1ZSA9IHRydWU7XG4gICAgICBjb25zdCBnbG9iYWxTZWFyY2hidG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2xvYmFsU2VhcmNoYnRuJyk7XG4gICAgICBpZiAoZ2xvYmFsU2VhcmNoYnRuKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoR3JpZEZpbHRlciA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDAgJiYgdGhpcy5nZW5lcmF0ZVJvd3NEYXRhQ29weSkge1xuICAgICAgICB0aGlzLnJvd3NEYXRhQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5yb3dzRGF0YSkpO1xuICAgICAgfVxuICAgICAgaWYoIXRoaXMuc3RvcERpYWxvZ0Nsb3NlKXtcbiAgICAgICAgdGhpcy5kZWZhdWx0Um93Q2xpY2soKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5yb3dVcGRhdGVDaGFuZ2UgPSBmYWxzZTtcbiAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IGZhbHNlO1xuICAgIGlmKHRoaXMudGVtcFNhdmVkUm93Py5sZW5ndGggPiAwICYmIHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDAgJiYgIXRoaXMuZWRpdEFsbFJvd3Mpe1xuICAgICAgdGhpcy5lZGl0aW5nUm93S2V5c1t0aGlzLnJvd3NEYXRhW3RoaXMudGVtcFNhdmVkUm93WzBdXVt0aGlzLmRhdGFLZXldXSA9IHRoaXMuaXNFcnJvck9jY3VyZWQ7XG4gICAgfVxuICBcbiAgfVxuXG4gIHNldExpbmtUYWJTZXR0aW5ncyhjb2x1bW46IElHcmlkQ29sdW1uKSB7XG4gICAgY29uc3QgdXNlclNldHRpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIlVzZXJTZXR0aW5nXCIpO1xuICAgIGlmICh1c2VyU2V0dGluZykge1xuICAgICAgY29uc3QgcGFyc2VkU2V0dGluZyA9IEpTT04ucGFyc2UodXNlclNldHRpbmcpO1xuICAgICAgaWYgKGNvbHVtbj8udGFyZ2V0VXNlVXNlclByZWYpIHtcbiAgICAgICAgY29sdW1uLnRhcmdldCA9IHBhcnNlZFNldHRpbmc/LnZhbHVlID09PSBcIm9wZW5MaW5rSW5DdXJyZW50VGFiXCIgPyBFR3JpZGxpbmsuU0VMRiA6IEVHcmlkbGluay5CTEFOSztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRHcmlkSWQoKXtcbiAgICBsZXQgdGFibGVzID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgncC10YWJsZScpO1xuICAgICAgaWYgKHRhYmxlcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICB0YWJsZXMuZm9yRWFjaCgodGFibGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgdGFibGUuc2V0QXR0cmlidXRlKCdpZCcsIHRoaXMuY3VycmVudFVybCtpbmRleCk7XG4gICAgICAgIH0pXG4gICAgICB9XG4gIH1cbiAgc2V0U2VsZWN0Q29sdW1ucyhjb2x1bW5zKSB7XG4gICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zID0gW107XG4gICAgY29sdW1ucz8uZm9yRWFjaCgoeCwgaSkgPT4ge1xuICAgICAgaWYgKCh4LnNob3cgPT09IHRydWUgfHwgeC5zaG93ID09PSB1bmRlZmluZWQpICYmICF4LmhpZGRlbikge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnNbaV0pIHtcbiAgICAgICAgICB4LnZhbHVlID0gdGhpcy5zZWxlY3RlZENvbHVtbnNbaV0udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zLnB1c2goeCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhdXRvQ29tcGxldGVTZWxlY3RlZFZhbHVlKHJvdzogYW55LCBjb2x1bW46IElHcmlkQ29sdW1uLCB2YWx1ZSkge1xuICAgIGlmIChjb2x1bW4ub3B0aW9uTGFiZWwpIHtcbiAgICAgIGNvbnN0IHZhbHVlS2V5ID0gY29sdW1uLm9wdGlvblZhbHVlID8gY29sdW1uLm9wdGlvblZhbHVlIDogY29sdW1uLmZpZWxkO1xuICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBbLi4ucm93W2NvbHVtbi5maWVsZF0sIHtcbiAgICAgICAgW2NvbHVtbi5vcHRpb25MYWJlbD8udG9Mb3dlckNhc2UoKV06IHZhbHVlW2NvbHVtbi5vcHRpb25MYWJlbD8udG9Mb3dlckNhc2UoKV0sIFt2YWx1ZUtleT8udG9Mb3dlckNhc2UoKV06IHZhbHVlW3ZhbHVlS2V5Py50b0xvd2VyQ2FzZSgpXSxcbiAgICAgICAgW2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV06IHZhbHVlW3ZhbHVlS2V5Py50b0xvd2VyQ2FzZSgpXVxuICAgICAgfV07XG4gICAgICBjb25zdCBpbmRleCA9IHJvd1tjb2x1bW4uZmllbGRdPy5maW5kSW5kZXgoKHgpID0+IEpTT04uc3RyaW5naWZ5KHgpID09PSBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgICAgcm93W2NvbHVtbi5maWVsZF0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICAvLyBzZXQgRGlzcGxheVRleHQgd2hlbiB2YWx1ZSBpcyBpbiBjdXJseSBicmFja2V0cy5cbiAgc2V0RGlzcGxheVRleHRWYWx1ZShjb2x1bW46IElHcmlkQ29sdW1uKSB7XG4gICAgdGhpcy5yb3dzRGF0YT8uZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSyB8fFxuICAgICAgICBFR3JpZENvbHVtblR5cGUuRElBTE9HIHx8XG4gICAgICAgIEVHcmlkQ29sdW1uVHlwZS5JRlJBTUVcbiAgICAgICkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddO1xuICAgICAgICBpZiAoY29sdW1uLmRpc3BsYXlUZXh0ICYmIGNvbHVtbi5kaXNwbGF5VGV4dC5pbmNsdWRlcygneycpKSB7XG4gICAgICAgICAgY29uc3QgZGlzcGxheVRleHQgPSBjb2x1bW4uZGlzcGxheVRleHRcbiAgICAgICAgICAgIC5yZXBsYWNlKCd7JywgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgnfScsICcnKTtcbiAgICAgICAgICBpZiAoZGlzcGxheVRleHQgJiYgZmllbGQpIHtcbiAgICAgICAgICAgIGZpZWxkLmRpc3BsYXlUZXh0ID0gcm93W2Rpc3BsYXlUZXh0LnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZGlzcGxheVRleHQgJiYgZmllbGQpIHtcbiAgICAgICAgICBmaWVsZC5kaXNwbGF5VGV4dCA9IGNvbHVtbi5kaXNwbGF5VGV4dDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0TnVtZXJpY01pbk14RnJhY3Rpb24oY29sdW1uOiBhbnkpIHtcbiAgICBsZXQgZGlnaXRJbmZvID0gJzInO1xuICAgIGlmIChjb2x1bW4/LmZvcm1hdC50eXBlID09PSAncGVyY2VudCcgJiYgIWNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm8pIHtcbiAgICAgIGRpZ2l0SW5mbyA9ICcwJ1xuICAgIH0gZWxzZSBpZiAoY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbykge1xuICAgICAgZGlnaXRJbmZvID0gY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMuZGlnaXRzSW5mbztcbiAgICB9XG4gICAgcmV0dXJuIGRpZ2l0SW5mbztcbiAgfVxuXG4gIC8vIHNldCB0aGUgZm9ybWF0IG9mIGN1cnJlbmN5ICYmIG51bWJlciAmJiBkZWNpbWFsICYmIHBlcmNlbnRcbiAgc2V0TnVtZXJpY0Zvcm1hdChjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcbiAgICByb3cgPSBvYmpDb252ZXJ0VG9Mb3dlcihyb3cpO1xuICAgIGxldCB2YWx1ZTogYW55ID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0XG4gICAgICA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgOiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgID8gcm93W3Jvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXG4gICAgICAgIDogcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgPyByb3dbY29sdW1uLmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXVxuICAgICAgICAgIDogKHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy50ZXh0IHx8IHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy50ZXh0ID09PSAwIHx8IHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy50ZXh0ID09PSBudWxsKVxuICAgICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8udGV4dCA6IHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldO1xuICAgIGlmICh0aGlzLnR5cGVPZih2YWx1ZSkgPT09ICdudW1iZXInICYmIHZhbHVlID09PSAwKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIGxldCBmb3JtYXRQYXJhbXMgPSBjb2x1bW4uZm9ybWF0Py5mb3JtYXRQYXJhbXM7XG4gICAgbGV0IGRpZ2l0c0luZm8gPSBmb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XG4gICAgaWYgKGNvbHVtbi5mb3JtYXQgJiYgdmFsdWUpIHtcbiAgICAgIHN3aXRjaCAoY29sdW1uLmZvcm1hdD8udHlwZSkge1xuICAgICAgICBjYXNlIEVHcmlkRm9ybWF0VHlwZS5DVVJSRU5DWTpcbiAgICAgICAgICB2YWx1ZSA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChcbiAgICAgICAgICAgIGZvcm1hdFBhcmFtcz8ubG9jYWxlID8gZm9ybWF0UGFyYW1zLmxvY2FsZSA6ICdlbi1VUycsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0eWxlOiAnY3VycmVuY3knLFxuICAgICAgICAgICAgICBjdXJyZW5jeTogZm9ybWF0UGFyYW1zPy5jdXJyZW5jeSA/IGZvcm1hdFBhcmFtcy5jdXJyZW5jeSA6ICdVU0QnLFxuICAgICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IGRpZ2l0c0luZm8gPyBkaWdpdHNJbmZvIDogJzInLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk/LmZvcm1hdCh2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLkRFQ0lNQUw6XG4gICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKS50b0ZpeGVkKGRpZ2l0c0luZm8gPyBkaWdpdHNJbmZvIDogJzInKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuUEVSQ0VOVDpcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlICsgJyUnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvL0NoYW5nZSBkcm9wZG93biB2bHVlIGJhc2VkIG9uIG9wdGlvbiBsYWJlbCBhbmQgb3B0aW9udmFsdWVcbiAgc2V0RHJvcGRvd25WYWx1ZShjb2x1bW46IElHcmlkQ29sdW1uLCBzZWxlY3RlZFJvdz86IGFueSwgY2hhbmdlPzogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLnJvd3NEYXRhICYmIHRoaXMucm93c0RhdGEubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJvdyk/LmZpbmQoKGtleSkgPT4ga2V5ID09PSBjb2x1bW4uZmllbGQpKSB7XG4gICAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgICAgY29sdW1uLm9wdGlvbkxhYmVsID0gY29sdW1uLm9wdGlvbkxhYmVsXG4gICAgICAgICAgICAgID8gY29sdW1uLm9wdGlvbkxhYmVsXG4gICAgICAgICAgICAgIDogJ2xhYmVsJztcbiAgICAgICAgICAgIGNvbHVtbi5vcHRpb25WYWx1ZSA9IGNvbHVtbi5vcHRpb25WYWx1ZVxuICAgICAgICAgICAgICA/IGNvbHVtbi5vcHRpb25WYWx1ZVxuICAgICAgICAgICAgICA6ICd2YWx1ZSc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHZhbHVlID0gY29sdW1uLmRhdGE/LmZpbmQoXG4gICAgICAgICAgICAocmVjb3JkOiBhbnkpID0+XG4gICAgICAgICAgICAgIHJlY29yZFtjb2x1bW4ub3B0aW9uVmFsdWVdPy50b1N0cmluZygpID09PVxuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgZWRpdGVkUm93ID0gc2VsZWN0ZWRSb3cgJiYgT2JqZWN0LmtleXMoc2VsZWN0ZWRSb3cpLmxlbmd0aCA+IDAgPyBzZWxlY3RlZFJvd1t0aGlzLmRhdGFLZXldID09PSByb3dbdGhpcy5kYXRhS2V5XSA6IGZhbHNlO1xuICAgICAgICAgIGlmICh2YWx1ZSAmJiBlZGl0ZWRSb3cpIHtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gdmFsdWVbY29sdW1uLm9wdGlvblZhbHVlXTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICYmIGNoYW5nZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gdmFsdWVbY29sdW1uLm9wdGlvbkxhYmVsXTtcbiAgICAgICAgICAgIGlmKHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXSl7XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXVsnb3B0aW9uVmFsdWUnXSA9IHZhbHVlW2NvbHVtbi5vcHRpb25WYWx1ZV07XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCsnX29iaiddID0ge29wdGlvblZhbHVlOiAgdmFsdWVbY29sdW1uLm9wdGlvblZhbHVlXX07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvL21hbmlwdWxhdGUgY2hlY2tib3ggc3RyaW5nIHZhbHVlIHRvIHRydWUgYW5kIGZhbHNlLlxuICBjaGFuZ2VDaGVja2JveFN0cmluZ1ZhbHVlKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuY29sdW1ucyAmJlxuICAgICAgdGhpcy5yb3dzRGF0YSAmJlxuICAgICAgdGhpcy5yb3dzRGF0YS5sZW5ndGggPiAwICYmXG4gICAgICB0aGlzLmNvbHVtbnMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmIHRoaXMuc2V0RHJvcGRvd25kYXRhVmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnNldERyb3Bkb3duVmFsdWUoY29sdW1uLCB7fSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICh0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGRdID09PSAnc3RyaW5nJykgJiZcbiAgICAgICAgICAgICAgICAocm93W2NvbHVtbi5maWVsZF0gPT09ICcxJyB8fCByb3dbY29sdW1uLmZpZWxkXSA9PT0gJzAnKSkgfHxcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPT09ICdZJyB8fFxuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ04nXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPVxuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID09PSAnMScgfHwgcm93W2NvbHVtbi5maWVsZF0gPT09ICdZJ1xuICAgICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHJvd0RhdGFcbiAgICogUGFzc2VzIGRhdGEgb2YgY2xpY2tlZCByb3cgdG8gcGFyZW50XG4gICAqL1xuICBoYW5kbGVSb3dDbGljayhyb3dEYXRhOiBhbnkpIHtcbiAgICB0aGlzLnJvd0NsaWNrRGF0YSA9IHJvd0RhdGE7XG4gICAgaWYgKCF0aGlzLmVkaXRBbGxSb3dzKSB7XG4gICAgICB0aGlzLm9uUm93Q2xpY2suZW1pdChyb3dEYXRhKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dSZWNvcmQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLy8gaW52b2tlIG9uUm93Q2xpY2sgZXZlbnQgd2hlbiBvbmx5IG9uZSByZWNvcmQgZXhpc3Q7XG4gIGRlZmF1bHRSb3dDbGljaygpe1xuICAgIGxldCBkaWFsb2dFeGlzdDogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncC1kaWFsb2cnKTtcbiAgICBpZih0aGlzLmNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgdGhpcy5yb3dzRGF0YSAmJiB0aGlzLnJvd3NEYXRhLmxlbmd0aCA9PT0gMSAmJiB0aGlzLm9uUm93Q2xpY2sub2JzZXJ2ZXJzPy5sZW5ndGggJiYgdGhpcy5ncmlkU2VydmljZS51c2VyU2VhcmNoZWQgJiYgZGlhbG9nRXhpc3QubGVuZ3RoKXtcbiAgICAgICAgdGhpcy5ncmlkU2VydmljZS51c2VyU2VhcmNoZWQ9IGZhbHNlO1xuICAgICAgICB0aGlzLmhhbmRsZVJvd0NsaWNrKHRoaXMucm93c0RhdGFbMF0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gY29sdW1uRGF0YVxuICAgKiBQYXNzZXMgc29ydGluZyBpbmZvcm1hdGlvbiB0byBwYXJlbnQgb24gc29ydCBjaGFuZ2VcbiAgICovXG4gIGhhbmRsZVNvcnRDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGxldCBzb3J0RGlyZWN0aW9uID0gbnVsbDtcbiAgICBsZXQgc29ydEZpZWxkOiBzdHJpbmcgPSAnJztcbiAgICBpZiAoZXZlbnQubXVsdGlzb3J0bWV0YSAmJiBldmVudC5tdWx0aXNvcnRtZXRhWzBdLm9yZGVyKSB7XG4gICAgICBzb3J0RGlyZWN0aW9uID1cbiAgICAgICAgZXZlbnQubXVsdGlzb3J0bWV0YVswXS5vcmRlciA9PSAxXG4gICAgICAgICAgPyBFR3JpZFNvcnREaXJlY3Rpb24uQVNDXG4gICAgICAgICAgOiBFR3JpZFNvcnREaXJlY3Rpb24uREVTQztcbiAgICAgIHNvcnRGaWVsZCA9IGV2ZW50Lm11bHRpc29ydG1ldGFbMF0uZmllbGQ7XG4gICAgfVxuICAgIGxldCBzb3J0czogSUdyaWRTb3J0ID0ge1xuICAgICAgZmllbGQ6IHNvcnRGaWVsZCxcbiAgICAgIGRpcmVjdGlvbjogc29ydERpcmVjdGlvbiBhcyBFR3JpZFNvcnREaXJlY3Rpb24sXG4gICAgICBwcmlvcml0eTogMCxcbiAgICB9O1xuICAgIHRoaXMub25Tb3J0Q2hhbmdlLmVtaXQoc29ydHMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBQYXNzZXMgYXBwbGllZCBmaWx0ZXJzIHRvIHBhcmVudCBvbiBmaWx0ZXIgY2hhbmdlXG4gICAqL1xuICBoYW5kbGVGaWx0ZXJDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChmaWx0ZXI6IGFueSkgPT4ge1xuICAgICAgaWYgKCFldmVudC5maWx0ZXJzW2ZpbHRlci5maWVsZF0/LnZhbHVlICYmICFmaWx0ZXIudmFsdWUpIHtcbiAgICAgICAgZmlsdGVyLnZhbHVlID0gJyc7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5vbkZpbHRlckNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgOiBFdmVudFxuICAgKiBAcGFyYW0gY29sdW1uQWN0aW9uIDogSUdyaWRDb2x1bW5BY3Rpb25cbiAgICogQHBhcmFtIHJvdyA6IGFueVxuICAgKiBTdG9wIHRoZSBjbGljayBldmVudCBwcm9wYWdhdGlvbiB0byBwYXJlbnRcbiAgICogQ2FsbGJhY2tzIHRoZSByb3cgZGF0YSB0byBwYXJlbnRcbiAgICovXG5cbiAgLyoqXG4gICAqIGludm9rZSBvbkNsaWNrIGV2ZW50ICYgb3BlbiBJZnJhbWUgaW4gZ3JpZFxuICAgKi9cbiAgZ3JpZElGcmFtZShjb2x1bW46IGFueSwgcm93czogYW55LCByb3c6IGFueSkge1xuICAgIHRoaXMub25DbGlja0V2ZW50KGNvbHVtbiwgcm93KTtcbiAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihJZnJhbWVDb21wb25lbnQsIHtcbiAgICAgIGhlYWRlcjogY29sdW1uLmhlYWRlcixcbiAgICAgIHdpZHRoOiAnODAlJyxcbiAgICAgIGhlaWdodDogJzgwJScsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHZhbHVlOiByb3dzLFxuICAgICAgICBpRnJhbWVJZDogY29sdW1uLmRpc3BsYXlUZXh0ID8gY29sdW1uLmRpc3BsYXlUZXh0IDogY29sdW1uLmZpZWxkLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLnNldER5bmFtaWNEaWFsb2dSZWYocmVmKTtcbiAgICBjb25zdCBjb21wb25lbnROYW1lID0gY29sdW1uLmNvbXBvbmVudD8ubmFtZTtcbiAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgdGhpcy5wYWdlTG9nZ2VyU2VydmljZS5zYXZlUGFnZUxvZ2dlckluZm8odGhpcy5yb3V0ZXIudXJsPy5zdWJzdHJpbmcoMSksIGNvbXBvbmVudE5hbWUpO1xuICAgIH1cbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgIC5waXBlKHRha2UoMSkpIC8vIEVtaXQgb25seSBvbmNlIHdoZW4gdGhlIHpvbmUgYmVjb21lcyBzdGFibGVcbiAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGRyYWdnYWJsZURpYWxvZyhjb2x1bW4/LmZpZWxkID8gY29sdW1uPy5maWVsZCA6IGNvbHVtbj8uaGVhZGVyKVxuICAgIH0pO1xuICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICBpZiAocmVzICYmIGNvbHVtbi5vblJldHVybikge1xuICAgICAgICBjb2x1bW4ub25SZXR1cm4ocmVzKTtcbiAgICAgIH0gZWxzZSBpZiAocmVzICYmIGNvbHVtbi5vbkNoYW5nZSkge1xuICAgICAgICBjb2x1bW4ub25DaGFuZ2UocmVzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFkZE5ld1Jvdyhyb3c6IGFueSwgYWRkUm93OiBib29sZWFuID0gZmFsc2UpIHtcbiAgIHRoaXMucmVmcmVzaEdyaWRUZXJtaW5hdG9yKClcbiAgIHRoaXMuY29tcG9uZW50VGFibGVSZWYgPSB0aGlzLnRhYmxlO1xuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgY29sdW1uLmZpbHRlciAmJlxuICAgICAgICBjb2x1bW4uY29tcG9uZW50ICYmXG4gICAgICAgIGNvbHVtbi5maWx0ZXIudHlwZSA9PT0gJ2NhbGVuZGFyJ1xuICAgICAgKSB7XG4gICAgICAgIGlmIChhZGRSb3cpIHtcbiAgICAgICAgICB0aGlzLnJvd3NEYXRhWzBdW2NvbHVtbi5maWVsZCArICdfc2Vjb25kVHlwZSddID0gRUdyaWRDb2x1bW5UeXBlLkRBVEU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfc2Vjb25kVHlwZSddID0gRUdyaWRDb2x1bW5UeXBlLkRBVEU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjb2x1bW4uYWdncmVnYXRlICYmIGNvbHVtbi5hZ2dyZWdhdGUubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmFnZ3JlZ2F0ZUZvb3RlciA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0QWdncmVnYXRlVGV4dChjb2x1bW4pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucm93Q2xpY2tEYXRhID0gcm93O1xuICAgIHRoaXMuYWRkTmV3Um93Q2hlY2sgPSB0cnVlO1xuICAgIHRoaXMuZHJvcGRvd25JbnB1dCA9IGZhbHNlO1xuICAgIHRoaXMuc29ydERpc2FibGVkID0gdHJ1ZTtcbiAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICB0aGlzLm9uR3JpZFJvd0FkZC5lbWl0KHJvdyk7XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBEaWFsb2cgaW4gZ3JpZFxuICAgKi9cbiAgb3BlbkdyaWREaWFsb2coY29sdW1uOiBJR3JpZENvbHVtbiB8IGFueSwgcm93OiBhbnksIGV2ZW50PzogYW55KSB7XG4gICAgY29uc3QgZGF0YVBhcmFtcyA9IGNvbHVtbi5kYXRhPy5kYXRhID8gY29sdW1uLmRhdGE/LmRhdGEgOiB7fTtcbiAgICBpZiAoKGV2ZW50ICYmIGV2ZW50LmN0cmxLZXkpIHx8IGNvbHVtbi5vcGVuSW5OZXdUYWIpIHtcbiAgICAgIHRoaXMuaHlwZXJsaW5rU2VydmljZS5vcGVuRGlhbG9nSW5OZXdUYWIoY29sdW1uLmNvbXBvbmVudCwgZGF0YVBhcmFtcywgcm93KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLm9wZW5Db21wb25lbnRJbkRpYWxvZyhjb2x1bW4sIHJvdyk7XG4gICAgfVxuICB9XG5cbiAgb3BlbkNvbXBvbmVudEluRGlhbG9nKGNvbHVtbjogSUdyaWRDb2x1bW4gfCBhbnksIHJvdzogYW55KSB7XG4gICAgdmFyIGlzRGlzYWJsZWQgPSBjb2x1bW4uZGlzYWJsZWRcbiAgICAgID8gdHJ1ZVxuICAgICAgOiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzYWJsZWRcbiAgICAgICAgPyB0cnVlXG4gICAgICAgIDogZmFsc2U7XG4gICAgdGhpcy5vbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpO1xuICAgICAgbGV0IGRhdGE6IGFueSA9IHt9O1xuICAgICAgZGF0YSA9IHsgLi4uY29sdW1uPy5kYXRhIH07XG4gICAgICB0aGlzLnJvd0NsaWNrRGF0YSA9IHJvdztcbiAgICAgIGlmIChkYXRhICYmIGRhdGEuZGF0YSAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8ubWF0Y2hEYXRhKSB7XG4gICAgICAgIGRhdGEuZGF0YSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaWFsb2dEYXRhPy5kYXRhID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpYWxvZ0RhdGEuZGF0YSA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaWFsb2dEYXRhO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29sdW1uLmNvbXBvbmVudCAmJiB0aGlzLnJvd0NsaWNrRGF0YSAmJiAhaXNEaXNhYmxlZCkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIGRhdGEuZGF0YSA9IGF1dG9TZXRMb29rdXBEYXRhKFxuICAgICAgICAgICAgZGF0YS5kYXRhLFxuICAgICAgICAgICAgdGhpcy5yb3dDbGlja0RhdGFcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEgPSB7Li4uZGF0YSwgaGVpZ2h0OiBkYXRhLmhlaWdodCA/IGRhdGEuaGVpZ2h0IDogJzkwdmgnfTtcbiAgICAgICAgY29uc3Qgb2JqRmllbGQgPSBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyBcIl9vYmpcIjtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3Blbihyb3dbb2JqRmllbGRdICYmIHJvd1tvYmpGaWVsZF0/LmNvbXBvbmVudCA/IHJvd1tvYmpGaWVsZF0/LmNvbXBvbmVudCA6IGNvbHVtbi5jb21wb25lbnQsIGRhdGEpO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kaWFsb2dSZWZbJ2RpYWxvZ0Nsb3NlJ10gPSB0aGlzLmRpYWxvZ1JlZi5jbG9zZTtcbiAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSA9IHRoaXMuaW50ZXJjZXB0RGlhbG9nQ2xvc2UuYmluZCh0aGlzKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgLy8gICB0aGlzLmRpYWxvZ1JlZlsnZGlhbG9nQ2xvc2UnXSA9IHRoaXMuZGlhbG9nUmVmLmNsb3NlO1xuICAgICAgICAvLyAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlID0gdGhpcy5pbnRlcmNlcHREaWFsb2dDbG9zZS5iaW5kKHRoaXMpO1xuICAgICAgICAvLyB9LCA4MDApO1xuXG4gICAgICAgIHRoaXMuc2V0RHluYW1pY0RpYWxvZ1JlZih0aGlzLmRpYWxvZ1JlZik7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBjb2x1bW4uY29tcG9uZW50Py5uYW1lO1xuICAgICAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgICAgIHRoaXMucGFnZUxvZ2dlclNlcnZpY2Uuc2F2ZVBhZ2VMb2dnZXJJbmZvKHRoaXMucm91dGVyLnVybD8uc3Vic3RyaW5nKDEpLCBjb21wb25lbnROYW1lKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgICAgIC5waXBlKHRha2UoMSkpIC8vIEVtaXQgb25seSBvbmNlIHdoZW4gdGhlIHpvbmUgYmVjb21lcyBzdGFibGVcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGRyYWdnYWJsZURpYWxvZyhjb2x1bW4/LmZpZWxkID8gY29sdW1uPy5maWVsZCA6IGNvbHVtbj8uaGVhZGVyKVxuICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGEgJiYgY29sdW1uLm9uUmV0dXJuKSB7XG4gICAgICAgICAgICBjb2x1bW4ub25SZXR1cm4oZGF0YSwgdGhpcy5yb3dDbGlja0RhdGEpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5icm93c2VyQ2xvc2VFdmVudCh0cnVlKTtcbiAgICAgICAgICAgIGlmIChjb2x1bW4ub25DaGFuZ2UpIHtcbiAgICAgICAgICAgICAgY29sdW1uLm9uQ2hhbmdlKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gIH1cblxuICBicm93c2VyQ2xvc2VFdmVudChldmVudDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0ID0gZXZlbnQ7XG4gIH1cblxuICBzZXRNdWx0aVNlbGVjdERhdGEoY29sdW1uOiBJR3JpZENvbHVtbiwgc2VsZWN0ZWRWYWx1ZTogYW55KSB7XG4gICAgaWYgKHNlbGVjdGVkVmFsdWUgJiYgY29sdW1uLnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUKSB7XG4gICAgICBpZiAoc2VsZWN0ZWRWYWx1ZSAmJiBzZWxlY3RlZFZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnLCcpKSB7XG4gICAgICAgIHNlbGVjdGVkVmFsdWUgPSBzZWxlY3RlZFZhbHVlPy50b1N0cmluZygpPy5zcGxpdCgnLCcpPy5tYXAoKHZhbHVlKSA9PiBjb2x1bW4uZGF0YT8uZmluZCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWU/LnRvU3RyaW5nKCkgPT09IHZhbHVlPy50b1N0cmluZygpKT8ubGFiZWwpPy50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZWN0ZWRWYWx1ZSA9IGNvbHVtbi5kYXRhPy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZT8udG9TdHJpbmcoKSA9PT0gc2VsZWN0ZWRWYWx1ZT8udG9TdHJpbmcoKSk/LmxhYmVsO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2VsZWN0ZWRWYWx1ZTtcbiAgfVxuXG4gIHNldFRleHRCb3hSZWFkT25seVZhbHVlKHJvdzogYW55LCBjb2x1bW46IGFueSkge1xuICAgIGxldCB2YWx1ZTogYW55O1xuICAgIGlmIChjb2x1bW4uZGlzcGxheVRleHQpIHtcbiAgICAgIHZhbHVlID0gY29sdW1uLmRpc3BsYXlUZXh0O1xuICAgIH0gZWxzZSBpZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0KSB7XG4gICAgICB2YWx1ZSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dDtcbiAgICB9IGVsc2UgaWYgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQpIHtcbiAgICAgIHZhbHVlID0gcm93W3Jvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldO1xuICAgIH0gZWxzZSBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCkge1xuICAgICAgdmFsdWUgPSByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm4gY29uZGl0aW9uYWwgYmFzZSB2YWx1ZSBhbmQgdGl0bGVcbiAgICovXG4gIHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3c6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICBkZWxldGUgcm93Wyd1bmRlZmluZWQnXTtcbiAgICBsZXQgdmFsdWU6IGFueTtcbiAgICBpZiAoY29sdW1uLnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpIHtcbiAgICAgIGxldCBuZXdWYWx1ZTogYW55O1xuICAgICAgaWYgKHR5cGVvZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10pID09PSBcIm9iamVjdFwiICYmIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0XG4gICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHRcbiAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgID8gcm93W3Jvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy50ZXh0XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdWYWx1ZSA9IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3VmFsdWUpIHtcbiAgICAgICAgaWYgKGNvbHVtbi50aW1lT25seSkge1xuICAgICAgICAgIHZhbHVlID0gdGhpcy5zZXRUaW1lRm9ybWF0KG5ld1ZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgZm9ybWF0ID0gdGhpcy5zZXRGb3JtYXQoY29sdW1uKTtcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKG5ld1ZhbHVlPy50b1N0cmluZygpID09PSBcIkludmFsaWQgRGF0ZVwiID8gbnVsbCA6IG5ld1ZhbHVlLCBmb3JtYXQgPyBmb3JtYXQgOiBjb2x1bW4uc2hvd1RpbWUgPyBcIk1NL2RkL1lZWVksIGg6bW0gYVwiIDogXCJNTS9kZC9ZWVlZXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID1cbiAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0XG4gICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZm9ybWF0ID8gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQsIHRoaXMuc2V0Rm9ybWF0KGNvbHVtbikpIDpcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgICAgIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgPyByb3dbcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgIDogcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICAgIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gJiZcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dCA9PT0gbnVsbCAmJiBjb2x1bW4udHlwZSAhPT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPR1xuICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgY29sdW1uPy5maWx0ZXI/LnR5cGUgPT09ICdjYWxlbmRhcicgJiYgY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRElBTE9HID9cbiAgICAgICAgICAgICAgICAgICAgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ0FNJykgfHwgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQudG9TdHJpbmcoKS5pbmNsdWRlcygnUE0nKSkgP1xuICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0IDogdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQsICdoaDptbSBhJylcbiAgICAgICAgICAgICAgICAgICAgOiBjb2x1bW4uZm9ybWF0ID8gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQsIHRoaXMuc2V0Rm9ybWF0KGNvbHVtbikpIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgIDogY29sdW1uLmZvcm1hdCA/IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGRdLCB0aGlzLnNldEZvcm1hdChjb2x1bW4pKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgICAgID8gY29sdW1uLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgOiBjb2x1bW4uaWNvbiA/IGNvbHVtbi5oZWFkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBzZXRGb3JtYXQoY29sdW1uKSB7XG4gICAgbGV0IGZvcm1hdCA9ICcnO1xuICAgIGlmIChjb2x1bW4/LmZvcm1hdCkge1xuICAgICAgY29sdW1uLmZvcm1hdCA9IGNvbHVtbi5mb3JtYXQ/LnR5cGUgPyBjb2x1bW4uZm9ybWF0LnR5cGUgOiBjb2x1bW4uZm9ybWF0O1xuICAgICAgc3dpdGNoIChjb2x1bW4uZm9ybWF0KSB7XG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLlNNQUxMREFURToge1xuICAgICAgICAgIGZvcm1hdCA9ICdNTS9kZC95eSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuU0hPUlREQVRFOiB7XG4gICAgICAgICAgZm9ybWF0ID0gJ01NL2RkL3l5eXknO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLk1FRElVTURBVEU6IHtcbiAgICAgICAgICBmb3JtYXQgPSAnTSBkLCB5eSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuTE9OR0RBVEU6IHtcbiAgICAgICAgICBmb3JtYXQgPSAnTU0vZGQvWVksIGg6bW0gYSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuUEVSSU9EOiB7XG4gICAgICAgICAgZm9ybWF0ID0gJ01NL3l5JztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgZm9ybWF0ID0gY29sdW1uLmZvcm1hdDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZm9ybWF0XG4gIH1cblxuICBzZXREcm9wZHdvblJlYWRPbmx5VmFsdWUocm93OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgZGVsZXRlIHJvd1sndW5kZWZpbmVkJ107XG4gICAgY29uc3QgdmFsdWUgPSByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF1cbiAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdXG4gICAgICA6IGNvbHVtbi5kYXRhPy5maW5kKGRyb3Bkb3duVmFsID0+IGRyb3Bkb3duVmFsPy52YWx1ZSA9PSByb3dbY29sdW1uLmZpZWxkXSlcbiAgICAgICAgPyBjb2x1bW4uZGF0YT8uZmluZChkcm9wZG93blZhbCA9PiBkcm9wZG93blZhbD8udmFsdWUgPT0gcm93W2NvbHVtbi5maWVsZF0pPy5sYWJlbFxuICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIG9wZW4gRGVsZXRlIENvbmZpcm1hdGlvbiBkaWFsb2cgd2hlbiBjbGljayBvbiBkZWxldGUgaWNvbiBpbiBBY3Rpb24gY29sdW1uXG4gICAqL1xuICBoYW5kbGVBY3Rpb25DbGljayhldmVudDogRXZlbnQsIGNvbHVtbkFjdGlvbjogSUdyaWRDb2x1bW5BY3Rpb24sIHJvdzogYW55KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKGNvbHVtbkFjdGlvbi50b29sdGlwLnRvTG93ZXJDYXNlKCkgPT09ICdkZWxldGUnKSB7XG4gICAgICBpZiAoY29sdW1uQWN0aW9uLmNvbmZpcm1EaWFsb2cgPT09IGZhbHNlKSB7XG4gICAgICAgIGNvbHVtbkFjdGlvbi5vbkNsaWNrKHJvdyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICAgICAgbWVzc2FnZTogJ0FyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHJlY29yZD8nLFxuICAgICAgICAgIGhlYWRlcjogJ0RlbGV0ZSBDb25maXJtYXRpb24nLFxuICAgICAgICAgIGljb246ICdwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZScsXG4gICAgICAgICAga2V5OiAnaGFuZGxlY29sdW1uQWN0aW9ucycsXG4gICAgICAgICAgYWNjZXB0OiAoKSA9PiB7XG4gICAgICAgICAgICBjb2x1bW5BY3Rpb24ub25DbGljayhyb3cpO1xuICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICByZWplY3Q6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jbG9zZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb2x1bW5BY3Rpb24ub25DbGljayhyb3cpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgOiBMYXp5TG9hZEV2ZW50XG4gICAqIFRyaWdnZXJzIGV2ZXJ5dGltZSBhIHNlcnZlciBzaWRlIGZpbHRlciBpcyB0cmlnZ2VyXG4gICAqL1xuICBoYW5kbGVTZXJ2ZXJTaWRlRXZlbnRzKGV2ZW50OiBhbnksIGR0OiBhbnkgPSAnJykge1xuICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5pc1NlcnZlclNpZGVFdmVudEluaXRhbFRyaWdnZXJlZCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0R3JpZElkKCk7XG4gICAgICAgICAgICB0aGlzLmdyaWRmaWx0ZXIgPSBldmVudDtcbiAgXG4gICAgICAgICAgICBpZiAoZHQ/LmVsPy5uYXRpdmVFbGVtZW50Py5pZCkge1xuICAgICAgICAgICAgICB0aGlzLmdyaWRJZCA9IGR0LmVsLm5hdGl2ZUVsZW1lbnQuaWQ7XG4gICAgICAgICAgICB9XG4gIFxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zICYmIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaCgoeDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmZpbHRlcnNbeC5maWVsZF0pIHtcbiAgICAgICAgICAgICAgICAgIGV2ZW50LmZpbHRlcnNbeC5maWVsZF0udmFsdWUgPSB4LnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5NVUxUSVNFTEVDVCA/IHguZmlsdGVyVmFsdWU/LnRvU3RyaW5nKCkgOiB4LmZpbHRlclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gIFxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdGhpcy5hdXRvTG9hZERhdGE7XG4gICAgICAgICAgICB0aGlzLnNlcnZlckZpbHRlcnMgPSB7XG4gICAgICAgICAgICAgIGZpbHRlcnM6IHRoaXMubG9va3VwRmlsdGVyc1xuICAgICAgICAgICAgICAgID8gdGhpcy5ncmlkU2VydmljZS5nZXRHcmlkRmlsdGVycyhldmVudCwgdGhpcy5zZWxlY3RlZENvbHVtbnMpXG4gICAgICAgICAgICAgICAgOiB0aGlzLmdyaWRTZXJ2aWNlLnByZXBhcmVCYXNpY0ZpbHRlcnMoZXZlbnQsIHRoaXMuc2VsZWN0ZWRDb2x1bW5zKSxcbiAgICAgICAgICAgICAgc29ydHM6IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0R3JpZFNvcnRzKGV2ZW50LCB0aGlzLnNlbGVjdGVkQ29sdW1ucyksXG4gICAgICAgICAgICAgIC4uLih0aGlzLnBhZ2luYXRpb24gJiYge1xuICAgICAgICAgICAgICAgIHBhZ2U6IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0R3JpZFBhZ2luYXRpb24oZXZlbnQpLFxuICAgICAgICAgICAgICAgIHBhZ2VTaXplOiBldmVudC5yb3dzIHx8IDEwLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH07XG4gIFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0aGlzLnNlcnZlckZpbHRlcnM/LmZpbHRlcnMgJiZcbiAgICAgICAgICAgICAgdGhpcy5zZXJ2ZXJGaWx0ZXJzPy5maWx0ZXJzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgKHRoaXMuYWxsb3dDYWNoaW5nIHx8IHRoaXMuc29mdENhY2hpbmcpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLnNvZnRDYWNoaW5nICYmIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ1NldEZpbHRlcnMtJyArIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsLCBKU09OLnN0cmluZ2lmeSh0aGlzLnNlcnZlckZpbHRlcnMpKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3RoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsXSA9IHRoaXMuc2VydmVyRmlsdGVycztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdID0ge307XG4gICAgICAgICAgICB9XG4gIFxuICAgICAgICAgICAgY29uc3Qgc2VydmVyRmlsdGVyVmFsdWVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNlcnZlckZpbHRlcnMpKTtcbiAgICAgICAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzID0gKHRoaXMuc2VydmVyRmlsdGVycy5maWx0ZXJzIHx8IFtdKS5jb25jYXQodGhpcy5nbG9iYWxEYXRhKTtcbiAgXG4gICAgICAgICAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5ncmlkU2VydmljZS5yb3dVcGRhdGUgPSBmYWxzZTtcbiAgXG4gICAgICAgICAgICBsZXQgY29udGFpbnNFbXB0eUZpZWxkID0gdHJ1ZTtcbiAgICAgICAgICAgIHdoaWxlIChjb250YWluc0VtcHR5RmllbGQpIHtcbiAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycy5maW5kSW5kZXgoKGZpbHRlcikgPT4gIWZpbHRlci5maWVsZCk7XG4gICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb250YWluc0VtcHR5RmllbGQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICBcbiAgICAgICAgICAgIHRoaXMub25TZXJ2ZXJTaWRlRXZlbnRDaGFuZ2UuZW1pdChzZXJ2ZXJGaWx0ZXJWYWx1ZXMpO1xuICAgICAgICAgICAgdGhpcy5pc1NlcnZlclNpZGVFdmVudEluaXRhbFRyaWdnZXJlZC5uZXh0KCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG4gIFxuXG5cbi8vc2V0IGdyaWQgaWQgb24gcGFnZSBsb2FkIGZvciBsb2FkIGNvbHVtbiB3aWR0aHNcbiAgc2V0Q2xhc3NhQW5kSWQoZHQ6YW55KXtcbiAgICBpZihkdD8uZWw/Lm5hdGl2ZUVsZW1lbnQ/LmlkKXtcbiAgICAgIHRoaXMuZ3JpZElkID0gZHQuZWwubmF0aXZlRWxlbWVudC5pZDtcbiAgICB9XG4gICAgaWYodGhpcy5ob3Jpem9udGFsU2Nyb2xsKXtcbiAgICAgIHJldHVybiB7J2hvcml6b250YWwtc2Nyb2xsJzp0cnVlfVxuICAgIH1lbHNle1xuICAgICAgcmV0dXJuIHsnaG9yaXpvbnRhbC1zY3JvbGwnOmZhbHNlfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICogUGFzc2VzIGFwcGxpZWQgcGFnaW5hdGlvbiB0byBwYXJlbnQgb24gcGFnZSBjaGFuZ2VcbiAgICovXG4gIGhhbmRsZVNlcnZlclNpZGVQYWdpbmF0aW9uKGV2ZW50OiBJR3JpZFBhZ2luYXRpb25FdmVudCkge1xuICAgIHRoaXMuZWRpdGluZ1Jvd0tleXMgPSB7fTtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gZXZlbnQuZmlyc3Q7XG4gICAgdGhpcy5QYWdlQ2hhbmdlID0gdHJ1ZTtcbiAgICB0aGlzLm9uUGFnZUNoYW5nZS5lbWl0KGV2ZW50KTtcblxuICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnVzZVNlcnZlclNpZGVFdmVudHMgJiYgdGhpcy5wYWdpbmF0aW9uICYmIHRoaXMuZGVmYXVsdFJvd3MgJiYgdGhpcy5lZGl0QWxsUm93cyAmJiB0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwICYmIHRoaXMuY29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuZWRpdEFsbFJvd3NBdE9uY2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBzZWxlY3RlZFJvdyhyb3c6IGFueSkge1xuICAgIHRoaXMub25Sb3dDaGVja0JveC5lbWl0KHJvdyk7XG4gIH1cblxuICAvLyBzZXQgdGltZSBmb3JtYXRcbiAgc2V0VGltZUZvcm1hdChkYXRlOiBhbnkpIHtcbiAgICBsZXQgdmFsdWU6IGFueSA9ICcnO1xuICAgIGlmICh0eXBlb2YgZGF0ZSA9PT0gJ251bWJlcicgfHwgKHR5cGVvZiBkYXRlID09PSAnc3RyaW5nJyAmJiAhaXNOYU4oTnVtYmVyKGRhdGUpKSkpIHtcbiAgICAgIGNvbnN0IG51bURhdGUgPSBOdW1iZXIoZGF0ZSk7XG4gICAgICBpZiAobnVtRGF0ZSA8IDAgfHwgbnVtRGF0ZSA+PSAwKVxuICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuXG4gICAgfVxuICAgIGVsc2UgaWYgKGRhdGU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ0FNJykgfHwgZGF0ZT8udG9TdHJpbmcoKS5pbmNsdWRlcygnUE0nKSkge1xuICAgICAgdmFsdWUgPSBkYXRlO1xuICAgIH1cbiAgICBlbHNlIGlmIChkYXRlPy50b1N0cmluZygpLmluY2x1ZGVzKCdhbScpIHx8IGRhdGU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3BtJykpIHtcbiAgICAgIHZhbHVlID0gZGF0ZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZGF0ZT8udG9TdHJpbmcoKS5pbmNsdWRlcygnOicpICYmICFkYXRlPy50b1N0cmluZygpLmluY2x1ZGVzKCdhbScpIHx8ICFkYXRlPy50b1N0cmluZygpLmluY2x1ZGVzKCdwbScpIHx8ICFkYXRlPy50b1N0cmluZygpLmluY2x1ZGVzKCdBTScpIHx8ICFkYXRlPy50b1N0cmluZygpLmluY2x1ZGVzKCdQTScpKSB7XG4gICAgICBjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gZGF0ZT8udG9TdHJpbmcoKT8uc3BsaXQoJzonKT8ubWFwKE51bWJlcik7XG4gICAgICBjb25zdCBwZXJpb2QgPSBob3VycyA+PSAxMiA/ICdQTScgOiAnQU0nO1xuICAgICAgY29uc3QgZm9ybWF0dGVkSG91cnMgPSBob3VycyAlIDEyIHx8IDEyO1xuICAgICAgcmV0dXJuIGAke2Zvcm1hdHRlZEhvdXJzfToke1N0cmluZyhtaW51dGVzKS5wYWRTdGFydCgyLCAnMCcpfSAke3BlcmlvZH1gO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgJ2hoOm1tIGEnKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLy9vcGVuIGh5cGVybGluayBpbiBlZGl0IGNhc2VcbiAgb3BlbkxpbmsodXJsOiBhbnkpIHtcbiAgICBpZiAodXJsKSB7XG4gICAgICBjb25zdCBsaW5rOiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICBsaW5rLmhyZWYgPSB1cmw7XG4gICAgICBsaW5rLnRhcmdldCA9ICdfYmxhbmsnO1xuICAgICAgbGluay5jbGljaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcm93XG4gICAqIFNldHMgdmFsdWVzIHRvIGVkaXRhYmxlIHJvd1xuICAgKiBSb3cncyBkYXRhIGlzIHByZXNldmVkIHRvIHByZXZlbnQgbXV0YXRpb25cbiAgICogUm93IGRhdGFLZXkgaXMgcHJlc2VydmVkIHRvIGtlZXAgdGhlIHJvdyB1bmlxdWUgYW5kIGluIGVkaXRhYmxlIHN0YXRlIGFzIGxvbmcgYXMgbm90IHNhdmVkXG4gICAqL1xuXG4gIHJlZnJlc2hHcmlkVGVybWluYXRvcigpIHtcbiAgICBpZiAodGhpcy5zZXRHcmlkUmVmcmVzaFRpbWUpIHtcbiAgICAgIHRoaXMucmVsb2FkUGFnZT8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBvblJvd0VkaXRJbml0KHJvdzogYW55KSB7XG4gICAgdGhpcy5yZWZyZXNoR3JpZFRlcm1pbmF0b3IoKVxuICAgIGxldCBzZWxlY3RlZFJvdyA9IHsgLi4ucm93IH07XG4gICAgT2JqZWN0LmVudHJpZXMoc2VsZWN0ZWRSb3cpLmZvckVhY2goKFtrZXksIHZhbHVlXTogYW55KSA9PiB7XG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc2V0RHJvcGRvd25GaWx0ZXIpIHtcbiAgICAgICAgICB0aGlzLnNldERyb3Bkb3duRmlsdGVyVmFsdWUoY29sLCByb3csIGtleSk7XG4gICAgICAgICAgdGhpcy5zZXREcm9wZG93bkZpbHRlciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNldCB0aGUgYXV0b0NvbXBsZXRlIFZhbHVlIGluIGVkaXQgbW9kZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUgJiZcbiAgICAgICAgICBjb2wuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGtleT8udG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICAgIHZhbHVlICYmXG4gICAgICAgICAgdmFsdWUubGVuZ3RoID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoY29sLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sLmZpZWxkXS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgcm93W2NvbC5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfdGVtcCddID0gcm93W2NvbC5kaXNwbGF5RmllbGRdO1xuICAgICAgICAgICAgICByb3dbY29sLmRpc3BsYXlGaWVsZF0gPSByb3dbY29sLmZpZWxkXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgbmV3VmFsdWUgPSB2YWx1ZS5tYXAoKHg6IGFueSkgPT4geFtjb2wuZGlzcGxheUZpZWxkXSk7XG4gICAgICAgICAgaWYgKG5ld1ZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnOycpKSB7XG4gICAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IG5ld1ZhbHVlXG4gICAgICAgICAgICAgID8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICA/LnJlcGxhY2VBbGwoJzsnLCAnLCcpXG4gICAgICAgICAgICAgID8uc3BsaXQoJywnKVxuICAgICAgICAgICAgICA/Lm1hcCgoeDogYW55KSA9PiAoeyBbY29sLmRpc3BsYXlGaWVsZCA/IGNvbC5kaXNwbGF5RmllbGQgOiBjb2wuZmllbGRdOiB4LCBbY29sLmZpZWxkICsgJ190ZW1wJ106IHZhbHVlWzBdW2NvbC5maWVsZF0gfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOKSB7XG4gICAgICAgICAgbGV0IG9wdGlvbiA9IGNvbD8uZGF0YT8uZmluZChcbiAgICAgICAgICAgICh4OiBhbnkpID0+IHgubGFiZWwgPT09IHJvd1tjb2wuZmllbGRdPy50b1N0cmluZygpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IG9wdGlvbi52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTVVMVElTRUxFQ1QpIHtcbiAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IHRoaXMuc2V0TXVsdGlTZWxlY3RWYWx1ZShjb2wsIHJvdylcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBrZXk/LnRvTG93ZXJDYXNlKCkgJiZcbiAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEVcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHJvd1tjb2wuZmllbGRdICE9PSBudWxsICYmIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAocm93W2tleSArICdfb2JqJ10gJiYgT2JqZWN0LmtleXMocm93W2tleSArICdfb2JqJ10pPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHJvd1trZXkgKyAnX29iaiddLnRleHQgPSBuZXcgRGF0ZSh2YWx1ZSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W2tleV0gPSBuZXcgRGF0ZSh2YWx1ZSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNoZWNrIHRoZSBNaW51dGVzIHBhdHRlcm5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoY29sLnNob3dUaW1lIHx8IGNvbC50aW1lT25seSkgJiZcbiAgICAgICAgICAgIGNvbC5taW51dGVzSW50ZXJ2YWwgJiZcbiAgICAgICAgICAgIHJvd1trZXldXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByb3dba2V5XSA9IG5ldyBEYXRlKHNldE1pbnV0ZXNJbnRlcnZhbChyb3dba2V5XSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgJiZcbiAgICAgICAgICBjb2wuZmlsdGVyPy50eXBlID09PSAnY2FsZW5kYXInICYmXG4gICAgICAgICAgY29sLmZpZWxkLnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgcm93W2NvbC5maWVsZF0gPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTksgJiZcbiAgICAgICAgICBjb2wuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGtleT8udG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICAgIChjb2wuYWxsb3dTYXZlID09PSB0cnVlIHx8IGNvbC5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGNvbC5lZGl0TGluayA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcm93W2NvbC5maWVsZCArICdfb2JqJ10uaHlwZXJsaW5rID0gcm93W2NvbC5maWVsZCArICdfb2JqJ10/Lmh5cGVybGluaztcbiAgICAgICAgICAgIHJvd1tjb2wuZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0ID0gJyc7XG4gICAgICAgICAgfSBlbHNlIGlmIChjb2wuZWRpdExpbmsgPT09IGZhbHNlIHx8IGNvbC5lZGl0TGluayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByb3dba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmVkaXRSb3dzUmVjb3Jkc1tyb3dbdGhpcy5kYXRhS2V5XV0gPSB7IC4uLnJvdyB9O1xuICAgIHRoaXMuZWRpdGluZ1Jvd0tleXNbcm93W3RoaXMuZGF0YUtleV1dID0gdHJ1ZTtcbiAgICB0aGlzLmNoZWNrQWN0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLmRyb3Bkb3duSW5wdXQgPSB0cnVlO1xuICAgIHRoaXMucm93Q2xpY2tEYXRhID0gcm93O1xuICAgIHRoaXMuaW5FZGl0TW9kZSA9IHRydWU7XG4gICAgdGhpcy5yb3dVcGRhdGVDaGFuZ2UgPSBmYWxzZTtcbiAgICB0aGlzLmNhbmNlbEFsbFJlY29yZHMgPSBmYWxzZTtcbiAgICB0aGlzLnNhdmVBbGxSZWNvcmQgPSBmYWxzZTtcbiAgICB0aGlzLnNvcnREaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5ncmlkU2VydmljZS5yb3dVcGRhdGUgPSBmYWxzZTtcbiAgICB0aGlzLm9uR3JpZFJvd0VkaXQuZW1pdChyb3cpO1xuICB9XG5cbiAgdHlwZU9mKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldCBkcm9wZG93biBmaWx0ZXIgdmFsdWVcbiAgICovXG4gIHNldERyb3Bkb3duRmlsdGVyVmFsdWUoY29sOiBhbnksIHJvdzogYW55LCBrZXk6IHN0cmluZykge1xuICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmIGNvbC5kcm9wRG93blByb3ApIHtcbiAgICAgIGlmIChPYmplY3QudmFsdWVzKGNvbCkuc29tZSgodmFsdWUpID0+IHZhbHVlID09IGtleSkpIHtcbiAgICAgICAgbGV0IG9iaiA9IGNvbC5kcm9wRG93blByb3A7XG4gICAgICAgIGxldCBuZXdGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICAgICAgaWYgKG9iai5maWx0ZXJzICYmIG9iai5maWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBvYmouZmlsdGVycy5mb3JFYWNoKChmaWx0ZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgbGV0IG5ld0ZpbHRlciA9IHsgLi4uZmlsdGVyIH07XG4gICAgICAgICAgICBsZXQgZmlsdGVyS2V5ID0gT2JqZWN0LmtleXMocm93KS5maW5kKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgbGV0IG1hdGNoS2V5OiBzdHJpbmcgPSAnJztcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZT8uaW5jbHVkZXMoJ3snKSAmJlxuICAgICAgICAgICAgICAgIGtleS50b0xvd2VyQ2FzZSgpID09PVxuICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZVxuICAgICAgICAgICAgICAgICAgPy50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICA/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCd7JywgJycpXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZSgnfScsICcnKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBtYXRjaEtleSA9IGtleTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hLZXk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJLZXkpIHtcbiAgICAgICAgICAgICAgbmV3RmlsdGVyLnZhbHVlID0gcm93W2ZpbHRlcktleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXdGaWx0ZXJzLnB1c2gobmV3RmlsdGVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc2V0RHJvcGRvd25EYXRhKFxuICAgICAgICAgIGNvbCxcbiAgICAgICAgICBvYmoudW5pcXVlS2V5LFxuICAgICAgICAgIG9iai52YWx1ZVByb3AsXG4gICAgICAgICAgb2JqLmxhYmVsUHJvcCxcbiAgICAgICAgICBuZXdGaWx0ZXJzLFxuICAgICAgICAgIHJvd1xuICAgICAgICApO1xuXG4gICAgICAgIGxldCBvcHRpb24gPSBjb2wuZGF0YS5maW5kKFxuICAgICAgICAgICh4OiBhbnkpID0+IHgubGFiZWwgPT09IHJvd1tjb2wuZmllbGRdPy50b1N0cmluZygpXG4gICAgICAgICk7XG4gICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IG9wdGlvbi52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcm93XG4gICAqIFBhc3NlcyB0aGUgZWRpdGVkIG9yIG5ld2x5IGNyZWF0ZWQgZGF0YSB0byBwYXJlbnRcbiAgICogSW4gY2FzZSBvZiBuZXdseSBjcmVhdGVkIGRhdGEsIGRhdGFLZXkgYW5kIGlzTmV3IHByb3AgaXMgcmVtb3ZlZFxuICAgKi9cbiAgb25Sb3dFZGl0U2F2ZShzZWxlY3RlZFJvdzogYW55KSB7XG4gICAgdGhpcy50ZW1wU2F2ZWRSb3cgPSBbXTtcbiAgICBsZXQgYXV0b21Db21wbGV0ZVRlbXBEYXRhID0gW107XG4gICAgbGV0IGxvb2t1cEluZm86IGFueSA9IHt9O1xuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICBkZWxldGUgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkICsgJy1kYXRhJ107XG4gICAgICBkZWxldGUgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkICsgJ19zZWNvbmRUeXBlJ107XG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmXG4gICAgICAgIChjb2x1bW4uYWxsb3dTYXZlID09PSB0cnVlIHx8IGNvbHVtbi5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZClcbiAgICAgICkge1xuICAgICAgICBpZiAodHlwZW9mIChzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQpIHtcbiAgICAgICAgICBsb29rdXBJbmZvW2NvbHVtbi5maWVsZF0gPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLnRleHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIpIHtcbiAgICAgICAgbGV0IHZhbHVlOiBhbnkgPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlciA9PT0gJ2NoYXInKSB7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSA9PT0gdHJ1ZSA/ICdZJyA6ICdOJztcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSAnbnVtZXJpYycpIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlID09PSB0cnVlID8gJzEnIDogJzAnO1xuICAgICAgICB9XG4gICAgICAgIHNlbGVjdGVkUm93ID0geyAuLi5zZWxlY3RlZFJvdywgW2NvbHVtbi5maWVsZF06IHZhbHVlIH07XG4gICAgICB9XG5cbiAgICAgIC8vY29udmVydCBkcm9wRG93biBvcHRpb25MYWJlbCBpbnRvIG9wdGlvblZhbHVlXG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiYgY29sdW1uLmRhdGE/Lmxlbmd0aCA+IDBcbiAgICAgICkge1xuICAgICAgICBjb25zdCBvcHRpb25MYWJlbCA9IGNvbHVtbi5kYXRhLmZpbmQoKHJlY29yZCkgPT4gcmVjb3JkWydsYWJlbCddPy50b0xvd2VyQ2FzZSgpID09PSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaWYgKG9wdGlvbkxhYmVsPy52YWx1ZSkge1xuICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBvcHRpb25MYWJlbC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvL2NvbnZlcnQgZGF0ZSBpbnRvIHRpbWUgZm9ybWF0XG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURVxuICAgICAgKSB7IFxuICAgICAgICBpZiAoY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi5zYXZlQXNTdHJpbmcgJiYgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSkge1xuICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdLCAnaGg6bW0gYScpO1xuICAgICAgICB9ZWxzZSBpZiAoY29sdW1uLnRpbWVPbmx5ICYmICFjb2x1bW4uc2F2ZUFzU3RyaW5nICYmIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0pIHtcbiAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSwgJ3l5eXktTU0tZGQgSEg6bW06c3MnKTtcbiAgICAgICAgfSBlbHNlIGlmICghY29sdW1uLnRpbWVPbmx5ICYmIChjb2x1bW4uc2hvd1RpbWUgfHwgY29sdW1uLmZvcm1hdCA9PT0gRUdyaWRGb3JtYXRUeXBlLkxPTkdEQVRFKSkge1xuICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdLCAneXl5eS1NTS1kZCBISDptbTpzcycpO1xuICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gJiYgIWNvbHVtbi50aW1lT25seSkge1xuICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBuZXcgRGF0ZShzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdKT8udG9Mb2NhbGVEYXRlU3RyaW5nKFwiZW4tVVNcIilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gaWYgYWxsb3dDYWxjdWxhdGU9dHJ1ZSwgZGl2aWRlIHRoZSBwZXJjZW50IGJ5IDEwMFxuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTlVNRVJJQykge1xuICAgICAgICBpZiAodGhpcy5udW1lcmljVmFsdWUpIHtcbiAgICAgICAgICB0aGlzLm51bWVyaWNWYWx1ZSA9IHt9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlnaXRzSW5mbyA9IGNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XG4gICAgICAgIGlmIChjb2x1bW4uZm9ybWF0Py50eXBlID09PSAncGVyY2VudCcpIHtcbiAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5hbGxvd0NhbGN1bGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgY2FsY3VsYXRlZFZhbHVlID0gc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJy4nKSA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBjYWxjdWxhdGVkVmFsdWUgPyBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdIDogc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSAvIDEwMDtcbiAgICAgICAgICAgIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBwYXJzZUZsb2F0KChzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdIC8gMTAwKT8udG9TdHJpbmcoKSkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvL2NvbnZlcnQgbXVsdGlzZWxlY3QgYXJyYXkgaW50byBzdHJpbmdcbiAgICAgIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5NVUxUSVNFTEVDVCAmJiBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdXG4gICAgICApIHtcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNhdmluZyBBdXRvQ29tcGxldGUgRGF0YVxuICAgICAgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURSAmJlxuICAgICAgICBjb2x1bW4uZGlzcGxheUZpZWxkICYmXG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/Lmxlbmd0aCA+IDBcbiAgICAgICkge1xuICAgICAgICBhdXRvbUNvbXBsZXRlVGVtcERhdGEgPSBbLi4uc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXV07XG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy5tYXAoKHJvdykgPT4gY29sdW1uPy5vcHRpb25WYWx1ZSAmJiByb3dbY29sdW1uLm9wdGlvblZhbHVlPy50b0xvd2VyQ2FzZSgpXSA/XG4gICAgICAgICAgcm93W2NvbHVtbi5vcHRpb25WYWx1ZT8udG9Mb3dlckNhc2UoKV0gOiByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXSk/LnRvU3RyaW5nKCk/LnJlcGxhY2VBbGwoJywnLCAnOycpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbGV0IHJvdzogYW55ID0geyAuLi5zZWxlY3RlZFJvdyB9O1xuICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMocm93KTtcbiAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKGtleS5pbmNsdWRlcygnX29iaicpKSB7XG4gICAgICAgIGxldCBvYmo6IGFueSA9IHJvd1trZXldXG4gICAgICAgIGlmICh0aGlzLmNoZWNrQWN0aW9uID09PSBmYWxzZSAmJiBvYmo/LnR5cGUgJiYgKG9iai50eXBlID09PSAnbGluaycgfHwgb2JqLnR5cGUgPT09ICdpZnJhbWUnIHx8IG9iai50eXBlID09PSAnZGlhbG9nJykpIHtcbiAgICAgICAgICByb3cgPSB7IC4uLnJvdywgW2tleS5zcGxpdCgnXycpWzBdXTogcm93W2tleV0uZGlzcGxheVRleHQgfTtcbiAgICAgICAgICB0aGlzLmNoZWNrQWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob2JqICYmIChvYmoudHlwZSA9PT0gJ2xpbmsnIHx8IG9iai50eXBlID09PSAnaWZyYW1lJyB8fCBvYmoudHlwZSA9PT0gJ2RpYWxvZycpKSB7XG4gICAgICAgICAgaWYgKCFvYmouZGlzcGxheVRleHQgJiYgb2JqLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09IGtleS5zcGxpdCgnXycpWzBdPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBvYmouZGlzcGxheVRleHQgPSByb3dba2V5LnNwbGl0KCdfJylbMF1dXG4gICAgICAgICAgfVxuICAgICAgICAgIHJvdyA9IHsgLi4ucm93LCBba2V5LnNwbGl0KCdfJylbMF1dOiByb3dba2V5XS5kaXNwbGF5VGV4dCB9O1xuICAgICAgICAgIGRlbGV0ZSByb3dba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIC8qKlxuICAgICAqIGp1c3QgZW1pdCB0aG9zZSBmaWVsZHMgd2hvIGV4aXN0IGluIHRoZSB0YWJsZVxuICAgICAqL1xuICAgIHJvdyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0Um93VmFsdWUocm93KTtcbiAgICAvL29uc29sZS5sb2coJ3JvdyBpbiBzYXZlJywgcm93KVxuICAgIGxldCBvYmo6IGFueSA9IHt9O1xuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAoY29sdW1uLmFsbG93U2F2ZSA9PT0gdHJ1ZSB8fCBjb2x1bW4uYWxsb3dTYXZlID09PSB1bmRlZmluZWQgfHwgdGhpcy5zYXZlQWxsRGF0YSlcbiAgICAgICkge1xuICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgJiZcbiAgICAgICAgICBjb2x1bW4uZmlsdGVyPy50eXBlID09PSAnY2FsZW5kYXInXG4gICAgICAgICkge1xuICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oXG4gICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSxcbiAgICAgICAgICAgICd5eXl5LU1NLWRkVDAwOjAwOjAwLjAwMFonXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vU2V0IERlY2ltYWwgRnJhY3Rpb24gVmFsdWVcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbHVtbi5mb3JtYXQgJiZcbiAgICAgICAgICBjb2x1bW4uZm9ybWF0LnR5cGUgPT09IEVGb3JtYXRUeXBlLkRFQ0lNQUwgJiZcbiAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSAmJlxuICAgICAgICAgICFyb3dbY29sdW1uLmZpZWxkXS50b1N0cmluZygpLmluY2x1ZGVzKCcuJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgbGV0IGRpZ2l0c0luZm8gPSAnLjAwJztcbiAgICAgICAgICBsZXQgemVybyA9ICcwJztcbiAgICAgICAgICBjb25zdCBmb3JtYXRQYXJhbXMgPSBjb2x1bW4uZm9ybWF0Py5mb3JtYXRQYXJhbXM7XG4gICAgICAgICAgY29uc3QgZnJhY0RpZ2l0cyA9IGNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XG4gICAgICAgICAgaWYgKGZyYWNEaWdpdHMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZnJhY0RpZ2l0czsgaSsrKSB7XG4gICAgICAgICAgICAgIHplcm8gPSB6ZXJvICsgJzAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGlnaXRzSW5mbyA9ICcuJyArIHplcm87XG4gICAgICAgICAgfVxuICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF0gKyBkaWdpdHNJbmZvO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICByb3cuaXNOZXcgfHwgcm93LmlzbmV3ICYmXG4gICAgICAgIChjb2x1bW4uYWxsb3dTYXZlID09PSBmYWxzZSB8fCBjb2x1bW4uZWRpdGFibGUgPT09IGZhbHNlIHx8ICF0aGlzLnNhdmVBbGxEYXRhKVxuICAgICAgKSB7XG4gICAgICAgIGRlbGV0ZSByb3dbY29sdW1uLmZpZWxkXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBkZWxldGUgc2VsZWN0ZWRSb3dbJ3VuZGVmaW5lZCddO1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UuY2hlY2tWYWxpZGl0eSh0aGlzLmNvbHVtbnMsIHJvdyk7XG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuZ3JpZFZhbGlkYXRpb24odGhpcy5jb2x1bW5zLCByb3cpO1xuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAvLyBzZXQgdGhlIGdyaWQgdXBkYXRlZC9pbnNlcnRlZCBkYXRhXG4gICAgICB0aGlzLnJvd0FjdGlvbkV2ZW50cyhzZWxlY3RlZFJvdyk7XG4gICAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KGZhbHNlKTtcbiAgICAgIGlmIChyb3cuaXNOZXcgfHwgcm93LmlzbmV3KSB7XG4gICAgICAgIGxldCB7IGlzTmV3LCBpc25ldywgLi4ubmV3Um93T2JqIH0gPSByb3c7XG4gICAgICAgIG5ld1Jvd09iaiA9IHRoaXMuZ3JpZFNlcnZpY2UucmVtb3ZlRXh0cmFOZXdSb3dPYmoobmV3Um93T2JqLCB0aGlzLmNvbHVtbnMpO1xuICAgICAgICBpZiAoIXRoaXMuYWRkRGF0YUtleVZhbHVlKSB7XG4gICAgICAgICAgZGVsZXRlIG5ld1Jvd09ialt0aGlzLmRhdGFLZXldO1xuICAgICAgICB9XG4gICAgICAgIG5ld1Jvd09iaiA9IHRoaXMuc2V0Um93c0RhdGEobmV3Um93T2JqKTtcbiAgICAgICAgaWYgKHRoaXMuc2F2ZUFsbFJlY29yZCkge1xuICAgICAgICAgIHRoaXMuc2F2ZVJlY29yZEFycmF5LnB1c2gobmV3Um93T2JqKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9uUm93QWRkLmVtaXQobmV3Um93T2JqKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJvd3NEYXRhLmZpbmRJbmRleCgoeCk9PiB4LnRlbXBfaWQgPT0gc2VsZWN0ZWRSb3cudGVtcF9pZCk7XG4gICAgICAgIHRoaXMudGVtcFNhdmVkUm93LnB1c2goaW5kZXgpO1xuICAgICAgICBpZiAodGhpcy5zYXZlQWxsUmVjb3JkKSB7XG4gICAgICAgICAgdGhpcy5zYXZlUmVjb3JkQXJyYXkucHVzaChvYmopO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLmNoZWNrbGlzdC5sZW5ndGggPiAwKVxuICAgICAgICAgICAgdGhpcy5vblJvd1VwZGF0ZS5lbWl0KHRoaXMuc2V0Um93c0RhdGEodGhpcy5jaGVja2xpc3QpKTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25Sb3dVcGRhdGUuZW1pdChvYmopO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5lZGl0aW5nUm93S2V5c1tyb3dbdGhpcy5kYXRhS2V5XV0gPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi5lcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkgKyAnX29iaiddKSB7XG4gICAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ10gPSB7IC4uLnNlbGVjdGVkUm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10sIGVycm9yTWVzc2FnZTogY29sdW1uLmVycm9yTWVzc2FnZSB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ10gPSB7IGVycm9yTWVzc2FnZTogY29sdW1uLmVycm9yTWVzc2FnZSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHRoaXMuZWRpdGluZ1Jvd0tleXNbcm93W3RoaXMuZGF0YUtleV1dID0gdHJ1ZTtcbiAgICB9XG4gICAgLy8gaWYgYWxsIHJvd3MgaW4gcmVhZCBvbmx5IG1vZGUgdGhlbiBzaG93IGVkaXRBbGxSb3dzIGJ1dHRvbi4gICAgXG4gICAgaWYgKE9iamVjdC52YWx1ZXModGhpcy5lZGl0aW5nUm93S2V5cykuZXZlcnkoKHZhbHVlKSA9PiAhdmFsdWUpKSB7XG4gICAgICB0aGlzLmluRWRpdE1vZGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuc29ydERpc2FibGVkID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICAvLyBjb252ZXJ0IGRhdGUgaW50byB0aW1lXG4gICAgICBpZiAoXG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gJiZcbiAgICAgICAgKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCdQTScpIHx8XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJ0FNJykpXG4gICAgICApIHtcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHNldFRpbWVJbkRhdGUocm93W2NvbHVtbi5maWVsZF0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5OVU1FUklDKSB7XG4gICAgICAgIGNvbnN0IGRpZ2l0c0luZm8gPSBjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvO1xuICAgICAgICBpZiAoY29sdW1uLmZvcm1hdD8udHlwZSA9PT0gJ3BlcmNlbnQnKSB7XG4gICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uYWxsb3dDYWxjdWxhdGUpIHtcbiAgICAgICAgICAgIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBwYXJzZUZsb2F0KChzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdICogMTAwKT8udG9TdHJpbmcoKSkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdICogMTAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUgJiZcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXVxuICAgICAgKSB7XG4gICAgICAgIC8vIHNldCBhdXRvY29tcGVsZXQgYXJyYXkgZGF0YSBhZnRlciBzYXZlIHJvd1xuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gYXV0b21Db21wbGV0ZVRlbXBEYXRhO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQgJiZcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSAmJiAoY29sdW1uLmFsbG93U2F2ZSA9PT0gdHJ1ZSB8fCBjb2x1bW4uYWxsb3dTYXZlID09PSB1bmRlZmluZWQpXG4gICAgICApIHtcbiAgICAgICAgLy8gc2V0IExPT0tVUF9JTlBVVCBkYXRhIGFmdGVyIHNhdmUgcm93XG4gICAgICAgIGlmIChsb29rdXBJbmZvW2NvbHVtbi5maWVsZF0pIHtcbiAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gbG9va3VwSW5mb1tjb2x1bW4uZmllbGRdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmXG4gICAgICAgIGNvbHVtbi5vcHRpb25MYWJlbCAmJlxuICAgICAgICBjb2x1bW4ub3B0aW9uVmFsdWVcbiAgICAgICkge1xuICAgICAgICB0aGlzLnNldERyb3Bkb3duVmFsdWUoY29sdW1uLCBzZWxlY3RlZFJvdyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5hZGROZXdSb3dDaGVjayA9IGZhbHNlO1xuICAgIGlmIChPYmplY3QudmFsdWVzKHRoaXMuZWRpdGluZ1Jvd0tleXMpLmV2ZXJ5KCh2YWx1ZSkgPT4gIXZhbHVlKSAmJiB0aGlzLnNldEdyaWRSZWZyZXNoVGltZSkge1xuICAgICAgdGhpcy5yZWZyZXNoR3JpZCgpO1xuICAgIH1cbiAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuZ3JpZFNlcnZpY2Uucm93VXBkYXRlID0gZmFsc2U7XG4gIH1cblxuICAvLyBjaGVjayB0aGUgdmFsaWRhdGlvbiBvZiB0aGUgZmllbGRcbiAgZ3JpZFZhbGlkYXRpb24oY29sdW1uczogYW55LCByb3c6IGFueSwgc2luZ2xlQ2VsbDogYm9vbGVhbiA9IGZhbHNlKTogYm9vbGVhbiB7XG4gICAgaWYgKHNpbmdsZUNlbGwgPT0gdHJ1ZSkge1xuICAgICAgY29sdW1ucyA9IFt7IC4uLmNvbHVtbnMgfV1cbiAgICB9XG4gICAgaWYgKCF0aGlzLmdyaWRTZXJ2aWNlLmNoZWNrVmFsaWRpdHkoY29sdW1ucywgcm93LCBzaW5nbGVDZWxsKSkge1xuICAgICAgbGV0IGVycm9yTWVzc2FnZURldGFpbHM6IHN0cmluZyA9ICcnO1xuICAgICAgY29sdW1ucz8uZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgIGlmIChjb2x1bW4uZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgZXJyb3JNZXNzYWdlRGV0YWlscyA9IGVycm9yTWVzc2FnZURldGFpbHMgPyBlcnJvck1lc3NhZ2VEZXRhaWxzICsgJyAsICcgKyBjb2x1bW4uZXJyb3JNZXNzYWdlIDogY29sdW1uLmVycm9yTWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIGxldCBpc1JlcXVpcmVkID0gY29sdW1ucy5zb21lKFxuICAgICAgICAoY29sdW1uOiBhbnkpID0+IGNvbHVtbi5lcnJvck1lc3NhZ2UgJiYgIXJvd1tjb2x1bW4uZmllbGRdXG4gICAgICApO1xuICAgICAgaWYgKGlzUmVxdWlyZWQgJiYgIXNpbmdsZUNlbGwpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXG4gICAgICAgICAgZXJyb3JNZXNzYWdlRGV0YWlscyxcbiAgICAgICAgICA1MDAwLFxuICAgICAgICAgICdSRVFVSVJFRCBGSUVMRCdcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKGVycm9yTWVzc2FnZURldGFpbHMsIDUwMDAsICdJTlZBTElEIEZJRUxEJyk7XG4gICAgICAgIGlmIChzaW5nbGVDZWxsKSB7XG4gICAgICAgICAgdGhpcy5zZXRFcnJvckNlbGwoY29sdW1uc1swXSwgcm93KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzaW5nbGVDZWxsKSB7XG4gICAgICAgIHRoaXMuc2V0RXJyb3JDZWxsKGNvbHVtbnNbMF0sIHJvdylcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICBzZXRFcnJvckNlbGwoY29sdW1uLCByb3cpIHtcbiAgICBpZiAoY29sdW1uLmVycm9yTWVzc2FnZSkge1xuICAgICAgaWYgKHJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ10pIHtcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpICsgJ19vYmonXSA9IHsgLi4ucm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10sIGVycm9yTWVzc2FnZTogY29sdW1uLmVycm9yTWVzc2FnZSB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpICsgJ19vYmonXSA9IHsgZXJyb3JNZXNzYWdlOiBjb2x1bW4uZXJyb3JNZXNzYWdlIH07XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKHJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ10pIHtcbiAgICAgICAgZGVsZXRlIHJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ10uZXJyb3JNZXNzYWdlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcm93IDogYW55XG4gICAqIEBwYXJhbSBpbmRleCA6IG51bWJlclxuICAgKiBDbGVhcnMgb3V0IHRoZSBlZGl0IHJvdyBhbmQgcmVwbGFjZSB3aXRoIHJlYWRhYmxlIG9uZVxuICAgKi9cbiAgb25Sb3dFZGl0Q2FuY2VsKHJvdzogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgbGV0IHJvd0luRWRpdE1vZGU6IGJvb2xlYW4gPSBPYmplY3QudmFsdWVzKHRoaXMuZWRpdGluZ1Jvd0tleXMpLmV2ZXJ5KCh2YWx1ZSkgPT4gIXZhbHVlKTtcbiAgICBpZiAocm93Py5pc05ldykge1xuICAgICAgdGhpcy5yb3dzRGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvd3NEYXRhW2luZGV4XSA9IHRoaXMuZWRpdFJvd3NSZWNvcmRzW3Jvd1t0aGlzLmRhdGFLZXldXTtcbiAgICAgIGRlbGV0ZSB0aGlzLmVkaXRSb3dzUmVjb3Jkc1tyb3dbdGhpcy5kYXRhS2V5XV07XG4gICAgfVxuICAgIGRlbGV0ZSB0aGlzLmVkaXRpbmdSb3dLZXlzW3Jvd1t0aGlzLmRhdGFLZXldXTtcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTikge1xuICAgICAgICB0aGlzLnNldERyb3Bkb3duVmFsdWUoY29sdW1uLCByb3cpO1xuICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJiBjb2x1bW4uZGlzcGxheUZpZWxkKSB7XG4gICAgICAgIHRoaXMucm93c0RhdGFbaW5kZXhdW2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXT8udmFsdWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5pbkVkaXRNb2RlID0gZmFsc2U7XG4gICAgaWYgKHJvd0luRWRpdE1vZGUpIHtcbiAgICAgIHRoaXMuc29ydERpc2FibGVkID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuYWRkTmV3Um93Q2hlY2sgPSBmYWxzZTtcbiAgICB0aGlzLnJvd1VwZGF0ZUNoYW5nZSA9IGZhbHNlO1xuICAgIHRoaXMuaW5saW5lUm93Q2FuY2VsLmVtaXQocm93KTtcbiAgICAgIGlmIChyb3dJbkVkaXRNb2RlICYmIHRoaXMuc2V0R3JpZFJlZnJlc2hUaW1lKSB7XG4gICAgICAgIHRoaXMucmVmcmVzaEdyaWQoKTtcbiAgICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBcbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHJvd1xuICAgKiBTZW5kcyB0aGUgcm93IHBheWxvYWQgdG8gcGFyZW50IGZvciBkZWxldGlvbnNcbiAgICovXG5cbiAgLyoqXG4gICpzZXQgdGhlIGdyaWREYXRhIG9uIHJvdyBhY3Rpb25zIGV2ZW50c1xuICAqL1xuICByb3dBY3Rpb25FdmVudHMocm93SW5mbywgZGVsZXRlUm93OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBsZXQgYWN0aW9uOiBzdHJpbmcgPSAnJztcbiAgICBsZXQgZ3JpZFJvd3NEYXRhOiBhbnlbXSA9IFsuLi50aGlzLnJvd3NEYXRhXTtcbiAgICBjb25zdCBpbmRleCA9IGdyaWRSb3dzRGF0YS5maW5kSW5kZXgoKHJvd0RhdGEpID0+IHJvd0luZm9bdGhpcy5kYXRhS2V5XSA9PT0gcm93RGF0YVt0aGlzLmRhdGFLZXldKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgaWYgKGRlbGV0ZVJvdykge1xuICAgICAgICBncmlkUm93c0RhdGEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5yb3dzRGF0YSA9IFsuLi5ncmlkUm93c0RhdGFdO1xuICAgICAgICBhY3Rpb24gPSAnZGVsZXRlJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmFkZE5ld1Jvd0NoZWNrKSB7XG4gICAgICAgICAgYWN0aW9uID0gJ2luc2VydCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWN0aW9uID0gJ3VwZGF0ZSc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub25HcmlkUm93QWN0aW9ucy5vYnNlcnZlcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgcm93SW5mb1sncm93QWN0aW9uJ10gPSBhY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgZ3JpZFJvd3NEYXRhW2luZGV4XSA9IHJvd0luZm87XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZ2VuZXJhdGVSb3dzRGF0YUNvcHkgPSBmYWxzZTtcbiAgICB0aGlzLnJvd1VwZGF0ZUNoYW5nZSA9IGZhbHNlO1xuICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgIHRoaXMub25HcmlkUm93QWN0aW9ucy5lbWl0KGdyaWRSb3dzRGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBEZWxldGUgY29uZmlybWF0aW9uIGRpYWxvZyB3aGVuIHRyeWluZyB0byBkZWxldGUgcm93XG4gICAqL1xuICBkZWxldGVSZWNvcmQocm93OiBhbnkpIHtcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICBtZXNzYWdlOiAnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgcmVjb3JkPycsXG4gICAgICBoZWFkZXI6ICdEZWxldGUgQ29uZmlybWF0aW9uJyxcbiAgICAgIGljb246ICdwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZScsXG4gICAgICBrZXk6ICdoYW5kbGVJbmxpbmVDUlVEJyxcbiAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy51c2VTZXJ2ZXJTaWRlRXZlbnRzKSB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzZXQgdGhlIGdyaWQgZGVsZXRlZCBkYXRhIFxuICAgICAgICB0aGlzLnJvd0FjdGlvbkV2ZW50cyhyb3csIHRydWUpO1xuICAgICAgICB0aGlzLm9uUm93RGVsZXRlLmVtaXQocm93KTtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlKCk7XG4gICAgICAgIHRoaXMuaW5FZGl0TW9kZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICByZWplY3Q6ICgpID0+IHtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlKCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvIHNldCBkaXNhYmxlZCB0aGUgY29udHJvbFxuICAgKi9cbiAgYWxsb3dEaXNhYmxlZChjb2x1bW46IGFueSwgcm93OiBhbnkpOiBib29sZWFuIHtcbiAgICBsZXQgdmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gJiYgdHlwZW9mIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSkgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIE9iamVjdC5rZXlzKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddKT8uaW5jbHVkZXMoJ2Rpc2FibGVkJykgJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc2FibGVkID09PSB0cnVlXG4gICAgICApIHtcbiAgICAgICAgdmFsdWUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29sdW1uLmRpc2FibGVkICkge1xuICAgICAgdmFsdWUgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogVG8gc2V0IGFnZ3JlZ2F0ZSBpbiBncmlkIGZvb3RlclxuICAgKi9cbiAgc2V0QWdncmVnYXRlVGV4dChjb2x1bW46IElHcmlkQ29sdW1uKSB7XG4gICAgaWYgKGNvbHVtbj8uYWdncmVnYXRlKSB7XG4gICAgICBjb2x1bW4uYWdncmVnYXRlLmZvckVhY2goKGNvbDogYW55KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnJvd3NEYXRhICYmIHRoaXMucm93c0RhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxldCBjb2x1bW5UeXBlOiBFR3JpZEFnZ3JlZ2F0ZSA9IGNvbC50eXBlO1xuICAgICAgICAgIGlmIChjb2x1bW5UeXBlID09PSBFR3JpZEFnZ3JlZ2F0ZS5DT1VOVCkge1xuICAgICAgICAgICAgbGV0IGNvdW50ID0gdGhpcy5yb3dzRGF0YS5sZW5ndGg7XG4gICAgICAgICAgICBjb3VudCA9IHRoaXMuc2V0RmV0Y2hBZ2dyZWdhdGVkVmFsdWUoY29sdW1uLCBjb3VudCwgMSk7XG4gICAgICAgICAgICBjb2wuYWdnclZhbHVlID0gdGhpcy5zZXRBZ2dyZWdhdGVGb290ZXJUZXh0KGNvbCwgY291bnQsICdDb3VudCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbHVtblR5cGUgPT09IEVHcmlkQWdncmVnYXRlLlNVTSB8fFxuICAgICAgICAgICAgY29sdW1uVHlwZSA9PT0gRUdyaWRBZ2dyZWdhdGUuQVZFUkFHRVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgY29sVmFsdWVzOiBudW1iZXJbXSA9IHRoaXMuZ2V0Q29sdW1uVmFsdWVzKGNvbHVtbik7XG4gICAgICAgICAgICBpZiAoY29sVmFsdWVzICYmIGNvbFZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGxldCBzdW0gPSBjb2xWYWx1ZXMucmVkdWNlKChhY2MsIGN1cikgPT4gYWNjICsgY3VyLCAwKTtcbiAgICAgICAgICAgICAgaWYgKGNvbHVtblR5cGUgPT09IEVHcmlkQWdncmVnYXRlLlNVTSkge1xuICAgICAgICAgICAgICAgIHN1bSA9IHRoaXMuc2V0RmV0Y2hBZ2dyZWdhdGVkVmFsdWUoY29sdW1uLCBzdW0sIDIpO1xuICAgICAgICAgICAgICAgIGNvbC5hZ2dyVmFsdWUgPSB0aGlzLnNldEFnZ3JlZ2F0ZUZvb3RlclRleHQoY29sLCBzdW0sICdTdW0nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoY29sdW1uVHlwZSA9PT0gRUdyaWRBZ2dyZWdhdGUuQVZFUkFHRSkge1xuICAgICAgICAgICAgICAgIGxldCBhdmVyYWdlID0gc3VtIC8gY29sVmFsdWVzLmxlbmd0aCB8fCAwO1xuICAgICAgICAgICAgICAgIGF2ZXJhZ2UgPSB0aGlzLnNldEZldGNoQWdncmVnYXRlZFZhbHVlKGNvbHVtbiwgc3VtLCAzKTtcbiAgICAgICAgICAgICAgICBjb2wuYWdnclZhbHVlID0gdGhpcy5zZXRBZ2dyZWdhdGVGb290ZXJUZXh0KFxuICAgICAgICAgICAgICAgICAgY29sLFxuICAgICAgICAgICAgICAgICAgYXZlcmFnZSxcbiAgICAgICAgICAgICAgICAgICdBdmcnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2wuYWdnclZhbHVlID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNldCB0aGUgYWdncmVnYXRhaW9uIHZhbHVlIHRoYXQgY29taW5nIGZyb20gZmV0Y2hcbiAgc2V0RmV0Y2hBZ2dyZWdhdGVkVmFsdWUoY29sdW1uLCBhZ2dyZWdhdGVWYWx1ZSwgYWdncmVnYXRlQWN0aW9uKSB7XG4gICAgaWYgKHRoaXMuYWdncmVnYXRlZFJlc3VsdD8ubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgYWdncmVnYXRlZENvbHVtbiA9IHRoaXMuYWdncmVnYXRlZFJlc3VsdC5maW5kKChhZ2dyZWdhdGUpID0+IGFnZ3JlZ2F0ZS5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICYmIGFnZ3JlZ2F0ZS5hZ2dyZWdhdGlvbk9wZXJhdGlvbiA9PT0gYWdncmVnYXRlQWN0aW9uKTtcbiAgICAgIGlmIChhZ2dyZWdhdGVkQ29sdW1uKSB7XG4gICAgICAgIGFnZ3JlZ2F0ZVZhbHVlID0gYWdncmVnYXRlZENvbHVtbj8udmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhZ2dyZWdhdGVWYWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgZ3JpZCBBZ2dyZWdhdGUgdmFsdWVzXG4gICAqL1xuICBzZXRBZ2dyZWdhdGVGb290ZXJUZXh0KGNvbHVtbjogYW55LCB2YWx1ZTogbnVtYmVyLCBkZWZhdWx0Q2FwdGlvbjogc3RyaW5nKSB7XG4gICAgY29uc3QgaXNEZWNpbWFsRm9ybWF0OiBib29sZWFuID0gY29sdW1uLmZvcm1hdD8udHlwZSA9PT0gJ2RlY2ltYWwnO1xuICAgIGNvbnN0IGRpZ2l0c0luZm8gPSBjb2x1bW4uZm9ybWF0Py5kaWdpdHNJbmZvO1xuICAgIGNvbnN0IGNhcHRpb246IHN0cmluZyA9XG4gICAgICBjb2x1bW4uY2FwdGlvbj8ubGVuZ3RoID4gMCA/IGNvbHVtbi5jYXB0aW9uIDogZGVmYXVsdENhcHRpb247XG5cbiAgICBjb25zdCBkZWNpbWFsUG9pbnQgPSBpc0RlY2ltYWxGb3JtYXRcbiAgICAgID8gdmFsdWU/LnRvRml4ZWQoZGlnaXRzSW5mbyA/IGRpZ2l0c0luZm8gOiAyKVxuICAgICAgOiB2YWx1ZT8udG9GaXhlZCgwKTtcbiAgICByZXR1cm4gYCR7Y2FwdGlvbn0gJHtkZWNpbWFsUG9pbnRcbiAgICAgIC50b1N0cmluZygpXG4gICAgICAucmVwbGFjZSgvXFxCKD89KFxcZHszfSkrKD8hXFxkKSkvZywgJywnKX0gPC9icj5gO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldCBkZWNpbWF0IGFuZCBudW1lcmljIHZhbHVlc1xuICAgKi9cbiAgc2V0TnVtZXJpY1ZhbHVlcygpIHtcbiAgICBpZiAodGhpcy5jb2x1bW5zPy5sZW5ndGggPiAwICYmIHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5OVU1FUklDKSB7XG4gICAgICAgICAgY29uc3QgZGlnaXRzSW5mbyA9IGNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XG4gICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgIGlmIChjb2x1bW4/LmZvcm1hdD8udHlwZSA9PT0gJ3BlcmNlbnQnICYmIHJvd1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICAgICAgICAgIGlmIChjb2x1bW4uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmFsbG93Q2FsY3VsYXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcGFyc2VGbG9hdCgocm93W2NvbHVtbi5maWVsZF0gKiAxMDApPy50b1N0cmluZygpKS50b0ZpeGVkKGRpZ2l0c0luZm8pOyAgICAgICAgIC8vVEhFU0UgQ09NTUVOVEVEIE9VVCBMSU5FUyBTSE9VTEQgUlVOIE9OIFNBVkVcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXSAqIDEwMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlnaXRzSW5mbykge1xuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcGFyc2VGbG9hdChyb3dbY29sdW1uLmZpZWxkXSkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4/LmZvcm1hdD8udHlwZSA9PT0gJ2RlY2ltYWwnICYmIHJvd1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcGFyc2VGbG9hdChyb3dbY29sdW1uLmZpZWxkXSkudG9GaXhlZChkaWdpdHNJbmZvID8gZGlnaXRzSW5mbyA6IDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgY29sdW1uIHZhbHVlIGJhc2VkIG9uIGNvbHVtbiBmaWVsZFxuICAgKi9cbiAgZ2V0Q29sdW1uVmFsdWVzKGNvbHVtbjogSUdyaWRDb2x1bW4pIHtcbiAgICBsZXQgYXJyOiBhbnkgPSBbXTtcbiAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgICAga2V5cy5tYXAoKGtleSkgPT4ge1xuICAgICAgICBpZiAoY29sdW1uLmZpZWxkID09PSBrZXkpIHtcbiAgICAgICAgICBhcnIucHVzaChyb3dba2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBhcnI7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogRXhwb3J0IHRvIFBERlxuICAgKi9cbiAgZXhwb3J0UGRmKCkge1xuICAgIHZhciBleHBvcnREYXRhID0gdGhpcy5zZXRFeHBvcnREYXRhKFsuLi50aGlzLnJvd3NEYXRhXSwgdHJ1ZSk7XG4gICAgbGV0IGRvYyA9IG5ldyBqc1BERigncCcsICdwdCcpO1xuICAgIGRvYy50YWJsZSgxLCAxLCBleHBvcnREYXRhLnJvd3MsIGV4cG9ydERhdGEuaGVhZGluZ3MsIHsgYXV0b1NpemU6IHRydWUgfSk7XG4gICAgZG9jLnNhdmUoJ0V4cG9ydC5wZGYnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgU3ViLWZ1bmN0aW9uIHRvIHNldCByb3dzIGZvciBleHBvcnQgdG8gUGRmLCBhbmQgRXhjZWxcbiAgICogQHJvd3MgcGFyYW0gZm9yIHJvd3NcbiAgICogQGlzRXhjZWwgcGFyYW0gZm9yIGV4cG9ydCB0byBleGNlbCBpbmRpY2F0aW9uXG4gICAqL1xuICBzZXRFeHBvcnREYXRhKHJvd3M6IGFueVtdID0gW10sIGlzUGRmOiBib29sZWFuID0gZmFsc2UpOiBJR3JpZERhdGFFeHBvcnQge1xuICAgIGNvbnN0IGhlYWRpbmdzOiBhbnkgPSB0aGlzLmNvbHVtbnMubWFwKChjb2x1bW4pID0+IGNvbHVtbi5maWVsZCk7XG4gICAgcm93cy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGZvciAodmFyIHByb3AgaW4gcm93KSB7XG4gICAgICAgIGlmICghaGVhZGluZ3MuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICBkZWxldGUgcm93W3Byb3BdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1BkZikge1xuICAgICAgICAgIHJvd1twcm9wXSA9XG4gICAgICAgICAgICAhcm93W3Byb3BdICYmIHR5cGVvZiByb3dbcHJvcF0gIT09ICdib29sZWFuJ1xuICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgIDogcm93W3Byb3BdLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4geyByb3dzLCBoZWFkaW5ncyB9O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEV4cG9ydCB0byBFeGNlbFxuICAgKi9cbiAgZXhwb3J0RXhjZWwoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnU2VydmljZS5leHBvcnRUb0V4Y2VsPy51bmlxdWVLZXkpIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLmdldFVzZXJzRGF0YSgpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgbGV0IHJvd3MgPSB0aGlzLmdyaWRTZXJ2aWNlLnNldERhdGFGaWVsZHMocmVzcG9uc2U/LnJlY29yZHMpO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5leHBvcnRGaWxlKHJvd3MpO1xuICAgICAgfSxcbiAgICAgICAgKHsgZXJyb3IgfSkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFwaUVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5leHBvcnRGaWxlKHRoaXMucm93c0RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydEZpbGUocmVjb3Jkcykge1xuICAgIGxldCBhcnI6IGFueSA9IFtdO1xuICAgIHJlY29yZHMuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgIGxldCBvYmo6IGFueSA9IHt9O1xuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgZ3JpZEhlYWRlciA9IGNvbHVtbi5oZWFkZXI7XG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTkspIHtcbiAgICAgICAgICBjb25zdCBsaW5rT2JqID0gcm93W2NvbHVtbi5kaXNwbGF5VGV4dD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ107XG4gICAgICAgICAgb2JqW2dyaWRIZWFkZXJdID0gcm93W2NvbHVtbi5maWVsZF0gKyAnfCcgKyBsaW5rT2JqPy5oeXBlcmxpbms7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JqW2dyaWRIZWFkZXJdID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgYXJyLnB1c2gob2JqKTtcbiAgICB9KTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmV4cG9ydEV4Y2VsKGFyciwgdGhpcy5zZWxlY3RlZENvbHVtbnMsIEVHcmlkRXhjZWwuRVhQT1JUKTtcbiAgfVxuICBnZXRVc2Vyc0RhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFNlcnZpY2UuZ2V0PGFueVtdLCBSZXF1ZXN0RHRvPignL0RhdGEvRmV0Y2gnLCB7XG4gICAgICB1bmlxdWVLZXk6IHRoaXMuY29uZmlnU2VydmljZS5leHBvcnRUb0V4Y2VsPy51bmlxdWVLZXksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNvbmZpZ1NlcnZpY2UuZXhwb3J0VG9FeGNlbD8uZmlsdGVycyxcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICpzZXQgY29uZmlnIGRhdGEgb2YgbG9va3VwIGNvbnRyb2wgZGlhbG9nXG4gICAqL1xuICBzZXRMb29rdXBEaWFsb2dDb25maWcocm93OiBhbnksIGNvbHVtbjogYW55LCBkYXRhOiBhbnkpIHtcbiAgICBsZXQgc2VsZWN0aW9uOiBzdHJpbmcgPSAnJztcbiAgICBpZiAocm93W2NvbHVtbi5maWVsZF0gJiYgdHlwZW9mIHJvd1tjb2x1bW4uZmllbGRdID09PSAnb2JqZWN0Jykge1xuICAgICAgc2VsZWN0aW9uID0gcm93W2NvbHVtbi5maWVsZF0udGV4dDtcbiAgICB9IGVsc2UgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQgJiYgcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdKSB7XG4gICAgICBzZWxlY3Rpb24gPSByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGVjdGlvbiA9IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIH1cblxuICAgIGlmIChjb2x1bW4uZmllbGQgJiYgdHlwZW9mIHJvd1tjb2x1bW4uZmllbGRdID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3QgbmV3Um93ID0geyAuLi5yb3cgfTtcbiAgICAgIG5ld1Jvd1tjb2x1bW4uZmllbGRdID0gbmV3Um93W2NvbHVtbi5maWVsZF0/LnZhbHVlO1xuICAgICAgcm93ID0geyAuLi5uZXdSb3cgfTtcbiAgICB9XG5cbiAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQgJiYgZGF0YSkge1xuICAgICAgbGV0IG9iaiA9IGF1dG9TZXRMb29rdXBEYXRhKGRhdGEsIHJvdyk7XG4gICAgICByb3dbY29sdW1uLmZpZWxkICsgJy1kYXRhJ10gPSBvYmo7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICByb3dEYXRhOiByb3dbY29sdW1uLmZpZWxkICsgJy1kYXRhJ10sXG4gICAgICBzZWxlY3Rpb246IHNlbGVjdGlvbixcbiAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBsaW5rIG9uIGxvb2t1cENvbnRyb2wgY29udHJvbCBpbiByZWFkIG9ubHkgbW9kZSB3aGVuIGVkaXRMaW5rIHNldCB0cnVlXG4gICAqL1xuICBvcGVuTG9va3VwSHlwZXJsaW5rKGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdzogYW55KSB7XG4gICAgY29uc3QgbG9va3VwSW5mbyA9IGNvbHVtbi5sb29rdXBDb250cm9sO1xuICAgIGlmIChjb2x1bW4uZWRpdExpbmsgPT09IHRydWUgJiYgbG9va3VwSW5mby5jb21wb25lbnQpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBsb29rdXBJbmZvLmRhdGEgPyBsb29rdXBJbmZvLmRhdGEgOiBsb29rdXBJbmZvLmRhdGEuZGF0YTtcbiAgICAgIGxldCBvYmo6IGFueSA9IHRoaXMuc2V0TG9va3VwRGlhbG9nQ29uZmlnKHJvdywgY29sdW1uLCBkYXRhKTtcbiAgICAgIG9ialsnY29tcG9uZW50J10gPSBsb29rdXBJbmZvLmNvbXBvbmVudDtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXMub3Blbkxvb2t1cERpYWxvZyhvYmopO1xuICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgIC5waXBlKHRha2UoMSkpIC8vIEVtaXQgb25seSBvbmNlIHdoZW4gdGhlIHpvbmUgYmVjb21lcyBzdGFibGVcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBkcmFnZ2FibGVEaWFsb2coY29sdW1uPy5maWVsZCA/IGNvbHVtbj8uZmllbGQgOiBjb2x1bW4/LmhlYWRlcilcbiAgICAgIH0pO1xuICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgaWYgKHJlcyAmJiBjb2x1bW4ub25SZXR1cm4pIHtcbiAgICAgICAgICBjb2x1bW4ub25SZXR1cm4ocmVzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG9wZW4gbG9va3VwIERpYWxvZ1xuICAgKi9cbiAgb3Blbkxvb2t1cERpYWxvZyhjb2x1bW4/OiBhbnksIHJvdzogYW55ID0ge30pIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQgPSBmYWxzZTtcbiAgICBjb25zdCBjb2x1bW5EYXRhID0gY29sdW1uLmNvbHVtbj8ubG9va3VwQ29udHJvbD8uZGF0YSA/IGNvbHVtbi5jb2x1bW4ubG9va3VwQ29udHJvbC5kYXRhIDogY29sdW1uLmNvbHVtbi5kYXRhO1xuICAgIGlmIChyb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2wpIHtcbiAgICAgIHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8uaGVhZGVyID8gY29sdW1uRGF0YS5oZWFkZXIgPSByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmhlYWRlciA6ICcnXG4gICAgICByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LndpZHRoID8gY29sdW1uRGF0YS53aWR0aCA9IHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8ud2lkdGggOiAnJ1xuICAgICAgcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5oZWlnaHQgPyBjb2x1bW5EYXRhLmhlaWdodCA9IHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8uaGVpZ2h0IDogJydcbiAgICAgIHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8udmFsdWVQcm9wID8gY29sdW1uRGF0YS52YWx1ZVByb3AgPSByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LnZhbHVlUHJvcCA6IFwiXCJcbiAgICAgIHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8ubGFiZWxQcm9wID8gY29sdW1uRGF0YS5sYWJlbFByb3AgPSByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmxhYmVsUHJvcCA6IFwiXCJcbiAgICAgIHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8uZGF0YSA/IGNvbHVtbkRhdGEuZGF0YSA9IHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8uZGF0YSA6ICcnXG4gICAgfVxuXG4gICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3Blbihjb2x1bW4uY29tcG9uZW50LCB7XG4gICAgICAuLi5jb2x1bW5EYXRhLFxuICAgICAgc3R5bGVDbGFzczogJ2xvb2t1cC1tb2RlbCcsXG4gICAgICBoZWlnaHQ6IGNvbHVtbkRhdGE/LmhlaWdodCA/IGNvbHVtbkRhdGE/LmhlaWdodCA6ICc5MHZoJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgc2VsZWN0aW9uOiBjb2x1bW4uc2VsZWN0aW9uLFxuICAgICAgICBmaWVsZDogY29sdW1uLmNvbHVtbi5maWVsZCxcbiAgICAgICAgbGFiZWxQcm9wOiBjb2x1bW4uY29sdW1uLmxvb2t1cENvbnRyb2w/LmRhdGE/LmxhYmVsUHJvcCxcbiAgICAgICAgLi4uY29sdW1uLnJvd0RhdGEsXG5cbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgIC5waXBlKHRha2UoMSkpIC8vIEVtaXQgb25seSBvbmNlIHdoZW4gdGhlIHpvbmUgYmVjb21lcyBzdGFibGVcbiAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZGlhbG9nUmVmWydkaWFsb2dDbG9zZSddID0gdGhpcy5kaWFsb2dSZWYuY2xvc2U7XG4gICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSA9IHRoaXMuaW50ZXJjZXB0RGlhbG9nQ2xvc2UuYmluZCh0aGlzKTtcbiAgICB9KTtcblxuICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgdGhpcy5kaWFsb2dSZWZbJ2RpYWxvZ0Nsb3NlJ10gPSB0aGlzLmRpYWxvZ1JlZi5jbG9zZTtcbiAgICAvLyAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlID0gdGhpcy5pbnRlcmNlcHREaWFsb2dDbG9zZS5iaW5kKHRoaXMpO1xuICAgIC8vIH0sIDgwMCk7XG5cbiAgICB0aGlzLnNldER5bmFtaWNEaWFsb2dSZWYodGhpcy5kaWFsb2dSZWYpO1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSByb3dbY29sdW1uLmNvbHVtbi5maWVsZF0/Lm5hbWU7XG4gICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgIHRoaXMucGFnZUxvZ2dlclNlcnZpY2Uuc2F2ZVBhZ2VMb2dnZXJJbmZvKHRoaXMucm91dGVyLnVybD8uc3Vic3RyaW5nKDEpLCBjb21wb25lbnROYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGlhbG9nUmVmO1xuICB9XG4gIFxuICBpbnRlcmNlcHREaWFsb2dDbG9zZShldmVudDogYW55KSB7XG4gICAgbGV0IGdyaWRTYXZlSW5EaWFsb2c6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3AtZGlhbG9nJyk7XG4gICAgaWYgKGdyaWRTYXZlSW5EaWFsb2c/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZvcm1TYXZlQnV0dG9uID0gZ3JpZFNhdmVJbkRpYWxvZ1swXT8ucXVlcnlTZWxlY3RvcignLmZvcm0tc2F2ZS1idXR0b24nKTtcbiAgICAgIGNvbnN0IGdyaWRTYXZlQWxsQnV0dG9uID0gZ3JpZFNhdmVJbkRpYWxvZ1swXT8ucXVlcnlTZWxlY3RvcignLnNhdmUtYWxsLWdyaWQnKTtcbiAgICAgIGlmICgoZm9ybVNhdmVCdXR0b24gfHwgZ3JpZFNhdmVBbGxCdXR0b24pICYmICh0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQgfHwgdGhpcy5mb3JtU2VydmljZS5maWVsZEZvY3VzZWRPdXQpKSB7XG4gICAgICAgIGlmIChjb25maXJtKFwiWW91IHdpbGwgbG9zZSBjaGFuZ2VzIG5vdCBzYXZlZCBvbiBwYWdlLiBXb3VsZCB5b3UgbGlrZSB0byBjb250aW51ZT9cIikgPT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMuZGlhbG9nUmVmPy5kaWFsb2dDbG9zZShldmVudCk7XG4gICAgICAgICAgdGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1lbHNle1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZj8uZGlhbG9nQ2xvc2UoZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIHNldCBkaWFsb2cgcmVmIHdoZW4gcG9wdXAgb3BlblxuICBzZXREeW5hbWljRGlhbG9nUmVmKHJlZikge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5kaWFsb2dDb21wb25lbnRSZWZNYXAuZ2V0KHJlZik7XG4gICAgY29uc3QgZHluYW1pY0NvbXBvbmVudCA9IGRpYWxvZ1JlZj8uaW5zdGFuY2UgYXMgRHluYW1pY0RpYWxvZ0NvbXBvbmVudDtcbiAgICBjb25zdCBhcmlhTGFiZWxsZWRCeSA9IGR5bmFtaWNDb21wb25lbnQuZ2V0QXJpYUxhYmVsbGVkQnkoKTtcbiAgICBkeW5hbWljQ29tcG9uZW50LmdldEFyaWFMYWJlbGxlZEJ5ID0gKCkgPT4gYXJpYUxhYmVsbGVkQnk7XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBkaWFsb2cgb24gbG9va3VwQ29udHJvbCBmaWVsZFxuICAgKi9cbiAgc2VsZWN0TG9va3VwRmllbGQoY29sdW1uOiBhbnksIHJvdz86IGFueSkge1xuICAgIHRoaXMub25DbGlja0V2ZW50KGNvbHVtbiwgcm93KTtcbiAgICBsZXQgb2JqOiBhbnkgPSB0aGlzLnNldExvb2t1cERpYWxvZ0NvbmZpZyhcbiAgICAgIHJvdyxcbiAgICAgIGNvbHVtbixcbiAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5kYXRhXG4gICAgICAgID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmRhdGEgOiBjb2x1bW4/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmRhdGFcbiAgICApO1xuXG4gICAgb2JqWydjb21wb25lbnQnXSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5jb21wb25lbnQgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uY29tcG9uZW50IDogY29sdW1uLmxvb2t1cENvbnRyb2w/LmNvbXBvbmVudDtcbiAgICBjb25zdCByZWYgPSB0aGlzLm9wZW5Mb29rdXBEaWFsb2cob2JqLCByb3cpO1xuICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgLnBpcGUodGFrZSgxKSkgLy8gRW1pdCBvbmx5IG9uY2Ugd2hlbiB0aGUgem9uZSBiZWNvbWVzIHN0YWJsZVxuICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgZHJhZ2dhYmxlRGlhbG9nKGNvbHVtbj8uZmllbGQgPyBjb2x1bW4/LmZpZWxkIDogY29sdW1uPy5oZWFkZXIpXG4gICAgfSk7XG4gICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKFxuICAgICAgKHJlcykgPT4ge1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgdGhpcy5ncmlkU2VydmljZS51c2VyU2VhcmNoZWQ9ZmFsc2U7XG4gICAgICAgICAgbGV0IHZhbHVlID0gc2V0RGlhbG9nUmVzcG9uc2UoXG4gICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgICBjb2x1bW4ubG9va3VwQ29udHJvbCxcbiAgICAgICAgICAgIHJlc1xuICAgICAgICAgICk7XG4gICAgICAgICAgcmVzID0gb2JqQ29udmVydFRvTG93ZXIocmVzKTtcbiAgICAgICAgICBsZXQgbGFiZWxQcm9wID0gY29sdW1uPy5sb29rdXBDb250cm9sPy5kYXRhPy5sYWJlbFByb3A/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgbGV0IHZhbHVlUHJvcCA9IGNvbHVtbj8ubG9va3VwQ29udHJvbD8uZGF0YT8udmFsdWVQcm9wPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGxldCBjb2x1bW5GaWVsZCA9IGNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICAgIGlmIChyb3c/Lmhhc093blByb3BlcnR5KGNvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW5GaWVsZF0gPSByZXNbdmFsdWVQcm9wID8gdmFsdWVQcm9wIDogY29sdW1uRmllbGRdO1xuICAgICAgICAgICAgICByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0gPSByZXNbbGFiZWxQcm9wID8gbGFiZWxQcm9wIDogY29sdW1uLmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW5GaWVsZF0gPSB7XG4gICAgICAgICAgICAgICAgdGV4dDogcmVzW2xhYmVsUHJvcCA/IGxhYmVsUHJvcCA6IGNvbHVtbi5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV0sXG4gICAgICAgICAgICAgICAgdmFsdWU6IHJlc1t2YWx1ZVByb3AgPyB2YWx1ZVByb3AgOiBjb2x1bW5GaWVsZF0sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLnZhbHVlKSB7XG4gICAgICAgICAgICB2YWx1ZVsnZmllbGQnXSA9IGNvbHVtbkZpZWxkO1xuICAgICAgICAgICAgaWYgKGxhYmVsUHJvcCB8fCB2YWx1ZVByb3ApIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbkZpZWxkXSA9IHtcbiAgICAgICAgICAgICAgICB0ZXh0OiByZXNbbGFiZWxQcm9wID8gbGFiZWxQcm9wIDogcmVzW2xhYmVsUHJvcF1dLFxuICAgICAgICAgICAgICAgIHZhbHVlOiByZXNbdmFsdWVQcm9wID8gdmFsdWVQcm9wIDogcmVzW2xhYmVsUHJvcF1dLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbkZpZWxkXSA9IHZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobGFiZWxQcm9wIHx8IHZhbHVlUHJvcCkge1xuICAgICAgICAgICAgICByb3dbY29sdW1uRmllbGRdID0ge1xuICAgICAgICAgICAgICAgIHRleHQ6IHJlc1tsYWJlbFByb3AgPyBsYWJlbFByb3AgOiB2YWx1ZVByb3AgPyB2YWx1ZVByb3AgOiByZXNbY29sdW1uRmllbGRdXSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogcmVzW3ZhbHVlUHJvcCA/IHZhbHVlUHJvcCA6IHJlc1tjb2x1bW5GaWVsZF1dLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbkZpZWxkXSA9IHJlc1tjb2x1bW5GaWVsZF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGRdKSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddID0geyAuLi5yb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSwgdGV4dDogcm93W2NvbHVtbi5maWVsZF0gfTtcbiAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHJvd1tjb2x1bW4uZmllbGRdPy52YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgaWYgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddKSB7XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSA9IHsgLi4ucm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10sIHRleHQ6IHsgdGV4dDogcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldLCB2YWx1ZTogcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0gfSB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSA9IHsgdGV4dDogeyB0ZXh0OiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0sIHZhbHVlOiByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXSB9IH07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHJlcykge1xuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddID0geyAuLi5yb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSwgdGV4dDogeyB0ZXh0OiByZXNbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXSwgdmFsdWU6IHJlc1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldIH0gfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sdW1uLm9uUmV0dXJuKSB7XG4gICAgICAgICAgY29sdW1uLm9uUmV0dXJuKHJlcywgcm93KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZF0gIT09IG9iai5zZWxlY3Rpb24pIHtcbiAgICAgICAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KHRydWUpO1xuICAgICAgICAgIGlmIChjb2x1bW4ub25DaGFuZ2UpIHtcbiAgICAgICAgICAgIGNvbHVtbi5vbkNoYW5nZShyb3cpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgICh7IGVycm9yIH0pID0+IHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYXBpRXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBzZXRGaWx0ZXJMb29rdXAoY29sdW1uOiBhbnkpIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnNldExvb2tVcEZpbHRlcihjb2x1bW4sIHRoaXMuZGlhbG9nU2VydmljZSk7XG4gIH1cblxuICAvLyBzZXQgbG9va3VwIHZhbHVlIHRoYXQgZGlzcGxheSBpbiByZWFkT25seU1vZGVcbiAgc2V0TG9va3VwUmVhZE9ubHlWYWx1ZShyb3csIGNvbHVtbikge1xuICAgIGxldCB2YWx1ZSA9ICcnO1xuICAgIGlmICh0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0KSA9PT0gXCJvYmplY3RcIiAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8udGV4dCAmJiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQpPy5oYXNPd25Qcm9wZXJ0eSgndGV4dCcpKSB7XG4gICAgICB2YWx1ZSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0LnRleHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgICBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICB2YWx1ZSA9IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8vIENoZWNrIGNhbGVuZGFyIHZhbHVlIGlzIGNoYW5nZWQgb3Igbm90XG4gIGNhbGVuZGFyQ2hhbmdlRXZlbnQoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XG4gICAgbGV0IHZhbHVlQ2hhbmdlOiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYgKFxuICAgICAgY29sdW1uLnRpbWVPbmx5ICYmXG4gICAgICB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyb3dbY29sdW1uLmZpZWxkXSwgJ2hoOm1tIGEnKSAhPT1cbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuY2FsZW5kYXJQcmV2aW91c1ZhbHVlLCAnaGg6bW0gYScpXG4gICAgKSB7XG4gICAgICB2YWx1ZUNoYW5nZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGNvbHVtbi5zaG93VGltZSAmJlxuICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZF0sICd5eXl5LU1NLWRkIGhoOm1tJykgIT09XG4gICAgICB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmNhbGVuZGFyUHJldmlvdXNWYWx1ZSwgJ3l5eXktTU0tZGQgaGg6bW0nKVxuICAgICkge1xuICAgICAgdmFsdWVDaGFuZ2UgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyb3dbY29sdW1uLmZpZWxkXSwgJ3l5eXktTU0tZGQnKSAhPT1cbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuY2FsZW5kYXJQcmV2aW91c1ZhbHVlLCAneXl5eS1NTS1kZCcpXG4gICAgKSB7XG4gICAgICB2YWx1ZUNoYW5nZSA9IHRydWU7XG4gICAgfVxuICAgIGlmICh2YWx1ZUNoYW5nZSkge1xuICAgICAgdGhpcy5icm93c2VyQ2xvc2VFdmVudCh0cnVlKTtcbiAgICAgIHRoaXMuZ2VuZXJhdGVSb3dzRGF0YUNvcHkgPSBmYWxzZTtcbiAgICAgIHRoaXMucm93VXBkYXRlQ2hhbmdlID0gdHJ1ZTtcblxuICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgIC5waXBlKHRha2UoMSkpIC8vIEVtaXQgb25seSBvbmNlIHdoZW4gdGhlIHpvbmUgYmVjb21lcyBzdGFibGVcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICAgIH0pO1xuICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgICAgLy8gfSwgMjUwKTtcbiAgICAgIGlmIChjb2x1bW4ub25DaGFuZ2UpIHtcbiAgICAgICAgY29sdW1uLm9uQ2hhbmdlKHJvdyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2FsZW5kYXJQcmV2aW91c1ZhbHVlID0gJyc7XG4gIH1cblxuICBzZXRBdXRvQ29tcGxldGV2YWx1ZU9uVHlwZShjb2x1bW46IGFueSwgcm93OiBhbnksIGV2ZW50OiBhbnkgPSBbXSkge1xuICAgIGxldCB2YWx1ZSA9IGV2ZW50Py50YXJnZXQ/LnZhbHVlO1xuICAgIGxldCBmaWVsZCA9IGNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFICYmIHZhbHVlICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgY29uc3QgdmFsdWVLZXkgPSBjb2x1bW4ub3B0aW9uVmFsdWUgPyBjb2x1bW4ub3B0aW9uVmFsdWUgOiBmaWVsZDtcbiAgICAgIGNvbnN0IGxhYmVsS2V5ID0gY29sdW1uLm9wdGlvbkxhYmVsID8gY29sdW1uLm9wdGlvbkxhYmVsIDogY29sdW1uLmRpc3BsYXlGaWVsZCA/IGNvbHVtbi5kaXNwbGF5RmllbGQgOiBmaWVsZDtcbiAgICAgIGlmKHJvd1tmaWVsZF0/Lmxlbmd0aCA+IDApe1xuICAgICAgICBjb25zdCBhbHJlYWR5RXhpc3QgPSByb3dbZmllbGRdPy5maW5kKChyb3dJbmZvKT0+IHJvd0luZm9bZmllbGRdID09PSB2YWx1ZSk7XG4gICAgICAgIGlmKCFhbHJlYWR5RXhpc3Qpe1xuICAgICAgICAgIHJvd1tmaWVsZF0gPSBbLi4ucm93W2ZpZWxkXSwgeyBbbGFiZWxLZXk/LnRvTG93ZXJDYXNlKCldOiB2YWx1ZSwgW3ZhbHVlS2V5Py50b0xvd2VyQ2FzZSgpXTogdmFsdWUsIFtmaWVsZD8udG9Mb3dlckNhc2UoKV06IHZhbHVlIH1dO1xuICAgICAgICB9XG4gICAgICB9ZWxzZXtcbiAgICAgICAgcm93W2ZpZWxkXSA9IFt7IFtsYWJlbEtleT8udG9Mb3dlckNhc2UoKV06IHZhbHVlLCBbdmFsdWVLZXk/LnRvTG93ZXJDYXNlKCldOiB2YWx1ZSwgW2ZpZWxkPy50b0xvd2VyQ2FzZSgpXTogdmFsdWUgfV07XG4gICAgICB9XG4gICAgfVxuICAgIGlmKGV2ZW50Py50YXJnZXQ/LnZhbHVlKXtcbiAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9ICcnO1xuICAgIH1cbiAgICBcbiAgfVxuICBcbiAgb25BdXRvQ29tcGxldGVLZXlFbnRlckV2ZW50KGUsIGNvbHVtbiwgcm93KSB7XG4gICAgaWYgKGNvbHVtbi50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUpIHtcbiAgICAgIGlmIChjb2x1bW4uYWxsb3dBdXRvQ29tcGxldGVTYXZlICYmIGUudGFyZ2V0LnZhbHVlICYmICFjb2x1bW4uZGF0YT8ubGVuZ3RoKSB7XG4gICAgICAgIC8vL2NoZWNrIHRoZSBjb3JyZWN0IGZvcm1hdCBpZiBkYXRhLmNvbnRhaW5zIGN1eiBpdHMgYW4gYXJyYXkgb2YgYXJyYXlzIHdpdGggb2JqZWN0cy5cbiAgICAgICAgaWYgKGNvbmZpcm0oYERvIHlvdSB3YW50IHRvIGFkZCAke2UudGFyZ2V0LnZhbHVlfSB0byB0aGUgc2VsZWN0aW9uP2ApKSB7XG4gICAgICAgICAgaWYgKGNvbHVtbi51bmlxdWVLZXkpIHtcbiAgICAgICAgICAgIHZhciBtZXNzYWdlID0gdGhpcy5ncmlkU2VydmljZVxuICAgICAgICAgICAgICAuYWRkQXV0b0NvbXBsZXRlVmFsdWUoY29sdW1uLnVuaXF1ZUtleSwgZS50YXJnZXQudmFsdWUsIGNvbHVtbiwgcm93KVxuICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uLm9uUmV0dXJuKSB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4ub25SZXR1cm4oZS50YXJnZXQudmFsdWUsIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgb25Gb2N1c0V2ZW50KGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdzogYW55KSB7XG4gICAgdGhpcy5udW1lcmljVmFsdWVbY29sdW1uLmZpZWxkXSA9IHJvd1tjb2x1bW4uZmllbGRdXG4gIH1cblxuICBvbkZvY3VzT3V0RXZlbnQoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnksIGV2ZW50OiBhbnkgPScnKSB7XG4gICAgdGhpcy5zZXRBdXRvQ29tcGxldGV2YWx1ZU9uVHlwZShjb2x1bW4sIHJvdywgZXZlbnQpXG4gICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTlVNRVJJQyAmJiB0aGlzLm51bWVyaWNWYWx1ZVtjb2x1bW4uZmllbGRdICE9PSByb3dbY29sdW1uLmZpZWxkXSkge1xuICAgICAgdGhpcy5vbkNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KVxuICAgIH1cbiAgICBpZiAoY29sdW1uLnR5cGUgIT09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUgfHwgKCFjb2x1bW4uYWxsb3dBdXRvQ29tcGxldGVTYXZlKSkge1xuICAgICAgdGhpcy5ncmlkU2VydmljZS5jaGVja1ZhbGlkaXR5KFtjb2x1bW5dLCByb3cpO1xuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSkge1xuICAgICAgICB0aGlzLmNhbGVuZGFyQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbHVtbi5vbkZvY3VzT3V0KSB7XG4gICAgICAgIGNvbHVtbi5vbkZvY3VzT3V0KHJvdyk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBjb2x1bW4ub25SZXR1cm4gJiZcbiAgICAgICAgY29sdW1uLnR5cGUgIT09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVRcbiAgICAgICkge1xuICAgICAgICBjb2x1bW4ub25SZXR1cm4ocm93KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnJvd1VwZGF0ZSA9IGZhbHNlO1xuICB9XG5cbiAgc2V0UmVwb3J0TmFtZShjb2x1bW46IElHcmlkUmVwb3J0QnRuLCByb3c6IGFueSkge1xuICAgIGxldCByZXBvcnQ6IGFueSA9ICcnO1xuICAgIGlmIChjb2x1bW4ucmVwb3J0SWQpIHtcbiAgICAgIHJlcG9ydCA9IGNvbHVtbi5yZXBvcnRJZDtcbiAgICB9IGVsc2UgaWYgKHJvd1tjb2x1bW4/LmxhYmVsPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXSAmJiByb3dbY29sdW1uPy5sYWJlbD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LnJlcG9ydFVuaXF1ZUtleSkge1xuICAgICAgcmVwb3J0ID0gcm93W2NvbHVtbj8ubGFiZWw/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5yZXBvcnRVbmlxdWVLZXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcG9ydCA9IGNvbHVtbi5yZXBvcnRVbmlxdWVLZXk7XG4gICAgfVxuICAgIHJldHVybiByZXBvcnQ7XG4gIH1cblxuICBzZXRSZXBvcnRQYXJhbXMoY29sdW1uOiBJR3JpZFJlcG9ydEJ0biwgcm93OiBhbnkpIHtcbiAgICBsZXQgcmVwb3J0UGFyYW1zOiBhbnlbXSA9IFtdO1xuICAgIGlmIChyb3dbY29sdW1uPy5sYWJlbD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10gJiYgcm93W2NvbHVtbj8ubGFiZWw/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5yZXBvcnRQYXJhbSkge1xuICAgICAgcmVwb3J0UGFyYW1zID0gcm93W2NvbHVtbj8ubGFiZWw/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5yZXBvcnRQYXJhbTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVwb3J0UGFyYW1zID0gY29sdW1uLnBhcmFtcztcbiAgICB9XG4gICAgcmV0dXJuIHJlcG9ydFBhcmFtcztcbiAgfVxuXG4gIHNldEZpbHRlckZvY3VzT3V0KGNvbDogYW55LCBmaWx0ZXI/OiBhbnksIGV2ZW50PzogYW55KSB7XG4gICAgdGhpcy5zZXRHcmlkRmlsdGVyKGNvbCwgZmlsdGVyLCBldmVudCk7XG4gIH1cbiAgc2V0R3JpZEZpbHRlcihjb2w6IElHcmlkQ29sdW1uLCBmaWx0ZXI/OiBhbnksIGV2ZW50PzogYW55KSB7XG4gICAgdGhpcy5ncmlkRmlsdGVyT2JqID0geyBjb2x1bW46IGNvbCwgZmlsdGVyOiBmaWx0ZXIsIGV2ZW50OiBldmVudCB9O1xuICAgIGNvbnN0IG5ld0NvbHVtbjogYW55ID0geyAuLi5jb2wgfTtcbiAgICAvL2NoYW5nZSBmaWx0ZXIgY2FsZW5kYXIgZm9ybWF0XG4gICAgaWYgKG5ld0NvbHVtbi50eXBlID09PSAnZGF0ZScgJiYgbmV3Q29sdW1uLmZpbHRlclZhbHVlICYmIG5ld0NvbHVtbi5maWx0ZXI/LnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUikge1xuICAgICAgbmV3Q29sdW1uLmZpbHRlclZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oXG4gICAgICAgIGNvbC5maWx0ZXJWYWx1ZS50b1N0cmluZygpLnRyaW0oKSxcbiAgICAgICAgJ3l5eXktTU0tZGQnXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmZpbHRlck9iaihuZXdDb2x1bW4pO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdhcHBseUZpbHRlcicsIEpTT04uc3RyaW5naWZ5KGZhbHNlKSk7XG4gIH1cblxuICBmaWx0ZXJPYmooY29sOiBhbnkpIHtcbiAgICBjb25zdCBvYmogPSB7XG4gICAgICBmaWVsZDogY29sLmZpZWxkLFxuICAgICAgbWF0Y2hNb2RlOiBjb2wubWF0Y2hNb2RlID8gY29sLm1hdGNoTW9kZSA6ICdzdGFydHNXaXRoJyxcbiAgICAgIG9wZXJhdG9yOiBjb2wub3BlcmF0b3IgPyBjb2wub3BlcmF0b3IgOiAnYW5kJyxcbiAgICAgIHRhYmxlQWxpYXM6IGNvbC50YWJsZUFsaWFzID8gY29sLnRhYmxlQWxpYXMgOiAnJyxcbiAgICAgIHZhbHVlOiBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUID8gY29sLmZpbHRlclZhbHVlLnRvU3RyaW5nKCkgOiBjb2wuZmlsdGVyVmFsdWUsXG4gICAgfTtcbiAgICB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5wdXNoKG9iaik7XG4gIH1cblxuICBhcHBseUVudGVyRXZlbnQoZmlsdGVyOiBhbnksIGV2ZW50OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgdGhpcy5ncmlkU2VydmljZS51c2VyU2VhcmNoZWQ9dHJ1ZTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmFwcGx5RmlsdGVyRXZlbnQgPSB0cnVlO1xuICAgIHRoaXMucm93VXBkYXRlQ2hhbmdlID0gZmFsc2U7XG4gICAgdGhpcy5hdXRvTG9hZERhdGEgPSB0cnVlO1xuICAgIC8vdGhpcy5sb2FkaW5nPXRydWU7XG4gICAgdGhpcy5vbkFwcGx5RmlsdGVyLmVtaXQoKTtcbiAgICB0aGlzLmZpbHRlck9iaihjb2x1bW4pO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdhcHBseUZpbHRlcicsIEpTT04uc3RyaW5naWZ5KHRydWUpKTtcbiAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5NVUxUSVNFTEVDVCkge1xuICAgICAgZmlsdGVyKGNvbHVtbj8uZmlsdGVyVmFsdWU/LnRvU3RyaW5nKCkpXG4gICAgfSBlbHNlIGlmIChjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gdGhpcy5kcm9wRG93bkZpbHRlcj8uY29sdW1uPy5maWx0ZXI/LnR5cGUpIHtcbiAgICAgIHRoaXMuZHJvcERvd25GaWx0ZXIuZmlsdGVyKHRoaXMuZHJvcERvd25GaWx0ZXIuZXZlbnQudGFyZ2V0KTtcbiAgICB9IGVsc2UgaWYgKGZpbHRlciAmJiBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4gJiYgY29sdW1uPy5maWx0ZXI/LnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DSEVDS0JPWCAmJiBjb2x1bW4uZmlsdGVyaW5nICE9PSBmYWxzZSkge1xuICAgICAgZmlsdGVyKGV2ZW50Py5jaGVja2VkKTtcbiAgICB9IGVsc2UgaWYgKGZpbHRlcikge1xuICAgICAgZmlsdGVyKGV2ZW50Py50YXJnZXQ/LnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVOdWxsQ2FsZW5kYXIoY29sdW1uOiBJR3JpZENvbHVtbiwgZmlsdGVyOiBhbnksIGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoY29sdW1uLmZpbHRlclZhbHVlID09PSBudWxsKSB7XG4gICAgICB0aGlzLnJlbW92ZU51bGxGaWx0ZXJzKGNvbHVtbik7XG4gICAgICB0aGlzLnNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCBldmVudCk7XG4gICAgfVxuICB9XG5cbiAgYmFja3NwYWNlRXZlbnQoZXZlbnQ6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICBldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnICYmXG4gICAgICAoY29sdW1uLmZpbHRlclZhbHVlPy50b1N0cmluZygpLmxlbmd0aCA9PT0gMSB8fFxuICAgICAgICBjb2x1bW4uZmlsdGVyVmFsdWU/LnRvU3RyaW5nKCkgPT09ICcnIHx8XG4gICAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9PT0gbnVsbClcbiAgICApIHtcbiAgICAgIHRoaXMucmVtb3ZlTnVsbEZpbHRlcnMoY29sdW1uKTtcbiAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSAmJiBjb2x1bW4uZmlsdGVyVmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMucmVtb3ZlTnVsbEZpbHRlcnMoY29sdW1uKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVOdWxsRmlsdGVycyhjb2x1bW46IGFueSkge1xuICAgIGlmICh0aGlzLmdsb2JhbEZpbHRlcnNBcnJheSAmJiB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgYXJyID0gWy4uLnRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5XTtcbiAgICAgIGxldCBpbmRleCA9IGFyci5maW5kSW5kZXgoKGkpID0+IGkuZmllbGQgPT09IGNvbHVtbi5maWVsZCk7XG4gICAgICBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5ID0gYXJyO1xuICAgIH1cbiAgICBsZXQgaW5kZXggPSB0aGlzLnNlcnZlckZpbHRlcnM/LmZpbHRlcnM/LmZpbmRJbmRleCgoaSkgPT4ge2kuZmllbGQgPT09IGNvbHVtbi5maWVsZH0pXG4gICAgdGhpcy5zZXJ2ZXJGaWx0ZXJzPy5maWx0ZXJzPy5zcGxpY2UoaW5kZXgsMSlcbiAgfVxuXG4gIC8vIFJlbW92aW5nIEhlYWRlciBGaWx0ZXIgVmFsdWUgdXNpbmcgQmFja3NwYWNlIGtleSBFdmVudCBvciBEZWxldGUga2V5IEV2ZW50LlxuICByZW1vdmluZ0ZpbHRlcnMoZXZlbnQ6IGFueSwgY29sdW1uOiBJR3JpZENvbHVtbikge1xuICAgIGlmIChcbiAgICAgIChldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnIHx8IGV2ZW50LmtleSA9PT0gJ0RlbGV0ZScpICYmXG4gICAgICBjb2x1bW4uZmlsdGVyVmFsdWU/LnRvU3RyaW5nKCkubGVuZ3RoID09PSAwXG4gICAgKSB7XG4gICAgICBsZXQgc2VhcmNoRmlsdGVycztcbiAgICAgIGlmICghdGhpcy5zb2Z0Q2FjaGluZyAmJiB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCkge1xuICAgICAgICBzZWFyY2hGaWx0ZXJzID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnU2V0RmlsdGVycy0nICsgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmwpIGFzIGFueSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgIHNlYXJjaEZpbHRlcnMgPSB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1t0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHRoaXMuY3VycmVudFVybF07XG4gICAgICB9XG4gICAgICBpZiAoc2VhcmNoRmlsdGVycyAmJiBzZWFyY2hGaWx0ZXJzLmZpbHRlcnMpIHtcbiAgICAgICAgaWYgKHNlYXJjaEZpbHRlcnMuZmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbGV0IGluZGV4ID0gc2VhcmNoRmlsdGVycy5maWx0ZXJzLmZpbmRJbmRleChcbiAgICAgICAgICAgICh4OiBhbnkpID0+IHguZmllbGQgPT09IGNvbHVtbi5maWVsZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIGlmIChzZWFyY2hGaWx0ZXJzLmZpbHRlcnMubGVuZ3RoID09PSAxICYmIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3RoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsXSA9IFtdO1xuICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnU2V0RmlsdGVycy0nICsgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VhcmNoRmlsdGVycy5maWx0ZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgIGlmICghdGhpcy5zb2Z0Q2FjaGluZyAmJiB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCkge1xuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdTZXRGaWx0ZXJzLScgKyB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHRoaXMuY3VycmVudFVybCwgSlNPTi5zdHJpbmdpZnkoc2VhcmNoRmlsdGVycykpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdID0gc2VhcmNoRmlsdGVycztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCBDbGljayBCdXR0b24gRXZlbnQgb24gR3JpZC5cbiAgb25DbGlja0J1dHRvbihjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcbiAgICB0aGlzLm9wZW5HcmlkRGlhbG9nKGNvbHVtbiwgcm93KTtcbiAgfVxuXG4gIC8vIEludm9rZSBvbkNsaWNrIEV2ZW50LlxuICBvbkNsaWNrRXZlbnQoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XG4gICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSyAmJiAoY29sdW1uLmVkaXRMaW5rID09PSBmYWxzZSB8fCBjb2x1bW4uZWRpdExpbmsgPT09IHVuZGVmaW5lZCkgJiYgY29sdW1uLmVkaXRhYmxlICE9PSB0cnVlICYmIGNvbHVtbi5kaXNhYmxlZCAhPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5vbkNsaWNrRXZlbnRUcmlnZ2VyZWQgPSB0cnVlO1xuICAgIH1cbiAgICAvLyBpZihjb2x1bW4udHlwZT09PUVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgJiYgcm93W2NvbHVtbi5maWVsZF0pe1xuICAgIC8vICAgdGhpcy5vcGVuR3JpZERpYWxvZyhjb2x1bW4scm93KVxuICAgIC8vIH1cbiAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFICYmIHJvd1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICB0aGlzLmNhbGVuZGFyUHJldmlvdXNWYWx1ZSA9IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAhcm93W2NvbHVtbi5maWVsZF0gJiZcbiAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSAmJlxuICAgICAgKGNvbHVtbi5zaG93VGltZSB8fCBjb2x1bW4udGltZU9ubHkpICYmXG4gICAgICBjb2x1bW4ubWludXRlc0ludGVydmFsXG4gICAgKSB7XG4gICAgICB0aGlzLmRlZmF1bHREYXRlID0gbmV3IERhdGUoc2V0TWludXRlc0ludGVydmFsKG5ldyBEYXRlKCkpKTtcbiAgICB9XG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4ub25DbGljayAmJiBjb2x1bW4uZGlzYWJsZWQgIT09IHRydWUgJiYgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5hY3Rpb24/LmRpc2FibGVkICE9PSB0cnVlIHx8ICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzYWJsZWQgIT09IHRydWUpKSB7XG4gICAgICBjb2x1bW4ub25DbGljayhyb3cpO1xuICAgIH1cbiAgfVxuXG4gIHNldE11bHRpU2VsZWN0VmFsdWUoY29sdW1uLCByb3cpIHtcbiAgICBpZiAocm93W2NvbHVtbi5maWVsZF0gJiYgIUFycmF5LmlzQXJyYXkocm93W2NvbHVtbi5maWVsZF0pKSB7XG4gICAgICBpZiAodHlwZW9mIChyb3dbY29sdW1uLmZpZWxkXSkgPT09IFwic3RyaW5nXCIgJiYgIXJvd1tjb2x1bW4uZmllbGRdPy5pbmNsdWRlcygnLCcpKSB7XG4gICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gW3Jvd1tjb2x1bW4uZmllbGRdXTtcbiAgICAgIH0gZWxzZSBpZiAocm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCcsJykpIHtcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXT8uc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJvd1tjb2x1bW4uZmllbGRdO1xuICB9XG5cbiAgLy8gc2V0IHRoZSBzZWxlY3QgdmFsdWUgb2YgbXVsdGktc2VsZWN0XG4gIHNob3dPcHRpb24oY29sdW1uLCByb3cpIHtcbiAgICByb3dbY29sdW1uLmZpZWxkXSA9IHRoaXMuc2V0TXVsdGlTZWxlY3RWYWx1ZShjb2x1bW4sIHJvdyk7XG4gIH1cblxuICBvbkNsZWFyVmFsdWUoY29sdW1uLCByb3cpIHtcbiAgICBpZiAoY29sdW1uPy50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiYgIXJvd1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICByb3dbY29sdW1uLmZpZWxkXSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gSW52b2tlIG9uQ2hhbmdlIEV2ZW50XG4gIG9uQ2hhbmdlRXZlbnQoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XG4gICAgLy8gc2V0IGRyb3Bkb3duIGRpc3BsYXlGaWVsZCB2YWx1ZSBiYXNlIG9uIG9wdGlvbkxhYmVsICYgb3B0aW9uVmFsdWUuXG4gICAgdGhpcy5ncmlkVmFsaWRhdGlvbihjb2x1bW4sIHJvdywgdHJ1ZSlcbiAgICB0aGlzLmRpc3BsYXlGaWVsZERyb3Bkb3duVmFsdWUoY29sdW1uLCByb3cpO1xuICAgIHRoaXMub25DbGVhclZhbHVlKGNvbHVtbiwgcm93KTtcbiAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KHRydWUpO1xuICAgIHRoaXMucm93VXBkYXRlQ2hhbmdlID0gdHJ1ZTtcbiAgICBpZiAoY29sdW1uLm9uQ2hhbmdlKSB7XG4gICAgICBjb2x1bW4ub25DaGFuZ2Uocm93KTtcbiAgICB9XG4gICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMub25DbGlja0V2ZW50VHJpZ2dlcmVkID09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLnNldERyb3Bkb3duZGF0YVZhbHVlID0gZmFsc2VcbiAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuZ3JpZFNlcnZpY2Uucm93VXBkYXRlID0gZmFsc2U7XG4gICAgdGhpcy5nZW5lcmF0ZVJvd3NEYXRhQ29weSA9IGZhbHNlXG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgJiYgY29sdW1uLmFnZ3JlZ2F0ZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmFnZ3JlZ2F0ZUZvb3RlciA9IHRydWU7XG4gICAgICB0aGlzLnNldEFnZ3JlZ2F0ZVRleHQoY29sdW1uKTtcbiAgICB9XG4gIH1cblxuICBjaGVja0JveENoYW5nZUV2ZW50KGV2ZW50OiBhbnksIGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdykge1xuICAgIHJvd1tjb2x1bW4uZmllbGRdID0gZXZlbnQ7XG4gICAgaWYgKHRoaXMucm93c0NoYW5nZS5vYnNlcnZlcnM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnJvd1VwZGF0ZSA9IGZhbHNlO1xuICAgIHRoaXMuZ2VuZXJhdGVSb3dzRGF0YUNvcHkgPSBmYWxzZVxuICAgIHRoaXMucm93VXBkYXRlQ2hhbmdlID0gdHJ1ZVxuICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICB9XG5cbiAgLy8gc2V0IGRyb3Bkb3duIGRpc3BsYXlGaWVsZCB2YWx1ZSBiYXNlIG9uIG9wdGlvbkxhYmVsICYgb3B0aW9uVmFsdWUuXG4gIGRpc3BsYXlGaWVsZERyb3Bkb3duVmFsdWUoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XG4gICAgaWYgKFxuICAgICAgY29sdW1uPy50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiZcbiAgICAgIGNvbHVtbi5kaXNwbGF5RmllbGQgJiZcbiAgICAgIGNvbHVtbi5kaXNwbGF5RmllbGQ/Lmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIGNvbnN0IGtleTogYW55ID0gT2JqZWN0LmtleXMocm93KT8uZmluZChcbiAgICAgICAgKHJvd0luZm8pID0+XG4gICAgICAgICAgcm93SW5mbz8udG9Mb3dlckNhc2UoKSA9PT0gY29sdW1uLmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuICAgICAgY29uc3QgZGlzcGxheUZpZWxkVmFsdWUgPSBjb2x1bW4uZGF0YS5maW5kKFxuICAgICAgICAocmVjb3JkOiBhbnkpID0+XG4gICAgICAgICAgcmVjb3JkW2NvbHVtbi5vcHRpb25WYWx1ZV0/LnRvU3RyaW5nKCkgPT09XG4gICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKClcbiAgICAgICk7XG4gICAgICBpZiAoa2V5ICYmIGRpc3BsYXlGaWVsZFZhbHVlKSB7XG4gICAgICAgIHJvd1trZXldID0gZGlzcGxheUZpZWxkVmFsdWVbY29sdW1uLm9wdGlvbkxhYmVsXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBZGQgYXV0b1NlYXJjaCBvbiBHcmlkLlxuICBhdXRvU2VhcmNoKGV2ZW50OiBhbnksIGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIGlmIChldmVudCAmJiBjb2x1bW4gJiYgcm93KSB7XG4gICAgICBjb2x1bW4ub25SZXR1cm4oZXZlbnQucXVlcnksIGNvbHVtbiwgcm93KTtcbiAgICB9XG4gIH1cblxuICAvLyBSZWZyZXNoIGdyaWRcbiAgcmVmcmVzaEdyaWQoKSB7XG4gICAgdGhpcy5yZWxvYWRQYWdlID0gaW50ZXJ2YWwodGhpcy5zZXRHcmlkUmVmcmVzaFRpbWUpLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZ3JpZGZpbHRlciA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5ncmlkZmlsdGVyID0geyBmaWx0ZXJzOiBbXSwgc29ydHM6IFtdIH07XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zZXRHcmlkUmVmcmVzaFRpbWUpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVTZXJ2ZXJTaWRlRXZlbnRzKHRoaXMuZ3JpZGZpbHRlcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBSZW1vdmUgRmlsdGVyVmFsdWVzXG4gIGNsZWFyZ3JpZEZpbHRlcnNWYWx1ZSgpIHtcbiAgICBjb25zdCBnbG9iYWxGaWx0ZXJDbGVhclZhbHVlQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgICAnY2xlYXJHbG9iYWxGaWx0ZXJCdG4nXG4gICAgKTtcbiAgICBpZiAoZ2xvYmFsRmlsdGVyQ2xlYXJWYWx1ZUJ0bikge1xuICAgICAgZ2xvYmFsRmlsdGVyQ2xlYXJWYWx1ZUJ0bi5jbGljaygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnMgJiYgdGhpcy5zZWxlY3RlZENvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zZXJ2ZXJGaWx0ZXJzLmZpbHRlcnMgPSBbXTtcbiAgICAgIGxldCBzZWFyY2hGaWx0ZXJzID0gdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdO1xuICAgICAgc2VhcmNoRmlsdGVycz8uZmlsdGVycz8uZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICAgIGNvbC52YWx1ZSA9IG51bGw7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgICBjb2wuZmlsdGVyVmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLmZpbHRlck9iaihjb2wpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZWRpdEFsbFJvd3NBdE9uY2UoKSB7XG4gICAgaWYgKHRoaXMuZWRpdFJvd1Blcm1pc3Npb24pIHtcbiAgICAgIGlmICh0aGlzLmdldENsYXNzRm9yRWRpdEFsbFJvd3MoJ2VkaXRSb3cnKSkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnMuc29tZSgoY29sdW1uKSA9PiBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4gJiYgKGNvbHVtbi5maWx0ZXJpbmcgPT09IHRydWUgfHwgY29sdW1uLmZpbHRlcmluZyA9PT0gdW5kZWZpbmVkKSkpIHtcbiAgICAgICAgICB0aGlzLmVkaXRBbGxSZWNvcmQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc29ydERpc2FibGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzYXZlQWxsUm93c0F0T25jZSgpIHtcbiAgICB0aGlzLmdldENsYXNzRm9yRWRpdEFsbFJvd3MoJ3NhdmVSb3cnKTtcbiAgfVxuXG4gIC8vIHJlc2V0IHRoZSBncmlkIHJvd3NWYWx1ZSB0byBvcmlnbmFsIHZhbHVlc1xuICBjYW5jZWxBbGxSb3dzQXRPbmNlKCkge1xuICAgIHRoaXMucm93c0RhdGEgPSBbLi4udGhpcy5yb3dzRGF0YUNvcHldO1xuICAgIHRoaXMucm93c0RhdGFDb3B5ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnJvd3NEYXRhKSk7XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnM/LmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSkge1xuICAgICAgICB0aGlzLnJvd3NEYXRhPy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZF0pIHtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gbmV3IERhdGUocm93W2NvbHVtbi5maWVsZF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgIH0pO1xuICAgIGlmICh0aGlzLmNvbHVtbnM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSAmJiBjb2x1bW4uYWdncmVnYXRlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmFnZ3JlZ2F0ZUZvb3RlciA9IHRydWU7XG4gICAgICAgICAgdGhpcy5zZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHRoaXMub25DYW5jZWxBbGxSb3dzLmVtaXQodGhpcy5yb3dzRGF0YSk7XG4gIH1cbiAgZ2V0Q2xhc3NGb3JFZGl0QWxsUm93cyhjbGFzc05hbWU6IHN0cmluZyA9ICcnKSB7XG4gICAgbGV0IHN1Y2Nlc3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpZiAoY2xhc3NOYW1lID09PSAnZWRpdFJvdycpIHtcbiAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICB0aGlzLm9uUm93RWRpdEluaXQocm93KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGdldEJ0bnM6IGFueSA9IHRoaXMuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudD8uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWUpO1xuICAgIGlmIChnZXRCdG5zICYmIGdldEJ0bnMubGVuZ3RoID4gMCkge1xuICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICBpZiAoY2xhc3NOYW1lID09PSAnc2F2ZVJvdycpIHtcbiAgICAgICAgdGhpcy5lZGl0QWxsUmVjb3JkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2F2ZUFsbFJlY29yZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IHJlY29yZHMkID0gW107XG4gICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBnZXRCdG5zKSB7XG4gICAgICAgICAgICBjb25zdCByb3dTYXZlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBpdGVtLmNsaWNrKCk7XG4gICAgICAgICAgICAgIHJlc29sdmUoaXRlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlY29yZHMkLnB1c2gocm93U2F2ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFByb21pc2UuYWxsKHJlY29yZHMkKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tsaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5vblJvd1VwZGF0ZS5lbWl0KHRoaXMuc2V0Um93c0RhdGEodGhpcy5jaGVja2xpc3QpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlUm93c0RhdGFDb3B5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdGhpcy5vblJvd1VwZGF0ZS5lbWl0KHRoaXMuc2F2ZVJlY29yZEFycmF5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2F2ZVJlY29yZEFycmF5ID0gW107XG4gICAgICAgICAgICB0aGlzLmVkaXRBbGxSb3dzQXRPbmNlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNhdmVBbGxSZWNvcmQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGNsYXNzTmFtZSA9PSAnY2FuY2VsUm93Jykge1xuICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgZ2V0QnRucykge1xuICAgICAgICAgICAgICBpdGVtLmNsaWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdWNjZXNzO1xuICB9XG5cbiAgLy9Gb2N1c2VkIGNhbGVuZGFyIGlucHV0IG9uIHNlbGVjdCBkYXRlXG4gIHNlbGVjdERhdGUoY29sdW1uOiBhbnkpIHtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjb2x1bW4uZmllbGQpPy5mb2N1cygpO1xuICB9XG5cbiAgLy9hcHBseSBmaWx0ZXIgb24gZ3JpZCB3aGVuIHNlYXJjaCBidG4gY2xpY2tlZFxuICBhcHBseUdyaWRGaWx0ZXJCdG4oKSB7XG4gICAgIHRoaXMuZ3JpZFNlcnZpY2UudXNlclNlYXJjaGVkPXRydWU7XG4gICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gZmFsc2U7XG4gICAgIHRoaXMuZ3JpZFNlcnZpY2Uucm93VXBkYXRlID0gZmFsc2U7XG4gICAgIHRoaXMucm93VXBkYXRlQ2hhbmdlID0gZmFsc2U7XG4gICAgIGxldCBmaWx0ZXJJbkRpYWxvZzogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncC1kaWFsb2cnKTtcbiAgICAgbGV0IGdsb2JhbEZpbHRlckFwcGx5QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zZWFyY2hidG5JZCk7XG4gICAgIGlmIChmaWx0ZXJJbkRpYWxvZyAmJiBmaWx0ZXJJbkRpYWxvZy5sZW5ndGggPiAwKSB7XG4gICAgICAgY29uc3QgZ2xvYmFsU2VhcmNoQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zZWFyY2hidG5JZCk7XG4gICAgICAgaWYgKGdsb2JhbFNlYXJjaEJ0bikge1xuICAgICAgICAgZ2xvYmFsU2VhcmNoQnRuLmNsaWNrKCk7XG4gICAgICAgfSBlbHNlIGlmICh0aGlzLmdyaWRGaWx0ZXJPYmogJiYgT2JqZWN0LmtleXModGhpcy5ncmlkRmlsdGVyT2JqKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICB0aGlzLmFwcGx5RW50ZXJFdmVudChcbiAgICAgICAgICAgdGhpcy5ncmlkRmlsdGVyT2JqLmZpbHRlcixcbiAgICAgICAgICAgdGhpcy5ncmlkRmlsdGVyT2JqLmV2ZW50LFxuICAgICAgICAgICB0aGlzLmdyaWRGaWx0ZXJPYmouY29sdW1uXG4gICAgICAgICApO1xuICAgICAgIH1cbiAgICAgfSBlbHNlIGlmIChnbG9iYWxGaWx0ZXJBcHBseUJ0bikge1xuICAgICAgIGdsb2JhbEZpbHRlckFwcGx5QnRuLmNsaWNrKCk7XG4gICAgIH0gZWxzZSB7XG4gICAgICAgaWYgKHRoaXMuZ3JpZEZpbHRlck9iaiAmJiBPYmplY3Qua2V5cyh0aGlzLmdyaWRGaWx0ZXJPYmopLmxlbmd0aCA+IDApIHtcbiAgICAgICAgIHRoaXMuYXBwbHlFbnRlckV2ZW50KFxuICAgICAgICAgICB0aGlzLmdyaWRGaWx0ZXJPYmouZmlsdGVyLFxuICAgICAgICAgICB0aGlzLmdyaWRGaWx0ZXJPYmouZXZlbnQsXG4gICAgICAgICAgIHRoaXMuZ3JpZEZpbHRlck9iai5jb2x1bW5cbiAgICAgICAgICk7XG4gICAgICAgfVxuICAgICB9XG4gICAgICB0aGlzLmNoZWNrbGlzdCA9IFtdO1xuICAgICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBbXTtcbiAgIH1cblxuICAvLyBpbnZva2UgbXVsdGlTZWxlY3Rpb24gY2xpY2sgZXZlbnRcbiAgbXVsdGlDaGVja0JveE9uY2xpY2socm93SW5mbzogYW55LCBldmVudDogYW55LCBzaW5nbGVTZWxlY3Rpb246IGJvb2xlYW4gPSBmYWxzZSkge1xuXG4gICAgaWYgKCFzaW5nbGVTZWxlY3Rpb24pIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJvd0luZm8pICYmIHJvd0luZm8/Lmxlbmd0aCA+IDAgJiYgZXZlbnQ/LnRhcmdldD8uYXJpYUNoZWNrZWQgJiYgZXZlbnQ/LnRhcmdldD8uYXJpYUNoZWNrZWQ/LnRvU3RyaW5nKCkgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgIHRoaXMuY2hlY2tsaXN0ID0gWy4uLnJvd0luZm9dO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJvd0luZm8pICYmIChldmVudD8udGFyZ2V0Py5hcmlhQ2hlY2tlZCA9PSBudWxsIHx8IGV2ZW50Py50YXJnZXQ/LmFyaWFDaGVja2VkPy50b1N0cmluZygpID09PSBcImZhbHNlXCIpKSB7XG4gICAgICAgIHRoaXMuY2hlY2tsaXN0ID0gW107XG4gICAgICB9XG4gICAgICBjb25zdCBhbHJlYWR5RXhpc3QgPSB0aGlzLmNoZWNrbGlzdC5zb21lKChyb3cpID0+IHJvd1t0aGlzLmRhdGFLZXldID09IHJvd0luZm9bdGhpcy5kYXRhS2V5XSk7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocm93SW5mbykgJiYgZXZlbnQ/LnRhcmdldD8uYXJpYUNoZWNrZWQgJiYgIWFscmVhZHlFeGlzdCkge1xuICAgICAgICB0aGlzLmNoZWNrbGlzdC5wdXNoKHJvd0luZm8pO1xuICAgICAgfSBlbHNlIGlmIChhbHJlYWR5RXhpc3QgJiYgKGV2ZW50Py50YXJnZXQ/LmFyaWFDaGVja2VkID09IG51bGwgfHwgZXZlbnQ/LnRhcmdldD8uYXJpYUNoZWNrZWQgPT09IFwiZmFsc2VcIikpIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY2hlY2tsaXN0LmZpbmRJbmRleCgocm93KSA9PiByb3dbdGhpcy5kYXRhS2V5XSA9PSByb3dJbmZvW3RoaXMuZGF0YUtleV0pO1xuICAgICAgICAgIHRoaXMuY2hlY2tsaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2hlY2tsaXN0ID0gW3Jvd0luZm9dXG4gICAgfVxuICAgIHRoaXMub25NdWx0aVNlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMuc2V0Um93c0RhdGEodGhpcy5jaGVja2xpc3QpKTtcbiAgfVxuXG4gIHNldFJvd3NEYXRhKHJvd3NEYXRhKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocm93c0RhdGEpKSB7XG4gICAgICByb3dzRGF0YS5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICByb3cgPSB0aGlzLnJlbW92ZVJvd09iaihyb3cpO1xuICAgICAgICByb3cgPSB0aGlzLmdyaWRTZXJ2aWNlLnNldFJvd1ZhbHVlKHJvdyk7XG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByb3dzRGF0YSA9IHRoaXMucmVtb3ZlUm93T2JqKHJvd3NEYXRhKTtcbiAgICAgIHJvd3NEYXRhID0gdGhpcy5ncmlkU2VydmljZS5zZXRSb3dWYWx1ZShyb3dzRGF0YSk7XG4gICAgfVxuICAgIHJldHVybiByb3dzRGF0YTtcbiAgfVxuXG4gIHJlbW92ZVJvd09iaihyb3c6IGFueSkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgIGlmIChrZXlzPy5sZW5ndGggPiAwKSB7XG4gICAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCdfb2JqJykpIHtcbiAgICAgICAgICBkZWxldGUgcm93W2tleV07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiByb3c7XG4gIH1cblxuICBhcHBseURyb3Bkb3duRmlsdGVyKGZpbHRlcjogYW55LCBldmVudDogYW55KSB7XG4gICAgZmlsdGVyKGV2ZW50LnRhcmdldCk7XG4gIH1cblxuICBzZWFyY2hEcm9wZG93bkZpbHRlcihmaWx0ZXI6IGFueSwgZXZlbnQ6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICB0aGlzLnNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCBldmVudCk7XG4gICAgdGhpcy5kcm9wRG93bkZpbHRlciA9IHsgZmlsdGVyOiBmaWx0ZXIsIGV2ZW50OiBldmVudCwgY29sdW1uOiBjb2x1bW4gfTtcbiAgICAvLyBpZiAoY29sdW1uLmFsbG93U2VhcmNoICE9PSB0cnVlKSB7XG4gICAgLy8gICB0aGlzLmFwcGx5RHJvcGRvd25GaWx0ZXIoZmlsdGVyLCBldmVudCk7XG4gICAgLy8gfVxuICB9XG5cbiAgbG9va3VwQ2xlYXJWYWx1ZShjb2x1bW46IElHcmlkQ29sdW1uLCByb3c/OiBhbnkpIHtcbiAgICBpZiAocm93KSB7XG4gICAgICBjb2x1bW4uZGlzcGxheUZpZWxkID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdID0gJycgOiAnJ1xuICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS50ZXh0ID0gJycgOiAnJ1xuICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgY29sdW1uLmZpbHRlclZhbHVlID0gJyc7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuY29sdW1ucy5maW5kSW5kZXgoKGNvbCkgPT4gY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zW2luZGV4XS5maWx0ZXJWYWx1ZSA9ICcnO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRGaWx0ZXJGb2N1c091dChjb2x1bW4pO1xuICAgIH1cbiAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KHRydWUpO1xuICAgIGlmIChjb2x1bW4ub25DaGFuZ2UpIHtcbiAgICAgIGNvbHVtbi5vbkNoYW5nZShyb3cpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGludm9rZSB3aGVuIGNsaWNrIGhlYWRlciBjaGVja2JveCBmaWx0ZXJcbiAgY2xpY2tDaGVja0JveEZpbHRlcihjb2x1bW46IElHcmlkQ29sdW1uKSB7XG4gICAgaWYgKHRoaXMuZWRpdEFsbFJlY29yZCB8fCBjb2x1bW4uYWxsb3dFZGl0KSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTlxuICAgICAgICAmJlxuICAgICAgICBjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gJ2NoZWNrYm94JyAmJiBjb2x1bW4uZmlsdGVyaW5nICE9IGZhbHNlXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LmRpc2FibGVkICE9PSB0cnVlICYmICFjb2x1bW4uZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldID0gY29sdW1uLmZpbHRlclZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnJvd3NDaGFuZ2Uub2JzZXJ2ZXJzPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgIH1cbiAgICB0aGlzLm9uQ2hlY2tCb3hGaWx0ZXJDbGljay5lbWl0KGNvbHVtbik7XG4gIH1cbiAgLy9zZXQgaGVhZGVyIGNoZWNrYm94IHZhbHVlIGZvciBnZXR0aW5nIGFsbCBjb2x1bW5zIG9uIHN0YXkgYWRtaW5cbiAgc2V0SGVhZGVyQ2hlY2tCb3hWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5pc0luY2x1ZGVkQWxsQ29sdW1ucy5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIC8vIHNldCBjYWxlbmRhciAyIE9yIDQgZGlnaXQgeWVhciBmb3JtYXRcbiAgY2FsZW5kYXJJbnB1dFZhbHVlKGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIGlmKCFjb2x1bW4udGltZU9ubHkpe1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjb2x1bW4uZmllbGQgKyByb3dbdGhpcy5kYXRhS2V5XSlbMF0/LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgKHZhbDogYW55KSA9PiB7XG4gICAgICBpZiAoIXZhbD8udGFyZ2V0Py52YWx1ZT8uaW5jbHVkZXMoJy8nKSkge1xuICAgICAgICBpZiAodmFsPy50YXJnZXQ/LnZhbHVlPy5sZW5ndGggPT0gOCB8fCBjb2x1bW4/LmZvcm1hdD8udHlwZSA9PT0gRUdyaWRGb3JtYXRUeXBlLlNIT1JUREFURSkge1xuICAgICAgICAgIHZhbC50YXJnZXQudmFsdWUgPSB2YWw/LnRhcmdldD8udmFsdWU/LnJlcGxhY2UoLyhcXGR7Mn0pKFxcZHsyfSkoXFxkezR9KS8sICckMS8kMi8kMycpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbD8udGFyZ2V0Py52YWx1ZT8ubGVuZ3RoID09IDYpIHtcbiAgICAgICAgICB2YWwudGFyZ2V0LnZhbHVlID0gdmFsPy50YXJnZXQ/LnZhbHVlPy5yZXBsYWNlKC8oXFxkezJ9KSg/PVxcZCkvZywgJyQxLycpO1xuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gdmFsLnRhcmdldC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgeWVhciA9IHZhbD8udGFyZ2V0Py52YWx1ZT8udG9TdHJpbmcoKT8uc3BsaXQoJy8nKVsyXTtcbiAgICAgIGlmICh5ZWFyICYmIHllYXIubGVuZ3RoID09IDQpIHtcbiAgICAgICAgdGhpcy5jYWxlbmRhckZvcm1hdCA9ICdtbS9kZC95eSc7XG4gICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gbmV3IERhdGUodmFsPy50YXJnZXQ/LnZhbHVlKT8udG9Mb2NhbGVEYXRlU3RyaW5nKFwiZW4tVVNcIik7XG4gICAgICB9IGVsc2UgaWYgKHllYXIgJiYgeWVhci5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5jYWxlbmRhckZvcm1hdCA9ICdtbS9kZC95JztcbiAgICAgIH1cbiAgICB9KTtcbiAgICB9XG4gICAgXG4gIH1cbiAgY2hhbmdlUGFzc3dvcmRUeXBlKGNvbHVtbiwgcm93KXtcbiAgICB2YXIgdGV4dFR5cGU9cm93W2NvbHVtbi5maWVsZCsnX29iaiddPyhyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10udGV4dFR5cGU9PSdwYXNzd29yZCc/J3RleHQnOidwYXNzd29yZCcpOmNvbHVtbi50ZXh0VHlwZT09J3Bhc3N3b3JkJz8ndGV4dCc6J3Bhc3N3b3JkJztcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnNldEdyaWRSb3dQcm9wVmFsdWUocm93LCBbe3Byb3BOYW1lOkVHcmlkUm93UHJvcE5hbWUuVEVYVFRZUEUsIHByb3BWYWx1ZTp0ZXh0VHlwZSwgZmllbGQ6Y29sdW1uLmZpZWxkfV0pO1xuICAgXG4gIH1cblxuICBzZXRUYWJsZVNjcm9sbFBvc2l0aW9uKCkge1xuICAgIGNvbnN0IHRhYmxlV3JhcHBlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIucC1kYXRhdGFibGUtd3JhcHBlclwiKTtcbiAgICBjb25zdCB0YWJsZVdyYXBwZXJTY3JvbGxUb3AgPSB0YWJsZVdyYXBwZXI/LnNjcm9sbFRvcDtcbiAgICBjb25zdCB0YWJsZVdyYXBwZXJTY3JvbGxMZWZ0ID0gdGFibGVXcmFwcGVyPy5zY3JvbGxMZWZ0O1xuICAgIGlmICh0YWJsZVdyYXBwZXJTY3JvbGxUb3ApIHtcbiAgICAgIHRoaXMuc2Nyb2xsUG9zaXRpb25ZID0gdGFibGVXcmFwcGVyU2Nyb2xsVG9wO1xuICAgICAgdGhpcy5zY3JvbGxQb3NpdGlvblggPSB0YWJsZVdyYXBwZXJTY3JvbGxMZWZ0O1xuICAgIH1cbiAgICBpZiAodGFibGVXcmFwcGVyU2Nyb2xsVG9wID09PSAwKSB7XG4gICAgICB0YWJsZVdyYXBwZXIuc2Nyb2xsVG8odGhpcy5zY3JvbGxQb3NpdGlvblgsIDApO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRhYmxlV3JhcHBlci5zY3JvbGxUbyh0aGlzLnNjcm9sbFBvc2l0aW9uWCwgdGhpcy5zY3JvbGxQb3NpdGlvblkpO1xuICAgIH1cbiAgfVxuICBzaG93Q29uZmlybWF0aW9uKGV2ZW50OiBJR3JpZFBhZ2luYXRpb25FdmVudCkge1xuICAgIGlmICghdGhpcy5QYWdlQ2hhbmdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gZXZlbnQuZmlyc3QgLyBldmVudC5yb3dzO1xuICAgIH1cbiAgICBpZiAoY29uZmlybShcIllvdSB3aWxsIGxvc2UgY2hhbmdlcyBub3Qgc2F2ZWQgb24gcGFnZS4gV291bGQgeW91IGxpa2UgdG8gY29udGludWU/XCIpID09IHRydWUpIHtcbiAgICAgIHRoaXMuYXV0b0xvYWREYXRhID0gdHJ1ZTtcbiAgICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpXG4gICAgICB0aGlzLmhhbmRsZVNlcnZlclNpZGVQYWdpbmF0aW9uKGV2ZW50KTtcbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCA9IGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLlBhZ2VDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMudGFibGUuZmlyc3QgPSB0aGlzLmN1cnJlbnRQYWdlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudGFibGUuZmlyc3QgPSBNYXRoLmZsb29yKHRoaXMuY3VycmVudFBhZ2UgLyBldmVudC5yb3dzKTtcbiAgICAgICAgICAgIHRoaXMudGFibGUucm93cyA9IGV2ZW50LnJvd3M7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2V0VGFibGVTY3JvbGxQb3NpdGlvbigpO1xuICAgICAgICB9KTtcbiAgICAgIHRoaXMuYXV0b0xvYWREYXRhID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbn0iLCI8ZGl2IGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtd3JhcHBlclwiPlxuPHAtY29uZmlybURpYWxvZyBbc3R5bGVdPVwieyB3aWR0aDogJzUwdncnIH1cIiAqbmdJZj1cInVzZUlubGluZUNSVURcIiBrZXk9XCJoYW5kbGVJbmxpbmVDUlVEXCI+PC9wLWNvbmZpcm1EaWFsb2c+XG48cC1jb25maXJtRGlhbG9nIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtY29uZmlybS1kaWFsb2dcIiAqbmdJZj1cImNvbHVtbkFjdGlvbnMubGVuZ3RoID4gMFwiXG4gIGtleT1cImhhbmRsZWNvbHVtbkFjdGlvbnNcIj48L3AtY29uZmlybURpYWxvZz5cbjxkaXYgY2xhc3M9XCJnbG9iYWwtZmlsdGVyLWJ1dHRvbnMtd3JhcHBlclwiPlxuXG4gIDwhLS0gYnV0dG9uIGZvciBhcHBseSB2YWx1ZSBvbiBHcmlkIC0tPlxuICA8YnV0dG9uICpuZ0lmPVwiKChmaWx0ZXJpbmcgJiYgIWhpZGVGaWx0ZXIgKSB8fCBzaG93RmlsdGVyYnRuKVwiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS1zZWFyY2hcIiAoY2xpY2spPVwiYXBwbHlHcmlkRmlsdGVyQnRuKClcIlxuICAgIFtjbGFzc109XCJcbiAgc2VhcmNoR3JpZEZpbHRlciA/ICdwLWJ1dHRvbi1zdWNjZXNzIGFwcGx5LWZpbHRlci1idG4gZmlsdGVyLWJ0bicgOiAnaGlkZS1jbGVhci1maWx0ZXItYnV0dG9uIGFwcGx5LWZpbHRlci1idG4gZmlsdGVyLWJ0bidcbiAgXCI+PC9idXR0b24+XG5cbiAgPCEtLSBidXR0b24gZm9yIGNsZWFyIHZhbHVlIG9uIEdyaWQgLS0+XG4gIDxidXR0b24gKm5nSWY9XCIoKGZpbHRlcmluZyAmJiAhaGlkZUZpbHRlciApfHwgc2hvd0ZpbHRlcmJ0bilcIiBwQnV0dG9uIGlkPVwiY2xlYXJHcmlkRmlsdGVyVmFsdWVzQnV0dG9uXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgaWNvbj1cInBpIHBpLXJlcGxheVwiIChjbGljayk9XCJjbGVhcmdyaWRGaWx0ZXJzVmFsdWUoKVwiIFtjbGFzc109XCJcbiAgICAgIGNsZWFyR3JpZEZpbHRlciA/ICdmaWx0ZXItYnRuJyA6ICdoaWRlLWNsZWFyLWZpbHRlci1idXR0b24gZmlsdGVyLWJ0bidcbiAgICAgIFwiIGNsYXNzPSdnbG9iYWwtcmVmcmVzaCBnbG9iYWwtYnRuJ1xuICAgID48L2J1dHRvbj5cblxuICA8IS0tIGJ1dHRvbiBmb3Igc2F2ZSBhbGwgZ3JpZCBhdCBvbmNlIC0tPlxuICA8YnV0dG9uIHBCdXR0b24gKm5nSWY9XCJlZGl0QWxsUm93cyAmJiBlZGl0Um93UGVybWlzc2lvblwiIGlkPVwic2F2ZUFsbEdyaWRWYWx1ZXNcIlxuICAgIGljb249XCJwaSBwaS1jaGVja1wiIFtsYWJlbF09XCInU2F2ZSdcIlxuICAgIFtjbGFzc109XCJoaWRlR3JpZFNhdmVCdXR0b24gPyAnaGlkZS1jbGVhci1maWx0ZXItYnV0dG9uIHNhdmUtYWxsLWdyaWQnIDogJ3VpLWJ1dHRvbi1pbmZvIHNhdmUtYWxsLWdyaWQnXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgKGNsaWNrKT1cInNhdmVBbGxSb3dzQXRPbmNlKClcIj48L2J1dHRvbj5cblxuICA8IS0tIGJ1dHRvbiBmb3IgY2FuY2VsIGFsbCBncmlkIGF0IG9uY2UgLS0+XG4gIDxidXR0b24gcEJ1dHRvbiAqbmdJZj1cImVkaXRBbGxSb3dzICYmICFoaWRlR3JpZENhbmNlbEJ1dHRvblwiIGlkPVwiZWRpdEJ0bkdsb2JhbHZhbHVlc1wiIHR5cGU9XCJidXR0b25cIiBbbGFiZWxdPVwiJ0NhbmNlbCdcIlxuICAgIGljb249XCJwaSBwaS10aW1lc1wiIGNsYXNzPVwidWktYnV0dG9uLWluZm9cIiAoY2xpY2spPVwiY2FuY2VsQWxsUm93c0F0T25jZSgpXCI+PC9idXR0b24+XG5cbiAgPCEtLSBoZWFkZXIgQnV0dG9uIGZvciBtdWx0aVNlbGVjdCBvbiBHcmlkIC0tPlxuICA8c3BhbiAqbmdJZj1cImFsbG93Q29sdW1uVG9nZ2xlXCIgb2JzZXJ2ZUNoZWNrYm94PlxuICAgIDxwLW11bHRpU2VsZWN0ICBbc2hvd1RvZ2dsZUFsbF09XCJmYWxzZVwiIG9wdGlvbkRpc2FibGVkPVwiZmFsc2VcIiBbb3B0aW9uc109XCJzZWxlY3RlZFRvZ2dsZUNvbHVtbnNcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkQ29sdW1uc1wiIG9wdGlvbkxhYmVsPVwiaGVhZGVyXCJcbiAgICAgIHNlbGVjdGVkSXRlbXNMYWJlbD1cInswfSBjb2x1bW5zIHNlbGVjdGVkXCIgIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtbXVsdGlzZWxlY3QtaGVhZGVyLWJ1dHRvblwiIHBsYWNlaG9sZGVyPVwiQ2hvb3NlIENvbHVtbnNcIj5cbiAgICA8L3AtbXVsdGlTZWxlY3Q+XG4gIDwvc3Bhbj5cblxuICA8IS0tIGhlYWRlciBCdXR0b24gZm9yIEFkZGluZyBuZXcgUm93IG9uIEdyaWQgLS0+XG4gIDxidXR0b24gcEJ1dHRvbiAqbmdJZj1cInVzZUlubGluZUNSVUQgJiYgYWRkUm93UGVybWlzc2lvbiAmJiAhaGlkZUFkZEJ0blwiIHR5cGU9XCJidXR0b25cIiBbbGFiZWxdPVwiJ0FkZCdcIiBwQWRkUm93XG4gICAgW3RhYmxlXT1cImNvbXBvbmVudFRhYmxlUmVmXCIgW3ByZXZlbnROZXdSb3ddPVwicHJldmVudE5ld1Jvd1wiIFtuZXdSb3ddPVwibmV3R3JpZFJvd1wiIFtpZF09XCJkYXRhS2V5XCIgcFRvb2x0aXA9XCJBZGQgTmV3IFJvd1wiIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgaWNvbj1cInBpIHBpLXBsdXNcIiBbY2xhc3NdPVwiJ3VpLWJ1dHRvbi1pbmZvIGdsb2JhbC1hZGQtYnRuJytncmlkTmFtZVwiIChjbGljayk9XCJhZGROZXdSb3cobmV3R3JpZFJvdywgdHJ1ZSlcIiBwUmlwcGxlPjwvYnV0dG9uPlxuXG4gICAgXG4gIDwhLS0gaGVhZGVyIEJ1dHRvbiBmb3IgRXhjZWwgRmlsZSBvbiBHcmlkIC0tPlxuICA8YnV0dG9uICpuZ0lmPVwiYWxsb3dFeHBvcnRUb0V4Y2VsXCIgdHlwZT1cImJ1dHRvblwiIHBCdXR0b24gaWNvbj1cInBpIHBpLWZpbGUtZXhjZWxcIiAoY2xpY2spPVwiZXhwb3J0RXhjZWwoKVwiXG4gIGNsYXNzPVwicC1idXR0b24tc3VjY2Vzc1wiIHBUb29sdGlwPVwiRXhwb3J0IHRvIEV4Y2VsXCIgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCIgcFJpcHBsZT48L2J1dHRvbj5cblxuPCEtLSBoZWFkZXIgQnV0dG9uIGZvciBQREYgRmlsZSBvbiBHcmlkIC0tPlxuPGJ1dHRvbiAqbmdJZj1cImFsbG93RXhwb3J0VG9QZGZcIiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBpY29uPVwicGkgcGktZmlsZS1wZGZcIiAoY2xpY2spPVwiZXhwb3J0UGRmKClcIlxuICBjbGFzcz1cInAtYnV0dG9uLXdhcm5pbmcgbXItMiBtbC0yXCIgcFRvb2x0aXA9XCJFeHBvcnQgdG8gUGRmXCIgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCIgcFJpcHBsZT48L2J1dHRvbj5cblxuICA8IS0tIDxkaXYgKm5nRm9yPVwibGV0IHJlcG9ydEJ1dHRvbiBvZiByZXBvcnRCdXR0b25zXCIgY2xhc3M9XCJ1aS1idXR0b24taW5mbyBtci0yIG1sLTJcIj5cbiAgICA8c2UtZ2VuZXJhdGUtcmVwb3J0LWJ0biAqbmdJZiA9XCIhcmVwb3J0QnV0dG9uLmhpZGRlblwiW3JlcElkXT1cInJlcG9ydEJ1dHRvbi5yZXBvcnRJZFwiIFtsYWJlbF09XCJyZXBvcnRCdXR0b24ubGFiZWxcIiBbcGFyYW1zXT1cInJlcG9ydEJ1dHRvbi5wYXJhbXNcIlxuICAgICAgW3Nob3dEaWFsb2ddPVwicmVwb3J0QnV0dG9uLnNob3dEaWFsb2dcIj48L3NlLWdlbmVyYXRlLXJlcG9ydC1idG4+XG4gIDwvZGl2PiAtLT5cblxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG5cbiAgPG5nLWNvbnRhaW5lciAgKm5nRm9yPVwibGV0IHJlcG9ydEJ1dHRvbiBvZiByZXBvcnRCdXR0b25zXCI+XG4gICAgPHNlLWdlbmVyYXRlLXJlcG9ydC1idG4gKm5nSWYgPVwiIXJlcG9ydEJ1dHRvbi5oaWRkZW5cIltyZXBJbmZvXT1cInJlcG9ydEJ1dHRvblwiIFtsYWJlbF09XCJyZXBvcnRCdXR0b24ubGFiZWxcIiBbcGFyYW1zXT1cInJlcG9ydEJ1dHRvbi5wYXJhbXNcIiBbaWNvbl09XCJyZXBvcnRCdXR0b24uaWNvblwiIFtjbGFzc109XCJyZXBvcnRCdXR0b24uY2xhc3NcIlxuICAgIFtzaG93RGlhbG9nXT1cInJlcG9ydEJ1dHRvbi5zaG93RGlhbG9nXCIgW3JlcG9ydFR5cGVdPVwiIHJlcG9ydEJ1dHRvbi5yZXBvcnRUeXBlXCIgW3JlcG9ydEhlYWRlcl09XCJyZXBvcnRCdXR0b24ucmVwb3J0SGVhZGVyXCIgW3JlcG9ydEZvb3Rlcl09XCJyZXBvcnRCdXR0b24ucmVwb3J0Rm9vdGVyXCI+PC9zZS1nZW5lcmF0ZS1yZXBvcnQtYnRuPlxuICA8L25nLWNvbnRhaW5lcj5cblxuPC9kaXY+XG5cbiAgPHAtdGFibGUgKm5nSWY9XCIhaXNHcmlkSGlkZGVuXCIgaWQ9XCJteS10YWJsZVwiIFt2YWx1ZV09XCJyb3dzRGF0YVwiIFtjb2x1bW5zXT1cInNlbGVjdGVkQ29sdW1uc1wiIHNvcnRNb2RlPVwibXVsdGlwbGVcIlxuICAgIFtsYXp5XT1cInVzZVNlcnZlclNpZGVFdmVudHMgfHwgcGFnaW5hdGlvblwiICBbcGFnaW5hdG9yXT1cInBhZ2luYXRpb25cIiBbYWx3YXlzU2hvd1BhZ2luYXRvcl09XCJwYWdpbmF0aW9uICYmIHRvdGFsUmVjb3JkcyA+IDBcIiBcbiAgICBbY2xhc3NdPVwiJyBncmlkLWNvbXBvbmVudC1tYWluLXRhYmxlICcgKyAocGFnaW5hdGlvbiB8fCAhcm93c0RhdGEubGVuZ3RoID8gJyBwYWdpbmF0aW9uICcgOiAnJykgKyAodGFibGVTdHlsZS5pbmNsdWRlcygnd2lkdGgnKSA/ICcgaGFzVGFibGVXaWR0aFN0eWxlICcgOiAnJykgKyAoYXV0b1Jlc2l6ZSA/ICcnIDogJ3RhYmxlLWxheW91dC1hdXRvJykgXCJcbiAgICAob25Db2xSZXNpemUpPVwib25Db2x1bW5SZXNpemUoJGV2ZW50LGR0KVwiIFtyZXNpemFibGVDb2x1bW5zXT1cInRydWVcIlxuICAgICByZXNwb25zaXZlTGF5b3V0PVwic2Nyb2xsXCIgY29sdW1uUmVzaXplTW9kZT1cImV4cGFuZFwiXG4gICAgW3Jvd3NdPVwiZGVmYXVsdFJvd3NcIiBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3Jkc1wiIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwic2V0UGFnaW5hdGlvbkxlbmd0aFwiXG4gICAgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJzaG93Q3VycmVudFBhZ2VSZXBvcnRcIiBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwiU2hvd2luZyB7Zmlyc3R9IHRvIHtsYXN0fSBvZiB7e1xuICAgICAgdG90YWxSZWNvcmRzXG4gICAgfX0gZW50cmllc1wiIFtsb2FkaW5nXT1cIiFzZXRHcmlkUmVmcmVzaFRpbWUgPyBsb2FkaW5nIDogZmFsc2VcIlxuICAgIChvblNvcnQpPVwic29ydERpc2FibGVkID8gJycgOiBoYW5kbGVTb3J0Q2hhbmdlKCRldmVudClcIiAob25GaWx0ZXIpPVwiaGFuZGxlRmlsdGVyQ2hhbmdlKCRldmVudClcIlxuICAgIChvbkxhenlMb2FkKT1cImF1dG9Mb2FkRGF0YSA/IGhhbmRsZVNlcnZlclNpZGVFdmVudHMoJGV2ZW50LCBkdCkgOiAnJ1wiIChvblBhZ2UpPVwiZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCA/IHNob3dDb25maXJtYXRpb24oJGV2ZW50KSA6IGhhbmRsZVNlcnZlclNpZGVQYWdpbmF0aW9uKCRldmVudClcIiAjZHRcbiAgICBbZGF0YUtleV09XCJkYXRhS2V5XCIgWyhzZWxlY3Rpb24pXT1cInNlbGVjdGVkUm93c1wiIHNlbGVjdGlvbk1vZGU9XCJtdWx0aXBsZVwiIFtzY3JvbGxhYmxlXT1cInNjcm9sbGFibGVcIiBcbiAgICBbdGFibGVTdHlsZV09XCJ0YWJsZVN0eWxlXCJcbiAgICBbc2Nyb2xsSGVpZ2h0XT1cInNjcm9sbEhlaWdodFwiXG4gICAgZWRpdE1vZGU9XCJyb3dcIiBbZWRpdGluZ1Jvd0tleXNdPVwiZWRpdGluZ1Jvd0tleXNcIiBbcm93SG92ZXJdPVwicm93SG92ZXJcIlxuICAgIFtuZ0NsYXNzXT1cInNldENsYXNzYUFuZElkKGR0KVwiPlxuXG4gICAgPGRpdiAqbmdJZj1cInJvd0FjdGlvbnMubGVuZ3RoID4gMCAmJiByb3dBY3Rpb25zLmxlbmd0aCA+IDBcIiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxuICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IHJvd0FjdGlvbiBvZiByb3dBY3Rpb25zXCI+XG4gICAgICAgIDxidXR0b24gcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW2xhYmVsXT1cInJvd0FjdGlvbi50aXRsZVwiIFtjbGFzc109XCJyb3dBY3Rpb24uY2xhc3NcIlxuICAgICAgICAgIChjbGljayk9XCJyb3dBY3Rpb24ub25DbGljayhzZWxlY3RlZFJvd3MpXCI+PC9idXR0b24+XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIGhlYWRlciBjb2x1bW5zIG9uIEdyaWQgLS0+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiIGxldC1jb2xzPlxuICAgICAgPHRyPlxuICAgICAgICA8dGggcFJlc2l6YWJsZUNvbHVtbiAqbmdJZj1cImFsbG93U2VsZWN0aW9uICYmIHNlbGVjdGlvblR5cGUgPT09ICdtdWx0aXBsZSdcIiBjbGFzcz1cImdyaWQtY29tcG9uZW50LXNlbGVjdGlvblwiIGlkPVwie3thbGxvd1NlbGVjdGlvbkhlYWRlcn19XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aC1jb250ZW50LXdyYXBwZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLWNvbXBvbmVudC10YWJsZS1oZWFkZXItaW5uZXItZGl2LTJcbiAgICAgICAgICAgICAgICAgIHRhYmxlLWhlYWRlci1pbm5lci1kaXYgZGl2LWxhc3QtaW5uZXItaHRtbC1pcy1pY29uXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmxleC1ncm93LTFcIj4ge3thbGxvd1NlbGVjdGlvbkhlYWRlcn19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHAtdGFibGVIZWFkZXJDaGVja2JveCAqbmdJZj1cInNlbGVjdGlvblR5cGUgPT09ICdtdWx0aXBsZSdcIiBiaW5hcnk9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwibXVsdGlDaGVja0JveE9uY2xpY2socm93c0RhdGEsICRldmVudClcIj48L3AtdGFibGVIZWFkZXJDaGVja2JveD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoIHBSZXNpemFibGVDb2x1bW4gKm5nSWY9XCJhbGxvd1NlbGVjdGlvbiAmJiBzZWxlY3Rpb25UeXBlID09PSAnc2luZ2xlJ1wiIGlkPVwiU2VsZWN0XCJcbiAgICAgICAgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtc2VsZWN0aW9uXCI+XG4gICAgICAgICAgU2VsZWN0XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCBwUmVzaXphYmxlQ29sdW1uIGlkPVwiQWN0aW9uc1wiXG4gICAgICAgICAgKm5nSWY9XCJzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmICFkaXNhYmxlZFNhdmVCdG4gJiYgY29sdW1ucz8ubGVuZ3RoID4gMCAmJiAoY29sdW1uQWN0aW9ucy5sZW5ndGggPiAwIHx8ICh1c2VJbmxpbmVDUlVEICYmIChkZWxldGVSb3dQZXJtaXNzaW9uIHx8IGVkaXRSb3dQZXJtaXNzaW9uKSkpXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bicgXCIgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiID5cbiAgICAgICAgICBBY3Rpb25zXG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCBwUmVzaXphYmxlQ29sdW1uICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sc1wiXG4gICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbHVtbj8uY29sdW1uV2lkdGggPyBjb2x1bW4/LmNvbHVtbldpZHRoKydweCcgOiBjb2x1bW4/LmN1c3RvbVdpZHRoKydweCdcIiBpZD1cInt7Y29sdW1uLmhlYWRlcn19XCJcbiAgICAgICAgICBbYXR0ci5kYXRhLWNvbHVtbi1oZWFkZXJdPVwiY29sdW1uPy5oZWFkZXJcIiBbcFNvcnRhYmxlQ29sdW1uXT1cImNvbHVtbi5maWVsZFwiXG4gICAgICAgICAgW2NsYXNzXT1cImNvbHVtbi50eXBlID09PSAnYm9vbGVhbicgPyAnY2hlY2tib3gtdGgnIDogJydcIlxuICAgICAgICAgIFtwU29ydGFibGVDb2x1bW5EaXNhYmxlZF09XCJzb3J0RGlzYWJsZWQgJiYgdXNlU2VydmVyU2lkZUV2ZW50cyA/IHRydWUgOiBjb2x1bW4uc29ydGluZyA9PT0gZmFsc2VcIiBjbGFzcz1cImNvbHVtbj8udHlwZSA9PT0gJ211bHRpcGxlJyA/ICdncmlkLWNvbXBvbmVudC1zZWxlY3QtdGgtY29sdW1uLXR5cGUtbXVsdGlwbGUnIDogJydcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRoLWNvbnRlbnQtd3JhcHBlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtY29tcG9uZW50LXRhYmxlLWhlYWRlci1pbm5lci1kaXYtMSB0YWJsZS1oZWFkZXItaW5uZXItZGl2IGRpdi1sYXN0LWlubmVyLWh0bWwtaXMtaWNvblwiPiAgICAgICAgXG4gICAgICAgICAgICAgIDxzcGFuIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCInc2VsZidcIiAgW2NsYXNzXT1cIidmbGV4LWdyb3ctMSdcIiA+e3sgY29sdW1uLmhlYWRlciB9fVxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uLmlzUmVxdWlyZWRcIiBjbGFzcz1cImdyaWQtY29tcG9uZW50IHJlcXVpcmVkLXN0YXJcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxwLXNvcnRJY29uICpuZ0lmPVwiY29sdW1uLnNvcnRpbmcgIT09IGZhbHNlICYmIGNvbHVtbj8udHlwZSAhPT0gJ211bHRpcGxlJ1wiXG4gICAgICAgICAgICAgICAgW2ZpZWxkXT1cImNvbHVtbi5maWVsZFwiPjwvcC1zb3J0SWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCBwUmVzaXphYmxlQ29sdW1uIGlkPVwiQWN0aW9uc1wiXG4gICAgICAgICAgKm5nSWY9XCIhc2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiAhZGlzYWJsZWRTYXZlQnRuICYmIGNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgKGNvbHVtbkFjdGlvbnMubGVuZ3RoID4gMCB8fCAodXNlSW5saW5lQ1JVRCAmJiAoZGVsZXRlUm93UGVybWlzc2lvbiB8fCBlZGl0Um93UGVybWlzc2lvbikpKVwiXG4gICAgICAgICAgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCIgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiID5BY3Rpb25zPC90aD5cbiAgICAgIDwvdHI+XG4gICAgICA8dHIgKm5nSWY9XCJmaWx0ZXJpbmcgJiYgIWhpZGVGaWx0ZXJcIj5cbiAgICAgICAgPHRoIHBSZXNpemFibGVDb2x1bW4gKm5nSWY9XCJhbGxvd1NlbGVjdGlvblwiIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiPjwvdGg+XG4gICAgICAgIDx0aCBwUmVzaXphYmxlQ29sdW1uICpuZ0lmPVwic2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiAhZGlzYWJsZWRTYXZlQnRuICYmIHVzZUlubGluZUNSVURcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggcFJlc2l6YWJsZUNvbHVtbiAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHNcIiBbc3R5bGUud2lkdGhdPVwiY29sdW1uPy5jb2x1bW5XaWR0aCA/IGNvbHVtbj8uY29sdW1uV2lkdGgrJ3B4JyA6IGNvbHVtbj8uY3VzdG9tV2lkdGgrJ3B4J1wiIGlkPVwie3tjb2x1bW4uaGVhZGVyfX1cIiBbbmdTd2l0Y2hdPVwiY29sdW1uPy5maWx0ZXI/LnR5cGVcIiBcbiAgICAgICAgICBbY2xhc3NdPVwiaGlkZUZpbHRlck9wdGlvbnMgPyAnaGlkZS10YWJsZS1maWx0ZXIgdGVtcCcgOiAndGVtcCdcIj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbi5maWx0ZXJpbmcgIT09IGZhbHNlXCIgW2NsYXNzXT1cImNvbHVtbi5maWx0ZXI/LnNob3dGaWx0ZXIgPyAnJyA6ICdoaWRlLWZpbHRlci1pY29uJ1wiPlxuICAgICAgICAgICAgPCEtLSBUZXh0IGlucHV0IG9uIEhlYWRlciBGb3IgRmlsdGVyLS0+XG4gICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgY2xhc3M9XCJuby1maWx0ZXItaWNvblwiIFt0eXBlXT1cIid0ZXh0J1wiIFtmaWVsZF09XCJjb2x1bW4uZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ2lucHV0J1wiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsdGVyXCIgbGV0LXZhbHVlIGxldC1maWx0ZXI9XCJmaWx0ZXJDYWxsYmFja1wiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiY29sdW1uLmZpbHRlclZhbHVlXCIgW2NsYXNzXT1cImNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKClcIiAoa2V5dXAuZW50ZXIpPVwiYXBwbHlFbnRlckV2ZW50KGZpbHRlciwgJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgIChibHVyKT1cInNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJyZW1vdmluZ0ZpbHRlcnMoJGV2ZW50LCBjb2x1bW4pO2JhY2tzcGFjZUV2ZW50KCRldmVudCwgY29sdW1uKVwiIHBJbnB1dFRleHQgLz5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG5cbiAgICAgICAgICAgIDwhLS0gTnVtZXJpYyBpbnB1dCBvbiBIZWFkZXIgRm9yIEZpbHRlci0tPlxuICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyIGNsYXNzPVwibm8tZmlsdGVyLWljb25cIiBbdHlwZV09XCInbnVtZXJpYydcIiBbZmllbGRdPVwiY29sdW1uLmZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIidudW1lcmljX2lucHV0J1wiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsdGVyXCIgbGV0LXZhbHVlIGxldC1maWx0ZXI9XCJmaWx0ZXJDYWxsYmFja1wiPlxuICAgICAgICAgICAgICAgIDxwLWlucHV0TnVtYmVyIFsobmdNb2RlbCldPVwiY29sdW1uLmZpbHRlclZhbHVlXCIgW2NsYXNzXT1cImNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKClcIiAoa2V5dXAuZW50ZXIpPVwiYXBwbHlFbnRlckV2ZW50KGZpbHRlciwgJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgIChvbkJsdXIpPVwic2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uLCBmaWx0ZXIsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKGtleXVwKT1cInJlbW92aW5nRmlsdGVycygkZXZlbnQsIGNvbHVtbik7YmFja3NwYWNlRXZlbnQoJGV2ZW50LCBjb2x1bW4pXCI+PC9wLWlucHV0TnVtYmVyPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cblxuICAgICAgICAgICAgICA8IS0tIGxvb2t1cCBpbnB1dCBvbiBIZWFkZXIgRm9yIEZpbHRlci0tPlxuICAgICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm5vLWZpbHRlci1pY29uXCJcbiAgICAgICAgICAgICAgICBbdHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICAgIFtmaWVsZF09XCJjb2x1bW4uZmllbGRcIlxuICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbG9va3VwX2lucHV0J1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgIHBUZW1wbGF0ZT1cImZpbHRlclwiXG4gICAgICAgICAgICAgICAgICBsZXQtdmFsdWVcbiAgICAgICAgICAgICAgICAgIGxldC1maWx0ZXI9XCJmaWx0ZXJDYWxsYmFja1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsb3NlLWljb24td3JhcHBlciBncmlkLWNvbXBvbmVudCBsb29rdXAtZmlsdGVyLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvb2t1cC1maWx0ZXItaW5wdXQtd3JhcHBlclwiPiBcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfZmlsdGVyJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJncmlkLWNvbXBvbmVudCBsb29rdXAtZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbHVtbi5maWx0ZXJWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldEZpbHRlckxvb2t1cChjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiYXBwbHlFbnRlckV2ZW50KGZpbHRlciwgJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJzZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cInJlbW92aW5nRmlsdGVycygkZXZlbnQsIGNvbHVtbik7YmFja3NwYWNlRXZlbnQoJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXJlY3Qtd3JhcHBlci1jbG9zZS1pY29uLWxvb2t1cFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uLmZpbHRlclZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS10aW1lc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJsb29rdXBDbGVhclZhbHVlKGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L3AtY29sdW1uRmlsdGVyPlxuXG4gICAgICAgICAgICA8IS0tIGNoZWNrYm94IG9uIEhlYWRlciBGb3IgRmlsdGVyLS0+XG4gICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgY2xhc3M9XCJuby1maWx0ZXItaWNvblwiIHR5cGU9XCJib29sZWFuXCIgW2ZpZWxkXT1cImNvbHVtbi5maWVsZFwiICpuZ1N3aXRjaENhc2U9XCInY2hlY2tib3gnXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJcIiBsZXQtdmFsdWUgbGV0LWZpbHRlcj1cImZpbHRlckNhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgPHAtY2hlY2tib3ggW2JpbmFyeV09XCJ0cnVlXCIgW2Rpc2FibGVkXT1cImNvbHVtbi5kaXNhYmxlZFwiIFsobmdNb2RlbCldPVwiY29sdW1uLmZpbHRlclZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJhcHBseUVudGVyRXZlbnQoZmlsdGVyLCAkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cInNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCAkZXZlbnQpXCIgKGNsaWNrKT1cImNsaWNrQ2hlY2tCb3hGaWx0ZXIoY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJiYWNrc3BhY2VFdmVudCgkZXZlbnQsIGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICA8L3AtY2hlY2tib3g+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3AtY29sdW1uRmlsdGVyPlxuXG4gICAgICAgICAgICA8IS0tIG11bHRpU2VsZWN0IG9uIEhlYWRlciBGb3IgRmlsdGVyLS0+XG4gICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgY2xhc3M9XCJuby1maWx0ZXItaWNvblwiIFtmaWVsZF09XCJjb2x1bW4uZmllbGRcIiBtYXRjaE1vZGU9XCJpblwiIFtzaG93TWVudV09XCJmYWxzZVwiICpuZ1N3aXRjaENhc2U9XCInbXVsdGktc2VsZWN0J1wiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsdGVyXCIgbGV0LXZhbHVlIGxldC1maWx0ZXI9XCJmaWx0ZXJDYWxsYmFja1wiPlxuICAgICAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0IFsobmdNb2RlbCldPVwiY29sdW1uLmZpbHRlclZhbHVlXCIgW29wdGlvbnNdPVwiY29sdW1uLmZpbHRlci5kYXRhIHx8IFtdXCIgXG4gICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIidib2R5J1wiIFtuYW1lXT1cImNvbHVtbi5maWVsZFwiXG4gICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImFwcGx5RW50ZXJFdmVudChmaWx0ZXIsICRldmVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgW29wdGlvblZhbHVlXT1cImNvbHVtbi5vcHRpb25WYWx1ZVwiXG4gICAgICAgICAgICAgICAgIFtvcHRpb25MYWJlbF09XCJjb2x1bW4ub3B0aW9uTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cInNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCAkZXZlbnQpXCIgXG4gICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJiYWNrc3BhY2VFdmVudCgkZXZlbnQsIGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDwvcC1tdWx0aVNlbGVjdD5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG5cbiAgICAgICAgICAgIDwhLS0gZHJvcGRvd24gb24gSGVhZGVyIEZvciBGaWx0ZXItLT5cbiAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciBjbGFzcz1cIm5vLWZpbHRlci1pY29uXCIgW2ZpZWxkXT1cImNvbHVtbi5maWVsZFwiIG1hdGNoTW9kZT1cImluXCIgW3Nob3dNZW51XT1cImZhbHNlXCIgKm5nU3dpdGNoQ2FzZT1cIidkcm9wZG93bidcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbHRlclwiIGxldC12YWx1ZSBsZXQtZmlsdGVyPVwiZmlsdGVyQ2FsbGJhY2tcIj5cbiAgICAgICAgICAgICAgICA8cC1kcm9wZG93biBbc2hvd0NsZWFyXT1cInRydWVcIiBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCdcIiBbZmlsdGVyXT1cImNvbHVtbi5hbGxvd1NlYXJjaFwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbHVtbi5maWx0ZXJWYWx1ZVwiIChrZXl1cC5lbnRlcik9XCJhcHBseURyb3Bkb3duRmlsdGVyKGZpbHRlciwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJjb2x1bW4uZmlsdGVyLmRhdGEgfHwgW11cIlxuICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cInNlYXJjaERyb3Bkb3duRmlsdGVyKGZpbHRlciwgJGV2ZW50LCBjb2x1bW4pXCI+PC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cblxuICAgICAgICAgICAgPCEtLSBjYWxlbmRhciBvbiBIZWFkZXIgRm9yIEZpbHRlci0tPlxuICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyIGNsYXNzPVwibm8tZmlsdGVyLWljb25cIiBbZmllbGRdPVwiY29sdW1uLmZpZWxkXCIgbWF0Y2hNb2RlPVwiaW5cIiBbc2hvd01lbnVdPVwiZmFsc2VcIiAqbmdTd2l0Y2hDYXNlPVwiJ2NhbGVuZGFyJ1wiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsdGVyXCIgbGV0LXZhbHVlIGxldC1maWx0ZXI9XCJmaWx0ZXJDYWxsYmFja1wiPlxuICAgICAgICAgICAgICAgIDxwLWNhbGVuZGFyIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0LURhdGUnXCIgWyhuZ01vZGVsKV09XCJjb2x1bW4uZmlsdGVyVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImFwcGx5RW50ZXJFdmVudChmaWx0ZXIsICRldmVudCwgY29sdW1uKVwiIGFwcGVuZFRvPVwiYm9keVwiIChvblNlbGVjdCk9XCJzZWxlY3REYXRlKGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgW2lucHV0SWRdPVwiY29sdW1uLmZpZWxkXCIgaG91ckZvcm1hdD1cIjEyXCIgKGtleXVwLmJhY2tzcGFjZSk9XCJyZW1vdmVOdWxsQ2FsZW5kYXIoY29sdW1uLCBmaWx0ZXIsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgW3Nob3dCdXR0b25CYXJdPVwidHJ1ZVwiIChvbkNsb3NlKT1cInNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCAkZXZlbnQpXCIgXG4gICAgICAgICAgICAgICAgICAob25DbGVhckNsaWNrKT1cImJhY2tzcGFjZUV2ZW50KCRldmVudCwgY29sdW1uKVwiIChrZXlkb3duKT1cInNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCAkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPC9wLWNhbGVuZGFyPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cblxuICAgICAgICAgICAgPCEtLSBEZWZhdWx0IEZpbHRlciBGb3IgSGVhZGVyICAtLT5cbiAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciBjbGFzcz1cIm5vLWZpbHRlci1pY29uXCIgW3R5cGVdPVwiXG4gICAgICAgICAgICAgICAgY29sdW1uLnR5cGUgJiYgY29sdW1uLnR5cGUgIT09ICdsaW5rJyA/IGNvbHVtbi50eXBlIDogJ3RleHQnXG4gICAgICAgICAgICAgIFwiIFtmaWVsZF09XCJjb2x1bW4uZmllbGRcIiBkaXNwbGF5PVwibWVudVwiICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgICAgICAgICA8L3AtY29sdW1uRmlsdGVyPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoIHBSZXNpemFibGVDb2x1bW5cbiAgICAgICAgICAqbmdJZj1cIiFzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmICFkaXNhYmxlZFNhdmVCdG4gJiYgY29sdW1ucz8ubGVuZ3RoID4gMCAmJiAoY29sdW1uQWN0aW9ucy5sZW5ndGggPiAwIHx8ICh1c2VJbmxpbmVDUlVEICYmIChkZWxldGVSb3dQZXJtaXNzaW9uIHx8IGVkaXRSb3dQZXJtaXNzaW9uKSkpXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bidcIj48L3RoPlxuICAgICAgPC90cj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPCEtLSBCb2R5IGNvbHVtbnMgb24gR3JpZCAtLT5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1yb3cgbGV0LWVkaXRpbmc9XCJlZGl0aW5nXCIgbGV0LXJpPVwicm93SW5kZXhcIj5cbiAgICAgIDx0ciBcbiAgICAgIFtzdHlsZV09XCJyb3dTdHlsZVwiXG4gICAgICBbbmdDbGFzc109XCJyb3c/LmhpZ2hsaWdodHJvdyA/ICdoaWdobGlnaHRlZC1yb3cnIDogJydcIlxuICAgICAgICBbY2xhc3NdPVwid29yZFdyYXAgPyAncC1zZWxlY3RhYmxlLXJvdyB3b3JkV3JhcFRydWUnIDogJ3dvcmRXcmFwRmFsc2UgcC1zZWxlY3RhYmxlLXJvdydcIiAoY2xpY2spPVwic2VsZWN0ZWRSb3dSZWNvcmQgPSByb3dcIlxuICAgICAgICBbcEVkaXRhYmxlUm93XT1cInJvd1wiICNncmlkUm93IFtpZF09XCJyb3dbZGF0YUtleV1cIj5cbiAgICAgICAgPHRkICpuZ0lmPVwiYWxsb3dTZWxlY3Rpb25cIiBjbGFzcz1cImdyaWQtY29tcG9uZW50LXNlbGVjdGlvblwiPlxuICAgICAgICAgIDxwLXRhYmxlUmFkaW9CdXR0b24gW3ZhbHVlXT1cInJvd1wiICpuZ0lmPVwic2VsZWN0aW9uVHlwZSA9PT0gJ3NpbmdsZSdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm11bHRpQ2hlY2tCb3hPbmNsaWNrKHJvdyAsICRldmVudCwgdHJ1ZSlcIj48L3AtdGFibGVSYWRpb0J1dHRvbj5cbiAgICAgICAgICA8cC10YWJsZUNoZWNrYm94IFt2YWx1ZV09XCJyb3dcIiAqbmdJZj1cInNlbGVjdGlvblR5cGUgPT09ICdtdWx0aXBsZSdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm11bHRpQ2hlY2tCb3hPbmNsaWNrKHJvdywgJGV2ZW50KVwiPjwvcC10YWJsZUNoZWNrYm94PlxuICAgICAgICAgIDwvdGQ+XG5cbiAgICAgICAgPCEtLSBmaXJzdCBhY3Rpb25zIGNvbHVtbiAtLT5cbiAgICAgICAgPHRkICpuZ0lmPVwic2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiBjb2x1bW5BY3Rpb25zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImFjdGlvbi1idG5cIiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGNvbHVtbkFjdGlvbnNcIj5cbiAgICAgICAgICAgIDxpIFt0aXRsZV09XCJhY3Rpb24udG9vbHRpcFwiIFtjbGFzc109XCJhY3Rpb24uaWNvblwiIChjbGljayk9XCJoYW5kbGVBY3Rpb25DbGljaygkZXZlbnQsIGFjdGlvbiwgcm93KVwiPjwvaT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCAqbmdJZj1cInNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgdXNlSW5saW5lQ1JVRCAmJiAoZGVsZXRlUm93UGVybWlzc2lvbiB8fCBlZGl0Um93UGVybWlzc2lvbilcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZGlzYWJsZWRTYXZlQnRuID8gJ2hpZGUtY2xlYXItZmlsdGVyLWJ1dHRvbicgOiAnJ1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2V0QWN0aW9uQ29sdW1uV2lkdGhcIj5cbiAgICAgICAgICAgIDxzZS1ncmlkLXJvdy1hY3Rpb25zIFtlZGl0aW5nXT1cImVkaXRpbmdcIiBbZWRpdFJvd1Blcm1pc3Npb25dPVwiZWRpdFJvd1Blcm1pc3Npb25cIlxuICAgICAgICAgICAgICBbZGVsZXRlUm93UGVybWlzc2lvbl09XCJkZWxldGVSb3dQZXJtaXNzaW9uXCIgW2hpZGVEZWxldGVCdG5dPVwiaGlkZURlbGV0ZUJ0blwiIFtoaWRlRWRpdEJ0bl09XCJoaWRlRWRpdEJ0blwiXG4gICAgICAgICAgICAgIFtyb3ddPVwicm93XCIgKG9uUm93RWRpdEluaXRCdG4pPVwib25Sb3dFZGl0SW5pdCgkZXZlbnQpXCIgKGRlbGV0ZVJlY29yZEJ0bik9XCJkZWxldGVSZWNvcmQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChvblJvd0VkaXRTYXZlQnRuKT1cIm9uUm93RWRpdFNhdmUoJGV2ZW50KVwiIChvblJvd0VkaXRDYW5jZWxCdG4pPVwib25Sb3dFZGl0Q2FuY2VsKCRldmVudCwgcmkpXCJcbiAgICAgICAgICAgICAgW2VkaXRBbGxSb3dzXT1cImVkaXRBbGxSb3dzXCI+XG4gICAgICAgICAgICA8L3NlLWdyaWQtcm93LWFjdGlvbnM+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RkPlxuXG4gICAgICAgIDwhLS0gR3JpZCBSb3dzIERhdGEgQmluZGluZ3MgU3RhcnQgLS0+XG4gICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHNlbGVjdGVkQ29sdW1uc1wiIFtuZ1N3aXRjaF09XCJjb2x1bW4udHlwZVwiIFtzdHlsZV09XCJjb2x1bW4uc3R5bGUgXCIgW2F0dHIuZGF0YS1jb2x1bW4tZmllbGRdPVwiY29sdW1uPy5maWVsZFwiIFxuICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uaG92ZXJEYXRhID8gJ3RkLW92ZXJsYXknIDogJydcIlxuICAgICAgICA+XG4gICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cImNvbHVtbi5ob3ZlckRhdGEgPyAndGQtd3JhcHBlcicgOiAnJ1wiXG4gICAgICAgIChtb3VzZWVudGVyKT1cIihjb2x1bW4uaG92ZXJEYXRhICYmIGNvbHVtbi5ob3ZlckRhdGEuY29tcG9uZW50KSA/IGFkZER5bmFtaWNQYW5lbE92ZXJsYXlDb21wb25lbnQoY29sdW1uLmhvdmVyRGF0YSwgb3ZlcmxheVBhbmVsLCAkZXZlbnQsIHJvdykgOiAnJ1wiIFxuICAgICAgICAobW91c2VsZWF2ZSk9XCIoY29sdW1uLmhvdmVyRGF0YSAmJiBjb2x1bW4uaG92ZXJEYXRhLmNvbXBvbmVudCkgPyAgbW91c2VMZWF2ZUV2ZW50KG92ZXJsYXlQYW5lbCkgOiAnJ1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGQtY29udGVudC13cmFwcGVyXCIgW3N0eWxlXT1cImNvbHVtbi5zdHlsZVwiPlxuXG4gICAgICAgICAgPCEtLSBCb29sZWFuIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInYm9vbGVhbidcIlxuICAgICAgICAgID5cbiAgICAgICAgPHRkICpuZ0lmPVwiIWVkaXRpbmcgJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnNob3cgIT0gZmFsc2VcIj5cbiAgICAgICAgICA8cC1jaGVja2JveCBcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNvbHVtbi5hbGxvd0VkaXQgPz8gdHJ1ZVwiIFtiaW5hcnldPVwidHJ1ZVwiIChjbGljayk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoZWNrQm94Q2hhbmdlRXZlbnQoJGV2ZW50LCBjb2x1bW4sIHJvdylcIiAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCIgXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cIiBcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gJiZcbiAgICAgICAgICAgICAgKHJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkgPT09ICcxJyB8fFxuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnIHx8XG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSAneSd8fFxuICAgICAgICAgICAgICAgICggcm93W2NvbHVtbi5maWVsZF0udGV4dCAmJiAocm93W2NvbHVtbi5maWVsZF0/LnRleHQ/LnRvU3RyaW5nKCkgPT09ICcxJyB8fFxuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdPy50ZXh0Py50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScgfHxcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXT8udGV4dD8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKSA9PT0gJ3knKSkpXG4gICAgICAgICAgICAgICAgICA/IENoZWNrZWRcbiAgICAgICAgICAgICAgICAgIDogdW5DaGVja2VkXG4gICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgPC9wLWNoZWNrYm94PlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgKm5nSWY9XCJlZGl0aW5nXCI+XG4gICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICA8IS0tIGZvciBlZGl0IGNoZWNrQm94IC0tPlxuICAgICAgICAgICAgICA8cC1jaGVja2JveCAoY2xpY2spPVwib25DbGlja0V2ZW50KGNvbHVtbiwgcm93KVwiIChuZ01vZGVsQ2hhbmdlKT1cImNoZWNrQm94Q2hhbmdlRXZlbnQoJGV2ZW50LCBjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCIgW2JpbmFyeV09XCJ0cnVlXCIgWyhuZ01vZGVsKV09XCJcbiAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gJiYgICBcbiAgICAgICAgICAgICAgICAgICAgKHJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkgPT09ICcxJyB8fFxuICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSAneScgfHxcbiAgICAgICAgICAgICAgICAgICAgICAoIHJvd1tjb2x1bW4uZmllbGRdLnRleHQgJiYgKHJvd1tjb2x1bW4uZmllbGRdPy50ZXh0Py50b1N0cmluZygpID09PSAnMScgfHxcbiAgICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXT8udGV4dD8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0/LnRleHQ/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCkgPT09ICd5JykpKVxuICAgICAgICAgICAgICAgICAgICAgID8gZWRpdE1vZGVDaGVja2VkXG4gICAgICAgICAgICAgICAgICAgICAgOiBlZGl0TW9kZXVuQ2tlY2tlZFxuICAgICAgICAgICAgICAgICAgXCIgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiPjwvcC1jaGVja2JveD5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgIHt7IHJvd1tjb2x1bW4uZmllbGRdIH19XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBsaW5rIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8c3BhbiBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnYSxpbnB1dCdcIiAgKm5nU3dpdGNoQ2FzZT1cIidsaW5rJ1wiPlxuICAgICAgICAgIDwhLS0gbGluayBjb2x1bW4gZm9yIEh5cGVyTGluayBDYXNlIC0tPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uLmFsbG93U2F2ZSA9PT0gZmFsc2VcIj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uLnRhcmdldCAhPT0gJ19zZWxmJ1wiIFtzdHlsZV09XCJjb2x1bW4uc3R5bGVcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ2EnXCJcbiAgICAgICAgICAgICAgIGNsYXNzPVwiY3VzdG9tLWxpbmtcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdkaXNhYmxlZC1saW5rJyA6ICcnXCI+XG5cbiAgICAgICAgICAgIDxhIGNsYXNzPVwiZC1pbmxpbmVcIiBbaHJlZl09XCJjb2x1bW4uZGlzYWJsZWQ/Jyc6cm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmh5cGVybGlua1wiIHRhcmdldD1cIl9ibGFua1wiPlxuICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiY29sdW1uLmljb24gJiYhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZTsgZWxzZSBub0ljb25cIiBbY2xhc3NdPVwiY29sdW1uLmljb25cIiBbdGl0bGVdPVwiY29sdW1uLmhlYWRlclwiPjwvaT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vSWNvbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJjb2x1bW4/Lm9uQ2xpY2sgPyBvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpIDogJydcIj5cbiAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlPycnOlxuICAgICAgICAgICAgICAgICAgICAgIHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgIFxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4udGFyZ2V0ID09PSAnX3NlbGYnXCIgW3N0eWxlXT1cImNvbHVtbi5zdHlsZVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnYSdcIiBjbGFzcz1cImN1c3RvbS1saW5rXCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cIiBhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2Rpc2FibGVkLWxpbmsnIDogJydcIj5cblxuICAgICAgICAgICAgICA8YSBjbGFzcz1cImQtaW5saW5lXCIgW2hyZWZdPVwiY29sdW1uLmRpc2FibGVkPycnOnJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5oeXBlcmxpbmtcIiBbdGFyZ2V0XT0nY29sdW1uLnRhcmdldCc+XG4gICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb2x1bW4uaWNvbiAmJiFyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlOyBlbHNlIG5vSWNvblwiIFtjbGFzc109XCJjb2x1bW4uaWNvblwiIFt0aXRsZV09XCJjb2x1bW4uaGVhZGVyXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cImNvbHVtbj8ub25DbGljayA/IG9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdykgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU/Jyc6XG4gICAgICAgICAgICAgICAgICAgICAgc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdywgY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L2E+XG5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPCEtLSBsaW5rIGNvbHVtbiBmb3IgRWRpdCBDYXNlIC0tPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uLmFsbG93U2F2ZSB8fCBjb2x1bW4uYWxsb3dTYXZlID09PSB1bmRlZmluZWRcIj5cbiAgICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIihjb2x1bW4uZWRpdGFibGUgPT09IHRydWUgKSAmJiAoY29sdW1uLmVkaXRMaW5rID09PSB0cnVlIClcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cIiFyb3cuaXNOZXdcIiBwSW5wdXRUZXh0IChjbGljayk9XCJjb2x1bW4/Lm9uQ2xpY2sgPyBvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpIDogJydcIiB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJydcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5oaWRlRmllbGRWYWx1ZSA/ICcnIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0ID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0IDogY29sdW1uLmRpc3BsYXlUZXh0ID8gY29sdW1uLmRpc3BsYXlUZXh0IDogcm93W2NvbHVtbi5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VFdmVudChjb2x1bW4sIHJvdylcIiAvPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHBJbnB1dFRleHQgKm5nSWY9XCJyb3cuaXNOZXdcIiB0eXBlPVwidGV4dFwiIChjbGljayk9XCJjb2x1bW4/Lm9uQ2xpY2sgPyBvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpIDogJydcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZCA/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkIDogcm93W2NvbHVtbi5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VFdmVudChjb2x1bW4sIHJvdylcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8IS0tIDxzcGFuICpuZ0lmPVwiY29sdW1uLmVkaXRhYmxlID09PSBmYWxzZXx8IGNvbHVtbi5lZGl0YWJsZSA9PT0gdW5kZWZpbmVkXCIgPlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiY3VzdG9tLWxpbmtcIiAoY2xpY2spPVwib25DbGlja0V2ZW50KGNvbHVtbiwgcm93KVwiIFtocmVmXT1cInJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5oeXBlcmxpbmtcIiBbdGFyZ2V0XT0nY29sdW1uLnRhcmdldCdcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2Rpc2FibGVkLWxpbmsnIDogJydcIj5cbiAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiY29sdW1uLmljb24gJiYgIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU7IGVsc2Ugbm9JY29uXCJbY2xhc3NdPVwiY29sdW1uLmljb25cIiBbdGl0bGVdPVwiY29sdW1uLmhlYWRlclwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JY29uPlxuICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZT8nJzpcbiAgICAgICAgICAgICAgICAgICAgc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdywgY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPC9zcGFuPiAtLT5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIihjb2x1bW4uZWRpdExpbmsgPT09IGZhbHNlfHwgY29sdW1uLmVkaXRMaW5rID09PSB1bmRlZmluZWQpJiYoY29sdW1uLmVkaXRhYmxlID09PSBmYWxzZXx8IGNvbHVtbi5lZGl0YWJsZSA9PT0gdW5kZWZpbmVkKVwiPlxuICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkLWlubGluZVwiIFtocmVmXT1cInJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5oeXBlcmxpbmtcIiBbdGFyZ2V0XT1cImNvbHVtbi50YXJnZXQgPyBjb2x1bW4udGFyZ2V0IDogJ19ibGFuaydcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY29sdW1uLmVkaXRhYmxlID09PSBmYWxzZSA/ICcnIDogYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdkaXNhYmxlZC1saW5rJyA6ICcnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiY29sdW1uLmljb24gJiYgIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU7IGVsc2Ugbm9JY29uXCJbY2xhc3NdPVwiY29sdW1uLmljb25cIiBbdGl0bGVdPVwiY29sdW1uLmhlYWRlclwiIChjbGljayk9XCJjb2x1bW4/Lm9uQ2xpY2sgPyBvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpIDogJydcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJjb2x1bW4/Lm9uQ2xpY2sgPyBvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpIDogJydcIj5cbiAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlPycnOlxuICAgICAgICAgICAgICAgICAgICAgIHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4gXG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gW3N0eWxlXT1cImNvbHVtbi5zdHlsZVwiICBjbGFzcz1cImN1c3RvbS1saW5rXCIgIFtjbGFzc109XCJjb2x1bW4uZWRpdGFibGUgPT09IGZhbHNlIHx8IGFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkLWlubGluZVwiIFtocmVmXT1cImNvbHVtbi5kaXNhYmxlZD8nJzpyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uaHlwZXJsaW5rXCIgW3RhcmdldF09XCJjb2x1bW4udGFyZ2V0ID8gY29sdW1uLnRhcmdldCA6ICdfYmxhbmsnXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiY29sdW1uLmljb24mJiAhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZTsgZWxzZSBub0ljb25cIiBbdGl0bGVdPVwiY29sdW1uLmhlYWRlclwiIFtjbGFzc109XCJjb2x1bW4uaWNvblwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb2x1bW4/Lm9uQ2xpY2sgPyBvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpIDogJydcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJjb2x1bW4/Lm9uQ2xpY2sgPyBvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpIDogJydcIj5cbiAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZT8nJzpcbiAgICAgICAgICAgICAgICAgICAgICBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBJZnJhbWUgY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInaWZyYW1lJ1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWxpbmtcIiAoY2xpY2spPVwiZ3JpZElGcmFtZShjb2x1bW4sIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5oeXBlcmxpbmssIHJvdylcIiBbdGl0bGVdPVwiXG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gJiZcbiAgICAgICAgICAgICAgICAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQgPT09IG51bGwgfHwgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQgPT09ICcnKVxuICAgICAgICAgICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkXSA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgOiBjb2x1bW4uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgID8gY29sdW1uLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGRdXG5cbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID4gIFxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImN1c3RvbS1pY29uLWJ0blwiICAqbmdJZj1cImNvbHVtbi5pY29uOyBlbHNlIG5vSWNvblwiIFtkaXNhYmxlZF09XCJjb2x1bW4uZGlzYWJsZWRcIj5cbiAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cImNvbHVtbi5pY29uXCIgW3RpdGxlXT1cImNvbHVtbi5oZWFkZXJcIj48L2k+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JY29uPlxuICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gJiZcbiAgICAgICAgICAgICAgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0ID09PSBudWxsIHx8IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0ID09PSAnJylcbiAgICAgICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkXSA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgIDogY29sdW1uLmRpc3BsYXlUZXh0ID8gY29sdW1uLmRpc3BsYXlUZXh0IDogcm93W2NvbHVtbi5maWVsZF1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgIDwhLS0gZGlhbG9nIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInZGlhbG9nJ1wiPlxuICAgICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uPy5maWx0ZXI/LnR5cGUgIT09ICdjYWxlbmRhcicgJiYgIXJvdz8uaGlkZWdyaWRidG5cIiBcbiAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uLmVkaXRhYmxlID09PSB0cnVlICYmICFyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnc2VsZidcIlxuICAgICAgICAgICAgICAgICAgICByZWFkb25seVxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2hpZGUtYm9yZGVyJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgcElucHV0VGV4dFxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RMb29rdXBGaWVsZChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQgP1xuICAgICAgICAgICAgICAgICAgICAgIHJvd1tyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0gOiBcbiAgICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXVwiXG4gICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwicm93W2NvbHVtbi5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnc2VsZidcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbHVtbi5lZGl0YWJsZSA9PT0gZmFsc2UgfHwgY29sdW1uLmVkaXRhYmxlID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgXCIgY2xhc3M9XCJjdXN0b20tbGlua1wiIFtzdHlsZV09XCJjb2x1bW4uc3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgIGFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1xuICAgICAgICAgICAgICAgICAgICBcIiAoY2xpY2spPVwib3BlbkdyaWREaWFsb2coY29sdW1uLCByb3csICRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiKGNvbHVtbi5pY29uIHx8IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbikgJiYgIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWUgOyBlbHNlIG5vSWNvblwiXG4gICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA6IGNvbHVtbi5pY29uXCIgW3RpdGxlXT1cImNvbHVtbi5oZWFkZXJcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vSWNvbj57eyAoIWNvbHVtbi5kaXNwbGF5VGV4dCAmJiByb3cuaXNOZXcgKSB8fCByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlID8gJycgOiBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgIH19PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gJ2NhbGVuZGFyJyAmJiBjb2x1bW4uZWRpdGFibGUgPT09IHRydWVcIiBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnaW5wdXQnXCI+XG4gICAgICAgICAgICAgICAgPHAtY2FsZW5kYXIgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICBbaWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdoaWRlLWJvcmRlcicgOiAnJ1wiIChvbkNsb3NlKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgW21pbkRhdGVdPVwiY29sdW1uLm1pbkRhdGVcIiBbbWF4RGF0ZV09XCJjb2x1bW4ubWF4RGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwiJ2JvZHknXCIgaG91ckZvcm1hdD1cIjEyXCIgW3Nob3dUaW1lXT1cImNvbHVtbi5zaG93VGltZVwiIChjbGljayk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgIFt0aW1lT25seV09XCJjb2x1bW4udGltZU9ubHlcIlxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZCA/XG4gICAgICAgICAgICAgICAgICAgIHJvd1tyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGRdXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCI+PC9wLWNhbGVuZGFyPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uPy5maWx0ZXI/LnR5cGUgPT09ICdjYWxlbmRhcicgJiYgIWNvbHVtbi5lZGl0YWJsZVwiIGNsYXNzPVwiY3VzdG9tLWxpbmtcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93LmRpc2FibGVkICAgfHwgYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdkaXNhYmxlZC1saW5rJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5HcmlkRGlhbG9nKGNvbHVtbiwgcm93LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgPnt7IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWUgPyAnJyA6IHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3csIGNvbHVtbikgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1saW5rXCIgW3N0eWxlXT1cImNvbHVtbi5zdHlsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3cuZGlzYWJsZWQgICB8fCBhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2Rpc2FibGVkLWxpbmsnIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkdyaWREaWFsb2coY29sdW1uLCByb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdzZWxmJ1wiPlxuICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCIoY29sdW1uLmljb24gfHwgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5pY29uKSAmJiAhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZSA7IGVsc2Ugbm9JY29uXCJbdGl0bGVdPVwiY29sdW1uLmhvdmVyRGF0YSA/ICcnIDogY29sdW1uLmhlYWRlclwiIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gOiBjb2x1bW4uaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ljb24+e3sgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZSA/ICcnIDogc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdywgY29sdW1uKSB9fTwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPCEtLSB7eyBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pIH19XG4gICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhcm93W2NvbHVtbi5maWVsZCArICdfc2Vjb25kVHlwZSddICYmICFyb3cuaGlkZWdyaWRidG5cIiAtLT5cblxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSB0ZXN0IC0tPlxuICAgICAgICA8IS0tIGxvb2t1cCBJbnB1dCBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgPHNwYW4gICAqbmdTd2l0Y2hDYXNlPVwiJ2xvb2t1cF9pbnB1dCdcIj5cbiAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICAgIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbG9zZS1pY29uLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnXCIgcmVhZG9ubHkgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3c/LmlzTmV3IHx8IHJvdz8uaXNuZXcgPyB0eXBlT2Yocm93W2NvbHVtbi5maWVsZF0pID09PSAnb2JqZWN0JyA/IHJvd1tjb2x1bW4uZmllbGRdPy50ZXh0IDogcm93W2NvbHVtbi5maWVsZF0gOiByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZCAgPyByb3dbcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldIDpcbiAgICAgICAgICAgICAgICAgIHR5cGVPZihyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LnRleHQpID09PSAnb2JqZWN0JyAmJiByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LnRleHQ/Lmhhc093blByb3BlcnR5KCd0ZXh0JykgPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LnRleHQ/LnRleHQgOiBcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5kaXNwbGF5RmllbGQgPyByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0gOiByb3dbY29sdW1uLmZpZWxkXVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIChrZXl1cC50YWIpPVwic2VsZWN0TG9va3VwRmllbGQoY29sdW1uLCByb3cpXCIgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdExvb2t1cEZpZWxkKGNvbHVtbiwgcm93KVwiIFtpZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2hpZGUtYm9yZGVyJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJ3ByaW1lLWlucHV0J1wiIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIiAvPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiPjxidXR0b24gKm5nSWY9XCJyb3dbY29sdW1uLmZpZWxkXSAmJiB0eXBlT2Yocm93W2NvbHVtbi5maWVsZF0pID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkXS50ZXh0XG4gICAgICAgICAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGRdICYmICFjb2x1bW4uZGlzYWJsZWRcIiBpY29uPVwicGkgcGktdGltZXNcIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibG9va3VwQ2xlYXJWYWx1ZShjb2x1bW4scm93KVwiPjwvYnV0dG9uPjwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCIgPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbi5saW5rSWRcIiA+XG4gICAgICAgICAgICAgICAgPGEgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnXCIgW2hyZWZdPVwicm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmh5cGVybGlua1wiIFt0YXJnZXRdPVwiY29sdW1uLnRhcmdldCA9PT0gJ19zZWxmJyA/ICcnIDogICdfYmxhbmsnXCI+XG4gICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICBzZXRMb29rdXBSZWFkT25seVZhbHVlKHJvdywgY29sdW1uKVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnXCIgKm5nSWY9XCIhY29sdW1uLmxpbmtJZFwiIFtzdHlsZV09XCJjb2x1bW4uc3R5bGVcIiBbY2xhc3NdPVwiY29sdW1uLmxvb2t1cENvbnRyb2w/LmNvbXBvbmVudCAmJiBjb2x1bW4uZWRpdExpbmsgPT09IHRydWUgPyAnY3VzdG9tLWxpbmsnIDogJydcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuTG9va3VwSHlwZXJsaW5rKGNvbHVtbiwgcm93KVwiICAgPlxuICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICBzZXRMb29rdXBSZWFkT25seVZhbHVlKHJvdywgY29sdW1uKVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8IS0tIE51bWVyaWMgSW5wdXQgY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInbnVtZXJpYydcIj5cbiAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgIDwhLS0gZm9yIEN1cnJlbmN5ICYmIERlY2ltYWwgJiYgUGVyY2VudCAtLT5cbiAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ2lucHV0J1wiIGNsYXNzPVwiaW5wdXQtbnVtYmVyXCI+XG4gICAgICAgICAgICAgICAgPHAtaW5wdXROdW1iZXIgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIiBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmctaW52YWxpZCBuZy1kaXJ0eSdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ2Zvcm0tY29udHJvbCdcbiAgICAgICAgICAgICAgICAgICAgXCIgW3Nob3dCdXR0b25zXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQgPyByb3dbcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldIDogcm93W2NvbHVtbi5maWVsZF1cIiBbbmFtZV09XCJjb2x1bW4uZmllbGRcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIiAob25Gb2N1cyk9XCJvbkZvY3VzRXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgIChvbkJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiIFttb2RlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0LnR5cGUgPT09ICdjdXJyZW5jeSdcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ2N1cnJlbmN5J1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAnZGVjaW1hbCdcbiAgICAgICAgICAgICAgICAgICAgXCIgW2N1cnJlbmN5XT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0LnR5cGUgPT09ICdjdXJyZW5jeScgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0LmZvcm1hdFBhcmFtcyAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zLmN1cnJlbmN5XG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zLmN1cnJlbmN5XG4gICAgICAgICAgICAgICAgICAgICAgICA6ICdVU0QnXG4gICAgICAgICAgICAgICAgICAgIFwiIFtsb2NhbGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQudHlwZSA9PT0gJ2N1cnJlbmN5JyAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMubG9jYWxlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zLmxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnZW4tVVMnXG4gICAgICAgICAgICAgICAgICAgIFwiIFttaW5GcmFjdGlvbkRpZ2l0c109XCJjb2x1bW4uZm9ybWF0ID8gc2V0TnVtZXJpY01pbk14RnJhY3Rpb24oY29sdW1uKSA6ICcwJ1wiXG4gICAgICAgICAgICAgICAgICBbbWF4RnJhY3Rpb25EaWdpdHNdPVwiY29sdW1uLmZvcm1hdCA/IHNldE51bWVyaWNNaW5NeEZyYWN0aW9uKGNvbHVtbikgOiAnMCdcIiBbc3VmZml4XT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0LnR5cGUgPT09ICdwZXJjZW50JyAmJiBcbiAgICAgICAgICAgICAgICAgICAgICAgICclJ1xuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgIDwvcC1pbnB1dE51bWJlcj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xvY2tlZF9maWVsZD48c3BhbiAqbmdJZj1cIiFyb3cuaXNOZXdcIiAgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnXCI+XG4gICAgICAgICAgICAgICAgICB7eyByb3dbY29sdW1uLmZpZWxkXSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgIDxzcGFuIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdzZWxmJ1wiPiBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIHNldE51bWVyaWNGb3JtYXQoY29sdW1uLCByb3cpXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gQnV0dG9uIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2FkZF9idXR0b24nXCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhcm93LmhpZGVncmlkYnRuXCIgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgXG4gICAgICAgICAgICAgIFtpY29uXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA6IGNvbHVtbi5pY29uXCJcbiAgICAgICAgICAgICAgW25hbWVdPVwiY29sdW1uLmhlYWRlclwiIGNsYXNzPVwibWVyZ2UtYnRuXCIgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5VGV4dCA/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheVRleHQgOiBjb2x1bW4udmFsdWVcIlxuICAgICAgICAgICAgICBjbGFzcz1cImdyaWQtY29tcG9uZW50LWdyaWQtYWRkLWJ0blwiIChjbGljayk9XCJvbkNsaWNrQnV0dG9uKGNvbHVtbiwgcm93KVwiPjwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NwYW4+IFxuICAgICAgICBcbiAgICAgICAgPCEtLSBHZW5lcmF0ZSBGaWxlIEJ1dHRvbiBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidnZW5lcmF0ZV9maWxlX2J1dHRvbidcIj5cbiAgICAgICAgICAgIDxzZS1nZW5lcmF0ZS1pbXBvcnQtZmlsZVxuICAgICAgICAgICAgICBbbGFiZWxdPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5VGV4dCA/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheVRleHQgOiBjb2x1bW4udmFsdWVcIlxuICAgICAgICAgICAgICBbaWNvbl09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gOiBjb2x1bW4uaWNvblwiXG4gICAgICAgICAgICAgIFtkaWFsb2dEYXRhXT1cImNvbHVtbi5kYXRhXCJcbiAgICAgICAgICAgICAgW3NlbGVjdGVkUm93XT1cInJvd1wiXG4gICAgICAgICAgICA+PC9zZS1nZW5lcmF0ZS1pbXBvcnQtZmlsZT5cbiAgICAgICAgPC9zcGFuPiBcblxuICAgICAgICA8IS0tIFNlbmQgZW1haWwgQnV0dG9uIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3NlbmRfZW1haWxfYnV0dG9uJ1wiPlxuICAgICAgICAgICAgPHNlLWVtYWlsLWdlbmVyYXRlLWJ0blxuICAgICAgICAgICAgICBbbGFiZWxdPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5VGV4dCA/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheVRleHQgOiBjb2x1bW4udmFsdWVcIlxuICAgICAgICAgICAgICBbaWNvbl09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gOiBjb2x1bW4uaWNvblwiXG4gICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgW3NlbGVjdGVkUm93XT1cInJvd1wiXG4gICAgICAgICAgICA+PC9zZS1lbWFpbC1nZW5lcmF0ZS1idG4+XG4gICAgICAgIDwvc3Bhbj4gXG5cbiAgICAgICAgPCEtLSBEYXRlIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8IS0tIGNhbGVuZGFyIHNlbGVjdG9yIC0tPlxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCIgXG4gICAgICAgIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhPyBudWxsOiBlZGl0QWxsUm93cyA/ICdpbnB1dCcgOiAnc2VsZicgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIiA+XG4gICAgICAgICAgICAgIDxwLWNhbGVuZGFyXG4gICAgICAgICAgICAgICAgW21pbkRhdGVdPVwiY29sdW1uLm1pbkRhdGVcIiBbbWF4RGF0ZV09XCJjb2x1bW4ubWF4RGF0ZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eSAnICsgY29sdW1uLmZpZWxkICsgcm93W2RhdGFLZXldIDogY29sdW1uLmZpZWxkICsgcm93W2RhdGFLZXldXCJcbiAgICAgICAgICAgICAgICBbaWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdoaWRlLWJvcmRlcicgOiAnJ1wiIChvbkNsb3NlKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgIFthcHBlbmRUb109XCInYm9keSdcIiBob3VyRm9ybWF0PVwiMTJcIiBbZGVmYXVsdERhdGVdPVwiZGVmYXVsdERhdGVcIlxuICAgICAgICAgICAgICAgIFtzdGVwTWludXRlXT1cImNvbHVtbi5taW51dGVzSW50ZXJ2YWwgPyBjb2x1bW4ubWludXRlc0ludGVydmFsIDogMVwiIFtzaG93VGltZV09XCJjb2x1bW4uc2hvd1RpbWVcIlxuICAgICAgICAgICAgICAgIFt0aW1lT25seV09XCJjb2x1bW4udGltZU9ubHlcIiBbZGF0ZUZvcm1hdF09XCJjb2x1bW4uZm9ybWF0ID8gY29sdW1uLmZvcm1hdC50eXBlIDogY2FsZW5kYXJGb3JtYXRcIlxuICAgICAgICAgICAgICAgIChrZXl1cCk9XCJjYWxlbmRhcklucHV0VmFsdWUoY29sdW1uLCByb3cpXCIgKG9uU2hvdyk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkID8gcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQgOiByb3dbY29sdW1uLmZpZWxkXVwiXG4gICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiXG4gICAgICAgICAgICAgICAgW3Nob3dCdXR0b25CYXJdPVwiIWNvbHVtbi50aW1lT25seVwiPjwvcC1jYWxlbmRhcj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCIgPlxuICAgICAgICAgICAgICB7eyBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LGNvbHVtbikgfX1cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgIDwvc3Bhbj5cblxuXG4gICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgICAgICAgPHNwYW4gW25nU3dpdGNoXT1cImNvbHVtbi50eXBlXCI+XG4gICAgICAgICAgICA8IS0tIERyb3Bkb3duIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidkcm9wZG93bidcIiBbY2xhc3NdPVwiZHJvcGRvd25JbnB1dCA/ICcnIDogJ291dHB1dC1kcm9wZG93bidcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cIiBjb2x1bW4uaG92ZXJEYXRhPyBudWxsOiBlZGl0QWxsUm93cyA/ICcucC1kcm9wZG93bi1sYWJlbCcgOiAnc2VsZidcIj5cbiAgICAgICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duICpuZ0lmPVwiIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZGVuXCIgW29wdGlvbnNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpKydfZGF0YSddXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSsnX2RhdGEnXVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNvbHVtbi5kYXRhXG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKSA/IHJvd1tyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGRdXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIiBbcGxhY2Vob2xkZXJdPVwicm93W2NvbHVtbi5kaXNwbGF5RmllbGRdXG4gICAgICAgICAgICAgICAgICAgICAgPyByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF1cbiAgICAgICAgICAgICAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGRdID8gcm93W2NvbHVtbi5maWVsZF0gOiAnU2VsZWN0J1wiIFtzaG93Q2xlYXJdPVwicm93W2NvbHVtbi5maWVsZF0gPyB0cnVlIDogZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICBbb3B0aW9uTGFiZWxdPVwiY29sdW1uLm9wdGlvbkxhYmVsXCIgKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICBbb3B0aW9uVmFsdWVdPVwiY29sdW1uLm9wdGlvblZhbHVlXCIgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2hpZGUtYm9yZGVyJyA6ICcnXCIgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KVwiIFtmaWx0ZXJdPVwiY29sdW1uLmFsbG93U2VhcmNoXCI+PC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgc2V0RHJvcGR3b25SZWFkT25seVZhbHVlKHJvdywgY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8IS0tIE11bHRpU2VsZWN0IGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICAgICAgPCEtLSBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpID8gcm93W3Jvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldIDpcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdXCIgLS0+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ211bHRpLXNlbGVjdCdcIiBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnLnAtbXVsdGlzZWxlY3QtbGFiZWwnXCI+XG4gICAgICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgICAgICA8cC1tdWx0aVNlbGVjdCBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIiB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIlxuICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJjb2x1bW4uZGF0YVwiIFtvcHRpb25MYWJlbF09XCJjb2x1bW4ub3B0aW9uTGFiZWxcIiBbb3B0aW9uVmFsdWVdPVwiY29sdW1uLm9wdGlvblZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpXCIgKG9uUGFuZWxTaG93KT1cInNob3dPcHRpb24oY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdylcIiBbYXBwZW5kVG9dPVwiJ2JvZHknXCIgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiPlxuICAgICAgICAgICAgICAgICAgPC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdzZWxmJ1wiID5cbiAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdXG4gICAgICAgICAgICAgICAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdIDpcbiAgICAgICAgICAgICAgICAgICAgc2V0TXVsdGlTZWxlY3REYXRhKGNvbHVtbiwgcm93W2NvbHVtbi5maWVsZF0pXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDwhLS0gQXV0b0NvbXBsZXRlIFNlYXJjaCAtLT5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInQXV0b0NvbXBsZXRlJ1wiPlxuICAgICAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgPHAtYXV0b0NvbXBsZXRlIFxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIiBcbiAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiY29sdW1uLmhlYWRlclwiXG4gICAgICAgICAgICAgICAgICAgIFtzdWdnZXN0aW9uc109XCJjb2x1bW4uZGF0YVwiIFxuICAgICAgICAgICAgICAgICAgICAob25TZWxlY3QpPVwiYXV0b0NvbXBsZXRlU2VsZWN0ZWRWYWx1ZShyb3csIGNvbHVtbiwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtmaWVsZF09XCJjb2x1bW4ub3B0aW9uTGFiZWwgPyBjb2x1bW4ub3B0aW9uTGFiZWw/LnRvTG93ZXJDYXNlKCkgOiBjb2x1bW4uZGlzcGxheUZpZWxkID8gY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKSA6IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKVwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQgPyByb3dbcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV0gOlxuICAgICAgICAgICAgICAgICAgICB0eXBlT2Yocm93W2NvbHVtbi5maWVsZF0pID09PSAnb2JqZWN0JyAmJiByb3dbY29sdW1uLmZpZWxkXT8udGV4dCA/XG4gICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdPy50ZXh0IDpcbiAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgICBbZHJvcGRvd25dPVwiY29sdW1uLnNob3dPcHRpb25cIiBcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2VFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0V2ZW50KGNvbHVtbiwgcm93KVwiIFxuICAgICAgICAgICAgICAgICAgICAoY29tcGxldGVNZXRob2QpPVwiYXV0b1NlYXJjaCgkZXZlbnQsIGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAgIChvbkJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93LCAkZXZlbnQpXCIgXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCIgXG4gICAgICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25BdXRvQ29tcGxldGVLZXlFbnRlckV2ZW50KCRldmVudCwgY29sdW1uLCByb3cpXCI+XG4gICAgICAgICAgICAgICAgICA8L3AtYXV0b0NvbXBsZXRlPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3dbY29sdW1uLmZpZWxkXSAmJiByb3dbY29sdW1uLmZpZWxkXVswXSAmJiAgcm93W2NvbHVtbi5maWVsZF1bMF1bY29sdW1uLmRpc3BsYXlGaWVsZF1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IHZhbHVlIG9mIHJvd1tjb2x1bW4uZmllbGRdOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgcm93W2NvbHVtbi5maWVsZF0gJiYgcm93W2NvbHVtbi5maWVsZF0ubGVuZ3RoID4gMSA/IHJvd1tjb2x1bW4uZmllbGRdLmxlbmd0aCAtMSA9PT0gaSA/XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWVbY29sdW1uLmRpc3BsYXlGaWVsZF0gOiB2YWx1ZVtjb2x1bW4uZGlzcGxheUZpZWxkXSArICc7JyA6IHZhbHVlW2NvbHVtbi5kaXNwbGF5RmllbGRdIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicm93W2NvbHVtbi5maWVsZF0gJiYgcm93W2NvbHVtbi5maWVsZF1bMF0gJiYgIHJvd1tjb2x1bW4uZmllbGRdWzBdW2NvbHVtbi5maWVsZF0gJiYgIWNvbHVtbi5kaXNwbGF5RmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IHZhbHVlIG9mIHJvd1tjb2x1bW4uZmllbGRdOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgcm93W2NvbHVtbi5maWVsZF0gJiYgcm93W2NvbHVtbi5maWVsZF0ubGVuZ3RoID4gMSA/IHJvd1tjb2x1bW4uZmllbGRdLmxlbmd0aCAtMSA9PT0gaSA/XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWVbY29sdW1uLmZpZWxkXSA6IHZhbHVlW2NvbHVtbi5maWVsZF0gKyAnOycgOiB2YWx1ZVtjb2x1bW4uZmllbGRdIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwhLS0gQWRkIEdlbmVyYXRlIFJlcG9ydCBCdXR0b24gLS0+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3JlcG9ydCdcIj5cbiAgICAgICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgICAgICA8c2UtZ2VuZXJhdGUtcmVwb3J0LWJ0biBbcmVwSW5mb109XCJzZXRSZXBvcnROYW1lKGNvbHVtbiwgcm93KVwiIFtsYWJlbF09XCJjb2x1bW4ubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBbcGFyYW1zXT1cInNldFJlcG9ydFBhcmFtcyhjb2x1bW4sIHJvdylcIiBbY2xhc3NdPVwiY29sdW1uLmNsYXNzXCIgW3Nob3dEaWFsb2ddPVwiY29sdW1uLnNob3dEaWFsb2dcIlxuICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJjb2x1bW4uaWNvblwiIFtyZXBvcnRUeXBlXT1cImNvbHVtbi5yZXBvcnRUeXBlXCI+PC9zZS1nZW5lcmF0ZS1yZXBvcnQtYnRuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgICAgICA8c2UtZ2VuZXJhdGUtcmVwb3J0LWJ0biBbcmVwSW5mb109XCJzZXRSZXBvcnROYW1lKGNvbHVtbiwgcm93KVwiIFtsYWJlbF09XCJjb2x1bW4ubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBbcGFyYW1zXT1cInNldFJlcG9ydFBhcmFtcyhjb2x1bW4sIHJvdylcIiBbaWNvbl09XCJjb2x1bW4uaWNvblwiIFtjbGFzc109XCJjb2x1bW4uY2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd0RpYWxvZ109XCJjb2x1bW4uc2hvd0RpYWxvZ1wiIFtyZXBvcnRUeXBlXT1cImNvbHVtbi5yZXBvcnRUeXBlXCI+PC9zZS1nZW5lcmF0ZS1yZXBvcnQtYnRuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0ICBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnaW5wdXQnXCI+XG4gICAgICAgICAgICAgIDwhLS0gSW5wdXQgY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgICAgICAgIDxwLWNlbGxFZGl0b3I+ICAgICAgXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBbc3R5bGVdPVwiY29sdW1uLnN0eWxlID8gY29sdW1uLnN0eWxlIDogJ2Rpc3BsYXk6ZmxleCdcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBbdHlwZV09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LnRleHRUeXBlP3Jvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8udGV4dFR5cGU6Y29sdW1uLnRleHRUeXBlP2NvbHVtbi50ZXh0VHlwZTondGV4dCdcIiBcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJ3ByaW1lLWlucHV0J1wiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2hpZGUtYm9yZGVyJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3cudW5kZWZpbmVkID8gJycgOiBhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpICYmIHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXSA/XG4gICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF0gOiByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10gJiYgcm93W2NvbHVtbi5maWVsZCsnX29iaiddLnZhbHVlID8gcm93W2NvbHVtbi5maWVsZCsnX29iaiddLnZhbHVlIDogcm93W2NvbHVtbi5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiXG4gICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIiAoY2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tCdXR0b24oY29sdW1uLCByb3cpXCIgKm5nSWY9XCJjb2x1bW4uZmllbGQgIT09IGRhdGFLZXk7IGVsc2UgbG9ja2VkX2ZpZWxkXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJmbG9hdDpyaWdodFwiICpuZ0lmPVwiY29sdW1uLmZvcm1hdD09J3Bhc3N3b3JkJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPyhyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10udGV4dFR5cGU9PSdwYXNzd29yZCc/J3BpIHBpLWV5ZSc6J3BpIHBpLWV5ZS1zbGFzaCcpOmNvbHVtbi50ZXh0VHlwZT09J3Bhc3N3b3JkJz8ncGkgcGktZXllJzoncGkgcGktZXllLXNsYXNoJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlUGFzc3dvcmRUeXBlKGNvbHVtbiwgcm93KVwiIFt0aXRsZV09XCJjb2x1bW4uaGVhZGVyXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+IFxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsb2NrZWRfZmllbGQ+PHNwYW4gKm5nSWY9XCIhcm93LmlzTmV3XCIgIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdzZWxmJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IHJvd1tjb2x1bW4uZmllbGRdIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gW3N0eWxlXT1cImNvbHVtbi5zdHlsZSA/IGNvbHVtbi5zdHlsZSA6ICdkaXNwbGF5OmZsZXgnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCIgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnIFwiIFxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LnRleHRUeXBlID8ocm93W2NvbHVtbi5maWVsZCsnX29iaiddPy50ZXh0VHlwZT09J3Bhc3N3b3JkJyAgPydwYXNzd29yZCc6JycpIDpjb2x1bW4udGV4dFR5cGU9PSdwYXNzd29yZCc/J3Bhc3N3b3JkJzonJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IHNldFRleHRCb3hSZWFkT25seVZhbHVlKHJvdywgY29sdW1uKSB9fSBcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImZsb2F0OnJpZ2h0XCIgKm5nSWY9XCJjb2x1bW4uZm9ybWF0PT0ncGFzc3dvcmQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8ocm93W2NvbHVtbi5maWVsZCsnX29iaiddLnRleHRUeXBlPT0ncGFzc3dvcmQnPydwaSBwaS1leWUnOidwaSBwaS1leWUtc2xhc2gnKTpjb2x1bW4udGV4dFR5cGU9PSdwYXNzd29yZCc/J3BpIHBpLWV5ZSc6J3BpIHBpLWV5ZS1zbGFzaCdcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2x1bW4uaGVhZGVyXCIgKGNsaWNrKT1cImNoYW5nZVBhc3N3b3JkVHlwZShjb2x1bW4sIHJvdylcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgIFxuICAgICAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIFxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8IS0tIEdyaWQgUm93cyBEYXRhIEJpbmRpbmdzIEVuZCAtLT5cblxuICAgICAgICA8IS0tIEFjdGlvbiBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgPHRkICpuZ0lmPVwiIXNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgY29sdW1ucz8ubGVuZ3RoID4gMCAmJiBjb2x1bW5BY3Rpb25zLmxlbmd0aCA+IDBcIlxuICAgICAgICAgIGNsYXNzPVwiZm9yLWJ1dHRvbnNcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWN0aW9uLWJ0blwiICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29sdW1uQWN0aW9uc1wiPlxuICAgICAgICAgICAgPGkgW3RpdGxlXT1cImFjdGlvbi50b29sdGlwXCIgW2NsYXNzXT1cImFjdGlvbi5pY29uXCIgKGNsaWNrKT1cImhhbmRsZUFjdGlvbkNsaWNrKCRldmVudCwgYWN0aW9uLCByb3cpXCI+PC9pPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkXG4gICAgICAgICAgKm5nSWY9XCIhc2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiBjb2x1bW5zPy5sZW5ndGggPiAwICYmIHVzZUlubGluZUNSVUQgJiYgKGRlbGV0ZVJvd1Blcm1pc3Npb24gfHwgZWRpdFJvd1Blcm1pc3Npb24pXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bidcIlxuICAgICAgICAgIGNsYXNzPVwiZm9yLWJ1dHRvbnNcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImRpc2FibGVkU2F2ZUJ0biA/ICdoaWRlLWNsZWFyLWZpbHRlci1idXR0b24nIDogJydcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz0nc2V0QWN0aW9uQ29sdW1uV2lkdGgnPlxuICAgICAgICAgICAgPHNlLWdyaWQtcm93LWFjdGlvbnMgW2VkaXRpbmddPVwiZWRpdGluZ1wiIFtlZGl0Um93UGVybWlzc2lvbl09XCJlZGl0Um93UGVybWlzc2lvblwiXG4gICAgICAgICAgICAgIFtkZWxldGVSb3dQZXJtaXNzaW9uXT1cImRlbGV0ZVJvd1Blcm1pc3Npb25cIiBbaGlkZURlbGV0ZUJ0bl09XCJoaWRlRGVsZXRlQnRuXCIgW2hpZGVFZGl0QnRuXT1cImhpZGVFZGl0QnRuXCJcbiAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIiAob25Sb3dFZGl0SW5pdEJ0bik9XCJvblJvd0VkaXRJbml0KCRldmVudClcIiAoZGVsZXRlUmVjb3JkQnRuKT1cImRlbGV0ZVJlY29yZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKG9uUm93RWRpdFNhdmVCdG4pPVwib25Sb3dFZGl0U2F2ZSgkZXZlbnQpXCIgKG9uUm93RWRpdENhbmNlbEJ0bik9XCJvblJvd0VkaXRDYW5jZWwoJGV2ZW50LCByaSlcIlxuICAgICAgICAgICAgICBbZWRpdEFsbFJvd3NdPVwiZWRpdEFsbFJvd3NcIj5cbiAgICAgICAgICAgIDwvc2UtZ3JpZC1yb3ctYWN0aW9ucz5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8IS0tIEZvb3RlciBjb2x1bW5zIG9uIEdyaWQgLS0+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZvb3RlclwiPlxuICAgICAgPHRyICpuZ0lmPVwiYWdncmVnYXRlRm9vdGVyXCI+XG4gICAgICAgIDx0ZFxuICAgICAgICAgICpuZ0lmPVwic2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiAoY29sdW1uQWN0aW9ucy5sZW5ndGggPiAwIHx8ICh1c2VJbmxpbmVDUlVEICYmIChkZWxldGVSb3dQZXJtaXNzaW9uIHx8IGVkaXRSb3dQZXJtaXNzaW9uKSkpXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bidcIj48L3RkPlxuICAgICAgICA8dGQgKm5nSWY9XCJhbGxvd1NlbGVjdGlvblwiIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiPjwvdGQ+XG4gICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgb3V0ZXJDb2x1bW4gb2Ygc2VsZWN0ZWRDb2x1bW5zXCIgY2xhc3M9XCJncmlkLWNvbXBvbmVudC1vdXRlci1jb2x1bW5cIiBbc3R5bGVdPVwib3V0ZXJDb2x1bW4uc3R5bGVcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpbm5lckNvbHVtbiBvZiBzZWxlY3RlZENvbHVtbnNcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGFnZ3Igb2YgaW5uZXJDb2x1bW4/LmFnZ3JlZ2F0ZVwiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJhZ2dyLmFnZ3JWYWx1ZT8ubGVuZ3RoICYmICgoIWFnZ3IuZGlzcGxheUZpZWxkICYmIGlubmVyQ29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBvdXRlckNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgICAgICAgICAgICAgIGFnZ3IuZGlzcGxheUZpZWxkICYmIGFnZ3IuZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBvdXRlckNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IFtpbm5lckhUTUxdPVwiYWdnci5hZ2dyVmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj4gIFxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGRcbiAgICAgICAgICAqbmdJZj1cIiFzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmIGNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgdXNlSW5saW5lQ1JVRCAmJiAoZGVsZXRlUm93UGVybWlzc2lvbiB8fCBlZGl0Um93UGVybWlzc2lvbilcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZGlzYWJsZWRTYXZlQnRuID8gJ2hpZGUtY2xlYXItZmlsdGVyLWJ1dHRvbicgOiAnJ1wiPjwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8IS0tIEZvb3RlciBmb3IgRW1wdHkgTWVzc2FnZSBjb2x1bW5zIG9uIEdyaWQgLS0+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxuICAgICAgPHRyIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQgbm8tcmVjb3Jkcy1mb3VuZFwiPlxuICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJzZWxlY3RlZENvbHVtbnM/Lmxlbmd0aCArIDFcIj57e3RvdGFsUmVjb3Jkcz09MD8gJ05vIHJlY29yZHMgZm91bmQnOicnfX08L3RkPlxuICAgICAgPC90cj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L3AtdGFibGU+ICBcbiAgPHAtb3ZlcmxheVBhbmVsXG4gIFtzdHlsZV09XCJvdmVybGF5UGFuZWxTdHlsZVwiICNvdmVybGF5UGFuZWw+XG4gICAgPG5nLWNvbnRhaW5lciAjdmlld0NvbnRhaW5lclJlZj48L25nLWNvbnRhaW5lcj5cbiAgPC9wLW92ZXJsYXlQYW5lbD5cbjwvZGl2PiJdfQ==
3372
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2dyaWQvZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2dyaWQvZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUdaLFFBQVEsRUFFUixZQUFZLEVBR1osU0FBUyxFQUNULFlBQVksRUFFWixnQkFBZ0IsR0FJakIsTUFBTSxlQUFlLENBQUM7QUFRdkIsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE9BQU8sRUFTTCxrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLGtCQUFrQixFQUVsQixjQUFjLEVBQ2QsZUFBZSxFQUVmLGNBQWMsRUFDZCxxQkFBcUIsRUFFckIsVUFBVSxFQUNWLGdCQUFnQixFQUVoQixTQUFTLEdBQ1YsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFlLE1BQU0saUNBQWlDLENBQUM7QUFHL0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTdELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRWxNLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsT0FBTyxFQUFnQixRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJdkQsT0FBTyxFQUFTLElB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SyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7WUFDdEwsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1lBQ25MLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtZQUN0TCxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7WUFDL0wsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1lBQy9MLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtTQUNqTDtRQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtZQUN6RCxHQUFHLFVBQVU7WUFDYixVQUFVLEVBQUUsY0FBYztZQUMxQixNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUN4RCxJQUFJLEVBQUU7Z0JBQ0osU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO2dCQUMzQixLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLO2dCQUMxQixTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLFNBQVM7Z0JBQ3ZELEdBQUcsTUFBTSxDQUFDLE9BQU87YUFFbEI7U0FDRixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVE7YUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDhDQUE4QzthQUM1RCxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztZQUNyRCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlELENBQUMsQ0FBQyxDQUFDO1FBRUgscUJBQXFCO1FBQ3JCLDBEQUEwRDtRQUMxRCxpRUFBaUU7UUFDakUsV0FBVztRQUVYLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekMsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDO1FBQ3JELElBQUksYUFBYSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7U0FDekY7UUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELG9CQUFvQixDQUFDLEtBQVU7UUFDN0IsSUFBSSxnQkFBZ0IsR0FBUSxRQUFRLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDeEUsSUFBSSxnQkFBZ0IsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2hDLE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQy9FLE1BQU0saUJBQWlCLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDL0UsSUFBSSxDQUFDLGNBQWMsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxFQUFFO2dCQUNwSCxJQUFJLE9BQU8sQ0FBQyxzRUFBc0UsQ0FBQyxJQUFJLElBQUksRUFBRTtvQkFDM0YsSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO2lCQUMzQzthQUNGO2lCQUFJO2dCQUNILElBQUksQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3BDO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsaUNBQWlDO0lBQ2pDLG1CQUFtQixDQUFDLEdBQUc7UUFDckIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEUsTUFBTSxnQkFBZ0IsR0FBRyxTQUFTLEVBQUUsUUFBa0MsQ0FBQztRQUN2RSxNQUFNLGNBQWMsR0FBRyxnQkFBZ0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzVELGdCQUFnQixDQUFDLGlCQUFpQixHQUFHLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQztJQUM1RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxpQkFBaUIsQ0FBQyxNQUFXLEVBQUUsR0FBUztRQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMvQixJQUFJLEdBQUcsR0FBUSxJQUFJLENBQUMscUJBQXFCLENBQ3ZDLEdBQUcsRUFDSCxNQUFNLEVBQ04sR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxJQUFJO1lBQ25ELENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUM5RixDQUFDO1FBRUYsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDO1FBQ2pLLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRO2FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyw4Q0FBOEM7YUFDNUQsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLGVBQWUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDakUsQ0FBQyxDQUFDLENBQUM7UUFDSCxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FDbkIsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNOLElBQUksR0FBRyxFQUFFO2dCQUNQLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxHQUFDLEtBQUssQ0FBQztnQkFDcEMsSUFBSSxLQUFLLEdBQUcsaUJBQWlCLENBQzNCLE1BQU0sRUFDTixNQUFNLENBQUMsYUFBYSxFQUNwQixHQUFHLENBQ0osQ0FBQztnQkFDRixHQUFHLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzdCLElBQUksU0FBUyxHQUFHLE1BQU0sRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsQ0FBQztnQkFDdEUsSUFBSSxTQUFTLEdBQUcsTUFBTSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxDQUFDO2dCQUN0RSxJQUFJLFdBQVcsR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDO2dCQUMvQyxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUU7b0JBQ3ZCLElBQUksR0FBRyxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUU7d0JBQzNELEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO3dCQUM1RCxHQUFHLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO3FCQUMxRzt5QkFBTTt3QkFDTCxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUc7NEJBQ2pCLElBQUksRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7NEJBQ3BFLEtBQUssRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQzt5QkFDaEQsQ0FBQTtxQkFDRjtpQkFDRjtxQkFBTSxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO29CQUMvQixLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsV0FBVyxDQUFDO29CQUM3QixJQUFJLFNBQVMsSUFBSSxTQUFTLEVBQUU7d0JBQzFCLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRzs0QkFDakIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDOzRCQUNqRCxLQUFLLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7eUJBQ25ELENBQUM7cUJBQ0g7eUJBQU07d0JBQ0wsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7cUJBQ2hDO2lCQUNGO3FCQUFNO29CQUNMLElBQUksU0FBUyxJQUFJLFNBQVMsRUFBRTt3QkFDMUIsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHOzRCQUNqQixJQUFJLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDOzRCQUMzRSxLQUFLLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7eUJBQ3JELENBQUM7cUJBQ0g7eUJBQU07d0JBQ0wsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztxQkFDckM7aUJBQ0Y7YUFDRjtZQUNELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7Z0JBQzNDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN4RixHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDO2FBQzlDO2lCQUFNLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRTtnQkFDOUIsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsRUFBRTtvQkFDOUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztpQkFDbEs7cUJBQU07b0JBQ0wsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7aUJBQ25JO2FBQ0Y7aUJBQU0sSUFBSSxHQUFHLEVBQUU7Z0JBQ2QsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQzthQUMzSjtZQUNELElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRTtnQkFDbkIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDM0I7WUFDRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLFNBQVMsRUFBRTtnQkFDdkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM3QixJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7b0JBQ25CLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3RCO2FBQ0Y7UUFDSCxDQUFDLEVBQ0QsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDWixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxlQUFlLENBQUMsTUFBVztRQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxnREFBZ0Q7SUFDaEQsc0JBQXNCLENBQUMsR0FBRyxFQUFFLE1BQU07UUFDaEMsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssUUFBUSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM1SixLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQztTQUMvQzthQUFNO1lBQ0wsS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFO2dCQUN2QixLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUNsQztpQkFBTTtnQkFDTCxLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUMzQjtTQUNGO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQseUNBQXlDO0lBQ3pDLG1CQUFtQixDQUFDLE1BQVcsRUFBRSxHQUFRO1FBQ3ZDLElBQUksV0FBVyxHQUFZLEtBQUssQ0FBQztRQUNqQyxJQUNFLE1BQU0sQ0FBQyxRQUFRO1lBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxTQUFTLENBQUMsRUFDOUQ7WUFDQSxXQUFXLEdBQUcsSUFBSSxDQUFDO1NBQ3BCO2FBQU0sSUFDTCxNQUFNLENBQUMsUUFBUTtZQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsa0JBQWtCLENBQUM7Z0JBQzlELElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxrQkFBa0IsQ0FBQyxFQUN2RTtZQUNBLFdBQVcsR0FBRyxJQUFJLENBQUM7U0FDcEI7YUFBTSxJQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsWUFBWSxDQUFDO1lBQ3hELElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxZQUFZLENBQUMsRUFDakU7WUFDQSxXQUFXLEdBQUcsSUFBSSxDQUFDO1NBQ3BCO1FBQ0QsSUFBSSxXQUFXLEVBQUU7WUFDZixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztZQUNsQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUU1QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVE7aUJBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyw4Q0FBOEM7aUJBQzVELFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxDQUFDO1lBQ0gscUJBQXFCO1lBQ3JCLHlDQUF5QztZQUN6QyxXQUFXO1lBQ1gsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFO2dCQUNuQixNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3RCO1NBQ0Y7UUFDRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxNQUFXLEVBQUUsR0FBUSxFQUFFLFFBQWEsRUFBRTtRQUMvRCxJQUFJLEtBQUssR0FBRyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQztRQUNqQyxJQUFJLEtBQUssR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ3pDLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsWUFBWSxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbEYsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ2pFLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUM3RyxJQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFDO2dCQUN4QixNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7Z0JBQzVFLElBQUcsQ0FBQyxZQUFZLEVBQUM7b0JBQ2YsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7aUJBQ3JJO2FBQ0Y7aUJBQUk7Z0JBQ0gsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7YUFDdEg7U0FDRjtRQUNELElBQUcsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUM7WUFDdEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1NBQ3pCO0lBRUgsQ0FBQztJQUVELDJCQUEyQixDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRztRQUN4QyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksZUFBZSxDQUFDLFlBQVksRUFBRTtZQUMvQyxJQUFJLE1BQU0sQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO2dCQUMxRSxxRkFBcUY7Z0JBQ3JGLElBQUksT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssb0JBQW9CLENBQUMsRUFBRTtvQkFDckUsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFO3dCQUNwQixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVzs2QkFDM0Isb0JBQW9CLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDOzZCQUNuRSxJQUFJLENBQUMsR0FBRyxFQUFFOzRCQUVULElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRTtnQ0FDbkIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQzs2QkFDekM7d0JBQ0gsQ0FBQyxDQUFDLENBQUM7cUJBQ047aUJBQ0Y7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUNELFlBQVksQ0FBQyxNQUFtQixFQUFFLEdBQVE7UUFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNyRCxDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQW1CLEVBQUUsR0FBUSxFQUFFLFFBQVksRUFBRTtRQUMzRCxJQUFJLENBQUMsMEJBQTBCLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUNuRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3BHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFBO1NBQ2hDO1FBQ0QsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO1lBQ25GLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDOUMsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDdkM7WUFDRCxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUU7Z0JBQ3JCLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDeEI7aUJBQU0sSUFDTCxNQUFNLENBQUMsUUFBUTtnQkFDZixNQUFNLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxZQUFZLEVBQzVDO2dCQUNBLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDdEI7U0FDRjtRQUNELElBQUksQ0FBQywyQkFBMkIsR0FBRyxLQUFLLENBQUM7UUFDekMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxhQUFhLENBQUMsTUFBc0IsRUFBRSxHQUFRO1FBQzVDLElBQUksTUFBTSxHQUFRLEVBQUUsQ0FBQztRQUNyQixJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7WUFDbkIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7U0FDMUI7YUFBTSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLGVBQWUsRUFBRTtZQUNwSCxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsZUFBZSxDQUFDO1NBQ3RFO2FBQU07WUFDTCxNQUFNLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQztTQUNqQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxlQUFlLENBQUMsTUFBc0IsRUFBRSxHQUFRO1FBQzlDLElBQUksWUFBWSxHQUFVLEVBQUUsQ0FBQztRQUM3QixJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLFdBQVcsRUFBRTtZQUN6RyxZQUFZLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsV0FBVyxDQUFDO1NBQ3hFO2FBQU07WUFDTCxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztTQUM5QjtRQUNELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxHQUFRLEVBQUUsTUFBWSxFQUFFLEtBQVc7UUFDbkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFDRCxhQUFhLENBQUMsR0FBZ0IsRUFBRSxNQUFZLEVBQUUsS0FBVztRQUN2RCxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNuRSxNQUFNLFNBQVMsR0FBUSxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDbEMsK0JBQStCO1FBQy9CLElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksU0FBUyxDQUFDLFdBQVcsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksS0FBSyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUU7WUFDbkgsU0FBUyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FDN0MsR0FBRyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFDakMsWUFBWSxDQUNiLENBQUM7U0FDSDtRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxTQUFTLENBQUMsR0FBUTtRQUNoQixNQUFNLEdBQUcsR0FBRztZQUNWLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSztZQUNoQixTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsWUFBWTtZQUN2RCxRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSztZQUM3QyxVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNoRCxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVztTQUMvRixDQUFDO1FBQ0YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQVcsRUFBRSxLQUFVLEVBQUUsTUFBVztRQUNsRCxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksR0FBQyxJQUFJLENBQUM7UUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDekMsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QixZQUFZLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDMUQsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxXQUFXLEVBQUU7WUFDL0MsTUFBTSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQTtTQUN4QzthQUFNLElBQUksTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEtBQUssSUFBSSxDQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtZQUM3RSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUM5RDthQUFNLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLE9BQU8sSUFBSSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksS0FBSyxxQkFBcUIsQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLFNBQVMsS0FBSyxLQUFLLEVBQUU7WUFDckosTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztTQUN4QjthQUFNLElBQUksTUFBTSxFQUFFO1lBQ2pCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzlCO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLE1BQW1CLEVBQUUsTUFBVyxFQUFFLEtBQVU7UUFDN0QsSUFBSSxNQUFNLENBQUMsV0FBVyxLQUFLLElBQUksRUFBRTtZQUMvQixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDL0M7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQVUsRUFBRSxNQUFXO1FBQ3BDLElBQ0UsS0FBSyxDQUFDLEdBQUcsS0FBSyxXQUFXO1lBQ3pCLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQztnQkFDMUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFO2dCQUNyQyxNQUFNLENBQUMsV0FBVyxLQUFLLElBQUksQ0FBQyxFQUM5QjtZQUNBLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNoQzthQUFNLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxXQUFXLEtBQUssSUFBSSxFQUFFO1lBQzlFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNoQztJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxNQUFXO1FBQzNCLElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2pFLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUN2QyxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzRCxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNyQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxDQUFDO1NBQy9CO1FBQ0QsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRSxDQUFDLENBQUMsS0FBSyxLQUFLLE1BQU0sQ0FBQyxLQUFLLENBQUEsQ0FBQSxDQUFDLENBQUMsQ0FBQTtRQUNyRixJQUFJLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzlDLENBQUM7SUFFRCw4RUFBOEU7SUFDOUUsZUFBZSxDQUFDLEtBQVUsRUFBRSxNQUFtQjtRQUM3QyxJQUNFLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxXQUFXLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUM7WUFDckQsTUFBTSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUMzQztZQUNBLElBQUksYUFBYSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLEVBQUU7Z0JBQ25ELGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBUSxDQUFDLENBQUM7YUFDdkg7aUJBQU0sSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxFQUFFO2dCQUNyQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUNuRztZQUNELElBQUksYUFBYSxJQUFJLGFBQWEsQ0FBQyxPQUFPLEVBQUU7Z0JBQzFDLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUNwQyxJQUFJLEtBQUssR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FDekMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDLEtBQUssQ0FDckMsQ0FBQztvQkFDRixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRTt3QkFDZCxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxFQUFFOzRCQUNwRSxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQzs0QkFDdkYsWUFBWSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7eUJBQ3ZGOzZCQUFNOzRCQUNMLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsRUFBRTtnQ0FDbkQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzs2QkFDbkg7aUNBQU0sSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxFQUFFO2dDQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLGFBQWEsQ0FBQzs2QkFDbkc7eUJBQ0Y7cUJBQ0Y7aUJBQ0Y7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxhQUFhLENBQUMsTUFBVyxFQUFFLEdBQVE7UUFDakMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELHdCQUF3QjtJQUN4QixZQUFZLENBQUMsTUFBVyxFQUFFLEdBQVE7UUFDaEMsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxLQUFLLEtBQUssSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO1lBQ2hLLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7U0FDbkM7UUFDRCxpRUFBaUU7UUFDakUsb0NBQW9DO1FBQ3BDLElBQUk7UUFDSixJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzdELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2hEO2FBQU0sSUFDTCxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ2xCLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLElBQUk7WUFDcEMsQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFDcEMsTUFBTSxDQUFDLGVBQWUsRUFDdEI7WUFDQSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQzdEO1FBQ0QsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEtBQUssSUFBSSxJQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLFFBQVEsS0FBSyxJQUFJLENBQUMsRUFBRTtZQUNySyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQztJQUVELG1CQUFtQixDQUFDLE1BQU0sRUFBRSxHQUFHO1FBQzdCLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQzFELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDaEYsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUN6QztpQkFBTSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN2RCxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ25EO1NBQ0Y7UUFDRCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELHVDQUF1QztJQUN2QyxVQUFVLENBQUMsTUFBTSxFQUFFLEdBQUc7UUFDcEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxZQUFZLENBQUMsTUFBTSxFQUFFLEdBQUc7UUFDdEIsSUFBSSxNQUFNLEVBQUUsSUFBSSxLQUFLLGVBQWUsQ0FBQyxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ25FLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUVELHdCQUF3QjtJQUN4QixhQUFhLENBQUMsTUFBVyxFQUFFLEdBQVE7UUFDakMscUVBQXFFO1FBQ3JFLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN0QyxJQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUM1QixJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7WUFDbkIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN0QjtRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUTthQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2IsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksSUFBSSxDQUFDLHFCQUFxQixJQUFJLElBQUksRUFBRTtnQkFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3JDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFTCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFBO1FBQ2pDLElBQUksQ0FBQywyQkFBMkIsR0FBRyxLQUFLLENBQUM7UUFDekMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ25DLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUE7UUFDakMsSUFBSSxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNuRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUM1QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsS0FBVSxFQUFFLE1BQW1CLEVBQUUsR0FBRztRQUN0RCxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRTtZQUNyQyxJQUFJLENBQUMsMkJBQTJCLEdBQUcsSUFBSSxDQUFDO1NBQ3pDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ25DLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUE7UUFDakMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUE7UUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxxRUFBcUU7SUFDckUseUJBQXlCLENBQUMsTUFBVyxFQUFFLEdBQVE7UUFDN0MsSUFDRSxNQUFNLEVBQUUsSUFBSSxLQUFLLGVBQWUsQ0FBQyxRQUFRO1lBQ3pDLE1BQU0sQ0FBQyxZQUFZO1lBQ25CLE1BQU0sQ0FBQyxZQUFZLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFDL0I7WUFDQSxNQUFNLEdBQUcsR0FBUSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FDckMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNWLE9BQU8sRUFBRSxXQUFXLEVBQUUsS0FBSyxNQUFNLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUMvRCxDQUFDO1lBQ0YsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDeEMsQ0FBQyxNQUFXLEVBQUUsRUFBRSxDQUNkLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFO2dCQUN0QyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUNoQyxDQUFDO1lBQ0YsSUFBSSxHQUFHLElBQUksaUJBQWlCLEVBQUU7Z0JBQzVCLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDbEQ7U0FDRjtJQUNILENBQUM7SUFFRCwwQkFBMEI7SUFDMUIsVUFBVSxDQUFDLEtBQVUsRUFBRSxNQUFXLEVBQUUsR0FBUTtRQUMxQyxJQUFJLEtBQUssSUFBSSxNQUFNLElBQUksR0FBRyxFQUFFO1lBQzFCLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDM0M7SUFDSCxDQUFDO0lBRUQsZUFBZTtJQUNmLFdBQVc7UUFDVCxJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNsRSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksU0FBUyxFQUFFO2dCQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7YUFDOUM7WUFDRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUM5QztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHNCQUFzQjtJQUN0QixxQkFBcUI7UUFDbkIsTUFBTSx5QkFBeUIsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUN2RCxzQkFBc0IsQ0FDdkIsQ0FBQztRQUNGLElBQUkseUJBQXlCLEVBQUU7WUFDN0IseUJBQXlCLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDbkM7UUFDRCxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzNELElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNoQyxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3RHLGFBQWEsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ3RDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ25CLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDbkMsR0FBRyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEIsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMxQixJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDMUMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsQ0FBQyxFQUFFO29CQUNuSixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztpQkFDM0I7Z0JBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7YUFDMUI7U0FDRjtJQUNILENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELDZDQUE2QztJQUM3QyxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDdkMsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQzdCLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTt3QkFDckIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7cUJBQ2pEO2dCQUNILENBQUMsQ0FBQyxDQUFBO2FBQ0g7UUFFSCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUU7WUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDOUIsSUFBSSxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDbkQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7b0JBQzVCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDL0I7WUFDSCxDQUFDLENBQUMsQ0FBQTtTQUNIO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFDRCxzQkFBc0IsQ0FBQyxZQUFvQixFQUFFO1FBQzNDLElBQUksT0FBTyxHQUFZLEtBQUssQ0FBQztRQUM3QixJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELE1BQU0sT0FBTyxHQUFRLElBQUksQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2pDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDZixJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO2dCQUMzQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztnQkFDMUIsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO2dCQUNsQixLQUFLLElBQUksSUFBSSxJQUFJLE9BQU8sRUFBRTtvQkFDeEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7d0JBQzlDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDYixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2hCLENBQUMsQ0FBQyxDQUFDO29CQUNILFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ3hCO2dCQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7b0JBQ3RDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO3dCQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO3FCQUN6RDt5QkFDSTt3QkFDSCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO3dCQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7cUJBQzdDO29CQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO29CQUMxQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDM0IsQ0FBQyxDQUFDLENBQUM7YUFDTjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztnQkFDM0IsSUFBSSxTQUFTLElBQUksV0FBVyxFQUFFO29CQUM1QixLQUFLLElBQUksSUFBSSxJQUFJLE9BQU8sRUFBRTt3QkFDdEIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO3FCQUNoQjtpQkFDRjthQUNGO1NBQ0Y7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsdUNBQXVDO0lBQ3ZDLFVBQVUsQ0FBQyxNQUFXO1FBQ3BCLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFRCw4Q0FBOEM7SUFDOUMsa0JBQWtCO1FBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEdBQUMsSUFBSSxDQUFDO1FBQ25DLElBQUksQ0FBQywyQkFBMkIsR0FBRyxLQUFLLENBQUM7UUFDekMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ25DLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzdCLElBQUksY0FBYyxHQUFRLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RSxJQUFJLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3JFLElBQUksY0FBYyxJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQy9DLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2xFLElBQUksZUFBZSxFQUFFO2dCQUNuQixlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDekI7aUJBQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzNFLElBQUksQ0FBQyxlQUFlLENBQ2xCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUN6QixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFDeEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQzFCLENBQUM7YUFDSDtTQUNGO2FBQU0sSUFBSSxvQkFBb0IsRUFBRTtZQUMvQixvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUM5QjthQUFNO1lBQ0wsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3BFLElBQUksQ0FBQyxlQUFlLENBQ2xCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUN6QixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFDeEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQzFCLENBQUM7YUFDSDtTQUNGO1FBQ0EsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVGLG9DQUFvQztJQUNwQyxvQkFBb0IsQ0FBQyxPQUFZLEVBQUUsS0FBVSxFQUFFLGtCQUEyQixLQUFLO1FBRTdFLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDcEIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sRUFBRSxNQUFNLEdBQUcsQ0FBQyxJQUFJLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxJQUFJLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxLQUFLLE1BQU0sRUFBRTtnQkFDcEksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7YUFDL0I7aUJBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLElBQUksSUFBSSxJQUFJLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxLQUFLLE9BQU8sQ0FBQyxFQUFFO2dCQUMvSCxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQzthQUNyQjtZQUNELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUM5RixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDMUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDOUI7aUJBQU0sSUFBSSxZQUFZLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsSUFBSSxJQUFJLElBQUksS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLEtBQUssT0FBTyxDQUFDLEVBQUU7Z0JBQ3ZHLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDNUYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ25DO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtTQUMzQjtRQUNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsV0FBVyxDQUFDLFFBQVE7UUFDbEIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzNCLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDNUIsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzdCLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQyxDQUFDLENBQUMsQ0FBQTtTQUNIO2FBQU07WUFDTCxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2QyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDbkQ7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsWUFBWSxDQUFDLEdBQVE7UUFDbkIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixJQUFJLElBQUksRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDbkIsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUN4QixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDakI7WUFDSCxDQUFDLENBQUMsQ0FBQTtTQUNIO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsbUJBQW1CLENBQUMsTUFBVyxFQUFFLEtBQVU7UUFDekMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsb0JBQW9CLENBQUMsTUFBVyxFQUFFLEtBQVUsRUFBRSxNQUFXO1FBQ3ZELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3ZFLHFDQUFxQztRQUNyQyw2Q0FBNkM7UUFDN0MsSUFBSTtJQUNOLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxNQUFtQixFQUFFLEdBQVM7UUFDN0MsSUFBSSxHQUFHLEVBQUU7WUFDUCxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1lBQ3hELEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1lBQzVFLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ3hCO2FBQU07WUFDTCxNQUFNLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUN4QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDeEcsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO2FBQ3RDO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRTtZQUNuQixNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3RCO0lBQ0gsQ0FBQztJQUVELDJDQUEyQztJQUMzQyxtQkFBbUIsQ0FBQyxNQUFtQjtRQUNyQyxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRTtZQUMxQyxJQUNFLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLE9BQU87O29CQUV2QyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksS0FBSyxVQUFVLElBQUksTUFBTSxDQUFDLFNBQVMsSUFBSSxLQUFLLEVBQ2hFO2dCQUNBLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQzVCLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsUUFBUSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7d0JBQ3BGLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztxQkFDdkQ7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtTQUNGO1FBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUU7WUFDckMsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQztZQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDckM7UUFDRCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFDRCxpRUFBaUU7SUFDakUsc0JBQXNCLENBQUMsS0FBVTtRQUMvQixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCx3Q0FBd0M7SUFDeEMsa0JBQWtCLENBQUMsTUFBVyxFQUFFLEdBQVE7UUFDdEMsSUFBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUM7WUFDbEIsUUFBUSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUM3RyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUN0QyxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLElBQUksTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEtBQUssZUFBZSxDQUFDLFNBQVMsRUFBRTt3QkFDekYsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLHVCQUF1QixFQUFFLFVBQVUsQ0FBQyxDQUFDO3FCQUNyRjt5QkFDSSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLEVBQUU7d0JBQ3hDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQzt3QkFDeEUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztxQkFDdEM7aUJBQ0Y7Z0JBQ0QsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzRCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtvQkFDNUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUM7b0JBQ2pDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDL0U7cUJBQU0sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUM7aUJBQ2pDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDRjtJQUVILENBQUM7SUFDRCxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsR0FBRztRQUM1QixJQUFJLFFBQVEsR0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBQyxNQUFNLENBQUMsQ0FBQSxDQUFDLENBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLElBQUUsVUFBVSxDQUFBLENBQUMsQ0FBQSxNQUFNLENBQUEsQ0FBQyxDQUFBLFVBQVUsQ0FBQyxDQUFBLENBQUMsQ0FBQSxNQUFNLENBQUMsUUFBUSxJQUFFLFVBQVUsQ0FBQSxDQUFDLENBQUEsTUFBTSxDQUFBLENBQUMsQ0FBQSxVQUFVLENBQUM7UUFDdEosSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFDLFFBQVEsRUFBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUMsTUFBTSxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUMsQ0FBQztJQUU1SCxDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNwRSxNQUFNLHFCQUFxQixHQUFHLFlBQVksRUFBRSxTQUFTLENBQUM7UUFDdEQsTUFBTSxzQkFBc0IsR0FBRyxZQUFZLEVBQUUsVUFBVSxDQUFDO1FBQ3hELElBQUkscUJBQXFCLEVBQUU7WUFDekIsSUFBSSxDQUFDLGVBQWUsR0FBRyxxQkFBcUIsQ0FBQztZQUM3QyxJQUFJLENBQUMsZUFBZSxHQUFHLHNCQUFzQixDQUFDO1NBQy9DO1FBQ0QsSUFBSSxxQkFBcUIsSUFBSSxDQUFDLEVBQUU7WUFDOUIsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2hEO2FBQ0k7WUFDSCxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ25FO0lBQ0gsQ0FBQztJQUNELGdCQUFnQixDQUFDLEtBQTJCO1FBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1NBQzdDO1FBQ0QsSUFBSSxPQUFPLENBQUMsc0VBQXNFLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDM0YsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQ25DLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztTQUMzQzthQUNJO1lBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRO2lCQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNiLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUNuQixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO2lCQUNyQztxQkFDSTtvQkFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUM3RCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO2lCQUM5QjtnQkFDRCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNoQyxDQUFDLENBQUMsQ0FBQztZQUNMLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztpSUFwNkdVLGFBQWE7cUhBQWIsYUFBYSxxL0ZBQ2UsZ0JBQWdCLHNOQzlFekQsbyt2REF1NUJNOzsyRkQxMEJPLGFBQWE7a0JBTHpCLFNBQVM7K0JBQ0UsU0FBUzs7MEJBcWVoQixRQUFROzswQkFDUixRQUFROzRDQWhlSix5QkFBeUI7c0JBRC9CLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHOUMsT0FBTztzQkFBL0IsWUFBWTt1QkFBQyxTQUFTO2dCQUNiLGVBQWU7c0JBQXhCLE1BQU07Z0JBTU0sY0FBYztzQkFBMUIsS0FBSztnQkF5RVcsS0FBSztzQkFBckIsU0FBUzt1QkFBQyxJQUFJO2dCQUdOLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQUVHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUcsZUFBZTtzQkFBdkIsS0FBSztnQkFRVSxjQUFjO3NCQUE3QixLQUFLO2dCQUVVLGNBQWM7c0JBQTdCLEtBQUs7Z0JBUUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csV0FBVztzQkFBbkIsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdVLE9BQU87c0JBQXRCLEtBQUs7Z0JBR0csWUFBWTtzQkFBcEIsS0FBSztnQkFJRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBR0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUdHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFHRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBR0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUdHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBR0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csT0FBTztzQkFBZixLQUFLO2dCQUdHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBR0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFHRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBR0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFNTSxJQUFJO3NCQUFoQixLQUFLO2dCQWtETyxnQkFBZ0I7c0JBQTVCLEtBQUs7Z0JBd0ZHLE9BQU87c0JBQWYsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLO2dCQUdHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csVUFBVTtzQkFBbEIsS0FBSztnQkFHRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBR0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBR0csV0FBVztzQkFBbkIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFHSSxVQUFVO3NCQUFuQixNQUFNO2dCQUdHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFHRyxhQUFhO3NCQUF0QixNQUFNO2dCQUdHLFlBQVk7c0JBQXJCLE1BQU07Z0JBR0csY0FBYztzQkFBdkIsTUFBTTtnQkFHRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBR0csYUFBYTtzQkFBdEIsTUFBTTtnQkFHRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBSVAsdUJBQXVCO3NCQUR0QixNQUFNO2dCQU1QLFlBQVk7c0JBRFgsTUFBTTtnQkFJRyxXQUFXO3NCQUFwQixNQUFNO2dCQUdHLGVBQWU7c0JBQXhCLE1BQU07Z0JBR0csV0FBVztzQkFBcEIsTUFBTTtnQkFHRyxRQUFRO3NCQUFqQixNQUFNO2dCQUdHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFHRSxZQUFZO3NCQUFwQixLQUFLO2dCQUdHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUksYUFBYTtzQkFBdEIsTUFBTTtnQkFHRyxZQUFZO3NCQUFyQixNQUFNO2dCQUVFLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQThJTixlQUFlO3NCQUZkLFlBQVk7dUJBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDOztzQkFDL0IsWUFBWTt1QkFBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBV1csT0FBTztzQkFBaEQsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxlQUFlLENBQUM7Z0JBUXhDLG1CQUFtQjtzQkFEbEIsWUFBWTt1QkFBQyxxQkFBcUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBPbkNoYW5nZXMsXG4gIE9wdGlvbmFsLFxuICBFbGVtZW50UmVmLFxuICBWaWV3Q2hpbGRyZW4sXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBIb3N0TGlzdGVuZXIsXG4gIE9uRGVzdHJveSxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgTmdab25lLFxuICBBZnRlclZpZXdJbml0LFxuICBSZW5kZXJlcjIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7XG4gIER5bmFtaWNEaWFsb2dSZWYsXG4gIER5bmFtaWNEaWFsb2dDb25maWcsXG4gIERpYWxvZ1NlcnZpY2UsXG4gIER5bmFtaWNEaWFsb2dDb21wb25lbnQsXG59IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XG5pbXBvcnQganNQREYgZnJvbSAnanNwZGYnO1xuaW1wb3J0IHsgR3JpZFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ncmlkLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgSUdyaWRDb2x1bW4sXG4gIElHcmlkU29ydCxcbiAgSUdyaWRTZXJ2ZXJTaWRlRXZlbnQsXG4gIElHcmlkUGFnaW5hdGlvbkV2ZW50LFxuICBJR2xvYmFsRmlsdGVyLFxuICBJR3JpZEZpbHRlcixcbiAgSUdyaWRDb2x1bW5BY3Rpb24sXG4gIElHcmlkUm93QWN0aW9uLFxuICBFR3JpZFNlbGVjdGlvblR5cGUsXG4gIEVHcmlkQ29sdW1uVHlwZSxcbiAgRUdyaWRTb3J0RGlyZWN0aW9uLFxuICBJR3JpZERhdGFFeHBvcnQsXG4gIEVHcmlkQWdncmVnYXRlLFxuICBFR3JpZEZvcm1hdFR5cGUsXG4gIElHcmlkRmlsdGVySW5mbyxcbiAgRUdyaWRWYWxpZGF0b3IsXG4gIEdyaWRGaWx0ZXJDb250cm9sVHlwZSxcbiAgdXNlclNldHRpbmcsXG4gIEVHcmlkRXhjZWwsXG4gIEVHcmlkUm93UHJvcE5hbWUsXG4gIElHcmlkUmVwb3J0QnRuLFxuICBFR3JpZGxpbmssXG59IGZyb20gJy4uLy4uLy4uL21vZGVscy9ncmlkLm1vZGVsJztcbmltcG9ydCB7IEVQZXJtaXNzaW9uVHlwZSwgSVBlcm1pc3Npb24gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdXNlci1pbmZvLm1vZGVsJztcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBJZnJhbWVDb21wb25lbnQgfSBmcm9tICcuLi9pZnJhbWUvaWZyYW1lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlUGlwZSwgRGVjaW1hbFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgYXV0b1NldExvb2t1cERhdGEsIGNoYW5nZUNvbHVtbnNTdGF0ZSwgY3VycmVudFVybCwgZHJhZ2dhYmxlRGlhbG9nLCBvYmpDb252ZXJ0VG9Mb3dlciwgc2V0RGlhbG9nUmVzcG9uc2UsIHNldE1pbnV0ZXNJbnRlcnZhbCwgc2V0VGltZUluRGF0ZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdGllcy5zZXJ2aWNlJztcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5pbXBvcnQgeyBFRm9ybWF0VHlwZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsJztcbmltcG9ydCB7IFBhZ2VMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcGFnZS1sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGludGVydmFsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSHlwZXJsaW5rU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2h5cGVybGluay5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7IGRlbGF5LCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBSZXF1ZXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2xpYi9zZXJ2aWNlcy9yZXF1ZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVxdWVzdER0byB9IGZyb20gJ3Byb2plY3RzL3NlLXVpLXRvb2xraXQvc3JjL2xpYi9tb2RlbHMvcmVxdWVzdC5tb2RlbCc7XG5pbXBvcnQgeyBTeXN0ZW1Db25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc3lzdGVtLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IEVtYWlsRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZW1haWwvZW1haWwtZmlsdGVyL2VtYWlsLWZpbHRlci5jb21wb25lbnQnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2UtZ3JpZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9ncmlkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ3JpZC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBHcmlkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ3ZpZXdDb250YWluZXJSZWYnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICBwdWJsaWMgcGFuZWxPdmVybGF5Vmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZlxuXG4gIEBWaWV3Q2hpbGRyZW4oJ2dyaWRSb3cnKSBncmlkUm93OiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG4gIEBPdXRwdXQoKSBpbmxpbmVSb3dDYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIGdyaWRTZXR0aW5nOiBhbnk7XG4gIHNlYXJjaGJ0bklkID0gJ3NlYXJjaEdsb2JhbEZpbHRlckJ0bic7XG4gIGN1cnJlbnRQYWdlOiBudW1iZXIgPSAwO1xuICBQYWdlQ2hhbmdlOiBib29sZWFuO1xuICB0ZW1wU2F2ZWRSb3c6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIHNldCBhY3RpdmVUZXN0TW9kZSh2YWw6IGFueSkge1xuICAgIGlmICh2YWwgPT09IHRydWUpIHtcbiAgICAgIGRlYnVnZ2VyO1xuICAgIH1cbiAgfVxuICBzZXJ2ZXJGaWx0ZXJzOiBJR3JpZFNlcnZlclNpZGVFdmVudCA9IHt9O1xuICByb3dzRGF0YTogYW55W10gPSBbXTtcbiAgZ3JpZElkOiBzdHJpbmcgPSAnJztcbiAgcm93c0RhdGFDb3B5OiBhbnlbXSA9IFtdO1xuICBudW1lcmljVmFsdWU6IGFueSA9IHt9XG4gIHJvbGVzOiBzdHJpbmdbXSA9IFtdO1xuICBpc0NvbHVtbkhpZGRlbjogYm9vbGVhbiA9IGZhbHNlO1xuICByb3dDbGlja0RhdGE6IElHcmlkQ29sdW1uO1xuICBjb21wb25lbnRUYWJsZVJlZjogYW55O1xuICBsb29rdXBGaWx0ZXJPYmo6IGFueTtcbiAgY2hlY2tsaXN0OiBhbnlbXSA9IFtdXG4gIGxvb2t1cEJsdXI6IGJvb2xlYW4gPSB0cnVlO1xuICBnbG9iYWxGaWx0ZXJzQXJyYXk6IGFueVtdID0gW107XG4gIGNoZWNrQWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIGNhbGVuZGFyUHJldmlvdXNWYWx1ZTogc3RyaW5nID0gJyc7XG4gIGdyaWRGaWx0ZXJPYmo6IElHcmlkRmlsdGVySW5mbztcbiAgZGVmYXVsdERhdGU6IGFueTtcbiAgb3ZlcmxheVBhbmVsU3R5bGU6IHt9O1xuICBncmlkZmlsdGVyOiBhbnk7XG4gIGRyb3BEb3duRmlsdGVyOiBhbnkgPSB7fTtcbiAgZHJvcGRvd25JbnB1dDogYm9vbGVhbiA9IGZhbHNlO1xuICBzYXZlQWxsUmVjb3JkOiBib29sZWFuID0gZmFsc2U7XG4gIGdlbmVyYXRlUm93c0RhdGFDb3B5OiBib29sZWFuID0gdHJ1ZTtcbiAgZWRpdEFsbFJlY29yZDogYm9vbGVhbiA9IGZhbHNlO1xuICBjYW5jZWxBbGxSZWNvcmRzOiBib29sZWFuID0gZmFsc2U7XG4gIGFkZE5ld1Jvd0NoZWNrOiBib29sZWFuID0gZmFsc2U7XG4gIGluRWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2F2ZVJlY29yZEFycmF5OiBhbnlbXSA9IFtdO1xuICBkaXNhYmxlZFNhdmVCdG46IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU2VsZWN0ZWRBbGxSb3dzOiBib29sZWFuID0gZmFsc2U7XG4gIENoZWNrZWQ6IGJvb2xlYW4gPSB0cnVlXG4gIHVuQ2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlXG4gIGVkaXRNb2RlQ2hlY2tlZDogYm9vbGVhbiA9IHRydWU7XG4gIGVkaXRNb2RldW5Da2Vja2VkOiBib29sZWFuID0gZmFsc2U7XG4gIGNhbGVuZGFyRm9ybWF0OiBzdHJpbmcgPSBcIm1tL2RkL3l5XCJcbiAgc2V0RHJvcGRvd25GaWx0ZXI6IGJvb2xlYW4gPSB0cnVlO1xuICByZWxvYWRQYWdlOiBTdWJzY3JpcHRpb247XG4gIHNldERyb3Bkb3duZGF0YVZhbHVlOiBib29sZWFuID0gdHJ1ZTtcbiAgc2hvd0ZpbHRlcmJ0bjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHRvb2dsZVNvcnRPcmRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBkaWFsb2dSZWY6IGFueVxuICB1c2VyU2V0dGluZzogdXNlclNldHRpbmcgPSB7fTtcbiAgcm93VXBkYXRlQ2hhbmdlOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU2VydmVyU2lkZUV2ZW50SW5pdGFsVHJpZ2dlcmVkID0gbmV3IFN1YmplY3QoKVxuXG4gIC8vYXBwbHkgQWRkL0RlbGV0ZS9FZGl0IHByb3AgZm9yIHRoZSBncmlkIHBlcm1pc3Npb25cbiAgYWRkUm93UGVybWlzc2lvbjogYm9vbGVhbiA9IHRydWU7XG4gIGRlbGV0ZVJvd1Blcm1pc3Npb246IGJvb2xlYW4gPSB0cnVlO1xuICBlZGl0Um93UGVybWlzc2lvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLy8gQXBwbHkgcHJvcCBzZXRBZ2dyZWdhdGVGb290ZXIgb24gRm9vdGVyIG9mIHRoZSBUYWJsZSBmb3IgYWdncmVnYXRlLlxuICBzZXRBZ2dyZWdhdGVGb290ZXI6IHN0cmluZyA9ICcnO1xuICBcbiAgcHJpdmF0ZSBjbGlja1RpbWVvdXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IEhpZGUgQWdncmVnYXRlIEZvb3RlciBXaGVuIEFnZ3JlZ2F0ZSBub3QgQXBwbHkgb24gVGFibGUuXG4gIGFnZ3JlZ2F0ZUZvb3RlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIE1haW50YWlucyBwcmV2aW91cyBzdGF0ZSBvZiByb3dzIGJlaW5nIGVkaXRlZFxuICBlZGl0Um93c1JlY29yZHM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgLy8gTWFpbnRhaW5zIHJlY29yZCBvZiByb3dzIGJlaW5nIGVkaXRlZFxuICBlZGl0aW5nUm93S2V5czogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICBjdXJyZW50VXJsOiBzdHJpbmcgPSBjdXJyZW50VXJsKCk7XG4gIG9uQ2xpY2tFdmVudFRyaWdnZXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBcbiAgcmVtYWluaW5nUm93c0RhdGE6YW55W10gPSBbXTtcbiAgXG4gIEBWaWV3Q2hpbGQoJ2R0JykgdGFibGU6IFRhYmxlO1xuXG4gIC8vIFNlbGVjdHMgaXRlbXMgaW4gdGhlIGdyaWQgYmFzZWQgb24gcGFzc2VkIG9uIGRhdGFcbiAgQElucHV0KCkgc2VsZWN0ZWRSb3dzOiBhbnkgPSBbXTtcblxuICBASW5wdXQoKSBzZXRHcmlkUmVmcmVzaFRpbWU6IG51bWJlciA9IDA7XG5cbiAgQElucHV0KCkgYWRkRGF0YUtleVZhbHVlID0gZmFsc2U7XG5cbiAgQElucHV0KCkgc3RvcERpYWxvZ0Nsb3NlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBnbG9iYWxEYXRhOiBJR3JpZEZpbHRlcltdID0gW107XG5cbiAgc29ydERpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZWRpdEFsbHJvd3NBdE9uZVRpbWU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBzaG93UmVmcmVzaEJ0bjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBoaWRlUmVmcmVzaEJ0bjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLy8gU3RvcmVzIHNlbGVjdGVkIGNvbHVtbnNcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRDb2x1bW5zOiBJR3JpZENvbHVtbltdID0gW107XG4gIHNlbGVjdGVkVG9nZ2xlQ29sdW1uczogSUdyaWRDb2x1bW5bXSA9IFtdO1xuICBcbiAgdmlzaWJsZUNvbHVtbnM6IElHcmlkQ29sdW1uW10gPSBbXTtcbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IGhvcml6b250YWwgU2Nyb2xsIG9uIFRhYmxlLlxuICBASW5wdXQoKSBob3Jpem9udGFsU2Nyb2xsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGhpZGUgdGhlIGRlbGV0ZSByb3cgYnV0dG9uLlxuICBASW5wdXQoKSBoaWRlRGVsZXRlQnRuID0gZmFsc2U7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGhpZGUgdGhlIGVkaXQgcm93IGJ1dHRvbi5cbiAgQElucHV0KCkgaGlkZUVkaXRCdG4gPSBmYWxzZTtcblxuICAvLyBCb29sZWFuIHByb3AgdG8gaGlkZSB0aGUgYWRkIHJvdyBidXR0b24uXG4gIEBJbnB1dCgpIGhpZGVBZGRCdG4gPSBmYWxzZTtcblxuICAvLyBQcm9wIHRvIGhhbmRsZSBsb2FkZXIgb2YgZ3JpZFxuICBASW5wdXQoKSBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuXG4gIC8vdGhpcyBwcm9wZXJ0eSBpcyB1c2VkIHRvIGhhbmRsZSBzZXJ2ZXIgc2lkZSBldmVudCBieSBkZWZhdWx0IGl0IGlzIHRydWUgd2hlbiBpdCBmYWxzZSBzZXJ2ZXIgc2lkZSBldmVudCB3aWxsIG5vdCBiZSBjYWxsZWRcbiAgQElucHV0KCkgYXV0b0xvYWREYXRhOiBib29sZWFuID0gdHJ1ZTtcblxuXG4gIC8vdGFibGUgcm93IHN0eWxlc1xuICBASW5wdXQoKSByb3dTdHlsZTogc3RyaW5nO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBjaGVjayB3aGVyZSBzZWxlY3RlZCBpcyBhbGxvd2VkIG9yIG5vdC5cbiAgQElucHV0KCkgYWxsb3dTZWxlY3Rpb24gPSBmYWxzZTtcblxuICAvLyBTZXQgY29sdW1uIHdpZHRoIG9mIHNlbGVjdGVkIHJvdy5cbiAgQElucHV0KCkgc2VsZWN0aW9uQ29sdW1uV2lkdGg6IHN0cmluZyA9ICc4MHB4JztcblxuICAvLyBzZXQgc2VsZWN0aW9uIGNoZWNrQm94IGhlYWRlclxuICBASW5wdXQoKSBhbGxvd1NlbGVjdGlvbkhlYWRlcjogc3RyaW5nID0gJyc7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGhpZGUgdGhlIHNhdmUgYnV0dG9uIG9uIHRvcCBvZiBncmlkLlxuICBASW5wdXQoKSBoaWRlR3JpZFNhdmVCdXR0b24gPSBmYWxzZTtcblxuICAvLyBCb29sZWFuIHByb3AgdG8gaGlkZSB0aGUgc2F2ZSBidXR0b24gb24gdG9wIG9mIGdyaWQuXG4gIEBJbnB1dCgpIGhpZGVHcmlkQ2FuY2VsQnV0dG9uID0gZmFsc2U7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IGV4cG9ydCB0byBwZGYuXG4gIEBJbnB1dCgpIGFsbG93RXhwb3J0VG9QZGYgPSBmYWxzZTtcblxuICAvLyBCb29sZWFuIHByb3AgdG8gYWxsb3cgZXhwb3J0IHRvIGV4Y2VsLlxuICBASW5wdXQoKSBhbGxvd0V4cG9ydFRvRXhjZWwgPSBmYWxzZTtcblxuICAvLyBCb29sZWFuIHByb3AgdG8gc2V0IHRoZSBhY3Rpb24gY29sdW1uIGFzIGZpcnN0IGNvbHVtbi5cbiAgQElucHV0KCkgc2V0QWN0aW9uQ29sdW1uQXNGaXJzdCA9IGZhbHNlO1xuXG4gIC8vIElmIHRydWUsIGVuYWJsZXMgb3B0aW9ucyB0byBwZXJmb3JtIENSVUQgdXNpbmcgaW5saW5lIHJvdyBmdW5jdGlvbmFsaXR5XG4gIEBJbnB1dCgpIHVzZUlubGluZUNSVUQgPSBmYWxzZTtcbiAgLy8gaWYgdHJ1ZSwgaXQgd29udCBhZGQgYSBuZXcgcm93IHdoZW4gY2xpY2sgYWRkXG4gIEBJbnB1dCgpIHByZXZlbnROZXdSb3cgPSBmYWxzZTtcblxuICAvLyBBcnJheSBvZiByb3cgYWN0aW9uc1xuICBASW5wdXQoKSByb3dBY3Rpb25zOiBJR3JpZFJvd0FjdGlvbltdID0gW107XG5cbiAgLy8gU2V0cyBzZWxlY3Rpb24gdHlwZSBpLmU6IHNpbmdsZS9tdWx0aXBsZSBzZWxlY3Rpb25cbiAgQElucHV0KCkgc2VsZWN0aW9uVHlwZTogRUdyaWRTZWxlY3Rpb25UeXBlID0gRUdyaWRTZWxlY3Rpb25UeXBlLlNJTkdMRTtcblxuICAvLyBVbmlxdWUga2V5IHJlcXVpcmVzIGZvciBidWlsdC1pbiByb3cgc2VsZWN0aW9uIG9mIHByaW1lTmcgZ3JpZFxuICBASW5wdXQoKSBkYXRhS2V5OiBzdHJpbmcgPSAndGVtcF9pZCc7XG5cbiAgLy8gRmxhZyBmb3IgY2xlYXIgZmlsdGVyIHZhbHVlcyBidXR0b25cbiAgQElucHV0KCkgY2xlYXJHcmlkRmlsdGVyID0gdHJ1ZTtcblxuICAvLyBGbGFnIGZvciBzZWFyY2ggZmlsdGVyIHZhbHVlcyBidXR0b25cbiAgQElucHV0KCkgc2VhcmNoR3JpZEZpbHRlciA9IHRydWU7XG5cbiAgLy8gRmxhZyBpbiBjYXNlIHRhYmxlIGlzIHNjcm9sbGFibGVcbiAgQElucHV0KCkgc2Nyb2xsYWJsZSA9IHRydWU7XG5cbiAgLy8gU2V0cyBzY3JvbGwgaGVpZ2h0IGZvciB0aGUgdGFibGVcbiAgQElucHV0KCkgc2Nyb2xsSGVpZ2h0ID0gJzgwdmgnO1xuXG4gIC8vIFRhYmxlIHN0eWxlXG4gIEBJbnB1dCgpIHRhYmxlU3R5bGUgPSAnJztcblxuICAvLyBCb29sZWFuIHByb3AgdG8gYWxsb3cgdG8gd3JhcCBvciB1bldyYXAgdGhlIGdyaWQuXG4gIEBJbnB1dCgpIHdvcmRXcmFwOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgbmV3R3JpZFJvdzogYW55ID0ge307XG5cbiAgQElucHV0KCkgZmlsdGVyaW5nID0gdHJ1ZTtcblxuICBASW5wdXQoKSByZXBvcnRCdXR0b25zOiBhbnlbXSA9IFtdO1xuXG4gIEBJbnB1dCgpIHJvd0hvdmVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgaGlkZUZpbHRlck9wdGlvbnM6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIGlzRXJyb3JPY2N1cmVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gU2V0cyBwYWdlbmF0aW9uIGZvciB0aGUgdGFibGUgRGF0YS5cbiAgQElucHV0KCkgc2V0UGFnaW5hdGlvbkxlbmd0aDogYW55W10gPSBbNSwgMTAsIDE1LCB7IHNob3dBbGw6ICdBbGwnIH1dO1xuXG4gIC8vIHNldCB0aGUgY2hhbmdlIGluIHRoZSByb3dEYXRhXG4gIEBPdXRwdXQoKSByb3dzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLyoqXG4gICAqIFN0b3BzIHRoZSBsb2FkZXIgYW5kIHNldHMgdGhlIGRhdGEgdG8gZ3JpZFxuICAgKiBDbGVhcnMgdGhlIGVkaXRpbmcgc3RhY2tcbiAgICogU2Nyb2xscyB0byBzZWxlY3RlZCBlbGVtZW50IGlmIHNlbGVjdGlvbiBmb3VuZFxuICAgKi9cbiAgQElucHV0KCkgc2V0IHJvd3MoZGF0YTogYW55W10pIHtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICBpZiAoIXRoaXMucm93VXBkYXRlQ2hhbmdlKSB7XG4gICAgICBpZiAoIXRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkKSB7XG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlmICghdGhpcy5kYXRhS2V5KSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFLZXkgPSAndGVtcF9pZCc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJvd3NEYXRhID0gdGhpcy5ncmlkU2VydmljZS5zZXREYXRhRmllbGRzKGRhdGEsIHRoaXMuZGF0YUtleSk7XG4gICAgICAgICAgaWYgKGRhdGE/Lmxlbmd0aCA+IDQwICYmICF0aGlzLnBhZ2luYXRpb24gJiYgIXRoaXMuZ3JpZFNlcnZpY2U/LnJvd1VwZGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgaW5pdGlhbGl6ZURhdGEgPSBbLi4ucm93c0RhdGFdO1xuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YSA9IGluaXRpYWxpemVEYXRhLnNwbGljZSgwLCA0MCk7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtYWluaW5nUm93c0RhdGEgPSBpbml0aWFsaXplRGF0YS5zcGxpY2UoNDEsIHJvd3NEYXRhPy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbHVtbnMgJiYgdGhpcy5jb2x1bW5zPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbnM/LmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW1uPy5hZ2dyZWdhdGU/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFnZ3JlZ2F0ZVRleHQoY29sdW1uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJvd3NEYXRhID0gcm93c0RhdGE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZWRpdFJvd3NSZWNvcmRzID0ge307XG5cbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFJvd3MgJiYgdGhpcy5ncmlkUm93Py5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRSZWYgPSB0aGlzLmdyaWRSb3cuZmluZChcbiAgICAgICAgICAgICAgKHgpID0+IHgubmF0aXZlRWxlbWVudC5pZCA9PT0gdGhpcy5zZWxlY3RlZFJvd3NbdGhpcy5kYXRhS2V5XVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudFJlZiAmJlxuICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTFRhYmxlUm93RWxlbWVudFxuICAgICAgICAgICAgICApLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vbWFuaXB1bGF0ZSBjaGVja2JveCBzdHJpbmcgdmFsdWUgdG8gdHJ1ZSBhbmQgZmFsc2UuXG4gICAgICAgICAgdGhpcy5jaGFuZ2VDaGVja2JveFN0cmluZ1ZhbHVlKCk7XG4gICAgICAgICAgdGhpcy5zZXROdW1lcmljVmFsdWVzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yb3dzRGF0YSA9IFtdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gR2xvYmFsIGZpbHRlciBzZXJ2ZXIgcmVxdWVzdFxuICBASW5wdXQoKSBzZXQgZ2xvYmFsRmlsdGVyRGF0YShnbG9iYWxGaWx0ZXJzOiBJR2xvYmFsRmlsdGVyW10pIHtcbiAgICB0aGlzLmdsb2JhbERhdGEgPSB0aGlzLmdyaWRTZXJ2aWNlXG4gICAgICAucHJlcGFyZUdsb2JhbEZpbHRlcnMoZ2xvYmFsRmlsdGVycylcbiAgICAgID8uZmlsdGVyKCh4KSA9PiB4Py52YWx1ZSAhPT0gZmFsc2UpO1xuICAgIGNvbnN0IHNlcnZlckZpbHRlclZhbHVlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zZXJ2ZXJGaWx0ZXJzKSk7XG4gICAgc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMgPSB0aGlzLnNlcnZlckZpbHRlcnMuZmlsdGVyc1xuICAgICAgPyB0aGlzLnNlcnZlckZpbHRlcnMuZmlsdGVycy5jb25jYXQodGhpcy5nbG9iYWxEYXRhKVxuICAgICAgOiB0aGlzLmdsb2JhbERhdGE7XG5cbiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FwcGx5RmlsdGVyJykgPT09ICdmYWxzZScpIHtcbiAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5ID0gdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXk/Lmxlbmd0aCA+IDBcbiAgICAgICAgPyB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5jb25jYXQoWy4uLnNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzXSlcbiAgICAgICAgOiB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheTtcbiAgICB9XG4gICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhcHBseUZpbHRlcicpID09PSAndHJ1ZScpIHtcbiAgICAgIGdsb2JhbEZpbHRlcnMuZm9yRWFjaCgoZ2xvYmFsRmlsdGVyKSA9PiB7XG4gICAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5LmZvckVhY2goKGZpbHRlckFycmF5KSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZmlsdGVyQXJyYXkuZmllbGQgPT09IGdsb2JhbEZpbHRlci5maWVsZCAmJlxuICAgICAgICAgICAgZ2xvYmFsRmlsdGVyLnZhbHVlICYmXG4gICAgICAgICAgICBmaWx0ZXJBcnJheS52YWx1ZSAhPT0gZ2xvYmFsRmlsdGVyLnZhbHVlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmaWx0ZXJBcnJheS52YWx1ZSA9IGdsb2JhbEZpbHRlci52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgZmluZEluZGV4ID0gdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkuZmluZEluZGV4KFxuICAgICAgICAgICAgKGluZGV4KSA9PiBpbmRleC5maWVsZCA9PT0gZ2xvYmFsRmlsdGVyLmZpZWxkICYmICFnbG9iYWxGaWx0ZXIudmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChmaW5kSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5zcGxpY2UoZmluZEluZGV4LCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWUvL3RoaXMuYXV0b0xvYWREYXRhO1xuICAgICAgaWYgKHRoaXMuZ3JpZFNlcnZpY2UuYXBwbHlGaWx0ZXJFdmVudCB8fCB0aGlzLmF1dG9Mb2FkRGF0YSkge1xuICAgICAgICB0aGlzLm9uQXBwbHlGaWx0ZXIuZW1pdCgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5ICYmIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMgPSBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycy5jb25jYXQoXG4gICAgICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzID0gQXJyYXkuZnJvbShcbiAgICAgICAgbmV3IFNldChcbiAgICAgICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVyc1xuICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgICAgLm1hcCgoZmlsdGVyOiBhbnkpID0+IGZpbHRlci5maWVsZClcbiAgICAgICAgKVxuICAgICAgKS5tYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgIHJldHVybiBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycy5maW5kKCh4OiBhbnkpID0+IHguZmllbGQgPT09IGZpZWxkKTtcbiAgICAgIH0pO1xuICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMgPSBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycy5maWx0ZXIoXG4gICAgICAgIChvYmo6IGFueSkgPT5cbiAgICAgICAgICBvYmo/LnZhbHVlICYmIG9iai52YWx1ZT8udG9TdHJpbmcoKT8ubGVuZ3RoID4gMCAmJiBvYmouZmllbGRcbiAgICAgICk7XG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1t0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHRoaXMuY3VycmVudFVybF0gPSBzZXJ2ZXJGaWx0ZXJWYWx1ZXM7XG4gICAgICBpZiAodGhpcy5ncmlkU2VydmljZS5hcHBseUZpbHRlckV2ZW50IHx8IHRoaXMuYXV0b0xvYWREYXRhID09PSB0cnVlKSB7XG4gICAgICAgIC8vIHNldHRpbmcgcGFnaW5hdGlvbiBwYWdlIGFzIGZpcnN0XG4gICAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5wYWdlID0gMTtcbiAgICAgICAgdGhpcy5hdXRvTG9hZERhdGEgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0Um93cyAmJiB0aGlzLnBhZ2luYXRpb24pIHtcbiAgICAgICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMucGFnZVNpemUgPSB0aGlzLmRlZmF1bHRSb3dzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdyaWRTZXJ2aWNlLmFwcGx5RmlsdGVyRXZlbnQpIHtcbiAgICAgICAgICB0aGlzLnNldHVwRW50ZXJMaXN0ZW5lcigpXG4gICAgICAgICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLm9uU2VydmVyU2lkZUV2ZW50Q2hhbmdlLmVtaXQoc2VydmVyRmlsdGVyVmFsdWVzKTtcbiAgICAgICAgICB0aGlzLmVkaXRpbmdSb3dLZXlzID0ge307XG4gICAgICAgIH1cbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2FwcGx5RmlsdGVyJyk7XG4gICAgICAgIC8vIHNldHRpbmcgcGFnaW5hdGlvbiBwYWdlIG51bWJlciBVSVxuICAgICAgICB0aGlzLnRhYmxlLl9maXJzdCA9IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHNldHVwRW50ZXJMaXN0ZW5lcigpIHtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuaGFuZGxlS2V5VXApO1xuICB9XG4gIGhhbmRsZUtleVVwID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgY29uc3QgZm9jdXNlZEVsZW1lbnQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgaWYgKGZvY3VzZWRFbGVtZW50IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJiBmb2N1c2VkRWxlbWVudC50eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZWxlY3RSb290RWxlbWVudChmb2N1c2VkRWxlbWVudCkuYmx1cigpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBJbnB1dCBkZWNvcmF0b3IgdG8gcmVjZWl2ZSBjb2x1bW5zIHRvIGJlIGRpc3BsYXllZCBpbiBoZWFkZXJcbiAgQElucHV0KCkgY29sdW1uczogSUdyaWRDb2x1bW5bXSA9IFtdO1xuXG4gIEBJbnB1dCgpIHBlcm1pc3Npb25zOiBJUGVybWlzc2lvbltdID0gW107XG5cbiAgLy8gT3B0aW9uYWwgcHJvcCB0byBoYW5kbGUgdG9nZ2xpbmcgb2YgY29sdW1uc1xuICBASW5wdXQoKSBhbGxvd0NvbHVtblRvZ2dsZSA9IGZhbHNlO1xuXG4gIC8vIE9wdGlvbmFsIHByb3AgdG8gaGlkZSBmaWx0ZXJpbmcgb2YgY29sdW1uc1xuICBASW5wdXQoKSBoaWRlRmlsdGVyID0gZmFsc2U7XG5cbiAgLy8gT3B0aW9uYWwgcHJvcCB0byBoYW5kbGUgbG9va3VwIGZpbHRlcnNcbiAgQElucHV0KCkgbG9va3VwRmlsdGVycyA9IGZhbHNlO1xuXG4gIC8vIE9wdGlvbmFsIHByb3AgdG8gaGFuZGxlIHBhZ2luYXRpb25cbiAgQElucHV0KCkgcGFnaW5hdGlvbiA9IGZhbHNlO1xuXG4gIC8vIE9wdGlvbmFsIHByb3AgdG8gaGFuZGxlIHNob3cgQ3VycmVudFBhZ2UgUmVwb3J0XG4gIEBJbnB1dCgpIHNob3dDdXJyZW50UGFnZVJlcG9ydCA9IGZhbHNlO1xuXG4gIC8vIERpc3BsYXlzIHRvdGFsIG51bWJlciBvZiByZWNvcmRzXG4gIEBJbnB1dCgpIHRvdGFsUmVjb3JkcyA9IDA7XG5cbiAgLy8gRGlzcGxheXMgYWdncmVnYXRlIHRoYXQgZmV0Y2ggZnJvbSByZWNvcmRzXG4gIEBJbnB1dCgpIGFnZ3JlZ2F0ZWRSZXN1bHQ6IGFueVtdID0gW107XG5cbiAgQElucHV0KCkgc2hvd2NvbmZpcm1EaWFsb2c6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIHNhdmVBbGxEYXRhOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gU2V0cyBudW1iZXIgb2Ygcm93cyB0byBiZSBzaG93biB0aGUgZ3JpZFxuICBASW5wdXQoKSBkZWZhdWx0Um93czogbnVtYmVyID0gMDtcblxuICBASW5wdXQoKSBjb2x1bW5BY3Rpb25zOiBJR3JpZENvbHVtbkFjdGlvbltdID0gW107XG5cbiAgLy8gRGVjaWRlcyB0aGUgZ3JpZCdzIGJlaGF2aW9yIGVpdGhlciBmb3IgY2xpZW50IHNpZGUgb3Igc2VydmVyIHNpZGUgZXZlbnRzXG4gIEBJbnB1dCgpIHVzZVNlcnZlclNpZGVFdmVudHMgPSBmYWxzZTtcblxuICAvLyBPdXRwdXQgZXZlbnQgdG8gaGFuZGxlIHJvdyBjbGlja1xuICBAT3V0cHV0KCkgb25Sb3dDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IGVtaXQgd2hlbiBjbGljayBvbiBncmlkIGNoZWNrYm94IGZpbHRlclxuICBAT3V0cHV0KCkgb25DaGVja0JveEZpbHRlckNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBPdXRwdXQgZXZlbnQgdG8gaGFuZGxlIHJvdyBDaGVja0JveFxuICBAT3V0cHV0KCkgb25Sb3dDaGVja0JveDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IHRvIHRyaWdnZXIgb24gc29ydCBjaGFuZ2VcbiAgQE91dHB1dCgpIG9uU29ydENoYW5nZTogRXZlbnRFbWl0dGVyPElHcmlkU29ydD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IHRvIHRyaWdnZXIgb24gZmlsdGVyIGNoYW5nZVxuICBAT3V0cHV0KCkgb25GaWx0ZXJDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIE91dHB1dCBldmVudCB0byBpbnZva2UgdGhlIG11bHRpU2VsZWN0aW9uIGNsaWNrIGV2ZW50XG4gIEBPdXRwdXQoKSBvbk11bHRpU2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBDYWxscyB3aGVuZXZlciBhIGdyaWQgYW5kIGdsb2JhbEZpbHRlcnMgY2FsbGVkXG4gIEBPdXRwdXQoKSBvbkFwcGx5RmlsdGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvL3NldCBoZWFkZXIgY2hlY2tib3ggdmFsdWUgZm9yIGdldHRpbmcgYWxsIGNvbHVtbnMgb24gc3RheSBhZG1pblxuICBAT3V0cHV0KCkgaXNJbmNsdWRlZEFsbENvbHVtbnM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIENhbGxzIHdoZW5ldmVyIGEgbGF6eSBldmVudCBpcyBkaXNwYXRjaGVkXG4gIEBPdXRwdXQoKVxuICBvblNlcnZlclNpZGVFdmVudENoYW5nZTogRXZlbnRFbWl0dGVyPElHcmlkU2VydmVyU2lkZUV2ZW50PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIE91dHB1dCBldmVudCB0byB0cmlnZ2VyIG9uIHBhZ2luYXRpb25cbiAgQE91dHB1dCgpXG4gIG9uUGFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPElHcmlkUGFnaW5hdGlvbkV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBEaXNwYXRjaCBvdXRwdXQgZXZlbnQgdHJpZ2dlciBvbiBlZGl0IHJvd1xuICBAT3V0cHV0KCkgb25Sb3dVcGRhdGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gRGlzcGF0Y2ggb3V0cHV0IGV2ZW50IHRyaWdnZXIgY2FuY2VsIGFsbCByb3dzXG4gIEBPdXRwdXQoKSBvbkNhbmNlbEFsbFJvd3MgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gRGlzcGF0Y2ggb3V0cHV0IGV2ZW50IHRyaWdnZXIgb24gZGVsZXRlIHJvd1xuICBAT3V0cHV0KCkgb25Sb3dEZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy9EaXNwYXRjaCBvdXRwdXQgZXZlbnQgdHJpZ2dlciBvbiBhZGQgcm93XG4gIEBPdXRwdXQoKSBvblJvd0FkZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvL0Rpc3BhdGNoIG91dHB1dCBldmVudCB0cmlnZ2VyIG9uIGFkZCwgdXBkYXRlIGFuZCBkZWxldGUgcm93XG4gIEBPdXRwdXQoKSBvbkdyaWRSb3dBY3Rpb25zID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIHNldCBwcm9wZXJ0eSBhbGxvd0NhY2hpbmcgZm9yIExvY2FsU3RvcmFnZVxuICBASW5wdXQoKSBhbGxvd0NhY2hpbmc6IGJvb2xlYW47XG5cbiAgLy9zZXQgTXVsdGlzZWxlY3QgVG9nZ2xlIENvbHVtbnNcbiAgQElucHV0KCkgYWxsb3dQZXJzaXN0ZW5jZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgLy8gc2V0IHByb3BlcnR5IHNvZnRDYWNoaW5nIGZvciBzZXR0aW5nIHRoZSB2YWx1ZXMgb2YgZ3JpZEZpbHRlclxuICBASW5wdXQoKSBzb2Z0Q2FjaGluZzogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KCkgZWRpdEFsbFJvd3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gc2V0IHRoZSByb3cgV2hlbiBFZGl0IHRoZSByb3cgb24gR3JpZFxuICBAT3V0cHV0KCkgb25HcmlkUm93RWRpdCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBzZXQgdGhlIHJvdyBXaGVuIGFkZGluZyB0aGUgbmV3IFJvdyBvbiBHcmlkXG4gIEBPdXRwdXQoKSBvbkdyaWRSb3dBZGQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQElucHV0KCkgZ3JpZE5hbWU6IHN0cmluZyA9ICcnO1xuICBpc0dyaWRIaWRkZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgYXV0b1Jlc2l6ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBhbGxvd1RleHRDb3B5OiBib29sZWFuID0gZmFsc2U7XG5cblxuICByb3dzUGVyUGFnZU9wdGlvbnM6IGFueVtdID0gWzUsIDEwLCAxNSwgeyBzaG93QWxsOiAnQWxsJyB9XTtcbiAgY3VzdG9tV2lkdGhDb2x1bW5zOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge307XG4gIHNlbGVjdGVkUm93UmVjb3JkOmFueTtcbiAgc2Nyb2xsUG9zaXRpb25ZOiBudW1iZXIgPSAwO1xuICBzY3JvbGxQb3NpdGlvblg6IG51bWJlciA9IDA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogU3lzdGVtQ29uZmlnU2VydmljZSxcbiAgICBwdWJsaWMgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1TZXJ2aWNlOiBGb3JtU2VydmljZSxcbiAgICBwdWJsaWMgZ3JpZFNlcnZpY2U6IEdyaWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwdWJsaWMgZGVjaW1hbFBpcGU6IERlY2ltYWxQaXBlLFxuICAgIHByaXZhdGUgcGFnZUxvZ2dlclNlcnZpY2U6IFBhZ2VMb2dnZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgaHlwZXJsaW5rU2VydmljZTogSHlwZXJsaW5rU2VydmljZSxcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHVibGljIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZiwgXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgcmVxdWVzdFNlcnZpY2UgOiBSZXF1ZXN0U2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwdWJsaWMgY29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnLFxuICAgIEBPcHRpb25hbCgpIHB1YmxpYyByZWY6IER5bmFtaWNEaWFsb2dSZWZcbiAgKSB7IH1cblxuICBjb25zb2xlTG9nKG1lc3NhZ2U6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UpO1xuICB9XG5cbiAgbW91c2VMZWF2ZUV2ZW50KG92ZXJsYXlQYW5lbCl7XG4gICAgb3ZlcmxheVBhbmVsLmhpZGUoKTtcbiAgfSBcbiAgb25Db2x1bW5SZXNpemUoZXZlbnQ6IGFueSxkdCkge1xuICAgIGlmKGR0Py5lbD8ubmF0aXZlRWxlbWVudD8uaWQpe1xuICAgICAgdGhpcy5ncmlkSWQgPSBkdC5lbC5uYXRpdmVFbGVtZW50LmlkO1xuICAgIH1cbiAgICBjb25zdCBuZXdXaWR0aCA9IGV2ZW50LmVsZW1lbnQuY2xpZW50V2lkdGggKyAyO1xuICAgIGxldCBjb2x1bW5IZWFkZXIgPSBldmVudD8uZWxlbWVudD8uaWQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGNvbHVtbkhlYWRlcikge1xuICAgICAgbGV0IGluZGV4OiBhbnkgPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5maW5kSW5kZXgoKGNvbHVtbikgPT4gY29sdW1uLmhlYWRlcj8udG9Mb3dlckNhc2UoKSA9PSBjb2x1bW5IZWFkZXIpO1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgaWYgKG5ld1dpZHRoKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnNbaW5kZXhdWydjdXN0b21XaWR0aCddID0gcGFyc2VJbnQobmV3V2lkdGgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2F2ZUNvbHVtbldpZHRocygpO1xuICB9XG4gIHNhdmVDb2x1bW5XaWR0aHModG9nZ2xlQ29sdW1uczogYW55W10gPSBbXSkge1xuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgaWYgKGNvbHVtbi5maWVsZCAmJiBjb2x1bW4uY3VzdG9tV2lkdGgpIHtcbiAgICAgICAgdGhpcy5jdXN0b21XaWR0aENvbHVtbnNbY29sdW1uLmZpZWxkXSA9IGNvbHVtbi5jdXN0b21XaWR0aDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBzZWxlY3RlZEZpZWxkcyA9IHRvZ2dsZUNvbHVtbnM/Lmxlbmd0aCA+IDAgPyB0b2dnbGVDb2x1bW5zIDogdGhpcy5fc2VsZWN0ZWRDb2x1bW5zLm1hcCgoeCkgPT4geC5maWVsZCk7XG4gICAgdGhpcy5zZXRNdWx0aVNlbGVjdFRvZ2dsZUNvbHVtbihzZWxlY3RlZEZpZWxkcyk7XG4gIH1cbiAgbG9hZENvbHVtbldpZHRocygpIHtcbiAgICBsZXQgY3VycmVudFVzZXJJbmZvID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnQ3VycmVudFVzZXJJbmZvJykpO1xuICAgIGlmIChjdXJyZW50VXNlckluZm8gJiYgY3VycmVudFVzZXJJbmZvLnBhZ2VTZXR0aW5nKSB7XG4gICAgICBsZXQgcGFnZVNldHRpbmdzID0gSlNPTi5wYXJzZShjdXJyZW50VXNlckluZm8ucGFnZVNldHRpbmcpXG4gICAgICBwYWdlU2V0dGluZ3MucGFnZVNldHRpbmdzLm1hcChwYWdlID0+IHtcbiAgICAgICAgaWYgKHBhZ2UudXJsID09PSB0aGlzLnJvdXRlci51cmwpIHtcbiAgICAgICAgICBwYWdlLmdyaWRTZXR0aW5ncy5tYXAoZ3JpZFNldHRpbmcgPT4ge1xuICAgICAgICAgICAgaWYgKGdyaWRTZXR0aW5nLmdyaWRJZCA9PT0gdGhpcy5ncmlkSWQgJiYgZ3JpZFNldHRpbmc/LmN1c3RvbUNvbHVtbnNXaWR0aCkge1xuICAgICAgICAgICAgICBjb25zdCBjb2x1bW5zV2lkdGhLZXlzID0gT2JqZWN0LmtleXMoZ3JpZFNldHRpbmc/LmN1c3RvbUNvbHVtbnNXaWR0aCk7XG4gICAgICAgICAgICAgIGNvbHVtbnNXaWR0aEtleXMuZm9yRWFjaCgoY29sdW1uS2V5OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY29sdW1ucy5maW5kSW5kZXgoKHNlbGVjdGVkQ29sdW1uKSA9PiBzZWxlY3RlZENvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gY29sdW1uS2V5Py50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5zW2luZGV4XVsnY3VzdG9tV2lkdGgnXSA9IGdyaWRTZXR0aW5nPy5jdXN0b21Db2x1bW5zV2lkdGhbY29sdW1uS2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyBwcm9jZXNzSG92ZXJEYXRhKGhvdmVyRGF0YTogYW55LCByb3c6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0geyAuLi5ob3ZlckRhdGE/LmRhdGEgfTtcbiAgICAgIGNvbnN0IGRhdGFLZXlzID0gT2JqZWN0LmtleXMoZGF0YSk7XG4gICAgICBjb25zdCByb3dLZXlzID0gT2JqZWN0LmtleXMocm93KTtcbiAgICAgIGlmIChkYXRhS2V5cz8ubGVuZ3RoID4gMCAmJiByb3dLZXlzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGRhdGFLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBkYXRhW2tleV07XG4gICAgICAgICAgaWYgKHZhbHVlPy50b1N0cmluZygpLmluY2x1ZGVzKCd7JykgJiYgdmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ30nKSkge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKFwie1wiLCBcIlwiKS5yZXBsYWNlKFwifVwiLCBcIlwiKTtcbiAgICAgICAgICAgIGxldCByb3dLZXkgPSByb3dLZXlzPy5maW5kKCh4KSA9PiB4Py50b0xvd2VyQ2FzZSgpID09PSB2YWx1ZT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICB2YXIgY29ycmVjdFZhbHVlID0gcm93W3Jvd0tleV07XG4gICAgICAgICAgICBkYXRhW2tleV0gPSBjb3JyZWN0VmFsdWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoS2V5ID0gcm93S2V5cz8uZmluZCgoeCkgPT4geD8udG9Mb3dlckNhc2UoKSA9PT0ga2V5Py50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgIGlmIChtYXRjaEtleSAmJiAhZGF0YVtrZXldKSB7XG4gICAgICAgICAgICAgIGRhdGFba2V5XSA9IHJvd1ttYXRjaEtleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBob3ZlckRhdGE/LnN0eWxlID8gdGhpcy5vdmVybGF5UGFuZWxTdHlsZSA9IGhvdmVyRGF0YT8uc3R5bGUgOiBcIlwiO1xuICAgICAgdGhpcy5wYW5lbE92ZXJsYXlWaWV3Q29udGFpbmVyLmNsZWFyKCk7XG4gICAgICBpZiAodGhpcy5wYW5lbE92ZXJsYXlWaWV3Q29udGFpbmVyICYmIGhvdmVyRGF0YT8uY29tcG9uZW50KXtcbiAgICAgICAgY29uc3QgY29tcG9uZW50UmVmOiBhbnkgPSB0aGlzLnBhbmVsT3ZlcmxheVZpZXdDb250YWluZXI/LmNyZWF0ZUNvbXBvbmVudChob3ZlckRhdGE/LmNvbXBvbmVudCk7XG4gICAgICAgIGlmIChob3ZlckRhdGEuZGF0YSkge1xuICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5jb25maWcgPSBbXTtcbiAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuY29uZmlnLmRhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgICB9IFxuICAgICAgICAgIFxuICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICB9KTtcbiAgfVxuICBcbiAgYXN5bmMgYWRkRHluYW1pY1BhbmVsT3ZlcmxheUNvbXBvbmVudChob3ZlckRhdGE6IGFueSwgb3ZlcmxheVBhbmVsOiBhbnksIGV2ZW50OiBhbnksIHJvdzogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5wcm9jZXNzSG92ZXJEYXRhKGhvdmVyRGF0YSwgcm93KTtcbiAgICBvdmVybGF5UGFuZWwuc2hvdyhldmVudCk7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRDb2x1bW5zKCk6IElHcmlkQ29sdW1uW10ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZENvbHVtbnM7XG4gIH1cblxuICBzZXQgc2VsZWN0ZWRDb2x1bW5zKHZhbDogSUdyaWRDb2x1bW5bXSkge1xuICAgIHRoaXMuX3NlbGVjdGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucz8uZmlsdGVyKChjb2wpID0+IHZhbC5pbmNsdWRlcyhjb2wpKTtcbiAgICBpZiAodGhpcy5hbGxvd1BlcnNpc3RlbmNlICYmIHRoaXMuYWxsb3dDb2x1bW5Ub2dnbGUpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkRmllbGRzID0gdmFsLm1hcCgoeCkgPT4geC5maWVsZCk7XG4gICAgICB0aGlzLnNhdmVDb2x1bW5XaWR0aHMoc2VsZWN0ZWRGaWVsZHMpO1xuICAgIH1cbiAgfVxuICAvLyB1bmFibGUgdG8gYWxsb3cgdXNlciB0byBjb3B5IHRleHQgZnJvbSBncmlkIHdoZW4gdGhpcy5hbGxvd1RleHRDb3B5IGlzIHNldCB0byBmYWxzZS5cbiAgQEhvc3RMaXN0ZW5lcignY29weScsIFsnJGV2ZW50J10pXG4gIEBIb3N0TGlzdGVuZXIoJ2N1dCcsIFsnJGV2ZW50J10pXG4gIGhhbmRsZUNvcHlPckN1dChldmVudDogQ2xpcGJvYXJkRXZlbnQpIHtcbiAgICBjb25zdCBzZWxlY3Rpb246YW55ID0gd2luZG93Py5nZXRTZWxlY3Rpb24oKT8udG9TdHJpbmcoKSB8fCAnJztcbiAgICBjb25zdCBpc011bHRpQ2VsbFNlbGVjdGlvbiA9IHNlbGVjdGlvbi5zcGxpdCgvW1xcblxcdF0rLyk/LmZpbHRlcigoeCk9PiB4ICE9PSAnJyk7XG5cbiAgICBpZiAoIXRoaXMuYWxsb3dUZXh0Q29weSAmJiBpc011bHRpQ2VsbFNlbGVjdGlvbj8ubGVuZ3RoID4gMSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfVxuICBcbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudC50YXJnZXQnXSkgb25DbGljayhldmVudCkge1xuICAgIGlmKCF0aGlzLmVkaXRBbGxSb3dzICYmICF0aGlzLmluRWRpdE1vZGUgJiYgdGhpcy5zZWxlY3RlZFJvd1JlY29yZCl7XG4gICAgICB0aGlzLmhhbmRsZVJvd0NsaWNrKHRoaXMuc2VsZWN0ZWRSb3dSZWNvcmQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGJyb3dzZXIgY2xvc2UgZXZlbnRcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcsIFsnJGV2ZW50J10pXG4gIGJlZm9yZXVubG9hZEhhbmRsZXIoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFzc2lnbm1lbnQgb2Ygc2VsZWN0ZWQgY29sdW1ucyBvbiBwYWdlIGxvYWRcbiAgICovXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UuaW5jcmVtZW50Q2FsbHMoKTtcbiAgICBpZiAodGhpcy5ncmlkU2VydmljZS5nZXROdW1iZXJPZkNhbGxzKCkgPT09IDEpIHtcbiAgICAgIHRoaXMuc2VhcmNoYnRuSWQgPSAnc2VhcmNoR2xvYmFsRmlsdGVyQnRuJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWFyY2hidG5JZCA9IGBGaWx0ZXJfJHtjdXJyZW50VXJsKCl9XyR7dGhpcy5ncmlkU2VydmljZS5nZXROdW1iZXJPZkNhbGxzKCl9YDtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2V0R3JpZFJlZnJlc2hUaW1lKSB7XG4gICAgICB0aGlzLnJlZnJlc2hHcmlkKCk7XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLm9uUm93VXBkYXRlPy5vYnNlcnZlcnM/Lmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLmhpZGVFZGl0QnRuID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lZGl0QWxsUm93cyAmJiB0aGlzLm9uUm93RGVsZXRlLm9ic2VydmVycy5sZW5ndGggPT0gMCkge1xuICAgICAgdGhpcy5kaXNhYmxlZFNhdmVCdG4gPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuY29tcG9uZW50VGFibGVSZWYgPSB0aGlzLnRhYmxlO1xuICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5yb3dzQ2hhbmdlLmVtaXQodGhpcy5yb3dzRGF0YSk7XG4gICAgfSk7IFxuICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgdGhpcy5zZXROdW1lcmljVmFsdWVzKCk7XG4gICAgLy8gfSwgNTAwKTtcbiAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgIGlmICh0aGlzLnJvd3NDaGFuZ2Uub2JzZXJ2ZXJzPy5sZW5ndGgpIHtcbiAgICAvLyAgICAgdGhpcy5yb3dzQ2hhbmdlLmVtaXQodGhpcy5yb3dzRGF0YSk7XG4gICAgLy8gICB9XG4gICAgLy8gfSwgMjAwMCk7XG4gIH1cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIHRoaXMuYWRkRHluYW1pY1BhbmVsT3ZlcmxheUNvbXBvbmVudCgpXG4gICAgbGV0IGZpbHRlcnMgPSAxMDAwO1xuICAgIHRoaXMuY29tcG9uZW50VGFibGVSZWYgPSB0aGlzLnRhYmxlO1xuICAgIGxldCBmaWx0ZXI6IFN1YnNjcmlwdGlvbiA9IGludGVydmFsKGZpbHRlcnMpLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgZmlsdGVycyA9IDA7XG4gICAgICBmaWx0ZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgIGNvbnN0IGZpbHRlckNvbHVtbiA9IHRoaXMuY29sdW1ucz8uZmluZCgoY29sdW1uKSA9PiAhdGhpcy5oaWRlRmlsdGVyICYmICFjb2x1bW4/LmhpZGRlbiAmJiBjb2x1bW4/LmZpbHRlciAmJiAoY29sdW1uPy5maWx0ZXJpbmcgPT09IHRydWUgfHwgY29sdW1uPy5maWx0ZXJpbmcgPT09IHVuZGVmaW5lZCkpO1xuICAgICAgY29uc3QgbG9va3VwTW9kYWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubG9va3VwLW1vZGVsJyk7XG4gICAgICBjb25zdCBmaWx0ZXJGaWVsZDogYW55ID0gbG9va3VwTW9kYWw/LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZmlsdGVyQ29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKSk7XG4gICAgICBjb25zdCBmaWx0ZXJGaWVsZHM6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZmlsdGVyQ29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKSk7XG4gICAgICBpZiAoZmlsdGVyRmllbGQgfHwgZmlsdGVyRmllbGRzKSB7XG4gICAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJGaWVsZD8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBmaWx0ZXJGaWVsZFswXT8uZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWx0ZXJGaWVsZHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgZmlsdGVyRmllbGRzWzBdPy5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0Rm9jdXNPdXRUb2ZpbHRlcnMoKSB7XG4gICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb25zdCBjb2x1bW5GaWx0ZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucC1jb2x1bW4tZmlsdGVyJylcbiAgICAgIGlmKGNvbHVtbkZpbHRlcil7XG4gICAgICAgICAgY29uc3QgaW5wdXQgPSBjb2x1bW5GaWx0ZXJbMF0uY2hpbGRyZW5bMF0ucXVlcnlTZWxlY3RvcignaW5wdXQnKVxuICAgICAgICAgIGlmKGlucHV0KXtcbiAgICAgICAgICAgICAgaW5wdXQuZm9jdXMoKVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMucmVmcmVzaEdyaWRUZXJtaW5hdG9yKCk7XG4gIH1cblxuICAvLyBzZXQgTXVsdGlzZWxlY3QgVG9nZ2xlIENvbHVtbiAvL1xuICBzZXRNdWx0aVNlbGVjdFRvZ2dsZUNvbHVtbihzZWxlY3RlZEZpZWxkczogYW55W10gPSBbXSkge1xuICAgIGlmICh0aGlzLnVzZXJTZXR0aW5nPy5wYWdlU2V0dGluZ3M/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG1hdGNoVXJsID0gdGhpcy51c2VyU2V0dGluZz8ucGFnZVNldHRpbmdzPy5maW5kSW5kZXgoKHBhZ2UpID0+IHBhZ2U/LnVybCA9PT0gdGhpcy5yb3V0ZXIudXJsKVxuICAgICAgaWYgKG1hdGNoVXJsID4gLTEpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hHcmlkID0gdGhpcy51c2VyU2V0dGluZz8ucGFnZVNldHRpbmdzW21hdGNoVXJsXT8uZ3JpZFNldHRpbmdzPy5maW5kSW5kZXgoKGdyaWRTZXR0aW5nKSA9PiBncmlkU2V0dGluZz8uZ3JpZElkID09PSB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCk7XG4gICAgICAgIGlmIChtYXRjaEdyaWQgPiAtMSkge1xuICAgICAgICAgIHRoaXMudXNlclNldHRpbmc/LnBhZ2VTZXR0aW5nc1ttYXRjaFVybF0/LmdyaWRTZXR0aW5ncy5zcGxpY2UobWF0Y2hHcmlkLCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRncmlkU2V0dGluZ3Moc2VsZWN0ZWRGaWVsZHMsIG1hdGNoVXJsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51c2VyU2V0dGluZy5wYWdlU2V0dGluZ3MgPSBbXTtcbiAgICAgIHRoaXMuc2V0Z3JpZFNldHRpbmdzKHNlbGVjdGVkRmllbGRzKTtcbiAgICB9XG4gIH1cblxuICBnZXRTZWxlY3RlZENvbEZyb21Mb2NhbFN0cm9yYWdlKHNlbGVjdGVkQ29sdW1uKSB7XG4gICAgbGV0IGFyciA9IFtdO1xuICAgIGlmIChzZWxlY3RlZENvbHVtbiAmJiBzZWxlY3RlZENvbHVtbj8ucGFnZVNldHRpbmdzPy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBtYXRjaFVybCA9IHNlbGVjdGVkQ29sdW1uPy5wYWdlU2V0dGluZ3M/LmZpbmRJbmRleCgocGFnZSkgPT4gcGFnZT8udXJsID09PSB0aGlzLnJvdXRlci51cmwpXG4gICAgICBpZiAobWF0Y2hVcmwgPiAtMSkge1xuICAgICAgICBjb25zdCBtYXRjaEdyaWQgPSBzZWxlY3RlZENvbHVtbj8ucGFnZVNldHRpbmdzW21hdGNoVXJsXT8uZ3JpZFNldHRpbmdzPy5maW5kKChncmlkU2V0dGluZykgPT4gZ3JpZFNldHRpbmc/LmdyaWRJZCA9PT0gdGhpcy5ncmlkSWQpO1xuICAgICAgICBpZiAobWF0Y2hHcmlkICYmIG1hdGNoR3JpZC5zZWxlY3RlZENvbHVtbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBpZiAobWF0Y2hHcmlkLnNlbGVjdGVkQ29sdW1ucy5zb21lKChmaWVsZE5hbWUpID0+IGZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gY29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgYXJyLnB1c2goY29sdW1uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFycj8ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIHNldGdyaWRTZXR0aW5ncyhzZWxlY3RlZEZpZWxkczogYW55LCBtYXRjaFVybD86IGFueSkge1xuICAgIGlmIChzZWxlY3RlZEZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgZ3JpZFNldHRpbmdzOiBhbnlbXSA9IFtdO1xuICAgICAgZ3JpZFNldHRpbmdzLnB1c2goe1xuICAgICAgICBncmlkSWQ6IHRoaXMuZ3JpZElkLFxuICAgICAgICBzZWxlY3RlZENvbHVtbnM6IHNlbGVjdGVkRmllbGRzLFxuICAgICAgICBjdXN0b21Db2x1bW5zV2lkdGg6IHRoaXMuY3VzdG9tV2lkdGhDb2x1bW5zLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IHBhZ2VTZXR0aW5nID0ge1xuICAgICAgICB1cmw6IHRoaXMucm91dGVyLnVybCxcbiAgICAgICAgZ3JpZFNldHRpbmdzOiBncmlkU2V0dGluZ3MsXG4gICAgICAgIGxhc3RVcGRhdGVkOiBuZXcgRGF0ZSgpXG4gICAgICB9XG4gICAgICB0aGlzLnVzZXJTZXR0aW5nLmxhc3RVcGRhdGVkID0gbmV3IERhdGUoKTtcbiAgICAgIGlmIChtYXRjaFVybCA+IC0xKSB7XG4gICAgICAgIHRoaXMudXNlclNldHRpbmcucGFnZVNldHRpbmdzW21hdGNoVXJsXSA9IHBhZ2VTZXR0aW5nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51c2VyU2V0dGluZy5wYWdlU2V0dGluZ3MucHVzaChwYWdlU2V0dGluZyk7XG4gICAgICB9XG4gICAgICBjb25zdCBwYWdlSW5mbyA9IEpTT04uc3RyaW5naWZ5KHRoaXMudXNlclNldHRpbmcpO1xuICAgICAgY2hhbmdlQ29sdW1uc1N0YXRlKHsgcGFnZVNldHRpbmc6IHBhZ2VJbmZvIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFwcGx5IHVzZXIgcm9sZSBwZXJtaXNzaW9ucyBvbiBncmlkIGNvbHVtbnNcbiAgYXBwbHlDb2x1bW5zUGVybWlzc2lvbnMoKSB7XG4gICAgaWYgKHRoaXMuY29sdW1ucykge1xuICAgICAgbGV0IHRvdGFsRmllbGRzOiBudW1iZXIgPSAwO1xuICAgICAgbGV0IGhpZGRlbkZpZWxkczogbnVtYmVyID0gMDtcblxuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogSUdyaWRDb2x1bW4pID0+IHtcbiAgICAgICAgbGV0IHBlcm1pc3Npb25zOiBJUGVybWlzc2lvbltdID0gY29sdW1uLnBlcm1pc3Npb25zO1xuICAgICAgICBsZXQgaGFzVmFsaWRFZGl0UGVybWlzc2lvbiA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChwZXJtaXNzaW9ucyAmJiBwZXJtaXNzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcGVybWlzc2lvbnMuZm9yRWFjaCgocGVybWlzc2lvbikgPT4ge1xuICAgICAgICAgICAgbGV0IGlzVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uLnJvbGVzICYmIHBlcm1pc3Npb24ucm9sZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBwZXJtaXNzaW9uLnJvbGVzLmZvckVhY2goKHJvbGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgdGhpcy5yb2xlcyAmJiB0aGlzLnJvbGVzLmluY2x1ZGVzKHJvbGUpKSB7XG4gICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuVklFVyAmJlxuICAgICAgICAgICAgICAgICFoYXNWYWxpZEVkaXRQZXJtaXNzaW9uXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4uaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuRURJVCkge1xuICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICBoYXNWYWxpZEVkaXRQZXJtaXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRvdGFsRmllbGRzKys7XG4gICAgICAgIGlmIChjb2x1bW4uaGlkZGVuKSB7XG4gICAgICAgICAgaGlkZGVuRmllbGRzKys7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmlzQ29sdW1uSGlkZGVuID0gdG90YWxGaWVsZHMgPiAwICYmIHRvdGFsRmllbGRzID09PSBoaWRkZW5GaWVsZHM7XG4gICAgfVxuICB9XG5cbiAgLy8gYXBwbHkgZ2xvYmFsIHBlcm1pc3Npb25zIG9uIGVudGlyZSBncmlkXG4gIGFwcGx5R3JpZFBlcm1pc3Npb25zKCkge1xuICAgIGlmICh0aGlzLnBlcm1pc3Npb25zICYmIHRoaXMucGVybWlzc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IGhhc1ZhbGlkRWRpdFBlcm1pc3Npb24gPSBmYWxzZTtcblxuICAgICAgLy8gY2hlY2sgaWYgYW55IGNvbHVtbiBoYXMgYW55IHBlcm1pc3Npb25cbiAgICAgIGxldCBoYXNDb2x1bW5QZXJtaXNzaW9ucyA9IHRoaXMuY29sdW1ucz8uc29tZShcbiAgICAgICAgKHgpID0+IHg/LnBlcm1pc3Npb25zICYmIHgucGVybWlzc2lvbnMubGVuZ3RoID4gMFxuICAgICAgKTtcblxuICAgICAgdGhpcy5wZXJtaXNzaW9ucy5mb3JFYWNoKChwZXJtaXNzaW9uKSA9PiB7XG4gICAgICAgIGxldCBpc1ZhbGlkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAgICAgcGVybWlzc2lvbi5yb2xlcy5mb3JFYWNoKChyb2xlKSA9PiB7XG4gICAgICAgICAgaWYgKCFpc1ZhbGlkICYmIHRoaXMucm9sZXMgJiYgdGhpcy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuQ1JVRCAmJiAhaXNWYWxpZCkge1xuICAgICAgICAgIHRoaXMudXNlSW5saW5lQ1JVRCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgIHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLlZJRVcgJiZcbiAgICAgICAgICAhaGFzVmFsaWRFZGl0UGVybWlzc2lvblxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnVzZUlubGluZUNSVUQgPSB0cnVlO1xuICAgICAgICAgIGlmICghaXNWYWxpZCAmJiAhaGFzQ29sdW1uUGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuaXNHcmlkSGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudXNlSW5saW5lQ1JVRCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5FRElUICYmICFpc1ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5pc0dyaWRIaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICBoYXNWYWxpZEVkaXRQZXJtaXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmVkaXRSb3dQZXJtaXNzaW9uID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuREVMRVRFICYmICFpc1ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5kZWxldGVSb3dQZXJtaXNzaW9uID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuQUREUk9XICYmICFpc1ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5hZGRSb3dQZXJtaXNzaW9uID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5vblJvd0FkZC5vYnNlcnZlcnMubGVuZ3RoID09IDApIHRoaXMuYWRkUm93UGVybWlzc2lvbiA9IGZhbHNlO1xuICAgIGlmICh0aGlzLm9uUm93RGVsZXRlLm9ic2VydmVycy5sZW5ndGggPT0gMCkgdGhpcy5kZWxldGVSb3dQZXJtaXNzaW9uID0gZmFsc2U7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2U6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5yZW1haW5pbmdSb3dzRGF0YT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMucm93c0RhdGEgPSBbLi4udGhpcy5yb3dzRGF0YSwgLi4udGhpcy5yZW1haW5pbmdSb3dzRGF0YV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIGlmICghdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgJiYgIXRoaXMuZ3JpZFNlcnZpY2Uucm93VXBkYXRlKSB7XG4gICAgICB0aGlzLnNldEdyaWRJZCgpXG4gICAgICB0aGlzLmNvbXBvbmVudFRhYmxlUmVmID0gdGhpcy50YWJsZTtcbiAgICAgIGxldCBnZXRTZWxlY3RlZENvbCA9IFtdXG4gICAgICBpZiAodGhpcy5hbGxvd0NhY2hpbmcgIT09IGZhbHNlICYmIHRoaXMucGFnaW5hdGlvbikge1xuICAgICAgICB0aGlzLmFsbG93Q2FjaGluZyA9IHRoaXMucGFnaW5hdGlvbjtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ1NldEZpbHRlcnMtJyArIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsKTtcbiAgICAgIH1cbiAgICAgIC8vIGFkZCBkZWZhdWx0Um93IGluIHBhZ2luYXRpb24gYXJyYXlcbiAgICAgIGlmICghdGhpcy5zZXRQYWdpbmF0aW9uTGVuZ3RoLmluY2x1ZGVzKHRoaXMuZGVmYXVsdFJvd3MpKSB7XG4gICAgICAgIHRoaXMuc2V0UGFnaW5hdGlvbkxlbmd0aC51bnNoaWZ0KHRoaXMuZGVmYXVsdFJvd3MpO1xuICAgICAgfVxuICAgICAgY29uc3QgaGFzQ29sdW1uczogYm9vbGVhbiA9IHRoaXMuY29sdW1ucyAmJiB0aGlzLmNvbHVtbnMubGVuZ3RoID4gMDtcbiAgICAgIGlmIChoYXNDb2x1bW5zKSB7XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0Q29sdW1uRmllbGRzKHRoaXMuY29sdW1ucyk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUb2dnbGVDb2x1bW5zID0gdGhpcy5jb2x1bW5zPy5maWx0ZXIoKHgpID0+ICF4LmhpZGRlbik7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRVc2VySW5mbyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0N1cnJlbnRVc2VySW5mbycpKTtcbiAgICAgICAgLy9zZXQgZ2V0U2VsZWN0ZWRDb2wgY29sdW1ucyBmb3IgdG9nZ2xlQ291bG1uIFxuICAgICAgICBpZiAodGhpcy5hbGxvd1BlcnNpc3RlbmNlICYmIHRoaXMuYWxsb3dDb2x1bW5Ub2dnbGUpIHtcbiAgICAgICAgICBpZiAoY3VycmVudFVzZXJJbmZvICYmIGN1cnJlbnRVc2VySW5mby5wYWdlU2V0dGluZykge1xuICAgICAgICAgICAgZ2V0U2VsZWN0ZWRDb2wgPSB0aGlzLmdldFNlbGVjdGVkQ29sRnJvbUxvY2FsU3Ryb3JhZ2UoSlNPTi5wYXJzZShjdXJyZW50VXNlckluZm8ucGFnZVNldHRpbmcpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb2xlcyA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0VXNlclJvbGVzKCk7XG5cbiAgICAgICAgLy8gYXBwbHkgdXNlciByb2xlIHBlcm1pc3Npb25zIG9uIGdyaWQgY29sdW1uc1xuICAgICAgICB0aGlzLmFwcGx5Q29sdW1uc1Blcm1pc3Npb25zKCk7XG5cbiAgICAgICAgLy8gYXBwbHkgZ2xvYmFsIHBlcm1pc3Npb25zIG9uIGVudGlyZSBncmlkXG4gICAgICAgIHRoaXMuYXBwbHlHcmlkUGVybWlzc2lvbnMoKTtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zPy5maWx0ZXIoKHgpID0+ICh4LnNob3cgPT09IHRydWUgfHwgeC5zaG93ID09PSB1bmRlZmluZWQpICYmICF4LmhpZGRlbik7XG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAvL2xvYWQgY29sdW1uIHdpdGR0aCBvbiBwYWdlIHJlbG9hZFxuICAgICAgICB0aGlzLmxvYWRDb2x1bW5XaWR0aHMoKTtcbiAgICAgICAgaWYodGhpcy5yb3dzRGF0YS5sZW5ndGggPiAwKXtcbiAgICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlLnNldFRvb2x0aXAoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNoZWNraW5nIGZpbHRlciBleGlzdCBvciBub3RcbiAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5fc2VsZWN0ZWRDb2x1bW5zLnNvbWUoXG4gICAgICAgICAgKGNvbHVtbikgPT4gY29sdW1uLmZpbHRlcmluZyA9PT0gdW5kZWZpbmVkIHx8IGNvbHVtbi5maWx0ZXJpbmcgPT09IHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGZpbHRlciA9PT0gZmFsc2UpIHtcbiAgICAgICAgICB0aGlzLmhpZGVGaWx0ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmaWx0ZXJGb2N1cyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyBzZXQgaXNSZXF1aXJlZCB0cnVlIGZvciByZXF1aXJlZCBjb2x1bW4gdG8gc2hvdyBhc3RyaWMgaW4gY29sdW1uIGhlYWRlclxuICAgICAgICAgIGlmIChjb2x1bW4udmFsaWRhdGlvbnM/LmZpbmQodmFsaWRhdGlvbiA9PiB2YWxpZGF0aW9uLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuUkVRVUlSRUQpKSB7XG4gICAgICAgICAgICBjb2x1bW4uaXNSZXF1aXJlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHNldCBudW1lcmljIG51bGwgb3IgdW5kZWZpbmUgZGF0YSBkZWZhdWx0IHZhbHVlXG4gICAgICAgICAgaWYgKChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk5VTUVSSUMgfHwgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOIHx8IGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuVEVYVCB8fCBjb2x1bW4udHlwZSA9PT0gdW5kZWZpbmVkIHx8IGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSB8fCBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOKSAmJiBjb2x1bW4udmFsdWUgJiYgdGhpcy5yb3dzRGF0YT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGNvbHVtbi52YWx1ZSAmJiAocm93W2NvbHVtbi5maWVsZF0gPT09IG51bGwgfHwgcm93W2NvbHVtbi5maWVsZF0gPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy52YWx1ZSA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy52YWx1ZSA6IGNvbHVtbi52YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgLy9zZXQgdGV4dFR5cGUgZm9yIGEgY29sdW1uIHRoYXQgaXMgZm9ybWF0dGVkIHRvIGJlIGEgcGFzc3dvcmRcbiAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdCA9PSAncGFzc3dvcmQnICYmICghY29sdW1uLnRleHRUeXBlIHx8IGNvbHVtbi50ZXh0VHlwZSAhPT0gJ3RleHQnKSkge1xuICAgICAgICAgICAgY29sdW1uLnRleHRUeXBlID0gJ3Bhc3N3b3JkJztcbiAgICAgICAgICB9IGVsc2UgY29sdW1uLnRleHRUeXBlID0gJ3RleHQnO1xuICAgICAgICAgIC8vIGNvbnZlcnQgc3RyaW5nIHRpbWUgaW50byB0aGUgZGF0ZVxuICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpIHtcbiAgICAgICAgICAgIGlmIChjb2x1bW4udGltZU9ubHkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSAmJlxuICAgICAgICAgICAgICAgICAgKHJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1BNJykgfHxcbiAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0udG9TdHJpbmcoKS5pbmNsdWRlcygnQU0nKSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gc2V0VGltZUluRGF0ZShyb3dbY29sdW1uLmZpZWxkXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNvbHVtbi5taW51dGVzSW50ZXJ2YWwpIHtcbiAgICAgICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyb3dbY29sdW1uLmZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBuZXcgRGF0ZShyb3dbY29sdW1uLmZpZWxkXSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghdGhpcy5oaWRlRmlsdGVyICYmIGNvbHVtbi5maWx0ZXJWYWx1ZSAmJiBjb2x1bW4uZmlsdGVyICYmIGNvbHVtbi5maWx0ZXJpbmcgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAvLyBzZXQgZmlsdGVyIHZhbHVlXG4gICAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBzZXQgRGlzcGxheVRleHQgd2hlbiB2YWx1ZSBpcyBpbiBjdXJseSBicmFja2V0cy5cbiAgICAgICAgICB0aGlzLnNldERpc3BsYXlUZXh0VmFsdWUoY29sdW1uKTtcblxuICAgICAgICAgIC8vQWdncmVnYXRlIHNjZW5hcmlvXG4gICAgICAgICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgJiYgY29sdW1uLmFnZ3JlZ2F0ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmFnZ3JlZ2F0ZUZvb3RlciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNldEFnZ3JlZ2F0ZVRleHQoY29sdW1uKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgc2VhcmNoRmlsdGVycztcbiAgICAgICAgICBpZiAoIXRoaXMuc29mdENhY2hpbmcgJiYgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQpIHtcbiAgICAgICAgICAgIHNlYXJjaEZpbHRlcnMgPSBKU09OLnBhcnNlKFxuICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnU2V0RmlsdGVycy0nICsgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmwpIGFzIGFueVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgICAgICBzZWFyY2hGaWx0ZXJzID0gdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5oaWRlRmlsdGVyICYmXG4gICAgICAgICAgICBzZWFyY2hGaWx0ZXJzICYmXG4gICAgICAgICAgICBzZWFyY2hGaWx0ZXJzLmZpbHRlcnMgJiZcbiAgICAgICAgICAgIHNlYXJjaEZpbHRlcnMuZmlsdGVycz8ubGVuZ3RoID4gMFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgc2VhcmNoRmlsdGVycy5maWx0ZXJzLmZvckVhY2goKHg6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoeC5maWVsZCA9PT0gY29sdW1uLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbj8uZmlsdGVyPy50eXBlID09PSAnY2FsZW5kYXInICYmIHgudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9IG5ldyBEYXRlKHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHgudmFsdWUsICdNTS1kZC1ZWScpIGFzIHN0cmluZyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUICYmICFBcnJheS5pc0FycmF5KHgudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4uZmlsdGVyVmFsdWUgPSB4LnZhbHVlPy5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgY29sdW1uLmZpbHRlclZhbHVlID0geC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBjb252ZXJ0aW5nIGRpc3BsYXlGaWVsZCB0b0xvd2VyY2FzZVxuICAgICAgICAgIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICBjb2x1bW4uZGlzcGxheUZpZWxkID0gY29sdW1uLmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBzZXQgQXV0b0NvbXBsZXRlIERhdGFcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURSAmJlxuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YSAmJlxuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YT8ubGVuZ3RoID4gMFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgLy8gY29udmVydCBzdHJpbmcgdGhhdCBjb250YWlucyBjb21tYSBpbnRvIGFycmF5c1xuICAgICAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJzsnKSkge1xuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF1cbiAgICAgICAgICAgICAgICAgID8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgLnNwbGl0KCc7JylcbiAgICAgICAgICAgICAgICAgID8ubWFwKCh2YWx1ZTogYW55KSA9PiAoeyBbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV06IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXSwgW2NvbHVtbi5vcHRpb25MYWJlbD8udG9Mb3dlckNhc2UoKV06IHZhbHVlLCBbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXTogdmFsdWUgfSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGtleTogYW55ID0gT2JqZWN0LmtleXMocm93KS5maW5kKCh4KSA9PiB4ID09PSBjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgIC8vIGNvbnZlcnQgc2ltcGxlIHN0cmluZyBpbnRvIGFycmF5XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyb3dba2V5XSkgJiYgcm93W2tleV0pIHtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgICAgICAgcm93W2tleV0gPSBbeyBbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV06IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXSwgW2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV06IHJvd1trZXldIH1dO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBpZiAoY29sdW1uLm9wdGlvbkxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd1trZXldID0gW3sgW2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV06IHJvd1trZXldLCBbY29sdW1uLm9wdGlvbkxhYmVsPy50b0xvd2VyQ2FzZSgpXTogcm93W2tleV0gfV07XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByb3dba2V5XSA9IFt7IFtjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldOiByb3dba2V5XSB9XTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vd2hlbiB3ZSBhZGQgYSBuZXcgcm93LCBpdCBzZXQgdGhlIGRlZmF1bHQgdmFsdWVcbiAgICAgICAgICBpZiAoY29sdW1uLnZhbHVlKSB7XG4gICAgICAgICAgICBsZXQga2V5ID0gT2JqZWN0LmtleXModGhpcy5uZXdHcmlkUm93KS5maW5kKCh4KSA9PiB4Py50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgICB0aGlzLm5ld0dyaWRSb3dbY29sdW1uLmZpZWxkXSA9IGNvbHVtbi52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZihjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTkspe1xuICAgICAgICAgICAgdGhpcy5zZXRMaW5rVGFiU2V0dGluZ3MoY29sdW1uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmFsbG93UGVyc2lzdGVuY2UgJiYgZ2V0U2VsZWN0ZWRDb2w/Lmxlbmd0aCA+IDAgJiYgdGhpcy5hbGxvd0NvbHVtblRvZ2dsZSkge1xuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0Q29sdW1ucyhnZXRTZWxlY3RlZENvbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3RDb2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZ2xvYmFsRmlsdGVyQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zZWFyY2hidG5JZCk7XG4gICAgICAgIGlmIChnbG9iYWxGaWx0ZXJCdG4pIHtcbiAgICAgICAgICB0aGlzLnNob3dGaWx0ZXJidG4gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2Uucm93cykge1xuICAgICAgICAgIGNvbnN0IGNsYXNzRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2hpZ2hsaWdodGVkLXJvdycpO1xuICAgICAgICAgIGlmIChjbGFzc0VsZW1lbnQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY2xhc3NFbGVtZW50WzBdLnNjcm9sbEludG9WaWV3KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmVkaXRBbGxSb3dzICYmIHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDAgJiYgdGhpcy5jb2x1bW5zPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0QWxsUm93c0F0T25jZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zZXREcm9wZG93bmRhdGFWYWx1ZSA9IHRydWU7XG4gICAgICBjb25zdCBnbG9iYWxTZWFyY2hidG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2xvYmFsU2VhcmNoYnRuJyk7XG4gICAgICBpZiAoZ2xvYmFsU2VhcmNoYnRuKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoR3JpZEZpbHRlciA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDAgJiYgdGhpcy5nZW5lcmF0ZVJvd3NEYXRhQ29weSkge1xuICAgICAgICB0aGlzLnJvd3NEYXRhQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5yb3dzRGF0YSkpO1xuICAgICAgfVxuICAgICAgaWYoIXRoaXMuc3RvcERpYWxvZ0Nsb3NlKXtcbiAgICAgICAgdGhpcy5kZWZhdWx0Um93Q2xpY2soKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5yb3dVcGRhdGVDaGFuZ2UgPSBmYWxzZTtcbiAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IGZhbHNlO1xuICAgIGlmKHRoaXMudGVtcFNhdmVkUm93Py5sZW5ndGggPiAwICYmIHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDAgJiYgIXRoaXMuZWRpdEFsbFJvd3Mpe1xuICAgICAgdGhpcy5lZGl0aW5nUm93S2V5c1t0aGlzLnJvd3NEYXRhW3RoaXMudGVtcFNhdmVkUm93WzBdXVt0aGlzLmRhdGFLZXldXSA9IHRoaXMuaXNFcnJvck9jY3VyZWQ7XG4gICAgfVxuICBcbiAgfVxuXG4gIHNldExpbmtUYWJTZXR0aW5ncyhjb2x1bW46IElHcmlkQ29sdW1uKSB7XG4gICAgY29uc3QgdXNlclNldHRpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIlVzZXJTZXR0aW5nXCIpO1xuICAgIGlmICh1c2VyU2V0dGluZykge1xuICAgICAgY29uc3QgcGFyc2VkU2V0dGluZyA9IEpTT04ucGFyc2UodXNlclNldHRpbmcpO1xuICAgICAgaWYgKGNvbHVtbj8udGFyZ2V0VXNlVXNlclByZWYpIHtcbiAgICAgICAgY29sdW1uLnRhcmdldCA9IHBhcnNlZFNldHRpbmc/LnZhbHVlID09PSBcIm9wZW5MaW5rSW5DdXJyZW50VGFiXCIgPyBFR3JpZGxpbmsuU0VMRiA6IEVHcmlkbGluay5CTEFOSztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRHcmlkSWQoKXtcbiAgICBsZXQgdGFibGVzID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgncC10YWJsZScpO1xuICAgICAgaWYgKHRhYmxlcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICB0YWJsZXMuZm9yRWFjaCgodGFibGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgdGFibGUuc2V0QXR0cmlidXRlKCdpZCcsIHRoaXMuY3VycmVudFVybCtpbmRleCk7XG4gICAgICAgIH0pXG4gICAgICB9XG4gIH1cbiAgc2V0U2VsZWN0Q29sdW1ucyhjb2x1bW5zKSB7XG4gICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zID0gW107XG4gICAgY29sdW1ucz8uZm9yRWFjaCgoeCwgaSkgPT4ge1xuICAgICAgaWYgKCh4LnNob3cgPT09IHRydWUgfHwgeC5zaG93ID09PSB1bmRlZmluZWQpICYmICF4LmhpZGRlbikge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnNbaV0pIHtcbiAgICAgICAgICB4LnZhbHVlID0gdGhpcy5zZWxlY3RlZENvbHVtbnNbaV0udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zLnB1c2goeCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhdXRvQ29tcGxldGVTZWxlY3RlZFZhbHVlKHJvdzogYW55LCBjb2x1bW46IElHcmlkQ29sdW1uLCB2YWx1ZSkge1xuICAgIGlmIChjb2x1bW4ub3B0aW9uTGFiZWwpIHtcbiAgICAgIGNvbnN0IHZhbHVlS2V5ID0gY29sdW1uLm9wdGlvblZhbHVlID8gY29sdW1uLm9wdGlvblZhbHVlIDogY29sdW1uLmZpZWxkO1xuICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBbLi4ucm93W2NvbHVtbi5maWVsZF0sIHtcbiAgICAgICAgW2NvbHVtbi5vcHRpb25MYWJlbD8udG9Mb3dlckNhc2UoKV06IHZhbHVlW2NvbHVtbi5vcHRpb25MYWJlbD8udG9Mb3dlckNhc2UoKV0sIFt2YWx1ZUtleT8udG9Mb3dlckNhc2UoKV06IHZhbHVlW3ZhbHVlS2V5Py50b0xvd2VyQ2FzZSgpXSxcbiAgICAgICAgW2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV06IHZhbHVlW3ZhbHVlS2V5Py50b0xvd2VyQ2FzZSgpXVxuICAgICAgfV07XG4gICAgICBjb25zdCBpbmRleCA9IHJvd1tjb2x1bW4uZmllbGRdPy5maW5kSW5kZXgoKHgpID0+IEpTT04uc3RyaW5naWZ5KHgpID09PSBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgICAgcm93W2NvbHVtbi5maWVsZF0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICAvLyBzZXQgRGlzcGxheVRleHQgd2hlbiB2YWx1ZSBpcyBpbiBjdXJseSBicmFja2V0cy5cbiAgc2V0RGlzcGxheVRleHRWYWx1ZShjb2x1bW46IElHcmlkQ29sdW1uKSB7XG4gICAgdGhpcy5yb3dzRGF0YT8uZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSyB8fFxuICAgICAgICBFR3JpZENvbHVtblR5cGUuRElBTE9HIHx8XG4gICAgICAgIEVHcmlkQ29sdW1uVHlwZS5JRlJBTUVcbiAgICAgICkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddO1xuICAgICAgICBpZiAoY29sdW1uLmRpc3BsYXlUZXh0ICYmIGNvbHVtbi5kaXNwbGF5VGV4dC5pbmNsdWRlcygneycpKSB7XG4gICAgICAgICAgY29uc3QgZGlzcGxheVRleHQgPSBjb2x1bW4uZGlzcGxheVRleHRcbiAgICAgICAgICAgIC5yZXBsYWNlKCd7JywgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgnfScsICcnKTtcbiAgICAgICAgICBpZiAoZGlzcGxheVRleHQgJiYgZmllbGQpIHtcbiAgICAgICAgICAgIGZpZWxkLmRpc3BsYXlUZXh0ID0gcm93W2Rpc3BsYXlUZXh0LnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZGlzcGxheVRleHQgJiYgZmllbGQpIHtcbiAgICAgICAgICBmaWVsZC5kaXNwbGF5VGV4dCA9IGNvbHVtbi5kaXNwbGF5VGV4dDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0TnVtZXJpY01pbk14RnJhY3Rpb24oY29sdW1uOiBhbnkpIHtcbiAgICBsZXQgZGlnaXRJbmZvID0gJzInO1xuICAgIGlmIChjb2x1bW4/LmZvcm1hdC50eXBlID09PSAncGVyY2VudCcgJiYgIWNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm8pIHtcbiAgICAgIGRpZ2l0SW5mbyA9ICcwJ1xuICAgIH0gZWxzZSBpZiAoY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbykge1xuICAgICAgZGlnaXRJbmZvID0gY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMuZGlnaXRzSW5mbztcbiAgICB9XG4gICAgcmV0dXJuIGRpZ2l0SW5mbztcbiAgfVxuXG4gIC8vIHNldCB0aGUgZm9ybWF0IG9mIGN1cnJlbmN5ICYmIG51bWJlciAmJiBkZWNpbWFsICYmIHBlcmNlbnRcbiAgc2V0TnVtZXJpY0Zvcm1hdChjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcbiAgICByb3cgPSBvYmpDb252ZXJ0VG9Mb3dlcihyb3cpO1xuICAgIGxldCB2YWx1ZTogYW55ID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0XG4gICAgICA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgOiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgID8gcm93W3Jvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXG4gICAgICAgIDogcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgPyByb3dbY29sdW1uLmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXVxuICAgICAgICAgIDogKHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy50ZXh0IHx8IHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy50ZXh0ID09PSAwIHx8IHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy50ZXh0ID09PSBudWxsKVxuICAgICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8udGV4dCA6IHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldO1xuICAgIGlmICh0aGlzLnR5cGVPZih2YWx1ZSkgPT09ICdudW1iZXInICYmIHZhbHVlID09PSAwKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIGxldCBmb3JtYXRQYXJhbXMgPSBjb2x1bW4uZm9ybWF0Py5mb3JtYXRQYXJhbXM7XG4gICAgbGV0IGRpZ2l0c0luZm8gPSBmb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XG4gICAgaWYgKGNvbHVtbi5mb3JtYXQgJiYgdmFsdWUpIHtcbiAgICAgIHN3aXRjaCAoY29sdW1uLmZvcm1hdD8udHlwZSkge1xuICAgICAgICBjYXNlIEVHcmlkRm9ybWF0VHlwZS5DVVJSRU5DWTpcbiAgICAgICAgICB2YWx1ZSA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChcbiAgICAgICAgICAgIGZvcm1hdFBhcmFtcz8ubG9jYWxlID8gZm9ybWF0UGFyYW1zLmxvY2FsZSA6ICdlbi1VUycsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0eWxlOiAnY3VycmVuY3knLFxuICAgICAgICAgICAgICBjdXJyZW5jeTogZm9ybWF0UGFyYW1zPy5jdXJyZW5jeSA/IGZvcm1hdFBhcmFtcy5jdXJyZW5jeSA6ICdVU0QnLFxuICAgICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IGRpZ2l0c0luZm8gPyBkaWdpdHNJbmZvIDogJzInLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk/LmZvcm1hdCh2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLkRFQ0lNQUw6XG4gICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKS50b0ZpeGVkKGRpZ2l0c0luZm8gPyBkaWdpdHNJbmZvIDogJzInKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuUEVSQ0VOVDpcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlICsgJyUnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvL0NoYW5nZSBkcm9wZG93biB2bHVlIGJhc2VkIG9uIG9wdGlvbiBsYWJlbCBhbmQgb3B0aW9udmFsdWVcbiAgc2V0RHJvcGRvd25WYWx1ZShjb2x1bW46IElHcmlkQ29sdW1uLCBzZWxlY3RlZFJvdz86IGFueSwgY2hhbmdlPzogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLnJvd3NEYXRhICYmIHRoaXMucm93c0RhdGEubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJvdyk/LmZpbmQoKGtleSkgPT4ga2V5ID09PSBjb2x1bW4uZmllbGQpKSB7XG4gICAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgICAgY29sdW1uLm9wdGlvbkxhYmVsID0gY29sdW1uLm9wdGlvbkxhYmVsXG4gICAgICAgICAgICAgID8gY29sdW1uLm9wdGlvbkxhYmVsXG4gICAgICAgICAgICAgIDogJ2xhYmVsJztcbiAgICAgICAgICAgIGNvbHVtbi5vcHRpb25WYWx1ZSA9IGNvbHVtbi5vcHRpb25WYWx1ZVxuICAgICAgICAgICAgICA/IGNvbHVtbi5vcHRpb25WYWx1ZVxuICAgICAgICAgICAgICA6ICd2YWx1ZSc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHZhbHVlID0gY29sdW1uLmRhdGE/LmZpbmQoXG4gICAgICAgICAgICAocmVjb3JkOiBhbnkpID0+XG4gICAgICAgICAgICAgIHJlY29yZFtjb2x1bW4ub3B0aW9uVmFsdWVdPy50b1N0cmluZygpID09PVxuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgZWRpdGVkUm93ID0gc2VsZWN0ZWRSb3cgJiYgT2JqZWN0LmtleXMoc2VsZWN0ZWRSb3cpLmxlbmd0aCA+IDAgPyBzZWxlY3RlZFJvd1t0aGlzLmRhdGFLZXldID09PSByb3dbdGhpcy5kYXRhS2V5XSA6IGZhbHNlO1xuICAgICAgICAgIGlmICh2YWx1ZSAmJiBlZGl0ZWRSb3cpIHtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gdmFsdWVbY29sdW1uLm9wdGlvblZhbHVlXTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICYmIGNoYW5nZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gdmFsdWVbY29sdW1uLm9wdGlvbkxhYmVsXTtcbiAgICAgICAgICAgIGlmKHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXSl7XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXVsnb3B0aW9uVmFsdWUnXSA9IHZhbHVlW2NvbHVtbi5vcHRpb25WYWx1ZV07XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCsnX29iaiddID0ge29wdGlvblZhbHVlOiAgdmFsdWVbY29sdW1uLm9wdGlvblZhbHVlXX07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvL21hbmlwdWxhdGUgY2hlY2tib3ggc3RyaW5nIHZhbHVlIHRvIHRydWUgYW5kIGZhbHNlLlxuICBjaGFuZ2VDaGVja2JveFN0cmluZ1ZhbHVlKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuY29sdW1ucyAmJlxuICAgICAgdGhpcy5yb3dzRGF0YSAmJlxuICAgICAgdGhpcy5yb3dzRGF0YS5sZW5ndGggPiAwICYmXG4gICAgICB0aGlzLmNvbHVtbnMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmIHRoaXMuc2V0RHJvcGRvd25kYXRhVmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnNldERyb3Bkb3duVmFsdWUoY29sdW1uLCB7fSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICh0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGRdID09PSAnc3RyaW5nJykgJiZcbiAgICAgICAgICAgICAgICAocm93W2NvbHVtbi5maWVsZF0gPT09ICcxJyB8fCByb3dbY29sdW1uLmZpZWxkXSA9PT0gJzAnKSkgfHxcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPT09ICdZJyB8fFxuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ04nXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPVxuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID09PSAnMScgfHwgcm93W2NvbHVtbi5maWVsZF0gPT09ICdZJ1xuICAgICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHJvd0RhdGFcbiAgICogUGFzc2VzIGRhdGEgb2YgY2xpY2tlZCByb3cgdG8gcGFyZW50XG4gICAqL1xuICBoYW5kbGVSb3dDbGljayhyb3dEYXRhOiBhbnkpIHtcbiAgICB0aGlzLnJvd0NsaWNrRGF0YSA9IHJvd0RhdGE7XG4gICAgaWYgKCF0aGlzLmVkaXRBbGxSb3dzKSB7XG4gICAgICB0aGlzLm9uUm93Q2xpY2suZW1pdChyb3dEYXRhKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dSZWNvcmQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLy8gaW52b2tlIG9uUm93Q2xpY2sgZXZlbnQgd2hlbiBvbmx5IG9uZSByZWNvcmQgZXhpc3Q7XG4gIGRlZmF1bHRSb3dDbGljaygpe1xuICAgIGxldCBkaWFsb2dFeGlzdDogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncC1kaWFsb2cnKTtcbiAgICBpZih0aGlzLmNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgdGhpcy5yb3dzRGF0YSAmJiB0aGlzLnJvd3NEYXRhLmxlbmd0aCA9PT0gMSAmJiB0aGlzLm9uUm93Q2xpY2sub2JzZXJ2ZXJzPy5sZW5ndGggJiYgdGhpcy5ncmlkU2VydmljZS51c2VyU2VhcmNoZWQgJiYgZGlhbG9nRXhpc3QubGVuZ3RoKXtcbiAgICAgICAgdGhpcy5ncmlkU2VydmljZS51c2VyU2VhcmNoZWQ9IGZhbHNlO1xuICAgICAgICB0aGlzLmhhbmRsZVJvd0NsaWNrKHRoaXMucm93c0RhdGFbMF0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gY29sdW1uRGF0YVxuICAgKiBQYXNzZXMgc29ydGluZyBpbmZvcm1hdGlvbiB0byBwYXJlbnQgb24gc29ydCBjaGFuZ2VcbiAgICovXG4gIGhhbmRsZVNvcnRDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGxldCBzb3J0RGlyZWN0aW9uID0gbnVsbDtcbiAgICBsZXQgc29ydEZpZWxkOiBzdHJpbmcgPSAnJztcbiAgICBpZiAoZXZlbnQubXVsdGlzb3J0bWV0YSAmJiBldmVudC5tdWx0aXNvcnRtZXRhWzBdLm9yZGVyKSB7XG4gICAgICBzb3J0RGlyZWN0aW9uID1cbiAgICAgICAgZXZlbnQubXVsdGlzb3J0bWV0YVswXS5vcmRlciA9PSAxXG4gICAgICAgICAgPyBFR3JpZFNvcnREaXJlY3Rpb24uQVNDXG4gICAgICAgICAgOiBFR3JpZFNvcnREaXJlY3Rpb24uREVTQztcbiAgICAgIHNvcnRGaWVsZCA9IGV2ZW50Lm11bHRpc29ydG1ldGFbMF0uZmllbGQ7XG4gICAgfVxuICAgIGxldCBzb3J0czogSUdyaWRTb3J0ID0ge1xuICAgICAgZmllbGQ6IHNvcnRGaWVsZCxcbiAgICAgIGRpcmVjdGlvbjogc29ydERpcmVjdGlvbiBhcyBFR3JpZFNvcnREaXJlY3Rpb24sXG4gICAgICBwcmlvcml0eTogMCxcbiAgICB9O1xuICAgIHRoaXMub25Tb3J0Q2hhbmdlLmVtaXQoc29ydHMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBQYXNzZXMgYXBwbGllZCBmaWx0ZXJzIHRvIHBhcmVudCBvbiBmaWx0ZXIgY2hhbmdlXG4gICAqL1xuICBoYW5kbGVGaWx0ZXJDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChmaWx0ZXI6IGFueSkgPT4ge1xuICAgICAgaWYgKCFldmVudC5maWx0ZXJzW2ZpbHRlci5maWVsZF0/LnZhbHVlICYmICFmaWx0ZXIudmFsdWUpIHtcbiAgICAgICAgZmlsdGVyLnZhbHVlID0gJyc7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5vbkZpbHRlckNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgOiBFdmVudFxuICAgKiBAcGFyYW0gY29sdW1uQWN0aW9uIDogSUdyaWRDb2x1bW5BY3Rpb25cbiAgICogQHBhcmFtIHJvdyA6IGFueVxuICAgKiBTdG9wIHRoZSBjbGljayBldmVudCBwcm9wYWdhdGlvbiB0byBwYXJlbnRcbiAgICogQ2FsbGJhY2tzIHRoZSByb3cgZGF0YSB0byBwYXJlbnRcbiAgICovXG5cbiAgLyoqXG4gICAqIGludm9rZSBvbkNsaWNrIGV2ZW50ICYgb3BlbiBJZnJhbWUgaW4gZ3JpZFxuICAgKi9cbiAgZ3JpZElGcmFtZShjb2x1bW46IGFueSwgcm93czogYW55LCByb3c6IGFueSkge1xuICAgIHRoaXMub25DbGlja0V2ZW50KGNvbHVtbiwgcm93KTtcbiAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihJZnJhbWVDb21wb25lbnQsIHtcbiAgICAgIGhlYWRlcjogY29sdW1uLmhlYWRlcixcbiAgICAgIHdpZHRoOiAnODAlJyxcbiAgICAgIGhlaWdodDogJzgwJScsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHZhbHVlOiByb3dzLFxuICAgICAgICBpRnJhbWVJZDogY29sdW1uLmRpc3BsYXlUZXh0ID8gY29sdW1uLmRpc3BsYXlUZXh0IDogY29sdW1uLmZpZWxkLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLnNldER5bmFtaWNEaWFsb2dSZWYocmVmKTtcbiAgICBjb25zdCBjb21wb25lbnROYW1lID0gY29sdW1uLmNvbXBvbmVudD8ubmFtZTtcbiAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgdGhpcy5wYWdlTG9nZ2VyU2VydmljZS5zYXZlUGFnZUxvZ2dlckluZm8odGhpcy5yb3V0ZXIudXJsPy5zdWJzdHJpbmcoMSksIGNvbXBvbmVudE5hbWUpO1xuICAgIH1cbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgIC5waXBlKHRha2UoMSkpIC8vIEVtaXQgb25seSBvbmNlIHdoZW4gdGhlIHpvbmUgYmVjb21lcyBzdGFibGVcbiAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGRyYWdnYWJsZURpYWxvZyhjb2x1bW4/LmZpZWxkID8gY29sdW1uPy5maWVsZCA6IGNvbHVtbj8uaGVhZGVyKVxuICAgIH0pO1xuICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICBpZiAocmVzICYmIGNvbHVtbi5vblJldHVybikge1xuICAgICAgICBjb2x1bW4ub25SZXR1cm4ocmVzKTtcbiAgICAgIH0gZWxzZSBpZiAocmVzICYmIGNvbHVtbi5vbkNoYW5nZSkge1xuICAgICAgICBjb2x1bW4ub25DaGFuZ2UocmVzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFkZE5ld1Jvdyhyb3c6IGFueSwgYWRkUm93OiBib29sZWFuID0gZmFsc2UpIHtcbiAgIHRoaXMucmVmcmVzaEdyaWRUZXJtaW5hdG9yKClcbiAgIHRoaXMuY29tcG9uZW50VGFibGVSZWYgPSB0aGlzLnRhYmxlO1xuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgY29sdW1uLmZpbHRlciAmJlxuICAgICAgICBjb2x1bW4uY29tcG9uZW50ICYmXG4gICAgICAgIGNvbHVtbi5maWx0ZXIudHlwZSA9PT0gJ2NhbGVuZGFyJ1xuICAgICAgKSB7XG4gICAgICAgIGlmIChhZGRSb3cpIHtcbiAgICAgICAgICB0aGlzLnJvd3NEYXRhWzBdW2NvbHVtbi5maWVsZCArICdfc2Vjb25kVHlwZSddID0gRUdyaWRDb2x1bW5UeXBlLkRBVEU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfc2Vjb25kVHlwZSddID0gRUdyaWRDb2x1bW5UeXBlLkRBVEU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjb2x1bW4uYWdncmVnYXRlICYmIGNvbHVtbi5hZ2dyZWdhdGUubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmFnZ3JlZ2F0ZUZvb3RlciA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0QWdncmVnYXRlVGV4dChjb2x1bW4pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucm93Q2xpY2tEYXRhID0gcm93O1xuICAgIHRoaXMuYWRkTmV3Um93Q2hlY2sgPSB0cnVlO1xuICAgIHRoaXMuZHJvcGRvd25JbnB1dCA9IGZhbHNlO1xuICAgIHRoaXMuc29ydERpc2FibGVkID0gdHJ1ZTtcbiAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICB0aGlzLm9uR3JpZFJvd0FkZC5lbWl0KHJvdyk7XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBEaWFsb2cgaW4gZ3JpZFxuICAgKi9cbiAgb3BlbkdyaWREaWFsb2coY29sdW1uOiBJR3JpZENvbHVtbiB8IGFueSwgcm93OiBhbnksIGV2ZW50PzogYW55KSB7XG4gICAgY29uc3QgZGF0YVBhcmFtcyA9IGNvbHVtbi5kYXRhPy5kYXRhID8gY29sdW1uLmRhdGE/LmRhdGEgOiB7fTtcbiAgICBpZiAoKGV2ZW50ICYmIGV2ZW50LmN0cmxLZXkpIHx8IGNvbHVtbi5vcGVuSW5OZXdUYWIpIHtcbiAgICAgIHRoaXMuaHlwZXJsaW5rU2VydmljZS5vcGVuRGlhbG9nSW5OZXdUYWIoY29sdW1uLmNvbXBvbmVudCwgZGF0YVBhcmFtcywgcm93KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLm9wZW5Db21wb25lbnRJbkRpYWxvZyhjb2x1bW4sIHJvdyk7XG4gICAgfVxuICB9XG5cbiAgb3BlbkNvbXBvbmVudEluRGlhbG9nKGNvbHVtbjogSUdyaWRDb2x1bW4gfCBhbnksIHJvdzogYW55KSB7XG4gICAgdmFyIGlzRGlzYWJsZWQgPSBjb2x1bW4uZGlzYWJsZWRcbiAgICAgID8gdHJ1ZVxuICAgICAgOiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzYWJsZWRcbiAgICAgICAgPyB0cnVlXG4gICAgICAgIDogZmFsc2U7XG4gICAgdGhpcy5vbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpO1xuICAgICAgbGV0IGRhdGE6IGFueSA9IHt9O1xuICAgICAgZGF0YSA9IHsgLi4uY29sdW1uPy5kYXRhIH07XG4gICAgICB0aGlzLnJvd0NsaWNrRGF0YSA9IHJvdztcbiAgICAgIGlmIChkYXRhICYmIGRhdGEuZGF0YSAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8ubWF0Y2hEYXRhKSB7XG4gICAgICAgIGRhdGEuZGF0YSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaWFsb2dEYXRhPy5kYXRhID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpYWxvZ0RhdGEuZGF0YSA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaWFsb2dEYXRhO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29sdW1uLmNvbXBvbmVudCAmJiB0aGlzLnJvd0NsaWNrRGF0YSAmJiAhaXNEaXNhYmxlZCkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIGRhdGEuZGF0YSA9IGF1dG9TZXRMb29rdXBEYXRhKFxuICAgICAgICAgICAgZGF0YS5kYXRhLFxuICAgICAgICAgICAgdGhpcy5yb3dDbGlja0RhdGFcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEgPSB7Li4uZGF0YSwgaGVpZ2h0OiBkYXRhLmhlaWdodCA/IGRhdGEuaGVpZ2h0IDogJzkwdmgnfTtcbiAgICAgICAgY29uc3Qgb2JqRmllbGQgPSBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyBcIl9vYmpcIjtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3Blbihyb3dbb2JqRmllbGRdICYmIHJvd1tvYmpGaWVsZF0/LmNvbXBvbmVudCA/IHJvd1tvYmpGaWVsZF0/LmNvbXBvbmVudCA6IGNvbHVtbi5jb21wb25lbnQsIGRhdGEpO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kaWFsb2dSZWZbJ2RpYWxvZ0Nsb3NlJ10gPSB0aGlzLmRpYWxvZ1JlZi5jbG9zZTtcbiAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSA9IHRoaXMuaW50ZXJjZXB0RGlhbG9nQ2xvc2UuYmluZCh0aGlzKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgLy8gICB0aGlzLmRpYWxvZ1JlZlsnZGlhbG9nQ2xvc2UnXSA9IHRoaXMuZGlhbG9nUmVmLmNsb3NlO1xuICAgICAgICAvLyAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlID0gdGhpcy5pbnRlcmNlcHREaWFsb2dDbG9zZS5iaW5kKHRoaXMpO1xuICAgICAgICAvLyB9LCA4MDApO1xuXG4gICAgICAgIHRoaXMuc2V0RHluYW1pY0RpYWxvZ1JlZih0aGlzLmRpYWxvZ1JlZik7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBjb2x1bW4uY29tcG9uZW50Py5uYW1lO1xuICAgICAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgICAgIHRoaXMucGFnZUxvZ2dlclNlcnZpY2Uuc2F2ZVBhZ2VMb2dnZXJJbmZvKHRoaXMucm91dGVyLnVybD8uc3Vic3RyaW5nKDEpLCBjb21wb25lbnROYW1lKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgICAgIC5waXBlKHRha2UoMSkpIC8vIEVtaXQgb25seSBvbmNlIHdoZW4gdGhlIHpvbmUgYmVjb21lcyBzdGFibGVcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGRyYWdnYWJsZURpYWxvZyhjb2x1bW4/LmZpZWxkID8gY29sdW1uPy5maWVsZCA6IGNvbHVtbj8uaGVhZGVyKVxuICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGEgJiYgY29sdW1uLm9uUmV0dXJuKSB7XG4gICAgICAgICAgICBjb2x1bW4ub25SZXR1cm4oZGF0YSwgdGhpcy5yb3dDbGlja0RhdGEpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5icm93c2VyQ2xvc2VFdmVudCh0cnVlKTtcbiAgICAgICAgICAgIGlmIChjb2x1bW4ub25DaGFuZ2UpIHtcbiAgICAgICAgICAgICAgY29sdW1uLm9uQ2hhbmdlKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gIH1cblxuICBicm93c2VyQ2xvc2VFdmVudChldmVudDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0ID0gZXZlbnQ7XG4gIH1cblxuICBzZXRNdWx0aVNlbGVjdERhdGEoY29sdW1uOiBJR3JpZENvbHVtbiwgc2VsZWN0ZWRWYWx1ZTogYW55KSB7XG4gICAgaWYgKHNlbGVjdGVkVmFsdWUgJiYgY29sdW1uLnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUKSB7XG4gICAgICBpZiAoc2VsZWN0ZWRWYWx1ZSAmJiBzZWxlY3RlZFZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnLCcpKSB7XG4gICAgICAgIHNlbGVjdGVkVmFsdWUgPSBzZWxlY3RlZFZhbHVlPy50b1N0cmluZygpPy5zcGxpdCgnLCcpPy5tYXAoKHZhbHVlKSA9PiBjb2x1bW4uZGF0YT8uZmluZCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWU/LnRvU3RyaW5nKCkgPT09IHZhbHVlPy50b1N0cmluZygpKT8ubGFiZWwpPy50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZWN0ZWRWYWx1ZSA9IGNvbHVtbi5kYXRhPy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZT8udG9TdHJpbmcoKSA9PT0gc2VsZWN0ZWRWYWx1ZT8udG9TdHJpbmcoKSk/LmxhYmVsO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2VsZWN0ZWRWYWx1ZTtcbiAgfVxuXG4gIHNldFRleHRCb3hSZWFkT25seVZhbHVlKHJvdzogYW55LCBjb2x1bW46IGFueSkge1xuICAgIGxldCB2YWx1ZTogYW55O1xuICAgIGlmIChjb2x1bW4uZGlzcGxheVRleHQpIHtcbiAgICAgIHZhbHVlID0gY29sdW1uLmRpc3BsYXlUZXh0O1xuICAgIH0gZWxzZSBpZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0KSB7XG4gICAgICB2YWx1ZSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dDtcbiAgICB9IGVsc2UgaWYgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQpIHtcbiAgICAgIHZhbHVlID0gcm93W3Jvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldO1xuICAgIH0gZWxzZSBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCkge1xuICAgICAgdmFsdWUgPSByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm4gY29uZGl0aW9uYWwgYmFzZSB2YWx1ZSBhbmQgdGl0bGVcbiAgICovXG4gIHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3c6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICBkZWxldGUgcm93Wyd1bmRlZmluZWQnXTtcbiAgICBsZXQgdmFsdWU6IGFueTtcbiAgICBpZiAoY29sdW1uLnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpIHtcbiAgICAgIGxldCBuZXdWYWx1ZTogYW55O1xuICAgICAgaWYgKHR5cGVvZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10pID09PSBcIm9iamVjdFwiICYmIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0XG4gICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHRcbiAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgID8gcm93W3Jvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy50ZXh0XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdWYWx1ZSA9IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3VmFsdWUpIHtcbiAgICAgICAgaWYgKGNvbHVtbi50aW1lT25seSkge1xuICAgICAgICAgIHZhbHVlID0gdGhpcy5zZXRUaW1lRm9ybWF0KG5ld1ZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgZm9ybWF0ID0gdGhpcy5zZXRGb3JtYXQoY29sdW1uKTtcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKG5ld1ZhbHVlPy50b1N0cmluZygpID09PSBcIkludmFsaWQgRGF0ZVwiID8gbnVsbCA6IG5ld1ZhbHVlLCBmb3JtYXQgPyBmb3JtYXQgOiBjb2x1bW4uc2hvd1RpbWUgPyBcIk1NL2RkL1lZWVksIGg6bW0gYVwiIDogXCJNTS9kZC9ZWVlZXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID1cbiAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0XG4gICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZm9ybWF0ID8gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQsIHRoaXMuc2V0Rm9ybWF0KGNvbHVtbikpIDpcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgICAgIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgPyByb3dbcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgIDogcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICAgIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gJiZcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dCA9PT0gbnVsbCAmJiBjb2x1bW4udHlwZSAhPT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPR1xuICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgY29sdW1uPy5maWx0ZXI/LnR5cGUgPT09ICdjYWxlbmRhcicgJiYgY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRElBTE9HID9cbiAgICAgICAgICAgICAgICAgICAgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ0FNJykgfHwgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQudG9TdHJpbmcoKS5pbmNsdWRlcygnUE0nKSkgP1xuICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0IDogdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQsICdoaDptbSBhJylcbiAgICAgICAgICAgICAgICAgICAgOiBjb2x1bW4uZm9ybWF0ID8gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQsIHRoaXMuc2V0Rm9ybWF0KGNvbHVtbikpIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgIDogY29sdW1uLmZvcm1hdCA/IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGRdLCB0aGlzLnNldEZvcm1hdChjb2x1bW4pKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgICAgID8gY29sdW1uLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgOiBjb2x1bW4uaWNvbiA/IGNvbHVtbi5oZWFkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBzZXRGb3JtYXQoY29sdW1uKSB7XG4gICAgbGV0IGZvcm1hdCA9ICcnO1xuICAgIGlmIChjb2x1bW4/LmZvcm1hdCkge1xuICAgICAgY29sdW1uLmZvcm1hdCA9IGNvbHVtbi5mb3JtYXQ/LnR5cGUgPyBjb2x1bW4uZm9ybWF0LnR5cGUgOiBjb2x1bW4uZm9ybWF0O1xuICAgICAgc3dpdGNoIChjb2x1bW4uZm9ybWF0KSB7XG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLlNNQUxMREFURToge1xuICAgICAgICAgIGZvcm1hdCA9ICdNTS9kZC95eSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuU0hPUlREQVRFOiB7XG4gICAgICAgICAgZm9ybWF0ID0gJ01NL2RkL3l5eXknO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLk1FRElVTURBVEU6IHtcbiAgICAgICAgICBmb3JtYXQgPSAnTSBkLCB5eSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuTE9OR0RBVEU6IHtcbiAgICAgICAgICBmb3JtYXQgPSAnTU0vZGQvWVksIGg6bW0gYSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuUEVSSU9EOiB7XG4gICAgICAgICAgZm9ybWF0ID0gJ01NL3l5JztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgZm9ybWF0ID0gY29sdW1uLmZvcm1hdDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZm9ybWF0XG4gIH1cblxuICBzZXREcm9wZHdvblJlYWRPbmx5VmFsdWUocm93OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgZGVsZXRlIHJvd1sndW5kZWZpbmVkJ107XG4gICAgY29uc3QgdmFsdWUgPSByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF1cbiAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdXG4gICAgICA6IGNvbHVtbi5kYXRhPy5maW5kKGRyb3Bkb3duVmFsID0+IGRyb3Bkb3duVmFsPy52YWx1ZSA9PSByb3dbY29sdW1uLmZpZWxkXSlcbiAgICAgICAgPyBjb2x1bW4uZGF0YT8uZmluZChkcm9wZG93blZhbCA9PiBkcm9wZG93blZhbD8udmFsdWUgPT0gcm93W2NvbHVtbi5maWVsZF0pPy5sYWJlbFxuICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIG9wZW4gRGVsZXRlIENvbmZpcm1hdGlvbiBkaWFsb2cgd2hlbiBjbGljayBvbiBkZWxldGUgaWNvbiBpbiBBY3Rpb24gY29sdW1uXG4gICAqL1xuICBoYW5kbGVBY3Rpb25DbGljayhldmVudDogRXZlbnQsIGNvbHVtbkFjdGlvbjogSUdyaWRDb2x1bW5BY3Rpb24sIHJvdzogYW55KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKGNvbHVtbkFjdGlvbi50b29sdGlwLnRvTG93ZXJDYXNlKCkgPT09ICdkZWxldGUnKSB7XG4gICAgICBpZiAoY29sdW1uQWN0aW9uLmNvbmZpcm1EaWFsb2cgPT09IGZhbHNlKSB7XG4gICAgICAgIGNvbHVtbkFjdGlvbi5vbkNsaWNrKHJvdyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICAgICAgbWVzc2FnZTogJ0FyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHJlY29yZD8nLFxuICAgICAgICAgIGhlYWRlcjogJ0RlbGV0ZSBDb25maXJtYXRpb24nLFxuICAgICAgICAgIGljb246ICdwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZScsXG4gICAgICAgICAga2V5OiAnaGFuZGxlY29sdW1uQWN0aW9ucycsXG4gICAgICAgICAgYWNjZXB0OiAoKSA9PiB7XG4gICAgICAgICAgICBjb2x1bW5BY3Rpb24ub25DbGljayhyb3cpO1xuICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICByZWplY3Q6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jbG9zZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb2x1bW5BY3Rpb24ub25DbGljayhyb3cpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgOiBMYXp5TG9hZEV2ZW50XG4gICAqIFRyaWdnZXJzIGV2ZXJ5dGltZSBhIHNlcnZlciBzaWRlIGZpbHRlciBpcyB0cmlnZ2VyXG4gICAqL1xuICBoYW5kbGVTZXJ2ZXJTaWRlRXZlbnRzKGV2ZW50OiBhbnksIGR0OiBhbnkgPSAnJykge1xuICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5pc1NlcnZlclNpZGVFdmVudEluaXRhbFRyaWdnZXJlZCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0R3JpZElkKCk7XG4gICAgICAgICAgICB0aGlzLmdyaWRmaWx0ZXIgPSBldmVudDtcbiAgXG4gICAgICAgICAgICBpZiAoZHQ/LmVsPy5uYXRpdmVFbGVtZW50Py5pZCkge1xuICAgICAgICAgICAgICB0aGlzLmdyaWRJZCA9IGR0LmVsLm5hdGl2ZUVsZW1lbnQuaWQ7XG4gICAgICAgICAgICB9XG4gIFxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zICYmIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaCgoeDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmZpbHRlcnNbeC5maWVsZF0pIHtcbiAgICAgICAgICAgICAgICAgIGV2ZW50LmZpbHRlcnNbeC5maWVsZF0udmFsdWUgPSB4LnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5NVUxUSVNFTEVDVCA/IHguZmlsdGVyVmFsdWU/LnRvU3RyaW5nKCkgOiB4LmZpbHRlclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gIFxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdGhpcy5hdXRvTG9hZERhdGE7XG4gICAgICAgICAgICB0aGlzLnNlcnZlckZpbHRlcnMgPSB7XG4gICAgICAgICAgICAgIGZpbHRlcnM6IHRoaXMubG9va3VwRmlsdGVyc1xuICAgICAgICAgICAgICAgID8gdGhpcy5ncmlkU2VydmljZS5nZXRHcmlkRmlsdGVycyhldmVudCwgdGhpcy5zZWxlY3RlZENvbHVtbnMpXG4gICAgICAgICAgICAgICAgOiB0aGlzLmdyaWRTZXJ2aWNlLnByZXBhcmVCYXNpY0ZpbHRlcnMoZXZlbnQsIHRoaXMuc2VsZWN0ZWRDb2x1bW5zKSxcbiAgICAgICAgICAgICAgc29ydHM6IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0R3JpZFNvcnRzKGV2ZW50LCB0aGlzLnNlbGVjdGVkQ29sdW1ucyksXG4gICAgICAgICAgICAgIC4uLih0aGlzLnBhZ2luYXRpb24gJiYge1xuICAgICAgICAgICAgICAgIHBhZ2U6IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0R3JpZFBhZ2luYXRpb24oZXZlbnQpLFxuICAgICAgICAgICAgICAgIHBhZ2VTaXplOiBldmVudC5yb3dzIHx8IDEwLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH07XG4gIFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0aGlzLnNlcnZlckZpbHRlcnM/LmZpbHRlcnMgJiZcbiAgICAgICAgICAgICAgdGhpcy5zZXJ2ZXJGaWx0ZXJzPy5maWx0ZXJzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgKHRoaXMuYWxsb3dDYWNoaW5nIHx8IHRoaXMuc29mdENhY2hpbmcpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLnNvZnRDYWNoaW5nICYmIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ1NldEZpbHRlcnMtJyArIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsLCBKU09OLnN0cmluZ2lmeSh0aGlzLnNlcnZlckZpbHRlcnMpKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3RoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsXSA9IHRoaXMuc2VydmVyRmlsdGVycztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdID0ge307XG4gICAgICAgICAgICB9XG4gIFxuICAgICAgICAgICAgY29uc3Qgc2VydmVyRmlsdGVyVmFsdWVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNlcnZlckZpbHRlcnMpKTtcbiAgICAgICAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzID0gKHRoaXMuc2VydmVyRmlsdGVycy5maWx0ZXJzIHx8IFtdKS5jb25jYXQodGhpcy5nbG9iYWxEYXRhKTtcbiAgXG4gICAgICAgICAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5ncmlkU2VydmljZS5yb3dVcGRhdGUgPSBmYWxzZTtcbiAgXG4gICAgICAgICAgICBsZXQgY29udGFpbnNFbXB0eUZpZWxkID0gdHJ1ZTtcbiAgICAgICAgICAgIHdoaWxlIChjb250YWluc0VtcHR5RmllbGQpIHtcbiAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycy5maW5kSW5kZXgoKGZpbHRlcikgPT4gIWZpbHRlci5maWVsZCk7XG4gICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb250YWluc0VtcHR5RmllbGQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICBcbiAgICAgICAgICAgIHRoaXMub25TZXJ2ZXJTaWRlRXZlbnRDaGFuZ2UuZW1pdChzZXJ2ZXJGaWx0ZXJWYWx1ZXMpO1xuICAgICAgICAgICAgdGhpcy5pc1NlcnZlclNpZGVFdmVudEluaXRhbFRyaWdnZXJlZC5uZXh0KCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG4gIFxuXG5cbi8vc2V0IGdyaWQgaWQgb24gcGFnZSBsb2FkIGZvciBsb2FkIGNvbHVtbiB3aWR0aHNcbiAgc2V0Q2xhc3NhQW5kSWQoZHQ6YW55KXtcbiAgICBpZihkdD8uZWw/Lm5hdGl2ZUVsZW1lbnQ/LmlkKXtcbiAgICAgIHRoaXMuZ3JpZElkID0gZHQuZWwubmF0aXZlRWxlbWVudC5pZDtcbiAgICB9XG4gICAgaWYodGhpcy5ob3Jpem9udGFsU2Nyb2xsKXtcbiAgICAgIHJldHVybiB7J2hvcml6b250YWwtc2Nyb2xsJzp0cnVlfVxuICAgIH1lbHNle1xuICAgICAgcmV0dXJuIHsnaG9yaXpvbnRhbC1zY3JvbGwnOmZhbHNlfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICogUGFzc2VzIGFwcGxpZWQgcGFnaW5hdGlvbiB0byBwYXJlbnQgb24gcGFnZSBjaGFuZ2VcbiAgICovXG4gIGhhbmRsZVNlcnZlclNpZGVQYWdpbmF0aW9uKGV2ZW50OiBJR3JpZFBhZ2luYXRpb25FdmVudCkge1xuICAgIHRoaXMuZWRpdGluZ1Jvd0tleXMgPSB7fTtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gZXZlbnQuZmlyc3Q7XG4gICAgdGhpcy5QYWdlQ2hhbmdlID0gdHJ1ZTtcbiAgICB0aGlzLm9uUGFnZUNoYW5nZS5lbWl0KGV2ZW50KTtcblxuICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnVzZVNlcnZlclNpZGVFdmVudHMgJiYgdGhpcy5wYWdpbmF0aW9uICYmIHRoaXMuZGVmYXVsdFJvd3MgJiYgdGhpcy5lZGl0QWxsUm93cyAmJiB0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwICYmIHRoaXMuY29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuZWRpdEFsbFJvd3NBdE9uY2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBzZWxlY3RlZFJvdyhyb3c6IGFueSkge1xuICAgIHRoaXMub25Sb3dDaGVja0JveC5lbWl0KHJvdyk7XG4gIH1cblxuICAvLyBzZXQgdGltZSBmb3JtYXRcbiAgc2V0VGltZUZvcm1hdChkYXRlOiBhbnkpIHtcbiAgICBsZXQgdmFsdWU6IGFueSA9ICcnO1xuICAgIGlmICh0eXBlb2YgZGF0ZSA9PT0gJ251bWJlcicgfHwgKHR5cGVvZiBkYXRlID09PSAnc3RyaW5nJyAmJiAhaXNOYU4oTnVtYmVyKGRhdGUpKSkpIHtcbiAgICAgIGNvbnN0IG51bURhdGUgPSBOdW1iZXIoZGF0ZSk7XG4gICAgICBpZiAobnVtRGF0ZSA8IDAgfHwgbnVtRGF0ZSA+PSAwKVxuICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuXG4gICAgfVxuICAgIGVsc2UgaWYgKGRhdGU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ0FNJykgfHwgZGF0ZT8udG9TdHJpbmcoKS5pbmNsdWRlcygnUE0nKSkge1xuICAgICAgdmFsdWUgPSBkYXRlO1xuICAgIH1cbiAgICBlbHNlIGlmIChkYXRlPy50b1N0cmluZygpLmluY2x1ZGVzKCdhbScpIHx8IGRhdGU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3BtJykpIHtcbiAgICAgIHZhbHVlID0gZGF0ZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZGF0ZT8udG9TdHJpbmcoKS5pbmNsdWRlcygnOicpICYmICFkYXRlPy50b1N0cmluZygpLmluY2x1ZGVzKCdhbScpIHx8ICFkYXRlPy50b1N0cmluZygpLmluY2x1ZGVzKCdwbScpIHx8ICFkYXRlPy50b1N0cmluZygpLmluY2x1ZGVzKCdBTScpIHx8ICFkYXRlPy50b1N0cmluZygpLmluY2x1ZGVzKCdQTScpKSB7XG4gICAgICBjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gZGF0ZT8udG9TdHJpbmcoKT8uc3BsaXQoJzonKT8ubWFwKE51bWJlcik7XG4gICAgICBjb25zdCBwZXJpb2QgPSBob3VycyA+PSAxMiA/ICdQTScgOiAnQU0nO1xuICAgICAgY29uc3QgZm9ybWF0dGVkSG91cnMgPSBob3VycyAlIDEyIHx8IDEyO1xuICAgICAgcmV0dXJuIGAke2Zvcm1hdHRlZEhvdXJzfToke1N0cmluZyhtaW51dGVzKS5wYWRTdGFydCgyLCAnMCcpfSAke3BlcmlvZH1gO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgJ2hoOm1tIGEnKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLy9vcGVuIGh5cGVybGluayBpbiBlZGl0IGNhc2VcbiAgb3BlbkxpbmsodXJsOiBhbnkpIHtcbiAgICBpZiAodXJsKSB7XG4gICAgICBjb25zdCBsaW5rOiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICBsaW5rLmhyZWYgPSB1cmw7XG4gICAgICBsaW5rLnRhcmdldCA9ICdfYmxhbmsnO1xuICAgICAgbGluay5jbGljaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcm93XG4gICAqIFNldHMgdmFsdWVzIHRvIGVkaXRhYmxlIHJvd1xuICAgKiBSb3cncyBkYXRhIGlzIHByZXNldmVkIHRvIHByZXZlbnQgbXV0YXRpb25cbiAgICogUm93IGRhdGFLZXkgaXMgcHJlc2VydmVkIHRvIGtlZXAgdGhlIHJvdyB1bmlxdWUgYW5kIGluIGVkaXRhYmxlIHN0YXRlIGFzIGxvbmcgYXMgbm90IHNhdmVkXG4gICAqL1xuXG4gIHJlZnJlc2hHcmlkVGVybWluYXRvcigpIHtcbiAgICBpZiAodGhpcy5zZXRHcmlkUmVmcmVzaFRpbWUpIHtcbiAgICAgIHRoaXMucmVsb2FkUGFnZT8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBvblJvd0VkaXRJbml0KHJvdzogYW55KSB7XG4gICAgdGhpcy5yZWZyZXNoR3JpZFRlcm1pbmF0b3IoKVxuICAgIGxldCBzZWxlY3RlZFJvdyA9IHsgLi4ucm93IH07XG4gICAgT2JqZWN0LmVudHJpZXMoc2VsZWN0ZWRSb3cpLmZvckVhY2goKFtrZXksIHZhbHVlXTogYW55KSA9PiB7XG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc2V0RHJvcGRvd25GaWx0ZXIpIHtcbiAgICAgICAgICB0aGlzLnNldERyb3Bkb3duRmlsdGVyVmFsdWUoY29sLCByb3csIGtleSk7XG4gICAgICAgICAgdGhpcy5zZXREcm9wZG93bkZpbHRlciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNldCB0aGUgYXV0b0NvbXBsZXRlIFZhbHVlIGluIGVkaXQgbW9kZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUgJiZcbiAgICAgICAgICBjb2wuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGtleT8udG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICAgIHZhbHVlICYmXG4gICAgICAgICAgdmFsdWUubGVuZ3RoID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoY29sLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sLmZpZWxkXS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgcm93W2NvbC5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfdGVtcCddID0gcm93W2NvbC5kaXNwbGF5RmllbGRdO1xuICAgICAgICAgICAgICByb3dbY29sLmRpc3BsYXlGaWVsZF0gPSByb3dbY29sLmZpZWxkXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgbmV3VmFsdWUgPSB2YWx1ZS5tYXAoKHg6IGFueSkgPT4geFtjb2wuZGlzcGxheUZpZWxkXSk7XG4gICAgICAgICAgaWYgKG5ld1ZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnOycpKSB7XG4gICAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IG5ld1ZhbHVlXG4gICAgICAgICAgICAgID8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICA/LnJlcGxhY2VBbGwoJzsnLCAnLCcpXG4gICAgICAgICAgICAgID8uc3BsaXQoJywnKVxuICAgICAgICAgICAgICA/Lm1hcCgoeDogYW55KSA9PiAoeyBbY29sLmRpc3BsYXlGaWVsZCA/IGNvbC5kaXNwbGF5RmllbGQgOiBjb2wuZmllbGRdOiB4LCBbY29sLmZpZWxkICsgJ190ZW1wJ106IHZhbHVlWzBdW2NvbC5maWVsZF0gfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOKSB7XG4gICAgICAgICAgbGV0IG9wdGlvbiA9IGNvbD8uZGF0YT8uZmluZChcbiAgICAgICAgICAgICh4OiBhbnkpID0+IHgubGFiZWwgPT09IHJvd1tjb2wuZmllbGRdPy50b1N0cmluZygpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IG9wdGlvbi52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTVVMVElTRUxFQ1QpIHtcbiAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IHRoaXMuc2V0TXVsdGlTZWxlY3RWYWx1ZShjb2wsIHJvdylcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBrZXk/LnRvTG93ZXJDYXNlKCkgJiZcbiAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEVcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHJvd1tjb2wuZmllbGRdICE9PSBudWxsICYmIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAocm93W2tleSArICdfb2JqJ10gJiYgT2JqZWN0LmtleXMocm93W2tleSArICdfb2JqJ10pPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHJvd1trZXkgKyAnX29iaiddLnRleHQgPSBuZXcgRGF0ZSh2YWx1ZSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W2tleV0gPSBuZXcgRGF0ZSh2YWx1ZSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNoZWNrIHRoZSBNaW51dGVzIHBhdHRlcm5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoY29sLnNob3dUaW1lIHx8IGNvbC50aW1lT25seSkgJiZcbiAgICAgICAgICAgIGNvbC5taW51dGVzSW50ZXJ2YWwgJiZcbiAgICAgICAgICAgIHJvd1trZXldXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByb3dba2V5XSA9IG5ldyBEYXRlKHNldE1pbnV0ZXNJbnRlcnZhbChyb3dba2V5XSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgJiZcbiAgICAgICAgICBjb2wuZmlsdGVyPy50eXBlID09PSAnY2FsZW5kYXInICYmXG4gICAgICAgICAgY29sLmZpZWxkLnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgcm93W2NvbC5maWVsZF0gPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTksgJiZcbiAgICAgICAgICBjb2wuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGtleT8udG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICAgIChjb2wuYWxsb3dTYXZlID09PSB0cnVlIHx8IGNvbC5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGNvbC5lZGl0TGluayA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcm93W2NvbC5maWVsZCArICdfb2JqJ10uaHlwZXJsaW5rID0gcm93W2NvbC5maWVsZCArICdfb2JqJ10/Lmh5cGVybGluaztcbiAgICAgICAgICAgIHJvd1tjb2wuZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0ID0gJyc7XG4gICAgICAgICAgfSBlbHNlIGlmIChjb2wuZWRpdExpbmsgPT09IGZhbHNlIHx8IGNvbC5lZGl0TGluayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByb3dba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmVkaXRSb3dzUmVjb3Jkc1tyb3dbdGhpcy5kYXRhS2V5XV0gPSB7IC4uLnJvdyB9O1xuICAgIHRoaXMuZWRpdGluZ1Jvd0tleXNbcm93W3RoaXMuZGF0YUtleV1dID0gdHJ1ZTtcbiAgICB0aGlzLmNoZWNrQWN0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLmRyb3Bkb3duSW5wdXQgPSB0cnVlO1xuICAgIHRoaXMucm93Q2xpY2tEYXRhID0gcm93O1xuICAgIHRoaXMuaW5FZGl0TW9kZSA9IHRydWU7XG4gICAgdGhpcy5yb3dVcGRhdGVDaGFuZ2UgPSBmYWxzZTtcbiAgICB0aGlzLmNhbmNlbEFsbFJlY29yZHMgPSBmYWxzZTtcbiAgICB0aGlzLnNhdmVBbGxSZWNvcmQgPSBmYWxzZTtcbiAgICB0aGlzLnNvcnREaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5ncmlkU2VydmljZS5yb3dVcGRhdGUgPSBmYWxzZTtcbiAgICB0aGlzLm9uR3JpZFJvd0VkaXQuZW1pdChyb3cpO1xuICB9XG5cbiAgdHlwZU9mKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldCBkcm9wZG93biBmaWx0ZXIgdmFsdWVcbiAgICovXG4gIHNldERyb3Bkb3duRmlsdGVyVmFsdWUoY29sOiBhbnksIHJvdzogYW55LCBrZXk6IHN0cmluZykge1xuICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmIGNvbC5kcm9wRG93blByb3ApIHtcbiAgICAgIGlmIChPYmplY3QudmFsdWVzKGNvbCkuc29tZSgodmFsdWUpID0+IHZhbHVlID09IGtleSkpIHtcbiAgICAgICAgbGV0IG9iaiA9IGNvbC5kcm9wRG93blByb3A7XG4gICAgICAgIGxldCBuZXdGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICAgICAgaWYgKG9iai5maWx0ZXJzICYmIG9iai5maWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBvYmouZmlsdGVycy5mb3JFYWNoKChmaWx0ZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgbGV0IG5ld0ZpbHRlciA9IHsgLi4uZmlsdGVyIH07XG4gICAgICAgICAgICBsZXQgZmlsdGVyS2V5ID0gT2JqZWN0LmtleXMocm93KS5maW5kKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgbGV0IG1hdGNoS2V5OiBzdHJpbmcgPSAnJztcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZT8uaW5jbHVkZXMoJ3snKSAmJlxuICAgICAgICAgICAgICAgIGtleS50b0xvd2VyQ2FzZSgpID09PVxuICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZVxuICAgICAgICAgICAgICAgICAgPy50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICA/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCd7JywgJycpXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZSgnfScsICcnKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBtYXRjaEtleSA9IGtleTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hLZXk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJLZXkpIHtcbiAgICAgICAgICAgICAgbmV3RmlsdGVyLnZhbHVlID0gcm93W2ZpbHRlcktleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXdGaWx0ZXJzLnB1c2gobmV3RmlsdGVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc2V0RHJvcGRvd25EYXRhKFxuICAgICAgICAgIGNvbCxcbiAgICAgICAgICBvYmoudW5pcXVlS2V5LFxuICAgICAgICAgIG9iai52YWx1ZVByb3AsXG4gICAgICAgICAgb2JqLmxhYmVsUHJvcCxcbiAgICAgICAgICBuZXdGaWx0ZXJzLFxuICAgICAgICAgIHJvd1xuICAgICAgICApO1xuXG4gICAgICAgIGxldCBvcHRpb24gPSBjb2wuZGF0YS5maW5kKFxuICAgICAgICAgICh4OiBhbnkpID0+IHgubGFiZWwgPT09IHJvd1tjb2wuZmllbGRdPy50b1N0cmluZygpXG4gICAgICAgICk7XG4gICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IG9wdGlvbi52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcm93XG4gICAqIFBhc3NlcyB0aGUgZWRpdGVkIG9yIG5ld2x5IGNyZWF0ZWQgZGF0YSB0byBwYXJlbnRcbiAgICogSW4gY2FzZSBvZiBuZXdseSBjcmVhdGVkIGRhdGEsIGRhdGFLZXkgYW5kIGlzTmV3IHByb3AgaXMgcmVtb3ZlZFxuICAgKi9cbiAgb25Sb3dFZGl0U2F2ZShzZWxlY3RlZFJvdzogYW55KSB7XG4gICAgdGhpcy50ZW1wU2F2ZWRSb3cgPSBbXTtcbiAgICBsZXQgYXV0b21Db21wbGV0ZVRlbXBEYXRhID0gW107XG4gICAgbGV0IGxvb2t1cEluZm86IGFueSA9IHt9O1xuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICBkZWxldGUgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkICsgJy1kYXRhJ107XG4gICAgICBkZWxldGUgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkICsgJ19zZWNvbmRUeXBlJ107XG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmXG4gICAgICAgIChjb2x1bW4uYWxsb3dTYXZlID09PSB0cnVlIHx8IGNvbHVtbi5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZClcbiAgICAgICkge1xuICAgICAgICBpZiAodHlwZW9mIChzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQpIHtcbiAgICAgICAgICBsb29rdXBJbmZvW2NvbHVtbi5maWVsZF0gPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLnRleHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIpIHtcbiAgICAgICAgbGV0IHZhbHVlOiBhbnkgPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlciA9PT0gJ2NoYXInKSB7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSA9PT0gdHJ1ZSA/ICdZJyA6ICdOJztcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSAnbnVtZXJpYycpIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlID09PSB0cnVlID8gJzEnIDogJzAnO1xuICAgICAgICB9XG4gICAgICAgIHNlbGVjdGVkUm93ID0geyAuLi5zZWxlY3RlZFJvdywgW2NvbHVtbi5maWVsZF06IHZhbHVlIH07XG4gICAgICB9XG5cbiAgICAgIC8vY29udmVydCBkcm9wRG93biBvcHRpb25MYWJlbCBpbnRvIG9wdGlvblZhbHVlXG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiYgY29sdW1uLmRhdGE/Lmxlbmd0aCA+IDBcbiAgICAgICkge1xuICAgICAgICBjb25zdCBvcHRpb25MYWJlbCA9IGNvbHVtbi5kYXRhLmZpbmQoKHJlY29yZCkgPT4gcmVjb3JkWydsYWJlbCddPy50b0xvd2VyQ2FzZSgpID09PSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaWYgKG9wdGlvbkxhYmVsPy52YWx1ZSkge1xuICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBvcHRpb25MYWJlbC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvL2NvbnZlcnQgZGF0ZSBpbnRvIHRpbWUgZm9ybWF0XG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURVxuICAgICAgKSB7IFxuICAgICAgICBpZiAoY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi5zYXZlQXNTdHJpbmcgJiYgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSkge1xuICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdLCAnaGg6bW0gYScpO1xuICAgICAgICB9ZWxzZSBpZiAoY29sdW1uLnRpbWVPbmx5ICYmICFjb2x1bW4uc2F2ZUFzU3RyaW5nICYmIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0pIHtcbiAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSwgJ3l5eXktTU0tZGQgSEg6bW06c3MnKTtcbiAgICAgICAgfSBlbHNlIGlmICghY29sdW1uLnRpbWVPbmx5ICYmIChjb2x1bW4uc2hvd1RpbWUgfHwgY29sdW1uLmZvcm1hdCA9PT0gRUdyaWRGb3JtYXRUeXBlLkxPTkdEQVRFKSkge1xuICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdLCAneXl5eS1NTS1kZCBISDptbTpzcycpO1xuICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gJiYgIWNvbHVtbi50aW1lT25seSkge1xuICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBuZXcgRGF0ZShzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdKT8udG9Mb2NhbGVEYXRlU3RyaW5nKFwiZW4tVVNcIilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gaWYgYWxsb3dDYWxjdWxhdGU9dHJ1ZSwgZGl2aWRlIHRoZSBwZXJjZW50IGJ5IDEwMFxuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTlVNRVJJQykge1xuICAgICAgICBpZiAodGhpcy5udW1lcmljVmFsdWUpIHtcbiAgICAgICAgICB0aGlzLm51bWVyaWNWYWx1ZSA9IHt9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlnaXRzSW5mbyA9IGNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XG4gICAgICAgIGlmIChjb2x1bW4uZm9ybWF0Py50eXBlID09PSAncGVyY2VudCcpIHtcbiAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5hbGxvd0NhbGN1bGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgY2FsY3VsYXRlZFZhbHVlID0gc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJy4nKSA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBjYWxjdWxhdGVkVmFsdWUgPyBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdIDogc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSAvIDEwMDtcbiAgICAgICAgICAgIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBwYXJzZUZsb2F0KChzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdIC8gMTAwKT8udG9TdHJpbmcoKSkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvL2NvbnZlcnQgbXVsdGlzZWxlY3QgYXJyYXkgaW50byBzdHJpbmdcbiAgICAgIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5NVUxUSVNFTEVDVCAmJiBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdXG4gICAgICApIHtcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNhdmluZyBBdXRvQ29tcGxldGUgRGF0YVxuICAgICAgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURSAmJlxuICAgICAgICBjb2x1bW4uZGlzcGxheUZpZWxkICYmXG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/Lmxlbmd0aCA+IDBcbiAgICAgICkge1xuICAgICAgICBhdXRvbUNvbXBsZXRlVGVtcERhdGEgPSBbLi4uc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXV07XG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy5tYXAoKHJvdykgPT4gY29sdW1uPy5vcHRpb25WYWx1ZSAmJiByb3dbY29sdW1uLm9wdGlvblZhbHVlPy50b0xvd2VyQ2FzZSgpXSA/XG4gICAgICAgICAgcm93W2NvbHVtbi5vcHRpb25WYWx1ZT8udG9Mb3dlckNhc2UoKV0gOiByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXSk/LnRvU3RyaW5nKCk/LnJlcGxhY2VBbGwoJywnLCAnOycpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbGV0IHJvdzogYW55ID0geyAuLi5zZWxlY3RlZFJvdyB9O1xuICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMocm93KTtcbiAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKGtleS5pbmNsdWRlcygnX29iaicpKSB7XG4gICAgICAgIGxldCBvYmo6IGFueSA9IHJvd1trZXldXG4gICAgICAgIGlmICh0aGlzLmNoZWNrQWN0aW9uID09PSBmYWxzZSAmJiBvYmo/LnR5cGUgJiYgKG9iai50eXBlID09PSAnbGluaycgfHwgb2JqLnR5cGUgPT09ICdpZnJhbWUnIHx8IG9iai50eXBlID09PSAnZGlhbG9nJykpIHtcbiAgICAgICAgICByb3cgPSB7IC4uLnJvdywgW2tleS5zcGxpdCgnXycpWzBdXTogcm93W2tleV0uZGlzcGxheVRleHQgfTtcbiAgICAgICAgICB0aGlzLmNoZWNrQWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob2JqICYmIChvYmoudHlwZSA9PT0gJ2xpbmsnIHx8IG9iai50eXBlID09PSAnaWZyYW1lJyB8fCBvYmoudHlwZSA9PT0gJ2RpYWxvZycpKSB7XG4gICAgICAgICAgaWYgKCFvYmouZGlzcGxheVRleHQgJiYgb2JqLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09IGtleS5zcGxpdCgnXycpWzBdPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBvYmouZGlzcGxheVRleHQgPSByb3dba2V5LnNwbGl0KCdfJylbMF1dXG4gICAgICAgICAgfVxuICAgICAgICAgIHJvdyA9IHsgLi4ucm93LCBba2V5LnNwbGl0KCdfJylbMF1dOiByb3dba2V5XS5kaXNwbGF5VGV4dCB9O1xuICAgICAgICAgIGRlbGV0ZSByb3dba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIC8qKlxuICAgICAqIGp1c3QgZW1pdCB0aG9zZSBmaWVsZHMgd2hvIGV4aXN0IGluIHRoZSB0YWJsZVxuICAgICAqL1xuICAgIHJvdyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0Um93VmFsdWUocm93KTtcbiAgICAvL29uc29sZS5sb2coJ3JvdyBpbiBzYXZlJywgcm93KVxuICAgIGxldCBvYmo6IGFueSA9IHt9O1xuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAoY29sdW1uLmFsbG93U2F2ZSA9PT0gdHJ1ZSB8fCBjb2x1bW4uYWxsb3dTYXZlID09PSB1bmRlZmluZWQgfHwgdGhpcy5zYXZlQWxsRGF0YSlcbiAgICAgICkge1xuICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgJiZcbiAgICAgICAgICBjb2x1bW4uZmlsdGVyPy50eXBlID09PSAnY2FsZW5kYXInXG4gICAgICAgICkge1xuICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oXG4gICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSxcbiAgICAgICAgICAgICd5eXl5LU1NLWRkVDAwOjAwOjAwLjAwMFonXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vU2V0IERlY2ltYWwgRnJhY3Rpb24gVmFsdWVcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbHVtbi5mb3JtYXQgJiZcbiAgICAgICAgICBjb2x1bW4uZm9ybWF0LnR5cGUgPT09IEVGb3JtYXRUeXBlLkRFQ0lNQUwgJiZcbiAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSAmJlxuICAgICAgICAgICFyb3dbY29sdW1uLmZpZWxkXS50b1N0cmluZygpLmluY2x1ZGVzKCcuJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgbGV0IGRpZ2l0c0luZm8gPSAnLjAwJztcbiAgICAgICAgICBsZXQgemVybyA9ICcwJztcbiAgICAgICAgICBjb25zdCBmb3JtYXRQYXJhbXMgPSBjb2x1bW4uZm9ybWF0Py5mb3JtYXRQYXJhbXM7XG4gICAgICAgICAgY29uc3QgZnJhY0RpZ2l0cyA9IGNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XG4gICAgICAgICAgaWYgKGZyYWNEaWdpdHMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZnJhY0RpZ2l0czsgaSsrKSB7XG4gICAgICAgICAgICAgIHplcm8gPSB6ZXJvICsgJzAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGlnaXRzSW5mbyA9ICcuJyArIHplcm87XG4gICAgICAgICAgfVxuICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF0gKyBkaWdpdHNJbmZvO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICByb3cuaXNOZXcgfHwgcm93LmlzbmV3ICYmXG4gICAgICAgIChjb2x1bW4uYWxsb3dTYXZlID09PSBmYWxzZSB8fCBjb2x1bW4uZWRpdGFibGUgPT09IGZhbHNlIHx8ICF0aGlzLnNhdmVBbGxEYXRhKVxuICAgICAgKSB7XG4gICAgICAgIGRlbGV0ZSByb3dbY29sdW1uLmZpZWxkXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBkZWxldGUgc2VsZWN0ZWRSb3dbJ3VuZGVmaW5lZCddO1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UuY2hlY2tWYWxpZGl0eSh0aGlzLmNvbHVtbnMsIHJvdyk7XG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuZ3JpZFZhbGlkYXRpb24odGhpcy5jb2x1bW5zLCByb3cpO1xuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAvLyBzZXQgdGhlIGdyaWQgdXBkYXRlZC9pbnNlcnRlZCBkYXRhXG4gICAgICB0aGlzLnJvd0FjdGlvbkV2ZW50cyhzZWxlY3RlZFJvdyk7XG4gICAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KGZhbHNlKTtcbiAgICAgIGlmIChyb3cuaXNOZXcgfHwgcm93LmlzbmV3KSB7XG4gICAgICAgIGxldCB7IGlzTmV3LCBpc25ldywgLi4ubmV3Um93T2JqIH0gPSByb3c7XG4gICAgICAgIG5ld1Jvd09iaiA9IHRoaXMuZ3JpZFNlcnZpY2UucmVtb3ZlRXh0cmFOZXdSb3dPYmoobmV3Um93T2JqLCB0aGlzLmNvbHVtbnMpO1xuICAgICAgICBpZiAoIXRoaXMuYWRkRGF0YUtleVZhbHVlKSB7XG4gICAgICAgICAgZGVsZXRlIG5ld1Jvd09ialt0aGlzLmRhdGFLZXldO1xuICAgICAgICB9XG4gICAgICAgIG5ld1Jvd09iaiA9IHRoaXMuc2V0Um93c0RhdGEobmV3Um93T2JqKTtcbiAgICAgICAgaWYgKHRoaXMuc2F2ZUFsbFJlY29yZCkge1xuICAgICAgICAgIHRoaXMuc2F2ZVJlY29yZEFycmF5LnB1c2gobmV3Um93T2JqKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9uUm93QWRkLmVtaXQobmV3Um93T2JqKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJvd3NEYXRhLmZpbmRJbmRleCgoeCk9PiB4LnRlbXBfaWQgPT0gc2VsZWN0ZWRSb3cudGVtcF9pZCk7XG4gICAgICAgIHRoaXMudGVtcFNhdmVkUm93LnB1c2goaW5kZXgpO1xuICAgICAgICBpZiAodGhpcy5zYXZlQWxsUmVjb3JkKSB7XG4gICAgICAgICAgdGhpcy5zYXZlUmVjb3JkQXJyYXkucHVzaChvYmopO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLmNoZWNrbGlzdC5sZW5ndGggPiAwKVxuICAgICAgICAgICAgdGhpcy5vblJvd1VwZGF0ZS5lbWl0KHRoaXMuc2V0Um93c0RhdGEodGhpcy5jaGVja2xpc3QpKTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25Sb3dVcGRhdGUuZW1pdChvYmopO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5lZGl0aW5nUm93S2V5c1tyb3dbdGhpcy5kYXRhS2V5XV0gPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi5lcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkgKyAnX29iaiddKSB7XG4gICAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ10gPSB7IC4uLnNlbGVjdGVkUm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10sIGVycm9yTWVzc2FnZTogY29sdW1uLmVycm9yTWVzc2FnZSB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ10gPSB7IGVycm9yTWVzc2FnZTogY29sdW1uLmVycm9yTWVzc2FnZSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHRoaXMuZWRpdGluZ1Jvd0tleXNbcm93W3RoaXMuZGF0YUtleV1dID0gdHJ1ZTtcbiAgICB9XG4gICAgLy8gaWYgYWxsIHJvd3MgaW4gcmVhZCBvbmx5IG1vZGUgdGhlbiBzaG93IGVkaXRBbGxSb3dzIGJ1dHRvbi4gICAgXG4gICAgaWYgKE9iamVjdC52YWx1ZXModGhpcy5lZGl0aW5nUm93S2V5cykuZXZlcnkoKHZhbHVlKSA9PiAhdmFsdWUpKSB7XG4gICAgICB0aGlzLmluRWRpdE1vZGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuc29ydERpc2FibGVkID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICAvLyBjb252ZXJ0IGRhdGUgaW50byB0aW1lXG4gICAgICBpZiAoXG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gJiZcbiAgICAgICAgKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCdQTScpIHx8XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJ0FNJykpXG4gICAgICApIHtcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHNldFRpbWVJbkRhdGUocm93W2NvbHVtbi5maWVsZF0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5OVU1FUklDKSB7XG4gICAgICAgIGNvbnN0IGRpZ2l0c0luZm8gPSBjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvO1xuICAgICAgICBpZiAoY29sdW1uLmZvcm1hdD8udHlwZSA9PT0gJ3BlcmNlbnQnKSB7XG4gICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uYWxsb3dDYWxjdWxhdGUpIHtcbiAgICAgICAgICAgIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBwYXJzZUZsb2F0KChzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdICogMTAwKT8udG9TdHJpbmcoKSkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdICogMTAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUgJiZcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXVxuICAgICAgKSB7XG4gICAgICAgIC8vIHNldCBhdXRvY29tcGVsZXQgYXJyYXkgZGF0YSBhZnRlciBzYXZlIHJvd1xuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gYXV0b21Db21wbGV0ZVRlbXBEYXRhO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQgJiZcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSAmJiAoY29sdW1uLmFsbG93U2F2ZSA9PT0gdHJ1ZSB8fCBjb2x1bW4uYWxsb3dTYXZlID09PSB1bmRlZmluZWQpXG4gICAgICApIHtcbiAgICAgICAgLy8gc2V0IExPT0tVUF9JTlBVVCBkYXRhIGFmdGVyIHNhdmUgcm93XG4gICAgICAgIGlmIChsb29rdXBJbmZvW2NvbHVtbi5maWVsZF0pIHtcbiAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gbG9va3VwSW5mb1tjb2x1bW4uZmllbGRdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmXG4gICAgICAgIGNvbHVtbi5vcHRpb25MYWJlbCAmJlxuICAgICAgICBjb2x1bW4ub3B0aW9uVmFsdWVcbiAgICAgICkge1xuICAgICAgICB0aGlzLnNldERyb3Bkb3duVmFsdWUoY29sdW1uLCBzZWxlY3RlZFJvdyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5hZGROZXdSb3dDaGVjayA9IGZhbHNlO1xuICAgIGlmIChPYmplY3QudmFsdWVzKHRoaXMuZWRpdGluZ1Jvd0tleXMpLmV2ZXJ5KCh2YWx1ZSkgPT4gIXZhbHVlKSAmJiB0aGlzLnNldEdyaWRSZWZyZXNoVGltZSkge1xuICAgICAgdGhpcy5yZWZyZXNoR3JpZCgpO1xuICAgIH1cbiAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuZ3JpZFNlcnZpY2Uucm93VXBkYXRlID0gZmFsc2U7XG4gIH1cblxuICAvLyBjaGVjayB0aGUgdmFsaWRhdGlvbiBvZiB0aGUgZmllbGRcbiAgZ3JpZFZhbGlkYXRpb24oY29sdW1uczogYW55LCByb3c6IGFueSwgc2luZ2xlQ2VsbDogYm9vbGVhbiA9IGZhbHNlKTogYm9vbGVhbiB7XG4gICAgaWYgKHNpbmdsZUNlbGwgPT0gdHJ1ZSkge1xuICAgICAgY29sdW1ucyA9IFt7IC4uLmNvbHVtbnMgfV1cbiAgICB9XG4gICAgaWYgKCF0aGlzLmdyaWRTZXJ2aWNlLmNoZWNrVmFsaWRpdHkoY29sdW1ucywgcm93LCBzaW5nbGVDZWxsKSkge1xuICAgICAgbGV0IGVycm9yTWVzc2FnZURldGFpbHM6IHN0cmluZyA9ICcnO1xuICAgICAgY29sdW1ucz8uZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgIGlmIChjb2x1bW4uZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgZXJyb3JNZXNzYWdlRGV0YWlscyA9IGVycm9yTWVzc2FnZURldGFpbHMgPyBlcnJvck1lc3NhZ2VEZXRhaWxzICsgJyAsICcgKyBjb2x1bW4uZXJyb3JNZXNzYWdlIDogY29sdW1uLmVycm9yTWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIGxldCBpc1JlcXVpcmVkID0gY29sdW1ucy5zb21lKFxuICAgICAgICAoY29sdW1uOiBhbnkpID0+IGNvbHVtbi5lcnJvck1lc3NhZ2UgJiYgIXJvd1tjb2x1bW4uZmllbGRdXG4gICAgICApO1xuICAgICAgaWYgKGlzUmVxdWlyZWQgJiYgIXNpbmdsZUNlbGwpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXG4gICAgICAgICAgZXJyb3JNZXNzYWdlRGV0YWlscyxcbiAgICAgICAgICA1MDAwLFxuICAgICAgICAgICdSRVFVSVJFRCBGSUVMRCdcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKGVycm9yTWVzc2FnZURldGFpbHMsIDUwMDAsICdJTlZBTElEIEZJRUxEJyk7XG4gICAgICAgIGlmIChzaW5nbGVDZWxsKSB7XG4gICAgICAgICAgdGhpcy5zZXRFcnJvckNlbGwoY29sdW1uc1swXSwgcm93KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzaW5nbGVDZWxsKSB7XG4gICAgICAgIHRoaXMuc2V0RXJyb3JDZWxsKGNvbHVtbnNbMF0sIHJvdylcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICBzZXRFcnJvckNlbGwoY29sdW1uLCByb3cpIHtcbiAgICBpZiAoY29sdW1uLmVycm9yTWVzc2FnZSkge1xuICAgICAgaWYgKHJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ10pIHtcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpICsgJ19vYmonXSA9IHsgLi4ucm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10sIGVycm9yTWVzc2FnZTogY29sdW1uLmVycm9yTWVzc2FnZSB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpICsgJ19vYmonXSA9IHsgZXJyb3JNZXNzYWdlOiBjb2x1bW4uZXJyb3JNZXNzYWdlIH07XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKHJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ10pIHtcbiAgICAgICAgZGVsZXRlIHJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ10uZXJyb3JNZXNzYWdlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcm93IDogYW55XG4gICAqIEBwYXJhbSBpbmRleCA6IG51bWJlclxuICAgKiBDbGVhcnMgb3V0IHRoZSBlZGl0IHJvdyBhbmQgcmVwbGFjZSB3aXRoIHJlYWRhYmxlIG9uZVxuICAgKi9cbiAgb25Sb3dFZGl0Q2FuY2VsKHJvdzogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgbGV0IHJvd0luRWRpdE1vZGU6IGJvb2xlYW4gPSBPYmplY3QudmFsdWVzKHRoaXMuZWRpdGluZ1Jvd0tleXMpLmV2ZXJ5KCh2YWx1ZSkgPT4gIXZhbHVlKTtcbiAgICBpZiAocm93Py5pc05ldykge1xuICAgICAgdGhpcy5yb3dzRGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvd3NEYXRhW2luZGV4XSA9IHRoaXMuZWRpdFJvd3NSZWNvcmRzW3Jvd1t0aGlzLmRhdGFLZXldXTtcbiAgICAgIGRlbGV0ZSB0aGlzLmVkaXRSb3dzUmVjb3Jkc1tyb3dbdGhpcy5kYXRhS2V5XV07XG4gICAgfVxuICAgIGRlbGV0ZSB0aGlzLmVkaXRpbmdSb3dLZXlzW3Jvd1t0aGlzLmRhdGFLZXldXTtcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTikge1xuICAgICAgICB0aGlzLnNldERyb3Bkb3duVmFsdWUoY29sdW1uLCByb3cpO1xuICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJiBjb2x1bW4uZGlzcGxheUZpZWxkKSB7XG4gICAgICAgIHRoaXMucm93c0RhdGFbaW5kZXhdW2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXT8udmFsdWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5pbkVkaXRNb2RlID0gZmFsc2U7XG4gICAgaWYgKHJvd0luRWRpdE1vZGUpIHtcbiAgICAgIHRoaXMuc29ydERpc2FibGVkID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuYWRkTmV3Um93Q2hlY2sgPSBmYWxzZTtcbiAgICB0aGlzLnJvd1VwZGF0ZUNoYW5nZSA9IGZhbHNlO1xuICAgIHRoaXMuaW5saW5lUm93Q2FuY2VsLmVtaXQocm93KTtcbiAgICAgIGlmIChyb3dJbkVkaXRNb2RlICYmIHRoaXMuc2V0R3JpZFJlZnJlc2hUaW1lKSB7XG4gICAgICAgIHRoaXMucmVmcmVzaEdyaWQoKTtcbiAgICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBcbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHJvd1xuICAgKiBTZW5kcyB0aGUgcm93IHBheWxvYWQgdG8gcGFyZW50IGZvciBkZWxldGlvbnNcbiAgICovXG5cbiAgLyoqXG4gICpzZXQgdGhlIGdyaWREYXRhIG9uIHJvdyBhY3Rpb25zIGV2ZW50c1xuICAqL1xuICByb3dBY3Rpb25FdmVudHMocm93SW5mbywgZGVsZXRlUm93OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBsZXQgYWN0aW9uOiBzdHJpbmcgPSAnJztcbiAgICBsZXQgZ3JpZFJvd3NEYXRhOiBhbnlbXSA9IFsuLi50aGlzLnJvd3NEYXRhXTtcbiAgICBjb25zdCBpbmRleCA9IGdyaWRSb3dzRGF0YS5maW5kSW5kZXgoKHJvd0RhdGEpID0+IHJvd0luZm9bdGhpcy5kYXRhS2V5XSA9PT0gcm93RGF0YVt0aGlzLmRhdGFLZXldKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgaWYgKGRlbGV0ZVJvdykge1xuICAgICAgICBncmlkUm93c0RhdGEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5yb3dzRGF0YSA9IFsuLi5ncmlkUm93c0RhdGFdO1xuICAgICAgICBhY3Rpb24gPSAnZGVsZXRlJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmFkZE5ld1Jvd0NoZWNrKSB7XG4gICAgICAgICAgYWN0aW9uID0gJ2luc2VydCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWN0aW9uID0gJ3VwZGF0ZSc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub25HcmlkUm93QWN0aW9ucy5vYnNlcnZlcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgcm93SW5mb1sncm93QWN0aW9uJ10gPSBhY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgZ3JpZFJvd3NEYXRhW2luZGV4XSA9IHJvd0luZm87XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZ2VuZXJhdGVSb3dzRGF0YUNvcHkgPSBmYWxzZTtcbiAgICB0aGlzLnJvd1VwZGF0ZUNoYW5nZSA9IGZhbHNlO1xuICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgIHRoaXMub25HcmlkUm93QWN0aW9ucy5lbWl0KGdyaWRSb3dzRGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBEZWxldGUgY29uZmlybWF0aW9uIGRpYWxvZyB3aGVuIHRyeWluZyB0byBkZWxldGUgcm93XG4gICAqL1xuICBkZWxldGVSZWNvcmQocm93OiBhbnkpIHtcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICBtZXNzYWdlOiAnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgcmVjb3JkPycsXG4gICAgICBoZWFkZXI6ICdEZWxldGUgQ29uZmlybWF0aW9uJyxcbiAgICAgIGljb246ICdwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZScsXG4gICAgICBrZXk6ICdoYW5kbGVJbmxpbmVDUlVEJyxcbiAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy51c2VTZXJ2ZXJTaWRlRXZlbnRzKSB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzZXQgdGhlIGdyaWQgZGVsZXRlZCBkYXRhIFxuICAgICAgICB0aGlzLnJvd0FjdGlvbkV2ZW50cyhyb3csIHRydWUpO1xuICAgICAgICB0aGlzLm9uUm93RGVsZXRlLmVtaXQocm93KTtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlKCk7XG4gICAgICAgIHRoaXMuaW5FZGl0TW9kZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICByZWplY3Q6ICgpID0+IHtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlKCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvIHNldCBkaXNhYmxlZCB0aGUgY29udHJvbFxuICAgKi9cbiAgYWxsb3dEaXNhYmxlZChjb2x1bW46IGFueSwgcm93OiBhbnkpOiBib29sZWFuIHtcbiAgICBsZXQgdmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gJiYgdHlwZW9mIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSkgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIE9iamVjdC5rZXlzKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddKT8uaW5jbHVkZXMoJ2Rpc2FibGVkJykgJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc2FibGVkID09PSB0cnVlXG4gICAgICApIHtcbiAgICAgICAgdmFsdWUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29sdW1uLmRpc2FibGVkICkge1xuICAgICAgdmFsdWUgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogVG8gc2V0IGFnZ3JlZ2F0ZSBpbiBncmlkIGZvb3RlclxuICAgKi9cbiAgc2V0QWdncmVnYXRlVGV4dChjb2x1bW46IElHcmlkQ29sdW1uKSB7XG4gICAgaWYgKGNvbHVtbj8uYWdncmVnYXRlKSB7XG4gICAgICBjb2x1bW4uYWdncmVnYXRlLmZvckVhY2goKGNvbDogYW55KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnJvd3NEYXRhICYmIHRoaXMucm93c0RhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxldCBjb2x1bW5UeXBlOiBFR3JpZEFnZ3JlZ2F0ZSA9IGNvbC50eXBlO1xuICAgICAgICAgIGlmIChjb2x1bW5UeXBlID09PSBFR3JpZEFnZ3JlZ2F0ZS5DT1VOVCkge1xuICAgICAgICAgICAgbGV0IGNvdW50ID0gdGhpcy5yb3dzRGF0YS5sZW5ndGg7XG4gICAgICAgICAgICBjb3VudCA9IHRoaXMuc2V0RmV0Y2hBZ2dyZWdhdGVkVmFsdWUoY29sdW1uLCBjb3VudCwgMSk7XG4gICAgICAgICAgICBjb2wuYWdnclZhbHVlID0gdGhpcy5zZXRBZ2dyZWdhdGVGb290ZXJUZXh0KGNvbCwgY291bnQsICdDb3VudCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbHVtblR5cGUgPT09IEVHcmlkQWdncmVnYXRlLlNVTSB8fFxuICAgICAgICAgICAgY29sdW1uVHlwZSA9PT0gRUdyaWRBZ2dyZWdhdGUuQVZFUkFHRVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgY29sVmFsdWVzOiBudW1iZXJbXSA9IHRoaXMuZ2V0Q29sdW1uVmFsdWVzKGNvbHVtbik7XG4gICAgICAgICAgICBpZiAoY29sVmFsdWVzICYmIGNvbFZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGxldCBzdW0gPSBjb2xWYWx1ZXMucmVkdWNlKChhY2MsIGN1cikgPT4gYWNjICsgY3VyLCAwKTtcbiAgICAgICAgICAgICAgaWYgKGNvbHVtblR5cGUgPT09IEVHcmlkQWdncmVnYXRlLlNVTSkge1xuICAgICAgICAgICAgICAgIHN1bSA9IHRoaXMuc2V0RmV0Y2hBZ2dyZWdhdGVkVmFsdWUoY29sdW1uLCBzdW0sIDIpO1xuICAgICAgICAgICAgICAgIGNvbC5hZ2dyVmFsdWUgPSB0aGlzLnNldEFnZ3JlZ2F0ZUZvb3RlclRleHQoY29sLCBzdW0sICdTdW0nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoY29sdW1uVHlwZSA9PT0gRUdyaWRBZ2dyZWdhdGUuQVZFUkFHRSkge1xuICAgICAgICAgICAgICAgIGxldCBhdmVyYWdlID0gc3VtIC8gY29sVmFsdWVzLmxlbmd0aCB8fCAwO1xuICAgICAgICAgICAgICAgIGF2ZXJhZ2UgPSB0aGlzLnNldEZldGNoQWdncmVnYXRlZFZhbHVlKGNvbHVtbiwgc3VtLCAzKTtcbiAgICAgICAgICAgICAgICBjb2wuYWdnclZhbHVlID0gdGhpcy5zZXRBZ2dyZWdhdGVGb290ZXJUZXh0KFxuICAgICAgICAgICAgICAgICAgY29sLFxuICAgICAgICAgICAgICAgICAgYXZlcmFnZSxcbiAgICAgICAgICAgICAgICAgICdBdmcnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2wuYWdnclZhbHVlID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNldCB0aGUgYWdncmVnYXRhaW9uIHZhbHVlIHRoYXQgY29taW5nIGZyb20gZmV0Y2hcbiAgc2V0RmV0Y2hBZ2dyZWdhdGVkVmFsdWUoY29sdW1uLCBhZ2dyZWdhdGVWYWx1ZSwgYWdncmVnYXRlQWN0aW9uKSB7XG4gICAgaWYgKHRoaXMuYWdncmVnYXRlZFJlc3VsdD8ubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgYWdncmVnYXRlZENvbHVtbiA9IHRoaXMuYWdncmVnYXRlZFJlc3VsdC5maW5kKChhZ2dyZWdhdGUpID0+IGFnZ3JlZ2F0ZS5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICYmIGFnZ3JlZ2F0ZS5hZ2dyZWdhdGlvbk9wZXJhdGlvbiA9PT0gYWdncmVnYXRlQWN0aW9uKTtcbiAgICAgIGlmIChhZ2dyZWdhdGVkQ29sdW1uKSB7XG4gICAgICAgIGFnZ3JlZ2F0ZVZhbHVlID0gYWdncmVnYXRlZENvbHVtbj8udmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhZ2dyZWdhdGVWYWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgZ3JpZCBBZ2dyZWdhdGUgdmFsdWVzXG4gICAqL1xuICBzZXRBZ2dyZWdhdGVGb290ZXJUZXh0KGNvbHVtbjogYW55LCB2YWx1ZTogbnVtYmVyLCBkZWZhdWx0Q2FwdGlvbjogc3RyaW5nKSB7XG4gICAgY29uc3QgaXNEZWNpbWFsRm9ybWF0OiBib29sZWFuID0gY29sdW1uLmZvcm1hdD8udHlwZSA9PT0gJ2RlY2ltYWwnO1xuICAgIGNvbnN0IGRpZ2l0c0luZm8gPSBjb2x1bW4uZm9ybWF0Py5kaWdpdHNJbmZvO1xuICAgIGNvbnN0IGNhcHRpb246IHN0cmluZyA9XG4gICAgICBjb2x1bW4uY2FwdGlvbj8ubGVuZ3RoID4gMCA/IGNvbHVtbi5jYXB0aW9uIDogZGVmYXVsdENhcHRpb247XG5cbiAgICBjb25zdCBkZWNpbWFsUG9pbnQgPSBpc0RlY2ltYWxGb3JtYXRcbiAgICAgID8gdmFsdWU/LnRvRml4ZWQoZGlnaXRzSW5mbyA/IGRpZ2l0c0luZm8gOiAyKVxuICAgICAgOiB2YWx1ZT8udG9GaXhlZCgwKTtcbiAgICByZXR1cm4gYCR7Y2FwdGlvbn0gJHtkZWNpbWFsUG9pbnRcbiAgICAgIC50b1N0cmluZygpXG4gICAgICAucmVwbGFjZSgvXFxCKD89KFxcZHszfSkrKD8hXFxkKSkvZywgJywnKX0gPC9icj5gO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldCBkZWNpbWF0IGFuZCBudW1lcmljIHZhbHVlc1xuICAgKi9cbiAgc2V0TnVtZXJpY1ZhbHVlcygpIHtcbiAgICBpZiAodGhpcy5jb2x1bW5zPy5sZW5ndGggPiAwICYmIHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5OVU1FUklDKSB7XG4gICAgICAgICAgY29uc3QgZGlnaXRzSW5mbyA9IGNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XG4gICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgIGlmIChjb2x1bW4/LmZvcm1hdD8udHlwZSA9PT0gJ3BlcmNlbnQnICYmIHJvd1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICAgICAgICAgIGlmIChjb2x1bW4uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmFsbG93Q2FsY3VsYXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcGFyc2VGbG9hdCgocm93W2NvbHVtbi5maWVsZF0gKiAxMDApPy50b1N0cmluZygpKS50b0ZpeGVkKGRpZ2l0c0luZm8pOyAgICAgICAgIC8vVEhFU0UgQ09NTUVOVEVEIE9VVCBMSU5FUyBTSE9VTEQgUlVOIE9OIFNBVkVcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXSAqIDEwMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlnaXRzSW5mbykge1xuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcGFyc2VGbG9hdChyb3dbY29sdW1uLmZpZWxkXSkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4/LmZvcm1hdD8udHlwZSA9PT0gJ2RlY2ltYWwnICYmIHJvd1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcGFyc2VGbG9hdChyb3dbY29sdW1uLmZpZWxkXSkudG9GaXhlZChkaWdpdHNJbmZvID8gZGlnaXRzSW5mbyA6IDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgY29sdW1uIHZhbHVlIGJhc2VkIG9uIGNvbHVtbiBmaWVsZFxuICAgKi9cbiAgZ2V0Q29sdW1uVmFsdWVzKGNvbHVtbjogSUdyaWRDb2x1bW4pIHtcbiAgICBsZXQgYXJyOiBhbnkgPSBbXTtcbiAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgICAga2V5cy5tYXAoKGtleSkgPT4ge1xuICAgICAgICBpZiAoY29sdW1uLmZpZWxkID09PSBrZXkpIHtcbiAgICAgICAgICBhcnIucHVzaChyb3dba2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBhcnI7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogRXhwb3J0IHRvIFBERlxuICAgKi9cbiAgZXhwb3J0UGRmKCkge1xuICAgIHZhciBleHBvcnREYXRhID0gdGhpcy5zZXRFeHBvcnREYXRhKFsuLi50aGlzLnJvd3NEYXRhXSwgdHJ1ZSk7XG4gICAgbGV0IGRvYyA9IG5ldyBqc1BERigncCcsICdwdCcpO1xuICAgIGRvYy50YWJsZSgxLCAxLCBleHBvcnREYXRhLnJvd3MsIGV4cG9ydERhdGEuaGVhZGluZ3MsIHsgYXV0b1NpemU6IHRydWUgfSk7XG4gICAgZG9jLnNhdmUoJ0V4cG9ydC5wZGYnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgU3ViLWZ1bmN0aW9uIHRvIHNldCByb3dzIGZvciBleHBvcnQgdG8gUGRmLCBhbmQgRXhjZWxcbiAgICogQHJvd3MgcGFyYW0gZm9yIHJvd3NcbiAgICogQGlzRXhjZWwgcGFyYW0gZm9yIGV4cG9ydCB0byBleGNlbCBpbmRpY2F0aW9uXG4gICAqL1xuICBzZXRFeHBvcnREYXRhKHJvd3M6IGFueVtdID0gW10sIGlzUGRmOiBib29sZWFuID0gZmFsc2UpOiBJR3JpZERhdGFFeHBvcnQge1xuICAgIGNvbnN0IGhlYWRpbmdzOiBhbnkgPSB0aGlzLmNvbHVtbnMubWFwKChjb2x1bW4pID0+IGNvbHVtbi5maWVsZCk7XG4gICAgcm93cy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGZvciAodmFyIHByb3AgaW4gcm93KSB7XG4gICAgICAgIGlmICghaGVhZGluZ3MuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICBkZWxldGUgcm93W3Byb3BdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1BkZikge1xuICAgICAgICAgIHJvd1twcm9wXSA9XG4gICAgICAgICAgICAhcm93W3Byb3BdICYmIHR5cGVvZiByb3dbcHJvcF0gIT09ICdib29sZWFuJ1xuICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgIDogcm93W3Byb3BdLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4geyByb3dzLCBoZWFkaW5ncyB9O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEV4cG9ydCB0byBFeGNlbFxuICAgKi9cbiAgZXhwb3J0RXhjZWwoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnU2VydmljZS5leHBvcnRUb0V4Y2VsPy51bmlxdWVLZXkpIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLmdldFVzZXJzRGF0YSgpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgbGV0IHJvd3MgPSB0aGlzLmdyaWRTZXJ2aWNlLnNldERhdGFGaWVsZHMocmVzcG9uc2U/LnJlY29yZHMpO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5leHBvcnRGaWxlKHJvd3MpO1xuICAgICAgfSxcbiAgICAgICAgKHsgZXJyb3IgfSkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFwaUVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5leHBvcnRGaWxlKHRoaXMucm93c0RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydEZpbGUocmVjb3Jkcykge1xuICAgIGxldCBhcnI6IGFueSA9IFtdO1xuICAgIHJlY29yZHMuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgIGxldCBvYmo6IGFueSA9IHt9O1xuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgZ3JpZEhlYWRlciA9IGNvbHVtbi5oZWFkZXI7XG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTkspIHtcbiAgICAgICAgICBjb25zdCBsaW5rT2JqID0gcm93W2NvbHVtbi5kaXNwbGF5VGV4dD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ107XG4gICAgICAgICAgb2JqW2dyaWRIZWFkZXJdID0gcm93W2NvbHVtbi5maWVsZF0gKyAnfCcgKyBsaW5rT2JqPy5oeXBlcmxpbms7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JqW2dyaWRIZWFkZXJdID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgYXJyLnB1c2gob2JqKTtcbiAgICB9KTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmV4cG9ydEV4Y2VsKGFyciwgdGhpcy5zZWxlY3RlZENvbHVtbnMsIEVHcmlkRXhjZWwuRVhQT1JUKTtcbiAgfVxuICBnZXRVc2Vyc0RhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFNlcnZpY2UuZ2V0PGFueVtdLCBSZXF1ZXN0RHRvPignL0RhdGEvRmV0Y2gnLCB7XG4gICAgICB1bmlxdWVLZXk6IHRoaXMuY29uZmlnU2VydmljZS5leHBvcnRUb0V4Y2VsPy51bmlxdWVLZXksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNvbmZpZ1NlcnZpY2UuZXhwb3J0VG9FeGNlbD8uZmlsdGVycyxcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICpzZXQgY29uZmlnIGRhdGEgb2YgbG9va3VwIGNvbnRyb2wgZGlhbG9nXG4gICAqL1xuICBzZXRMb29rdXBEaWFsb2dDb25maWcocm93OiBhbnksIGNvbHVtbjogYW55LCBkYXRhOiBhbnkpIHtcbiAgICBsZXQgc2VsZWN0aW9uOiBzdHJpbmcgPSAnJztcbiAgICBpZiAocm93W2NvbHVtbi5maWVsZF0gJiYgdHlwZW9mIHJvd1tjb2x1bW4uZmllbGRdID09PSAnb2JqZWN0Jykge1xuICAgICAgc2VsZWN0aW9uID0gcm93W2NvbHVtbi5maWVsZF0udGV4dDtcbiAgICB9IGVsc2UgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQgJiYgcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdKSB7XG4gICAgICBzZWxlY3Rpb24gPSByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGVjdGlvbiA9IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIH1cblxuICAgIGlmIChjb2x1bW4uZmllbGQgJiYgdHlwZW9mIHJvd1tjb2x1bW4uZmllbGRdID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3QgbmV3Um93ID0geyAuLi5yb3cgfTtcbiAgICAgIG5ld1Jvd1tjb2x1bW4uZmllbGRdID0gbmV3Um93W2NvbHVtbi5maWVsZF0/LnZhbHVlO1xuICAgICAgcm93ID0geyAuLi5uZXdSb3cgfTtcbiAgICB9XG5cbiAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQgJiYgZGF0YSkge1xuICAgICAgbGV0IG9iaiA9IGF1dG9TZXRMb29rdXBEYXRhKGRhdGEsIHJvdyk7XG4gICAgICByb3dbY29sdW1uLmZpZWxkICsgJy1kYXRhJ10gPSBvYmo7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICByb3dEYXRhOiByb3dbY29sdW1uLmZpZWxkICsgJy1kYXRhJ10sXG4gICAgICBzZWxlY3Rpb246IHNlbGVjdGlvbixcbiAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBsaW5rIG9uIGxvb2t1cENvbnRyb2wgY29udHJvbCBpbiByZWFkIG9ubHkgbW9kZSB3aGVuIGVkaXRMaW5rIHNldCB0cnVlXG4gICAqL1xuICBvcGVuTG9va3VwSHlwZXJsaW5rKGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdzogYW55KSB7XG4gICAgY29uc3QgbG9va3VwSW5mbyA9IGNvbHVtbi5sb29rdXBDb250cm9sO1xuICAgIGlmIChjb2x1bW4uZWRpdExpbmsgPT09IHRydWUgJiYgbG9va3VwSW5mby5jb21wb25lbnQpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBsb29rdXBJbmZvLmRhdGEgPyBsb29rdXBJbmZvLmRhdGEgOiBsb29rdXBJbmZvLmRhdGEuZGF0YTtcbiAgICAgIGxldCBvYmo6IGFueSA9IHRoaXMuc2V0TG9va3VwRGlhbG9nQ29uZmlnKHJvdywgY29sdW1uLCBkYXRhKTtcbiAgICAgIG9ialsnY29tcG9uZW50J10gPSBsb29rdXBJbmZvLmNvbXBvbmVudDtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXMub3Blbkxvb2t1cERpYWxvZyhvYmopO1xuICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgIC5waXBlKHRha2UoMSkpIC8vIEVtaXQgb25seSBvbmNlIHdoZW4gdGhlIHpvbmUgYmVjb21lcyBzdGFibGVcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBkcmFnZ2FibGVEaWFsb2coY29sdW1uPy5maWVsZCA/IGNvbHVtbj8uZmllbGQgOiBjb2x1bW4/LmhlYWRlcilcbiAgICAgIH0pO1xuICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgaWYgKHJlcyAmJiBjb2x1bW4ub25SZXR1cm4pIHtcbiAgICAgICAgICBjb2x1bW4ub25SZXR1cm4ocmVzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG9wZW4gbG9va3VwIERpYWxvZ1xuICAgKi9cbiAgb3Blbkxvb2t1cERpYWxvZyhjb2x1bW4/OiBhbnksIHJvdzogYW55ID0ge30pIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQgPSBmYWxzZTtcbiAgICBjb25zdCBjb2x1bW5EYXRhID0gY29sdW1uLmNvbHVtbj8ubG9va3VwQ29udHJvbD8uZGF0YSA/IGNvbHVtbi5jb2x1bW4ubG9va3VwQ29udHJvbC5kYXRhIDogY29sdW1uLmNvbHVtbi5kYXRhO1xuICAgIGlmIChyb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2wpIHtcbiAgICAgIHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8uaGVhZGVyID8gY29sdW1uRGF0YS5oZWFkZXIgPSByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmhlYWRlciA6ICcnXG4gICAgICByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LndpZHRoID8gY29sdW1uRGF0YS53aWR0aCA9IHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8ud2lkdGggOiAnJ1xuICAgICAgcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5oZWlnaHQgPyBjb2x1bW5EYXRhLmhlaWdodCA9IHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8uaGVpZ2h0IDogJydcbiAgICAgIHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8udmFsdWVQcm9wID8gY29sdW1uRGF0YS52YWx1ZVByb3AgPSByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LnZhbHVlUHJvcCA6IFwiXCJcbiAgICAgIHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8ubGFiZWxQcm9wID8gY29sdW1uRGF0YS5sYWJlbFByb3AgPSByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmxhYmVsUHJvcCA6IFwiXCJcbiAgICAgIHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8uZGF0YSA/IGNvbHVtbkRhdGEuZGF0YSA9IHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8uZGF0YSA6ICcnXG4gICAgfVxuXG4gICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3Blbihjb2x1bW4uY29tcG9uZW50LCB7XG4gICAgICAuLi5jb2x1bW5EYXRhLFxuICAgICAgc3R5bGVDbGFzczogJ2xvb2t1cC1tb2RlbCcsXG4gICAgICBoZWlnaHQ6IGNvbHVtbkRhdGE/LmhlaWdodCA/IGNvbHVtbkRhdGE/LmhlaWdodCA6ICc5MHZoJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgc2VsZWN0aW9uOiBjb2x1bW4uc2VsZWN0aW9uLFxuICAgICAgICBmaWVsZDogY29sdW1uLmNvbHVtbi5maWVsZCxcbiAgICAgICAgbGFiZWxQcm9wOiBjb2x1bW4uY29sdW1uLmxvb2t1cENvbnRyb2w/LmRhdGE/LmxhYmVsUHJvcCxcbiAgICAgICAgLi4uY29sdW1uLnJvd0RhdGEsXG5cbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgIC5waXBlKHRha2UoMSkpIC8vIEVtaXQgb25seSBvbmNlIHdoZW4gdGhlIHpvbmUgYmVjb21lcyBzdGFibGVcbiAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZGlhbG9nUmVmWydkaWFsb2dDbG9zZSddID0gdGhpcy5kaWFsb2dSZWYuY2xvc2U7XG4gICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSA9IHRoaXMuaW50ZXJjZXB0RGlhbG9nQ2xvc2UuYmluZCh0aGlzKTtcbiAgICB9KTtcblxuICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgdGhpcy5kaWFsb2dSZWZbJ2RpYWxvZ0Nsb3NlJ10gPSB0aGlzLmRpYWxvZ1JlZi5jbG9zZTtcbiAgICAvLyAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlID0gdGhpcy5pbnRlcmNlcHREaWFsb2dDbG9zZS5iaW5kKHRoaXMpO1xuICAgIC8vIH0sIDgwMCk7XG5cbiAgICB0aGlzLnNldER5bmFtaWNEaWFsb2dSZWYodGhpcy5kaWFsb2dSZWYpO1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSByb3dbY29sdW1uLmNvbHVtbi5maWVsZF0/Lm5hbWU7XG4gICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgIHRoaXMucGFnZUxvZ2dlclNlcnZpY2Uuc2F2ZVBhZ2VMb2dnZXJJbmZvKHRoaXMucm91dGVyLnVybD8uc3Vic3RyaW5nKDEpLCBjb21wb25lbnROYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGlhbG9nUmVmO1xuICB9XG4gIFxuICBpbnRlcmNlcHREaWFsb2dDbG9zZShldmVudDogYW55KSB7XG4gICAgbGV0IGdyaWRTYXZlSW5EaWFsb2c6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3AtZGlhbG9nJyk7XG4gICAgaWYgKGdyaWRTYXZlSW5EaWFsb2c/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZvcm1TYXZlQnV0dG9uID0gZ3JpZFNhdmVJbkRpYWxvZ1swXT8ucXVlcnlTZWxlY3RvcignLmZvcm0tc2F2ZS1idXR0b24nKTtcbiAgICAgIGNvbnN0IGdyaWRTYXZlQWxsQnV0dG9uID0gZ3JpZFNhdmVJbkRpYWxvZ1swXT8ucXVlcnlTZWxlY3RvcignLnNhdmUtYWxsLWdyaWQnKTtcbiAgICAgIGlmICgoZm9ybVNhdmVCdXR0b24gfHwgZ3JpZFNhdmVBbGxCdXR0b24pICYmICh0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQgfHwgdGhpcy5mb3JtU2VydmljZS5maWVsZEZvY3VzZWRPdXQpKSB7XG4gICAgICAgIGlmIChjb25maXJtKFwiWW91IHdpbGwgbG9zZSBjaGFuZ2VzIG5vdCBzYXZlZCBvbiBwYWdlLiBXb3VsZCB5b3UgbGlrZSB0byBjb250aW51ZT9cIikgPT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMuZGlhbG9nUmVmPy5kaWFsb2dDbG9zZShldmVudCk7XG4gICAgICAgICAgdGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1lbHNle1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZj8uZGlhbG9nQ2xvc2UoZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIHNldCBkaWFsb2cgcmVmIHdoZW4gcG9wdXAgb3BlblxuICBzZXREeW5hbWljRGlhbG9nUmVmKHJlZikge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5kaWFsb2dDb21wb25lbnRSZWZNYXAuZ2V0KHJlZik7XG4gICAgY29uc3QgZHluYW1pY0NvbXBvbmVudCA9IGRpYWxvZ1JlZj8uaW5zdGFuY2UgYXMgRHluYW1pY0RpYWxvZ0NvbXBvbmVudDtcbiAgICBjb25zdCBhcmlhTGFiZWxsZWRCeSA9IGR5bmFtaWNDb21wb25lbnQuZ2V0QXJpYUxhYmVsbGVkQnkoKTtcbiAgICBkeW5hbWljQ29tcG9uZW50LmdldEFyaWFMYWJlbGxlZEJ5ID0gKCkgPT4gYXJpYUxhYmVsbGVkQnk7XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBkaWFsb2cgb24gbG9va3VwQ29udHJvbCBmaWVsZFxuICAgKi9cbiAgc2VsZWN0TG9va3VwRmllbGQoY29sdW1uOiBhbnksIHJvdz86IGFueSkge1xuICAgIHRoaXMub25DbGlja0V2ZW50KGNvbHVtbiwgcm93KTtcbiAgICBsZXQgb2JqOiBhbnkgPSB0aGlzLnNldExvb2t1cERpYWxvZ0NvbmZpZyhcbiAgICAgIHJvdyxcbiAgICAgIGNvbHVtbixcbiAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5kYXRhXG4gICAgICAgID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmRhdGEgOiBjb2x1bW4/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmRhdGFcbiAgICApO1xuXG4gICAgb2JqWydjb21wb25lbnQnXSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5jb21wb25lbnQgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uY29tcG9uZW50IDogY29sdW1uLmxvb2t1cENvbnRyb2w/LmNvbXBvbmVudDtcbiAgICBjb25zdCByZWYgPSB0aGlzLm9wZW5Mb29rdXBEaWFsb2cob2JqLCByb3cpO1xuICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgLnBpcGUodGFrZSgxKSkgLy8gRW1pdCBvbmx5IG9uY2Ugd2hlbiB0aGUgem9uZSBiZWNvbWVzIHN0YWJsZVxuICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgZHJhZ2dhYmxlRGlhbG9nKGNvbHVtbj8uZmllbGQgPyBjb2x1bW4/LmZpZWxkIDogY29sdW1uPy5oZWFkZXIpXG4gICAgfSk7XG4gICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKFxuICAgICAgKHJlcykgPT4ge1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgdGhpcy5ncmlkU2VydmljZS51c2VyU2VhcmNoZWQ9ZmFsc2U7XG4gICAgICAgICAgbGV0IHZhbHVlID0gc2V0RGlhbG9nUmVzcG9uc2UoXG4gICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgICBjb2x1bW4ubG9va3VwQ29udHJvbCxcbiAgICAgICAgICAgIHJlc1xuICAgICAgICAgICk7XG4gICAgICAgICAgcmVzID0gb2JqQ29udmVydFRvTG93ZXIocmVzKTtcbiAgICAgICAgICBsZXQgbGFiZWxQcm9wID0gY29sdW1uPy5sb29rdXBDb250cm9sPy5kYXRhPy5sYWJlbFByb3A/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgbGV0IHZhbHVlUHJvcCA9IGNvbHVtbj8ubG9va3VwQ29udHJvbD8uZGF0YT8udmFsdWVQcm9wPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGxldCBjb2x1bW5GaWVsZCA9IGNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICAgIGlmIChyb3c/Lmhhc093blByb3BlcnR5KGNvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW5GaWVsZF0gPSByZXNbdmFsdWVQcm9wID8gdmFsdWVQcm9wIDogY29sdW1uRmllbGRdO1xuICAgICAgICAgICAgICByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0gPSByZXNbbGFiZWxQcm9wID8gbGFiZWxQcm9wIDogY29sdW1uLmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW5GaWVsZF0gPSB7XG4gICAgICAgICAgICAgICAgdGV4dDogcmVzW2xhYmVsUHJvcCA/IGxhYmVsUHJvcCA6IGNvbHVtbi5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV0sXG4gICAgICAgICAgICAgICAgdmFsdWU6IHJlc1t2YWx1ZVByb3AgPyB2YWx1ZVByb3AgOiBjb2x1bW5GaWVsZF0sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLnZhbHVlKSB7XG4gICAgICAgICAgICB2YWx1ZVsnZmllbGQnXSA9IGNvbHVtbkZpZWxkO1xuICAgICAgICAgICAgaWYgKGxhYmVsUHJvcCB8fCB2YWx1ZVByb3ApIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbkZpZWxkXSA9IHtcbiAgICAgICAgICAgICAgICB0ZXh0OiByZXNbbGFiZWxQcm9wID8gbGFiZWxQcm9wIDogcmVzW2xhYmVsUHJvcF1dLFxuICAgICAgICAgICAgICAgIHZhbHVlOiByZXNbdmFsdWVQcm9wID8gdmFsdWVQcm9wIDogcmVzW2xhYmVsUHJvcF1dLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbkZpZWxkXSA9IHZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobGFiZWxQcm9wIHx8IHZhbHVlUHJvcCkge1xuICAgICAgICAgICAgICByb3dbY29sdW1uRmllbGRdID0ge1xuICAgICAgICAgICAgICAgIHRleHQ6IHJlc1tsYWJlbFByb3AgPyBsYWJlbFByb3AgOiB2YWx1ZVByb3AgPyB2YWx1ZVByb3AgOiByZXNbY29sdW1uRmllbGRdXSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogcmVzW3ZhbHVlUHJvcCA/IHZhbHVlUHJvcCA6IHJlc1tjb2x1bW5GaWVsZF1dLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbkZpZWxkXSA9IHJlc1tjb2x1bW5GaWVsZF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGRdKSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddID0geyAuLi5yb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSwgdGV4dDogcm93W2NvbHVtbi5maWVsZF0gfTtcbiAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHJvd1tjb2x1bW4uZmllbGRdPy52YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgaWYgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddKSB7XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSA9IHsgLi4ucm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10sIHRleHQ6IHsgdGV4dDogcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldLCB2YWx1ZTogcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0gfSB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSA9IHsgdGV4dDogeyB0ZXh0OiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0sIHZhbHVlOiByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXSB9IH07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHJlcykge1xuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddID0geyAuLi5yb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSwgdGV4dDogeyB0ZXh0OiByZXNbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXSwgdmFsdWU6IHJlc1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldIH0gfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sdW1uLm9uUmV0dXJuKSB7XG4gICAgICAgICAgY29sdW1uLm9uUmV0dXJuKHJlcywgcm93KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZF0gIT09IG9iai5zZWxlY3Rpb24pIHtcbiAgICAgICAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KHRydWUpO1xuICAgICAgICAgIGlmIChjb2x1bW4ub25DaGFuZ2UpIHtcbiAgICAgICAgICAgIGNvbHVtbi5vbkNoYW5nZShyb3cpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgICh7IGVycm9yIH0pID0+IHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYXBpRXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBzZXRGaWx0ZXJMb29rdXAoY29sdW1uOiBhbnkpIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnNldExvb2tVcEZpbHRlcihjb2x1bW4sIHRoaXMuZGlhbG9nU2VydmljZSk7XG4gIH1cblxuICAvLyBzZXQgbG9va3VwIHZhbHVlIHRoYXQgZGlzcGxheSBpbiByZWFkT25seU1vZGVcbiAgc2V0TG9va3VwUmVhZE9ubHlWYWx1ZShyb3csIGNvbHVtbikge1xuICAgIGxldCB2YWx1ZSA9ICcnO1xuICAgIGlmICh0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0KSA9PT0gXCJvYmplY3RcIiAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8udGV4dCAmJiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQpPy5oYXNPd25Qcm9wZXJ0eSgndGV4dCcpKSB7XG4gICAgICB2YWx1ZSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0LnRleHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgICBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICB2YWx1ZSA9IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8vIENoZWNrIGNhbGVuZGFyIHZhbHVlIGlzIGNoYW5nZWQgb3Igbm90XG4gIGNhbGVuZGFyQ2hhbmdlRXZlbnQoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XG4gICAgbGV0IHZhbHVlQ2hhbmdlOiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYgKFxuICAgICAgY29sdW1uLnRpbWVPbmx5ICYmXG4gICAgICB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyb3dbY29sdW1uLmZpZWxkXSwgJ2hoOm1tIGEnKSAhPT1cbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuY2FsZW5kYXJQcmV2aW91c1ZhbHVlLCAnaGg6bW0gYScpXG4gICAgKSB7XG4gICAgICB2YWx1ZUNoYW5nZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGNvbHVtbi5zaG93VGltZSAmJlxuICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZF0sICd5eXl5LU1NLWRkIGhoOm1tJykgIT09XG4gICAgICB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmNhbGVuZGFyUHJldmlvdXNWYWx1ZSwgJ3l5eXktTU0tZGQgaGg6bW0nKVxuICAgICkge1xuICAgICAgdmFsdWVDaGFuZ2UgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyb3dbY29sdW1uLmZpZWxkXSwgJ3l5eXktTU0tZGQnKSAhPT1cbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuY2FsZW5kYXJQcmV2aW91c1ZhbHVlLCAneXl5eS1NTS1kZCcpXG4gICAgKSB7XG4gICAgICB2YWx1ZUNoYW5nZSA9IHRydWU7XG4gICAgfVxuICAgIGlmICh2YWx1ZUNoYW5nZSkge1xuICAgICAgdGhpcy5icm93c2VyQ2xvc2VFdmVudCh0cnVlKTtcbiAgICAgIHRoaXMuZ2VuZXJhdGVSb3dzRGF0YUNvcHkgPSBmYWxzZTtcbiAgICAgIHRoaXMucm93VXBkYXRlQ2hhbmdlID0gdHJ1ZTtcblxuICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgIC5waXBlKHRha2UoMSkpIC8vIEVtaXQgb25seSBvbmNlIHdoZW4gdGhlIHpvbmUgYmVjb21lcyBzdGFibGVcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICAgIH0pO1xuICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgICAgLy8gfSwgMjUwKTtcbiAgICAgIGlmIChjb2x1bW4ub25DaGFuZ2UpIHtcbiAgICAgICAgY29sdW1uLm9uQ2hhbmdlKHJvdyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2FsZW5kYXJQcmV2aW91c1ZhbHVlID0gJyc7XG4gIH1cblxuICBzZXRBdXRvQ29tcGxldGV2YWx1ZU9uVHlwZShjb2x1bW46IGFueSwgcm93OiBhbnksIGV2ZW50OiBhbnkgPSBbXSkge1xuICAgIGxldCB2YWx1ZSA9IGV2ZW50Py50YXJnZXQ/LnZhbHVlO1xuICAgIGxldCBmaWVsZCA9IGNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFICYmIHZhbHVlICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgY29uc3QgdmFsdWVLZXkgPSBjb2x1bW4ub3B0aW9uVmFsdWUgPyBjb2x1bW4ub3B0aW9uVmFsdWUgOiBmaWVsZDtcbiAgICAgIGNvbnN0IGxhYmVsS2V5ID0gY29sdW1uLm9wdGlvbkxhYmVsID8gY29sdW1uLm9wdGlvbkxhYmVsIDogY29sdW1uLmRpc3BsYXlGaWVsZCA/IGNvbHVtbi5kaXNwbGF5RmllbGQgOiBmaWVsZDtcbiAgICAgIGlmKHJvd1tmaWVsZF0/Lmxlbmd0aCA+IDApe1xuICAgICAgICBjb25zdCBhbHJlYWR5RXhpc3QgPSByb3dbZmllbGRdPy5maW5kKChyb3dJbmZvKT0+IHJvd0luZm9bZmllbGRdID09PSB2YWx1ZSk7XG4gICAgICAgIGlmKCFhbHJlYWR5RXhpc3Qpe1xuICAgICAgICAgIHJvd1tmaWVsZF0gPSBbLi4ucm93W2ZpZWxkXSwgeyBbbGFiZWxLZXk/LnRvTG93ZXJDYXNlKCldOiB2YWx1ZSwgW3ZhbHVlS2V5Py50b0xvd2VyQ2FzZSgpXTogdmFsdWUsIFtmaWVsZD8udG9Mb3dlckNhc2UoKV06IHZhbHVlIH1dO1xuICAgICAgICB9XG4gICAgICB9ZWxzZXtcbiAgICAgICAgcm93W2ZpZWxkXSA9IFt7IFtsYWJlbEtleT8udG9Mb3dlckNhc2UoKV06IHZhbHVlLCBbdmFsdWVLZXk/LnRvTG93ZXJDYXNlKCldOiB2YWx1ZSwgW2ZpZWxkPy50b0xvd2VyQ2FzZSgpXTogdmFsdWUgfV07XG4gICAgICB9XG4gICAgfVxuICAgIGlmKGV2ZW50Py50YXJnZXQ/LnZhbHVlKXtcbiAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9ICcnO1xuICAgIH1cbiAgICBcbiAgfVxuICBcbiAgb25BdXRvQ29tcGxldGVLZXlFbnRlckV2ZW50KGUsIGNvbHVtbiwgcm93KSB7XG4gICAgaWYgKGNvbHVtbi50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUpIHtcbiAgICAgIGlmIChjb2x1bW4uYWxsb3dBdXRvQ29tcGxldGVTYXZlICYmIGUudGFyZ2V0LnZhbHVlICYmICFjb2x1bW4uZGF0YT8ubGVuZ3RoKSB7XG4gICAgICAgIC8vL2NoZWNrIHRoZSBjb3JyZWN0IGZvcm1hdCBpZiBkYXRhLmNvbnRhaW5zIGN1eiBpdHMgYW4gYXJyYXkgb2YgYXJyYXlzIHdpdGggb2JqZWN0cy5cbiAgICAgICAgaWYgKGNvbmZpcm0oYERvIHlvdSB3YW50IHRvIGFkZCAke2UudGFyZ2V0LnZhbHVlfSB0byB0aGUgc2VsZWN0aW9uP2ApKSB7XG4gICAgICAgICAgaWYgKGNvbHVtbi51bmlxdWVLZXkpIHtcbiAgICAgICAgICAgIHZhciBtZXNzYWdlID0gdGhpcy5ncmlkU2VydmljZVxuICAgICAgICAgICAgICAuYWRkQXV0b0NvbXBsZXRlVmFsdWUoY29sdW1uLnVuaXF1ZUtleSwgZS50YXJnZXQudmFsdWUsIGNvbHVtbiwgcm93KVxuICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uLm9uUmV0dXJuKSB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4ub25SZXR1cm4oZS50YXJnZXQudmFsdWUsIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgb25Gb2N1c0V2ZW50KGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdzogYW55KSB7XG4gICAgdGhpcy5udW1lcmljVmFsdWVbY29sdW1uLmZpZWxkXSA9IHJvd1tjb2x1bW4uZmllbGRdXG4gIH1cblxuICBvbkZvY3VzT3V0RXZlbnQoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnksIGV2ZW50OiBhbnkgPScnKSB7XG4gICAgdGhpcy5zZXRBdXRvQ29tcGxldGV2YWx1ZU9uVHlwZShjb2x1bW4sIHJvdywgZXZlbnQpXG4gICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTlVNRVJJQyAmJiB0aGlzLm51bWVyaWNWYWx1ZVtjb2x1bW4uZmllbGRdICE9PSByb3dbY29sdW1uLmZpZWxkXSkge1xuICAgICAgdGhpcy5vbkNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KVxuICAgIH1cbiAgICBpZiAoY29sdW1uLnR5cGUgIT09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUgfHwgKCFjb2x1bW4uYWxsb3dBdXRvQ29tcGxldGVTYXZlKSkge1xuICAgICAgdGhpcy5ncmlkU2VydmljZS5jaGVja1ZhbGlkaXR5KFtjb2x1bW5dLCByb3cpO1xuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSkge1xuICAgICAgICB0aGlzLmNhbGVuZGFyQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbHVtbi5vbkZvY3VzT3V0KSB7XG4gICAgICAgIGNvbHVtbi5vbkZvY3VzT3V0KHJvdyk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBjb2x1bW4ub25SZXR1cm4gJiZcbiAgICAgICAgY29sdW1uLnR5cGUgIT09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVRcbiAgICAgICkge1xuICAgICAgICBjb2x1bW4ub25SZXR1cm4ocm93KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnJvd1VwZGF0ZSA9IGZhbHNlO1xuICB9XG5cbiAgc2V0UmVwb3J0TmFtZShjb2x1bW46IElHcmlkUmVwb3J0QnRuLCByb3c6IGFueSkge1xuICAgIGxldCByZXBvcnQ6IGFueSA9ICcnO1xuICAgIGlmIChjb2x1bW4ucmVwb3J0SWQpIHtcbiAgICAgIHJlcG9ydCA9IGNvbHVtbi5yZXBvcnRJZDtcbiAgICB9IGVsc2UgaWYgKHJvd1tjb2x1bW4/LmxhYmVsPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXSAmJiByb3dbY29sdW1uPy5sYWJlbD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LnJlcG9ydFVuaXF1ZUtleSkge1xuICAgICAgcmVwb3J0ID0gcm93W2NvbHVtbj8ubGFiZWw/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5yZXBvcnRVbmlxdWVLZXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcG9ydCA9IGNvbHVtbi5yZXBvcnRVbmlxdWVLZXk7XG4gICAgfVxuICAgIHJldHVybiByZXBvcnQ7XG4gIH1cblxuICBzZXRSZXBvcnRQYXJhbXMoY29sdW1uOiBJR3JpZFJlcG9ydEJ0biwgcm93OiBhbnkpIHtcbiAgICBsZXQgcmVwb3J0UGFyYW1zOiBhbnlbXSA9IFtdO1xuICAgIGlmIChyb3dbY29sdW1uPy5sYWJlbD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10gJiYgcm93W2NvbHVtbj8ubGFiZWw/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5yZXBvcnRQYXJhbSkge1xuICAgICAgcmVwb3J0UGFyYW1zID0gcm93W2NvbHVtbj8ubGFiZWw/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5yZXBvcnRQYXJhbTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVwb3J0UGFyYW1zID0gY29sdW1uLnBhcmFtcztcbiAgICB9XG4gICAgcmV0dXJuIHJlcG9ydFBhcmFtcztcbiAgfVxuXG4gIHNldEZpbHRlckZvY3VzT3V0KGNvbDogYW55LCBmaWx0ZXI/OiBhbnksIGV2ZW50PzogYW55KSB7XG4gICAgdGhpcy5zZXRHcmlkRmlsdGVyKGNvbCwgZmlsdGVyLCBldmVudCk7XG4gIH1cbiAgc2V0R3JpZEZpbHRlcihjb2w6IElHcmlkQ29sdW1uLCBmaWx0ZXI/OiBhbnksIGV2ZW50PzogYW55KSB7XG4gICAgdGhpcy5ncmlkRmlsdGVyT2JqID0geyBjb2x1bW46IGNvbCwgZmlsdGVyOiBmaWx0ZXIsIGV2ZW50OiBldmVudCB9O1xuICAgIGNvbnN0IG5ld0NvbHVtbjogYW55ID0geyAuLi5jb2wgfTtcbiAgICAvL2NoYW5nZSBmaWx0ZXIgY2FsZW5kYXIgZm9ybWF0XG4gICAgaWYgKG5ld0NvbHVtbi50eXBlID09PSAnZGF0ZScgJiYgbmV3Q29sdW1uLmZpbHRlclZhbHVlICYmIG5ld0NvbHVtbi5maWx0ZXI/LnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUikge1xuICAgICAgbmV3Q29sdW1uLmZpbHRlclZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oXG4gICAgICAgIGNvbC5maWx0ZXJWYWx1ZS50b1N0cmluZygpLnRyaW0oKSxcbiAgICAgICAgJ3l5eXktTU0tZGQnXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmZpbHRlck9iaihuZXdDb2x1bW4pO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdhcHBseUZpbHRlcicsIEpTT04uc3RyaW5naWZ5KGZhbHNlKSk7XG4gIH1cblxuICBmaWx0ZXJPYmooY29sOiBhbnkpIHtcbiAgICBjb25zdCBvYmogPSB7XG4gICAgICBmaWVsZDogY29sLmZpZWxkLFxuICAgICAgbWF0Y2hNb2RlOiBjb2wubWF0Y2hNb2RlID8gY29sLm1hdGNoTW9kZSA6ICdzdGFydHNXaXRoJyxcbiAgICAgIG9wZXJhdG9yOiBjb2wub3BlcmF0b3IgPyBjb2wub3BlcmF0b3IgOiAnYW5kJyxcbiAgICAgIHRhYmxlQWxpYXM6IGNvbC50YWJsZUFsaWFzID8gY29sLnRhYmxlQWxpYXMgOiAnJyxcbiAgICAgIHZhbHVlOiBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUID8gY29sLmZpbHRlclZhbHVlLnRvU3RyaW5nKCkgOiBjb2wuZmlsdGVyVmFsdWUsXG4gICAgfTtcbiAgICB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5wdXNoKG9iaik7XG4gIH1cblxuICBhcHBseUVudGVyRXZlbnQoZmlsdGVyOiBhbnksIGV2ZW50OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgdGhpcy5ncmlkU2VydmljZS51c2VyU2VhcmNoZWQ9dHJ1ZTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmFwcGx5RmlsdGVyRXZlbnQgPSB0cnVlO1xuICAgIHRoaXMucm93VXBkYXRlQ2hhbmdlID0gZmFsc2U7XG4gICAgdGhpcy5hdXRvTG9hZERhdGEgPSB0cnVlO1xuICAgIC8vdGhpcy5sb2FkaW5nPXRydWU7XG4gICAgdGhpcy5vbkFwcGx5RmlsdGVyLmVtaXQoKTtcbiAgICB0aGlzLmZpbHRlck9iaihjb2x1bW4pO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdhcHBseUZpbHRlcicsIEpTT04uc3RyaW5naWZ5KHRydWUpKTtcbiAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5NVUxUSVNFTEVDVCkge1xuICAgICAgZmlsdGVyKGNvbHVtbj8uZmlsdGVyVmFsdWU/LnRvU3RyaW5nKCkpXG4gICAgfSBlbHNlIGlmIChjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gdGhpcy5kcm9wRG93bkZpbHRlcj8uY29sdW1uPy5maWx0ZXI/LnR5cGUpIHtcbiAgICAgIHRoaXMuZHJvcERvd25GaWx0ZXIuZmlsdGVyKHRoaXMuZHJvcERvd25GaWx0ZXIuZXZlbnQudGFyZ2V0KTtcbiAgICB9IGVsc2UgaWYgKGZpbHRlciAmJiBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4gJiYgY29sdW1uPy5maWx0ZXI/LnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DSEVDS0JPWCAmJiBjb2x1bW4uZmlsdGVyaW5nICE9PSBmYWxzZSkge1xuICAgICAgZmlsdGVyKGV2ZW50Py5jaGVja2VkKTtcbiAgICB9IGVsc2UgaWYgKGZpbHRlcikge1xuICAgICAgZmlsdGVyKGV2ZW50Py50YXJnZXQ/LnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVOdWxsQ2FsZW5kYXIoY29sdW1uOiBJR3JpZENvbHVtbiwgZmlsdGVyOiBhbnksIGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoY29sdW1uLmZpbHRlclZhbHVlID09PSBudWxsKSB7XG4gICAgICB0aGlzLnJlbW92ZU51bGxGaWx0ZXJzKGNvbHVtbik7XG4gICAgICB0aGlzLnNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCBldmVudCk7XG4gICAgfVxuICB9XG5cbiAgYmFja3NwYWNlRXZlbnQoZXZlbnQ6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICBldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnICYmXG4gICAgICAoY29sdW1uLmZpbHRlclZhbHVlPy50b1N0cmluZygpLmxlbmd0aCA9PT0gMSB8fFxuICAgICAgICBjb2x1bW4uZmlsdGVyVmFsdWU/LnRvU3RyaW5nKCkgPT09ICcnIHx8XG4gICAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9PT0gbnVsbClcbiAgICApIHtcbiAgICAgIHRoaXMucmVtb3ZlTnVsbEZpbHRlcnMoY29sdW1uKTtcbiAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSAmJiBjb2x1bW4uZmlsdGVyVmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMucmVtb3ZlTnVsbEZpbHRlcnMoY29sdW1uKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVOdWxsRmlsdGVycyhjb2x1bW46IGFueSkge1xuICAgIGlmICh0aGlzLmdsb2JhbEZpbHRlcnNBcnJheSAmJiB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgYXJyID0gWy4uLnRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5XTtcbiAgICAgIGxldCBpbmRleCA9IGFyci5maW5kSW5kZXgoKGkpID0+IGkuZmllbGQgPT09IGNvbHVtbi5maWVsZCk7XG4gICAgICBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5ID0gYXJyO1xuICAgIH1cbiAgICBsZXQgaW5kZXggPSB0aGlzLnNlcnZlckZpbHRlcnM/LmZpbHRlcnM/LmZpbmRJbmRleCgoaSkgPT4ge2kuZmllbGQgPT09IGNvbHVtbi5maWVsZH0pXG4gICAgdGhpcy5zZXJ2ZXJGaWx0ZXJzPy5maWx0ZXJzPy5zcGxpY2UoaW5kZXgsMSlcbiAgfVxuXG4gIC8vIFJlbW92aW5nIEhlYWRlciBGaWx0ZXIgVmFsdWUgdXNpbmcgQmFja3NwYWNlIGtleSBFdmVudCBvciBEZWxldGUga2V5IEV2ZW50LlxuICByZW1vdmluZ0ZpbHRlcnMoZXZlbnQ6IGFueSwgY29sdW1uOiBJR3JpZENvbHVtbikge1xuICAgIGlmIChcbiAgICAgIChldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnIHx8IGV2ZW50LmtleSA9PT0gJ0RlbGV0ZScpICYmXG4gICAgICBjb2x1bW4uZmlsdGVyVmFsdWU/LnRvU3RyaW5nKCkubGVuZ3RoID09PSAwXG4gICAgKSB7XG4gICAgICBsZXQgc2VhcmNoRmlsdGVycztcbiAgICAgIGlmICghdGhpcy5zb2Z0Q2FjaGluZyAmJiB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCkge1xuICAgICAgICBzZWFyY2hGaWx0ZXJzID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnU2V0RmlsdGVycy0nICsgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmwpIGFzIGFueSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgIHNlYXJjaEZpbHRlcnMgPSB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1t0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHRoaXMuY3VycmVudFVybF07XG4gICAgICB9XG4gICAgICBpZiAoc2VhcmNoRmlsdGVycyAmJiBzZWFyY2hGaWx0ZXJzLmZpbHRlcnMpIHtcbiAgICAgICAgaWYgKHNlYXJjaEZpbHRlcnMuZmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbGV0IGluZGV4ID0gc2VhcmNoRmlsdGVycy5maWx0ZXJzLmZpbmRJbmRleChcbiAgICAgICAgICAgICh4OiBhbnkpID0+IHguZmllbGQgPT09IGNvbHVtbi5maWVsZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIGlmIChzZWFyY2hGaWx0ZXJzLmZpbHRlcnMubGVuZ3RoID09PSAxICYmIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3RoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsXSA9IFtdO1xuICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnU2V0RmlsdGVycy0nICsgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VhcmNoRmlsdGVycy5maWx0ZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgIGlmICghdGhpcy5zb2Z0Q2FjaGluZyAmJiB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCkge1xuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdTZXRGaWx0ZXJzLScgKyB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHRoaXMuY3VycmVudFVybCwgSlNPTi5zdHJpbmdpZnkoc2VhcmNoRmlsdGVycykpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdID0gc2VhcmNoRmlsdGVycztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCBDbGljayBCdXR0b24gRXZlbnQgb24gR3JpZC5cbiAgb25DbGlja0J1dHRvbihjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcbiAgICB0aGlzLm9wZW5HcmlkRGlhbG9nKGNvbHVtbiwgcm93KTtcbiAgfVxuXG4gIC8vIEludm9rZSBvbkNsaWNrIEV2ZW50LlxuICBvbkNsaWNrRXZlbnQoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XG4gICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSyAmJiAoY29sdW1uLmVkaXRMaW5rID09PSBmYWxzZSB8fCBjb2x1bW4uZWRpdExpbmsgPT09IHVuZGVmaW5lZCkgJiYgY29sdW1uLmVkaXRhYmxlICE9PSB0cnVlICYmIGNvbHVtbi5kaXNhYmxlZCAhPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5vbkNsaWNrRXZlbnRUcmlnZ2VyZWQgPSB0cnVlO1xuICAgIH1cbiAgICAvLyBpZihjb2x1bW4udHlwZT09PUVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgJiYgcm93W2NvbHVtbi5maWVsZF0pe1xuICAgIC8vICAgdGhpcy5vcGVuR3JpZERpYWxvZyhjb2x1bW4scm93KVxuICAgIC8vIH1cbiAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFICYmIHJvd1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICB0aGlzLmNhbGVuZGFyUHJldmlvdXNWYWx1ZSA9IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAhcm93W2NvbHVtbi5maWVsZF0gJiZcbiAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSAmJlxuICAgICAgKGNvbHVtbi5zaG93VGltZSB8fCBjb2x1bW4udGltZU9ubHkpICYmXG4gICAgICBjb2x1bW4ubWludXRlc0ludGVydmFsXG4gICAgKSB7XG4gICAgICB0aGlzLmRlZmF1bHREYXRlID0gbmV3IERhdGUoc2V0TWludXRlc0ludGVydmFsKG5ldyBEYXRlKCkpKTtcbiAgICB9XG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4ub25DbGljayAmJiBjb2x1bW4uZGlzYWJsZWQgIT09IHRydWUgJiYgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5hY3Rpb24/LmRpc2FibGVkICE9PSB0cnVlIHx8ICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzYWJsZWQgIT09IHRydWUpKSB7XG4gICAgICBjb2x1bW4ub25DbGljayhyb3cpO1xuICAgIH1cbiAgfVxuXG4gIHNldE11bHRpU2VsZWN0VmFsdWUoY29sdW1uLCByb3cpIHtcbiAgICBpZiAocm93W2NvbHVtbi5maWVsZF0gJiYgIUFycmF5LmlzQXJyYXkocm93W2NvbHVtbi5maWVsZF0pKSB7XG4gICAgICBpZiAodHlwZW9mIChyb3dbY29sdW1uLmZpZWxkXSkgPT09IFwic3RyaW5nXCIgJiYgIXJvd1tjb2x1bW4uZmllbGRdPy5pbmNsdWRlcygnLCcpKSB7XG4gICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gW3Jvd1tjb2x1bW4uZmllbGRdXTtcbiAgICAgIH0gZWxzZSBpZiAocm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCcsJykpIHtcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXT8uc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJvd1tjb2x1bW4uZmllbGRdO1xuICB9XG5cbiAgLy8gc2V0IHRoZSBzZWxlY3QgdmFsdWUgb2YgbXVsdGktc2VsZWN0XG4gIHNob3dPcHRpb24oY29sdW1uLCByb3cpIHtcbiAgICByb3dbY29sdW1uLmZpZWxkXSA9IHRoaXMuc2V0TXVsdGlTZWxlY3RWYWx1ZShjb2x1bW4sIHJvdyk7XG4gIH1cblxuICBvbkNsZWFyVmFsdWUoY29sdW1uLCByb3cpIHtcbiAgICBpZiAoY29sdW1uPy50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiYgIXJvd1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICByb3dbY29sdW1uLmZpZWxkXSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gSW52b2tlIG9uQ2hhbmdlIEV2ZW50XG4gIG9uQ2hhbmdlRXZlbnQoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XG4gICAgLy8gc2V0IGRyb3Bkb3duIGRpc3BsYXlGaWVsZCB2YWx1ZSBiYXNlIG9uIG9wdGlvbkxhYmVsICYgb3B0aW9uVmFsdWUuXG4gICAgdGhpcy5ncmlkVmFsaWRhdGlvbihjb2x1bW4sIHJvdywgdHJ1ZSlcbiAgICB0aGlzLmRpc3BsYXlGaWVsZERyb3Bkb3duVmFsdWUoY29sdW1uLCByb3cpO1xuICAgIHRoaXMub25DbGVhclZhbHVlKGNvbHVtbiwgcm93KTtcbiAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KHRydWUpO1xuICAgIHRoaXMucm93VXBkYXRlQ2hhbmdlID0gdHJ1ZTtcbiAgICBpZiAoY29sdW1uLm9uQ2hhbmdlKSB7XG4gICAgICBjb2x1bW4ub25DaGFuZ2Uocm93KTtcbiAgICB9XG4gICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMub25DbGlja0V2ZW50VHJpZ2dlcmVkID09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLnNldERyb3Bkb3duZGF0YVZhbHVlID0gZmFsc2VcbiAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuZ3JpZFNlcnZpY2Uucm93VXBkYXRlID0gZmFsc2U7XG4gICAgdGhpcy5nZW5lcmF0ZVJvd3NEYXRhQ29weSA9IGZhbHNlXG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgJiYgY29sdW1uLmFnZ3JlZ2F0ZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmFnZ3JlZ2F0ZUZvb3RlciA9IHRydWU7XG4gICAgICB0aGlzLnNldEFnZ3JlZ2F0ZVRleHQoY29sdW1uKTtcbiAgICB9XG4gIH1cblxuICBjaGVja0JveENoYW5nZUV2ZW50KGV2ZW50OiBhbnksIGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdykge1xuICAgIHJvd1tjb2x1bW4uZmllbGRdID0gZXZlbnQ7XG4gICAgaWYgKHRoaXMucm93c0NoYW5nZS5vYnNlcnZlcnM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnJvd1VwZGF0ZSA9IGZhbHNlO1xuICAgIHRoaXMuZ2VuZXJhdGVSb3dzRGF0YUNvcHkgPSBmYWxzZVxuICAgIHRoaXMucm93VXBkYXRlQ2hhbmdlID0gdHJ1ZVxuICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICB9XG5cbiAgLy8gc2V0IGRyb3Bkb3duIGRpc3BsYXlGaWVsZCB2YWx1ZSBiYXNlIG9uIG9wdGlvbkxhYmVsICYgb3B0aW9uVmFsdWUuXG4gIGRpc3BsYXlGaWVsZERyb3Bkb3duVmFsdWUoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XG4gICAgaWYgKFxuICAgICAgY29sdW1uPy50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiZcbiAgICAgIGNvbHVtbi5kaXNwbGF5RmllbGQgJiZcbiAgICAgIGNvbHVtbi5kaXNwbGF5RmllbGQ/Lmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIGNvbnN0IGtleTogYW55ID0gT2JqZWN0LmtleXMocm93KT8uZmluZChcbiAgICAgICAgKHJvd0luZm8pID0+XG4gICAgICAgICAgcm93SW5mbz8udG9Mb3dlckNhc2UoKSA9PT0gY29sdW1uLmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuICAgICAgY29uc3QgZGlzcGxheUZpZWxkVmFsdWUgPSBjb2x1bW4uZGF0YS5maW5kKFxuICAgICAgICAocmVjb3JkOiBhbnkpID0+XG4gICAgICAgICAgcmVjb3JkW2NvbHVtbi5vcHRpb25WYWx1ZV0/LnRvU3RyaW5nKCkgPT09XG4gICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKClcbiAgICAgICk7XG4gICAgICBpZiAoa2V5ICYmIGRpc3BsYXlGaWVsZFZhbHVlKSB7XG4gICAgICAgIHJvd1trZXldID0gZGlzcGxheUZpZWxkVmFsdWVbY29sdW1uLm9wdGlvbkxhYmVsXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBZGQgYXV0b1NlYXJjaCBvbiBHcmlkLlxuICBhdXRvU2VhcmNoKGV2ZW50OiBhbnksIGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIGlmIChldmVudCAmJiBjb2x1bW4gJiYgcm93KSB7XG4gICAgICBjb2x1bW4ub25SZXR1cm4oZXZlbnQucXVlcnksIGNvbHVtbiwgcm93KTtcbiAgICB9XG4gIH1cblxuICAvLyBSZWZyZXNoIGdyaWRcbiAgcmVmcmVzaEdyaWQoKSB7XG4gICAgdGhpcy5yZWxvYWRQYWdlID0gaW50ZXJ2YWwodGhpcy5zZXRHcmlkUmVmcmVzaFRpbWUpLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZ3JpZGZpbHRlciA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5ncmlkZmlsdGVyID0geyBmaWx0ZXJzOiBbXSwgc29ydHM6IFtdIH07XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zZXRHcmlkUmVmcmVzaFRpbWUpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVTZXJ2ZXJTaWRlRXZlbnRzKHRoaXMuZ3JpZGZpbHRlcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBSZW1vdmUgRmlsdGVyVmFsdWVzXG4gIGNsZWFyZ3JpZEZpbHRlcnNWYWx1ZSgpIHtcbiAgICBjb25zdCBnbG9iYWxGaWx0ZXJDbGVhclZhbHVlQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgICAnY2xlYXJHbG9iYWxGaWx0ZXJCdG4nXG4gICAgKTtcbiAgICBpZiAoZ2xvYmFsRmlsdGVyQ2xlYXJWYWx1ZUJ0bikge1xuICAgICAgZ2xvYmFsRmlsdGVyQ2xlYXJWYWx1ZUJ0bi5jbGljaygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnMgJiYgdGhpcy5zZWxlY3RlZENvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zZXJ2ZXJGaWx0ZXJzLmZpbHRlcnMgPSBbXTtcbiAgICAgIGxldCBzZWFyY2hGaWx0ZXJzID0gdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdO1xuICAgICAgc2VhcmNoRmlsdGVycz8uZmlsdGVycz8uZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICAgIGNvbC52YWx1ZSA9IG51bGw7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgICBjb2wuZmlsdGVyVmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLmZpbHRlck9iaihjb2wpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZWRpdEFsbFJvd3NBdE9uY2UoKSB7XG4gICAgaWYgKHRoaXMuZWRpdFJvd1Blcm1pc3Npb24pIHtcbiAgICAgIGlmICh0aGlzLmdldENsYXNzRm9yRWRpdEFsbFJvd3MoJ2VkaXRSb3cnKSkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnMuc29tZSgoY29sdW1uKSA9PiBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4gJiYgKGNvbHVtbi5maWx0ZXJpbmcgPT09IHRydWUgfHwgY29sdW1uLmZpbHRlcmluZyA9PT0gdW5kZWZpbmVkKSkpIHtcbiAgICAgICAgICB0aGlzLmVkaXRBbGxSZWNvcmQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc29ydERpc2FibGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzYXZlQWxsUm93c0F0T25jZSgpIHtcbiAgICB0aGlzLmdldENsYXNzRm9yRWRpdEFsbFJvd3MoJ3NhdmVSb3cnKTtcbiAgfVxuXG4gIC8vIHJlc2V0IHRoZSBncmlkIHJvd3NWYWx1ZSB0byBvcmlnbmFsIHZhbHVlc1xuICBjYW5jZWxBbGxSb3dzQXRPbmNlKCkge1xuICAgIHRoaXMucm93c0RhdGEgPSBbLi4udGhpcy5yb3dzRGF0YUNvcHldO1xuICAgIHRoaXMucm93c0RhdGFDb3B5ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnJvd3NEYXRhKSk7XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnM/LmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSkge1xuICAgICAgICB0aGlzLnJvd3NEYXRhPy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZF0pIHtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gbmV3IERhdGUocm93W2NvbHVtbi5maWVsZF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgIH0pO1xuICAgIGlmICh0aGlzLmNvbHVtbnM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSAmJiBjb2x1bW4uYWdncmVnYXRlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmFnZ3JlZ2F0ZUZvb3RlciA9IHRydWU7XG4gICAgICAgICAgdGhpcy5zZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHRoaXMub25DYW5jZWxBbGxSb3dzLmVtaXQodGhpcy5yb3dzRGF0YSk7XG4gIH1cbiAgZ2V0Q2xhc3NGb3JFZGl0QWxsUm93cyhjbGFzc05hbWU6IHN0cmluZyA9ICcnKSB7XG4gICAgbGV0IHN1Y2Nlc3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpZiAoY2xhc3NOYW1lID09PSAnZWRpdFJvdycpIHtcbiAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICB0aGlzLm9uUm93RWRpdEluaXQocm93KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGdldEJ0bnM6IGFueSA9IHRoaXMuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudD8uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWUpO1xuICAgIGlmIChnZXRCdG5zICYmIGdldEJ0bnMubGVuZ3RoID4gMCkge1xuICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICBpZiAoY2xhc3NOYW1lID09PSAnc2F2ZVJvdycpIHtcbiAgICAgICAgdGhpcy5lZGl0QWxsUmVjb3JkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2F2ZUFsbFJlY29yZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IHJlY29yZHMkID0gW107XG4gICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBnZXRCdG5zKSB7XG4gICAgICAgICAgICBjb25zdCByb3dTYXZlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBpdGVtLmNsaWNrKCk7XG4gICAgICAgICAgICAgIHJlc29sdmUoaXRlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlY29yZHMkLnB1c2gocm93U2F2ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFByb21pc2UuYWxsKHJlY29yZHMkKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tsaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5vblJvd1VwZGF0ZS5lbWl0KHRoaXMuc2V0Um93c0RhdGEodGhpcy5jaGVja2xpc3QpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlUm93c0RhdGFDb3B5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdGhpcy5vblJvd1VwZGF0ZS5lbWl0KHRoaXMuc2F2ZVJlY29yZEFycmF5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2F2ZVJlY29yZEFycmF5ID0gW107XG4gICAgICAgICAgICB0aGlzLmVkaXRBbGxSb3dzQXRPbmNlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNhdmVBbGxSZWNvcmQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGNsYXNzTmFtZSA9PSAnY2FuY2VsUm93Jykge1xuICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgZ2V0QnRucykge1xuICAgICAgICAgICAgICBpdGVtLmNsaWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdWNjZXNzO1xuICB9XG5cbiAgLy9Gb2N1c2VkIGNhbGVuZGFyIGlucHV0IG9uIHNlbGVjdCBkYXRlXG4gIHNlbGVjdERhdGUoY29sdW1uOiBhbnkpIHtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjb2x1bW4uZmllbGQpPy5mb2N1cygpO1xuICB9XG5cbiAgLy9hcHBseSBmaWx0ZXIgb24gZ3JpZCB3aGVuIHNlYXJjaCBidG4gY2xpY2tlZFxuICBhcHBseUdyaWRGaWx0ZXJCdG4oKSB7XG4gICAgIHRoaXMuZ3JpZFNlcnZpY2UudXNlclNlYXJjaGVkPXRydWU7XG4gICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gZmFsc2U7XG4gICAgIHRoaXMuZ3JpZFNlcnZpY2Uucm93VXBkYXRlID0gZmFsc2U7XG4gICAgIHRoaXMucm93VXBkYXRlQ2hhbmdlID0gZmFsc2U7XG4gICAgIGxldCBmaWx0ZXJJbkRpYWxvZzogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncC1kaWFsb2cnKTtcbiAgICAgbGV0IGdsb2JhbEZpbHRlckFwcGx5QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zZWFyY2hidG5JZCk7XG4gICAgIGlmIChmaWx0ZXJJbkRpYWxvZyAmJiBmaWx0ZXJJbkRpYWxvZy5sZW5ndGggPiAwKSB7XG4gICAgICAgY29uc3QgZ2xvYmFsU2VhcmNoQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zZWFyY2hidG5JZCk7XG4gICAgICAgaWYgKGdsb2JhbFNlYXJjaEJ0bikge1xuICAgICAgICAgZ2xvYmFsU2VhcmNoQnRuLmNsaWNrKCk7XG4gICAgICAgfSBlbHNlIGlmICh0aGlzLmdyaWRGaWx0ZXJPYmogJiYgT2JqZWN0LmtleXModGhpcy5ncmlkRmlsdGVyT2JqKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICB0aGlzLmFwcGx5RW50ZXJFdmVudChcbiAgICAgICAgICAgdGhpcy5ncmlkRmlsdGVyT2JqLmZpbHRlcixcbiAgICAgICAgICAgdGhpcy5ncmlkRmlsdGVyT2JqLmV2ZW50LFxuICAgICAgICAgICB0aGlzLmdyaWRGaWx0ZXJPYmouY29sdW1uXG4gICAgICAgICApO1xuICAgICAgIH1cbiAgICAgfSBlbHNlIGlmIChnbG9iYWxGaWx0ZXJBcHBseUJ0bikge1xuICAgICAgIGdsb2JhbEZpbHRlckFwcGx5QnRuLmNsaWNrKCk7XG4gICAgIH0gZWxzZSB7XG4gICAgICAgaWYgKHRoaXMuZ3JpZEZpbHRlck9iaiAmJiBPYmplY3Qua2V5cyh0aGlzLmdyaWRGaWx0ZXJPYmopLmxlbmd0aCA+IDApIHtcbiAgICAgICAgIHRoaXMuYXBwbHlFbnRlckV2ZW50KFxuICAgICAgICAgICB0aGlzLmdyaWRGaWx0ZXJPYmouZmlsdGVyLFxuICAgICAgICAgICB0aGlzLmdyaWRGaWx0ZXJPYmouZXZlbnQsXG4gICAgICAgICAgIHRoaXMuZ3JpZEZpbHRlck9iai5jb2x1bW5cbiAgICAgICAgICk7XG4gICAgICAgfVxuICAgICB9XG4gICAgICB0aGlzLmNoZWNrbGlzdCA9IFtdO1xuICAgICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBbXTtcbiAgIH1cblxuICAvLyBpbnZva2UgbXVsdGlTZWxlY3Rpb24gY2xpY2sgZXZlbnRcbiAgbXVsdGlDaGVja0JveE9uY2xpY2socm93SW5mbzogYW55LCBldmVudDogYW55LCBzaW5nbGVTZWxlY3Rpb246IGJvb2xlYW4gPSBmYWxzZSkge1xuXG4gICAgaWYgKCFzaW5nbGVTZWxlY3Rpb24pIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJvd0luZm8pICYmIHJvd0luZm8/Lmxlbmd0aCA+IDAgJiYgZXZlbnQ/LnRhcmdldD8uYXJpYUNoZWNrZWQgJiYgZXZlbnQ/LnRhcmdldD8uYXJpYUNoZWNrZWQ/LnRvU3RyaW5nKCkgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgIHRoaXMuY2hlY2tsaXN0ID0gWy4uLnJvd0luZm9dO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJvd0luZm8pICYmIChldmVudD8udGFyZ2V0Py5hcmlhQ2hlY2tlZCA9PSBudWxsIHx8IGV2ZW50Py50YXJnZXQ/LmFyaWFDaGVja2VkPy50b1N0cmluZygpID09PSBcImZhbHNlXCIpKSB7XG4gICAgICAgIHRoaXMuY2hlY2tsaXN0ID0gW107XG4gICAgICB9XG4gICAgICBjb25zdCBhbHJlYWR5RXhpc3QgPSB0aGlzLmNoZWNrbGlzdC5zb21lKChyb3cpID0+IHJvd1t0aGlzLmRhdGFLZXldID09IHJvd0luZm9bdGhpcy5kYXRhS2V5XSk7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocm93SW5mbykgJiYgZXZlbnQ/LnRhcmdldD8uYXJpYUNoZWNrZWQgJiYgIWFscmVhZHlFeGlzdCkge1xuICAgICAgICB0aGlzLmNoZWNrbGlzdC5wdXNoKHJvd0luZm8pO1xuICAgICAgfSBlbHNlIGlmIChhbHJlYWR5RXhpc3QgJiYgKGV2ZW50Py50YXJnZXQ/LmFyaWFDaGVja2VkID09IG51bGwgfHwgZXZlbnQ/LnRhcmdldD8uYXJpYUNoZWNrZWQgPT09IFwiZmFsc2VcIikpIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY2hlY2tsaXN0LmZpbmRJbmRleCgocm93KSA9PiByb3dbdGhpcy5kYXRhS2V5XSA9PSByb3dJbmZvW3RoaXMuZGF0YUtleV0pO1xuICAgICAgICAgIHRoaXMuY2hlY2tsaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2hlY2tsaXN0ID0gW3Jvd0luZm9dXG4gICAgfVxuICAgIHRoaXMub25NdWx0aVNlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMuc2V0Um93c0RhdGEodGhpcy5jaGVja2xpc3QpKTtcbiAgfVxuXG4gIHNldFJvd3NEYXRhKHJvd3NEYXRhKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocm93c0RhdGEpKSB7XG4gICAgICByb3dzRGF0YS5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICByb3cgPSB0aGlzLnJlbW92ZVJvd09iaihyb3cpO1xuICAgICAgICByb3cgPSB0aGlzLmdyaWRTZXJ2aWNlLnNldFJvd1ZhbHVlKHJvdyk7XG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByb3dzRGF0YSA9IHRoaXMucmVtb3ZlUm93T2JqKHJvd3NEYXRhKTtcbiAgICAgIHJvd3NEYXRhID0gdGhpcy5ncmlkU2VydmljZS5zZXRSb3dWYWx1ZShyb3dzRGF0YSk7XG4gICAgfVxuICAgIHJldHVybiByb3dzRGF0YTtcbiAgfVxuXG4gIHJlbW92ZVJvd09iaihyb3c6IGFueSkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgIGlmIChrZXlzPy5sZW5ndGggPiAwKSB7XG4gICAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCdfb2JqJykpIHtcbiAgICAgICAgICBkZWxldGUgcm93W2tleV07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiByb3c7XG4gIH1cblxuICBhcHBseURyb3Bkb3duRmlsdGVyKGZpbHRlcjogYW55LCBldmVudDogYW55KSB7XG4gICAgZmlsdGVyKGV2ZW50LnRhcmdldCk7XG4gIH1cblxuICBzZWFyY2hEcm9wZG93bkZpbHRlcihmaWx0ZXI6IGFueSwgZXZlbnQ6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICB0aGlzLnNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCBldmVudCk7XG4gICAgdGhpcy5kcm9wRG93bkZpbHRlciA9IHsgZmlsdGVyOiBmaWx0ZXIsIGV2ZW50OiBldmVudCwgY29sdW1uOiBjb2x1bW4gfTtcbiAgICAvLyBpZiAoY29sdW1uLmFsbG93U2VhcmNoICE9PSB0cnVlKSB7XG4gICAgLy8gICB0aGlzLmFwcGx5RHJvcGRvd25GaWx0ZXIoZmlsdGVyLCBldmVudCk7XG4gICAgLy8gfVxuICB9XG5cbiAgbG9va3VwQ2xlYXJWYWx1ZShjb2x1bW46IElHcmlkQ29sdW1uLCByb3c/OiBhbnkpIHtcbiAgICBpZiAocm93KSB7XG4gICAgICBjb2x1bW4uZGlzcGxheUZpZWxkID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdID0gJycgOiAnJ1xuICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS50ZXh0ID0gJycgOiAnJ1xuICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgY29sdW1uLmZpbHRlclZhbHVlID0gJyc7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuY29sdW1ucy5maW5kSW5kZXgoKGNvbCkgPT4gY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zW2luZGV4XS5maWx0ZXJWYWx1ZSA9ICcnO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRGaWx0ZXJGb2N1c091dChjb2x1bW4pO1xuICAgIH1cbiAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KHRydWUpO1xuICAgIGlmIChjb2x1bW4ub25DaGFuZ2UpIHtcbiAgICAgIGNvbHVtbi5vbkNoYW5nZShyb3cpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGludm9rZSB3aGVuIGNsaWNrIGhlYWRlciBjaGVja2JveCBmaWx0ZXJcbiAgY2xpY2tDaGVja0JveEZpbHRlcihjb2x1bW46IElHcmlkQ29sdW1uKSB7XG4gICAgaWYgKHRoaXMuZWRpdEFsbFJlY29yZCB8fCBjb2x1bW4uYWxsb3dFZGl0KSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTlxuICAgICAgICAmJlxuICAgICAgICBjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gJ2NoZWNrYm94JyAmJiBjb2x1bW4uZmlsdGVyaW5nICE9IGZhbHNlXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LmRpc2FibGVkICE9PSB0cnVlICYmICFjb2x1bW4uZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldID0gY29sdW1uLmZpbHRlclZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnJvd3NDaGFuZ2Uub2JzZXJ2ZXJzPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgIH1cbiAgICB0aGlzLm9uQ2hlY2tCb3hGaWx0ZXJDbGljay5lbWl0KGNvbHVtbik7XG4gIH1cbiAgLy9zZXQgaGVhZGVyIGNoZWNrYm94IHZhbHVlIGZvciBnZXR0aW5nIGFsbCBjb2x1bW5zIG9uIHN0YXkgYWRtaW5cbiAgc2V0SGVhZGVyQ2hlY2tCb3hWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5pc0luY2x1ZGVkQWxsQ29sdW1ucy5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIC8vIHNldCBjYWxlbmRhciAyIE9yIDQgZGlnaXQgeWVhciBmb3JtYXRcbiAgY2FsZW5kYXJJbnB1dFZhbHVlKGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIGlmKCFjb2x1bW4udGltZU9ubHkpe1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjb2x1bW4uZmllbGQgKyByb3dbdGhpcy5kYXRhS2V5XSlbMF0/LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgKHZhbDogYW55KSA9PiB7XG4gICAgICBpZiAoIXZhbD8udGFyZ2V0Py52YWx1ZT8uaW5jbHVkZXMoJy8nKSkge1xuICAgICAgICBpZiAodmFsPy50YXJnZXQ/LnZhbHVlPy5sZW5ndGggPT0gOCB8fCBjb2x1bW4/LmZvcm1hdD8udHlwZSA9PT0gRUdyaWRGb3JtYXRUeXBlLlNIT1JUREFURSkge1xuICAgICAgICAgIHZhbC50YXJnZXQudmFsdWUgPSB2YWw/LnRhcmdldD8udmFsdWU/LnJlcGxhY2UoLyhcXGR7Mn0pKFxcZHsyfSkoXFxkezR9KS8sICckMS8kMi8kMycpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbD8udGFyZ2V0Py52YWx1ZT8ubGVuZ3RoID09IDYpIHtcbiAgICAgICAgICB2YWwudGFyZ2V0LnZhbHVlID0gdmFsPy50YXJnZXQ/LnZhbHVlPy5yZXBsYWNlKC8oXFxkezJ9KSg/PVxcZCkvZywgJyQxLycpO1xuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gdmFsLnRhcmdldC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgeWVhciA9IHZhbD8udGFyZ2V0Py52YWx1ZT8udG9TdHJpbmcoKT8uc3BsaXQoJy8nKVsyXTtcbiAgICAgIGlmICh5ZWFyICYmIHllYXIubGVuZ3RoID09IDQpIHtcbiAgICAgICAgdGhpcy5jYWxlbmRhckZvcm1hdCA9ICdtbS9kZC95eSc7XG4gICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gbmV3IERhdGUodmFsPy50YXJnZXQ/LnZhbHVlKT8udG9Mb2NhbGVEYXRlU3RyaW5nKFwiZW4tVVNcIik7XG4gICAgICB9IGVsc2UgaWYgKHllYXIgJiYgeWVhci5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5jYWxlbmRhckZvcm1hdCA9ICdtbS9kZC95JztcbiAgICAgIH1cbiAgICB9KTtcbiAgICB9XG4gICAgXG4gIH1cbiAgY2hhbmdlUGFzc3dvcmRUeXBlKGNvbHVtbiwgcm93KXtcbiAgICB2YXIgdGV4dFR5cGU9cm93W2NvbHVtbi5maWVsZCsnX29iaiddPyhyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10udGV4dFR5cGU9PSdwYXNzd29yZCc/J3RleHQnOidwYXNzd29yZCcpOmNvbHVtbi50ZXh0VHlwZT09J3Bhc3N3b3JkJz8ndGV4dCc6J3Bhc3N3b3JkJztcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnNldEdyaWRSb3dQcm9wVmFsdWUocm93LCBbe3Byb3BOYW1lOkVHcmlkUm93UHJvcE5hbWUuVEVYVFRZUEUsIHByb3BWYWx1ZTp0ZXh0VHlwZSwgZmllbGQ6Y29sdW1uLmZpZWxkfV0pO1xuICAgXG4gIH1cblxuICBzZXRUYWJsZVNjcm9sbFBvc2l0aW9uKCkge1xuICAgIGNvbnN0IHRhYmxlV3JhcHBlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIucC1kYXRhdGFibGUtd3JhcHBlclwiKTtcbiAgICBjb25zdCB0YWJsZVdyYXBwZXJTY3JvbGxUb3AgPSB0YWJsZVdyYXBwZXI/LnNjcm9sbFRvcDtcbiAgICBjb25zdCB0YWJsZVdyYXBwZXJTY3JvbGxMZWZ0ID0gdGFibGVXcmFwcGVyPy5zY3JvbGxMZWZ0O1xuICAgIGlmICh0YWJsZVdyYXBwZXJTY3JvbGxUb3ApIHtcbiAgICAgIHRoaXMuc2Nyb2xsUG9zaXRpb25ZID0gdGFibGVXcmFwcGVyU2Nyb2xsVG9wO1xuICAgICAgdGhpcy5zY3JvbGxQb3NpdGlvblggPSB0YWJsZVdyYXBwZXJTY3JvbGxMZWZ0O1xuICAgIH1cbiAgICBpZiAodGFibGVXcmFwcGVyU2Nyb2xsVG9wID09IDApIHtcbiAgICAgIHRhYmxlV3JhcHBlci5zY3JvbGxUbyh0aGlzLnNjcm9sbFBvc2l0aW9uWCwgMCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGFibGVXcmFwcGVyLnNjcm9sbFRvKHRoaXMuc2Nyb2xsUG9zaXRpb25YLCB0aGlzLnNjcm9sbFBvc2l0aW9uWSk7XG4gICAgfVxuICB9XG4gIHNob3dDb25maXJtYXRpb24oZXZlbnQ6IElHcmlkUGFnaW5hdGlvbkV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLlBhZ2VDaGFuZ2UpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBldmVudC5maXJzdCAvIGV2ZW50LnJvd3M7XG4gICAgfVxuICAgIGlmIChjb25maXJtKFwiWW91IHdpbGwgbG9zZSBjaGFuZ2VzIG5vdCBzYXZlZCBvbiBwYWdlLiBXb3VsZCB5b3UgbGlrZSB0byBjb250aW51ZT9cIikgPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5hdXRvTG9hZERhdGEgPSB0cnVlO1xuICAgICAgdGhpcy5yb3dzQ2hhbmdlLmVtaXQodGhpcy5yb3dzRGF0YSlcbiAgICAgIHRoaXMuaGFuZGxlU2VydmVyU2lkZVBhZ2luYXRpb24oZXZlbnQpO1xuICAgICAgdGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0ID0gZmFsc2U7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuUGFnZUNoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy50YWJsZS5maXJzdCA9IHRoaXMuY3VycmVudFBhZ2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50YWJsZS5maXJzdCA9IE1hdGguZmxvb3IodGhpcy5jdXJyZW50UGFnZSAvIGV2ZW50LnJvd3MpO1xuICAgICAgICAgICAgdGhpcy50YWJsZS5yb3dzID0gZXZlbnQucm93cztcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zZXRUYWJsZVNjcm9sbFBvc2l0aW9uKCk7XG4gICAgICAgIH0pO1xuICAgICAgdGhpcy5hdXRvTG9hZERhdGEgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxufSIsIjxkaXYgY2xhc3M9XCJncmlkLWNvbXBvbmVudC13cmFwcGVyXCI+XG48cC1jb25maXJtRGlhbG9nIFtzdHlsZV09XCJ7IHdpZHRoOiAnNTB2dycgfVwiICpuZ0lmPVwidXNlSW5saW5lQ1JVRFwiIGtleT1cImhhbmRsZUlubGluZUNSVURcIj48L3AtY29uZmlybURpYWxvZz5cbjxwLWNvbmZpcm1EaWFsb2cgY2xhc3M9XCJncmlkLWNvbXBvbmVudC1jb25maXJtLWRpYWxvZ1wiICpuZ0lmPVwiY29sdW1uQWN0aW9ucy5sZW5ndGggPiAwXCJcbiAga2V5PVwiaGFuZGxlY29sdW1uQWN0aW9uc1wiPjwvcC1jb25maXJtRGlhbG9nPlxuPGRpdiBjbGFzcz1cImdsb2JhbC1maWx0ZXItYnV0dG9ucy13cmFwcGVyXCI+XG5cbiAgPCEtLSBidXR0b24gZm9yIGFwcGx5IHZhbHVlIG9uIEdyaWQgLS0+XG4gIDxidXR0b24gKm5nSWY9XCIoKGZpbHRlcmluZyAmJiAhaGlkZUZpbHRlciApIHx8IHNob3dGaWx0ZXJidG4pXCIgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLXNlYXJjaFwiIChjbGljayk9XCJhcHBseUdyaWRGaWx0ZXJCdG4oKVwiXG4gICAgW2NsYXNzXT1cIlxuICBzZWFyY2hHcmlkRmlsdGVyID8gJ3AtYnV0dG9uLXN1Y2Nlc3MgYXBwbHktZmlsdGVyLWJ0biBmaWx0ZXItYnRuJyA6ICdoaWRlLWNsZWFyLWZpbHRlci1idXR0b24gYXBwbHktZmlsdGVyLWJ0biBmaWx0ZXItYnRuJ1xuICBcIj48L2J1dHRvbj5cblxuICA8IS0tIGJ1dHRvbiBmb3IgY2xlYXIgdmFsdWUgb24gR3JpZCAtLT5cbiAgPGJ1dHRvbiAqbmdJZj1cIigoZmlsdGVyaW5nICYmICFoaWRlRmlsdGVyICl8fCBzaG93RmlsdGVyYnRuKVwiIHBCdXR0b24gaWQ9XCJjbGVhckdyaWRGaWx0ZXJWYWx1ZXNCdXR0b25cIiB0eXBlPVwiYnV0dG9uXCJcbiAgICBpY29uPVwicGkgcGktcmVwbGF5XCIgKGNsaWNrKT1cImNsZWFyZ3JpZEZpbHRlcnNWYWx1ZSgpXCIgW2NsYXNzXT1cIlxuICAgICAgY2xlYXJHcmlkRmlsdGVyID8gJ2ZpbHRlci1idG4nIDogJ2hpZGUtY2xlYXItZmlsdGVyLWJ1dHRvbiBmaWx0ZXItYnRuJ1xuICAgICAgXCIgY2xhc3M9J2dsb2JhbC1yZWZyZXNoIGdsb2JhbC1idG4nXG4gICAgPjwvYnV0dG9uPlxuXG4gIDwhLS0gYnV0dG9uIGZvciBzYXZlIGFsbCBncmlkIGF0IG9uY2UgLS0+XG4gIDxidXR0b24gcEJ1dHRvbiAqbmdJZj1cImVkaXRBbGxSb3dzICYmIGVkaXRSb3dQZXJtaXNzaW9uXCIgaWQ9XCJzYXZlQWxsR3JpZFZhbHVlc1wiXG4gICAgaWNvbj1cInBpIHBpLWNoZWNrXCIgW2xhYmVsXT1cIidTYXZlJ1wiXG4gICAgW2NsYXNzXT1cImhpZGVHcmlkU2F2ZUJ1dHRvbiA/ICdoaWRlLWNsZWFyLWZpbHRlci1idXR0b24gc2F2ZS1hbGwtZ3JpZCcgOiAndWktYnV0dG9uLWluZm8gc2F2ZS1hbGwtZ3JpZCdcIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAoY2xpY2spPVwic2F2ZUFsbFJvd3NBdE9uY2UoKVwiPjwvYnV0dG9uPlxuXG4gIDwhLS0gYnV0dG9uIGZvciBjYW5jZWwgYWxsIGdyaWQgYXQgb25jZSAtLT5cbiAgPGJ1dHRvbiBwQnV0dG9uICpuZ0lmPVwiZWRpdEFsbFJvd3MgJiYgIWhpZGVHcmlkQ2FuY2VsQnV0dG9uXCIgaWQ9XCJlZGl0QnRuR2xvYmFsdmFsdWVzXCIgdHlwZT1cImJ1dHRvblwiIFtsYWJlbF09XCInQ2FuY2VsJ1wiXG4gICAgaWNvbj1cInBpIHBpLXRpbWVzXCIgY2xhc3M9XCJ1aS1idXR0b24taW5mb1wiIChjbGljayk9XCJjYW5jZWxBbGxSb3dzQXRPbmNlKClcIj48L2J1dHRvbj5cblxuICA8IS0tIGhlYWRlciBCdXR0b24gZm9yIG11bHRpU2VsZWN0IG9uIEdyaWQgLS0+XG4gIDxzcGFuICpuZ0lmPVwiYWxsb3dDb2x1bW5Ub2dnbGVcIiBvYnNlcnZlQ2hlY2tib3g+XG4gICAgPHAtbXVsdGlTZWxlY3QgIFtzaG93VG9nZ2xlQWxsXT1cImZhbHNlXCIgb3B0aW9uRGlzYWJsZWQ9XCJmYWxzZVwiIFtvcHRpb25zXT1cInNlbGVjdGVkVG9nZ2xlQ29sdW1uc1wiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRDb2x1bW5zXCIgb3B0aW9uTGFiZWw9XCJoZWFkZXJcIlxuICAgICAgc2VsZWN0ZWRJdGVtc0xhYmVsPVwiezB9IGNvbHVtbnMgc2VsZWN0ZWRcIiAgY2xhc3M9XCJncmlkLWNvbXBvbmVudC1tdWx0aXNlbGVjdC1oZWFkZXItYnV0dG9uXCIgcGxhY2Vob2xkZXI9XCJDaG9vc2UgQ29sdW1uc1wiPlxuICAgIDwvcC1tdWx0aVNlbGVjdD5cbiAgPC9zcGFuPlxuXG4gIDwhLS0gaGVhZGVyIEJ1dHRvbiBmb3IgQWRkaW5nIG5ldyBSb3cgb24gR3JpZCAtLT5cbiAgPGJ1dHRvbiBwQnV0dG9uICpuZ0lmPVwidXNlSW5saW5lQ1JVRCAmJiBhZGRSb3dQZXJtaXNzaW9uICYmICFoaWRlQWRkQnRuXCIgdHlwZT1cImJ1dHRvblwiIFtsYWJlbF09XCInQWRkJ1wiIHBBZGRSb3dcbiAgICBbdGFibGVdPVwiY29tcG9uZW50VGFibGVSZWZcIiBbcHJldmVudE5ld1Jvd109XCJwcmV2ZW50TmV3Um93XCIgW25ld1Jvd109XCJuZXdHcmlkUm93XCIgW2lkXT1cImRhdGFLZXlcIiBwVG9vbHRpcD1cIkFkZCBOZXcgUm93XCIgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICBpY29uPVwicGkgcGktcGx1c1wiIFtjbGFzc109XCIndWktYnV0dG9uLWluZm8gZ2xvYmFsLWFkZC1idG4nK2dyaWROYW1lXCIgKGNsaWNrKT1cImFkZE5ld1JvdyhuZXdHcmlkUm93LCB0cnVlKVwiIHBSaXBwbGU+PC9idXR0b24+XG5cbiAgICBcbiAgPCEtLSBoZWFkZXIgQnV0dG9uIGZvciBFeGNlbCBGaWxlIG9uIEdyaWQgLS0+XG4gIDxidXR0b24gKm5nSWY9XCJhbGxvd0V4cG9ydFRvRXhjZWxcIiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBpY29uPVwicGkgcGktZmlsZS1leGNlbFwiIChjbGljayk9XCJleHBvcnRFeGNlbCgpXCJcbiAgY2xhc3M9XCJwLWJ1dHRvbi1zdWNjZXNzXCIgcFRvb2x0aXA9XCJFeHBvcnQgdG8gRXhjZWxcIiB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIiBwUmlwcGxlPjwvYnV0dG9uPlxuXG48IS0tIGhlYWRlciBCdXR0b24gZm9yIFBERiBGaWxlIG9uIEdyaWQgLS0+XG48YnV0dG9uICpuZ0lmPVwiYWxsb3dFeHBvcnRUb1BkZlwiIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIGljb249XCJwaSBwaS1maWxlLXBkZlwiIChjbGljayk9XCJleHBvcnRQZGYoKVwiXG4gIGNsYXNzPVwicC1idXR0b24td2FybmluZyBtci0yIG1sLTJcIiBwVG9vbHRpcD1cIkV4cG9ydCB0byBQZGZcIiB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIiBwUmlwcGxlPjwvYnV0dG9uPlxuXG4gIDwhLS0gPGRpdiAqbmdGb3I9XCJsZXQgcmVwb3J0QnV0dG9uIG9mIHJlcG9ydEJ1dHRvbnNcIiBjbGFzcz1cInVpLWJ1dHRvbi1pbmZvIG1yLTIgbWwtMlwiPlxuICAgIDxzZS1nZW5lcmF0ZS1yZXBvcnQtYnRuICpuZ0lmID1cIiFyZXBvcnRCdXR0b24uaGlkZGVuXCJbcmVwSWRdPVwicmVwb3J0QnV0dG9uLnJlcG9ydElkXCIgW2xhYmVsXT1cInJlcG9ydEJ1dHRvbi5sYWJlbFwiIFtwYXJhbXNdPVwicmVwb3J0QnV0dG9uLnBhcmFtc1wiXG4gICAgICBbc2hvd0RpYWxvZ109XCJyZXBvcnRCdXR0b24uc2hvd0RpYWxvZ1wiPjwvc2UtZ2VuZXJhdGUtcmVwb3J0LWJ0bj5cbiAgPC9kaXY+IC0tPlxuXG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cblxuICA8bmctY29udGFpbmVyICAqbmdGb3I9XCJsZXQgcmVwb3J0QnV0dG9uIG9mIHJlcG9ydEJ1dHRvbnNcIj5cbiAgICA8c2UtZ2VuZXJhdGUtcmVwb3J0LWJ0biAqbmdJZiA9XCIhcmVwb3J0QnV0dG9uLmhpZGRlblwiW3JlcEluZm9dPVwicmVwb3J0QnV0dG9uXCIgW2xhYmVsXT1cInJlcG9ydEJ1dHRvbi5sYWJlbFwiIFtwYXJhbXNdPVwicmVwb3J0QnV0dG9uLnBhcmFtc1wiIFtpY29uXT1cInJlcG9ydEJ1dHRvbi5pY29uXCIgW2NsYXNzXT1cInJlcG9ydEJ1dHRvbi5jbGFzc1wiXG4gICAgW3Nob3dEaWFsb2ddPVwicmVwb3J0QnV0dG9uLnNob3dEaWFsb2dcIiBbcmVwb3J0VHlwZV09XCIgcmVwb3J0QnV0dG9uLnJlcG9ydFR5cGVcIiBbcmVwb3J0SGVhZGVyXT1cInJlcG9ydEJ1dHRvbi5yZXBvcnRIZWFkZXJcIiBbcmVwb3J0Rm9vdGVyXT1cInJlcG9ydEJ1dHRvbi5yZXBvcnRGb290ZXJcIj48L3NlLWdlbmVyYXRlLXJlcG9ydC1idG4+XG4gIDwvbmctY29udGFpbmVyPlxuXG48L2Rpdj5cblxuICA8cC10YWJsZSAqbmdJZj1cIiFpc0dyaWRIaWRkZW5cIiBpZD1cIm15LXRhYmxlXCIgW3ZhbHVlXT1cInJvd3NEYXRhXCIgW2NvbHVtbnNdPVwic2VsZWN0ZWRDb2x1bW5zXCIgc29ydE1vZGU9XCJtdWx0aXBsZVwiXG4gICAgW2xhenldPVwidXNlU2VydmVyU2lkZUV2ZW50cyB8fCBwYWdpbmF0aW9uXCIgIFtwYWdpbmF0b3JdPVwicGFnaW5hdGlvblwiIFthbHdheXNTaG93UGFnaW5hdG9yXT1cInBhZ2luYXRpb24gJiYgdG90YWxSZWNvcmRzID4gMFwiIFxuICAgIFtjbGFzc109XCInIGdyaWQtY29tcG9uZW50LW1haW4tdGFibGUgJyArIChwYWdpbmF0aW9uIHx8ICFyb3dzRGF0YS5sZW5ndGggPyAnIHBhZ2luYXRpb24gJyA6ICcnKSArICh0YWJsZVN0eWxlLmluY2x1ZGVzKCd3aWR0aCcpID8gJyBoYXNUYWJsZVdpZHRoU3R5bGUgJyA6ICcnKSArIChhdXRvUmVzaXplID8gJycgOiAndGFibGUtbGF5b3V0LWF1dG8nKSBcIlxuICAgIChvbkNvbFJlc2l6ZSk9XCJvbkNvbHVtblJlc2l6ZSgkZXZlbnQsZHQpXCIgW3Jlc2l6YWJsZUNvbHVtbnNdPVwidHJ1ZVwiXG4gICAgIHJlc3BvbnNpdmVMYXlvdXQ9XCJzY3JvbGxcIiBjb2x1bW5SZXNpemVNb2RlPVwiZXhwYW5kXCJcbiAgICBbcm93c109XCJkZWZhdWx0Um93c1wiIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCIgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJzZXRQYWdpbmF0aW9uTGVuZ3RoXCJcbiAgICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInNob3dDdXJyZW50UGFnZVJlcG9ydFwiIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJTaG93aW5nIHtmaXJzdH0gdG8ge2xhc3R9IG9mIHt7XG4gICAgICB0b3RhbFJlY29yZHNcbiAgICB9fSBlbnRyaWVzXCIgW2xvYWRpbmddPVwiIXNldEdyaWRSZWZyZXNoVGltZSA/IGxvYWRpbmcgOiBmYWxzZVwiXG4gICAgKG9uU29ydCk9XCJzb3J0RGlzYWJsZWQgPyAnJyA6IGhhbmRsZVNvcnRDaGFuZ2UoJGV2ZW50KVwiIChvbkZpbHRlcik9XCJoYW5kbGVGaWx0ZXJDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKG9uTGF6eUxvYWQpPVwiYXV0b0xvYWREYXRhID8gaGFuZGxlU2VydmVyU2lkZUV2ZW50cygkZXZlbnQsIGR0KSA6ICcnXCIgKG9uUGFnZSk9XCJncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0ID8gc2hvd0NvbmZpcm1hdGlvbigkZXZlbnQpIDogaGFuZGxlU2VydmVyU2lkZVBhZ2luYXRpb24oJGV2ZW50KVwiICNkdFxuICAgIFtkYXRhS2V5XT1cImRhdGFLZXlcIiBbKHNlbGVjdGlvbildPVwic2VsZWN0ZWRSb3dzXCIgc2VsZWN0aW9uTW9kZT1cIm11bHRpcGxlXCIgW3Njcm9sbGFibGVdPVwic2Nyb2xsYWJsZVwiIFxuICAgIFt0YWJsZVN0eWxlXT1cInRhYmxlU3R5bGVcIlxuICAgIFtzY3JvbGxIZWlnaHRdPVwic2Nyb2xsSGVpZ2h0XCJcbiAgICBlZGl0TW9kZT1cInJvd1wiIFtlZGl0aW5nUm93S2V5c109XCJlZGl0aW5nUm93S2V5c1wiIFtyb3dIb3Zlcl09XCJyb3dIb3ZlclwiXG4gICAgW25nQ2xhc3NdPVwic2V0Q2xhc3NhQW5kSWQoZHQpXCI+XG5cbiAgICA8ZGl2ICpuZ0lmPVwicm93QWN0aW9ucy5sZW5ndGggPiAwICYmIHJvd0FjdGlvbnMubGVuZ3RoID4gMFwiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG4gICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgcm93QWN0aW9uIG9mIHJvd0FjdGlvbnNcIj5cbiAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBbbGFiZWxdPVwicm93QWN0aW9uLnRpdGxlXCIgW2NsYXNzXT1cInJvd0FjdGlvbi5jbGFzc1wiXG4gICAgICAgICAgKGNsaWNrKT1cInJvd0FjdGlvbi5vbkNsaWNrKHNlbGVjdGVkUm93cylcIj48L2J1dHRvbj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gaGVhZGVyIGNvbHVtbnMgb24gR3JpZCAtLT5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCIgbGV0LWNvbHM+XG4gICAgICA8dHI+XG4gICAgICAgIDx0aCBwUmVzaXphYmxlQ29sdW1uICpuZ0lmPVwiYWxsb3dTZWxlY3Rpb24gJiYgc2VsZWN0aW9uVHlwZSA9PT0gJ211bHRpcGxlJ1wiIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtc2VsZWN0aW9uXCIgaWQ9XCJ7e2FsbG93U2VsZWN0aW9uSGVhZGVyfX1cIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRoLWNvbnRlbnQtd3JhcHBlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtY29tcG9uZW50LXRhYmxlLWhlYWRlci1pbm5lci1kaXYtMlxuICAgICAgICAgICAgICAgICAgdGFibGUtaGVhZGVyLWlubmVyLWRpdiBkaXYtbGFzdC1pbm5lci1odG1sLWlzLWljb25cIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmbGV4LWdyb3ctMVwiPiB7e2FsbG93U2VsZWN0aW9uSGVhZGVyfX0gPC9zcGFuPlxuICAgICAgICAgICAgICA8cC10YWJsZUhlYWRlckNoZWNrYm94ICpuZ0lmPVwic2VsZWN0aW9uVHlwZSA9PT0gJ211bHRpcGxlJ1wiIGJpbmFyeT1cInRydWVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJtdWx0aUNoZWNrQm94T25jbGljayhyb3dzRGF0YSwgJGV2ZW50KVwiPjwvcC10YWJsZUhlYWRlckNoZWNrYm94PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggcFJlc2l6YWJsZUNvbHVtbiAqbmdJZj1cImFsbG93U2VsZWN0aW9uICYmIHNlbGVjdGlvblR5cGUgPT09ICdzaW5nbGUnXCIgaWQ9XCJTZWxlY3RcIlxuICAgICAgICBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCIgY2xhc3M9XCJncmlkLWNvbXBvbmVudC1zZWxlY3Rpb25cIj5cbiAgICAgICAgICBTZWxlY3RcbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoIHBSZXNpemFibGVDb2x1bW4gaWQ9XCJBY3Rpb25zXCJcbiAgICAgICAgICAqbmdJZj1cInNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgIWRpc2FibGVkU2F2ZUJ0biAmJiBjb2x1bW5zPy5sZW5ndGggPiAwICYmIChjb2x1bW5BY3Rpb25zLmxlbmd0aCA+IDAgfHwgKHVzZUlubGluZUNSVUQgJiYgKGRlbGV0ZVJvd1Blcm1pc3Npb24gfHwgZWRpdFJvd1Blcm1pc3Npb24pKSlcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJyBcIiBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCIgPlxuICAgICAgICAgIEFjdGlvbnNcbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoIHBSZXNpemFibGVDb2x1bW4gKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2xzXCJcbiAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiY29sdW1uPy5jb2x1bW5XaWR0aCA/IGNvbHVtbj8uY29sdW1uV2lkdGgrJ3B4JyA6IGNvbHVtbj8uY3VzdG9tV2lkdGgrJ3B4J1wiIGlkPVwie3tjb2x1bW4uaGVhZGVyfX1cIlxuICAgICAgICAgIFthdHRyLmRhdGEtY29sdW1uLWhlYWRlcl09XCJjb2x1bW4/LmhlYWRlclwiIFtwU29ydGFibGVDb2x1bW5dPVwiY29sdW1uLmZpZWxkXCJcbiAgICAgICAgICBbY2xhc3NdPVwiY29sdW1uLnR5cGUgPT09ICdib29sZWFuJyA/ICdjaGVja2JveC10aCcgOiAnJ1wiXG4gICAgICAgICAgW3BTb3J0YWJsZUNvbHVtbkRpc2FibGVkXT1cInNvcnREaXNhYmxlZCAmJiB1c2VTZXJ2ZXJTaWRlRXZlbnRzID8gdHJ1ZSA6IGNvbHVtbi5zb3J0aW5nID09PSBmYWxzZVwiIGNsYXNzPVwiY29sdW1uPy50eXBlID09PSAnbXVsdGlwbGUnID8gJ2dyaWQtY29tcG9uZW50LXNlbGVjdC10aC1jb2x1bW4tdHlwZS1tdWx0aXBsZScgOiAnJ1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGgtY29udGVudC13cmFwcGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtdGFibGUtaGVhZGVyLWlubmVyLWRpdi0xIHRhYmxlLWhlYWRlci1pbm5lci1kaXYgZGl2LWxhc3QtaW5uZXItaHRtbC1pcy1pY29uXCI+ICAgICAgICBcbiAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cIidzZWxmJ1wiICBbY2xhc3NdPVwiJ2ZsZXgtZ3Jvdy0xJ1wiID57eyBjb2x1bW4uaGVhZGVyIH19XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4uaXNSZXF1aXJlZFwiIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQgcmVxdWlyZWQtc3RhclwiPio8L3NwYW4+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHAtc29ydEljb24gKm5nSWY9XCJjb2x1bW4uc29ydGluZyAhPT0gZmFsc2UgJiYgY29sdW1uPy50eXBlICE9PSAnbXVsdGlwbGUnXCJcbiAgICAgICAgICAgICAgICBbZmllbGRdPVwiY29sdW1uLmZpZWxkXCI+PC9wLXNvcnRJY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoIHBSZXNpemFibGVDb2x1bW4gaWQ9XCJBY3Rpb25zXCJcbiAgICAgICAgICAqbmdJZj1cIiFzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmICFkaXNhYmxlZFNhdmVCdG4gJiYgY29sdW1ucz8ubGVuZ3RoID4gMCAmJiAoY29sdW1uQWN0aW9ucy5sZW5ndGggPiAwIHx8ICh1c2VJbmxpbmVDUlVEICYmIChkZWxldGVSb3dQZXJtaXNzaW9uIHx8IGVkaXRSb3dQZXJtaXNzaW9uKSkpXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bidcIiBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCIgPkFjdGlvbnM8L3RoPlxuICAgICAgPC90cj5cbiAgICAgIDx0ciAqbmdJZj1cImZpbHRlcmluZyAmJiAhaGlkZUZpbHRlclwiPlxuICAgICAgICA8dGggcFJlc2l6YWJsZUNvbHVtbiAqbmdJZj1cImFsbG93U2VsZWN0aW9uXCIgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCI+PC90aD5cbiAgICAgICAgPHRoIHBSZXNpemFibGVDb2x1bW4gKm5nSWY9XCJzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmICFkaXNhYmxlZFNhdmVCdG4gJiYgdXNlSW5saW5lQ1JVRFwiXG4gICAgICAgICAgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCI+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCBwUmVzaXphYmxlQ29sdW1uICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sc1wiIFtzdHlsZS53aWR0aF09XCJjb2x1bW4/LmNvbHVtbldpZHRoID8gY29sdW1uPy5jb2x1bW5XaWR0aCsncHgnIDogY29sdW1uPy5jdXN0b21XaWR0aCsncHgnXCIgaWQ9XCJ7e2NvbHVtbi5oZWFkZXJ9fVwiIFtuZ1N3aXRjaF09XCJjb2x1bW4/LmZpbHRlcj8udHlwZVwiIFxuICAgICAgICAgIFtjbGFzc109XCJoaWRlRmlsdGVyT3B0aW9ucyA/ICdoaWRlLXRhYmxlLWZpbHRlciB0ZW1wJyA6ICd0ZW1wJ1wiPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uLmZpbHRlcmluZyAhPT0gZmFsc2VcIiBbY2xhc3NdPVwiY29sdW1uLmZpbHRlcj8uc2hvd0ZpbHRlciA/ICcnIDogJ2hpZGUtZmlsdGVyLWljb24nXCI+XG4gICAgICAgICAgICA8IS0tIFRleHQgaW5wdXQgb24gSGVhZGVyIEZvciBGaWx0ZXItLT5cbiAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciBjbGFzcz1cIm5vLWZpbHRlci1pY29uXCIgW3R5cGVdPVwiJ3RleHQnXCIgW2ZpZWxkXT1cImNvbHVtbi5maWVsZFwiICpuZ1N3aXRjaENhc2U9XCInaW5wdXQnXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJcIiBsZXQtdmFsdWUgbGV0LWZpbHRlcj1cImZpbHRlckNhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJjb2x1bW4uZmlsdGVyVmFsdWVcIiBbY2xhc3NdPVwiY29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKVwiIChrZXl1cC5lbnRlcik9XCJhcHBseUVudGVyRXZlbnQoZmlsdGVyLCAkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgKGJsdXIpPVwic2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uLCBmaWx0ZXIsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKGtleXVwKT1cInJlbW92aW5nRmlsdGVycygkZXZlbnQsIGNvbHVtbik7YmFja3NwYWNlRXZlbnQoJGV2ZW50LCBjb2x1bW4pXCIgcElucHV0VGV4dCAvPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cblxuICAgICAgICAgICAgPCEtLSBOdW1lcmljIGlucHV0IG9uIEhlYWRlciBGb3IgRmlsdGVyLS0+XG4gICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgY2xhc3M9XCJuby1maWx0ZXItaWNvblwiIFt0eXBlXT1cIidudW1lcmljJ1wiIFtmaWVsZF09XCJjb2x1bW4uZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ251bWVyaWNfaW5wdXQnXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJcIiBsZXQtdmFsdWUgbGV0LWZpbHRlcj1cImZpbHRlckNhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgPHAtaW5wdXROdW1iZXIgWyhuZ01vZGVsKV09XCJjb2x1bW4uZmlsdGVyVmFsdWVcIiBbY2xhc3NdPVwiY29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKVwiIChrZXl1cC5lbnRlcik9XCJhcHBseUVudGVyRXZlbnQoZmlsdGVyLCAkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgKG9uQmx1cik9XCJzZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAoa2V5dXApPVwicmVtb3ZpbmdGaWx0ZXJzKCRldmVudCwgY29sdW1uKTtiYWNrc3BhY2VFdmVudCgkZXZlbnQsIGNvbHVtbilcIj48L3AtaW5wdXROdW1iZXI+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3AtY29sdW1uRmlsdGVyPlxuXG4gICAgICAgICAgICAgIDwhLS0gbG9va3VwIGlucHV0IG9uIEhlYWRlciBGb3IgRmlsdGVyLS0+XG4gICAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibm8tZmlsdGVyLWljb25cIlxuICAgICAgICAgICAgICAgIFt0eXBlXT1cIid0ZXh0J1wiXG4gICAgICAgICAgICAgICAgW2ZpZWxkXT1cImNvbHVtbi5maWVsZFwiXG4gICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidsb29rdXBfaW5wdXQnXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgcFRlbXBsYXRlPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgIGxldC12YWx1ZVxuICAgICAgICAgICAgICAgICAgbGV0LWZpbHRlcj1cImZpbHRlckNhbGxiYWNrXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xvc2UtaWNvbi13cmFwcGVyIGdyaWQtY29tcG9uZW50IGxvb2t1cC1maWx0ZXItd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9va3VwLWZpbHRlci1pbnB1dC13cmFwcGVyXCI+IFxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19maWx0ZXInXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImdyaWQtY29tcG9uZW50IGxvb2t1cC1maWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29sdW1uLmZpbHRlclZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0RmlsdGVyTG9va3VwKGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJhcHBseUVudGVyRXZlbnQoZmlsdGVyLCAkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cInNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwicmVtb3ZpbmdGaWx0ZXJzKCRldmVudCwgY29sdW1uKTtiYWNrc3BhY2VFdmVudCgkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgIHBJbnB1dFRleHRcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICBcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpcmVjdC13cmFwcGVyLWNsb3NlLWljb24tbG9va3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4uZmlsdGVyVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXRpbWVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImxvb2t1cENsZWFyVmFsdWUoY29sdW1uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG5cbiAgICAgICAgICAgIDwhLS0gY2hlY2tib3ggb24gSGVhZGVyIEZvciBGaWx0ZXItLT5cbiAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciBjbGFzcz1cIm5vLWZpbHRlci1pY29uXCIgdHlwZT1cImJvb2xlYW5cIiBbZmllbGRdPVwiY29sdW1uLmZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIidjaGVja2JveCdcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbHRlclwiIGxldC12YWx1ZSBsZXQtZmlsdGVyPVwiZmlsdGVyQ2FsbGJhY2tcIj5cbiAgICAgICAgICAgICAgICA8cC1jaGVja2JveCBbYmluYXJ5XT1cInRydWVcIiBbZGlzYWJsZWRdPVwiY29sdW1uLmRpc2FibGVkXCIgWyhuZ01vZGVsKV09XCJjb2x1bW4uZmlsdGVyVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImFwcGx5RW50ZXJFdmVudChmaWx0ZXIsICRldmVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwic2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uLCBmaWx0ZXIsICRldmVudClcIiAoY2xpY2spPVwiY2xpY2tDaGVja0JveEZpbHRlcihjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImJhY2tzcGFjZUV2ZW50KCRldmVudCwgY29sdW1uKVwiPlxuICAgICAgICAgICAgICAgIDwvcC1jaGVja2JveD5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG5cbiAgICAgICAgICAgIDwhLS0gbXVsdGlTZWxlY3Qgb24gSGVhZGVyIEZvciBGaWx0ZXItLT5cbiAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciBjbGFzcz1cIm5vLWZpbHRlci1pY29uXCIgW2ZpZWxkXT1cImNvbHVtbi5maWVsZFwiIG1hdGNoTW9kZT1cImluXCIgW3Nob3dNZW51XT1cImZhbHNlXCIgKm5nU3dpdGNoQ2FzZT1cIidtdWx0aS1zZWxlY3QnXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJcIiBsZXQtdmFsdWUgbGV0LWZpbHRlcj1cImZpbHRlckNhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgPHAtbXVsdGlTZWxlY3QgWyhuZ01vZGVsKV09XCJjb2x1bW4uZmlsdGVyVmFsdWVcIiBbb3B0aW9uc109XCJjb2x1bW4uZmlsdGVyLmRhdGEgfHwgW11cIiBcbiAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwiJ2JvZHknXCIgW25hbWVdPVwiY29sdW1uLmZpZWxkXCJcbiAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiYXBwbHlFbnRlckV2ZW50KGZpbHRlciwgJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICBbb3B0aW9uVmFsdWVdPVwiY29sdW1uLm9wdGlvblZhbHVlXCJcbiAgICAgICAgICAgICAgICAgW29wdGlvbkxhYmVsXT1cImNvbHVtbi5vcHRpb25MYWJlbFwiXG4gICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwic2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uLCBmaWx0ZXIsICRldmVudClcIiBcbiAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImJhY2tzcGFjZUV2ZW50KCRldmVudCwgY29sdW1uKVwiPlxuICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgPC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cblxuICAgICAgICAgICAgPCEtLSBkcm9wZG93biBvbiBIZWFkZXIgRm9yIEZpbHRlci0tPlxuICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyIGNsYXNzPVwibm8tZmlsdGVyLWljb25cIiBbZmllbGRdPVwiY29sdW1uLmZpZWxkXCIgbWF0Y2hNb2RlPVwiaW5cIiBbc2hvd01lbnVdPVwiZmFsc2VcIiAqbmdTd2l0Y2hDYXNlPVwiJ2Ryb3Bkb3duJ1wiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsdGVyXCIgbGV0LXZhbHVlIGxldC1maWx0ZXI9XCJmaWx0ZXJDYWxsYmFja1wiPlxuICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duIFtzaG93Q2xlYXJdPVwidHJ1ZVwiIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0J1wiIFtmaWx0ZXJdPVwiY29sdW1uLmFsbG93U2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29sdW1uLmZpbHRlclZhbHVlXCIgKGtleXVwLmVudGVyKT1cImFwcGx5RHJvcGRvd25GaWx0ZXIoZmlsdGVyLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImNvbHVtbi5maWx0ZXIuZGF0YSB8fCBbXVwiXG4gICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwic2VhcmNoRHJvcGRvd25GaWx0ZXIoZmlsdGVyLCAkZXZlbnQsIGNvbHVtbilcIj48L3AtZHJvcGRvd24+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3AtY29sdW1uRmlsdGVyPlxuXG4gICAgICAgICAgICA8IS0tIGNhbGVuZGFyIG9uIEhlYWRlciBGb3IgRmlsdGVyLS0+XG4gICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgY2xhc3M9XCJuby1maWx0ZXItaWNvblwiIFtmaWVsZF09XCJjb2x1bW4uZmllbGRcIiBtYXRjaE1vZGU9XCJpblwiIFtzaG93TWVudV09XCJmYWxzZVwiICpuZ1N3aXRjaENhc2U9XCInY2FsZW5kYXInXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJcIiBsZXQtdmFsdWUgbGV0LWZpbHRlcj1cImZpbHRlckNhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgPHAtY2FsZW5kYXIgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QtRGF0ZSdcIiBbKG5nTW9kZWwpXT1cImNvbHVtbi5maWx0ZXJWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiYXBwbHlFbnRlckV2ZW50KGZpbHRlciwgJGV2ZW50LCBjb2x1bW4pXCIgYXBwZW5kVG89XCJib2R5XCIgKG9uU2VsZWN0KT1cInNlbGVjdERhdGUoY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICBbaW5wdXRJZF09XCJjb2x1bW4uZmllbGRcIiBob3VyRm9ybWF0PVwiMTJcIiAoa2V5dXAuYmFja3NwYWNlKT1cInJlbW92ZU51bGxDYWxlbmRhcihjb2x1bW4sIGZpbHRlciwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBbc2hvd0J1dHRvbkJhcl09XCJ0cnVlXCIgKG9uQ2xvc2UpPVwic2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uLCBmaWx0ZXIsICRldmVudClcIiBcbiAgICAgICAgICAgICAgICAgIChvbkNsZWFyQ2xpY2spPVwiYmFja3NwYWNlRXZlbnQoJGV2ZW50LCBjb2x1bW4pXCIgKGtleWRvd24pPVwic2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uLCBmaWx0ZXIsICRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8L3AtY2FsZW5kYXI+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3AtY29sdW1uRmlsdGVyPlxuXG4gICAgICAgICAgICA8IS0tIERlZmF1bHQgRmlsdGVyIEZvciBIZWFkZXIgIC0tPlxuICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyIGNsYXNzPVwibm8tZmlsdGVyLWljb25cIiBbdHlwZV09XCJcbiAgICAgICAgICAgICAgICBjb2x1bW4udHlwZSAmJiBjb2x1bW4udHlwZSAhPT0gJ2xpbmsnID8gY29sdW1uLnR5cGUgOiAndGV4dCdcbiAgICAgICAgICAgICAgXCIgW2ZpZWxkXT1cImNvbHVtbi5maWVsZFwiIGRpc3BsYXk9XCJtZW51XCIgKm5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggcFJlc2l6YWJsZUNvbHVtblxuICAgICAgICAgICpuZ0lmPVwiIXNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgIWRpc2FibGVkU2F2ZUJ0biAmJiBjb2x1bW5zPy5sZW5ndGggPiAwICYmIChjb2x1bW5BY3Rpb25zLmxlbmd0aCA+IDAgfHwgKHVzZUlubGluZUNSVUQgJiYgKGRlbGV0ZVJvd1Blcm1pc3Npb24gfHwgZWRpdFJvd1Blcm1pc3Npb24pKSlcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiPjwvdGg+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8IS0tIEJvZHkgY29sdW1ucyBvbiBHcmlkIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXJvdyBsZXQtZWRpdGluZz1cImVkaXRpbmdcIiBsZXQtcmk9XCJyb3dJbmRleFwiPlxuICAgICAgPHRyIFxuICAgICAgW3N0eWxlXT1cInJvd1N0eWxlXCJcbiAgICAgIFtuZ0NsYXNzXT1cInJvdz8uaGlnaGxpZ2h0cm93ID8gJ2hpZ2hsaWdodGVkLXJvdycgOiAnJ1wiXG4gICAgICAgIFtjbGFzc109XCJ3b3JkV3JhcCA/ICdwLXNlbGVjdGFibGUtcm93IHdvcmRXcmFwVHJ1ZScgOiAnd29yZFdyYXBGYWxzZSBwLXNlbGVjdGFibGUtcm93J1wiIChjbGljayk9XCJzZWxlY3RlZFJvd1JlY29yZCA9IHJvd1wiXG4gICAgICAgIFtwRWRpdGFibGVSb3ddPVwicm93XCIgI2dyaWRSb3cgW2lkXT1cInJvd1tkYXRhS2V5XVwiPlxuICAgICAgICA8dGQgKm5nSWY9XCJhbGxvd1NlbGVjdGlvblwiIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtc2VsZWN0aW9uXCI+XG4gICAgICAgICAgPHAtdGFibGVSYWRpb0J1dHRvbiBbdmFsdWVdPVwicm93XCIgKm5nSWY9XCJzZWxlY3Rpb25UeXBlID09PSAnc2luZ2xlJ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwibXVsdGlDaGVja0JveE9uY2xpY2socm93ICwgJGV2ZW50LCB0cnVlKVwiPjwvcC10YWJsZVJhZGlvQnV0dG9uPlxuICAgICAgICAgIDxwLXRhYmxlQ2hlY2tib3ggW3ZhbHVlXT1cInJvd1wiICpuZ0lmPVwic2VsZWN0aW9uVHlwZSA9PT0gJ211bHRpcGxlJ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwibXVsdGlDaGVja0JveE9uY2xpY2socm93LCAkZXZlbnQpXCI+PC9wLXRhYmxlQ2hlY2tib3g+XG4gICAgICAgICAgPC90ZD5cblxuICAgICAgICA8IS0tIGZpcnN0IGFjdGlvbnMgY29sdW1uIC0tPlxuICAgICAgICA8dGQgKm5nSWY9XCJzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmIGNvbHVtbkFjdGlvbnMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWN0aW9uLWJ0blwiICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29sdW1uQWN0aW9uc1wiPlxuICAgICAgICAgICAgPGkgW3RpdGxlXT1cImFjdGlvbi50b29sdGlwXCIgW2NsYXNzXT1cImFjdGlvbi5pY29uXCIgKGNsaWNrKT1cImhhbmRsZUFjdGlvbkNsaWNrKCRldmVudCwgYWN0aW9uLCByb3cpXCI+PC9pPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkICpuZ0lmPVwic2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiB1c2VJbmxpbmVDUlVEICYmIChkZWxldGVSb3dQZXJtaXNzaW9uIHx8IGVkaXRSb3dQZXJtaXNzaW9uKVwiXG4gICAgICAgICAgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJkaXNhYmxlZFNhdmVCdG4gPyAnaGlkZS1jbGVhci1maWx0ZXItYnV0dG9uJyA6ICcnXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZXRBY3Rpb25Db2x1bW5XaWR0aFwiPlxuICAgICAgICAgICAgPHNlLWdyaWQtcm93LWFjdGlvbnMgW2VkaXRpbmddPVwiZWRpdGluZ1wiIFtlZGl0Um93UGVybWlzc2lvbl09XCJlZGl0Um93UGVybWlzc2lvblwiXG4gICAgICAgICAgICAgIFtkZWxldGVSb3dQZXJtaXNzaW9uXT1cImRlbGV0ZVJvd1Blcm1pc3Npb25cIiBbaGlkZURlbGV0ZUJ0bl09XCJoaWRlRGVsZXRlQnRuXCIgW2hpZGVFZGl0QnRuXT1cImhpZGVFZGl0QnRuXCJcbiAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIiAob25Sb3dFZGl0SW5pdEJ0bik9XCJvblJvd0VkaXRJbml0KCRldmVudClcIiAoZGVsZXRlUmVjb3JkQnRuKT1cImRlbGV0ZVJlY29yZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKG9uUm93RWRpdFNhdmVCdG4pPVwib25Sb3dFZGl0U2F2ZSgkZXZlbnQpXCIgKG9uUm93RWRpdENhbmNlbEJ0bik9XCJvblJvd0VkaXRDYW5jZWwoJGV2ZW50LCByaSlcIlxuICAgICAgICAgICAgICBbZWRpdEFsbFJvd3NdPVwiZWRpdEFsbFJvd3NcIj5cbiAgICAgICAgICAgIDwvc2UtZ3JpZC1yb3ctYWN0aW9ucz5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGQ+XG5cbiAgICAgICAgPCEtLSBHcmlkIFJvd3MgRGF0YSBCaW5kaW5ncyBTdGFydCAtLT5cbiAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2x1bW4gb2Ygc2VsZWN0ZWRDb2x1bW5zXCIgW25nU3dpdGNoXT1cImNvbHVtbi50eXBlXCIgW3N0eWxlXT1cImNvbHVtbi5zdHlsZSBcIiBbYXR0ci5kYXRhLWNvbHVtbi1maWVsZF09XCJjb2x1bW4/LmZpZWxkXCIgXG4gICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbi5ob3ZlckRhdGEgPyAndGQtb3ZlcmxheScgOiAnJ1wiXG4gICAgICAgID5cbiAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiY29sdW1uLmhvdmVyRGF0YSA/ICd0ZC13cmFwcGVyJyA6ICcnXCJcbiAgICAgICAgKG1vdXNlZW50ZXIpPVwiKGNvbHVtbi5ob3ZlckRhdGEgJiYgY29sdW1uLmhvdmVyRGF0YS5jb21wb25lbnQpID8gYWRkRHluYW1pY1BhbmVsT3ZlcmxheUNvbXBvbmVudChjb2x1bW4uaG92ZXJEYXRhLCBvdmVybGF5UGFuZWwsICRldmVudCwgcm93KSA6ICcnXCIgXG4gICAgICAgIChtb3VzZWxlYXZlKT1cIihjb2x1bW4uaG92ZXJEYXRhICYmIGNvbHVtbi5ob3ZlckRhdGEuY29tcG9uZW50KSA/ICBtb3VzZUxlYXZlRXZlbnQob3ZlcmxheVBhbmVsKSA6ICcnXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZC1jb250ZW50LXdyYXBwZXJcIiBbc3R5bGVdPVwiY29sdW1uLnN0eWxlXCI+XG5cbiAgICAgICAgICA8IS0tIEJvb2xlYW4gY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidib29sZWFuJ1wiXG4gICAgICAgICAgPlxuICAgICAgICA8dGQgKm5nSWY9XCIhZWRpdGluZyAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uc2hvdyAhPSBmYWxzZVwiPlxuICAgICAgICAgIDxwLWNoZWNrYm94IFxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhY29sdW1uLmFsbG93RWRpdCA/PyB0cnVlXCIgW2JpbmFyeV09XCJ0cnVlXCIgKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hlY2tCb3hDaGFuZ2VFdmVudCgkZXZlbnQsIGNvbHVtbiwgcm93KVwiIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIiBcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiIFxuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSAmJlxuICAgICAgICAgICAgICAocm93W2NvbHVtbi5maWVsZF0udG9TdHJpbmcoKSA9PT0gJzEnIHx8XG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScgfHxcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09ICd5J3x8XG4gICAgICAgICAgICAgICAgKCByb3dbY29sdW1uLmZpZWxkXS50ZXh0ICYmIChyb3dbY29sdW1uLmZpZWxkXT8udGV4dD8udG9TdHJpbmcoKSA9PT0gJzEnIHx8XG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0/LnRleHQ/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJyB8fFxuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdPy50ZXh0Py50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpID09PSAneScpKSlcbiAgICAgICAgICAgICAgICAgID8gQ2hlY2tlZFxuICAgICAgICAgICAgICAgICAgOiB1bkNoZWNrZWRcbiAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICA8L3AtY2hlY2tib3g+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCAqbmdJZj1cImVkaXRpbmdcIj5cbiAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgIDwhLS0gZm9yIGVkaXQgY2hlY2tCb3ggLS0+XG4gICAgICAgICAgICAgIDxwLWNoZWNrYm94IChjbGljayk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hlY2tCb3hDaGFuZ2VFdmVudCgkZXZlbnQsIGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIiBbYmluYXJ5XT1cInRydWVcIiBbKG5nTW9kZWwpXT1cIlxuICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSAmJiAgIFxuICAgICAgICAgICAgICAgICAgICAocm93W2NvbHVtbi5maWVsZF0udG9TdHJpbmcoKSA9PT0gJzEnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScgfHxcbiAgICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09ICd5JyB8fFxuICAgICAgICAgICAgICAgICAgICAgICggcm93W2NvbHVtbi5maWVsZF0udGV4dCAmJiAocm93W2NvbHVtbi5maWVsZF0/LnRleHQ/LnRvU3RyaW5nKCkgPT09ICcxJyB8fFxuICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdPy50ZXh0Py50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScgfHxcbiAgICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXT8udGV4dD8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKSA9PT0gJ3knKSkpXG4gICAgICAgICAgICAgICAgICAgICAgPyBlZGl0TW9kZUNoZWNrZWRcbiAgICAgICAgICAgICAgICAgICAgICA6IGVkaXRNb2RldW5Da2Vja2VkXG4gICAgICAgICAgICAgICAgICBcIiAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCI+PC9wLWNoZWNrYm94PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAge3sgcm93W2NvbHVtbi5maWVsZF0gfX1cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8IS0tIGxpbmsgY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgIDxzcGFuIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdhLGlucHV0J1wiICAqbmdTd2l0Y2hDYXNlPVwiJ2xpbmsnXCI+XG4gICAgICAgICAgPCEtLSBsaW5rIGNvbHVtbiBmb3IgSHlwZXJMaW5rIENhc2UgLS0+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4uYWxsb3dTYXZlID09PSBmYWxzZVwiPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4udGFyZ2V0ICE9PSAnX3NlbGYnXCIgW3N0eWxlXT1cImNvbHVtbi5zdHlsZVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnYSdcIlxuICAgICAgICAgICAgICAgY2xhc3M9XCJjdXN0b20tbGlua1wiXG4gICAgICAgICAgICAgIFtjbGFzc109XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2Rpc2FibGVkLWxpbmsnIDogJydcIj5cblxuICAgICAgICAgICAgPGEgY2xhc3M9XCJkLWlubGluZVwiIFtocmVmXT1cImNvbHVtbi5kaXNhYmxlZD8nJzpyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uaHlwZXJsaW5rXCIgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb2x1bW4uaWNvbiAmJiFyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlOyBlbHNlIG5vSWNvblwiIFtjbGFzc109XCJjb2x1bW4uaWNvblwiIFt0aXRsZV09XCJjb2x1bW4uaGVhZGVyXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cImNvbHVtbj8ub25DbGljayA/IG9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdykgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU/Jyc6XG4gICAgICAgICAgICAgICAgICAgICAgc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdywgY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbi50YXJnZXQgPT09ICdfc2VsZidcIiBbc3R5bGVdPVwiY29sdW1uLnN0eWxlXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdhJ1wiIGNsYXNzPVwiY3VzdG9tLWxpbmtcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiIGFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1wiPlxuXG4gICAgICAgICAgICAgIDxhIGNsYXNzPVwiZC1pbmxpbmVcIiBbaHJlZl09XCJjb2x1bW4uZGlzYWJsZWQ/Jyc6cm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmh5cGVybGlua1wiIFt0YXJnZXRdPSdjb2x1bW4udGFyZ2V0Jz5cbiAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImNvbHVtbi5pY29uICYmIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU7IGVsc2Ugbm9JY29uXCIgW2NsYXNzXT1cImNvbHVtbi5pY29uXCIgW3RpdGxlXT1cImNvbHVtbi5oZWFkZXJcIj48L2k+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ljb24+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwiY29sdW1uPy5vbkNsaWNrID8gb25DbGlja0V2ZW50KGNvbHVtbiwgcm93KSA6ICcnXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZT8nJzpcbiAgICAgICAgICAgICAgICAgICAgICBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvYT5cblxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8IS0tIGxpbmsgY29sdW1uIGZvciBFZGl0IENhc2UgLS0+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4uYWxsb3dTYXZlIHx8IGNvbHVtbi5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZFwiPlxuICAgICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKGNvbHVtbi5lZGl0YWJsZSA9PT0gdHJ1ZSApICYmIChjb2x1bW4uZWRpdExpbmsgPT09IHRydWUgKVwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwiIXJvdy5pc05ld1wiIHBJbnB1dFRleHQgKGNsaWNrKT1cImNvbHVtbj8ub25DbGljayA/IG9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdykgOiAnJ1wiIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmhpZGVGaWVsZFZhbHVlID8gJycgOiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHQgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHQgOiBjb2x1bW4uZGlzcGxheVRleHQgPyBjb2x1bW4uZGlzcGxheVRleHQgOiByb3dbY29sdW1uLmZpZWxkXVwiXG4gICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KVwiIC8+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgcElucHV0VGV4dCAqbmdJZj1cInJvdy5pc05ld1wiIHR5cGU9XCJ0ZXh0XCIgKGNsaWNrKT1cImNvbHVtbj8ub25DbGljayA/IG9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdykgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJydcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkID8gcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQgOiByb3dbY29sdW1uLmZpZWxkXVwiXG4gICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KVwiIC8+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4gKm5nSWY9XCJjb2x1bW4uZWRpdGFibGUgPT09IGZhbHNlfHwgY29sdW1uLmVkaXRhYmxlID09PSB1bmRlZmluZWRcIiA+XG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJjdXN0b20tbGlua1wiIChjbGljayk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCIgW2hyZWZdPVwicm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmh5cGVybGlua1wiIFt0YXJnZXRdPSdjb2x1bW4udGFyZ2V0J1xuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb2x1bW4uaWNvbiAmJiAhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZTsgZWxzZSBub0ljb25cIltjbGFzc109XCJjb2x1bW4uaWNvblwiIFt0aXRsZV09XCJjb2x1bW4uaGVhZGVyXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ljb24+XG4gICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlPycnOlxuICAgICAgICAgICAgICAgICAgICBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+IC0tPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiKGNvbHVtbi5lZGl0TGluayA9PT0gZmFsc2V8fCBjb2x1bW4uZWRpdExpbmsgPT09IHVuZGVmaW5lZCkmJihjb2x1bW4uZWRpdGFibGUgPT09IGZhbHNlfHwgY29sdW1uLmVkaXRhYmxlID09PSB1bmRlZmluZWQpXCI+XG4gICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImQtaW5saW5lXCIgW2hyZWZdPVwicm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmh5cGVybGlua1wiIFt0YXJnZXRdPVwiY29sdW1uLnRhcmdldCA/IGNvbHVtbi50YXJnZXQgOiAnX2JsYW5rJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjb2x1bW4uZWRpdGFibGUgPT09IGZhbHNlID8gJycgOiBhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2Rpc2FibGVkLWxpbmsnIDogJydcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb2x1bW4uaWNvbiAmJiAhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZTsgZWxzZSBub0ljb25cIltjbGFzc109XCJjb2x1bW4uaWNvblwiIFt0aXRsZV09XCJjb2x1bW4uaGVhZGVyXCIgKGNsaWNrKT1cImNvbHVtbj8ub25DbGljayA/IG9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdykgOiAnJ1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cImNvbHVtbj8ub25DbGljayA/IG9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdykgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU/Jyc6XG4gICAgICAgICAgICAgICAgICAgICAgc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdywgY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPiBcbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBbc3R5bGVdPVwiY29sdW1uLnN0eWxlXCIgIGNsYXNzPVwiY3VzdG9tLWxpbmtcIiAgW2NsYXNzXT1cImNvbHVtbi5lZGl0YWJsZSA9PT0gZmFsc2UgfHwgYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdkaXNhYmxlZC1saW5rJyA6ICcnXCI+XG4gICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImQtaW5saW5lXCIgW2hyZWZdPVwiY29sdW1uLmRpc2FibGVkPycnOnJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5oeXBlcmxpbmtcIiBbdGFyZ2V0XT1cImNvbHVtbi50YXJnZXQgPyBjb2x1bW4udGFyZ2V0IDogJ19ibGFuaydcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb2x1bW4uaWNvbiYmICFyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlOyBlbHNlIG5vSWNvblwiIFt0aXRsZV09XCJjb2x1bW4uaGVhZGVyXCIgW2NsYXNzXT1cImNvbHVtbi5pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbHVtbj8ub25DbGljayA/IG9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdykgOiAnJ1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cImNvbHVtbj8ub25DbGljayA/IG9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdykgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlPycnOlxuICAgICAgICAgICAgICAgICAgICAgIHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICA8L2E+XG5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8IS0tIElmcmFtZSBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidpZnJhbWUnXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tbGlua1wiIChjbGljayk9XCJncmlkSUZyYW1lKGNvbHVtbiwgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmh5cGVybGluaywgcm93KVwiIFt0aXRsZV09XCJcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSAmJlxuICAgICAgICAgICAgICAgIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dCA9PT0gbnVsbCB8fCByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dCA9PT0gJycpXG4gICAgICAgICAgICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGRdIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgICA6IGNvbHVtbi5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgPyBjb2x1bW4uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgIDogcm93W2NvbHVtbi5maWVsZF1cblxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPiAgXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY3VzdG9tLWljb24tYnRuXCIgICpuZ0lmPVwiY29sdW1uLmljb247IGVsc2Ugbm9JY29uXCIgW2Rpc2FibGVkXT1cImNvbHVtbi5kaXNhYmxlZFwiPlxuICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiY29sdW1uLmljb25cIiBbdGl0bGVdPVwiY29sdW1uLmhlYWRlclwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ljb24+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSAmJlxuICAgICAgICAgICAgICAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQgPT09IG51bGwgfHwgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQgPT09ICcnKVxuICAgICAgICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGRdIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgOiBjb2x1bW4uZGlzcGxheVRleHQgPyBjb2x1bW4uZGlzcGxheVRleHQgOiByb3dbY29sdW1uLmZpZWxkXVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgPCEtLSBkaWFsb2cgY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidkaWFsb2cnXCI+XG4gICAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4/LmZpbHRlcj8udHlwZSAhPT0gJ2NhbGVuZGFyJyAmJiAhcm93Py5oaWRlZ3JpZGJ0blwiIFxuICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4uZWRpdGFibGUgPT09IHRydWUgJiYgIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdzZWxmJ1wiXG4gICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdExvb2t1cEZpZWxkKGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZCA/XG4gICAgICAgICAgICAgICAgICAgICAgcm93W3Jvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSA6IFxuICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJyb3dbY29sdW1uLmZpZWxkXVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdzZWxmJ1wiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uLmVkaXRhYmxlID09PSBmYWxzZSB8fCBjb2x1bW4uZWRpdGFibGUgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICBcIiBjbGFzcz1cImN1c3RvbS1saW5rXCIgW3N0eWxlXT1cImNvbHVtbi5zdHlsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdkaXNhYmxlZC1saW5rJyA6ICcnXG4gICAgICAgICAgICAgICAgICAgIFwiIChjbGljayk9XCJvcGVuR3JpZERpYWxvZyhjb2x1bW4sIHJvdywgJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCIoY29sdW1uLmljb24gfHwgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5pY29uKSAmJiAhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZSA7IGVsc2Ugbm9JY29uXCJcbiAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5pY29uID8gcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5pY29uIDogY29sdW1uLmljb25cIiBbdGl0bGVdPVwiY29sdW1uLmhlYWRlclwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JY29uPnt7ICghY29sdW1uLmRpc3BsYXlUZXh0ICYmIHJvdy5pc05ldyApIHx8IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWUgPyAnJyA6IHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgfX08L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbj8uZmlsdGVyPy50eXBlID09PSAnY2FsZW5kYXInICYmIGNvbHVtbi5lZGl0YWJsZSA9PT0gdHJ1ZVwiIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdpbnB1dCdcIj5cbiAgICAgICAgICAgICAgICA8cC1jYWxlbmRhciBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgIFtpZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2hpZGUtYm9yZGVyJyA6ICcnXCIgKG9uQ2xvc2UpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICBbbWluRGF0ZV09XCJjb2x1bW4ubWluRGF0ZVwiIFttYXhEYXRlXT1cImNvbHVtbi5tYXhEYXRlXCJcbiAgICAgICAgICAgICAgICAgIFthcHBlbmRUb109XCInYm9keSdcIiBob3VyRm9ybWF0PVwiMTJcIiBbc2hvd1RpbWVdPVwiY29sdW1uLnNob3dUaW1lXCIgKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgW3RpbWVPbmx5XT1cImNvbHVtbi50aW1lT25seVwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkID9cbiAgICAgICAgICAgICAgICAgICAgcm93W3Jvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldIDogcm93W2NvbHVtbi5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIj48L3AtY2FsZW5kYXI+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gJ2NhbGVuZGFyJyAmJiAhY29sdW1uLmVkaXRhYmxlXCIgY2xhc3M9XCJjdXN0b20tbGlua1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3cuZGlzYWJsZWQgICB8fCBhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2Rpc2FibGVkLWxpbmsnIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkdyaWREaWFsb2coY29sdW1uLCByb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICA+e3sgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZSA/ICcnIDogc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdywgY29sdW1uKSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWxpbmtcIiBbc3R5bGVdPVwiY29sdW1uLnN0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvdy5kaXNhYmxlZCAgIHx8IGFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuR3JpZERpYWxvZyhjb2x1bW4sIHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnXCI+XG4gICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIihjb2x1bW4uaWNvbiB8fCByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24pICYmICFyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlIDsgZWxzZSBub0ljb25cIlt0aXRsZV09XCJjb2x1bW4uaG92ZXJEYXRhID8gJycgOiBjb2x1bW4uaGVhZGVyXCIgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA6IGNvbHVtbi5pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vSWNvbj57eyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlID8gJycgOiBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pIH19PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8IS0tIHt7IHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3csIGNvbHVtbikgfX1cbiAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFyb3dbY29sdW1uLmZpZWxkICsgJ19zZWNvbmRUeXBlJ10gJiYgIXJvdy5oaWRlZ3JpZGJ0blwiIC0tPlxuXG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8IS0tIHRlc3QgLS0+XG4gICAgICAgIDwhLS0gbG9va3VwIElucHV0IGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8c3BhbiAgICpuZ1N3aXRjaENhc2U9XCInbG9va3VwX2lucHV0J1wiPlxuICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgICAgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsb3NlLWljb24td3JhcHBlclwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnc2VsZidcIiByZWFkb25seSB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvdz8uaXNOZXcgfHwgcm93Py5pc25ldyA/IHR5cGVPZihyb3dbY29sdW1uLmZpZWxkXSkgPT09ICdvYmplY3QnID8gcm93W2NvbHVtbi5maWVsZF0/LnRleHQgOiByb3dbY29sdW1uLmZpZWxkXSA6IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkICA/IHJvd1tyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0gOlxuICAgICAgICAgICAgICAgICAgdHlwZU9mKHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8udGV4dCkgPT09ICdvYmplY3QnICYmIHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8udGV4dD8uaGFzT3duUHJvcGVydHkoJ3RleHQnKSA/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8udGV4dD8udGV4dCA6IFxuICAgICAgICAgICAgICAgICAgY29sdW1uLmRpc3BsYXlGaWVsZCA/IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGRdXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgKGtleXVwLnRhYik9XCJzZWxlY3RMb29rdXBGaWVsZChjb2x1bW4sIHJvdylcIiBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0TG9va3VwRmllbGQoY29sdW1uLCByb3cpXCIgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAncHJpbWUtaW5wdXQnXCIgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiIC8+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCI+PGJ1dHRvbiAqbmdJZj1cInJvd1tjb2x1bW4uZmllbGRdICYmIHR5cGVPZihyb3dbY29sdW1uLmZpZWxkXSkgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGRdLnRleHRcbiAgICAgICAgICAgICAgICAgIDogcm93W2NvbHVtbi5maWVsZF0gJiYgIWNvbHVtbi5kaXNhYmxlZFwiIGljb249XCJwaSBwaS10aW1lc1wiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJsb29rdXBDbGVhclZhbHVlKGNvbHVtbixyb3cpXCI+PC9idXR0b24+PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIiA+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uLmxpbmtJZFwiID5cbiAgICAgICAgICAgICAgICA8YSBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnc2VsZidcIiBbaHJlZl09XCJyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uaHlwZXJsaW5rXCIgW3RhcmdldF09XCJjb2x1bW4udGFyZ2V0ID09PSAnX3NlbGYnID8gJycgOiAgJ19ibGFuaydcIj5cbiAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgIHNldExvb2t1cFJlYWRPbmx5VmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnc2VsZidcIiAqbmdJZj1cIiFjb2x1bW4ubGlua0lkXCIgW3N0eWxlXT1cImNvbHVtbi5zdHlsZVwiIFtjbGFzc109XCJjb2x1bW4ubG9va3VwQ29udHJvbD8uY29tcG9uZW50ICYmIGNvbHVtbi5lZGl0TGluayA9PT0gdHJ1ZSA/ICdjdXN0b20tbGluaycgOiAnJ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Mb29rdXBIeXBlcmxpbmsoY29sdW1uLCByb3cpXCIgICA+XG4gICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgIHNldExvb2t1cFJlYWRPbmx5VmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gTnVtZXJpYyBJbnB1dCBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidudW1lcmljJ1wiPlxuICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgPCEtLSBmb3IgQ3VycmVuY3kgJiYgRGVjaW1hbCAmJiBQZXJjZW50IC0tPlxuICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnaW5wdXQnXCIgY2xhc3M9XCJpbnB1dC1udW1iZXJcIj5cbiAgICAgICAgICAgICAgICA8cC1pbnB1dE51bWJlciBbaWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdoaWRlLWJvcmRlcicgOiAnJ1wiIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICduZy1pbnZhbGlkIG5nLWRpcnR5J1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAnZm9ybS1jb250cm9sJ1xuICAgICAgICAgICAgICAgICAgICBcIiBbc2hvd0J1dHRvbnNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZCA/IHJvd1tyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0gOiByb3dbY29sdW1uLmZpZWxkXVwiIFtuYW1lXT1cImNvbHVtbi5maWVsZFwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiIChvbkZvY3VzKT1cIm9uRm9jdXNFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgKG9uQmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCIgW21vZGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQudHlwZSA9PT0gJ2N1cnJlbmN5J1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAnY3VycmVuY3knXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICdkZWNpbWFsJ1xuICAgICAgICAgICAgICAgICAgICBcIiBbY3VycmVuY3ldPVwiXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQudHlwZSA9PT0gJ2N1cnJlbmN5JyAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMuY3VycmVuY3lcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMuY3VycmVuY3lcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ1VTRCdcbiAgICAgICAgICAgICAgICAgICAgXCIgW2xvY2FsZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdC50eXBlID09PSAnY3VycmVuY3knICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0LmZvcm1hdFBhcmFtcy5sb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMubG9jYWxlXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICdlbi1VUydcbiAgICAgICAgICAgICAgICAgICAgXCIgW21pbkZyYWN0aW9uRGlnaXRzXT1cImNvbHVtbi5mb3JtYXQgPyBzZXROdW1lcmljTWluTXhGcmFjdGlvbihjb2x1bW4pIDogJzAnXCJcbiAgICAgICAgICAgICAgICAgIFttYXhGcmFjdGlvbkRpZ2l0c109XCJjb2x1bW4uZm9ybWF0ID8gc2V0TnVtZXJpY01pbk14RnJhY3Rpb24oY29sdW1uKSA6ICcwJ1wiIFtzdWZmaXhdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQudHlwZSA9PT0gJ3BlcmNlbnQnICYmIFxuICAgICAgICAgICAgICAgICAgICAgICAgJyUnXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgPC9wLWlucHV0TnVtYmVyPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9ja2VkX2ZpZWxkPjxzcGFuICpuZ0lmPVwiIXJvdy5pc05ld1wiICBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnc2VsZidcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHJvd1tjb2x1bW4uZmllbGRdIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnXCI+IFxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgc2V0TnVtZXJpY0Zvcm1hdChjb2x1bW4sIHJvdylcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBCdXR0b24gY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInYWRkX2J1dHRvbidcIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFyb3cuaGlkZWdyaWRidG5cIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBcbiAgICAgICAgICAgICAgW2ljb25dPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5pY29uID8gcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5pY29uIDogY29sdW1uLmljb25cIlxuICAgICAgICAgICAgICBbbmFtZV09XCJjb2x1bW4uaGVhZGVyXCIgY2xhc3M9XCJtZXJnZS1idG5cIiBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlUZXh0ID8gcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5VGV4dCA6IGNvbHVtbi52YWx1ZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtZ3JpZC1hZGQtYnRuXCIgKGNsaWNrKT1cIm9uQ2xpY2tCdXR0b24oY29sdW1uLCByb3cpXCI+PC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc3Bhbj4gXG4gICAgICAgIFxuICAgICAgICA8IS0tIEdlbmVyYXRlIEZpbGUgQnV0dG9uIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2dlbmVyYXRlX2ZpbGVfYnV0dG9uJ1wiPlxuICAgICAgICAgICAgPHNlLWdlbmVyYXRlLWltcG9ydC1maWxlXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlUZXh0ID8gcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5VGV4dCA6IGNvbHVtbi52YWx1ZVwiXG4gICAgICAgICAgICAgIFtpY29uXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA6IGNvbHVtbi5pY29uXCJcbiAgICAgICAgICAgICAgW2RpYWxvZ0RhdGFdPVwiY29sdW1uLmRhdGFcIlxuICAgICAgICAgICAgICBbc2VsZWN0ZWRSb3ddPVwicm93XCJcbiAgICAgICAgICAgID48L3NlLWdlbmVyYXRlLWltcG9ydC1maWxlPlxuICAgICAgICA8L3NwYW4+IFxuXG4gICAgICAgIDwhLS0gU2VuZCBlbWFpbCBCdXR0b24gY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInc2VuZF9lbWFpbF9idXR0b24nXCI+XG4gICAgICAgICAgICA8c2UtZW1haWwtZ2VuZXJhdGUtYnRuXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlUZXh0ID8gcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5VGV4dCA6IGNvbHVtbi52YWx1ZVwiXG4gICAgICAgICAgICAgIFtpY29uXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA6IGNvbHVtbi5pY29uXCJcbiAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgICBbc2VsZWN0ZWRSb3ddPVwicm93XCJcbiAgICAgICAgICAgID48L3NlLWVtYWlsLWdlbmVyYXRlLWJ0bj5cbiAgICAgICAgPC9zcGFuPiBcblxuICAgICAgICA8IS0tIERhdGUgY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgIDwhLS0gY2FsZW5kYXIgc2VsZWN0b3IgLS0+XG4gICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIiBcbiAgICAgICAgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGE/IG51bGw6IGVkaXRBbGxSb3dzID8gJ2lucHV0JyA6ICdzZWxmJyBcIlxuICAgICAgICA+XG4gICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiID5cbiAgICAgICAgICAgICAgPHAtY2FsZW5kYXJcbiAgICAgICAgICAgICAgICBbbWluRGF0ZV09XCJjb2x1bW4ubWluRGF0ZVwiIFttYXhEYXRlXT1cImNvbHVtbi5tYXhEYXRlXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5ICcgKyBjb2x1bW4uZmllbGQgKyByb3dbZGF0YUtleV0gOiBjb2x1bW4uZmllbGQgKyByb3dbZGF0YUtleV1cIlxuICAgICAgICAgICAgICAgIFtpZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2hpZGUtYm9yZGVyJyA6ICcnXCIgKG9uQ2xvc2UpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIidib2R5J1wiIGhvdXJGb3JtYXQ9XCIxMlwiIFtkZWZhdWx0RGF0ZV09XCJkZWZhdWx0RGF0ZVwiXG4gICAgICAgICAgICAgICAgW3N0ZXBNaW51dGVdPVwiY29sdW1uLm1pbnV0ZXNJbnRlcnZhbCA/IGNvbHVtbi5taW51dGVzSW50ZXJ2YWwgOiAxXCIgW3Nob3dUaW1lXT1cImNvbHVtbi5zaG93VGltZVwiXG4gICAgICAgICAgICAgICAgW3RpbWVPbmx5XT1cImNvbHVtbi50aW1lT25seVwiIFtkYXRlRm9ybWF0XT1cImNvbHVtbi5mb3JtYXQgPyBjb2x1bW4uZm9ybWF0LnR5cGUgOiBjYWxlbmRhckZvcm1hdFwiXG4gICAgICAgICAgICAgICAgKGtleXVwKT1cImNhbGVuZGFySW5wdXRWYWx1ZShjb2x1bW4sIHJvdylcIiAob25TaG93KT1cIm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQgPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZCA6IHJvd1tjb2x1bW4uZmllbGRdXCJcbiAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCJcbiAgICAgICAgICAgICAgICBbc2hvd0J1dHRvbkJhcl09XCIhY29sdW1uLnRpbWVPbmx5XCI+PC9wLWNhbGVuZGFyPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIiA+XG4gICAgICAgICAgICAgIHt7IHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3csY29sdW1uKSB9fVxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgPC9zcGFuPlxuXG5cbiAgICAgICAgPHNwYW4gKm5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgICA8c3BhbiBbbmdTd2l0Y2hdPVwiY29sdW1uLnR5cGVcIj5cbiAgICAgICAgICAgIDwhLS0gRHJvcGRvd24gY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2Ryb3Bkb3duJ1wiIFtjbGFzc109XCJkcm9wZG93bklucHV0ID8gJycgOiAnb3V0cHV0LWRyb3Bkb3duJ1wiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiIGNvbHVtbi5ob3ZlckRhdGE/IG51bGw6IGVkaXRBbGxSb3dzID8gJy5wLWRyb3Bkb3duLWxhYmVsJyA6ICdzZWxmJ1wiPlxuICAgICAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgPHAtZHJvcGRvd24gKm5nSWY9XCIhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRkZW5cIiBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkrJ19kYXRhJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpKydfZGF0YSddXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogY29sdW1uLmRhdGFcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpID8gcm93W3Jvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldIDogcm93W2NvbHVtbi5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiIFtwbGFjZWhvbGRlcl09XCJyb3dbY29sdW1uLmRpc3BsYXlGaWVsZF1cbiAgICAgICAgICAgICAgICAgICAgICA/IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXVxuICAgICAgICAgICAgICAgICAgICAgIDogcm93W2NvbHVtbi5maWVsZF0gPyByb3dbY29sdW1uLmZpZWxkXSA6ICdTZWxlY3QnXCIgW3Nob3dDbGVhcl09XCJyb3dbY29sdW1uLmZpZWxkXSA/IHRydWUgOiBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIFtvcHRpb25MYWJlbF09XCJjb2x1bW4ub3B0aW9uTGFiZWxcIiAoY2xpY2spPVwib25DbGlja0V2ZW50KGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAgIFtvcHRpb25WYWx1ZV09XCJjb2x1bW4ub3B0aW9uVmFsdWVcIiBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIiAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpXCIgW2ZpbHRlcl09XCJjb2x1bW4uYWxsb3dTZWFyY2hcIj48L3AtZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICBzZXREcm9wZHdvblJlYWRPbmx5VmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDwhLS0gTXVsdGlTZWxlY3QgY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgICAgICA8IS0tIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCkgPyByb3dbcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV0gOlxuICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF1cIiAtLT5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInbXVsdGktc2VsZWN0J1wiIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICcucC1tdWx0aXNlbGVjdC1sYWJlbCdcIj5cbiAgICAgICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0IFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJydcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdoaWRlLWJvcmRlcicgOiAnJ1wiIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmZpZWxkXVwiXG4gICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiXG4gICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImNvbHVtbi5kYXRhXCIgW29wdGlvbkxhYmVsXT1cImNvbHVtbi5vcHRpb25MYWJlbFwiIFtvcHRpb25WYWx1ZV09XCJjb2x1bW4ub3B0aW9uVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25DaGFuZ2VFdmVudChjb2x1bW4sIHJvdylcIiAob25QYW5lbFNob3cpPVwic2hvd09wdGlvbihjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0V2ZW50KGNvbHVtbiwgcm93KVwiIFthcHBlbmRUb109XCInYm9keSdcIiAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCI+XG4gICAgICAgICAgICAgICAgICA8L3AtbXVsdGlTZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnXCIgPlxuICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF1cbiAgICAgICAgICAgICAgICAgICAgPyByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF0gOlxuICAgICAgICAgICAgICAgICAgICBzZXRNdWx0aVNlbGVjdERhdGEoY29sdW1uLCByb3dbY29sdW1uLmZpZWxkXSlcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgPCEtLSBBdXRvQ29tcGxldGUgU2VhcmNoIC0tPlxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidBdXRvQ29tcGxldGUnXCI+XG4gICAgICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgICAgICA8cC1hdXRvQ29tcGxldGUgXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJydcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdoaWRlLWJvcmRlcicgOiAnJ1wiIFxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJjb2x1bW4uaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW3N1Z2dlc3Rpb25zXT1cImNvbHVtbi5kYXRhXCIgXG4gICAgICAgICAgICAgICAgICAgIChvblNlbGVjdCk9XCJhdXRvQ29tcGxldGVTZWxlY3RlZFZhbHVlKHJvdywgY29sdW1uLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZpZWxkXT1cImNvbHVtbi5vcHRpb25MYWJlbCA/IGNvbHVtbi5vcHRpb25MYWJlbD8udG9Mb3dlckNhc2UoKSA6IGNvbHVtbi5kaXNwbGF5RmllbGQgPyBjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpIDogY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZCA/IHJvd1tyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXSA6XG4gICAgICAgICAgICAgICAgICAgIHR5cGVPZihyb3dbY29sdW1uLmZpZWxkXSkgPT09ICdvYmplY3QnICYmIHJvd1tjb2x1bW4uZmllbGRdPy50ZXh0ID9cbiAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0/LnRleHQgOlxuICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXVwiXG4gICAgICAgICAgICAgICAgICAgIFtkcm9wZG93bl09XCJjb2x1bW4uc2hvd09wdGlvblwiIFxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCIgXG4gICAgICAgICAgICAgICAgICAgIChjb21wbGV0ZU1ldGhvZCk9XCJhdXRvU2VhcmNoKCRldmVudCwgY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgKG9uQmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3csICRldmVudClcIiBcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIiBcbiAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJvbkF1dG9Db21wbGV0ZUtleUVudGVyRXZlbnQoJGV2ZW50LCBjb2x1bW4sIHJvdylcIj5cbiAgICAgICAgICAgICAgICAgIDwvcC1hdXRvQ29tcGxldGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInJvd1tjb2x1bW4uZmllbGRdICYmIHJvd1tjb2x1bW4uZmllbGRdWzBdICYmICByb3dbY29sdW1uLmZpZWxkXVswXVtjb2x1bW4uZGlzcGxheUZpZWxkXVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgdmFsdWUgb2Ygcm93W2NvbHVtbi5maWVsZF07IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyByb3dbY29sdW1uLmZpZWxkXSAmJiByb3dbY29sdW1uLmZpZWxkXS5sZW5ndGggPiAxID8gcm93W2NvbHVtbi5maWVsZF0ubGVuZ3RoIC0xID09PSBpID9cbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVtjb2x1bW4uZGlzcGxheUZpZWxkXSA6IHZhbHVlW2NvbHVtbi5kaXNwbGF5RmllbGRdICsgJzsnIDogdmFsdWVbY29sdW1uLmRpc3BsYXlGaWVsZF0gfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3dbY29sdW1uLmZpZWxkXSAmJiByb3dbY29sdW1uLmZpZWxkXVswXSAmJiAgcm93W2NvbHVtbi5maWVsZF1bMF1bY29sdW1uLmZpZWxkXSAmJiAhY29sdW1uLmRpc3BsYXlGaWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgdmFsdWUgb2Ygcm93W2NvbHVtbi5maWVsZF07IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyByb3dbY29sdW1uLmZpZWxkXSAmJiByb3dbY29sdW1uLmZpZWxkXS5sZW5ndGggPiAxID8gcm93W2NvbHVtbi5maWVsZF0ubGVuZ3RoIC0xID09PSBpID9cbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVtjb2x1bW4uZmllbGRdIDogdmFsdWVbY29sdW1uLmZpZWxkXSArICc7JyA6IHZhbHVlW2NvbHVtbi5maWVsZF0gfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPCEtLSBBZGQgR2VuZXJhdGUgUmVwb3J0IEJ1dHRvbiAtLT5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCIncmVwb3J0J1wiPlxuICAgICAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxzZS1nZW5lcmF0ZS1yZXBvcnQtYnRuIFtyZXBJbmZvXT1cInNldFJlcG9ydE5hbWUoY29sdW1uLCByb3cpXCIgW2xhYmVsXT1cImNvbHVtbi5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIFtwYXJhbXNdPVwic2V0UmVwb3J0UGFyYW1zKGNvbHVtbiwgcm93KVwiIFtjbGFzc109XCJjb2x1bW4uY2xhc3NcIiBbc2hvd0RpYWxvZ109XCJjb2x1bW4uc2hvd0RpYWxvZ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpY29uXT1cImNvbHVtbi5pY29uXCIgW3JlcG9ydFR5cGVdPVwiY29sdW1uLnJlcG9ydFR5cGVcIj48L3NlLWdlbmVyYXRlLXJlcG9ydC1idG4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxzZS1nZW5lcmF0ZS1yZXBvcnQtYnRuIFtyZXBJbmZvXT1cInNldFJlcG9ydE5hbWUoY29sdW1uLCByb3cpXCIgW2xhYmVsXT1cImNvbHVtbi5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIFtwYXJhbXNdPVwic2V0UmVwb3J0UGFyYW1zKGNvbHVtbiwgcm93KVwiIFtpY29uXT1cImNvbHVtbi5pY29uXCIgW2NsYXNzXT1cImNvbHVtbi5jbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93RGlhbG9nXT1cImNvbHVtbi5zaG93RGlhbG9nXCIgW3JlcG9ydFR5cGVdPVwiY29sdW1uLnJlcG9ydFR5cGVcIj48L3NlLWdlbmVyYXRlLXJlcG9ydC1idG4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQgIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdpbnB1dCdcIj5cbiAgICAgICAgICAgICAgPCEtLSBJbnB1dCBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgICAgICAgPHAtY2VsbEVkaXRvcj4gICAgICBcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIFtzdHlsZV09XCJjb2x1bW4uc3R5bGUgPyBjb2x1bW4uc3R5bGUgOiAnZGlzcGxheTpmbGV4J1wiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IFt0eXBlXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8udGV4dFR5cGU/cm93W2NvbHVtbi5maWVsZCsnX29iaiddPy50ZXh0VHlwZTpjb2x1bW4udGV4dFR5cGU/Y29sdW1uLnRleHRUeXBlOid0ZXh0J1wiIFxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAncHJpbWUtaW5wdXQnXCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvdy51bmRlZmluZWQgPyAnJyA6IGFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgJiYgcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdID9cbiAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXSA6IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXSAmJiByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10udmFsdWUgPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10udmFsdWUgOiByb3dbY29sdW1uLmZpZWxkXVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiIChjaGFuZ2UpPVwib25DaGFuZ2VFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0J1dHRvbihjb2x1bW4sIHJvdylcIiAqbmdJZj1cImNvbHVtbi5maWVsZCAhPT0gZGF0YUtleTsgZWxzZSBsb2NrZWRfZmllbGRcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImZsb2F0OnJpZ2h0XCIgKm5nSWY9XCJjb2x1bW4uZm9ybWF0PT0ncGFzc3dvcmQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/KHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXS50ZXh0VHlwZT09J3Bhc3N3b3JkJz8ncGkgcGktZXllJzoncGkgcGktZXllLXNsYXNoJyk6Y29sdW1uLnRleHRUeXBlPT0ncGFzc3dvcmQnPydwaSBwaS1leWUnOidwaSBwaS1leWUtc2xhc2gnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VQYXNzd29yZFR5cGUoY29sdW1uLCByb3cpXCIgW3RpdGxlXT1cImNvbHVtbi5oZWFkZXJcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4gXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xvY2tlZF9maWVsZD48c3BhbiAqbmdJZj1cIiFyb3cuaXNOZXdcIiAgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgcm93W2NvbHVtbi5maWVsZF0gfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBbc3R5bGVdPVwiY29sdW1uLnN0eWxlID8gY29sdW1uLnN0eWxlIDogJ2Rpc3BsYXk6ZmxleCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdylcIiBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnc2VsZicgXCIgXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8udGV4dFR5cGUgPyhyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LnRleHRUeXBlPT0ncGFzc3dvcmQnICA/J3Bhc3N3b3JkJzonJykgOmNvbHVtbi50ZXh0VHlwZT09J3Bhc3N3b3JkJz8ncGFzc3dvcmQnOicnXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgc2V0VGV4dEJveFJlYWRPbmx5VmFsdWUocm93LCBjb2x1bW4pIH19IFxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZmxvYXQ6cmlnaHRcIiAqbmdJZj1cImNvbHVtbi5mb3JtYXQ9PSdwYXNzd29yZCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPyhyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10udGV4dFR5cGU9PSdwYXNzd29yZCc/J3BpIHBpLWV5ZSc6J3BpIHBpLWV5ZS1zbGFzaCcpOmNvbHVtbi50ZXh0VHlwZT09J3Bhc3N3b3JkJz8ncGkgcGktZXllJzoncGkgcGktZXllLXNsYXNoJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImNvbHVtbi5oZWFkZXJcIiAoY2xpY2spPVwiY2hhbmdlUGFzc3dvcmRUeXBlKGNvbHVtbiwgcm93KVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgXG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDwhLS0gR3JpZCBSb3dzIERhdGEgQmluZGluZ3MgRW5kIC0tPlxuXG4gICAgICAgIDwhLS0gQWN0aW9uIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8dGQgKm5nSWY9XCIhc2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiBjb2x1bW5zPy5sZW5ndGggPiAwICYmIGNvbHVtbkFjdGlvbnMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgY2xhc3M9XCJmb3ItYnV0dG9uc1wiXG4gICAgICAgICAgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJhY3Rpb24tYnRuXCIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb2x1bW5BY3Rpb25zXCI+XG4gICAgICAgICAgICA8aSBbdGl0bGVdPVwiYWN0aW9uLnRvb2x0aXBcIiBbY2xhc3NdPVwiYWN0aW9uLmljb25cIiAoY2xpY2spPVwiaGFuZGxlQWN0aW9uQ2xpY2soJGV2ZW50LCBhY3Rpb24sIHJvdylcIj48L2k+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGRcbiAgICAgICAgICAqbmdJZj1cIiFzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmIGNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgdXNlSW5saW5lQ1JVRCAmJiAoZGVsZXRlUm93UGVybWlzc2lvbiB8fCBlZGl0Um93UGVybWlzc2lvbilcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiXG4gICAgICAgICAgY2xhc3M9XCJmb3ItYnV0dG9uc1wiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZGlzYWJsZWRTYXZlQnRuID8gJ2hpZGUtY2xlYXItZmlsdGVyLWJ1dHRvbicgOiAnJ1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSdzZXRBY3Rpb25Db2x1bW5XaWR0aCc+XG4gICAgICAgICAgICA8c2UtZ3JpZC1yb3ctYWN0aW9ucyBbZWRpdGluZ109XCJlZGl0aW5nXCIgW2VkaXRSb3dQZXJtaXNzaW9uXT1cImVkaXRSb3dQZXJtaXNzaW9uXCJcbiAgICAgICAgICAgICAgW2RlbGV0ZVJvd1Blcm1pc3Npb25dPVwiZGVsZXRlUm93UGVybWlzc2lvblwiIFtoaWRlRGVsZXRlQnRuXT1cImhpZGVEZWxldGVCdG5cIiBbaGlkZUVkaXRCdG5dPVwiaGlkZUVkaXRCdG5cIlxuICAgICAgICAgICAgICBbcm93XT1cInJvd1wiIChvblJvd0VkaXRJbml0QnRuKT1cIm9uUm93RWRpdEluaXQoJGV2ZW50KVwiIChkZWxldGVSZWNvcmRCdG4pPVwiZGVsZXRlUmVjb3JkKCRldmVudClcIlxuICAgICAgICAgICAgICAob25Sb3dFZGl0U2F2ZUJ0bik9XCJvblJvd0VkaXRTYXZlKCRldmVudClcIiAob25Sb3dFZGl0Q2FuY2VsQnRuKT1cIm9uUm93RWRpdENhbmNlbCgkZXZlbnQsIHJpKVwiXG4gICAgICAgICAgICAgIFtlZGl0QWxsUm93c109XCJlZGl0QWxsUm93c1wiPlxuICAgICAgICAgICAgPC9zZS1ncmlkLXJvdy1hY3Rpb25zPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDwhLS0gRm9vdGVyIGNvbHVtbnMgb24gR3JpZCAtLT5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZm9vdGVyXCI+XG4gICAgICA8dHIgKm5nSWY9XCJhZ2dyZWdhdGVGb290ZXJcIj5cbiAgICAgICAgPHRkXG4gICAgICAgICAgKm5nSWY9XCJzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmIChjb2x1bW5BY3Rpb25zLmxlbmd0aCA+IDAgfHwgKHVzZUlubGluZUNSVUQgJiYgKGRlbGV0ZVJvd1Blcm1pc3Npb24gfHwgZWRpdFJvd1Blcm1pc3Npb24pKSlcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiPjwvdGQ+XG4gICAgICAgIDx0ZCAqbmdJZj1cImFsbG93U2VsZWN0aW9uXCIgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCI+PC90ZD5cbiAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBvdXRlckNvbHVtbiBvZiBzZWxlY3RlZENvbHVtbnNcIiBjbGFzcz1cImdyaWQtY29tcG9uZW50LW91dGVyLWNvbHVtblwiIFtzdHlsZV09XCJvdXRlckNvbHVtbi5zdHlsZVwiPlxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGlubmVyQ29sdW1uIG9mIHNlbGVjdGVkQ29sdW1uc1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYWdnciBvZiBpbm5lckNvbHVtbj8uYWdncmVnYXRlXCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdJZj1cImFnZ3IuYWdnclZhbHVlPy5sZW5ndGggJiYgKCghYWdnci5kaXNwbGF5RmllbGQgJiYgaW5uZXJDb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IG91dGVyQ29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgICAgICAgICAgICAgYWdnci5kaXNwbGF5RmllbGQgJiYgYWdnci5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IG91dGVyQ29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpKVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJhZ2dyLmFnZ3JWYWx1ZVwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PiAgXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZFxuICAgICAgICAgICpuZ0lmPVwiIXNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgY29sdW1ucz8ubGVuZ3RoID4gMCAmJiB1c2VJbmxpbmVDUlVEICYmIChkZWxldGVSb3dQZXJtaXNzaW9uIHx8IGVkaXRSb3dQZXJtaXNzaW9uKVwiXG4gICAgICAgICAgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJkaXNhYmxlZFNhdmVCdG4gPyAnaGlkZS1jbGVhci1maWx0ZXItYnV0dG9uJyA6ICcnXCI+PC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDwhLS0gRm9vdGVyIGZvciBFbXB0eSBNZXNzYWdlIGNvbHVtbnMgb24gR3JpZCAtLT5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XG4gICAgICA8dHIgY2xhc3M9XCJncmlkLWNvbXBvbmVudCBuby1yZWNvcmRzLWZvdW5kXCI+XG4gICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cInNlbGVjdGVkQ29sdW1ucz8ubGVuZ3RoICsgMVwiPnt7dG90YWxSZWNvcmRzPT0wPyAnTm8gcmVjb3JkcyBmb3VuZCc6Jyd9fTwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvcC10YWJsZT4gIFxuICA8cC1vdmVybGF5UGFuZWxcbiAgW3N0eWxlXT1cIm92ZXJsYXlQYW5lbFN0eWxlXCIgI292ZXJsYXlQYW5lbD5cbiAgICA8bmctY29udGFpbmVyICN2aWV3Q29udGFpbmVyUmVmPjwvbmctY29udGFpbmVyPlxuICA8L3Atb3ZlcmxheVBhbmVsPlxuPC9kaXY+Il19