@fundamental-ngx/core 0.36.0-rc.12 → 0.36.0-rc.13

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 (178) hide show
  1. package/action-bar/package.json +1 -1
  2. package/action-sheet/package.json +1 -1
  3. package/alert/package.json +1 -1
  4. package/avatar/package.json +1 -1
  5. package/avatar-group/package.json +1 -1
  6. package/bar/package.json +1 -1
  7. package/breadcrumb/esm2020/breadcrumb.component.mjs +1 -1
  8. package/breadcrumb/fesm2015/fundamental-ngx-core-breadcrumb.mjs +1 -1
  9. package/breadcrumb/fesm2015/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  10. package/breadcrumb/fesm2020/fundamental-ngx-core-breadcrumb.mjs +1 -1
  11. package/breadcrumb/fesm2020/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  12. package/breadcrumb/package.json +1 -1
  13. package/busy-indicator/package.json +1 -1
  14. package/button/package.json +1 -1
  15. package/calendar/package.json +1 -1
  16. package/card/package.json +1 -1
  17. package/carousel/package.json +1 -1
  18. package/checkbox/package.json +1 -1
  19. package/combobox/package.json +1 -1
  20. package/content-density/package.json +2 -2
  21. package/date-picker/package.json +1 -1
  22. package/datetime/package.json +1 -1
  23. package/datetime-picker/package.json +1 -1
  24. package/dialog/package.json +1 -1
  25. package/dynamic-page/package.json +1 -1
  26. package/dynamic-side-content/package.json +1 -1
  27. package/esm2020/breadcrumb/breadcrumb.component.mjs +1 -1
  28. package/esm2020/overflow-layout/directives/overflow-layout-focusable-item.directive.mjs +75 -0
  29. package/esm2020/overflow-layout/directives/overflow-layout-item.directive.mjs +4 -34
  30. package/esm2020/overflow-layout/directives/overflow-layout-popover-content.directive.mjs +31 -12
  31. package/esm2020/overflow-layout/index.mjs +3 -1
  32. package/esm2020/overflow-layout/interfaces/overflow-focusable-item.interface.mjs +2 -0
  33. package/esm2020/overflow-layout/interfaces/overflow-item.interface.mjs +1 -1
  34. package/esm2020/overflow-layout/overflow-layout.component.mjs +49 -45
  35. package/esm2020/overflow-layout/overflow-layout.module.mjs +12 -5
  36. package/esm2020/overflow-layout/overflow-layout.service.mjs +12 -7
  37. package/esm2020/overflow-layout/tokens/overflow-focusable-item.token.mjs +3 -0
  38. package/esm2020/tabs/public_api.mjs +1 -2
  39. package/esm2020/tabs/tab-item-expand/tab-item-expand.component.mjs +1 -1
  40. package/esm2020/tabs/tab-link/tab-link.directive.mjs +25 -7
  41. package/esm2020/tabs/tab-list.component.mjs +51 -148
  42. package/esm2020/tabs/tab-nav/tab-nav.component.mjs +52 -37
  43. package/esm2020/tabs/tab-panel/tab-panel.component.mjs +9 -10
  44. package/esm2020/tabs/tab-utils/tab-directives.mjs +22 -33
  45. package/esm2020/tabs/tab-utils/tab-info.class.mjs +5 -1
  46. package/esm2020/tabs/tabs.module.mjs +8 -4
  47. package/facets/package.json +1 -1
  48. package/feed-input/package.json +1 -1
  49. package/feed-list-item/package.json +1 -1
  50. package/fesm2015/fundamental-ngx-core-breadcrumb.mjs +1 -1
  51. package/fesm2015/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  52. package/fesm2015/fundamental-ngx-core-overflow-layout.mjs +165 -91
  53. package/fesm2015/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  54. package/fesm2015/fundamental-ngx-core-tabs.mjs +255 -382
  55. package/fesm2015/fundamental-ngx-core-tabs.mjs.map +1 -1
  56. package/fesm2020/fundamental-ngx-core-breadcrumb.mjs +1 -1
  57. package/fesm2020/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  58. package/fesm2020/fundamental-ngx-core-overflow-layout.mjs +161 -87
  59. package/fesm2020/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  60. package/fesm2020/fundamental-ngx-core-tabs.mjs +248 -378
  61. package/fesm2020/fundamental-ngx-core-tabs.mjs.map +1 -1
  62. package/file-uploader/package.json +1 -1
  63. package/fixed-card-layout/package.json +1 -1
  64. package/flexible-column-layout/package.json +1 -1
  65. package/form/package.json +1 -1
  66. package/formatted-text/package.json +1 -1
  67. package/grid-list/package.json +1 -1
  68. package/icon/package.json +1 -1
  69. package/illustrated-message/package.json +1 -1
  70. package/infinite-scroll/package.json +1 -1
  71. package/info-label/package.json +1 -1
  72. package/inline-help/package.json +1 -1
  73. package/input-group/package.json +1 -1
  74. package/layout-grid/package.json +1 -1
  75. package/layout-panel/package.json +1 -1
  76. package/link/package.json +1 -1
  77. package/list/package.json +1 -1
  78. package/menu/package.json +1 -1
  79. package/message-box/package.json +1 -1
  80. package/message-strip/package.json +1 -1
  81. package/message-toast/package.json +1 -1
  82. package/micro-process-flow/package.json +1 -1
  83. package/mobile-mode/package.json +1 -1
  84. package/multi-input/package.json +1 -1
  85. package/nested-list/package.json +1 -1
  86. package/notification/package.json +1 -1
  87. package/object-identifier/package.json +1 -1
  88. package/object-marker/package.json +1 -1
  89. package/object-number/package.json +1 -1
  90. package/object-status/package.json +1 -1
  91. package/overflow-layout/directives/overflow-layout-focusable-item.directive.d.ts +28 -0
  92. package/overflow-layout/directives/overflow-layout-item.directive.d.ts +6 -11
  93. package/overflow-layout/directives/overflow-layout-popover-content.directive.d.ts +6 -2
  94. package/overflow-layout/esm2020/directives/overflow-layout-focusable-item.directive.mjs +75 -0
  95. package/overflow-layout/esm2020/directives/overflow-layout-item.directive.mjs +4 -34
  96. package/overflow-layout/esm2020/directives/overflow-layout-popover-content.directive.mjs +31 -12
  97. package/overflow-layout/esm2020/index.mjs +3 -1
  98. package/overflow-layout/esm2020/interfaces/overflow-focusable-item.interface.mjs +2 -0
  99. package/overflow-layout/esm2020/interfaces/overflow-item.interface.mjs +1 -1
  100. package/overflow-layout/esm2020/overflow-layout.component.mjs +49 -45
  101. package/overflow-layout/esm2020/overflow-layout.module.mjs +12 -5
  102. package/overflow-layout/esm2020/overflow-layout.service.mjs +12 -7
  103. package/overflow-layout/esm2020/tokens/overflow-focusable-item.token.mjs +3 -0
  104. package/overflow-layout/fesm2015/fundamental-ngx-core-overflow-layout.mjs +165 -91
  105. package/overflow-layout/fesm2015/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  106. package/overflow-layout/fesm2020/fundamental-ngx-core-overflow-layout.mjs +161 -87
  107. package/overflow-layout/fesm2020/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  108. package/overflow-layout/index.d.ts +2 -0
  109. package/overflow-layout/interfaces/overflow-focusable-item.interface.d.ts +9 -0
  110. package/overflow-layout/interfaces/overflow-item.interface.d.ts +6 -6
  111. package/overflow-layout/overflow-layout.component.d.ts +16 -14
  112. package/overflow-layout/overflow-layout.module.d.ts +6 -5
  113. package/overflow-layout/overflow-layout.service.d.ts +6 -4
  114. package/overflow-layout/package.json +4 -4
  115. package/overflow-layout/tokens/overflow-focusable-item.token.d.ts +3 -0
  116. package/package.json +2 -2
  117. package/pagination/package.json +1 -1
  118. package/panel/package.json +1 -1
  119. package/popover/package.json +1 -1
  120. package/product-switch/package.json +1 -1
  121. package/progress-indicator/package.json +1 -1
  122. package/quick-view/package.json +1 -1
  123. package/radio/package.json +1 -1
  124. package/rating-indicator/package.json +1 -1
  125. package/resizable-card-layout/package.json +1 -1
  126. package/scroll-spy/package.json +1 -1
  127. package/scrollbar/package.json +1 -1
  128. package/segmented-button/package.json +1 -1
  129. package/select/package.json +1 -1
  130. package/shared/package.json +1 -1
  131. package/shellbar/package.json +1 -1
  132. package/side-navigation/package.json +1 -1
  133. package/slider/package.json +1 -1
  134. package/split-button/package.json +1 -1
  135. package/splitter/package.json +1 -1
  136. package/status-indicator/package.json +1 -1
  137. package/step-input/package.json +1 -1
  138. package/switch/package.json +1 -1
  139. package/table/package.json +1 -1
  140. package/tabs/esm2020/public_api.mjs +1 -2
  141. package/tabs/esm2020/tab-item-expand/tab-item-expand.component.mjs +1 -1
  142. package/tabs/esm2020/tab-link/tab-link.directive.mjs +25 -7
  143. package/tabs/esm2020/tab-list.component.mjs +51 -148
  144. package/tabs/esm2020/tab-nav/tab-nav.component.mjs +52 -37
  145. package/tabs/esm2020/tab-panel/tab-panel.component.mjs +9 -10
  146. package/tabs/esm2020/tab-utils/tab-directives.mjs +22 -33
  147. package/tabs/esm2020/tab-utils/tab-info.class.mjs +5 -1
  148. package/tabs/esm2020/tabs.module.mjs +8 -4
  149. package/tabs/fesm2015/fundamental-ngx-core-tabs.mjs +255 -382
  150. package/tabs/fesm2015/fundamental-ngx-core-tabs.mjs.map +1 -1
  151. package/tabs/fesm2020/fundamental-ngx-core-tabs.mjs +248 -378
  152. package/tabs/fesm2020/fundamental-ngx-core-tabs.mjs.map +1 -1
  153. package/tabs/package.json +1 -1
  154. package/tabs/public_api.d.ts +0 -1
  155. package/tabs/tab-link/tab-link.directive.d.ts +10 -3
  156. package/tabs/tab-list.component.d.ts +18 -42
  157. package/tabs/tab-nav/tab-nav.component.d.ts +15 -10
  158. package/tabs/tab-panel/tab-panel.component.d.ts +5 -3
  159. package/tabs/tab-utils/tab-directives.d.ts +12 -12
  160. package/tabs/tab-utils/tab-info.class.d.ts +2 -0
  161. package/tabs/tabs.module.d.ts +2 -1
  162. package/text/package.json +1 -1
  163. package/theming/package.json +1 -1
  164. package/tile/package.json +1 -1
  165. package/time/package.json +1 -1
  166. package/time-picker/package.json +1 -1
  167. package/timeline/package.json +1 -1
  168. package/title/package.json +1 -1
  169. package/token/package.json +1 -1
  170. package/toolbar/package.json +1 -1
  171. package/tree/package.json +1 -1
  172. package/upload-collection/package.json +1 -1
  173. package/utils/package.json +1 -1
  174. package/vertical-navigation/package.json +1 -1
  175. package/wizard/package.json +1 -1
  176. package/esm2020/tabs/tabs.service.mjs +0 -69
  177. package/tabs/esm2020/tabs.service.mjs +0 -69
  178. package/tabs/tabs.service.d.ts +0 -22
@@ -70,9 +70,7 @@ export class OverflowLayoutService {
70
70
  /** @hidden */
71
71
  _listenToChanges() {
72
72
  this._subscription.add(this.config.items.changes.subscribe(() => {
73
- setTimeout(() => {
74
- this.fitVisibleItems();
75
- });
73
+ this.fitVisibleItems();
76
74
  }));
77
75
  this._listenToSizeChanges(this._elRef.nativeElement, this.config.itemsWrapper);
78
76
  }
@@ -86,12 +84,15 @@ export class OverflowLayoutService {
86
84
  });
87
85
  })));
88
86
  }
89
- /** @hidden */
87
+ /**
88
+ * Calculates available space for items and hides items that are not fitting into the container.
89
+ */
90
90
  fitVisibleItems() {
91
91
  this._listenToItemResize = false;
92
92
  this._allItems = this.config.items.toArray();
93
93
  let allItems = this.config.items.toArray();
94
94
  let visibleContainerItems = this.config.visibleItems.toArray();
95
+ this._elRef.nativeElement.style.height = `${this._elRef.nativeElement.clientHeight}px`;
95
96
  allItems.forEach((item, index) => {
96
97
  // Softly hide previously completely hidden item in order to correctly calculate it's size.
97
98
  item.softHidden = true;
@@ -121,6 +122,7 @@ export class OverflowLayoutService {
121
122
  this.result.hiddenItems = this._hiddenItems;
122
123
  this._emitResult();
123
124
  this._listenToItemResize = true;
125
+ this._elRef.nativeElement.style.height = '';
124
126
  return;
125
127
  }
126
128
  this.result.showMore = true;
@@ -140,6 +142,8 @@ export class OverflowLayoutService {
140
142
  const elementSize = this._getElementWidth(container.elementRef.nativeElement);
141
143
  layoutWidth -= elementSize;
142
144
  });
145
+ const maxVisibleItems = this.config.maxVisibleItems -
146
+ forcedItemsIndexes.filter((index) => index >= this.config.maxVisibleItems).length;
143
147
  if (layoutWidth < 0 && forcedItemsIndexes.length > 0) {
144
148
  console.warn('There is no enough space to fit all forced visible items into the container. Please adjust their visibility accordingly.');
145
149
  }
@@ -157,7 +161,7 @@ export class OverflowLayoutService {
157
161
  const condition = (combinedWidth <= layoutWidth ||
158
162
  (item === this.config.visibleItems.last &&
159
163
  combinedWidth <= layoutWidth + showMoreContainerWidth)) &&
160
- fittingElmCount < this.config.maxVisibleItems;
164
+ fittingElmCount < maxVisibleItems;
161
165
  if (condition) {
162
166
  fittingElmsWidth += elementSize;
163
167
  fittingElmCount++;
@@ -191,6 +195,7 @@ export class OverflowLayoutService {
191
195
  this.result.showMore = this._hiddenItems.length > 0;
192
196
  this.result.hiddenItems = this._hiddenItems;
193
197
  this._emitResult();
198
+ this._elRef.nativeElement.style.height = '';
194
199
  this._listenToItemResize = true;
195
200
  }
196
201
  /** @hidden */
@@ -203,7 +208,7 @@ export class OverflowLayoutService {
203
208
  .withWrap()
204
209
  .withHorizontalOrientation(this._dir)
205
210
  .withVerticalOrientation()
206
- .skipPredicate((item) => !item.focusable || item.hidden);
211
+ .skipPredicate((item) => !item.navigable || item.hidden);
207
212
  }
208
213
  /** @hidden Rtl change subscription */
209
214
  _subscribeToRtl() {
@@ -240,4 +245,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
240
245
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.RtlService, decorators: [{
241
246
  type: Optional
242
247
  }] }]; } });
243
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmZsb3ctbGF5b3V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9vdmVyZmxvdy1sYXlvdXQvb3ZlcmZsb3ctbGF5b3V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFhLFFBQVEsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsZ0JBQWdCLEVBQWMsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBYyxJQUFJLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBa0IzRyxNQUFNLE9BQU8sNkJBQTZCO0lBQTFDO1FBQ0ksYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixVQUFLLEdBQXNCLEVBQUUsQ0FBQztRQUM5QixnQkFBVyxHQUFzQixFQUFFLENBQUM7UUFDcEMsaUJBQVksR0FBc0IsRUFBRSxDQUFDO0lBQ3pDLENBQUM7Q0FBQTtBQUdELE1BQU0sT0FBTyxxQkFBcUI7SUFvRDlCLGNBQWM7SUFDZCxZQUFvQixNQUErQixFQUFzQixXQUE4QjtRQUFuRixXQUFNLEdBQU4sTUFBTSxDQUF5QjtRQUFzQixnQkFBVyxHQUFYLFdBQVcsQ0FBbUI7UUEvQ3ZHOztXQUVHO1FBQ0gsV0FBTSxHQUFHLElBQUksNkJBQTZCLEVBQUUsQ0FBQztRQUs3QyxjQUFjO1FBQ04sd0JBQW1CLEdBQUcsSUFBSSxDQUFDO1FBRW5DLGNBQWM7UUFDRyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFcEQsY0FBYztRQUNOLGNBQVMsR0FBc0IsRUFBRSxDQUFDO1FBRTFDLGNBQWM7UUFDTixpQkFBWSxHQUFzQixFQUFFLENB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LE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxnQkFBZ0IsQ0FBQyxPQUFvQjtRQUN6QyxNQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFDM0QsTUFBTSxXQUFXLEdBQUcsWUFBWSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUU5RyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbEMsQ0FBQzs7a0hBclNRLHFCQUFxQjtzSEFBckIscUJBQXFCOzJGQUFyQixxQkFBcUI7a0JBRGpDLFVBQVU7OzBCQXNEK0MsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvY3VzS2V5TWFuYWdlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IEVsZW1lbnRSZWYsIEluamVjdGFibGUsIE9uRGVzdHJveSwgT3B0aW9uYWwsIFF1ZXJ5TGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgcmVzaXplT2JzZXJ2YWJsZSwgUnRsU2VydmljZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS91dGlscyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIE9ic2VydmFibGUsIHNraXAsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgT3ZlcmZsb3dMYXlvdXRJdGVtQ29udGFpbmVyRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL292ZXJmbG93LWxheW91dC1pdGVtLWNvbnRhaW5lci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgT3ZlcmZsb3dJdGVtUmVmIH0gZnJvbSAnLi9pbnRlcmZhY2VzL292ZXJmbG93LWl0ZW0tcmVmLmludGVyZmFjZSc7XG5pbXBvcnQgeyBPdmVyZmxvd0l0ZW0gfSBmcm9tICcuL2ludGVyZmFjZXMvb3ZlcmZsb3ctaXRlbS5pbnRlcmZhY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE92ZXJmbG93TGF5b3V0Q29uZmlnIHtcbiAgICBpdGVtczogUXVlcnlMaXN0PE92ZXJmbG93SXRlbVJlZj47XG4gICAgZm9jdXNhYmxlSXRlbXM6IFF1ZXJ5TGlzdDxPdmVyZmxvd0l0ZW0+O1xuICAgIHZpc2libGVJdGVtczogUXVlcnlMaXN0PE92ZXJmbG93TGF5b3V0SXRlbUNvbnRhaW5lckRpcmVjdGl2ZT47XG4gICAgaXRlbXNXcmFwcGVyOiBIVE1MRWxlbWVudDtcbiAgICBzaG93TW9yZUNvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgbGF5b3V0Q29udGFpbmVyRWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gICAgbWF4VmlzaWJsZUl0ZW1zOiBudW1iZXI7XG4gICAgZGlyZWN0aW9uOiAnbGVmdCcgfCAncmlnaHQnO1xuICAgIGVuYWJsZUtleWJvYXJkTmF2aWdhdGlvbjogYm9vbGVhbjtcbiAgICByZXZlcnNlSGlkZGVuSXRlbXM6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBPdmVyZmxvd0xheW91dExpc3RlbmluZ1Jlc3VsdCB7XG4gICAgc2hvd01vcmUgPSBmYWxzZTtcbiAgICBpdGVtczogT3ZlcmZsb3dJdGVtUmVmW10gPSBbXTtcbiAgICBoaWRkZW5JdGVtczogT3ZlcmZsb3dJdGVtUmVmW10gPSBbXTtcbiAgICB2aXNpYmxlSXRlbXM6IE92ZXJmbG93SXRlbVJlZltdID0gW107XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBPdmVyZmxvd0xheW91dFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIE92ZXJmbG93IExheW91dCBjb25maWcuXG4gICAgICovXG4gICAgY29uZmlnOiBPdmVyZmxvd0xheW91dENvbmZpZztcblxuICAgIC8qKlxuICAgICAqIE92ZXJmbG93IExheW91dCBjYWxjdWxhdGlvbiByZXN1bHQuXG4gICAgICovXG4gICAgcmVzdWx0ID0gbmV3IE92ZXJmbG93TGF5b3V0TGlzdGVuaW5nUmVzdWx0KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9rZXlib2FyZEV2ZW50c01hbmFnZXI6IEZvY3VzS2V5TWFuYWdlcjxPdmVyZmxvd0l0ZW0+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub0l0ZW1SZXNpemUgPSB0cnVlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2FsbEl0ZW1zOiBPdmVyZmxvd0l0ZW1SZWZbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9oaWRkZW5JdGVtczogT3ZlcmZsb3dJdGVtUmVmW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb3ZlcmZsb3dJdGVtczogT3ZlcmZsb3dJdGVtW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZGV0ZWN0Q2hhbmdlcyQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZXN1bHQkID0gbmV3IFN1YmplY3Q8T3ZlcmZsb3dMYXlvdXRMaXN0ZW5pbmdSZXN1bHQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RpcjogJ3J0bCcgfCAnbHRyJyA9ICdsdHInO1xuXG4gICAgLyoqXG4gICAgICogT2JzZXJ2YWJsZSB3aGljaCBlbWl0cyB3aGVuIGNoYW5nZXMgZGV0ZWN0aW9uIGlzIHJlcXVpcmVkLlxuICAgICAqL1xuICAgIGdldCBkZXRlY3RDaGFuZ2VzKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGV0ZWN0Q2hhbmdlcyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT2JzZXJ2YWJsZSB3aGljaCBlbWl0cyB3aGVuIG5ldyBjYWxjdWxhdGlvbiByZXN1bHQgaXMgYXZhaWxhYmxlLlxuICAgICAqL1xuICAgIGdldCBvblJlc3VsdCgpOiBPYnNlcnZhYmxlPE92ZXJmbG93TGF5b3V0TGlzdGVuaW5nUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXN1bHQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfZWxSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LCBAT3B0aW9uYWwoKSBwcml2YXRlIF9ydGxTZXJ2aWNlOiBSdGxTZXJ2aWNlIHwgbnVsbCkge31cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHN0YXJ0TGlzdGVuaW5nKGNvbmZpZzogT3ZlcmZsb3dMYXlvdXRDb25maWcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRDb25maWcoY29uZmlnKTtcbiAgICAgICAgdGhpcy5maXRWaXNpYmxlSXRlbXMoKTtcbiAgICAgICAgdGhpcy5fc2V0Rm9jdXNLZXlNYW5hZ2VyKCk7XG4gICAgICAgIHRoaXMuX2xpc3RlblRvQ2hhbmdlcygpO1xuICAgICAgICB0aGlzLl9zdWJzY3JpYmVUb1J0bCgpO1xuICAgIH1cblxuICAgIHNldENvbmZpZyhjb25maWc6IE92ZXJmbG93TGF5b3V0Q29uZmlnKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2VtaXRSZXN1bHQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Jlc3VsdCQubmV4dCh0aGlzLnJlc3VsdCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub0NoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5pdGVtcy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZml0VmlzaWJsZUl0ZW1zKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2xpc3RlblRvU2l6ZUNoYW5nZXModGhpcy5fZWxSZWYubmF0aXZlRWxlbWVudCwgdGhpcy5jb25maWcuaXRlbXNXcmFwcGVyKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvU2l6ZUNoYW5nZXMoLi4uZWxlbWVudHM6IEhUTUxFbGVtZW50W10pOiB2b2lkIHtcbiAgICAgICAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT5cbiAgICAgICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICAgICAgcmVzaXplT2JzZXJ2YWJsZShlbGVtZW50KVxuICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHNraXAoMSksXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5fbGlzdGVuVG9JdGVtUmVzaXplKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoMzApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpdFZpc2libGVJdGVtcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBmaXRWaXNpYmxlSXRlbXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2xpc3RlblRvSXRlbVJlc2l6ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9hbGxJdGVtcyA9IHRoaXMuY29uZmlnLml0ZW1zLnRvQXJyYXkoKTtcblxuICAgICAgICBsZXQgYWxsSXRlbXMgPSB0aGlzLmNvbmZpZy5pdGVtcy50b0FycmF5KCk7XG4gICAgICAgIGxldCB2aXNpYmxlQ29udGFpbmVySXRlbXMgPSB0aGlzLmNvbmZpZy52aXNpYmxlSXRlbXMudG9BcnJheSgpO1xuXG4gICAgICAgIGFsbEl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAvLyBTb2Z0bHkgaGlkZSBwcmV2aW91c2x5IGNvbXBsZXRlbHkgaGlkZGVuIGl0ZW0gaW4gb3JkZXIgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSBpdCdzIHNpemUuXG4gICAgICAgICAgICBpdGVtLnNvZnRIaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgaXRlbS5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIGl0ZW0uaW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgIGl0ZW0uZmlyc3QgPSBpbmRleCA9PT0gMDtcbiAgICAgICAgICAgIGl0ZW0ubGFzdCA9IGluZGV4ID09PSBhbGxJdGVtcy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgaXRlbS5nbG9iYWxJbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgdmlzaWJsZUNvbnRhaW5lckl0ZW1zW2luZGV4XS5jb250YWluZXJSZWYuaGlkZGVuID0gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2RldGVjdENoYW5nZXMkLm5leHQoKTtcblxuICAgICAgICBhbGxJdGVtcyA9IHRoaXMuY29uZmlnLmRpcmVjdGlvbiA9PT0gJ3JpZ2h0JyA/IGFsbEl0ZW1zIDogYWxsSXRlbXMucmV2ZXJzZSgpO1xuICAgICAgICB2aXNpYmxlQ29udGFpbmVySXRlbXMgPVxuICAgICAgICAgICAgdGhpcy5jb25maWcuZGlyZWN0aW9uID09PSAncmlnaHQnID8gdmlzaWJsZUNvbnRhaW5lckl0ZW1zIDogdmlzaWJsZUNvbnRhaW5lckl0ZW1zLnJldmVyc2UoKTtcblxuICAgICAgICB0aGlzLnJlc3VsdC5zaG93TW9yZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9lbWl0UmVzdWx0KCk7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdGhpcy5fZWxSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgY29uc3QgaXRlbXNDb250YWluZXJXaWR0aCA9IGFsbEl0ZW1zLnJlZHVjZShcbiAgICAgICAgICAgICh0b3RhbCwgaXRlbSkgPT4gdG90YWwgKyB0aGlzLl9nZXRFbGVtZW50V2lkdGgoaXRlbS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLFxuICAgICAgICAgICAgMFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbnRhaW5lcldpZHRoID49IGl0ZW1zQ29udGFpbmVyV2lkdGggJiZcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLnZpc2libGVJdGVtcy5sZW5ndGggPD0gdGhpcy5jb25maWcubWF4VmlzaWJsZUl0ZW1zICYmXG4gICAgICAgICAgICB0aGlzLl9oaWRkZW5JdGVtcy5sZW5ndGggPT09IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBNYWtlIGFsbCBpdGVtcyBmdWxseSB2aXNpYmxlLlxuICAgICAgICAgICAgYWxsSXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGl0ZW0uc29mdEhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJlc3VsdC5zaG93TW9yZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yZXN1bHQuaGlkZGVuSXRlbXMgPSB0aGlzLl9oaWRkZW5JdGVtcztcbiAgICAgICAgICAgIHRoaXMuX2VtaXRSZXN1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuX2xpc3RlblRvSXRlbVJlc2l6ZSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXN1bHQuc2hvd01vcmUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9lbWl0UmVzdWx0KCk7XG4gICAgICAgIGxldCBmaXR0aW5nRWxtQ291bnQgPSAwO1xuICAgICAgICBsZXQgZml0dGluZ0VsbXNXaWR0aCA9IDA7XG4gICAgICAgIGxldCBzaG91bGRIaWRlSXRlbXMgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBzaG93TW9yZUNvbnRhaW5lcldpZHRoID0gTWF0aC5jZWlsKHRoaXMuX2dldEVsZW1lbnRXaWR0aCh0aGlzLmNvbmZpZy5zaG93TW9yZUNvbnRhaW5lcikpO1xuICAgICAgICBsZXQgbGF5b3V0V2lkdGggPSBjb250YWluZXJXaWR0aCAtIHNob3dNb3JlQ29udGFpbmVyV2lkdGg7XG5cbiAgICAgICAgLy8gVHJ5IHRvIGZpbmQgYWxsIGZvcmNlZCB2aXNpYmxlIGl0ZW1zXG4gICAgICAgIGNvbnN0IGZvcmNlZEl0ZW1zSW5kZXhlcyA9IHRoaXMuX2dldEZvcmNlZEl0ZW1zSW5kZXhlcygpO1xuXG4gICAgICAgIGZvcmNlZEl0ZW1zSW5kZXhlcy5mb3JFYWNoKChpdGVtSW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuY29uZmlnLnZpc2libGVJdGVtcy5nZXQoaXRlbUluZGV4KTtcbiAgICAgICAgICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZWxlbWVudFNpemUgPSB0aGlzLl9nZXRFbGVtZW50V2lkdGgoY29udGFpbmVyLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgICAgIGxheW91dFdpZHRoIC09IGVsZW1lbnRTaXplO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAobGF5b3V0V2lkdGggPCAwICYmIGZvcmNlZEl0ZW1zSW5kZXhlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgJ1RoZXJlIGlzIG5vIGVub3VnaCBzcGFjZSB0byBmaXQgYWxsIGZvcmNlZCB2aXNpYmxlIGl0ZW1zIGludG8gdGhlIGNvbnRhaW5lci4gUGxlYXNlIGFkanVzdCB0aGVpciB2aXNpYmlsaXR5IGFjY29yZGluZ2x5LidcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kZXRlY3RDaGFuZ2VzJC5uZXh0KCk7XG5cbiAgICAgICAgdmlzaWJsZUNvbnRhaW5lckl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpdGVtUmVmID0gYWxsSXRlbXNbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKHNob3VsZEhpZGVJdGVtcyAmJiAhaXRlbVJlZi5vdmVyZmxvd0l0ZW0uZm9yY2VWaXNpYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgaXRlbS5jb250YWluZXJSZWYuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpdGVtLnNvZnRIaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpdGVtUmVmLmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50U2l6ZSA9IHRoaXMuX2dldEVsZW1lbnRXaWR0aChpdGVtLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBjb21iaW5lZFdpZHRoID0gZml0dGluZ0VsbXNXaWR0aCArIGVsZW1lbnRTaXplO1xuXG4gICAgICAgICAgICBjb25zdCBjb25kaXRpb24gPVxuICAgICAgICAgICAgICAgIChjb21iaW5lZFdpZHRoIDw9IGxheW91dFdpZHRoIHx8XG4gICAgICAgICAgICAgICAgICAgIChpdGVtID09PSB0aGlzLmNvbmZpZy52aXNpYmxlSXRlbXMubGFzdCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY29tYmluZWRXaWR0aCA8PSBsYXlvdXRXaWR0aCArIHNob3dNb3JlQ29udGFpbmVyV2lkdGgpKSAmJlxuICAgICAgICAgICAgICAgIGZpdHRpbmdFbG1Db3VudCA8IHRoaXMuY29uZmlnLm1heFZpc2libGVJdGVtcztcblxuICAgICAgICAgICAgaWYgKGNvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgIGZpdHRpbmdFbG1zV2lkdGggKz0gZWxlbWVudFNpemU7XG4gICAgICAgICAgICAgICAgZml0dGluZ0VsbUNvdW50Kys7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFpdGVtUmVmLm92ZXJmbG93SXRlbS5mb3JjZVZpc2liaWxpdHkpIHtcbiAgICAgICAgICAgICAgICBzaG91bGRIaWRlSXRlbXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGl0ZW0uc29mdEhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGl0ZW0uY29udGFpbmVyUmVmLmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgaXRlbVJlZi5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBSZXZlcnNlIG9yaWdpbmFsIG9yZGVyIGJhY2suXG4gICAgICAgIGFsbEl0ZW1zID0gdGhpcy5jb25maWcuZGlyZWN0aW9uID09PSAncmlnaHQnID8gYWxsSXRlbXMgOiBhbGxJdGVtcy5yZXZlcnNlKCk7XG5cbiAgICAgICAgYWxsSXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaXRlbS5zb2Z0SGlkZGVuID0gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCBoaWRkZW5JdGVtcyA9IGFsbEl0ZW1zLmZpbHRlcigoaSkgPT4gaS5oaWRkZW4pO1xuICAgICAgICBoaWRkZW5JdGVtcyA9IHRoaXMuY29uZmlnLnJldmVyc2VIaWRkZW5JdGVtcyA/IGhpZGRlbkl0ZW1zLnJldmVyc2UoKSA6IGhpZGRlbkl0ZW1zO1xuICAgICAgICBjb25zdCB2aXNpYmxlSXRlbXMgPSBhbGxJdGVtcy5maWx0ZXIoKGkpID0+ICFpLmhpZGRlbik7XG5cbiAgICAgICAgdmlzaWJsZUl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpdGVtLmluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICBpdGVtLmZpcnN0ID0gaW5kZXggPT09IDA7XG4gICAgICAgICAgICBpdGVtLmxhc3QgPSBpbmRleCA9PT0gdmlzaWJsZUl0ZW1zLmxlbmd0aCAtIDE7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2hpZGRlbkl0ZW1zID0gaGlkZGVuSXRlbXMubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaXRlbS5maXJzdCA9IGluZGV4ID09PSAwO1xuICAgICAgICAgICAgaXRlbS5sYXN0ID0gaW5kZXggPT09IGhpZGRlbkl0ZW1zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICBpdGVtLmluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yZXN1bHQuc2hvd01vcmUgPSB0aGlzLl9oaWRkZW5JdGVtcy5sZW5ndGggPiAwO1xuICAgICAgICB0aGlzLnJlc3VsdC5oaWRkZW5JdGVtcyA9IHRoaXMuX2hpZGRlbkl0ZW1zO1xuICAgICAgICB0aGlzLl9lbWl0UmVzdWx0KCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9JdGVtUmVzaXplID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldEZvY3VzS2V5TWFuYWdlcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5lbmFibGVLZXlib2FyZE5hdmlnYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kaXIgPSB0aGlzLl9ydGxTZXJ2aWNlPy5ydGwudmFsdWUgPyAncnRsJyA6ICdsdHInO1xuICAgICAgICB0aGlzLl9rZXlib2FyZEV2ZW50c01hbmFnZXIgPSBuZXcgRm9jdXNLZXlNYW5hZ2VyKHRoaXMuY29uZmlnLmZvY3VzYWJsZUl0ZW1zKVxuICAgICAgICAgICAgLndpdGhXcmFwKClcbiAgICAgICAgICAgIC53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHRoaXMuX2RpcilcbiAgICAgICAgICAgIC53aXRoVmVydGljYWxPcmllbnRhdGlvbigpXG4gICAgICAgICAgICAuc2tpcFByZWRpY2F0ZSgoaXRlbSkgPT4gIWl0ZW0uZm9jdXNhYmxlIHx8IGl0ZW0uaGlkZGVuKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBSdGwgY2hhbmdlIHN1YnNjcmlwdGlvbiAqL1xuICAgIHByaXZhdGUgX3N1YnNjcmliZVRvUnRsKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX3J0bFNlcnZpY2UgfHwgIXRoaXMuY29uZmlnLmVuYWJsZUtleWJvYXJkTmF2aWdhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3J0bFNlcnZpY2UucnRsLnN1YnNjcmliZSgoaXNSdGwpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kaXIgPSBpc1J0bCA/ICdydGwnIDogJ2x0cic7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9rZXlib2FyZEV2ZW50c01hbmFnZXIgPSB0aGlzLl9rZXlib2FyZEV2ZW50c01hbmFnZXIud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLl9kaXIpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldEZvcmNlZEl0ZW1zSW5kZXhlcygpOiBudW1iZXJbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hbGxJdGVtc1xuICAgICAgICAgICAgLm1hcCgoaXRlbSwgaW5kZXgpID0+IChpdGVtLm92ZXJmbG93SXRlbS5mb3JjZVZpc2liaWxpdHkgPyBpbmRleCA6IC0xKSlcbiAgICAgICAgICAgIC5maWx0ZXIoKGkpID0+IGkgPiAtMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJldHVybnMgY29tYmluZWQgd2lkdGggb2YgdGhlIGVsZW1lbnQgaW5jbHVkaW5nIG1hcmdpbnMuXG4gICAgICogQHBhcmFtIGVsZW1lbnQgRWxlbWVudCB0byBjYWxjdWxhdGUgd2lkdGggb2YuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0RWxlbWVudFdpZHRoKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgZWxlbWVudFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgICAgICAgY29uc3QgZWxlbWVudFdpZHRoID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgY29uc3QgZWxlbWVudFNpemUgPSBlbGVtZW50V2lkdGggKyBwYXJzZUZsb2F0KGVsZW1lbnRTdHlsZS5tYXJnaW5MZWZ0KSArIHBhcnNlRmxvYXQoZWxlbWVudFN0eWxlLm1hcmdpblJpZ2h0KTtcblxuICAgICAgICByZXR1cm4gTWF0aC5jZWlsKGVsZW1lbnRTaXplKTtcbiAgICB9XG59XG4iXX0=
248
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmZsb3ctbGF5b3V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9vdmVyZmxvdy1sYXlvdXQvb3ZlcmZsb3ctbGF5b3V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFhLFFBQVEsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsZ0JBQWdCLEVBQWMsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBYyxJQUFJLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBbUIzRyxNQUFNLE9BQU8sNkJBQTZCO0lBQTFDO1FBQ0ksYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixVQUFLLEdBQXNCLEVBQUUsQ0FBQztRQUM5QixnQkFBVyxHQUFzQixFQUFFLENBQUM7UUFDcEMsaUJBQVksR0FBc0IsRUFBRSxDQUFDO0lBQ3pDLENBQUM7Q0FBQTtBQUdELE1BQU0sT0FBTyxxQkFBcUI7SUFvRDlCLGNBQWM7SUFDZCxZQUFvQixNQUErQixFQUFzQixXQUE4QjtRQUFuRixXQUFNLEdBQU4sTUFBTSxDQUF5QjtRQUFzQixnQkFBVyxHQUFYLFdBQVcsQ0FBbUI7UUEvQ3ZHOztXQUVHO1FBQ0gsV0FBTSxHQUFHLElBQUksNkJBQTZCLEVBQUUsQ0FBQztRQUs3QyxjQUFjO1FBQ04sd0JBQW1CLEdBQUcsSUFBSSxDQUFDO1FBRW5DLGNBQWM7UUFDRyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFcEQsY0FBYztRQUNOLGNBQVMsR0FBc0IsRUFBRSxDQUFDO1FBRTFDLGNBQWM7UUFDTixpQkFBWSxHQUFzQixFQUFFLENB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LENBQUMsS0FBSyxDQUFDO1lBRWxDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25HLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDO0lBRUQsY0FBYztJQUNOLHNCQUFzQjtRQUMxQixPQUFPLElBQUksQ0FBQyxTQUFTO2FBQ2hCLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN0RSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssZ0JBQWdCLENBQUMsT0FBb0I7UUFDekMsTUFBTSxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxDQUFDO1FBQzNELE1BQU0sV0FBVyxHQUFHLFlBQVksR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFOUcsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7O2tIQTdTUSxxQkFBcUI7c0hBQXJCLHFCQUFxQjsyRkFBckIscUJBQXFCO2tCQURqQyxVQUFVOzswQkFzRCtDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb2N1c0tleU1hbmFnZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIE9wdGlvbmFsLCBRdWVyeUxpc3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHJlc2l6ZU9ic2VydmFibGUsIFJ0bFNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBPYnNlcnZhYmxlLCBza2lwLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE92ZXJmbG93TGF5b3V0SXRlbUNvbnRhaW5lckRpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9vdmVyZmxvdy1sYXlvdXQtaXRlbS1jb250YWluZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IE92ZXJmbG93TGF5b3V0Rm9jdXNhYmxlSXRlbSB9IGZyb20gJy4vaW50ZXJmYWNlcy9vdmVyZmxvdy1mb2N1c2FibGUtaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT3ZlcmZsb3dJdGVtUmVmIH0gZnJvbSAnLi9pbnRlcmZhY2VzL292ZXJmbG93LWl0ZW0tcmVmLmludGVyZmFjZSc7XG5pbXBvcnQgeyBPdmVyZmxvd0l0ZW0gfSBmcm9tICcuL2ludGVyZmFjZXMvb3ZlcmZsb3ctaXRlbS5pbnRlcmZhY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE92ZXJmbG93TGF5b3V0Q29uZmlnIHtcbiAgICBpdGVtczogUXVlcnlMaXN0PE92ZXJmbG93SXRlbVJlZj47XG4gICAgZm9jdXNhYmxlSXRlbXM6IFF1ZXJ5TGlzdDxPdmVyZmxvd0xheW91dEZvY3VzYWJsZUl0ZW0+O1xuICAgIHZpc2libGVJdGVtczogUXVlcnlMaXN0PE92ZXJmbG93TGF5b3V0SXRlbUNvbnRhaW5lckRpcmVjdGl2ZT47XG4gICAgaXRlbXNXcmFwcGVyOiBIVE1MRWxlbWVudDtcbiAgICBzaG93TW9yZUNvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgbGF5b3V0Q29udGFpbmVyRWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gICAgbWF4VmlzaWJsZUl0ZW1zOiBudW1iZXI7XG4gICAgZGlyZWN0aW9uOiAnbGVmdCcgfCAncmlnaHQnO1xuICAgIGVuYWJsZUtleWJvYXJkTmF2aWdhdGlvbjogYm9vbGVhbjtcbiAgICByZXZlcnNlSGlkZGVuSXRlbXM6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBPdmVyZmxvd0xheW91dExpc3RlbmluZ1Jlc3VsdCB7XG4gICAgc2hvd01vcmUgPSBmYWxzZTtcbiAgICBpdGVtczogT3ZlcmZsb3dJdGVtUmVmW10gPSBbXTtcbiAgICBoaWRkZW5JdGVtczogT3ZlcmZsb3dJdGVtUmVmW10gPSBbXTtcbiAgICB2aXNpYmxlSXRlbXM6IE92ZXJmbG93SXRlbVJlZltdID0gW107XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBPdmVyZmxvd0xheW91dFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIE92ZXJmbG93IExheW91dCBjb25maWcuXG4gICAgICovXG4gICAgY29uZmlnOiBPdmVyZmxvd0xheW91dENvbmZpZztcblxuICAgIC8qKlxuICAgICAqIE92ZXJmbG93IExheW91dCBjYWxjdWxhdGlvbiByZXN1bHQuXG4gICAgICovXG4gICAgcmVzdWx0ID0gbmV3IE92ZXJmbG93TGF5b3V0TGlzdGVuaW5nUmVzdWx0KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9rZXlib2FyZEV2ZW50c01hbmFnZXI6IEZvY3VzS2V5TWFuYWdlcjxPdmVyZmxvd0xheW91dEZvY3VzYWJsZUl0ZW0+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub0l0ZW1SZXNpemUgPSB0cnVlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2FsbEl0ZW1zOiBPdmVyZmxvd0l0ZW1SZWZbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9oaWRkZW5JdGVtczogT3ZlcmZsb3dJdGVtUmVmW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb3ZlcmZsb3dJdGVtczogT3ZlcmZsb3dJdGVtW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZGV0ZWN0Q2hhbmdlcyQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZXN1bHQkID0gbmV3IFN1YmplY3Q8T3ZlcmZsb3dMYXlvdXRMaXN0ZW5pbmdSZXN1bHQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RpcjogJ3J0bCcgfCAnbHRyJyA9ICdsdHInO1xuXG4gICAgLyoqXG4gICAgICogT2JzZXJ2YWJsZSB3aGljaCBlbWl0cyB3aGVuIGNoYW5nZXMgZGV0ZWN0aW9uIGlzIHJlcXVpcmVkLlxuICAgICAqL1xuICAgIGdldCBkZXRlY3RDaGFuZ2VzKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGV0ZWN0Q2hhbmdlcyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT2JzZXJ2YWJsZSB3aGljaCBlbWl0cyB3aGVuIG5ldyBjYWxjdWxhdGlvbiByZXN1bHQgaXMgYXZhaWxhYmxlLlxuICAgICAqL1xuICAgIGdldCBvblJlc3VsdCgpOiBPYnNlcnZhYmxlPE92ZXJmbG93TGF5b3V0TGlzdGVuaW5nUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXN1bHQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfZWxSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LCBAT3B0aW9uYWwoKSBwcml2YXRlIF9ydGxTZXJ2aWNlOiBSdGxTZXJ2aWNlIHwgbnVsbCkge31cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHN0YXJ0TGlzdGVuaW5nKGNvbmZpZzogT3ZlcmZsb3dMYXlvdXRDb25maWcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRDb25maWcoY29uZmlnKTtcbiAgICAgICAgdGhpcy5maXRWaXNpYmxlSXRlbXMoKTtcbiAgICAgICAgdGhpcy5fc2V0Rm9jdXNLZXlNYW5hZ2VyKCk7XG4gICAgICAgIHRoaXMuX2xpc3RlblRvQ2hhbmdlcygpO1xuICAgICAgICB0aGlzLl9zdWJzY3JpYmVUb1J0bCgpO1xuICAgIH1cblxuICAgIHNldENvbmZpZyhjb25maWc6IE92ZXJmbG93TGF5b3V0Q29uZmlnKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2VtaXRSZXN1bHQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Jlc3VsdCQubmV4dCh0aGlzLnJlc3VsdCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub0NoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5pdGVtcy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5maXRWaXNpYmxlSXRlbXMoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9TaXplQ2hhbmdlcyh0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50LCB0aGlzLmNvbmZpZy5pdGVtc1dyYXBwZXIpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9TaXplQ2hhbmdlcyguLi5lbGVtZW50czogSFRNTEVsZW1lbnRbXSk6IHZvaWQge1xuICAgICAgICBlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PlxuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgICAgICAgICByZXNpemVPYnNlcnZhYmxlKGVsZW1lbnQpXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcCgxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLl9saXN0ZW5Ub0l0ZW1SZXNpemUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgzMClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZml0VmlzaWJsZUl0ZW1zKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIGF2YWlsYWJsZSBzcGFjZSBmb3IgaXRlbXMgYW5kIGhpZGVzIGl0ZW1zIHRoYXQgYXJlIG5vdCBmaXR0aW5nIGludG8gdGhlIGNvbnRhaW5lci5cbiAgICAgKi9cbiAgICBmaXRWaXNpYmxlSXRlbXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2xpc3RlblRvSXRlbVJlc2l6ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9hbGxJdGVtcyA9IHRoaXMuY29uZmlnLml0ZW1zLnRvQXJyYXkoKTtcblxuICAgICAgICBsZXQgYWxsSXRlbXMgPSB0aGlzLmNvbmZpZy5pdGVtcy50b0FycmF5KCk7XG4gICAgICAgIGxldCB2aXNpYmxlQ29udGFpbmVySXRlbXMgPSB0aGlzLmNvbmZpZy52aXNpYmxlSXRlbXMudG9BcnJheSgpO1xuXG4gICAgICAgIHRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7dGhpcy5fZWxSZWYubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHR9cHhgO1xuXG4gICAgICAgIGFsbEl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAvLyBTb2Z0bHkgaGlkZSBwcmV2aW91c2x5IGNvbXBsZXRlbHkgaGlkZGVuIGl0ZW0gaW4gb3JkZXIgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSBpdCdzIHNpemUuXG4gICAgICAgICAgICBpdGVtLnNvZnRIaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgaXRlbS5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIGl0ZW0uaW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgIGl0ZW0uZmlyc3QgPSBpbmRleCA9PT0gMDtcbiAgICAgICAgICAgIGl0ZW0ubGFzdCA9IGluZGV4ID09PSBhbGxJdGVtcy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgaXRlbS5nbG9iYWxJbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgdmlzaWJsZUNvbnRhaW5lckl0ZW1zW2luZGV4XS5jb250YWluZXJSZWYuaGlkZGVuID0gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2RldGVjdENoYW5nZXMkLm5leHQoKTtcblxuICAgICAgICBhbGxJdGVtcyA9IHRoaXMuY29uZmlnLmRpcmVjdGlvbiA9PT0gJ3JpZ2h0JyA/IGFsbEl0ZW1zIDogYWxsSXRlbXMucmV2ZXJzZSgpO1xuICAgICAgICB2aXNpYmxlQ29udGFpbmVySXRlbXMgPVxuICAgICAgICAgICAgdGhpcy5jb25maWcuZGlyZWN0aW9uID09PSAncmlnaHQnID8gdmlzaWJsZUNvbnRhaW5lckl0ZW1zIDogdmlzaWJsZUNvbnRhaW5lckl0ZW1zLnJldmVyc2UoKTtcblxuICAgICAgICB0aGlzLnJlc3VsdC5zaG93TW9yZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9lbWl0UmVzdWx0KCk7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdGhpcy5fZWxSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgY29uc3QgaXRlbXNDb250YWluZXJXaWR0aCA9IGFsbEl0ZW1zLnJlZHVjZShcbiAgICAgICAgICAgICh0b3RhbCwgaXRlbSkgPT4gdG90YWwgKyB0aGlzLl9nZXRFbGVtZW50V2lkdGgoaXRlbS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLFxuICAgICAgICAgICAgMFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbnRhaW5lcldpZHRoID49IGl0ZW1zQ29udGFpbmVyV2lkdGggJiZcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLnZpc2libGVJdGVtcy5sZW5ndGggPD0gdGhpcy5jb25maWcubWF4VmlzaWJsZUl0ZW1zICYmXG4gICAgICAgICAgICB0aGlzLl9oaWRkZW5JdGVtcy5sZW5ndGggPT09IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBNYWtlIGFsbCBpdGVtcyBmdWxseSB2aXNpYmxlLlxuICAgICAgICAgICAgYWxsSXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGl0ZW0uc29mdEhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJlc3VsdC5zaG93TW9yZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yZXN1bHQuaGlkZGVuSXRlbXMgPSB0aGlzLl9oaWRkZW5JdGVtcztcbiAgICAgICAgICAgIHRoaXMuX2VtaXRSZXN1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuX2xpc3RlblRvSXRlbVJlc2l6ZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9ICcnO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzdWx0LnNob3dNb3JlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fZW1pdFJlc3VsdCgpO1xuICAgICAgICBsZXQgZml0dGluZ0VsbUNvdW50ID0gMDtcbiAgICAgICAgbGV0IGZpdHRpbmdFbG1zV2lkdGggPSAwO1xuICAgICAgICBsZXQgc2hvdWxkSGlkZUl0ZW1zID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3Qgc2hvd01vcmVDb250YWluZXJXaWR0aCA9IE1hdGguY2VpbCh0aGlzLl9nZXRFbGVtZW50V2lkdGgodGhpcy5jb25maWcuc2hvd01vcmVDb250YWluZXIpKTtcbiAgICAgICAgbGV0IGxheW91dFdpZHRoID0gY29udGFpbmVyV2lkdGggLSBzaG93TW9yZUNvbnRhaW5lcldpZHRoO1xuXG4gICAgICAgIC8vIFRyeSB0byBmaW5kIGFsbCBmb3JjZWQgdmlzaWJsZSBpdGVtc1xuICAgICAgICBjb25zdCBmb3JjZWRJdGVtc0luZGV4ZXMgPSB0aGlzLl9nZXRGb3JjZWRJdGVtc0luZGV4ZXMoKTtcblxuICAgICAgICBmb3JjZWRJdGVtc0luZGV4ZXMuZm9yRWFjaCgoaXRlbUluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmNvbmZpZy52aXNpYmxlSXRlbXMuZ2V0KGl0ZW1JbmRleCk7XG4gICAgICAgICAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRTaXplID0gdGhpcy5fZ2V0RWxlbWVudFdpZHRoKGNvbnRhaW5lci5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgICAgICBsYXlvdXRXaWR0aCAtPSBlbGVtZW50U2l6ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgbWF4VmlzaWJsZUl0ZW1zID1cbiAgICAgICAgICAgIHRoaXMuY29uZmlnLm1heFZpc2libGVJdGVtcyAtXG4gICAgICAgICAgICBmb3JjZWRJdGVtc0luZGV4ZXMuZmlsdGVyKChpbmRleCkgPT4gaW5kZXggPj0gdGhpcy5jb25maWcubWF4VmlzaWJsZUl0ZW1zKS5sZW5ndGg7XG5cbiAgICAgICAgaWYgKGxheW91dFdpZHRoIDwgMCAmJiBmb3JjZWRJdGVtc0luZGV4ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICdUaGVyZSBpcyBubyBlbm91Z2ggc3BhY2UgdG8gZml0IGFsbCBmb3JjZWQgdmlzaWJsZSBpdGVtcyBpbnRvIHRoZSBjb250YWluZXIuIFBsZWFzZSBhZGp1c3QgdGhlaXIgdmlzaWJpbGl0eSBhY2NvcmRpbmdseS4nXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZGV0ZWN0Q2hhbmdlcyQubmV4dCgpO1xuXG4gICAgICAgIHZpc2libGVDb250YWluZXJJdGVtcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbVJlZiA9IGFsbEl0ZW1zW2luZGV4XTtcbiAgICAgICAgICAgIGlmIChzaG91bGRIaWRlSXRlbXMgJiYgIWl0ZW1SZWYub3ZlcmZsb3dJdGVtLmZvcmNlVmlzaWJpbGl0eSkge1xuICAgICAgICAgICAgICAgIGl0ZW0uY29udGFpbmVyUmVmLmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgaXRlbS5zb2Z0SGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaXRlbVJlZi5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZWxlbWVudFNpemUgPSB0aGlzLl9nZXRFbGVtZW50V2lkdGgoaXRlbS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgY29tYmluZWRXaWR0aCA9IGZpdHRpbmdFbG1zV2lkdGggKyBlbGVtZW50U2l6ZTtcblxuICAgICAgICAgICAgY29uc3QgY29uZGl0aW9uID1cbiAgICAgICAgICAgICAgICAoY29tYmluZWRXaWR0aCA8PSBsYXlvdXRXaWR0aCB8fFxuICAgICAgICAgICAgICAgICAgICAoaXRlbSA9PT0gdGhpcy5jb25maWcudmlzaWJsZUl0ZW1zLmxhc3QgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVkV2lkdGggPD0gbGF5b3V0V2lkdGggKyBzaG93TW9yZUNvbnRhaW5lcldpZHRoKSkgJiZcbiAgICAgICAgICAgICAgICBmaXR0aW5nRWxtQ291bnQgPCBtYXhWaXNpYmxlSXRlbXM7XG5cbiAgICAgICAgICAgIGlmIChjb25kaXRpb24pIHtcbiAgICAgICAgICAgICAgICBmaXR0aW5nRWxtc1dpZHRoICs9IGVsZW1lbnRTaXplO1xuICAgICAgICAgICAgICAgIGZpdHRpbmdFbG1Db3VudCsrO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghaXRlbVJlZi5vdmVyZmxvd0l0ZW0uZm9yY2VWaXNpYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgc2hvdWxkSGlkZUl0ZW1zID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpdGVtLnNvZnRIaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpdGVtLmNvbnRhaW5lclJlZi5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgIGl0ZW1SZWYuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUmV2ZXJzZSBvcmlnaW5hbCBvcmRlciBiYWNrLlxuICAgICAgICBhbGxJdGVtcyA9IHRoaXMuY29uZmlnLmRpcmVjdGlvbiA9PT0gJ3JpZ2h0JyA/IGFsbEl0ZW1zIDogYWxsSXRlbXMucmV2ZXJzZSgpO1xuXG4gICAgICAgIGFsbEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGl0ZW0uc29mdEhpZGRlbiA9IGZhbHNlO1xuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgaGlkZGVuSXRlbXMgPSBhbGxJdGVtcy5maWx0ZXIoKGkpID0+IGkuaGlkZGVuKTtcbiAgICAgICAgaGlkZGVuSXRlbXMgPSB0aGlzLmNvbmZpZy5yZXZlcnNlSGlkZGVuSXRlbXMgPyBoaWRkZW5JdGVtcy5yZXZlcnNlKCkgOiBoaWRkZW5JdGVtcztcbiAgICAgICAgY29uc3QgdmlzaWJsZUl0ZW1zID0gYWxsSXRlbXMuZmlsdGVyKChpKSA9PiAhaS5oaWRkZW4pO1xuXG4gICAgICAgIHZpc2libGVJdGVtcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaXRlbS5pbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgaXRlbS5maXJzdCA9IGluZGV4ID09PSAwO1xuICAgICAgICAgICAgaXRlbS5sYXN0ID0gaW5kZXggPT09IHZpc2libGVJdGVtcy5sZW5ndGggLSAxO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9oaWRkZW5JdGVtcyA9IGhpZGRlbkl0ZW1zLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGl0ZW0uZmlyc3QgPSBpbmRleCA9PT0gMDtcbiAgICAgICAgICAgIGl0ZW0ubGFzdCA9IGluZGV4ID09PSBoaWRkZW5JdGVtcy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgaXRlbS5pbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucmVzdWx0LnNob3dNb3JlID0gdGhpcy5faGlkZGVuSXRlbXMubGVuZ3RoID4gMDtcbiAgICAgICAgdGhpcy5yZXN1bHQuaGlkZGVuSXRlbXMgPSB0aGlzLl9oaWRkZW5JdGVtcztcbiAgICAgICAgdGhpcy5fZW1pdFJlc3VsdCgpO1xuICAgICAgICB0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9ICcnO1xuXG4gICAgICAgIHRoaXMuX2xpc3RlblRvSXRlbVJlc2l6ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRGb2N1c0tleU1hbmFnZXIoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jb25maWcuZW5hYmxlS2V5Ym9hcmROYXZpZ2F0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZGlyID0gdGhpcy5fcnRsU2VydmljZT8ucnRsLnZhbHVlID8gJ3J0bCcgOiAnbHRyJztcbiAgICAgICAgdGhpcy5fa2V5Ym9hcmRFdmVudHNNYW5hZ2VyID0gbmV3IEZvY3VzS2V5TWFuYWdlcih0aGlzLmNvbmZpZy5mb2N1c2FibGVJdGVtcylcbiAgICAgICAgICAgIC53aXRoV3JhcCgpXG4gICAgICAgICAgICAud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLl9kaXIpXG4gICAgICAgICAgICAud2l0aFZlcnRpY2FsT3JpZW50YXRpb24oKVxuICAgICAgICAgICAgLnNraXBQcmVkaWNhdGUoKGl0ZW0pID0+ICFpdGVtLm5hdmlnYWJsZSB8fCBpdGVtLmhpZGRlbik7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gUnRsIGNoYW5nZSBzdWJzY3JpcHRpb24gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpYmVUb1J0bCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9ydGxTZXJ2aWNlIHx8ICF0aGlzLmNvbmZpZy5lbmFibGVLZXlib2FyZE5hdmlnYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICB0aGlzLl9ydGxTZXJ2aWNlLnJ0bC5zdWJzY3JpYmUoKGlzUnRsKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGlyID0gaXNSdGwgPyAncnRsJyA6ICdsdHInO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fa2V5Ym9hcmRFdmVudHNNYW5hZ2VyID0gdGhpcy5fa2V5Ym9hcmRFdmVudHNNYW5hZ2VyLndpdGhIb3Jpem9udGFsT3JpZW50YXRpb24odGhpcy5fZGlyKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRGb3JjZWRJdGVtc0luZGV4ZXMoKTogbnVtYmVyW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWxsSXRlbXNcbiAgICAgICAgICAgIC5tYXAoKGl0ZW0sIGluZGV4KSA9PiAoaXRlbS5vdmVyZmxvd0l0ZW0uZm9yY2VWaXNpYmlsaXR5ID8gaW5kZXggOiAtMSkpXG4gICAgICAgICAgICAuZmlsdGVyKChpKSA9PiBpID4gLTEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZXR1cm5zIGNvbWJpbmVkIHdpZHRoIG9mIHRoZSBlbGVtZW50IGluY2x1ZGluZyBtYXJnaW5zLlxuICAgICAqIEBwYXJhbSBlbGVtZW50IEVsZW1lbnQgdG8gY2FsY3VsYXRlIHdpZHRoIG9mLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldEVsZW1lbnRXaWR0aChlbGVtZW50OiBIVE1MRWxlbWVudCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRXaWR0aCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRTaXplID0gZWxlbWVudFdpZHRoICsgcGFyc2VGbG9hdChlbGVtZW50U3R5bGUubWFyZ2luTGVmdCkgKyBwYXJzZUZsb2F0KGVsZW1lbnRTdHlsZS5tYXJnaW5SaWdodCk7XG5cbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbChlbGVtZW50U2l6ZSk7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,3 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const FD_OVERFLOW_FOCUSABLE_ITEM = new InjectionToken('FdOverflowLayoutFocusableItem');
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmZsb3ctZm9jdXNhYmxlLWl0ZW0udG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9vdmVyZmxvdy1sYXlvdXQvdG9rZW5zL292ZXJmbG93LWZvY3VzYWJsZS1pdGVtLnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0MsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxjQUFjLENBQ3hELCtCQUErQixDQUNsQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE92ZXJmbG93TGF5b3V0Rm9jdXNhYmxlSXRlbSB9IGZyb20gJy4uL2ludGVyZmFjZXMvb3ZlcmZsb3ctZm9jdXNhYmxlLWl0ZW0uaW50ZXJmYWNlJztcblxuZXhwb3J0IGNvbnN0IEZEX09WRVJGTE9XX0ZPQ1VTQUJMRV9JVEVNID0gbmV3IEluamVjdGlvblRva2VuPE92ZXJmbG93TGF5b3V0Rm9jdXNhYmxlSXRlbT4oXG4gICAgJ0ZkT3ZlcmZsb3dMYXlvdXRGb2N1c2FibGVJdGVtJ1xuKTtcbiJdfQ==
@@ -1,5 +1,4 @@
1
1
  export * from './tabs.module';
2
- export * from './tabs.service';
3
2
  export * from './tab-list.component';
4
3
  export * from './tab-panel/tab-panel.component';
5
4
  export * from './tab-item/tab-item.directive';
@@ -8,4 +7,4 @@ export * from './tab-nav/tab-nav.component';
8
7
  export * from './tab-utils/tab-directives';
9
8
  export * from './tab-item-expand/tab-item-expand.component';
10
9
  export * from './deprecated-tabs-compact.directive';
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3RhYnMvcHVibGljX2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsNkNBQTZDLENBQUM7QUFDNUQsY0FBYyxxQ0FBcUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdGFicy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJzLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi90YWItbGlzdC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90YWItcGFuZWwvdGFiLXBhbmVsLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RhYi1pdGVtL3RhYi1pdGVtLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3RhYi1saW5rL3RhYi1saW5rLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3RhYi1uYXYvdGFiLW5hdi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90YWItdXRpbHMvdGFiLWRpcmVjdGl2ZXMnO1xuZXhwb3J0ICogZnJvbSAnLi90YWItaXRlbS1leHBhbmQvdGFiLWl0ZW0tZXhwYW5kLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2RlcHJlY2F0ZWQtdGFicy1jb21wYWN0LmRpcmVjdGl2ZSc7XG4iXX0=
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3RhYnMvcHVibGljX2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMscUNBQXFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3RhYnMubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vdGFiLWxpc3QuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFiLXBhbmVsL3RhYi1wYW5lbC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90YWItaXRlbS90YWItaXRlbS5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi90YWItbGluay90YWItbGluay5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi90YWItbmF2L3RhYi1uYXYuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFiLXV0aWxzL3RhYi1kaXJlY3RpdmVzJztcbmV4cG9ydCAqIGZyb20gJy4vdGFiLWl0ZW0tZXhwYW5kL3RhYi1pdGVtLWV4cGFuZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9kZXByZWNhdGVkLXRhYnMtY29tcGFjdC5kaXJlY3RpdmUnO1xuIl19
@@ -10,7 +10,7 @@ import * as i4 from "@fundamental-ngx/i18n";
10
10
  export class TabItemExpandComponent {
11
11
  }
12
12
  TabItemExpandComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TabItemExpandComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
13
- TabItemExpandComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: TabItemExpandComponent, selector: "fd-item-expand", inputs: { label: "label" }, host: { attributes: { "role": "tab" }, classAttribute: "fd-tabs__item fd-tabs__item--overflow" }, ngImport: i0, template: "<a class=\"fd-tabs__link\" role=\"tab\" [attr.tabindex]=\"0\">\n <span *ngIf=\"label || ('coreTabs.tabListExpandButtonText' | fdTranslate) as expandButtonText\" fd-tab-tag>{{\n expandButtonText\n }}</span>\n <fd-icon glyph=\"slim-arrow-down\" aria-label=\"See More\"></fd-icon>\n</a>\n", styles: [".fd-tabs__item--overflow{margin-left:auto;margin-right:0}[dir=rtl] .fd-tabs__item--overflow,.fd-tabs__item--overflow[dir=rtl]{margin-left:0;margin-right:auto}.fd-tabs__item--overflow fd-icon:not(:only-child){margin-left:.5rem}[dir=rtl] .fd-tabs__item--overflow fd-icon:not(:only-child),.fd-tabs__item--overflow fd-icon:not(:only-child)[dir=rtl]{margin-left:0;margin-right:.5rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "class", "ariaLabel"] }, { kind: "directive", type: i3.TabTagDirective, selector: "[fd-tab-tag]" }, { kind: "pipe", type: i4.FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
13
+ TabItemExpandComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: TabItemExpandComponent, selector: "fd-item-expand", inputs: { label: "label" }, host: { attributes: { "role": "tab" }, classAttribute: "fd-tabs__item fd-tabs__item--overflow" }, ngImport: i0, template: "<a class=\"fd-tabs__link\" role=\"tab\" [attr.tabindex]=\"0\">\n <span *ngIf=\"label || ('coreTabs.tabListExpandButtonText' | fdTranslate) as expandButtonText\" fd-tab-tag>{{\n expandButtonText\n }}</span>\n <fd-icon glyph=\"slim-arrow-down\" aria-label=\"See More\"></fd-icon>\n</a>\n", styles: [".fd-tabs__item--overflow{margin-left:auto;margin-right:0}[dir=rtl] .fd-tabs__item--overflow,.fd-tabs__item--overflow[dir=rtl]{margin-left:0;margin-right:auto}.fd-tabs__item--overflow fd-icon:not(:only-child){margin-left:.5rem}[dir=rtl] .fd-tabs__item--overflow fd-icon:not(:only-child),.fd-tabs__item--overflow fd-icon:not(:only-child)[dir=rtl]{margin-left:0;margin-right:.5rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "class", "ariaLabel"] }, { kind: "directive", type: i3.TabTagDirective, selector: "[fdTabTag], [fd-tab-tag]" }, { kind: "pipe", type: i4.FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
14
14
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TabItemExpandComponent, decorators: [{
15
15
  type: Component,
16
16
  args: [{ selector: 'fd-item-expand', host: {
@@ -1,5 +1,6 @@
1
+ import { ENTER, SPACE } from '@angular/cdk/keycodes';
1
2
  import { Directive, ElementRef, EventEmitter, HostBinding, HostListener, Input, Output } from '@angular/core';
2
- import { AbstractFdNgxClass } from '@fundamental-ngx/core/utils';
3
+ import { AbstractFdNgxClass, KeyUtil } from '@fundamental-ngx/core/utils';
3
4
  import * as i0 from "@angular/core";
4
5
  /**
5
6
  * Tab link for nav mode
@@ -17,6 +18,8 @@ export class TabLinkDirective extends AbstractFdNgxClass {
17
18
  this.elementRef = elementRef;
18
19
  /** Event Emitted always when, any keyboard event is dispatched on this element */
19
20
  this.keyDown = new EventEmitter();
21
+ /** Event Emitted when item has been focused. */
22
+ this.focused = new EventEmitter();
20
23
  }
21
24
  /** @hidden */
22
25
  _setProperties() {
@@ -26,12 +29,22 @@ export class TabLinkDirective extends AbstractFdNgxClass {
26
29
  }
27
30
  }
28
31
  /** @hidden */
29
- onKeyDown(e) {
30
- this.keyDown.emit(e);
32
+ _onFocus() {
33
+ this.focused.emit();
34
+ }
35
+ /** @hidden */
36
+ _onKeyUp(event) {
37
+ if (KeyUtil.isKeyCode(event, [ENTER, SPACE])) {
38
+ this.focused.emit();
39
+ }
40
+ }
41
+ /** @hidden */
42
+ focus() {
43
+ this.elementRef.nativeElement.focus();
31
44
  }
32
45
  }
33
46
  TabLinkDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TabLinkDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
34
- TabLinkDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.2", type: TabLinkDirective, selector: "[fd-tab-link]", inputs: { active: "active", disabled: "disabled" }, outputs: { keyDown: "keyDown" }, host: { attributes: { "role": "tab", "tabindex": "-1" }, listeners: { "keydown": "onKeyDown($event)" }, properties: { "attr.aria-selected": "this.active", "attr.aria-disabled": "this.disabled", "class.is-disabled": "this.disabled" } }, usesInheritance: true, ngImport: i0 });
47
+ TabLinkDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.2", type: TabLinkDirective, selector: "[fd-tab-link]", inputs: { active: "active", disabled: "disabled" }, outputs: { keyDown: "keyDown", focused: "focused" }, host: { attributes: { "role": "tab", "tabindex": "-1" }, listeners: { "focus": "_onFocus()", "keyup": "_onKeyUp($event)" }, properties: { "attr.aria-selected": "this.active", "attr.aria-disabled": "this.disabled", "class.is-disabled": "this.disabled" } }, usesInheritance: true, ngImport: i0 });
35
48
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TabLinkDirective, decorators: [{
36
49
  type: Directive,
37
50
  args: [{
@@ -57,8 +70,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
57
70
  args: ['class.is-disabled']
58
71
  }], keyDown: [{
59
72
  type: Output
60
- }], onKeyDown: [{
73
+ }], focused: [{
74
+ type: Output
75
+ }], _onFocus: [{
76
+ type: HostListener,
77
+ args: ['focus']
78
+ }], _onKeyUp: [{
61
79
  type: HostListener,
62
- args: ['keydown', ['$event']]
80
+ args: ['keyup', ['$event']]
63
81
  }] } });
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLWxpbmsuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdGFicy90YWItbGluay90YWItbGluay5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7QUFFakU7Ozs7Ozs7O0dBUUc7QUFVSCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsa0JBQWtCO0lBMkJwRCxjQUFjO0lBQ2QsWUFBbUIsVUFBc0I7UUFDckMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBREgsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQWJ6QyxrRkFBa0Y7UUFFekUsWUFBTyxHQUFnQyxJQUFJLFlBQVksRUFBaUIsQ0FBQztJQWFsRixDQUFDO0lBWEQsY0FBYztJQUNkLGNBQWM7UUFDVixJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDekMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQzFDO0lBQ0wsQ0FBQztJQU9ELGNBQWM7SUFFZCxTQUFTLENBQUMsQ0FBZ0I7UUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekIsQ0FBQzs7NkdBcENRLGdCQUFnQjtpR0FBaEIsZ0JBQWdCOzJGQUFoQixnQkFBZ0I7a0JBUjVCLFNBQVM7bUJBQUM7b0JBQ1AsOERBQThEO29CQUM5RCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsSUFBSSxFQUFFO3dCQUNGLElBQUksRUFBRSxLQUFLO3dCQUNYLFFBQVEsRUFBRSxJQUFJO3FCQUNqQjtpQkFDSjtpR0FLRyxNQUFNO3NCQUZMLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsb0JBQW9CO2dCQVVqQyxRQUFRO3NCQUhQLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsb0JBQW9COztzQkFDaEMsV0FBVzt1QkFBQyxtQkFBbUI7Z0JBS3ZCLE9BQU87c0JBRGYsTUFBTTtnQkFrQlAsU0FBUztzQkFEUixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdEZkTmd4Q2xhc3MgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdXRpbHMnO1xuXG4vKipcbiAqIFRhYiBsaW5rIGZvciBuYXYgbW9kZVxuICpcbiAqIGBgYGh0bWxcbiAqIDxhIGZkLXRhYi1saW5rPlxuICogICAgbGlua1xuICogPC9hPlxuICogYGBgXG4gKi9cblxuQERpcmVjdGl2ZSh7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ1tmZC10YWItbGlua10nLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgcm9sZTogJ3RhYicsXG4gICAgICAgIHRhYmluZGV4OiAnLTEnXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBUYWJMaW5rRGlyZWN0aXZlIGV4dGVuZHMgQWJzdHJhY3RGZE5neENsYXNzIHtcbiAgICAvKiogV2hldGhlciB0aGUgbGluayBpcyBhY3RpdmUgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXNlbGVjdGVkJylcbiAgICBhY3RpdmU6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBPbmx5IHZpc3VhbCAvIGFjY2Vzc2liaWxpdHkgdGhpbmcgb24gdGFiLW5hdiBtb2RlXG4gICAgICogUm91dGVyTGluayBkb2VzIG5vdCByZXNwZWN0IHByZXZlbnREZWZhdWx0L3N0b3BQcm9wYWdhdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGlzYWJsZWQnKVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaXMtZGlzYWJsZWQnKVxuICAgIGRpc2FibGVkOiBib29sZWFuO1xuXG4gICAgLyoqIEV2ZW50IEVtaXR0ZWQgYWx3YXlzIHdoZW4sIGFueSBrZXlib2FyZCBldmVudCBpcyBkaXNwYXRjaGVkIG9uIHRoaXMgZWxlbWVudCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGtleURvd246IEV2ZW50RW1pdHRlcjxLZXlib2FyZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8S2V5Ym9hcmRFdmVudD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NldFByb3BlcnRpZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FkZENsYXNzVG9FbGVtZW50KCdmZC10YWJzX19saW5rJyk7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5fYWRkQ2xhc3NUb0VsZW1lbnQoJ2lzLXNlbGVjdGVkJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnRSZWYpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgb25LZXlEb3duKGU6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5rZXlEb3duLmVtaXQoZSk7XG4gICAgfVxufVxuIl19
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLWxpbmsuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdGFicy90YWItbGluay90YWItbGluay5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7QUFFMUU7Ozs7Ozs7O0dBUUc7QUFVSCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsa0JBQWtCO0lBK0JwRCxjQUFjO0lBQ2QsWUFBbUIsVUFBc0I7UUFDckMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBREgsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQWpCekMsa0ZBQWtGO1FBRXpFLFlBQU8sR0FBZ0MsSUFBSSxZQUFZLEVBQWlCLENBQUM7UUFFbEYsZ0RBQWdEO1FBRXZDLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBYTVDLENBQUM7SUFYRCxjQUFjO0lBQ2QsY0FBYztRQUNWLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN6QyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDYixJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDMUM7SUFDTCxDQUFDO0lBT0QsY0FBYztJQUVOLFFBQVE7UUFDWixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxjQUFjO0lBRU4sUUFBUSxDQUFDLEtBQW9CO1FBQ2pDLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUMxQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ3ZCO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDZCxLQUFLO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDMUMsQ0FBQzs7NkdBckRRLGdCQUFnQjtpR0FBaEIsZ0JBQWdCOzJGQUFoQixnQkFBZ0I7a0JBUjVCLFNBQVM7bUJBQUM7b0JBQ1AsOERBQThEO29CQUM5RCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsSUFBSSxFQUFFO3dCQUNGLElBQUksRUFBRSxLQUFLO3dCQUNYLFFBQVEsRUFBRSxJQUFJO3FCQUNqQjtpQkFDSjtpR0FLRyxNQUFNO3NCQUZMLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsb0JBQW9CO2dCQVVqQyxRQUFRO3NCQUhQLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsb0JBQW9COztzQkFDaEMsV0FBVzt1QkFBQyxtQkFBbUI7Z0JBS3ZCLE9BQU87c0JBRGYsTUFBTTtnQkFLRSxPQUFPO3NCQURmLE1BQU07Z0JBa0JDLFFBQVE7c0JBRGYsWUFBWTt1QkFBQyxPQUFPO2dCQU9iLFFBQVE7c0JBRGYsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb2N1c2FibGVPcHRpb24gfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBFTlRFUiwgU1BBQ0UgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0RmROZ3hDbGFzcywgS2V5VXRpbCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS91dGlscyc7XG5cbi8qKlxuICogVGFiIGxpbmsgZm9yIG5hdiBtb2RlXG4gKlxuICogYGBgaHRtbFxuICogPGEgZmQtdGFiLWxpbms+XG4gKiAgICBsaW5rXG4gKiA8L2E+XG4gKiBgYGBcbiAqL1xuXG5ARGlyZWN0aXZlKHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnW2ZkLXRhYi1saW5rXScsXG4gICAgaG9zdDoge1xuICAgICAgICByb2xlOiAndGFiJyxcbiAgICAgICAgdGFiaW5kZXg6ICctMSdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIFRhYkxpbmtEaXJlY3RpdmUgZXh0ZW5kcyBBYnN0cmFjdEZkTmd4Q2xhc3MgaW1wbGVtZW50cyBGb2N1c2FibGVPcHRpb24ge1xuICAgIC8qKiBXaGV0aGVyIHRoZSBsaW5rIGlzIGFjdGl2ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtc2VsZWN0ZWQnKVxuICAgIGFjdGl2ZTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIE9ubHkgdmlzdWFsIC8gYWNjZXNzaWJpbGl0eSB0aGluZyBvbiB0YWItbmF2IG1vZGVcbiAgICAgKiBSb3V0ZXJMaW5rIGRvZXMgbm90IHJlc3BlY3QgcHJldmVudERlZmF1bHQvc3RvcFByb3BhZ2F0aW9uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1kaXNhYmxlZCcpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pcy1kaXNhYmxlZCcpXG4gICAgZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgICAvKiogRXZlbnQgRW1pdHRlZCBhbHdheXMgd2hlbiwgYW55IGtleWJvYXJkIGV2ZW50IGlzIGRpc3BhdGNoZWQgb24gdGhpcyBlbGVtZW50ICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkga2V5RG93bjogRXZlbnRFbWl0dGVyPEtleWJvYXJkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxLZXlib2FyZEV2ZW50PigpO1xuXG4gICAgLyoqIEV2ZW50IEVtaXR0ZWQgd2hlbiBpdGVtIGhhcyBiZWVuIGZvY3VzZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgZm9jdXNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NldFByb3BlcnRpZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FkZENsYXNzVG9FbGVtZW50KCdmZC10YWJzX19saW5rJyk7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5fYWRkQ2xhc3NUb0VsZW1lbnQoJ2lzLXNlbGVjdGVkJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnRSZWYpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcignZm9jdXMnKVxuICAgIHByaXZhdGUgX29uRm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9jdXNlZC5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXl1cCcsIFsnJGV2ZW50J10pXG4gICAgcHJpdmF0ZSBfb25LZXlVcChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtFTlRFUiwgU1BBQ0VdKSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkLmVtaXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxufVxuIl19