fabrikantencore 2.7.8 → 2.8.0

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.
Files changed (29) hide show
  1. package/esm2022/public_api.mjs +2 -1
  2. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-translate/beheer-translate.component.mjs +8 -4
  3. package/esm2022/src/app/modules/fabrikantencore/components/fab-actionmenu/fab-actionmenu.component.mjs +22 -18
  4. package/esm2022/src/app/modules/fabrikantencore/components/fab-checkbox/fab-checkbox.component.mjs +3 -3
  5. package/esm2022/src/app/modules/fabrikantencore/components/fab-download-zip/fab-download-zip.component.mjs +81 -0
  6. package/esm2022/src/app/modules/fabrikantencore/components/fab-filter-display-value/fab-filter-display-value.component.mjs +3 -3
  7. package/esm2022/src/app/modules/fabrikantencore/components/fab-filter-label/fab-filter-label.component.mjs +3 -3
  8. package/esm2022/src/app/modules/fabrikantencore/components/fab-form-dialog/fab-form-dialog.component.mjs +102 -0
  9. package/esm2022/src/app/modules/fabrikantencore/components/fab-input-code/fab-input-code.component.mjs +93 -0
  10. package/esm2022/src/app/modules/fabrikantencore/components/fab-range-input/fab-range-input.component.mjs +3 -3
  11. package/esm2022/src/app/modules/fabrikantencore/components/fab-svg-viewer/fab-svg-viewer.component.mjs +1 -4
  12. package/esm2022/src/app/modules/fabrikantencore/components/fab-webgl-viewer/fab-webgl-viewer.component.mjs +1 -4
  13. package/esm2022/src/app/modules/fabrikantencore/fabrikantencore.module.mjs +20 -6
  14. package/esm2022/src/app/modules/fabrikantencore/services/fabrikanten.service.mjs +112 -174
  15. package/esm2022/src/app/modules/fabrikantencore/swagger/SwaggerClient.mjs +888 -135
  16. package/fesm2022/fabrikantencore.mjs +1551 -617
  17. package/fesm2022/fabrikantencore.mjs.map +1 -1
  18. package/package.json +1 -1
  19. package/public_api.d.ts +1 -0
  20. package/src/app/modules/fabrikantencore/beheer/components/beheer-translate/beheer-translate.component.d.ts +1 -1
  21. package/src/app/modules/fabrikantencore/components/fab-actionmenu/fab-actionmenu.component.d.ts +6 -7
  22. package/src/app/modules/fabrikantencore/components/fab-download-zip/fab-download-zip.component.d.ts +20 -0
  23. package/src/app/modules/fabrikantencore/components/fab-form-dialog/fab-form-dialog.component.d.ts +25 -0
  24. package/src/app/modules/fabrikantencore/components/fab-input-code/fab-input-code.component.d.ts +29 -0
  25. package/src/app/modules/fabrikantencore/components/fab-svg-viewer/fab-svg-viewer.component.d.ts +0 -1
  26. package/src/app/modules/fabrikantencore/components/fab-webgl-viewer/fab-webgl-viewer.component.d.ts +0 -1
  27. package/src/app/modules/fabrikantencore/fabrikantencore.module.d.ts +32 -29
  28. package/src/app/modules/fabrikantencore/services/fabrikanten.service.d.ts +9 -21
  29. package/src/app/modules/fabrikantencore/swagger/SwaggerClient.d.ts +305 -54
@@ -10,6 +10,7 @@ export * from './src/app/modules/fabrikantencore/components/fab-svg-viewer/fab-s
10
10
  export * from './src/app/modules/fabrikantencore/components/fab-product/fab-product-bestek/fab-product-bestek.component';
11
11
  export * from './src/app/modules/fabrikantencore/components/fab-loader/fab-loader.component';
12
12
  export * from './src/app/modules/fabrikantencore/components/fab-select-bcbproduct/fab-select-bcbproduct.component';
13
+ export * from './src/app/modules/fabrikantencore/components/fab-download-zip/fab-download-zip.component';
13
14
  export * from './src/app/modules/fabrikantencore/services/mobile.service';
14
15
  export * from './src/app/modules/fabrikantencore/services/fabrikanten.service';
15
16
  export * from './src/app/modules/fabrikantencore/services/bestek.service';
@@ -17,4 +18,4 @@ export * from './src/app/modules/fabrikantencore/services/translate.service';
17
18
  export * from './src/app/modules/fabrikantencore/services/webgl.service';
18
19
  export * from './src/app/modules/fabrikantencore/services/svg.service';
19
20
  export * from './src/app/modules/fabrikantencore/services/template-component.service';
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywwREFBMEQsQ0FBQTtBQUN4RSxjQUFjLHlEQUF5RCxDQUFBO0FBQ3ZFLGNBQWMsZ0ZBQWdGLENBQUE7QUFDOUYsY0FBYyw0RkFBNEYsQ0FBQTtBQUMxRyxjQUFjLHNHQUFzRyxDQUFBO0FBQ3BILGNBQWMsNEZBQTRGLENBQUE7QUFDMUcsY0FBYyxzRkFBc0YsQ0FBQTtBQUNwRyxjQUFjLDBGQUEwRixDQUFBO0FBQ3hHLGNBQWMsc0ZBQXNGLENBQUE7QUFDcEcsY0FBYywwR0FBMEcsQ0FBQTtBQUN4SCxjQUFjLDhFQUE4RSxDQUFBO0FBQzVGLGNBQWMsb0dBQW9HLENBQUE7QUFFbEgsY0FBYywyREFBMkQsQ0FBQTtBQUN6RSxjQUFjLGdFQUFnRSxDQUFBO0FBQzlFLGNBQWMsMkRBQTJELENBQUE7QUFDekUsY0FBYyw4REFBOEQsQ0FBQTtBQUM1RSxjQUFjLDBEQUEwRCxDQUFBO0FBQ3hFLGNBQWMsd0RBQXdELENBQUE7QUFDdEUsY0FBYyx1RUFBdUUsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9tb2R1bGVzL2ZhYnJpa2FudGVuY29yZS9mYWJyaWthbnRlbmNvcmUubW9kdWxlJ1xyXG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvbW9kdWxlcy9mYWJyaWthbnRlbmNvcmUvc3dhZ2dlci9Td2FnZ2VyQ2xpZW50J1xyXG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvbW9kdWxlcy9mYWJyaWthbnRlbmNvcmUvY29tcG9uZW50cy9mYWItZmlsdGVycy9mYWItZmlsdGVycy5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9tb2R1bGVzL2ZhYnJpa2FudGVuY29yZS9jb21wb25lbnRzL2ZhYi1maWx0ZXItY3VzdG9tL2ZhYi1maWx0ZXItY3VzdG9tLmNvbXBvbmVudCdcclxuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL21vZHVsZXMvZmFicmlrYW50ZW5jb3JlL2NvbXBvbmVudHMvZmFiLWNhdGVnb3J5LW5hdmlnYXRvci9mYWItY2F0ZWdvcnktbmF2aWdhdG9yLmNvbXBvbmVudCdcclxuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL21vZHVsZXMvZmFicmlrYW50ZW5jb3JlL2NvbXBvbmVudHMvZmFiLWZpbHRlcnMtaW5wdXQvZmFiLWZpbHRlcnMtaW5wdXQuY29tcG9uZW50J1xyXG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvbW9kdWxlcy9mYWJyaWthbnRlbmNvcmUvY29tcG9uZW50cy9mYWItYWN0aW9ubWVudS9mYWItYWN0aW9ubWVudS5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9tb2R1bGVzL2ZhYnJpa2FudGVuY29yZS9jb21wb25lbnRzL2ZhYi13ZWJnbC12aWV3ZXIvZmFiLXdlYmdsLXZpZXdlci5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9tb2R1bGVzL2ZhYnJpa2FudGVuY29yZS9jb21wb25lbnRzL2ZhYi1zdmctdmlld2VyL2ZhYi1zdmctdmlld2VyLmNvbXBvbmVudCdcclxuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL21vZHVsZXMvZmFicmlrYW50ZW5jb3JlL2NvbXBvbmVudHMvZmFiLXByb2R1Y3QvZmFiLXByb2R1Y3QtYmVzdGVrL2ZhYi1wcm9kdWN0LWJlc3Rlay5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9tb2R1bGVzL2ZhYnJpa2FudGVuY29yZS9jb21wb25lbnRzL2ZhYi1sb2FkZXIvZmFiLWxvYWRlci5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9tb2R1bGVzL2ZhYnJpa2FudGVuY29yZS9jb21wb25lbnRzL2ZhYi1zZWxlY3QtYmNicHJvZHVjdC9mYWItc2VsZWN0LWJjYnByb2R1Y3QuY29tcG9uZW50J1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL21vZHVsZXMvZmFicmlrYW50ZW5jb3JlL3NlcnZpY2VzL21vYmlsZS5zZXJ2aWNlJ1xyXG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvbW9kdWxlcy9mYWJyaWthbnRlbmNvcmUvc2VydmljZXMvZmFicmlrYW50ZW4uc2VydmljZSdcclxuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL21vZHVsZXMvZmFicmlrYW50ZW5jb3JlL3NlcnZpY2VzL2Jlc3Rlay5zZXJ2aWNlJ1xyXG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvbW9kdWxlcy9mYWJyaWthbnRlbmNvcmUvc2VydmljZXMvdHJhbnNsYXRlLnNlcnZpY2UnXHJcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9tb2R1bGVzL2ZhYnJpa2FudGVuY29yZS9zZXJ2aWNlcy93ZWJnbC5zZXJ2aWNlJ1xyXG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvbW9kdWxlcy9mYWJyaWthbnRlbmNvcmUvc2VydmljZXMvc3ZnLnNlcnZpY2UnXHJcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9tb2R1bGVzL2ZhYnJpa2FudGVuY29yZS9zZXJ2aWNlcy90ZW1wbGF0ZS1jb21wb25lbnQuc2VydmljZSdcclxuIl19
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywwREFBMEQsQ0FBQTtBQUN4RSxjQUFjLHlEQUF5RCxDQUFBO0FBQ3ZFLGNBQWMsZ0ZBQWdGLENBQUE7QUFDOUYsY0FBYyw0RkFBNEYsQ0FBQTtBQUMxRyxjQUFjLHNHQUFzRyxDQUFBO0FBQ3BILGNBQWMsNEZBQTRGLENBQUE7QUFDMUcsY0FBYyxzRkFBc0YsQ0FBQTtBQUNwRyxjQUFjLDBGQUEwRixDQUFBO0FBQ3hHLGNBQWMsc0ZBQXNGLENBQUE7QUFDcEcsY0FBYywwR0FBMEcsQ0FBQTtBQUN4SCxjQUFjLDhFQUE4RSxDQUFBO0FBQzVGLGNBQWMsb0dBQW9HLENBQUE7QUFDbEgsY0FBYywwRkFBMEYsQ0FBQTtBQUV4RyxjQUFjLDJEQUEyRCxDQUFBO0FBQ3pFLGNBQWMsZ0VBQWdFLENBQUE7QUFDOUUsY0FBYywyREFBMkQsQ0FBQTtBQUN6RSxjQUFjLDhEQUE4RCxDQUFBO0FBQzVFLGNBQWMsMERBQTBELENBQUE7QUFDeEUsY0FBYyx3REFBd0QsQ0FBQTtBQUN0RSxjQUFjLHVFQUF1RSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL21vZHVsZXMvZmFicmlrYW50ZW5jb3JlL2ZhYnJpa2FudGVuY29yZS5tb2R1bGUnXHJcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9tb2R1bGVzL2ZhYnJpa2FudGVuY29yZS9zd2FnZ2VyL1N3YWdnZXJDbGllbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9tb2R1bGVzL2ZhYnJpa2FudGVuY29yZS9jb21wb25lbnRzL2ZhYi1maWx0ZXJzL2ZhYi1maWx0ZXJzLmNvbXBvbmVudCdcclxuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL21vZHVsZXMvZmFicmlrYW50ZW5jb3JlL2NvbXBvbmVudHMvZmFiLWZpbHRlci1jdXN0b20vZmFiLWZpbHRlci1jdXN0b20uY29tcG9uZW50J1xyXG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvbW9kdWxlcy9mYWJyaWthbnRlbmNvcmUvY29tcG9uZW50cy9mYWItY2F0ZWdvcnktbmF2aWdhdG9yL2ZhYi1jYXRlZ29yeS1uYXZpZ2F0b3IuY29tcG9uZW50J1xyXG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvbW9kdWxlcy9mYWJyaWthbnRlbmNvcmUvY29tcG9uZW50cy9mYWItZmlsdGVycy1pbnB1dC9mYWItZmlsdGVycy1pbnB1dC5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9tb2R1bGVzL2ZhYnJpa2FudGVuY29yZS9jb21wb25lbnRzL2ZhYi1hY3Rpb25tZW51L2ZhYi1hY3Rpb25tZW51LmNvbXBvbmVudCdcclxuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL21vZHVsZXMvZmFicmlrYW50ZW5jb3JlL2NvbXBvbmVudHMvZmFiLXdlYmdsLXZpZXdlci9mYWItd2ViZ2wtdmlld2VyLmNvbXBvbmVudCdcclxuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL21vZHVsZXMvZmFicmlrYW50ZW5jb3JlL2NvbXBvbmVudHMvZmFiLXN2Zy12aWV3ZXIvZmFiLXN2Zy12aWV3ZXIuY29tcG9uZW50J1xyXG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvbW9kdWxlcy9mYWJyaWthbnRlbmNvcmUvY29tcG9uZW50cy9mYWItcHJvZHVjdC9mYWItcHJvZHVjdC1iZXN0ZWsvZmFiLXByb2R1Y3QtYmVzdGVrLmNvbXBvbmVudCdcclxuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL21vZHVsZXMvZmFicmlrYW50ZW5jb3JlL2NvbXBvbmVudHMvZmFiLWxvYWRlci9mYWItbG9hZGVyLmNvbXBvbmVudCdcclxuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL21vZHVsZXMvZmFicmlrYW50ZW5jb3JlL2NvbXBvbmVudHMvZmFiLXNlbGVjdC1iY2Jwcm9kdWN0L2ZhYi1zZWxlY3QtYmNicHJvZHVjdC5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9tb2R1bGVzL2ZhYnJpa2FudGVuY29yZS9jb21wb25lbnRzL2ZhYi1kb3dubG9hZC16aXAvZmFiLWRvd25sb2FkLXppcC5jb21wb25lbnQnXHJcblxyXG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvbW9kdWxlcy9mYWJyaWthbnRlbmNvcmUvc2VydmljZXMvbW9iaWxlLnNlcnZpY2UnXHJcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9tb2R1bGVzL2ZhYnJpa2FudGVuY29yZS9zZXJ2aWNlcy9mYWJyaWthbnRlbi5zZXJ2aWNlJ1xyXG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvbW9kdWxlcy9mYWJyaWthbnRlbmNvcmUvc2VydmljZXMvYmVzdGVrLnNlcnZpY2UnXHJcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9tb2R1bGVzL2ZhYnJpa2FudGVuY29yZS9zZXJ2aWNlcy90cmFuc2xhdGUuc2VydmljZSdcclxuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL21vZHVsZXMvZmFicmlrYW50ZW5jb3JlL3NlcnZpY2VzL3dlYmdsLnNlcnZpY2UnXHJcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9tb2R1bGVzL2ZhYnJpa2FudGVuY29yZS9zZXJ2aWNlcy9zdmcuc2VydmljZSdcclxuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL21vZHVsZXMvZmFicmlrYW50ZW5jb3JlL3NlcnZpY2VzL3RlbXBsYXRlLWNvbXBvbmVudC5zZXJ2aWNlJ1xyXG4iXX0=
@@ -23,7 +23,6 @@ class BeheerTranslateComponent {
23
23
  authenticationService;
24
24
  snackBar;
25
25
  ChangeDetectorRef;
26
- HTML = "test";
27
26
  Loading = true;
28
27
  OpenChanges = false;
29
28
  BeheerLanguagesViewModel;
@@ -38,6 +37,7 @@ class BeheerTranslateComponent {
38
37
  return TranslationSubCategory;
39
38
  }
40
39
  SelectedBeheerLanguagesCategoryViewModel = null;
40
+ SelectedBeheerLanguageViewModel = null;
41
41
  tablediv;
42
42
  editorConfig = {
43
43
  editable: true,
@@ -188,6 +188,10 @@ class BeheerTranslateComponent {
188
188
  this.SelectedBeheerLanguagesCategoryViewModel = this.BeheerLanguagesViewModel.categories[0];
189
189
  this.RefreshPaginator();
190
190
  }
191
+ if (this.BeheerLanguagesViewModel.languages != null) {
192
+ this.SelectedBeheerLanguageViewModel = this.BeheerLanguagesViewModel.languages[0];
193
+ this.RefreshPaginator();
194
+ }
191
195
  this.Loading = false;
192
196
  ChangeDetectorRef.detectChanges();
193
197
  }, (error) => {
@@ -279,14 +283,14 @@ class BeheerTranslateComponent {
279
283
  return count;
280
284
  }
281
285
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: BeheerTranslateComponent, deps: [{ token: i1.TranslateApiClient }, { token: i2.AuthenticationService }, { token: i3.MatLegacySnackBar }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
282
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.1", type: BeheerTranslateComponent, selector: "app-beheer-translate", viewQueries: [{ propertyName: "tablediv", first: true, predicate: ["tablediv"], descendants: true }], ngImport: i0, template: "<app-beheer-nav></app-beheer-nav>\r\n\r\n<app-fab-loader *ngIf=\"Loading\"></app-fab-loader>\r\n\r\n<div *ngIf=\"!Loading\">\r\n <div class=\"displayflex\" #tablediv (window:resize)=\"onResize($event)\">\r\n <div>\r\n <mat-card class=\"main-bar\">\r\n <mat-card-content>\r\n <mat-form-field appearance=\"fill\">\r\n <mat-label>Group</mat-label>\r\n <mat-select [(ngModel)]=\"SelectedBeheerLanguagesCategoryViewModel\" (selectionChange)=\"this.pageIndex = 0; RefreshPaginator(); Resize();\">\r\n <mat-option *ngFor=\"let cat of BeheerLanguagesViewModel.categories\" [value]=\"cat\">\r\n {{ TranslationCategory[cat.translationCategory] }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <!--<button mat-raised-button (click)=\"Export()\">\r\n Export\r\n </button>\r\n <button mat-raised-button (click)=\"Import()\">\r\n Import\r\n </button>-->\r\n <div *ngFor=\"let language of BeheerLanguagesViewModel.languages\">\r\n <mat-checkbox [(ngModel)]=\"language.selected\">\r\n <fab-flag [country]=\"language.flag\"></fab-flag> {{ language.name }}\r\n </mat-checkbox>\r\n </div>\r\n\r\n <br /><br />\r\n <button mat-raised-button (click)=\"Save()\" class=\"save-button\" [disabled]=\"!OpenChanges\">\r\n Save\r\n </button>\r\n </mat-card-content>\r\n </mat-card>\r\n </div>\r\n <mat-card class=\"main-bar flexauto\">\r\n <mat-card-content>\r\n <div class=\"max-height\">\r\n\r\n <div *ngIf=\"SelectedBeheerLanguagesCategoryViewModel != null\">\r\n <h1>{{ TranslationCategory[SelectedBeheerLanguagesCategoryViewModel.translationCategory] }}</h1>\r\n\r\n <table class=\"full-width\">\r\n <tr>\r\n <td *ngIf=\"!IsHTML()\" colspan=\"2\" class=\"cat-row\"></td>\r\n <ng-container *ngFor=\"let language of BeheerLanguagesViewModel.languages\">\r\n <td class=\"cat-row\" *ngIf=\"language.selected\">\r\n <fab-flag [country]=\"language.flag\"></fab-flag> {{ language.name }}\r\n </td>\r\n </ng-container>\r\n </tr>\r\n\r\n <ng-container *ngIf=\"IsHTML()\">\r\n <ng-container *ngFor=\"let subcat of ActiveSubs\">\r\n <ng-container *ngFor=\"let key of subcat.keys\">\r\n <tr>\r\n <td [attr.colspan]=\"GetLanguageCount()\">\r\n {{ TranslationSubCategory[subcat.translationSubCategory] }}\r\n <ng-container *ngIf=\"key.text != ''\">\r\n ({{ key.text }})\r\n </ng-container>\r\n </td>\r\n </tr>\r\n <tr>\r\n <ng-container *ngFor=\"let language of BeheerLanguagesViewModel.languages; index as i\">\r\n <td *ngIf=\"language.selected\" [style.width]=\"'50%'\">\r\n <div>\r\n <angular-editor [config]=\"editorConfig\" [(ngModel)]=\"GetEntry(key.entries, language).value\" (ngModelChange)=\"UpdateChanged(GetEntry(key.entries, language))\">\r\n </angular-editor>\r\n </div>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!IsHTML()\">\r\n <ng-container *ngFor=\"let subcat of ActiveSubs\">\r\n <tr *ngFor=\"let key of subcat.keys\">\r\n <td>\r\n {{ TranslationSubCategory[subcat.translationSubCategory] }}\r\n <ng-container *ngIf=\"key.text != ''\">\r\n ({{ key.text }})\r\n </ng-container>\r\n </td>\r\n <td></td>\r\n <ng-container *ngFor=\"let language of BeheerLanguagesViewModel.languages; index as i\">\r\n <td *ngIf=\"language.selected\">\r\n <mat-form-field appearance=\"fill\" class=\"fullwidth\" *ngIf=\"GetEntry(key.entries, language) != null\">\r\n <mat-label>\r\n {{ TranslationSubCategory[subcat.translationSubCategory] }}\r\n </mat-label>\r\n <input matInput type=\"text\" [(ngModel)]=\"GetEntry(key.entries, language).value\" (keyup)=\"UpdateChanged(GetEntry(key.entries, language))\">\r\n </mat-form-field>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n\r\n <!--<ng-container *ngFor=\"let filter of subcat.filters\">\r\n <tr>\r\n <td>\r\n {{ filter.filter.text }}\r\n </td>\r\n <td></td>\r\n <ng-container *ngFor=\"let language of BeheerLanguagesViewModel.languages\">\r\n <td *ngIf=\"language.selected\">\r\n <mat-form-field appearance=\"fill\" class=\"fullwidth\">\r\n <mat-label>\r\n {{ TranslationSubCategory[subcat.translationSubCategory] }}\r\n </mat-label>\r\n <input matInput type=\"text\" [(ngModel)]=\"GetEntry(filter.filter.entries, language).value\" (keyup)=\"UpdateChanged(GetEntry(filter.filter.entries, language))\">\r\n </mat-form-field>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n <ng-container *ngFor=\"let option of filter.options\">\r\n <tr>\r\n <td>\r\n <ul>\r\n <li>{{ option.text }}</li>\r\n </ul>\r\n </td>\r\n <td></td>\r\n <ng-container *ngFor=\"let language of BeheerLanguagesViewModel.languages\">\r\n <td *ngIf=\"language.selected\">\r\n <mat-form-field appearance=\"fill\" class=\"fullwidth\">\r\n <mat-label>\r\n {{ TranslationSubCategory[subcat.translationSubCategory] }}\r\n </mat-label>\r\n <input matInput type=\"text\" [(ngModel)]=\"GetEntry(option.entries, language).value\" (keyup)=\"UpdateChanged(GetEntry(option.entries, language))\">\r\n </mat-form-field>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n </ng-container>-->\r\n </ng-container>\r\n </ng-container>\r\n </table>\r\n </div>\r\n </div>\r\n <div>\r\n <mat-paginator #paginator\r\n (page)=\"handlePageEvent($event)\"\r\n [length]=\"amountLength\"\r\n [pageSize]=\"amountPerPage\"\r\n [showFirstLastButtons]=\"true\"\r\n [hidePageSize]=\"true\"\r\n [pageIndex]=\"pageIndex\"\r\n aria-label=\"Select page\">\r\n </mat-paginator>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n </div>\r\n</div>\r\n", styles: [".mat-checkbox-checked.mat-accent .mat-checkbox-background{background-color:#aaa!important}snack-bar-container .mat-button-wrapper{color:#aaa}app-beheer-translate .mat-form-field-wrapper{margin-bottom:-16px}app-beheer-translate .cat-row{font-weight:700;border-bottom:1px solid #000;padding-top:20px}app-beheer-translate .save-button{width:100%}app-beheer-translate .displayflex{display:flex}app-beheer-translate .flexauto{flex:auto}app-beheer-translate .max-height{height:calc(100vH - 174px);overflow:auto}app-beheer-translate .fullwidth{width:100%}app-beheer-translate .main{margin:20px;max-height:calc(100vH - 235px);overflow:auto}app-beheer-translate .main-bar{margin:20px}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.AngularEditorComponent, selector: "angular-editor", inputs: ["id", "config", "placeholder", "tabIndex"], outputs: ["html", "viewMode", "blur", "focus"] }, { kind: "component", type: i6.MatLegacyFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLegacyLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatLegacyInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", exportAs: ["matInput"] }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i9.MatLegacyButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i10.MatLegacyCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "directive", type: i10.MatLegacyCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { kind: "component", type: i11.MatLegacyPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: i12.MatLegacyCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i13.MatLegacySelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i14.MatLegacyOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i15.BeheerNavComponent, selector: "app-beheer-nav" }, { kind: "component", type: i16.FabLoaderComponent, selector: "app-fab-loader" }, { kind: "component", type: i17.FabFlagComponent, selector: "fab-flag", inputs: ["country"] }], encapsulation: i0.ViewEncapsulation.None });
286
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.1", type: BeheerTranslateComponent, selector: "app-beheer-translate", viewQueries: [{ propertyName: "tablediv", first: true, predicate: ["tablediv"], descendants: true }], ngImport: i0, template: "<app-beheer-nav></app-beheer-nav>\r\n\r\n<app-fab-loader *ngIf=\"Loading\"></app-fab-loader>\r\n\r\n<div *ngIf=\"!Loading\">\r\n <div class=\"displayflex\" #tablediv (window:resize)=\"onResize($event)\">\r\n <div>\r\n <mat-card class=\"main-bar\">\r\n <mat-card-content>\r\n <mat-form-field appearance=\"fill\">\r\n <mat-label>Group</mat-label>\r\n <mat-select [(ngModel)]=\"SelectedBeheerLanguagesCategoryViewModel\" (selectionChange)=\"this.pageIndex = 0; RefreshPaginator(); Resize();\">\r\n <mat-option *ngFor=\"let cat of BeheerLanguagesViewModel.categories\" [value]=\"cat\">\r\n {{ TranslationCategory[cat.translationCategory] }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <div *ngIf=\"!IsHTML()\">\r\n <div *ngFor=\"let language of BeheerLanguagesViewModel.languages\">\r\n <mat-checkbox [(ngModel)]=\"language.selected\">\r\n <fab-flag [country]=\"language.flag\"></fab-flag> {{ language.name }}\r\n </mat-checkbox>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"IsHTML()\">\r\n <mat-form-field appearance=\"fill\">\r\n <mat-label>Language</mat-label>\r\n <mat-select [(ngModel)]=\"SelectedBeheerLanguageViewModel\" >\r\n <mat-option *ngFor=\"let language of BeheerLanguagesViewModel.languages\" [value]=\"language\">\r\n <fab-flag [country]=\"language.flag\"></fab-flag> {{ language.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <br /><br />\r\n <button mat-raised-button (click)=\"Save()\" class=\"save-button\" [disabled]=\"!OpenChanges\">\r\n Save\r\n </button>\r\n </mat-card-content>\r\n </mat-card>\r\n </div>\r\n <mat-card class=\"main-bar flexauto\">\r\n <mat-card-content>\r\n <div class=\"max-height\">\r\n\r\n <div *ngIf=\"SelectedBeheerLanguagesCategoryViewModel != null\">\r\n <h1>{{ TranslationCategory[SelectedBeheerLanguagesCategoryViewModel.translationCategory] }}</h1>\r\n\r\n <table class=\"full-width\">\r\n <tr>\r\n <ng-container *ngIf=\"IsHTML()\">\r\n <td class=\"cat-row\">\r\n <fab-flag [country]=\"SelectedBeheerLanguageViewModel.flag\"></fab-flag> {{ SelectedBeheerLanguageViewModel.name }}\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!IsHTML()\">\r\n <td colspan=\"2\" class=\"cat-row\"></td>\r\n <ng-container *ngFor=\"let language of BeheerLanguagesViewModel.languages\">\r\n <td class=\"cat-row\" *ngIf=\"language.selected\">\r\n <fab-flag [country]=\"language.flag\"></fab-flag> {{ language.name }}\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n </tr>\r\n\r\n <ng-container *ngIf=\"IsHTML()\">\r\n <ng-container *ngFor=\"let subcat of ActiveSubs\">\r\n <ng-container *ngFor=\"let key of subcat.keys\">\r\n <tr>\r\n <ng-container *ngFor=\"let language of BeheerLanguagesViewModel.languages; index as i\">\r\n <td *ngIf=\"language == SelectedBeheerLanguageViewModel\">\r\n <div>\r\n <angular-editor [config]=\"editorConfig\" [(ngModel)]=\"GetEntry(key.entries, language).value\" (ngModelChange)=\"UpdateChanged(GetEntry(key.entries, language))\">\r\n </angular-editor>\r\n </div>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!IsHTML()\">\r\n <ng-container *ngFor=\"let subcat of ActiveSubs\">\r\n <tr *ngFor=\"let key of subcat.keys\">\r\n <td>\r\n {{ TranslationSubCategory[subcat.translationSubCategory] }}\r\n <ng-container *ngIf=\"key.text != ''\">\r\n ({{ key.text }})\r\n </ng-container>\r\n </td>\r\n <td></td>\r\n <ng-container *ngFor=\"let language of BeheerLanguagesViewModel.languages; index as i\">\r\n <td *ngIf=\"language.selected\">\r\n <mat-form-field appearance=\"fill\" class=\"fullwidth\" *ngIf=\"GetEntry(key.entries, language) != null\">\r\n <mat-label>\r\n {{ TranslationSubCategory[subcat.translationSubCategory] }}\r\n </mat-label>\r\n <input matInput type=\"text\" [(ngModel)]=\"GetEntry(key.entries, language).value\" (keyup)=\"UpdateChanged(GetEntry(key.entries, language))\">\r\n </mat-form-field>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n\r\n <!--<ng-container *ngFor=\"let filter of subcat.filters\">\r\n <tr>\r\n <td>\r\n {{ filter.filter.text }}\r\n </td>\r\n <td></td>\r\n <ng-container *ngFor=\"let language of BeheerLanguagesViewModel.languages\">\r\n <td *ngIf=\"language.selected\">\r\n <mat-form-field appearance=\"fill\" class=\"fullwidth\">\r\n <mat-label>\r\n {{ TranslationSubCategory[subcat.translationSubCategory] }}\r\n </mat-label>\r\n <input matInput type=\"text\" [(ngModel)]=\"GetEntry(filter.filter.entries, language).value\" (keyup)=\"UpdateChanged(GetEntry(filter.filter.entries, language))\">\r\n </mat-form-field>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n <ng-container *ngFor=\"let option of filter.options\">\r\n <tr>\r\n <td>\r\n <ul>\r\n <li>{{ option.text }}</li>\r\n </ul>\r\n </td>\r\n <td></td>\r\n <ng-container *ngFor=\"let language of BeheerLanguagesViewModel.languages\">\r\n <td *ngIf=\"language.selected\">\r\n <mat-form-field appearance=\"fill\" class=\"fullwidth\">\r\n <mat-label>\r\n {{ TranslationSubCategory[subcat.translationSubCategory] }}\r\n </mat-label>\r\n <input matInput type=\"text\" [(ngModel)]=\"GetEntry(option.entries, language).value\" (keyup)=\"UpdateChanged(GetEntry(option.entries, language))\">\r\n </mat-form-field>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n </ng-container>-->\r\n </ng-container>\r\n </ng-container>\r\n </table>\r\n </div>\r\n </div>\r\n <div>\r\n <mat-paginator #paginator\r\n (page)=\"handlePageEvent($event)\"\r\n [length]=\"amountLength\"\r\n [pageSize]=\"amountPerPage\"\r\n [showFirstLastButtons]=\"true\"\r\n [hidePageSize]=\"true\"\r\n [pageIndex]=\"pageIndex\"\r\n aria-label=\"Select page\">\r\n </mat-paginator>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n </div>\r\n</div>\r\n", styles: [".mat-checkbox-checked.mat-accent .mat-checkbox-background{background-color:#aaa!important}snack-bar-container .mat-button-wrapper{color:#aaa}app-beheer-translate .mat-form-field-wrapper{margin-bottom:-16px}app-beheer-translate .cat-row{font-weight:700;border-bottom:1px solid #000;padding-top:20px}app-beheer-translate .save-button{width:100%}app-beheer-translate .displayflex{display:flex}app-beheer-translate .flexauto{flex:auto}app-beheer-translate .max-height{height:calc(100vH - 174px);overflow:auto}app-beheer-translate .fullwidth{width:100%}app-beheer-translate .main{margin:20px;max-height:calc(100vH - 235px);overflow:auto}app-beheer-translate .main-bar{margin:20px}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.AngularEditorComponent, selector: "angular-editor", inputs: ["id", "config", "placeholder", "tabIndex"], outputs: ["html", "viewMode", "blur", "focus"] }, { kind: "component", type: i6.MatLegacyFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLegacyLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatLegacyInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", exportAs: ["matInput"] }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i9.MatLegacyButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i10.MatLegacyCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "directive", type: i10.MatLegacyCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { kind: "component", type: i11.MatLegacyPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: i12.MatLegacyCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i13.MatLegacySelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i14.MatLegacyOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i15.BeheerNavComponent, selector: "app-beheer-nav" }, { kind: "component", type: i16.FabLoaderComponent, selector: "app-fab-loader" }, { kind: "component", type: i17.FabFlagComponent, selector: "fab-flag", inputs: ["country"] }], encapsulation: i0.ViewEncapsulation.None });
283
287
  }
284
288
  export { BeheerTranslateComponent };
285
289
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: BeheerTranslateComponent, decorators: [{
286
290
  type: Component,
287
- args: [{ selector: 'app-beheer-translate', encapsulation: ViewEncapsulation.None, template: "<app-beheer-nav></app-beheer-nav>\r\n\r\n<app-fab-loader *ngIf=\"Loading\"></app-fab-loader>\r\n\r\n<div *ngIf=\"!Loading\">\r\n <div class=\"displayflex\" #tablediv (window:resize)=\"onResize($event)\">\r\n <div>\r\n <mat-card class=\"main-bar\">\r\n <mat-card-content>\r\n <mat-form-field appearance=\"fill\">\r\n <mat-label>Group</mat-label>\r\n <mat-select [(ngModel)]=\"SelectedBeheerLanguagesCategoryViewModel\" (selectionChange)=\"this.pageIndex = 0; RefreshPaginator(); Resize();\">\r\n <mat-option *ngFor=\"let cat of BeheerLanguagesViewModel.categories\" [value]=\"cat\">\r\n {{ TranslationCategory[cat.translationCategory] }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <!--<button mat-raised-button (click)=\"Export()\">\r\n Export\r\n </button>\r\n <button mat-raised-button (click)=\"Import()\">\r\n Import\r\n </button>-->\r\n <div *ngFor=\"let language of BeheerLanguagesViewModel.languages\">\r\n <mat-checkbox [(ngModel)]=\"language.selected\">\r\n <fab-flag [country]=\"language.flag\"></fab-flag> {{ language.name }}\r\n </mat-checkbox>\r\n </div>\r\n\r\n <br /><br />\r\n <button mat-raised-button (click)=\"Save()\" class=\"save-button\" [disabled]=\"!OpenChanges\">\r\n Save\r\n </button>\r\n </mat-card-content>\r\n </mat-card>\r\n </div>\r\n <mat-card class=\"main-bar flexauto\">\r\n <mat-card-content>\r\n <div class=\"max-height\">\r\n\r\n <div *ngIf=\"SelectedBeheerLanguagesCategoryViewModel != null\">\r\n <h1>{{ TranslationCategory[SelectedBeheerLanguagesCategoryViewModel.translationCategory] }}</h1>\r\n\r\n <table class=\"full-width\">\r\n <tr>\r\n <td *ngIf=\"!IsHTML()\" colspan=\"2\" class=\"cat-row\"></td>\r\n <ng-container *ngFor=\"let language of BeheerLanguagesViewModel.languages\">\r\n <td class=\"cat-row\" *ngIf=\"language.selected\">\r\n <fab-flag [country]=\"language.flag\"></fab-flag> {{ language.name }}\r\n </td>\r\n </ng-container>\r\n </tr>\r\n\r\n <ng-container *ngIf=\"IsHTML()\">\r\n <ng-container *ngFor=\"let subcat of ActiveSubs\">\r\n <ng-container *ngFor=\"let key of subcat.keys\">\r\n <tr>\r\n <td [attr.colspan]=\"GetLanguageCount()\">\r\n {{ TranslationSubCategory[subcat.translationSubCategory] }}\r\n <ng-container *ngIf=\"key.text != ''\">\r\n ({{ key.text }})\r\n </ng-container>\r\n </td>\r\n </tr>\r\n <tr>\r\n <ng-container *ngFor=\"let language of BeheerLanguagesViewModel.languages; index as i\">\r\n <td *ngIf=\"language.selected\" [style.width]=\"'50%'\">\r\n <div>\r\n <angular-editor [config]=\"editorConfig\" [(ngModel)]=\"GetEntry(key.entries, language).value\" (ngModelChange)=\"UpdateChanged(GetEntry(key.entries, language))\">\r\n </angular-editor>\r\n </div>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!IsHTML()\">\r\n <ng-container *ngFor=\"let subcat of ActiveSubs\">\r\n <tr *ngFor=\"let key of subcat.keys\">\r\n <td>\r\n {{ TranslationSubCategory[subcat.translationSubCategory] }}\r\n <ng-container *ngIf=\"key.text != ''\">\r\n ({{ key.text }})\r\n </ng-container>\r\n </td>\r\n <td></td>\r\n <ng-container *ngFor=\"let language of BeheerLanguagesViewModel.languages; index as i\">\r\n <td *ngIf=\"language.selected\">\r\n <mat-form-field appearance=\"fill\" class=\"fullwidth\" *ngIf=\"GetEntry(key.entries, language) != null\">\r\n <mat-label>\r\n {{ TranslationSubCategory[subcat.translationSubCategory] }}\r\n </mat-label>\r\n <input matInput type=\"text\" [(ngModel)]=\"GetEntry(key.entries, language).value\" (keyup)=\"UpdateChanged(GetEntry(key.entries, language))\">\r\n </mat-form-field>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n\r\n <!--<ng-container *ngFor=\"let filter of subcat.filters\">\r\n <tr>\r\n <td>\r\n {{ filter.filter.text }}\r\n </td>\r\n <td></td>\r\n <ng-container *ngFor=\"let language of BeheerLanguagesViewModel.languages\">\r\n <td *ngIf=\"language.selected\">\r\n <mat-form-field appearance=\"fill\" class=\"fullwidth\">\r\n <mat-label>\r\n {{ TranslationSubCategory[subcat.translationSubCategory] }}\r\n </mat-label>\r\n <input matInput type=\"text\" [(ngModel)]=\"GetEntry(filter.filter.entries, language).value\" (keyup)=\"UpdateChanged(GetEntry(filter.filter.entries, language))\">\r\n </mat-form-field>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n <ng-container *ngFor=\"let option of filter.options\">\r\n <tr>\r\n <td>\r\n <ul>\r\n <li>{{ option.text }}</li>\r\n </ul>\r\n </td>\r\n <td></td>\r\n <ng-container *ngFor=\"let language of BeheerLanguagesViewModel.languages\">\r\n <td *ngIf=\"language.selected\">\r\n <mat-form-field appearance=\"fill\" class=\"fullwidth\">\r\n <mat-label>\r\n {{ TranslationSubCategory[subcat.translationSubCategory] }}\r\n </mat-label>\r\n <input matInput type=\"text\" [(ngModel)]=\"GetEntry(option.entries, language).value\" (keyup)=\"UpdateChanged(GetEntry(option.entries, language))\">\r\n </mat-form-field>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n </ng-container>-->\r\n </ng-container>\r\n </ng-container>\r\n </table>\r\n </div>\r\n </div>\r\n <div>\r\n <mat-paginator #paginator\r\n (page)=\"handlePageEvent($event)\"\r\n [length]=\"amountLength\"\r\n [pageSize]=\"amountPerPage\"\r\n [showFirstLastButtons]=\"true\"\r\n [hidePageSize]=\"true\"\r\n [pageIndex]=\"pageIndex\"\r\n aria-label=\"Select page\">\r\n </mat-paginator>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n </div>\r\n</div>\r\n", styles: [".mat-checkbox-checked.mat-accent .mat-checkbox-background{background-color:#aaa!important}snack-bar-container .mat-button-wrapper{color:#aaa}app-beheer-translate .mat-form-field-wrapper{margin-bottom:-16px}app-beheer-translate .cat-row{font-weight:700;border-bottom:1px solid #000;padding-top:20px}app-beheer-translate .save-button{width:100%}app-beheer-translate .displayflex{display:flex}app-beheer-translate .flexauto{flex:auto}app-beheer-translate .max-height{height:calc(100vH - 174px);overflow:auto}app-beheer-translate .fullwidth{width:100%}app-beheer-translate .main{margin:20px;max-height:calc(100vH - 235px);overflow:auto}app-beheer-translate .main-bar{margin:20px}\n"] }]
291
+ args: [{ selector: 'app-beheer-translate', encapsulation: ViewEncapsulation.None, template: "<app-beheer-nav></app-beheer-nav>\r\n\r\n<app-fab-loader *ngIf=\"Loading\"></app-fab-loader>\r\n\r\n<div *ngIf=\"!Loading\">\r\n <div class=\"displayflex\" #tablediv (window:resize)=\"onResize($event)\">\r\n <div>\r\n <mat-card class=\"main-bar\">\r\n <mat-card-content>\r\n <mat-form-field appearance=\"fill\">\r\n <mat-label>Group</mat-label>\r\n <mat-select [(ngModel)]=\"SelectedBeheerLanguagesCategoryViewModel\" (selectionChange)=\"this.pageIndex = 0; RefreshPaginator(); Resize();\">\r\n <mat-option *ngFor=\"let cat of BeheerLanguagesViewModel.categories\" [value]=\"cat\">\r\n {{ TranslationCategory[cat.translationCategory] }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <div *ngIf=\"!IsHTML()\">\r\n <div *ngFor=\"let language of BeheerLanguagesViewModel.languages\">\r\n <mat-checkbox [(ngModel)]=\"language.selected\">\r\n <fab-flag [country]=\"language.flag\"></fab-flag> {{ language.name }}\r\n </mat-checkbox>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"IsHTML()\">\r\n <mat-form-field appearance=\"fill\">\r\n <mat-label>Language</mat-label>\r\n <mat-select [(ngModel)]=\"SelectedBeheerLanguageViewModel\" >\r\n <mat-option *ngFor=\"let language of BeheerLanguagesViewModel.languages\" [value]=\"language\">\r\n <fab-flag [country]=\"language.flag\"></fab-flag> {{ language.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <br /><br />\r\n <button mat-raised-button (click)=\"Save()\" class=\"save-button\" [disabled]=\"!OpenChanges\">\r\n Save\r\n </button>\r\n </mat-card-content>\r\n </mat-card>\r\n </div>\r\n <mat-card class=\"main-bar flexauto\">\r\n <mat-card-content>\r\n <div class=\"max-height\">\r\n\r\n <div *ngIf=\"SelectedBeheerLanguagesCategoryViewModel != null\">\r\n <h1>{{ TranslationCategory[SelectedBeheerLanguagesCategoryViewModel.translationCategory] }}</h1>\r\n\r\n <table class=\"full-width\">\r\n <tr>\r\n <ng-container *ngIf=\"IsHTML()\">\r\n <td class=\"cat-row\">\r\n <fab-flag [country]=\"SelectedBeheerLanguageViewModel.flag\"></fab-flag> {{ SelectedBeheerLanguageViewModel.name }}\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!IsHTML()\">\r\n <td colspan=\"2\" class=\"cat-row\"></td>\r\n <ng-container *ngFor=\"let language of BeheerLanguagesViewModel.languages\">\r\n <td class=\"cat-row\" *ngIf=\"language.selected\">\r\n <fab-flag [country]=\"language.flag\"></fab-flag> {{ language.name }}\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n </tr>\r\n\r\n <ng-container *ngIf=\"IsHTML()\">\r\n <ng-container *ngFor=\"let subcat of ActiveSubs\">\r\n <ng-container *ngFor=\"let key of subcat.keys\">\r\n <tr>\r\n <ng-container *ngFor=\"let language of BeheerLanguagesViewModel.languages; index as i\">\r\n <td *ngIf=\"language == SelectedBeheerLanguageViewModel\">\r\n <div>\r\n <angular-editor [config]=\"editorConfig\" [(ngModel)]=\"GetEntry(key.entries, language).value\" (ngModelChange)=\"UpdateChanged(GetEntry(key.entries, language))\">\r\n </angular-editor>\r\n </div>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!IsHTML()\">\r\n <ng-container *ngFor=\"let subcat of ActiveSubs\">\r\n <tr *ngFor=\"let key of subcat.keys\">\r\n <td>\r\n {{ TranslationSubCategory[subcat.translationSubCategory] }}\r\n <ng-container *ngIf=\"key.text != ''\">\r\n ({{ key.text }})\r\n </ng-container>\r\n </td>\r\n <td></td>\r\n <ng-container *ngFor=\"let language of BeheerLanguagesViewModel.languages; index as i\">\r\n <td *ngIf=\"language.selected\">\r\n <mat-form-field appearance=\"fill\" class=\"fullwidth\" *ngIf=\"GetEntry(key.entries, language) != null\">\r\n <mat-label>\r\n {{ TranslationSubCategory[subcat.translationSubCategory] }}\r\n </mat-label>\r\n <input matInput type=\"text\" [(ngModel)]=\"GetEntry(key.entries, language).value\" (keyup)=\"UpdateChanged(GetEntry(key.entries, language))\">\r\n </mat-form-field>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n\r\n <!--<ng-container *ngFor=\"let filter of subcat.filters\">\r\n <tr>\r\n <td>\r\n {{ filter.filter.text }}\r\n </td>\r\n <td></td>\r\n <ng-container *ngFor=\"let language of BeheerLanguagesViewModel.languages\">\r\n <td *ngIf=\"language.selected\">\r\n <mat-form-field appearance=\"fill\" class=\"fullwidth\">\r\n <mat-label>\r\n {{ TranslationSubCategory[subcat.translationSubCategory] }}\r\n </mat-label>\r\n <input matInput type=\"text\" [(ngModel)]=\"GetEntry(filter.filter.entries, language).value\" (keyup)=\"UpdateChanged(GetEntry(filter.filter.entries, language))\">\r\n </mat-form-field>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n <ng-container *ngFor=\"let option of filter.options\">\r\n <tr>\r\n <td>\r\n <ul>\r\n <li>{{ option.text }}</li>\r\n </ul>\r\n </td>\r\n <td></td>\r\n <ng-container *ngFor=\"let language of BeheerLanguagesViewModel.languages\">\r\n <td *ngIf=\"language.selected\">\r\n <mat-form-field appearance=\"fill\" class=\"fullwidth\">\r\n <mat-label>\r\n {{ TranslationSubCategory[subcat.translationSubCategory] }}\r\n </mat-label>\r\n <input matInput type=\"text\" [(ngModel)]=\"GetEntry(option.entries, language).value\" (keyup)=\"UpdateChanged(GetEntry(option.entries, language))\">\r\n </mat-form-field>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n </ng-container>-->\r\n </ng-container>\r\n </ng-container>\r\n </table>\r\n </div>\r\n </div>\r\n <div>\r\n <mat-paginator #paginator\r\n (page)=\"handlePageEvent($event)\"\r\n [length]=\"amountLength\"\r\n [pageSize]=\"amountPerPage\"\r\n [showFirstLastButtons]=\"true\"\r\n [hidePageSize]=\"true\"\r\n [pageIndex]=\"pageIndex\"\r\n aria-label=\"Select page\">\r\n </mat-paginator>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n </div>\r\n</div>\r\n", styles: [".mat-checkbox-checked.mat-accent .mat-checkbox-background{background-color:#aaa!important}snack-bar-container .mat-button-wrapper{color:#aaa}app-beheer-translate .mat-form-field-wrapper{margin-bottom:-16px}app-beheer-translate .cat-row{font-weight:700;border-bottom:1px solid #000;padding-top:20px}app-beheer-translate .save-button{width:100%}app-beheer-translate .displayflex{display:flex}app-beheer-translate .flexauto{flex:auto}app-beheer-translate .max-height{height:calc(100vH - 174px);overflow:auto}app-beheer-translate .fullwidth{width:100%}app-beheer-translate .main{margin:20px;max-height:calc(100vH - 235px);overflow:auto}app-beheer-translate .main-bar{margin:20px}\n"] }]
288
292
  }], ctorParameters: function () { return [{ type: i1.TranslateApiClient }, { type: i2.AuthenticationService }, { type: i3.MatLegacySnackBar }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { tablediv: [{
289
293
  type: ViewChild,
290
294
  args: ['tablediv']
291
295
  }] } });
292
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVoZWVyLXRyYW5zbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvZmFicmlrYW50ZW5jb3JlL2JlaGVlci9jb21wb25lbnRzL2JlaGVlci10cmFuc2xhdGUvYmVoZWVyLXRyYW5zbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvZmFicmlrYW50ZW5jb3JlL2JlaGVlci9jb21wb25lbnRzL2JlaGVlci10cmFuc2xhdGUvYmVoZWVyLXRyYW5zbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBeUQsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTWxKLE9BQU8sRUFBZ0csbUNBQW1DLEVBQXFELG1CQUFtQixFQUF3QixrQkFBa0IsRUFBRSxpQkFBaUIsRUFBcUQsbUJBQW1CLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUV4WixNQU1hLHdCQUF3QjtJQStDekI7SUFDQTtJQUNBO0lBQ0E7SUFoREgsSUFBSSxHQUFXLE1BQU0sQ0FBQztJQUV0QixPQUFPLEdBQVksSUFBSSxDQUFDO0lBQ3hCLFdBQVcsR0FBWSxLQUFLLENBQUM7SUFDN0Isd0JBQXdCLENBQTJCO0lBQ25ELFVBQVUsR0FBK0MsSUFBSSxLQUFLLEVBQXVDLENBQUM7SUFFMUcsU0FBUyxHQUFXLENBQUMsQ0FBQztJQUN0QixZQUFZLEdBQVcsQ0FBQyxDQUFDO0lBQ3pCLGFBQWEsR0FBVyxFQUFFLENBQUM7SUFFbEMsSUFBVyxtQkFBbUI7UUFDNUIsT0FBTyxtQkFBbUIsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBVyxzQkFBc0I7UUFDL0IsT0FBTyxzQkFBc0IsQ0FBQztJQUNoQyxD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QUFJLElBQUksRUFBRTtnQkFDbkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ3ZDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7d0JBQ2pCLE9BQU8sSUFBSSxDQUFDO2lCQUNmO2FBQ0Y7U0FDRjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVNLGdCQUFnQjtRQUNyQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLElBQUksQ0FBQyx3QkFBd0IsSUFBSSxJQUFJLEVBQUU7WUFDekMsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsQ0FBQztZQUV4RCxJQUFJLFNBQVMsSUFBSSxJQUFJLEVBQUU7Z0JBQ3JCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUN6QyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRO3dCQUN2QixLQUFLLEVBQUUsQ0FBQztpQkFDWDthQUNGO1NBQ0Y7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7dUdBdlVVLHdCQUF3QjsyRkFBeEIsd0JBQXdCLGtLQ2RyQyw4dlBBNkpBOztTRC9JYSx3QkFBd0I7MkZBQXhCLHdCQUF3QjtrQkFOcEMsU0FBUzsrQkFDRSxzQkFBc0IsaUJBR2pCLGlCQUFpQixDQUFDLElBQUk7Nk1BeUJkLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIERvQ2hlY2ssIEVsZW1lbnRSZWYsIE9uQ2hhbmdlcywgT25Jbml0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExlZ2FjeVBhZ2VFdmVudCBhcyBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWF0TGVnYWN5U25hY2tCYXIgYXMgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktc25hY2stYmFyJztcclxuaW1wb3J0IHsgQW5ndWxhckVkaXRvckNvbmZpZyB9IGZyb20gJ0Brb2xrb3YvYW5ndWxhci1lZGl0b3InO1xyXG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmVoZWVyTGFuZ3VhZ2VzQ2F0ZWdvcnlWaWV3TW9kZWwsIEJlaGVlckxhbmd1YWdlc0VudHJ5Vmlld01vZGVsLCBCZWhlZXJMYW5ndWFnZXNLZXlWaWV3TW9kZWwsIEJlaGVlckxhbmd1YWdlc1N1YkNhdGVnb3J5Vmlld01vZGVsLCBCZWhlZXJMYW5ndWFnZXNWaWV3TW9kZWwsIEJlaGVlckxhbmd1YWdlVmlld01vZGVsLCBDcmVhdGVFeHBvcnRSZXF1ZXN0LCBDcmVhdGVFeHBvcnRSZXNwb25zZSwgTG9naW5SZXNwb25zZU1vZGVsLCBSZWFkRXhwb3J0UmVxdWVzdCwgVHJhbnNsYXRlQXBpQ2xpZW50LCBUcmFuc2xhdGVLZXlDYXRlZ29yeVZpZXdNb2RlbCwgVHJhbnNsYXRpb25DYXRlZ29yeSwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeSB9IGZyb20gJy4uLy4uLy4uL3N3YWdnZXIvU3dhZ2dlckNsaWVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1iZWhlZXItdHJhbnNsYXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYmVoZWVyLXRyYW5zbGF0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYmVoZWVyLXRyYW5zbGF0ZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIEJlaGVlclRyYW5zbGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgRG9DaGVjayB7XHJcblxyXG4gIHB1YmxpYyBIVE1MOiBzdHJpbmcgPSBcInRlc3RcIjtcclxuXHJcbiAgcHVibGljIExvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHB1YmxpYyBPcGVuQ2hhbmdlczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBCZWhlZXJMYW5ndWFnZXNWaWV3TW9kZWw6IEJlaGVlckxhbmd1YWdlc1ZpZXdNb2RlbDtcclxuICBwdWJsaWMgQWN0aXZlU3ViczogQXJyYXk8QmVoZWVyTGFuZ3VhZ2VzU3ViQ2F0ZWdvcnlWaWV3TW9kZWw+ID0gbmV3IEFycmF5PEJlaGVlckxhbmd1YWdlc1N1YkNhdGVnb3J5Vmlld01vZGVsPigpO1xyXG5cclxuICBwdWJsaWMgcGFnZUluZGV4OiBudW1iZXIgPSAwO1xyXG4gIHB1YmxpYyBhbW91bnRMZW5ndGg6IG51bWJlciA9IDA7XHJcbiAgcHVibGljIGFtb3VudFBlclBhZ2U6IG51bWJlciA9IDEwO1xyXG5cclxuICBwdWJsaWMgZ2V0IFRyYW5zbGF0aW9uQ2F0ZWdvcnkoKSB7XHJcbiAgICByZXR1cm4gVHJhbnNsYXRpb25DYXRlZ29yeTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgVHJhbnNsYXRpb25TdWJDYXRlZ29yeSgpIHtcclxuICAgIHJldHVybiBUcmFuc2xhdGlvblN1YkNhdGVnb3J5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNlbGVjdGVkQmVoZWVyTGFuZ3VhZ2VzQ2F0ZWdvcnlWaWV3TW9kZWw6IEJlaGVlckxhbmd1YWdlc0NhdGVnb3J5Vmlld01vZGVsIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlZGl2JykgdGFibGVkaXY6IEVsZW1lbnRSZWY7XHJcblxyXG4gIGVkaXRvckNvbmZpZzogQW5ndWxhckVkaXRvckNvbmZpZyA9IHtcclxuICAgIGVkaXRhYmxlOiB0cnVlLFxyXG4gICAgc3BlbGxjaGVjazogZmFsc2UsXHJcbiAgICBoZWlnaHQ6ICdhdXRvJyxcclxuICAgIG1pbkhlaWdodDogJzAnLFxyXG4gICAgbWF4SGVpZ2h0OiAnYXV0bycsXHJcbiAgICB3aWR0aDogJ2F1dG8nLFxyXG4gICAgbWluV2lkdGg6ICcwJyxcclxuICAgIHRyYW5zbGF0ZTogJ25vJyxcclxuICAgIGVuYWJsZVRvb2xiYXI6IHRydWUsXHJcbiAgICBzaG93VG9vbGJhcjogdHJ1ZSxcclxuICAgIGRlZmF1bHRQYXJhZ3JhcGhTZXBhcmF0b3I6ICcnLFxyXG4gICAgZGVmYXVsdEZvbnROYW1lOiAnJyxcclxuICAgIGRlZmF1bHRGb250U2l6ZTogJycsXHJcbiAgICBzYW5pdGl6ZTogdHJ1ZSxcclxuICAgIHRvb2xiYXJQb3NpdGlvbjogJ3RvcCcsXHJcbiAgICB0b29sYmFySGlkZGVuQnV0dG9uczogW1xyXG4gICAgICBbJ2ZvbnROYW1lJ11cclxuICAgIF1cclxuICB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgVHJhbnNsYXRlQXBpQ2xpZW50OiBUcmFuc2xhdGVBcGlDbGllbnQsXHJcbiAgICBwcml2YXRlIGF1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogTWF0U25hY2tCYXIsXHJcbiAgICBwcml2YXRlIENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikgeyB9XHJcblxyXG4gIG5nRG9DaGVjaygpOiB2b2lkIHtcclxuICAgIHRoaXMuUmVzaXplKCk7XHJcbiAgfVxyXG5cclxuICBvblJlc2l6ZShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLlJlc2l6ZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLkxvYWRUcmFuc2xhdGlvbnModGhpcy5DaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVQYWdlRXZlbnQoZTogUGFnZUV2ZW50KSB7XHJcbiAgICAvL3RoaXMucGFnZUV2ZW50ID0gZTtcclxuICAgIC8vdGhpcy5sZW5ndGggPSBlLmxlbmd0aDtcclxuICAgIC8vdGhpcy5wYWdlU2l6ZSA9IGUucGFnZVNpemU7XHJcbiAgICB0aGlzLnBhZ2VJbmRleCA9IGUucGFnZUluZGV4O1xyXG5cclxuICAgIHRoaXMuUmVmcmVzaFBhZ2luYXRvcigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFJlZnJlc2hQYWdpbmF0b3IoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFtb3VudExlbmd0aCA9IDA7XHJcbiAgICB0aGlzLkFjdGl2ZVN1YnMgPSBuZXcgQXJyYXk8QmVoZWVyTGFuZ3VhZ2VzU3ViQ2F0ZWdvcnlWaWV3TW9kZWw+KCk7XHJcblxyXG4gICAgdmFyIHN0YXJ0SW5kZXggPSB0aGlzLnBhZ2VJbmRleCAqIHRoaXMuYW1vdW50UGVyUGFnZTtcclxuICAgIHZhciBlbmRJbmRleCA9ICh0aGlzLnBhZ2VJbmRleCArIDEpICogdGhpcy5hbW91bnRQZXJQYWdlO1xyXG4gICAgdmFyIGl0ZW1zYWRkZWQgPSAwO1xyXG5cclxuICAgIGlmICh0aGlzLlNlbGVjdGVkQmVoZWVyTGFuZ3VhZ2VzQ2F0ZWdvcnlWaWV3TW9kZWwgIT0gbnVsbCkge1xyXG5cclxuICAgICAgdmFyIHN1YmNhdHMgPSB0aGlzLlNlbGVjdGVkQmVoZWVyTGFuZ3VhZ2VzQ2F0ZWdvcnlWaWV3TW9kZWwuc3ViQ2F0ZWdvcmllcztcclxuXHJcbiAgICAgIGlmIChzdWJjYXRzICE9IG51bGwpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN1YmNhdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIHZhciBrZXlzID0gc3ViY2F0c1tpXS5rZXlzO1xyXG5cclxuICAgICAgICAgIGlmIChrZXlzICE9IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBzdWJjYXQ6IEJlaGVlckxhbmd1YWdlc1N1YkNhdGVnb3J5Vmlld01vZGVsIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGtleXMubGVuZ3RoOyBqKyspIHtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuYW1vdW50TGVuZ3RoID49IHN0YXJ0SW5kZXggJiYgdGhpcy5hbW91bnRMZW5ndGggPCBlbmRJbmRleCAmJiBpdGVtc2FkZGVkIDwgdGhpcy5hbW91bnRQZXJQYWdlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3ViY2F0ID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgc3ViY2F0ID0gbmV3IEJlaGVlckxhbmd1YWdlc1N1YkNhdGVnb3J5Vmlld01vZGVsKCk7XHJcbiAgICAgICAgICAgICAgICAgIHN1YmNhdC50cmFuc2xhdGlvblN1YkNhdGVnb3J5ID0gc3ViY2F0c1tpXS50cmFuc2xhdGlvblN1YkNhdGVnb3J5O1xyXG4gICAgICAgICAgICAgICAgICBzdWJjYXQuaHRtbCA9IHN1YmNhdHNbaV0uaHRtbDtcclxuICAgICAgICAgICAgICAgICAgc3ViY2F0LmtleXMgPSBuZXcgQXJyYXk8QmVoZWVyTGFuZ3VhZ2VzS2V5Vmlld01vZGVsPigpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgdGhpcy5BY3RpdmVTdWJzLnB1c2goc3ViY2F0KTtcclxuICAgICAgICAgICAgICAgICAgaXRlbXNhZGRlZCsrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzdWJjYXQ/LmtleXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICBzdWJjYXQua2V5cy5wdXNoKGtleXNbal0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5hbW91bnRMZW5ndGgrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vdmFyIGZpbHRlcnMgPSBzdWJjYXRzW2ldLmZpbHRlcnM7XHJcblxyXG4gICAgICAgICAgLy9pZiAoZmlsdGVycyAhPSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgLy8gIHZhciBzdWJjYXQ6IEJlaGVlckxhbmd1YWdlc1N1YkNhdGVnb3J5Vmlld01vZGVsIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgLy8gIGZvciAodmFyIGogPSAwOyBqIDwgZmlsdGVycy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgLy8gICAgdmFyIG9wdGlvbnMgPSBmaWx0ZXJzW2pdLm9wdGlvbnM7XHJcbiAgICAgICAgICAvLyAgICB2YXIgZmlsdGVybW9kZWw6IEJlaGVlckxhbmd1YWdlc0ZpbHRlclZpZXdNb2RlbCB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgICAgIC8vICAgIGlmIChvcHRpb25zICE9IG51bGwpIHtcclxuICAgICAgICAgIC8vICAgICAgZm9yICh2YXIgbyA9IDA7IG8gPCBvcHRpb25zLmxlbmd0aDsgbysrKSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgaWYgKHRoaXMuYW1vdW50TGVuZ3RoID49IHN0YXJ0SW5kZXggJiYgdGhpcy5hbW91bnRMZW5ndGggPCBlbmRJbmRleCAmJiBpdGVtc2FkZGVkIDwgdGhpcy5hbW91bnRQZXJQYWdlKSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICBpZiAoc3ViY2F0ID09IG51bGwpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgc3ViY2F0ID0gbmV3IEJlaGVlckxhbmd1YWdlc1N1YkNhdGVnb3J5Vmlld01vZGVsKCk7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgIHN1YmNhdC50cmFuc2xhdGlvblN1YkNhdGVnb3J5ID0gc3ViY2F0c1tpXS50cmFuc2xhdGlvblN1YkNhdGVnb3J5O1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICBzdWJjYXQuaHRtbCA9IHN1YmNhdHNbaV0uaHRtbDtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgc3ViY2F0LmtleXMgPSBuZXcgQXJyYXk8QmVoZWVyTGFuZ3VhZ2VzS2V5Vmlld01vZGVsPigpO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICBzdWJjYXQuZmlsdGVycyA9IG5ldyBBcnJheTxCZWhlZXJMYW5ndWFnZXNGaWx0ZXJWaWV3TW9kZWw+KCk7XHJcblxyXG4gICAgICAgICAgLy8gICAgICAgICAgICB0aGlzLkFjdGl2ZVN1YnMucHVzaChzdWJjYXQpO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vICAgICAgICAgIGlmIChzdWJjYXQ/LmZpbHRlcnMgIT0gbnVsbCAmJiBmaWx0ZXJtb2RlbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgIGZpbHRlcm1vZGVsID0gbmV3IEJlaGVlckxhbmd1YWdlc0ZpbHRlclZpZXdNb2RlbChmaWx0ZXJzW2pdKTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgZmlsdGVybW9kZWwub3B0aW9ucyA9IG5ldyBBcnJheTxCZWhlZXJMYW5ndWFnZXNLZXlWaWV3TW9kZWw+KCk7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgIHN1YmNhdC5maWx0ZXJzLnB1c2goZmlsdGVybW9kZWwpO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICBpdGVtc2FkZGVkKys7XHJcbiAgICAgICAgICAvLyAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gICAgICAgICAgaWYgKGZpbHRlcm1vZGVsPy5vcHRpb25zICE9IG51bGwpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgZmlsdGVybW9kZWwub3B0aW9ucy5wdXNoKG9wdGlvbnNbb10pO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICBpdGVtc2FkZGVkKys7XHJcbiAgICAgICAgICAvLyAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vICAgICAgICB0aGlzLmFtb3VudExlbmd0aCsrO1xyXG4gICAgICAgICAgLy8gICAgICB9XHJcbiAgICAgICAgICAvLyAgICB9XHJcbiAgICAgICAgICAvLyAgfVxyXG4gICAgICAgICAgLy99XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5DaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgUmVzaXplKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudGFibGVkaXY/Lm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldEhlaWdodCAhPSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLklzSFRNTCgpKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYW1vdW50UGVyUGFnZSAhPSAxKSB7XHJcbiAgICAgICAgICB0aGlzLmFtb3VudFBlclBhZ2UgPSAxO1xyXG5cclxuICAgICAgICAgIHRoaXMuZWRpdG9yQ29uZmlnLmhlaWdodCA9IE1hdGguZmxvb3IodGhpcy50YWJsZWRpdj8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0SGVpZ2h0IC0gNDAwKSArIFwicHhcIjtcclxuXHJcbiAgICAgICAgICB0aGlzLlJlZnJlc2hQYWdpbmF0b3IoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdmFyIGl0ZW1jb3VudCA9IE1hdGguZmxvb3IoKHBhcnNlSW50KHRoaXMudGFibGVkaXYubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQpIC0gMjUwKSAvIDU3KTtcclxuXHJcbiAgICAgICAgaWYgKGl0ZW1jb3VudCA+IDApIHtcclxuICAgICAgICAgIGlmICh0aGlzLmFtb3VudFBlclBhZ2UgIT0gaXRlbWNvdW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuYW1vdW50UGVyUGFnZSA9IGl0ZW1jb3VudDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuUmVmcmVzaFBhZ2luYXRvcigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIEdldEVudHJ5KGVudHJpZXM6IEJlaGVlckxhbmd1YWdlc0VudHJ5Vmlld01vZGVsW10sIGxhbmd1YWdlOiBCZWhlZXJMYW5ndWFnZVZpZXdNb2RlbCk6IEJlaGVlckxhbmd1YWdlc0VudHJ5Vmlld01vZGVsIHwgbnVsbCB7XHJcbiAgICBpZiAoZW50cmllcy5lbnRyaWVzICE9IG51bGwpIHtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGVudHJpZXNbaV0ubGFuZ3VhZ2VJZCA9PSBsYW5ndWFnZS5pZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGVudHJpZXNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgTG9hZFRyYW5zbGF0aW9ucyhDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgIHRoaXMuVHJhbnNsYXRlQXBpQ2xpZW50LmdldEJlaGVlckxhbmd1YWdlc1ZpZXdNb2RlbCh0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZS5jdXJyZW50VXNlclZhbHVlKS5zdWJzY3JpYmUoKG1vZGVsOiBCZWhlZXJMYW5ndWFnZXNWaWV3TW9kZWwpID0+IHtcclxuICAgICAgdGhpcy5CZWhlZXJMYW5ndWFnZXNWaWV3TW9kZWwgPSBtb2RlbDtcclxuXHJcbiAgICAgIGlmICh0aGlzLkJlaGVlckxhbmd1YWdlc1ZpZXdNb2RlbC5jYXRlZ29yaWVzICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLlNlbGVjdGVkQmVoZWVyTGFuZ3VhZ2VzQ2F0ZWdvcnlWaWV3TW9kZWwgPSB0aGlzLkJlaGVlckxhbmd1YWdlc1ZpZXdNb2RlbC5jYXRlZ29yaWVzWzBdO1xyXG4gICAgICAgIHRoaXMuUmVmcmVzaFBhZ2luYXRvcigpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0sIChlcnJvcjogUmVzcG9uc2UpID0+IHtcclxuICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PSA0MDApXHJcbiAgICAgICAgYWxlcnQoZXJyb3IuanNvbigpKTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgYWxlcnQoJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG4gICAgICAgIGFsZXJ0KGVycm9yKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNhdmUoKTogdm9pZCB7XHJcbiAgICB0aGlzLkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5DaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgdGhpcy5CZWhlZXJMYW5ndWFnZXNWaWV3TW9kZWwubG9naW5SZXNwb25zZU1vZGVsID0gbmV3IExvZ2luUmVzcG9uc2VNb2RlbCh0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZS5jdXJyZW50VXNlclZhbHVlKTtcclxuXHJcbiAgICB0aGlzLlRyYW5zbGF0ZUFwaUNsaWVudC5zYXZlQmVoZWVyTGFuZ3VhZ2VzVmlld01vZGVsKHRoaXMuQmVoZWVyTGFuZ3VhZ2VzVmlld01vZGVsKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5PcGVuQ2hhbmdlcyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLkNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0sIChlcnJvcjogUmVzcG9uc2UpID0+IHtcclxuICAgICAgYWxlcnQoJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG5cclxuICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgVXBkYXRlQ2hhbmdlZChlbnRyeTogQmVoZWVyTGFuZ3VhZ2VzRW50cnlWaWV3TW9kZWwpOiB2b2lkIHtcclxuICAgIGVudHJ5LmNoYW5nZWQgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuU2hvd1NuYWNrQmFyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2hvd1NuYWNrQmFyKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLk9wZW5DaGFuZ2VzKSB7XHJcbiAgICAgIHRoaXMuT3BlbkNoYW5nZXMgPSB0cnVlO1xyXG5cclxuICAgICAgdmFyIHNuYWNrID0gdGhpcy5zbmFja0Jhci5vcGVuKFwiVW5zYXZlZCBjaGFuZ2VzLi4uXCIsIFwiU2F2ZVwiKTtcclxuXHJcbiAgICAgIHNuYWNrLm9uQWN0aW9uKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLlNhdmUoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgRXhwb3J0KCk6IHZvaWQge1xyXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgQ3JlYXRlRXhwb3J0UmVxdWVzdCgpO1xyXG5cclxuXHJcbiAgICB0aGlzLlRyYW5zbGF0ZUFwaUNsaWVudC5jcmVhdGVFeHBvcnQocmVxdWVzdCkuc3Vic2NyaWJlKChtb2RlbDogQ3JlYXRlRXhwb3J0UmVzcG9uc2UpID0+IHtcclxuICAgICAgYWxlcnQobW9kZWwudXJsKTtcclxuXHJcbiAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGlmIChlcnJvci5zdGF0dXMgPT0gNDAwKVxyXG4gICAgICAgIGFsZXJ0KGVycm9yLmpzb24oKSk7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGFsZXJ0KCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuICAgICAgICBhbGVydChlcnJvcik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIEltcG9ydCgpOiB2b2lkIHtcclxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFJlYWRFeHBvcnRSZXF1ZXN0KCk7XHJcblxyXG5cclxuICAgIHRoaXMuVHJhbnNsYXRlQXBpQ2xpZW50LnJlYWRFeHBvcnQocmVxdWVzdCkuc3Vic2NyaWJlKCgpID0+IHtcclxuXHJcbiAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGlmIChlcnJvci5zdGF0dXMgPT0gNDAwKVxyXG4gICAgICAgIGFsZXJ0KGVycm9yLmpzb24oKSk7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGFsZXJ0KCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuICAgICAgICBhbGVydChlcnJvcik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIElzSFRNTCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLlNlbGVjdGVkQmVoZWVyTGFuZ3VhZ2VzQ2F0ZWdvcnlWaWV3TW9kZWwgIT0gbnVsbCkge1xyXG4gICAgICB2YXIgc3ViY2F0cyA9IHRoaXMuU2VsZWN0ZWRCZWhlZXJMYW5ndWFnZXNDYXRlZ29yeVZpZXdNb2RlbC5zdWJDYXRlZ29yaWVzO1xyXG5cclxuICAgICAgaWYgKHN1YmNhdHMgIT0gbnVsbCkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3ViY2F0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKHN1YmNhdHNbaV0uaHRtbClcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIEdldExhbmd1YWdlQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHZhciBjb3VudCA9IDA7XHJcbiAgICBpZiAodGhpcy5CZWhlZXJMYW5ndWFnZXNWaWV3TW9kZWwgIT0gbnVsbCkge1xyXG4gICAgICB2YXIgbGFuZ3VhZ2VzID0gdGhpcy5CZWhlZXJMYW5ndWFnZXNWaWV3TW9kZWwubGFuZ3VhZ2VzO1xyXG5cclxuICAgICAgaWYgKGxhbmd1YWdlcyAhPSBudWxsKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYW5ndWFnZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChsYW5ndWFnZXNbaV0uc2VsZWN0ZWQpXHJcbiAgICAgICAgICAgIGNvdW50Kys7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvdW50O1xyXG4gIH1cclxufVxyXG4iLCI8YXBwLWJlaGVlci1uYXY+PC9hcHAtYmVoZWVyLW5hdj5cclxuXHJcbjxhcHAtZmFiLWxvYWRlciAqbmdJZj1cIkxvYWRpbmdcIj48L2FwcC1mYWItbG9hZGVyPlxyXG5cclxuPGRpdiAqbmdJZj1cIiFMb2FkaW5nXCI+XHJcbiAgPGRpdiBjbGFzcz1cImRpc3BsYXlmbGV4XCIgI3RhYmxlZGl2ICh3aW5kb3c6cmVzaXplKT1cIm9uUmVzaXplKCRldmVudClcIj5cclxuICAgIDxkaXY+XHJcbiAgICAgIDxtYXQtY2FyZCBjbGFzcz1cIm1haW4tYmFyXCI+XHJcbiAgICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cImZpbGxcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD5Hcm91cDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cIlNlbGVjdGVkQmVoZWVyTGFuZ3VhZ2VzQ2F0ZWdvcnlWaWV3TW9kZWxcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cInRoaXMucGFnZUluZGV4ID0gMDsgUmVmcmVzaFBhZ2luYXRvcigpOyBSZXNpemUoKTtcIj5cclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgY2F0IG9mIEJlaGVlckxhbmd1YWdlc1ZpZXdNb2RlbC5jYXRlZ29yaWVzXCIgW3ZhbHVlXT1cImNhdFwiPlxyXG4gICAgICAgICAgICAgICAge3sgVHJhbnNsYXRpb25DYXRlZ29yeVtjYXQudHJhbnNsYXRpb25DYXRlZ29yeV0gfX1cclxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8IS0tPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiAoY2xpY2spPVwiRXhwb3J0KClcIj5cclxuICAgICAgICAgICAgRXhwb3J0XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gKGNsaWNrKT1cIkltcG9ydCgpXCI+XHJcbiAgICAgICAgICAgIEltcG9ydFxyXG4gICAgICAgICAgPC9idXR0b24+LS0+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBsYW5ndWFnZSBvZiBCZWhlZXJMYW5ndWFnZXNWaWV3TW9kZWwubGFuZ3VhZ2VzXCI+XHJcbiAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggWyhuZ01vZGVsKV09XCJsYW5ndWFnZS5zZWxlY3RlZFwiPlxyXG4gICAgICAgICAgICAgIDxmYWItZmxhZyBbY291bnRyeV09XCJsYW5ndWFnZS5mbGFnXCI+PC9mYWItZmxhZz4ge3sgbGFuZ3VhZ2UubmFtZSB9fVxyXG4gICAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxiciAvPjxiciAvPlxyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiAoY2xpY2spPVwiU2F2ZSgpXCIgY2xhc3M9XCJzYXZlLWJ1dHRvblwiIFtkaXNhYmxlZF09XCIhT3BlbkNoYW5nZXNcIj5cclxuICAgICAgICAgICAgU2F2ZVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gICAgICA8L21hdC1jYXJkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bWF0LWNhcmQgY2xhc3M9XCJtYWluLWJhciBmbGV4YXV0b1wiPlxyXG4gICAgICA8bWF0LWNhcmQtY29udGVudD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWF4LWhlaWdodFwiPlxyXG5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJTZWxlY3RlZEJlaGVlckxhbmd1YWdlc0NhdGVnb3J5Vmlld01vZGVsICE9IG51bGxcIj5cclxuICAgICAgICAgICAgPGgxPnt7IFRyYW5zbGF0aW9uQ2F0ZWdvcnlbU2VsZWN0ZWRCZWhlZXJMYW5ndWFnZXNDYXRlZ29yeVZpZXdNb2RlbC50cmFuc2xhdGlvbkNhdGVnb3J5XSB9fTwvaDE+XHJcblxyXG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJmdWxsLXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwiIUlzSFRNTCgpXCIgY29sc3Bhbj1cIjJcIiBjbGFzcz1cImNhdC1yb3dcIj48L3RkPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbGFuZ3VhZ2Ugb2YgQmVoZWVyTGFuZ3VhZ2VzVmlld01vZGVsLmxhbmd1YWdlc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjYXQtcm93XCIgKm5nSWY9XCJsYW5ndWFnZS5zZWxlY3RlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxmYWItZmxhZyBbY291bnRyeV09XCJsYW5ndWFnZS5mbGFnXCI+PC9mYWItZmxhZz4ge3sgbGFuZ3VhZ2UubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC90cj5cclxuXHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIklzSFRNTCgpXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzdWJjYXQgb2YgQWN0aXZlU3Vic1wiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBrZXkgb2Ygc3ViY2F0LmtleXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJHZXRMYW5ndWFnZUNvdW50KClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgVHJhbnNsYXRpb25TdWJDYXRlZ29yeVtzdWJjYXQudHJhbnNsYXRpb25TdWJDYXRlZ29yeV0gfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImtleS50ZXh0ICE9ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHt7IGtleS50ZXh0IH19KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBsYW5ndWFnZSBvZiBCZWhlZXJMYW5ndWFnZXNWaWV3TW9kZWwubGFuZ3VhZ2VzOyBpbmRleCBhcyBpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cImxhbmd1YWdlLnNlbGVjdGVkXCIgW3N0eWxlLndpZHRoXT1cIic1MCUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhbmd1bGFyLWVkaXRvciBbY29uZmlnXT1cImVkaXRvckNvbmZpZ1wiIFsobmdNb2RlbCldPVwiR2V0RW50cnkoa2V5LmVudHJpZXMsIGxhbmd1YWdlKS52YWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cIlVwZGF0ZUNoYW5nZWQoR2V0RW50cnkoa2V5LmVudHJpZXMsIGxhbmd1YWdlKSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYW5ndWxhci1lZGl0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhSXNIVE1MKClcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN1YmNhdCBvZiBBY3RpdmVTdWJzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQga2V5IG9mIHN1YmNhdC5rZXlzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgVHJhbnNsYXRpb25TdWJDYXRlZ29yeVtzdWJjYXQudHJhbnNsYXRpb25TdWJDYXRlZ29yeV0gfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJrZXkudGV4dCAhPSAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoe3sga2V5LnRleHQgfX0pXHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGxhbmd1YWdlIG9mIEJlaGVlckxhbmd1YWdlc1ZpZXdNb2RlbC5sYW5ndWFnZXM7IGluZGV4IGFzIGlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cImxhbmd1YWdlLnNlbGVjdGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwiZmlsbFwiIGNsYXNzPVwiZnVsbHdpZHRoXCIgKm5nSWY9XCJHZXRFbnRyeShrZXkuZW50cmllcywgbGFuZ3VhZ2UpICE9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgVHJhbnNsYXRpb25TdWJDYXRlZ29yeVtzdWJjYXQudHJhbnNsYXRpb25TdWJDYXRlZ29yeV0gfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cIkdldEVudHJ5KGtleS5lbnRyaWVzLCBsYW5ndWFnZSkudmFsdWVcIiAoa2V5dXApPVwiVXBkYXRlQ2hhbmdlZChHZXRFbnRyeShrZXkuZW50cmllcywgbGFuZ3VhZ2UpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC90cj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDwhLS08bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2Ygc3ViY2F0LmZpbHRlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZpbHRlci5maWx0ZXIudGV4dCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbGFuZ3VhZ2Ugb2YgQmVoZWVyTGFuZ3VhZ2VzVmlld01vZGVsLmxhbmd1YWdlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJsYW5ndWFnZS5zZWxlY3RlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwiZmlsbFwiIGNsYXNzPVwiZnVsbHdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBUcmFuc2xhdGlvblN1YkNhdGVnb3J5W3N1YmNhdC50cmFuc2xhdGlvblN1YkNhdGVnb3J5XSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cIkdldEVudHJ5KGZpbHRlci5maWx0ZXIuZW50cmllcywgbGFuZ3VhZ2UpLnZhbHVlXCIgKGtleXVwKT1cIlVwZGF0ZUNoYW5nZWQoR2V0RW50cnkoZmlsdGVyLmZpbHRlci5lbnRyaWVzLCBsYW5ndWFnZSkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGZpbHRlci5vcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+e3sgb3B0aW9uLnRleHQgfX08L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBsYW5ndWFnZSBvZiBCZWhlZXJMYW5ndWFnZXNWaWV3TW9kZWwubGFuZ3VhZ2VzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwibGFuZ3VhZ2Uuc2VsZWN0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwiZmlsbFwiIGNsYXNzPVwiZnVsbHdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgVHJhbnNsYXRpb25TdWJDYXRlZ29yeVtzdWJjYXQudHJhbnNsYXRpb25TdWJDYXRlZ29yeV0gfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiR2V0RW50cnkob3B0aW9uLmVudHJpZXMsIGxhbmd1YWdlKS52YWx1ZVwiIChrZXl1cCk9XCJVcGRhdGVDaGFuZ2VkKEdldEVudHJ5KG9wdGlvbi5lbnRyaWVzLCBsYW5ndWFnZSkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+LS0+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8bWF0LXBhZ2luYXRvciAjcGFnaW5hdG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAocGFnZSk9XCJoYW5kbGVQYWdlRXZlbnQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbbGVuZ3RoXT1cImFtb3VudExlbmd0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbcGFnZVNpemVdPVwiYW1vdW50UGVyUGFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0ZpcnN0TGFzdEJ1dHRvbnNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZVBhZ2VTaXplXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3BhZ2VJbmRleF09XCJwYWdlSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlNlbGVjdCBwYWdlXCI+XHJcbiAgICAgICAgICA8L21hdC1wYWdpbmF0b3I+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuICAgIDwvbWF0LWNhcmQ+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
296
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVoZWVyLXRyYW5zbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvZmFicmlrYW50ZW5jb3JlL2JlaGVlci9jb21wb25lbnRzL2JlaGVlci10cmFuc2xhdGUvYmVoZWVyLXRyYW5zbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvZmFicmlrYW50ZW5jb3JlL2JlaGVlci9jb21wb25lbnRzL2JlaGVlci10cmFuc2xhdGUvYmVoZWVyLXRyYW5zbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBeUQsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTWxKLE9BQU8sRUFBZ0csbUNBQW1DLEVBQXFELG1CQUFtQixFQUF3QixrQkFBa0IsRUFBRSxpQkFBaUIsRUFBcUQsbUJBQW1CLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUV4WixNQU1hLHdCQUF3QjtJQTZDekI7SUFDQTtJQUNBO0lBQ0E7SUEvQ0gsT0FBTyxHQUFZLElBQUksQ0FBQztJQUN4QixXQUFXLEdBQVksS0FBSyxDQUFDO0lBQzdCLHdCQUF3QixDQUEyQjtJQUNuRCxVQUFVLEdBQStDLElBQUksS0FBSyxFQUF1QyxDQUFDO0lBRTFHLFNBQVMsR0FBVyxDQUFDLENBQUM7SUFDdEIsWUFBWSxHQUFXLENBQUMsQ0FBQztJQUN6QixhQUFhLEdBQVcsRUFBRSxDQUFDO0lBRWxDLElBQVcsbUJBQW1CO1FBQzVCLE9BQU8sbUJBQW1CLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQVcsc0JBQXNCO1FBQy9CLE9BQU8sc0JBQXNCLENBQUM7SUFDaEMsQ0FBQztJQUVNLHdDQUF3QyxHQUE0QyxJQUFJLENBQUM7SUFDekYsK0JBQStCLEdBQW1DLElBQUksQ0FBQztJQUV2RCxRQUFRLENBQWE7SUFFNUMsWUFBWSxHQUF3QjtRQUNsQyxRQUFRLEVBQUUsSUFBSTtRQUNkLFVBQVUsRUFBRSxLQUFLO1FBQ2pCLE1BQU0sRUFBRSxNQUFNO1FBQ2QsU0FBUyxFQUFFLEdBQUc7UUFDZCxTQUFTLEVBQUUsTUFBTTtRQUNqQixLQUFLLEVBQUUsTUFBTTtRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsU0FBUyxFQUFFLElBQUk7UUFDZixhQUFhLEVBQUUsSUFBSTtRQUNuQixXQUFXLEVBQUUsSUFBSTtRQUNqQix5QkFBeUIsRUFBRSxFQUFFO1FBQzdCLGVBQWUsRUFBRSxFQUFFO1FBQ25CLGVBQWUsRUFBRSxFQUFFO1FBQ25CLFFBQVEsRUFBRSxJQUFJO1FBQ2QsZUFBZSxFQUFFLEtBQUs7UUFDdEIsb0JBQW9CLEVBQUU7WUFDcEIsQ0FBQyxVQUFVLENBQUM7U0FDYjtLQUNGLENBQUM7SUFFRixZQUNVLGtCQUFzQyxFQUN0QyxxQkFBNEMsRUFDNUMsUUFBcUIsRUFDckIsaUJBQW9DO1FBSHBDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QyxhQUFRLEdBQVIsUUFBUSxDQUFhO1FBQ3JCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7SUFBSSxDQUFDO0lBRW5ELFNBQVM7UUFDUCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFVO1FBQ2pCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsZUFBZSxDQUFDLENBQVk7UUFDMUIscUJBQXFCO1FBQ3JCLHlCQUF5QjtRQUN6Qiw2QkFBNkI7UUFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBRTdCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTSxnQkFBZ0I7UUFDckIsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEtBQUssRUFBdUMsQ0FBQztRQUVuRSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDckQsSUFBSSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDekQsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBRW5CLElBQUksSUFBSSxDQUFDLHdDQUF3QyxJQUFJLElBQUksRUFBRTtZQUV6RCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsd0NBQXdDLENBQUMsYUFBYSxDQUFDO1lBRTFFLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtnQkFDbkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ3ZDLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7b0JBRTNCLElBQUksSUFBSSxJQUFJLElBQUksRUFBRTt3QkFFaEIsSUFBSSxNQUFNLEdBQStDLElBQUksQ0FBQzt3QkFFOUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7NEJBRXBDLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0NBQ3RHLElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtvQ0FDbEIsTUFBTSxHQUFHLElBQUksbUNBQW1DLEVBQUUsQ0FBQztvQ0FDbkQsTUFBTSxDQUFDLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQztvQ0FDbEUsTUFBTSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO29DQUM5QixNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksS0FBSyxFQUErQixDQUFDO29DQUV2RCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQ0FDN0IsVUFBVSxFQUFFLENBQUM7aUNBQ2Q7Z0NBRUQsSUFBSSxNQUFNLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRTtvQ0FDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUNBQzNCOzZCQUNGOzRCQUVELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQzt5QkFDckI7cUJBQ0Y7b0JBRUQsbUNBQW1DO29CQUVuQyx3QkFBd0I7b0JBRXhCLGtFQUFrRTtvQkFFbEUsOENBQThDO29CQUM5Qyx1Q0FBdUM7b0JBQ3ZDLG9FQUFvRTtvQkFFcEUsNEJBQTRCO29CQUM1QixrREFBa0Q7b0JBQ2xELG1IQUFtSDtvQkFDbkgsaUNBQWlDO29CQUNqQyxpRUFBaUU7b0JBQ2pFLGdGQUFnRjtvQkFDaEYsNENBQTRDO29CQUM1QyxxRUFBcUU7b0JBQ3JFLDJFQUEyRTtvQkFFM0UsMkNBQTJDO29CQUMzQyxhQUFhO29CQUViLGlFQUFpRTtvQkFDakUsMkVBQTJFO29CQUMzRSw2RUFBNkU7b0JBQzdFLCtDQUErQztvQkFDL0MsMkJBQTJCO29CQUMzQixhQUFhO29CQUViLCtDQUErQztvQkFDL0MsbURBQW1EO29CQUNuRCwyQkFBMkI7b0JBQzNCLGFBQWE7b0JBQ2IsV0FBVztvQkFFWCw4QkFBOEI7b0JBQzlCLFNBQVM7b0JBQ1QsT0FBTztvQkFDUCxLQUFLO29CQUNMLEdBQUc7aUJBQ0o7YUFDRjtTQUNGO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFTSxNQUFNO1FBQ1gsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxZQUFZLElBQUksSUFBSSxFQUFFO1lBQ3RELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNqQixJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxFQUFFO29CQUMzQixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztvQkFFdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxZQUFZLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO29CQUUvRixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztpQkFDekI7YUFDRjtpQkFDSTtnQkFDSCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUU1RixJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUU7b0JBQ2pCLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxTQUFTLEVBQUU7d0JBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO3dCQUUvQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztxQkFDekI7aUJBQ0Y7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVNLFFBQVEsQ0FBQyxPQUF3QyxFQUFFLFFBQWlDO1FBQ3pGLElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxJQUFJLEVBQUU7WUFDM0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3ZDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUMsRUFBRSxFQUFFO29CQUN4QyxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDbkI7YUFDRjtTQUNGO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsaUJBQW9DO1FBRTFELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRWxDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUErQixFQUFFLEVBQUU7WUFDN0ksSUFBSSxDQUFDLHdCQUF3QixHQUFHLEtBQUssQ0FBQztZQUV0QyxJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFO2dCQUNwRCxJQUFJLENBQUMsd0NBQXdDLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUYsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7YUFDekI7WUFFRCxJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLElBQUksSUFBSSxFQUFFO2dCQUNuRCxJQUFJLENBQUMsK0JBQStCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEYsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7YUFDekI7WUFFRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUVyQixpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNwQyxDQUFDLEVBQUUsQ0FBQyxLQUFlLEVBQUUsRUFBRTtZQUNyQixJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksR0FBRztnQkFDckIsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2lCQUNqQjtnQkFDSCxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztnQkFDckMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2Q7WUFFRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxJQUFJO1FBQ1QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXZDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRXZILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2pHLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QyxDQUFDLEVBQUUsQ0FBQyxLQUFlLEVBQUUsRUFBRTtZQUNyQixLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUVyQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sYUFBYSxDQUFDLEtBQW9DO1FBQ3ZELEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBRXJCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRU0sWUFBWTtRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUV4QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUU3RCxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2QsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFTSxNQUFNO1FBQ1gsSUFBSSxPQUFPLEdBQUcsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1FBR3hDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBMkIsRUFBRSxFQUFFO1lBQ3RGLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFbkIsQ0FBQyxFQUFFLENBQUMsS0FBZSxFQUFFLEVBQUU7WUFDckIsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLEdBQUc7Z0JBQ3JCLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztpQkFDakI7Z0JBQ0gsS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7Z0JBQ3JDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNkO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sTUFBTTtRQUNYLElBQUksT0FBTyxHQUFHLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUd0QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFFM0QsQ0FBQyxFQUFFLENBQUMsS0FBZSxFQUFFLEVBQUU7WUFDckIsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLEdBQUc7Z0JBQ3JCLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztpQkFDakI7Z0JBQ0gsS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7Z0JBQ3JDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNkO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sTUFBTTtRQUNYLElBQUksSUFBSSxDQUFDLHdDQUF3QyxJQUFJLElBQUksRUFBRTtZQUN6RCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsd0NBQXdDLENBQUMsYUFBYSxDQUFDO1lBRTFFLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtnQkFDbkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ3ZDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7d0JBQ2pCLE9BQU8sSUFBSSxDQUFDO2lCQUNmO2FBQ0Y7U0FDRjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVNLGdCQUFnQjtRQUNyQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLElBQUksQ0FBQyx3QkFBd0IsSUFBSSxJQUFJLEVBQUU7WUFDekMsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsQ0FBQztZQUV4RCxJQUFJLFNBQVMsSUFBSSxJQUFJLEVBQUU7Z0JBQ3JCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUN6QyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRO3dCQUN2QixLQUFLLEVBQUUsQ0FBQztpQkFDWDthQUNGO1NBQ0Y7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7dUdBMVVVLHdCQUF3QjsyRkFBeEIsd0JBQXdCLGtLQ2RyQywyblFBb0tBOztTRHRKYSx3QkFBd0I7MkZBQXhCLHdCQUF3QjtrQkFOcEMsU0FBUzsrQkFDRSxzQkFBc0IsaUJBR2pCLGlCQUFpQixDQUFDLElBQUk7Nk1BdUJkLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIERvQ2hlY2ssIEVsZW1lbnRSZWYsIE9uQ2hhbmdlcywgT25Jbml0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExlZ2FjeVBhZ2VFdmVudCBhcyBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWF0TGVnYWN5U25hY2tCYXIgYXMgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktc25hY2stYmFyJztcclxuaW1wb3J0IHsgQW5ndWxhckVkaXRvckNvbmZpZyB9IGZyb20gJ0Brb2xrb3YvYW5ndWxhci1lZGl0b3InO1xyXG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmVoZWVyTGFuZ3VhZ2VzQ2F0ZWdvcnlWaWV3TW9kZWwsIEJlaGVlckxhbmd1YWdlc0VudHJ5Vmlld01vZGVsLCBCZWhlZXJMYW5ndWFnZXNLZXlWaWV3TW9kZWwsIEJlaGVlckxhbmd1YWdlc1N1YkNhdGVnb3J5Vmlld01vZGVsLCBCZWhlZXJMYW5ndWFnZXNWaWV3TW9kZWwsIEJlaGVlckxhbmd1YWdlVmlld01vZGVsLCBDcmVhdGVFeHBvcnRSZXF1ZXN0LCBDcmVhdGVFeHBvcnRSZXNwb25zZSwgTG9naW5SZXNwb25zZU1vZGVsLCBSZWFkRXhwb3J0UmVxdWVzdCwgVHJhbnNsYXRlQXBpQ2xpZW50LCBUcmFuc2xhdGVLZXlDYXRlZ29yeVZpZXdNb2RlbCwgVHJhbnNsYXRpb25DYXRlZ29yeSwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeSB9IGZyb20gJy4uLy4uLy4uL3N3YWdnZXIvU3dhZ2dlckNsaWVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1iZWhlZXItdHJhbnNsYXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYmVoZWVyLXRyYW5zbGF0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYmVoZWVyLXRyYW5zbGF0ZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIEJlaGVlclRyYW5zbGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgRG9DaGVjayB7XHJcbiAgcHVibGljIExvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHB1YmxpYyBPcGVuQ2hhbmdlczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBCZWhlZXJMYW5ndWFnZXNWaWV3TW9kZWw6IEJlaGVlckxhbmd1YWdlc1ZpZXdNb2RlbDtcclxuICBwdWJsaWMgQWN0aXZlU3ViczogQXJyYXk8QmVoZWVyTGFuZ3VhZ2VzU3ViQ2F0ZWdvcnlWaWV3TW9kZWw+ID0gbmV3IEFycmF5PEJlaGVlckxhbmd1YWdlc1N1YkNhdGVnb3J5Vmlld01vZGVsPigpO1xyXG5cclxuICBwdWJsaWMgcGFnZUluZGV4OiBudW1iZXIgPSAwO1xyXG4gIHB1YmxpYyBhbW91bnRMZW5ndGg6IG51bWJlciA9IDA7XHJcbiAgcHVibGljIGFtb3VudFBlclBhZ2U6IG51bWJlciA9IDEwO1xyXG5cclxuICBwdWJsaWMgZ2V0IFRyYW5zbGF0aW9uQ2F0ZWdvcnkoKSB7XHJcbiAgICByZXR1cm4gVHJhbnNsYXRpb25DYXRlZ29yeTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgVHJhbnNsYXRpb25TdWJDYXRlZ29yeSgpIHtcclxuICAgIHJldHVybiBUcmFuc2xhdGlvblN1YkNhdGVnb3J5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNlbGVjdGVkQmVoZWVyTGFuZ3VhZ2VzQ2F0ZWdvcnlWaWV3TW9kZWw6IEJlaGVlckxhbmd1YWdlc0NhdGVnb3J5Vmlld01vZGVsIHwgbnVsbCA9IG51bGw7XHJcbiAgcHVibGljIFNlbGVjdGVkQmVoZWVyTGFuZ3VhZ2VWaWV3TW9kZWw6IEJlaGVlckxhbmd1YWdlVmlld01vZGVsIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlZGl2JykgdGFibGVkaXY6IEVsZW1lbnRSZWY7XHJcblxyXG4gIGVkaXRvckNvbmZpZzogQW5ndWxhckVkaXRvckNvbmZpZyA9IHtcclxuICAgIGVkaXRhYmxlOiB0cnVlLFxyXG4gICAgc3BlbGxjaGVjazogZmFsc2UsXHJcbiAgICBoZWlnaHQ6ICdhdXRvJyxcclxuICAgIG1pbkhlaWdodDogJzAnLFxyXG4gICAgbWF4SGVpZ2h0OiAnYXV0bycsXHJcbiAgICB3aWR0aDogJ2F1dG8nLFxyXG4gICAgbWluV2lkdGg6ICcwJyxcclxuICAgIHRyYW5zbGF0ZTogJ25vJyxcclxuICAgIGVuYWJsZVRvb2xiYXI6IHRydWUsXHJcbiAgICBzaG93VG9vbGJhcjogdHJ1ZSxcclxuICAgIGRlZmF1bHRQYXJhZ3JhcGhTZXBhcmF0b3I6ICcnLFxyXG4gICAgZGVmYXVsdEZvbnROYW1lOiAnJyxcclxuICAgIGRlZmF1bHRGb250U2l6ZTogJycsXHJcbiAgICBzYW5pdGl6ZTogdHJ1ZSxcclxuICAgIHRvb2xiYXJQb3NpdGlvbjogJ3RvcCcsXHJcbiAgICB0b29sYmFySGlkZGVuQnV0dG9uczogW1xyXG4gICAgICBbJ2ZvbnROYW1lJ11cclxuICAgIF1cclxuICB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgVHJhbnNsYXRlQXBpQ2xpZW50OiBUcmFuc2xhdGVBcGlDbGllbnQsXHJcbiAgICBwcml2YXRlIGF1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogTWF0U25hY2tCYXIsXHJcbiAgICBwcml2YXRlIENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikgeyB9XHJcblxyXG4gIG5nRG9DaGVjaygpOiB2b2lkIHtcclxuICAgIHRoaXMuUmVzaXplKCk7XHJcbiAgfVxyXG5cclxuICBvblJlc2l6ZShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLlJlc2l6ZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLkxvYWRUcmFuc2xhdGlvbnModGhpcy5DaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVQYWdlRXZlbnQoZTogUGFnZUV2ZW50KSB7XHJcbiAgICAvL3RoaXMucGFnZUV2ZW50ID0gZTtcclxuICAgIC8vdGhpcy5sZW5ndGggPSBlLmxlbmd0aDtcclxuICAgIC8vdGhpcy5wYWdlU2l6ZSA9IGUucGFnZVNpemU7XHJcbiAgICB0aGlzLnBhZ2VJbmRleCA9IGUucGFnZUluZGV4O1xyXG5cclxuICAgIHRoaXMuUmVmcmVzaFBhZ2luYXRvcigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFJlZnJlc2hQYWdpbmF0b3IoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFtb3VudExlbmd0aCA9IDA7XHJcbiAgICB0aGlzLkFjdGl2ZVN1YnMgPSBuZXcgQXJyYXk8QmVoZWVyTGFuZ3VhZ2VzU3ViQ2F0ZWdvcnlWaWV3TW9kZWw+KCk7XHJcblxyXG4gICAgdmFyIHN0YXJ0SW5kZXggPSB0aGlzLnBhZ2VJbmRleCAqIHRoaXMuYW1vdW50UGVyUGFnZTtcclxuICAgIHZhciBlbmRJbmRleCA9ICh0aGlzLnBhZ2VJbmRleCArIDEpICogdGhpcy5hbW91bnRQZXJQYWdlO1xyXG4gICAgdmFyIGl0ZW1zYWRkZWQgPSAwO1xyXG5cclxuICAgIGlmICh0aGlzLlNlbGVjdGVkQmVoZWVyTGFuZ3VhZ2VzQ2F0ZWdvcnlWaWV3TW9kZWwgIT0gbnVsbCkge1xyXG5cclxuICAgICAgdmFyIHN1YmNhdHMgPSB0aGlzLlNlbGVjdGVkQmVoZWVyTGFuZ3VhZ2VzQ2F0ZWdvcnlWaWV3TW9kZWwuc3ViQ2F0ZWdvcmllcztcclxuXHJcbiAgICAgIGlmIChzdWJjYXRzICE9IG51bGwpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN1YmNhdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIHZhciBrZXlzID0gc3ViY2F0c1tpXS5rZXlzO1xyXG5cclxuICAgICAgICAgIGlmIChrZXlzICE9IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBzdWJjYXQ6IEJlaGVlckxhbmd1YWdlc1N1YkNhdGVnb3J5Vmlld01vZGVsIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGtleXMubGVuZ3RoOyBqKyspIHtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuYW1vdW50TGVuZ3RoID49IHN0YXJ0SW5kZXggJiYgdGhpcy5hbW91bnRMZW5ndGggPCBlbmRJbmRleCAmJiBpdGVtc2FkZGVkIDwgdGhpcy5hbW91bnRQZXJQYWdlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3ViY2F0ID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgc3ViY2F0ID0gbmV3IEJlaGVlckxhbmd1YWdlc1N1YkNhdGVnb3J5Vmlld01vZGVsKCk7XHJcbiAgICAgICAgICAgICAgICAgIHN1YmNhdC50cmFuc2xhdGlvblN1YkNhdGVnb3J5ID0gc3ViY2F0c1tpXS50cmFuc2xhdGlvblN1YkNhdGVnb3J5O1xyXG4gICAgICAgICAgICAgICAgICBzdWJjYXQuaHRtbCA9IHN1YmNhdHNbaV0uaHRtbDtcclxuICAgICAgICAgICAgICAgICAgc3ViY2F0LmtleXMgPSBuZXcgQXJyYXk8QmVoZWVyTGFuZ3VhZ2VzS2V5Vmlld01vZGVsPigpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgdGhpcy5BY3RpdmVTdWJzLnB1c2goc3ViY2F0KTtcclxuICAgICAgICAgICAgICAgICAgaXRlbXNhZGRlZCsrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzdWJjYXQ/LmtleXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICBzdWJjYXQua2V5cy5wdXNoKGtleXNbal0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5hbW91bnRMZW5ndGgrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vdmFyIGZpbHRlcnMgPSBzdWJjYXRzW2ldLmZpbHRlcnM7XHJcblxyXG4gICAgICAgICAgLy9pZiAoZmlsdGVycyAhPSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgLy8gIHZhciBzdWJjYXQ6IEJlaGVlckxhbmd1YWdlc1N1YkNhdGVnb3J5Vmlld01vZGVsIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgLy8gIGZvciAodmFyIGogPSAwOyBqIDwgZmlsdGVycy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgLy8gICAgdmFyIG9wdGlvbnMgPSBmaWx0ZXJzW2pdLm9wdGlvbnM7XHJcbiAgICAgICAgICAvLyAgICB2YXIgZmlsdGVybW9kZWw6IEJlaGVlckxhbmd1YWdlc0ZpbHRlclZpZXdNb2RlbCB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgICAgIC8vICAgIGlmIChvcHRpb25zICE9IG51bGwpIHtcclxuICAgICAgICAgIC8vICAgICAgZm9yICh2YXIgbyA9IDA7IG8gPCBvcHRpb25zLmxlbmd0aDsgbysrKSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgaWYgKHRoaXMuYW1vdW50TGVuZ3RoID49IHN0YXJ0SW5kZXggJiYgdGhpcy5hbW91bnRMZW5ndGggPCBlbmRJbmRleCAmJiBpdGVtc2FkZGVkIDwgdGhpcy5hbW91bnRQZXJQYWdlKSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICBpZiAoc3ViY2F0ID09IG51bGwpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgc3ViY2F0ID0gbmV3IEJlaGVlckxhbmd1YWdlc1N1YkNhdGVnb3J5Vmlld01vZGVsKCk7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgIHN1YmNhdC50cmFuc2xhdGlvblN1YkNhdGVnb3J5ID0gc3ViY2F0c1tpXS50cmFuc2xhdGlvblN1YkNhdGVnb3J5O1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICBzdWJjYXQuaHRtbCA9IHN1YmNhdHNbaV0uaHRtbDtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgc3ViY2F0LmtleXMgPSBuZXcgQXJyYXk8QmVoZWVyTGFuZ3VhZ2VzS2V5Vmlld01vZGVsPigpO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICBzdWJjYXQuZmlsdGVycyA9IG5ldyBBcnJheTxCZWhlZXJMYW5ndWFnZXNGaWx0ZXJWaWV3TW9kZWw+KCk7XHJcblxyXG4gICAgICAgICAgLy8gICAgICAgICAgICB0aGlzLkFjdGl2ZVN1YnMucHVzaChzdWJjYXQpO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vICAgICAgICAgIGlmIChzdWJjYXQ/LmZpbHRlcnMgIT0gbnVsbCAmJiBmaWx0ZXJtb2RlbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgIGZpbHRlcm1vZGVsID0gbmV3IEJlaGVlckxhbmd1YWdlc0ZpbHRlclZpZXdNb2RlbChmaWx0ZXJzW2pdKTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgZmlsdGVybW9kZWwub3B0aW9ucyA9IG5ldyBBcnJheTxCZWhlZXJMYW5ndWFnZXNLZXlWaWV3TW9kZWw+KCk7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgIHN1YmNhdC5maWx0ZXJzLnB1c2goZmlsdGVybW9kZWwpO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICBpdGVtc2FkZGVkKys7XHJcbiAgICAgICAgICAvLyAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gICAgICAgICAgaWYgKGZpbHRlcm1vZGVsPy5vcHRpb25zICE9IG51bGwpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgZmlsdGVybW9kZWwub3B0aW9ucy5wdXNoKG9wdGlvbnNbb10pO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICBpdGVtc2FkZGVkKys7XHJcbiAgICAgICAgICAvLyAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vICAgICAgICB0aGlzLmFtb3VudExlbmd0aCsrO1xyXG4gICAgICAgICAgLy8gICAgICB9XHJcbiAgICAgICAgICAvLyAgICB9XHJcbiAgICAgICAgICAvLyAgfVxyXG4gICAgICAgICAgLy99XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5DaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgUmVzaXplKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudGFibGVkaXY/Lm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldEhlaWdodCAhPSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLklzSFRNTCgpKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYW1vdW50UGVyUGFnZSAhPSAxKSB7XHJcbiAgICAgICAgICB0aGlzLmFtb3VudFBlclBhZ2UgPSAxO1xyXG5cclxuICAgICAgICAgIHRoaXMuZWRpdG9yQ29uZmlnLmhlaWdodCA9IE1hdGguZmxvb3IodGhpcy50YWJsZWRpdj8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0SGVpZ2h0IC0gNDAwKSArIFwicHhcIjtcclxuXHJcbiAgICAgICAgICB0aGlzLlJlZnJlc2hQYWdpbmF0b3IoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdmFyIGl0ZW1jb3VudCA9IE1hdGguZmxvb3IoKHBhcnNlSW50KHRoaXMudGFibGVkaXYubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQpIC0gMjUwKSAvIDU3KTtcclxuXHJcbiAgICAgICAgaWYgKGl0ZW1jb3VudCA+IDApIHtcclxuICAgICAgICAgIGlmICh0aGlzLmFtb3VudFBlclBhZ2UgIT0gaXRlbWNvdW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuYW1vdW50UGVyUGFnZSA9IGl0ZW1jb3VudDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuUmVmcmVzaFBhZ2luYXRvcigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIEdldEVudHJ5KGVudHJpZXM6IEJlaGVlckxhbmd1YWdlc0VudHJ5Vmlld01vZGVsW10sIGxhbmd1YWdlOiBCZWhlZXJMYW5ndWFnZVZpZXdNb2RlbCk6IEJlaGVlckxhbmd1YWdlc0VudHJ5Vmlld01vZGVsIHwgbnVsbCB7XHJcbiAgICBpZiAoZW50cmllcy5lbnRyaWVzICE9IG51bGwpIHtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGVudHJpZXNbaV0ubGFuZ3VhZ2VJZCA9PSBsYW5ndWFnZS5pZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGVudHJpZXNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgTG9hZFRyYW5zbGF0aW9ucyhDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgIHRoaXMuVHJhbnNsYXRlQXBpQ2xpZW50LmdldEJlaGVlckxhbmd1YWdlc1ZpZXdNb2RlbCh0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZS5jdXJyZW50VXNlclZhbHVlKS5zdWJzY3JpYmUoKG1vZGVsOiBCZWhlZXJMYW5ndWFnZXNWaWV3TW9kZWwpID0+IHtcclxuICAgICAgdGhpcy5CZWhlZXJMYW5ndWFnZXNWaWV3TW9kZWwgPSBtb2RlbDtcclxuXHJcbiAgICAgIGlmICh0aGlzLkJlaGVlckxhbmd1YWdlc1ZpZXdNb2RlbC5jYXRlZ29yaWVzICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLlNlbGVjdGVkQmVoZWVyTGFuZ3VhZ2VzQ2F0ZWdvcnlWaWV3TW9kZWwgPSB0aGlzLkJlaGVlckxhbmd1YWdlc1ZpZXdNb2RlbC5jYXRlZ29yaWVzWzBdO1xyXG4gICAgICAgIHRoaXMuUmVmcmVzaFBhZ2luYXRvcigpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5CZWhlZXJMYW5ndWFnZXNWaWV3TW9kZWwubGFuZ3VhZ2VzICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLlNlbGVjdGVkQmVoZWVyTGFuZ3VhZ2VWaWV3TW9kZWwgPSB0aGlzLkJlaGVlckxhbmd1YWdlc1ZpZXdNb2RlbC5sYW5ndWFnZXNbMF07XHJcbiAgICAgICAgdGhpcy5SZWZyZXNoUGFnaW5hdG9yKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICBpZiAoZXJyb3Iuc3RhdHVzID09IDQwMClcclxuICAgICAgICBhbGVydChlcnJvci5qc29uKCkpO1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBhbGVydCgnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcbiAgICAgICAgYWxlcnQoZXJyb3IpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2F2ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLkNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICB0aGlzLkJlaGVlckxhbmd1YWdlc1ZpZXdNb2RlbC5sb2dpblJlc3BvbnNlTW9kZWwgPSBuZXcgTG9naW5SZXNwb25zZU1vZGVsKHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLmN1cnJlbnRVc2VyVmFsdWUpO1xyXG5cclxuICAgIHRoaXMuVHJhbnNsYXRlQXBpQ2xpZW50LnNhdmVCZWhlZXJMYW5ndWFnZXNWaWV3TW9kZWwodGhpcy5CZWhlZXJMYW5ndWFnZXNWaWV3TW9kZWwpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLk9wZW5DaGFuZ2VzID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICBhbGVydCgnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcblxyXG4gICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5DaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBVcGRhdGVDaGFuZ2VkKGVudHJ5OiBCZWhlZXJMYW5ndWFnZXNFbnRyeVZpZXdNb2RlbCk6IHZvaWQge1xyXG4gICAgZW50cnkuY2hhbmdlZCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5TaG93U25hY2tCYXIoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTaG93U25hY2tCYXIoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuT3BlbkNoYW5nZXMpIHtcclxuICAgICAgdGhpcy5PcGVuQ2hhbmdlcyA9IHRydWU7XHJcblxyXG4gICAgICB2YXIgc25hY2sgPSB0aGlzLnNuYWNrQmFyLm9wZW4oXCJVbnNhdmVkIGNoYW5nZXMuLi5cIiwgXCJTYXZlXCIpO1xyXG5cclxuICAgICAgc25hY2sub25BY3Rpb24oKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuU2F2ZSgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBFeHBvcnQoKTogdm9pZCB7XHJcbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBDcmVhdGVFeHBvcnRSZXF1ZXN0KCk7XHJcblxyXG5cclxuICAgIHRoaXMuVHJhbnNsYXRlQXBpQ2xpZW50LmNyZWF0ZUV4cG9ydChyZXF1ZXN0KS5zdWJzY3JpYmUoKG1vZGVsOiBDcmVhdGVFeHBvcnRSZXNwb25zZSkgPT4ge1xyXG4gICAgICBhbGVydChtb2RlbC51cmwpO1xyXG5cclxuICAgIH0sIChlcnJvcjogUmVzcG9uc2UpID0+IHtcclxuICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PSA0MDApXHJcbiAgICAgICAgYWxlcnQoZXJyb3IuanNvbigpKTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgYWxlcnQoJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG4gICAgICAgIGFsZXJ0KGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgSW1wb3J0KCk6IHZvaWQge1xyXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVhZEV4cG9ydFJlcXVlc3QoKTtcclxuXHJcblxyXG4gICAgdGhpcy5UcmFuc2xhdGVBcGlDbGllbnQucmVhZEV4cG9ydChyZXF1ZXN0KS5zdWJzY3JpYmUoKCkgPT4ge1xyXG5cclxuICAgIH0sIChlcnJvcjogUmVzcG9uc2UpID0+IHtcclxuICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PSA0MDApXHJcbiAgICAgICAgYWxlcnQoZXJyb3IuanNvbigpKTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgYWxlcnQoJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG4gICAgICAgIGFsZXJ0KGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgSXNIVE1MKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuU2VsZWN0ZWRCZWhlZXJMYW5ndWFnZXNDYXRlZ29yeVZpZXdNb2RlbCAhPSBudWxsKSB7XHJcbiAgICAgIHZhciBzdWJjYXRzID0gdGhpcy5TZWxlY3RlZEJlaGVlckxhbmd1YWdlc0NhdGVnb3J5Vmlld01vZGVsLnN1YkNhdGVnb3JpZXM7XHJcblxyXG4gICAgICBpZiAoc3ViY2F0cyAhPSBudWxsKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdWJjYXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoc3ViY2F0c1tpXS5odG1sKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgR2V0TGFuZ3VhZ2VDb3VudCgpOiBudW1iZXIge1xyXG4gICAgdmFyIGNvdW50ID0gMDtcclxuICAgIGlmICh0aGlzLkJlaGVlckxhbmd1YWdlc1ZpZXdNb2RlbCAhPSBudWxsKSB7XHJcbiAgICAgIHZhciBsYW5ndWFnZXMgPSB0aGlzLkJlaGVlckxhbmd1YWdlc1ZpZXdNb2RlbC5sYW5ndWFnZXM7XHJcblxyXG4gICAgICBpZiAobGFuZ3VhZ2VzICE9IG51bGwpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhbmd1YWdlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKGxhbmd1YWdlc1tpXS5zZWxlY3RlZClcclxuICAgICAgICAgICAgY291bnQrKztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY291bnQ7XHJcbiAgfVxyXG59XHJcbiIsIjxhcHAtYmVoZWVyLW5hdj48L2FwcC1iZWhlZXItbmF2PlxyXG5cclxuPGFwcC1mYWItbG9hZGVyICpuZ0lmPVwiTG9hZGluZ1wiPjwvYXBwLWZhYi1sb2FkZXI+XHJcblxyXG48ZGl2ICpuZ0lmPVwiIUxvYWRpbmdcIj5cclxuICA8ZGl2IGNsYXNzPVwiZGlzcGxheWZsZXhcIiAjdGFibGVkaXYgKHdpbmRvdzpyZXNpemUpPVwib25SZXNpemUoJGV2ZW50KVwiPlxyXG4gICAgPGRpdj5cclxuICAgICAgPG1hdC1jYXJkIGNsYXNzPVwibWFpbi1iYXJcIj5cclxuICAgICAgICA8bWF0LWNhcmQtY29udGVudD5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwiZmlsbFwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPkdyb3VwPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwiU2VsZWN0ZWRCZWhlZXJMYW5ndWFnZXNDYXRlZ29yeVZpZXdNb2RlbFwiIChzZWxlY3Rpb25DaGFuZ2UpPVwidGhpcy5wYWdlSW5kZXggPSAwOyBSZWZyZXNoUGFnaW5hdG9yKCk7IFJlc2l6ZSgpO1wiPlxyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBjYXQgb2YgQmVoZWVyTGFuZ3VhZ2VzVmlld01vZGVsLmNhdGVnb3JpZXNcIiBbdmFsdWVdPVwiY2F0XCI+XHJcbiAgICAgICAgICAgICAgICB7eyBUcmFuc2xhdGlvbkNhdGVnb3J5W2NhdC50cmFuc2xhdGlvbkNhdGVnb3J5XSB9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCIhSXNIVE1MKClcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgbGFuZ3VhZ2Ugb2YgQmVoZWVyTGFuZ3VhZ2VzVmlld01vZGVsLmxhbmd1YWdlc1wiPlxyXG4gICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggWyhuZ01vZGVsKV09XCJsYW5ndWFnZS5zZWxlY3RlZFwiPlxyXG4gICAgICAgICAgICAgICAgPGZhYi1mbGFnIFtjb3VudHJ5XT1cImxhbmd1YWdlLmZsYWdcIj48L2ZhYi1mbGFnPiB7eyBsYW5ndWFnZS5uYW1lIH19XHJcbiAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cIklzSFRNTCgpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwiZmlsbFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+TGFuZ3VhZ2U8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cIlNlbGVjdGVkQmVoZWVyTGFuZ3VhZ2VWaWV3TW9kZWxcIiA+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgbGFuZ3VhZ2Ugb2YgQmVoZWVyTGFuZ3VhZ2VzVmlld01vZGVsLmxhbmd1YWdlc1wiIFt2YWx1ZV09XCJsYW5ndWFnZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZmFiLWZsYWcgW2NvdW50cnldPVwibGFuZ3VhZ2UuZmxhZ1wiPjwvZmFiLWZsYWc+IHt7IGxhbmd1YWdlLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8YnIgLz48YnIgLz5cclxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gKGNsaWNrKT1cIlNhdmUoKVwiIGNsYXNzPVwic2F2ZS1idXR0b25cIiBbZGlzYWJsZWRdPVwiIU9wZW5DaGFuZ2VzXCI+XHJcbiAgICAgICAgICAgIFNhdmVcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuICAgICAgPC9tYXQtY2FyZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPG1hdC1jYXJkIGNsYXNzPVwibWFpbi1iYXIgZmxleGF1dG9cIj5cclxuICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1heC1oZWlnaHRcIj5cclxuXHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiU2VsZWN0ZWRCZWhlZXJMYW5ndWFnZXNDYXRlZ29yeVZpZXdNb2RlbCAhPSBudWxsXCI+XHJcbiAgICAgICAgICAgIDxoMT57eyBUcmFuc2xhdGlvbkNhdGVnb3J5W1NlbGVjdGVkQmVoZWVyTGFuZ3VhZ2VzQ2F0ZWdvcnlWaWV3TW9kZWwudHJhbnNsYXRpb25DYXRlZ29yeV0gfX08L2gxPlxyXG5cclxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwiZnVsbC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJJc0hUTUwoKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjYXQtcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZhYi1mbGFnIFtjb3VudHJ5XT1cIlNlbGVjdGVkQmVoZWVyTGFuZ3VhZ2VWaWV3TW9kZWwuZmxhZ1wiPjwvZmFiLWZsYWc+IHt7IFNlbGVjdGVkQmVoZWVyTGFuZ3VhZ2VWaWV3TW9kZWwubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFJc0hUTUwoKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjJcIiBjbGFzcz1cImNhdC1yb3dcIj48L3RkPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBsYW5ndWFnZSBvZiBCZWhlZXJMYW5ndWFnZXNWaWV3TW9kZWwubGFuZ3VhZ2VzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY2F0LXJvd1wiICpuZ0lmPVwibGFuZ3VhZ2Uuc2VsZWN0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxmYWItZmxhZyBbY291bnRyeV09XCJsYW5ndWFnZS5mbGFnXCI+PC9mYWItZmxhZz4ge3sgbGFuZ3VhZ2UubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC90cj5cclxuXHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIklzSFRNTCgpXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzdWJjYXQgb2YgQWN0aXZlU3Vic1wiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBrZXkgb2Ygc3ViY2F0LmtleXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBsYW5ndWFnZSBvZiBCZWhlZXJMYW5ndWFnZXNWaWV3TW9kZWwubGFuZ3VhZ2VzOyBpbmRleCBhcyBpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cImxhbmd1YWdlID09IFNlbGVjdGVkQmVoZWVyTGFuZ3VhZ2VWaWV3TW9kZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFuZ3VsYXItZWRpdG9yIFtjb25maWddPVwiZWRpdG9yQ29uZmlnXCIgWyhuZ01vZGVsKV09XCJHZXRFbnRyeShrZXkuZW50cmllcywgbGFuZ3VhZ2UpLnZhbHVlXCIgKG5nTW9kZWxDaGFuZ2UpPVwiVXBkYXRlQ2hhbmdlZChHZXRFbnRyeShrZXkuZW50cmllcywgbGFuZ3VhZ2UpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hbmd1bGFyLWVkaXRvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFJc0hUTUwoKVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3ViY2F0IG9mIEFjdGl2ZVN1YnNcIj5cclxuICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBrZXkgb2Ygc3ViY2F0LmtleXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBUcmFuc2xhdGlvblN1YkNhdGVnb3J5W3N1YmNhdC50cmFuc2xhdGlvblN1YkNhdGVnb3J5XSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImtleS50ZXh0ICE9ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICh7eyBrZXkudGV4dCB9fSlcclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbGFuZ3VhZ2Ugb2YgQmVoZWVyTGFuZ3VhZ2VzVmlld01vZGVsLmxhbmd1YWdlczsgaW5kZXggYXMgaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwibGFuZ3VhZ2Uuc2VsZWN0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJmaWxsXCIgY2xhc3M9XCJmdWxsd2lkdGhcIiAqbmdJZj1cIkdldEVudHJ5KGtleS5lbnRyaWVzLCBsYW5ndWFnZSkgIT0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBUcmFuc2xhdGlvblN1YkNhdGVnb3J5W3N1YmNhdC50cmFuc2xhdGlvblN1YkNhdGVnb3J5XSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiR2V0RW50cnkoa2V5LmVudHJpZXMsIGxhbmd1YWdlKS52YWx1ZVwiIChrZXl1cCk9XCJVcGRhdGVDaGFuZ2VkKEdldEVudHJ5KGtleS5lbnRyaWVzLCBsYW5ndWFnZSkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8L3RyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPCEtLTxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpbHRlciBvZiBzdWJjYXQuZmlsdGVyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZmlsdGVyLmZpbHRlci50ZXh0IH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBsYW5ndWFnZSBvZiBCZWhlZXJMYW5ndWFnZXNWaWV3TW9kZWwubGFuZ3VhZ2VzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cImxhbmd1YWdlLnNlbGVjdGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJmaWxsXCIgY2xhc3M9XCJmdWxsd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnlbc3ViY2F0LnRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnldIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiR2V0RW50cnkoZmlsdGVyLmZpbHRlci5lbnRyaWVzLCBsYW5ndWFnZSkudmFsdWVcIiAoa2V5dXApPVwiVXBkYXRlQ2hhbmdlZChHZXRFbnRyeShmaWx0ZXIuZmlsdGVyLmVudHJpZXMsIGxhbmd1YWdlKSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyLm9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT57eyBvcHRpb24udGV4dCB9fTwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGxhbmd1YWdlIG9mIEJlaGVlckxhbmd1YWdlc1ZpZXdNb2RlbC5sYW5ndWFnZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJsYW5ndWFnZS5zZWxlY3RlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJmaWxsXCIgY2xhc3M9XCJmdWxsd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBUcmFuc2xhdGlvblN1YkNhdGVnb3J5W3N1YmNhdC50cmFuc2xhdGlvblN1YkNhdGVnb3J5XSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJHZXRFbnRyeShvcHRpb24uZW50cmllcywgbGFuZ3VhZ2UpLnZhbHVlXCIgKGtleXVwKT1cIlVwZGF0ZUNoYW5nZWQoR2V0RW50cnkob3B0aW9uLmVudHJpZXMsIGxhbmd1YWdlKSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj4tLT5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxtYXQtcGFnaW5hdG9yICNwYWdpbmF0b3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChwYWdlKT1cImhhbmRsZVBhZ2VFdmVudCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtsZW5ndGhdPVwiYW1vdW50TGVuZ3RoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJhbW91bnRQZXJQYWdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93Rmlyc3RMYXN0QnV0dG9uc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlUGFnZVNpemVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbcGFnZUluZGV4XT1cInBhZ2VJbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiU2VsZWN0IHBhZ2VcIj5cclxuICAgICAgICAgIDwvbWF0LXBhZ2luYXRvcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gICAgPC9tYXQtY2FyZD5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==