@mediusinc/mng-commons 1.3.0-1c14fa2b → 1.5.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/assets/i18n/en.json +9 -0
  2. package/assets/i18n/sl.json +9 -0
  3. package/esm2020/lib/components/action/action.component.mjs +68 -16
  4. package/esm2020/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +6 -1
  5. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +21 -2
  6. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +6 -1
  7. package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +31 -6
  8. package/esm2020/lib/components/tableview/table/table.component.mjs +3 -3
  9. package/esm2020/lib/descriptors/action.descriptor.mjs +18 -1
  10. package/esm2020/lib/descriptors/table.descriptor.mjs +16 -1
  11. package/esm2020/lib/mng-commons.module.mjs +15 -5
  12. package/esm2020/lib/services/action-executor.service.mjs +5 -2
  13. package/esm2020/lib/services/commons.service.mjs +6 -4
  14. package/esm2020/lib/types/i18n.type.mjs +2 -0
  15. package/esm2020/lib/types/index.mjs +2 -1
  16. package/esm2020/lib/utils/export.util.mjs +20 -0
  17. package/esm2020/lib/utils/i18n.util.mjs +49 -6
  18. package/esm2020/lib/utils/index.mjs +2 -1
  19. package/fesm2015/mediusinc-mng-commons.mjs +248 -33
  20. package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
  21. package/fesm2020/mediusinc-mng-commons.mjs +249 -34
  22. package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
  23. package/lib/components/action/action.component.d.ts +8 -3
  24. package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +4 -0
  25. package/lib/descriptors/action.descriptor.d.ts +6 -0
  26. package/lib/descriptors/table.descriptor.d.ts +5 -0
  27. package/lib/mng-commons.module.d.ts +16 -14
  28. package/lib/types/i18n.type.d.ts +1 -0
  29. package/lib/types/index.d.ts +1 -0
  30. package/lib/utils/export.util.d.ts +5 -0
  31. package/lib/utils/i18n.util.d.ts +31 -2
  32. package/lib/utils/index.d.ts +1 -0
  33. package/package.json +1 -1
  34. package/scss/common/theme/designer/_components.scss +4 -4
  35. package/scss/mng-overrides/_layout_menu.scss +4 -0
  36. package/version-info.json +6 -6
@@ -34,6 +34,8 @@ import { RadioButtonModule } from 'primeng/radiobutton';
34
34
  import { RippleModule } from 'primeng/ripple';
35
35
  import { SelectButtonModule } from 'primeng/selectbutton';
36
36
  import { SkeletonModule } from 'primeng/skeleton';
37
+ import { SlideMenuModule } from 'primeng/slidemenu';
38
+ import { SplitButtonModule } from 'primeng/splitbutton';
37
39
  import { TableModule } from 'primeng/table';
38
40
  import { TabViewModule } from 'primeng/tabview';
39
41
  import { TagModule } from 'primeng/tag';
@@ -84,6 +86,7 @@ export const primeNgModules = [
84
86
  RadioButtonModule,
85
87
  RippleModule,
86
88
  SelectButtonModule,
89
+ SplitButtonModule,
87
90
  TableModule,
88
91
  TagModule,
89
92
  ToastModule,
@@ -95,7 +98,8 @@ export const primeNgModules = [
95
98
  TabViewModule,
96
99
  FieldsetModule,
97
100
  MultiSelectModule,
98
- SkeletonModule
101
+ SkeletonModule,
102
+ SlideMenuModule
99
103
  ];
100
104
  const declarations = [
101
105
  // directives
@@ -309,6 +313,7 @@ MngCommonsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versio
309
313
  RadioButtonModule,
310
314
  RippleModule,
311
315
  SelectButtonModule,
316
+ SplitButtonModule,
312
317
  TableModule,
313
318
  TagModule,
314
319
  ToastModule,
@@ -320,7 +325,8 @@ MngCommonsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versio
320
325
  TabViewModule,
321
326
  FieldsetModule,
322
327
  MultiSelectModule,
323
- SkeletonModule, ImageModule], exports: [AutoCompleteModule,
328
+ SkeletonModule,
329
+ SlideMenuModule, ImageModule], exports: [AutoCompleteModule,
324
330
  BreadcrumbModule,
325
331
  ButtonModule,
326
332
  CalendarModule,
@@ -342,6 +348,7 @@ MngCommonsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versio
342
348
  RadioButtonModule,
343
349
  RippleModule,
344
350
  SelectButtonModule,
351
+ SplitButtonModule,
345
352
  TableModule,
346
353
  TagModule,
347
354
  ToastModule,
@@ -353,7 +360,8 @@ MngCommonsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versio
353
360
  TabViewModule,
354
361
  FieldsetModule,
355
362
  MultiSelectModule,
356
- SkeletonModule,
363
+ SkeletonModule,
364
+ SlideMenuModule,
357
365
  // directives
358
366
  MngComponentDirective,
359
367
  MngTemplateDirective,
@@ -439,6 +447,7 @@ MngCommonsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", versio
439
447
  RadioButtonModule,
440
448
  RippleModule,
441
449
  SelectButtonModule,
450
+ SplitButtonModule,
442
451
  TableModule,
443
452
  TagModule,
444
453
  ToastModule,
@@ -450,7 +459,8 @@ MngCommonsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", versio
450
459
  TabViewModule,
451
460
  FieldsetModule,
452
461
  MultiSelectModule,
453
- SkeletonModule] });
462
+ SkeletonModule,
463
+ SlideMenuModule] });
454
464
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngCommonsModule, decorators: [{
455
465
  type: NgModule,
456
466
  args: [{
@@ -472,4 +482,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
472
482
  exports: [...primeNgModules, ...declarations]
473
483
  }]
474
484
  }] });
475
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW5nLWNvbW1vbnMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9tbmctY29tbW9ucy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxVQUFVLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRSxPQUFPLEVBQUMsZUFBZSxFQUF1QixRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRTdDLE9BQU8sRUFBQyxhQUFhLEVBQUUsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDN0QsT0FBTyxFQUFDLGVBQWUsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3RFLE9BQU8sRUFBQyxtQkFBbUIsRUFBRSxjQUFjLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDaEUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBQyxrQkFB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Q2pCLFdBQVcsRUFqSGYsa0JBQWtCO1FBQ2xCLGdCQUFnQjtRQUNoQixZQUFZO1FBQ1osY0FBYztRQUNkLFVBQVU7UUFDVixjQUFjO1FBQ2QsVUFBVTtRQUNWLG1CQUFtQjtRQUNuQixrQkFBa0I7UUFDbEIsWUFBWTtRQUNaLG1CQUFtQjtRQUNuQixjQUFjO1FBQ2QsZ0JBQWdCO1FBQ2hCLGlCQUFpQjtRQUNqQixlQUFlO1FBQ2YsaUJBQWlCO1FBQ2pCLGVBQWU7UUFDZixtQkFBbUI7UUFDbkIsZUFBZTtRQUNmLGlCQUFpQjtRQUNqQixZQUFZO1FBQ1osa0JBQWtCO1FBQ2xCLFdBQVc7UUFDWCxTQUFTO1FBQ1QsV0FBVztRQUNYLGtCQUFrQjtRQUNsQixhQUFhO1FBQ2IsYUFBYTtRQUNiLGNBQWM7UUFDZCxxQkFBcUI7UUFDckIsYUFBYTtRQUNiLGNBQWM7UUFDZCxpQkFBaUI7UUFDakIsY0FBYzsyRkFxRkwsZ0JBQWdCO2tCQW5CNUIsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUU7d0JBQ0wsa0JBQWtCO3dCQUNsQixZQUFZO3dCQUNaLFlBQVk7d0JBQ1osZ0JBQWdCO3dCQUNoQixtQkFBbUI7d0JBRW5CLGdCQUFnQjt3QkFDaEIsZUFBZSxDQUFDLFFBQVEsQ0FBQzs0QkFDckIsTUFBTSxFQUFFLElBQUk7eUJBQ2YsQ0FBQzt3QkFDRixZQUFZLENBQUMsUUFBUSxFQUFFO3dCQUN2QixHQUFHLGNBQWM7d0JBQ2pCLFdBQVc7cUJBQ2Q7b0JBQ0QsWUFBWSxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUM7b0JBQy9CLE9BQU8sRUFBRSxDQUFDLEdBQUcsY0FBYyxFQUFFLEdBQUcsWUFBWSxDQUFDO2lCQUNoRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwQ2xpZW50TW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0FQUF9JTklUSUFMSVpFUiwgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSZWFjdGl2ZUZvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtGT1JNTFlfQ09ORklHLCBGb3JtbHlNb2R1bGV9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtDb25maXJtYXRpb25TZXJ2aWNlLCBNZXNzYWdlU2VydmljZX0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtBdXRvQ29tcGxldGVNb2R1bGV9IGZyb20gJ3ByaW1lbmcvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7QnJlYWRjcnVtYk1vZHVsZX0gZnJvbSAncHJpbWVuZy9icmVhZGNydW1iJztcbmltcG9ydCB7QnV0dG9uTW9kdWxlfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQge0NhbGVuZGFyTW9kdWxlfSBmcm9tICdwcmltZW5nL2NhbGVuZGFyJztcbmltcG9ydCB7Q2FyZE1vZHVsZX0gZnJvbSAncHJpbWVuZy9jYXJkJztcbmltcG9ydCB7Q2hlY2tib3hNb2R1bGV9IGZyb20gJ3ByaW1lbmcvY2hlY2tib3gnO1xuaW1wb3J0IHtDaGlwTW9kdWxlfSBmcm9tICdwcmltZW5nL2NoaXAnO1xuaW1wb3J0IHtDb25maXJtRGlhbG9nTW9kdWxlfSBmcm9tICdwcmltZW5nL2NvbmZpcm1kaWFsb2cnO1xuaW1wb3J0IHtDb25maXJtUG9wdXBNb2R1bGV9IGZyb20gJ3ByaW1lbmcvY29uZmlybXBvcHVwJztcbmltcG9ydCB7RGlhbG9nTW9kdWxlfSBmcm9tICdwcmltZW5nL2RpYWxvZyc7XG5pbXBvcnQge0Ryb3Bkb3duTW9kdWxlfSBmcm9tICdwcmltZW5nL2Ryb3Bkb3duJztcbmltcG9ydCB7RGlhbG9nU2VydmljZSwgRHluYW1pY0RpYWxvZ01vZHVsZX0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7RmllbGRzZXRNb2R1bGV9IGZyb20gJ3ByaW1lbmcvZmllbGRzZXQnO1xuaW1wb3J0IHtGaWxlVXBsb2FkTW9kdWxlfSBmcm9tICdwcmltZW5nL2ZpbGV1cGxvYWQnO1xuaW1wb3J0IHtJbWFnZU1vZHVsZX0gZnJvbSAncHJpbWVuZy9pbWFnZSc7XG5pbXBvcnQge0lucHV0TWFza01vZHVsZX0gZnJvbSAncHJpbWVuZy9pbnB1dG1hc2snO1xuaW1wb3J0IHtJbnB1dE51bWJlck1vZHVsZX0gZnJvbSAncHJpbWVuZy9pbnB1dG51bWJlcic7XG5pbXBvcnQge0lucHV0U3dpdGNoTW9kdWxlfSBmcm9tICdwcmltZW5nL2lucHV0c3dpdGNoJztcbmltcG9ydCB7SW5wdXRUZXh0TW9kdWxlfSBmcm9tICdwcmltZW5nL2lucHV0dGV4dCc7XG5pbXBvcnQge0lucHV0VGV4dGFyZWFNb2R1bGV9IGZyb20gJ3ByaW1lbmcvaW5wdXR0ZXh0YXJlYSc7XG5pbXBvcnQge01lc3NhZ2VzTW9kdWxlfSBmcm9tICdwcmltZW5nL21lc3NhZ2VzJztcbmltcG9ydCB7TXVsdGlTZWxlY3RNb2R1bGV9IGZyb20gJ3ByaW1lbmcvbXVsdGlzZWxlY3QnO1xuaW1wb3J0IHtQYWdpbmF0b3JNb2R1bGV9IGZyb20gJ3ByaW1lbmcvcGFnaW5hdG9yJztcbmltcG9ydCB7UHJvZ3Jlc3NTcGlubmVyTW9kdWxlfSBmcm9tICdwcmltZW5nL3Byb2dyZXNzc3Bpbm5lcic7XG5pbXBvcnQge1JhZGlvQnV0dG9uTW9kdWxlfSBmcm9tICdwcmltZW5nL3JhZGlvYnV0dG9uJztcbmltcG9ydCB7UmlwcGxlTW9kdWxlfSBmcm9tICdwcmltZW5nL3JpcHBsZSc7XG5pbXBvcnQge1NlbGVjdEJ1dHRvbk1vZHVsZX0gZnJvbSAncHJpbWVuZy9zZWxlY3RidXR0b24nO1xuaW1wb3J0IHtTa2VsZXRvbk1vZHVsZX0gZnJvbSAncHJpbWVuZy9za2VsZXRvbic7XG5pbXBvcnQge1RhYmxlTW9kdWxlfSBmcm9tICdwcmltZW5nL3RhYmxlJztcbmltcG9ydCB7VGFiVmlld01vZHVsZX0gZnJvbSAncHJpbWVuZy90YWJ2aWV3JztcbmltcG9ydCB7VGFnTW9kdWxlfSBmcm9tICdwcmltZW5nL3RhZyc7XG5pbXBvcnQge1RvYXN0TW9kdWxlfSBmcm9tICdwcmltZW5nL3RvYXN0JztcbmltcG9ydCB7VG9nZ2xlQnV0dG9uTW9kdWxlfSBmcm9tICdwcmltZW5nL3RvZ2dsZWJ1dHRvbic7XG5pbXBvcnQge1Rvb2xiYXJNb2R1bGV9IGZyb20gJ3ByaW1lbmcvdG9vbGJhcic7XG5pbXBvcnQge1Rvb2x0aXBNb2R1bGV9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XG5cbmltcG9ydCB7T2JqZWN0U2VyaWFsaXplcn0gZnJvbSAnLi9hcGkvdXRpbHMnO1xuaW1wb3J0IHtNbmdBY3Rpb25Db21wb25lbnQsIE1uZ0FjdGlvbkVkaXRvckNvbXBvbmVudCwgTW5nQWN0aW9uUm91dGVDb21wb25lbnQsIE1uZ0RhdGFMYW5ndWFnZURyb3Bkb3duQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvYWN0aW9uJztcbmltcG9ydCB7TW5nQXV0b2NvbXBsZXRlQ29tcG9uZW50LCBNbmdEYXRlUmFuZ2VDb21wb25lbnQsIE1uZ0Ryb3Bkb3duQ29tcG9uZW50LCBNbmdGb3JtRWRpdG9yQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvZm9ybSc7XG5pbXBvcnQge1xuICAgIE1uZ0Zvcm1seUZpZWxkQWN0aW9uQ29tcG9uZW50LFxuICAgIE1uZ0Zvcm1seUZpZWxkQXV0b2NvbXBsZXRlQ29tcG9uZW50LFxuICAgIE1uZ0Zvcm1seUZpZWxkRHJvcGRvd25Db21wb25lbnQsXG4gICAgTW5nRm9ybWx5RmllbGRGaWVsZHNldENvbXBvbmVudCxcbiAgICBNbmdGb3JtbHlGaWVsZElucHV0Q29tcG9uZW50LFxuICAgIE1uZ0Zvcm1seUZpZWxkTGFiZWxDb21wb25lbnQsXG4gICAgTW5nRm9ybWx5RmllbGRMb29rdXBEaWFsb2dDb21wb25lbnQsXG4gICAgTW5nRm9ybWx5RmllbGRUYWJsZURpYWxvZ0Zvcm1Db21wb25lbnQsXG4gICAgTW5nRm9ybWx5RmllbGRUYWJsZURpYWxvZ011bHRpc2VsZWN0Q29tcG9uZW50LFxuICAgIE1uZ0Zvcm1seUZpZWxkVGFic0NvbXBvbmVudFxufSBmcm9tICcuL2NvbXBvbmVudHMvZm9ybS9mb3JtbHkvZmllbGRzJztcbmltcG9ydCB7TW5nRm9ybWx5RmllbGROb0xhYmVsV3JhcHBlckNvbXBvbmVudCwgTW5nRm9ybWx5RmllbGRXcmFwcGVyQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvZm9ybS9mb3JtbHkvd3JhcHBlcnMnO1xuaW1wb3J0IHtcbiAgICBNbmdCcmVhZGNydW1iQ29tcG9uZW50LFxuICAgIE1uZ0Zvb3RlckNvbXBvbmVudCxcbiAgICBNbmdNYWluTGF5b3V0Q29tcG9uZW50LFxuICAgIE1uZ01lbnVDb21wb25lbnQsXG4gICAgTW5nTWVudUl0ZW1Db21wb25lbnQsXG4gICAgTW5nVG9wYmFyQ29tcG9uZW50LFxuICAgIE1uZ1ZlcnNpb25Db21wb25lbnRcbn0gZnJvbSAnLi9jb21wb25lbnRzL2xheW91dCc7XG5pbXBvcnQge01uZ01haW5MYXlvdXRDb21wb25lbnRTZXJ2aWNlfSBmcm9tICcuL2NvbXBvbmVudHMvbGF5b3V0L3NlcnZpY2VzJztcbmltcG9ydCB7TW5nVGFibGVDb2x1bW5GaWx0ZXJDb21wb25lbnQsIE1uZ1RhYmxlQ29sdW1uVmFsdWVDb21wb25lbnQsIE1uZ1RhYmxlQ29tcG9uZW50LCBNbmdUYWJsZXZpZXdDb21wb25lbnQsIE1uZ1RhYmxldmlld1JvdXRlQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGV2aWV3JztcbmltcG9ydCB7TW5nQ29tcG9uZW50RGlyZWN0aXZlLCBNbmdUZW1wbGF0ZURpcmVjdGl2ZX0gZnJvbSAnLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7TW5nTW9kdWxlQ29uZmlnfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQge1xuICAgIEpzb25QYXRoUGlwZSxcbiAgICBNbmdCb29sZWFuUGlwZSxcbiAgICBNbmdDbGFzc01hcFBpcGUsXG4gICAgTW5nRW51bVBpcGUsXG4gICAgTW5nRW51bWVyYXRlQXN5bmNQaXBlLFxuICAgIE1uZ0VudW1lcmF0ZVBpcGUsXG4gICAgTW5nR2V0dGVyUGlwZSxcbiAgICBNbmdJMThuUHJvcGVydHlQaXBlLFxuICAgIE1uZ0xvY2FsZURlZmF1bHRSb3dDbGFzc1BpcGUsXG4gICAgTW5nUGFyYW1ldHJpemVQaXBlLFxuICAgIE1uZ1RlbXBsYXRlUGlwZVxufSBmcm9tICcuL3BpcGVzJztcbmltcG9ydCB7TW5nQXV0aG9yaXphdGlvbkd1YXJkLCBNbmdBdXRob3JpemF0aW9uU2VydmljZX0gZnJvbSAnLi9zZWN1cml0eSc7XG5pbXBvcnQge1xuICAgIERlZmF1bHRNbmdFcnJvck1hcHBlclNlcnZpY2UsXG4gICAgTW5nQWN0aW9uRXhlY3V0b3JTZXJ2aWNlLFxuICAgIE1uZ0NvbW1vbnNTZXJ2aWNlLFxuICAgIE1uZ0NvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgIE1uZ0Vycm9yTWFwcGVyU2VydmljZSxcbiAgICBNbmdOYXZpZ2F0aW9uU2VydmljZSxcbiAgICBNbmdWaWV3Q29udGFpbmVyQ29tcG9uZW50U2VydmljZVxufSBmcm9tICcuL3NlcnZpY2VzJztcbmltcG9ydCB7TW5nQ29tbW9uc0luaXRTZXJ2aWNlLCBtbmdDb21tb25zSW5pdGlhbGl6ZXJQcm92aWRlcn0gZnJvbSAnLi9zZXJ2aWNlcy9pbnRlcm5hbCc7XG5pbXBvcnQge21uZ0NvbmZpZ0pzb25BcHBJbml0aWFsaXplclByb3ZpZGVyLCBtbmdDb25maWd1cmF0aW9uU2VydmljZVByb3ZpZGVyLCBtbmdGb3JtbHlDb25maWdQcm92aWRlcn0gZnJvbSAnLi9zZXJ2aWNlcy9wcm92aWRlcnMnO1xuaW1wb3J0IHtBQ1RJT05fRURJVE9SX0RJQUxPR19DT01QT05FTlRfU0VUVElORywgTU5HX01PRFVMRV9DT05GSUdfSVR9IGZyb20gJy4vc2VydmljZXMvdG9rZW5zJztcbmltcG9ydCB7TW5nVmVyc2lvblNlcnZpY2V9IGZyb20gJy4vc2VydmljZXMvdmVyc2lvbi5zZXJ2aWNlJztcblxuLy8gcHJpbWVuZyBtb2R1bGVzXG5leHBvcnQgY29uc3QgcHJpbWVOZ01vZHVsZXMgPSBbXG4gICAgQXV0b0NvbXBsZXRlTW9kdWxlLFxuICAgIEJyZWFkY3J1bWJNb2R1bGUsXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIENhbGVuZGFyTW9kdWxlLFxuICAgIENhcmRNb2R1bGUsXG4gICAgQ2hlY2tib3hNb2R1bGUsXG4gICAgQ2hpcE1vZHVsZSxcbiAgICBDb25maXJtRGlhbG9nTW9kdWxlLFxuICAgIENvbmZpcm1Qb3B1cE1vZHVsZSxcbiAgICBEaWFsb2dNb2R1bGUsXG4gICAgRHluYW1pY0RpYWxvZ01vZHVsZSxcbiAgICBEcm9wZG93bk1vZHVsZSxcbiAgICBGaWxlVXBsb2FkTW9kdWxlLFxuICAgIElucHV0TnVtYmVyTW9kdWxlLFxuICAgIElucHV0TWFza01vZHVsZSxcbiAgICBJbnB1dFN3aXRjaE1vZHVsZSxcbiAgICBJbnB1dFRleHRNb2R1bGUsXG4gICAgSW5wdXRUZXh0YXJlYU1vZHVsZSxcbiAgICBQYWdpbmF0b3JNb2R1bGUsXG4gICAgUmFkaW9CdXR0b25Nb2R1bGUsXG4gICAgUmlwcGxlTW9kdWxlLFxuICAgIFNlbGVjdEJ1dHRvbk1vZHVsZSxcbiAgICBUYWJsZU1vZHVsZSxcbiAgICBUYWdNb2R1bGUsXG4gICAgVG9hc3RNb2R1bGUsXG4gICAgVG9nZ2xlQnV0dG9uTW9kdWxlLFxuICAgIFRvb2xiYXJNb2R1bGUsXG4gICAgVG9vbHRpcE1vZHVsZSxcbiAgICBNZXNzYWdlc01vZHVsZSxcbiAgICBQcm9ncmVzc1NwaW5uZXJNb2R1bGUsXG4gICAgVGFiVmlld01vZHVsZSxcbiAgICBGaWVsZHNldE1vZHVsZSxcbiAgICBNdWx0aVNlbGVjdE1vZHVsZSxcbiAgICBTa2VsZXRvbk1vZHVsZVxuXTtcblxuY29uc3QgZGVjbGFyYXRpb25zID0gW1xuICAgIC8vIGRpcmVjdGl2ZXNcbiAgICBNbmdDb21wb25lbnREaXJlY3RpdmUsXG4gICAgTW5nVGVtcGxhdGVEaXJlY3RpdmUsXG5cbiAgICAvLyBwaXBlc1xuICAgIEpzb25QYXRoUGlwZSxcbiAgICBNbmdFbnVtUGlwZSxcbiAgICBNbmdCb29sZWFuUGlwZSxcbiAgICBNbmdJMThuUHJvcGVydHlQaXBlLFxuICAgIE1uZ1BhcmFtZXRyaXplUGlwZSxcbiAgICBNbmdHZXR0ZXJQaXBlLFxuICAgIE1uZ1RlbXBsYXRlUGlwZSxcbiAgICBNbmdDbGFzc01hcFBpcGUsXG4gICAgTW5nRW51bWVyYXRlUGlwZSxcbiAgICBNbmdFbnVtZXJhdGVBc3luY1BpcGUsXG4gICAgTW5nTG9jYWxlRGVmYXVsdFJvd0NsYXNzUGlwZSxcblxuICAgIC8vIGxheW91dCBjb21wb25lbnRzXG4gICAgTW5nQnJlYWRjcnVtYkNvbXBvbmVudCxcbiAgICBNbmdGb290ZXJDb21wb25lbnQsXG4gICAgTW5nTWFpbkxheW91dENvbXBvbmVudCxcbiAgICBNbmdNZW51Q29tcG9uZW50LFxuICAgIE1uZ01lbnVJdGVtQ29tcG9uZW50LFxuICAgIE1uZ1RvcGJhckNvbXBvbmVudCxcbiAgICBNbmdWZXJzaW9uQ29tcG9uZW50LFxuXG4gICAgLy8gbW5nIGZpZWxkc1xuICAgIE1uZ0F1dG9jb21wbGV0ZUNvbXBvbmVudCxcbiAgICBNbmdEcm9wZG93bkNvbXBvbmVudCxcbiAgICBNbmdEYXRlUmFuZ2VDb21wb25lbnQsXG5cbiAgICAvLyBmb3JtbHkgd3JhcHBlcnNcbiAgICBNbmdGb3JtbHlGaWVsZFdyYXBwZXJDb21wb25lbnQsXG4gICAgTW5nRm9ybWx5RmllbGROb0xhYmVsV3JhcHBlckNvbXBvbmVudCxcblxuICAgIC8vIGZvcm1seSBmaWVsZHNcbiAgICBNbmdGb3JtbHlGaWVsZElucHV0Q29tcG9uZW50LFxuICAgIE1uZ0Zvcm1seUZpZWxkTGFiZWxDb21wb25lbnQsXG4gICAgTW5nRm9ybWx5RmllbGREcm9wZG93bkNvbXBvbmVudCxcbiAgICBNbmdGb3JtbHlGaWVsZEF1dG9jb21wbGV0ZUNvbXBvbmVudCxcbiAgICBNbmdGb3JtbHlGaWVsZExvb2t1cERpYWxvZ0NvbXBvbmVudCxcbiAgICBNbmdGb3JtbHlGaWVsZFRhYmxlRGlhbG9nTXVsdGlzZWxlY3RDb21wb25lbnQsXG4gICAgTW5nRm9ybWx5RmllbGRUYWJsZURpYWxvZ0Zvcm1Db21wb25lbnQsXG4gICAgTW5nRm9ybWx5RmllbGRUYWJzQ29tcG9uZW50LFxuICAgIE1uZ0Zvcm1seUZpZWxkRmllbGRzZXRDb21wb25lbnQsXG4gICAgTW5nRm9ybWx5RmllbGRBY3Rpb25Db21wb25lbnQsXG5cbiAgICAvLyB0YWJsZSBjb21wb25lbnRzXG4gICAgTW5nVGFibGVDb21wb25lbnQsXG4gICAgTW5nVGFibGV2aWV3Q29tcG9uZW50LFxuICAgIE1uZ1RhYmxlQ29sdW1uVmFsdWVDb21wb25lbnQsXG4gICAgTW5nVGFibGVDb2x1bW5GaWx0ZXJDb21wb25lbnQsXG4gICAgTW5nVGFibGV2aWV3Um91dGVDb21wb25lbnQsXG5cbiAgICAvLyBlZGl0b3IgY29tcG9uZW50c1xuICAgIE1uZ0Zvcm1FZGl0b3JDb21wb25lbnQsXG4gICAgTW5nQWN0aW9uQ29tcG9uZW50LFxuICAgIE1uZ0FjdGlvbkVkaXRvckNvbXBvbmVudCxcbiAgICBNbmdBY3Rpb25Sb3V0ZUNvbXBvbmVudCxcbiAgICBNbmdEYXRhTGFuZ3VhZ2VEcm9wZG93bkNvbXBvbmVudFxuXTtcblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIC8vIGFuZ3VsYXIgbW9kdWxlc1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIFJvdXRlck1vZHVsZSxcbiAgICAgICAgSHR0cENsaWVudE1vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcblxuICAgICAgICAvLyBvdGhlciBtb2R1bGVzXG4gICAgICAgIFRyYW5zbGF0ZU1vZHVsZS5mb3JDaGlsZCh7XG4gICAgICAgICAgICBleHRlbmQ6IHRydWVcbiAgICAgICAgfSksXG4gICAgICAgIEZvcm1seU1vZHVsZS5mb3JDaGlsZCgpLFxuICAgICAgICAuLi5wcmltZU5nTW9kdWxlcyxcbiAgICAgICAgSW1hZ2VNb2R1bGVcbiAgICBdLFxuICAgIGRlY2xhcmF0aW9uczogWy4uLmRlY2xhcmF0aW9uc10sXG4gICAgZXhwb3J0czogWy4uLnByaW1lTmdNb2R1bGVzLCAuLi5kZWNsYXJhdGlvbnNdXG59KVxuZXhwb3J0IGNsYXNzIE1uZ0NvbW1vbnNNb2R1bGUge1xuICAgIHN0YXRpYyBmb3JSb290KGNvbmZpZzogTW5nTW9kdWxlQ29uZmlnKTogTW9kdWxlV2l0aFByb3ZpZGVyczxNbmdDb21tb25zTW9kdWxlPiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuZ01vZHVsZTogTW5nQ29tbW9uc01vZHVsZSxcbiAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgIC8vIHByaW1lbmcgc2VydmljZXNcbiAgICAgICAgICAgICAgICBEaWFsb2dTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIE1lc3NhZ2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIENvbmZpcm1hdGlvblNlcnZpY2UsXG5cbiAgICAgICAgICAgICAgICAvLyBzZXJ2aWNlc1xuICAgICAgICAgICAgICAgIE1uZ0NvbW1vbnNJbml0U2VydmljZSxcbiAgICAgICAgICAgICAgICBNbmdBY3Rpb25FeGVjdXRvclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgTW5nTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgTW5nQ29tbW9uc1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgTW5nVmVyc2lvblNlcnZpY2UsXG5cbiAgICAgICAgICAgICAgICAvLyBzZWN1cml0eVxuICAgICAgICAgICAgICAgIE1uZ0F1dGhvcml6YXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgIE1uZ0F1dGhvcml6YXRpb25HdWFyZCxcblxuICAgICAgICAgICAgICAgIC8vIHBpcGVzXG4gICAgICAgICAgICAgICAgSnNvblBhdGhQaXBlLFxuICAgICAgICAgICAgICAgIE1uZ0VudW1QaXBlLFxuICAgICAgICAgICAgICAgIE1uZ0Jvb2xlYW5QaXBlLFxuICAgICAgICAgICAgICAgIE1uZ0kxOG5Qcm9wZXJ0eVBpcGUsXG4gICAgICAgICAgICAgICAgTW5nUGFyYW1ldHJpemVQaXBlLFxuICAgICAgICAgICAgICAgIE1uZ0dldHRlclBpcGUsXG4gICAgICAgICAgICAgICAgTW5nVGVtcGxhdGVQaXBlLFxuICAgICAgICAgICAgICAgIE1uZ0NsYXNzTWFwUGlwZSxcbiAgICAgICAgICAgICAgICBNbmdFbnVtZXJhdGVQaXBlLFxuICAgICAgICAgICAgICAgIE1uZ0VudW1lcmF0ZUFzeW5jUGlwZSxcbiAgICAgICAgICAgICAgICBNbmdMb2NhbGVEZWZhdWx0Um93Q2xhc3NQaXBlLFxuXG4gICAgICAgICAgICAgICAgLy8gY29tcG9uZW50IHNlcnZpY2VcbiAgICAgICAgICAgICAgICBNbmdNYWluTGF5b3V0Q29tcG9uZW50U2VydmljZSxcbiAgICAgICAgICAgICAgICBNbmdWaWV3Q29udGFpbmVyQ29tcG9uZW50U2VydmljZSxcblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTU5HX01PRFVMRV9DT05GSUdfSVQsXG4gICAgICAgICAgICAgICAgICAgIHVzZVZhbHVlOiBjb25maWdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogT2JqZWN0U2VyaWFsaXplcixcbiAgICAgICAgICAgICAgICAgICAgdXNlRmFjdG9yeTogKCkgPT4gT2JqZWN0U2VyaWFsaXplci5nZXQoKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBNbmdDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgdXNlRmFjdG9yeTogbW5nQ29uZmlndXJhdGlvblNlcnZpY2VQcm92aWRlcixcbiAgICAgICAgICAgICAgICAgICAgZGVwczogW0h0dHBDbGllbnQsIE1OR19NT0RVTEVfQ09ORklHX0lUXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBBUFBfSU5JVElBTElaRVIsXG4gICAgICAgICAgICAgICAgICAgIHVzZUZhY3Rvcnk6IG1uZ0NvbmZpZ0pzb25BcHBJbml0aWFsaXplclByb3ZpZGVyLFxuICAgICAgICAgICAgICAgICAgICBkZXBzOiBbTW5nQ29uZmlndXJhdGlvblNlcnZpY2UsIE1OR19NT0RVTEVfQ09ORklHX0lUXSxcbiAgICAgICAgICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLFxuICAgICAgICAgICAgICAgICAgICB1c2VGYWN0b3J5OiBtbmdDb21tb25zSW5pdGlhbGl6ZXJQcm92aWRlcixcbiAgICAgICAgICAgICAgICAgICAgZGVwczogW01uZ0NvbW1vbnNJbml0U2VydmljZV0sXG4gICAgICAgICAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEZPUk1MWV9DT05GSUcsXG4gICAgICAgICAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB1c2VGYWN0b3J5OiBtbmdGb3JtbHlDb25maWdQcm92aWRlcixcbiAgICAgICAgICAgICAgICAgICAgZGVwczogW1RyYW5zbGF0ZVNlcnZpY2UsIE1OR19NT0RVTEVfQ09ORklHX0lUXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBBQ1RJT05fRURJVE9SX0RJQUxPR19DT01QT05FTlRfU0VUVElORyxcbiAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWU6IE1uZ0FjdGlvbkVkaXRvckNvbXBvbmVudFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBNbmdFcnJvck1hcHBlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIHVzZUNsYXNzOiBEZWZhdWx0TW5nRXJyb3JNYXBwZXJTZXJ2aWNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9O1xuICAgIH1cbn1cbiJdfQ==
485
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW5nLWNvbW1vbnMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9tbmctY29tbW9ucy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxVQUFVLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRSxPQUFPLEVBQUMsZUFBZSxFQUF1QixRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRTdDLE9BQU8sRUFBQyxhQUFhLEVBQUUsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDN0QsT0FBTyxFQUFDLGVBQWUsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3RFLE9BQU8sRUFBQyxtQkFBbUIsRUFBRSxjQUFjLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDaEUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBQyxrQkFB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WSxDQUFDO2lCQUNoRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwQ2xpZW50TW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0FQUF9JTklUSUFMSVpFUiwgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSZWFjdGl2ZUZvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtGT1JNTFlfQ09ORklHLCBGb3JtbHlNb2R1bGV9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtDb25maXJtYXRpb25TZXJ2aWNlLCBNZXNzYWdlU2VydmljZX0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtBdXRvQ29tcGxldGVNb2R1bGV9IGZyb20gJ3ByaW1lbmcvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7QnJlYWRjcnVtYk1vZHVsZX0gZnJvbSAncHJpbWVuZy9icmVhZGNydW1iJztcbmltcG9ydCB7QnV0dG9uTW9kdWxlfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQge0NhbGVuZGFyTW9kdWxlfSBmcm9tICdwcmltZW5nL2NhbGVuZGFyJztcbmltcG9ydCB7Q2FyZE1vZHVsZX0gZnJvbSAncHJpbWVuZy9jYXJkJztcbmltcG9ydCB7Q2hlY2tib3hNb2R1bGV9IGZyb20gJ3ByaW1lbmcvY2hlY2tib3gnO1xuaW1wb3J0IHtDaGlwTW9kdWxlfSBmcm9tICdwcmltZW5nL2NoaXAnO1xuaW1wb3J0IHtDb25maXJtRGlhbG9nTW9kdWxlfSBmcm9tICdwcmltZW5nL2NvbmZpcm1kaWFsb2cnO1xuaW1wb3J0IHtDb25maXJtUG9wdXBNb2R1bGV9IGZyb20gJ3ByaW1lbmcvY29uZmlybXBvcHVwJztcbmltcG9ydCB7RGlhbG9nTW9kdWxlfSBmcm9tICdwcmltZW5nL2RpYWxvZyc7XG5pbXBvcnQge0Ryb3Bkb3duTW9kdWxlfSBmcm9tICdwcmltZW5nL2Ryb3Bkb3duJztcbmltcG9ydCB7RGlhbG9nU2VydmljZSwgRHluYW1pY0RpYWxvZ01vZHVsZX0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7RmllbGRzZXRNb2R1bGV9IGZyb20gJ3ByaW1lbmcvZmllbGRzZXQnO1xuaW1wb3J0IHtGaWxlVXBsb2FkTW9kdWxlfSBmcm9tICdwcmltZW5nL2ZpbGV1cGxvYWQnO1xuaW1wb3J0IHtJbWFnZU1vZHVsZX0gZnJvbSAncHJpbWVuZy9pbWFnZSc7XG5pbXBvcnQge0lucHV0TWFza01vZHVsZX0gZnJvbSAncHJpbWVuZy9pbnB1dG1hc2snO1xuaW1wb3J0IHtJbnB1dE51bWJlck1vZHVsZX0gZnJvbSAncHJpbWVuZy9pbnB1dG51bWJlcic7XG5pbXBvcnQge0lucHV0U3dpdGNoTW9kdWxlfSBmcm9tICdwcmltZW5nL2lucHV0c3dpdGNoJztcbmltcG9ydCB7SW5wdXRUZXh0TW9kdWxlfSBmcm9tICdwcmltZW5nL2lucHV0dGV4dCc7XG5pbXBvcnQge0lucHV0VGV4dGFyZWFNb2R1bGV9IGZyb20gJ3ByaW1lbmcvaW5wdXR0ZXh0YXJlYSc7XG5pbXBvcnQge01lc3NhZ2VzTW9kdWxlfSBmcm9tICdwcmltZW5nL21lc3NhZ2VzJztcbmltcG9ydCB7TXVsdGlTZWxlY3RNb2R1bGV9IGZyb20gJ3ByaW1lbmcvbXVsdGlzZWxlY3QnO1xuaW1wb3J0IHtQYWdpbmF0b3JNb2R1bGV9IGZyb20gJ3ByaW1lbmcvcGFnaW5hdG9yJztcbmltcG9ydCB7UHJvZ3Jlc3NTcGlubmVyTW9kdWxlfSBmcm9tICdwcmltZW5nL3Byb2dyZXNzc3Bpbm5lcic7XG5pbXBvcnQge1JhZGlvQnV0dG9uTW9kdWxlfSBmcm9tICdwcmltZW5nL3JhZGlvYnV0dG9uJztcbmltcG9ydCB7UmlwcGxlTW9kdWxlfSBmcm9tICdwcmltZW5nL3JpcHBsZSc7XG5pbXBvcnQge1NlbGVjdEJ1dHRvbk1vZHVsZX0gZnJvbSAncHJpbWVuZy9zZWxlY3RidXR0b24nO1xuaW1wb3J0IHtTa2VsZXRvbk1vZHVsZX0gZnJvbSAncHJpbWVuZy9za2VsZXRvbic7XG5pbXBvcnQge1NsaWRlTWVudU1vZHVsZX0gZnJvbSAncHJpbWVuZy9zbGlkZW1lbnUnO1xuaW1wb3J0IHtTcGxpdEJ1dHRvbk1vZHVsZX0gZnJvbSAncHJpbWVuZy9zcGxpdGJ1dHRvbic7XG5pbXBvcnQge1RhYmxlTW9kdWxlfSBmcm9tICdwcmltZW5nL3RhYmxlJztcbmltcG9ydCB7VGFiVmlld01vZHVsZX0gZnJvbSAncHJpbWVuZy90YWJ2aWV3JztcbmltcG9ydCB7VGFnTW9kdWxlfSBmcm9tICdwcmltZW5nL3RhZyc7XG5pbXBvcnQge1RvYXN0TW9kdWxlfSBmcm9tICdwcmltZW5nL3RvYXN0JztcbmltcG9ydCB7VG9nZ2xlQnV0dG9uTW9kdWxlfSBmcm9tICdwcmltZW5nL3RvZ2dsZWJ1dHRvbic7XG5pbXBvcnQge1Rvb2xiYXJNb2R1bGV9IGZyb20gJ3ByaW1lbmcvdG9vbGJhcic7XG5pbXBvcnQge1Rvb2x0aXBNb2R1bGV9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XG5cbmltcG9ydCB7T2JqZWN0U2VyaWFsaXplcn0gZnJvbSAnLi9hcGkvdXRpbHMnO1xuaW1wb3J0IHtNbmdBY3Rpb25Db21wb25lbnQsIE1uZ0FjdGlvbkVkaXRvckNvbXBvbmVudCwgTW5nQWN0aW9uUm91dGVDb21wb25lbnQsIE1uZ0RhdGFMYW5ndWFnZURyb3Bkb3duQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvYWN0aW9uJztcbmltcG9ydCB7TW5nQXV0b2NvbXBsZXRlQ29tcG9uZW50LCBNbmdEYXRlUmFuZ2VDb21wb25lbnQsIE1uZ0Ryb3Bkb3duQ29tcG9uZW50LCBNbmdGb3JtRWRpdG9yQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvZm9ybSc7XG5pbXBvcnQge1xuICAgIE1uZ0Zvcm1seUZpZWxkQWN0aW9uQ29tcG9uZW50LFxuICAgIE1uZ0Zvcm1seUZpZWxkQXV0b2NvbXBsZXRlQ29tcG9uZW50LFxuICAgIE1uZ0Zvcm1seUZpZWxkRHJvcGRvd25Db21wb25lbnQsXG4gICAgTW5nRm9ybWx5RmllbGRGaWVsZHNldENvbXBvbmVudCxcbiAgICBNbmdGb3JtbHlGaWVsZElucHV0Q29tcG9uZW50LFxuICAgIE1uZ0Zvcm1seUZpZWxkTGFiZWxDb21wb25lbnQsXG4gICAgTW5nRm9ybWx5RmllbGRMb29rdXBEaWFsb2dDb21wb25lbnQsXG4gICAgTW5nRm9ybWx5RmllbGRUYWJsZURpYWxvZ0Zvcm1Db21wb25lbnQsXG4gICAgTW5nRm9ybWx5RmllbGRUYWJsZURpYWxvZ011bHRpc2VsZWN0Q29tcG9uZW50LFxuICAgIE1uZ0Zvcm1seUZpZWxkVGFic0NvbXBvbmVudFxufSBmcm9tICcuL2NvbXBvbmVudHMvZm9ybS9mb3JtbHkvZmllbGRzJztcbmltcG9ydCB7TW5nRm9ybWx5RmllbGROb0xhYmVsV3JhcHBlckNvbXBvbmVudCwgTW5nRm9ybWx5RmllbGRXcmFwcGVyQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvZm9ybS9mb3JtbHkvd3JhcHBlcnMnO1xuaW1wb3J0IHtcbiAgICBNbmdCcmVhZGNydW1iQ29tcG9uZW50LFxuICAgIE1uZ0Zvb3RlckNvbXBvbmVudCxcbiAgICBNbmdNYWluTGF5b3V0Q29tcG9uZW50LFxuICAgIE1uZ01lbnVDb21wb25lbnQsXG4gICAgTW5nTWVudUl0ZW1Db21wb25lbnQsXG4gICAgTW5nVG9wYmFyQ29tcG9uZW50LFxuICAgIE1uZ1ZlcnNpb25Db21wb25lbnRcbn0gZnJvbSAnLi9jb21wb25lbnRzL2xheW91dCc7XG5pbXBvcnQge01uZ01haW5MYXlvdXRDb21wb25lbnRTZXJ2aWNlfSBmcm9tICcuL2NvbXBvbmVudHMvbGF5b3V0L3NlcnZpY2VzJztcbmltcG9ydCB7TW5nVGFibGVDb2x1bW5GaWx0ZXJDb21wb25lbnQsIE1uZ1RhYmxlQ29sdW1uVmFsdWVDb21wb25lbnQsIE1uZ1RhYmxlQ29tcG9uZW50LCBNbmdUYWJsZXZpZXdDb21wb25lbnQsIE1uZ1RhYmxldmlld1JvdXRlQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGV2aWV3JztcbmltcG9ydCB7TW5nQ29tcG9uZW50RGlyZWN0aXZlLCBNbmdUZW1wbGF0ZURpcmVjdGl2ZX0gZnJvbSAnLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7TW5nTW9kdWxlQ29uZmlnfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQge1xuICAgIEpzb25QYXRoUGlwZSxcbiAgICBNbmdCb29sZWFuUGlwZSxcbiAgICBNbmdDbGFzc01hcFBpcGUsXG4gICAgTW5nRW51bVBpcGUsXG4gICAgTW5nRW51bWVyYXRlQXN5bmNQaXBlLFxuICAgIE1uZ0VudW1lcmF0ZVBpcGUsXG4gICAgTW5nR2V0dGVyUGlwZSxcbiAgICBNbmdJMThuUHJvcGVydHlQaXBlLFxuICAgIE1uZ0xvY2FsZURlZmF1bHRSb3dDbGFzc1BpcGUsXG4gICAgTW5nUGFyYW1ldHJpemVQaXBlLFxuICAgIE1uZ1RlbXBsYXRlUGlwZVxufSBmcm9tICcuL3BpcGVzJztcbmltcG9ydCB7TW5nQXV0aG9yaXphdGlvbkd1YXJkLCBNbmdBdXRob3JpemF0aW9uU2VydmljZX0gZnJvbSAnLi9zZWN1cml0eSc7XG5pbXBvcnQge1xuICAgIERlZmF1bHRNbmdFcnJvck1hcHBlclNlcnZpY2UsXG4gICAgTW5nQWN0aW9uRXhlY3V0b3JTZXJ2aWNlLFxuICAgIE1uZ0NvbW1vbnNTZXJ2aWNlLFxuICAgIE1uZ0NvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgIE1uZ0Vycm9yTWFwcGVyU2VydmljZSxcbiAgICBNbmdOYXZpZ2F0aW9uU2VydmljZSxcbiAgICBNbmdWaWV3Q29udGFpbmVyQ29tcG9uZW50U2VydmljZVxufSBmcm9tICcuL3NlcnZpY2VzJztcbmltcG9ydCB7TW5nQ29tbW9uc0luaXRTZXJ2aWNlLCBtbmdDb21tb25zSW5pdGlhbGl6ZXJQcm92aWRlcn0gZnJvbSAnLi9zZXJ2aWNlcy9pbnRlcm5hbCc7XG5pbXBvcnQge21uZ0NvbmZpZ0pzb25BcHBJbml0aWFsaXplclByb3ZpZGVyLCBtbmdDb25maWd1cmF0aW9uU2VydmljZVByb3ZpZGVyLCBtbmdGb3JtbHlDb25maWdQcm92aWRlcn0gZnJvbSAnLi9zZXJ2aWNlcy9wcm92aWRlcnMnO1xuaW1wb3J0IHtBQ1RJT05fRURJVE9SX0RJQUxPR19DT01QT05FTlRfU0VUVElORywgTU5HX01PRFVMRV9DT05GSUdfSVR9IGZyb20gJy4vc2VydmljZXMvdG9rZW5zJztcbmltcG9ydCB7TW5nVmVyc2lvblNlcnZpY2V9IGZyb20gJy4vc2VydmljZXMvdmVyc2lvbi5zZXJ2aWNlJztcblxuLy8gcHJpbWVuZyBtb2R1bGVzXG5leHBvcnQgY29uc3QgcHJpbWVOZ01vZHVsZXMgPSBbXG4gICAgQXV0b0NvbXBsZXRlTW9kdWxlLFxuICAgIEJyZWFkY3J1bWJNb2R1bGUsXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIENhbGVuZGFyTW9kdWxlLFxuICAgIENhcmRNb2R1bGUsXG4gICAgQ2hlY2tib3hNb2R1bGUsXG4gICAgQ2hpcE1vZHVsZSxcbiAgICBDb25maXJtRGlhbG9nTW9kdWxlLFxuICAgIENvbmZpcm1Qb3B1cE1vZHVsZSxcbiAgICBEaWFsb2dNb2R1bGUsXG4gICAgRHluYW1pY0RpYWxvZ01vZHVsZSxcbiAgICBEcm9wZG93bk1vZHVsZSxcbiAgICBGaWxlVXBsb2FkTW9kdWxlLFxuICAgIElucHV0TnVtYmVyTW9kdWxlLFxuICAgIElucHV0TWFza01vZHVsZSxcbiAgICBJbnB1dFN3aXRjaE1vZHVsZSxcbiAgICBJbnB1dFRleHRNb2R1bGUsXG4gICAgSW5wdXRUZXh0YXJlYU1vZHVsZSxcbiAgICBQYWdpbmF0b3JNb2R1bGUsXG4gICAgUmFkaW9CdXR0b25Nb2R1bGUsXG4gICAgUmlwcGxlTW9kdWxlLFxuICAgIFNlbGVjdEJ1dHRvbk1vZHVsZSxcbiAgICBTcGxpdEJ1dHRvbk1vZHVsZSxcbiAgICBUYWJsZU1vZHVsZSxcbiAgICBUYWdNb2R1bGUsXG4gICAgVG9hc3RNb2R1bGUsXG4gICAgVG9nZ2xlQnV0dG9uTW9kdWxlLFxuICAgIFRvb2xiYXJNb2R1bGUsXG4gICAgVG9vbHRpcE1vZHVsZSxcbiAgICBNZXNzYWdlc01vZHVsZSxcbiAgICBQcm9ncmVzc1NwaW5uZXJNb2R1bGUsXG4gICAgVGFiVmlld01vZHVsZSxcbiAgICBGaWVsZHNldE1vZHVsZSxcbiAgICBNdWx0aVNlbGVjdE1vZHVsZSxcbiAgICBTa2VsZXRvbk1vZHVsZSxcbiAgICBTbGlkZU1lbnVNb2R1bGVcbl07XG5cbmNvbnN0IGRlY2xhcmF0aW9ucyA9IFtcbiAgICAvLyBkaXJlY3RpdmVzXG4gICAgTW5nQ29tcG9uZW50RGlyZWN0aXZlLFxuICAgIE1uZ1RlbXBsYXRlRGlyZWN0aXZlLFxuXG4gICAgLy8gcGlwZXNcbiAgICBKc29uUGF0aFBpcGUsXG4gICAgTW5nRW51bVBpcGUsXG4gICAgTW5nQm9vbGVhblBpcGUsXG4gICAgTW5nSTE4blByb3BlcnR5UGlwZSxcbiAgICBNbmdQYXJhbWV0cml6ZVBpcGUsXG4gICAgTW5nR2V0dGVyUGlwZSxcbiAgICBNbmdUZW1wbGF0ZVBpcGUsXG4gICAgTW5nQ2xhc3NNYXBQaXBlLFxuICAgIE1uZ0VudW1lcmF0ZVBpcGUsXG4gICAgTW5nRW51bWVyYXRlQXN5bmNQaXBlLFxuICAgIE1uZ0xvY2FsZURlZmF1bHRSb3dDbGFzc1BpcGUsXG5cbiAgICAvLyBsYXlvdXQgY29tcG9uZW50c1xuICAgIE1uZ0JyZWFkY3J1bWJDb21wb25lbnQsXG4gICAgTW5nRm9vdGVyQ29tcG9uZW50LFxuICAgIE1uZ01haW5MYXlvdXRDb21wb25lbnQsXG4gICAgTW5nTWVudUNvbXBvbmVudCxcbiAgICBNbmdNZW51SXRlbUNvbXBvbmVudCxcbiAgICBNbmdUb3BiYXJDb21wb25lbnQsXG4gICAgTW5nVmVyc2lvbkNvbXBvbmVudCxcblxuICAgIC8vIG1uZyBmaWVsZHNcbiAgICBNbmdBdXRvY29tcGxldGVDb21wb25lbnQsXG4gICAgTW5nRHJvcGRvd25Db21wb25lbnQsXG4gICAgTW5nRGF0ZVJhbmdlQ29tcG9uZW50LFxuXG4gICAgLy8gZm9ybWx5IHdyYXBwZXJzXG4gICAgTW5nRm9ybWx5RmllbGRXcmFwcGVyQ29tcG9uZW50LFxuICAgIE1uZ0Zvcm1seUZpZWxkTm9MYWJlbFdyYXBwZXJDb21wb25lbnQsXG5cbiAgICAvLyBmb3JtbHkgZmllbGRzXG4gICAgTW5nRm9ybWx5RmllbGRJbnB1dENvbXBvbmVudCxcbiAgICBNbmdGb3JtbHlGaWVsZExhYmVsQ29tcG9uZW50LFxuICAgIE1uZ0Zvcm1seUZpZWxkRHJvcGRvd25Db21wb25lbnQsXG4gICAgTW5nRm9ybWx5RmllbGRBdXRvY29tcGxldGVDb21wb25lbnQsXG4gICAgTW5nRm9ybWx5RmllbGRMb29rdXBEaWFsb2dDb21wb25lbnQsXG4gICAgTW5nRm9ybWx5RmllbGRUYWJsZURpYWxvZ011bHRpc2VsZWN0Q29tcG9uZW50LFxuICAgIE1uZ0Zvcm1seUZpZWxkVGFibGVEaWFsb2dGb3JtQ29tcG9uZW50LFxuICAgIE1uZ0Zvcm1seUZpZWxkVGFic0NvbXBvbmVudCxcbiAgICBNbmdGb3JtbHlGaWVsZEZpZWxkc2V0Q29tcG9uZW50LFxuICAgIE1uZ0Zvcm1seUZpZWxkQWN0aW9uQ29tcG9uZW50LFxuXG4gICAgLy8gdGFibGUgY29tcG9uZW50c1xuICAgIE1uZ1RhYmxlQ29tcG9uZW50LFxuICAgIE1uZ1RhYmxldmlld0NvbXBvbmVudCxcbiAgICBNbmdUYWJsZUNvbHVtblZhbHVlQ29tcG9uZW50LFxuICAgIE1uZ1RhYmxlQ29sdW1uRmlsdGVyQ29tcG9uZW50LFxuICAgIE1uZ1RhYmxldmlld1JvdXRlQ29tcG9uZW50LFxuXG4gICAgLy8gZWRpdG9yIGNvbXBvbmVudHNcbiAgICBNbmdGb3JtRWRpdG9yQ29tcG9uZW50LFxuICAgIE1uZ0FjdGlvbkNvbXBvbmVudCxcbiAgICBNbmdBY3Rpb25FZGl0b3JDb21wb25lbnQsXG4gICAgTW5nQWN0aW9uUm91dGVDb21wb25lbnQsXG4gICAgTW5nRGF0YUxhbmd1YWdlRHJvcGRvd25Db21wb25lbnRcbl07XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW1xuICAgICAgICAvLyBhbmd1bGFyIG1vZHVsZXNcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBSb3V0ZXJNb2R1bGUsXG4gICAgICAgIEh0dHBDbGllbnRNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG5cbiAgICAgICAgLy8gb3RoZXIgbW9kdWxlc1xuICAgICAgICBUcmFuc2xhdGVNb2R1bGUuZm9yQ2hpbGQoe1xuICAgICAgICAgICAgZXh0ZW5kOiB0cnVlXG4gICAgICAgIH0pLFxuICAgICAgICBGb3JtbHlNb2R1bGUuZm9yQ2hpbGQoKSxcbiAgICAgICAgLi4ucHJpbWVOZ01vZHVsZXMsXG4gICAgICAgIEltYWdlTW9kdWxlXG4gICAgXSxcbiAgICBkZWNsYXJhdGlvbnM6IFsuLi5kZWNsYXJhdGlvbnNdLFxuICAgIGV4cG9ydHM6IFsuLi5wcmltZU5nTW9kdWxlcywgLi4uZGVjbGFyYXRpb25zXVxufSlcbmV4cG9ydCBjbGFzcyBNbmdDb21tb25zTW9kdWxlIHtcbiAgICBzdGF0aWMgZm9yUm9vdChjb25maWc6IE1uZ01vZHVsZUNvbmZpZyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8TW5nQ29tbW9uc01vZHVsZT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmdNb2R1bGU6IE1uZ0NvbW1vbnNNb2R1bGUsXG4gICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAvLyBwcmltZW5nIHNlcnZpY2VzXG4gICAgICAgICAgICAgICAgRGlhbG9nU2VydmljZSxcbiAgICAgICAgICAgICAgICBNZXNzYWdlU2VydmljZSxcbiAgICAgICAgICAgICAgICBDb25maXJtYXRpb25TZXJ2aWNlLFxuXG4gICAgICAgICAgICAgICAgLy8gc2VydmljZXNcbiAgICAgICAgICAgICAgICBNbmdDb21tb25zSW5pdFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgTW5nQWN0aW9uRXhlY3V0b3JTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIE1uZ05hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgIE1uZ0NvbW1vbnNTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIE1uZ1ZlcnNpb25TZXJ2aWNlLFxuXG4gICAgICAgICAgICAgICAgLy8gc2VjdXJpdHlcbiAgICAgICAgICAgICAgICBNbmdBdXRob3JpemF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICBNbmdBdXRob3JpemF0aW9uR3VhcmQsXG5cbiAgICAgICAgICAgICAgICAvLyBwaXBlc1xuICAgICAgICAgICAgICAgIEpzb25QYXRoUGlwZSxcbiAgICAgICAgICAgICAgICBNbmdFbnVtUGlwZSxcbiAgICAgICAgICAgICAgICBNbmdCb29sZWFuUGlwZSxcbiAgICAgICAgICAgICAgICBNbmdJMThuUHJvcGVydHlQaXBlLFxuICAgICAgICAgICAgICAgIE1uZ1BhcmFtZXRyaXplUGlwZSxcbiAgICAgICAgICAgICAgICBNbmdHZXR0ZXJQaXBlLFxuICAgICAgICAgICAgICAgIE1uZ1RlbXBsYXRlUGlwZSxcbiAgICAgICAgICAgICAgICBNbmdDbGFzc01hcFBpcGUsXG4gICAgICAgICAgICAgICAgTW5nRW51bWVyYXRlUGlwZSxcbiAgICAgICAgICAgICAgICBNbmdFbnVtZXJhdGVBc3luY1BpcGUsXG4gICAgICAgICAgICAgICAgTW5nTG9jYWxlRGVmYXVsdFJvd0NsYXNzUGlwZSxcblxuICAgICAgICAgICAgICAgIC8vIGNvbXBvbmVudCBzZXJ2aWNlXG4gICAgICAgICAgICAgICAgTW5nTWFpbkxheW91dENvbXBvbmVudFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgTW5nVmlld0NvbnRhaW5lckNvbXBvbmVudFNlcnZpY2UsXG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IE1OR19NT0RVTEVfQ09ORklHX0lULFxuICAgICAgICAgICAgICAgICAgICB1c2VWYWx1ZTogY29uZmlnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IE9iamVjdFNlcmlhbGl6ZXIsXG4gICAgICAgICAgICAgICAgICAgIHVzZUZhY3Rvcnk6ICgpID0+IE9iamVjdFNlcmlhbGl6ZXIuZ2V0KClcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTW5nQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIHVzZUZhY3Rvcnk6IG1uZ0NvbmZpZ3VyYXRpb25TZXJ2aWNlUHJvdmlkZXIsXG4gICAgICAgICAgICAgICAgICAgIGRlcHM6IFtIdHRwQ2xpZW50LCBNTkdfTU9EVUxFX0NPTkZJR19JVF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLFxuICAgICAgICAgICAgICAgICAgICB1c2VGYWN0b3J5OiBtbmdDb25maWdKc29uQXBwSW5pdGlhbGl6ZXJQcm92aWRlcixcbiAgICAgICAgICAgICAgICAgICAgZGVwczogW01uZ0NvbmZpZ3VyYXRpb25TZXJ2aWNlLCBNTkdfTU9EVUxFX0NPTkZJR19JVF0sXG4gICAgICAgICAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcbiAgICAgICAgICAgICAgICAgICAgdXNlRmFjdG9yeTogbW5nQ29tbW9uc0luaXRpYWxpemVyUHJvdmlkZXIsXG4gICAgICAgICAgICAgICAgICAgIGRlcHM6IFtNbmdDb21tb25zSW5pdFNlcnZpY2VdLFxuICAgICAgICAgICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBGT1JNTFlfQ09ORklHLFxuICAgICAgICAgICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdXNlRmFjdG9yeTogbW5nRm9ybWx5Q29uZmlnUHJvdmlkZXIsXG4gICAgICAgICAgICAgICAgICAgIGRlcHM6IFtUcmFuc2xhdGVTZXJ2aWNlLCBNTkdfTU9EVUxFX0NPTkZJR19JVF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogQUNUSU9OX0VESVRPUl9ESUFMT0dfQ09NUE9ORU5UX1NFVFRJTkcsXG4gICAgICAgICAgICAgICAgICAgIHVzZVZhbHVlOiBNbmdBY3Rpb25FZGl0b3JDb21wb25lbnRcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTW5nRXJyb3JNYXBwZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICB1c2VDbGFzczogRGVmYXVsdE1uZ0Vycm9yTWFwcGVyU2VydmljZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICB9XG59XG4iXX0=
@@ -127,7 +127,10 @@ export class MngActionExecutorService {
127
127
  ctx.instance.isRunLoadingSubject.next(false);
128
128
  // handle notification
129
129
  if (ctx.instance.action.hasRunNotificationSuccess) {
130
- ctx.notification = NotificationUtil.actionNotificationSuccess(this.translate, ctx.instance.action, ctx.functionName, ctx.instance.action.runNotificationSuccessTitle, ctx.instance.action.runNotificationSuccessMessage, ctx.parameters.viewContainer ?? undefined, ctx.parameters?.item);
130
+ ctx.notification = NotificationUtil.actionNotificationSuccess(this.translate, ctx.instance.action, ctx.functionName, ctx.instance.action.runNotificationSuccessTitle, ctx.instance.action.runNotificationSuccessMessage, ctx.parameters.viewContainer ?? undefined, {
131
+ ...ctx.parameters?.item,
132
+ ...runResult
133
+ });
131
134
  }
132
135
  // handle possible after run action
133
136
  if (ctx.instance.action.afterRunAction) {
@@ -549,4 +552,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
549
552
  type: Inject,
550
553
  args: [ACTION_EDITOR_DIALOG_COMPONENT_SETTING]
551
554
  }] }]; } });
552
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWV4ZWN1dG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2FjdGlvbi1leGVjdXRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQU1qRSxPQUFPLEVBQWEsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUMzRSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUQsT0FBTyxFQUFDLGFBQWEsRUFBRSx1QkFBdUIsRUFBRSxjQUFjLEVBQUUsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQTZCLE1BQU0sNkJBQTZCLENBQUM7QUFHMUssT0FBTyxFQUFtQixzQkFBc0IsRUFBa0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RixPQUFPLEVBQUMsMkJBQTJCLEVBQUUsY0FBYyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFHakYsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQy9DLE9BQU8sRUFBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBSWpFLE9BQU8sRUFBQyxzQ0FBc0MsRUFBQyxNQUFNLFVBQVUsQ0FBQzs7Ozs7Ozs7OztBQUdoRSxNQUFNLE9BQU8sd0JBQXdCO0lBR2pDLFlBQ1ksUUFBa0IsRUFDbEIsTUFBYyxFQUNkLGFBQTRCLEVBQzVCLG1CQUF3QyxFQUN4QyxTQUEyQixFQUMzQixvQkFBNkMsRUFDN0MsaUJBQXVDLEVBQ3ZDLFdBQWtDLEVBQ2xDLFdBQStCLEVBQ2lC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LHdCQUF3QixrVEFhckIsc0NBQXNDO3lIQWJ6Qyx3QkFBd0I7MkZBQXhCLHdCQUF3QjtrQkFEcEMsVUFBVTs7MEJBY0YsTUFBTTsyQkFBQyxzQ0FBc0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0h0dHBFcnJvclJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIFR5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyLCBVcmxUcmVlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtDb25maXJtYXRpb24sIENvbmZpcm1hdGlvblNlcnZpY2V9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7RGlhbG9nU2VydmljZSwgRHluYW1pY0RpYWxvZ0NvbmZpZ30gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgZnJvbSwgbWVyZ2VNYXAsIG9mLCBzd2l0Y2hNYXAsIHRocm93RXJyb3J9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBmaWx0ZXIsIGZpcnN0LCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtBY3Rpb25Db250ZXh0LCBBY3Rpb25Db250ZXh0VmFsaWRhdGlvbiwgQWN0aW9uSW5zdGFuY2UsIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLCBBY3Rpb25QYXJhbWV0ZXJzLCBJQWN0aW9uQ29uZmlybWF0aW9uU2VydmljZX0gZnJvbSAnLi4vY29tcG9uZW50cy9hY3Rpb24vbW9kZWxzJztcbmltcG9ydCB7TW5nVGFibGVDZWxsQ2xpY2tFdmVudH0gZnJvbSAnLi4vY29tcG9uZW50cy90YWJsZXZpZXcvbW9kZWxzJztcbmltcG9ydCB7SURhdGFQcm92aWRlciwgSUVkaXRvckRhdGFQcm92aWRlcn0gZnJvbSAnLi4vZGF0YS1wcm92aWRlcnMnO1xuaW1wb3J0IHtBY3Rpb25EZXNjcmlwdG9yLCBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yLCBUYWJsZURlc2NyaXB0b3J9IGZyb20gJy4uL2Rlc2NyaXB0b3JzJztcbmltcG9ydCB7QWN0aW9uQ29uZmlybWF0aW9uRGlhbG9nRGVzY3JpcHRvcn0gZnJvbSAnLi4vZGVzY3JpcHRvcnMvYWN0aW9uL2FjdGlvbi1jb25maXJtYXRpb24uZGVzY3JpcHRvcic7XG5pbXBvcnQge0FjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bSwgQWN0aW9uVHlwZUVudW19IGZyb20gJy4uL2Rlc2NyaXB0b3JzL3R5cGVzJztcbmltcG9ydCB7SVZpZXdDb250YWluZXIsIE1uZ0Vycm9yfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtNbmdQYXJhbWV0cml6ZVBpcGV9IGZyb20gJy4uL3BpcGVzJztcbmltcG9ydCB7U3R5bGVTaXplRW51bX0gZnJvbSAnLi4vc3R5bGVzL21vZGVscyc7XG5pbXBvcnQge0kxOG5VdGlscywgTm90aWZpY2F0aW9uVXRpbCwgU3RyaW5nVXRpbH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtNbmdDb25maWd1cmF0aW9uU2VydmljZX0gZnJvbSAnLi9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtNbmdFcnJvck1hcHBlclNlcnZpY2V9IGZyb20gJy4vZXJyb3ItbWFwcGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtNbmdOYXZpZ2F0aW9uU2VydmljZX0gZnJvbSAnLi9uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtBQ1RJT05fRURJVE9SX0RJQUxPR19DT01QT05FTlRfU0VUVElOR30gZnJvbSAnLi90b2tlbnMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTW5nQWN0aW9uRXhlY3V0b3JTZXJ2aWNlIHtcbiAgICBwcml2YXRlIGRlYnVnID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb25maWd1cmF0aW9uU2VydmljZTogTW5nQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbmF2aWdhdGlvblNlcnZpY2U6IE1uZ05hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGVycm9yTWFwcGVyOiBNbmdFcnJvck1hcHBlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcGFyYW1ldHJpemU6IE1uZ1BhcmFtZXRyaXplUGlwZSxcbiAgICAgICAgQEluamVjdChBQ1RJT05fRURJVE9SX0RJQUxPR19DT01QT05FTlRfU0VUVElORykgcHJpdmF0ZSBkZWZhdWx0RWRpdG9yRGlhbG9nQ29tcG9uZW50OiBUeXBlPGFueT5cbiAgICApIHtcbiAgICAgICAgLy8gdGhpcy5kZWJ1ZyA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIHByZXBhcmVBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjxULCBTPihhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8VD4sIHBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcnM8VD4sIGRhdGFQcm92aWRlcj86IElEYXRhUHJvdmlkZXI8VCwgUz4pOiBBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjxULCBTPiB7XG4gICAgICAgIGNvbnN0IGN0eERhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlciA/PyBhY3Rpb24uZGF0YVByb3ZpZGVyID8/IHBhcmFtZXRlcnMudmlld0NvbnRhaW5lcj8uZ2V0RGF0YVByb3ZpZGVyKCk7XG4gICAgICAgIGNvbnN0IGN0eCA9IG5ldyBBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjxULCBTPihhY3Rpb24sIHBhcmFtZXRlcnMsIGN0eERhdGFQcm92aWRlciwgdGhpcy5nZXREYXRhUHJvdmlkZXJTZXJ2aWNlKGN0eERhdGFQcm92aWRlcikgPz8gdW5kZWZpbmVkKTtcbiAgICAgICAgcmV0dXJuIGN0eDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHJlcGFyZUFjdGlvbkNvbnRleHQ8VCwgUz4oXG4gICAgICAgIGluc3RhbmNlOiBBY3Rpb25JbnN0YW5jZTxULCBTPixcbiAgICAgICAgcGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxUPixcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgcHJldmlvdXNBY3Rpb25JbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPHVua25vd24sIHVua25vd24+XG4gICAgKTogQWN0aW9uQ29udGV4dDxULCBTPiB7XG4gICAgICAgIGNvbnN0IGN0eERhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlciA/PyBpbnN0YW5jZS5hY3Rpb24uZGF0YVByb3ZpZGVyID8/IHBhcmFtZXRlcnMudmlld0NvbnRhaW5lcj8uZ2V0RGF0YVByb3ZpZGVyKCk7XG4gICAgICAgIGNvbnN0IGN0eCA9IG5ldyBBY3Rpb25Db250ZXh0PFQsIFM+KGluc3RhbmNlLCBwYXJhbWV0ZXJzLCAncnVuJywgY3R4RGF0YVByb3ZpZGVyLCB0aGlzLmdldERhdGFQcm92aWRlclNlcnZpY2UoY3R4RGF0YVByb3ZpZGVyKSA/PyB1bmRlZmluZWQpO1xuICAgICAgICBjdHgucHJldmlvdXNBY3Rpb25JbnN0YW5jZSA9IHByZXZpb3VzQWN0aW9uSW5zdGFuY2U7XG4gICAgICAgIGluc3RhbmNlLm5ld0NvbnRleHQoY3R4KTtcbiAgICAgICAgcmV0dXJuIGN0eDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcmVwYXJlcyBhY3Rpb24gZXhlYyBjb250ZXh0IGZvciBhY3Rpb24gb2YgdHlwZSBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbSBJdGVtIGluc3RhbmNlIChpZiBleGlzdHMpLlxuICAgICAqIEBwYXJhbSBpdGVtSWQgSXRlbSBpZCAoaWYgZXhpc3RzKS5cbiAgICAgKiBAcGFyYW0gZGF0YVByb3ZpZGVyIERhdGEgcHJvdmlkZXIuXG4gICAgICogQHBhcmFtIHNvdXJjZUNvbXBvbmVudCBTb3VyY2UgY29tcG9uZW50IGZyb20gd2hlcmUgdGhlIGNvbnRleHQgcHJlcGFyYXRpb24gd2FzIGNhbGxlZC5cbiAgICAgKiBAcGFyYW0gdmlld0NvbnRhaW5lciBWaWV3IGNvbnRhaW5lci9zZXJ2aWNlLlxuICAgICAqIEBwYXJhbSBhY3Rpb25EYXRhIEFkZGl0aW9uYWwgYWN0aW9uIGRhdGEuXG4gICAgICovXG4gICAgcHJpdmF0ZSBwcmVwYXJlQ29udGV4dEZvckVkaXRvcjxULCBTPihcbiAgICAgICAgaW5zdGFuY2U6IEFjdGlvbkluc3RhbmNlPFQsIFM+LFxuICAgICAgICBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPFQ+LFxuICAgICAgICBmdW5jdGlvbk5hbWU6ICdzdWJtaXQnIHwgJ2ZldGNoJyxcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgcHJldmlvdXNBY3Rpb25JbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPHVua25vd24sIHVua25vd24+XG4gICAgKTogQWN0aW9uQ29udGV4dDxULCBTPiB7XG4gICAgICAgIGNvbnN0IGVkaXRvckFjdGlvbiA9IGluc3RhbmNlLmFjdGlvbiBhcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+O1xuICAgICAgICBsZXQgY3R4RGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyO1xuICAgICAgICBpZiAoIWN0eERhdGFQcm92aWRlciAmJiBlZGl0b3JBY3Rpb24uZGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICBjdHhEYXRhUHJvdmlkZXIgPSBlZGl0b3JBY3Rpb24uZGF0YVByb3ZpZGVyO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY3R4RGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICBjb25zdCB2aWV3Q29udGFpbmVyRGF0YVByb3ZpZGVyID0gcGFyYW1ldGVycy52aWV3Q29udGFpbmVyPy5nZXREYXRhUHJvdmlkZXIoKTtcbiAgICAgICAgICAgIGlmICh2aWV3Q29udGFpbmVyRGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICAgICAgY3R4RGF0YVByb3ZpZGVyID0gdmlld0NvbnRhaW5lckRhdGFQcm92aWRlciBhcyBJRWRpdG9yRGF0YVByb3ZpZGVyPFQsIFM+O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN0eCA9IG5ldyBBY3Rpb25Db250ZXh0PFQsIFM+KGluc3RhbmNlLCBwYXJhbWV0ZXJzLCBmdW5jdGlvbk5hbWUsIGN0eERhdGFQcm92aWRlciwgdGhpcy5nZXREYXRhUHJvdmlkZXJTZXJ2aWNlKGN0eERhdGFQcm92aWRlcikgPz8gdW5kZWZpbmVkKTtcbiAgICAgICAgY3R4LnByZXZpb3VzQWN0aW9uSW5zdGFuY2UgPSBwcmV2aW91c0FjdGlvbkluc3RhbmNlO1xuICAgICAgICBpbnN0YW5jZS5uZXdDb250ZXh0KGN0eCk7XG4gICAgICAgIHJldHVybiBjdHg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyBhY3Rpb24gY29udGV4dCBieSBzdWJtaXR0aW5nIGV4ZWN1dGlvbiByZXN1bHRzL2Vycm9ycyB0byBjb250ZXh0LCB3YXRjaGluZyBvdmVyIGluc3RhbmNlIHJlc3VsdHMvZXJyb3JzLCBkaXNwbGF5aW5nIG5vdGlmaWNhdGlvbnMsXG4gICAgICogcnVubmluZyBuZXh0L2Vycm9yIGFjdGlvbiBhbmQgdHJpZ2dlcmluZyBkaXNtaXNzIG9mIGFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIHBhcmFtZXRlcnMgQWN0aW9uIHBhcmFtZXRlcnMgZm9yIGNvbnRleHQuXG4gICAgICogQHBhcmFtIGRhdGFQcm92aWRlciBFZGl0b3IgZGF0YSBwcm92aWRlciBmb3IgY29udGV4dC5cbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgT3B0aW9uYWwgZXhpc3RpbmcgYWN0aW9uIGluc3RhbmNlIChpZiBub24gcHJvdmlkZWQsIG5ldyB3aWxsIGJlIGNyZWF0ZWQpLlxuICAgICAqIEBwYXJhbSBwcmV2aW91c0FjdGlvbkluc3RhbmNlIE9wdGlvbmFsIHByZXZpb3VzIGFjdGlvbiBpbnN0YW5jZSB0byBsaW5rIGluIG5leHQgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIEFjdGlvbiBjb250ZXh0IGZvciBzdWJtaXQgKD1ydW4pIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBydW5BY3Rpb25Db250ZXh0PFQsIFM+KGN0eDogQWN0aW9uQ29udGV4dDxULCBTPik6IE9ic2VydmFibGU8VCB8IG51bGwgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgaXNNYWluUnVuRm4gPSBjdHguZnVuY3Rpb25OYW1lID09PSAnc3VibWl0JyB8fCBjdHguZnVuY3Rpb25OYW1lID09PSAncnVuJztcbiAgICAgICAgbGV0IGFjdGlvbkVkaXRvcjogQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPjtcblxuICAgICAgICBsZXQgZm5PYnM6IChjdHg6IEFjdGlvbkNvbnRleHQ8VCwgUz4pID0+IE9ic2VydmFibGU8VCB8IG51bGwgfCB1bmRlZmluZWQ+O1xuICAgICAgICBzd2l0Y2ggKGN0eC5mdW5jdGlvbk5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3N1Ym1pdCc6XG4gICAgICAgICAgICAgICAgYWN0aW9uRWRpdG9yID0gY3R4Lmluc3RhbmNlLmFjdGlvbiBhcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+O1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYWN0aW9uRWRpdG9yLnN1Ym1pdEZ1bmN0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihgU3VibWl0IGZ1bmN0aW9uIGZvciBhY3Rpb24gJHthY3Rpb25FZGl0b3IuYWN0aW9uTmFtZUxvbmd9IGNhbm5vdCBiZSBpbnZva2VkLmApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm5PYnMgPSBhY3Rpb25FZGl0b3Iuc3VibWl0RnVuY3Rpb247XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdmZXRjaCc6XG4gICAgICAgICAgICAgICAgYWN0aW9uRWRpdG9yID0gY3R4Lmluc3RhbmNlLmFjdGlvbiBhcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+O1xuICAgICAgICAgICAgICAgIGZuT2JzID0gYWN0aW9uRWRpdG9yLmZldGNoRnVuY3Rpb247XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdydW4nOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBmbk9icyA9IGN0eC5pbnN0YW5jZS5hY3Rpb24ucnVuRnVuY3Rpb247XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXRPYnMgPSBvZih2b2lkIDApLnBpcGUoXG4gICAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNNYWluUnVuRm4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgbWFpbiBydW4gZnVuY3Rpb24sIGFsc28gc2V0IGxvYWRpbmcgdG8gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5TdGFydDtcbiAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLmlzUnVuTG9hZGluZ1N1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GZXRjaFN0YXJ0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBzdGFydCBjb250ZXh0IGV4ZWN1dGlvbiB0byBtYXJrIGV4ZWN1dGlvbiBsb2FkaW5nXG4gICAgICAgICAgICAgICAgY3R4LmV4ZWN1dGlvblN0YXJ0KCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZm5PYnMoY3R4KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWVyZ2VNYXAocnVuUmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAvLyBzZXQgbmV4dCBzdGF0ZSBkZXBlbmRpbmcgb24gcnVuXG4gICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLnN0YXRlID0gaXNNYWluUnVuRm4gPyBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5FbmQgOiBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GZXRjaEVuZDtcbiAgICAgICAgICAgICAgICAvLyBzZXQgZXhlY3V0aW9uIHJlc3VsdFxuICAgICAgICAgICAgICAgIGN0eC5leGVjdXRpb25OZXh0KHJ1blJlc3VsdCwgaXNNYWluUnVuRm4pO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzTWFpblJ1bkZuKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNldCBpbnN0YW5jZSBmaW5hbCByZXN1bHQgb24gbWFpbiBydW4gZXhlY3V0aW9uXG4gICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5yZXN1bHQgPSBydW5SZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5pc1J1bkxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBub3RpZmljYXRpb25cbiAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC5pbnN0YW5jZS5hY3Rpb24uaGFzUnVuTm90aWZpY2F0aW9uU3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lm5vdGlmaWNhdGlvbiA9IE5vdGlmaWNhdGlvblV0aWwuYWN0aW9uTm90aWZpY2F0aW9uU3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5mdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLmFjdGlvbi5ydW5Ob3RpZmljYXRpb25TdWNjZXNzVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLmFjdGlvbi5ydW5Ob3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgucGFyYW1ldGVycy52aWV3Q29udGFpbmVyID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgucGFyYW1ldGVycz8uaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBwb3NzaWJsZSBhZnRlciBydW4gYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdHguaW5zdGFuY2UuYWN0aW9uLmFmdGVyUnVuQWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXJrIG5ldyBzdGF0ZSBmb3IgbmV4dCBhY3Rpb24gc3RhcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLk5leHRBY3Rpb25TdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRBY3Rpb25JbnN0YW5jZSA9IHRoaXMuYWN0aXZhdGVBY3Rpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLmFjdGlvbi5hZnRlclJ1bkFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQWN0aW9uUGFyYW1ldGVyczx1bmtub3duPihjdHgucGFyYW1ldGVycy5pdGVtSWQsIHJ1blJlc3VsdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhBY3Rpb25EYXRhKGN0eC5wYXJhbWV0ZXJzLmFjdGlvbkRhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoUm91dGUoY3R4LnBhcmFtZXRlcnMucm91dGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoU291cmNlQ29tcG9uZW50KGN0eC5wYXJhbWV0ZXJzLnNvdXJjZUNvbXBvbmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhWaWV3Q29udGFpbmVyKGN0eC5wYXJhbWV0ZXJzLnZpZXdDb250YWluZXIgYXMgSVZpZXdDb250YWluZXI8dW5rbm93biwgdW5rbm93bj4pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UgYXMgQWN0aW9uSW5zdGFuY2U8dW5rbm93biwgdW5rbm93bj5cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UubmV4dEFjdGlvbkluc3RhbmNlID0gbmV4dEFjdGlvbkluc3RhbmNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmaW5pc2ggY3VycmVudCBhY3Rpb24gd2hlbiBuZXh0IGFjdGlvbiBmaW5pc2hlc1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHRBY3Rpb25JbnN0YW5jZS5zdGF0ZSQucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoc3RhdGUgPT4gc3RhdGUgPj0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoU3VjY2VzcyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uTmV4dEFjdGlvbkVuZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ1blJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBvZihydW5SZXN1bHQpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBtYXAocnVuUmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNNYWluUnVuRm4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZGVhY3RpdmF0ZSBhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWFjdGl2YXRlQWN0aW9uKGN0eC5pbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBydW5SZXN1bHQ7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgICAgICAvLyB0cmFuc2Zvcm0gZXJyb3IgdG8gbW5nIGFjdGlvbiBlcnJvclxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbkVycm9yID0gdGhpcy50b01uZ0FjdGlvbkVycm9yKGVycik7XG5cbiAgICAgICAgICAgICAgICAvLyBzZXQgaW5zdGFuY2Ugc3RhdGUgdG8gZXJyb3JcbiAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBpc01haW5SdW5GbiA/IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1bkVycm9yIDogQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmV0Y2hFcnJvcjtcbiAgICAgICAgICAgICAgICAvLyBtYXJrIGV4ZWN1dGlvbiBlcnJvciBvbiBjb250ZXh0XG4gICAgICAgICAgICAgICAgY3R4LmV4ZWN1dGlvbkVycm9yKGFjdGlvbkVycm9yKTtcblxuICAgICAgICAgICAgICAgIGxldCBlcnJvck9icyA9IG9mKHZvaWQgMCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTWFpblJ1bkZuKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5lcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLmlzUnVuTG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIGVycm9yIG5vdGlmaWNhdGlvblxuICAgICAgICAgICAgICAgICAgICBpZiAoY3R4Lmluc3RhbmNlLmFjdGlvbi5oYXNSdW5Ob3RpZmljYXRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uRXJyb3Iubm90aWZpY2F0aW9uID0gTm90aWZpY2F0aW9uVXRpbC5hY3Rpb25Ob3RpZmljYXRpb25FcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbkVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5mdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnBhcmFtZXRlcnMudmlld0NvbnRhaW5lciA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnBhcmFtZXRlcnMuaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBwb3NzaWJsZSBlcnJvciBhY3Rpb24gaWYgcnVuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc01haW5SdW5GbiAmJiBjdHguaW5zdGFuY2UuYWN0aW9uLm9uUnVuRXJyb3JBY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbm5vdCBzdGFydCB3aXRoIHRyaWdnZXIsIGJlY2F1c2Ugcm91dGluZyBtaWdodCBiZSBwcm9ibGVtYXRpYyAobG91c2luZyBwcmV2aW91cyByZXN1bHRzIGV0Yy4pXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvckFjdGlvbkluc3RhbmNlID0gdGhpcy5hY3RpdmF0ZUFjdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuYWN0aW9uLm9uUnVuRXJyb3JBY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEFjdGlvblBhcmFtZXRlcnM8VD4oY3R4LnBhcmFtZXRlcnMuaXRlbUlkLCBjdHgucGFyYW1ldGVycy5pdGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aEFjdGlvbkRhdGEoY3R4LnBhcmFtZXRlcnMuYWN0aW9uRGF0YSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhSb3V0ZShjdHgucGFyYW1ldGVycy5yb3V0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhTb3VyY2VDb21wb25lbnQoY3R4LnBhcmFtZXRlcnMuc291cmNlQ29tcG9uZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aFZpZXdDb250YWluZXIoY3R4LnBhcmFtZXRlcnMudmlld0NvbnRhaW5lcilcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuZXJyb3JBY3Rpb25JbnN0YW5jZSA9IGVycm9yQWN0aW9uSW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvck9icyA9IGVycm9yQWN0aW9uSW5zdGFuY2Uuc3RhdGUkLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHN0YXRlID0+IHN0YXRlID49IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3MpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB2b2lkIDApXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gbGlzdGUgYW5kIG1hcCBvbmx5IHRvIG1hcmsgaW5zdGFuY2Ugc3RhdGUgYXMgZmluaXNoZWQgZXJyb3Igc3RhdGVcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JPYnMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlYWN0aXZhdGUgYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlYWN0aXZhdGVBY3Rpb24oY3R4Lmluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldGhyb3cgZXJyb3IgdG8gcHJvcGFnYXRlIGZ1cmhlclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgYWN0aW9uRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0T2JzLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiByZXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYEFjdGlvbkNvbnRleHQgJHtjdHguY29udGV4dExvbmdOYW1lfSBleGVjdXRpb24gbmV4dCBldmVudGAsIHJlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYEFjdGlvbkNvbnRleHQgJHtjdHguY29udGV4dExvbmdOYW1lfSBleGVjdXRpb24gZXJyb3IgZXZlbnRgLCBlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJldE9icztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW5zIGVkaXRvciBhY3Rpb24ncyBzdWJtaXQgKD1tYWluIHJ1bikgZnVuY3Rpb24gYnkgY3JlYXRpbmcgbmV3IGFjdGlvbiBjb250ZXh0IGZvciBhY3Rpb24gaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJzIEFjdGlvbiBwYXJhbWV0ZXJzIGZvciBjb250ZXh0LlxuICAgICAqIEBwYXJhbSBkYXRhUHJvdmlkZXIgRWRpdG9yIGRhdGEgcHJvdmlkZXIgZm9yIGNvbnRleHQuXG4gICAgICogQHBhcmFtIGluc3RhbmNlIE9wdGlvbmFsIGV4aXN0aW5nIGFjdGlvbiBpbnN0YW5jZSAoaWYgbm9uIHByb3ZpZGVkLCBuZXcgd2lsbCBiZSBjcmVhdGVkKS5cbiAgICAgKiBAcGFyYW0gcHJldmlvdXNBY3Rpb25JbnN0YW5jZSBPcHRpb25hbCBwcmV2aW91cyBhY3Rpb24gaW5zdGFuY2UgdG8gbGluayBpbiBuZXh0IGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHJldHVybiBBY3Rpb24gY29udGV4dCBmb3Igc3VibWl0ICg9cnVuKSBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgcnVuRWRpdG9yU2F2ZTxULCBTPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+LFxuICAgICAgICBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPFQ+LFxuICAgICAgICBkYXRhUHJvdmlkZXI/OiBJRWRpdG9yRGF0YVByb3ZpZGVyPFQsIFM+LFxuICAgICAgICBpbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPFQsIFM+LFxuICAgICAgICBwcmV2aW91c0FjdGlvbkluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8dW5rbm93biwgdW5rbm93bj5cbiAgICApOiBBY3Rpb25Db250ZXh0PFQsIFM+IHtcbiAgICAgICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBpbnN0YW5jZSBpZiBub24gcHJvdmlkZWRcbiAgICAgICAgICAgIGluc3RhbmNlID0gbmV3IEFjdGlvbkluc3RhbmNlPFQsIFM+KGFjdGlvbiwgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uQWN0aXZhdGlvbkVuZCwgdGhpcy5kZWJ1Zyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMucHJlcGFyZUNvbnRleHRGb3JFZGl0b3IoaW5zdGFuY2UsIHBhcmFtZXRlcnMsICdzdWJtaXQnLCBkYXRhUHJvdmlkZXIsIHByZXZpb3VzQWN0aW9uSW5zdGFuY2UpO1xuICAgICAgICB0aGlzLnJ1bkFjdGlvbkNvbnRleHQoY29udGV4dCk7XG4gICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgc2VydmljZSBpbnN0YW5jZSBvZiBkYXRhIHByb3ZpZGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGFQcm92aWRlciBEYXRhIHByb3ZpZGVyIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0RGF0YVByb3ZpZGVyU2VydmljZTxULCBTPihkYXRhUHJvdmlkZXI/OiBJRGF0YVByb3ZpZGVyPFQsIFM+KTogUyB8IG51bGwge1xuICAgICAgICBpZiAoZGF0YVByb3ZpZGVyPy5zZXJ2aWNlVHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0PFM+KGRhdGFQcm92aWRlci5zZXJ2aWNlVHlwZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgZWRpdG9yIGFjdGlvbidzIGZldGNoIGZ1bmN0aW9uIGJ5IGNyZWF0aW5nIG5ldyBhY3Rpb24gY29udGV4dCBmb3IgYWN0aW9uIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyBBY3Rpb24gcGFyYW1ldGVycyBmb3IgY29udGV4dC5cbiAgICAgKiBAcGFyYW0gZGF0YVByb3ZpZGVyIEVkaXRvciBkYXRhIHByb3ZpZGVyIGZvciBjb250ZXh0LlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBPcHRpb25hbCBleGlzdGluZyBhY3Rpb24gaW5zdGFuY2UgKGlmIG5vbiBwcm92aWRlZCwgbmV3IHdpbGwgYmUgY3JlYXRlZCkuXG4gICAgICogQHBhcmFtIHByZXZpb3VzQWN0aW9uSW5zdGFuY2UgT3B0aW9uYWwgcHJldmlvdXMgYWN0aW9uIGluc3RhbmNlIHRvIGxpbmsgaW4gbmV4dCBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm4gQWN0aW9uIGNvbnRleHQgZm9yIGZldGNoIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBydW5FZGl0b3JGZXRjaDxULCBTPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+LFxuICAgICAgICBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPFQ+LFxuICAgICAgICBkYXRhUHJvdmlkZXI/OiBJRWRpdG9yRGF0YVByb3ZpZGVyPFQsIFM+LFxuICAgICAgICBpbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPFQsIFM+LFxuICAgICAgICBwcmV2aW91c0FjdGlvbkluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8dW5rbm93biwgdW5rbm93bj5cbiAgICApOiBBY3Rpb25Db250ZXh0PFQsIFM+IHtcbiAgICAgICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBpbnN0YW5jZSBpZiBub24gcHJvdmlkZWRcbiAgICAgICAgICAgIGluc3RhbmNlID0gbmV3IEFjdGlvbkluc3RhbmNlPFQsIFM+KGFjdGlvbiwgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uQWN0aXZhdGlvbkVuZCwgdGhpcy5kZWJ1Zyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMucHJlcGFyZUNvbnRleHRGb3JFZGl0b3IoaW5zdGFuY2UsIHBhcmFtZXRlcnMsICdmZXRjaCcsIGRhdGFQcm92aWRlciwgcHJldmlvdXNBY3Rpb25JbnN0YW5jZSk7XG4gICAgICAgIHRoaXMucnVuQWN0aW9uQ29udGV4dChjb250ZXh0KTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyBhY3Rpb24ncyBtYWluIHJ1biBmdW5jdGlvbiBieSBjcmVhdGluZyBuZXcgYWN0aW9uIGNvbnRleHQgZm9yIGFjdGlvbiBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIHBhcmFtZXRlcnMgQWN0aW9uIHBhcmFtZXRlcnMgZm9yIGNvbnRleHQgcnVuLlxuICAgICAqIEBwYXJhbSBkYXRhUHJvdmlkZXIgRGF0YSBwcm92aWRlciBmb3IgY29udGV4dCBydW4uXG4gICAgICogQHBhcmFtIGluc3RhbmNlIE9wdGlvbmFsIGV4aXN0aW5nIGFjdGlvbiBpbnN0YW5jZSAoaWYgbm9uIHByb3ZpZGVkLCBuZXcgd2lsbCBiZSBjcmVhdGVkKS5cbiAgICAgKiBAcGFyYW0gcHJldmlvdXNBY3Rpb25JbnN0YW5jZSBPcHRpb25hbCBwcmV2aW91cyBhY3Rpb24gaW5zdGFuY2UgdG8gbGluayBpbiBuZXh0IGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHJldHVybiBBY3Rpb24gY29udGV4dCBmb3IgcnVuIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBydW5BY3Rpb248VCwgUz4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPixcbiAgICAgICAgcGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxUPixcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgaW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxULCBTPixcbiAgICAgICAgcHJldmlvdXNBY3Rpb25JbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPHVua25vd24sIHVua25vd24+XG4gICAgKTogQWN0aW9uQ29udGV4dDxULCBTPiB7XG4gICAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgaW5zdGFuY2UgaWYgbm9uIHByb3ZpZGVkXG4gICAgICAgICAgICBpbnN0YW5jZSA9IG5ldyBBY3Rpb25JbnN0YW5jZTxULCBTPihhY3Rpb24sIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkFjdGl2YXRpb25FbmQsIHRoaXMuZGVidWcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLnByZXBhcmVBY3Rpb25Db250ZXh0KGluc3RhbmNlLCBwYXJhbWV0ZXJzLCBkYXRhUHJvdmlkZXIsIHByZXZpb3VzQWN0aW9uSW5zdGFuY2UpO1xuICAgICAgICBpZiAoYWN0aW9uLmhhc1J1bkNvbmZpcm1hdGlvbikge1xuICAgICAgICAgICAgY29uc3Qgc291cmNlQ29tcG9uZW50ID0gcGFyYW1ldGVycz8uc291cmNlQ29tcG9uZW50O1xuICAgICAgICAgICAgY29uc3QgY29uZmlybWF0aW9uRGVzY3JpcHRvciA9IGFjdGlvbi5ydW5Db25maXJtYXRpb25EaWFsb2dEZXNjcmlwdG9yIGFzIEFjdGlvbkNvbmZpcm1hdGlvbkRpYWxvZ0Rlc2NyaXB0b3I8VD47XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlQ29tcG9uZW50Py5nZXRDb25maXJtYXRpb25TZXJ2aWNlICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBzb3VyY2VDb21wb25lbnQ/LmdldENvbmZpcm1hdGlvblNlcnZpY2VJbnN0YW5jZUtleSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU291cmNlIGNvbXBvbmVudCAke3NvdXJjZUNvbXBvbmVudH0gc2hvdWxkIGJlIGltcGxlbWVudGluZyBJQ29uZmlybWF0aW9uU2VydmljZSBpbnRlcmZhY2UgdG8gYmUgYWJsZSB0byBwcm92aWRlIGNvbmZpcm1hdGlvbiBmdW5jdGlvbmFsaXR5LmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gcGFyYW1ldGVycy5pdGVtO1xuXG4gICAgICAgICAgICBjb25zdCBzcmNDb25maXJtQ29tcG9uZW50ID0gc291cmNlQ29tcG9uZW50IGFzIElBY3Rpb25Db25maXJtYXRpb25TZXJ2aWNlO1xuICAgICAgICAgICAgbGV0IGNvbmZpcm1QYXJhbXM6IENvbmZpcm1hdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBrZXk6IHNyY0NvbmZpcm1Db21wb25lbnQuZ2V0Q29uZmlybWF0aW9uU2VydmljZUluc3RhbmNlS2V5KGFjdGlvbiksXG4gICAgICAgICAgICAgICAgaWNvbjogY29uZmlybWF0aW9uRGVzY3JpcHRvci5pY29uLFxuICAgICAgICAgICAgICAgIGFjY2VwdFZpc2libGU6IHRydWUsXG4gICAgICAgICAgICAgICAgYWNjZXB0SWNvbjogY29uZmlybWF0aW9uRGVzY3JpcHRvci5hY2NlcHRCdXR0b24uaWNvbiA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgYWNjZXB0QnV0dG9uU3R5bGVDbGFzczogY29uZmlybWF0aW9uRGVzY3JpcHRvci5hY2NlcHRCdXR0b24uc3R5bGVDbGFzcy5idWlsZCgpLFxuICAgICAgICAgICAgICAgIHJlamVjdFZpc2libGU6IHRydWUsXG4gICAgICAgICAgICAgICAgcmVqZWN0SWNvbjogY29uZmlybWF0aW9uRGVzY3JpcHRvci5yZWplY3RCdXR0b24/Lmljb24gPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHJlamVjdEJ1dHRvblN0eWxlQ2xhc3M6IGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucmVqZWN0QnV0dG9uPy5zdHlsZUNsYXNzLmJ1aWxkKCksXG4gICAgICAgICAgICAgICAgY2xvc2VPbkVzY2FwZTogY29uZmlybWF0aW9uRGVzY3JpcHRvci5jbG9zZU9uRXNjYXBlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoY29uZmlybWF0aW9uRGVzY3JpcHRvci50aXRsZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuaGVhZGVyID0gSTE4blV0aWxzLkFjdGlvbi5nZXQodGhpcy50cmFuc2xhdGUsIGFjdGlvbiwgJ2NvbmZpcm0udGl0bGUnLCBjb25maXJtYXRpb25EZXNjcmlwdG9yLnRpdGxlLCBpdGVtLCAnZ2VuZXJhbC5jb25maXJtYXRpb24nKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLm1lc3NhZ2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLm1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgICAgICBJMThuVXRpbHMuQWN0aW9uLmdldCh0aGlzLnRyYW5zbGF0ZSwgYWN0aW9uLCAnY29uZmlybS5tZXNzYWdlJywgY29uZmlybWF0aW9uRGVzY3JpcHRvci5tZXNzYWdlLCBTdHJpbmdVdGlsLmVzY2FwZUh0bWxBbnkoaXRlbSksICdnZW5lcmFsLmNvbmZpcm1hdGlvbicpID8/XG4gICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IuYWNjZXB0QnV0dG9uLmxhYmVsICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5hY2NlcHRMYWJlbCA9XG4gICAgICAgICAgICAgICAgICAgIEkxOG5VdGlscy5BY3Rpb24uZ2V0KHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sICdjb25maXJtLmFjY2VwdCcsIGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IuYWNjZXB0QnV0dG9uLmxhYmVsLCBpdGVtLCAnZ2VuZXJhbC55ZXMnKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLmFjY2VwdEJ1dHRvbi5pY29uICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5hY2NlcHRJY29uID0gY29uZmlybWF0aW9uRGVzY3JpcHRvci5hY2NlcHRCdXR0b24uaWNvbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucmVqZWN0QnV0dG9uPy5pY29uICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5yZWplY3RJY29uID0gY29uZmlybWF0aW9uRGVzY3JpcHRvci5yZWplY3RCdXR0b24/Lmljb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLnJlamVjdEJ1dHRvbj8ubGFiZWwgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLnJlamVjdExhYmVsID1cbiAgICAgICAgICAgICAgICAgICAgSTE4blV0aWxzLkFjdGlvbi5nZXQodGhpcy50cmFuc2xhdGUsIGFjdGlvbiwgJ2NvbmZpcm0ucmVqZWN0JywgY29uZmlybWF0aW9uRGVzY3JpcHRvci5yZWplY3RCdXR0b24/LmxhYmVsLCBpdGVtLCAnZ2VuZXJhbC5ubycpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucmVqZWN0QnV0dG9uID09IG51bGwgfHwgKGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucmVqZWN0QnV0dG9uLmxhYmVsID09PSBudWxsICYmIGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucmVqZWN0QnV0dG9uLmljb24gPT09IG51bGwpKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5yZWplY3RWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuYWNjZXB0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGluc3RhbmNlIS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1bkNvbmZpcm1hdGlvbkVuZEFjY2VwdDtcbiAgICAgICAgICAgICAgICB0aGlzLnJ1bkFjdGlvbkNvbnRleHQoY29udGV4dCk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25maXJtUGFyYW1zLnJlamVjdCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZSEuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5Db25maXJtYXRpb25FbmRSZWplY3Q7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWFjdGl2YXRlQWN0aW9uKGluc3RhbmNlISk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoY29uZmlybWF0aW9uRGVzY3JpcHRvci5ydW5Db25maXJtYXRpb25Db25maWdNYXBGbikge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMgPSBjb25maXJtYXRpb25EZXNjcmlwdG9yLnJ1bkNvbmZpcm1hdGlvbkNvbmZpZ01hcEZuKGNvbnRleHQsIGNvbmZpcm1QYXJhbXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250ZXh0LmNvbmZpcm1hdGlvbiA9IGNvbmZpcm1QYXJhbXM7XG4gICAgICAgICAgICBpbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1bkNvbmZpcm1hdGlvblN0YXJ0O1xuXG4gICAgICAgICAgICBzcmNDb25maXJtQ29tcG9uZW50LmdldENvbmZpcm1hdGlvblNlcnZpY2UoKS5jb25maXJtKGNvbmZpcm1QYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ydW5BY3Rpb25Db250ZXh0KGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFjdGl2YXRlcyBhY3Rpb24gKGluIGNhc2Ugb2YgZGlhbG9nLCBkaWFsb2cgd2lsbCBiZSBvcGVuZWQpLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyBBY3Rpb24gcGFyYW1ldGVycyBmb3IgYWN0aXZhdGlvbiBvZiBhY3Rpb24gaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIGluc3RhbmNlIE9wdGlvbmFsIGV4aXN0aW5nIGFjdGlvbiBpbnN0YW5jZSAoaWYgbm9uIHByb3ZpZGVkLCBuZXcgd2lsbCBiZSBjcmVhdGVkKS5cbiAgICAgKiBAcGFyYW0gcHJldmlvdXNBY3Rpb25JbnN0YW5jZSBPcHRpb25hbCBwcmV2aW91cyBhY3Rpb24gaW5zdGFuY2UgdG8gbGluayBpbiBuZXh0IGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHJldHVybiBBY3Rpb24gaW5zdGFuY2UgLSBpZiBub24gcHJvdmlkZWQgaW4gcGFyYW1ldGVycywgdGhlIG5ld2x5IGNyZWF0ZWQgd2lsbCBiZSByZXR1cm5lZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWN0aXZhdGVBY3Rpb248VCwgUz4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPixcbiAgICAgICAgcGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxUPixcbiAgICAgICAgaW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxULCBTPixcbiAgICAgICAgcHJldmlvdXNBY3Rpb25JbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPHVua25vd24sIHVua25vd24+XG4gICAgKTogQWN0aW9uSW5zdGFuY2U8VCwgUz4ge1xuICAgICAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICAgICAgICAvLyBjcmVhdGUgbmV3IGluc3RhbmNlIGlmIG5vbiBwcm92aWRlZFxuICAgICAgICAgICAgaW5zdGFuY2UgPSBuZXcgQWN0aW9uSW5zdGFuY2U8VCwgUz4oYWN0aW9uLCBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5BY3RpdmF0aW9uU3RhcnQsIHRoaXMuZGVidWcpO1xuICAgICAgICB9XG4gICAgICAgIGluc3RhbmNlLmFjdGl2YXRpb25QYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcbiAgICAgICAgLy8gc3RhcnQgYWN0aXZhdGlvbiBpbnN0YW5jZVxuICAgICAgICBpbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkFjdGl2YXRpb25TdGFydDtcbiAgICAgICAgaWYgKGFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlRW51bS5FZGl0b3IpIHtcbiAgICAgICAgICAgIGxldCBkaWFsb2dDb21wb25lbnQgPSB0aGlzLmRlZmF1bHRFZGl0b3JEaWFsb2dDb21wb25lbnQ7XG4gICAgICAgICAgICBjb25zdCBkaWFsb2dDbGFzc05hbWVzID0gWydtbmctZGlhbG9nJ107XG4gICAgICAgICAgICBpZiAoYWN0aW9uIGluc3RhbmNlb2YgQWN0aW9uRWRpdG9yRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NsYXNzTmFtZXMucHVzaChhY3Rpb24uZGlhbG9nQ2xhc3NOYW1lID8/ICdtbmctYWN0aW9uLWVkaXRvci1kaWFsb2cnKTtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGFjdGlvbi5kaWFsb2dTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU3R5bGVTaXplRW51bS5FeHRyYVNtYWxsOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGlhbG9nQ2xhc3NOYW1lcy5wdXNoKCdtbmctZGlhbG9nLXhzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTdHlsZVNpemVFbnVtLlNtYWxsOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGlhbG9nQ2xhc3NOYW1lcy5wdXNoKCdtbmctZGlhbG9nLXNtJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTdHlsZVNpemVFbnVtLkxhcmdlOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGlhbG9nQ2xhc3NOYW1lcy5wdXNoKCdtbmctZGlhbG9nLWxnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTdHlsZVNpemVFbnVtLkV4dHJhTGFyZ2U6XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2dDbGFzc05hbWVzLnB1c2goJ21uZy1kaWFsb2cteGwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFN0eWxlU2l6ZUVudW0uTm9ybWFsOlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uZWRpdG9yQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGRpYWxvZ0NvbXBvbmVudCA9IGFjdGlvbi5lZGl0b3JDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGlhbG9nQ29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgIGRhdGE6IHt9LFxuICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M6IGRpYWxvZ0NsYXNzTmFtZXMuam9pbignICcpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmRhdGEuYWN0aW9uSW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5kYXRhLnByZXZpb3VzQWN0aW9uSW5zdGFuY2UgPSBwcmV2aW91c0FjdGlvbkluc3RhbmNlO1xuICAgICAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oZGlhbG9nQ29tcG9uZW50LCBkaWFsb2dDb25maWcpO1xuICAgICAgICAgICAgZGlhbG9nUmVmLm9uQ2xvc2UucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVhY3RpdmF0ZUFjdGlvbihpbnN0YW5jZSEsIHRydWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpbnN0YW5jZS5hY3RpdmF0aW9uRGlhbG9nUmVmID0gZGlhbG9nUmVmO1xuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gZGlyZWN0bHkgZXhlY3V0ZSBhY3Rpb25cbiAgICAgICAgICAgIGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uQWN0aXZhdGlvbkVuZDtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLnJ1bkFjdGlvbjxULCBTPihhY3Rpb24sIHBhcmFtZXRlcnMsIHVuZGVmaW5lZCwgaW5zdGFuY2UsIHByZXZpb3VzQWN0aW9uSW5zdGFuY2UpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuaW5zdGFuY2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWFjdGl2YXRlcyBhY3Rpb24gYnkgY2hvb3NpbmcgZmluYWwgc3RhdGUsIGNsb3NpbmcgZGlhbG9nIGFuZCBjb21wbGV0aW5nIGFsbCBzdWJqZWN0cyBpbiBpbnN0YW5jZSBhbmQgY29udGV4dHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgQWN0aW9uIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSBmcm9tRGlhbG9nTGlzdGVuZXIgRGVhY3RpdmF0aW9uIGNhbGxlZCBmcm9tIGRpYWxvZyBsaXN0ZW5lciwgaW4gdGhpcyBjYXNlIGRlYWN0aXZhdGlvbiBoYXBwZW5zIG9ubHkgaWYgdHJ1ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGVhY3RpdmF0ZUFjdGlvbjxULCBTPihpbnN0YW5jZTogQWN0aW9uSW5zdGFuY2U8VCwgUz4sIGZyb21EaWFsb2dMaXN0ZW5lciA9IGZhbHNlKSB7XG4gICAgICAgIGlmICghZnJvbURpYWxvZ0xpc3RlbmVyICYmIGluc3RhbmNlLnN0YXRlID49IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgQWN0aW9uSW5zdGFuY2UgJHtpbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lfSBhbHJlYWR5IGZpbmlzaGVkYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZmluYWxTdGF0ZTogQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW07XG4gICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UucmVzdWx0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgZmluYWxTdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3M7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGluc3RhbmNlLmVycm9yICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgZmluYWxTdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaEVycm9yO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmluYWxTdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaERpc21pc3NlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnN0YW5jZS5hY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZUVudW0uRWRpdG9yKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNEaWFsb2cgPSB0eXBlb2YgaW5zdGFuY2UuYWN0aXZhdGlvbkRpYWxvZ1JlZiAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgICAgICAgICBpZiAoaGFzRGlhbG9nICYmICFmcm9tRGlhbG9nTGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZmluYWxTdGF0ZSA9PT0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoU3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiBzdGF0ZSBpcyBmaW5pc2ggYW5kIG5vdCBjYWxsZWQgZnJvbSBkaWFsb2cgbGlzdGVuZXIsIGNsb3NlIHRoZSBkaWFsb2cgZmlyc3Qgd2hpY2ggd2lsbCByZXRyaWdnZXIgdGhpcyBmdW5jdGlvbiwgdGhlbiBmaW5pc2ggaXRcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuYWN0aXZhdGlvbkRpYWxvZ1JlZiEuY2xvc2UoaW5zdGFuY2UucmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gZXJyb3IgYW5kIGRpc21pc3NlZCBtdXN0IGJvdGggaGF2ZSBmcm9tRGlhbG9nTGlzdGVuZXIgdG8gYmUgYWJsZSB0byBmaW5pc2hcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXQgZmluYWwgc3RhdGUgb24gaW5zdGFuY2VcbiAgICAgICAgaW5zdGFuY2Uuc3RhdGUgPSBmaW5hbFN0YXRlO1xuICAgICAgICAvLyBjb21wbGV0ZSBhbGwgc3ViamVjdHNcbiAgICAgICAgaW5zdGFuY2UuZmluaXNoKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlcnMgYWN0aW9uIGZyb20gdGFibGUgcm93IGNsaWNrIHBvc2l0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gZXZlbnQgVGFyZ2V0IHRhYmxlIGNsaWNrIGV2ZW50LlxuICAgICAqIEBwYXJhbSByb3V0ZSBDdXJyZW50bHkgYWN0aXZhdGUgcm91dGUuXG4gICAgICogQHBhcmFtIHRhYmxlRGVzY3JpcHRvciBUYWJsZSBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBkYXRhS2V5UHJvcGVydHkgRGF0YSBrZXkgcHJvcGVydHkuXG4gICAgICovXG4gICAgcHVibGljIHRyaWdnZXJSb3dDbGlja0FjdGlvbjxUPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPFQ+LFxuICAgICAgICBldmVudDogTW5nVGFibGVDZWxsQ2xpY2tFdmVudDxUPixcbiAgICAgICAgcm91dGU/OiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgdGFibGVEZXNjcmlwdG9yPzogVGFibGVEZXNjcmlwdG9yPFQ+LFxuICAgICAgICBkYXRhS2V5UHJvcGVydHk/OiBzdHJpbmdcbiAgICApIHtcbiAgICAgICAgY29uc3QgaWRQcm9wZXJ0eSA9IGRhdGFLZXlQcm9wZXJ0eSA/PyB0YWJsZURlc2NyaXB0b3I/LmRhdGFLZXlQcm9wZXJ0eSA/PyBhY3Rpb24/Lm1vZGVsPy5pZFByb3BlcnR5TmFtZSA/PyBkYXRhS2V5UHJvcGVydHk7XG4gICAgICAgIGlmICghaWRQcm9wZXJ0eSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSb3cgY2xpY2sgYWN0aW9uICR7YWN0aW9uLmFjdGlvbk5hbWVMb25nfSBjYW4gbm90IGJlIHRyaWdnZXJlZCwgYmVjYXVzZSBpZCBwcm9wZXJ0eSBjb3VsZCBub3QgYmUgZm91bmQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm93SXRlbSA9IGV2ZW50Py5yb3dJdGVtIGFzIGFueTtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJpZ2dlckFjdGlvbihhY3Rpb24sIG5ldyBBY3Rpb25QYXJhbWV0ZXJzPFQ+KHJvd0l0ZW1baWRQcm9wZXJ0eV0sIGV2ZW50LnJvd0l0ZW0pLndpdGhSb3V0ZShyb3V0ZSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXJzIGFjdGlvbiB3aXRoIHBhcmFtZXRlcnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJzIEFjdGlvbiBwYXJhbWV0ZXJzIGZvciBhY3Rpb24gZXhlY3V0aW9uIHRvIGNvbnN0cnVjdCBuZXcgcm91dGUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIEFjdGlvbiBpbnN0YW5jZSAtIGlmIG5vbiBwcm92aWRlZCBpbiBwYXJhbWV0ZXJzLCB0aGUgbmV3bHkgY3JlYXRlZCB3aWxsIGJlIHJldHVybmVkLlxuICAgICAqL1xuICAgIHB1YmxpYyB0cmlnZ2VyQWN0aW9uPFQsIFM+KGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPiwgcGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxUPik6IEFjdGlvbkluc3RhbmNlPFQsIFM+IHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQWN0aW9uSW5zdGFuY2U8VCwgUz4oYWN0aW9uLCB1bmRlZmluZWQsIHRoaXMuZGVidWcpO1xuICAgICAgICBpbnN0YW5jZS50cmlnZ2VyUGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG4gICAgICAgIGlmIChhY3Rpb24uYWN0aXZhdGlvblRyaWdnZXIgPT09IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlKSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlVXJsID0gdGhpcy5yb3V0ZXIudXJsLnNwbGl0KCc/JylbMF07XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRVcmw6IFVybFRyZWUgPSB0aGlzLnJvdXRlci5wYXJzZVVybCh0aGlzLnJvdXRlci51cmwpO1xuICAgICAgICAgICAgbGV0IGFjdGlvblVybCA9IGFjdGlvbi5yb3V0ZVVybCA/PyAnJztcbiAgICAgICAgICAgIC8vIFRPRE86IGRvbnQgc3RyaXAgJy8nLCBidXQgdXNlIGl0IGFjY29yZGluZ2x5IHdpdGggQW5ndWxhcidzIHJvdXRlciBwYXR0ZXJucyAoLywgLi8sIC4uLylcbiAgICAgICAgICAgIGlmIChhY3Rpb25Vcmwuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uVXJsID0gYWN0aW9uVXJsLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYWN0aW9uVXJsU2VnbWVudHMgPSB0aGlzLnBhcmFtZXRyaXplLnRyYW5zZm9ybShhY3Rpb25VcmwsIHBhcmFtZXRlcnMuaXRlbUlkLCBwYXJhbWV0ZXJzLml0ZW0sIHBhcmFtZXRlcnMuYWN0aW9uRGF0YSkuc3BsaXQoJy8nKTtcblxuICAgICAgICAgICAgaW5zdGFuY2UudHJpZ2dlclJvdXRlTmF2aWdhdGlvbiA9IGZyb20odGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Jhc2VVcmwsIC4uLmFjdGlvblVybFNlZ21lbnRzXSwge3JlbGF0aXZlVG86IHBhcmFtZXRlcnMucm91dGUsIHF1ZXJ5UGFyYW1zOiBwYXJzZWRVcmwucXVlcnlQYXJhbXN9KSk7XG5cbiAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uVHJpZ2dlckVuZDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFjdGl2YXRlQWN0aW9uKGFjdGlvbiwgcGFyYW1ldGVycyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWFjdGl2YXRlcyBvbiByb3V0ZSB0cmlnZ2VyZWQgYWN0aW9uIGJ5IHRyeWluZyB0byByZXJvdXRlIGJhY2sgdG8gbG9jYXRpb24gd2hlcmUgYWN0aW9uIHdhcyB0cmlnZ2VyZWQuXG4gICAgICogQHBhcmFtIGluc3RhbmNlIEFjdGlvbiBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGVhY3RpdmF0ZU9uUm91dGVUcmlnZ2VyZWRBY3Rpb248VCwgUz4oaW5zdGFuY2U6IEFjdGlvbkluc3RhbmNlPFQsIFM+KSB7XG4gICAgICAgIGlmIChpbnN0YW5jZS5hY3Rpb24uYWN0aXZhdGlvblRyaWdnZXIgIT09IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gZm9yIG5vdywgZGVhY3RpdmF0aW9uIGFsd2F5cyBtZWFucyBnb2luZyBiYWNrIHRvIHRhYmxldmlldyByb290XG4gICAgICAgIC8vIGlmICh0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldFByZXZpb3VzTG9jYXRpb24oKSkge1xuICAgICAgICAvLyAgICAgLy8gdGhlcmUgYXJlIGludGVybmFsIGhpc3RvcnkgcmVjb3Jkcywgc28gYmFjayBjYW4gYmUgbm9ybWFsbHkgY2FsbGVkXG4gICAgICAgIC8vICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmJhY2soKTtcbiAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgLy8gICAgIC8vIHRoZXJlIGlzIG5vIGludGVybmFsIGhpc3RvcnkgcmVjb3JkcywgZmlndXJlIG91dCB0aGUgYmFzZSB1cmwgYnkgZWxpbWluYXRpbmcgYWN0aW9uIHNwZWNpZmljIHVybFxuICAgICAgICBsZXQgdXJsID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRDdXJyZW50TG9jYXRpb24oKTtcbiAgICAgICAgLy8gbGV0IHByZXZpb3VzVXJsID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRQcmV2aW91c0xvY2F0aW9uKCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHVybCwgcHJldmlvdXNVcmwpO1xuICAgICAgICBpZiAoIXVybCkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5iYWNrKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB1cmxQYXRoU2VnbWVudHMgPSB1cmwuc3BsaXQoJz8nKVswXS5zcGxpdCgnIycpWzBdLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICBsZXQgYWN0aW9uVXJsID0gaW5zdGFuY2UuYWN0aW9uPy5yb3V0ZVVybCA/PyAnJztcbiAgICAgICAgICAgIGlmIChhY3Rpb25Vcmwuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uVXJsID0gYWN0aW9uVXJsLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFjdGlvblVybFNlZ21lbnRzID0gYWN0aW9uVXJsLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICBjb25zdCByZWRpcmVjdFVybCA9ICcvJyArIHVybFBhdGhTZWdtZW50cy5zbGljZSgwLCB1cmxQYXRoU2VnbWVudHMubGVuZ3RoIC0gYWN0aW9uVXJsU2VnbWVudHMubGVuZ3RoKS5qb2luKCcvJyk7XG4gICAgICAgICAgICAvLyBjb25zdCByZXBsYWNlVXJsID0gcHJldmlvdXNVcmwgIT09IG51bGwgJiYgcHJldmlvdXNVcmwuc3BsaXQoJz8nKVswXS5zcGxpdCgnIycpWzBdID09PSByZWRpcmVjdFVybDtcbiAgICAgICAgICAgIC8vIE5vIFVSTCByZXBsYWNlcywgcHJvYmFibHkgb2ssIHRvIGFsbG93IGdvaW5nIGJhY2tcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwocmVkaXJlY3RVcmwpO1xuICAgICAgICB9XG4gICAgICAgIC8vIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmFuc2Zvcm0gZXJyb3Igb2YgYW55IHR5cGUgdG8gbW5nIGVycm9yIGJ5IHVzaW5nIGVycm9yIG1hcHBlciB0aGF0IGNvdWxkIGJlIHByb3ZpZGVkIGJ5IGZpbmFsIHByb2plY3QuXG4gICAgICogQHBhcmFtIGVycm9yIGVycm9yIG9mIGFueSB0eXBlLlxuICAgICAqXG4gICAgICogQHJldHVybiBtYXBwZWQgTW5nRXJyb3IuXG4gICAgICovXG4gICAgcHVibGljIHRvTW5nQWN0aW9uRXJyb3IoZXJyb3I/OiBhbnkpOiBNbmdFcnJvciB7XG4gICAgICAgIGNvbnN0IGFjdGlvbkVycm9yOiBNbmdFcnJvciA9IHtcbiAgICAgICAgICAgIG5hbWU6IGVycm9yPy5uYW1lID8/ICdVbmtub3duRXJyb3InLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3I/Lm1lc3NhZ2UgPz8gJ1Vua25vd24gZXJyb3InLFxuICAgICAgICAgICAgY2F1c2U6IGVycm9yXG4gICAgICAgIH07XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgICAgICBhY3Rpb25FcnJvci5zdGF0dXMgPSBlcnJvci5zdGF0dXM7XG4gICAgICAgICAgICBhY3Rpb25FcnJvci5zdGF0dXNEZXNjcmlwdGlvbiA9IGVycm9yLnN0YXR1c1RleHQ7XG4gICAgICAgICAgICBhY3Rpb25FcnJvci51cmwgPSBlcnJvci51cmwgPz8gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmVycm9yTWFwcGVyLnRvTW5nRXJyb3IoZXJyb3IsIGFjdGlvbkVycm9yKTtcbiAgICB9XG59XG4iXX0=
555
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWV4ZWN1dG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2FjdGlvbi1leGVjdXRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQU1qRSxPQUFPLEVBQWEsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUMzRSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUQsT0FBTyxFQUFDLGFBQWEsRUFBRSx1QkFBdUIsRUFBRSxjQUFjLEVBQUUsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQTZCLE1BQU0sNkJBQTZCLENBQUM7QUFHMUssT0FBTyxFQUFtQixzQkFBc0IsRUFBa0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RixPQUFPLEVBQUMsMkJBQTJCLEVBQUUsY0FBYyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFHakYsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQy9DLE9BQU8sRUFBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBSWpFLE9BQU8sRUFBQyxzQ0FBc0MsRUFBQyxNQUFNLFVBQVUsQ0FBQzs7Ozs7Ozs7OztBQUdoRSxNQUFNLE9BQU8sd0JBQXdCO0lBR2pDLFlBQ1ksUUFBa0IsRUFDbEIsTUFBYyxFQUNkLGFBQTRCLEVBQzVCLG1CQUF3QyxFQUN4QyxTQUEyQixFQUMzQixvQkFBNkMsRUFDN0MsaUJBQXVDLEVBQ3ZDLFdBQWtDLEVBQ2xDLFdBQStCLEVBQ2lC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QUFXLENBQUMsQ0FBQztJQUMzRCxDQUFDOztxSEF0b0JRLHdCQUF3QixrVEFhckIsc0NBQXNDO3lIQWJ6Qyx3QkFBd0I7MkZBQXhCLHdCQUF3QjtrQkFEcEMsVUFBVTs7MEJBY0YsTUFBTTsyQkFBQyxzQ0FBc0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0h0dHBFcnJvclJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIFR5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyLCBVcmxUcmVlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtDb25maXJtYXRpb24sIENvbmZpcm1hdGlvblNlcnZpY2V9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7RGlhbG9nU2VydmljZSwgRHluYW1pY0RpYWxvZ0NvbmZpZ30gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgZnJvbSwgbWVyZ2VNYXAsIG9mLCBzd2l0Y2hNYXAsIHRocm93RXJyb3J9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBmaWx0ZXIsIGZpcnN0LCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtBY3Rpb25Db250ZXh0LCBBY3Rpb25Db250ZXh0VmFsaWRhdGlvbiwgQWN0aW9uSW5zdGFuY2UsIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLCBBY3Rpb25QYXJhbWV0ZXJzLCBJQWN0aW9uQ29uZmlybWF0aW9uU2VydmljZX0gZnJvbSAnLi4vY29tcG9uZW50cy9hY3Rpb24vbW9kZWxzJztcbmltcG9ydCB7TW5nVGFibGVDZWxsQ2xpY2tFdmVudH0gZnJvbSAnLi4vY29tcG9uZW50cy90YWJsZXZpZXcvbW9kZWxzJztcbmltcG9ydCB7SURhdGFQcm92aWRlciwgSUVkaXRvckRhdGFQcm92aWRlcn0gZnJvbSAnLi4vZGF0YS1wcm92aWRlcnMnO1xuaW1wb3J0IHtBY3Rpb25EZXNjcmlwdG9yLCBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yLCBUYWJsZURlc2NyaXB0b3J9IGZyb20gJy4uL2Rlc2NyaXB0b3JzJztcbmltcG9ydCB7QWN0aW9uQ29uZmlybWF0aW9uRGlhbG9nRGVzY3JpcHRvcn0gZnJvbSAnLi4vZGVzY3JpcHRvcnMvYWN0aW9uL2FjdGlvbi1jb25maXJtYXRpb24uZGVzY3JpcHRvcic7XG5pbXBvcnQge0FjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bSwgQWN0aW9uVHlwZUVudW19IGZyb20gJy4uL2Rlc2NyaXB0b3JzL3R5cGVzJztcbmltcG9ydCB7SVZpZXdDb250YWluZXIsIE1uZ0Vycm9yfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtNbmdQYXJhbWV0cml6ZVBpcGV9IGZyb20gJy4uL3BpcGVzJztcbmltcG9ydCB7U3R5bGVTaXplRW51bX0gZnJvbSAnLi4vc3R5bGVzL21vZGVscyc7XG5pbXBvcnQge0kxOG5VdGlscywgTm90aWZpY2F0aW9uVXRpbCwgU3RyaW5nVXRpbH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtNbmdDb25maWd1cmF0aW9uU2VydmljZX0gZnJvbSAnLi9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtNbmdFcnJvck1hcHBlclNlcnZpY2V9IGZyb20gJy4vZXJyb3ItbWFwcGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtNbmdOYXZpZ2F0aW9uU2VydmljZX0gZnJvbSAnLi9uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtBQ1RJT05fRURJVE9SX0RJQUxPR19DT01QT05FTlRfU0VUVElOR30gZnJvbSAnLi90b2tlbnMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTW5nQWN0aW9uRXhlY3V0b3JTZXJ2aWNlIHtcbiAgICBwcml2YXRlIGRlYnVnID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb25maWd1cmF0aW9uU2VydmljZTogTW5nQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbmF2aWdhdGlvblNlcnZpY2U6IE1uZ05hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGVycm9yTWFwcGVyOiBNbmdFcnJvck1hcHBlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcGFyYW1ldHJpemU6IE1uZ1BhcmFtZXRyaXplUGlwZSxcbiAgICAgICAgQEluamVjdChBQ1RJT05fRURJVE9SX0RJQUxPR19DT01QT05FTlRfU0VUVElORykgcHJpdmF0ZSBkZWZhdWx0RWRpdG9yRGlhbG9nQ29tcG9uZW50OiBUeXBlPGFueT5cbiAgICApIHtcbiAgICAgICAgLy8gdGhpcy5kZWJ1ZyA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIHByZXBhcmVBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjxULCBTPihhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8VD4sIHBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcnM8VD4sIGRhdGFQcm92aWRlcj86IElEYXRhUHJvdmlkZXI8VCwgUz4pOiBBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjxULCBTPiB7XG4gICAgICAgIGNvbnN0IGN0eERhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlciA/PyBhY3Rpb24uZGF0YVByb3ZpZGVyID8/IHBhcmFtZXRlcnMudmlld0NvbnRhaW5lcj8uZ2V0RGF0YVByb3ZpZGVyKCk7XG4gICAgICAgIGNvbnN0IGN0eCA9IG5ldyBBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjxULCBTPihhY3Rpb24sIHBhcmFtZXRlcnMsIGN0eERhdGFQcm92aWRlciwgdGhpcy5nZXREYXRhUHJvdmlkZXJTZXJ2aWNlKGN0eERhdGFQcm92aWRlcikgPz8gdW5kZWZpbmVkKTtcbiAgICAgICAgcmV0dXJuIGN0eDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHJlcGFyZUFjdGlvbkNvbnRleHQ8VCwgUz4oXG4gICAgICAgIGluc3RhbmNlOiBBY3Rpb25JbnN0YW5jZTxULCBTPixcbiAgICAgICAgcGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxUPixcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgcHJldmlvdXNBY3Rpb25JbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPHVua25vd24sIHVua25vd24+XG4gICAgKTogQWN0aW9uQ29udGV4dDxULCBTPiB7XG4gICAgICAgIGNvbnN0IGN0eERhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlciA/PyBpbnN0YW5jZS5hY3Rpb24uZGF0YVByb3ZpZGVyID8/IHBhcmFtZXRlcnMudmlld0NvbnRhaW5lcj8uZ2V0RGF0YVByb3ZpZGVyKCk7XG4gICAgICAgIGNvbnN0IGN0eCA9IG5ldyBBY3Rpb25Db250ZXh0PFQsIFM+KGluc3RhbmNlLCBwYXJhbWV0ZXJzLCAncnVuJywgY3R4RGF0YVByb3ZpZGVyLCB0aGlzLmdldERhdGFQcm92aWRlclNlcnZpY2UoY3R4RGF0YVByb3ZpZGVyKSA/PyB1bmRlZmluZWQpO1xuICAgICAgICBjdHgucHJldmlvdXNBY3Rpb25JbnN0YW5jZSA9IHByZXZpb3VzQWN0aW9uSW5zdGFuY2U7XG4gICAgICAgIGluc3RhbmNlLm5ld0NvbnRleHQoY3R4KTtcbiAgICAgICAgcmV0dXJuIGN0eDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcmVwYXJlcyBhY3Rpb24gZXhlYyBjb250ZXh0IGZvciBhY3Rpb24gb2YgdHlwZSBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbSBJdGVtIGluc3RhbmNlIChpZiBleGlzdHMpLlxuICAgICAqIEBwYXJhbSBpdGVtSWQgSXRlbSBpZCAoaWYgZXhpc3RzKS5cbiAgICAgKiBAcGFyYW0gZGF0YVByb3ZpZGVyIERhdGEgcHJvdmlkZXIuXG4gICAgICogQHBhcmFtIHNvdXJjZUNvbXBvbmVudCBTb3VyY2UgY29tcG9uZW50IGZyb20gd2hlcmUgdGhlIGNvbnRleHQgcHJlcGFyYXRpb24gd2FzIGNhbGxlZC5cbiAgICAgKiBAcGFyYW0gdmlld0NvbnRhaW5lciBWaWV3IGNvbnRhaW5lci9zZXJ2aWNlLlxuICAgICAqIEBwYXJhbSBhY3Rpb25EYXRhIEFkZGl0aW9uYWwgYWN0aW9uIGRhdGEuXG4gICAgICovXG4gICAgcHJpdmF0ZSBwcmVwYXJlQ29udGV4dEZvckVkaXRvcjxULCBTPihcbiAgICAgICAgaW5zdGFuY2U6IEFjdGlvbkluc3RhbmNlPFQsIFM+LFxuICAgICAgICBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPFQ+LFxuICAgICAgICBmdW5jdGlvbk5hbWU6ICdzdWJtaXQnIHwgJ2ZldGNoJyxcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgcHJldmlvdXNBY3Rpb25JbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPHVua25vd24sIHVua25vd24+XG4gICAgKTogQWN0aW9uQ29udGV4dDxULCBTPiB7XG4gICAgICAgIGNvbnN0IGVkaXRvckFjdGlvbiA9IGluc3RhbmNlLmFjdGlvbiBhcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+O1xuICAgICAgICBsZXQgY3R4RGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyO1xuICAgICAgICBpZiAoIWN0eERhdGFQcm92aWRlciAmJiBlZGl0b3JBY3Rpb24uZGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICBjdHhEYXRhUHJvdmlkZXIgPSBlZGl0b3JBY3Rpb24uZGF0YVByb3ZpZGVyO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY3R4RGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICBjb25zdCB2aWV3Q29udGFpbmVyRGF0YVByb3ZpZGVyID0gcGFyYW1ldGVycy52aWV3Q29udGFpbmVyPy5nZXREYXRhUHJvdmlkZXIoKTtcbiAgICAgICAgICAgIGlmICh2aWV3Q29udGFpbmVyRGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICAgICAgY3R4RGF0YVByb3ZpZGVyID0gdmlld0NvbnRhaW5lckRhdGFQcm92aWRlciBhcyBJRWRpdG9yRGF0YVByb3ZpZGVyPFQsIFM+O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN0eCA9IG5ldyBBY3Rpb25Db250ZXh0PFQsIFM+KGluc3RhbmNlLCBwYXJhbWV0ZXJzLCBmdW5jdGlvbk5hbWUsIGN0eERhdGFQcm92aWRlciwgdGhpcy5nZXREYXRhUHJvdmlkZXJTZXJ2aWNlKGN0eERhdGFQcm92aWRlcikgPz8gdW5kZWZpbmVkKTtcbiAgICAgICAgY3R4LnByZXZpb3VzQWN0aW9uSW5zdGFuY2UgPSBwcmV2aW91c0FjdGlvbkluc3RhbmNlO1xuICAgICAgICBpbnN0YW5jZS5uZXdDb250ZXh0KGN0eCk7XG4gICAgICAgIHJldHVybiBjdHg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyBhY3Rpb24gY29udGV4dCBieSBzdWJtaXR0aW5nIGV4ZWN1dGlvbiByZXN1bHRzL2Vycm9ycyB0byBjb250ZXh0LCB3YXRjaGluZyBvdmVyIGluc3RhbmNlIHJlc3VsdHMvZXJyb3JzLCBkaXNwbGF5aW5nIG5vdGlmaWNhdGlvbnMsXG4gICAgICogcnVubmluZyBuZXh0L2Vycm9yIGFjdGlvbiBhbmQgdHJpZ2dlcmluZyBkaXNtaXNzIG9mIGFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIHBhcmFtZXRlcnMgQWN0aW9uIHBhcmFtZXRlcnMgZm9yIGNvbnRleHQuXG4gICAgICogQHBhcmFtIGRhdGFQcm92aWRlciBFZGl0b3IgZGF0YSBwcm92aWRlciBmb3IgY29udGV4dC5cbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgT3B0aW9uYWwgZXhpc3RpbmcgYWN0aW9uIGluc3RhbmNlIChpZiBub24gcHJvdmlkZWQsIG5ldyB3aWxsIGJlIGNyZWF0ZWQpLlxuICAgICAqIEBwYXJhbSBwcmV2aW91c0FjdGlvbkluc3RhbmNlIE9wdGlvbmFsIHByZXZpb3VzIGFjdGlvbiBpbnN0YW5jZSB0byBsaW5rIGluIG5leHQgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIEFjdGlvbiBjb250ZXh0IGZvciBzdWJtaXQgKD1ydW4pIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBydW5BY3Rpb25Db250ZXh0PFQsIFM+KGN0eDogQWN0aW9uQ29udGV4dDxULCBTPik6IE9ic2VydmFibGU8VCB8IG51bGwgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgaXNNYWluUnVuRm4gPSBjdHguZnVuY3Rpb25OYW1lID09PSAnc3VibWl0JyB8fCBjdHguZnVuY3Rpb25OYW1lID09PSAncnVuJztcbiAgICAgICAgbGV0IGFjdGlvbkVkaXRvcjogQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPjtcblxuICAgICAgICBsZXQgZm5PYnM6IChjdHg6IEFjdGlvbkNvbnRleHQ8VCwgUz4pID0+IE9ic2VydmFibGU8VCB8IG51bGwgfCB1bmRlZmluZWQ+O1xuICAgICAgICBzd2l0Y2ggKGN0eC5mdW5jdGlvbk5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3N1Ym1pdCc6XG4gICAgICAgICAgICAgICAgYWN0aW9uRWRpdG9yID0gY3R4Lmluc3RhbmNlLmFjdGlvbiBhcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+O1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYWN0aW9uRWRpdG9yLnN1Ym1pdEZ1bmN0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihgU3VibWl0IGZ1bmN0aW9uIGZvciBhY3Rpb24gJHthY3Rpb25FZGl0b3IuYWN0aW9uTmFtZUxvbmd9IGNhbm5vdCBiZSBpbnZva2VkLmApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm5PYnMgPSBhY3Rpb25FZGl0b3Iuc3VibWl0RnVuY3Rpb247XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdmZXRjaCc6XG4gICAgICAgICAgICAgICAgYWN0aW9uRWRpdG9yID0gY3R4Lmluc3RhbmNlLmFjdGlvbiBhcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+O1xuICAgICAgICAgICAgICAgIGZuT2JzID0gYWN0aW9uRWRpdG9yLmZldGNoRnVuY3Rpb247XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdydW4nOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBmbk9icyA9IGN0eC5pbnN0YW5jZS5hY3Rpb24ucnVuRnVuY3Rpb247XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXRPYnMgPSBvZih2b2lkIDApLnBpcGUoXG4gICAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNNYWluUnVuRm4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgbWFpbiBydW4gZnVuY3Rpb24sIGFsc28gc2V0IGxvYWRpbmcgdG8gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5TdGFydDtcbiAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLmlzUnVuTG9hZGluZ1N1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GZXRjaFN0YXJ0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBzdGFydCBjb250ZXh0IGV4ZWN1dGlvbiB0byBtYXJrIGV4ZWN1dGlvbiBsb2FkaW5nXG4gICAgICAgICAgICAgICAgY3R4LmV4ZWN1dGlvblN0YXJ0KCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZm5PYnMoY3R4KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWVyZ2VNYXAocnVuUmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAvLyBzZXQgbmV4dCBzdGF0ZSBkZXBlbmRpbmcgb24gcnVuXG4gICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLnN0YXRlID0gaXNNYWluUnVuRm4gPyBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5FbmQgOiBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GZXRjaEVuZDtcbiAgICAgICAgICAgICAgICAvLyBzZXQgZXhlY3V0aW9uIHJlc3VsdFxuICAgICAgICAgICAgICAgIGN0eC5leGVjdXRpb25OZXh0KHJ1blJlc3VsdCwgaXNNYWluUnVuRm4pO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzTWFpblJ1bkZuKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNldCBpbnN0YW5jZSBmaW5hbCByZXN1bHQgb24gbWFpbiBydW4gZXhlY3V0aW9uXG4gICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5yZXN1bHQgPSBydW5SZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5pc1J1bkxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBub3RpZmljYXRpb25cbiAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC5pbnN0YW5jZS5hY3Rpb24uaGFzUnVuTm90aWZpY2F0aW9uU3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lm5vdGlmaWNhdGlvbiA9IE5vdGlmaWNhdGlvblV0aWwuYWN0aW9uTm90aWZpY2F0aW9uU3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5mdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLmFjdGlvbi5ydW5Ob3RpZmljYXRpb25TdWNjZXNzVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLmFjdGlvbi5ydW5Ob3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgucGFyYW1ldGVycy52aWV3Q29udGFpbmVyID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN0eC5wYXJhbWV0ZXJzPy5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5ydW5SZXN1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIHBvc3NpYmxlIGFmdGVyIHJ1biBhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC5pbnN0YW5jZS5hY3Rpb24uYWZ0ZXJSdW5BY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hcmsgbmV3IHN0YXRlIGZvciBuZXh0IGFjdGlvbiBzdGFydFxuICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uTmV4dEFjdGlvblN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dEFjdGlvbkluc3RhbmNlID0gdGhpcy5hY3RpdmF0ZUFjdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuYWN0aW9uLmFmdGVyUnVuQWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBBY3Rpb25QYXJhbWV0ZXJzPHVua25vd24+KGN0eC5wYXJhbWV0ZXJzLml0ZW1JZCwgcnVuUmVzdWx0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aEFjdGlvbkRhdGEoY3R4LnBhcmFtZXRlcnMuYWN0aW9uRGF0YSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhSb3V0ZShjdHgucGFyYW1ldGVycy5yb3V0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhTb3VyY2VDb21wb25lbnQoY3R4LnBhcmFtZXRlcnMuc291cmNlQ29tcG9uZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aFZpZXdDb250YWluZXIoY3R4LnBhcmFtZXRlcnMudmlld0NvbnRhaW5lciBhcyBJVmlld0NvbnRhaW5lcjx1bmtub3duLCB1bmtub3duPiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZSBhcyBBY3Rpb25JbnN0YW5jZTx1bmtub3duLCB1bmtub3duPlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5uZXh0QWN0aW9uSW5zdGFuY2UgPSBuZXh0QWN0aW9uSW5zdGFuY2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpbmlzaCBjdXJyZW50IGFjdGlvbiB3aGVuIG5leHQgYWN0aW9uIGZpbmlzaGVzXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV4dEFjdGlvbkluc3RhbmNlLnN0YXRlJC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihzdGF0ZSA9PiBzdGF0ZSA+PSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5OZXh0QWN0aW9uRW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnVuUmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKHJ1blJlc3VsdCk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1hcChydW5SZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpc01haW5SdW5Gbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBkZWFjdGl2YXRlIGFjdGlvblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlYWN0aXZhdGVBY3Rpb24oY3R4Lmluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ1blJlc3VsdDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgICAgIC8vIHRyYW5zZm9ybSBlcnJvciB0byBtbmcgYWN0aW9uIGVycm9yXG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uRXJyb3IgPSB0aGlzLnRvTW5nQWN0aW9uRXJyb3IoZXJyKTtcblxuICAgICAgICAgICAgICAgIC8vIHNldCBpbnN0YW5jZSBzdGF0ZSB0byBlcnJvclxuICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5zdGF0ZSA9IGlzTWFpblJ1bkZuID8gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uUnVuRXJyb3IgOiBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GZXRjaEVycm9yO1xuICAgICAgICAgICAgICAgIC8vIG1hcmsgZXhlY3V0aW9uIGVycm9yIG9uIGNvbnRleHRcbiAgICAgICAgICAgICAgICBjdHguZXhlY3V0aW9uRXJyb3IoYWN0aW9uRXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGVycm9yT2JzID0gb2Yodm9pZCAwKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNNYWluUnVuRm4pIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLmVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuaXNSdW5Mb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgZXJyb3Igbm90aWZpY2F0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdHguaW5zdGFuY2UuYWN0aW9uLmhhc1J1bk5vdGlmaWNhdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25FcnJvci5ub3RpZmljYXRpb24gPSBOb3RpZmljYXRpb25VdGlsLmFjdGlvbk5vdGlmaWNhdGlvbkVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5hY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uRXJyb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgucGFyYW1ldGVycy52aWV3Q29udGFpbmVyID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgucGFyYW1ldGVycy5pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIHBvc3NpYmxlIGVycm9yIGFjdGlvbiBpZiBydW5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWFpblJ1bkZuICYmIGN0eC5pbnN0YW5jZS5hY3Rpb24ub25SdW5FcnJvckFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2Fubm90IHN0YXJ0IHdpdGggdHJpZ2dlciwgYmVjYXVzZSByb3V0aW5nIG1pZ2h0IGJlIHByb2JsZW1hdGljIChsb3VzaW5nIHByZXZpb3VzIHJlc3VsdHMgZXRjLilcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yQWN0aW9uSW5zdGFuY2UgPSB0aGlzLmFjdGl2YXRlQWN0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5hY3Rpb24ub25SdW5FcnJvckFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQWN0aW9uUGFyYW1ldGVyczxUPihjdHgucGFyYW1ldGVycy5pdGVtSWQsIGN0eC5wYXJhbWV0ZXJzLml0ZW0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoQWN0aW9uRGF0YShjdHgucGFyYW1ldGVycy5hY3Rpb25EYXRhKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aFJvdXRlKGN0eC5wYXJhbWV0ZXJzLnJvdXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aFNvdXJjZUNvbXBvbmVudChjdHgucGFyYW1ldGVycy5zb3VyY2VDb21wb25lbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoVmlld0NvbnRhaW5lcihjdHgucGFyYW1ldGVycy52aWV3Q29udGFpbmVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5lcnJvckFjdGlvbkluc3RhbmNlID0gZXJyb3JBY3Rpb25JbnN0YW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yT2JzID0gZXJyb3JBY3Rpb25JbnN0YW5jZS5zdGF0ZSQucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoc3RhdGUgPT4gc3RhdGUgPj0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoU3VjY2VzcyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHZvaWQgMClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBsaXN0ZSBhbmQgbWFwIG9ubHkgdG8gbWFyayBpbnN0YW5jZSBzdGF0ZSBhcyBmaW5pc2hlZCBlcnJvciBzdGF0ZVxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck9icy5waXBlKFxuICAgICAgICAgICAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVhY3RpdmF0ZSBhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVhY3RpdmF0ZUFjdGlvbihjdHguaW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0aHJvdyBlcnJvciB0byBwcm9wYWdhdGUgZnVyaGVyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBhY3Rpb25FcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICByZXRPYnMuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgQWN0aW9uQ29udGV4dCAke2N0eC5jb250ZXh0TG9uZ05hbWV9IGV4ZWN1dGlvbiBuZXh0IGV2ZW50YCwgcmVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgQWN0aW9uQ29udGV4dCAke2N0eC5jb250ZXh0TG9uZ05hbWV9IGV4ZWN1dGlvbiBlcnJvciBldmVudGAsIGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmV0T2JzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgZWRpdG9yIGFjdGlvbidzIHN1Ym1pdCAoPW1haW4gcnVuKSBmdW5jdGlvbiBieSBjcmVhdGluZyBuZXcgYWN0aW9uIGNvbnRleHQgZm9yIGFjdGlvbiBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIHBhcmFtZXRlcnMgQWN0aW9uIHBhcmFtZXRlcnMgZm9yIGNvbnRleHQuXG4gICAgICogQHBhcmFtIGRhdGFQcm92aWRlciBFZGl0b3IgZGF0YSBwcm92aWRlciBmb3IgY29udGV4dC5cbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgT3B0aW9uYWwgZXhpc3RpbmcgYWN0aW9uIGluc3RhbmNlIChpZiBub24gcHJvdmlkZWQsIG5ldyB3aWxsIGJlIGNyZWF0ZWQpLlxuICAgICAqIEBwYXJhbSBwcmV2aW91c0FjdGlvbkluc3RhbmNlIE9wdGlvbmFsIHByZXZpb3VzIGFjdGlvbiBpbnN0YW5jZSB0byBsaW5rIGluIG5leHQgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIEFjdGlvbiBjb250ZXh0IGZvciBzdWJtaXQgKD1ydW4pIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBydW5FZGl0b3JTYXZlPFQsIFM+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkVkaXRvckRlc2NyaXB0b3I8VD4sXG4gICAgICAgIHBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcnM8VD4sXG4gICAgICAgIGRhdGFQcm92aWRlcj86IElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz4sXG4gICAgICAgIGluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8VCwgUz4sXG4gICAgICAgIHByZXZpb3VzQWN0aW9uSW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTx1bmtub3duLCB1bmtub3duPlxuICAgICk6IEFjdGlvbkNvbnRleHQ8VCwgUz4ge1xuICAgICAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICAgICAgICAvLyBjcmVhdGUgbmV3IGluc3RhbmNlIGlmIG5vbiBwcm92aWRlZFxuICAgICAgICAgICAgaW5zdGFuY2UgPSBuZXcgQWN0aW9uSW5zdGFuY2U8VCwgUz4oYWN0aW9uLCBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5BY3RpdmF0aW9uRW5kLCB0aGlzLmRlYnVnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5wcmVwYXJlQ29udGV4dEZvckVkaXRvcihpbnN0YW5jZSwgcGFyYW1ldGVycywgJ3N1Ym1pdCcsIGRhdGFQcm92aWRlciwgcHJldmlvdXNBY3Rpb25JbnN0YW5jZSk7XG4gICAgICAgIHRoaXMucnVuQWN0aW9uQ29udGV4dChjb250ZXh0KTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBzZXJ2aWNlIGluc3RhbmNlIG9mIGRhdGEgcHJvdmlkZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YVByb3ZpZGVyIERhdGEgcHJvdmlkZXIgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXREYXRhUHJvdmlkZXJTZXJ2aWNlPFQsIFM+KGRhdGFQcm92aWRlcj86IElEYXRhUHJvdmlkZXI8VCwgUz4pOiBTIHwgbnVsbCB7XG4gICAgICAgIGlmIChkYXRhUHJvdmlkZXI/LnNlcnZpY2VUeXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQ8Uz4oZGF0YVByb3ZpZGVyLnNlcnZpY2VUeXBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyBlZGl0b3IgYWN0aW9uJ3MgZmV0Y2ggZnVuY3Rpb24gYnkgY3JlYXRpbmcgbmV3IGFjdGlvbiBjb250ZXh0IGZvciBhY3Rpb24gaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJzIEFjdGlvbiBwYXJhbWV0ZXJzIGZvciBjb250ZXh0LlxuICAgICAqIEBwYXJhbSBkYXRhUHJvdmlkZXIgRWRpdG9yIGRhdGEgcHJvdmlkZXIgZm9yIGNvbnRleHQuXG4gICAgICogQHBhcmFtIGluc3RhbmNlIE9wdGlvbmFsIGV4aXN0aW5nIGFjdGlvbiBpbnN0YW5jZSAoaWYgbm9uIHByb3ZpZGVkLCBuZXcgd2lsbCBiZSBjcmVhdGVkKS5cbiAgICAgKiBAcGFyYW0gcHJldmlvdXNBY3Rpb25JbnN0YW5jZSBPcHRpb25hbCBwcmV2aW91cyBhY3Rpb24gaW5zdGFuY2UgdG8gbGluayBpbiBuZXh0IGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHJldHVybiBBY3Rpb24gY29udGV4dCBmb3IgZmV0Y2ggZnVuY3Rpb24uXG4gICAgICovXG4gICAgcHVibGljIHJ1bkVkaXRvckZldGNoPFQsIFM+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkVkaXRvckRlc2NyaXB0b3I8VD4sXG4gICAgICAgIHBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcnM8VD4sXG4gICAgICAgIGRhdGFQcm92aWRlcj86IElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz4sXG4gICAgICAgIGluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8VCwgUz4sXG4gICAgICAgIHByZXZpb3VzQWN0aW9uSW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTx1bmtub3duLCB1bmtub3duPlxuICAgICk6IEFjdGlvbkNvbnRleHQ8VCwgUz4ge1xuICAgICAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICAgICAgICAvLyBjcmVhdGUgbmV3IGluc3RhbmNlIGlmIG5vbiBwcm92aWRlZFxuICAgICAgICAgICAgaW5zdGFuY2UgPSBuZXcgQWN0aW9uSW5zdGFuY2U8VCwgUz4oYWN0aW9uLCBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5BY3RpdmF0aW9uRW5kLCB0aGlzLmRlYnVnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5wcmVwYXJlQ29udGV4dEZvckVkaXRvcihpbnN0YW5jZSwgcGFyYW1ldGVycywgJ2ZldGNoJywgZGF0YVByb3ZpZGVyLCBwcmV2aW91c0FjdGlvbkluc3RhbmNlKTtcbiAgICAgICAgdGhpcy5ydW5BY3Rpb25Db250ZXh0KGNvbnRleHQpO1xuICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW5zIGFjdGlvbidzIG1haW4gcnVuIGZ1bmN0aW9uIGJ5IGNyZWF0aW5nIG5ldyBhY3Rpb24gY29udGV4dCBmb3IgYWN0aW9uIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyBBY3Rpb24gcGFyYW1ldGVycyBmb3IgY29udGV4dCBydW4uXG4gICAgICogQHBhcmFtIGRhdGFQcm92aWRlciBEYXRhIHByb3ZpZGVyIGZvciBjb250ZXh0IHJ1bi5cbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgT3B0aW9uYWwgZXhpc3RpbmcgYWN0aW9uIGluc3RhbmNlIChpZiBub24gcHJvdmlkZWQsIG5ldyB3aWxsIGJlIGNyZWF0ZWQpLlxuICAgICAqIEBwYXJhbSBwcmV2aW91c0FjdGlvbkluc3RhbmNlIE9wdGlvbmFsIHByZXZpb3VzIGFjdGlvbiBpbnN0YW5jZSB0byBsaW5rIGluIG5leHQgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIEFjdGlvbiBjb250ZXh0IGZvciBydW4gZnVuY3Rpb24uXG4gICAgICovXG4gICAgcHVibGljIHJ1bkFjdGlvbjxULCBTPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPFQ+LFxuICAgICAgICBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPFQ+LFxuICAgICAgICBkYXRhUHJvdmlkZXI/OiBJRGF0YVByb3ZpZGVyPFQsIFM+LFxuICAgICAgICBpbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPFQsIFM+LFxuICAgICAgICBwcmV2aW91c0FjdGlvbkluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8dW5rbm93biwgdW5rbm93bj5cbiAgICApOiBBY3Rpb25Db250ZXh0PFQsIFM+IHtcbiAgICAgICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBpbnN0YW5jZSBpZiBub24gcHJvdmlkZWRcbiAgICAgICAgICAgIGluc3RhbmNlID0gbmV3IEFjdGlvbkluc3RhbmNlPFQsIFM+KGFjdGlvbiwgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uQWN0aXZhdGlvbkVuZCwgdGhpcy5kZWJ1Zyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMucHJlcGFyZUFjdGlvbkNvbnRleHQoaW5zdGFuY2UsIHBhcmFtZXRlcnMsIGRhdGFQcm92aWRlciwgcHJldmlvdXNBY3Rpb25JbnN0YW5jZSk7XG4gICAgICAgIGlmIChhY3Rpb24uaGFzUnVuQ29uZmlybWF0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VDb21wb25lbnQgPSBwYXJhbWV0ZXJzPy5zb3VyY2VDb21wb25lbnQ7XG4gICAgICAgICAgICBjb25zdCBjb25maXJtYXRpb25EZXNjcmlwdG9yID0gYWN0aW9uLnJ1bkNvbmZpcm1hdGlvbkRpYWxvZ0Rlc2NyaXB0b3IgYXMgQWN0aW9uQ29uZmlybWF0aW9uRGlhbG9nRGVzY3JpcHRvcjxUPjtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VDb21wb25lbnQ/LmdldENvbmZpcm1hdGlvblNlcnZpY2UgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHNvdXJjZUNvbXBvbmVudD8uZ2V0Q29uZmlybWF0aW9uU2VydmljZUluc3RhbmNlS2V5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTb3VyY2UgY29tcG9uZW50ICR7c291cmNlQ29tcG9uZW50fSBzaG91bGQgYmUgaW1wbGVtZW50aW5nIElDb25maXJtYXRpb25TZXJ2aWNlIGludGVyZmFjZSB0byBiZSBhYmxlIHRvIHByb3ZpZGUgY29uZmlybWF0aW9uIGZ1bmN0aW9uYWxpdHkuYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBwYXJhbWV0ZXJzLml0ZW07XG5cbiAgICAgICAgICAgIGNvbnN0IHNyY0NvbmZpcm1Db21wb25lbnQgPSBzb3VyY2VDb21wb25lbnQgYXMgSUFjdGlvbkNvbmZpcm1hdGlvblNlcnZpY2U7XG4gICAgICAgICAgICBsZXQgY29uZmlybVBhcmFtczogQ29uZmlybWF0aW9uID0ge1xuICAgICAgICAgICAgICAgIGtleTogc3JjQ29uZmlybUNvbXBvbmVudC5nZXRDb25maXJtYXRpb25TZXJ2aWNlSW5zdGFuY2VLZXkoYWN0aW9uKSxcbiAgICAgICAgICAgICAgICBpY29uOiBjb25maXJtYXRpb25EZXNjcmlwdG9yLmljb24sXG4gICAgICAgICAgICAgICAgYWNjZXB0VmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBhY2NlcHRJY29uOiBjb25maXJtYXRpb25EZXNjcmlwdG9yLmFjY2VwdEJ1dHRvbi5pY29uID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBhY2NlcHRCdXR0b25TdHlsZUNsYXNzOiBjb25maXJtYXRpb25EZXNjcmlwdG9yLmFjY2VwdEJ1dHRvbi5zdHlsZUNsYXNzLmJ1aWxkKCksXG4gICAgICAgICAgICAgICAgcmVqZWN0VmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICByZWplY3RJY29uOiBjb25maXJtYXRpb25EZXNjcmlwdG9yLnJlamVjdEJ1dHRvbj8uaWNvbiA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgcmVqZWN0QnV0dG9uU3R5bGVDbGFzczogY29uZmlybWF0aW9uRGVzY3JpcHRvci5yZWplY3RCdXR0b24/LnN0eWxlQ2xhc3MuYnVpbGQoKSxcbiAgICAgICAgICAgICAgICBjbG9zZU9uRXNjYXBlOiBjb25maXJtYXRpb25EZXNjcmlwdG9yLmNsb3NlT25Fc2NhcGVcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLnRpdGxlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5oZWFkZXIgPSBJMThuVXRpbHMuQWN0aW9uLmdldCh0aGlzLnRyYW5zbGF0ZSwgYWN0aW9uLCAnY29uZmlybS50aXRsZScsIGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IudGl0bGUsIGl0ZW0sICdnZW5lcmFsLmNvbmZpcm1hdGlvbicpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IubWVzc2FnZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMubWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgICAgIEkxOG5VdGlscy5BY3Rpb24uZ2V0KHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sICdjb25maXJtLm1lc3NhZ2UnLCBjb25maXJtYXRpb25EZXNjcmlwdG9yLm1lc3NhZ2UsIFN0cmluZ1V0aWwuZXNjYXBlSHRtbEFueShpdGVtKSwgJ2dlbmVyYWwuY29uZmlybWF0aW9uJykgPz9cbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29uZmlybWF0aW9uRGVzY3JpcHRvci5hY2NlcHRCdXR0b24ubGFiZWwgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLmFjY2VwdExhYmVsID1cbiAgICAgICAgICAgICAgICAgICAgSTE4blV0aWxzLkFjdGlvbi5nZXQodGhpcy50cmFuc2xhdGUsIGFjdGlvbiwgJ2NvbmZpcm0uYWNjZXB0JywgY29uZmlybWF0aW9uRGVzY3JpcHRvci5hY2NlcHRCdXR0b24ubGFiZWwsIGl0ZW0sICdnZW5lcmFsLnllcycpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IuYWNjZXB0QnV0dG9uLmljb24gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLmFjY2VwdEljb24gPSBjb25maXJtYXRpb25EZXNjcmlwdG9yLmFjY2VwdEJ1dHRvbi5pY29uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29uZmlybWF0aW9uRGVzY3JpcHRvci5yZWplY3RCdXR0b24/Lmljb24gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLnJlamVjdEljb24gPSBjb25maXJtYXRpb25EZXNjcmlwdG9yLnJlamVjdEJ1dHRvbj8uaWNvbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucmVqZWN0QnV0dG9uPy5sYWJlbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMucmVqZWN0TGFiZWwgPVxuICAgICAgICAgICAgICAgICAgICBJMThuVXRpbHMuQWN0aW9uLmdldCh0aGlzLnRyYW5zbGF0ZSwgYWN0aW9uLCAnY29uZmlybS5yZWplY3QnLCBjb25maXJtYXRpb25EZXNjcmlwdG9yLnJlamVjdEJ1dHRvbj8ubGFiZWwsIGl0ZW0sICdnZW5lcmFsLm5vJykgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29uZmlybWF0aW9uRGVzY3JpcHRvci5yZWplY3RCdXR0b24gPT0gbnVsbCB8fCAoY29uZmlybWF0aW9uRGVzY3JpcHRvci5yZWplY3RCdXR0b24ubGFiZWwgPT09IG51bGwgJiYgY29uZmlybWF0aW9uRGVzY3JpcHRvci5yZWplY3RCdXR0b24uaWNvbiA9PT0gbnVsbCkpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLnJlamVjdFZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uZmlybVBhcmFtcy5hY2NlcHQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2UhLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uUnVuQ29uZmlybWF0aW9uRW5kQWNjZXB0O1xuICAgICAgICAgICAgICAgIHRoaXMucnVuQWN0aW9uQ29udGV4dChjb250ZXh0KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMucmVqZWN0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGluc3RhbmNlIS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1bkNvbmZpcm1hdGlvbkVuZFJlamVjdDtcbiAgICAgICAgICAgICAgICB0aGlzLmRlYWN0aXZhdGVBY3Rpb24oaW5zdGFuY2UhKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLnJ1bkNvbmZpcm1hdGlvbkNvbmZpZ01hcEZuKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcyA9IGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucnVuQ29uZmlybWF0aW9uQ29uZmlnTWFwRm4oY29udGV4dCwgY29uZmlybVBhcmFtcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnRleHQuY29uZmlybWF0aW9uID0gY29uZmlybVBhcmFtcztcbiAgICAgICAgICAgIGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uUnVuQ29uZmlybWF0aW9uU3RhcnQ7XG5cbiAgICAgICAgICAgIHNyY0NvbmZpcm1Db21wb25lbnQuZ2V0Q29uZmlybWF0aW9uU2VydmljZSgpLmNvbmZpcm0oY29uZmlybVBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJ1bkFjdGlvbkNvbnRleHQoY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWN0aXZhdGVzIGFjdGlvbiAoaW4gY2FzZSBvZiBkaWFsb2csIGRpYWxvZyB3aWxsIGJlIG9wZW5lZCkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJzIEFjdGlvbiBwYXJhbWV0ZXJzIGZvciBhY3RpdmF0aW9uIG9mIGFjdGlvbiBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgT3B0aW9uYWwgZXhpc3RpbmcgYWN0aW9uIGluc3RhbmNlIChpZiBub24gcHJvdmlkZWQsIG5ldyB3aWxsIGJlIGNyZWF0ZWQpLlxuICAgICAqIEBwYXJhbSBwcmV2aW91c0FjdGlvbkluc3RhbmNlIE9wdGlvbmFsIHByZXZpb3VzIGFjdGlvbiBpbnN0YW5jZSB0byBsaW5rIGluIG5leHQgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIEFjdGlvbiBpbnN0YW5jZSAtIGlmIG5vbiBwcm92aWRlZCBpbiBwYXJhbWV0ZXJzLCB0aGUgbmV3bHkgY3JlYXRlZCB3aWxsIGJlIHJldHVybmVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBhY3RpdmF0ZUFjdGlvbjxULCBTPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPFQ+LFxuICAgICAgICBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPFQ+LFxuICAgICAgICBpbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPFQsIFM+LFxuICAgICAgICBwcmV2aW91c0FjdGlvbkluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8dW5rbm93biwgdW5rbm93bj5cbiAgICApOiBBY3Rpb25JbnN0YW5jZTxULCBTPiB7XG4gICAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgaW5zdGFuY2UgaWYgbm9uIHByb3ZpZGVkXG4gICAgICAgICAgICBpbnN0YW5jZSA9IG5ldyBBY3Rpb25JbnN0YW5jZTxULCBTPihhY3Rpb24sIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkFjdGl2YXRpb25TdGFydCwgdGhpcy5kZWJ1Zyk7XG4gICAgICAgIH1cbiAgICAgICAgaW5zdGFuY2UuYWN0aXZhdGlvblBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xuICAgICAgICAvLyBzdGFydCBhY3RpdmF0aW9uIGluc3RhbmNlXG4gICAgICAgIGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uQWN0aXZhdGlvblN0YXJ0O1xuICAgICAgICBpZiAoYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVFbnVtLkVkaXRvcikge1xuICAgICAgICAgICAgbGV0IGRpYWxvZ0NvbXBvbmVudCA9IHRoaXMuZGVmYXVsdEVkaXRvckRpYWxvZ0NvbXBvbmVudDtcbiAgICAgICAgICAgIGNvbnN0IGRpYWxvZ0NsYXNzTmFtZXMgPSBbJ21uZy1kaWFsb2cnXTtcbiAgICAgICAgICAgIGlmIChhY3Rpb24gaW5zdGFuY2VvZiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ2xhc3NOYW1lcy5wdXNoKGFjdGlvbi5kaWFsb2dDbGFzc05hbWUgPz8gJ21uZy1hY3Rpb24tZWRpdG9yLWRpYWxvZycpO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uLmRpYWxvZ1NpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTdHlsZVNpemVFbnVtLkV4dHJhU21hbGw6XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2dDbGFzc05hbWVzLnB1c2goJ21uZy1kaWFsb2cteHMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFN0eWxlU2l6ZUVudW0uU21hbGw6XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2dDbGFzc05hbWVzLnB1c2goJ21uZy1kaWFsb2ctc20nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFN0eWxlU2l6ZUVudW0uTGFyZ2U6XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2dDbGFzc05hbWVzLnB1c2goJ21uZy1kaWFsb2ctbGcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFN0eWxlU2l6ZUVudW0uRXh0cmFMYXJnZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZ0NsYXNzTmFtZXMucHVzaCgnbW5nLWRpYWxvZy14bCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU3R5bGVTaXplRW51bS5Ob3JtYWw6XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5lZGl0b3JDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlhbG9nQ29tcG9uZW50ID0gYWN0aW9uLmVkaXRvckNvbXBvbmVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkaWFsb2dDb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgZGF0YToge30sXG4gICAgICAgICAgICAgICAgc3R5bGVDbGFzczogZGlhbG9nQ2xhc3NOYW1lcy5qb2luKCcgJylcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBkaWFsb2dDb25maWcuZGF0YS5hY3Rpb25JbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmRhdGEucHJldmlvdXNBY3Rpb25JbnN0YW5jZSA9IHByZXZpb3VzQWN0aW9uSW5zdGFuY2U7XG4gICAgICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihkaWFsb2dDb21wb25lbnQsIGRpYWxvZ0NvbmZpZyk7XG4gICAgICAgICAgICBkaWFsb2dSZWYub25DbG9zZS5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWFjdGl2YXRlQWN0aW9uKGluc3RhbmNlISwgdHJ1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGluc3RhbmNlLmFjdGl2YXRpb25EaWFsb2dSZWYgPSBkaWFsb2dSZWY7XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBkaXJlY3RseSBleGVjdXRlIGFjdGlvblxuICAgICAgICAgICAgaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5BY3RpdmF0aW9uRW5kO1xuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMucnVuQWN0aW9uPFQsIFM+KGFjdGlvbiwgcGFyYW1ldGVycywgdW5kZWZpbmVkLCBpbnN0YW5jZSwgcHJldmlvdXNBY3Rpb25JbnN0YW5jZSk7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5pbnN0YW5jZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlYWN0aXZhdGVzIGFjdGlvbiBieSBjaG9vc2luZyBmaW5hbCBzdGF0ZSwgY2xvc2luZyBkaWFsb2cgYW5kIGNvbXBsZXRpbmcgYWxsIHN1YmplY3RzIGluIGluc3RhbmNlIGFuZCBjb250ZXh0cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBBY3Rpb24gaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIGZyb21EaWFsb2dMaXN0ZW5lciBEZWFjdGl2YXRpb24gY2FsbGVkIGZyb20gZGlhbG9nIGxpc3RlbmVyLCBpbiB0aGlzIGNhc2UgZGVhY3RpdmF0aW9uIGhhcHBlbnMgb25seSBpZiB0cnVlLlxuICAgICAqL1xuICAgIHB1YmxpYyBkZWFjdGl2YXRlQWN0aW9uPFQsIFM+KGluc3RhbmNlOiBBY3Rpb25JbnN0YW5jZTxULCBTPiwgZnJvbURpYWxvZ0xpc3RlbmVyID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKCFmcm9tRGlhbG9nTGlzdGVuZXIgJiYgaW5zdGFuY2Uuc3RhdGUgPj0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoU3VjY2Vzcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKGBBY3Rpb25JbnN0YW5jZSAke2luc3RhbmNlLmluc3RhbmNlTG9uZ05hbWV9IGFscmVhZHkgZmluaXNoZWRgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBmaW5hbFN0YXRlOiBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5yZXN1bHQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBmaW5hbFN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoU3VjY2VzcztcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdGFuY2UuZXJyb3IgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBmaW5hbFN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoRXJyb3I7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaW5hbFN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoRGlzbWlzc2VkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluc3RhbmNlLmFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlRW51bS5FZGl0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhc0RpYWxvZyA9IHR5cGVvZiBpbnN0YW5jZS5hY3RpdmF0aW9uRGlhbG9nUmVmICE9PSAndW5kZWZpbmVkJztcbiAgICAgICAgICAgIGlmIChoYXNEaWFsb2cgJiYgIWZyb21EaWFsb2dMaXN0ZW5lcikge1xuICAgICAgICAgICAgICAgIGlmIChmaW5hbFN0YXRlID09PSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHN0YXRlIGlzIGZpbmlzaCBhbmQgbm90IGNhbGxlZCBmcm9tIGRpYWxvZyBsaXN0ZW5lciwgY2xvc2UgdGhlIGRpYWxvZyBmaXJzdCB3aGljaCB3aWxsIHJldHJpZ2dlciB0aGlzIGZ1bmN0aW9uLCB0aGVuIGZpbmlzaCBpdFxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5hY3RpdmF0aW9uRGlhbG9nUmVmIS5jbG9zZShpbnN0YW5jZS5yZXN1bHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBlcnJvciBhbmQgZGlzbWlzc2VkIG11c3QgYm90aCBoYXZlIGZyb21EaWFsb2dMaXN0ZW5lciB0byBiZSBhYmxlIHRvIGZpbmlzaFxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNldCBmaW5hbCBzdGF0ZSBvbiBpbnN0YW5jZVxuICAgICAgICBpbnN0YW5jZS5zdGF0ZSA9IGZpbmFsU3RhdGU7XG4gICAgICAgIC8vIGNvbXBsZXRlIGFsbCBzdWJqZWN0c1xuICAgICAgICBpbnN0YW5jZS5maW5pc2goKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyBhY3Rpb24gZnJvbSB0YWJsZSByb3cgY2xpY2sgcG9zaXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBldmVudCBUYXJnZXQgdGFibGUgY2xpY2sgZXZlbnQuXG4gICAgICogQHBhcmFtIHJvdXRlIEN1cnJlbnRseSBhY3RpdmF0ZSByb3V0ZS5cbiAgICAgKiBAcGFyYW0gdGFibGVEZXNjcmlwdG9yIFRhYmxlIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIGRhdGFLZXlQcm9wZXJ0eSBEYXRhIGtleSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBwdWJsaWMgdHJpZ2dlclJvd0NsaWNrQWN0aW9uPFQ+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8VD4sXG4gICAgICAgIGV2ZW50OiBNbmdUYWJsZUNlbGxDbGlja0V2ZW50PFQ+LFxuICAgICAgICByb3V0ZT86IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICB0YWJsZURlc2NyaXB0b3I/OiBUYWJsZURlc2NyaXB0b3I8VD4sXG4gICAgICAgIGRhdGFLZXlQcm9wZXJ0eT86IHN0cmluZ1xuICAgICkge1xuICAgICAgICBjb25zdCBpZFByb3BlcnR5ID0gZGF0YUtleVByb3BlcnR5ID8/IHRhYmxlRGVzY3JpcHRvcj8uZGF0YUtleVByb3BlcnR5ID8/IGFjdGlvbj8ubW9kZWw/LmlkUHJvcGVydHlOYW1lID8/IGRhdGFLZXlQcm9wZXJ0eTtcbiAgICAgICAgaWYgKCFpZFByb3BlcnR5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJvdyBjbGljayBhY3Rpb24gJHthY3Rpb24uYWN0aW9uTmFtZUxvbmd9IGNhbiBub3QgYmUgdHJpZ2dlcmVkLCBiZWNhdXNlIGlkIHByb3BlcnR5IGNvdWxkIG5vdCBiZSBmb3VuZC5gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3dJdGVtID0gZXZlbnQ/LnJvd0l0ZW0gYXMgYW55O1xuICAgICAgICByZXR1cm4gdGhpcy50cmlnZ2VyQWN0aW9uKGFjdGlvbiwgbmV3IEFjdGlvblBhcmFtZXRlcnM8VD4ocm93SXRlbVtpZFByb3BlcnR5XSwgZXZlbnQucm93SXRlbSkud2l0aFJvdXRlKHJvdXRlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlcnMgYWN0aW9uIHdpdGggcGFyYW1ldGVycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIHBhcmFtZXRlcnMgQWN0aW9uIHBhcmFtZXRlcnMgZm9yIGFjdGlvbiBleGVjdXRpb24gdG8gY29uc3RydWN0IG5ldyByb3V0ZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm4gQWN0aW9uIGluc3RhbmNlIC0gaWYgbm9uIHByb3ZpZGVkIGluIHBhcmFtZXRlcnMsIHRoZSBuZXdseSBjcmVhdGVkIHdpbGwgYmUgcmV0dXJuZWQuXG4gICAgICovXG4gICAgcHVibGljIHRyaWdnZXJBY3Rpb248VCwgUz4oYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPFQ+LCBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPFQ+KTogQWN0aW9uSW5zdGFuY2U8VCwgUz4ge1xuICAgICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBBY3Rpb25JbnN0YW5jZTxULCBTPihhY3Rpb24sIHVuZGVmaW5lZCwgdGhpcy5kZWJ1Zyk7XG4gICAgICAgIGluc3RhbmNlLnRyaWdnZXJQYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcbiAgICAgICAgaWYgKGFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLnJvdXRlci51cmwuc3BsaXQoJz8nKVswXTtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZFVybDogVXJsVHJlZSA9IHRoaXMucm91dGVyLnBhcnNlVXJsKHRoaXMucm91dGVyLnVybCk7XG4gICAgICAgICAgICBsZXQgYWN0aW9uVXJsID0gYWN0aW9uLnJvdXRlVXJsID8/ICcnO1xuICAgICAgICAgICAgLy8gVE9ETzogZG9udCBzdHJpcCAnLycsIGJ1dCB1c2UgaXQgYWNjb3JkaW5nbHkgd2l0aCBBbmd1bGFyJ3Mgcm91dGVyIHBhdHRlcm5zICgvLCAuLywgLi4vKVxuICAgICAgICAgICAgaWYgKGFjdGlvblVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25VcmwgPSBhY3Rpb25Vcmwuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBhY3Rpb25VcmxTZWdtZW50cyA9IHRoaXMucGFyYW1ldHJpemUudHJhbnNmb3JtKGFjdGlvblVybCwgcGFyYW1ldGVycy5pdGVtSWQsIHBhcmFtZXRlcnMuaXRlbSwgcGFyYW1ldGVycy5hY3Rpb25EYXRhKS5zcGxpdCgnLycpO1xuXG4gICAgICAgICAgICBpbnN0YW5jZS50cmlnZ2VyUm91dGVOYXZpZ2F0aW9uID0gZnJvbSh0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYmFzZVVybCwgLi4uYWN0aW9uVXJsU2VnbWVudHNdLCB7cmVsYXRpdmVUbzogcGFyYW1ldGVycy5yb3V0ZSwgcXVlcnlQYXJhbXM6IHBhcnNlZFVybC5xdWVyeVBhcmFtc30pKTtcblxuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5UcmlnZ2VyRW5kO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZhdGVBY3Rpb24oYWN0aW9uLCBwYXJhbWV0ZXJzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlYWN0aXZhdGVzIG9uIHJvdXRlIHRyaWdnZXJlZCBhY3Rpb24gYnkgdHJ5aW5nIHRvIHJlcm91dGUgYmFjayB0byBsb2NhdGlvbiB3aGVyZSBhY3Rpb24gd2FzIHRyaWdnZXJlZC5cbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgQWN0aW9uIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBkZWFjdGl2YXRlT25Sb3V0ZVRyaWdnZXJlZEFjdGlvbjxULCBTPihpbnN0YW5jZTogQWN0aW9uSW5zdGFuY2U8VCwgUz4pIHtcbiAgICAgICAgaWYgKGluc3RhbmNlLmFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciAhPT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBmb3Igbm93LCBkZWFjdGl2YXRpb24gYWx3YXlzIG1lYW5zIGdvaW5nIGJhY2sgdG8gdGFibGV2aWV3IHJvb3RcbiAgICAgICAgLy8gaWYgKHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0UHJldmlvdXNMb2NhdGlvbigpKSB7XG4gICAgICAgIC8vICAgICAvLyB0aGVyZSBhcmUgaW50ZXJuYWwgaGlzdG9yeSByZWNvcmRzLCBzbyBiYWNrIGNhbiBiZSBub3JtYWxseSBjYWxsZWRcbiAgICAgICAgLy8gICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuYmFjaygpO1xuICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAvLyAgICAgLy8gdGhlcmUgaXMgbm8gaW50ZXJuYWwgaGlzdG9yeSByZWNvcmRzLCBmaWd1cmUgb3V0IHRoZSBiYXNlIHVybCBieSBlbGltaW5hdGluZyBhY3Rpb24gc3BlY2lmaWMgdXJsXG4gICAgICAgIGxldCB1cmwgPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldEN1cnJlbnRMb2NhdGlvbigpO1xuICAgICAgICAvLyBsZXQgcHJldmlvdXNVcmwgPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldFByZXZpb3VzTG9jYXRpb24oKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2codXJsLCBwcmV2aW91c1VybCk7XG4gICAgICAgIGlmICghdXJsKSB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmJhY2soKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh1cmwuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICAgICAgdXJsID0gdXJsLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHVybFBhdGhTZWdtZW50cyA9IHVybC5zcGxpdCgnPycpWzBdLnNwbGl0KCcjJylbMF0uc3BsaXQoJy8nKTtcbiAgICAgICAgICAgIGxldCBhY3Rpb25VcmwgPSBpbnN0YW5jZS5hY3Rpb24/LnJvdXRlVXJsID8/ICcnO1xuICAgICAgICAgICAgaWYgKGFjdGlvblVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25VcmwgPSBhY3Rpb25Vcmwuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYWN0aW9uVXJsU2VnbWVudHMgPSBhY3Rpb25Vcmwuc3BsaXQoJy8nKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gJy8nICsgdXJsUGF0aFNlZ21lbnRzLnNsaWNlKDAsIHVybFBhdGhTZWdtZW50cy5sZW5ndGggLSBhY3Rpb25VcmxTZWdtZW50cy5sZW5ndGgpLmpvaW4oJy8nKTtcbiAgICAgICAgICAgIC8vIGNvbnN0IHJlcGxhY2VVcmwgPSBwcmV2aW91c1VybCAhPT0gbnVsbCAmJiBwcmV2aW91c1VybC5zcGxpdCgnPycpWzBdLnNwbGl0KCcjJylbMF0gPT09IHJlZGlyZWN0VXJsO1xuICAgICAgICAgICAgLy8gTm8gVVJMIHJlcGxhY2VzLCBwcm9iYWJseSBvaywgdG8gYWxsb3cgZ29pbmcgYmFja1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChyZWRpcmVjdFVybCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybSBlcnJvciBvZiBhbnkgdHlwZSB0byBtbmcgZXJyb3IgYnkgdXNpbmcgZXJyb3IgbWFwcGVyIHRoYXQgY291bGQgYmUgcHJvdmlkZWQgYnkgZmluYWwgcHJvamVjdC5cbiAgICAgKiBAcGFyYW0gZXJyb3IgZXJyb3Igb2YgYW55IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIG1hcHBlZCBNbmdFcnJvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgdG9NbmdBY3Rpb25FcnJvcihlcnJvcj86IGFueSk6IE1uZ0Vycm9yIHtcbiAgICAgICAgY29uc3QgYWN0aW9uRXJyb3I6IE1uZ0Vycm9yID0ge1xuICAgICAgICAgICAgbmFtZTogZXJyb3I/Lm5hbWUgPz8gJ1Vua25vd25FcnJvcicsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvcj8ubWVzc2FnZSA/PyAnVW5rbm93biBlcnJvcicsXG4gICAgICAgICAgICBjYXVzZTogZXJyb3JcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGFjdGlvbkVycm9yLnN0YXR1cyA9IGVycm9yLnN0YXR1cztcbiAgICAgICAgICAgIGFjdGlvbkVycm9yLnN0YXR1c0Rlc2NyaXB0aW9uID0gZXJyb3Iuc3RhdHVzVGV4dDtcbiAgICAgICAgICAgIGFjdGlvbkVycm9yLnVybCA9IGVycm9yLnVybCA/PyB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JNYXBwZXIudG9NbmdFcnJvcihlcnJvciwgYWN0aW9uRXJyb3IpO1xuICAgIH1cbn1cbiJdfQ==