ng-miam 8.2.2 → 8.2.4

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.
@@ -348,12 +348,10 @@ export class RecipeCatalogComponent extends EventTracerComponent {
348
348
  this.cdr.detectChanges();
349
349
  }
350
350
  ngOnDestroy() {
351
- var _a;
351
+ var _a, _b;
352
352
  this.subscriptions.forEach(s => s.unsubscribe());
353
353
  (_a = this.headerHeightSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
354
- if (document.querySelector('.miam-recipe-catalog__toolbar-container')) {
355
- this.stickyToolbarObserver.unobserve(document.querySelector('.miam-recipe-catalog__toolbar-container'));
356
- }
354
+ (_b = this.stickyToolbarObserver) === null || _b === void 0 ? void 0 : _b.disconnect();
357
355
  }
358
356
  currentPath() {
359
357
  return 'miam/recipes';
@@ -749,4 +747,4 @@ RecipeCatalogComponent.ɵcmp = i0.ɵɵdefineComponent({ type: RecipeCatalogCompo
749
747
  }], customFilters: [{
750
748
  type: Input
751
749
  }] }); })();
752
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaXBlLWNhdGFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctbWlhbS9zcmMvbGliL193ZWItY29tcG9uZW50cy9yZWNpcGUtY2F0YWxvZy9yZWNpcGUtY2F0YWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1taWFtL3NyYy9saWIvX3dlYi1jb21wb25lbnRzL3JlY2lwZS1jYXRhbG9nL3JlY2lwZS1jYXRhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUdMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXpGLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsY0FBYyxFQUNkLHNCQUFzQixFQUN0QixjQUFjLEVBQ2QsY0FBYyxFQUNkLGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixXQUFXLEVBQ1osTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFxQyxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRixPQUFP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QkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWFwLCBza2lwV2hpbGUsIHN3aXRjaE1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2F0YWxvZ0NhdGVnb3J5Q29tcG9uZW50IH0gZnJvbSAnLi9jYXRhbG9nLWNhdGVnb3J5L2NhdGFsb2ctY2F0ZWdvcnkuY29tcG9uZW50JztcbmltcG9ydCB7IENhdGFsb2dTZXR0aW5nLCBQYWNrYWdlLCBSZWNpcGUsIFN1cHBsaWVyIH0gZnJvbSAnLi4vLi4vX21vZGVscyc7XG5pbXBvcnQge1xuICBBbmFseXRpY3NTZXJ2aWNlLFxuICBCYXNrZXRzU2VydmljZSxcbiAgQ2F0YWxvZ1NldHRpbmdzU2VydmljZSxcbiAgQ29udGV4dFNlcnZpY2UsXG4gIFBhY2thZ2VTZXJ2aWNlLFxuICBSZWNpcGVzU2VydmljZSxcbiAgUmVjaXBlVHlwZVNlcnZpY2UsXG4gIFNwb25zb3JTZXJ2aWNlLFxuICBTdXBwbGllcnNTZXJ2aWNlLFxuICBVc2VyU2VydmljZVxufSBmcm9tICcuLi8uLi9fc2VydmljZXMnO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gJy4uLy4uL190eXBlcy9pY29uLmVudW0nO1xuaW1wb3J0IHsgQ2F0YWxvZ0hlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vY2F0YWxvZy1oZWFkZXIvY2F0YWxvZy1oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IENhdGFsb2dUb29sYmFyQ29tcG9uZW50IH0gZnJvbSAnLi9jYXRhbG9nLXRvb2xiYXIvY2F0YWxvZy10b29sYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJQWRkaXRpb25uYWxGaWx0ZXJzLCBSZWNpcGVGaWx0ZXIsIFJlY2lwZUZpbHRlcnMgfSBmcm9tICcuLi8uLi9fdHlwZXMvcmVjaXBlLWZpbHRlcnMnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNZWRpYU1hdGNoZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcbmltcG9ydCB7IERvY3VtZW50Q29sbGVjdGlvbiB9IGZyb20gJ21pYW0tanNvbmFwaSc7XG5pbXBvcnQgeyBFdmVudFRyYWNlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL19jb21wb25lbnRzL2Fic3RyYWN0cy9ldmVudC10cmFjZXIuY29tcG9uZW50JztcblxuaW50ZXJmYWNlIENhdGVnb3J5IHtcbiAga2V5OiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHN1YnRpdGxlOiBzdHJpbmc7XG4gIGZpbHRlcnM6IHsgYWRkaXRpb25hbEZpbHRlcnM6IHsgZmlsdGVyczogeyBwYWNrYWdlczogc3RyaW5nIH07IHRpdGxlOiBzdHJpbmcgfSB9O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZy1taWFtLXJlY2lwZS1jYXRhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JlY2lwZS1jYXRhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmVjaXBlLWNhdGFsb2cuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgUmVjaXBlQ2F0YWxvZ0NvbXBvbmVudCBleHRlbmRzIEV2ZW50VHJhY2VyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKENhdGFsb2dIZWFkZXJDb21wb25lbnQpIGNhdGFsb2dIZWFkZXI6IENhdGFsb2dIZWFkZXJDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoQ2F0YWxvZ1Rvb2xiYXJDb21wb25lbnQpIGNhdGFsb2dUb29sYmFyOiBDYXRhbG9nVG9vbGJhckNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnbWlhbUNhdGFsb2dUb3BBbmNob3InKSB0b3BBbmNob3I6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdyZXR1cm5Ib21lQnV0dG9uJykgcmV0dXJuSG9tZUJ1dHRvbjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIEBWaWV3Q2hpbGRyZW4oQ2F0YWxvZ0NhdGVnb3J5Q29tcG9uZW50KSBjYXRlZ29yaWVzQ29tcCE6IFF1ZXJ5TGlzdDxDYXRhbG9nQ2F0ZWdvcnlDb21wb25lbnQ+O1xuXG4gIEBJbnB1dCgpIGhlYWRlclBpY3R1cmVVcmwgPSAnaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Fzc2V0cy5taWFtLnRlY2gvZ2VuZXJpYy9pbWFnZXMvZGVmYXVsdC1jYXRhbG9nLXBpY3R1cmUucG5nJztcbiAgQElucHV0KCkgaW5pdGlhbFJvdXRlID0gJyc7XG4gIEBJbnB1dCgpIGZpbHRlcnNQb3NpdGlvbiA9ICdyaWdodCc7XG4gIEBJbnB1dCgpIGhvbWVMYWJlbDogc3RyaW5nO1xuICBASW5wdXQoKSBkaXNwbGF5SW5mb3MgPSBmYWxzZTtcbiAgQElucHV0KCkgZGlzcGxheVByaWNpbmcgPSB0cnVlO1xuICBASW5wdXQoKSBjdXN0b21GaWx0ZXJzOiB7IGRpZmZpY3VsdHk/OiBSZWNpcGVGaWx0ZXJbXTsgY29zdD86IFJlY2lwZUZpbHRlcltdOyB0aW1lPzogUmVjaXBlRmlsdGVyW10gfTtcblxuICBmaWx0ZXJzOiBSZWNpcGVGaWx0ZXJzO1xuICBpc0ZpbHRlckNvbGxhcHNlZCA9IHRydWU7XG4gIGljb24gPSBJY29uO1xuICBjYXRlZ29yaWVzOiBDYXRlZ29yeVtdID0gW107XG4gIGNyZWF0aW5nUmVjaXBlID0gZmFsc2U7XG4gIHJlY2lwZVRvVXBkYXRlOiBSZWNpcGU7XG4gIGZpbHRlclRvUmVtb3ZlOiBzdHJpbmc7XG4gIGlzTW9iaWxlID0gZmFsc2U7XG4gIHNob3dVc2VyRmVlZGJhY2sgPSBmYWxzZTtcbiAgcmVjaXBlQ291bnQgPSAwO1xuICB0b3RhbFByaWNlID0gMDtcbiAgaXNNeU1lYWxDbG9zZSA9IHRydWU7XG4gIGNhdGFsb2dTZXR0aW5nOiBDYXRhbG9nU2V0dGluZztcbiAgY2F0YWxvZ1NldHRpbmdIYXNMb2FkZWQgPSBmYWxzZTtcbiAgZ3Vlc3RzID0gK2xvY2FsU3RvcmFnZS5nZXRJdGVtKCdfbWlhbS9wcmVmZXJlbmNlcy9ndWVzdHMnKTtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgaGVhZGVySGVpZ2h0U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgc3VwcGxpZXJJZDtcbiAgcHJpdmF0ZSBfaXNQcmVmZXJlbmNlTW9kYWxPcGVuOiBib29sZWFuO1xuICBwcml2YXRlIHN0aWNreVRvb2xiYXJPYnNlcnZlcjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG5cbiAgc2V0IGlzUHJlZmVyZW5jZU1vZGFsT3Blbih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2lzUHJlZmVyZW5jZU1vZGFsT3BlbiA9IHZhbHVlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGdldCBpc1ByZWZlcmVuY2VNb2RhbE9wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzUHJlZmVyZW5jZU1vZGFsT3BlbjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHB1YmxpYyByZWNpcGVUeXBlc1NlcnZpY2U6IFJlY2lwZVR5cGVTZXJ2aWNlLFxuICAgIHB1YmxpYyBzcG9uc29yU2VydmljZTogU3BvbnNvclNlcnZpY2UsXG4gICAgcHVibGljIHN1cHBsaWVyU2VydmljZTogU3VwcGxpZXJzU2VydmljZSxcbiAgICBwdWJsaWMgcGFja2FnZVNlcnZpY2U6IFBhY2thZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVjaXBlc1NlcnZpY2U6IFJlY2lwZXNTZXJ2aWNlLFxuICAgIHB1YmxpYyBtZWRpYU1hdGNoZXI6IE1lZGlhTWF0Y2hlcixcbiAgICBwdWJsaWMgdXNlcnNTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICBwdWJsaWMgY2F0YWxvZ1NldHRpbmdTZXJ2aWNlOiBDYXRhbG9nU2V0dGluZ3NTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBhbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3NTZXJ2aWNlLFxuICAgIHB1YmxpYyBiYXNrZXRzU2VydmljZTogQmFza2V0c1NlcnZpY2UsXG4gICAgcHVibGljIGNvbnRleHRTZXJ2aWNlOiBDb250ZXh0U2VydmljZVxuICApIHtcbiAgICBzdXBlcihhbmFseXRpY3NTZXJ2aWNlKTtcbiAgICB0aGlzLmlzTW9iaWxlID0gbWVkaWFNYXRjaGVyLm1hdGNoTWVkaWEoJyhtYXgtd2lkdGg6IDEwMjJweCknKS5tYXRjaGVzO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5wYWdldmlldygpO1xuICAgIHRoaXMuaW5pdEZpbHRlcnMoKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5zdXBwbGllclNlcnZpY2Uuc3VwcGxpZXIkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgICAgIHNraXBXaGlsZShzdXBwID0+IHN1cHAgPT09IHVuZGVmaW5lZCB8fCBzdXBwID09IG51bGwpLFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBzd2l0Y2hNYXAoc3VwcGxpZXIgPT4ge1xuICAgICAgICAgIHRoaXMuc3VwcGxpZXJJZCA9IHN1cHBsaWVyLmlkO1xuICAgICAgICAgIHRoaXMuaW5pdENhdGFsb2dIZWFkZXIoc3VwcGxpZXIpO1xuICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRQYWNrYWdlcygpO1xuICAgICAgICB9KVxuICAgICAgKS5zdWJzY3JpYmUoKSxcbiAgICAgIHRoaXMuYmFza2V0c1NlcnZpY2UuYmFza2V0U3RhdHMkLnBpcGUoc2tpcFdoaWxlKGJzID0+ICFicykpLnN1YnNjcmliZShicyA9PiB7XG4gICAgICAgIHRoaXMucmVjaXBlQ291bnQgPSBicy5yZWNpcGVzQ291bnQ7XG4gICAgICAgIHRoaXMudG90YWxQcmljZSA9IGJzLnRvdGFsUHJpY2U7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pLFxuICAgICAgdGhpcy5hc3Nlc3NTaG93VXNlckZlZWRiYWNrKClcbiAgICApO1xuXG4gICAgdGhpcy5zZXREaXJlY3RBY2Nlc3MoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLm9wZW5GZWF0dXJlc0Zyb21VUkwoKTtcbiAgICB0aGlzLmluaXRIZWFkZXJIZWlnaHRMaXN0ZW5lcigpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICB0aGlzLmhlYWRlckhlaWdodFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1pYW0tcmVjaXBlLWNhdGFsb2dfX3Rvb2xiYXItY29udGFpbmVyJykpIHtcbiAgICAgIHRoaXMuc3RpY2t5VG9vbGJhck9ic2VydmVyLnVub2JzZXJ2ZShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWlhbS1yZWNpcGUtY2F0YWxvZ19fdG9vbGJhci1jb250YWluZXInKSk7XG4gICAgfVxuICB9XG5cbiAgY3VycmVudFBhdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ21pYW0vcmVjaXBlcyc7XG4gIH1cblxuICBvcGVuRmVhdHVyZXNGcm9tVVJMKCkge1xuICAgIGNvbnN0IHBhcmFtc0FycmF5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgICBpZiAocGFyYW1zQXJyYXkuZ2V0KCdvcGVuQmFza2V0JykgPT09ICd0cnVlJykge1xuICAgICAgdGhpcy50b2dnbGVNeU1lYWxEcmF3ZXIoKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtc0FycmF5LmdldCgncGVyc29uYWxDYXRhbG9nJykgPT09ICd0cnVlJykge1xuICAgICAgdGhpcy5zZXRQZXJzb25hbEZpbHRlcigpO1xuICAgIH1cbiAgICBjb25zdCBjb3N0ID0gcGFyYW1zQXJyYXkuZ2V0KCdjb3N0Jyk/LnNwbGl0KCcsJyk7XG4gICAgaWYgKGNvc3Q/Lmxlbmd0aCA9PT0gMikge1xuICAgICAgdGhpcy5zZXRQcmljZUZpbHRlcnMoY29zdCk7XG4gICAgfVxuICB9XG5cbiAgZGlzcGxheUhvbWVQYWdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlcnMuaXNFbXB0eSgpO1xuICB9XG5cbiAgLy8gaW5pdCB0aGUgdmFsdWUgb2YgdGhlIGltYWdlIGFuZCB0aGUgdGV4dCBmb3IgdGhlIGNhdGFsb2cgaGVhZGVyLCB1c2luZyB0aGUgY2F0YWxvZyBzZXR0aW5nIG9mIHRoZSBzdXBwbGllclxuICBpbml0Q2F0YWxvZ0hlYWRlcihzdXBwbGllcjogU3VwcGxpZXIpIHtcbiAgICBpZiAoc3VwcGxpZXIucmVsYXRpb25zaGlwc1snY2F0YWxvZy1zZXR0aW5nJ10/LmRhdGEpIHtcbiAgICAgIGNvbnN0IGlkID0gc3VwcGxpZXIucmVsYXRpb25zaGlwc1snY2F0YWxvZy1zZXR0aW5nJ10/LmRhdGE/LmlkO1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgIHRoaXMuY2F0YWxvZ1NldHRpbmdTZXJ2aWNlLmdldChpZCkucGlwZShcbiAgICAgICAgICBza2lwV2hpbGUoYyA9PiBjLmlzX2xvYWRpbmcpLFxuICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgdGFwKGNhdGFsb2cgPT4ge1xuICAgICAgICAgICAgdGhpcy5jYXRhbG9nU2V0dGluZyA9IGNhdGFsb2c7XG4gICAgICAgICAgICB0aGlzLmNhdGFsb2dTZXR0aW5nSGFzTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RpY2t5T2JzZXJ2ZXIoKTtcbiAgICAgICAgICB9KVxuICAgICAgICApLnN1YnNjcmliZSgpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFVzZWQgb24gbG9hZCB0byBidWlsZCB0aGUgZmlsdGVycyBhdHRyaWJ1dGUsIGFuZCBvbiBjbGljayBvbiB0aGUgbGluayB0byByZXNldCB0aGUgZmlsdGVyc1xuICBpbml0RmlsdGVycygpIHtcbiAgICB0aGlzLmZpbHRlcnMgPSBuZXcgUmVjaXBlRmlsdGVycyhcbiAgICAgIHtcbiAgICAgICAgZGlmZmljdWx0eTogdGhpcy5yZWNpcGVzU2VydmljZS5kaWZmaWN1bHR5TGV2ZWxzLm1hcChmID0+ICh7IG5hbWU6IGYudmFsdWUudG9TdHJpbmcoKSwgdGV4dDogZi5sYWJlbCwgdmFsdWU6IGZhbHNlIH0pKSxcbiAgICAgICAgY29zdDogW1xuICAgICAgICAgIHsgbmFtZTogJzAtNScsIHZhbHVlOiBmYWxzZSB9LFxuICAgICAgICAgIHsgbmFtZTogJzUtMTAnLCB2YWx1ZTogZmFsc2UgfSxcbiAgICAgICAgICB7IG5hbWU6ICcxMC0xMDAwJywgdmFsdWU6IGZhbHNlIH1cbiAgICAgICAgICAvLyB3ZSBzZXQgYSBsaW1pdCBhdCAxMDAw4oKsIG1heCwgaWYgYSByZWNpcGUgY29zdCBtb3JlIHNob3VsZCBiZSBub24gc2Vuc2UgYW55d2F5XG4gICAgICAgIF0sXG4gICAgICAgIHRpbWU6IFtcbiAgICAgICAgICB7IG5hbWU6ICcxNScsIHZhbHVlOiBmYWxzZSB9LFxuICAgICAgICAgIHsgbmFtZTogJzMwJywgdmFsdWU6IGZhbHNlIH0sXG4gICAgICAgICAgeyBuYW1lOiAnNjAnLCB2YWx1ZTogZmFsc2UgfSxcbiAgICAgICAgICB7IG5hbWU6ICcxMjAnLCB2YWx1ZTogZmFsc2UgfVxuXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICApO1xuICAgIGlmICh0aGlzLmN1c3RvbUZpbHRlcnMpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5maWx0ZXJzLCB0aGlzLmN1c3RvbUZpbHRlcnMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jYXRhbG9nVG9vbGJhcikge1xuICAgICAgdGhpcy5jYXRhbG9nVG9vbGJhci5yZXNldFNlYXJjaFN0cmluZygpO1xuICAgIH1cbiAgICB0aGlzLmZpbHRlcnMuc2VhcmNoID0gJyc7XG4gICAgdGhpcy5maWx0ZXJzLmFkZGl0aW9uYWxGaWx0ZXJzID0gbnVsbDtcbiAgfVxuXG4gIHVwZGF0ZUZpbHRlcnMoZmlsdGVyczogUmVjaXBlRmlsdGVycykge1xuICAgIHRoaXMuZmlsdGVycyA9IGZpbHRlcnMuY29weSgpOyAvLyBuZWNlc3NhcnkgdG8gdHJpZ2dlciBjaGlsZCBjb21wb25lbnQgY2hhbmdlXG4gICAgdGhpcy5maWx0ZXJUb1JlbW92ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5zZXRTdGlja3lPYnNlcnZlcigpO1xuICAgIHRoaXMucmV0dXJuVG9Ub3AoKTtcbiAgfVxuXG4gIHVwZGF0ZVNlYXJjaChzZWFyY2g6IHN0cmluZykge1xuICAgIGlmIChzZWFyY2ggIT09IHRoaXMuZmlsdGVycy5zZWFyY2gpIHtcbiAgICAgIGNvbnN0IGZpbHRlcnMgPSBPYmplY3QuYXNzaWduKHRoaXMuZmlsdGVycywgeyBzZWFyY2ggfSk7XG4gICAgICB0aGlzLnVwZGF0ZUZpbHRlcnMoZmlsdGVycyk7XG4gICAgfVxuICB9XG5cbiAgY2F0ZWdvcnlUaXRsZUNsaWNrZWQoZXZlbnQ6IHsgdGl0bGU6IHN0cmluZzsgc3VidGl0bGU6IHN0cmluZzsgZmlsdGVyczogSUFkZGl0aW9ubmFsRmlsdGVycyB9KTogdm9pZCB7XG4gICAgY29uc3QgZmlsdGVycyA9IE9iamVjdC5hc3NpZ24odGhpcy5maWx0ZXJzLCB7XG4gICAgICBhZGRpdGlvbmFsRmlsdGVyczogeyBmaWx0ZXJzOiBldmVudC5maWx0ZXJzLCB0aXRsZTogZXZlbnQudGl0bGUsIHN1YnRpdGxlOiBldmVudC5zdWJ0aXRsZSB9XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVGaWx0ZXJzKGZpbHRlcnMpO1xuICB9XG5cbiAgc2V0RmF2b3JpdGVzRmlsdGVyKCk6IHZvaWQge1xuICAgIGNvbnN0IGZpbHRlcnMgPSBPYmplY3QuYXNzaWduKHRoaXMuZmlsdGVycywge1xuICAgICAgYWRkaXRpb25hbEZpbHRlcnM6IHtcbiAgICAgICAgZmlsdGVyczogeyBsaWtlZDogdHJ1ZSB9LFxuICAgICAgICB0aXRsZTogJ01lcyBpZMOpZXMgcmVwYXMnXG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVGaWx0ZXJzKGZpbHRlcnMpO1xuICB9XG5cbiAgc2V0UGVyc29uYWxGaWx0ZXIoKTogdm9pZCB7XG4gICAgY29uc3QgZmlsdGVycyA9IE9iamVjdC5hc3NpZ24odGhpcy5maWx0ZXJzLCB7XG4gICAgICBhZGRpdGlvbmFsRmlsdGVyczoge1xuICAgICAgICBmaWx0ZXJzOiB7IHBlcnNvbmFsOiB0cnVlLCBhY3RpdmU6ICd0cnVlLGZhbHNlJyB9LFxuICAgICAgICB0aXRsZTogJ01vbiBjYXJuZXQgcGVyc28nXG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVGaWx0ZXJzKGZpbHRlcnMpO1xuICB9XG5cbiAgc2V0UHJpY2VGaWx0ZXJzKGNvc3Q6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgY29uc3QgZmlsdGVycyA9IE9iamVjdC5hc3NpZ24odGhpcy5maWx0ZXJzLCB7XG4gICAgICBhZGRpdGlvbmFsRmlsdGVyczoge1xuICAgICAgICBmaWx0ZXJzOiB7IGNvbXB1dGVkX2Nvc3Q6IGNvc3RbMF0gKyAnLGd0LCcgKyBjb3N0WzFdICsgJyxsdCcsIHJlY2lwZV90eXBlX2lkOiAnbWFpbi1kaXNoJyB9LFxuICAgICAgICB0aXRsZTogYFJlY2V0dGVzIMOgIG1vaW5zIGRlICR7Y29zdFsxXX3igqxgXG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVGaWx0ZXJzKGZpbHRlcnMpO1xuICB9XG5cbiAgcmVtb3ZlRmlsdGVyKGZpbHRlclRleHQ6IHN0cmluZykge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBmdW5jdGlvbiBpcyBicm9rZW4sIHVzZSBoYXMgYmVlbiBjb21tZW50YXRlZCwgcmVwYWlyIGl0IGlmIHlvdSB3YW50IHRvIHVzZSBpdCBhZ2FpbicpO1xuICAgIHRoaXMuZmlsdGVyVG9SZW1vdmUgPSBmaWx0ZXJUZXh0O1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHJldHVyblRvVG9wKCkge1xuICAgIGlmICh0aGlzLnRvcEFuY2hvcikge1xuICAgICAgdGhpcy50b3BBbmNob3IubmF0aXZlRWxlbWVudC5zY3JvbGxJbnRvVmlldygpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVyblRvSG9tZVBhZ2UoKSB7XG4gICAgdGhpcy5wYWdldmlldygpO1xuICAgIC8vIGVpdGhlciB5b3UgaGF2ZSBmaWx0ZXJzIGVpdGhlciB5b3UgYXJlIG9uIGhvbWUgcGFnZS4gVGhhdCBtZWFuIGlmIHlvdSBnbyBvbiBob21lIHBhZ2UgeW91IGRvbid0IHdhbnQgQU5ZIGZpbHRlclxuICAgIHRoaXMuaW5pdEZpbHRlcnMoKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5zZXRTdGlja3lPYnNlcnZlcigpO1xuICAgIHRoaXMucmV0dXJuVG9Ub3AoKTtcbiAgfVxuXG4gIG9uRmlsdGVyQ29sbGFwc2VkKCkge1xuICAgIHRoaXMuaXNGaWx0ZXJDb2xsYXBzZWQgPSAhdGhpcy5pc0ZpbHRlckNvbGxhcHNlZDtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBnb1RvQ3JlYXRlUGFnZShyZWNpcGU6IFJlY2lwZSA9IG51bGwpIHtcbiAgICB0aGlzLmNyZWF0aW5nUmVjaXBlID0gdHJ1ZTtcbiAgICB0aGlzLnJlY2lwZVRvVXBkYXRlID0gcmVjaXBlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLnNldFN0aWNreU9ic2VydmVyKCk7XG4gICAgdGhpcy5yZXR1cm5Ub1RvcCgpO1xuICB9XG5cbiAgbGVhdmVDcmVhdGVQYWdlKCkge1xuICAgIHRoaXMuY3JlYXRpbmdSZWNpcGUgPSBmYWxzZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5zZXRTdGlja3lPYnNlcnZlcigpO1xuICAgIHRoaXMucmV0dXJuVG9Ub3AoKTtcbiAgfVxuXG4gIG1hbmFnZVJlY2lwZUFjdGlvbihldmVudDogeyBhY3Rpb246IHN0cmluZzsgcmVjaXBlOiBSZWNpcGUgfSkge1xuICAgIHN3aXRjaCAoZXZlbnQuYWN0aW9uKSB7XG4gICAgICBjYXNlICdDUkVBVEUnOiB7XG4gICAgICAgIHRoaXMuZ29Ub0NyZWF0ZVBhZ2UoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ0VESVQnOiB7XG4gICAgICAgIHRoaXMuZ29Ub0NyZWF0ZVBhZ2UoZXZlbnQucmVjaXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ0RFTEVURSc6IHtcbiAgICAgICAgaWYgKGV2ZW50LnJlY2lwZT8uaWQgJiYgZXZlbnQucmVjaXBlLnJlbGF0aW9uc2hpcHNbJ3JlY2lwZS1wcm92aWRlciddPy5kYXRhLmlkID09PSAncGVyc29uYWwnKSB7XG4gICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICB0aGlzLnJlY2lwZXNTZXJ2aWNlLmRlbGV0ZShldmVudC5yZWNpcGUuaWQpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5wcm9wcygpLCB7IHJlY2lwZUlkOiBldmVudC5yZWNpcGUuaWQgfSk7XG4gICAgICAgICAgICAgIHRoaXMuc2VuZEV2ZW50KHRoaXMuYW5hbHl0aWNzU2VydmljZS5FVkVOVF9QRVJTT05BTF9SRUNJUEVfREVMRVRFKTtcbiAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlbG9hZFBhY2thZ2VzKCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5sb2FkUGFja2FnZXMoKS5zdWJzY3JpYmUoKVxuICAgICk7XG4gIH1cblxuICBpc1NlYXJjaFBhZ2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmRpc3BsYXlIb21lUGFnZSgpICYmIHRoaXMuZmlsdGVycy5zZWFyY2ggJiYgdGhpcy5maWx0ZXJzLnNlYXJjaC5sZW5ndGggPiAwO1xuICB9XG5cbiAgaXNGYXZvcml0ZXNQYWdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5kaXNwbGF5SG9tZVBhZ2UoKSAmJiAhdGhpcy5pc1NlYXJjaFBhZ2UoKSAmJiB0aGlzLmZpbHRlcnM/LmFkZGl0aW9uYWxGaWx0ZXJzPy50aXRsZSA9PT0gJ01lcyBpZMOpZXMgcmVwYXMnO1xuICB9XG5cbiAgaXNQZXJzb25hbFBhZ2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmRpc3BsYXlIb21lUGFnZSgpICYmICF0aGlzLmlzU2VhcmNoUGFnZSgpICYmIHRoaXMuZmlsdGVycz8uYWRkaXRpb25hbEZpbHRlcnM/LnRpdGxlID09PSAnTW9uIGNhcm5ldCBwZXJzbyc7XG4gIH1cblxuICBpc0NhdGVnb3J5UGFnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZGlzcGxheUhvbWVQYWdlKCkgJiYgIXRoaXMuaXNTZWFyY2hQYWdlKCkgJiYgIXRoaXMuaXNGYXZvcml0ZXNQYWdlKCkgJiYgIXRoaXMuaXNQZXJzb25hbFBhZ2UoKSAmJlxuICAgICAgdGhpcy5maWx0ZXJzPy5hZGRpdGlvbmFsRmlsdGVycz8udGl0bGU/Lmxlbmd0aCA+IDA7XG4gIH1cblxuICBpc0RlZmF1bHRQYWdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5kaXNwbGF5SG9tZVBhZ2UoKSAmJiAhdGhpcy5pc1NlYXJjaFBhZ2UoKSAmJiAhdGhpcy5pc0Zhdm9yaXRlc1BhZ2UoKSAmJiAhdGhpcy5pc1BlcnNvbmFsUGFnZSgpICYmICF0aGlzLmlzQ2F0ZWdvcnlQYWdlKCk7XG4gIH1cblxuICBjYW5EaXNwbGF5Q3JlYXRpb25CdXR0b24oKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMudXNlcnNTZXJ2aWNlLmlzTG9nZ2VkJC5hc09ic2VydmFibGUoKS5waXBlKFxuICAgICAgbWFwKGlzTG9nZ2VkID0+IGlzTG9nZ2VkICYmIHRoaXMuaXNQZXJzb25hbFBhZ2UoKSlcbiAgICApO1xuICB9XG5cbiAgdG9nZ2xlTXlNZWFsRHJhd2VyKCk6IHZvaWQge1xuICAgIHRoaXMucmVjaXBlc1NlcnZpY2Uub3BlbkJhc2tldCh0aGlzLmV2ZW50VHJhY2UoKSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRQYWNrYWdlcygpOiBPYnNlcnZhYmxlPERvY3VtZW50Q29sbGVjdGlvbjxQYWNrYWdlPj4ge1xuICAgIHJldHVybiB0aGlzLnBhY2thZ2VTZXJ2aWNlLmNhdGVnb3JpZXNfZm9yKFt0aGlzLnN1cHBsaWVySWRdKS5waXBlKFxuICAgICAgc2tpcFdoaWxlKHBhY2thZ2VzID0+IHBhY2thZ2VzLmlzX2xvYWRpbmcpLFxuICAgICAgdGFwKChwYWNrYWdlczogRG9jdW1lbnRDb2xsZWN0aW9uPFBhY2thZ2U+KSA9PiB7XG4gICAgICAgIHRoaXMuaW5pdENhdGVnb3JpZXMocGFja2FnZXMpO1xuICAgICAgICB0aGlzLnNlbGVjdENhdGVnb3J5RnJvbVVybCgpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGluaXRDYXRlZ29yaWVzKHBhY2thZ2VzOiBEb2N1bWVudENvbGxlY3Rpb248UGFja2FnZT4pOiB2b2lkIHtcbiAgICB0aGlzLmNhdGVnb3JpZXMgPSBwYWNrYWdlcy5kYXRhLm1hcChjYXRlZ29yeVBhY2thZ2UgPT4gKHtcbiAgICAgIGtleTogY2F0ZWdvcnlQYWNrYWdlLnRpdGxlLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16QS1aMC05IC1dLywgJycpLnJlcGxhY2UoL1xccy9nLCAnLScpLFxuICAgICAgdGl0bGU6IGNhdGVnb3J5UGFja2FnZS50aXRsZSxcbiAgICAgIHN1YnRpdGxlOiBjYXRlZ29yeVBhY2thZ2Uuc3VidGl0bGUsXG4gICAgICBmaWx0ZXJzOiB7XG4gICAgICAgIGFkZGl0aW9uYWxGaWx0ZXJzOiB7XG4gICAgICAgICAgZmlsdGVyczogeyBwYWNrYWdlczogY2F0ZWdvcnlQYWNrYWdlLmlkIH0sXG4gICAgICAgICAgdGl0bGU6ICcnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdENhdGVnb3J5RnJvbVVybCgpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbXNBcnJheSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgaWYgKHBhcmFtc0FycmF5LmdldCgnY2F0YWxvZ0NhdGVnb3J5JykgPT09ICdmYXZvcml0ZXMnKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXRGYXZvcml0ZXNGaWx0ZXIoKTtcbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0ZWRDYXRlZ29yeSA9IHRoaXMuY2F0ZWdvcmllcy5maW5kKChjYXQpID0+IGNhdC5rZXkgPT09IHBhcmFtc0FycmF5LmdldCgnY2F0YWxvZ0NhdGVnb3J5JykpO1xuICAgIGlmIChzZWxlY3RlZENhdGVnb3J5KSB7XG4gICAgICByZXR1cm4gdGhpcy5jYXRlZ29yeVRpdGxlQ2xpY2tlZCh7XG4gICAgICAgIHRpdGxlOiBzZWxlY3RlZENhdGVnb3J5LnRpdGxlLFxuICAgICAgICBzdWJ0aXRsZTogc2VsZWN0ZWRDYXRlZ29yeS5zdWJ0aXRsZSxcbiAgICAgICAgZmlsdGVyczogc2VsZWN0ZWRDYXRlZ29yeS5maWx0ZXJzLmFkZGl0aW9uYWxGaWx0ZXJzLmZpbHRlcnNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNob3cgZmVlZGJhY2sgYmxvY2sgb25seSBpZiB1c2VyIGlzIGxvZ2dlZCBhbmQgdGhlIGNoaWxkcmVuIHByZWZlcmVuY2UgaXMgdW5rbm93blxuICBwcml2YXRlIGFzc2Vzc1Nob3dVc2VyRmVlZGJhY2soKTogU3Vic2NyaXB0aW9uIHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnVzZXJzU2VydmljZS5pc0xvZ2dlZCQsXG4gICAgICB0aGlzLnVzZXJzU2VydmljZS5oYXNQcmVmZXJlbmNlKCdoYXNfY2hpbGRyZW4nKSxcbiAgICAgIHRoaXMudXNlcnNTZXJ2aWNlLnByZWZlcmVuY2VzQWN0aXZhdGVkJFxuICAgIF0pLnN1YnNjcmliZShyZXN1bHRzID0+IHtcbiAgICAgIGNvbnN0IGxvZ2dlZCA9IHJlc3VsdHNbMF07XG4gICAgICBjb25zdCBwcmVmZXJlbmNlRGVmaW5lZCA9IHJlc3VsdHNbMV07XG4gICAgICBjb25zdCBwcmVmZXJlbmNlc0FjdGl2YXRlZCA9IHJlc3VsdHNbMl07XG4gICAgICB0aGlzLnNob3dVc2VyRmVlZGJhY2sgPSBsb2dnZWQgJiYgIXByZWZlcmVuY2VEZWZpbmVkICYmIHByZWZlcmVuY2VzQWN0aXZhdGVkO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREaXJlY3RBY2Nlc3MoKSB7XG4gICAgaWYgKHRoaXMuaW5pdGlhbFJvdXRlICE9PSAnJykge1xuICAgICAgc3dpdGNoICh0aGlzLmluaXRpYWxSb3V0ZSkge1xuICAgICAgICBjYXNlICdtZXMtcmVwYXMnOlxuICAgICAgICAgIHRoaXMudG9nZ2xlTXlNZWFsRHJhd2VyKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ21lcy1yZWNldHRlcy1wZXJzb25uZWxsZXMnOlxuICAgICAgICAgIHRoaXMuc2V0UGVyc29uYWxGaWx0ZXIoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncmVjZXR0ZXMtZmF2b3JpdGVzJzpcbiAgICAgICAgICB0aGlzLnNldEZhdm9yaXRlc0ZpbHRlcigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgaGVhZGVyIGhlaWdodCBsaXN0ZW5lciBhbmQgc3Vic2NyaWJlcyB0byBjaGFuZ2VzIGluIHRoZSBzdXBwbGllciBoZWFkZXIgaGVpZ2h0LlxuICAgKi9cbiAgcHJpdmF0ZSBpbml0SGVhZGVySGVpZ2h0TGlzdGVuZXIoKSB7XG4gICAgdGhpcy5oZWFkZXJIZWlnaHRTdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5jb250ZXh0U2VydmljZS5zdXBwbGllckhlYWRlckhlaWdodCQuc3Vic2NyaWJlKChoZWFkZXJIZWlnaHQ6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBhbmNob3JFbG06IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1pYW0tcmVjaXBlLWNhdGFsb2dfX3Rvb2xiYXItY29udGFpbmVyJyk7XG4gICAgICAgIGlmIChhbmNob3JFbG0pIHtcbiAgICAgICAgICBhbmNob3JFbG0uc3R5bGUudG9wID0gaGVhZGVySGVpZ2h0ICsgJ3B4JztcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHN0aWNreSBvYnNlcnZlciBmb3IgdGhlIHRvb2xiYXIuXG4gICAqL1xuICBwcml2YXRlIHNldFN0aWNreU9ic2VydmVyKCkge1xuICAgIGlmICghdGhpcy5jcmVhdGluZ1JlY2lwZSkge1xuICAgICAgY29uc3QgYW5jaG9yRWxtOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5taWFtLXJlY2lwZS1jYXRhbG9nX190b29sYmFyLWNvbnRhaW5lci1hbmNob3InKTtcbiAgICAgIGNvbnN0IHRvb2xiYXJFbG06IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1pYW0tcmVjaXBlLWNhdGFsb2dfX3Rvb2xiYXItY29udGFpbmVyJyk7XG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICByb290OiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbWlhbUNhdGFsb2dUb3BBbmNob3InKSxcbiAgICAgICAgcm9vdE1hcmdpbjogYC0ke3RoaXMuY29udGV4dFNlcnZpY2Uuc3VwcGxpZXJIZWFkZXJIZWlnaHQkLnZhbHVlfXB4IDBweCAwcHggMHB4YCxcbiAgICAgICAgdGhyZXNob2xkOiAxLjAsXG4gICAgICB9O1xuXG4gICAgICBpZiAoIWFuY2hvckVsbSB8fCAhdG9vbGJhckVsbSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFN0b3Agb2JzZXJ2aW5nIHRoZSBwcmV2aW91cyBhbmNob3IgZWxlbWVudFxuICAgICAgdGhpcy5zdGlja3lUb29sYmFyT2JzZXJ2ZXI/LnVub2JzZXJ2ZShhbmNob3JFbG0pO1xuXG4gICAgICB0aGlzLnN0aWNreVRvb2xiYXJPYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcbiAgICAgICAgKFtlXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFjdGl2YXRlZCA9IHRvb2xiYXJFbG0uY2xhc3NMaXN0LnRvZ2dsZSgnc3RpY2tpbmcnLCBlLmludGVyc2VjdGlvblJhdGlvIDwgMSk7XG4gICAgICAgICAgLy8gU2V0IHRoZSBoZWlnaHQgb2YgdGhlIHRhcmdldCBlbGVtZW50XG4gICAgICAgICAgKGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5zdHlsZS5oZWlnaHQgPSBhY3RpdmF0ZWQgPyB0b29sYmFyRWxtLmNsaWVudEhlaWdodCArICdweCcgOiAnMHB4JztcbiAgICAgICAgICAvLyBTZXQgdGhlIHRvcCBwb3NpdGlvbiBvZiB0aGUgdG9vbGJhclxuICAgICAgICAgIHRvb2xiYXJFbG0uc3R5bGUudG9wID0gdGhpcy5jb250ZXh0U2VydmljZS5zdXBwbGllckhlYWRlckhlaWdodCQudmFsdWUgKyAncHgnO1xuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICAgIHRoaXMuc3RpY2t5VG9vbGJhck9ic2VydmVyLm9ic2VydmUoYW5jaG9yRWxtKTtcbiAgICB9XG4gIH1cblxuICAvLyBVbnVzZWQgZm9yIG5vdy4uLlxuICAvLyBzZXRVc2VyUHJlZmVyZW5jZShwcmVmLCBzdGF0ZSkge1xuICAvLyAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAvLyAgICAgdGhpcy51c2Vyc1NlcnZpY2Uuc2V0UHJlZmVyZW5jZShwcmVmLCBzdGF0ZSkucGlwZShcbiAgLy8gICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMubG9hZFBhY2thZ2VzKCkpXG4gIC8vICAgICApLnN1YnNjcmliZSgpXG4gIC8vICAgKTtcbiAgLy8gICB0aGlzLmNsb3NlTW9kYWwoKTtcbiAgLy8gfVxuXG4gIC8vIHByaXZhdGUgY2xvc2VNb2RhbCgpIHtcbiAgLy8gICB0aGlzLnNob3dVc2VyRmVlZGJhY2sgPSAhdGhpcy5zaG93VXNlckZlZWRiYWNrO1xuICAvLyAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgLy8gfVxufVxuIiwiPGRpdiAjbWlhbUNhdGFsb2dUb3BBbmNob3IgY2xhc3M9XCJtaWFtLWNhdGFsb2ctYW5jaG9yXCI+PC9kaXY+XG48ZGl2ICpuZ0lmPVwiIWNyZWF0aW5nUmVjaXBlICYmIGNhdGFsb2dTZXR0aW5nSGFzTG9hZGVkIGVsc2UgY3JlYXRpb25QYWdlXCIgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nXCI+XG4gIDxkaXYgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19jb250ZW50XCI+XG4gICAgPG5nLW1pYW0tY2F0YWxvZy1oZWFkZXJcbiAgICAgIFtob21lXT1cImRpc3BsYXlIb21lUGFnZSgpXCJcbiAgICAgIFtzZWFyY2hUZXJtXT1cImZpbHRlcnM/LnNlYXJjaFwiXG4gICAgICBbYWRkaXRpb25hbEZpbHRlcnNUaXRsZV09XCJmaWx0ZXJzPy5hZGRpdGlvbmFsRmlsdGVycz8udGl0bGVcIlxuICAgICAgW2hvbWVMYWJlbF09XCJob21lTGFiZWxcIlxuICAgICAgW3BpY3R1cmVVcmxdPVwiZGlzcGxheUhvbWVQYWdlKCkgPyBoZWFkZXJQaWN0dXJlVXJsIDogbnVsbFwiXG4gICAgICBbY2F0YWxvZ1NldHRpbmddPVwiY2F0YWxvZ1NldHRpbmdcIlxuICAgICAgKHJldHVybkJ1dHRvblByZXNzZWQpPVwicmV0dXJuVG9Ib21lUGFnZSgpXCI+XG4gICAgPC9uZy1taWFtLWNhdGFsb2ctaGVhZGVyPlxuICAgIDxkaXYgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX190b29sYmFyLWNvbnRhaW5lci1hbmNob3JcIiAqbmdJZj1cImRpc3BsYXlIb21lUGFnZSgpXCI+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX3Rvb2xiYXItY29udGFpbmVyXCIgKm5nSWY9XCJkaXNwbGF5SG9tZVBhZ2UoKVwiICNzdGlja3lUb29sYmFyPlxuICAgICAgPG5nLW1pYW0tY2F0YWxvZy10b29sYmFyXG4gICAgICAgIFtob21lXT1cImRpc3BsYXlIb21lUGFnZSgpXCJcbiAgICAgICAgW3NlYXJjaFRlcm1dPVwiZmlsdGVycz8uc2VhcmNoXCJcbiAgICAgICAgW2FkZGl0aW9uYWxGaWx0ZXJzVGl0bGVdPVwiZmlsdGVycz8uYWRkaXRpb25hbEZpbHRlcnM/LnRpdGxlXCJcbiAgICAgICAgW2Zhdm9yaXRlc0J1dHRvbkhpZGRlbl09XCJpc0Zhdm9yaXRlc1BhZ2UoKVwiXG4gICAgICAgIFtwZXJzb25hbEJ1dHRvbkhpZGRlbl09XCIhKGNvbnRleHRTZXJ2aWNlLmVuYWJsZVBlcnNvbmFsUmVjaXBlcyQgfCBhc3luYylcIlxuICAgICAgICBbZmlsdGVyQmFkZ2VDb3VudF09XCJmaWx0ZXJzLnNlbGVjdGFibGVGaWx0ZXJzQ291bnQoKVwiXG4gICAgICAgIChmaWx0ZXJCdXR0b25QcmVzc2VkKT1cIm9uRmlsdGVyQ29sbGFwc2VkKClcIlxuICAgICAgICBbcmVkdWNlZF09XCJzdGlja3lUb29sYmFyLmNsYXNzTGlzdC5jb250YWlucygnc3RpY2tpbmcnKVwiXG4gICAgICAgIChwcmVmZXJlbmNlc0J1dHRvblByZXNzZWQpPVwiaXNQcmVmZXJlbmNlTW9kYWxPcGVuID0gIWlzUHJlZmVyZW5jZU1vZGFsT3BlblwiXG4gICAgICAgIChzZWFyY2hTdHJpbmdDaGFuZ2VkKT1cInVwZGF0ZVNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgKHBlcnNvbmFsQnV0dG9uUHJlc3NlZCk9XCJzZXRQZXJzb25hbEZpbHRlcigpXCJcbiAgICAgICAgKGZhdm9yaXRlc0J1dHRvblByZXNzZWQpPVwic2V0RmF2b3JpdGVzRmlsdGVyKClcIlxuICAgICAgICAocmV0dXJuSG9tZVByZXNzZWQpPVwicmV0dXJuVG9Ib21lUGFnZSgpXCI+XG4gICAgICA8L25nLW1pYW0tY2F0YWxvZy10b29sYmFyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJyZWNpcGVDb3VudCA+IDBcIiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2NvbnRlbnRfX215TWVhbF9fYnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZU15TWVhbERyYXdlcigpXCI+XG4gICAgICA8aW1nXG4gICAgICAgIHNyYz1cImh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9hc3NldHMubWlhbS50ZWNoL2dlbmVyaWMvaWNvbnMvY3V0bGVyeS13aGl0ZS5zdmdcIlxuICAgICAgICBhbHQ9XCJDdXRsZXJ5XCJcbiAgICAgICAgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19teU1lYWxfX2ZpcnN0X19pY29uXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX215TWVhbF9fYnV0dG9uX190ZXh0IG1pYW0tZHMtdGV4dCB3ZWlnaHQteGxcIj5cbiAgICAgICAgPHNwYW4+e3sgcmVjaXBlQ291bnQgfX08L3NwYW4+XG4gICAgICAgIDxzcGFuIGkxOG4+IHJlcGFzIGRhbnMgdm90cmUgcGFuaWVyPC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgICAgPGltZ1xuICAgICAgICBzcmM9XCJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vYXNzZXRzLm1pYW0udGVjaC9nZW5lcmljL2ljb25zL2NoZXZyb24tZG93bi13aGl0ZS5zdmdcIlxuICAgICAgICBhbHQ9XCJDYXJldFwiXG4gICAgICAgIGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fbXlNZWFsX19zZWNvbmRfX2ljb25cIj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gVXNlciBmZWVkYmFjayBiYW5uZXIgKHVudXNlZCBmb3Igbm93IC8gbWF5YmUgcmVhY3RpdmF0ZWQgbGF0ZXIpIC0tPlxuICAgIDwhLS0gPGRpdiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2NvbnRlbnRfX3VzZXItZmVlZGJhY2tfX21vZGFsXCIgKm5nSWY9XCJzaG93VXNlckZlZWRiYWNrXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fY29udGVudF9fdXNlci1mZWVkYmFja1wiPlxuICAgICAgICA8bmctbWlhbS1pY29uIGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fY29udGVudF9fdXNlci1mZWVkYmFja19faWNvbi1jcm9zc1wiIChjbGljayk9XCJjbG9zZU1vZGFsKClcIiBbaWNvbk5hbWVdPVwiaWNvbi5Dcm9zc1wiIFt3aWR0aF09XCIzMFwiIFtoZWlnaHRdPVwiMzBcIiBwcmltYXJ5Q29sb3I9XCJub25lXCI+PC9uZy1taWFtLWljb24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19jb250ZW50X191c2VyLWZlZWRiYWNrX190aXRsZVwiPlxuICAgICAgICAgICAgPHNwYW4+UG91ciBtaWV1eCB2b3VzIGNvbm5hw650cmU8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fY29udGVudF9fdXNlci1mZWVkYmFja19fcXVlc3Rpb25cIj5cbiAgICAgICAgICAgIDxzcGFuPkF2ZXotdm91cyBsJ2hhYml0dWRlIGRlIGN1aXNpbmVyIHBvdXIgb3UgYXZlYyBkZXMgZW5mYW50cyA/PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fY29udGVudF9fdXNlci1mZWVkYmFja19fYWN0aW9uc1wiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtLWZlZWRiYWNrLWJ1dHRvblwiIChjbGljayk9XCJzZXRVc2VyUHJlZmVyZW5jZSgnaGFzX2NoaWxkcmVuJywgZmFsc2UpXCI+Tm9uPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm0tZmVlZGJhY2stYnV0dG9uXCIgKGNsaWNrKT1cInNldFVzZXJQcmVmZXJlbmNlKCdoYXNfY2hpbGRyZW4nLCB0cnVlKVwiPk91aTwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiAtLT5cblxuICAgIDwhLS0gQ2F0YWxvZyBwYWdlIGNvbnRlbnQgd2hlbiBmaWx0ZXJzIGFwcGxpZWQgLS0+XG4gICAgPGRpdiAqbmdJZj1cIiFkaXNwbGF5SG9tZVBhZ2UoKSBlbHNlIGNhdGVnb3JpZXNDb21wb25lbnRzXCIgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19saXN0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fY29udGVudF9fdGl0bGVcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fY29udGVudF9fdGl0bGUtaWNvbiBtaWFtLWRzLWJ1dHRvbiBwcmltYXJ5IHNxdWFyZVwiXG4gICAgICAgICAgKGNsaWNrKT1cInJldHVyblRvSG9tZVBhZ2UoKVwiPlxuICAgICAgICAgIDxpbWcgYWx0PVwicmV0dXJuXCIgc3JjPVwiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Fzc2V0cy5taWFtLnRlY2gvZ2VuZXJpYy9pY29ucy9BcnJvd0xlZnRfd2hpdGUuc3ZnXCI+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fY29udGVudF9fdGl0bGVfX3NlYXJjaF9fdGV4dFwiICpuZ0lmPVwiaXNTZWFyY2hQYWdlKClcIj5cbiAgICAgICAgICA8c3BhbiBpMThuPlZvdHJlIHJlY2hlcmNoZSA6IDwvc3Bhbj5cbiAgICAgICAgICA8c3Bhbj57eyBmaWx0ZXJzLnNlYXJjaCB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXNGYXZvcml0ZXNQYWdlKClcIiBpMThuPkZhdm9yaXM8L3NwYW4+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXNQZXJzb25hbFBhZ2UoKVwiIGkxOG4+TW9uIGNhcm5ldCBwZXJzbzwvc3Bhbj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImlzQ2F0ZWdvcnlQYWdlKClcIiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2NvbnRlbnRfX3RpdGxlX19jYXRlZ29yeVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWlhbS1kcy10ZXh0IHNpemUtbCB3ZWlnaHQteHhsXCI+e3sgZmlsdGVycy5hZGRpdGlvbmFsRmlsdGVycy50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpbHRlcnMuYWRkaXRpb25hbEZpbHRlcnMuc3VidGl0bGU/Lmxlbmd0aCA+IDBcIiBjbGFzcz1cIm1pYW0tZHMtdGV4dCBzaXplLXMgd2VpZ2h0LWxcIj5cbiAgICAgICAgICAgIHt7IGZpbHRlcnMuYWRkaXRpb25hbEZpbHRlcnMuc3VidGl0bGUgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiAqbmdJZj1cImlzRGVmYXVsdFBhZ2UoKVwiIGkxOG4+Vm90cmUgc8OpbGVjdGlvbjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX3Rvb2xiYXItY29udGFpbmVyLWFuY2hvclwiPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX3Rvb2xiYXItY29udGFpbmVyXCIgI3N0aWNreVRvb2xiYXJDb2xsZWN0aW9uPlxuICAgICAgICA8bmctbWlhbS1jYXRhbG9nLXRvb2xiYXJcbiAgICAgICAgICBbaG9tZV09XCJkaXNwbGF5SG9tZVBhZ2UoKVwiXG4gICAgICAgICAgW3NlYXJjaFRlcm1dPVwiZmlsdGVycz8uc2VhcmNoXCJcbiAgICAgICAgICBbYWRkaXRpb25hbEZpbHRlcnNUaXRsZV09XCJmaWx0ZXJzPy5hZGRpdGlvbmFsRmlsdGVycz8udGl0bGVcIlxuICAgICAgICAgIFtmYXZvcml0ZXNCdXR0b25IaWRkZW5dPVwiaXNGYXZvcml0ZXNQYWdlKClcIlxuICAgICAgICAgIFtwZXJzb25hbEJ1dHRvbkhpZGRlbl09XCIhKGNvbnRleHRTZXJ2aWNlLmVuYWJsZVBlcnNvbmFsUmVjaXBlcyQgfCBhc3luYylcIlxuICAgICAgICAgIFtmaWx0ZXJCYWRnZUNvdW50XT1cImZpbHRlcnMuc2VsZWN0YWJsZUZpbHRlcnNDb3VudCgpXCJcbiAgICAgICAgICBbcmVkdWNlZF09XCJzdGlja3lUb29sYmFyQ29sbGVjdGlvbi5jbGFzc0xpc3QuY29udGFpbnMoJ3N0aWNraW5nJylcIlxuICAgICAgICAgIChmaWx0ZXJCdXR0b25QcmVzc2VkKT1cIm9uRmlsdGVyQ29sbGFwc2VkKClcIlxuICAgICAgICAgIChwcmVmZXJlbmNlc0J1dHRvblByZXNzZWQpPVwiaXNQcmVmZXJlbmNlTW9kYWxPcGVuID0gIWlzUHJlZmVyZW5jZU1vZGFsT3BlblwiXG4gICAgICAgICAgKHNlYXJjaFN0cmluZ0NoYW5nZWQpPVwidXBkYXRlU2VhcmNoKCRldmVudClcIlxuICAgICAgICAgIChwZXJzb25hbEJ1dHRvblByZXNzZWQpPVwic2V0UGVyc29uYWxGaWx0ZXIoKVwiXG4gICAgICAgICAgKGZhdm9yaXRlc0J1dHRvblByZXNzZWQpPVwic2V0RmF2b3JpdGVzRmlsdGVyKClcIlxuICAgICAgICAgIChyZXR1cm5Ib21lUHJlc3NlZCk9XCJyZXR1cm5Ub0hvbWVQYWdlKClcIj5cbiAgICAgICAgPC9uZy1taWFtLWNhdGFsb2ctdG9vbGJhcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2xpc3RfX2NyZWF0ZV9fX2J1dHRvblwiXG4gICAgICAgICpuZ0lmPVwiY2FuRGlzcGxheUNyZWF0aW9uQnV0dG9uKCkgfCBhc3luY1wiXG4gICAgICAgIChjbGljayk9XCJtYW5hZ2VSZWNpcGVBY3Rpb24oe2FjdGlvbjogJ0NSRUFURScsIHJlY2lwZTogbnVsbH0pXCI+XG4gICAgICAgIDxuZy1taWFtLWljb25cbiAgICAgICAgICBbaWNvbk5hbWVdPVwiaWNvbi5QbHVzXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCJcbiAgICAgICAgICBwcmltYXJ5Q29sb3I9XCJ2YXIoLS1tLWNvbG9yLXByaW1hcnkpXCI+PC9uZy1taWFtLWljb24+XG4gICAgICAgIDxzcGFuIGkxOG4+QWpvdXRlciB1bmUgaWTDqWUgcmVwYXM8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy1taWFtLWNhdGFsb2ctbGlzdFxuICAgICAgICBbZmlsdGVyc109XCJmaWx0ZXJzXCJcbiAgICAgICAgW29yaWdpblRyYWNlXT1cImV2ZW50VHJhY2UoKVwiXG4gICAgICAgIFtkaXNwbGF5UHJpY2luZ109XCJkaXNwbGF5UHJpY2luZ1wiXG4gICAgICAgIFtkaXNwbGF5SW5mb3NdPVwiZGlzcGxheUluZm9zXCJcbiAgICAgICAgKGZpbHRlclJlbW92ZWQpPVwicmVtb3ZlRmlsdGVyKCRldmVudClcIlxuICAgICAgICBbbW9kaWZpZWRHdWVzdHNdPVwiZ3Vlc3RzXCJcbiAgICAgICAgKHJlY2lwZUFjdGlvblRyaWdnZXJlZCk9XCJtYW5hZ2VSZWNpcGVBY3Rpb24oJGV2ZW50KVwiPlxuICAgICAgPC9uZy1taWFtLWNhdGFsb2ctbGlzdD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPG5nLW1pYW0tcmVjaXBlLWZpbHRlcnNcbiAgICBbZmlsdGVyc109XCJmaWx0ZXJzXCJcbiAgICBbaXNGaWx0ZXJDb2xsYXBzZWRdPVwiaXNGaWx0ZXJDb2xsYXBzZWRcIlxuICAgIFtmaWx0ZXJUb1JlbW92ZV09XCJmaWx0ZXJUb1JlbW92ZVwiXG4gICAgW3Bvc2l0aW9uXT1cImZpbHRlcnNQb3NpdGlvblwiXG4gICAgW29yaWdpblRyYWNlXT1cImV2ZW50VHJhY2UoKVwiXG4gICAgKGZpbHRlckNoYW5nZWQpPVwidXBkYXRlRmlsdGVycygkZXZlbnQpXCJcbiAgICAoZmlsdGVyQ29sbGFwc2VkKT1cIm9uRmlsdGVyQ29sbGFwc2VkKClcIlxuICAgIChwcmVmZXJlbmNlc0NoYW5nZWQpPVwicmVsb2FkUGFja2FnZXMoKVwiXG4gID5cbiAgPC9uZy1taWFtLXJlY2lwZS1maWx0ZXJzPlxuXG4gIDxuZy1taWFtLXByZWZlcmVuY2VzXG4gICAgWyhpc09wZW4pXT1cImlzUHJlZmVyZW5jZU1vZGFsT3BlblwiXG4gICAgKHByZWZlcmVuY2VzQ2hhbmdlZCk9XCJyZWxvYWRQYWNrYWdlcygpXCJcbiAgPlxuICA8L25nLW1pYW0tcHJlZmVyZW5jZXM+XG5cbiAgPCEtLSBDYXRhbG9nIGhvbWUgcGFnZSBjb250ZW50IC0tPlxuICA8bmctdGVtcGxhdGUgI2NhdGVnb3JpZXNDb21wb25lbnRzPlxuICAgIDxkaXYgKm5nSWY9XCJjYXRlZ29yaWVzLmxlbmd0aCA+IDBcIiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2NhdGVnb3JpZXNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNhdGVnb3J5IG9mIGNhdGVnb3JpZXMgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaSAhPT0gMCBlbHNlIGZpcnN0Q2F0ZWdvcnlcIj5cbiAgICAgICAgICA8bmctbWlhbS1jYXRhbG9nLWNhdGVnb3J5XG4gICAgICAgICAgICBbdGl0bGVdPVwiY2F0ZWdvcnkudGl0bGVcIlxuICAgICAgICAgICAgW3N1YnRpdGxlXT1cImNhdGVnb3J5LnN1YnRpdGxlXCJcbiAgICAgICAgICAgIFtmaWx0ZXJzXT1cImNhdGVnb3J5LmZpbHRlcnNcIlxuICAgICAgICAgICAgW2Rpc3BsYXlJbmZvc109XCJkaXNwbGF5SW5mb3NcIlxuICAgICAgICAgICAgW2Rpc3BsYXlQcmljaW5nXT1cImRpc3BsYXlQcmljaW5nXCJcbiAgICAgICAgICAgIFtvcmlnaW5UcmFjZV09XCJldmVudFRyYWNlKClcIlxuICAgICAgICAgICAgW21vZGlmaWVkR3Vlc3RzXT1cImd1ZXN0c1wiXG4gICAgICAgICAgICAoZGlzcGxheUxpc3QpPVwiY2F0ZWdvcnlUaXRsZUNsaWNrZWQoJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvbmctbWlhbS1jYXRhbG9nLWNhdGVnb3J5PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNmaXJzdENhdGVnb3J5PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19maXJzdC1jYXRlZ29yeVwiPlxuICAgICAgICAgICAgPG5nLW1pYW0tbWVhbHMtcGxhbm5lci1saW5rICpuZ0lmPVwiY29udGV4dFNlcnZpY2UuZW5hYmxlTWVhbHNQbGFubmVyJCB8IGFzeW5jXCI+PC9uZy1taWFtLW1lYWxzLXBsYW5uZXItbGluaz5cbiAgICAgICAgICAgIDxuZy1taWFtLWNhdGFsb2ctY2F0ZWdvcnlcbiAgICAgICAgICAgICAgW3RpdGxlXT1cImNhdGVnb3J5LnRpdGxlXCJcbiAgICAgICAgICAgICAgW3N1YnRpdGxlXT1cImNhdGVnb3J5LnN1YnRpdGxlXCJcbiAgICAgICAgICAgICAgW2ZpbHRlcnNdPVwiY2F0ZWdvcnkuZmlsdGVyc1wiXG4gICAgICAgICAgICAgIFtkaXNwbGF5SW5mb3NdPVwiZGlzcGxheUluZm9zXCJcbiAgICAgICAgICAgICAgW2Rpc3BsYXlQcmljaW5nXT1cImRpc3BsYXlQcmljaW5nXCJcbiAgICAgICAgICAgICAgW21vZGlmaWVkR3Vlc3RzXT1cImd1ZXN0c1wiXG4gICAgICAgICAgICAgIFtvcmlnaW5UcmFjZV09XCJldmVudFRyYWNlKClcIlxuICAgICAgICAgICAgICAoZGlzcGxheUxpc3QpPVwiY2F0ZWdvcnlUaXRsZUNsaWNrZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L25nLW1pYW0tY2F0YWxvZy1jYXRlZ29yeT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjY3JlYXRpb25QYWdlPlxuICA8bmctbWlhbS1yZWNpcGUtc3RlcHBlclxuICAgICpuZ0lmPVwiY2F0YWxvZ1NldHRpbmdIYXNMb2FkZWRcIlxuICAgIFtyZWNpcGVUb1VwZGF0ZV09XCJyZWNpcGVUb1VwZGF0ZVwiXG4gICAgW29yaWdpblRyYWNlXT1cImV2ZW50VHJhY2UoKVwiXG4gICAgKHJlY2lwZUNoYW5nZSk9XCJsZWF2ZUNyZWF0ZVBhZ2UoKVwiXG4gICAgKGNhbmNlbGVkKT1cImxlYXZlQ3JlYXRlUGFnZSgpXCI+XG4gIDwvbmctbWlhbS1yZWNpcGUtc3RlcHBlcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
750
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaXBlLWNhdGFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctbWlhbS9zcmMvbGliL193ZWItY29tcG9uZW50cy9yZWNpcGUtY2F0YWxvZy9yZWNpcGUtY2F0YWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1taWFtL3NyYy9saWIvX3dlYi1jb21wb25lbnRzL3JlY2lwZS1jYXRhbG9nL3JlY2lwZS1jYXRhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUdMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXpGLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsY0FBYyxFQUNkLHNCQUFzQixFQUN0QixjQUFjLEVBQ2QsY0FBYyxFQUNkLGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixXQUFXLEVBQ1osTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFxQyxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRixPQUFP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QUFDOzs0RkFoY1Usc0JBQXNCOzJEQUF0QixzQkFBc0I7dUJBQ3RCLHNCQUFzQjt1QkFDdEIsdUJBQXVCOzs7dUJBR3BCLHdCQUF3Qjs7Ozs7Ozs7Ozs7OztpQkNwQnBCLFVBQUEseUZBQXVCOzs7Ozs7aUJBbUN0QixVQUFBLG1GQUFrQjs7Ozs7O2lCQUdNLFVBQUEsdUVBQU87Ozs7OztpQkFDUixVQUFBLGlGQUFnQjs7Ozs7O2tCQU9qQixVQUFBLGdGQUFlOzs7Ozs7a0JBMkJ2QyxVQUFBLHVGQUFzQjs7UUE5R3pDLDRCQUE2RDtRQUM3RCx5RUFpTE07UUFFTix3SEFRYzs7O1FBM0xSLGVBQWlEO1FBQWpELHlFQUFpRCxpQkFBQTs7dUZEbUQxQyxzQkFBc0I7Y0FQbEMsU0FBUztlQUFDO2dCQUNULFFBQVEsRUFBRSx3QkFBd0I7Z0JBQ2xDLFdBQVcsRUFBRSxpQ0FBaUM7Z0JBQzlDLFNBQVMsRUFBRSxDQUFDLGlDQUFpQyxDQUFDO2dCQUM5QyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtnQkFDckMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07YUFDaEQ7NllBRW9DLGFBQWE7a0JBQS9DLFNBQVM7bUJBQUMsc0JBQXNCO1lBQ0csY0FBYztrQkFBakQsU0FBUzttQkFBQyx1QkFBdUI7WUFDQyxTQUFTO2tCQUEzQyxTQUFTO21CQUFDLHNCQUFzQjtZQUNGLGdCQUFnQjtrQkFBOUMsU0FBUzttQkFBQyxrQkFBa0I7WUFDVyxjQUFjO2tCQUFyRCxZQUFZO21CQUFDLHdCQUF3QjtZQUU3QixnQkFBZ0I7a0JBQXhCLEtBQUs7WUFDRyxZQUFZO2tCQUFwQixLQUFLO1lBQ0csZUFBZTtrQkFBdkIsS0FBSztZQUNHLFNBQVM7a0JBQWpCLEtBQUs7WUFDRyxZQUFZO2tCQUFwQixLQUFLO1lBQ0csY0FBYztrQkFBdEIsS0FBSztZQUNHLGFBQWE7a0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1hcCwgc2tpcFdoaWxlLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENhdGFsb2dDYXRlZ29yeUNvbXBvbmVudCB9IGZyb20gJy4vY2F0YWxvZy1jYXRlZ29yeS9jYXRhbG9nLWNhdGVnb3J5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYXRhbG9nU2V0dGluZywgUGFja2FnZSwgUmVjaXBlLCBTdXBwbGllciB9IGZyb20gJy4uLy4uL19tb2RlbHMnO1xuaW1wb3J0IHtcbiAgQW5hbHl0aWNzU2VydmljZSxcbiAgQmFza2V0c1NlcnZpY2UsXG4gIENhdGFsb2dTZXR0aW5nc1NlcnZpY2UsXG4gIENvbnRleHRTZXJ2aWNlLFxuICBQYWNrYWdlU2VydmljZSxcbiAgUmVjaXBlc1NlcnZpY2UsXG4gIFJlY2lwZVR5cGVTZXJ2aWNlLFxuICBTcG9uc29yU2VydmljZSxcbiAgU3VwcGxpZXJzU2VydmljZSxcbiAgVXNlclNlcnZpY2Vcbn0gZnJvbSAnLi4vLi4vX3NlcnZpY2VzJztcbmltcG9ydCB7IEljb24gfSBmcm9tICcuLi8uLi9fdHlwZXMvaWNvbi5lbnVtJztcbmltcG9ydCB7IENhdGFsb2dIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL2NhdGFsb2ctaGVhZGVyL2NhdGFsb2ctaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYXRhbG9nVG9vbGJhckNvbXBvbmVudCB9IGZyb20gJy4vY2F0YWxvZy10b29sYmFyL2NhdGFsb2ctdG9vbGJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSUFkZGl0aW9ubmFsRmlsdGVycywgUmVjaXBlRmlsdGVyLCBSZWNpcGVGaWx0ZXJzIH0gZnJvbSAnLi4vLi4vX3R5cGVzL3JlY2lwZS1maWx0ZXJzJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTWVkaWFNYXRjaGVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XG5pbXBvcnQgeyBEb2N1bWVudENvbGxlY3Rpb24gfSBmcm9tICdtaWFtLWpzb25hcGknO1xuaW1wb3J0IHsgRXZlbnRUcmFjZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9fY29tcG9uZW50cy9hYnN0cmFjdHMvZXZlbnQtdHJhY2VyLmNvbXBvbmVudCc7XG5cbmludGVyZmFjZSBDYXRlZ29yeSB7XG4gIGtleTogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBzdWJ0aXRsZTogc3RyaW5nO1xuICBmaWx0ZXJzOiB7IGFkZGl0aW9uYWxGaWx0ZXJzOiB7IGZpbHRlcnM6IHsgcGFja2FnZXM6IHN0cmluZyB9OyB0aXRsZTogc3RyaW5nIH0gfTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmctbWlhbS1yZWNpcGUtY2F0YWxvZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZWNpcGUtY2F0YWxvZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JlY2lwZS1jYXRhbG9nLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFJlY2lwZUNhdGFsb2dDb21wb25lbnQgZXh0ZW5kcyBFdmVudFRyYWNlckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZChDYXRhbG9nSGVhZGVyQ29tcG9uZW50KSBjYXRhbG9nSGVhZGVyOiBDYXRhbG9nSGVhZGVyQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKENhdGFsb2dUb29sYmFyQ29tcG9uZW50KSBjYXRhbG9nVG9vbGJhcjogQ2F0YWxvZ1Rvb2xiYXJDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ21pYW1DYXRhbG9nVG9wQW5jaG9yJykgdG9wQW5jaG9yOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgncmV0dXJuSG9tZUJ1dHRvbicpIHJldHVybkhvbWVCdXR0b246IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkcmVuKENhdGFsb2dDYXRlZ29yeUNvbXBvbmVudCkgY2F0ZWdvcmllc0NvbXAhOiBRdWVyeUxpc3Q8Q2F0YWxvZ0NhdGVnb3J5Q29tcG9uZW50PjtcblxuICBASW5wdXQoKSBoZWFkZXJQaWN0dXJlVXJsID0gJ2h0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9hc3NldHMubWlhbS50ZWNoL2dlbmVyaWMvaW1hZ2VzL2RlZmF1bHQtY2F0YWxvZy1waWN0dXJlLnBuZyc7XG4gIEBJbnB1dCgpIGluaXRpYWxSb3V0ZSA9ICcnO1xuICBASW5wdXQoKSBmaWx0ZXJzUG9zaXRpb24gPSAncmlnaHQnO1xuICBASW5wdXQoKSBob21lTGFiZWw6IHN0cmluZztcbiAgQElucHV0KCkgZGlzcGxheUluZm9zID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRpc3BsYXlQcmljaW5nID0gdHJ1ZTtcbiAgQElucHV0KCkgY3VzdG9tRmlsdGVyczogeyBkaWZmaWN1bHR5PzogUmVjaXBlRmlsdGVyW107IGNvc3Q/OiBSZWNpcGVGaWx0ZXJbXTsgdGltZT86IFJlY2lwZUZpbHRlcltdIH07XG5cbiAgZmlsdGVyczogUmVjaXBlRmlsdGVycztcbiAgaXNGaWx0ZXJDb2xsYXBzZWQgPSB0cnVlO1xuICBpY29uID0gSWNvbjtcbiAgY2F0ZWdvcmllczogQ2F0ZWdvcnlbXSA9IFtdO1xuICBjcmVhdGluZ1JlY2lwZSA9IGZhbHNlO1xuICByZWNpcGVUb1VwZGF0ZTogUmVjaXBlO1xuICBmaWx0ZXJUb1JlbW92ZTogc3RyaW5nO1xuICBpc01vYmlsZSA9IGZhbHNlO1xuICBzaG93VXNlckZlZWRiYWNrID0gZmFsc2U7XG4gIHJlY2lwZUNvdW50ID0gMDtcbiAgdG90YWxQcmljZSA9IDA7XG4gIGlzTXlNZWFsQ2xvc2UgPSB0cnVlO1xuICBjYXRhbG9nU2V0dGluZzogQ2F0YWxvZ1NldHRpbmc7XG4gIGNhdGFsb2dTZXR0aW5nSGFzTG9hZGVkID0gZmFsc2U7XG4gIGd1ZXN0cyA9ICtsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnX21pYW0vcHJlZmVyZW5jZXMvZ3Vlc3RzJyk7XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBwcml2YXRlIGhlYWRlckhlaWdodFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIHN1cHBsaWVySWQ7XG4gIHByaXZhdGUgX2lzUHJlZmVyZW5jZU1vZGFsT3BlbjogYm9vbGVhbjtcbiAgcHJpdmF0ZSBzdGlja3lUb29sYmFyT2JzZXJ2ZXI6IEludGVyc2VjdGlvbk9ic2VydmVyO1xuXG4gIHNldCBpc1ByZWZlcmVuY2VNb2RhbE9wZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9pc1ByZWZlcmVuY2VNb2RhbE9wZW4gPSB2YWx1ZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBnZXQgaXNQcmVmZXJlbmNlTW9kYWxPcGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1ByZWZlcmVuY2VNb2RhbE9wZW47XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwdWJsaWMgcmVjaXBlVHlwZXNTZXJ2aWNlOiBSZWNpcGVUeXBlU2VydmljZSxcbiAgICBwdWJsaWMgc3BvbnNvclNlcnZpY2U6IFNwb25zb3JTZXJ2aWNlLFxuICAgIHB1YmxpYyBzdXBwbGllclNlcnZpY2U6IFN1cHBsaWVyc1NlcnZpY2UsXG4gICAgcHVibGljIHBhY2thZ2VTZXJ2aWNlOiBQYWNrYWdlU2VydmljZSxcbiAgICBwcml2YXRlIHJlY2lwZXNTZXJ2aWNlOiBSZWNpcGVzU2VydmljZSxcbiAgICBwdWJsaWMgbWVkaWFNYXRjaGVyOiBNZWRpYU1hdGNoZXIsXG4gICAgcHVibGljIHVzZXJzU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHVibGljIGNhdGFsb2dTZXR0aW5nU2VydmljZTogQ2F0YWxvZ1NldHRpbmdzU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgYW5hbHl0aWNzU2VydmljZTogQW5hbHl0aWNzU2VydmljZSxcbiAgICBwdWJsaWMgYmFza2V0c1NlcnZpY2U6IEJhc2tldHNTZXJ2aWNlLFxuICAgIHB1YmxpYyBjb250ZXh0U2VydmljZTogQ29udGV4dFNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoYW5hbHl0aWNzU2VydmljZSk7XG4gICAgdGhpcy5pc01vYmlsZSA9IG1lZGlhTWF0Y2hlci5tYXRjaE1lZGlhKCcobWF4LXdpZHRoOiAxMDIycHgpJykubWF0Y2hlcztcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucGFnZXZpZXcoKTtcbiAgICB0aGlzLmluaXRGaWx0ZXJzKCk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuc3VwcGxpZXJTZXJ2aWNlLnN1cHBsaWVyJC5hc09ic2VydmFibGUoKS5waXBlKFxuICAgICAgICBza2lwV2hpbGUoc3VwcCA9PiBzdXBwID09PSB1bmRlZmluZWQgfHwgc3VwcCA9PSBudWxsKSxcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgc3dpdGNoTWFwKHN1cHBsaWVyID0+IHtcbiAgICAgICAgICB0aGlzLnN1cHBsaWVySWQgPSBzdXBwbGllci5pZDtcbiAgICAgICAgICB0aGlzLmluaXRDYXRhbG9nSGVhZGVyKHN1cHBsaWVyKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkUGFja2FnZXMoKTtcbiAgICAgICAgfSlcbiAgICAgICkuc3Vic2NyaWJlKCksXG4gICAgICB0aGlzLmJhc2tldHNTZXJ2aWNlLmJhc2tldFN0YXRzJC5waXBlKHNraXBXaGlsZShicyA9PiAhYnMpKS5zdWJzY3JpYmUoYnMgPT4ge1xuICAgICAgICB0aGlzLnJlY2lwZUNvdW50ID0gYnMucmVjaXBlc0NvdW50O1xuICAgICAgICB0aGlzLnRvdGFsUHJpY2UgPSBicy50b3RhbFByaWNlO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KSxcbiAgICAgIHRoaXMuYXNzZXNzU2hvd1VzZXJGZWVkYmFjaygpXG4gICAgKTtcblxuICAgIHRoaXMuc2V0RGlyZWN0QWNjZXNzKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5vcGVuRmVhdHVyZXNGcm9tVVJMKCk7XG4gICAgdGhpcy5pbml0SGVhZGVySGVpZ2h0TGlzdGVuZXIoKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgdGhpcy5oZWFkZXJIZWlnaHRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zdGlja3lUb29sYmFyT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgfVxuXG4gIGN1cnJlbnRQYXRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdtaWFtL3JlY2lwZXMnO1xuICB9XG5cbiAgb3BlbkZlYXR1cmVzRnJvbVVSTCgpIHtcbiAgICBjb25zdCBwYXJhbXNBcnJheSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgaWYgKHBhcmFtc0FycmF5LmdldCgnb3BlbkJhc2tldCcpID09PSAndHJ1ZScpIHtcbiAgICAgIHRoaXMudG9nZ2xlTXlNZWFsRHJhd2VyKCk7XG4gICAgfVxuICAgIGlmIChwYXJhbXNBcnJheS5nZXQoJ3BlcnNvbmFsQ2F0YWxvZycpID09PSAndHJ1ZScpIHtcbiAgICAgIHRoaXMuc2V0UGVyc29uYWxGaWx0ZXIoKTtcbiAgICB9XG4gICAgY29uc3QgY29zdCA9IHBhcmFtc0FycmF5LmdldCgnY29zdCcpPy5zcGxpdCgnLCcpO1xuICAgIGlmIChjb3N0Py5sZW5ndGggPT09IDIpIHtcbiAgICAgIHRoaXMuc2V0UHJpY2VGaWx0ZXJzKGNvc3QpO1xuICAgIH1cbiAgfVxuXG4gIGRpc3BsYXlIb21lUGFnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJzLmlzRW1wdHkoKTtcbiAgfVxuXG4gIC8vIGluaXQgdGhlIHZhbHVlIG9mIHRoZSBpbWFnZSBhbmQgdGhlIHRleHQgZm9yIHRoZSBjYXRhbG9nIGhlYWRlciwgdXNpbmcgdGhlIGNhdGFsb2cgc2V0dGluZyBvZiB0aGUgc3VwcGxpZXJcbiAgaW5pdENhdGFsb2dIZWFkZXIoc3VwcGxpZXI6IFN1cHBsaWVyKSB7XG4gICAgaWYgKHN1cHBsaWVyLnJlbGF0aW9uc2hpcHNbJ2NhdGFsb2ctc2V0dGluZyddPy5kYXRhKSB7XG4gICAgICBjb25zdCBpZCA9IHN1cHBsaWVyLnJlbGF0aW9uc2hpcHNbJ2NhdGFsb2ctc2V0dGluZyddPy5kYXRhPy5pZDtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICB0aGlzLmNhdGFsb2dTZXR0aW5nU2VydmljZS5nZXQoaWQpLnBpcGUoXG4gICAgICAgICAgc2tpcFdoaWxlKGMgPT4gYy5pc19sb2FkaW5nKSxcbiAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgIHRhcChjYXRhbG9nID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2F0YWxvZ1NldHRpbmcgPSBjYXRhbG9nO1xuICAgICAgICAgICAgdGhpcy5jYXRhbG9nU2V0dGluZ0hhc0xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLnNldFN0aWNreU9ic2VydmVyKCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKS5zdWJzY3JpYmUoKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBVc2VkIG9uIGxvYWQgdG8gYnVpbGQgdGhlIGZpbHRlcnMgYXR0cmlidXRlLCBhbmQgb24gY2xpY2sgb24gdGhlIGxpbmsgdG8gcmVzZXQgdGhlIGZpbHRlcnNcbiAgaW5pdEZpbHRlcnMoKSB7XG4gICAgdGhpcy5maWx0ZXJzID0gbmV3IFJlY2lwZUZpbHRlcnMoXG4gICAgICB7XG4gICAgICAgIGRpZmZpY3VsdHk6IHRoaXMucmVjaXBlc1NlcnZpY2UuZGlmZmljdWx0eUxldmVscy5tYXAoZiA9PiAoeyBuYW1lOiBmLnZhbHVlLnRvU3RyaW5nKCksIHRleHQ6IGYubGFiZWwsIHZhbHVlOiBmYWxzZSB9KSksXG4gICAgICAgIGNvc3Q6IFtcbiAgICAgICAgICB7IG5hbWU6ICcwLTUnLCB2YWx1ZTogZmFsc2UgfSxcbiAgICAgICAgICB7IG5hbWU6ICc1LTEwJywgdmFsdWU6IGZhbHNlIH0sXG4gICAgICAgICAgeyBuYW1lOiAnMTAtMTAwMCcsIHZhbHVlOiBmYWxzZSB9XG4gICAgICAgICAgLy8gd2Ugc2V0IGEgbGltaXQgYXQgMTAwMOKCrCBtYXgsIGlmIGEgcmVjaXBlIGNvc3QgbW9yZSBzaG91bGQgYmUgbm9uIHNlbnNlIGFueXdheVxuICAgICAgICBdLFxuICAgICAgICB0aW1lOiBbXG4gICAgICAgICAgeyBuYW1lOiAnMTUnLCB2YWx1ZTogZmFsc2UgfSxcbiAgICAgICAgICB7IG5hbWU6ICczMCcsIHZhbHVlOiBmYWxzZSB9LFxuICAgICAgICAgIHsgbmFtZTogJzYwJywgdmFsdWU6IGZhbHNlIH0sXG4gICAgICAgICAgeyBuYW1lOiAnMTIwJywgdmFsdWU6IGZhbHNlIH1cblxuICAgICAgICBdXG4gICAgICB9XG4gICAgKTtcbiAgICBpZiAodGhpcy5jdXN0b21GaWx0ZXJzKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuZmlsdGVycywgdGhpcy5jdXN0b21GaWx0ZXJzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2F0YWxvZ1Rvb2xiYXIpIHtcbiAgICAgIHRoaXMuY2F0YWxvZ1Rvb2xiYXIucmVzZXRTZWFyY2hTdHJpbmcoKTtcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMuZmlsdGVycy5hZGRpdGlvbmFsRmlsdGVycyA9IG51bGw7XG4gIH1cblxuICB1cGRhdGVGaWx0ZXJzKGZpbHRlcnM6IFJlY2lwZUZpbHRlcnMpIHtcbiAgICB0aGlzLmZpbHRlcnMgPSBmaWx0ZXJzLmNvcHkoKTsgLy8gbmVjZXNzYXJ5IHRvIHRyaWdnZXIgY2hpbGQgY29tcG9uZW50IGNoYW5nZVxuICAgIHRoaXMuZmlsdGVyVG9SZW1vdmUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuc2V0U3RpY2t5T2JzZXJ2ZXIoKTtcbiAgICB0aGlzLnJldHVyblRvVG9wKCk7XG4gIH1cblxuICB1cGRhdGVTZWFyY2goc2VhcmNoOiBzdHJpbmcpIHtcbiAgICBpZiAoc2VhcmNoICE9PSB0aGlzLmZpbHRlcnMuc2VhcmNoKSB7XG4gICAgICBjb25zdCBmaWx0ZXJzID0gT2JqZWN0LmFzc2lnbih0aGlzLmZpbHRlcnMsIHsgc2VhcmNoIH0pO1xuICAgICAgdGhpcy51cGRhdGVGaWx0ZXJzKGZpbHRlcnMpO1xuICAgIH1cbiAgfVxuXG4gIGNhdGVnb3J5VGl0bGVDbGlja2VkKGV2ZW50OiB7IHRpdGxlOiBzdHJpbmc7IHN1YnRpdGxlOiBzdHJpbmc7IGZpbHRlcnM6IElBZGRpdGlvbm5hbEZpbHRlcnMgfSk6IHZvaWQge1xuICAgIGNvbnN0IGZpbHRlcnMgPSBPYmplY3QuYXNzaWduKHRoaXMuZmlsdGVycywge1xuICAgICAgYWRkaXRpb25hbEZpbHRlcnM6IHsgZmlsdGVyczogZXZlbnQuZmlsdGVycywgdGl0bGU6IGV2ZW50LnRpdGxlLCBzdWJ0aXRsZTogZXZlbnQuc3VidGl0bGUgfVxuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlRmlsdGVycyhmaWx0ZXJzKTtcbiAgfVxuXG4gIHNldEZhdm9yaXRlc0ZpbHRlcigpOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXJzID0gT2JqZWN0LmFzc2lnbih0aGlzLmZpbHRlcnMsIHtcbiAgICAgIGFkZGl0aW9uYWxGaWx0ZXJzOiB7XG4gICAgICAgIGZpbHRlcnM6IHsgbGlrZWQ6IHRydWUgfSxcbiAgICAgICAgdGl0bGU6ICdNZXMgaWTDqWVzIHJlcGFzJ1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlRmlsdGVycyhmaWx0ZXJzKTtcbiAgfVxuXG4gIHNldFBlcnNvbmFsRmlsdGVyKCk6IHZvaWQge1xuICAgIGNvbnN0IGZpbHRlcnMgPSBPYmplY3QuYXNzaWduKHRoaXMuZmlsdGVycywge1xuICAgICAgYWRkaXRpb25hbEZpbHRlcnM6IHtcbiAgICAgICAgZmlsdGVyczogeyBwZXJzb25hbDogdHJ1ZSwgYWN0aXZlOiAndHJ1ZSxmYWxzZScgfSxcbiAgICAgICAgdGl0bGU6ICdNb24gY2FybmV0IHBlcnNvJ1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlRmlsdGVycyhmaWx0ZXJzKTtcbiAgfVxuXG4gIHNldFByaWNlRmlsdGVycyhjb3N0OiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGNvbnN0IGZpbHRlcnMgPSBPYmplY3QuYXNzaWduKHRoaXMuZmlsdGVycywge1xuICAgICAgYWRkaXRpb25hbEZpbHRlcnM6IHtcbiAgICAgICAgZmlsdGVyczogeyBjb21wdXRlZF9jb3N0OiBjb3N0WzBdICsgJyxndCwnICsgY29zdFsxXSArICcsbHQnLCByZWNpcGVfdHlwZV9pZDogJ21haW4tZGlzaCcgfSxcbiAgICAgICAgdGl0bGU6IGBSZWNldHRlcyDDoCBtb2lucyBkZSAke2Nvc3RbMV194oKsYFxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlRmlsdGVycyhmaWx0ZXJzKTtcbiAgfVxuXG4gIHJlbW92ZUZpbHRlcihmaWx0ZXJUZXh0OiBzdHJpbmcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgZnVuY3Rpb24gaXMgYnJva2VuLCB1c2UgaGFzIGJlZW4gY29tbWVudGF0ZWQsIHJlcGFpciBpdCBpZiB5b3Ugd2FudCB0byB1c2UgaXQgYWdhaW4nKTtcbiAgICB0aGlzLmZpbHRlclRvUmVtb3ZlID0gZmlsdGVyVGV4dDtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICByZXR1cm5Ub1RvcCgpIHtcbiAgICBpZiAodGhpcy50b3BBbmNob3IpIHtcbiAgICAgIHRoaXMudG9wQW5jaG9yLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm5Ub0hvbWVQYWdlKCkge1xuICAgIHRoaXMucGFnZXZpZXcoKTtcbiAgICAvLyBlaXRoZXIgeW91IGhhdmUgZmlsdGVycyBlaXRoZXIgeW91IGFyZSBvbiBob21lIHBhZ2UuIFRoYXQgbWVhbiBpZiB5b3UgZ28gb24gaG9tZSBwYWdlIHlvdSBkb24ndCB3YW50IEFOWSBmaWx0ZXJcbiAgICB0aGlzLmluaXRGaWx0ZXJzKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuc2V0U3RpY2t5T2JzZXJ2ZXIoKTtcbiAgICB0aGlzLnJldHVyblRvVG9wKCk7XG4gIH1cblxuICBvbkZpbHRlckNvbGxhcHNlZCgpIHtcbiAgICB0aGlzLmlzRmlsdGVyQ29sbGFwc2VkID0gIXRoaXMuaXNGaWx0ZXJDb2xsYXBzZWQ7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZ29Ub0NyZWF0ZVBhZ2UocmVjaXBlOiBSZWNpcGUgPSBudWxsKSB7XG4gICAgdGhpcy5jcmVhdGluZ1JlY2lwZSA9IHRydWU7XG4gICAgdGhpcy5yZWNpcGVUb1VwZGF0ZSA9IHJlY2lwZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5zZXRTdGlja3lPYnNlcnZlcigpO1xuICAgIHRoaXMucmV0dXJuVG9Ub3AoKTtcbiAgfVxuXG4gIGxlYXZlQ3JlYXRlUGFnZSgpIHtcbiAgICB0aGlzLmNyZWF0aW5nUmVjaXBlID0gZmFsc2U7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuc2V0U3RpY2t5T2JzZXJ2ZXIoKTtcbiAgICB0aGlzLnJldHVyblRvVG9wKCk7XG4gIH1cblxuICBtYW5hZ2VSZWNpcGVBY3Rpb24oZXZlbnQ6IHsgYWN0aW9uOiBzdHJpbmc7IHJlY2lwZTogUmVjaXBlIH0pIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmFjdGlvbikge1xuICAgICAgY2FzZSAnQ1JFQVRFJzoge1xuICAgICAgICB0aGlzLmdvVG9DcmVhdGVQYWdlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdFRElUJzoge1xuICAgICAgICB0aGlzLmdvVG9DcmVhdGVQYWdlKGV2ZW50LnJlY2lwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdERUxFVEUnOiB7XG4gICAgICAgIGlmIChldmVudC5yZWNpcGU/LmlkICYmIGV2ZW50LnJlY2lwZS5yZWxhdGlvbnNoaXBzWydyZWNpcGUtcHJvdmlkZXInXT8uZGF0YS5pZCA9PT0gJ3BlcnNvbmFsJykge1xuICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgdGhpcy5yZWNpcGVzU2VydmljZS5kZWxldGUoZXZlbnQucmVjaXBlLmlkKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMucHJvcHMoKSwgeyByZWNpcGVJZDogZXZlbnQucmVjaXBlLmlkIH0pO1xuICAgICAgICAgICAgICB0aGlzLnNlbmRFdmVudCh0aGlzLmFuYWx5dGljc1NlcnZpY2UuRVZFTlRfUEVSU09OQUxfUkVDSVBFX0RFTEVURSk7XG4gICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWxvYWRQYWNrYWdlcygpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMubG9hZFBhY2thZ2VzKCkuc3Vic2NyaWJlKClcbiAgICApO1xuICB9XG5cbiAgaXNTZWFyY2hQYWdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5kaXNwbGF5SG9tZVBhZ2UoKSAmJiB0aGlzLmZpbHRlcnMuc2VhcmNoICYmIHRoaXMuZmlsdGVycy5zZWFyY2gubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGlzRmF2b3JpdGVzUGFnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZGlzcGxheUhvbWVQYWdlKCkgJiYgIXRoaXMuaXNTZWFyY2hQYWdlKCkgJiYgdGhpcy5maWx0ZXJzPy5hZGRpdGlvbmFsRmlsdGVycz8udGl0bGUgPT09ICdNZXMgaWTDqWVzIHJlcGFzJztcbiAgfVxuXG4gIGlzUGVyc29uYWxQYWdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5kaXNwbGF5SG9tZVBhZ2UoKSAmJiAhdGhpcy5pc1NlYXJjaFBhZ2UoKSAmJiB0aGlzLmZpbHRlcnM/LmFkZGl0aW9uYWxGaWx0ZXJzPy50aXRsZSA9PT0gJ01vbiBjYXJuZXQgcGVyc28nO1xuICB9XG5cbiAgaXNDYXRlZ29yeVBhZ2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmRpc3BsYXlIb21lUGFnZSgpICYmICF0aGlzLmlzU2VhcmNoUGFnZSgpICYmICF0aGlzLmlzRmF2b3JpdGVzUGFnZSgpICYmICF0aGlzLmlzUGVyc29uYWxQYWdlKCkgJiZcbiAgICAgIHRoaXMuZmlsdGVycz8uYWRkaXRpb25hbEZpbHRlcnM/LnRpdGxlPy5sZW5ndGggPiAwO1xuICB9XG5cbiAgaXNEZWZhdWx0UGFnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZGlzcGxheUhvbWVQYWdlKCkgJiYgIXRoaXMuaXNTZWFyY2hQYWdlKCkgJiYgIXRoaXMuaXNGYXZvcml0ZXNQYWdlKCkgJiYgIXRoaXMuaXNQZXJzb25hbFBhZ2UoKSAmJiAhdGhpcy5pc0NhdGVnb3J5UGFnZSgpO1xuICB9XG5cbiAgY2FuRGlzcGxheUNyZWF0aW9uQnV0dG9uKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnVzZXJzU2VydmljZS5pc0xvZ2dlZCQuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICAgIG1hcChpc0xvZ2dlZCA9PiBpc0xvZ2dlZCAmJiB0aGlzLmlzUGVyc29uYWxQYWdlKCkpXG4gICAgKTtcbiAgfVxuXG4gIHRvZ2dsZU15TWVhbERyYXdlcigpOiB2b2lkIHtcbiAgICB0aGlzLnJlY2lwZXNTZXJ2aWNlLm9wZW5CYXNrZXQodGhpcy5ldmVudFRyYWNlKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkUGFja2FnZXMoKTogT2JzZXJ2YWJsZTxEb2N1bWVudENvbGxlY3Rpb248UGFja2FnZT4+IHtcbiAgICByZXR1cm4gdGhpcy5wYWNrYWdlU2VydmljZS5jYXRlZ29yaWVzX2ZvcihbdGhpcy5zdXBwbGllcklkXSkucGlwZShcbiAgICAgIHNraXBXaGlsZShwYWNrYWdlcyA9PiBwYWNrYWdlcy5pc19sb2FkaW5nKSxcbiAgICAgIHRhcCgocGFja2FnZXM6IERvY3VtZW50Q29sbGVjdGlvbjxQYWNrYWdlPikgPT4ge1xuICAgICAgICB0aGlzLmluaXRDYXRlZ29yaWVzKHBhY2thZ2VzKTtcbiAgICAgICAgdGhpcy5zZWxlY3RDYXRlZ29yeUZyb21VcmwoKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0Q2F0ZWdvcmllcyhwYWNrYWdlczogRG9jdW1lbnRDb2xsZWN0aW9uPFBhY2thZ2U+KTogdm9pZCB7XG4gICAgdGhpcy5jYXRlZ29yaWVzID0gcGFja2FnZXMuZGF0YS5tYXAoY2F0ZWdvcnlQYWNrYWdlID0+ICh7XG4gICAgICBrZXk6IGNhdGVnb3J5UGFja2FnZS50aXRsZS50cmltKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtekEtWjAtOSAtXS8sICcnKS5yZXBsYWNlKC9cXHMvZywgJy0nKSxcbiAgICAgIHRpdGxlOiBjYXRlZ29yeVBhY2thZ2UudGl0bGUsXG4gICAgICBzdWJ0aXRsZTogY2F0ZWdvcnlQYWNrYWdlLnN1YnRpdGxlLFxuICAgICAgZmlsdGVyczoge1xuICAgICAgICBhZGRpdGlvbmFsRmlsdGVyczoge1xuICAgICAgICAgIGZpbHRlcnM6IHsgcGFja2FnZXM6IGNhdGVnb3J5UGFja2FnZS5pZCB9LFxuICAgICAgICAgIHRpdGxlOiAnJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RDYXRlZ29yeUZyb21VcmwoKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1zQXJyYXkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICAgIGlmIChwYXJhbXNBcnJheS5nZXQoJ2NhdGFsb2dDYXRlZ29yeScpID09PSAnZmF2b3JpdGVzJykge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0RmF2b3JpdGVzRmlsdGVyKCk7XG4gICAgfVxuICAgIGNvbnN0IHNlbGVjdGVkQ2F0ZWdvcnkgPSB0aGlzLmNhdGVnb3JpZXMuZmluZCgoY2F0KSA9PiBjYXQua2V5ID09PSBwYXJhbXNBcnJheS5nZXQoJ2NhdGFsb2dDYXRlZ29yeScpKTtcbiAgICBpZiAoc2VsZWN0ZWRDYXRlZ29yeSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2F0ZWdvcnlUaXRsZUNsaWNrZWQoe1xuICAgICAgICB0aXRsZTogc2VsZWN0ZWRDYXRlZ29yeS50aXRsZSxcbiAgICAgICAgc3VidGl0bGU6IHNlbGVjdGVkQ2F0ZWdvcnkuc3VidGl0bGUsXG4gICAgICAgIGZpbHRlcnM6IHNlbGVjdGVkQ2F0ZWdvcnkuZmlsdGVycy5hZGRpdGlvbmFsRmlsdGVycy5maWx0ZXJzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBTaG93IGZlZWRiYWNrIGJsb2NrIG9ubHkgaWYgdXNlciBpcyBsb2dnZWQgYW5kIHRoZSBjaGlsZHJlbiBwcmVmZXJlbmNlIGlzIHVua25vd25cbiAgcHJpdmF0ZSBhc3Nlc3NTaG93VXNlckZlZWRiYWNrKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy51c2Vyc1NlcnZpY2UuaXNMb2dnZWQkLFxuICAgICAgdGhpcy51c2Vyc1NlcnZpY2UuaGFzUHJlZmVyZW5jZSgnaGFzX2NoaWxkcmVuJyksXG4gICAgICB0aGlzLnVzZXJzU2VydmljZS5wcmVmZXJlbmNlc0FjdGl2YXRlZCRcbiAgICBdKS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XG4gICAgICBjb25zdCBsb2dnZWQgPSByZXN1bHRzWzBdO1xuICAgICAgY29uc3QgcHJlZmVyZW5jZURlZmluZWQgPSByZXN1bHRzWzFdO1xuICAgICAgY29uc3QgcHJlZmVyZW5jZXNBY3RpdmF0ZWQgPSByZXN1bHRzWzJdO1xuICAgICAgdGhpcy5zaG93VXNlckZlZWRiYWNrID0gbG9nZ2VkICYmICFwcmVmZXJlbmNlRGVmaW5lZCAmJiBwcmVmZXJlbmNlc0FjdGl2YXRlZDtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RGlyZWN0QWNjZXNzKCkge1xuICAgIGlmICh0aGlzLmluaXRpYWxSb3V0ZSAhPT0gJycpIHtcbiAgICAgIHN3aXRjaCAodGhpcy5pbml0aWFsUm91dGUpIHtcbiAgICAgICAgY2FzZSAnbWVzLXJlcGFzJzpcbiAgICAgICAgICB0aGlzLnRvZ2dsZU15TWVhbERyYXdlcigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtZXMtcmVjZXR0ZXMtcGVyc29ubmVsbGVzJzpcbiAgICAgICAgICB0aGlzLnNldFBlcnNvbmFsRmlsdGVyKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3JlY2V0dGVzLWZhdm9yaXRlcyc6XG4gICAgICAgICAgdGhpcy5zZXRGYXZvcml0ZXNGaWx0ZXIoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIGhlYWRlciBoZWlnaHQgbGlzdGVuZXIgYW5kIHN1YnNjcmliZXMgdG8gY2hhbmdlcyBpbiB0aGUgc3VwcGxpZXIgaGVhZGVyIGhlaWdodC5cbiAgICovXG4gIHByaXZhdGUgaW5pdEhlYWRlckhlaWdodExpc3RlbmVyKCkge1xuICAgIHRoaXMuaGVhZGVySGVpZ2h0U3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMuY29udGV4dFNlcnZpY2Uuc3VwcGxpZXJIZWFkZXJIZWlnaHQkLnN1YnNjcmliZSgoaGVhZGVySGVpZ2h0OiBudW1iZXIpID0+IHtcbiAgICAgICAgY29uc3QgYW5jaG9yRWxtOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5taWFtLXJlY2lwZS1jYXRhbG9nX190b29sYmFyLWNvbnRhaW5lcicpO1xuICAgICAgICBpZiAoYW5jaG9yRWxtKSB7XG4gICAgICAgICAgYW5jaG9yRWxtLnN0eWxlLnRvcCA9IGhlYWRlckhlaWdodCArICdweCc7XG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBzdGlja3kgb2JzZXJ2ZXIgZm9yIHRoZSB0b29sYmFyLlxuICAgKi9cbiAgcHJpdmF0ZSBzZXRTdGlja3lPYnNlcnZlcigpIHtcbiAgICBpZiAoIXRoaXMuY3JlYXRpbmdSZWNpcGUpIHtcbiAgICAgIGNvbnN0IGFuY2hvckVsbTogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWlhbS1yZWNpcGUtY2F0YWxvZ19fdG9vbGJhci1jb250YWluZXItYW5jaG9yJyk7XG4gICAgICBjb25zdCB0b29sYmFyRWxtOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5taWFtLXJlY2lwZS1jYXRhbG9nX190b29sYmFyLWNvbnRhaW5lcicpO1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgcm9vdDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI21pYW1DYXRhbG9nVG9wQW5jaG9yJyksXG4gICAgICAgIHJvb3RNYXJnaW46IGAtJHt0aGlzLmNvbnRleHRTZXJ2aWNlLnN1cHBsaWVySGVhZGVySGVpZ2h0JC52YWx1ZX1weCAwcHggMHB4IDBweGAsXG4gICAgICAgIHRocmVzaG9sZDogMS4wLFxuICAgICAgfTtcblxuICAgICAgaWYgKCFhbmNob3JFbG0gfHwgIXRvb2xiYXJFbG0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBTdG9wIG9ic2VydmluZyB0aGUgcHJldmlvdXMgYW5jaG9yIGVsZW1lbnRcbiAgICAgIHRoaXMuc3RpY2t5VG9vbGJhck9ic2VydmVyPy51bm9ic2VydmUoYW5jaG9yRWxtKTtcblxuICAgICAgdGhpcy5zdGlja3lUb29sYmFyT2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoXG4gICAgICAgIChbZV0pID0+IHtcbiAgICAgICAgICBjb25zdCBhY3RpdmF0ZWQgPSB0b29sYmFyRWxtLmNsYXNzTGlzdC50b2dnbGUoJ3N0aWNraW5nJywgZS5pbnRlcnNlY3Rpb25SYXRpbyA8IDEpO1xuICAgICAgICAgIC8vIFNldCB0aGUgaGVpZ2h0IG9mIHRoZSB0YXJnZXQgZWxlbWVudFxuICAgICAgICAgIChlLnRhcmdldCBhcyBIVE1MRWxlbWVudCkuc3R5bGUuaGVpZ2h0ID0gYWN0aXZhdGVkID8gdG9vbGJhckVsbS5jbGllbnRIZWlnaHQgKyAncHgnIDogJzBweCc7XG4gICAgICAgICAgLy8gU2V0IHRoZSB0b3AgcG9zaXRpb24gb2YgdGhlIHRvb2xiYXJcbiAgICAgICAgICB0b29sYmFyRWxtLnN0eWxlLnRvcCA9IHRoaXMuY29udGV4dFNlcnZpY2Uuc3VwcGxpZXJIZWFkZXJIZWlnaHQkLnZhbHVlICsgJ3B4JztcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICk7XG4gICAgICB0aGlzLnN0aWNreVRvb2xiYXJPYnNlcnZlci5vYnNlcnZlKGFuY2hvckVsbSk7XG4gICAgfVxuICB9XG5cbiAgLy8gVW51c2VkIGZvciBub3cuLi5cbiAgLy8gc2V0VXNlclByZWZlcmVuY2UocHJlZiwgc3RhdGUpIHtcbiAgLy8gICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgLy8gICAgIHRoaXMudXNlcnNTZXJ2aWNlLnNldFByZWZlcmVuY2UocHJlZiwgc3RhdGUpLnBpcGUoXG4gIC8vICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmxvYWRQYWNrYWdlcygpKVxuICAvLyAgICAgKS5zdWJzY3JpYmUoKVxuICAvLyAgICk7XG4gIC8vICAgdGhpcy5jbG9zZU1vZGFsKCk7XG4gIC8vIH1cblxuICAvLyBwcml2YXRlIGNsb3NlTW9kYWwoKSB7XG4gIC8vICAgdGhpcy5zaG93VXNlckZlZWRiYWNrID0gIXRoaXMuc2hvd1VzZXJGZWVkYmFjaztcbiAgLy8gICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIC8vIH1cbn1cbiIsIjxkaXYgI21pYW1DYXRhbG9nVG9wQW5jaG9yIGNsYXNzPVwibWlhbS1jYXRhbG9nLWFuY2hvclwiPjwvZGl2PlxuPGRpdiAqbmdJZj1cIiFjcmVhdGluZ1JlY2lwZSAmJiBjYXRhbG9nU2V0dGluZ0hhc0xvYWRlZCBlbHNlIGNyZWF0aW9uUGFnZVwiIGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ1wiPlxuICA8ZGl2IGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fY29udGVudFwiPlxuICAgIDxuZy1taWFtLWNhdGFsb2ctaGVhZGVyXG4gICAgICBbaG9tZV09XCJkaXNwbGF5SG9tZVBhZ2UoKVwiXG4gICAgICBbc2VhcmNoVGVybV09XCJmaWx0ZXJzPy5zZWFyY2hcIlxuICAgICAgW2FkZGl0aW9uYWxGaWx0ZXJzVGl0bGVdPVwiZmlsdGVycz8uYWRkaXRpb25hbEZpbHRlcnM/LnRpdGxlXCJcbiAgICAgIFtob21lTGFiZWxdPVwiaG9tZUxhYmVsXCJcbiAgICAgIFtwaWN0dXJlVXJsXT1cImRpc3BsYXlIb21lUGFnZSgpID8gaGVhZGVyUGljdHVyZVVybCA6IG51bGxcIlxuICAgICAgW2NhdGFsb2dTZXR0aW5nXT1cImNhdGFsb2dTZXR0aW5nXCJcbiAgICAgIChyZXR1cm5CdXR0b25QcmVzc2VkKT1cInJldHVyblRvSG9tZVBhZ2UoKVwiPlxuICAgIDwvbmctbWlhbS1jYXRhbG9nLWhlYWRlcj5cbiAgICA8ZGl2IGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fdG9vbGJhci1jb250YWluZXItYW5jaG9yXCIgKm5nSWY9XCJkaXNwbGF5SG9tZVBhZ2UoKVwiPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX190b29sYmFyLWNvbnRhaW5lclwiICpuZ0lmPVwiZGlzcGxheUhvbWVQYWdlKClcIiAjc3RpY2t5VG9vbGJhcj5cbiAgICAgIDxuZy1taWFtLWNhdGFsb2ctdG9vbGJhclxuICAgICAgICBbaG9tZV09XCJkaXNwbGF5SG9tZVBhZ2UoKVwiXG4gICAgICAgIFtzZWFyY2hUZXJtXT1cImZpbHRlcnM/LnNlYXJjaFwiXG4gICAgICAgIFthZGRpdGlvbmFsRmlsdGVyc1RpdGxlXT1cImZpbHRlcnM/LmFkZGl0aW9uYWxGaWx0ZXJzPy50aXRsZVwiXG4gICAgICAgIFtmYXZvcml0ZXNCdXR0b25IaWRkZW5dPVwiaXNGYXZvcml0ZXNQYWdlKClcIlxuICAgICAgICBbcGVyc29uYWxCdXR0b25IaWRkZW5dPVwiIShjb250ZXh0U2VydmljZS5lbmFibGVQZXJzb25hbFJlY2lwZXMkIHwgYXN5bmMpXCJcbiAgICAgICAgW2ZpbHRlckJhZGdlQ291bnRdPVwiZmlsdGVycy5zZWxlY3RhYmxlRmlsdGVyc0NvdW50KClcIlxuICAgICAgICAoZmlsdGVyQnV0dG9uUHJlc3NlZCk9XCJvbkZpbHRlckNvbGxhcHNlZCgpXCJcbiAgICAgICAgW3JlZHVjZWRdPVwic3RpY2t5VG9vbGJhci5jbGFzc0xpc3QuY29udGFpbnMoJ3N0aWNraW5nJylcIlxuICAgICAgICAocHJlZmVyZW5jZXNCdXR0b25QcmVzc2VkKT1cImlzUHJlZmVyZW5jZU1vZGFsT3BlbiA9ICFpc1ByZWZlcmVuY2VNb2RhbE9wZW5cIlxuICAgICAgICAoc2VhcmNoU3RyaW5nQ2hhbmdlZCk9XCJ1cGRhdGVTZWFyY2goJGV2ZW50KVwiXG4gICAgICAgIChwZXJzb25hbEJ1dHRvblByZXNzZWQpPVwic2V0UGVyc29uYWxGaWx0ZXIoKVwiXG4gICAgICAgIChmYXZvcml0ZXNCdXR0b25QcmVzc2VkKT1cInNldEZhdm9yaXRlc0ZpbHRlcigpXCJcbiAgICAgICAgKHJldHVybkhvbWVQcmVzc2VkKT1cInJldHVyblRvSG9tZVBhZ2UoKVwiPlxuICAgICAgPC9uZy1taWFtLWNhdGFsb2ctdG9vbGJhcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwicmVjaXBlQ291bnQgPiAwXCIgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19jb250ZW50X19teU1lYWxfX2J1dHRvblwiIChjbGljayk9XCJ0b2dnbGVNeU1lYWxEcmF3ZXIoKVwiPlxuICAgICAgPGltZ1xuICAgICAgICBzcmM9XCJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vYXNzZXRzLm1pYW0udGVjaC9nZW5lcmljL2ljb25zL2N1dGxlcnktd2hpdGUuc3ZnXCJcbiAgICAgICAgYWx0PVwiQ3V0bGVyeVwiXG4gICAgICAgIGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fbXlNZWFsX19maXJzdF9faWNvblwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19teU1lYWxfX2J1dHRvbl9fdGV4dCBtaWFtLWRzLXRleHQgd2VpZ2h0LXhsXCI+XG4gICAgICAgIDxzcGFuPnt7IHJlY2lwZUNvdW50IH19PC9zcGFuPlxuICAgICAgICA8c3BhbiBpMThuPiByZXBhcyBkYW5zIHZvdHJlIHBhbmllcjwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxpbWdcbiAgICAgICAgc3JjPVwiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Fzc2V0cy5taWFtLnRlY2gvZ2VuZXJpYy9pY29ucy9jaGV2cm9uLWRvd24td2hpdGUuc3ZnXCJcbiAgICAgICAgYWx0PVwiQ2FyZXRcIlxuICAgICAgICBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX215TWVhbF9fc2Vjb25kX19pY29uXCI+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFVzZXIgZmVlZGJhY2sgYmFubmVyICh1bnVzZWQgZm9yIG5vdyAvIG1heWJlIHJlYWN0aXZhdGVkIGxhdGVyKSAtLT5cbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19jb250ZW50X191c2VyLWZlZWRiYWNrX19tb2RhbFwiICpuZ0lmPVwic2hvd1VzZXJGZWVkYmFja1wiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2NvbnRlbnRfX3VzZXItZmVlZGJhY2tcIj5cbiAgICAgICAgPG5nLW1pYW0taWNvbiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2NvbnRlbnRfX3VzZXItZmVlZGJhY2tfX2ljb24tY3Jvc3NcIiAoY2xpY2spPVwiY2xvc2VNb2RhbCgpXCIgW2ljb25OYW1lXT1cImljb24uQ3Jvc3NcIiBbd2lkdGhdPVwiMzBcIiBbaGVpZ2h0XT1cIjMwXCIgcHJpbWFyeUNvbG9yPVwibm9uZVwiPjwvbmctbWlhbS1pY29uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fY29udGVudF9fdXNlci1mZWVkYmFja19fdGl0bGVcIj5cbiAgICAgICAgICAgIDxzcGFuPlBvdXIgbWlldXggdm91cyBjb25uYcOudHJlPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2NvbnRlbnRfX3VzZXItZmVlZGJhY2tfX3F1ZXN0aW9uXCI+XG4gICAgICAgICAgICA8c3Bhbj5BdmV6LXZvdXMgbCdoYWJpdHVkZSBkZSBjdWlzaW5lciBwb3VyIG91IGF2ZWMgZGVzIGVuZmFudHMgPzwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2NvbnRlbnRfX3VzZXItZmVlZGJhY2tfX2FjdGlvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibS1mZWVkYmFjay1idXR0b25cIiAoY2xpY2spPVwic2V0VXNlclByZWZlcmVuY2UoJ2hhc19jaGlsZHJlbicsIGZhbHNlKVwiPk5vbjwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtLWZlZWRiYWNrLWJ1dHRvblwiIChjbGljayk9XCJzZXRVc2VyUHJlZmVyZW5jZSgnaGFzX2NoaWxkcmVuJywgdHJ1ZSlcIj5PdWk8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gLS0+XG5cbiAgICA8IS0tIENhdGFsb2cgcGFnZSBjb250ZW50IHdoZW4gZmlsdGVycyBhcHBsaWVkIC0tPlxuICAgIDxkaXYgKm5nSWY9XCIhZGlzcGxheUhvbWVQYWdlKCkgZWxzZSBjYXRlZ29yaWVzQ29tcG9uZW50c1wiIGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fbGlzdFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2NvbnRlbnRfX3RpdGxlXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2NvbnRlbnRfX3RpdGxlLWljb24gbWlhbS1kcy1idXR0b24gcHJpbWFyeSBzcXVhcmVcIlxuICAgICAgICAgIChjbGljayk9XCJyZXR1cm5Ub0hvbWVQYWdlKClcIj5cbiAgICAgICAgICA8aW1nIGFsdD1cInJldHVyblwiIHNyYz1cImh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9hc3NldHMubWlhbS50ZWNoL2dlbmVyaWMvaWNvbnMvQXJyb3dMZWZ0X3doaXRlLnN2Z1wiPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2NvbnRlbnRfX3RpdGxlX19zZWFyY2hfX3RleHRcIiAqbmdJZj1cImlzU2VhcmNoUGFnZSgpXCI+XG4gICAgICAgICAgPHNwYW4gaTE4bj5Wb3RyZSByZWNoZXJjaGUgOiA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4+e3sgZmlsdGVycy5zZWFyY2ggfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiAqbmdJZj1cImlzRmF2b3JpdGVzUGFnZSgpXCIgaTE4bj5GYXZvcmlzPC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImlzUGVyc29uYWxQYWdlKClcIiBpMThuPk1vbiBjYXJuZXQgcGVyc288L3NwYW4+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc0NhdGVnb3J5UGFnZSgpXCIgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19jb250ZW50X190aXRsZV9fY2F0ZWdvcnlcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1pYW0tZHMtdGV4dCBzaXplLWwgd2VpZ2h0LXh4bFwiPnt7IGZpbHRlcnMuYWRkaXRpb25hbEZpbHRlcnMudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJmaWx0ZXJzLmFkZGl0aW9uYWxGaWx0ZXJzLnN1YnRpdGxlPy5sZW5ndGggPiAwXCIgY2xhc3M9XCJtaWFtLWRzLXRleHQgc2l6ZS1zIHdlaWdodC1sXCI+XG4gICAgICAgICAgICB7eyBmaWx0ZXJzLmFkZGl0aW9uYWxGaWx0ZXJzLnN1YnRpdGxlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJpc0RlZmF1bHRQYWdlKClcIiBpMThuPlZvdHJlIHPDqWxlY3Rpb248L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX190b29sYmFyLWNvbnRhaW5lci1hbmNob3JcIj48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX190b29sYmFyLWNvbnRhaW5lclwiICNzdGlja3lUb29sYmFyQ29sbGVjdGlvbj5cbiAgICAgICAgPG5nLW1pYW0tY2F0YWxvZy10b29sYmFyXG4gICAgICAgICAgW2hvbWVdPVwiZGlzcGxheUhvbWVQYWdlKClcIlxuICAgICAgICAgIFtzZWFyY2hUZXJtXT1cImZpbHRlcnM/LnNlYXJjaFwiXG4gICAgICAgICAgW2FkZGl0aW9uYWxGaWx0ZXJzVGl0bGVdPVwiZmlsdGVycz8uYWRkaXRpb25hbEZpbHRlcnM/LnRpdGxlXCJcbiAgICAgICAgICBbZmF2b3JpdGVzQnV0dG9uSGlkZGVuXT1cImlzRmF2b3JpdGVzUGFnZSgpXCJcbiAgICAgICAgICBbcGVyc29uYWxCdXR0b25IaWRkZW5dPVwiIShjb250ZXh0U2VydmljZS5lbmFibGVQZXJzb25hbFJlY2lwZXMkIHwgYXN5bmMpXCJcbiAgICAgICAgICBbZmlsdGVyQmFkZ2VDb3VudF09XCJmaWx0ZXJzLnNlbGVjdGFibGVGaWx0ZXJzQ291bnQoKVwiXG4gICAgICAgICAgW3JlZHVjZWRdPVwic3RpY2t5VG9vbGJhckNvbGxlY3Rpb24uY2xhc3NMaXN0LmNvbnRhaW5zKCdzdGlja2luZycpXCJcbiAgICAgICAgICAoZmlsdGVyQnV0dG9uUHJlc3NlZCk9XCJvbkZpbHRlckNvbGxhcHNlZCgpXCJcbiAgICAgICAgICAocHJlZmVyZW5jZXNCdXR0b25QcmVzc2VkKT1cImlzUHJlZmVyZW5jZU1vZGFsT3BlbiA9ICFpc1ByZWZlcmVuY2VNb2RhbE9wZW5cIlxuICAgICAgICAgIChzZWFyY2hTdHJpbmdDaGFuZ2VkKT1cInVwZGF0ZVNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAocGVyc29uYWxCdXR0b25QcmVzc2VkKT1cInNldFBlcnNvbmFsRmlsdGVyKClcIlxuICAgICAgICAgIChmYXZvcml0ZXNCdXR0b25QcmVzc2VkKT1cInNldEZhdm9yaXRlc0ZpbHRlcigpXCJcbiAgICAgICAgICAocmV0dXJuSG9tZVByZXNzZWQpPVwicmV0dXJuVG9Ib21lUGFnZSgpXCI+XG4gICAgICAgIDwvbmctbWlhbS1jYXRhbG9nLXRvb2xiYXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19saXN0X19jcmVhdGVfX19idXR0b25cIlxuICAgICAgICAqbmdJZj1cImNhbkRpc3BsYXlDcmVhdGlvbkJ1dHRvbigpIHwgYXN5bmNcIlxuICAgICAgICAoY2xpY2spPVwibWFuYWdlUmVjaXBlQWN0aW9uKHthY3Rpb246ICdDUkVBVEUnLCByZWNpcGU6IG51bGx9KVwiPlxuICAgICAgICA8bmctbWlhbS1pY29uXG4gICAgICAgICAgW2ljb25OYW1lXT1cImljb24uUGx1c1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiXG4gICAgICAgICAgcHJpbWFyeUNvbG9yPVwidmFyKC0tbS1jb2xvci1wcmltYXJ5KVwiPjwvbmctbWlhbS1pY29uPlxuICAgICAgICA8c3BhbiBpMThuPkFqb3V0ZXIgdW5lIGlkw6llIHJlcGFzPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctbWlhbS1jYXRhbG9nLWxpc3RcbiAgICAgICAgW2ZpbHRlcnNdPVwiZmlsdGVyc1wiXG4gICAgICAgIFtvcmlnaW5UcmFjZV09XCJldmVudFRyYWNlKClcIlxuICAgICAgICBbZGlzcGxheVByaWNpbmddPVwiZGlzcGxheVByaWNpbmdcIlxuICAgICAgICBbZGlzcGxheUluZm9zXT1cImRpc3BsYXlJbmZvc1wiXG4gICAgICAgIChmaWx0ZXJSZW1vdmVkKT1cInJlbW92ZUZpbHRlcigkZXZlbnQpXCJcbiAgICAgICAgW21vZGlmaWVkR3Vlc3RzXT1cImd1ZXN0c1wiXG4gICAgICAgIChyZWNpcGVBY3Rpb25UcmlnZ2VyZWQpPVwibWFuYWdlUmVjaXBlQWN0aW9uKCRldmVudClcIj5cbiAgICAgIDwvbmctbWlhbS1jYXRhbG9nLWxpc3Q+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxuZy1taWFtLXJlY2lwZS1maWx0ZXJzXG4gICAgW2ZpbHRlcnNdPVwiZmlsdGVyc1wiXG4gICAgW2lzRmlsdGVyQ29sbGFwc2VkXT1cImlzRmlsdGVyQ29sbGFwc2VkXCJcbiAgICBbZmlsdGVyVG9SZW1vdmVdPVwiZmlsdGVyVG9SZW1vdmVcIlxuICAgIFtwb3NpdGlvbl09XCJmaWx0ZXJzUG9zaXRpb25cIlxuICAgIFtvcmlnaW5UcmFjZV09XCJldmVudFRyYWNlKClcIlxuICAgIChmaWx0ZXJDaGFuZ2VkKT1cInVwZGF0ZUZpbHRlcnMoJGV2ZW50KVwiXG4gICAgKGZpbHRlckNvbGxhcHNlZCk9XCJvbkZpbHRlckNvbGxhcHNlZCgpXCJcbiAgICAocHJlZmVyZW5jZXNDaGFuZ2VkKT1cInJlbG9hZFBhY2thZ2VzKClcIlxuICA+XG4gIDwvbmctbWlhbS1yZWNpcGUtZmlsdGVycz5cblxuICA8bmctbWlhbS1wcmVmZXJlbmNlc1xuICAgIFsoaXNPcGVuKV09XCJpc1ByZWZlcmVuY2VNb2RhbE9wZW5cIlxuICAgIChwcmVmZXJlbmNlc0NoYW5nZWQpPVwicmVsb2FkUGFja2FnZXMoKVwiXG4gID5cbiAgPC9uZy1taWFtLXByZWZlcmVuY2VzPlxuXG4gIDwhLS0gQ2F0YWxvZyBob21lIHBhZ2UgY29udGVudCAtLT5cbiAgPG5nLXRlbXBsYXRlICNjYXRlZ29yaWVzQ29tcG9uZW50cz5cbiAgICA8ZGl2ICpuZ0lmPVwiY2F0ZWdvcmllcy5sZW5ndGggPiAwXCIgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19jYXRlZ29yaWVzXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjYXRlZ29yeSBvZiBjYXRlZ29yaWVzIGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImkgIT09IDAgZWxzZSBmaXJzdENhdGVnb3J5XCI+XG4gICAgICAgICAgPG5nLW1pYW0tY2F0YWxvZy1jYXRlZ29yeVxuICAgICAgICAgICAgW3RpdGxlXT1cImNhdGVnb3J5LnRpdGxlXCJcbiAgICAgICAgICAgIFtzdWJ0aXRsZV09XCJjYXRlZ29yeS5zdWJ0aXRsZVwiXG4gICAgICAgICAgICBbZmlsdGVyc109XCJjYXRlZ29yeS5maWx0ZXJzXCJcbiAgICAgICAgICAgIFtkaXNwbGF5SW5mb3NdPVwiZGlzcGxheUluZm9zXCJcbiAgICAgICAgICAgIFtkaXNwbGF5UHJpY2luZ109XCJkaXNwbGF5UHJpY2luZ1wiXG4gICAgICAgICAgICBbb3JpZ2luVHJhY2VdPVwiZXZlbnRUcmFjZSgpXCJcbiAgICAgICAgICAgIFttb2RpZmllZEd1ZXN0c109XCJndWVzdHNcIlxuICAgICAgICAgICAgKGRpc3BsYXlMaXN0KT1cImNhdGVnb3J5VGl0bGVDbGlja2VkKCRldmVudClcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L25nLW1pYW0tY2F0YWxvZy1jYXRlZ29yeT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZmlyc3RDYXRlZ29yeT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fZmlyc3QtY2F0ZWdvcnlcIj5cbiAgICAgICAgICAgIDxuZy1taWFtLW1lYWxzLXBsYW5uZXItbGluayAqbmdJZj1cImNvbnRleHRTZXJ2aWNlLmVuYWJsZU1lYWxzUGxhbm5lciQgfCBhc3luY1wiPjwvbmctbWlhbS1tZWFscy1wbGFubmVyLWxpbms+XG4gICAgICAgICAgICA8bmctbWlhbS1jYXRhbG9nLWNhdGVnb3J5XG4gICAgICAgICAgICAgIFt0aXRsZV09XCJjYXRlZ29yeS50aXRsZVwiXG4gICAgICAgICAgICAgIFtzdWJ0aXRsZV09XCJjYXRlZ29yeS5zdWJ0aXRsZVwiXG4gICAgICAgICAgICAgIFtmaWx0ZXJzXT1cImNhdGVnb3J5LmZpbHRlcnNcIlxuICAgICAgICAgICAgICBbZGlzcGxheUluZm9zXT1cImRpc3BsYXlJbmZvc1wiXG4gICAgICAgICAgICAgIFtkaXNwbGF5UHJpY2luZ109XCJkaXNwbGF5UHJpY2luZ1wiXG4gICAgICAgICAgICAgIFttb2RpZmllZEd1ZXN0c109XCJndWVzdHNcIlxuICAgICAgICAgICAgICBbb3JpZ2luVHJhY2VdPVwiZXZlbnRUcmFjZSgpXCJcbiAgICAgICAgICAgICAgKGRpc3BsYXlMaXN0KT1cImNhdGVnb3J5VGl0bGVDbGlja2VkKCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9uZy1taWFtLWNhdGFsb2ctY2F0ZWdvcnk+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2NyZWF0aW9uUGFnZT5cbiAgPG5nLW1pYW0tcmVjaXBlLXN0ZXBwZXJcbiAgICAqbmdJZj1cImNhdGFsb2dTZXR0aW5nSGFzTG9hZGVkXCJcbiAgICBbcmVjaXBlVG9VcGRhdGVdPVwicmVjaXBlVG9VcGRhdGVcIlxuICAgIFtvcmlnaW5UcmFjZV09XCJldmVudFRyYWNlKClcIlxuICAgIChyZWNpcGVDaGFuZ2UpPVwibGVhdmVDcmVhdGVQYWdlKClcIlxuICAgIChjYW5jZWxlZCk9XCJsZWF2ZUNyZWF0ZVBhZ2UoKVwiPlxuICA8L25nLW1pYW0tcmVjaXBlLXN0ZXBwZXI+XG48L25nLXRlbXBsYXRlPlxuIl19