@wavemaker/app-ng-runtime 11.11.0-rc.6109 → 11.11.0-rc.6112

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 (41) hide show
  1. package/components/base/bundles/index.umd.js +3 -1
  2. package/components/base/esm2022/widgets/common/base/base-field-validations.mjs +4 -2
  3. package/components/base/fesm2022/index.mjs +3 -1
  4. package/components/base/fesm2022/index.mjs.map +1 -1
  5. package/components/containers/tabs/bundles/index.umd.js +28 -4
  6. package/components/containers/tabs/esm2022/tabs.component.mjs +27 -6
  7. package/components/containers/tabs/esm2022/tabs.props.mjs +2 -1
  8. package/components/containers/tabs/fesm2022/index.mjs +27 -5
  9. package/components/containers/tabs/fesm2022/index.mjs.map +1 -1
  10. package/components/containers/tabs/tabs.component.d.ts +2 -0
  11. package/components/containers/wizard/bundles/index.umd.js +7 -10
  12. package/components/containers/wizard/esm2022/wizard.component.mjs +8 -11
  13. package/components/containers/wizard/fesm2022/index.mjs +7 -10
  14. package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
  15. package/components/containers/wizard/wizard.component.d.ts +2 -2
  16. package/components/data/table/bundles/index.umd.js +8 -7
  17. package/components/data/table/esm2022/table.component.mjs +6 -4
  18. package/components/data/table/fesm2022/index.mjs +5 -3
  19. package/components/data/table/fesm2022/index.mjs.map +1 -1
  20. package/components/input/calendar/bundles/index.umd.js +3 -0
  21. package/components/input/calendar/esm2022/calendar.component.mjs +4 -1
  22. package/components/input/calendar/fesm2022/index.mjs +3 -0
  23. package/components/input/calendar/fesm2022/index.mjs.map +1 -1
  24. package/components/input/color-picker/bundles/index.umd.js +5 -3
  25. package/components/input/color-picker/esm2022/color-picker.component.mjs +7 -5
  26. package/components/input/color-picker/fesm2022/index.mjs +6 -4
  27. package/components/input/color-picker/fesm2022/index.mjs.map +1 -1
  28. package/npm-shrinkwrap.json +2 -2
  29. package/package-lock.json +2 -2
  30. package/package.json +1 -1
  31. package/runtime/base/bundles/index.umd.js +1 -0
  32. package/runtime/base/esm2022/services/i18n.service.mjs +2 -1
  33. package/runtime/base/fesm2022/index.mjs +1 -0
  34. package/runtime/base/fesm2022/index.mjs.map +1 -1
  35. package/runtime/dynamic/app/app.config.d.ts +5 -0
  36. package/runtime/dynamic/bundles/index.umd.js +165 -56
  37. package/runtime/dynamic/esm2022/app/app.config.mjs +136 -0
  38. package/runtime/dynamic/esm2022/app/services/component-ref-provider.service.mjs +2 -4
  39. package/runtime/dynamic/esm2022/main.mjs +10 -10
  40. package/runtime/dynamic/fesm2022/index.mjs +189 -78
  41. package/runtime/dynamic/fesm2022/index.mjs.map +1 -1
@@ -121,6 +121,7 @@
121
121
  ['transition', i3.PROP_STRING],
122
122
  ['type', i3.PROP_STRING],
123
123
  ['iconposition', i3.PROP_STRING],
124
+ ['autotabactivation', { value: true, ...i3.PROP_BOOLEAN }]
124
125
  ]);
125
126
  i3.register('wm-tabs', props);
126
127
  };
@@ -677,6 +678,9 @@
677
678
  setTimeout(() => this.selectDefaultPaneByIndex(this.defaultpaneindex || 0), 20);
678
679
  }
679
680
  }
681
+ else if (key === 'autotabactivation') {
682
+ this.autoActivation = nv;
683
+ }
680
684
  else {
681
685
  super.onPropertyChange(key, nv, ov);
682
686
  }
@@ -698,18 +702,34 @@
698
702
  });
699
703
  }
700
704
  onkeydown(event) {
705
+ let newPane;
701
706
  switch (event.key) {
702
707
  case 'ArrowLeft':
703
708
  case 'ArrowUp':
704
- this.prev(null, true);
705
- event.preventDefault();
709
+ newPane = this.autoActivation ? (this.prev(null, true), null) : this.getSelectableTabBeforeIndex(this.getSelectedPaneIndex());
706
710
  break;
707
711
  case 'ArrowRight':
708
712
  case 'ArrowDown':
709
- this.next(null, true);
710
- event.preventDefault();
713
+ newPane = this.autoActivation ? (this.next(null, true), null) : this.getSelectableTabAfterIndex(this.getSelectedPaneIndex());
711
714
  break;
715
+ case 'Enter': {
716
+ const pane = this.getSelectableTabAfterIndex(this.getSelectedPaneIndex() - 1);
717
+ if (pane) {
718
+ const enterEvent = new KeyboardEvent('keydown', { key: 'Enter', code: 'Enter', bubbles: true, cancelable: true });
719
+ pane.nativeElement.dispatchEvent(enterEvent);
720
+ pane.select(enterEvent, true);
721
+ }
722
+ event.preventDefault();
723
+ return;
724
+ }
725
+ default:
726
+ return;
712
727
  }
728
+ if (newPane) {
729
+ this.nativeElement.querySelector('li.select')?.classList.remove('select');
730
+ this.nativeElement.querySelector(`li[data-paneid="${newPane.widgetId}"]`)?.classList.add('select');
731
+ }
732
+ event.preventDefault();
713
733
  }
714
734
  ngAfterContentInit() {
715
735
  this.promiseResolverFn();
@@ -725,6 +745,10 @@
725
745
  super.ngAfterViewInit();
726
746
  this.registerTabsScroll();
727
747
  }
748
+ getSelectedPaneIndex() {
749
+ const index = this.panes.toArray().findIndex(pane => this.nativeElement.querySelector(`li[data-paneid="${pane.widgetId}"]`)?.classList.contains("select"));
750
+ return index >= 0 ? index : this.getActiveTabIndex();
751
+ }
728
752
  static { this.ɵfac = function TabsComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TabsComponent)(i0__namespace.ɵɵdirectiveInject(i0__namespace.Injector), i0__namespace.ɵɵdirectiveInject(i1__namespace.DynamicComponentRefProvider), i0__namespace.ɵɵinjectAttribute('transition'), i0__namespace.ɵɵinjectAttribute('tabsposition'), i0__namespace.ɵɵdirectiveInject(i1__namespace.StatePersistence), i0__namespace.ɵɵdirectiveInject('EXPLICIT_CONTEXT', 8)); }; }
729
753
  static { this.ɵcmp = /*@__PURE__*/ i0__namespace.ɵɵdefineComponent({ type: TabsComponent, selectors: [["div", "wmTabs", ""]], contentQueries: function TabsComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
730
754
  i0__namespace.ɵɵcontentQuery(dirIndex, TabPaneComponent, 4);
@@ -376,6 +376,9 @@ export class TabsComponent extends StylableComponent {
376
376
  setTimeout(() => this.selectDefaultPaneByIndex(this.defaultpaneindex || 0), 20);
377
377
  }
378
378
  }
379
+ else if (key === 'autotabactivation') {
380
+ this.autoActivation = nv;
381
+ }
379
382
  else {
380
383
  super.onPropertyChange(key, nv, ov);
381
384
  }
@@ -397,20 +400,34 @@ export class TabsComponent extends StylableComponent {
397
400
  });
398
401
  }
399
402
  onkeydown(event) {
403
+ let newPane;
400
404
  switch (event.key) {
401
405
  case 'ArrowLeft':
402
406
  case 'ArrowUp':
403
- this.prev(null, true);
404
- event.preventDefault();
407
+ newPane = this.autoActivation ? (this.prev(null, true), null) : this.getSelectableTabBeforeIndex(this.getSelectedPaneIndex());
405
408
  break;
406
409
  case 'ArrowRight':
407
410
  case 'ArrowDown':
408
- this.next(null, true);
409
- event.preventDefault();
411
+ newPane = this.autoActivation ? (this.next(null, true), null) : this.getSelectableTabAfterIndex(this.getSelectedPaneIndex());
410
412
  break;
413
+ case 'Enter': {
414
+ const pane = this.getSelectableTabAfterIndex(this.getSelectedPaneIndex() - 1);
415
+ if (pane) {
416
+ const enterEvent = new KeyboardEvent('keydown', { key: 'Enter', code: 'Enter', bubbles: true, cancelable: true });
417
+ pane.nativeElement.dispatchEvent(enterEvent);
418
+ pane.select(enterEvent, true);
419
+ }
420
+ event.preventDefault();
421
+ return;
422
+ }
411
423
  default:
412
- break;
424
+ return;
413
425
  }
426
+ if (newPane) {
427
+ this.nativeElement.querySelector('li.select')?.classList.remove('select');
428
+ this.nativeElement.querySelector(`li[data-paneid="${newPane.widgetId}"]`)?.classList.add('select');
429
+ }
430
+ event.preventDefault();
414
431
  }
415
432
  ngAfterContentInit() {
416
433
  this.promiseResolverFn();
@@ -426,6 +443,10 @@ export class TabsComponent extends StylableComponent {
426
443
  super.ngAfterViewInit();
427
444
  this.registerTabsScroll();
428
445
  }
446
+ getSelectedPaneIndex() {
447
+ const index = this.panes.toArray().findIndex(pane => this.nativeElement.querySelector(`li[data-paneid="${pane.widgetId}"]`)?.classList.contains("select"));
448
+ return index >= 0 ? index : this.getActiveTabIndex();
449
+ }
429
450
  static { this.ɵfac = function TabsComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TabsComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i1.DynamicComponentRefProvider), i0.ɵɵinjectAttribute('transition'), i0.ɵɵinjectAttribute('tabsposition'), i0.ɵɵdirectiveInject(i1.StatePersistence), i0.ɵɵdirectiveInject('EXPLICIT_CONTEXT', 8)); }; }
430
451
  static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TabsComponent, selectors: [["div", "wmTabs", ""]], contentQueries: function TabsComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
431
452
  i0.ɵɵcontentQuery(dirIndex, TabPaneComponent, 4);
@@ -476,4 +497,4 @@ export class TabsComponent extends StylableComponent {
476
497
  args: [TabPaneComponent]
477
498
  }] }); })();
478
499
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TabsComponent, { className: "TabsComponent", filePath: "tabs.component.ts", lineNumber: 55 }); })();
479
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvY29udGFpbmVycy90YWJzL3NyYy90YWJzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9jb250YWluZXJzL3RhYnMvc3JjL3RhYnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sRUFHSCxTQUFTLEVBQ1QsU0FBUyxFQUNULGVBQWUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUNwQyxRQUFRLEVBRVIsUUFBUSxFQUNSLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0gsUUFBUSxFQUNSLFVBQVUsRUFDViwyQkFBMkIsRUFDM0IsSUFBSSxFQUNKLFdBQVcsRUFDWCxnQkFBZ0IsRUFDbkIsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUNILGlCQUFpQixFQUVqQixrQkFBa0IsRUFDbEIsTUFBTSxFQUNOLGlCQUFpQixFQUNqQixlQUFlLEVBQ2xCLE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQzs7Ozs7Ozs7Ozs7OztJQ3ZCekUsdUJB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RCx3QkFrQkM7WUFFSCxlQUlDO1lBSkQsaURBSUM7WUFDRCxjQU9DO1lBUEQsaURBT0M7NEJEYVcsWUFBWSxjQUFFLGtCQUFrQjs7aUZBUS9CLGFBQWE7Y0FWekIsU0FBUzs2QkFDSSxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsa0JBQWtCLENBQUMsWUFDL0IsYUFBYSxZQUViLFFBQVEsYUFDUDtvQkFDUCxrQkFBa0IsZUFBZTtpQkFDcEM7O3NCQWlDSSxTQUFTO3VCQUFDLFlBQVk7O3NCQUN0QixTQUFTO3VCQUFDLGNBQWM7O3NCQUV4QixNQUFNO3VCQUFDLGtCQUFrQjs7c0JBQUcsUUFBUTtxQkFWTixZQUFZO2tCQUE5QyxXQUFXO21CQUFDLG9CQUFvQjtZQUVFLEtBQUs7a0JBQXZDLGVBQWU7bUJBQUMsZ0JBQWdCOztrRkExQnhCLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgV21Db21wb25lbnRzTW9kdWxlIH0gZnJvbSBcIkB3bS9jb21wb25lbnRzL2Jhc2VcIjtcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIEF0dHJpYnV0ZSxcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLCBIb3N0QmluZGluZywgSW5qZWN0LFxuICAgIEluamVjdG9yLFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBRdWVyeUxpc3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gICAgYWRkQ2xhc3MsXG4gICAgYXBwZW5kTm9kZSxcbiAgICBEeW5hbWljQ29tcG9uZW50UmVmUHJvdmlkZXIsXG4gICAgbm9vcCxcbiAgICByZW1vdmVDbGFzcyxcbiAgICBTdGF0ZVBlcnNpc3RlbmNlXG59IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7XG4gICAgQVBQTFlfU1RZTEVTX1RZUEUsXG4gICAgSVdpZGdldENvbmZpZyxcbiAgICBwcm92aWRlQXNXaWRnZXRSZWYsXG4gICAgc3R5bGVyLFxuICAgIFN0eWxhYmxlQ29tcG9uZW50LFxuICAgIGNyZWF0ZUFycmF5RnJvbVxufSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcblxuaW1wb3J0IHsgVGFic0FuaW1hdG9yIH0gZnJvbSAnLi90YWJzLmFuaW1hdG9yJztcbmltcG9ydCB7IHJlZ2lzdGVyUHJvcHMgfSBmcm9tICcuL3RhYnMucHJvcHMnO1xuaW1wb3J0IHsgVGFiUGFuZUNvbXBvbmVudCB9IGZyb20gJy4vdGFiLXBhbmUvdGFiLXBhbmUuY29tcG9uZW50JztcbmltcG9ydCB7ZmluZCwgZmluZEluZGV4LCBmb3JFYWNoLCBnZXQsIGluZGV4T2YsIGlzQXJyYXksIGlzRW1wdHl9IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuZGVjbGFyZSBjb25zdCAkO1xuXG5jb25zdCBERUZBVUxUX0NMUyA9ICdhcHAtdGFicyBjbGVhcmZpeCc7XG5jb25zdCBXSURHRVRfQ09ORklHOiBJV2lkZ2V0Q29uZmlnID0ge1xuICAgIHdpZGdldFR5cGU6ICd3bS10YWJzJyxcbiAgICBob3N0Q2xhc3M6IERFRkFVTFRfQ0xTXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgV21Db21wb25lbnRzTW9kdWxlXSxcbiAgICBzZWxlY3RvcjogJ2Rpdlt3bVRhYnNdJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFicy5jb21wb25lbnQuaHRtbCcsXG4gICAgZXhwb3J0QXM6ICd3bVRhYnMnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoVGFic0NvbXBvbmVudClcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFRhYnNDb21wb25lbnQgZXh0ZW5kcyBTdHlsYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcblxuICAgIHB1YmxpYyBkZWZhdWx0cGFuZWluZGV4OiBudW1iZXI7XG4gICAgcHVibGljIHRyYW5zaXRpb246IHN0cmluZztcbiAgICBwdWJsaWMgdGFic3Bvc2l0aW9uOiBzdHJpbmc7XG4gICAgcHVibGljIHN0YXRlaGFuZGxlcjogYW55O1xuICAgIHByaXZhdGUgc3RhdGVQZXJzaXN0ZW5jZTogU3RhdGVQZXJzaXN0ZW5jZTtcblxuICAgIHB1YmxpYyB2ZXJ0aWNhbDogYm9vbGVhbjtcbiAgICBwdWJsaWMganVzdGlmaWVkOiBib29sZWFuO1xuICAgIHByaXZhdGUgYWN0aXZlVGFiOiBUYWJQYW5lQ29tcG9uZW50O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvbWlzZVJlc29sdmVyRm46IEZ1bmN0aW9uO1xuICAgIHByaXZhdGUgdGFic0FuaW1hdG9yOiBUYWJzQW5pbWF0b3I7XG4gICAgcHJpdmF0ZSBfb2xkUGFuZUluZGV4OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBpc1BhZ2VMb2FkQ2FsbDogYm9vbGVhbjtcbiAgICBwcml2YXRlIGR5bmFtaWNDb21wb25lbnRQcm92aWRlcjtcbiAgICBwcml2YXRlIF9keW5hbWljQ29udGV4dDtcbiAgICBwcml2YXRlIGR5bmFtaWNQYW5lSW5kZXg7XG4gICAgcHVibGljIGR5bmFtaWNUYWJzO1xuICAgIHB1YmxpYyBmaWVsZERlZnM7XG4gICAgcHVibGljIHR5cGU7XG4gICAgcHVibGljIG5vZGF0YW1lc3NhZ2U7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWNvbi1wb3NpdGlvbicpIGljb25wb3NpdGlvbjogc3RyaW5nID0gJyc7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKFRhYlBhbmVDb21wb25lbnQpIHBhbmVzOiBRdWVyeUxpc3Q8VGFiUGFuZUNvbXBvbmVudD47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qOiBJbmplY3RvcixcbiAgICAgICAgZHluYW1pY0NvbXBvbmVudFByb3ZpZGVyOiBEeW5hbWljQ29tcG9uZW50UmVmUHJvdmlkZXIsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ3RyYW5zaXRpb24nKSBfdHJhbnNpdGlvbjogc3RyaW5nLFxuICAgICAgICBAQXR0cmlidXRlKCd0YWJzcG9zaXRpb24nKSBfdGFic1Bvc2l0aW9uOiBzdHJpbmcsXG4gICAgICAgIHN0YXRlUGVyc2lzdGVuY2U6IFN0YXRlUGVyc2lzdGVuY2UsXG4gICAgICAgIEBJbmplY3QoJ0VYUExJQ0lUX0NPTlRFWFQnKSBAT3B0aW9uYWwoKSBleHBsaWNpdENvbnRleHQ6IGFueVxuICAgICkge1xuICAgICAgICAvLyBoYW5kbGUgdG8gdGhlIHByb21pc2UgcmVzb2x2ZXJcbiAgICAgICAgbGV0IHJlc29sdmVGbjogRnVuY3Rpb24gPSBub29wO1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcsIGV4cGxpY2l0Q29udGV4dCwgbmV3IFByb21pc2UocmVzID0+IHJlc29sdmVGbiA9IHJlcykpO1xuXG4gICAgICAgIHRoaXMudHJhbnNpdGlvbiA9IF90cmFuc2l0aW9uO1xuICAgICAgICB0aGlzLnRhYnNwb3NpdGlvbiA9IF90YWJzUG9zaXRpb247XG4gICAgICAgIHRoaXMuc3RhdGVQZXJzaXN0ZW5jZSA9IHN0YXRlUGVyc2lzdGVuY2U7XG4gICAgICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFByb3ZpZGVyID0gZHluYW1pY0NvbXBvbmVudFByb3ZpZGVyO1xuICAgICAgICB0aGlzLmR5bmFtaWNUYWJzID0gW107XG4gICAgICAgIHRoaXMuZHluYW1pY1BhbmVJbmRleCA9IDA7XG5cbiAgICAgICAgdGhpcy5wcm9taXNlUmVzb2x2ZXJGbiA9IHJlc29sdmVGbjtcblxuICAgICAgICBzdHlsZXIodGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzLCBBUFBMWV9TVFlMRVNfVFlQRS5DT05UQUlORVIpO1xuXG4gICAgfVxuXG4gICAgYW5pbWF0ZUluIChlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgICAgICBjb25zdCB0YWJIZWFkZXIgPSAkKGVsZW1lbnQpO1xuICAgICAgICAvLyB3aGVuIHRoZSBhbmltYXRpb24gaXMgbm90IHByZXNlbnQgdG9nZ2xlIHRoZSBhY3RpdmUgY2xhc3MuXG4gICAgICAgIHRhYkhlYWRlci5zaWJsaW5ncygnLmFjdGl2ZScpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgdGFiSGVhZGVyLmFkZENsYXNzKCdhY3RpdmUnKTtcblxuICAgICAgICBjb25zdCB1bCA9IHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCd1bC5uYXYubmF2LXRhYnMnKTtcblxuICAgICAgICAvLyBtb3ZlIHRoZSB0YWJoZWFkZXIgaW50byB0aGUgdmlld3BvcnRcbiAgICAgICAgY29uc3QgJHByZXZIZWFkZXJFbGUgPSB0YWJIZWFkZXIucHJldigpO1xuICAgICAgICBpZiAoJHByZXZIZWFkZXJFbGUubGVuZ3RoKSB7XG4gICAgICAgICAgICB1bC5zY3JvbGxMZWZ0ID0gJHByZXZIZWFkZXJFbGVbMF0ub2Zmc2V0TGVmdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVsLnNjcm9sbExlZnQgPSAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byByZWdpc3RlciB0aGUgZHluYW1pYyBwYW5lcy5cbiAgICAgKiBBZnRlciBhbGwgcGFuZXMgYXJlIGluaXRpYWx6ZWQsIHVwZGF0ZSB0aGUgcXVlcnlsaXN0IG1hbnVhbGx5IGJhc2VkIG9uIGluZGV4LlxuICAgICAqIEBwYXJhbSBwYW5lUmVmIC0gcmVmcmVuY2Ugb2YgdGhlIHRhYnBhbmVcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJEeW5hbWljVGFiKHBhbmVSZWYpIHtcbiAgICAgICAgdGhpcy5keW5hbWljVGFicy5wdXNoKHBhbmVSZWYpO1xuICAgICAgICBjb25zdCBpc0xhc3RQYW5lID0gIHRoaXMuZHluYW1pY1RhYnMubGVuZ3RoID09PSB0aGlzLmR5bmFtaWNQYW5lSW5kZXg7XG4gICAgICAgIGlmIChpc0xhc3RQYW5lKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZHluYW1pY1RhYnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdQYW5lUmVmID0gZmluZCh0aGlzLmR5bmFtaWNUYWJzLCBwYW5lID0+IHBhbmUuZHluYW1pY1BhbmVJbmRleCA9PT0gaSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNQYW5lQWxyZWFkeUV4aXN0ID0gZmluZCh0aGlzLnBhbmVzLnRvQXJyYXkoKSwgbmV3UGFuZVJlZik7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1BhbmVBbHJlYWR5RXhpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYW5lcy5yZXNldChbLi4udGhpcy5wYW5lcy50b0FycmF5KCksIG5ld1BhbmVSZWZdKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1BhbmVSZWYuYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQYW5lUmVmLnNlbGVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMjApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdG8gYWRkIHRoZSB0YWJwYW5lIGR5bmFtaWNhbGx5XG4gICAgICogQHBhcmFtIHRhYnBhbmVzIC0gbGlzdCBvZiB0YWJwYW5lc1xuICAgICAqL1xuICAgIHB1YmxpYyBhZGRQYW5lKHRhYnBhbmVzKSB7XG4gICAgICAgIGlmICghaXNBcnJheSh0YWJwYW5lcykpIHtcbiAgICAgICAgICAgIHRhYnBhbmVzID0gW3RhYnBhbmVzXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYW5lTmFtZXNMaXN0ID0gW107XG4gICAgICAgIGZvckVhY2godGFicGFuZXMsIChwYW5lLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNQYW5lQWxyZWFkeUNyZWF0ZWQgPSBmaW5kKHRoaXMucGFuZXMudG9BcnJheSgpLCB7bmFtZTogcGFuZS5uYW1lfSk7XG4gICAgICAgICAgICBjb25zdCBpc1BhbmVOYW1lRXhpc3QgPSBpbmRleE9mKHBhbmVOYW1lc0xpc3QsIHBhbmUubmFtZSk7XG4gICAgICAgICAgICAvLyBJZiB1c2VyIHRyaWVzIHRvIGFkZCB0YWJwYW5lIHdpdGggdGhlIHNhbWUgbmFtZSB3aGljaCBpcyBhbHJlYWR5IGV4aXN0cyB0aGVuIGRvIG5vdCBjcmVhdGUgdGhlIHBhbmVcbiAgICAgICAgICAgIGlmIChpc1BhbmVBbHJlYWR5Q3JlYXRlZCB8fCBpc1BhbmVOYW1lRXhpc3QgPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBUaGUgdGFiIHBhbmUgd2l0aCBuYW1lICR7cGFuZS5uYW1lfSBhbHJlYWR5IGV4aXN0c2ApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHBhcmFtTWFya3VwID0gJyc7XG4gICAgICAgICAgICBsZXQgcHJvcHNUbXBsID0gJyc7XG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNQYW5lSW5kZXgrKztcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBwYW5lLm5hbWUgPyBwYW5lLm5hbWUgOiBgdGFicGFuZSR7dGhpcy5wYW5lcy50b0FycmF5KCkubGVuZ3RoICsgKGluZGV4ICsgMSl9YDtcbiAgICAgICAgICAgIHBhbmVOYW1lc0xpc3QucHVzaChuYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRpYWxQYXJhbXMgPSBnZXQocGFuZSwgJ3BhcmFtcycpO1xuXG4gICAgICAgICAgICBmb3JFYWNoKHBhbmUsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gJ3BhcmFtcycpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHNUbXBsID0gYCR7cHJvcHNUbXBsfSAke2tleX09XCIke3ZhbHVlfVwiYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZm9yRWFjaChwYXJ0aWFsUGFyYW1zLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIHBhcmFtTWFya3VwID0gYCR7cGFyYW1NYXJrdXB9IDx3bS1wYXJhbSBuYW1lPVwiJHtrZXl9XCIgdmFsdWU9XCIke3ZhbHVlfVwiPjwvd20tcGFyYW0+YDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgbWFya3VwID0gYDx3bS10YWJwYW5lIGR5bmFtaWNQYW5lSW5kZXg9XCIke3RoaXMuZHluYW1pY1BhbmVJbmRleCAtIDF9XCIgaXNkeW5hbWljPVwidHJ1ZVwiIG5hbWU9XCIke25hbWV9XCIgJHtwcm9wc1RtcGx9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7cGFyYW1NYXJrdXB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3dtLXRhYnBhbmU+YDtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLl9keW5hbWljQ29udGV4dCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2R5bmFtaWNDb250ZXh0ID0gT2JqZWN0LmNyZWF0ZSh0aGlzLnZpZXdQYXJlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R5bmFtaWNDb250ZXh0W3RoaXMuZ2V0QXR0cignd21UYWInKV0gPSB0aGlzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRQcm92aWRlci5hZGRDb21wb25lbnQodGhpcy5nZXROYXRpdmVFbGVtZW50KCkucXVlcnlTZWxlY3RvcignLnRhYi1jb250ZW50JyksIG1hcmt1cCwgdGhpcy5fZHluYW1pY0NvbnRleHQsIHtpbmo6IHRoaXMuaW5qfSk7XG5cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYW5lTmFtZXNMaXN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHRvIHJlbW92ZSB0aGUgdGFicGFuZVxuICAgICAqIEBwYXJhbSBwYW5lSW5kZXggLSBpbmRleCBvZiB0aGUgcGFuZVxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmVQYW5lKHBhbmVOYW1lKSB7XG4gICAgICAgIGNvbnN0IHBhbmVSZWYgPSB0aGlzLmdldFBhbmVSZWZCeU5hbWUocGFuZU5hbWUpO1xuICAgICAgICBpZiAocGFuZVJlZikge1xuICAgICAgICAgICAgcGFuZVJlZi5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRhYlBhbmUgY2hpbGRyZW4gY29tcG9uZW50cyBpbnZva2UgdGhpcyBtZXRob2QgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgcGFyZW50XG4gICAgICogaWYgdGhlIGV2dCBhcmd1bWVudCBpcyBkZWZpbmVkIG9uLWNoYW5nZSBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQuXG4gICAgICovXG4gICAgcHVibGljIG5vdGlmeUNoYW5nZShwYW5lUmVmOiBUYWJQYW5lQ29tcG9uZW50LCBldnQ6IEV2ZW50LCBpc0tleUJvYXJkRXZlbnQ6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzU2VsZWN0YWJsZVRhYihwYW5lUmVmKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGhlYWRlckVsZW1lbnQ7XG4gICAgICAgIC8vIGludm9rZSBkZXNlbGVjdCBldmVudCBjYWxsYmFjayBvbiB0aGUgcHJlc2V0IGFjdGl2ZSB0YWJcbiAgICAgICAgaWYgKCFpc0VtcHR5KHRoaXMuYWN0aXZlVGFiKSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVUYWIuZGVzZWxlY3QoKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgdGhpcy5hY3RpdmVUYWIgPSBwYW5lUmVmLmdldFdpZGdldCgpO1xuICAgICAgICBjb25zdCBuZXdQYW5lSW5kZXggPSB0aGlzLmdldFBhbmVJbmRleEJ5UmVmKHBhbmVSZWYpO1xuICAgICAgICBjb25zdCBtb2RlID0gdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLmNvbXB1dGVNb2RlKHRoaXMuc3RhdGVoYW5kbGVyKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzUGFnZUxvYWRDYWxsICYmIG1vZGUgJiYgbW9kZS50b0xvd2VyQ2FzZSgpICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5zZXRXaWRnZXRTdGF0ZSh0aGlzLCB0aGlzLmFjdGl2ZVRhYi5uYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdHBhbmVpbmRleCA9IHRoaXMuZ2V0UGFuZUluZGV4QnlSZWYocGFuZVJlZik7XG4gICAgICAgICAgICB0aGlzLmlzUGFnZUxvYWRDYWxsID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpbnZva2Ugc2VsZWN0IGNhbGxiYWNrIG9uIHRoZSBzZWxlY3RlZCB0YWJcbiAgICAgICAgcGFuZVJlZi5pbnZva2VPblNlbGVjdENhbGxiYWNrKGV2dCk7XG5cbiAgICAgICAgLy8gaW52b2tlIGNoYW5nZSBjYWxsYmFjayBpZiB0aGUgZXZ0IGlzIHByZXNlbnQsIHNlbGVjdCBhIHRhYiBwcm9ncmFtbWF0aWNhbGx5IHdpbGwgbm90IGhhdmUgdGhlIGV2ZW50XG4gICAgICAgIGlmIChldnQpIHtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgICRldmVudDogZXZ0LFxuICAgICAgICAgICAgICAgIG5ld1BhbmVJbmRleDogbmV3UGFuZUluZGV4LFxuICAgICAgICAgICAgICAgIG9sZFBhbmVJbmRleDogdGhpcy5fb2xkUGFuZUluZGV4IHx8IDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX29sZFBhbmVJbmRleCA9IG5ld1BhbmVJbmRleDtcblxuICAgICAgICBpZiAoZXZ0KSB7XG4gICAgICAgICAgICBoZWFkZXJFbGVtZW50ID0gJChldnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KCdsaS50YWItaGVhZGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFldnQgfHwgIWhlYWRlckVsZW1lbnQgfHwgIWhlYWRlckVsZW1lbnQubGVuZ3RoKSB7XG4gICAgICAgICAgICBoZWFkZXJFbGVtZW50ID0gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYGxpW2RhdGEtcGFuZWlkPSR7cGFuZVJlZi53aWRnZXRJZH1dYCk7XG4gICAgICAgICAgICBjb25zdCBpbnNpZGVUYWJzID0gISEkKGhlYWRlckVsZW1lbnQpLmNsb3Nlc3QoJy5hcHAtdGFicycpXG4gICAgICAgICAgICAgICAgLnBhcmVudCgpLmNsb3Nlc3QoJy5hcHAtdGFicycpLmxlbmd0aDtcbiAgICAgICAgICAgIGlmICghaW5zaWRlVGFicyAmJiBpc0tleUJvYXJkRXZlbnQpIHtcbiAgICAgICAgICAgICAgICAkKGhlYWRlckVsZW1lbnQpLmNoaWxkcmVuKCkuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFuaW1hdGVJbihoZWFkZXJFbGVtZW50KTtcblxuICAgICAgICAvLyB0aGlzLnNldFRhYnNMZWZ0UG9zaXRpb24odGhpcy5nZXRQYW5lSW5kZXhCeVJlZih0aGlzLmFjdGl2ZVRhYiksIHRoaXMucGFuZXMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHRoaXMuY2FuU2xpZGUoKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnRhYnNBbmltYXRvcikge1xuICAgICAgICAgICAgICAgIHRoaXMudGFic0FuaW1hdG9yID0gbmV3IFRhYnNBbmltYXRvcih0aGlzKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYnNBbmltYXRvci5zZXRHZXN0dXJlc0VuYWJsZWQodGhpcy5jYW5TbGlkZSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudGFic0FuaW1hdG9yLnRyYW5zaXRpb25UYWJJbnRvVmlldygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdvVG9UYWIodGFiSW5kZXgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNWYWxpZFBhbmVJbmRleCh0YWJJbmRleCAtIDEpKSB7XG4gICAgICAgICAgICBjb25zdCB0YWIgPSB0aGlzLmdldFBhbmVSZWZCeUluZGV4KHRhYkluZGV4IC0gMSk7XG4gICAgICAgICAgICB0YWIuc2VsZWN0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBhbmVJbmRleEJ5UmVmKHBhbmVSZWY6IFRhYlBhbmVDb21wb25lbnQpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wYW5lcy50b0FycmF5KCkuaW5kZXhPZihwYW5lUmVmKTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIHRoZSBhY3RpdmUgdGFiIGluZGV4IGZyb20gdGFicy5cbiAgICBwdWJsaWMgZ2V0QWN0aXZlVGFiSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIGZpbmRJbmRleCh0aGlzLnBhbmVzLnRvQXJyYXkoKSwge2lzQWN0aXZlOiB0cnVlfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1ZhbGlkUGFuZUluZGV4KGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChpbmRleCA+PSAwICYmIGluZGV4IDwgdGhpcy5wYW5lcy5sZW5ndGgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGFuZVJlZkJ5SW5kZXgoaW5kZXg6IG51bWJlcik6IFRhYlBhbmVDb21wb25lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5wYW5lcy50b0FycmF5KClbaW5kZXhdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGFuZVJlZkJ5TmFtZShuYW1lOiBzdHJpbmcpOiBUYWJQYW5lQ29tcG9uZW50IHtcbiAgICAgICAgcmV0dXJuIGZpbmQodGhpcy5wYW5lcy50b0FycmF5KCksIHtuYW1lOiBuYW1lfSk7XG4gICAgfVxuXG4gICAgLy8gcmV0dXJucyBmYWxzZSBpZiB0aGUgcGFuZSBpcyBoaWRkZW4gb3IgZGlzYWJsZWRcbiAgICBwcml2YXRlIGlzU2VsZWN0YWJsZVRhYihwYW5lUmVmOiBUYWJQYW5lQ29tcG9uZW50KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBwYW5lUmVmLnNob3cgJiYgIXBhbmVSZWYuZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYW5TbGlkZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNpdGlvbiA9PT0gJ3NsaWRlJyAmJiAhdGhpcy52ZXJ0aWNhbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGFibGVUYWJBZnRlckluZGV4KGluZGV4OiBudW1iZXIpOiBUYWJQYW5lQ29tcG9uZW50IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IGluZGV4ICsgMTsgaSA8IHRoaXMucGFuZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBhbmUgPSB0aGlzLmdldFBhbmVSZWZCeUluZGV4KGkpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RhYmxlVGFiKHBhbmUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4ID09PSB0aGlzLnBhbmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhbmUgPSB0aGlzLmdldFBhbmVSZWZCeUluZGV4KDApO1xuICAgICAgICAgICAgIGlmICh0aGlzLmlzU2VsZWN0YWJsZVRhYihwYW5lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYW5lO1xuICAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VsZWN0YWJsZVRhYkJlZm9yZUluZGV4KGluZGV4OiBudW1iZXIpOiBUYWJQYW5lQ29tcG9uZW50IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IGluZGV4IC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHBhbmUgPSB0aGlzLmdldFBhbmVSZWZCeUluZGV4KGkpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RhYmxlVGFiKHBhbmUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBwYW5lID0gdGhpcy5nZXRQYW5lUmVmQnlJbmRleCh0aGlzLnBhbmVzLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RhYmxlVGFiKHBhbmUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZWxlY3QgbmV4dCB0YWIgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIHRhYlxuICAgIHB1YmxpYyBuZXh0KCRldmVudD86IEV2ZW50LCBpc0tleUJvYXJkRXZlbnQ/OiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHBhbmUgPSB0aGlzLmdldFNlbGVjdGFibGVUYWJBZnRlckluZGV4KHRoaXMuZ2V0QWN0aXZlVGFiSW5kZXgoKSk7XG4gICAgICAgIGlmIChwYW5lKSB7XG4gICAgICAgICAgICBwYW5lLnNlbGVjdCgkZXZlbnQsIGlzS2V5Qm9hcmRFdmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZWxlY3QgcHJldiB0YWIgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIHRhYlxuICAgIHB1YmxpYyBwcmV2KCRldmVudD86IEV2ZW50LCBpc0tleUJvYXJkRXZlbnQ/OiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHBhbmUgPSB0aGlzLmdldFNlbGVjdGFibGVUYWJCZWZvcmVJbmRleCh0aGlzLmdldEFjdGl2ZVRhYkluZGV4KCkpO1xuICAgICAgICBpZiAocGFuZSkge1xuICAgICAgICAgICAgcGFuZS5zZWxlY3QoJGV2ZW50LCBpc0tleUJvYXJkRXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogdGhpcyBtZXRob2Qgd2lsbCBiZSBpbnZva2VkIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGNvbXBvbmVudCBhbmQgb24gZGVmYXVsdHBhbmVpbmRleCBwcm9wZXJ0eSBjaGFuZ2UsXG4gICAgICogaWYgdGhlIHByb3ZpZGVkIGRlZmF1bHRwYW5laW5kZXggaXMgbm90IHZhbGlkLCBmaW5kIHRoZSBmaXJzdCBwYW5lIGluZGV4IHdoaWNoIGNhbiBiZSBzaG93biBhbmQgc2VsZWN0IGl0XG4gICAgICovXG4gICAgcHJpdmF0ZSBzZWxlY3REZWZhdWx0UGFuZUJ5SW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZFBhbmVJbmRleChpbmRleCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwYW5lUmVmID0gdGhpcy5nZXRQYW5lUmVmQnlJbmRleChpbmRleCk7XG4gICAgICAgIGlmICghdGhpcy5pc1NlbGVjdGFibGVUYWIocGFuZVJlZikpIHtcbiAgICAgICAgICAgIHBhbmVSZWYgPSB0aGlzLmdldFNlbGVjdGFibGVUYWJBZnRlckluZGV4KDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYW5lUmVmKSB7XG4gICAgICAgICAgICBwYW5lUmVmLnNlbGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIHRoZSBwb3N0aW9uIG9mIHRhYiBoZWFkZXJcbiAgICBwcml2YXRlIHNldFRhYnNQb3NpdGlvbigpIHtcbiAgICAgICAgY29uc3QgdWwgPSB0aGlzLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF07XG5cbiAgICAgICAgdGhpcy52ZXJ0aWNhbCA9ICh0aGlzLnRhYnNwb3NpdGlvbiA9PT0gJ2xlZnQnIHx8IHRoaXMudGFic3Bvc2l0aW9uID09PSAncmlnaHQnKTtcblxuICAgICAgICByZW1vdmVDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQsICdpbnZlcnRlZCcpO1xuICAgICAgICBpZiAodGhpcy50YWJzcG9zaXRpb24gPT09ICdib3R0b20nIHx8IHRoaXMudGFic3Bvc2l0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICBhcHBlbmROb2RlKHVsIGFzIEhUTUxFbGVtZW50LCB0aGlzLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCAnaW52ZXJ0ZWQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25EYXRhQ2hhbmdlKG5ld1ZhbCkge1xuICAgICAgICB0aGlzLmZpZWxkRGVmcyA9IGNyZWF0ZUFycmF5RnJvbShuZXdWYWwpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2VsZWN0RGVmYXVsdFBhbmVCeUluZGV4KHRoaXMuZGVmYXVsdHBhbmVpbmRleCB8fCAwKSk7XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXk6IHN0cmluZywgbnY6IGFueSwgb3YpIHtcblxuICAgICAgICBpZiAoa2V5ID09PSAnZGVmYXVsdHBhbmVpbmRleCcpIHtcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdHBhbmVpbmRleCA9IG52O1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2RhdGFzZXQnKSB7XG4gICAgICAgICAgICB0aGlzLm9uRGF0YUNoYW5nZShudik7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnc3RhdGVoYW5kbGVyJykge1xuICAgICAgICAgICAgdGhpcy5pc1BhZ2VMb2FkQ2FsbCA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCB3aWRnZXRTdGF0ZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzKTtcbiAgICAgICAgICAgIGlmIChudiAhPT0gJ25vbmUnICYmIHdpZGdldFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFuZVRvU2VsZWN0OiBhbnkgPSB0aGlzLnBhbmVzLmZpbHRlcihmdW5jdGlvbihwYW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB3aWRnZXRTdGF0ZSA9PT0gcGFuZS5uYW1lO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICghcGFuZVRvU2VsZWN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RhYiBwYW5lIG5hbWUgJyArIHdpZGdldFN0YXRlICsgJyBpbiBTdGF0ZSBpcyBpbmNvcnJlY3QuIEZhbGxpbmcgYmFjayB0byB0aGUgZGVmYXVsdCBwYW5lJyk7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZWxlY3REZWZhdWx0UGFuZUJ5SW5kZXgodGhpcy5kZWZhdWx0cGFuZWluZGV4IHx8IDApLCAyMCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldFBhbmVJbmRleEJ5UmVmKHBhbmVUb1NlbGVjdFswXSk7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZWxlY3REZWZhdWx0UGFuZUJ5SW5kZXgoaW5kZXgpLCAyMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2VsZWN0RGVmYXVsdFBhbmVCeUluZGV4KHRoaXMuZGVmYXVsdHBhbmVpbmRleCB8fCAwKSwgMjApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWdpc3RlclRhYnNTY3JvbGwoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgJHVsID0gdGhpcy4kZWxlbWVudC5maW5kKCc+IHVsJyk7XG4gICAgICAgICAgICBsZXQgJGxpUG9zaXRpb247XG5cbiAgICAgICAgICAgIGNvbnN0ICAkbGkgPSAkdWwuY2hpbGRyZW4oKTtcbiAgICAgICAgICAgICRsaVBvc2l0aW9uID0gJGxpLmxhc3QoKS5wb3NpdGlvbigpO1xuICAgICAgICAgICAgaWYgKCRsaVBvc2l0aW9uICYmICgkbGlQb3NpdGlvbi5sZWZ0ID4gJHVsLndpZHRoKCkpKSB7XG4gICAgICAgICAgICAgICAgJHVsLm9uKCdtb3VzZXdoZWVsJywgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGVmdCA9ICR1bFswXS5zY3JvbGxMZWZ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgX2RlbHRhID0gLTEgKiBlLm9yaWdpbmFsRXZlbnQud2hlZWxEZWx0YTtcbiAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAkdWwuYW5pbWF0ZSh7c2Nyb2xsTGVmdDogbGVmdCArIF9kZWx0YX0sIHsnZHVyYXRpb24nOiAxMH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgb25rZXlkb3duKGV2ZW50KSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2KG51bGwsIHRydWUpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgICAgICAgICB0aGlzLm5leHQobnVsbCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMucHJvbWlzZVJlc29sdmVyRm4oKTtcbiAgICAgICAgc3VwZXIubmdBZnRlckNvbnRlbnRJbml0KCk7XG4gICAgICAgIHRoaXMuc2V0VGFic1Bvc2l0aW9uKCk7XG4gICAgICAgIHRoaXMucGFuZXMuY2hhbmdlcy5zdWJzY3JpYmUoIHNsaWRlcyA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5wYW5lcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdERlZmF1bHRQYW5lQnlJbmRleCh0aGlzLmRlZmF1bHRwYW5laW5kZXggfHwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJUYWJzU2Nyb2xsKCk7XG4gICAgfVxufVxuIiwiPHVsIGNsYXNzPVwibmF2IG5hdi10YWJzXCIgW25nQ2xhc3NdPVwieyduYXYtc3RhY2tlZCc6IHZlcnRpY2FsLCAnbmF2LWp1c3RpZmllZCc6IGp1c3RpZmllZH1cIiByb2xlPVwidGFibGlzdFwiPlxuICBAZm9yIChwYW5lIG9mIHBhbmVzOyB0cmFjayBwYW5lOyBsZXQgaSA9ICRpbmRleCkge1xuICAgIDxsaSBjbGFzcz1cInRhYi1oZWFkZXJcIiBbYXR0ci5kYXRhLXBhbmVpZF09XCJwYW5lLndpZGdldElkXCIgW25nQ2xhc3NdPVwieydhY3RpdmUnOiBwYW5lLmlzQWN0aXZlLCAnZGlzYWJsZWQnOiBwYW5lLmRpc2FibGVkfVwiXG4gICAgICBbaGlkZGVuXT1cIiFwYW5lLnNob3dcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICA8YSBbYXR0ci5hcmlhLWxhYmVsXT1cInBhbmUuYmFkZ2V2YWx1ZSA/IHBhbmUudGl0bGUgKyAnICcgKyBwYW5lLmJhZGdldmFsdWUgOiBwYW5lLnRpdGxlXCJcbiAgICAgICAgW2F0dHIuaWNvbi1wb3NpdGlvbl09XCJpY29ucG9zaXRpb25cIlxuICAgICAgICBbYXR0ci50aXRsZV09XCJwYW5lLnRpdGxlXCJcbiAgICAgICAgW3RhYmluZGV4XT1cInBhbmUuaXNBY3RpdmUgPyAnMCcgOiAnLTEnXCJcbiAgICAgICAgY2xhc3M9XCJ0YWItaGVhZGluZ1wiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCJcbiAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJwYW5lLmlzQWN0aXZlXCIgcm9sZT1cInRhYlwiIChjbGljayk9XCJwYW5lLnNlbGVjdCgkZXZlbnQpOyBwYW5lLnRhYnBhbmVIZWFkZXJDbGljaygkZXZlbnQsIGkpO1wiIChrZXlkb3duKT1cIm9ua2V5ZG93bigkZXZlbnQpXCI+XG4gICAgICAgIEBpZiAocGFuZS5wYW5laWNvbikge1xuICAgICAgICAgIDxpIFtuZ0NsYXNzXT1cIlsnYXBwLWljb24nLCBwYW5lLnBhbmVpY29uXVwiPjwvaT5cbiAgICAgICAgfVxuICAgICAgICA8c3BhbiBbdGV4dENvbnRlbnRdPVwicGFuZS50aXRsZVwiPjwvc3Bhbj5cbiAgICAgICAgQGlmIChwYW5lLmJhZGdldmFsdWUpIHtcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsIGxhYmVsLXt7cGFuZS5iYWRnZXR5cGV9fVwiIFt0ZXh0Q29udGVudF09XCJwYW5lLmJhZGdldmFsdWVcIj48L3NwYW4+XG4gICAgICAgIH1cbiAgICAgIDwvYT5cbiAgICA8L2xpPlxuICB9XG48L3VsPlxuQGlmICh0eXBlICE9PSAnZHluYW1pYycpIHtcbiAgPGRpdiBjbGFzcz1cInRhYi1jb250ZW50XCIgW25nQ2xhc3NdPVwieyd0YWItc3RhY2tlZCc6IHZlcnRpY2FsLCAndGFiLWp1c3RpZmllZCc6IGp1c3RpZmllZH1cIj5cbiAgICA8bmctY29udGVudCBuZ1Byb2plY3RBcz1cImRpdlt3bVRhYlBhbmVdXCI+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbn1cbkBpZiAodHlwZSA9PT0gJ2R5bmFtaWMnKSB7XG4gIDxkaXYgY2xhc3M9XCJ0YWItY29udGVudFwiIFtuZ0NsYXNzXT1cInsndGFiLXN0YWNrZWQnOiB2ZXJ0aWNhbCwgJ3RhYi1qdXN0aWZpZWQnOiBqdXN0aWZpZWR9XCI+XG4gICAgQGlmIChmaWVsZERlZnMgJiYgIWZpZWxkRGVmcy5sZW5ndGgpIHtcbiAgICAgIDxkaXY+e3tub2RhdGFtZXNzYWdlfX08L2Rpdj5cbiAgICB9XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZGl2W3dtUmVwZWF0VGVtcGxhdGVdXCI+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbn1cbiJdfQ==
500
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvY29udGFpbmVycy90YWJzL3NyYy90YWJzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9jb250YWluZXJzL3RhYnMvc3JjL3RhYnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sRUFHSCxTQUFTLEVBQ1QsU0FBUyxFQUNULGVBQWUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUNwQyxRQUFRLEVBRVIsUUFBUSxFQUNSLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0gsUUFBUSxFQUNSLFVBQVUsRUFDViwyQkFBMkIsRUFDM0IsSUFBSSxFQUNKLFdBQVcsRUFDWCxnQkFBZ0IsRUFDbkIsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUNILGlCQUFpQixFQUVqQixrQkFBa0IsRUFDbEIsTUFBTSxFQUNOLGlCQUFpQixFQUNqQixlQUFlLEVBQ2xCLE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQzs7Ozs7Ozs7Ozs7OztJQ3ZCekUsdUJB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Q0FBQyxhQUFhLENBQUMsbUJBQW1CLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMxRyxPQUFPLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDekQsQ0FBQzs4R0FyYlEsYUFBYSxnSEFnQ1AsWUFBWSx3QkFDWixjQUFjLG1FQUVqQixrQkFBa0I7b0VBbkNyQixhQUFhO3dDQTJCTCxnQkFBZ0I7Ozs7OztzRkEvQnRCO2dCQUNQLGtCQUFrQixDQUFDLGFBQWEsQ0FBQzthQUNwQzs7WUNwREwsNkJBQTBHO1lBQ3hHLGtHQWtCQztZQUNILGlCQUFLO1lBTUwsQUFMQSxzRUFBMEIseURBS0E7O1lBMUJELGlGQUFpRTtZQUN4RixjQWtCQztZQWxCRCx3QkFrQkM7WUFFSCxlQUlDO1lBSkQsaURBSUM7WUFDRCxjQU9DO1lBUEQsaURBT0M7NEJEYVcsWUFBWSxjQUFFLGtCQUFrQjs7aUZBUS9CLGFBQWE7Y0FWekIsU0FBUzs2QkFDSSxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsa0JBQWtCLENBQUMsWUFDL0IsYUFBYSxZQUViLFFBQVEsYUFDUDtvQkFDUCxrQkFBa0IsZUFBZTtpQkFDcEM7O3NCQWtDSSxTQUFTO3VCQUFDLFlBQVk7O3NCQUN0QixTQUFTO3VCQUFDLGNBQWM7O3NCQUV4QixNQUFNO3VCQUFDLGtCQUFrQjs7c0JBQUcsUUFBUTtxQkFWTixZQUFZO2tCQUE5QyxXQUFXO21CQUFDLG9CQUFvQjtZQUVFLEtBQUs7a0JBQXZDLGVBQWU7bUJBQUMsZ0JBQWdCOztrRkEzQnhCLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgV21Db21wb25lbnRzTW9kdWxlIH0gZnJvbSBcIkB3bS9jb21wb25lbnRzL2Jhc2VcIjtcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIEF0dHJpYnV0ZSxcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLCBIb3N0QmluZGluZywgSW5qZWN0LFxuICAgIEluamVjdG9yLFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBRdWVyeUxpc3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gICAgYWRkQ2xhc3MsXG4gICAgYXBwZW5kTm9kZSxcbiAgICBEeW5hbWljQ29tcG9uZW50UmVmUHJvdmlkZXIsXG4gICAgbm9vcCxcbiAgICByZW1vdmVDbGFzcyxcbiAgICBTdGF0ZVBlcnNpc3RlbmNlXG59IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7XG4gICAgQVBQTFlfU1RZTEVTX1RZUEUsXG4gICAgSVdpZGdldENvbmZpZyxcbiAgICBwcm92aWRlQXNXaWRnZXRSZWYsXG4gICAgc3R5bGVyLFxuICAgIFN0eWxhYmxlQ29tcG9uZW50LFxuICAgIGNyZWF0ZUFycmF5RnJvbVxufSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcblxuaW1wb3J0IHsgVGFic0FuaW1hdG9yIH0gZnJvbSAnLi90YWJzLmFuaW1hdG9yJztcbmltcG9ydCB7IHJlZ2lzdGVyUHJvcHMgfSBmcm9tICcuL3RhYnMucHJvcHMnO1xuaW1wb3J0IHsgVGFiUGFuZUNvbXBvbmVudCB9IGZyb20gJy4vdGFiLXBhbmUvdGFiLXBhbmUuY29tcG9uZW50JztcbmltcG9ydCB7ZmluZCwgZmluZEluZGV4LCBmb3JFYWNoLCBnZXQsIGluZGV4T2YsIGlzQXJyYXksIGlzRW1wdHl9IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuZGVjbGFyZSBjb25zdCAkO1xuXG5jb25zdCBERUZBVUxUX0NMUyA9ICdhcHAtdGFicyBjbGVhcmZpeCc7XG5jb25zdCBXSURHRVRfQ09ORklHOiBJV2lkZ2V0Q29uZmlnID0ge1xuICAgIHdpZGdldFR5cGU6ICd3bS10YWJzJyxcbiAgICBob3N0Q2xhc3M6IERFRkFVTFRfQ0xTXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgV21Db21wb25lbnRzTW9kdWxlXSxcbiAgICBzZWxlY3RvcjogJ2Rpdlt3bVRhYnNdJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFicy5jb21wb25lbnQuaHRtbCcsXG4gICAgZXhwb3J0QXM6ICd3bVRhYnMnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoVGFic0NvbXBvbmVudClcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFRhYnNDb21wb25lbnQgZXh0ZW5kcyBTdHlsYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcblxuICAgIHB1YmxpYyBkZWZhdWx0cGFuZWluZGV4OiBudW1iZXI7XG4gICAgcHVibGljIHRyYW5zaXRpb246IHN0cmluZztcbiAgICBwdWJsaWMgdGFic3Bvc2l0aW9uOiBzdHJpbmc7XG4gICAgcHVibGljIHN0YXRlaGFuZGxlcjogYW55O1xuICAgIHByaXZhdGUgc3RhdGVQZXJzaXN0ZW5jZTogU3RhdGVQZXJzaXN0ZW5jZTtcblxuICAgIHB1YmxpYyB2ZXJ0aWNhbDogYm9vbGVhbjtcbiAgICBwdWJsaWMganVzdGlmaWVkOiBib29sZWFuO1xuICAgIHByaXZhdGUgYWN0aXZlVGFiOiBUYWJQYW5lQ29tcG9uZW50O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvbWlzZVJlc29sdmVyRm46IEZ1bmN0aW9uO1xuICAgIHByaXZhdGUgdGFic0FuaW1hdG9yOiBUYWJzQW5pbWF0b3I7XG4gICAgcHJpdmF0ZSBfb2xkUGFuZUluZGV4OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBpc1BhZ2VMb2FkQ2FsbDogYm9vbGVhbjtcbiAgICBwcml2YXRlIGR5bmFtaWNDb21wb25lbnRQcm92aWRlcjtcbiAgICBwcml2YXRlIF9keW5hbWljQ29udGV4dDtcbiAgICBwcml2YXRlIGR5bmFtaWNQYW5lSW5kZXg7XG4gICAgcHVibGljIGR5bmFtaWNUYWJzO1xuICAgIHB1YmxpYyBmaWVsZERlZnM7XG4gICAgcHVibGljIHR5cGU7XG4gICAgcHVibGljIG5vZGF0YW1lc3NhZ2U7XG4gICAgcHVibGljIGF1dG9BY3RpdmF0aW9uOmJvb2xlYW47XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWNvbi1wb3NpdGlvbicpIGljb25wb3NpdGlvbjogc3RyaW5nID0gJyc7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKFRhYlBhbmVDb21wb25lbnQpIHBhbmVzOiBRdWVyeUxpc3Q8VGFiUGFuZUNvbXBvbmVudD47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qOiBJbmplY3RvcixcbiAgICAgICAgZHluYW1pY0NvbXBvbmVudFByb3ZpZGVyOiBEeW5hbWljQ29tcG9uZW50UmVmUHJvdmlkZXIsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ3RyYW5zaXRpb24nKSBfdHJhbnNpdGlvbjogc3RyaW5nLFxuICAgICAgICBAQXR0cmlidXRlKCd0YWJzcG9zaXRpb24nKSBfdGFic1Bvc2l0aW9uOiBzdHJpbmcsXG4gICAgICAgIHN0YXRlUGVyc2lzdGVuY2U6IFN0YXRlUGVyc2lzdGVuY2UsXG4gICAgICAgIEBJbmplY3QoJ0VYUExJQ0lUX0NPTlRFWFQnKSBAT3B0aW9uYWwoKSBleHBsaWNpdENvbnRleHQ6IGFueVxuICAgICkge1xuICAgICAgICAvLyBoYW5kbGUgdG8gdGhlIHByb21pc2UgcmVzb2x2ZXJcbiAgICAgICAgbGV0IHJlc29sdmVGbjogRnVuY3Rpb24gPSBub29wO1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcsIGV4cGxpY2l0Q29udGV4dCwgbmV3IFByb21pc2UocmVzID0+IHJlc29sdmVGbiA9IHJlcykpO1xuXG4gICAgICAgIHRoaXMudHJhbnNpdGlvbiA9IF90cmFuc2l0aW9uO1xuICAgICAgICB0aGlzLnRhYnNwb3NpdGlvbiA9IF90YWJzUG9zaXRpb247XG4gICAgICAgIHRoaXMuc3RhdGVQZXJzaXN0ZW5jZSA9IHN0YXRlUGVyc2lzdGVuY2U7XG4gICAgICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFByb3ZpZGVyID0gZHluYW1pY0NvbXBvbmVudFByb3ZpZGVyO1xuICAgICAgICB0aGlzLmR5bmFtaWNUYWJzID0gW107XG4gICAgICAgIHRoaXMuZHluYW1pY1BhbmVJbmRleCA9IDA7XG5cbiAgICAgICAgdGhpcy5wcm9taXNlUmVzb2x2ZXJGbiA9IHJlc29sdmVGbjtcblxuICAgICAgICBzdHlsZXIodGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzLCBBUFBMWV9TVFlMRVNfVFlQRS5DT05UQUlORVIpO1xuXG4gICAgfVxuXG4gICAgYW5pbWF0ZUluIChlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgICAgICBjb25zdCB0YWJIZWFkZXIgPSAkKGVsZW1lbnQpO1xuICAgICAgICAvLyB3aGVuIHRoZSBhbmltYXRpb24gaXMgbm90IHByZXNlbnQgdG9nZ2xlIHRoZSBhY3RpdmUgY2xhc3MuXG4gICAgICAgIHRhYkhlYWRlci5zaWJsaW5ncygnLmFjdGl2ZScpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgdGFiSGVhZGVyLmFkZENsYXNzKCdhY3RpdmUnKTtcblxuICAgICAgICBjb25zdCB1bCA9IHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCd1bC5uYXYubmF2LXRhYnMnKTtcblxuICAgICAgICAvLyBtb3ZlIHRoZSB0YWJoZWFkZXIgaW50byB0aGUgdmlld3BvcnRcbiAgICAgICAgY29uc3QgJHByZXZIZWFkZXJFbGUgPSB0YWJIZWFkZXIucHJldigpO1xuICAgICAgICBpZiAoJHByZXZIZWFkZXJFbGUubGVuZ3RoKSB7XG4gICAgICAgICAgICB1bC5zY3JvbGxMZWZ0ID0gJHByZXZIZWFkZXJFbGVbMF0ub2Zmc2V0TGVmdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVsLnNjcm9sbExlZnQgPSAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byByZWdpc3RlciB0aGUgZHluYW1pYyBwYW5lcy5cbiAgICAgKiBBZnRlciBhbGwgcGFuZXMgYXJlIGluaXRpYWx6ZWQsIHVwZGF0ZSB0aGUgcXVlcnlsaXN0IG1hbnVhbGx5IGJhc2VkIG9uIGluZGV4LlxuICAgICAqIEBwYXJhbSBwYW5lUmVmIC0gcmVmcmVuY2Ugb2YgdGhlIHRhYnBhbmVcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJEeW5hbWljVGFiKHBhbmVSZWYpIHtcbiAgICAgICAgdGhpcy5keW5hbWljVGFicy5wdXNoKHBhbmVSZWYpO1xuICAgICAgICBjb25zdCBpc0xhc3RQYW5lID0gIHRoaXMuZHluYW1pY1RhYnMubGVuZ3RoID09PSB0aGlzLmR5bmFtaWNQYW5lSW5kZXg7XG4gICAgICAgIGlmIChpc0xhc3RQYW5lKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZHluYW1pY1RhYnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdQYW5lUmVmID0gZmluZCh0aGlzLmR5bmFtaWNUYWJzLCBwYW5lID0+IHBhbmUuZHluYW1pY1BhbmVJbmRleCA9PT0gaSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNQYW5lQWxyZWFkeUV4aXN0ID0gZmluZCh0aGlzLnBhbmVzLnRvQXJyYXkoKSwgbmV3UGFuZVJlZik7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1BhbmVBbHJlYWR5RXhpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYW5lcy5yZXNldChbLi4udGhpcy5wYW5lcy50b0FycmF5KCksIG5ld1BhbmVSZWZdKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1BhbmVSZWYuYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQYW5lUmVmLnNlbGVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMjApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdG8gYWRkIHRoZSB0YWJwYW5lIGR5bmFtaWNhbGx5XG4gICAgICogQHBhcmFtIHRhYnBhbmVzIC0gbGlzdCBvZiB0YWJwYW5lc1xuICAgICAqL1xuICAgIHB1YmxpYyBhZGRQYW5lKHRhYnBhbmVzKSB7XG4gICAgICAgIGlmICghaXNBcnJheSh0YWJwYW5lcykpIHtcbiAgICAgICAgICAgIHRhYnBhbmVzID0gW3RhYnBhbmVzXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYW5lTmFtZXNMaXN0ID0gW107XG4gICAgICAgIGZvckVhY2godGFicGFuZXMsIChwYW5lLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNQYW5lQWxyZWFkeUNyZWF0ZWQgPSBmaW5kKHRoaXMucGFuZXMudG9BcnJheSgpLCB7bmFtZTogcGFuZS5uYW1lfSk7XG4gICAgICAgICAgICBjb25zdCBpc1BhbmVOYW1lRXhpc3QgPSBpbmRleE9mKHBhbmVOYW1lc0xpc3QsIHBhbmUubmFtZSk7XG4gICAgICAgICAgICAvLyBJZiB1c2VyIHRyaWVzIHRvIGFkZCB0YWJwYW5lIHdpdGggdGhlIHNhbWUgbmFtZSB3aGljaCBpcyBhbHJlYWR5IGV4aXN0cyB0aGVuIGRvIG5vdCBjcmVhdGUgdGhlIHBhbmVcbiAgICAgICAgICAgIGlmIChpc1BhbmVBbHJlYWR5Q3JlYXRlZCB8fCBpc1BhbmVOYW1lRXhpc3QgPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBUaGUgdGFiIHBhbmUgd2l0aCBuYW1lICR7cGFuZS5uYW1lfSBhbHJlYWR5IGV4aXN0c2ApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHBhcmFtTWFya3VwID0gJyc7XG4gICAgICAgICAgICBsZXQgcHJvcHNUbXBsID0gJyc7XG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNQYW5lSW5kZXgrKztcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBwYW5lLm5hbWUgPyBwYW5lLm5hbWUgOiBgdGFicGFuZSR7dGhpcy5wYW5lcy50b0FycmF5KCkubGVuZ3RoICsgKGluZGV4ICsgMSl9YDtcbiAgICAgICAgICAgIHBhbmVOYW1lc0xpc3QucHVzaChuYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRpYWxQYXJhbXMgPSBnZXQocGFuZSwgJ3BhcmFtcycpO1xuXG4gICAgICAgICAgICBmb3JFYWNoKHBhbmUsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gJ3BhcmFtcycpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHNUbXBsID0gYCR7cHJvcHNUbXBsfSAke2tleX09XCIke3ZhbHVlfVwiYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZm9yRWFjaChwYXJ0aWFsUGFyYW1zLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIHBhcmFtTWFya3VwID0gYCR7cGFyYW1NYXJrdXB9IDx3bS1wYXJhbSBuYW1lPVwiJHtrZXl9XCIgdmFsdWU9XCIke3ZhbHVlfVwiPjwvd20tcGFyYW0+YDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgbWFya3VwID0gYDx3bS10YWJwYW5lIGR5bmFtaWNQYW5lSW5kZXg9XCIke3RoaXMuZHluYW1pY1BhbmVJbmRleCAtIDF9XCIgaXNkeW5hbWljPVwidHJ1ZVwiIG5hbWU9XCIke25hbWV9XCIgJHtwcm9wc1RtcGx9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7cGFyYW1NYXJrdXB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3dtLXRhYnBhbmU+YDtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLl9keW5hbWljQ29udGV4dCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2R5bmFtaWNDb250ZXh0ID0gT2JqZWN0LmNyZWF0ZSh0aGlzLnZpZXdQYXJlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R5bmFtaWNDb250ZXh0W3RoaXMuZ2V0QXR0cignd21UYWInKV0gPSB0aGlzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRQcm92aWRlci5hZGRDb21wb25lbnQodGhpcy5nZXROYXRpdmVFbGVtZW50KCkucXVlcnlTZWxlY3RvcignLnRhYi1jb250ZW50JyksIG1hcmt1cCwgdGhpcy5fZHluYW1pY0NvbnRleHQsIHtpbmo6IHRoaXMuaW5qfSk7XG5cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYW5lTmFtZXNMaXN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHRvIHJlbW92ZSB0aGUgdGFicGFuZVxuICAgICAqIEBwYXJhbSBwYW5lSW5kZXggLSBpbmRleCBvZiB0aGUgcGFuZVxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmVQYW5lKHBhbmVOYW1lKSB7XG4gICAgICAgIGNvbnN0IHBhbmVSZWYgPSB0aGlzLmdldFBhbmVSZWZCeU5hbWUocGFuZU5hbWUpO1xuICAgICAgICBpZiAocGFuZVJlZikge1xuICAgICAgICAgICAgcGFuZVJlZi5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRhYlBhbmUgY2hpbGRyZW4gY29tcG9uZW50cyBpbnZva2UgdGhpcyBtZXRob2QgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgcGFyZW50XG4gICAgICogaWYgdGhlIGV2dCBhcmd1bWVudCBpcyBkZWZpbmVkIG9uLWNoYW5nZSBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQuXG4gICAgICovXG4gICAgcHVibGljIG5vdGlmeUNoYW5nZShwYW5lUmVmOiBUYWJQYW5lQ29tcG9uZW50LCBldnQ6IEV2ZW50LCBpc0tleUJvYXJkRXZlbnQ6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzU2VsZWN0YWJsZVRhYihwYW5lUmVmKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGhlYWRlckVsZW1lbnQ7XG4gICAgICAgIC8vIGludm9rZSBkZXNlbGVjdCBldmVudCBjYWxsYmFjayBvbiB0aGUgcHJlc2V0IGFjdGl2ZSB0YWJcbiAgICAgICAgaWYgKCFpc0VtcHR5KHRoaXMuYWN0aXZlVGFiKSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVUYWIuZGVzZWxlY3QoKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgdGhpcy5hY3RpdmVUYWIgPSBwYW5lUmVmLmdldFdpZGdldCgpO1xuICAgICAgICBjb25zdCBuZXdQYW5lSW5kZXggPSB0aGlzLmdldFBhbmVJbmRleEJ5UmVmKHBhbmVSZWYpO1xuICAgICAgICBjb25zdCBtb2RlID0gdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLmNvbXB1dGVNb2RlKHRoaXMuc3RhdGVoYW5kbGVyKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzUGFnZUxvYWRDYWxsICYmIG1vZGUgJiYgbW9kZS50b0xvd2VyQ2FzZSgpICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5zZXRXaWRnZXRTdGF0ZSh0aGlzLCB0aGlzLmFjdGl2ZVRhYi5uYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdHBhbmVpbmRleCA9IHRoaXMuZ2V0UGFuZUluZGV4QnlSZWYocGFuZVJlZik7XG4gICAgICAgICAgICB0aGlzLmlzUGFnZUxvYWRDYWxsID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpbnZva2Ugc2VsZWN0IGNhbGxiYWNrIG9uIHRoZSBzZWxlY3RlZCB0YWJcbiAgICAgICAgcGFuZVJlZi5pbnZva2VPblNlbGVjdENhbGxiYWNrKGV2dCk7XG5cbiAgICAgICAgLy8gaW52b2tlIGNoYW5nZSBjYWxsYmFjayBpZiB0aGUgZXZ0IGlzIHByZXNlbnQsIHNlbGVjdCBhIHRhYiBwcm9ncmFtbWF0aWNhbGx5IHdpbGwgbm90IGhhdmUgdGhlIGV2ZW50XG4gICAgICAgIGlmIChldnQpIHtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgICRldmVudDogZXZ0LFxuICAgICAgICAgICAgICAgIG5ld1BhbmVJbmRleDogbmV3UGFuZUluZGV4LFxuICAgICAgICAgICAgICAgIG9sZFBhbmVJbmRleDogdGhpcy5fb2xkUGFuZUluZGV4IHx8IDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX29sZFBhbmVJbmRleCA9IG5ld1BhbmVJbmRleDtcblxuICAgICAgICBpZiAoZXZ0KSB7XG4gICAgICAgICAgICBoZWFkZXJFbGVtZW50ID0gJChldnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KCdsaS50YWItaGVhZGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFldnQgfHwgIWhlYWRlckVsZW1lbnQgfHwgIWhlYWRlckVsZW1lbnQubGVuZ3RoKSB7XG4gICAgICAgICAgICBoZWFkZXJFbGVtZW50ID0gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYGxpW2RhdGEtcGFuZWlkPSR7cGFuZVJlZi53aWRnZXRJZH1dYCk7XG4gICAgICAgICAgICBjb25zdCBpbnNpZGVUYWJzID0gISEkKGhlYWRlckVsZW1lbnQpLmNsb3Nlc3QoJy5hcHAtdGFicycpXG4gICAgICAgICAgICAgICAgLnBhcmVudCgpLmNsb3Nlc3QoJy5hcHAtdGFicycpLmxlbmd0aDtcbiAgICAgICAgICAgIGlmICghaW5zaWRlVGFicyAmJiBpc0tleUJvYXJkRXZlbnQpIHtcbiAgICAgICAgICAgICAgICAkKGhlYWRlckVsZW1lbnQpLmNoaWxkcmVuKCkuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFuaW1hdGVJbihoZWFkZXJFbGVtZW50KTtcblxuICAgICAgICAvLyB0aGlzLnNldFRhYnNMZWZ0UG9zaXRpb24odGhpcy5nZXRQYW5lSW5kZXhCeVJlZih0aGlzLmFjdGl2ZVRhYiksIHRoaXMucGFuZXMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHRoaXMuY2FuU2xpZGUoKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnRhYnNBbmltYXRvcikge1xuICAgICAgICAgICAgICAgIHRoaXMudGFic0FuaW1hdG9yID0gbmV3IFRhYnNBbmltYXRvcih0aGlzKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYnNBbmltYXRvci5zZXRHZXN0dXJlc0VuYWJsZWQodGhpcy5jYW5TbGlkZSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudGFic0FuaW1hdG9yLnRyYW5zaXRpb25UYWJJbnRvVmlldygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdvVG9UYWIodGFiSW5kZXgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNWYWxpZFBhbmVJbmRleCh0YWJJbmRleCAtIDEpKSB7XG4gICAgICAgICAgICBjb25zdCB0YWIgPSB0aGlzLmdldFBhbmVSZWZCeUluZGV4KHRhYkluZGV4IC0gMSk7XG4gICAgICAgICAgICB0YWIuc2VsZWN0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBhbmVJbmRleEJ5UmVmKHBhbmVSZWY6IFRhYlBhbmVDb21wb25lbnQpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wYW5lcy50b0FycmF5KCkuaW5kZXhPZihwYW5lUmVmKTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIHRoZSBhY3RpdmUgdGFiIGluZGV4IGZyb20gdGFicy5cbiAgICBwdWJsaWMgZ2V0QWN0aXZlVGFiSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIGZpbmRJbmRleCh0aGlzLnBhbmVzLnRvQXJyYXkoKSwge2lzQWN0aXZlOiB0cnVlfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1ZhbGlkUGFuZUluZGV4KGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChpbmRleCA+PSAwICYmIGluZGV4IDwgdGhpcy5wYW5lcy5sZW5ndGgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGFuZVJlZkJ5SW5kZXgoaW5kZXg6IG51bWJlcik6IFRhYlBhbmVDb21wb25lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5wYW5lcy50b0FycmF5KClbaW5kZXhdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGFuZVJlZkJ5TmFtZShuYW1lOiBzdHJpbmcpOiBUYWJQYW5lQ29tcG9uZW50IHtcbiAgICAgICAgcmV0dXJuIGZpbmQodGhpcy5wYW5lcy50b0FycmF5KCksIHtuYW1lOiBuYW1lfSk7XG4gICAgfVxuXG4gICAgLy8gcmV0dXJucyBmYWxzZSBpZiB0aGUgcGFuZSBpcyBoaWRkZW4gb3IgZGlzYWJsZWRcbiAgICBwcml2YXRlIGlzU2VsZWN0YWJsZVRhYihwYW5lUmVmOiBUYWJQYW5lQ29tcG9uZW50KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBwYW5lUmVmLnNob3cgJiYgIXBhbmVSZWYuZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYW5TbGlkZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNpdGlvbiA9PT0gJ3NsaWRlJyAmJiAhdGhpcy52ZXJ0aWNhbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGFibGVUYWJBZnRlckluZGV4KGluZGV4OiBudW1iZXIpOiBUYWJQYW5lQ29tcG9uZW50IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IGluZGV4ICsgMTsgaSA8IHRoaXMucGFuZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBhbmUgPSB0aGlzLmdldFBhbmVSZWZCeUluZGV4KGkpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RhYmxlVGFiKHBhbmUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4ID09PSB0aGlzLnBhbmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhbmUgPSB0aGlzLmdldFBhbmVSZWZCeUluZGV4KDApO1xuICAgICAgICAgICAgIGlmICh0aGlzLmlzU2VsZWN0YWJsZVRhYihwYW5lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYW5lO1xuICAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VsZWN0YWJsZVRhYkJlZm9yZUluZGV4KGluZGV4OiBudW1iZXIpOiBUYWJQYW5lQ29tcG9uZW50IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IGluZGV4IC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHBhbmUgPSB0aGlzLmdldFBhbmVSZWZCeUluZGV4KGkpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RhYmxlVGFiKHBhbmUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBwYW5lID0gdGhpcy5nZXRQYW5lUmVmQnlJbmRleCh0aGlzLnBhbmVzLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RhYmxlVGFiKHBhbmUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZWxlY3QgbmV4dCB0YWIgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIHRhYlxuICAgIHB1YmxpYyBuZXh0KCRldmVudD86IEV2ZW50LCBpc0tleUJvYXJkRXZlbnQ/OiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHBhbmUgPSB0aGlzLmdldFNlbGVjdGFibGVUYWJBZnRlckluZGV4KHRoaXMuZ2V0QWN0aXZlVGFiSW5kZXgoKSk7XG4gICAgICAgIGlmIChwYW5lKSB7XG4gICAgICAgICAgICBwYW5lLnNlbGVjdCgkZXZlbnQsIGlzS2V5Qm9hcmRFdmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZWxlY3QgcHJldiB0YWIgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIHRhYlxuICAgIHB1YmxpYyBwcmV2KCRldmVudD86IEV2ZW50LCBpc0tleUJvYXJkRXZlbnQ/OiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHBhbmUgPSB0aGlzLmdldFNlbGVjdGFibGVUYWJCZWZvcmVJbmRleCh0aGlzLmdldEFjdGl2ZVRhYkluZGV4KCkpO1xuICAgICAgICBpZiAocGFuZSkge1xuICAgICAgICAgICAgcGFuZS5zZWxlY3QoJGV2ZW50LCBpc0tleUJvYXJkRXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogdGhpcyBtZXRob2Qgd2lsbCBiZSBpbnZva2VkIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGNvbXBvbmVudCBhbmQgb24gZGVmYXVsdHBhbmVpbmRleCBwcm9wZXJ0eSBjaGFuZ2UsXG4gICAgICogaWYgdGhlIHByb3ZpZGVkIGRlZmF1bHRwYW5laW5kZXggaXMgbm90IHZhbGlkLCBmaW5kIHRoZSBmaXJzdCBwYW5lIGluZGV4IHdoaWNoIGNhbiBiZSBzaG93biBhbmQgc2VsZWN0IGl0XG4gICAgICovXG4gICAgcHJpdmF0ZSBzZWxlY3REZWZhdWx0UGFuZUJ5SW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZFBhbmVJbmRleChpbmRleCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwYW5lUmVmID0gdGhpcy5nZXRQYW5lUmVmQnlJbmRleChpbmRleCk7XG4gICAgICAgIGlmICghdGhpcy5pc1NlbGVjdGFibGVUYWIocGFuZVJlZikpIHtcbiAgICAgICAgICAgIHBhbmVSZWYgPSB0aGlzLmdldFNlbGVjdGFibGVUYWJBZnRlckluZGV4KDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYW5lUmVmKSB7XG4gICAgICAgICAgICBwYW5lUmVmLnNlbGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIHRoZSBwb3N0aW9uIG9mIHRhYiBoZWFkZXJcbiAgICBwcml2YXRlIHNldFRhYnNQb3NpdGlvbigpIHtcbiAgICAgICAgY29uc3QgdWwgPSB0aGlzLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF07XG5cbiAgICAgICAgdGhpcy52ZXJ0aWNhbCA9ICh0aGlzLnRhYnNwb3NpdGlvbiA9PT0gJ2xlZnQnIHx8IHRoaXMudGFic3Bvc2l0aW9uID09PSAncmlnaHQnKTtcblxuICAgICAgICByZW1vdmVDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQsICdpbnZlcnRlZCcpO1xuICAgICAgICBpZiAodGhpcy50YWJzcG9zaXRpb24gPT09ICdib3R0b20nIHx8IHRoaXMudGFic3Bvc2l0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICBhcHBlbmROb2RlKHVsIGFzIEhUTUxFbGVtZW50LCB0aGlzLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCAnaW52ZXJ0ZWQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25EYXRhQ2hhbmdlKG5ld1ZhbCkge1xuICAgICAgICB0aGlzLmZpZWxkRGVmcyA9IGNyZWF0ZUFycmF5RnJvbShuZXdWYWwpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2VsZWN0RGVmYXVsdFBhbmVCeUluZGV4KHRoaXMuZGVmYXVsdHBhbmVpbmRleCB8fCAwKSk7XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXk6IHN0cmluZywgbnY6IGFueSwgb3YpIHtcblxuICAgICAgICBpZiAoa2V5ID09PSAnZGVmYXVsdHBhbmVpbmRleCcpIHtcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdHBhbmVpbmRleCA9IG52O1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2RhdGFzZXQnKSB7XG4gICAgICAgICAgICB0aGlzLm9uRGF0YUNoYW5nZShudik7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnc3RhdGVoYW5kbGVyJykge1xuICAgICAgICAgICAgdGhpcy5pc1BhZ2VMb2FkQ2FsbCA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCB3aWRnZXRTdGF0ZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzKTtcbiAgICAgICAgICAgIGlmIChudiAhPT0gJ25vbmUnICYmIHdpZGdldFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFuZVRvU2VsZWN0OiBhbnkgPSB0aGlzLnBhbmVzLmZpbHRlcihmdW5jdGlvbihwYW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB3aWRnZXRTdGF0ZSA9PT0gcGFuZS5uYW1lO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICghcGFuZVRvU2VsZWN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RhYiBwYW5lIG5hbWUgJyArIHdpZGdldFN0YXRlICsgJyBpbiBTdGF0ZSBpcyBpbmNvcnJlY3QuIEZhbGxpbmcgYmFjayB0byB0aGUgZGVmYXVsdCBwYW5lJyk7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZWxlY3REZWZhdWx0UGFuZUJ5SW5kZXgodGhpcy5kZWZhdWx0cGFuZWluZGV4IHx8IDApLCAyMCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldFBhbmVJbmRleEJ5UmVmKHBhbmVUb1NlbGVjdFswXSk7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZWxlY3REZWZhdWx0UGFuZUJ5SW5kZXgoaW5kZXgpLCAyMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2VsZWN0RGVmYXVsdFBhbmVCeUluZGV4KHRoaXMuZGVmYXVsdHBhbmVpbmRleCB8fCAwKSwgMjApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2F1dG90YWJhY3RpdmF0aW9uJyl7XG4gICAgICAgICAgICB0aGlzLmF1dG9BY3RpdmF0aW9uID0gbnY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZ2lzdGVyVGFic1Njcm9sbCgpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCAkdWwgPSB0aGlzLiRlbGVtZW50LmZpbmQoJz4gdWwnKTtcbiAgICAgICAgICAgIGxldCAkbGlQb3NpdGlvbjtcblxuICAgICAgICAgICAgY29uc3QgICRsaSA9ICR1bC5jaGlsZHJlbigpO1xuICAgICAgICAgICAgJGxpUG9zaXRpb24gPSAkbGkubGFzdCgpLnBvc2l0aW9uKCk7XG4gICAgICAgICAgICBpZiAoJGxpUG9zaXRpb24gJiYgKCRsaVBvc2l0aW9uLmxlZnQgPiAkdWwud2lkdGgoKSkpIHtcbiAgICAgICAgICAgICAgICAkdWwub24oJ21vdXNld2hlZWwnLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsZWZ0ID0gJHVsWzBdLnNjcm9sbExlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBfZGVsdGEgPSAtMSAqIGUub3JpZ2luYWxFdmVudC53aGVlbERlbHRhO1xuICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICR1bC5hbmltYXRlKHtzY3JvbGxMZWZ0OiBsZWZ0ICsgX2RlbHRhfSwgeydkdXJhdGlvbic6IDEwfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBvbmtleWRvd24oZXZlbnQpIHtcbiAgICAgICAgbGV0IG5ld1BhbmU7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgICAgICAgICAgbmV3UGFuZSA9IHRoaXMuYXV0b0FjdGl2YXRpb24gPyAodGhpcy5wcmV2KG51bGwsIHRydWUpLCBudWxsKSA6IHRoaXMuZ2V0U2VsZWN0YWJsZVRhYkJlZm9yZUluZGV4KHRoaXMuZ2V0U2VsZWN0ZWRQYW5lSW5kZXgoKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgICAgICAgICBuZXdQYW5lID0gdGhpcy5hdXRvQWN0aXZhdGlvbiA/ICh0aGlzLm5leHQobnVsbCwgdHJ1ZSksIG51bGwpIDogdGhpcy5nZXRTZWxlY3RhYmxlVGFiQWZ0ZXJJbmRleCh0aGlzLmdldFNlbGVjdGVkUGFuZUluZGV4KCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdFbnRlcic6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYW5lID0gdGhpcy5nZXRTZWxlY3RhYmxlVGFiQWZ0ZXJJbmRleCh0aGlzLmdldFNlbGVjdGVkUGFuZUluZGV4KCktMSk7XG4gICAgICAgICAgICAgICAgaWYgKHBhbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW50ZXJFdmVudCA9IG5ldyBLZXlib2FyZEV2ZW50KCdrZXlkb3duJywge2tleTogJ0VudGVyJywgY29kZTogJ0VudGVyJywgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZX0pO1xuICAgICAgICAgICAgICAgICAgICBwYW5lLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChlbnRlckV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgcGFuZS5zZWxlY3QoZW50ZXJFdmVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZXdQYW5lKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignbGkuc2VsZWN0Jyk/LmNsYXNzTGlzdC5yZW1vdmUoJ3NlbGVjdCcpO1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYGxpW2RhdGEtcGFuZWlkPVwiJHtuZXdQYW5lLndpZGdldElkfVwiXWApPy5jbGFzc0xpc3QuYWRkKCdzZWxlY3QnKTtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy5wcm9taXNlUmVzb2x2ZXJGbigpO1xuICAgICAgICBzdXBlci5uZ0FmdGVyQ29udGVudEluaXQoKTtcbiAgICAgICAgdGhpcy5zZXRUYWJzUG9zaXRpb24oKTtcbiAgICAgICAgdGhpcy5wYW5lcy5jaGFuZ2VzLnN1YnNjcmliZSggc2xpZGVzID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhbmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0RGVmYXVsdFBhbmVCeUluZGV4KHRoaXMuZGVmYXVsdHBhbmVpbmRleCB8fCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclRhYnNTY3JvbGwoKTtcbiAgICB9XG5cbiAgICBnZXRTZWxlY3RlZFBhbmVJbmRleCgpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnBhbmVzLnRvQXJyYXkoKS5maW5kSW5kZXgocGFuZSA9PlxuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYGxpW2RhdGEtcGFuZWlkPVwiJHtwYW5lLndpZGdldElkfVwiXWApPy5jbGFzc0xpc3QuY29udGFpbnMoXCJzZWxlY3RcIikpO1xuICAgICAgICByZXR1cm4gaW5kZXggPj0gMCA/IGluZGV4IDogdGhpcy5nZXRBY3RpdmVUYWJJbmRleCgpO1xuICAgIH1cbn1cbiIsIjx1bCBjbGFzcz1cIm5hdiBuYXYtdGFic1wiIFtuZ0NsYXNzXT1cInsnbmF2LXN0YWNrZWQnOiB2ZXJ0aWNhbCwgJ25hdi1qdXN0aWZpZWQnOiBqdXN0aWZpZWR9XCIgcm9sZT1cInRhYmxpc3RcIj5cbiAgQGZvciAocGFuZSBvZiBwYW5lczsgdHJhY2sgcGFuZTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICA8bGkgY2xhc3M9XCJ0YWItaGVhZGVyXCIgW2F0dHIuZGF0YS1wYW5laWRdPVwicGFuZS53aWRnZXRJZFwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogcGFuZS5pc0FjdGl2ZSwgJ2Rpc2FibGVkJzogcGFuZS5kaXNhYmxlZH1cIlxuICAgICAgW2hpZGRlbl09XCIhcGFuZS5zaG93XCIgcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgPGEgW2F0dHIuYXJpYS1sYWJlbF09XCJwYW5lLmJhZGdldmFsdWUgPyBwYW5lLnRpdGxlICsgJyAnICsgcGFuZS5iYWRnZXZhbHVlIDogcGFuZS50aXRsZVwiXG4gICAgICAgIFthdHRyLmljb24tcG9zaXRpb25dPVwiaWNvbnBvc2l0aW9uXCJcbiAgICAgICAgW2F0dHIudGl0bGVdPVwicGFuZS50aXRsZVwiXG4gICAgICAgIFt0YWJpbmRleF09XCJwYW5lLmlzQWN0aXZlID8gJzAnIDogJy0xJ1wiXG4gICAgICAgIGNsYXNzPVwidGFiLWhlYWRpbmdcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiXG4gICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwicGFuZS5pc0FjdGl2ZVwiIHJvbGU9XCJ0YWJcIiAoY2xpY2spPVwicGFuZS5zZWxlY3QoJGV2ZW50KTsgcGFuZS50YWJwYW5lSGVhZGVyQ2xpY2soJGV2ZW50LCBpKTtcIiAoa2V5ZG93bik9XCJvbmtleWRvd24oJGV2ZW50KVwiPlxuICAgICAgICBAaWYgKHBhbmUucGFuZWljb24pIHtcbiAgICAgICAgICA8aSBbbmdDbGFzc109XCJbJ2FwcC1pY29uJywgcGFuZS5wYW5laWNvbl1cIj48L2k+XG4gICAgICAgIH1cbiAgICAgICAgPHNwYW4gW3RleHRDb250ZW50XT1cInBhbmUudGl0bGVcIj48L3NwYW4+XG4gICAgICAgIEBpZiAocGFuZS5iYWRnZXZhbHVlKSB7XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbCBsYWJlbC17e3BhbmUuYmFkZ2V0eXBlfX1cIiBbdGV4dENvbnRlbnRdPVwicGFuZS5iYWRnZXZhbHVlXCI+PC9zcGFuPlxuICAgICAgICB9XG4gICAgICA8L2E+XG4gICAgPC9saT5cbiAgfVxuPC91bD5cbkBpZiAodHlwZSAhPT0gJ2R5bmFtaWMnKSB7XG4gIDxkaXYgY2xhc3M9XCJ0YWItY29udGVudFwiIFtuZ0NsYXNzXT1cInsndGFiLXN0YWNrZWQnOiB2ZXJ0aWNhbCwgJ3RhYi1qdXN0aWZpZWQnOiBqdXN0aWZpZWR9XCI+XG4gICAgPG5nLWNvbnRlbnQgbmdQcm9qZWN0QXM9XCJkaXZbd21UYWJQYW5lXVwiPjwvbmctY29udGVudD5cbiAgPC9kaXY+XG59XG5AaWYgKHR5cGUgPT09ICdkeW5hbWljJykge1xuICA8ZGl2IGNsYXNzPVwidGFiLWNvbnRlbnRcIiBbbmdDbGFzc109XCJ7J3RhYi1zdGFja2VkJzogdmVydGljYWwsICd0YWItanVzdGlmaWVkJzoganVzdGlmaWVkfVwiPlxuICAgIEBpZiAoZmllbGREZWZzICYmICFmaWVsZERlZnMubGVuZ3RoKSB7XG4gICAgICA8ZGl2Pnt7bm9kYXRhbWVzc2FnZX19PC9kaXY+XG4gICAgfVxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImRpdlt3bVJlcGVhdFRlbXBsYXRlXVwiPjwvbmctY29udGVudD5cbiAgPC9kaXY+XG59XG4iXX0=
@@ -13,7 +13,8 @@ export const registerProps = () => {
13
13
  ['transition', PROP_STRING],
14
14
  ['type', PROP_STRING],
15
15
  ['iconposition', PROP_STRING],
16
+ ['autotabactivation', { value: true, ...PROP_BOOLEAN }]
16
17
  ]);
17
18
  register('wm-tabs', props);
18
19
  };
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5wcm9wcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9jb250YWluZXJzL3RhYnMvc3JjL3RhYnMucHJvcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUVoRyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsR0FBRyxFQUFFO0lBQzlCLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxDQUNqQjtRQUNJLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQztRQUN0QixDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUM7UUFDckIsQ0FBQyxrQkFBa0IsRUFBRSxFQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxXQUFXLEVBQUMsQ0FBQztRQUNoRCxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUM7UUFDM0IsQ0FBQyxjQUFjLEVBQUUsRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsV0FBVyxFQUFDLENBQUM7UUFDaEQsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDO1FBQ3JCLENBQUMsZUFBZSxFQUFFLEVBQUMsS0FBSyxFQUFFLGVBQWUsRUFBRSxHQUFJLFdBQVcsRUFBQyxDQUFDO1FBQzVELENBQUMsTUFBTSxFQUFFLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLFlBQVksRUFBQyxDQUFDO1FBQ3hDLENBQUMsY0FBYyxFQUFFLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLFdBQVcsRUFBQyxDQUFDO1FBQ2pELENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQztRQUMzQixDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUM7UUFDckIsQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDO0tBQ2hDLENBQ0osQ0FBQztJQUNGLFFBQVEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUFJPUF9BTlksIFBST1BfQk9PTEVBTiwgUFJPUF9OVU1CRVIsIFBST1BfU1RSSU5HLCByZWdpc3Rlcn0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5cbmV4cG9ydCBjb25zdCByZWdpc3RlclByb3BzID0gKCkgPT4ge1xuICAgIGNvbnN0IHByb3BzID0gbmV3IE1hcChcbiAgICAgICAgW1xuICAgICAgICAgICAgWydjbGFzcycsIFBST1BfU1RSSU5HXSxcbiAgICAgICAgICAgIFsnZGF0YXNldCcsIFBST1BfQU5ZXSxcbiAgICAgICAgICAgIFsnZGVmYXVsdHBhbmVpbmRleCcsIHt2YWx1ZTogMCwgLi4uUFJPUF9OVU1CRVJ9XSxcbiAgICAgICAgICAgIFsnanVzdGlmaWVkJywgUFJPUF9CT09MRUFOXSxcbiAgICAgICAgICAgIFsndGFic3Bvc2l0aW9uJywge3ZhbHVlOiAndG9wJywgLi4uUFJPUF9TVFJJTkd9XSxcbiAgICAgICAgICAgIFsnbmFtZScsIFBST1BfU1RSSU5HXSxcbiAgICAgICAgICAgIFsnbm9kYXRhbWVzc2FnZScsIHt2YWx1ZTogJ05vIERhdGEgRm91bmQnLCAuLi4gUFJPUF9TVFJJTkd9XSxcbiAgICAgICAgICAgIFsnc2hvdycsIHt2YWx1ZTogdHJ1ZSwgLi4uUFJPUF9CT09MRUFOfV0sXG4gICAgICAgICAgICBbJ3N0YXRlaGFuZGxlcicsIHt2YWx1ZTogJ25vbmUnLCAuLi5QUk9QX1NUUklOR31dLFxuICAgICAgICAgICAgWyd0cmFuc2l0aW9uJywgUFJPUF9TVFJJTkddLFxuICAgICAgICAgICAgWyd0eXBlJywgUFJPUF9TVFJJTkddLFxuICAgICAgICAgICAgWydpY29ucG9zaXRpb24nLCBQUk9QX1NUUklOR10sXG4gICAgICAgIF1cbiAgICApO1xuICAgIHJlZ2lzdGVyKCd3bS10YWJzJywgcHJvcHMpO1xufTtcbiJdfQ==
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5wcm9wcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9jb250YWluZXJzL3RhYnMvc3JjL3RhYnMucHJvcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUVoRyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsR0FBRyxFQUFFO0lBQzlCLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxDQUNqQjtRQUNJLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQztRQUN0QixDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUM7UUFDckIsQ0FBQyxrQkFBa0IsRUFBRSxFQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxXQUFXLEVBQUMsQ0FBQztRQUNoRCxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUM7UUFDM0IsQ0FBQyxjQUFjLEVBQUUsRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsV0FBVyxFQUFDLENBQUM7UUFDaEQsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDO1FBQ3JCLENBQUMsZUFBZSxFQUFFLEVBQUMsS0FBSyxFQUFFLGVBQWUsRUFBRSxHQUFJLFdBQVcsRUFBQyxDQUFDO1FBQzVELENBQUMsTUFBTSxFQUFFLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLFlBQVksRUFBQyxDQUFDO1FBQ3hDLENBQUMsY0FBYyxFQUFFLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLFdBQVcsRUFBQyxDQUFDO1FBQ2pELENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQztRQUMzQixDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUM7UUFDckIsQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDO1FBQzdCLENBQUMsbUJBQW1CLEVBQUUsRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsWUFBWSxFQUFDLENBQUM7S0FDeEQsQ0FDSixDQUFDO0lBQ0YsUUFBUSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMvQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQUk9QX0FOWSwgUFJPUF9CT09MRUFOLCBQUk9QX05VTUJFUiwgUFJPUF9TVFJJTkcsIHJlZ2lzdGVyfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcblxuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyUHJvcHMgPSAoKSA9PiB7XG4gICAgY29uc3QgcHJvcHMgPSBuZXcgTWFwKFxuICAgICAgICBbXG4gICAgICAgICAgICBbJ2NsYXNzJywgUFJPUF9TVFJJTkddLFxuICAgICAgICAgICAgWydkYXRhc2V0JywgUFJPUF9BTlldLFxuICAgICAgICAgICAgWydkZWZhdWx0cGFuZWluZGV4Jywge3ZhbHVlOiAwLCAuLi5QUk9QX05VTUJFUn1dLFxuICAgICAgICAgICAgWydqdXN0aWZpZWQnLCBQUk9QX0JPT0xFQU5dLFxuICAgICAgICAgICAgWyd0YWJzcG9zaXRpb24nLCB7dmFsdWU6ICd0b3AnLCAuLi5QUk9QX1NUUklOR31dLFxuICAgICAgICAgICAgWyduYW1lJywgUFJPUF9TVFJJTkddLFxuICAgICAgICAgICAgWydub2RhdGFtZXNzYWdlJywge3ZhbHVlOiAnTm8gRGF0YSBGb3VuZCcsIC4uLiBQUk9QX1NUUklOR31dLFxuICAgICAgICAgICAgWydzaG93Jywge3ZhbHVlOiB0cnVlLCAuLi5QUk9QX0JPT0xFQU59XSxcbiAgICAgICAgICAgIFsnc3RhdGVoYW5kbGVyJywge3ZhbHVlOiAnbm9uZScsIC4uLlBST1BfU1RSSU5HfV0sXG4gICAgICAgICAgICBbJ3RyYW5zaXRpb24nLCBQUk9QX1NUUklOR10sXG4gICAgICAgICAgICBbJ3R5cGUnLCBQUk9QX1NUUklOR10sXG4gICAgICAgICAgICBbJ2ljb25wb3NpdGlvbicsIFBST1BfU1RSSU5HXSxcbiAgICAgICAgICAgIFsnYXV0b3RhYmFjdGl2YXRpb24nLCB7dmFsdWU6IHRydWUsIC4uLlBST1BfQk9PTEVBTn1dXG4gICAgICAgIF1cbiAgICApO1xuICAgIHJlZ2lzdGVyKCd3bS10YWJzJywgcHJvcHMpO1xufTtcbiJdfQ==
@@ -104,6 +104,7 @@ const registerProps$1 = () => {
104
104
  ['transition', PROP_STRING],
105
105
  ['type', PROP_STRING],
106
106
  ['iconposition', PROP_STRING],
107
+ ['autotabactivation', { value: true, ...PROP_BOOLEAN }]
107
108
  ]);
108
109
  register('wm-tabs', props);
109
110
  };
@@ -660,6 +661,9 @@ class TabsComponent extends StylableComponent {
660
661
  setTimeout(() => this.selectDefaultPaneByIndex(this.defaultpaneindex || 0), 20);
661
662
  }
662
663
  }
664
+ else if (key === 'autotabactivation') {
665
+ this.autoActivation = nv;
666
+ }
663
667
  else {
664
668
  super.onPropertyChange(key, nv, ov);
665
669
  }
@@ -681,20 +685,34 @@ class TabsComponent extends StylableComponent {
681
685
  });
682
686
  }
683
687
  onkeydown(event) {
688
+ let newPane;
684
689
  switch (event.key) {
685
690
  case 'ArrowLeft':
686
691
  case 'ArrowUp':
687
- this.prev(null, true);
688
- event.preventDefault();
692
+ newPane = this.autoActivation ? (this.prev(null, true), null) : this.getSelectableTabBeforeIndex(this.getSelectedPaneIndex());
689
693
  break;
690
694
  case 'ArrowRight':
691
695
  case 'ArrowDown':
692
- this.next(null, true);
693
- event.preventDefault();
696
+ newPane = this.autoActivation ? (this.next(null, true), null) : this.getSelectableTabAfterIndex(this.getSelectedPaneIndex());
694
697
  break;
698
+ case 'Enter': {
699
+ const pane = this.getSelectableTabAfterIndex(this.getSelectedPaneIndex() - 1);
700
+ if (pane) {
701
+ const enterEvent = new KeyboardEvent('keydown', { key: 'Enter', code: 'Enter', bubbles: true, cancelable: true });
702
+ pane.nativeElement.dispatchEvent(enterEvent);
703
+ pane.select(enterEvent, true);
704
+ }
705
+ event.preventDefault();
706
+ return;
707
+ }
695
708
  default:
696
- break;
709
+ return;
697
710
  }
711
+ if (newPane) {
712
+ this.nativeElement.querySelector('li.select')?.classList.remove('select');
713
+ this.nativeElement.querySelector(`li[data-paneid="${newPane.widgetId}"]`)?.classList.add('select');
714
+ }
715
+ event.preventDefault();
698
716
  }
699
717
  ngAfterContentInit() {
700
718
  this.promiseResolverFn();
@@ -710,6 +728,10 @@ class TabsComponent extends StylableComponent {
710
728
  super.ngAfterViewInit();
711
729
  this.registerTabsScroll();
712
730
  }
731
+ getSelectedPaneIndex() {
732
+ const index = this.panes.toArray().findIndex(pane => this.nativeElement.querySelector(`li[data-paneid="${pane.widgetId}"]`)?.classList.contains("select"));
733
+ return index >= 0 ? index : this.getActiveTabIndex();
734
+ }
713
735
  static { this.ɵfac = function TabsComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TabsComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i1.DynamicComponentRefProvider), i0.ɵɵinjectAttribute('transition'), i0.ɵɵinjectAttribute('tabsposition'), i0.ɵɵdirectiveInject(i1.StatePersistence), i0.ɵɵdirectiveInject('EXPLICIT_CONTEXT', 8)); }; }
714
736
  static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TabsComponent, selectors: [["div", "wmTabs", ""]], contentQueries: function TabsComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
715
737
  i0.ɵɵcontentQuery(dirIndex, TabPaneComponent, 4);