@mediusinc/mng-commons 0.21.1 → 1.0.0-rc.1

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 (75) hide show
  1. package/assets/i18n/en.json +20 -2
  2. package/assets/i18n/sl.json +18 -1
  3. package/esm2020/lib/api/services/crud-api.abstract.service.mjs +9 -2
  4. package/esm2020/lib/api/services/get-all-api.abstract.service.mjs +9 -2
  5. package/esm2020/lib/components/action/action.component.mjs +12 -8
  6. package/esm2020/lib/components/action/editor/action-editor.component.mjs +22 -3
  7. package/esm2020/lib/components/action/index.mjs +2 -1
  8. package/esm2020/lib/components/action/localization/data-language-dropdown.component.mjs +45 -0
  9. package/esm2020/lib/components/action/models/action-component.model.mjs +2 -0
  10. package/esm2020/lib/components/action/models/action-execution.model.mjs +5 -1
  11. package/esm2020/lib/components/action/models/index.mjs +2 -1
  12. package/esm2020/lib/components/form/editor/form-editor.component.mjs +35 -11
  13. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +17 -7
  14. package/esm2020/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +72 -4
  15. package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +8 -1
  16. package/esm2020/lib/components/tableview/table/column-value/column-value.component.mjs +9 -8
  17. package/esm2020/lib/components/tableview/table/table.component.mjs +11 -7
  18. package/esm2020/lib/data-providers/editor.data-provider.mjs +1 -1
  19. package/esm2020/lib/data-providers/table.data-provider.mjs +2 -2
  20. package/esm2020/lib/data-providers/tableview-crud.data-provider.mjs +3 -3
  21. package/esm2020/lib/data-providers/tableview.data-provider.mjs +2 -16
  22. package/esm2020/lib/descriptors/action.descriptor.mjs +15 -3
  23. package/esm2020/lib/descriptors/column.descriptor.mjs +20 -1
  24. package/esm2020/lib/descriptors/editor.descriptor.mjs +41 -2
  25. package/esm2020/lib/descriptors/field.descriptor.mjs +44 -2
  26. package/esm2020/lib/descriptors/table.descriptor.mjs +19 -1
  27. package/esm2020/lib/descriptors/tableview.descriptor.mjs +24 -4
  28. package/esm2020/lib/directives/component.directive.mjs +2 -2
  29. package/esm2020/lib/mng-commons.module.mjs +11 -7
  30. package/esm2020/lib/models/config.model.mjs +1 -1
  31. package/esm2020/lib/pipes/index.mjs +2 -1
  32. package/esm2020/lib/pipes/mngLocaleDefaultRowClass.pipe.mjs +26 -0
  33. package/esm2020/lib/services/action-executor.service.mjs +1 -1
  34. package/esm2020/lib/services/commons.service.mjs +27 -1
  35. package/esm2020/lib/utils/action-data-provider.util.mjs +2 -2
  36. package/esm2020/lib/utils/editor-formly.util.mjs +10 -1
  37. package/esm2020/lib/utils/i18n.util.mjs +2 -2
  38. package/esm2020/lib/utils/notification.util.mjs +6 -1
  39. package/fesm2015/mediusinc-mng-commons.mjs +4688 -4303
  40. package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
  41. package/fesm2020/mediusinc-mng-commons.mjs +4637 -4258
  42. package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
  43. package/lib/api/services/crud-api.abstract.service.d.ts +2 -2
  44. package/lib/api/services/get-all-api.abstract.service.d.ts +2 -2
  45. package/lib/components/action/action.component.d.ts +5 -3
  46. package/lib/components/action/index.d.ts +1 -0
  47. package/lib/components/action/localization/data-language-dropdown.component.d.ts +25 -0
  48. package/lib/components/action/models/action-component.model.d.ts +15 -0
  49. package/lib/components/action/models/action-execution.model.d.ts +4 -2
  50. package/lib/components/action/models/index.d.ts +1 -0
  51. package/lib/components/form/editor/form-editor.component.d.ts +8 -1
  52. package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +4 -1
  53. package/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +6 -1
  54. package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +1 -0
  55. package/lib/components/tableview/table/table.component.d.ts +4 -3
  56. package/lib/data-providers/editor.data-provider.d.ts +4 -4
  57. package/lib/data-providers/table.data-provider.d.ts +5 -5
  58. package/lib/data-providers/tableview.data-provider.d.ts +7 -11
  59. package/lib/descriptors/action.descriptor.d.ts +11 -6
  60. package/lib/descriptors/column.descriptor.d.ts +5 -0
  61. package/lib/descriptors/editor.descriptor.d.ts +21 -0
  62. package/lib/descriptors/field.descriptor.d.ts +10 -0
  63. package/lib/descriptors/table.descriptor.d.ts +6 -0
  64. package/lib/descriptors/tableview.descriptor.d.ts +7 -0
  65. package/lib/mng-commons.module.d.ts +44 -42
  66. package/lib/models/config.model.d.ts +1 -0
  67. package/lib/pipes/index.d.ts +1 -0
  68. package/lib/pipes/mngLocaleDefaultRowClass.pipe.d.ts +10 -0
  69. package/lib/services/commons.service.d.ts +5 -0
  70. package/lib/utils/notification.util.d.ts +1 -0
  71. package/{mediusinc-mng-commons-0.21.1.tgz → mediusinc-mng-commons-1.0.0-rc.1.tgz} +0 -0
  72. package/package.json +1 -1
  73. package/scss/mng-overrides/_theme_datatable.scss +6 -0
  74. package/scss/mng-overrides/_theme_forms.scss +8 -0
  75. package/version-info.json +5 -5
@@ -92,6 +92,32 @@ export class MngCommonsService {
92
92
  getOrInitLanguage() {
93
93
  return this.appLanguage || this.initLanguage();
94
94
  }
95
+ get appDataLanguages() {
96
+ return this.moduleConfig?.app?.dataLanguages ?? ['en'];
97
+ }
98
+ get appDataLanguageDefault() {
99
+ return this.appDataLanguages[0];
100
+ }
101
+ get appDataLanguage() {
102
+ const dataLang = this.localStorage.getItem('dataLang');
103
+ if (dataLang && this.appDataLanguages.some(dl => dl === dataLang)) {
104
+ return dataLang;
105
+ }
106
+ return this.defaultDataLanguage;
107
+ }
108
+ set appDataLanguage(dataLanguage) {
109
+ if (dataLanguage === null) {
110
+ this.localStorage.removeItem('dataLang');
111
+ return;
112
+ }
113
+ if (this.appDataLanguages.some(dl => dl === dataLanguage)) {
114
+ this.localStorage.setItem('dataLang', dataLanguage);
115
+ }
116
+ }
117
+ // We assume, that default data language is the first one from the array of all available data languages
118
+ get defaultDataLanguage() {
119
+ return this.appDataLanguages[0];
120
+ }
95
121
  get appVersion() {
96
122
  return this.moduleConfig?.app?.version;
97
123
  }
@@ -417,4 +443,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
417
443
  type: Inject,
418
444
  args: [MNG_BROWSER_STORAGE_IT]
419
445
  }] }]; } });
420
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9ucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9jb21tb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUF5QixhQUFhLEVBQVMsTUFBTSxpQkFBaUIsQ0FBQztBQUk5RSxPQUFPLEVBQUMsZUFBZSxFQUFjLGFBQWEsRUFBRSxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFDdkYsT0FBTyxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUd6RCxPQUFPLEVBQUMsc0JBQXNCLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSxVQUFVLENBQUM7Ozs7OztBQUd0RSxNQUFNLE9BQU8saUJBQWlCO0lBZ0MxQixZQUNZLE1BQWMsRUFDZCxhQUE0QixFQUM1QixTQUEyQixFQUMzQixZQUFtQixFQUNuQixhQUE0QixFQUNFLFlBQTZCLEVBQzNCLFlBQXFCO1FBTnJELFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixpQkFBWSxHQUFaLFlBQVksQ0FBTztRQUNuQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUNFLGlCQUFZLEdBQVosWUFBWSxDQUFpQjtRQUMzQixpQkFBWSxHQUFaLFlBQVksQ0FBUztRQWxDakUsT0FBTztRQUNDLGNBQVMsR0FBOEMsU0FBUyxDQUFDO1FBQ2pFLHFCQUFnQixHQUF1RCxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0csZUFBVSxHQUFrQixFQUFFLENBQUM7UUFDL0Isb0JBQWUsR0FBRyxLQUFLLENB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SUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFckQsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7OzhHQXJkUSxpQkFBaUIsdUpBc0NkLG9CQUFvQixhQUNwQixzQkFBc0I7a0hBdkN6QixpQkFBaUI7MkZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVTs7MEJBdUNGLE1BQU07MkJBQUMsb0JBQW9COzhCQUMwQixPQUFPOzBCQUE1RCxNQUFNOzJCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VGl0bGV9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0ZpbHRlclNlcnZpY2UsIFByaW1lTkdDb25maWd9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaWx0ZXIsIG1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge0ZpbHRlck1hdGNoTW9kZUVudW19IGZyb20gJy4uL2Rlc2NyaXB0b3JzL3R5cGVzJztcbmltcG9ydCB7SVVzZXIsIE1uZ01lbnVJdGVtLCBNbmdNb2R1bGVDb25maWd9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge01uZ0JyZWFkY3J1bWJNZW51SXRlbSwgTW5nUm91dGVyRGF0YX0gZnJvbSAnLi4vcm91dGVyL21vZGVscyc7XG5pbXBvcnQge01OR19CUk9XU0VSX1NUT1JBR0VfSVQsIE1OR19NT0RVTEVfQ09ORklHX0lUfSBmcm9tICcuL3Rva2Vucyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNbmdDb21tb25zU2VydmljZSB7XG4gICAgLy8gaW50ZXJuYWxcbiAgICBwcml2YXRlIHJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIHRyYW5zbGF0ZUxhbmdDaGFuZ2VTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgICAvLyBtZW51XG4gICAgcHJpdmF0ZSBfbWVudU1vZGU6ICdzdGF0aWMnIHwgJ3NpZGViYXInIHwgJ3NsaW0nIHwgJ292ZXJsYXknID0gJ3NpZGViYXInO1xuICAgIHByaXZhdGUgX21lbnVNb2RlU3ViamVjdDogU3ViamVjdDwnc3RhdGljJyB8ICdzaWRlYmFyJyB8ICdzbGltJyB8ICdvdmVybGF5Jz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMuX21lbnVNb2RlKTtcbiAgICBwcml2YXRlIF9tZW51SXRlbXM6IE1uZ01lbnVJdGVtW10gPSBbXTtcbiAgICBwcml2YXRlIF9tZW51UGluRW5hYmxlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX21lbnVTaWRlYmFyU2xpbSA9IGZhbHNlO1xuICAgIHByaXZhdGUgX21lbnVBY3RpdmVLZXlTdWJqZWN0ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICAgIHByaXZhdGUgX21lbnVSZXNldFN1YmplY3QgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgLy8gYnJlYWRjcnVtYnNcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJyZWFkY3J1bWJIb21lU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TW5nTWVudUl0ZW0gfCBudWxsPih7XG4gICAgICAgIGljb246ICdwaSBwaS1ob21lJyxcbiAgICAgICAgcm91dGVyTGluazogJy8nXG4gICAgfSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBicmVhZGNydW1ic1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1uZ01lbnVJdGVtW10+KFtdKTtcbiAgICBwcml2YXRlIGJyZWFkY3J1bWJzVHJhbnNsYXRlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgYnJlYWRjcnVtYkhvbWVUcmFuc2xhdGVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgICAvLyB2aXN1YWxcbiAgICBwcml2YXRlIF9jb2xvclNjaGVtZTogJ2xpZ2h0JyB8ICdkYXJrJyA9ICdsaWdodCc7XG5cbiAgICAvLyB1c2VyXG4gICAgcHJpdmF0ZSBfdXNlcj86IElVc2VyO1xuICAgIHByaXZhdGUgdXNlclN1YmplY3Q6IFN1YmplY3Q8SVVzZXIgfCB1bmRlZmluZWQ+ID0gbmV3IFJlcGxheVN1YmplY3QoMSk7XG4gICAgcHJpdmF0ZSBfdXNlclJvbGVzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgcHJpdmF0ZSB1c2VyUm9sZXNTdWJqZWN0OiBTdWJqZWN0PEFycmF5PHN0cmluZz4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxzdHJpbmc+PihbXSk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSBwcmltZW5nQ29uZmlnOiBQcmltZU5HQ29uZmlnLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0aXRsZVNlcnZpY2U6IFRpdGxlLFxuICAgICAgICBwcml2YXRlIGZpbHRlclNlcnZpY2U6IEZpbHRlclNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoTU5HX01PRFVMRV9DT05GSUdfSVQpIHByaXZhdGUgbW9kdWxlQ29uZmlnOiBNbmdNb2R1bGVDb25maWcsXG4gICAgICAgIEBJbmplY3QoTU5HX0JST1dTRVJfU1RPUkFHRV9JVCkgcHJpdmF0ZSBsb2NhbFN0b3JhZ2U6IFN0b3JhZ2VcbiAgICApIHt9XG5cbiAgICAvLyBBUFAgc2VjdGlvblxuXG4gICAgcHVibGljIGdldCBhcHBOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2R1bGVDb25maWc/LmFwcD8ubmFtZSA/PyAnYXBwLm5hbWUnO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYXBwT3duZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZHVsZUNvbmZpZz8uYXBwPy5vd25lciA/PyAnYXBwLm93bmVyJztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFwcExvZ29MaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kdWxlQ29uZmlnPy5hcHA/LmxvZ29QYXRoTGlnaHQgPyB0aGlzLm1vZHVsZUNvbmZpZy5hcHAubG9nb1BhdGhMaWdodCA6IHRoaXMubW9kdWxlQ29uZmlnPy5hcHA/LmxvZ29QYXRoID8/ICdhc3NldHMvbGF5b3V0L2ltYWdlcy9sb2dvLnBuZyc7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhcHBMb2dvRGFyaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kdWxlQ29uZmlnPy5hcHA/LmxvZ29QYXRoRGFyayA/IHRoaXMubW9kdWxlQ29uZmlnLmFwcC5sb2dvUGF0aERhcmsgOiB0aGlzLm1vZHVsZUNvbmZpZz8uYXBwPy5sb2dvUGF0aCA/PyAnYXNzZXRzL2xheW91dC9pbWFnZXMvbG9nby5wbmcnO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYXBwTG9nb05hbWVMaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kdWxlQ29uZmlnPy5hcHA/LmxvZ29OYW1lUGF0aExpZ2h0XG4gICAgICAgICAgICA/IHRoaXMubW9kdWxlQ29uZmlnLmFwcC5sb2dvTmFtZVBhdGhMaWdodFxuICAgICAgICAgICAgOiB0aGlzLm1vZHVsZUNvbmZpZz8uYXBwPy5sb2dvTmFtZVBhdGggPz8gJ2Fzc2V0cy9sYXlvdXQvaW1hZ2VzL2xvZ28tYXBwbmFtZS5wbmcnO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYXBwTG9nb05hbWVEYXJrKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2R1bGVDb25maWc/LmFwcD8ubG9nb05hbWVQYXRoRGFyayA/IHRoaXMubW9kdWxlQ29uZmlnLmFwcC5sb2dvTmFtZVBhdGhEYXJrIDogdGhpcy5tb2R1bGVDb25maWc/LmFwcD8ubG9nb05hbWVQYXRoID8/ICdhc3NldHMvbGF5b3V0L2ltYWdlcy9sb2dvLWFwcG5hbWUucG5nJztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFwcExhbmd1YWdlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kdWxlQ29uZmlnPy5hcHA/Lmxhbmd1YWdlcyA/PyBbJ2VuJ107XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhcHBMYW5ndWFnZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgY29uc3QgbHNMYW5nID0gdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbGFuZycpO1xuICAgICAgICBpZiAobHNMYW5nICYmIHRoaXMuYXBwTGFuZ3VhZ2VzLnNvbWUobCA9PiBsID09PSBsc0xhbmcpKSB7XG4gICAgICAgICAgICByZXR1cm4gbHNMYW5nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgYXBwTGFuZ3VhZ2UobGFuZ3VhZ2U6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgaWYgKGxhbmd1YWdlID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdsYW5nJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYXBwTGFuZ3VhZ2VzLnNvbWUobCA9PiBsID09PSBsYW5ndWFnZSkpIHtcbiAgICAgICAgICAgIHRoaXMubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2xhbmcnLCBsYW5ndWFnZSk7XG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZS51c2UobGFuZ3VhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGluaXRMYW5ndWFnZSgpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBicm93c2VyTGFuZyA9IHRoaXMudHJhbnNsYXRlLmdldEJyb3dzZXJMYW5nKCk7XG4gICAgICAgIGlmIChicm93c2VyTGFuZyAmJiB0aGlzLmFwcExhbmd1YWdlcy5zb21lKGwgPT4gbCA9PT0gYnJvd3NlckxhbmcpKSB7XG4gICAgICAgICAgICB0aGlzLmFwcExhbmd1YWdlID0gYnJvd3Nlckxhbmc7XG4gICAgICAgICAgICByZXR1cm4gYnJvd3Nlckxhbmc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVmYXVsdExhbmd1YWdlID0gdGhpcy5hcHBMYW5ndWFnZXM/Lmxlbmd0aCA+IDAgPyB0aGlzLmFwcExhbmd1YWdlc1swXSA6ICdlbic7XG4gICAgICAgIHRoaXMuYXBwTGFuZ3VhZ2UgPSBkZWZhdWx0TGFuZ3VhZ2U7XG4gICAgICAgIHJldHVybiBkZWZhdWx0TGFuZ3VhZ2U7XG4gICAgfVxuXG4gICAgcHVibGljIGdldE9ySW5pdExhbmd1YWdlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwcExhbmd1YWdlIHx8IHRoaXMuaW5pdExhbmd1YWdlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhcHBWZXJzaW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2R1bGVDb25maWc/LmFwcD8udmVyc2lvbjtcbiAgICB9XG5cbiAgICAvLyBNRU5VIHNlY3Rpb25cblxuICAgIHB1YmxpYyBnZXQgbWVudU1vZGVJc1N0YXRpYygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lbnVNb2RlID09PSAnc3RhdGljJztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1lbnVNb2RlSXNTdGF0aWMkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWVudU1vZGVTdWJqZWN0LnBpcGUobWFwKGUgPT4gZSA9PT0gJ3N0YXRpYycpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1lbnVNb2RlSXNPdmVybGF5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWVudU1vZGUgPT09ICdvdmVybGF5JztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1lbnVNb2RlSXNPdmVybGF5JCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lbnVNb2RlU3ViamVjdC5waXBlKG1hcChlID0+IGUgPT09ICdvdmVybGF5JykpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWVudU1vZGVJc1NsaW0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZW51TW9kZSA9PT0gJ3NsaW0nO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWVudU1vZGVJc1NsaW0kKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWVudU1vZGVTdWJqZWN0LnBpcGUobWFwKGUgPT4gZSA9PT0gJ3NsaW0nKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtZW51TW9kZUlzU2lkZWJhcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lbnVNb2RlID09PSAnc2lkZWJhcic7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtZW51TW9kZUlzU2lkZWJhciQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZW51TW9kZVN1YmplY3QucGlwZShtYXAoZSA9PiBlID09PSAnc2lkZWJhcicpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1lbnVBY3RpdmVLZXkkKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZW51QWN0aXZlS2V5U3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1lbnVSZXNldCQoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lbnVSZXNldFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtZW51SXRlbXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZW51SXRlbXM7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBtZW51SXRlbXMobWVudUl0ZW1zOiBNbmdNZW51SXRlbVtdKSB7XG4gICAgICAgIHRoaXMuX21lbnVJdGVtcyA9IG1lbnVJdGVtcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1lbnVQaW5FbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWVudVBpbkVuYWJsZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtZW51U2lkZWJhclNsaW0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZW51U2lkZWJhclNsaW07XG4gICAgfVxuXG4gICAgLy8gQlJFQURDUlVNQiBzZWN0aW9uXG4gICAgcHVibGljIGdldCBicmVhZGNydW1iSG9tZSQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJyZWFkY3J1bWJIb21lU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGJyZWFkY3J1bWJzJCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnJlYWRjcnVtYnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8vIFZJU1VBTCBzZWN0aW9uXG5cbiAgICBwdWJsaWMgZ2V0IGNvbG9yU2NoZW1lSXNMaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbG9yU2NoZW1lID09PSAnbGlnaHQnO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29sb3JTY2hlbWVJc0RhcmsoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2xvclNjaGVtZSA9PT0gJ2RhcmsnO1xuICAgIH1cblxuICAgIC8vIFVTRVIgc2VjdGlvblxuXG4gICAgcHVibGljIGdldCB1c2VyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdXNlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHVzZXIodXNlcjogSVVzZXIgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fdXNlciA9IHVzZXI7XG4gICAgICAgIHRoaXMudXNlclN1YmplY3QubmV4dCh1c2VyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHVzZXIkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy51c2VyU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHVzZXJSb2xlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJSb2xlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHVzZXJSb2xlcyhyb2xlczogQXJyYXk8c3RyaW5nPikge1xuICAgICAgICB0aGlzLl91c2VyUm9sZXMgPSByb2xlcztcbiAgICAgICAgdGhpcy51c2VyUm9sZXNTdWJqZWN0Lm5leHQocm9sZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdXNlclJvbGVzJCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlclJvbGVzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXQoKSB7XG4gICAgICAgIHRoaXMuX21lbnVNb2RlID0gdGhpcy5tb2R1bGVDb25maWc/Lm1lbnU/Lm1vZGUgPz8gJ3NpZGViYXInO1xuICAgICAgICB0aGlzLl9tZW51TW9kZVN1YmplY3QubmV4dCh0aGlzLl9tZW51TW9kZSk7XG4gICAgICAgIHRoaXMuX21lbnVJdGVtcyA9IHRoaXMubW9kdWxlQ29uZmlnPy5tZW51Py5tZW51SXRlbXMgPz8gW107XG4gICAgICAgIHRoaXMuX21lbnVQaW5FbmFibGVkID0gdGhpcy5tb2R1bGVDb25maWc/Lm1lbnU/LnBpbkVuYWJsZWQgPz8gZmFsc2U7XG4gICAgICAgIHRoaXMuX21lbnVTaWRlYmFyU2xpbSA9IHRoaXMubW9kdWxlQ29uZmlnPy5tZW51Py5zaWRlYmFyU2xpbSA/PyBmYWxzZTtcblxuICAgICAgICAvLyB2aXN1YWxcbiAgICAgICAgdGhpcy5fY29sb3JTY2hlbWUgPSB0aGlzLm1vZHVsZUNvbmZpZz8uYXBwPy5jb2xvclNjaGVtZSA/PyAnbGlnaHQnO1xuXG4gICAgICAgIC8vIHJpcHBsZVxuICAgICAgICB0aGlzLnByaW1lbmdDb25maWcucmlwcGxlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wcmltZW5nQ29uZmlnLmZpbHRlck1hdGNoTW9kZU9wdGlvbnMgPSB7XG4gICAgICAgICAgICB0ZXh0OiBbRmlsdGVyTWF0Y2hNb2RlRW51bS5Db250YWlucywgRmlsdGVyTWF0Y2hNb2RlRW51bS5FcXVhbHMsIEZpbHRlck1hdGNoTW9kZUVudW0uTm90RXF1YWxzLCBGaWx0ZXJNYXRjaE1vZGVFbnVtLlN0YXJ0c1dpdGgsIEZpbHRlck1hdGNoTW9kZUVudW0uRW5kc1dpdGhdLFxuICAgICAgICAgICAgbnVtZXJpYzogW0ZpbHRlck1hdGNoTW9kZUVudW0uRXF1YWxzLCBGaWx0ZXJNYXRjaE1vZGVFbnVtLk5vdEVxdWFscywgRmlsdGVyTWF0Y2hNb2RlRW51bS5MZXNzVGhhbiwgRmlsdGVyTWF0Y2hNb2RlRW51bS5HcmVhdGVyVGhhbl0sXG4gICAgICAgICAgICBkYXRlOiBbRmlsdGVyTWF0Y2hNb2RlRW51bS5EYXRlSXMsIEZpbHRlck1hdGNoTW9kZUVudW0uRGF0ZUJlZm9yZSwgRmlsdGVyTWF0Y2hNb2RlRW51bS5EYXRlQWZ0ZXIsIEZpbHRlck1hdGNoTW9kZUVudW0uQmV0d2Vlbl1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyB0cmFuc2xhdGVcbiAgICAgICAgdGhpcy50cmFuc2xhdGUubGFuZ3MgPSB0aGlzLmFwcExhbmd1YWdlcztcbiAgICAgICAgY29uc3QgbGFuZyA9IHRoaXMuZ2V0T3JJbml0TGFuZ3VhZ2UoKTtcbiAgICAgICAgdGhpcy50cmFuc2xhdGUudXNlKGxhbmcpO1xuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5nZXQoJ21uZ1ByaW1lJykuc3Vic2NyaWJlKHZhbHVlID0+IHRoaXMucHJpbWVuZ0NvbmZpZy5zZXRUcmFuc2xhdGlvbih2YWx1ZSkpO1xuXG4gICAgICAgIHRoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbiA9IHRoaXMucm91dGVyLmV2ZW50c1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgLy8gRmlsdGVyIHRoZSBOYXZpZ2F0aW9uRW5kIGV2ZW50cyBhcyB0aGUgYnJlYWRjcnVtYiBpcyB1cGRhdGVkIG9ubHkgd2hlbiB0aGUgcm91dGUgcmVhY2hlcyBpdHMgZW5kXG4gICAgICAgICAgICAgICAgZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQnJlYWRjcnVtYnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFBhZ2VUaXRsZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlTGFuZ0NoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy50cmFuc2xhdGVMYW5nQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy50cmFuc2xhdGUub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUJyZWFkY3J1bWJzKCk7XG4gICAgICAgICAgICB0aGlzLnNldFBhZ2VUaXRsZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBNRU5VIGFjdGlvbnNcblxuICAgIG1lbnVDaGFuZ2VBY3RpdmVLZXkoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbWVudUFjdGl2ZUtleVN1YmplY3QubmV4dChrZXkpO1xuICAgIH1cblxuICAgIG1lbnVSZXNldCgpIHtcbiAgICAgICAgdGhpcy5fbWVudVJlc2V0U3ViamVjdC5uZXh0KG51bGwpO1xuICAgIH1cblxuICAgIC8vIEJSRUFEQ1JVTUIgYWN0aW9uc1xuICAgIHB1YmxpYyBmaW5kQnJlYWRjcnVtYkl0ZW0oaXRlbTogTW5nTWVudUl0ZW0pOiBNbmdNZW51SXRlbSB8IG51bGwge1xuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuYnJlYWRjcnVtYnNTdWJqZWN0LnZhbHVlO1xuICAgICAgICBpZiAoaXRlbS5pZCkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zLmZpbmQoaSA9PiBpLmlkICYmIGkuaWQgPT09IGl0ZW0uaWQpID8/IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS5yb3V0ZXJMaW5rKSB7XG4gICAgICAgICAgICBjb25zdCByb3V0ZXJMaW5rU3RyID0gQXJyYXkuaXNBcnJheShpdGVtLnJvdXRlckxpbmspID8gaXRlbS5yb3V0ZXJMaW5rLmpvaW4oJy8nKSA6IGl0ZW0ucm91dGVyTGluaztcbiAgICAgICAgICAgIHJldHVybiBpdGVtcy5maW5kKGkgPT4gaS5yb3V0ZXJMaW5rICYmIChBcnJheS5pc0FycmF5KGkucm91dGVyTGluaykgPyBpLnJvdXRlckxpbmsuam9pbignLycpIDogaS5yb3V0ZXJMaW5rKSA9PT0gcm91dGVyTGlua1N0cikgPz8gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLnBvc2l0aW9uSW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtcy5maW5kKGkgPT4gaS5wb3NpdGlvbkluZGV4ICYmIGkucG9zaXRpb25JbmRleCA9PT0gaS5wb3NpdGlvbkluZGV4KSA/PyBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0ubGFiZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtcy5maW5kKGkgPT4gaS5sYWJlbCAmJiBpLmxhYmVsID09PSBpLmxhYmVsKSA/PyBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uaWNvbikge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zLmZpbmQoaSA9PiBpLmljb24gJiYgaS5pY29uID09PSBpLmljb24pID8/IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZUJyZWFkY3J1bWJJdGVtKGl0ZW06IE1uZ01lbnVJdGVtKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gWy4uLnRoaXMuYnJlYWRjcnVtYnNTdWJqZWN0LnZhbHVlXTtcbiAgICAgICAgbGV0IHBvc0lkeCA9IC0xO1xuICAgICAgICBpZiAoaXRlbS5pZCkge1xuICAgICAgICAgICAgcG9zSWR4ID0gaXRlbXMuZmluZEluZGV4KGkgPT4gaS5pZCAmJiBpLmlkID09PSBpdGVtLmlkKTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLnJvdXRlckxpbmspIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlckxpbmtTdHIgPSBBcnJheS5pc0FycmF5KGl0ZW0ucm91dGVyTGluaykgPyBpdGVtLnJvdXRlckxpbmsuam9pbignLycpIDogaXRlbS5yb3V0ZXJMaW5rO1xuICAgICAgICAgICAgcG9zSWR4ID0gaXRlbXMuZmluZEluZGV4KGkgPT4gaS5yb3V0ZXJMaW5rICYmIChBcnJheS5pc0FycmF5KGkucm91dGVyTGluaykgPyBpLnJvdXRlckxpbmsuam9pbignLycpIDogaS5yb3V0ZXJMaW5rKSA9PT0gcm91dGVyTGlua1N0cik7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS5wb3NpdGlvbkluZGV4KSB7XG4gICAgICAgICAgICBwb3NJZHggPSBpdGVtcy5maW5kSW5kZXgoaSA9PiBpLnBvc2l0aW9uSW5kZXggJiYgaS5wb3NpdGlvbkluZGV4ID09PSBpLnBvc2l0aW9uSW5kZXgpO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0ubGFiZWwpIHtcbiAgICAgICAgICAgIHBvc0lkeCA9IGl0ZW1zLmZpbmRJbmRleChpID0+IGkubGFiZWwgJiYgaS5sYWJlbCA9PT0gaS5sYWJlbCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS5pY29uKSB7XG4gICAgICAgICAgICBwb3NJZHggPSBpdGVtcy5maW5kSW5kZXgoaSA9PiBpLmljb24gJiYgaS5pY29uID09PSBpLmljb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBvc0lkeCA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGl0ZW1zW3Bvc0lkeF0gPSB7XG4gICAgICAgICAgICAuLi5pdGVtc1twb3NJZHhdLFxuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIHVwZGF0ZWQ6IHRydWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmJyZWFkY3J1bWJzU3ViamVjdC5uZXh0KGl0ZW1zKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUJyZWFkY3J1bWJzKCkge1xuICAgICAgICBpZiAodGhpcy5icmVhZGNydW1ic1RyYW5zbGF0ZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5icmVhZGNydW1ic1RyYW5zbGF0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5icmVhZGNydW1ic1RyYW5zbGF0ZVN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5icmVhZGNydW1iSG9tZVRyYW5zbGF0ZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5icmVhZGNydW1iSG9tZVRyYW5zbGF0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5icmVhZGNydW1iSG9tZVRyYW5zbGF0ZVN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJvb3RSb3V0ZSA9IHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90LnJvb3Q7XG5cbiAgICAgICAgY29uc3QgaG9tZUJyZWFkY3J1bWIgPSB0aGlzLmdlbmVyYXRlSG9tZUJyZWFkY3J1bWIocm9vdFJvdXRlKTtcbiAgICAgICAgaWYgKGhvbWVCcmVhZGNydW1iKSB7XG4gICAgICAgICAgICBpZiAoaG9tZUJyZWFkY3J1bWIubGFiZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJIb21lVHJhbnNsYXRlU3Vic2NyaXB0aW9uID0gdGhpcy50cmFuc2xhdGUuZ2V0KGhvbWVCcmVhZGNydW1iLmxhYmVsKS5zdWJzY3JpYmUoaTE4biA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGhvbWVCcmVhZGNydW1iLmxhYmVsID0gaTE4bjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icmVhZGNydW1iSG9tZVN1YmplY3QubmV4dChob21lQnJlYWRjcnVtYik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYkhvbWVTdWJqZWN0Lm5leHQoaG9tZUJyZWFkY3J1bWIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnJlYWRjcnVtYnM6IE1uZ01lbnVJdGVtW10gPSBbXTtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUJyZWFkY3J1bWJzKHJvb3RSb3V0ZSwgW10sIGJyZWFkY3J1bWJzKTtcblxuICAgICAgICBicmVhZGNydW1icy5mb3JFYWNoKChiLCBpZHgpID0+IHtcbiAgICAgICAgICAgIGIucG9zaXRpb25JbmRleCA9IGlkeDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgaTE4bktleXM6IEFycmF5PHN0cmluZz4gPSBicmVhZGNydW1icy5maWx0ZXIoYiA9PiB0eXBlb2YgYi5sYWJlbCA9PT0gJ3N0cmluZycpLm1hcChiID0+IGIubGFiZWwhKTtcbiAgICAgICAgaWYgKGkxOG5LZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYnNUcmFuc2xhdGVTdWJzY3JpcHRpb24gPSB0aGlzLnRyYW5zbGF0ZS5nZXQoaTE4bktleXMpLnN1YnNjcmliZShpMThuID0+IHtcbiAgICAgICAgICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIGJyZWFkY3J1bWIgaGllcmFyY2h5XG4gICAgICAgICAgICAgICAgYnJlYWRjcnVtYnMuZm9yRWFjaChiID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGIubGFiZWwgJiYgaTE4bltiLmxhYmVsXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYi5sYWJlbCA9IGkxOG5bYi5sYWJlbF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8vIEVtaXQgdGhlIG5ldyBicmVhZGNydW1ic1xuICAgICAgICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYnNTdWJqZWN0Lm5leHQoYnJlYWRjcnVtYnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJzU3ViamVjdC5uZXh0KGJyZWFkY3J1bWJzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVIb21lQnJlYWRjcnVtYihyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB8IG51bGwpOiBNbmdNZW51SXRlbSB8IG51bGwge1xuICAgICAgICBpZiAoIXJvdXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJvdXRlRGF0YSA9IHJvdXRlLmRhdGEgYXMgTW5nUm91dGVyRGF0YTtcbiAgICAgICAgY29uc3QgYnJlYWRjcnVtYlJvdXRlRGF0YSA9IHJvdXRlRGF0YT8uYnJlYWRjcnVtYjtcbiAgICAgICAgaWYgKGJyZWFkY3J1bWJSb3V0ZURhdGEgJiYgdHlwZW9mIGJyZWFkY3J1bWJSb3V0ZURhdGEgPT09ICdvYmplY3QnICYmICdpc0hvbWUnIGluIGJyZWFkY3J1bWJSb3V0ZURhdGEpIHtcbiAgICAgICAgICAgIGlmIChicmVhZGNydW1iUm91dGVEYXRhLmlzSG9tZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJyZWFkY3J1bWIgPSB0aGlzLmNyZWF0ZUJyZWFkY3J1bWIoJy8nLCBicmVhZGNydW1iUm91dGVEYXRhLCB0cnVlKTtcbiAgICAgICAgICAgIGlmIChicmVhZGNydW1iKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBicmVhZGNydW1iLmljb24gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFkY3J1bWIuaWNvbiA9ICdwaSBwaS1ob21lJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJyZWFkY3J1bWI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZUhvbWVCcmVhZGNydW1iKHJvdXRlLmZpcnN0Q2hpbGQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVCcmVhZGNydW1icyhyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB8IG51bGwsIHBhcmVudFVybFNlZ21lbnRzOiBzdHJpbmdbXSwgYnJlYWRjcnVtYnM6IE1uZ01lbnVJdGVtW10pIHtcbiAgICAgICAgaWYgKCFyb3V0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgcm91dGVEYXRhID0gcm91dGUuZGF0YSBhcyBNbmdSb3V0ZXJEYXRhO1xuICAgICAgICBjb25zdCByb3V0ZVVybFNlZ21lbnRzID0gcGFyZW50VXJsU2VnbWVudHMuY29uY2F0KHJvdXRlLnVybC5tYXAodXJsID0+IHVybC5wYXRoKSk7XG4gICAgICAgIGNvbnN0IHJvdXRlVXJsID0gYC8ke3JvdXRlVXJsU2VnbWVudHMuam9pbignLycpfWA7XG4gICAgICAgIGlmIChyb3V0ZURhdGE/LmJyZWFkY3J1bWIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJyZWFkY3J1bWJSb3V0ZURhdGEgPSByb3V0ZURhdGEuYnJlYWRjcnVtYjtcblxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYnJlYWRjcnVtYlJvdXRlRGF0YSkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGJyZWFkY3J1bWJSb3V0ZURhdGFJdGVtIG9mIGJyZWFkY3J1bWJSb3V0ZURhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYnJlYWRjcnVtYiA9IHRoaXMuY3JlYXRlQnJlYWRjcnVtYihyb3V0ZVVybCwgYnJlYWRjcnVtYlJvdXRlRGF0YUl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYnJlYWRjcnVtYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWRjcnVtYnMucHVzaChicmVhZGNydW1iKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGJyZWFkY3J1bWJSb3V0ZURhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBicmVhZGNydW1icy5wdXNoKC4uLmJyZWFkY3J1bWJSb3V0ZURhdGEocm91dGVVcmwsIHJvdXRlKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJyZWFkY3J1bWIgPSB0aGlzLmNyZWF0ZUJyZWFkY3J1bWIocm91dGVVcmwsIGJyZWFkY3J1bWJSb3V0ZURhdGEpO1xuICAgICAgICAgICAgICAgIGlmIChicmVhZGNydW1iKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFkY3J1bWJzLnB1c2goYnJlYWRjcnVtYik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVCcmVhZGNydW1icyhyb3V0ZS5maXJzdENoaWxkLCByb3V0ZVVybFNlZ21lbnRzLCBicmVhZGNydW1icyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVCcmVhZGNydW1iKHJvdXRlVXJsOiBzdHJpbmcsIHJvdXRlQnJlYWRjcnVtYjogc3RyaW5nIHwgTW5nQnJlYWRjcnVtYk1lbnVJdGVtLCBpbmNsdWRlSG9tZSA9IGZhbHNlKTogTW5nTWVudUl0ZW0gfCBudWxsIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdCcmVhZGNydW1iID0gdGhpcy5maW5kQnJlYWRjcnVtYkl0ZW0oe3JvdXRlckxpbms6IHJvdXRlVXJsfSk7XG4gICAgICAgIGlmIChleGlzdGluZ0JyZWFkY3J1bWI/LnVwZGF0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBleGlzdGluZ0JyZWFkY3J1bWI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiByb3V0ZUJyZWFkY3J1bWIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAvLyBjaGVjayBmb3IgdXBkYXRlZCBleGlzdGluZyBicmVhZGNydW1iXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGlkOiByb3V0ZVVybCxcbiAgICAgICAgICAgICAgICBsYWJlbDogcm91dGVCcmVhZGNydW1iLFxuICAgICAgICAgICAgICAgIHJvdXRlckxpbms6IHJvdXRlVXJsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFpbmNsdWRlSG9tZSAmJiB0eXBlb2Ygcm91dGVCcmVhZGNydW1iLmlzSG9tZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAvLyBob21lIHNob3VsZCBub3QgYmUgaW5jbHVkZWRcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygcm91dGVCcmVhZGNydW1iLnJvdXRlckxpbmsgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcm91dGVCcmVhZGNydW1iLnJvdXRlckxpbmsgPSByb3V0ZVVybDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJvdXRlQnJlYWRjcnVtYi5pZCA9IHJvdXRlVXJsO1xuICAgICAgICAgICAgcmV0dXJuIHJvdXRlQnJlYWRjcnVtYjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRJVExFIHNlY3Rpb25cblxuICAgIHB1YmxpYyBzZXRQYWdlVGl0bGUodGl0bGU/OiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IGN1cnJlbnRSb3V0ZSA9IHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90LnJvb3Q7XG4gICAgICAgIHdoaWxlIChjdXJyZW50Um91dGUuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgY3VycmVudFJvdXRlID0gY3VycmVudFJvdXRlLmZpcnN0Q2hpbGQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb3V0ZURhdGEgPSBjdXJyZW50Um91dGUuZGF0YSBhcyBNbmdSb3V0ZXJEYXRhO1xuICAgICAgICBjb25zdCBwYWdlVGl0bGUgPSB0aXRsZSA/PyByb3V0ZURhdGEucGFnZVRpdGxlO1xuXG4gICAgICAgIHRoaXMudGl0bGVTZXJ2aWNlLnNldFRpdGxlKHRoaXMuZm9ybWF0UGFnZVRpdGxlKHBhZ2VUaXRsZSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9ybWF0UGFnZVRpdGxlKHRpdGxlUHJlZml4Pzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHRpdGxlUGllY2VzID0gW107XG5cbiAgICAgICAgaWYgKHRpdGxlUHJlZml4KSB7XG4gICAgICAgICAgICB0aXRsZVBpZWNlcy5wdXNoKHRoaXMudHJhbnNsYXRlLmluc3RhbnQodGl0bGVQcmVmaXgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRpdGxlUGllY2VzLnB1c2godGhpcy50cmFuc2xhdGUuaW5zdGFudCgnYXBwLm5hbWUnKSk7XG5cbiAgICAgICAgcmV0dXJuIHRpdGxlUGllY2VzLmpvaW4oJyAtICcpO1xuICAgIH1cbn1cbiJdfQ==
446
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9ucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9jb21tb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUF5QixhQUFhLEVBQVMsTUFBTSxpQkFBaUIsQ0FBQztBQUk5RSxPQUFPLEVBQUMsZUFBZSxFQUFjLGFBQWEsRUFBRSxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFDdkYsT0FBTyxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUd6RCxPQUFPLEVBQUMsc0JBQXNCLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSxVQUFVLENBQUM7Ozs7OztBQUd0RSxNQUFNLE9BQU8saUJBQWlCO0lBZ0MxQixZQUNZLE1BQWMsRUFDZCxhQUE0QixFQUM1QixTQUEyQixFQUMzQixZQUFtQixFQUNuQixhQUE0QixFQUNFLFlBQTZCLEVBQzNCLFlBQXFCO1FBTnJELFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixpQkFBWSxHQUFaLFlBQVksQ0FBTztRQUNuQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUNFLGlCQUFZLEdBQVosWUFBWSxDQUFpQjtRQUMzQixpQkFBWSxHQUFaLFlBQVksQ0FBUztRQWxDakUsT0FBTztRQUNDLGNBQVMsR0FBOEMsU0FBUyxDQUFDO1FBQ2pFLHFCQUFnQixHQUF1RCxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0csZUFBVSxHQUFrQixFQUFFLENBQUM7UUFDL0Isb0JBQWUsR0FBRyxLQUFLLENB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QyxDQUFDO0lBQ25DLENBQUM7OzhHQXBmUSxpQkFBaUIsdUpBc0NkLG9CQUFvQixhQUNwQixzQkFBc0I7a0hBdkN6QixpQkFBaUI7MkZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVTs7MEJBdUNGLE1BQU07MkJBQUMsb0JBQW9COzhCQUMwQixPQUFPOzBCQUE1RCxNQUFNOzJCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VGl0bGV9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0ZpbHRlclNlcnZpY2UsIFByaW1lTkdDb25maWd9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaWx0ZXIsIG1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge0ZpbHRlck1hdGNoTW9kZUVudW19IGZyb20gJy4uL2Rlc2NyaXB0b3JzL3R5cGVzJztcbmltcG9ydCB7SVVzZXIsIE1uZ01lbnVJdGVtLCBNbmdNb2R1bGVDb25maWd9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge01uZ0JyZWFkY3J1bWJNZW51SXRlbSwgTW5nUm91dGVyRGF0YX0gZnJvbSAnLi4vcm91dGVyL21vZGVscyc7XG5pbXBvcnQge01OR19CUk9XU0VSX1NUT1JBR0VfSVQsIE1OR19NT0RVTEVfQ09ORklHX0lUfSBmcm9tICcuL3Rva2Vucyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNbmdDb21tb25zU2VydmljZSB7XG4gICAgLy8gaW50ZXJuYWxcbiAgICBwcml2YXRlIHJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIHRyYW5zbGF0ZUxhbmdDaGFuZ2VTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgICAvLyBtZW51XG4gICAgcHJpdmF0ZSBfbWVudU1vZGU6ICdzdGF0aWMnIHwgJ3NpZGViYXInIHwgJ3NsaW0nIHwgJ292ZXJsYXknID0gJ3NpZGViYXInO1xuICAgIHByaXZhdGUgX21lbnVNb2RlU3ViamVjdDogU3ViamVjdDwnc3RhdGljJyB8ICdzaWRlYmFyJyB8ICdzbGltJyB8ICdvdmVybGF5Jz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMuX21lbnVNb2RlKTtcbiAgICBwcml2YXRlIF9tZW51SXRlbXM6IE1uZ01lbnVJdGVtW10gPSBbXTtcbiAgICBwcml2YXRlIF9tZW51UGluRW5hYmxlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX21lbnVTaWRlYmFyU2xpbSA9IGZhbHNlO1xuICAgIHByaXZhdGUgX21lbnVBY3RpdmVLZXlTdWJqZWN0ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICAgIHByaXZhdGUgX21lbnVSZXNldFN1YmplY3QgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgLy8gYnJlYWRjcnVtYnNcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJyZWFkY3J1bWJIb21lU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TW5nTWVudUl0ZW0gfCBudWxsPih7XG4gICAgICAgIGljb246ICdwaSBwaS1ob21lJyxcbiAgICAgICAgcm91dGVyTGluazogJy8nXG4gICAgfSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBicmVhZGNydW1ic1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1uZ01lbnVJdGVtW10+KFtdKTtcbiAgICBwcml2YXRlIGJyZWFkY3J1bWJzVHJhbnNsYXRlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgYnJlYWRjcnVtYkhvbWVUcmFuc2xhdGVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgICAvLyB2aXN1YWxcbiAgICBwcml2YXRlIF9jb2xvclNjaGVtZTogJ2xpZ2h0JyB8ICdkYXJrJyA9ICdsaWdodCc7XG5cbiAgICAvLyB1c2VyXG4gICAgcHJpdmF0ZSBfdXNlcj86IElVc2VyO1xuICAgIHByaXZhdGUgdXNlclN1YmplY3Q6IFN1YmplY3Q8SVVzZXIgfCB1bmRlZmluZWQ+ID0gbmV3IFJlcGxheVN1YmplY3QoMSk7XG4gICAgcHJpdmF0ZSBfdXNlclJvbGVzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgcHJpdmF0ZSB1c2VyUm9sZXNTdWJqZWN0OiBTdWJqZWN0PEFycmF5PHN0cmluZz4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxzdHJpbmc+PihbXSk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSBwcmltZW5nQ29uZmlnOiBQcmltZU5HQ29uZmlnLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0aXRsZVNlcnZpY2U6IFRpdGxlLFxuICAgICAgICBwcml2YXRlIGZpbHRlclNlcnZpY2U6IEZpbHRlclNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoTU5HX01PRFVMRV9DT05GSUdfSVQpIHByaXZhdGUgbW9kdWxlQ29uZmlnOiBNbmdNb2R1bGVDb25maWcsXG4gICAgICAgIEBJbmplY3QoTU5HX0JST1dTRVJfU1RPUkFHRV9JVCkgcHJpdmF0ZSBsb2NhbFN0b3JhZ2U6IFN0b3JhZ2VcbiAgICApIHt9XG5cbiAgICAvLyBBUFAgc2VjdGlvblxuXG4gICAgcHVibGljIGdldCBhcHBOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2R1bGVDb25maWc/LmFwcD8ubmFtZSA/PyAnYXBwLm5hbWUnO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYXBwT3duZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZHVsZUNvbmZpZz8uYXBwPy5vd25lciA/PyAnYXBwLm93bmVyJztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFwcExvZ29MaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kdWxlQ29uZmlnPy5hcHA/LmxvZ29QYXRoTGlnaHQgPyB0aGlzLm1vZHVsZUNvbmZpZy5hcHAubG9nb1BhdGhMaWdodCA6IHRoaXMubW9kdWxlQ29uZmlnPy5hcHA/LmxvZ29QYXRoID8/ICdhc3NldHMvbGF5b3V0L2ltYWdlcy9sb2dvLnBuZyc7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhcHBMb2dvRGFyaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kdWxlQ29uZmlnPy5hcHA/LmxvZ29QYXRoRGFyayA/IHRoaXMubW9kdWxlQ29uZmlnLmFwcC5sb2dvUGF0aERhcmsgOiB0aGlzLm1vZHVsZUNvbmZpZz8uYXBwPy5sb2dvUGF0aCA/PyAnYXNzZXRzL2xheW91dC9pbWFnZXMvbG9nby5wbmcnO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYXBwTG9nb05hbWVMaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kdWxlQ29uZmlnPy5hcHA/LmxvZ29OYW1lUGF0aExpZ2h0XG4gICAgICAgICAgICA/IHRoaXMubW9kdWxlQ29uZmlnLmFwcC5sb2dvTmFtZVBhdGhMaWdodFxuICAgICAgICAgICAgOiB0aGlzLm1vZHVsZUNvbmZpZz8uYXBwPy5sb2dvTmFtZVBhdGggPz8gJ2Fzc2V0cy9sYXlvdXQvaW1hZ2VzL2xvZ28tYXBwbmFtZS5wbmcnO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYXBwTG9nb05hbWVEYXJrKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2R1bGVDb25maWc/LmFwcD8ubG9nb05hbWVQYXRoRGFyayA/IHRoaXMubW9kdWxlQ29uZmlnLmFwcC5sb2dvTmFtZVBhdGhEYXJrIDogdGhpcy5tb2R1bGVDb25maWc/LmFwcD8ubG9nb05hbWVQYXRoID8/ICdhc3NldHMvbGF5b3V0L2ltYWdlcy9sb2dvLWFwcG5hbWUucG5nJztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFwcExhbmd1YWdlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kdWxlQ29uZmlnPy5hcHA/Lmxhbmd1YWdlcyA/PyBbJ2VuJ107XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhcHBMYW5ndWFnZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgY29uc3QgbHNMYW5nID0gdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbGFuZycpO1xuICAgICAgICBpZiAobHNMYW5nICYmIHRoaXMuYXBwTGFuZ3VhZ2VzLnNvbWUobCA9PiBsID09PSBsc0xhbmcpKSB7XG4gICAgICAgICAgICByZXR1cm4gbHNMYW5nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgYXBwTGFuZ3VhZ2UobGFuZ3VhZ2U6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgaWYgKGxhbmd1YWdlID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdsYW5nJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYXBwTGFuZ3VhZ2VzLnNvbWUobCA9PiBsID09PSBsYW5ndWFnZSkpIHtcbiAgICAgICAgICAgIHRoaXMubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2xhbmcnLCBsYW5ndWFnZSk7XG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZS51c2UobGFuZ3VhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGluaXRMYW5ndWFnZSgpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBicm93c2VyTGFuZyA9IHRoaXMudHJhbnNsYXRlLmdldEJyb3dzZXJMYW5nKCk7XG4gICAgICAgIGlmIChicm93c2VyTGFuZyAmJiB0aGlzLmFwcExhbmd1YWdlcy5zb21lKGwgPT4gbCA9PT0gYnJvd3NlckxhbmcpKSB7XG4gICAgICAgICAgICB0aGlzLmFwcExhbmd1YWdlID0gYnJvd3Nlckxhbmc7XG4gICAgICAgICAgICByZXR1cm4gYnJvd3Nlckxhbmc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVmYXVsdExhbmd1YWdlID0gdGhpcy5hcHBMYW5ndWFnZXM/Lmxlbmd0aCA+IDAgPyB0aGlzLmFwcExhbmd1YWdlc1swXSA6ICdlbic7XG4gICAgICAgIHRoaXMuYXBwTGFuZ3VhZ2UgPSBkZWZhdWx0TGFuZ3VhZ2U7XG4gICAgICAgIHJldHVybiBkZWZhdWx0TGFuZ3VhZ2U7XG4gICAgfVxuXG4gICAgcHVibGljIGdldE9ySW5pdExhbmd1YWdlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwcExhbmd1YWdlIHx8IHRoaXMuaW5pdExhbmd1YWdlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhcHBEYXRhTGFuZ3VhZ2VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2R1bGVDb25maWc/LmFwcD8uZGF0YUxhbmd1YWdlcyA/PyBbJ2VuJ107XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhcHBEYXRhTGFuZ3VhZ2VEZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcHBEYXRhTGFuZ3VhZ2VzWzBdO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYXBwRGF0YUxhbmd1YWdlKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBjb25zdCBkYXRhTGFuZyA9IHRoaXMubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2RhdGFMYW5nJyk7XG4gICAgICAgIGlmIChkYXRhTGFuZyAmJiB0aGlzLmFwcERhdGFMYW5ndWFnZXMuc29tZShkbCA9PiBkbCA9PT0gZGF0YUxhbmcpKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YUxhbmc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdERhdGFMYW5ndWFnZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGFwcERhdGFMYW5ndWFnZShkYXRhTGFuZ3VhZ2U6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgaWYgKGRhdGFMYW5ndWFnZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnZGF0YUxhbmcnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5hcHBEYXRhTGFuZ3VhZ2VzLnNvbWUoZGwgPT4gZGwgPT09IGRhdGFMYW5ndWFnZSkpIHtcbiAgICAgICAgICAgIHRoaXMubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2RhdGFMYW5nJywgZGF0YUxhbmd1YWdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFdlIGFzc3VtZSwgdGhhdCBkZWZhdWx0IGRhdGEgbGFuZ3VhZ2UgaXMgdGhlIGZpcnN0IG9uZSBmcm9tIHRoZSBhcnJheSBvZiBhbGwgYXZhaWxhYmxlIGRhdGEgbGFuZ3VhZ2VzXG4gICAgcHVibGljIGdldCBkZWZhdWx0RGF0YUxhbmd1YWdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcHBEYXRhTGFuZ3VhZ2VzWzBdO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYXBwVmVyc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kdWxlQ29uZmlnPy5hcHA/LnZlcnNpb247XG4gICAgfVxuXG4gICAgLy8gTUVOVSBzZWN0aW9uXG5cbiAgICBwdWJsaWMgZ2V0IG1lbnVNb2RlSXNTdGF0aWMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZW51TW9kZSA9PT0gJ3N0YXRpYyc7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtZW51TW9kZUlzU3RhdGljJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lbnVNb2RlU3ViamVjdC5waXBlKG1hcChlID0+IGUgPT09ICdzdGF0aWMnKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtZW51TW9kZUlzT3ZlcmxheSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lbnVNb2RlID09PSAnb3ZlcmxheSc7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtZW51TW9kZUlzT3ZlcmxheSQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZW51TW9kZVN1YmplY3QucGlwZShtYXAoZSA9PiBlID09PSAnb3ZlcmxheScpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1lbnVNb2RlSXNTbGltKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWVudU1vZGUgPT09ICdzbGltJztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1lbnVNb2RlSXNTbGltJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lbnVNb2RlU3ViamVjdC5waXBlKG1hcChlID0+IGUgPT09ICdzbGltJykpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWVudU1vZGVJc1NpZGViYXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZW51TW9kZSA9PT0gJ3NpZGViYXInO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWVudU1vZGVJc1NpZGViYXIkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWVudU1vZGVTdWJqZWN0LnBpcGUobWFwKGUgPT4gZSA9PT0gJ3NpZGViYXInKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtZW51QWN0aXZlS2V5JCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWVudUFjdGl2ZUtleVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtZW51UmVzZXQkKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZW51UmVzZXRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWVudUl0ZW1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWVudUl0ZW1zO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgbWVudUl0ZW1zKG1lbnVJdGVtczogTW5nTWVudUl0ZW1bXSkge1xuICAgICAgICB0aGlzLl9tZW51SXRlbXMgPSBtZW51SXRlbXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtZW51UGluRW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lbnVQaW5FbmFibGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWVudVNpZGViYXJTbGltKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWVudVNpZGViYXJTbGltO1xuICAgIH1cblxuICAgIC8vIEJSRUFEQ1JVTUIgc2VjdGlvblxuICAgIHB1YmxpYyBnZXQgYnJlYWRjcnVtYkhvbWUkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5icmVhZGNydW1iSG9tZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBicmVhZGNydW1icyQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJyZWFkY3J1bWJzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICAvLyBWSVNVQUwgc2VjdGlvblxuXG4gICAgcHVibGljIGdldCBjb2xvclNjaGVtZUlzTGlnaHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2xvclNjaGVtZSA9PT0gJ2xpZ2h0JztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbG9yU2NoZW1lSXNEYXJrKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sb3JTY2hlbWUgPT09ICdkYXJrJztcbiAgICB9XG5cbiAgICAvLyBVU0VSIHNlY3Rpb25cblxuICAgIHB1YmxpYyBnZXQgdXNlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXI7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCB1c2VyKHVzZXI6IElVc2VyIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3VzZXIgPSB1c2VyO1xuICAgICAgICB0aGlzLnVzZXJTdWJqZWN0Lm5leHQodXNlcik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB1c2VyJCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB1c2VyUm9sZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyUm9sZXM7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCB1c2VyUm9sZXMocm9sZXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICAgICAgdGhpcy5fdXNlclJvbGVzID0gcm9sZXM7XG4gICAgICAgIHRoaXMudXNlclJvbGVzU3ViamVjdC5uZXh0KHJvbGVzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHVzZXJSb2xlcyQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJSb2xlc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc2V0KCkge1xuICAgICAgICB0aGlzLl9tZW51TW9kZSA9IHRoaXMubW9kdWxlQ29uZmlnPy5tZW51Py5tb2RlID8/ICdzaWRlYmFyJztcbiAgICAgICAgdGhpcy5fbWVudU1vZGVTdWJqZWN0Lm5leHQodGhpcy5fbWVudU1vZGUpO1xuICAgICAgICB0aGlzLl9tZW51SXRlbXMgPSB0aGlzLm1vZHVsZUNvbmZpZz8ubWVudT8ubWVudUl0ZW1zID8/IFtdO1xuICAgICAgICB0aGlzLl9tZW51UGluRW5hYmxlZCA9IHRoaXMubW9kdWxlQ29uZmlnPy5tZW51Py5waW5FbmFibGVkID8/IGZhbHNlO1xuICAgICAgICB0aGlzLl9tZW51U2lkZWJhclNsaW0gPSB0aGlzLm1vZHVsZUNvbmZpZz8ubWVudT8uc2lkZWJhclNsaW0gPz8gZmFsc2U7XG5cbiAgICAgICAgLy8gdmlzdWFsXG4gICAgICAgIHRoaXMuX2NvbG9yU2NoZW1lID0gdGhpcy5tb2R1bGVDb25maWc/LmFwcD8uY29sb3JTY2hlbWUgPz8gJ2xpZ2h0JztcblxuICAgICAgICAvLyByaXBwbGVcbiAgICAgICAgdGhpcy5wcmltZW5nQ29uZmlnLnJpcHBsZSA9IHRydWU7XG4gICAgICAgIHRoaXMucHJpbWVuZ0NvbmZpZy5maWx0ZXJNYXRjaE1vZGVPcHRpb25zID0ge1xuICAgICAgICAgICAgdGV4dDogW0ZpbHRlck1hdGNoTW9kZUVudW0uQ29udGFpbnMsIEZpbHRlck1hdGNoTW9kZUVudW0uRXF1YWxzLCBGaWx0ZXJNYXRjaE1vZGVFbnVtLk5vdEVxdWFscywgRmlsdGVyTWF0Y2hNb2RlRW51bS5TdGFydHNXaXRoLCBGaWx0ZXJNYXRjaE1vZGVFbnVtLkVuZHNXaXRoXSxcbiAgICAgICAgICAgIG51bWVyaWM6IFtGaWx0ZXJNYXRjaE1vZGVFbnVtLkVxdWFscywgRmlsdGVyTWF0Y2hNb2RlRW51bS5Ob3RFcXVhbHMsIEZpbHRlck1hdGNoTW9kZUVudW0uTGVzc1RoYW4sIEZpbHRlck1hdGNoTW9kZUVudW0uR3JlYXRlclRoYW5dLFxuICAgICAgICAgICAgZGF0ZTogW0ZpbHRlck1hdGNoTW9kZUVudW0uRGF0ZUlzLCBGaWx0ZXJNYXRjaE1vZGVFbnVtLkRhdGVCZWZvcmUsIEZpbHRlck1hdGNoTW9kZUVudW0uRGF0ZUFmdGVyLCBGaWx0ZXJNYXRjaE1vZGVFbnVtLkJldHdlZW5dXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gdHJhbnNsYXRlXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmxhbmdzID0gdGhpcy5hcHBMYW5ndWFnZXM7XG4gICAgICAgIGNvbnN0IGxhbmcgPSB0aGlzLmdldE9ySW5pdExhbmd1YWdlKCk7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlLnVzZShsYW5nKTtcbiAgICAgICAgdGhpcy50cmFuc2xhdGUuZ2V0KCdtbmdQcmltZScpLnN1YnNjcmliZSh2YWx1ZSA9PiB0aGlzLnByaW1lbmdDb25maWcuc2V0VHJhbnNsYXRpb24odmFsdWUpKTtcblxuICAgICAgICB0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5yb3V0ZXJFdmVudHNTdWJzY3JpcHRpb24gPSB0aGlzLnJvdXRlci5ldmVudHNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIC8vIEZpbHRlciB0aGUgTmF2aWdhdGlvbkVuZCBldmVudHMgYXMgdGhlIGJyZWFkY3J1bWIgaXMgdXBkYXRlZCBvbmx5IHdoZW4gdGhlIHJvdXRlIHJlYWNoZXMgaXRzIGVuZFxuICAgICAgICAgICAgICAgIGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUJyZWFkY3J1bWJzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRQYWdlVGl0bGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRyYW5zbGF0ZUxhbmdDaGFuZ2VTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlTGFuZ0NoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMudHJhbnNsYXRlLm9uTGFuZ0NoYW5nZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVCcmVhZGNydW1icygpO1xuICAgICAgICAgICAgdGhpcy5zZXRQYWdlVGl0bGUoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gTUVOVSBhY3Rpb25zXG5cbiAgICBtZW51Q2hhbmdlQWN0aXZlS2V5KGtleTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21lbnVBY3RpdmVLZXlTdWJqZWN0Lm5leHQoa2V5KTtcbiAgICB9XG5cbiAgICBtZW51UmVzZXQoKSB7XG4gICAgICAgIHRoaXMuX21lbnVSZXNldFN1YmplY3QubmV4dChudWxsKTtcbiAgICB9XG5cbiAgICAvLyBCUkVBRENSVU1CIGFjdGlvbnNcbiAgICBwdWJsaWMgZmluZEJyZWFkY3J1bWJJdGVtKGl0ZW06IE1uZ01lbnVJdGVtKTogTW5nTWVudUl0ZW0gfCBudWxsIHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLmJyZWFkY3J1bWJzU3ViamVjdC52YWx1ZTtcbiAgICAgICAgaWYgKGl0ZW0uaWQpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtcy5maW5kKGkgPT4gaS5pZCAmJiBpLmlkID09PSBpdGVtLmlkKSA/PyBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0ucm91dGVyTGluaykge1xuICAgICAgICAgICAgY29uc3Qgcm91dGVyTGlua1N0ciA9IEFycmF5LmlzQXJyYXkoaXRlbS5yb3V0ZXJMaW5rKSA/IGl0ZW0ucm91dGVyTGluay5qb2luKCcvJykgOiBpdGVtLnJvdXRlckxpbms7XG4gICAgICAgICAgICByZXR1cm4gaXRlbXMuZmluZChpID0+IGkucm91dGVyTGluayAmJiAoQXJyYXkuaXNBcnJheShpLnJvdXRlckxpbmspID8gaS5yb3V0ZXJMaW5rLmpvaW4oJy8nKSA6IGkucm91dGVyTGluaykgPT09IHJvdXRlckxpbmtTdHIpID8/IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS5wb3NpdGlvbkluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbXMuZmluZChpID0+IGkucG9zaXRpb25JbmRleCAmJiBpLnBvc2l0aW9uSW5kZXggPT09IGkucG9zaXRpb25JbmRleCkgPz8gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLmxhYmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbXMuZmluZChpID0+IGkubGFiZWwgJiYgaS5sYWJlbCA9PT0gaS5sYWJlbCkgPz8gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLmljb24pIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtcy5maW5kKGkgPT4gaS5pY29uICYmIGkuaWNvbiA9PT0gaS5pY29uKSA/PyBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVCcmVhZGNydW1iSXRlbShpdGVtOiBNbmdNZW51SXRlbSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLmJyZWFkY3J1bWJzU3ViamVjdC52YWx1ZV07XG4gICAgICAgIGxldCBwb3NJZHggPSAtMTtcbiAgICAgICAgaWYgKGl0ZW0uaWQpIHtcbiAgICAgICAgICAgIHBvc0lkeCA9IGl0ZW1zLmZpbmRJbmRleChpID0+IGkuaWQgJiYgaS5pZCA9PT0gaXRlbS5pZCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS5yb3V0ZXJMaW5rKSB7XG4gICAgICAgICAgICBjb25zdCByb3V0ZXJMaW5rU3RyID0gQXJyYXkuaXNBcnJheShpdGVtLnJvdXRlckxpbmspID8gaXRlbS5yb3V0ZXJMaW5rLmpvaW4oJy8nKSA6IGl0ZW0ucm91dGVyTGluaztcbiAgICAgICAgICAgIHBvc0lkeCA9IGl0ZW1zLmZpbmRJbmRleChpID0+IGkucm91dGVyTGluayAmJiAoQXJyYXkuaXNBcnJheShpLnJvdXRlckxpbmspID8gaS5yb3V0ZXJMaW5rLmpvaW4oJy8nKSA6IGkucm91dGVyTGluaykgPT09IHJvdXRlckxpbmtTdHIpO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0ucG9zaXRpb25JbmRleCkge1xuICAgICAgICAgICAgcG9zSWR4ID0gaXRlbXMuZmluZEluZGV4KGkgPT4gaS5wb3NpdGlvbkluZGV4ICYmIGkucG9zaXRpb25JbmRleCA9PT0gaS5wb3NpdGlvbkluZGV4KTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLmxhYmVsKSB7XG4gICAgICAgICAgICBwb3NJZHggPSBpdGVtcy5maW5kSW5kZXgoaSA9PiBpLmxhYmVsICYmIGkubGFiZWwgPT09IGkubGFiZWwpO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uaWNvbikge1xuICAgICAgICAgICAgcG9zSWR4ID0gaXRlbXMuZmluZEluZGV4KGkgPT4gaS5pY29uICYmIGkuaWNvbiA9PT0gaS5pY29uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwb3NJZHggPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpdGVtc1twb3NJZHhdID0ge1xuICAgICAgICAgICAgLi4uaXRlbXNbcG9zSWR4XSxcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICB1cGRhdGVkOiB0cnVlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5icmVhZGNydW1ic1N1YmplY3QubmV4dChpdGVtcyk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVCcmVhZGNydW1icygpIHtcbiAgICAgICAgaWYgKHRoaXMuYnJlYWRjcnVtYnNUcmFuc2xhdGVTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYnNUcmFuc2xhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYnNUcmFuc2xhdGVTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYnJlYWRjcnVtYkhvbWVUcmFuc2xhdGVTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYkhvbWVUcmFuc2xhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYkhvbWVUcmFuc2xhdGVTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb290Um91dGUgPSB0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC5yb290O1xuXG4gICAgICAgIGNvbnN0IGhvbWVCcmVhZGNydW1iID0gdGhpcy5nZW5lcmF0ZUhvbWVCcmVhZGNydW1iKHJvb3RSb3V0ZSk7XG4gICAgICAgIGlmIChob21lQnJlYWRjcnVtYikge1xuICAgICAgICAgICAgaWYgKGhvbWVCcmVhZGNydW1iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icmVhZGNydW1iSG9tZVRyYW5zbGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMudHJhbnNsYXRlLmdldChob21lQnJlYWRjcnVtYi5sYWJlbCkuc3Vic2NyaWJlKGkxOG4gPT4ge1xuICAgICAgICAgICAgICAgICAgICBob21lQnJlYWRjcnVtYi5sYWJlbCA9IGkxOG47XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYkhvbWVTdWJqZWN0Lm5leHQoaG9tZUJyZWFkY3J1bWIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJIb21lU3ViamVjdC5uZXh0KGhvbWVCcmVhZGNydW1iKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJyZWFkY3J1bWJzOiBNbmdNZW51SXRlbVtdID0gW107XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVCcmVhZGNydW1icyhyb290Um91dGUsIFtdLCBicmVhZGNydW1icyk7XG5cbiAgICAgICAgYnJlYWRjcnVtYnMuZm9yRWFjaCgoYiwgaWR4KSA9PiB7XG4gICAgICAgICAgICBiLnBvc2l0aW9uSW5kZXggPSBpZHg7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGkxOG5LZXlzOiBBcnJheTxzdHJpbmc+ID0gYnJlYWRjcnVtYnMuZmlsdGVyKGIgPT4gdHlwZW9mIGIubGFiZWwgPT09ICdzdHJpbmcnKS5tYXAoYiA9PiBiLmxhYmVsISk7XG4gICAgICAgIGlmIChpMThuS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJzVHJhbnNsYXRlU3Vic2NyaXB0aW9uID0gdGhpcy50cmFuc2xhdGUuZ2V0KGkxOG5LZXlzKS5zdWJzY3JpYmUoaTE4biA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQ29uc3RydWN0IHRoZSBicmVhZGNydW1iIGhpZXJhcmNoeVxuICAgICAgICAgICAgICAgIGJyZWFkY3J1bWJzLmZvckVhY2goYiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChiLmxhYmVsICYmIGkxOG5bYi5sYWJlbF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGIubGFiZWwgPSBpMThuW2IubGFiZWxdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyBFbWl0IHRoZSBuZXcgYnJlYWRjcnVtYnNcbiAgICAgICAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJzU3ViamVjdC5uZXh0KGJyZWFkY3J1bWJzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5icmVhZGNydW1ic1N1YmplY3QubmV4dChicmVhZGNydW1icyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlSG9tZUJyZWFkY3J1bWIocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBudWxsKTogTW5nTWVudUl0ZW0gfCBudWxsIHtcbiAgICAgICAgaWYgKCFyb3V0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb3V0ZURhdGEgPSByb3V0ZS5kYXRhIGFzIE1uZ1JvdXRlckRhdGE7XG4gICAgICAgIGNvbnN0IGJyZWFkY3J1bWJSb3V0ZURhdGEgPSByb3V0ZURhdGE/LmJyZWFkY3J1bWI7XG4gICAgICAgIGlmIChicmVhZGNydW1iUm91dGVEYXRhICYmIHR5cGVvZiBicmVhZGNydW1iUm91dGVEYXRhID09PSAnb2JqZWN0JyAmJiAnaXNIb21lJyBpbiBicmVhZGNydW1iUm91dGVEYXRhKSB7XG4gICAgICAgICAgICBpZiAoYnJlYWRjcnVtYlJvdXRlRGF0YS5pc0hvbWUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBicmVhZGNydW1iID0gdGhpcy5jcmVhdGVCcmVhZGNydW1iKCcvJywgYnJlYWRjcnVtYlJvdXRlRGF0YSwgdHJ1ZSk7XG4gICAgICAgICAgICBpZiAoYnJlYWRjcnVtYikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYnJlYWRjcnVtYi5pY29uID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBicmVhZGNydW1iLmljb24gPSAncGkgcGktaG9tZSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBicmVhZGNydW1iO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVIb21lQnJlYWRjcnVtYihyb3V0ZS5maXJzdENoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlQnJlYWRjcnVtYnMocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBudWxsLCBwYXJlbnRVcmxTZWdtZW50czogc3RyaW5nW10sIGJyZWFkY3J1bWJzOiBNbmdNZW51SXRlbVtdKSB7XG4gICAgICAgIGlmICghcm91dGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJvdXRlRGF0YSA9IHJvdXRlLmRhdGEgYXMgTW5nUm91dGVyRGF0YTtcbiAgICAgICAgY29uc3Qgcm91dGVVcmxTZWdtZW50cyA9IHBhcmVudFVybFNlZ21lbnRzLmNvbmNhdChyb3V0ZS51cmwubWFwKHVybCA9PiB1cmwucGF0aCkpO1xuICAgICAgICBjb25zdCByb3V0ZVVybCA9IGAvJHtyb3V0ZVVybFNlZ21lbnRzLmpvaW4oJy8nKX1gO1xuICAgICAgICBpZiAocm91dGVEYXRhPy5icmVhZGNydW1iKSB7XG4gICAgICAgICAgICBjb25zdCBicmVhZGNydW1iUm91dGVEYXRhID0gcm91dGVEYXRhLmJyZWFkY3J1bWI7XG5cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGJyZWFkY3J1bWJSb3V0ZURhdGEpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBicmVhZGNydW1iUm91dGVEYXRhSXRlbSBvZiBicmVhZGNydW1iUm91dGVEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJyZWFkY3J1bWIgPSB0aGlzLmNyZWF0ZUJyZWFkY3J1bWIocm91dGVVcmwsIGJyZWFkY3J1bWJSb3V0ZURhdGFJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJyZWFkY3J1bWIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFkY3J1bWJzLnB1c2goYnJlYWRjcnVtYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBicmVhZGNydW1iUm91dGVEYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgYnJlYWRjcnVtYnMucHVzaCguLi5icmVhZGNydW1iUm91dGVEYXRhKHJvdXRlVXJsLCByb3V0ZSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBicmVhZGNydW1iID0gdGhpcy5jcmVhdGVCcmVhZGNydW1iKHJvdXRlVXJsLCBicmVhZGNydW1iUm91dGVEYXRhKTtcbiAgICAgICAgICAgICAgICBpZiAoYnJlYWRjcnVtYikge1xuICAgICAgICAgICAgICAgICAgICBicmVhZGNydW1icy5wdXNoKGJyZWFkY3J1bWIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdlbmVyYXRlQnJlYWRjcnVtYnMocm91dGUuZmlyc3RDaGlsZCwgcm91dGVVcmxTZWdtZW50cywgYnJlYWRjcnVtYnMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQnJlYWRjcnVtYihyb3V0ZVVybDogc3RyaW5nLCByb3V0ZUJyZWFkY3J1bWI6IHN0cmluZyB8IE1uZ0JyZWFkY3J1bWJNZW51SXRlbSwgaW5jbHVkZUhvbWUgPSBmYWxzZSk6IE1uZ01lbnVJdGVtIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nQnJlYWRjcnVtYiA9IHRoaXMuZmluZEJyZWFkY3J1bWJJdGVtKHtyb3V0ZXJMaW5rOiByb3V0ZVVybH0pO1xuICAgICAgICBpZiAoZXhpc3RpbmdCcmVhZGNydW1iPy51cGRhdGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhpc3RpbmdCcmVhZGNydW1iO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygcm91dGVCcmVhZGNydW1iID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIHVwZGF0ZWQgZXhpc3RpbmcgYnJlYWRjcnVtYlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpZDogcm91dGVVcmwsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHJvdXRlQnJlYWRjcnVtYixcbiAgICAgICAgICAgICAgICByb3V0ZXJMaW5rOiByb3V0ZVVybFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaW5jbHVkZUhvbWUgJiYgdHlwZW9mIHJvdXRlQnJlYWRjcnVtYi5pc0hvbWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgLy8gaG9tZSBzaG91bGQgbm90IGJlIGluY2x1ZGVkXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJvdXRlQnJlYWRjcnVtYi5yb3V0ZXJMaW5rID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHJvdXRlQnJlYWRjcnVtYi5yb3V0ZXJMaW5rID0gcm91dGVVcmw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb3V0ZUJyZWFkY3J1bWIuaWQgPSByb3V0ZVVybDtcbiAgICAgICAgICAgIHJldHVybiByb3V0ZUJyZWFkY3J1bWI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUSVRMRSBzZWN0aW9uXG5cbiAgICBwdWJsaWMgc2V0UGFnZVRpdGxlKHRpdGxlPzogc3RyaW5nKSB7XG4gICAgICAgIGxldCBjdXJyZW50Um91dGUgPSB0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC5yb290O1xuICAgICAgICB3aGlsZSAoY3VycmVudFJvdXRlLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgIGN1cnJlbnRSb3V0ZSA9IGN1cnJlbnRSb3V0ZS5maXJzdENoaWxkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgcm91dGVEYXRhID0gY3VycmVudFJvdXRlLmRhdGEgYXMgTW5nUm91dGVyRGF0YTtcbiAgICAgICAgY29uc3QgcGFnZVRpdGxlID0gdGl0bGUgPz8gcm91dGVEYXRhLnBhZ2VUaXRsZTtcblxuICAgICAgICB0aGlzLnRpdGxlU2VydmljZS5zZXRUaXRsZSh0aGlzLmZvcm1hdFBhZ2VUaXRsZShwYWdlVGl0bGUpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvcm1hdFBhZ2VUaXRsZSh0aXRsZVByZWZpeD86IHN0cmluZykge1xuICAgICAgICBjb25zdCB0aXRsZVBpZWNlcyA9IFtdO1xuXG4gICAgICAgIGlmICh0aXRsZVByZWZpeCkge1xuICAgICAgICAgICAgdGl0bGVQaWVjZXMucHVzaCh0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHRpdGxlUHJlZml4KSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aXRsZVBpZWNlcy5wdXNoKHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2FwcC5uYW1lJykpO1xuXG4gICAgICAgIHJldHVybiB0aXRsZVBpZWNlcy5qb2luKCcgLSAnKTtcbiAgICB9XG59XG4iXX0=
@@ -109,7 +109,7 @@ export class ActionDataProviderUtil {
109
109
  if (typeof ctx.dataProvider !== 'undefined') {
110
110
  const editorDataProvider = ctx.dataProvider;
111
111
  if (typeof editorDataProvider.fetch === 'function') {
112
- return ctx.parameters?.itemId ? editorDataProvider.fetch(ctx.parameters.itemId, ctx.serviceInstance) : null;
112
+ return ctx.parameters?.itemId ? editorDataProvider.fetch(ctx.parameters.itemId, ctx.serviceInstance, ctx.parameters.locale) : null;
113
113
  }
114
114
  }
115
115
  return null;
@@ -142,4 +142,4 @@ export class ActionDataProviderUtil {
142
142
  return null;
143
143
  }
144
144
  }
145
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWRhdGEtcHJvdmlkZXIudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdXRpbHMvYWN0aW9uLWRhdGEtcHJvdmlkZXIudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWEsWUFBWSxFQUFFLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUUxRCxPQUFPLEVBQUMsdUJBQXVCLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBS3pFLE1BQU0sT0FBTyxzQkFBc0I7SUFDeEIsTUFBTSxDQUFDLGVBQWUsQ0FBTyxHQUF3QjtRQUN4RCxNQUFNLGdCQUFnQixHQUFHLHNCQUFzQixDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNFLElBQUksWUFBWSxDQUFDLGdCQUFnQixDQUFDLEVBQUU7WUFDaEMsT0FBTyxnQkFBZ0IsQ0FBQztTQUMzQjtRQUNELE1BQU0sV0FBVyxHQUFHLHNCQUFzQixDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sWUFBWSxDQUFDLFdBQVcsQ0FBQztZQUM1QixDQUFDLENBQUMsV0FBVztZQUNiLENBQUMsQ0FBQyxVQUFVLENBQ04sR0FBRyxFQUFFLENBQ0QsSUFBSSxLQUFLLENBQ0wsNEZBQTRGLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGNBQWMsS0FBSyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxpQkFBaUIsR0FBRyxDQUFDLFVBQVUsRUFBRSxNQUFNLEdBQUcsQ0FDbk4sQ0FDUixDQUFDO0lBQ1osQ0FBQztJQUVNLE1BQU0sQ0FBQyxjQUFjLENBQU8sR0FBd0I7UUFDdkQsTUFBTSxnQkFBZ0IsR0FBRyxzQkFBc0IsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxRSxJQUFJLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQ2hDLE9BQU8s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ZSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzthQUNySTtTQUNKO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtPYnNlcnZhYmxlLCBpc09ic2VydmFibGUsIHRocm93RXJyb3J9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge01lZGl1c1F1ZXJ5UGFyYW1CdWlsZGVyLCBNZWRpdXNRdWVyeVJlc3VsdH0gZnJvbSAnLi4vYXBpL21vZGVscyc7XG5pbXBvcnQge0lNbmdDcnVkQXBpU2VydmljZSwgSU1uZ0dldEFsbEFwaVNlcnZpY2V9IGZyb20gJy4uL2FwaS9zZXJ2aWNlcyc7XG5pbXBvcnQge0FjdGlvbkNvbnRleHR9IGZyb20gJy4uL2NvbXBvbmVudHMvYWN0aW9uL21vZGVscyc7XG5pbXBvcnQge0lFZGl0b3JEYXRhUHJvdmlkZXIsIElUYWJsZURhdGFQcm92aWRlcn0gZnJvbSAnLi4vZGF0YS1wcm92aWRlcnMnO1xuXG5leHBvcnQgY2xhc3MgQWN0aW9uRGF0YVByb3ZpZGVyVXRpbCB7XG4gICAgcHVibGljIHN0YXRpYyBydW5HZXRBbGxPckZhaWw8VCwgUz4oY3R4OiBBY3Rpb25Db250ZXh0PFQsIFM+KTogT2JzZXJ2YWJsZTxNZWRpdXNRdWVyeVJlc3VsdDxUPj4ge1xuICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXJFeGVjID0gQWN0aW9uRGF0YVByb3ZpZGVyVXRpbC5ydW5HZXRBbGxEYXRhUHJvdmlkZXIoY3R4KTtcbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZShkYXRhUHJvdmlkZXJFeGVjKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGFQcm92aWRlckV4ZWM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VydmljZUV4ZWMgPSBBY3Rpb25EYXRhUHJvdmlkZXJVdGlsLnJ1bkdldEFsbFNlcnZpY2UoY3R4KTtcbiAgICAgICAgcmV0dXJuIGlzT2JzZXJ2YWJsZShzZXJ2aWNlRXhlYylcbiAgICAgICAgICAgID8gc2VydmljZUV4ZWNcbiAgICAgICAgICAgIDogdGhyb3dFcnJvcihcbiAgICAgICAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBgRGF0YSBwcm92aWRlciBhbmQgc2VydmljZSBpbnN0YW5jZSBjb3VsZCBub3QgZXh0cmFjdCBmZXRjaCBmdW5jdGlvbiB0byBleGVjdXRlIGluIGFjdGlvbiAke2N0eC5pbnN0YW5jZS5hY3Rpb24uYWN0aW9uTmFtZUxvbmd9ICgke2N0eC5pbnN0YW5jZS5hY3Rpb24ubW9kZWw/LnR5cGVOYW1lfSkgZm9yIGl0ZW0gaWQgJHtjdHgucGFyYW1ldGVycz8uaXRlbUlkfS5gXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcnVuRmV0Y2hPckZhaWw8VCwgUz4oY3R4OiBBY3Rpb25Db250ZXh0PFQsIFM+KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIGNvbnN0IGRhdGFQcm92aWRlckV4ZWMgPSBBY3Rpb25EYXRhUHJvdmlkZXJVdGlsLnJ1bkZldGNoRGF0YVByb3ZpZGVyKGN0eCk7XG4gICAgICAgIGlmIChpc09ic2VydmFibGUoZGF0YVByb3ZpZGVyRXhlYykpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhUHJvdmlkZXJFeGVjO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlcnZpY2VFeGVjID0gQWN0aW9uRGF0YVByb3ZpZGVyVXRpbC5ydW5HZXRCeUlkU2VydmljZShjdHgpO1xuICAgICAgICByZXR1cm4gaXNPYnNlcnZhYmxlKHNlcnZpY2VFeGVjKVxuICAgICAgICAgICAgPyBzZXJ2aWNlRXhlY1xuICAgICAgICAgICAgOiB0aHJvd0Vycm9yKFxuICAgICAgICAgICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBEYXRhIHByb3ZpZGVyIGFuZCBzZXJ2aWNlIGluc3RhbmNlIGNvdWxkIG5vdCBleHRyYWN0IGZldGNoIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgaW4gYWN0aW9uICR7Y3R4Lmluc3RhbmNlLmFjdGlvbi5hY3Rpb25OYW1lTG9uZ30gKCR7Y3R4Lmluc3RhbmNlLmFjdGlvbi5tb2RlbD8udHlwZU5hbWV9KSBmb3IgaXRlbSBpZCAke2N0eC5wYXJhbWV0ZXJzPy5pdGVtSWR9LmBcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBydW5DcmVhdGVPckZhaWw8VCwgUz4oY3R4OiBBY3Rpb25Db250ZXh0PFQsIFM+KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIGNvbnN0IGRhdGFQcm92aWRlckV4ZWMgPSBBY3Rpb25EYXRhUHJvdmlkZXJVdGlsLnJ1bkNyZWF0ZURhdGFQcm92aWRlcihjdHgpO1xuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKGRhdGFQcm92aWRlckV4ZWMpKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YVByb3ZpZGVyRXhlYztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZXJ2aWNlRXhlYyA9IEFjdGlvbkRhdGFQcm92aWRlclV0aWwucnVuQ3JlYXRlU2VydmljZShjdHgpO1xuICAgICAgICByZXR1cm4gaXNPYnNlcnZhYmxlKHNlcnZpY2VFeGVjKVxuICAgICAgICAgICAgPyBzZXJ2aWNlRXhlY1xuICAgICAgICAgICAgOiB0aHJvd0Vycm9yKFxuICAgICAgICAgICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBEYXRhIHByb3ZpZGVyIGFuZCBzZXJ2aWNlIGluc3RhbmNlIGNvdWxkIG5vdCBleHRyYWN0IGNyZWF0ZSBmdW5jdGlvbiB0byBleGVjdXRlIGluIGFjdGlvbiAke2N0eC5pbnN0YW5jZS5hY3Rpb24uYWN0aW9uTmFtZUxvbmd9ICgke2N0eC5pbnN0YW5jZS5hY3Rpb24ubW9kZWw/LnR5cGVOYW1lfSkgZm9yIGl0ZW0gJHtjdHgucGFyYW1ldGVycz8uaXRlbX0uYFxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHJ1blVwZGF0ZU9yRmFpbDxULCBTPihjdHg6IEFjdGlvbkNvbnRleHQ8VCwgUz4pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgY29uc3QgZGF0YVByb3ZpZGVyRXhlYyA9IEFjdGlvbkRhdGFQcm92aWRlclV0aWwucnVuVXBkYXRlRGF0YVByb3ZpZGVyKGN0eCk7XG4gICAgICAgIGlmIChpc09ic2VydmFibGUoZGF0YVByb3ZpZGVyRXhlYykpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhUHJvdmlkZXJFeGVjO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlcnZpY2VFeGVjID0gQWN0aW9uRGF0YVByb3ZpZGVyVXRpbC5ydW5VcGRhdGVTZXJ2aWNlKGN0eCk7XG4gICAgICAgIHJldHVybiBpc09ic2VydmFibGUoc2VydmljZUV4ZWMpXG4gICAgICAgICAgICA/IHNlcnZpY2VFeGVjXG4gICAgICAgICAgICA6IHRocm93RXJyb3IoXG4gICAgICAgICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYERhdGEgcHJvdmlkZXIgYW5kIHNlcnZpY2UgaW5zdGFuY2UgY291bGQgbm90IGV4dHJhY3QgdXBkYXRlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgaW4gYWN0aW9uICR7Y3R4Lmluc3RhbmNlLmFjdGlvbi5hY3Rpb25OYW1lTG9uZ30gKCR7Y3R4Lmluc3RhbmNlLmFjdGlvbi5tb2RlbD8udHlwZU5hbWV9KSBmb3IgaXRlbSBpZCAke2N0eC5wYXJhbWV0ZXJzPy5pdGVtSWR9LmBcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBydW5EZWxldGVPckZhaWw8VCwgUz4oY3R4OiBBY3Rpb25Db250ZXh0PFQsIFM+KTogT2JzZXJ2YWJsZTxUIHwgbnVsbD4ge1xuICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXJFeGVjID0gQWN0aW9uRGF0YVByb3ZpZGVyVXRpbC5ydW5EZWxldGVEYXRhUHJvdmlkZXIoY3R4KTtcbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZShkYXRhUHJvdmlkZXJFeGVjKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGFQcm92aWRlckV4ZWM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VydmljZUV4ZWMgPSBBY3Rpb25EYXRhUHJvdmlkZXJVdGlsLnJ1bkRlbGV0ZVNlcnZpY2UoY3R4KTtcbiAgICAgICAgcmV0dXJuIGlzT2JzZXJ2YWJsZShzZXJ2aWNlRXhlYylcbiAgICAgICAgICAgID8gc2VydmljZUV4ZWNcbiAgICAgICAgICAgIDogdGhyb3dFcnJvcihcbiAgICAgICAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBgRGF0YSBwcm92aWRlciBhbmQgc2VydmljZSBpbnN0YW5jZSBjb3VsZCBub3QgZXh0cmFjdCBkZWxldGUgZnVuY3Rpb24gdG8gZXhlY3V0ZSBpbiBhY3Rpb24gJHtjdHguaW5zdGFuY2UuYWN0aW9uLmFjdGlvbk5hbWVMb25nfSAoJHtjdHguaW5zdGFuY2UuYWN0aW9uLm1vZGVsPy50eXBlTmFtZX0pIGZvciBpdGVtIGlkICR7Y3R4LnBhcmFtZXRlcnM/Lml0ZW1JZH0uYFxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHJ1bkdldEFsbFNlcnZpY2U8VD4oY3R4OiBBY3Rpb25Db250ZXh0PFQsIHVua25vd24+KTogT2JzZXJ2YWJsZTxNZWRpdXNRdWVyeVJlc3VsdDxUPj4gfCBudWxsIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjdHguc2VydmljZUluc3RhbmNlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgZ2V0QWxsU2VydmljZUluc3RhbmNlID0gY3R4LnNlcnZpY2VJbnN0YW5jZSBhcyBJTW5nR2V0QWxsQXBpU2VydmljZTxUPjtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZ2V0QWxsU2VydmljZUluc3RhbmNlLmdldEFsbFBvc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtID0gY3R4LnBhcmFtZXRlcnM/LnF1ZXJ5UGFyYW0gPz8gTWVkaXVzUXVlcnlQYXJhbUJ1aWxkZXIuY3JlYXRlKCkuYnVpbGQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0QWxsU2VydmljZUluc3RhbmNlLmdldEFsbFBvc3QocXVlcnlQYXJhbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBydW5HZXRCeUlkU2VydmljZTxUPihjdHg6IEFjdGlvbkNvbnRleHQ8VCwgdW5rbm93bj4pOiBPYnNlcnZhYmxlPFQ+IHwgbnVsbCB7XG4gICAgICAgIGlmICh0eXBlb2YgY3R4LnNlcnZpY2VJbnN0YW5jZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGNydWRTZXJ2aWNlSW5zdGFuY2UgPSBjdHguc2VydmljZUluc3RhbmNlIGFzIElNbmdDcnVkQXBpU2VydmljZTxUPjtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY3J1ZFNlcnZpY2VJbnN0YW5jZS5nZXRCeUlkR2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5wYXJhbWV0ZXJzPy5pdGVtSWQgPyBjcnVkU2VydmljZUluc3RhbmNlLmdldEJ5SWRHZXQoY3R4LnBhcmFtZXRlcnMuaXRlbUlkKSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBydW5DcmVhdGVTZXJ2aWNlPFQ+KGN0eDogQWN0aW9uQ29udGV4dDxULCB1bmtub3duPik6IE9ic2VydmFibGU8VD4gfCBudWxsIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjdHguc2VydmljZUluc3RhbmNlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgY3J1ZFNlcnZpY2VJbnN0YW5jZSA9IGN0eC5zZXJ2aWNlSW5zdGFuY2UgYXMgSU1uZ0NydWRBcGlTZXJ2aWNlPFQ+O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjcnVkU2VydmljZUluc3RhbmNlLmNyZWF0ZVBvc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3R4LnBhcmFtZXRlcnM/Lml0ZW0gPyBjcnVkU2VydmljZUluc3RhbmNlLmNyZWF0ZVBvc3QoY3R4LnBhcmFtZXRlcnMuaXRlbSkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcnVuVXBkYXRlU2VydmljZTxUPihjdHg6IEFjdGlvbkNvbnRleHQ8VCwgdW5rbm93bj4pOiBPYnNlcnZhYmxlPFQ+IHwgbnVsbCB7XG4gICAgICAgIGlmICh0eXBlb2YgY3R4LnNlcnZpY2VJbnN0YW5jZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGNydWRTZXJ2aWNlSW5zdGFuY2UgPSBjdHguc2VydmljZUluc3RhbmNlIGFzIElNbmdDcnVkQXBpU2VydmljZTxUPjtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY3J1ZFNlcnZpY2VJbnN0YW5jZS51cGRhdGVQdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3R4LnBhcmFtZXRlcnM/Lml0ZW1JZCAmJiBjdHgucGFyYW1ldGVycy5pdGVtID8gY3J1ZFNlcnZpY2VJbnN0YW5jZS51cGRhdGVQdXQoY3R4LnBhcmFtZXRlcnMuaXRlbUlkLCBjdHgucGFyYW1ldGVycy5pdGVtKSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBydW5EZWxldGVTZXJ2aWNlPFQ+KGN0eDogQWN0aW9uQ29udGV4dDxULCB1bmtub3duPik6IE9ic2VydmFibGU8VCB8IG51bGw+IHwgbnVsbCB7XG4gICAgICAgIGlmICh0eXBlb2YgY3R4LnNlcnZpY2VJbnN0YW5jZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGNydWRTZXJ2aWNlSW5zdGFuY2UgPSBjdHguc2VydmljZUluc3RhbmNlIGFzIElNbmdDcnVkQXBpU2VydmljZTxUPjtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY3J1ZFNlcnZpY2VJbnN0YW5jZS5yZW1vdmVEZWxldGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3R4LnBhcmFtZXRlcnM/Lml0ZW1JZCA/IGNydWRTZXJ2aWNlSW5zdGFuY2UucmVtb3ZlRGVsZXRlKGN0eC5wYXJhbWV0ZXJzLml0ZW1JZCwgY3R4LnBhcmFtZXRlcnMuaXRlbSkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcnVuR2V0QWxsRGF0YVByb3ZpZGVyPFQsIFM+KGN0eDogQWN0aW9uQ29udGV4dDxULCBTPik6IE9ic2VydmFibGU8TWVkaXVzUXVlcnlSZXN1bHQ8VD4+IHwgbnVsbCB7XG4gICAgICAgIGlmICh0eXBlb2YgY3R4LmRhdGFQcm92aWRlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGN0eC5kYXRhUHJvdmlkZXJbJ2dldEFsbCcgYXMga2V5b2Ygb2JqZWN0XSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uc3QgdGFibGVEYXRhUHJvdmlkZXIgPSBjdHguZGF0YVByb3ZpZGVyIGFzIElUYWJsZURhdGFQcm92aWRlcjxULCBhbnk+O1xuICAgICAgICAgICAgY29uc3QgcXVlcnlQYXJhbSA9IGN0eC5wYXJhbWV0ZXJzPy5xdWVyeVBhcmFtID8/IE1lZGl1c1F1ZXJ5UGFyYW1CdWlsZGVyLmNyZWF0ZSgpLmJ1aWxkKCk7XG4gICAgICAgICAgICByZXR1cm4gdGFibGVEYXRhUHJvdmlkZXIuZ2V0QWxsKHF1ZXJ5UGFyYW0sIGN0eC5zZXJ2aWNlSW5zdGFuY2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcnVuRmV0Y2hEYXRhUHJvdmlkZXI8VCwgUz4oY3R4OiBBY3Rpb25Db250ZXh0PFQsIFM+KTogT2JzZXJ2YWJsZTxUPiB8IG51bGwge1xuICAgICAgICBpZiAodHlwZW9mIGN0eC5kYXRhUHJvdmlkZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBlZGl0b3JEYXRhUHJvdmlkZXIgPSBjdHguZGF0YVByb3ZpZGVyIGFzIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgYW55PjtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZWRpdG9yRGF0YVByb3ZpZGVyLmZldGNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5wYXJhbWV0ZXJzPy5pdGVtSWQgPyBlZGl0b3JEYXRhUHJvdmlkZXIuZmV0Y2goY3R4LnBhcmFtZXRlcnMuaXRlbUlkLCBjdHguc2VydmljZUluc3RhbmNlKSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBydW5DcmVhdGVEYXRhUHJvdmlkZXI8VCwgUz4oY3R4OiBBY3Rpb25Db250ZXh0PFQsIFM+KTogT2JzZXJ2YWJsZTxUPiB8IG51bGwge1xuICAgICAgICBpZiAodHlwZW9mIGN0eC5kYXRhUHJvdmlkZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBlZGl0b3JEYXRhUHJvdmlkZXIgPSBjdHguZGF0YVByb3ZpZGVyIGFzIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgYW55PjtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZWRpdG9yRGF0YVByb3ZpZGVyLmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdHgucGFyYW1ldGVycz8uaXRlbSA/IGVkaXRvckRhdGFQcm92aWRlci5jcmVhdGUoY3R4LnBhcmFtZXRlcnMuaXRlbSwgY3R4LnNlcnZpY2VJbnN0YW5jZSkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcnVuVXBkYXRlRGF0YVByb3ZpZGVyPFQsIFM+KGN0eDogQWN0aW9uQ29udGV4dDxULCBTPik6IE9ic2VydmFibGU8VD4gfCBudWxsIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjdHguZGF0YVByb3ZpZGVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgZWRpdG9yRGF0YVByb3ZpZGVyID0gY3R4LmRhdGFQcm92aWRlciBhcyBJRWRpdG9yRGF0YVByb3ZpZGVyPFQsIGFueT47XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVkaXRvckRhdGFQcm92aWRlci51cGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3R4LnBhcmFtZXRlcnM/Lml0ZW1JZCA/IGVkaXRvckRhdGFQcm92aWRlci51cGRhdGUoY3R4LnBhcmFtZXRlcnMuaXRlbUlkLCBjdHgucGFyYW1ldGVycy5pdGVtLCBjdHguc2VydmljZUluc3RhbmNlKSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBydW5EZWxldGVEYXRhUHJvdmlkZXI8VCwgUz4oY3R4OiBBY3Rpb25Db250ZXh0PFQsIFM+KTogT2JzZXJ2YWJsZTxUIHwgbnVsbD4gfCBudWxsIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjdHguZGF0YVByb3ZpZGVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgZWRpdG9yRGF0YVByb3ZpZGVyID0gY3R4LmRhdGFQcm92aWRlciBhcyBJRWRpdG9yRGF0YVByb3ZpZGVyPFQsIGFueT47XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVkaXRvckRhdGFQcm92aWRlci5kZWxldGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3R4LnBhcmFtZXRlcnM/Lml0ZW1JZCA/IGVkaXRvckRhdGFQcm92aWRlci5kZWxldGUoY3R4LnBhcmFtZXRlcnMuaXRlbUlkLCBjdHgucGFyYW1ldGVycy5pdGVtLCBjdHguc2VydmljZUluc3RhbmNlKSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuIl19
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWRhdGEtcHJvdmlkZXIudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdXRpbHMvYWN0aW9uLWRhdGEtcHJvdmlkZXIudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWEsWUFBWSxFQUFFLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUUxRCxPQUFPLEVBQUMsdUJBQXVCLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBS3pFLE1BQU0sT0FBTyxzQkFBc0I7SUFDeEIsTUFBTSxDQUFDLGVBQWUsQ0FBTyxHQUF3QjtRQUN4RCxNQUFNLGdCQUFnQixHQUFHLHNCQUFzQixDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNFLElBQUksWUFBWSxDQUFDLGdCQUFnQixDQUFDLEVBQUU7WUFDaEMsT0FBTyxnQkFBZ0IsQ0FBQztTQUMzQjtRQUNELE1BQU0sV0FBVyxHQUFHLHNCQUFzQixDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sWUFBWSxDQUFDLFdBQVcsQ0FBQztZQUM1QixDQUFDLENBQUMsV0FBVztZQUNiLENBQUMsQ0FBQyxVQUFVLENBQ04sR0FBRyxFQUFFLENBQ0QsSUFBSSxLQUFLLENBQ0wsNEZBQTRGLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGNBQWMsS0FBSyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxpQkFBaUIsR0FBRyxDQUFDLFVBQVUsRUFBRSxNQUFNLEdBQUcsQ0FDbk4sQ0FDUixDQUFDO0lBQ1osQ0FBQztJQUVNLE1BQU0sQ0FBQyxjQUFjLENBQU8sR0FBd0I7UUFDdkQsTUFBTSxnQkFBZ0IsR0FBRyxzQkFBc0IsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxRSxJQUFJLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQ2hDLE9BQU8s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VSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzthQUNySTtTQUNKO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtPYnNlcnZhYmxlLCBpc09ic2VydmFibGUsIHRocm93RXJyb3J9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge01lZGl1c1F1ZXJ5UGFyYW1CdWlsZGVyLCBNZWRpdXNRdWVyeVJlc3VsdH0gZnJvbSAnLi4vYXBpL21vZGVscyc7XG5pbXBvcnQge0lNbmdDcnVkQXBpU2VydmljZSwgSU1uZ0dldEFsbEFwaVNlcnZpY2V9IGZyb20gJy4uL2FwaS9zZXJ2aWNlcyc7XG5pbXBvcnQge0FjdGlvbkNvbnRleHR9IGZyb20gJy4uL2NvbXBvbmVudHMvYWN0aW9uL21vZGVscyc7XG5pbXBvcnQge0lFZGl0b3JEYXRhUHJvdmlkZXIsIElUYWJsZURhdGFQcm92aWRlcn0gZnJvbSAnLi4vZGF0YS1wcm92aWRlcnMnO1xuXG5leHBvcnQgY2xhc3MgQWN0aW9uRGF0YVByb3ZpZGVyVXRpbCB7XG4gICAgcHVibGljIHN0YXRpYyBydW5HZXRBbGxPckZhaWw8VCwgUz4oY3R4OiBBY3Rpb25Db250ZXh0PFQsIFM+KTogT2JzZXJ2YWJsZTxNZWRpdXNRdWVyeVJlc3VsdDxUPj4ge1xuICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXJFeGVjID0gQWN0aW9uRGF0YVByb3ZpZGVyVXRpbC5ydW5HZXRBbGxEYXRhUHJvdmlkZXIoY3R4KTtcbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZShkYXRhUHJvdmlkZXJFeGVjKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGFQcm92aWRlckV4ZWM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VydmljZUV4ZWMgPSBBY3Rpb25EYXRhUHJvdmlkZXJVdGlsLnJ1bkdldEFsbFNlcnZpY2UoY3R4KTtcbiAgICAgICAgcmV0dXJuIGlzT2JzZXJ2YWJsZShzZXJ2aWNlRXhlYylcbiAgICAgICAgICAgID8gc2VydmljZUV4ZWNcbiAgICAgICAgICAgIDogdGhyb3dFcnJvcihcbiAgICAgICAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBgRGF0YSBwcm92aWRlciBhbmQgc2VydmljZSBpbnN0YW5jZSBjb3VsZCBub3QgZXh0cmFjdCBmZXRjaCBmdW5jdGlvbiB0byBleGVjdXRlIGluIGFjdGlvbiAke2N0eC5pbnN0YW5jZS5hY3Rpb24uYWN0aW9uTmFtZUxvbmd9ICgke2N0eC5pbnN0YW5jZS5hY3Rpb24ubW9kZWw/LnR5cGVOYW1lfSkgZm9yIGl0ZW0gaWQgJHtjdHgucGFyYW1ldGVycz8uaXRlbUlkfS5gXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcnVuRmV0Y2hPckZhaWw8VCwgUz4oY3R4OiBBY3Rpb25Db250ZXh0PFQsIFM+KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIGNvbnN0IGRhdGFQcm92aWRlckV4ZWMgPSBBY3Rpb25EYXRhUHJvdmlkZXJVdGlsLnJ1bkZldGNoRGF0YVByb3ZpZGVyKGN0eCk7XG4gICAgICAgIGlmIChpc09ic2VydmFibGUoZGF0YVByb3ZpZGVyRXhlYykpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhUHJvdmlkZXJFeGVjO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlcnZpY2VFeGVjID0gQWN0aW9uRGF0YVByb3ZpZGVyVXRpbC5ydW5HZXRCeUlkU2VydmljZShjdHgpO1xuICAgICAgICByZXR1cm4gaXNPYnNlcnZhYmxlKHNlcnZpY2VFeGVjKVxuICAgICAgICAgICAgPyBzZXJ2aWNlRXhlY1xuICAgICAgICAgICAgOiB0aHJvd0Vycm9yKFxuICAgICAgICAgICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBEYXRhIHByb3ZpZGVyIGFuZCBzZXJ2aWNlIGluc3RhbmNlIGNvdWxkIG5vdCBleHRyYWN0IGZldGNoIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgaW4gYWN0aW9uICR7Y3R4Lmluc3RhbmNlLmFjdGlvbi5hY3Rpb25OYW1lTG9uZ30gKCR7Y3R4Lmluc3RhbmNlLmFjdGlvbi5tb2RlbD8udHlwZU5hbWV9KSBmb3IgaXRlbSBpZCAke2N0eC5wYXJhbWV0ZXJzPy5pdGVtSWR9LmBcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBydW5DcmVhdGVPckZhaWw8VCwgUz4oY3R4OiBBY3Rpb25Db250ZXh0PFQsIFM+KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIGNvbnN0IGRhdGFQcm92aWRlckV4ZWMgPSBBY3Rpb25EYXRhUHJvdmlkZXJVdGlsLnJ1bkNyZWF0ZURhdGFQcm92aWRlcihjdHgpO1xuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKGRhdGFQcm92aWRlckV4ZWMpKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YVByb3ZpZGVyRXhlYztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZXJ2aWNlRXhlYyA9IEFjdGlvbkRhdGFQcm92aWRlclV0aWwucnVuQ3JlYXRlU2VydmljZShjdHgpO1xuICAgICAgICByZXR1cm4gaXNPYnNlcnZhYmxlKHNlcnZpY2VFeGVjKVxuICAgICAgICAgICAgPyBzZXJ2aWNlRXhlY1xuICAgICAgICAgICAgOiB0aHJvd0Vycm9yKFxuICAgICAgICAgICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBEYXRhIHByb3ZpZGVyIGFuZCBzZXJ2aWNlIGluc3RhbmNlIGNvdWxkIG5vdCBleHRyYWN0IGNyZWF0ZSBmdW5jdGlvbiB0byBleGVjdXRlIGluIGFjdGlvbiAke2N0eC5pbnN0YW5jZS5hY3Rpb24uYWN0aW9uTmFtZUxvbmd9ICgke2N0eC5pbnN0YW5jZS5hY3Rpb24ubW9kZWw/LnR5cGVOYW1lfSkgZm9yIGl0ZW0gJHtjdHgucGFyYW1ldGVycz8uaXRlbX0uYFxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHJ1blVwZGF0ZU9yRmFpbDxULCBTPihjdHg6IEFjdGlvbkNvbnRleHQ8VCwgUz4pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgY29uc3QgZGF0YVByb3ZpZGVyRXhlYyA9IEFjdGlvbkRhdGFQcm92aWRlclV0aWwucnVuVXBkYXRlRGF0YVByb3ZpZGVyKGN0eCk7XG4gICAgICAgIGlmIChpc09ic2VydmFibGUoZGF0YVByb3ZpZGVyRXhlYykpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhUHJvdmlkZXJFeGVjO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlcnZpY2VFeGVjID0gQWN0aW9uRGF0YVByb3ZpZGVyVXRpbC5ydW5VcGRhdGVTZXJ2aWNlKGN0eCk7XG4gICAgICAgIHJldHVybiBpc09ic2VydmFibGUoc2VydmljZUV4ZWMpXG4gICAgICAgICAgICA/IHNlcnZpY2VFeGVjXG4gICAgICAgICAgICA6IHRocm93RXJyb3IoXG4gICAgICAgICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYERhdGEgcHJvdmlkZXIgYW5kIHNlcnZpY2UgaW5zdGFuY2UgY291bGQgbm90IGV4dHJhY3QgdXBkYXRlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgaW4gYWN0aW9uICR7Y3R4Lmluc3RhbmNlLmFjdGlvbi5hY3Rpb25OYW1lTG9uZ30gKCR7Y3R4Lmluc3RhbmNlLmFjdGlvbi5tb2RlbD8udHlwZU5hbWV9KSBmb3IgaXRlbSBpZCAke2N0eC5wYXJhbWV0ZXJzPy5pdGVtSWR9LmBcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBydW5EZWxldGVPckZhaWw8VCwgUz4oY3R4OiBBY3Rpb25Db250ZXh0PFQsIFM+KTogT2JzZXJ2YWJsZTxUIHwgbnVsbD4ge1xuICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXJFeGVjID0gQWN0aW9uRGF0YVByb3ZpZGVyVXRpbC5ydW5EZWxldGVEYXRhUHJvdmlkZXIoY3R4KTtcbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZShkYXRhUHJvdmlkZXJFeGVjKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGFQcm92aWRlckV4ZWM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VydmljZUV4ZWMgPSBBY3Rpb25EYXRhUHJvdmlkZXJVdGlsLnJ1bkRlbGV0ZVNlcnZpY2UoY3R4KTtcbiAgICAgICAgcmV0dXJuIGlzT2JzZXJ2YWJsZShzZXJ2aWNlRXhlYylcbiAgICAgICAgICAgID8gc2VydmljZUV4ZWNcbiAgICAgICAgICAgIDogdGhyb3dFcnJvcihcbiAgICAgICAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBgRGF0YSBwcm92aWRlciBhbmQgc2VydmljZSBpbnN0YW5jZSBjb3VsZCBub3QgZXh0cmFjdCBkZWxldGUgZnVuY3Rpb24gdG8gZXhlY3V0ZSBpbiBhY3Rpb24gJHtjdHguaW5zdGFuY2UuYWN0aW9uLmFjdGlvbk5hbWVMb25nfSAoJHtjdHguaW5zdGFuY2UuYWN0aW9uLm1vZGVsPy50eXBlTmFtZX0pIGZvciBpdGVtIGlkICR7Y3R4LnBhcmFtZXRlcnM/Lml0ZW1JZH0uYFxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHJ1bkdldEFsbFNlcnZpY2U8VD4oY3R4OiBBY3Rpb25Db250ZXh0PFQsIHVua25vd24+KTogT2JzZXJ2YWJsZTxNZWRpdXNRdWVyeVJlc3VsdDxUPj4gfCBudWxsIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjdHguc2VydmljZUluc3RhbmNlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgZ2V0QWxsU2VydmljZUluc3RhbmNlID0gY3R4LnNlcnZpY2VJbnN0YW5jZSBhcyBJTW5nR2V0QWxsQXBpU2VydmljZTxUPjtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZ2V0QWxsU2VydmljZUluc3RhbmNlLmdldEFsbFBvc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtID0gY3R4LnBhcmFtZXRlcnM/LnF1ZXJ5UGFyYW0gPz8gTWVkaXVzUXVlcnlQYXJhbUJ1aWxkZXIuY3JlYXRlKCkuYnVpbGQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0QWxsU2VydmljZUluc3RhbmNlLmdldEFsbFBvc3QocXVlcnlQYXJhbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBydW5HZXRCeUlkU2VydmljZTxUPihjdHg6IEFjdGlvbkNvbnRleHQ8VCwgdW5rbm93bj4pOiBPYnNlcnZhYmxlPFQ+IHwgbnVsbCB7XG4gICAgICAgIGlmICh0eXBlb2YgY3R4LnNlcnZpY2VJbnN0YW5jZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGNydWRTZXJ2aWNlSW5zdGFuY2UgPSBjdHguc2VydmljZUluc3RhbmNlIGFzIElNbmdDcnVkQXBpU2VydmljZTxUPjtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY3J1ZFNlcnZpY2VJbnN0YW5jZS5nZXRCeUlkR2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5wYXJhbWV0ZXJzPy5pdGVtSWQgPyBjcnVkU2VydmljZUluc3RhbmNlLmdldEJ5SWRHZXQoY3R4LnBhcmFtZXRlcnMuaXRlbUlkKSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBydW5DcmVhdGVTZXJ2aWNlPFQ+KGN0eDogQWN0aW9uQ29udGV4dDxULCB1bmtub3duPik6IE9ic2VydmFibGU8VD4gfCBudWxsIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjdHguc2VydmljZUluc3RhbmNlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgY3J1ZFNlcnZpY2VJbnN0YW5jZSA9IGN0eC5zZXJ2aWNlSW5zdGFuY2UgYXMgSU1uZ0NydWRBcGlTZXJ2aWNlPFQ+O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjcnVkU2VydmljZUluc3RhbmNlLmNyZWF0ZVBvc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3R4LnBhcmFtZXRlcnM/Lml0ZW0gPyBjcnVkU2VydmljZUluc3RhbmNlLmNyZWF0ZVBvc3QoY3R4LnBhcmFtZXRlcnMuaXRlbSkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcnVuVXBkYXRlU2VydmljZTxUPihjdHg6IEFjdGlvbkNvbnRleHQ8VCwgdW5rbm93bj4pOiBPYnNlcnZhYmxlPFQ+IHwgbnVsbCB7XG4gICAgICAgIGlmICh0eXBlb2YgY3R4LnNlcnZpY2VJbnN0YW5jZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGNydWRTZXJ2aWNlSW5zdGFuY2UgPSBjdHguc2VydmljZUluc3RhbmNlIGFzIElNbmdDcnVkQXBpU2VydmljZTxUPjtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY3J1ZFNlcnZpY2VJbnN0YW5jZS51cGRhdGVQdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3R4LnBhcmFtZXRlcnM/Lml0ZW1JZCAmJiBjdHgucGFyYW1ldGVycy5pdGVtID8gY3J1ZFNlcnZpY2VJbnN0YW5jZS51cGRhdGVQdXQoY3R4LnBhcmFtZXRlcnMuaXRlbUlkLCBjdHgucGFyYW1ldGVycy5pdGVtKSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBydW5EZWxldGVTZXJ2aWNlPFQ+KGN0eDogQWN0aW9uQ29udGV4dDxULCB1bmtub3duPik6IE9ic2VydmFibGU8VCB8IG51bGw+IHwgbnVsbCB7XG4gICAgICAgIGlmICh0eXBlb2YgY3R4LnNlcnZpY2VJbnN0YW5jZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGNydWRTZXJ2aWNlSW5zdGFuY2UgPSBjdHguc2VydmljZUluc3RhbmNlIGFzIElNbmdDcnVkQXBpU2VydmljZTxUPjtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY3J1ZFNlcnZpY2VJbnN0YW5jZS5yZW1vdmVEZWxldGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3R4LnBhcmFtZXRlcnM/Lml0ZW1JZCA/IGNydWRTZXJ2aWNlSW5zdGFuY2UucmVtb3ZlRGVsZXRlKGN0eC5wYXJhbWV0ZXJzLml0ZW1JZCwgY3R4LnBhcmFtZXRlcnMuaXRlbSkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcnVuR2V0QWxsRGF0YVByb3ZpZGVyPFQsIFM+KGN0eDogQWN0aW9uQ29udGV4dDxULCBTPik6IE9ic2VydmFibGU8TWVkaXVzUXVlcnlSZXN1bHQ8VD4+IHwgbnVsbCB7XG4gICAgICAgIGlmICh0eXBlb2YgY3R4LmRhdGFQcm92aWRlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGN0eC5kYXRhUHJvdmlkZXJbJ2dldEFsbCcgYXMga2V5b2Ygb2JqZWN0XSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uc3QgdGFibGVEYXRhUHJvdmlkZXIgPSBjdHguZGF0YVByb3ZpZGVyIGFzIElUYWJsZURhdGFQcm92aWRlcjxULCBhbnk+O1xuICAgICAgICAgICAgY29uc3QgcXVlcnlQYXJhbSA9IGN0eC5wYXJhbWV0ZXJzPy5xdWVyeVBhcmFtID8/IE1lZGl1c1F1ZXJ5UGFyYW1CdWlsZGVyLmNyZWF0ZSgpLmJ1aWxkKCk7XG4gICAgICAgICAgICByZXR1cm4gdGFibGVEYXRhUHJvdmlkZXIuZ2V0QWxsKHF1ZXJ5UGFyYW0sIGN0eC5zZXJ2aWNlSW5zdGFuY2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcnVuRmV0Y2hEYXRhUHJvdmlkZXI8VCwgUz4oY3R4OiBBY3Rpb25Db250ZXh0PFQsIFM+KTogT2JzZXJ2YWJsZTxUPiB8IG51bGwge1xuICAgICAgICBpZiAodHlwZW9mIGN0eC5kYXRhUHJvdmlkZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBlZGl0b3JEYXRhUHJvdmlkZXIgPSBjdHguZGF0YVByb3ZpZGVyIGFzIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgYW55PjtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZWRpdG9yRGF0YVByb3ZpZGVyLmZldGNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5wYXJhbWV0ZXJzPy5pdGVtSWQgPyBlZGl0b3JEYXRhUHJvdmlkZXIuZmV0Y2goY3R4LnBhcmFtZXRlcnMuaXRlbUlkLCBjdHguc2VydmljZUluc3RhbmNlLCBjdHgucGFyYW1ldGVycy5sb2NhbGUpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHJ1bkNyZWF0ZURhdGFQcm92aWRlcjxULCBTPihjdHg6IEFjdGlvbkNvbnRleHQ8VCwgUz4pOiBPYnNlcnZhYmxlPFQ+IHwgbnVsbCB7XG4gICAgICAgIGlmICh0eXBlb2YgY3R4LmRhdGFQcm92aWRlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGVkaXRvckRhdGFQcm92aWRlciA9IGN0eC5kYXRhUHJvdmlkZXIgYXMgSUVkaXRvckRhdGFQcm92aWRlcjxULCBhbnk+O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlZGl0b3JEYXRhUHJvdmlkZXIuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5wYXJhbWV0ZXJzPy5pdGVtID8gZWRpdG9yRGF0YVByb3ZpZGVyLmNyZWF0ZShjdHgucGFyYW1ldGVycy5pdGVtLCBjdHguc2VydmljZUluc3RhbmNlKSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBydW5VcGRhdGVEYXRhUHJvdmlkZXI8VCwgUz4oY3R4OiBBY3Rpb25Db250ZXh0PFQsIFM+KTogT2JzZXJ2YWJsZTxUPiB8IG51bGwge1xuICAgICAgICBpZiAodHlwZW9mIGN0eC5kYXRhUHJvdmlkZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBlZGl0b3JEYXRhUHJvdmlkZXIgPSBjdHguZGF0YVByb3ZpZGVyIGFzIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgYW55PjtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZWRpdG9yRGF0YVByb3ZpZGVyLnVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdHgucGFyYW1ldGVycz8uaXRlbUlkID8gZWRpdG9yRGF0YVByb3ZpZGVyLnVwZGF0ZShjdHgucGFyYW1ldGVycy5pdGVtSWQsIGN0eC5wYXJhbWV0ZXJzLml0ZW0sIGN0eC5zZXJ2aWNlSW5zdGFuY2UpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHJ1bkRlbGV0ZURhdGFQcm92aWRlcjxULCBTPihjdHg6IEFjdGlvbkNvbnRleHQ8VCwgUz4pOiBPYnNlcnZhYmxlPFQgfCBudWxsPiB8IG51bGwge1xuICAgICAgICBpZiAodHlwZW9mIGN0eC5kYXRhUHJvdmlkZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBlZGl0b3JEYXRhUHJvdmlkZXIgPSBjdHguZGF0YVByb3ZpZGVyIGFzIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgYW55PjtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZWRpdG9yRGF0YVByb3ZpZGVyLmRlbGV0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdHgucGFyYW1ldGVycz8uaXRlbUlkID8gZWRpdG9yRGF0YVByb3ZpZGVyLmRlbGV0ZShjdHgucGFyYW1ldGVycy5pdGVtSWQsIGN0eC5wYXJhbWV0ZXJzLml0ZW0sIGN0eC5zZXJ2aWNlSW5zdGFuY2UpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG4iXX0=
@@ -11,6 +11,15 @@ export class EditorFormlyUtil {
11
11
  else {
12
12
  fields.push(...EditorFormlyUtil.createFormlyTabType(descriptor.tabs, formEditorComponent));
13
13
  }
14
+ // If a field is localized, we append a hidden field to our form, so we can add/update new localization values to the form later on
15
+ if (descriptor.isLocalized) {
16
+ fields.push({
17
+ key: descriptor.localizationLocalizationProperty,
18
+ props: {
19
+ descriptor
20
+ }
21
+ });
22
+ }
14
23
  return fields;
15
24
  }
16
25
  static createFormlyTabType(tabGroups, formEditorComponent) {
@@ -265,4 +274,4 @@ export class EditorFormlyUtil {
265
274
  }
266
275
  }
267
276
  }
268
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLWZvcm1seS51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi91dGlscy9lZGl0b3ItZm9ybWx5LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBSW5DLE9BQU8sRUFHSCxxQkFBcUIsRUFFckIsb0JBQW9CLEVBQ3BCLHFCQUFxQixFQUNyQix5QkFBeUIsRUFDekIseUJBQXlCLEVBQ3pCLCtCQUErQixFQUdsQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRzdFLE1BQU0sT0FBTyxnQkFBZ0I7SUFDbEIsTUFBTSxDQUFDLGdDQUFnQyxDQUFDLFVBQWlDLEVBQUUsbUJBQWtEO1FBQ2hJLE1BQU0sTUFBTSxHQUF3QixFQUFFLENBQUM7UUFFdkMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUU7WUFDNUQsZ0JBQWdCO1lBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7U0FDMUc7YUFBTTtZQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQztTQUM5RjtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFTSxNQUFNLENBQUMsbUJBQW1CLENBQUMsU0FBeUMsRUFBRSxtQkFBa0Q7UUFDM0gsTUFBTSxTQUFTLEdBQXNCO1lB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QUNuRCxNQUFNLENBQUMsZUFBZSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7aUJBQzFDO2dCQUNELE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDM0Q7U0FDSjtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7Rm9ybWx5RmllbGRDb25maWd9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7TW5nRm9ybWx5RmllbGRDb25maWd9IGZyb20gJy4uL2NvbXBvbmVudHMvZm9ybS9mb3JtbHkvbW9kZWxzJztcbmltcG9ydCB7SUZvcm1FZGl0b3JDb21wb25lbnR9IGZyb20gJy4uL2NvbXBvbmVudHMvZm9ybS9tb2RlbHMnO1xuaW1wb3J0IHtcbiAgICBBRmllbGREZXNjcmlwdG9yLFxuICAgIEVkaXRvckRlc2NyaXB0b3IsXG4gICAgRmllbGRBY3Rpb25EZXNjcmlwdG9yLFxuICAgIEZpZWxkR3JvdXBEZXNjcmlwdG9yLFxuICAgIEZpZWxkSW5wdXREZXNjcmlwdG9yLFxuICAgIEZpZWxkTG9va3VwRGVzY3JpcHRvcixcbiAgICBGaWVsZExvb2t1cEVudW1EZXNjcmlwdG9yLFxuICAgIEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3IsXG4gICAgRmllbGRNYW55VG9NYW55RWRpdG9yRGVzY3JpcHRvcixcbiAgICBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcixcbiAgICBGaWVsZFZhbGlkYXRpb25EZXNjcmlwdG9yXG59IGZyb20gJy4uL2Rlc2NyaXB0b3JzJztcbmltcG9ydCB7RmllbGRJbnB1dFR5cGVFbnVtLCBGaWVsZExvb2t1cFR5cGVFbnVtfSBmcm9tICcuLi9kZXNjcmlwdG9ycy90eXBlcyc7XG5pbXBvcnQge01uZ0ZpZWxkQXN5bmNWYWxpZGF0b3J9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEVkaXRvckZvcm1seVV0aWwge1xuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRm9ybWx5Q29uZmlnRnJvbURlc2NyaXB0b3IoZGVzY3JpcHRvcjogRWRpdG9yRGVzY3JpcHRvcjxhbnk+LCBmb3JtRWRpdG9yQ29tcG9uZW50OiBJRm9ybUVkaXRvckNvbXBvbmVudDx1bmtub3duPik6IEZvcm1seUZpZWxkQ29uZmlnW10ge1xuICAgICAgICBjb25zdCBmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXTtcblxuICAgICAgICBpZiAoZGVzY3JpcHRvci50YWJzLmxlbmd0aCA9PT0gMSAmJiBkZXNjcmlwdG9yLnRhYnNbMF0uZGVmYXVsdCkge1xuICAgICAgICAgICAgLy8gZG9udCB1c2UgdGFic1xuICAgICAgICAgICAgZmllbGRzLnB1c2goLi4uRWRpdG9yRm9ybWx5VXRpbC5jcmVhdGVGb3JtbHlHcm91cFR5cGUoZGVzY3JpcHRvci50YWJzWzBdLmZpZWxkcywgZm9ybUVkaXRvckNvbXBvbmVudCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmllbGRzLnB1c2goLi4uRWRpdG9yRm9ybWx5VXRpbC5jcmVhdGVGb3JtbHlUYWJUeXBlKGRlc2NyaXB0b3IudGFicywgZm9ybUVkaXRvckNvbXBvbmVudCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkcztcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUZvcm1seVRhYlR5cGUodGFiR3JvdXBzOiBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcjxhbnk+W10sIGZvcm1FZGl0b3JDb21wb25lbnQ6IElGb3JtRWRpdG9yQ29tcG9uZW50PHVua25vd24+KTogRm9ybWx5RmllbGRDb25maWdbXSB7XG4gICAgICAgIGNvbnN0IHRhYnNGaWVsZDogRm9ybWx5RmllbGRDb25maWcgPSB7XG4gICAgICAgICAgICB0eXBlOiAndGFicycsXG4gICAgICAgICAgICBmaWVsZEdyb3VwOiBbXSxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgZm9ybUVkaXRvckNvbXBvbmVudFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IHRhYiBvZiB0YWJHcm91cHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhYkZpZWxkOiBNbmdGb3JtbHlGaWVsZENvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICBpZDogdGFiLm5hbWUsXG4gICAgICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUVkaXRvckNvbXBvbmVudFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbnM6IHt9LFxuICAgICAgICAgICAgICAgIGZpZWxkR3JvdXA6IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHRhYi50aXRsZSkge1xuICAgICAgICAgICAgICAgIHRhYkZpZWxkLnByb3BzLmxhYmVsID0gdGFiLnRpdGxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFiRmllbGQuZmllbGRHcm91cCEucHVzaCguLi5FZGl0b3JGb3JtbHlVdGlsLmNyZWF0ZUZvcm1seUdyb3VwVHlwZSh0YWIuZmllbGRzLCBmb3JtRWRpdG9yQ29tcG9uZW50KSk7XG4gICAgICAgICAgICB0YWJzRmllbGQuZmllbGRHcm91cCEucHVzaCh0YWJGaWVsZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFt0YWJzRmllbGRdO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRm9ybWx5R3JvdXBUeXBlKGdyb3VwczogRmllbGRHcm91cERlc2NyaXB0b3I8YW55PltdLCBmb3JtRWRpdG9yQ29tcG9uZW50OiBJRm9ybUVkaXRvckNvbXBvbmVudDx1bmtub3duPik6IEZvcm1seUZpZWxkQ29uZmlnW10ge1xuICAgICAgICBpZiAoZ3JvdXBzLmxlbmd0aCA9PT0gMSAmJiBncm91cHNbMF0uZGVmYXVsdCkge1xuICAgICAgICAgICAgLy8gZG9udCB1c2UgZmllbGRzZXQsIGp1c3QgY3JlYXRlIGZpZWxkc1xuICAgICAgICAgICAgcmV0dXJuIEVkaXRvckZvcm1seVV0aWwuY3JlYXRlRm9ybWx5RmllbGRzKGdyb3Vwc1swXSwgZm9ybUVkaXRvckNvbXBvbmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBncm91cHNGaWVsZDogTW5nRm9ybWx5RmllbGRDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2ZpZWxkc2V0JyxcbiAgICAgICAgICAgICAgICBmaWVsZEdyb3VwOiBbXSxcbiAgICAgICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgICAgICBmb3JtRWRpdG9yQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uczoge31cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIGdyb3Vwcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwRmllbGQ6IE1uZ0Zvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICBpZDogZ3JvdXAubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3I6IGdyb3VwXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgZmllbGRHcm91cDogW11cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmIChncm91cC50aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICBncm91cEZpZWxkLnByb3BzLmxhYmVsID0gZ3JvdXAudGl0bGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGdyb3VwRmllbGQuZmllbGRHcm91cCEucHVzaCguLi5FZGl0b3JGb3JtbHlVdGlsLmNyZWF0ZUZvcm1seUZpZWxkcyhncm91cCwgZm9ybUVkaXRvckNvbXBvbmVudCkpO1xuICAgICAgICAgICAgICAgIGdyb3Vwc0ZpZWxkLmZpZWxkR3JvdXAhLnB1c2goZ3JvdXBGaWVsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW2dyb3Vwc0ZpZWxkXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRm9ybWx5RmllbGRzKGRlc2NyaXB0b3I6IEZpZWxkR3JvdXBEZXNjcmlwdG9yPGFueT4sIGZvcm1FZGl0b3JDb21wb25lbnQ6IElGb3JtRWRpdG9yQ29tcG9uZW50PHVua25vd24+KTogRm9ybWx5RmllbGRDb25maWdbXSB7XG4gICAgICAgIGNvbnN0IGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGRlc2NyaXB0b3JGaWVsZCBvZiBkZXNjcmlwdG9yLmZpZWxkcykge1xuICAgICAgICAgICAgZmllbGRzLnB1c2goRWRpdG9yRm9ybWx5VXRpbC5jcmVhdGVGb3JtbHlGaWVsZChkZXNjcmlwdG9yRmllbGQsIGZvcm1FZGl0b3JDb21wb25lbnQpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyB3cmFwIGluIGdyb3VwIHRvIGJlIGFibGUgdG8gdXNlIGZsZXggZ3JpZFxuICAgICAgICBjb25zdCB3cmFwcGVyR3JvdXA6IEZvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICAgICAgZmllbGRHcm91cENsYXNzTmFtZTogJ3AtZmx1aWQgZm9ybWdyaWQgZ3JpZCcsXG4gICAgICAgICAgICBmaWVsZEdyb3VwOiBmaWVsZHNcbiAgICAgICAgfTtcblxuICAgICAgICBFZGl0b3JGb3JtbHlVdGlsLmFkZFZhbGlkYXRpb25zVG9Gb3JtbHlGaWVsZCh3cmFwcGVyR3JvdXAsIGRlc2NyaXB0b3IudmFsaWRhdGlvbnMpO1xuXG4gICAgICAgIHJldHVybiBbd3JhcHBlckdyb3VwXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUZvcm1seUZpZWxkKGRlc2NyaXB0b3I6IEFGaWVsZERlc2NyaXB0b3I8YW55LCBhbnk+LCBmb3JtRWRpdG9yQ29tcG9uZW50OiBJRm9ybUVkaXRvckNvbXBvbmVudDx1bmtub3duPik6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgICAgICAgY29uc3QgZmllbGQ6IE1uZ0Zvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICAgICAga2V5OiBkZXNjcmlwdG9yLnByb3BlcnR5LFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLFxuICAgICAgICAgICAgICAgIGZvcm1FZGl0b3JDb21wb25lbnRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleHByZXNzaW9uczoge31cbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgY2xhc3NOYW1lID0gZGVzY3JpcHRvci5jbGFzc05hbWU7XG4gICAgICAgIGlmICghY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICAvLyBhc3NpZ24gZGVmYXVsdCBmaWVsZCB3aWR0aCB0aHJvdWdoIGVudGlyZSByb3dcbiAgICAgICAgICAgIGNsYXNzTmFtZSA9ICdjb2wtMTInO1xuICAgICAgICB9XG4gICAgICAgIGZpZWxkLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcblxuICAgICAgICBpZiAoZGVzY3JpcHRvciBpbnN0YW5jZW9mIEZpZWxkSW5wdXREZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGRlc2NyaXB0b3IuZmllbGRUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0VHlwZUVudW0uSGlkZGVuOlxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXRUeXBlRW51bS5MYWJlbDpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdsYWJlbCc7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBmaWVsZC5rZXk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLlRleHRhcmVhOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ3RleHRhcmVhJztcbiAgICAgICAgICAgICAgICAgICAgZmllbGQucHJvcHMubWF4TGVuZ3RoID0gZGVzY3JpcHRvci5tYXhMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnByb3BzLm1pbkxlbmd0aCA9IGRlc2NyaXB0b3IubWluTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC5wcm9wcy5wYXR0ZXJuID0gZGVzY3JpcHRvci5wYXR0ZXJuO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXRUeXBlRW51bS5OdW1iZXI6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnbnVtYmVyJztcbiAgICAgICAgICAgICAgICAgICAgZmllbGQucHJvcHMubWluID0gZGVzY3JpcHRvci5udW1iZXJNaW47XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnByb3BzLm1heCA9IGRlc2NyaXB0b3IubnVtYmVyTWF4O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXRUeXBlRW51bS5DdXJyZW5jeTpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdjdXJyZW5jeSc7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnByb3BzLm1pbiA9IGRlc2NyaXB0b3IubnVtYmVyTWluO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC5wcm9wcy5tYXggPSBkZXNjcmlwdG9yLm51bWJlck1heDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0VHlwZUVudW0uU3dpdGNoOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ3N3aXRjaCc7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLmRlZmF1bHRWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXRUeXBlRW51bS5SYWRpbzpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdyYWRpbyc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLkRhdGVwaWNrZXI6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnZGF0ZXBpY2tlcic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLk1hc2s6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnbWFzayc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLkZpbGU6XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0VHlwZUVudW0uSW1hZ2VGaWxlOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ2ZpbGUnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXRUeXBlRW51bS5JbWFnZVVybDpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdpbWFnZVVybCc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLkN1c3RvbTpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9IGRlc2NyaXB0b3IuY3VzdG9tQ29tcG9uZW50TmFtZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdpbnB1dCc7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnByb3BzLm1pbkxlbmd0aCA9IGRlc2NyaXB0b3IubWluTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC5wcm9wcy5tYXhMZW5ndGggPSBkZXNjcmlwdG9yLm1heExlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQucHJvcHMucGF0dGVybiA9IGRlc2NyaXB0b3IucGF0dGVybjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvciBpbnN0YW5jZW9mIEZpZWxkQWN0aW9uRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgZmllbGQudHlwZSA9ICdhY3Rpb24nO1xuICAgICAgICAgICAgZGVsZXRlIGZpZWxkLmtleTtcbiAgICAgICAgfSBlbHNlIGlmIChkZXNjcmlwdG9yIGluc3RhbmNlb2YgRmllbGRMb29rdXBFbnVtRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgZmllbGQudHlwZSA9ICdlbnVtJztcbiAgICAgICAgfSBlbHNlIGlmIChkZXNjcmlwdG9yIGluc3RhbmNlb2YgRmllbGRMb29rdXBEZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGRlc2NyaXB0b3IubG9va3VwVHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRMb29rdXBUeXBlRW51bS5BdXRvY29tcGxldGU6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnYXV0b2NvbXBsZXRlJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZExvb2t1cFR5cGVFbnVtLkRpYWxvZzpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdkaWFsb2cnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkTG9va3VwVHlwZUVudW0uRHJvcGRvd246XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdkcm9wZG93bic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3IgaW5zdGFuY2VvZiBGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICBmaWVsZC50eXBlID0gJ3RhYmxlLWRpYWxvZy1tdWx0aXNlbGVjdCc7XG4gICAgICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvciBpbnN0YW5jZW9mIEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAndGFibGUtZGlhbG9nLWZvcm0nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlc2NyaXB0b3IubGFiZWwpIHtcbiAgICAgICAgICAgIGZpZWxkLnByb3BzLmxhYmVsID0gZGVzY3JpcHRvci5sYWJlbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZXNjcmlwdG9yLnJlcXVpcmVkRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgZmllbGQuZXhwcmVzc2lvbnMhWydwcm9wcy5yZXF1aXJlZCddID0gZGVzY3JpcHRvci5yZXF1aXJlZEV4cHJlc3Npb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlc2NyaXB0b3IucmVxdWlyZWQpIHtcbiAgICAgICAgICAgIGZpZWxkLnByb3BzIS5yZXF1aXJlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5yZXF1aXJlZEhpZGVMYWJlbE1hcmtlcikge1xuICAgICAgICAgICAgICAgIGZpZWxkLnByb3BzIVsnaGlkZVJlcXVpcmVkTWFya2VyJ10gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlc2NyaXB0b3IuaGlkZGVuRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgZmllbGQuZXhwcmVzc2lvbnMhWydoaWRlJ10gPSBkZXNjcmlwdG9yLmhpZGRlbkV4cHJlc3Npb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVzY3JpcHRvci5kaXNhYmxlZEV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIGZpZWxkLmV4cHJlc3Npb25zIVsncHJvcHMuZGlzYWJsZWQnXSA9IGRlc2NyaXB0b3IuZGlzYWJsZWRFeHByZXNzaW9uO1xuICAgICAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3IuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGZpZWxkLnByb3BzLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpZWxkLmV4cHJlc3Npb25zIVsncHJvcHMuZGlzYWJsZWQnXSA9ICdmb3JtU3RhdGUuZGlzYWJsZWQnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBkZXNjcmlwdG9yLmRlZmF1bHRWYWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGZpZWxkLmRlZmF1bHRWYWx1ZSA9IGRlc2NyaXB0b3IuZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgRWRpdG9yRm9ybWx5VXRpbC5hZGRWYWxpZGF0aW9uc1RvRm9ybWx5RmllbGQoZmllbGQsIGRlc2NyaXB0b3IudmFsaWRhdGlvbnMpO1xuICAgICAgICBFZGl0b3JGb3JtbHlVdGlsLmFkZEFzeW5jVmFsaWRhdGlvbnNUb0Zvcm1seUZpZWxkKGZpZWxkLCBkZXNjcmlwdG9yLmFzeW5jVmFsaWRhdGlvbnMpO1xuXG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGFkZFZhbGlkYXRpb25zVG9Gb3JtbHlGaWVsZChjb25maWc6IEZvcm1seUZpZWxkQ29uZmlnLCB2YWxpZGF0aW9uczogQXJyYXk8RmllbGRWYWxpZGF0aW9uRGVzY3JpcHRvcj4pIHtcbiAgICAgICAgaWYgKCFjb25maWcudmFsaWRhdG9ycykge1xuICAgICAgICAgICAgY29uZmlnLnZhbGlkYXRvcnMgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgdmFsaWRhdGlvbiBvZiB2YWxpZGF0aW9ucykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0aW9uLnZhbGlkYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGNvbmZpZy52YWxpZGF0b3JzW3ZhbGlkYXRpb24ubmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IChcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM/OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkOiBzdHJpbmddOiBhbnk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9yUmVzID0gdmFsaWRhdGlvbi52YWxpZGF0b3IhKGNvbnRyb2wsIGZpZWxkLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvcm1seSB2YWxpZGF0b3Igb25seSBleGNlcHRzIHRydWUvZmFsc2UgZm9yIHZhbGlkYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hcCBwb3NzaWJsZSBhbmd1bGFyIHZhbGlkYXRvciByZXN1bHQgdG8gdHJ1ZS9mYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWxpZGF0b3JSZXMgPT09ICdib29sZWFuJyA/IHZhbGlkYXRvclJlcyA6IHZhbGlkYXRvclJlcyA9PT0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0aW9uLm1lc3NhZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLnZhbGlkYXRvcnNbdmFsaWRhdGlvbi5uYW1lXS5tZXNzYWdlID0gdmFsaWRhdGlvbi5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbmZpZy52YWxpZGF0b3JzLnZhbGlkYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy52YWxpZGF0b3JzLnZhbGlkYXRpb24gPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uZmlnLnZhbGlkYXRvcnMudmFsaWRhdGlvbi5wdXNoKHZhbGlkYXRpb24ubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGFkZEFzeW5jVmFsaWRhdGlvbnNUb0Zvcm1seUZpZWxkKGNvbmZpZzogRm9ybWx5RmllbGRDb25maWcsIGFzeW5jVmFsaWRhdGlvbnM6IEFycmF5PEZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3I+KSB7XG4gICAgICAgIGlmICghY29uZmlnLmFzeW5jVmFsaWRhdG9ycykge1xuICAgICAgICAgICAgY29uZmlnLmFzeW5jVmFsaWRhdG9ycyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCB2YWxpZGF0aW9uIG9mIGFzeW5jVmFsaWRhdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGlvbi52YWxpZGF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBjb25maWcuYXN5bmNWYWxpZGF0b3JzW3ZhbGlkYXRpb24ubmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IChcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM/OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkOiBzdHJpbmddOiBhbnk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gPE1uZ0ZpZWxkQXN5bmNWYWxpZGF0b3I+dmFsaWRhdGlvbi52YWxpZGF0b3I7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRvck9iczogT2JzZXJ2YWJsZTxWYWxpZGF0aW9uRXJyb3JzIHwgYm9vbGVhbiB8IG51bGw+ID0gdmFsaWRhdG9yKGNvbnRyb2wsIGZpZWxkLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvcm1seSB2YWxpZGF0b3Igb25seSBleGNlcHRzIHRydWUvZmFsc2UgZm9yIHZhbGlkYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hcCBwb3NzaWJsZSBhbmd1bGFyIHZhbGlkYXRvciByZXN1bHQgdG8gdHJ1ZS9mYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRvck9icy5waXBlKG1hcCh2YWx1ZSA9PiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgPyB2YWx1ZSA6IHZhbHVlID09PSBudWxsKSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbGlkYXRpb24ubWVzc2FnZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuYXN5bmNWYWxpZGF0b3JzW3ZhbGlkYXRpb24ubmFtZV0ubWVzc2FnZSA9IHZhbGlkYXRpb24ubWVzc2FnZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb25maWcuYXN5bmNWYWxpZGF0b3JzLnZhbGlkYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5hc3luY1ZhbGlkYXRvcnMudmFsaWRhdGlvbiA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25maWcuYXN5bmNWYWxpZGF0b3JzLnZhbGlkYXRpb24ucHVzaCh2YWxpZGF0aW9uLm5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl19
277
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLWZvcm1seS51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi91dGlscy9lZGl0b3ItZm9ybWx5LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBSW5DLE9BQU8sRUFHSCxxQkFBcUIsRUFFckIsb0JBQW9CLEVBQ3BCLHFCQUFxQixFQUNyQix5QkFBeUIsRUFDekIseUJBQXlCLEVBQ3pCLCtCQUErQixFQUdsQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRzdFLE1BQU0sT0FBTyxnQkFBZ0I7SUFDbEIsTUFBTSxDQUFDLGdDQUFnQyxDQUFDLFVBQWlDLEVBQUUsbUJBQWtEO1FBQ2hJLE1BQU0sTUFBTSxHQUF3QixFQUFFLENBQUM7UUFFdkMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUU7WUFDNUQsZ0JBQWdCO1lBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7U0FDMUc7YUFBTTtZQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQztTQUM5RjtRQUVELG1JQUFtSTtRQUNuSSxJQUFJLFVBQVUsQ0FBQyxXQUFXLEVBQUU7WUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDUixHQUFHLEVBQUUsVUFBVSxDQUFDLGdDQUFn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ZUFBZSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztpQkFDeEU7YUFDSjtpQkFBTTtnQkFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxFQUFFO29CQUNuRCxNQUFNLENBQUMsZUFBZSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7aUJBQzFDO2dCQUNELE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDM0Q7U0FDSjtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7Rm9ybWx5RmllbGRDb25maWd9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7TW5nRm9ybWx5RmllbGRDb25maWd9IGZyb20gJy4uL2NvbXBvbmVudHMvZm9ybS9mb3JtbHkvbW9kZWxzJztcbmltcG9ydCB7SUZvcm1FZGl0b3JDb21wb25lbnR9IGZyb20gJy4uL2NvbXBvbmVudHMvZm9ybS9tb2RlbHMnO1xuaW1wb3J0IHtcbiAgICBBRmllbGREZXNjcmlwdG9yLFxuICAgIEVkaXRvckRlc2NyaXB0b3IsXG4gICAgRmllbGRBY3Rpb25EZXNjcmlwdG9yLFxuICAgIEZpZWxkR3JvdXBEZXNjcmlwdG9yLFxuICAgIEZpZWxkSW5wdXREZXNjcmlwdG9yLFxuICAgIEZpZWxkTG9va3VwRGVzY3JpcHRvcixcbiAgICBGaWVsZExvb2t1cEVudW1EZXNjcmlwdG9yLFxuICAgIEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3IsXG4gICAgRmllbGRNYW55VG9NYW55RWRpdG9yRGVzY3JpcHRvcixcbiAgICBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcixcbiAgICBGaWVsZFZhbGlkYXRpb25EZXNjcmlwdG9yXG59IGZyb20gJy4uL2Rlc2NyaXB0b3JzJztcbmltcG9ydCB7RmllbGRJbnB1dFR5cGVFbnVtLCBGaWVsZExvb2t1cFR5cGVFbnVtfSBmcm9tICcuLi9kZXNjcmlwdG9ycy90eXBlcyc7XG5pbXBvcnQge01uZ0ZpZWxkQXN5bmNWYWxpZGF0b3J9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEVkaXRvckZvcm1seVV0aWwge1xuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRm9ybWx5Q29uZmlnRnJvbURlc2NyaXB0b3IoZGVzY3JpcHRvcjogRWRpdG9yRGVzY3JpcHRvcjxhbnk+LCBmb3JtRWRpdG9yQ29tcG9uZW50OiBJRm9ybUVkaXRvckNvbXBvbmVudDx1bmtub3duPik6IEZvcm1seUZpZWxkQ29uZmlnW10ge1xuICAgICAgICBjb25zdCBmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXTtcblxuICAgICAgICBpZiAoZGVzY3JpcHRvci50YWJzLmxlbmd0aCA9PT0gMSAmJiBkZXNjcmlwdG9yLnRhYnNbMF0uZGVmYXVsdCkge1xuICAgICAgICAgICAgLy8gZG9udCB1c2UgdGFic1xuICAgICAgICAgICAgZmllbGRzLnB1c2goLi4uRWRpdG9yRm9ybWx5VXRpbC5jcmVhdGVGb3JtbHlHcm91cFR5cGUoZGVzY3JpcHRvci50YWJzWzBdLmZpZWxkcywgZm9ybUVkaXRvckNvbXBvbmVudCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmllbGRzLnB1c2goLi4uRWRpdG9yRm9ybWx5VXRpbC5jcmVhdGVGb3JtbHlUYWJUeXBlKGRlc2NyaXB0b3IudGFicywgZm9ybUVkaXRvckNvbXBvbmVudCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgYSBmaWVsZCBpcyBsb2NhbGl6ZWQsIHdlIGFwcGVuZCBhIGhpZGRlbiBmaWVsZCB0byBvdXIgZm9ybSwgc28gd2UgY2FuIGFkZC91cGRhdGUgbmV3IGxvY2FsaXphdGlvbiB2YWx1ZXMgdG8gdGhlIGZvcm0gbGF0ZXIgb25cbiAgICAgICAgaWYgKGRlc2NyaXB0b3IuaXNMb2NhbGl6ZWQpIHtcbiAgICAgICAgICAgIGZpZWxkcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBrZXk6IGRlc2NyaXB0b3IubG9jYWxpemF0aW9uTG9jYWxpemF0aW9uUHJvcGVydHksXG4gICAgICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvclxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkcztcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUZvcm1seVRhYlR5cGUodGFiR3JvdXBzOiBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcjxhbnk+W10sIGZvcm1FZGl0b3JDb21wb25lbnQ6IElGb3JtRWRpdG9yQ29tcG9uZW50PHVua25vd24+KTogRm9ybWx5RmllbGRDb25maWdbXSB7XG4gICAgICAgIGNvbnN0IHRhYnNGaWVsZDogRm9ybWx5RmllbGRDb25maWcgPSB7XG4gICAgICAgICAgICB0eXBlOiAndGFicycsXG4gICAgICAgICAgICBmaWVsZEdyb3VwOiBbXSxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgZm9ybUVkaXRvckNvbXBvbmVudFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IHRhYiBvZiB0YWJHcm91cHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhYkZpZWxkOiBNbmdGb3JtbHlGaWVsZENvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICBpZDogdGFiLm5hbWUsXG4gICAgICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUVkaXRvckNvbXBvbmVudFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbnM6IHt9LFxuICAgICAgICAgICAgICAgIGZpZWxkR3JvdXA6IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHRhYi50aXRsZSkge1xuICAgICAgICAgICAgICAgIHRhYkZpZWxkLnByb3BzLmxhYmVsID0gdGFiLnRpdGxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFiRmllbGQuZmllbGRHcm91cCEucHVzaCguLi5FZGl0b3JGb3JtbHlVdGlsLmNyZWF0ZUZvcm1seUdyb3VwVHlwZSh0YWIuZmllbGRzLCBmb3JtRWRpdG9yQ29tcG9uZW50KSk7XG4gICAgICAgICAgICB0YWJzRmllbGQuZmllbGRHcm91cCEucHVzaCh0YWJGaWVsZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFt0YWJzRmllbGRdO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRm9ybWx5R3JvdXBUeXBlKGdyb3VwczogRmllbGRHcm91cERlc2NyaXB0b3I8YW55PltdLCBmb3JtRWRpdG9yQ29tcG9uZW50OiBJRm9ybUVkaXRvckNvbXBvbmVudDx1bmtub3duPik6IEZvcm1seUZpZWxkQ29uZmlnW10ge1xuICAgICAgICBpZiAoZ3JvdXBzLmxlbmd0aCA9PT0gMSAmJiBncm91cHNbMF0uZGVmYXVsdCkge1xuICAgICAgICAgICAgLy8gZG9udCB1c2UgZmllbGRzZXQsIGp1c3QgY3JlYXRlIGZpZWxkc1xuICAgICAgICAgICAgcmV0dXJuIEVkaXRvckZvcm1seVV0aWwuY3JlYXRlRm9ybWx5RmllbGRzKGdyb3Vwc1swXSwgZm9ybUVkaXRvckNvbXBvbmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBncm91cHNGaWVsZDogTW5nRm9ybWx5RmllbGRDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2ZpZWxkc2V0JyxcbiAgICAgICAgICAgICAgICBmaWVsZEdyb3VwOiBbXSxcbiAgICAgICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgICAgICBmb3JtRWRpdG9yQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uczoge31cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIGdyb3Vwcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwRmllbGQ6IE1uZ0Zvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICBpZDogZ3JvdXAubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3I6IGdyb3VwXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgZmllbGRHcm91cDogW11cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmIChncm91cC50aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICBncm91cEZpZWxkLnByb3BzLmxhYmVsID0gZ3JvdXAudGl0bGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGdyb3VwRmllbGQuZmllbGRHcm91cCEucHVzaCguLi5FZGl0b3JGb3JtbHlVdGlsLmNyZWF0ZUZvcm1seUZpZWxkcyhncm91cCwgZm9ybUVkaXRvckNvbXBvbmVudCkpO1xuICAgICAgICAgICAgICAgIGdyb3Vwc0ZpZWxkLmZpZWxkR3JvdXAhLnB1c2goZ3JvdXBGaWVsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW2dyb3Vwc0ZpZWxkXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRm9ybWx5RmllbGRzKGRlc2NyaXB0b3I6IEZpZWxkR3JvdXBEZXNjcmlwdG9yPGFueT4sIGZvcm1FZGl0b3JDb21wb25lbnQ6IElGb3JtRWRpdG9yQ29tcG9uZW50PHVua25vd24+KTogRm9ybWx5RmllbGRDb25maWdbXSB7XG4gICAgICAgIGNvbnN0IGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGRlc2NyaXB0b3JGaWVsZCBvZiBkZXNjcmlwdG9yLmZpZWxkcykge1xuICAgICAgICAgICAgZmllbGRzLnB1c2goRWRpdG9yRm9ybWx5VXRpbC5jcmVhdGVGb3JtbHlGaWVsZChkZXNjcmlwdG9yRmllbGQsIGZvcm1FZGl0b3JDb21wb25lbnQpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyB3cmFwIGluIGdyb3VwIHRvIGJlIGFibGUgdG8gdXNlIGZsZXggZ3JpZFxuICAgICAgICBjb25zdCB3cmFwcGVyR3JvdXA6IEZvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICAgICAgZmllbGRHcm91cENsYXNzTmFtZTogJ3AtZmx1aWQgZm9ybWdyaWQgZ3JpZCcsXG4gICAgICAgICAgICBmaWVsZEdyb3VwOiBmaWVsZHNcbiAgICAgICAgfTtcblxuICAgICAgICBFZGl0b3JGb3JtbHlVdGlsLmFkZFZhbGlkYXRpb25zVG9Gb3JtbHlGaWVsZCh3cmFwcGVyR3JvdXAsIGRlc2NyaXB0b3IudmFsaWRhdGlvbnMpO1xuXG4gICAgICAgIHJldHVybiBbd3JhcHBlckdyb3VwXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUZvcm1seUZpZWxkKGRlc2NyaXB0b3I6IEFGaWVsZERlc2NyaXB0b3I8YW55LCBhbnk+LCBmb3JtRWRpdG9yQ29tcG9uZW50OiBJRm9ybUVkaXRvckNvbXBvbmVudDx1bmtub3duPik6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgICAgICAgY29uc3QgZmllbGQ6IE1uZ0Zvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICAgICAga2V5OiBkZXNjcmlwdG9yLnByb3BlcnR5LFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLFxuICAgICAgICAgICAgICAgIGZvcm1FZGl0b3JDb21wb25lbnRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleHByZXNzaW9uczoge31cbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgY2xhc3NOYW1lID0gZGVzY3JpcHRvci5jbGFzc05hbWU7XG4gICAgICAgIGlmICghY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICAvLyBhc3NpZ24gZGVmYXVsdCBmaWVsZCB3aWR0aCB0aHJvdWdoIGVudGlyZSByb3dcbiAgICAgICAgICAgIGNsYXNzTmFtZSA9ICdjb2wtMTInO1xuICAgICAgICB9XG4gICAgICAgIGZpZWxkLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcblxuICAgICAgICBpZiAoZGVzY3JpcHRvciBpbnN0YW5jZW9mIEZpZWxkSW5wdXREZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGRlc2NyaXB0b3IuZmllbGRUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0VHlwZUVudW0uSGlkZGVuOlxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXRUeXBlRW51bS5MYWJlbDpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdsYWJlbCc7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBmaWVsZC5rZXk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLlRleHRhcmVhOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ3RleHRhcmVhJztcbiAgICAgICAgICAgICAgICAgICAgZmllbGQucHJvcHMubWF4TGVuZ3RoID0gZGVzY3JpcHRvci5tYXhMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnByb3BzLm1pbkxlbmd0aCA9IGRlc2NyaXB0b3IubWluTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC5wcm9wcy5wYXR0ZXJuID0gZGVzY3JpcHRvci5wYXR0ZXJuO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXRUeXBlRW51bS5OdW1iZXI6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnbnVtYmVyJztcbiAgICAgICAgICAgICAgICAgICAgZmllbGQucHJvcHMubWluID0gZGVzY3JpcHRvci5udW1iZXJNaW47XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnByb3BzLm1heCA9IGRlc2NyaXB0b3IubnVtYmVyTWF4O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXRUeXBlRW51bS5DdXJyZW5jeTpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdjdXJyZW5jeSc7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnByb3BzLm1pbiA9IGRlc2NyaXB0b3IubnVtYmVyTWluO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC5wcm9wcy5tYXggPSBkZXNjcmlwdG9yLm51bWJlck1heDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0VHlwZUVudW0uU3dpdGNoOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ3N3aXRjaCc7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLmRlZmF1bHRWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXRUeXBlRW51bS5SYWRpbzpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdyYWRpbyc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLkRhdGVwaWNrZXI6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnZGF0ZXBpY2tlcic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLk1hc2s6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnbWFzayc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLkZpbGU6XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0VHlwZUVudW0uSW1hZ2VGaWxlOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ2ZpbGUnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXRUeXBlRW51bS5JbWFnZVVybDpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdpbWFnZVVybCc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLkN1c3RvbTpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9IGRlc2NyaXB0b3IuY3VzdG9tQ29tcG9uZW50TmFtZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdpbnB1dCc7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnByb3BzLm1pbkxlbmd0aCA9IGRlc2NyaXB0b3IubWluTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC5wcm9wcy5tYXhMZW5ndGggPSBkZXNjcmlwdG9yLm1heExlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQucHJvcHMucGF0dGVybiA9IGRlc2NyaXB0b3IucGF0dGVybjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvciBpbnN0YW5jZW9mIEZpZWxkQWN0aW9uRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgZmllbGQudHlwZSA9ICdhY3Rpb24nO1xuICAgICAgICAgICAgZGVsZXRlIGZpZWxkLmtleTtcbiAgICAgICAgfSBlbHNlIGlmIChkZXNjcmlwdG9yIGluc3RhbmNlb2YgRmllbGRMb29rdXBFbnVtRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgZmllbGQudHlwZSA9ICdlbnVtJztcbiAgICAgICAgfSBlbHNlIGlmIChkZXNjcmlwdG9yIGluc3RhbmNlb2YgRmllbGRMb29rdXBEZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGRlc2NyaXB0b3IubG9va3VwVHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRMb29rdXBUeXBlRW51bS5BdXRvY29tcGxldGU6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnYXV0b2NvbXBsZXRlJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZExvb2t1cFR5cGVFbnVtLkRpYWxvZzpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdkaWFsb2cnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkTG9va3VwVHlwZUVudW0uRHJvcGRvd246XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdkcm9wZG93bic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3IgaW5zdGFuY2VvZiBGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICBmaWVsZC50eXBlID0gJ3RhYmxlLWRpYWxvZy1tdWx0aXNlbGVjdCc7XG4gICAgICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvciBpbnN0YW5jZW9mIEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAndGFibGUtZGlhbG9nLWZvcm0nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlc2NyaXB0b3IubGFiZWwpIHtcbiAgICAgICAgICAgIGZpZWxkLnByb3BzLmxhYmVsID0gZGVzY3JpcHRvci5sYWJlbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZXNjcmlwdG9yLnJlcXVpcmVkRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgZmllbGQuZXhwcmVzc2lvbnMhWydwcm9wcy5yZXF1aXJlZCddID0gZGVzY3JpcHRvci5yZXF1aXJlZEV4cHJlc3Npb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlc2NyaXB0b3IucmVxdWlyZWQpIHtcbiAgICAgICAgICAgIGZpZWxkLnByb3BzIS5yZXF1aXJlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5yZXF1aXJlZEhpZGVMYWJlbE1hcmtlcikge1xuICAgICAgICAgICAgICAgIGZpZWxkLnByb3BzIVsnaGlkZVJlcXVpcmVkTWFya2VyJ10gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlc2NyaXB0b3IuaGlkZGVuRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgZmllbGQuZXhwcmVzc2lvbnMhWydoaWRlJ10gPSBkZXNjcmlwdG9yLmhpZGRlbkV4cHJlc3Npb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVzY3JpcHRvci5kaXNhYmxlZEV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIGZpZWxkLmV4cHJlc3Npb25zIVsncHJvcHMuZGlzYWJsZWQnXSA9IGRlc2NyaXB0b3IuZGlzYWJsZWRFeHByZXNzaW9uO1xuICAgICAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3IuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGZpZWxkLnByb3BzLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpZWxkLmV4cHJlc3Npb25zIVsncHJvcHMuZGlzYWJsZWQnXSA9ICdmb3JtU3RhdGUuZGlzYWJsZWQnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBkZXNjcmlwdG9yLmRlZmF1bHRWYWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGZpZWxkLmRlZmF1bHRWYWx1ZSA9IGRlc2NyaXB0b3IuZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgRWRpdG9yRm9ybWx5VXRpbC5hZGRWYWxpZGF0aW9uc1RvRm9ybWx5RmllbGQoZmllbGQsIGRlc2NyaXB0b3IudmFsaWRhdGlvbnMpO1xuICAgICAgICBFZGl0b3JGb3JtbHlVdGlsLmFkZEFzeW5jVmFsaWRhdGlvbnNUb0Zvcm1seUZpZWxkKGZpZWxkLCBkZXNjcmlwdG9yLmFzeW5jVmFsaWRhdGlvbnMpO1xuXG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGFkZFZhbGlkYXRpb25zVG9Gb3JtbHlGaWVsZChjb25maWc6IEZvcm1seUZpZWxkQ29uZmlnLCB2YWxpZGF0aW9uczogQXJyYXk8RmllbGRWYWxpZGF0aW9uRGVzY3JpcHRvcj4pIHtcbiAgICAgICAgaWYgKCFjb25maWcudmFsaWRhdG9ycykge1xuICAgICAgICAgICAgY29uZmlnLnZhbGlkYXRvcnMgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgdmFsaWRhdGlvbiBvZiB2YWxpZGF0aW9ucykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0aW9uLnZhbGlkYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGNvbmZpZy52YWxpZGF0b3JzW3ZhbGlkYXRpb24ubmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IChcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM/OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkOiBzdHJpbmddOiBhbnk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9yUmVzID0gdmFsaWRhdGlvbi52YWxpZGF0b3IhKGNvbnRyb2wsIGZpZWxkLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvcm1seSB2YWxpZGF0b3Igb25seSBleGNlcHRzIHRydWUvZmFsc2UgZm9yIHZhbGlkYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hcCBwb3NzaWJsZSBhbmd1bGFyIHZhbGlkYXRvciByZXN1bHQgdG8gdHJ1ZS9mYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWxpZGF0b3JSZXMgPT09ICdib29sZWFuJyA/IHZhbGlkYXRvclJlcyA6IHZhbGlkYXRvclJlcyA9PT0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0aW9uLm1lc3NhZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLnZhbGlkYXRvcnNbdmFsaWRhdGlvbi5uYW1lXS5tZXNzYWdlID0gdmFsaWRhdGlvbi5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbmZpZy52YWxpZGF0b3JzLnZhbGlkYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy52YWxpZGF0b3JzLnZhbGlkYXRpb24gPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uZmlnLnZhbGlkYXRvcnMudmFsaWRhdGlvbi5wdXNoKHZhbGlkYXRpb24ubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGFkZEFzeW5jVmFsaWRhdGlvbnNUb0Zvcm1seUZpZWxkKGNvbmZpZzogRm9ybWx5RmllbGRDb25maWcsIGFzeW5jVmFsaWRhdGlvbnM6IEFycmF5PEZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3I+KSB7XG4gICAgICAgIGlmICghY29uZmlnLmFzeW5jVmFsaWRhdG9ycykge1xuICAgICAgICAgICAgY29uZmlnLmFzeW5jVmFsaWRhdG9ycyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCB2YWxpZGF0aW9uIG9mIGFzeW5jVmFsaWRhdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGlvbi52YWxpZGF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBjb25maWcuYXN5bmNWYWxpZGF0b3JzW3ZhbGlkYXRpb24ubmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IChcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM/OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkOiBzdHJpbmddOiBhbnk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gPE1uZ0ZpZWxkQXN5bmNWYWxpZGF0b3I+dmFsaWRhdGlvbi52YWxpZGF0b3I7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRvck9iczogT2JzZXJ2YWJsZTxWYWxpZGF0aW9uRXJyb3JzIHwgYm9vbGVhbiB8IG51bGw+ID0gdmFsaWRhdG9yKGNvbnRyb2wsIGZpZWxkLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvcm1seSB2YWxpZGF0b3Igb25seSBleGNlcHRzIHRydWUvZmFsc2UgZm9yIHZhbGlkYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hcCBwb3NzaWJsZSBhbmd1bGFyIHZhbGlkYXRvciByZXN1bHQgdG8gdHJ1ZS9mYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRvck9icy5waXBlKG1hcCh2YWx1ZSA9PiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgPyB2YWx1ZSA6IHZhbHVlID09PSBudWxsKSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbGlkYXRpb24ubWVzc2FnZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuYXN5bmNWYWxpZGF0b3JzW3ZhbGlkYXRpb24ubmFtZV0ubWVzc2FnZSA9IHZhbGlkYXRpb24ubWVzc2FnZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb25maWcuYXN5bmNWYWxpZGF0b3JzLnZhbGlkYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5hc3luY1ZhbGlkYXRvcnMudmFsaWRhdGlvbiA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25maWcuYXN5bmNWYWxpZGF0b3JzLnZhbGlkYXRpb24ucHVzaCh2YWxpZGF0aW9uLm5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl19