@wavemaker/app-ng-runtime 11.7.1-next.NULL → 11.7.1-rc.162

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 (39) hide show
  1. app-ng-runtime/build-task/bundles/index.umd.js +11 -1
  2. app-ng-runtime/build-task/esm2022/basic/default/label/label.build.mjs +12 -2
  3. app-ng-runtime/build-task/fesm2022/index.mjs +11 -1
  4. app-ng-runtime/build-task/fesm2022/index.mjs.map +1 -1
  5. app-ng-runtime/components/basic/default/bundles/index.umd.js +2 -0
  6. app-ng-runtime/components/basic/default/esm2022/label/label.props.mjs +3 -1
  7. app-ng-runtime/components/basic/default/fesm2022/index.mjs +2 -0
  8. app-ng-runtime/components/basic/default/fesm2022/index.mjs.map +1 -1
  9. app-ng-runtime/components/containers/tabs/bundles/index.umd.js +12 -12
  10. app-ng-runtime/components/containers/tabs/esm2022/tab-pane/tab-pane.component.mjs +5 -5
  11. app-ng-runtime/components/containers/tabs/esm2022/tabs.component.mjs +9 -9
  12. app-ng-runtime/components/containers/tabs/fesm2022/index.mjs +12 -12
  13. app-ng-runtime/components/containers/tabs/fesm2022/index.mjs.map +1 -1
  14. app-ng-runtime/components/containers/tabs/tab-pane/tab-pane.component.d.ts +1 -1
  15. app-ng-runtime/components/containers/tabs/tabs.component.d.ts +3 -3
  16. app-ng-runtime/components/data/table/bundles/index.umd.js +3 -0
  17. app-ng-runtime/components/data/table/esm2022/table.component.mjs +3 -1
  18. app-ng-runtime/components/data/table/esm2022/table.props.mjs +2 -1
  19. app-ng-runtime/components/data/table/fesm2022/index.mjs +3 -0
  20. app-ng-runtime/components/data/table/fesm2022/index.mjs.map +1 -1
  21. app-ng-runtime/components/data/table/table.component.d.ts +2 -0
  22. app-ng-runtime/components/input/epoch/base-date-time.component.d.ts +1 -1
  23. app-ng-runtime/components/input/epoch/bundles/index.umd.js +20 -12
  24. app-ng-runtime/components/input/epoch/esm2022/base-date-time.component.mjs +19 -11
  25. app-ng-runtime/components/input/epoch/esm2022/date/date.component.mjs +2 -2
  26. app-ng-runtime/components/input/epoch/esm2022/date-time/date-time.component.mjs +2 -2
  27. app-ng-runtime/components/input/epoch/esm2022/epoch.module.mjs +1 -1
  28. app-ng-runtime/components/input/epoch/fesm2022/index.mjs +20 -12
  29. app-ng-runtime/components/input/epoch/fesm2022/index.mjs.map +1 -1
  30. app-ng-runtime/components/navigation/menu/bundles/index.umd.js +54 -1
  31. app-ng-runtime/components/navigation/menu/esm2022/menu-dropdown/menu-dropdown.component.mjs +51 -1
  32. app-ng-runtime/components/navigation/menu/esm2022/menu.component.mjs +5 -2
  33. app-ng-runtime/components/navigation/menu/fesm2022/index.mjs +54 -1
  34. app-ng-runtime/components/navigation/menu/fesm2022/index.mjs.map +1 -1
  35. app-ng-runtime/components/navigation/menu/menu-dropdown/menu-dropdown.component.d.ts +4 -0
  36. app-ng-runtime/components/navigation/menu/menu.component.d.ts +2 -1
  37. app-ng-runtime/locales/moment-timezone/moment-timezone-with-data.js +66 -33
  38. app-ng-runtime/package.json +1 -1
  39. app-ng-runtime/scripts/datatable/datatable.js +37 -3
@@ -348,6 +348,7 @@
348
348
  class MenuComponent extends i5.DatasetAwareNavComponent {
349
349
  static { this.initializeProps = registerProps$1(); }
350
350
  onShow() {
351
+ this._menuposition = this.menuposition;
351
352
  if (this._selectFirstItem) {
352
353
  setTimeout(() => {
353
354
  this.$element.find('> ul[wmmenudropdown] li.app-menu-item').first().find('> a').focus();
@@ -356,9 +357,11 @@
356
357
  i2.$appDigest();
357
358
  }
358
359
  onHide() {
359
- this.$element.find('>.dropdown-toggle').focus();
360
360
  this.$element.find('li').removeClass('open');
361
361
  this._selectFirstItem = false;
362
+ // reset the menuposition when dropdown is closed
363
+ this.menuposition = this._menuposition ? this._menuposition : MENU_POSITION.DOWN_RIGHT;
364
+ this.setMenuPosition();
362
365
  i2.$appDigest();
363
366
  }
364
367
  onKeyDown($event, eventAction) {
@@ -834,6 +837,7 @@
834
837
  constructor(elRef, menuRef) {
835
838
  this.menuRef = menuRef;
836
839
  this.nativeElement = elRef.nativeElement;
840
+ this.hasExecutedCallback = false;
837
841
  i2.addClass(this.nativeElement, DEFAULT_CLS$1);
838
842
  }
839
843
  ngAfterViewInit() {
@@ -843,6 +847,55 @@
843
847
  animationClass = `animated ${(animationClasses[animateItems][this.menuRef.menuposition] || animationClasses[animateItems].name)}`;
844
848
  }
845
849
  i2.addClass(this.nativeElement, `dropdown-menu ${this.menuRef.menualign} ${animationClass}`, true);
850
+ this.getParentWidget();
851
+ }
852
+ // Function to check if the menu widget is present inside other widgets like table, tabs, dialog, nav, list, tile, panel, accordion
853
+ // if true then call createObserver() which internally calculates dropown height
854
+ getParentWidget() {
855
+ const closestWidget = $(this.menuRef.nativeElement).closest('table, ul, .dialog, .app-tabs, .app-accordion, .app-panel, .app-tile');
856
+ // Check if the closest table is the parent of the menu widget
857
+ if (closestWidget && $(closestWidget).has(this.menuRef.nativeElement).length > 0) {
858
+ this.createObserver(this, this.callback);
859
+ }
860
+ }
861
+ // function which changes the position of the menu dropdown dynamically if it exceeds viewport height
862
+ callback(entries, observer) {
863
+ if (!this.hasExecutedCallback) {
864
+ const self = this;
865
+ const positions = this.menuRef.menuposition?.split(',') || [];
866
+ entries.forEach(entry => {
867
+ if (entry.isIntersecting) {
868
+ positions[0] = 'down';
869
+ self.menuRef.menuposition = positions.length > 1 ? positions.join() : 'down,right';
870
+ self.nativeElement.parentElement?.classList.add('dropdown');
871
+ self.menuRef.setMenuPosition();
872
+ }
873
+ else {
874
+ positions[0] = 'up';
875
+ self.menuRef.menuposition = positions.length > 1 ? positions.join() : 'up,right';
876
+ self.nativeElement.parentElement?.classList.add('dropup');
877
+ self.menuRef.setMenuPosition();
878
+ // when container="body" is added to menu dropdown, the dropdown menu ul is attached directly to body.
879
+ // so adding a class name inorder to adjust the styling of the dropdown
880
+ const dropdownContainer = self.nativeElement.parentElement?.parentElement;
881
+ if (dropdownContainer.tagName.toUpperCase() === "BS-DROPDOWN-CONTAINER") {
882
+ // The parent element is <bs-dropdown-container>
883
+ self.nativeElement.parentElement?.parentElement?.classList.add('parent-position');
884
+ }
885
+ }
886
+ });
887
+ this.hasExecutedCallback = true;
888
+ }
889
+ }
890
+ // function which checks if the dropdown is within the viewport height or exceeds viewport height
891
+ createObserver(target, callback) {
892
+ const options = {
893
+ root: null,
894
+ threshold: 1,
895
+ once: true
896
+ };
897
+ const observer = new IntersectionObserver(callback.bind(this), options);
898
+ observer.observe(target.nativeElement);
846
899
  }
847
900
  static { this.ɵfac = function MenuDropdownComponent_Factory(t) { return new (t || MenuDropdownComponent)(i0__namespace.ɵɵdirectiveInject(i0__namespace.ElementRef), i0__namespace.ɵɵdirectiveInject(MenuComponent)); }; }
848
901
  static { this.ɵcmp = /*@__PURE__*/ i0__namespace.ɵɵdefineComponent({ type: MenuDropdownComponent, selectors: [["ul", "wmMenuDropdown", ""]], inputs: { items: "items" }, attrs: _c0, decls: 1, vars: 1, consts: [["wmMenuDropdownItem", "", "role", "menuitem", 3, "item", "ngClass", "class", 4, "ngFor", "ngForOf"], ["wmMenuDropdownItem", "", "role", "menuitem", 3, "item", "ngClass"]], template: function MenuDropdownComponent_Template(rf, ctx) { if (rf & 1) {
@@ -42,6 +42,7 @@ export class MenuDropdownComponent {
42
42
  constructor(elRef, menuRef) {
43
43
  this.menuRef = menuRef;
44
44
  this.nativeElement = elRef.nativeElement;
45
+ this.hasExecutedCallback = false;
45
46
  addClass(this.nativeElement, DEFAULT_CLS);
46
47
  }
47
48
  ngAfterViewInit() {
@@ -51,6 +52,55 @@ export class MenuDropdownComponent {
51
52
  animationClass = `animated ${(animationClasses[animateItems][this.menuRef.menuposition] || animationClasses[animateItems].name)}`;
52
53
  }
53
54
  addClass(this.nativeElement, `dropdown-menu ${this.menuRef.menualign} ${animationClass}`, true);
55
+ this.getParentWidget();
56
+ }
57
+ // Function to check if the menu widget is present inside other widgets like table, tabs, dialog, nav, list, tile, panel, accordion
58
+ // if true then call createObserver() which internally calculates dropown height
59
+ getParentWidget() {
60
+ const closestWidget = $(this.menuRef.nativeElement).closest('table, ul, .dialog, .app-tabs, .app-accordion, .app-panel, .app-tile');
61
+ // Check if the closest table is the parent of the menu widget
62
+ if (closestWidget && $(closestWidget).has(this.menuRef.nativeElement).length > 0) {
63
+ this.createObserver(this, this.callback);
64
+ }
65
+ }
66
+ // function which changes the position of the menu dropdown dynamically if it exceeds viewport height
67
+ callback(entries, observer) {
68
+ if (!this.hasExecutedCallback) {
69
+ const self = this;
70
+ const positions = this.menuRef.menuposition?.split(',') || [];
71
+ entries.forEach(entry => {
72
+ if (entry.isIntersecting) {
73
+ positions[0] = 'down';
74
+ self.menuRef.menuposition = positions.length > 1 ? positions.join() : 'down,right';
75
+ self.nativeElement.parentElement?.classList.add('dropdown');
76
+ self.menuRef.setMenuPosition();
77
+ }
78
+ else {
79
+ positions[0] = 'up';
80
+ self.menuRef.menuposition = positions.length > 1 ? positions.join() : 'up,right';
81
+ self.nativeElement.parentElement?.classList.add('dropup');
82
+ self.menuRef.setMenuPosition();
83
+ // when container="body" is added to menu dropdown, the dropdown menu ul is attached directly to body.
84
+ // so adding a class name inorder to adjust the styling of the dropdown
85
+ const dropdownContainer = self.nativeElement.parentElement?.parentElement;
86
+ if (dropdownContainer.tagName.toUpperCase() === "BS-DROPDOWN-CONTAINER") {
87
+ // The parent element is <bs-dropdown-container>
88
+ self.nativeElement.parentElement?.parentElement?.classList.add('parent-position');
89
+ }
90
+ }
91
+ });
92
+ this.hasExecutedCallback = true;
93
+ }
94
+ }
95
+ // function which checks if the dropdown is within the viewport height or exceeds viewport height
96
+ createObserver(target, callback) {
97
+ const options = {
98
+ root: null,
99
+ threshold: 1,
100
+ once: true
101
+ };
102
+ const observer = new IntersectionObserver(callback.bind(this), options);
103
+ observer.observe(target.nativeElement);
54
104
  }
55
105
  static { this.ɵfac = function MenuDropdownComponent_Factory(t) { return new (t || MenuDropdownComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.MenuComponent)); }; }
56
106
  static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MenuDropdownComponent, selectors: [["ul", "wmMenuDropdown", ""]], inputs: { items: "items" }, attrs: _c0, decls: 1, vars: 1, consts: [["wmMenuDropdownItem", "", "role", "menuitem", 3, "item", "ngClass", "class", 4, "ngFor", "ngForOf"], ["wmMenuDropdownItem", "", "role", "menuitem", 3, "item", "ngClass"]], template: function MenuDropdownComponent_Template(rf, ctx) { if (rf & 1) {
@@ -65,4 +115,4 @@ export class MenuDropdownComponent {
65
115
  }], function () { return [{ type: i0.ElementRef }, { type: i1.MenuComponent }]; }, { items: [{
66
116
  type: Input
67
117
  }] }); })();
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1kcm9wZG93bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvbmF2aWdhdGlvbi9tZW51L3NyYy9tZW51LWRyb3Bkb3duL21lbnUtZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL25hdmlnYXRpb24vbWVudS9zcmMvbWVudS1kcm9wZG93bi9tZW51LWRyb3Bkb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVwQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7Ozs7O0lDSmxELHdCQUtLOzs7SUFGRCw0QkFBc0I7SUFGdEIsOEJBQWEsc0ZBQUE7O0FES2pCLE1BQU0sZ0JBQWdCLEdBQUc7SUFDckIsS0FBSyxFQUFFO1FBQ0gsTUFBTSxFQUFFLGVBQWU7UUFDdkIsWUFBWSxFQUFFLGVBQWU7UUFDN0IsV0FBVyxFQUFFLGdCQUFnQjtRQUM3QixVQUFVLEVBQUUsa0JBQWtCO1FBQzlCLFNBQVMsRUFBRSxtQkFBbUI7S0FDakM7SUFDRCxJQUFJLEVBQUU7UUFDRixNQUFNLEVBQUUsUUFBUTtRQUNoQixZQUFZLEVBQUUsUUFBUTtRQUN0QixXQUFXLEVBQUUsUUFBUTtRQUNyQixVQUFVLEVBQUUsUUFBUTtRQUNwQixTQUFTLEVBQUUsUUFBUTtLQUN0QjtJQUNELEtBQUssRUFBRTtRQUNILE1BQU0sRUFBRSxlQUFlO1FBQ3ZCLFlBQVksRUFBRSxlQUFlO1FBQzdCLFdBQVcsRUFBRSxlQUFlO1FBQzVCLFVBQVUsRUFBRSxhQUFhO1FBQ3pCLFNBQVMsRUFBRSxhQUFhO0tBQzNCO0NBQ0osQ0FBQztBQUVGLE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQztBQU1wQyxNQUFNLE9BQU8scUJBQXFCO0lBSzlCLFlBQVksS0FBaUIsRUFBVSxPQUFzQjtRQUF0QixZQUFPLEdBQVAsT0FBTyxDQUFlO1FBQ3pELElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUN6QyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsZUFBZTtRQUNYLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO1FBQy9DLElBQUksY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLFlBQVksRUFBRTtZQUNkLGNBQWMsR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1NBQ3JJO1FBQ0QsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsaUJBQWlCLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxJQUFJLGNBQWMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BHLENBQUM7c0ZBakJRLHFCQUFxQjtvRUFBckIscUJBQXFCO1lDcENsQyxvRUFLSzs7WUFMbUMsbUNBQVE7Ozt1RkRvQ25DLHFCQUFxQjtjQUpqQyxTQUFTOzJCQUNJLG9CQUFvQjt5RkFNckIsS0FBSztrQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBhZGRDbGFzcyB9IGZyb20gJ0B3bS9jb3JlJztcblxuaW1wb3J0IHsgTWVudUNvbXBvbmVudCB9IGZyb20gJy4uL21lbnUuY29tcG9uZW50JztcblxuY29uc3QgYW5pbWF0aW9uQ2xhc3NlcyA9IHtcbiAgICBzY2FsZToge1xuICAgICAgICAnbmFtZSc6ICd3bVNjYWxlSW5MZWZ0JyxcbiAgICAgICAgJ2Rvd24scmlnaHQnOiAnd21TY2FsZUluTGVmdCcsXG4gICAgICAgICdkb3duLGxlZnQnOiAnd21TY2FsZUluUmlnaHQnLFxuICAgICAgICAndXAscmlnaHQnOiAnd21TY2FsZUluVG9wTGVmdCcsXG4gICAgICAgICd1cCxsZWZ0JzogJ3dtU2NhbGVJblRvcFJpZ2h0J1xuICAgIH0sXG4gICAgZmFkZToge1xuICAgICAgICAnbmFtZSc6ICdmYWRlSW4nLFxuICAgICAgICAnZG93bixyaWdodCc6ICdmYWRlSW4nLFxuICAgICAgICAnZG93bixsZWZ0JzogJ2ZhZGVJbicsXG4gICAgICAgICd1cCxyaWdodCc6ICdmYWRlSW4nLFxuICAgICAgICAndXAsbGVmdCc6ICdmYWRlSW4nXG4gICAgfSxcbiAgICBzbGlkZToge1xuICAgICAgICAnbmFtZSc6ICd3bVNsaWRlSW5Eb3duJyxcbiAgICAgICAgJ2Rvd24scmlnaHQnOiAnd21TbGlkZUluRG93bicsXG4gICAgICAgICdkb3duLGxlZnQnOiAnd21TbGlkZUluRG93bicsXG4gICAgICAgICd1cCxyaWdodCc6ICd3bVNsaWRlSW5VcCcsXG4gICAgICAgICd1cCxsZWZ0JzogJ3dtU2xpZGVJblVwJ1xuICAgIH1cbn07XG5cbmNvbnN0IERFRkFVTFRfQ0xTID0gJ2Ryb3Bkb3duLW1lbnUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3VsW3dtTWVudURyb3Bkb3duXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL21lbnUtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIE1lbnVEcm9wZG93bkNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlRWxlbWVudDtcblxuICAgIEBJbnB1dCgpIGl0ZW1zO1xuXG4gICAgY29uc3RydWN0b3IoZWxSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgbWVudVJlZjogTWVudUNvbXBvbmVudCkge1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQgPSBlbFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBhZGRDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQsIERFRkFVTFRfQ0xTKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGNvbnN0IGFuaW1hdGVJdGVtcyA9IHRoaXMubWVudVJlZi5hbmltYXRlaXRlbXM7XG4gICAgICAgIGxldCBhbmltYXRpb25DbGFzcyA9ICcnO1xuICAgICAgICBpZiAoYW5pbWF0ZUl0ZW1zKSB7XG4gICAgICAgICAgICBhbmltYXRpb25DbGFzcyA9IGBhbmltYXRlZCAkeyhhbmltYXRpb25DbGFzc2VzW2FuaW1hdGVJdGVtc11bdGhpcy5tZW51UmVmLm1lbnVwb3NpdGlvbl0gfHwgYW5pbWF0aW9uQ2xhc3Nlc1thbmltYXRlSXRlbXNdLm5hbWUpfWA7XG4gICAgICAgIH1cbiAgICAgICAgYWRkQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCBgZHJvcGRvd24tbWVudSAke3RoaXMubWVudVJlZi5tZW51YWxpZ259ICR7YW5pbWF0aW9uQ2xhc3N9YCwgdHJ1ZSk7XG4gICAgfVxufVxuIiwiPGxpIHdtTWVudURyb3Bkb3duSXRlbSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtc1wiXG4gICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgW25nQ2xhc3NdPVwie2Rpc2FibGVkOiBpdGVtLmRpc2FibGVkLCAnZHJvcGRvd24tc3VibWVudSc6IGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMH1cIlxuICAgIGNsYXNzPVwie3tpdGVtLmNsYXNzfX1cIlxuICAgIHJvbGU9XCJtZW51aXRlbVwiPlxuPC9saT5cbiJdfQ==
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1kcm9wZG93bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvbmF2aWdhdGlvbi9tZW51L3NyYy9tZW51LWRyb3Bkb3duL21lbnUtZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL25hdmlnYXRpb24vbWVudS9zcmMvbWVudS1kcm9wZG93bi9tZW51LWRyb3Bkb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVwQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7Ozs7O0lDSmxELHdCQUtLOzs7SUFGRCw0QkFBc0I7SUFGdEIsOEJBQWEsc0ZBQUE7O0FES2pCLE1BQU0sZ0JBQWdCLEdBQUc7SUFDckIsS0FBSyxFQUFFO1FBQ0gsTUFBTSxFQUFFLGVBQWU7UUFDdkIsWUFBWSxFQUFFLGVBQWU7UUFDN0IsV0FBVyxFQUFFLGdCQUFnQjtRQUM3QixVQUFVLEVBQUUsa0JBQWtCO1FBQzlCLFNBQVMsRUFBRSxtQkFBbUI7S0FDakM7SUFDRCxJQUFJLEVBQUU7UUFDRixNQUFNLEVBQUUsUUFBUTtRQUNoQixZQUFZLEVBQUUsUUFBUTtRQUN0QixXQUFXLEVBQUUsUUFBUTtRQUNyQixVQUFVLEVBQUUsUUFBUTtRQUNwQixTQUFTLEVBQUUsUUFBUTtLQUN0QjtJQUNELEtBQUssRUFBRTtRQUNILE1BQU0sRUFBRSxlQUFlO1FBQ3ZCLFlBQVksRUFBRSxlQUFlO1FBQzdCLFdBQVcsRUFBRSxlQUFlO1FBQzVCLFVBQVUsRUFBRSxhQUFhO1FBQ3pC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QyxDQUFDO29CQUMxRCxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUMvQixzR0FBc0c7b0JBQ3RHLHVFQUF1RTtvQkFDdkUsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUM7b0JBQzFFLElBQUksaUJBQWlCLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLHVCQUF1QixFQUFFO3dCQUNyRSxnREFBZ0Q7d0JBQ2hELElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLGFBQWEsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7cUJBQ3JGO2lCQUVKO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1NBQ25DO0lBQ04sQ0FBQztJQUVELGlHQUFpRztJQUNqRyxjQUFjLENBQUMsTUFBTSxFQUFFLFFBQVE7UUFDM0IsTUFBTSxPQUFPLEdBQUc7WUFDWixJQUFJLEVBQUUsSUFBSTtZQUNWLFNBQVMsRUFBRSxDQUFDO1lBQ1osSUFBSSxFQUFFLElBQUk7U0FDYixDQUFDO1FBQ0YsTUFBTSxRQUFRLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3hFLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzNDLENBQUM7c0ZBckVRLHFCQUFxQjtvRUFBckIscUJBQXFCO1lDcENsQyxvRUFLSzs7WUFMbUMsbUNBQVE7Ozt1RkRvQ25DLHFCQUFxQjtjQUpqQyxTQUFTOzJCQUNJLG9CQUFvQjt5RkFNckIsS0FBSztrQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBhZGRDbGFzcyB9IGZyb20gJ0B3bS9jb3JlJztcblxuaW1wb3J0IHsgTWVudUNvbXBvbmVudCB9IGZyb20gJy4uL21lbnUuY29tcG9uZW50JztcblxuY29uc3QgYW5pbWF0aW9uQ2xhc3NlcyA9IHtcbiAgICBzY2FsZToge1xuICAgICAgICAnbmFtZSc6ICd3bVNjYWxlSW5MZWZ0JyxcbiAgICAgICAgJ2Rvd24scmlnaHQnOiAnd21TY2FsZUluTGVmdCcsXG4gICAgICAgICdkb3duLGxlZnQnOiAnd21TY2FsZUluUmlnaHQnLFxuICAgICAgICAndXAscmlnaHQnOiAnd21TY2FsZUluVG9wTGVmdCcsXG4gICAgICAgICd1cCxsZWZ0JzogJ3dtU2NhbGVJblRvcFJpZ2h0J1xuICAgIH0sXG4gICAgZmFkZToge1xuICAgICAgICAnbmFtZSc6ICdmYWRlSW4nLFxuICAgICAgICAnZG93bixyaWdodCc6ICdmYWRlSW4nLFxuICAgICAgICAnZG93bixsZWZ0JzogJ2ZhZGVJbicsXG4gICAgICAgICd1cCxyaWdodCc6ICdmYWRlSW4nLFxuICAgICAgICAndXAsbGVmdCc6ICdmYWRlSW4nXG4gICAgfSxcbiAgICBzbGlkZToge1xuICAgICAgICAnbmFtZSc6ICd3bVNsaWRlSW5Eb3duJyxcbiAgICAgICAgJ2Rvd24scmlnaHQnOiAnd21TbGlkZUluRG93bicsXG4gICAgICAgICdkb3duLGxlZnQnOiAnd21TbGlkZUluRG93bicsXG4gICAgICAgICd1cCxyaWdodCc6ICd3bVNsaWRlSW5VcCcsXG4gICAgICAgICd1cCxsZWZ0JzogJ3dtU2xpZGVJblVwJ1xuICAgIH1cbn07XG5cbmNvbnN0IERFRkFVTFRfQ0xTID0gJ2Ryb3Bkb3duLW1lbnUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3VsW3dtTWVudURyb3Bkb3duXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL21lbnUtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIE1lbnVEcm9wZG93bkNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlRWxlbWVudDtcbiAgICBwcml2YXRlIGhhc0V4ZWN1dGVkQ2FsbGJhY2s7XG4gICAgQElucHV0KCkgaXRlbXM7XG5cbiAgICBjb25zdHJ1Y3RvcihlbFJlZjogRWxlbWVudFJlZiwgcHJpdmF0ZSBtZW51UmVmOiBNZW51Q29tcG9uZW50KSB7XG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudCA9IGVsUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMuaGFzRXhlY3V0ZWRDYWxsYmFjayA9IGZhbHNlO1xuICAgICAgICBhZGRDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQsIERFRkFVTFRfQ0xTKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGNvbnN0IGFuaW1hdGVJdGVtcyA9IHRoaXMubWVudVJlZi5hbmltYXRlaXRlbXM7XG4gICAgICAgIGxldCBhbmltYXRpb25DbGFzcyA9ICcnO1xuICAgICAgICBpZiAoYW5pbWF0ZUl0ZW1zKSB7XG4gICAgICAgICAgICBhbmltYXRpb25DbGFzcyA9IGBhbmltYXRlZCAkeyhhbmltYXRpb25DbGFzc2VzW2FuaW1hdGVJdGVtc11bdGhpcy5tZW51UmVmLm1lbnVwb3NpdGlvbl0gfHwgYW5pbWF0aW9uQ2xhc3Nlc1thbmltYXRlSXRlbXNdLm5hbWUpfWA7XG4gICAgICAgIH1cbiAgICAgICAgYWRkQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCBgZHJvcGRvd24tbWVudSAke3RoaXMubWVudVJlZi5tZW51YWxpZ259ICR7YW5pbWF0aW9uQ2xhc3N9YCwgdHJ1ZSk7XG4gICAgICAgdGhpcy5nZXRQYXJlbnRXaWRnZXQoKTtcbiAgICB9XG4gICAgLy8gRnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIG1lbnUgd2lkZ2V0IGlzIHByZXNlbnQgaW5zaWRlIG90aGVyIHdpZGdldHMgbGlrZSB0YWJsZSwgdGFicywgZGlhbG9nLCBuYXYsIGxpc3QsIHRpbGUsIHBhbmVsLCBhY2NvcmRpb25cbiAgICAvLyBpZiB0cnVlIHRoZW4gY2FsbCBjcmVhdGVPYnNlcnZlcigpIHdoaWNoIGludGVybmFsbHkgY2FsY3VsYXRlcyBkcm9wb3duIGhlaWdodFxuICAgIGdldFBhcmVudFdpZGdldCgpIHtcbiAgICAgICAgY29uc3QgY2xvc2VzdFdpZGdldCAgPSAkKHRoaXMubWVudVJlZi5uYXRpdmVFbGVtZW50KS5jbG9zZXN0KCd0YWJsZSwgdWwsIC5kaWFsb2csIC5hcHAtdGFicywgLmFwcC1hY2NvcmRpb24sIC5hcHAtcGFuZWwsIC5hcHAtdGlsZScpO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBjbG9zZXN0IHRhYmxlIGlzIHRoZSBwYXJlbnQgb2YgdGhlIG1lbnUgd2lkZ2V0XG4gICAgICAgIGlmIChjbG9zZXN0V2lkZ2V0ICYmICQoY2xvc2VzdFdpZGdldCkuaGFzKHRoaXMubWVudVJlZi5uYXRpdmVFbGVtZW50KS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZU9ic2VydmVyKHRoaXMsIHRoaXMuY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGZ1bmN0aW9uIHdoaWNoIGNoYW5nZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBtZW51IGRyb3Bkb3duIGR5bmFtaWNhbGx5IGlmIGl0IGV4Y2VlZHMgdmlld3BvcnQgaGVpZ2h0XG4gICAgIGNhbGxiYWNrKGVudHJpZXMsIG9ic2VydmVyKSB7XG4gICAgICAgICBpZiAoIXRoaXMuaGFzRXhlY3V0ZWRDYWxsYmFjaykge1xuICAgICAgICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IHRoaXMubWVudVJlZi5tZW51cG9zaXRpb24/LnNwbGl0KCcsJykgfHwgW107XG4gICAgICAgICAgICAgZW50cmllcy5mb3JFYWNoKGVudHJ5ID0+IHtcbiAgICAgICAgICAgICAgICAgaWYoZW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uc1swXT0nZG93bic7XG4gICAgICAgICAgICAgICAgICAgICBzZWxmLm1lbnVSZWYubWVudXBvc2l0aW9uPSBwb3NpdGlvbnMubGVuZ3RoID4gMSA/IHBvc2l0aW9ucy5qb2luKCkgOiAnZG93bixyaWdodCc7XG4gICAgICAgICAgICAgICAgICAgICBzZWxmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudD8uY2xhc3NMaXN0LmFkZCgnZHJvcGRvd24nKTtcbiAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVudVJlZi5zZXRNZW51UG9zaXRpb24oKTtcbiAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uc1swXT0ndXAnO1xuICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZW51UmVmLm1lbnVwb3NpdGlvbiA9IHBvc2l0aW9ucy5sZW5ndGggPiAxID8gcG9zaXRpb25zLmpvaW4oKSA6ICd1cCxyaWdodCc7XG4gICAgICAgICAgICAgICAgICAgICBzZWxmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudD8uY2xhc3NMaXN0LmFkZCgnZHJvcHVwJyk7XG4gICAgICAgICAgICAgICAgICAgICBzZWxmLm1lbnVSZWYuc2V0TWVudVBvc2l0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIGNvbnRhaW5lcj1cImJvZHlcIiBpcyBhZGRlZCB0byBtZW51IGRyb3Bkb3duLCB0aGUgZHJvcGRvd24gbWVudSB1bCBpcyBhdHRhY2hlZCBkaXJlY3RseSB0byBib2R5LlxuICAgICAgICAgICAgICAgICAgICAgLy8gc28gYWRkaW5nIGEgY2xhc3MgbmFtZSBpbm9yZGVyIHRvIGFkanVzdCB0aGUgc3R5bGluZyBvZiB0aGUgZHJvcGRvd25cbiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRyb3Bkb3duQ29udGFpbmVyID0gc2VsZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ/LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgICBpZiAoZHJvcGRvd25Db250YWluZXIudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSBcIkJTLURST1BET1dOLUNPTlRBSU5FUlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHBhcmVudCBlbGVtZW50IGlzIDxicy1kcm9wZG93bi1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ/LnBhcmVudEVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoJ3BhcmVudC1wb3NpdGlvbicpO1xuICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICB0aGlzLmhhc0V4ZWN1dGVkQ2FsbGJhY2sgPSB0cnVlO1xuICAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBpZiB0aGUgZHJvcGRvd24gaXMgd2l0aGluIHRoZSB2aWV3cG9ydCBoZWlnaHQgb3IgZXhjZWVkcyB2aWV3cG9ydCBoZWlnaHRcbiAgICBjcmVhdGVPYnNlcnZlcih0YXJnZXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICByb290OiBudWxsLFxuICAgICAgICAgICAgdGhyZXNob2xkOiAxLFxuICAgICAgICAgICAgb25jZTogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihjYWxsYmFjay5iaW5kKHRoaXMpLCBvcHRpb25zKTtcbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXQubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG59XG4iLCI8bGkgd21NZW51RHJvcGRvd25JdGVtICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zXCJcbiAgICBbaXRlbV09XCJpdGVtXCJcbiAgICBbbmdDbGFzc109XCJ7ZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWQsICdkcm9wZG93bi1zdWJtZW51JzogaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwfVwiXG4gICAgY2xhc3M9XCJ7e2l0ZW0uY2xhc3N9fVwiXG4gICAgcm9sZT1cIm1lbnVpdGVtXCI+XG48L2xpPlxuIl19
@@ -96,6 +96,7 @@ const WIDGET_CONFIG = { widgetType: 'wm-menu', hostClass: 'dropdown app-menu' };
96
96
  export class MenuComponent extends DatasetAwareNavComponent {
97
97
  static { this.initializeProps = registerProps(); }
98
98
  onShow() {
99
+ this._menuposition = this.menuposition;
99
100
  if (this._selectFirstItem) {
100
101
  setTimeout(() => {
101
102
  this.$element.find('> ul[wmmenudropdown] li.app-menu-item').first().find('> a').focus();
@@ -104,9 +105,11 @@ export class MenuComponent extends DatasetAwareNavComponent {
104
105
  $appDigest();
105
106
  }
106
107
  onHide() {
107
- this.$element.find('>.dropdown-toggle').focus();
108
108
  this.$element.find('li').removeClass('open');
109
109
  this._selectFirstItem = false;
110
+ // reset the menuposition when dropdown is closed
111
+ this.menuposition = this._menuposition ? this._menuposition : MENU_POSITION.DOWN_RIGHT;
112
+ this.setMenuPosition();
110
113
  $appDigest();
111
114
  }
112
115
  onKeyDown($event, eventAction) {
@@ -312,4 +315,4 @@ export class MenuComponent extends DatasetAwareNavComponent {
312
315
  type: HostListener,
313
316
  args: ['keydown.enter', ['$event', '"ENTER"']]
314
317
  }] }); })();
315
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvbmF2aWdhdGlvbi9tZW51L3NyYy9tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9uYXZpZ2F0aW9uL21lbnUvc3JjL21lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFFBQVEsRUFHUixRQUFRLEVBQ1IsSUFBSSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUV2QyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUUzRCxPQUFPLEVBQ0gsVUFBVSxFQUNWLFFBQVEsRUFDUixHQUFHLEVBQ0gsV0FBVyxFQUNYLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsMkJBQTJCLEVBQzlCLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFDSCxjQUFjLEVBQ2Qsd0JBQXdCLEVBQ3hCLG9CQUFvQixFQUNwQixrQkFBa0IsRUFDbEIsTUFBTSxFQUNULE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRWpELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7OztJQ2hDdkMsaUNBV3lDO0lBQ3JDLDBCQUFpRTtJQUNyRSxpQkFBUzs7O0lBUkQsa0ZBQW9EO0lBRHBELG1EQUFrQztJQVFKLGVBQXVCO0lBQXZCLHNFQUF1Qjs7O0lBSzdELG9CQUFzQyxjQUFBLFdBQUE7OztJQUFuQyw0REFBOEI7SUFDWCxlQUF1QjtJQUF2Qiw0Q0FBdUI7SUFDdkMsZUFBeUM7SUFBekMsdUVBQXlDOzs7SUFHbkQsNkJBQTJEO0lBQ3ZELDRCQWdCQztJQUNHLDBCQUFpRTtJQUNyRSxpQkFBSTtJQUNSLDBCQUFlOzs7SUFWUixlQUFxQztJQUFyQyxtRUFBcUM7SUFRRixlQUF1QjtJQUF2QixzRUFBdUI7OztJQUlqRSx3QkFBa0s7OztJQUF4RyxvRUFBc0M7SUFBN0Usb0NBQWUsOEJBQUE7O0FEUmxDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHO0lBQzlCLE9BQU8sRUFBRSxVQUFVO0lBQ25CLFNBQVMsRUFBRSxZQUFZO0lBQ3ZCLFVBQVUsRUFBRSxhQUFhO0lBQ3pCLFNBQVMsRUFBRSxZQUFZO0lBQ3ZCLFFBQVEsRUFBRSxPQUFPO0lBQ2pCLGNBQWMsRUFBRSxhQUFhO0lBQzdCLGNBQWMsRUFBRSxhQUFhO0lBQzdCLE1BQU0sRUFBRSxLQUFLO0lBQ2IsWUFBWSxFQUFFLFdBQVc7SUFDekIsU0FBUyxFQUFFLEtBQUs7Q0FDbkIsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRztJQUN6QixPQUFPLEVBQUUsU0FBUztJQUNsQixRQUFRLEVBQUUsVUFBVTtJQUNwQixTQUFTLEVBQUUsV0FBVztJQUN0QixVQUFVLEVBQUUsWUFBWTtJQUN4QixNQUFNLEVBQUUsUUFBUTtDQUNuQixDQUFDO0FBRUYsTUFBTSxRQUFRLEdBQUc7SUFDYixVQUFVLEVBQUUsWUFBWTtJQUN4QixTQUFTLEVBQUUsV0FBVztJQUN0QixRQUFRLEVBQUUsVUFBVTtJQUNwQixPQUFPLEVBQUUsU0FBUztJQUNsQixNQUFNLEVBQUUsUUFBUTtDQUNuQixDQUFDO0FBQ0YsTUFBTSxTQUFTLEdBQUc7SUFDZCxFQUFFLEVBQUUsYUFBYTtJQUNqQixJQUFJLEVBQUUsZUFBZTtDQUN4QixDQUFDO0FBQ0YsTUFBTSxRQUFRLEdBQUc7SUFDYixJQUFJLEVBQUUsV0FBVztJQUNqQixLQUFLLEVBQUUsWUFBWTtDQUN0QixDQUFDO0FBRUYsTUFBTSxTQUFTLEdBQUc7SUFDZCxLQUFLLEVBQUUsT0FBTztJQUNkLFdBQVcsRUFBRSxZQUFZO0lBQ3pCLE1BQU0sRUFBRSxRQUFRO0NBQ25CLENBQUM7QUFFRixNQUFNLGFBQWEsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLENBQUM7QUFRaEYsTUFBTSxPQUFPLGFBQWMsU0FBUSx3QkFBd0I7YUFDaEQsb0JBQWUsR0FBRyxhQUFhLEVBQUUsQ0FBQztJQXFCaEIsTUFBTTtRQUMzQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN2QixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNaLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHVDQUF1QyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzVGLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFDRCxVQUFVLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBQ3lCLE1BQU07UUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNoRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUM5QixVQUFVLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBUXFELFNBQVMsQ0FBQyxNQUFNLEVBQUUsV0FBVztRQUMvRSxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDbEQsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLGFBQWEsQ0FBQyxRQUFRLEVBQUU7WUFDOUMsYUFBYSxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUM7WUFDckMsYUFBYSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUM7U0FDeEM7YUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssYUFBYSxDQUFDLE9BQU8sRUFBRTtZQUNwRCxhQUFhLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztZQUNyQyxhQUFhLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQztZQUNyQyxhQUFhLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQztZQUN4QyxhQUFhLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQztTQUMzQzthQUFNLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxhQUFhLENBQUMsU0FBUyxFQUFFO1lBQ3RELGFBQWEsQ0FBQyxTQUFTLEdBQUcsYUFBYSxDQUFDO1lBQ3hDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDO1NBQzNDO1FBRUQsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsVUFBVSxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUU7WUFDOUUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO2dCQUN6QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO2dCQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO2FBQzFCO2lCQUFNO2dCQUNILElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHVDQUF1QyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQzNGO1NBQ0o7YUFBTSxJQUFJLFdBQVcsS0FBSyxhQUFhLENBQUMsUUFBUSxJQUFJLENBQUMsV0FBVyxLQUFLLGFBQWEsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ3JILElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2hDO2FBQU0sSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUssYUFBYSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUMvSyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQzFCO1FBQ0QsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxZQUNJLEdBQWEsRUFDTixLQUFhLEVBQ1osMkJBQXdELEVBQ3hELEdBQVEsRUFDVyxVQUErQixFQUN0QyxTQUF1QixFQUNULGFBQXFCO1FBRXZELEtBQUssQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFQbkIsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNaLGdDQUEyQixHQUEzQiwyQkFBMkIsQ0FBNkI7UUFDeEQsUUFBRyxHQUFILEdBQUcsQ0FBSztRQUNXLGVBQVUsR0FBVixVQUFVLENBQXFCO1FBQ3RDLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFDVCxrQkFBYSxHQUFiLGFBQWEsQ0FBUTtRQS9EbkQsY0FBUyxHQUFHLGVBQWUsQ0FBQztRQUM1QixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFpRTdCLElBQUksU0FBUyxFQUFFO1lBQ1gsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUM7U0FDNUQ7YUFBTTtZQUNILElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDO1NBQzdDO1FBQ0QsaUNBQWlDO1FBQ2pDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ25ELElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDeEIsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ2xELFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQztpQkFDM0Y7Z0JBQ0QsZ0lBQWdJO2dCQUNoSSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7b0JBQ2hCLE9BQU87aUJBQ1Y7Z0JBQ0QsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUN0QixNQUFNLE9BQU8sR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUN0QixDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO3dCQUN0QixJQUFJLFNBQVMsRUFBRTs0QkFDWCxPQUFPO3lCQUNWO3dCQUNELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTs0QkFDZixTQUFTLEdBQUcsSUFBSSxDQUFDOzRCQUNqQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDOzRCQUNuRCxpREFBaUQ7NEJBQ2pELGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzs0QkFDOUIsT0FBTyxLQUFLLENBQUM7eUJBQ2hCO3dCQUNELElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTs0QkFDM0IsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzt5QkFDMUI7b0JBRUwsQ0FBQyxDQUFDLENBQUM7Z0JBQ1AsQ0FBQyxDQUFDO2dCQUNGLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDdkI7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBRTFFLENBQUM7SUFFUyxVQUFVO1FBQ2hCLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNuQix5R0FBeUc7UUFDekcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLFdBQVcsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxNQUFNLEVBQUU7WUFDckksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUMxQjtJQUNMLENBQUM7SUFFRCxRQUFRO1FBQ0osS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV2QixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLHFCQUFxQixFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDMUUsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFnQixFQUFFLFFBQVEsRUFBRSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFFLENBQUMsQ0FBQztRQUNsSixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELGdCQUFnQixDQUFDLEdBQVcsRUFBRSxFQUFPLEVBQUUsRUFBUTtRQUUzQyxJQUFJLEdBQUcsS0FBSyxVQUFVLEVBQUU7WUFDcEIsT0FBTztTQUNWO1FBRUQsSUFBSSxHQUFHLEtBQUssV0FBVyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxHQUFHLEVBQUUsS0FBSyxjQUFjLENBQUMsUUFBUSxDQUFDO1lBQzNELElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1NBQ3ZCO2FBQU07WUFDSCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUN2QztJQUNMLENBQUM7SUFFTyxlQUFlO1FBQ25CLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUN2QixLQUFLLFFBQVEsQ0FBQyxVQUFVO2dCQUNwQixXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2hDLE1BQU07WUFDVixLQUFLLFFBQVEsQ0FBQyxTQUFTO2dCQUNuQixXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2hDLE1BQU07WUFDVixLQUFLLFFBQVEsQ0FBQyxPQUFPO2dCQUNqQixRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLE1BQU07WUFDVixLQUFLLFFBQVEsQ0FBQyxRQUFRO2dCQUNsQixRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLE1BQU07WUFDVixLQUFLLFFBQVEsQ0FBQyxNQUFNO2dCQUNoQixJQUFJLENBQUMsU0FBUyxHQUFHLGlCQUFpQixDQUFDO2dCQUNuQyxNQUFNO1NBQ2I7SUFDTCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsSUFBSTtRQUN4QixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsZUFBZTtRQUNYLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdEYsQ0FBQzs4RUFqTVEsYUFBYSwyUUFnRlAsY0FBYztvRUFoRnBCLGFBQWE7a0dBQWIsWUFBUSwrRUFBUixZQUFRLG1HQUFSLHNCQUFpQixVQUFVLENBQUMseUZBQTVCLHNCQUFpQixhQUFhLENBQUMseUZBQS9CLHNCQUFpQixhQUFhLENBQUMsdUdBQS9CLHNCQUFpQixZQUFZLENBQUMseUdBQTlCLHNCQUFpQixhQUFhLENBQUMsdUdBQS9CLHNCQUFpQixZQUFZLENBQUMsK0ZBQTlCLHNCQUFpQixPQUFPLENBQUM7OENBSnZCO2dCQUNQLGtCQUFrQixDQUFDLGFBQWEsQ0FBQzthQUNwQztZQ3RGTCwrR0FlYztZQUVkLCtHQUljO1lBRWQsZ0ZBb0JlO1lBRWYsNERBQWtLOzs7WUF0Qm5KLGVBQXlCO1lBQXpCLDRDQUF5QixpQkFBQTs7O3VGRGlFM0IsYUFBYTtjQVB6QixTQUFTOzJCQUNJLFVBQVUsYUFFVDtvQkFDUCxrQkFBa0IsZUFBZTtpQkFDcEM7O3NCQWdGSSxJQUFJOztzQkFBSSxRQUFROztzQkFDaEIsUUFBUTs7c0JBQ1IsU0FBUzt1QkFBQyxjQUFjO3dCQTFESixNQUFNO2tCQUE5QixZQUFZO21CQUFDLFNBQVM7WUFRRyxNQUFNO2tCQUEvQixZQUFZO21CQUFDLFVBQVU7WUFhOEIsU0FBUztrQkFOOUQsWUFBWTttQkFBQyxpQkFBaUIsRUFBRSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUM7O2tCQUN4RCxZQUFZO21CQUFDLFlBQVksRUFBRSxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUM7O2tCQUN0RCxZQUFZO21CQUFDLFlBQVksRUFBRSxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUM7O2tCQUN0RCxZQUFZO21CQUFDLG1CQUFtQixFQUFFLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQzs7a0JBQzVELFlBQVk7bUJBQUMsb0JBQW9CLEVBQUUsQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDOztrQkFDOUQsWUFBWTttQkFBQyxtQkFBbUIsRUFBRSxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUM7O2tCQUM1RCxZQUFZO21CQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQXR0cmlidXRlLFxuICAgIENvbXBvbmVudCxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0b3IsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBTZWxmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7QnNEcm9wZG93bkRpcmVjdGl2ZX0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kcm9wZG93bic7XG5cbmltcG9ydCB7XG4gICAgJGFwcERpZ2VzdCxcbiAgICBhZGRDbGFzcyxcbiAgICBBcHAsXG4gICAgcmVtb3ZlQ2xhc3MsXG4gICAgdG9nZ2xlQ2xhc3MsXG4gICAgdHJpZ2dlckl0ZW1BY3Rpb24sXG4gICAgVXNlckRlZmluZWRFeGVjdXRpb25Db250ZXh0XG59IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7XG4gICAgQVVUT0NMT1NFX1RZUEUsXG4gICAgRGF0YXNldEF3YXJlTmF2Q29tcG9uZW50LFxuICAgIGhhc0xpbmtUb0N1cnJlbnRQYWdlLFxuICAgIHByb3ZpZGVBc1dpZGdldFJlZixcbiAgICBzdHlsZXJcbn0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5pbXBvcnQge05hdkNvbXBvbmVudH0gZnJvbSAnLi9uYXYvbmF2LmNvbXBvbmVudCc7XG5cbmltcG9ydCB7cmVnaXN0ZXJQcm9wc30gZnJvbSAnLi9tZW51LnByb3BzJztcblxuZGVjbGFyZSBjb25zdCBfO1xuXG5leHBvcnQgY29uc3QgS0VZQk9BUkRfTU9WRU1FTlRTID0ge1xuICAgIE1PVkVfVVA6ICdVUC1BUlJPVycsXG4gICAgTU9WRV9MRUZUOiAnTEVGVC1BUlJPVycsXG4gICAgTU9WRV9SSUdIVDogJ1JJR0hULUFSUk9XJyxcbiAgICBNT1ZFX0RPV046ICdET1dOLUFSUk9XJyxcbiAgICBPTl9FTlRFUjogJ0VOVEVSJyxcbiAgICBPTl9NT1VTRV9FTlRFUjogJ01PVVNFLUVOVEVSJyxcbiAgICBPTl9NT1VTRV9MRUFWRTogJ01PVVNFLUxFQVZFJyxcbiAgICBPTl9UQUI6ICdUQUInLFxuICAgIE9OX1NISUZUX1RBQjogJ1NISUZULVRBQicsXG4gICAgT05fRVNDQVBFOiAnRVNDJ1xufTtcblxuZXhwb3J0IGNvbnN0IE1FTlVfUE9TSVRJT04gPSB7XG4gICAgVVBfTEVGVDogJ3VwLGxlZnQnLFxuICAgIFVQX1JJR0hUOiAndXAscmlnaHQnLFxuICAgIERPV05fTEVGVDogJ2Rvd24sbGVmdCcsXG4gICAgRE9XTl9SSUdIVDogJ2Rvd24scmlnaHQnLFxuICAgIElOTElORTogJ2lubGluZSdcbn07XG5cbmNvbnN0IFBPU0lUSU9OID0ge1xuICAgIERPV05fUklHSFQ6ICdkb3duLHJpZ2h0JyxcbiAgICBET1dOX0xFRlQ6ICdkb3duLGxlZnQnLFxuICAgIFVQX1JJR0hUOiAndXAscmlnaHQnLFxuICAgIFVQX0xFRlQ6ICd1cCxsZWZ0JyxcbiAgICBJTkxJTkU6ICdpbmxpbmUnXG59O1xuY29uc3QgQ0FSRVRfQ0xTID0ge1xuICAgIFVQOiAnZmEtY2FyZXQtdXAnLFxuICAgIERPV046ICdmYS1jYXJldC1kb3duJ1xufTtcbmNvbnN0IFBVTExfQ0xTID0ge1xuICAgIExFRlQ6ICdwdWxsLWxlZnQnLFxuICAgIFJJR0hUOiAncHVsbC1yaWdodCdcbn07XG5cbmNvbnN0IEFVVE9fT1BFTiA9IHtcbiAgICBORVZFUjogJ25ldmVyJyxcbiAgICBBQ1RJVkVfUEFHRTogJ2FjdGl2ZXBhZ2UnLFxuICAgIEFMV0FZUzogJ2Fsd2F5cydcbn07XG5cbmNvbnN0IFdJREdFVF9DT05GSUcgPSB7IHdpZGdldFR5cGU6ICd3bS1tZW51JywgaG9zdENsYXNzOiAnZHJvcGRvd24gYXBwLW1lbnUnIH07XG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ1t3bU1lbnVdJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWVudS5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVBc1dpZGdldFJlZihNZW51Q29tcG9uZW50KVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTWVudUNvbXBvbmVudCBleHRlbmRzIERhdGFzZXRBd2FyZU5hdkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgICBzdGF0aWMgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJQcm9wcygpO1xuXG4gICAgcHVibGljIG1lbnVhbGlnbjogc3RyaW5nO1xuICAgIHB1YmxpYyBtZW51cG9zaXRpb246IHN0cmluZztcbiAgICBwdWJsaWMgbWVudWxheW91dDogc3RyaW5nO1xuICAgIHB1YmxpYyBtZW51Y2xhc3M6IHN0cmluZztcbiAgICBwdWJsaWMgbGlua3RhcmdldDogc3RyaW5nO1xuICAgIHB1YmxpYyBpY29uY2xhc3M6IHN0cmluZztcbiAgICBwdWJsaWMgYW5pbWF0ZWl0ZW1zOiBzdHJpbmc7XG4gICAgcHVibGljIGRpc2FibGVNZW51Q29udGV4dDogYm9vbGVhbjtcbiAgICBwdWJsaWMgc2hvd29uaG92ZXI6IGJvb2xlYW47XG4gICAgcHVibGljIGF1dG9jbG9zZTogc3RyaW5nO1xuICAgIHB1YmxpYyBhdXRvb3Blbjogc3RyaW5nO1xuICAgIHB1YmxpYyBoaW50OiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIGl0ZW1BY3Rpb25GbjogRnVuY3Rpb247XG4gICAgcHJpdmF0ZSBtZW51Q2FyZXQgPSAnZmEtY2FyZXQtZG93bic7XG4gICAgcHJpdmF0ZSBfc2VsZWN0Rmlyc3RJdGVtID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgdHlwZTogYW55O1xuXG4gICAgQEhvc3RMaXN0ZW5lcignb25TaG93bicpIG9uU2hvdygpIHtcbiAgICAgICAgaWYgKHRoaXMuX3NlbGVjdEZpcnN0SXRlbSkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5maW5kKCc+IHVsW3dtbWVudWRyb3Bkb3duXSBsaS5hcHAtbWVudS1pdGVtJykuZmlyc3QoKS5maW5kKCc+IGEnKS5mb2N1cygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgJGFwcERpZ2VzdCgpO1xuICAgIH1cbiAgICBASG9zdExpc3RlbmVyKCdvbkhpZGRlbicpIG9uSGlkZSgpIHtcbiAgICAgICAgdGhpcy4kZWxlbWVudC5maW5kKCc+LmRyb3Bkb3duLXRvZ2dsZScpLmZvY3VzKCk7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnbGknKS5yZW1vdmVDbGFzcygnb3BlbicpO1xuICAgICAgICB0aGlzLl9zZWxlY3RGaXJzdEl0ZW0gPSBmYWxzZTtcbiAgICAgICAgJGFwcERpZ2VzdCgpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uYXJyb3d1cCcsIFsnJGV2ZW50JywgJ1wiVVAtQVJST1dcIiddKVxuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlZW50ZXInLCBbJyRldmVudCcsICdcIk1PVVNFLUVOVEVSXCInXSlcbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWxlYXZlJywgWyckZXZlbnQnLCAnXCJNT1VTRS1MRUFWRVwiJ10pXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd2Rvd24nLCBbJyRldmVudCcsICdcIkRPV04tQVJST1dcIiddKVxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uYXJyb3dyaWdodCcsIFsnJGV2ZW50JywgJ1wiUklHSFQtQVJST1dcIiddKVxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uYXJyb3dsZWZ0JywgWyckZXZlbnQnLCAnXCJMRUZULUFSUk9XXCInXSlcbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmVudGVyJywgWyckZXZlbnQnLCAnXCJFTlRFUlwiJ10pIG9uS2V5RG93bigkZXZlbnQsIGV2ZW50QWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IEtFWV9NT1ZFTUVOVFMgPSBfLmNsb25lKEtFWUJPQVJEX01PVkVNRU5UUyk7XG4gICAgICAgIGlmICh0aGlzLm1lbnVwb3NpdGlvbiA9PT0gTUVOVV9QT1NJVElPTi5VUF9SSUdIVCkge1xuICAgICAgICAgICAgS0VZX01PVkVNRU5UUy5NT1ZFX1VQID0gJ0RPV04tQVJST1cnO1xuICAgICAgICAgICAgS0VZX01PVkVNRU5UUy5NT1ZFX0RPV04gPSAnVVAtQVJST1cnO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubWVudXBvc2l0aW9uID09PSBNRU5VX1BPU0lUSU9OLlVQX0xFRlQpIHtcbiAgICAgICAgICAgIEtFWV9NT1ZFTUVOVFMuTU9WRV9VUCA9ICdET1dOLUFSUk9XJztcbiAgICAgICAgICAgIEtFWV9NT1ZFTUVOVFMuTU9WRV9ET1dOID0gJ1VQLUFSUk9XJztcbiAgICAgICAgICAgIEtFWV9NT1ZFTUVOVFMuTU9WRV9MRUZUID0gJ1JJR0hULUFSUk9XJztcbiAgICAgICAgICAgIEtFWV9NT1ZFTUVOVFMuTU9WRV9SSUdIVCA9ICdMRUZULUFSUk9XJztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1lbnVwb3NpdGlvbiA9PT0gTUVOVV9QT1NJVElPTi5ET1dOX0xFRlQpIHtcbiAgICAgICAgICAgIEtFWV9NT1ZFTUVOVFMuTU9WRV9MRUZUID0gJ1JJR0hULUFSUk9XJztcbiAgICAgICAgICAgIEtFWV9NT1ZFTUVOVFMuTU9WRV9SSUdIVCA9ICdMRUZULUFSUk9XJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfLmluY2x1ZGVzKFtLRVlfTU9WRU1FTlRTLk1PVkVfRE9XTiwgS0VZX01PVkVNRU5UUy5NT1ZFX1JJR0hUXSwgZXZlbnRBY3Rpb24pKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYnNEcm9wZG93bi5pc09wZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RGaXJzdEl0ZW0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuYnNEcm9wZG93bi5zaG93KCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnPiB1bFt3bW1lbnVkcm9wZG93bl0gbGkuYXBwLW1lbnUtaXRlbScpLmZpcnN0KCkuZmluZCgnPiBhJykuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChldmVudEFjdGlvbiA9PT0gS0VZX01PVkVNRU5UUy5PTl9FTlRFUiB8fCAoZXZlbnRBY3Rpb24gPT09IEtFWV9NT1ZFTUVOVFMuT05fTU9VU0VfRU5URVIgJiYgdGhpcy5zaG93b25ob3ZlcikpIHtcbiAgICAgICAgICAgIHRoaXMuYnNEcm9wZG93bi50b2dnbGUodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoXy5pbmNsdWRlcyhbS0VZX01PVkVNRU5UUy5NT1ZFX1VQLCBLRVlfTU9WRU1FTlRTLk1PVkVfTEVGVF0sIGV2ZW50QWN0aW9uKSB8fCAoZXZlbnRBY3Rpb24gPT0gIEtFWV9NT1ZFTUVOVFMuT05fTU9VU0VfTEVBVkUgJiYgdGhpcy5hdXRvY2xvc2UgPT0gQVVUT0NMT1NFX1RZUEUuQUxXQVlTKSkge1xuICAgICAgICAgICAgdGhpcy5ic0Ryb3Bkb3duLmhpZGUoKTtcbiAgICAgICAgfVxuICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qOiBJbmplY3RvcixcbiAgICAgICAgcHVibGljIHJvdXRlOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgdXNlckRlZmluZWRFeGVjdXRpb25Db250ZXh0OiBVc2VyRGVmaW5lZEV4ZWN1dGlvbkNvbnRleHQsXG4gICAgICAgIHByaXZhdGUgYXBwOiBBcHAsXG4gICAgICAgIEBTZWxmKCkgQE9wdGlvbmFsKCkgcHVibGljIGJzRHJvcGRvd246IEJzRHJvcGRvd25EaXJlY3RpdmUsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcGFyZW50TmF2OiBOYXZDb21wb25lbnQsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ3NlbGVjdC5ldmVudCcpIHB1YmxpYyBzZWxlY3RFdmVudENCOiBzdHJpbmdcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHKTtcbiAgICAgICAgaWYgKHBhcmVudE5hdikge1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlTWVudUNvbnRleHQgPSAhIXBhcmVudE5hdi5kaXNhYmxlTWVudUNvbnRleHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVNZW51Q29udGV4dCA9ICEhc2VsZWN0RXZlbnRDQjtcbiAgICAgICAgfVxuICAgICAgICAvLyBGb3Igc2VsZWN0aW5nIHRoZSBpdGVtIG9uIGxvYWRcbiAgICAgICAgY29uc3QgZGF0YXNldFN1YnNjcmlwdGlvbiA9IHRoaXMubm9kZXMkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLm5vZGVzKSkge1xuICAgICAgICAgICAgICAgIGlmIChoYXNMaW5rVG9DdXJyZW50UGFnZSh0aGlzLm5vZGVzLCB0aGlzLnJvdXRlLnVybCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kcm9wZG93bi10b2dnbGUnKSBhcyBIVE1MRWxlbWVudCwgJ2FjdGl2ZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBJZiBtZW51IHdpZGdldCBpcyBpbnNpZGUgbmF2IHdpZGdldCB0aGVuIGRvbnQgY2hlY2sgZm9yIGl0ZW0gaXNhY3RpdmUgcHJvcGVydHkgYmVjYXVzZSB0aGVzZSB3aWxsIGJlIGhhbmRsZWQgZm9ybSBuYXYgd2lkZ2V0LlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudE5hdikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBpdGVtRm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb25zdCBnZXRJdGVtID0gKG5vZGVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIF8uZm9yRWFjaChub2RlcywgKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtRm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5pc2FjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1Gb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk1lbnVJdGVtU2VsZWN0KHsgJGV2ZW50OiB7fSwgJGl0ZW06IGl0ZW0gfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJpZ2dlciB0aGUgYWN0aW9uIGFzc29jaWF0ZWQgd2l0aCBhY3RpdmUgaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJJdGVtQWN0aW9uKHRoaXMsIGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghXy5pc0VtcHR5KGl0ZW0uY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SXRlbShpdGVtLmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGdldEl0ZW0odGhpcy5ub2Rlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCgpID0+IGRhdGFzZXRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG5cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzZXROb2RlcygpIHtcbiAgICAgICAgc3VwZXIucmVzZXROb2RlcygpO1xuICAgICAgICAvLyBvcGVuIHRoZSBtZW51IGlmIGFueSBvZiBpdHMgbWVudSBpdGVtcyBoYXMgbGluayB0byBjdXJyZW50IHBhZ2UgYW5kIGlmIGF1dG9vcGVuIHZhbHVlIGlzICdhY3RpdmUgcGFnZSdcbiAgICAgICAgaWYgKCh0aGlzLmF1dG9vcGVuID09PSBBVVRPX09QRU4uQUNUSVZFX1BBR0UgJiYgaGFzTGlua1RvQ3VycmVudFBhZ2UodGhpcy5ub2RlcywgdGhpcy5yb3V0ZS51cmwpKSB8fCB0aGlzLmF1dG9vcGVuID09PSBBVVRPX09QRU4uQUxXQVlTKSB7XG4gICAgICAgICAgICB0aGlzLmJzRHJvcGRvd24uc2hvdygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMuc2V0TWVudVBvc2l0aW9uKCk7XG5cbiAgICAgICAgY29uc3QgY2FuY2VsU3Vic2NyaXB0aW9uID0gdGhpcy5hcHAuc3Vic2NyaWJlKFwiaGlnaGxpZ2h0QWN0aXZlTGlua1wiLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgdG9nZ2xlQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kcm9wZG93bi10b2dnbGUnKSBhcyBIVE1MRWxlbWVudCwgJ2FjdGl2ZScsIGhhc0xpbmtUb0N1cnJlbnRQYWdlKHRoaXMubm9kZXMsIHRoaXMucm91dGUudXJsICkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigoKSA9PiBjYW5jZWxTdWJzY3JpcHRpb24oKSk7XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXk6IHN0cmluZywgbnY6IGFueSwgb3Y/OiBhbnkpIHtcblxuICAgICAgICBpZiAoa2V5ID09PSAndGFiaW5kZXgnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5ID09PSAnYXV0b2Nsb3NlJykge1xuICAgICAgICAgICAgdGhpcy5ic0Ryb3Bkb3duLmF1dG9DbG9zZSA9IG52ICE9PSBBVVRPQ0xPU0VfVFlQRS5ESVNBQkxFRDtcbiAgICAgICAgICAgIHRoaXMuYXV0b2Nsb3NlID0gbnY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0TWVudVBvc2l0aW9uKCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMubWVudXBvc2l0aW9uKSB7XG4gICAgICAgICAgICBjYXNlIFBPU0lUSU9OLkRPV05fUklHSFQ6XG4gICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCAnZHJvcHVwJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZW51YWxpZ24gPSBQVUxMX0NMUy5MRUZUO1xuICAgICAgICAgICAgICAgIHRoaXMubWVudUNhcmV0ID0gQ0FSRVRfQ0xTLkRPV047XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBPU0lUSU9OLkRPV05fTEVGVDpcbiAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQsICdkcm9wdXAnKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnVhbGlnbiA9IFBVTExfQ0xTLlJJR0hUO1xuICAgICAgICAgICAgICAgIHRoaXMubWVudUNhcmV0ID0gQ0FSRVRfQ0xTLkRPV047XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBPU0lUSU9OLlVQX0xFRlQ6XG4gICAgICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCAnZHJvcHVwJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZW51YWxpZ24gPSBQVUxMX0NMUy5SSUdIVDtcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnVDYXJldCA9IENBUkVUX0NMUy5VUDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUE9TSVRJT04uVVBfUklHSFQ6XG4gICAgICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCAnZHJvcHVwJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZW51YWxpZ24gPSBQVUxMX0NMUy5MRUZUO1xuICAgICAgICAgICAgICAgIHRoaXMubWVudUNhcmV0ID0gQ0FSRVRfQ0xTLlVQO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBQT1NJVElPTi5JTkxJTkU6XG4gICAgICAgICAgICAgICAgdGhpcy5tZW51YWxpZ24gPSAnZHJvcGlubGluZS1tZW51JztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbk1lbnVJdGVtU2VsZWN0KGFyZ3MpIHtcbiAgICAgICAgY29uc3QgeyAkZXZlbnQgfSA9IGFyZ3M7XG4gICAgICAgIGNvbnN0ICRpdGVtID0gYXJncy4kaXRlbS52YWx1ZTtcbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzZWxlY3QnLCB7ICRldmVudCwgJGl0ZW0gfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgc3R5bGVyKHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZHJvcGRvd24tdG9nZ2xlJykgYXMgSFRNTEVsZW1lbnQsIHRoaXMpO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjbWVudVRlbXBsYXRlPlxuICAgIDxidXR0b24gd21CdXR0b25cbiAgICAgICAgICAgIGRyb3Bkb3duVG9nZ2xlXG4gICAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXG4gICAgICAgICAgICBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJoaW50IHx8ICdNZW51J1wiXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBhcHAtYnV0dG9uIGRyb3Bkb3duLXRvZ2dsZSB7e21lbnVjbGFzc319XCJcbiAgICAgICAgICAgIGhpbnQuYmluZD1cImhpbnRcIlxuICAgICAgICAgICAgc2hvcnRjdXRrZXkuYmluZD1cInNob3J0Y3V0a2V5XCJcbiAgICAgICAgICAgIHRhYmluZGV4LmJpbmQ9XCJ0YWJpbmRleFwiXG4gICAgICAgICAgICBjYXB0aW9uLmJpbmQ9XCJjYXB0aW9uXCJcbiAgICAgICAgICAgIGljb25jbGFzcy5iaW5kPVwiaWNvbmNsYXNzXCJcbiAgICAgICAgICAgIGljb25wb3NpdGlvbi5iaW5kPVwiaWNvbnBvc2l0aW9uXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwicHVsbC1yaWdodCBjYXJldCBmYVwiIFtuZ0NsYXNzXT1cIlttZW51Q2FyZXRdXCI+PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpbm5lclRlbXBsYXRlPlxuICAgIDxpIGNsYXNzPVwiYXBwLWljb24ge3tpY29uY2xhc3N9fVwiPjwvaT5cbiAgICA8c3BhbiBjbGFzcz1cImNhcHRpb25cIiBbdGV4dENvbnRlbnRdPVwiY2FwdGlvblwiPjwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz1cInB1bGwtcmlnaHQgY2FyZXQgZmEge3ttZW51Q2FyZXR9fVwiPjwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJ0eXBlID09PSAnYW5jaG9yJzsgZWxzZSBtZW51VGVtcGxhdGVcIj5cbiAgICA8YSB3bUFuY2hvclxuICAgICAgIGRyb3Bkb3duVG9nZ2xlXG5cbiAgICAgICBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiXG4gICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXG5cbiAgICAgICBoaW50LmJpbmQ9XCJoaW50XCJcbiAgICAgICBjbGFzcz1cImRyb3Bkb3duLXRvZ2dsZSB7e21lbnVjbGFzc319XCJcbiAgICAgICBzaG9ydGN1dGtleS5iaW5kPVwic2hvcnRjdXRrZXlcIlxuICAgICAgIHRhYmluZGV4LmJpbmQ9XCJ0YWJpbmRleFwiXG4gICAgICAgY2FwdGlvbi5iaW5kPVwiY2FwdGlvblwiXG4gICAgICAgaWNvbmNsYXNzLmJpbmQ9XCJpY29uY2xhc3NcIlxuICAgICAgIGljb25wb3NpdGlvbi5iaW5kPVwiaWNvbnBvc2l0aW9uXCJcbiAgICAgICBiYWRnZXZhbHVlLmJpbmQ9XCJiYWRnZXZhbHVlXCJcbiAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwicHVsbC1yaWdodCBjYXJldCBmYVwiIFtuZ0NsYXNzXT1cIlttZW51Q2FyZXRdXCI+PC9zcGFuPlxuICAgIDwvYT5cbjwvbmctY29udGFpbmVyPlxuXG48dWwgd21NZW51RHJvcGRvd24gW2l0ZW1zXT1cIm5vZGVzXCIgW25nQ2xhc3NdPVwibWVudWxheW91dFwiIGNsYXNzPVwiaWNvbi1wb3NpdGlvbi17e2ljb25wb3NpdGlvbn19XCIgKmRyb3Bkb3duTWVudSBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93bm1lbnVcIiByb2xlPVwibWVudWJhclwiPjwvdWw+XG4iXX0=
318
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvbmF2aWdhdGlvbi9tZW51L3NyYy9tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9uYXZpZ2F0aW9uL21lbnUvc3JjL21lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFFBQVEsRUFHUixRQUFRLEVBQ1IsSUFBSSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUV2QyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUUzRCxPQUFPLEVBQ0gsVUFBVSxFQUNWLFFBQVEsRUFDUixHQUFHLEVBQ0gsV0FBVyxFQUNYLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsMkJBQTJCLEVBQzlCLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFDSCxjQUFjLEVBQ2Qsd0JBQXdCLEVBQ3hCLG9CQUFvQixFQUNwQixrQkFBa0IsRUFDbEIsTUFBTSxFQUNULE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRWpELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7OztJQ2hDdkMsaUNBV3lDO0lBQ3JDLDBCQUFpRTtJQUNyRSxpQkFBUzs7O0lBUkQsa0ZBQW9EO0lBRHBELG1EQUFrQztJQVFKLGVBQXVCO0lBQXZCLHNFQUF1Qjs7O0lBSzdELG9CQUFzQyxjQUFBLFdBQUE7OztJQUFuQyw0REFBOEI7SUFDWCxlQUF1QjtJQUF2Qiw0Q0FBdUI7SUFDdkMsZUFBeUM7SUFBekMs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QTlCLFlBQVk7bUJBQUMsU0FBUztZQVNHLE1BQU07a0JBQS9CLFlBQVk7bUJBQUMsVUFBVTtZQWU4QixTQUFTO2tCQU45RCxZQUFZO21CQUFDLGlCQUFpQixFQUFFLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQzs7a0JBQ3hELFlBQVk7bUJBQUMsWUFBWSxFQUFFLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQzs7a0JBQ3RELFlBQVk7bUJBQUMsWUFBWSxFQUFFLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQzs7a0JBQ3RELFlBQVk7bUJBQUMsbUJBQW1CLEVBQUUsQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDOztrQkFDNUQsWUFBWTttQkFBQyxvQkFBb0IsRUFBRSxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUM7O2tCQUM5RCxZQUFZO21CQUFDLG1CQUFtQixFQUFFLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQzs7a0JBQzVELFlBQVk7bUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBBdHRyaWJ1dGUsXG4gICAgQ29tcG9uZW50LFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbmplY3RvcixcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIFNlbGZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtCc0Ryb3Bkb3duRGlyZWN0aXZlfSBmcm9tICduZ3gtYm9vdHN0cmFwL2Ryb3Bkb3duJztcblxuaW1wb3J0IHtcbiAgICAkYXBwRGlnZXN0LFxuICAgIGFkZENsYXNzLFxuICAgIEFwcCxcbiAgICByZW1vdmVDbGFzcyxcbiAgICB0b2dnbGVDbGFzcyxcbiAgICB0cmlnZ2VySXRlbUFjdGlvbixcbiAgICBVc2VyRGVmaW5lZEV4ZWN1dGlvbkNvbnRleHRcbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBVVRPQ0xPU0VfVFlQRSxcbiAgICBEYXRhc2V0QXdhcmVOYXZDb21wb25lbnQsXG4gICAgaGFzTGlua1RvQ3VycmVudFBhZ2UsXG4gICAgcHJvdmlkZUFzV2lkZ2V0UmVmLFxuICAgIHN0eWxlclxufSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcbmltcG9ydCB7TmF2Q29tcG9uZW50fSBmcm9tICcuL25hdi9uYXYuY29tcG9uZW50JztcblxuaW1wb3J0IHtyZWdpc3RlclByb3BzfSBmcm9tICcuL21lbnUucHJvcHMnO1xuXG5kZWNsYXJlIGNvbnN0IF87XG5cbmV4cG9ydCBjb25zdCBLRVlCT0FSRF9NT1ZFTUVOVFMgPSB7XG4gICAgTU9WRV9VUDogJ1VQLUFSUk9XJyxcbiAgICBNT1ZFX0xFRlQ6ICdMRUZULUFSUk9XJyxcbiAgICBNT1ZFX1JJR0hUOiAnUklHSFQtQVJST1cnLFxuICAgIE1PVkVfRE9XTjogJ0RPV04tQVJST1cnLFxuICAgIE9OX0VOVEVSOiAnRU5URVInLFxuICAgIE9OX01PVVNFX0VOVEVSOiAnTU9VU0UtRU5URVInLFxuICAgIE9OX01PVVNFX0xFQVZFOiAnTU9VU0UtTEVBVkUnLFxuICAgIE9OX1RBQjogJ1RBQicsXG4gICAgT05fU0hJRlRfVEFCOiAnU0hJRlQtVEFCJyxcbiAgICBPTl9FU0NBUEU6ICdFU0MnXG59O1xuXG5leHBvcnQgY29uc3QgTUVOVV9QT1NJVElPTiA9IHtcbiAgICBVUF9MRUZUOiAndXAsbGVmdCcsXG4gICAgVVBfUklHSFQ6ICd1cCxyaWdodCcsXG4gICAgRE9XTl9MRUZUOiAnZG93bixsZWZ0JyxcbiAgICBET1dOX1JJR0hUOiAnZG93bixyaWdodCcsXG4gICAgSU5MSU5FOiAnaW5saW5lJ1xufTtcblxuY29uc3QgUE9TSVRJT04gPSB7XG4gICAgRE9XTl9SSUdIVDogJ2Rvd24scmlnaHQnLFxuICAgIERPV05fTEVGVDogJ2Rvd24sbGVmdCcsXG4gICAgVVBfUklHSFQ6ICd1cCxyaWdodCcsXG4gICAgVVBfTEVGVDogJ3VwLGxlZnQnLFxuICAgIElOTElORTogJ2lubGluZSdcbn07XG5jb25zdCBDQVJFVF9DTFMgPSB7XG4gICAgVVA6ICdmYS1jYXJldC11cCcsXG4gICAgRE9XTjogJ2ZhLWNhcmV0LWRvd24nXG59O1xuY29uc3QgUFVMTF9DTFMgPSB7XG4gICAgTEVGVDogJ3B1bGwtbGVmdCcsXG4gICAgUklHSFQ6ICdwdWxsLXJpZ2h0J1xufTtcblxuY29uc3QgQVVUT19PUEVOID0ge1xuICAgIE5FVkVSOiAnbmV2ZXInLFxuICAgIEFDVElWRV9QQUdFOiAnYWN0aXZlcGFnZScsXG4gICAgQUxXQVlTOiAnYWx3YXlzJ1xufTtcblxuY29uc3QgV0lER0VUX0NPTkZJRyA9IHsgd2lkZ2V0VHlwZTogJ3dtLW1lbnUnLCBob3N0Q2xhc3M6ICdkcm9wZG93biBhcHAtbWVudScgfTtcbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnW3dtTWVudV0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzV2lkZ2V0UmVmKE1lbnVDb21wb25lbnQpXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBNZW51Q29tcG9uZW50IGV4dGVuZHMgRGF0YXNldEF3YXJlTmF2Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICAgIHN0YXRpYyBpbml0aWFsaXplUHJvcHMgPSByZWdpc3RlclByb3BzKCk7XG5cbiAgICBwdWJsaWMgbWVudWFsaWduOiBzdHJpbmc7XG4gICAgcHVibGljIG1lbnVwb3NpdGlvbjogc3RyaW5nO1xuICAgIHB1YmxpYyBtZW51bGF5b3V0OiBzdHJpbmc7XG4gICAgcHVibGljIG1lbnVjbGFzczogc3RyaW5nO1xuICAgIHB1YmxpYyBsaW5rdGFyZ2V0OiBzdHJpbmc7XG4gICAgcHVibGljIGljb25jbGFzczogc3RyaW5nO1xuICAgIHB1YmxpYyBhbmltYXRlaXRlbXM6IHN0cmluZztcbiAgICBwdWJsaWMgZGlzYWJsZU1lbnVDb250ZXh0OiBib29sZWFuO1xuICAgIHB1YmxpYyBzaG93b25ob3ZlcjogYm9vbGVhbjtcbiAgICBwdWJsaWMgYXV0b2Nsb3NlOiBzdHJpbmc7XG4gICAgcHVibGljIGF1dG9vcGVuOiBzdHJpbmc7XG4gICAgcHVibGljIGhpbnQ6IHN0cmluZztcblxuICAgIHByaXZhdGUgaXRlbUFjdGlvbkZuOiBGdW5jdGlvbjtcbiAgICBwcml2YXRlIG1lbnVDYXJldCA9ICdmYS1jYXJldC1kb3duJztcbiAgICBwcml2YXRlIF9zZWxlY3RGaXJzdEl0ZW0gPSBmYWxzZTtcblxuICAgIHB1YmxpYyB0eXBlOiBhbnk7XG4gICAgcHVibGljIF9tZW51cG9zaXRpb246IHN0cmluZztcblxuICAgIEBIb3N0TGlzdGVuZXIoJ29uU2hvd24nKSBvblNob3coKSB7XG4gICAgICAgIHRoaXMuX21lbnVwb3NpdGlvbiA9IHRoaXMubWVudXBvc2l0aW9uO1xuICAgICAgICBpZiAodGhpcy5fc2VsZWN0Rmlyc3RJdGVtKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJz4gdWxbd21tZW51ZHJvcGRvd25dIGxpLmFwcC1tZW51LWl0ZW0nKS5maXJzdCgpLmZpbmQoJz4gYScpLmZvY3VzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAkYXBwRGlnZXN0KCk7XG4gICAgfVxuICAgIEBIb3N0TGlzdGVuZXIoJ29uSGlkZGVuJykgb25IaWRlKCkge1xuICAgICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJ2xpJykucmVtb3ZlQ2xhc3MoJ29wZW4nKTtcbiAgICAgICAgdGhpcy5fc2VsZWN0Rmlyc3RJdGVtID0gZmFsc2U7XG4gICAgICAgIC8vIHJlc2V0IHRoZSBtZW51cG9zaXRpb24gd2hlbiBkcm9wZG93biBpcyBjbG9zZWRcbiAgICAgICAgdGhpcy5tZW51cG9zaXRpb24gPSB0aGlzLl9tZW51cG9zaXRpb24gPyB0aGlzLl9tZW51cG9zaXRpb24gOiBNRU5VX1BPU0lUSU9OLkRPV05fUklHSFQ7XG4gICAgICAgIHRoaXMuc2V0TWVudVBvc2l0aW9uKCk7XG4gICAgICAgICRhcHBEaWdlc3QoKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFycm93dXAnLCBbJyRldmVudCcsICdcIlVQLUFSUk9XXCInXSlcbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWVudGVyJywgWyckZXZlbnQnLCAnXCJNT1VTRS1FTlRFUlwiJ10pXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScsIFsnJGV2ZW50JywgJ1wiTU9VU0UtTEVBVkVcIiddKVxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uYXJyb3dkb3duJywgWyckZXZlbnQnLCAnXCJET1dOLUFSUk9XXCInXSlcbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFycm93cmlnaHQnLCBbJyRldmVudCcsICdcIlJJR0hULUFSUk9XXCInXSlcbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFycm93bGVmdCcsIFsnJGV2ZW50JywgJ1wiTEVGVC1BUlJPV1wiJ10pXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5lbnRlcicsIFsnJGV2ZW50JywgJ1wiRU5URVJcIiddKSBvbktleURvd24oJGV2ZW50LCBldmVudEFjdGlvbikge1xuICAgICAgICBjb25zdCBLRVlfTU9WRU1FTlRTID0gXy5jbG9uZShLRVlCT0FSRF9NT1ZFTUVOVFMpO1xuICAgICAgICBpZiAodGhpcy5tZW51cG9zaXRpb24gPT09IE1FTlVfUE9TSVRJT04uVVBfUklHSFQpIHtcbiAgICAgICAgICAgIEtFWV9NT1ZFTUVOVFMuTU9WRV9VUCA9ICdET1dOLUFSUk9XJztcbiAgICAgICAgICAgIEtFWV9NT1ZFTUVOVFMuTU9WRV9ET1dOID0gJ1VQLUFSUk9XJztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1lbnVwb3NpdGlvbiA9PT0gTUVOVV9QT1NJVElPTi5VUF9MRUZUKSB7XG4gICAgICAgICAgICBLRVlfTU9WRU1FTlRTLk1PVkVfVVAgPSAnRE9XTi1BUlJPVyc7XG4gICAgICAgICAgICBLRVlfTU9WRU1FTlRTLk1PVkVfRE9XTiA9ICdVUC1BUlJPVyc7XG4gICAgICAgICAgICBLRVlfTU9WRU1FTlRTLk1PVkVfTEVGVCA9ICdSSUdIVC1BUlJPVyc7XG4gICAgICAgICAgICBLRVlfTU9WRU1FTlRTLk1PVkVfUklHSFQgPSAnTEVGVC1BUlJPVyc7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tZW51cG9zaXRpb24gPT09IE1FTlVfUE9TSVRJT04uRE9XTl9MRUZUKSB7XG4gICAgICAgICAgICBLRVlfTU9WRU1FTlRTLk1PVkVfTEVGVCA9ICdSSUdIVC1BUlJPVyc7XG4gICAgICAgICAgICBLRVlfTU9WRU1FTlRTLk1PVkVfUklHSFQgPSAnTEVGVC1BUlJPVyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXy5pbmNsdWRlcyhbS0VZX01PVkVNRU5UUy5NT1ZFX0RPV04sIEtFWV9NT1ZFTUVOVFMuTU9WRV9SSUdIVF0sIGV2ZW50QWN0aW9uKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmJzRHJvcGRvd24uaXNPcGVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0Rmlyc3RJdGVtID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmJzRHJvcGRvd24uc2hvdygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJz4gdWxbd21tZW51ZHJvcGRvd25dIGxpLmFwcC1tZW51LWl0ZW0nKS5maXJzdCgpLmZpbmQoJz4gYScpLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnRBY3Rpb24gPT09IEtFWV9NT1ZFTUVOVFMuT05fRU5URVIgfHwgKGV2ZW50QWN0aW9uID09PSBLRVlfTU9WRU1FTlRTLk9OX01PVVNFX0VOVEVSICYmIHRoaXMuc2hvd29uaG92ZXIpKSB7XG4gICAgICAgICAgICB0aGlzLmJzRHJvcGRvd24udG9nZ2xlKHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKF8uaW5jbHVkZXMoW0tFWV9NT1ZFTUVOVFMuTU9WRV9VUCwgS0VZX01PVkVNRU5UUy5NT1ZFX0xFRlRdLCBldmVudEFjdGlvbikgfHwgKGV2ZW50QWN0aW9uID09ICBLRVlfTU9WRU1FTlRTLk9OX01PVVNFX0xFQVZFICYmIHRoaXMuYXV0b2Nsb3NlID09IEFVVE9DTE9TRV9UWVBFLkFMV0FZUykpIHtcbiAgICAgICAgICAgIHRoaXMuYnNEcm9wZG93bi5oaWRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluajogSW5qZWN0b3IsXG4gICAgICAgIHB1YmxpYyByb3V0ZTogUm91dGVyLFxuICAgICAgICBwcml2YXRlIHVzZXJEZWZpbmVkRXhlY3V0aW9uQ29udGV4dDogVXNlckRlZmluZWRFeGVjdXRpb25Db250ZXh0LFxuICAgICAgICBwcml2YXRlIGFwcDogQXBwLFxuICAgICAgICBAU2VsZigpIEBPcHRpb25hbCgpIHB1YmxpYyBic0Ryb3Bkb3duOiBCc0Ryb3Bkb3duRGlyZWN0aXZlLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHBhcmVudE5hdjogTmF2Q29tcG9uZW50LFxuICAgICAgICBAQXR0cmlidXRlKCdzZWxlY3QuZXZlbnQnKSBwdWJsaWMgc2VsZWN0RXZlbnRDQjogc3RyaW5nXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluaiwgV0lER0VUX0NPTkZJRyk7XG4gICAgICAgIGlmIChwYXJlbnROYXYpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZU1lbnVDb250ZXh0ID0gISFwYXJlbnROYXYuZGlzYWJsZU1lbnVDb250ZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlTWVudUNvbnRleHQgPSAhIXNlbGVjdEV2ZW50Q0I7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRm9yIHNlbGVjdGluZyB0aGUgaXRlbSBvbiBsb2FkXG4gICAgICAgIGNvbnN0IGRhdGFzZXRTdWJzY3JpcHRpb24gPSB0aGlzLm5vZGVzJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFfLmlzRW1wdHkodGhpcy5ub2RlcykpIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzTGlua1RvQ3VycmVudFBhZ2UodGhpcy5ub2RlcywgdGhpcy5yb3V0ZS51cmwpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZENsYXNzKHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZHJvcGRvd24tdG9nZ2xlJykgYXMgSFRNTEVsZW1lbnQsICdhY3RpdmUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gSWYgbWVudSB3aWRnZXQgaXMgaW5zaWRlIG5hdiB3aWRnZXQgdGhlbiBkb250IGNoZWNrIGZvciBpdGVtIGlzYWN0aXZlIHByb3BlcnR5IGJlY2F1c2UgdGhlc2Ugd2lsbCBiZSBoYW5kbGVkIGZvcm0gbmF2IHdpZGdldC5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wYXJlbnROYXYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgaXRlbUZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29uc3QgZ2V0SXRlbSA9IChub2RlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBfLmZvckVhY2gobm9kZXMsIChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbUZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uaXNhY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtRm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25NZW51SXRlbVNlbGVjdCh7ICRldmVudDoge30sICRpdGVtOiBpdGVtIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIgdGhlIGFjdGlvbiBhc3NvY2lhdGVkIHdpdGggYWN0aXZlIGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VySXRlbUFjdGlvbih0aGlzLCBpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV8uaXNFbXB0eShpdGVtLmNoaWxkcmVuKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEl0ZW0oaXRlbS5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBnZXRJdGVtKHRoaXMubm9kZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigoKSA9PiBkYXRhc2V0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuXG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc2V0Tm9kZXMoKSB7XG4gICAgICAgIHN1cGVyLnJlc2V0Tm9kZXMoKTtcbiAgICAgICAgLy8gb3BlbiB0aGUgbWVudSBpZiBhbnkgb2YgaXRzIG1lbnUgaXRlbXMgaGFzIGxpbmsgdG8gY3VycmVudCBwYWdlIGFuZCBpZiBhdXRvb3BlbiB2YWx1ZSBpcyAnYWN0aXZlIHBhZ2UnXG4gICAgICAgIGlmICgodGhpcy5hdXRvb3BlbiA9PT0gQVVUT19PUEVOLkFDVElWRV9QQUdFICYmIGhhc0xpbmtUb0N1cnJlbnRQYWdlKHRoaXMubm9kZXMsIHRoaXMucm91dGUudXJsKSkgfHwgdGhpcy5hdXRvb3BlbiA9PT0gQVVUT19PUEVOLkFMV0FZUykge1xuICAgICAgICAgICAgdGhpcy5ic0Ryb3Bkb3duLnNob3coKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLnNldE1lbnVQb3NpdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IGNhbmNlbFN1YnNjcmlwdGlvbiA9IHRoaXMuYXBwLnN1YnNjcmliZShcImhpZ2hsaWdodEFjdGl2ZUxpbmtcIiwgKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZHJvcGRvd24tdG9nZ2xlJykgYXMgSFRNTEVsZW1lbnQsICdhY3RpdmUnLCBoYXNMaW5rVG9DdXJyZW50UGFnZSh0aGlzLm5vZGVzLCB0aGlzLnJvdXRlLnVybCApKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4gY2FuY2VsU3Vic2NyaXB0aW9uKCkpO1xuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5OiBzdHJpbmcsIG52OiBhbnksIG92PzogYW55KSB7XG5cbiAgICAgICAgaWYgKGtleSA9PT0gJ3RhYmluZGV4Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleSA9PT0gJ2F1dG9jbG9zZScpIHtcbiAgICAgICAgICAgIHRoaXMuYnNEcm9wZG93bi5hdXRvQ2xvc2UgPSBudiAhPT0gQVVUT0NMT1NFX1RZUEUuRElTQUJMRUQ7XG4gICAgICAgICAgICB0aGlzLmF1dG9jbG9zZSA9IG52O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0TWVudVBvc2l0aW9uKCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMubWVudXBvc2l0aW9uKSB7XG4gICAgICAgICAgICBjYXNlIFBPU0lUSU9OLkRPV05fUklHSFQ6XG4gICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCAnZHJvcHVwJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZW51YWxpZ24gPSBQVUxMX0NMUy5MRUZUO1xuICAgICAgICAgICAgICAgIHRoaXMubWVudUNhcmV0ID0gQ0FSRVRfQ0xTLkRPV047XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBPU0lUSU9OLkRPV05fTEVGVDpcbiAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQsICdkcm9wdXAnKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnVhbGlnbiA9IFBVTExfQ0xTLlJJR0hUO1xuICAgICAgICAgICAgICAgIHRoaXMubWVudUNhcmV0ID0gQ0FSRVRfQ0xTLkRPV047XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBPU0lUSU9OLlVQX0xFRlQ6XG4gICAgICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCAnZHJvcHVwJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZW51YWxpZ24gPSBQVUxMX0NMUy5SSUdIVDtcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnVDYXJldCA9IENBUkVUX0NMUy5VUDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUE9TSVRJT04uVVBfUklHSFQ6XG4gICAgICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCAnZHJvcHVwJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZW51YWxpZ24gPSBQVUxMX0NMUy5MRUZUO1xuICAgICAgICAgICAgICAgIHRoaXMubWVudUNhcmV0ID0gQ0FSRVRfQ0xTLlVQO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBQT1NJVElPTi5JTkxJTkU6XG4gICAgICAgICAgICAgICAgdGhpcy5tZW51YWxpZ24gPSAnZHJvcGlubGluZS1tZW51JztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbk1lbnVJdGVtU2VsZWN0KGFyZ3MpIHtcbiAgICAgICAgY29uc3QgeyAkZXZlbnQgfSA9IGFyZ3M7XG4gICAgICAgIGNvbnN0ICRpdGVtID0gYXJncy4kaXRlbS52YWx1ZTtcbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzZWxlY3QnLCB7ICRldmVudCwgJGl0ZW0gfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgc3R5bGVyKHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZHJvcGRvd24tdG9nZ2xlJykgYXMgSFRNTEVsZW1lbnQsIHRoaXMpO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjbWVudVRlbXBsYXRlPlxuICAgIDxidXR0b24gd21CdXR0b25cbiAgICAgICAgICAgIGRyb3Bkb3duVG9nZ2xlXG4gICAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXG4gICAgICAgICAgICBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJoaW50IHx8ICdNZW51J1wiXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBhcHAtYnV0dG9uIGRyb3Bkb3duLXRvZ2dsZSB7e21lbnVjbGFzc319XCJcbiAgICAgICAgICAgIGhpbnQuYmluZD1cImhpbnRcIlxuICAgICAgICAgICAgc2hvcnRjdXRrZXkuYmluZD1cInNob3J0Y3V0a2V5XCJcbiAgICAgICAgICAgIHRhYmluZGV4LmJpbmQ9XCJ0YWJpbmRleFwiXG4gICAgICAgICAgICBjYXB0aW9uLmJpbmQ9XCJjYXB0aW9uXCJcbiAgICAgICAgICAgIGljb25jbGFzcy5iaW5kPVwiaWNvbmNsYXNzXCJcbiAgICAgICAgICAgIGljb25wb3NpdGlvbi5iaW5kPVwiaWNvbnBvc2l0aW9uXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwicHVsbC1yaWdodCBjYXJldCBmYVwiIFtuZ0NsYXNzXT1cIlttZW51Q2FyZXRdXCI+PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpbm5lclRlbXBsYXRlPlxuICAgIDxpIGNsYXNzPVwiYXBwLWljb24ge3tpY29uY2xhc3N9fVwiPjwvaT5cbiAgICA8c3BhbiBjbGFzcz1cImNhcHRpb25cIiBbdGV4dENvbnRlbnRdPVwiY2FwdGlvblwiPjwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz1cInB1bGwtcmlnaHQgY2FyZXQgZmEge3ttZW51Q2FyZXR9fVwiPjwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJ0eXBlID09PSAnYW5jaG9yJzsgZWxzZSBtZW51VGVtcGxhdGVcIj5cbiAgICA8YSB3bUFuY2hvclxuICAgICAgIGRyb3Bkb3duVG9nZ2xlXG5cbiAgICAgICBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiXG4gICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXG5cbiAgICAgICBoaW50LmJpbmQ9XCJoaW50XCJcbiAgICAgICBjbGFzcz1cImRyb3Bkb3duLXRvZ2dsZSB7e21lbnVjbGFzc319XCJcbiAgICAgICBzaG9ydGN1dGtleS5iaW5kPVwic2hvcnRjdXRrZXlcIlxuICAgICAgIHRhYmluZGV4LmJpbmQ9XCJ0YWJpbmRleFwiXG4gICAgICAgY2FwdGlvbi5iaW5kPVwiY2FwdGlvblwiXG4gICAgICAgaWNvbmNsYXNzLmJpbmQ9XCJpY29uY2xhc3NcIlxuICAgICAgIGljb25wb3NpdGlvbi5iaW5kPVwiaWNvbnBvc2l0aW9uXCJcbiAgICAgICBiYWRnZXZhbHVlLmJpbmQ9XCJiYWRnZXZhbHVlXCJcbiAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwicHVsbC1yaWdodCBjYXJldCBmYVwiIFtuZ0NsYXNzXT1cIlttZW51Q2FyZXRdXCI+PC9zcGFuPlxuICAgIDwvYT5cbjwvbmctY29udGFpbmVyPlxuXG48dWwgd21NZW51RHJvcGRvd24gW2l0ZW1zXT1cIm5vZGVzXCIgW25nQ2xhc3NdPVwibWVudWxheW91dFwiIGNsYXNzPVwiaWNvbi1wb3NpdGlvbi17e2ljb25wb3NpdGlvbn19XCIgKmRyb3Bkb3duTWVudSBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93bm1lbnVcIiByb2xlPVwibWVudWJhclwiPjwvdWw+XG4iXX0=
@@ -332,6 +332,7 @@ const WIDGET_CONFIG$1 = { widgetType: 'wm-menu', hostClass: 'dropdown app-menu'
332
332
  class MenuComponent extends DatasetAwareNavComponent {
333
333
  static { this.initializeProps = registerProps$1(); }
334
334
  onShow() {
335
+ this._menuposition = this.menuposition;
335
336
  if (this._selectFirstItem) {
336
337
  setTimeout(() => {
337
338
  this.$element.find('> ul[wmmenudropdown] li.app-menu-item').first().find('> a').focus();
@@ -340,9 +341,11 @@ class MenuComponent extends DatasetAwareNavComponent {
340
341
  $appDigest();
341
342
  }
342
343
  onHide() {
343
- this.$element.find('>.dropdown-toggle').focus();
344
344
  this.$element.find('li').removeClass('open');
345
345
  this._selectFirstItem = false;
346
+ // reset the menuposition when dropdown is closed
347
+ this.menuposition = this._menuposition ? this._menuposition : MENU_POSITION.DOWN_RIGHT;
348
+ this.setMenuPosition();
346
349
  $appDigest();
347
350
  }
348
351
  onKeyDown($event, eventAction) {
@@ -818,6 +821,7 @@ class MenuDropdownComponent {
818
821
  constructor(elRef, menuRef) {
819
822
  this.menuRef = menuRef;
820
823
  this.nativeElement = elRef.nativeElement;
824
+ this.hasExecutedCallback = false;
821
825
  addClass(this.nativeElement, DEFAULT_CLS$1);
822
826
  }
823
827
  ngAfterViewInit() {
@@ -827,6 +831,55 @@ class MenuDropdownComponent {
827
831
  animationClass = `animated ${(animationClasses[animateItems][this.menuRef.menuposition] || animationClasses[animateItems].name)}`;
828
832
  }
829
833
  addClass(this.nativeElement, `dropdown-menu ${this.menuRef.menualign} ${animationClass}`, true);
834
+ this.getParentWidget();
835
+ }
836
+ // Function to check if the menu widget is present inside other widgets like table, tabs, dialog, nav, list, tile, panel, accordion
837
+ // if true then call createObserver() which internally calculates dropown height
838
+ getParentWidget() {
839
+ const closestWidget = $(this.menuRef.nativeElement).closest('table, ul, .dialog, .app-tabs, .app-accordion, .app-panel, .app-tile');
840
+ // Check if the closest table is the parent of the menu widget
841
+ if (closestWidget && $(closestWidget).has(this.menuRef.nativeElement).length > 0) {
842
+ this.createObserver(this, this.callback);
843
+ }
844
+ }
845
+ // function which changes the position of the menu dropdown dynamically if it exceeds viewport height
846
+ callback(entries, observer) {
847
+ if (!this.hasExecutedCallback) {
848
+ const self = this;
849
+ const positions = this.menuRef.menuposition?.split(',') || [];
850
+ entries.forEach(entry => {
851
+ if (entry.isIntersecting) {
852
+ positions[0] = 'down';
853
+ self.menuRef.menuposition = positions.length > 1 ? positions.join() : 'down,right';
854
+ self.nativeElement.parentElement?.classList.add('dropdown');
855
+ self.menuRef.setMenuPosition();
856
+ }
857
+ else {
858
+ positions[0] = 'up';
859
+ self.menuRef.menuposition = positions.length > 1 ? positions.join() : 'up,right';
860
+ self.nativeElement.parentElement?.classList.add('dropup');
861
+ self.menuRef.setMenuPosition();
862
+ // when container="body" is added to menu dropdown, the dropdown menu ul is attached directly to body.
863
+ // so adding a class name inorder to adjust the styling of the dropdown
864
+ const dropdownContainer = self.nativeElement.parentElement?.parentElement;
865
+ if (dropdownContainer.tagName.toUpperCase() === "BS-DROPDOWN-CONTAINER") {
866
+ // The parent element is <bs-dropdown-container>
867
+ self.nativeElement.parentElement?.parentElement?.classList.add('parent-position');
868
+ }
869
+ }
870
+ });
871
+ this.hasExecutedCallback = true;
872
+ }
873
+ }
874
+ // function which checks if the dropdown is within the viewport height or exceeds viewport height
875
+ createObserver(target, callback) {
876
+ const options = {
877
+ root: null,
878
+ threshold: 1,
879
+ once: true
880
+ };
881
+ const observer = new IntersectionObserver(callback.bind(this), options);
882
+ observer.observe(target.nativeElement);
830
883
  }
831
884
  static { this.ɵfac = function MenuDropdownComponent_Factory(t) { return new (t || MenuDropdownComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(MenuComponent)); }; }
832
885
  static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MenuDropdownComponent, selectors: [["ul", "wmMenuDropdown", ""]], inputs: { items: "items" }, attrs: _c0, decls: 1, vars: 1, consts: [["wmMenuDropdownItem", "", "role", "menuitem", 3, "item", "ngClass", "class", 4, "ngFor", "ngForOf"], ["wmMenuDropdownItem", "", "role", "menuitem", 3, "item", "ngClass"]], template: function MenuDropdownComponent_Template(rf, ctx) { if (rf & 1) {