@nova-design-system/nova-angular-18 3.28.0 → 3.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -151,7 +151,7 @@ Add the Nova Font Pro URL to the styles array in your `angular.json` configurati
151
151
  ### Option 2: Import in Styles.css
152
152
 
153
153
  ```css
154
- @import url('contact-us-for-URL');
154
+ @import url('contact-us-for-URL/nova-fonts-pro.css');
155
155
  ```
156
156
 
157
157
  ### Option 3: HTML Integration
@@ -80,8 +80,12 @@ export class NvDatatable {
80
80
  pageIndex: 0,
81
81
  pageSize: this.pagination()?.initialPageSize || 10,
82
82
  });
83
- /** Sorting state for controlled sorting (server mode) */
84
- this.sortingState = signal(this.sorting()?.sortState || []);
83
+ /**
84
+ * Sorting state. When sorting.sortState is provided the component is controlled;
85
+ * initialSortState only seeds the uncontrolled state (seeded from the constructor
86
+ * effect below — field initializers run before inputs are bound).
87
+ */
88
+ this.sortingState = signal([]);
85
89
  /** Reference to table rows for infinite scroll observer */
86
90
  this.tableRows = viewChild('tableRow');
87
91
  /** Intersection observer for infinite scroll */
@@ -279,6 +283,22 @@ export class NvDatatable {
279
283
  hasMore: isInfinite ? paginationConfig.hasMore : undefined,
280
284
  };
281
285
  });
286
+ // Seed sortingState from sortState / initialSortState once the sorting input
287
+ // is bound. Field initializers run before inputs are set, so we can't do this
288
+ // inline in the signal definition.
289
+ let sortingSeeded = false;
290
+ effect(() => {
291
+ if (sortingSeeded)
292
+ return;
293
+ const sorting = this.sorting();
294
+ if (sorting === undefined)
295
+ return;
296
+ sortingSeeded = true;
297
+ const seed = sorting.sortState ?? sorting.initialSortState;
298
+ if (seed && seed.length > 0) {
299
+ this.sortingState.set(seed);
300
+ }
301
+ }, { allowSignalWrites: true });
282
302
  // Validate infinite scroll requires server mode
283
303
  effect(() => {
284
304
  const paginationConfig = this.pagination();
@@ -578,4 +598,4 @@ export function makeColumn() {
578
598
  };
579
599
  }
580
600
  export { flexRenderComponent as nvDatatableRenderComponent } from './datatable.utils';
581
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnYtZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25vdmEtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvbnYtZGF0YXRhYmxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3Q0FBd0M7QUFDeEMsMENBQTBDO0FBQzFDLHdDQUF3QztBQUV4QyxPQUFPLEVBQ0wsU0FBUyxFQUNULFFBQVEsRUFDUixLQUFLLEVBQ0wsV0FBVyxFQUNYLHNCQUFzQixFQUN0QixZQUFZLEVBQ1osZUFBZSxFQUVmLE1BQU0sRUFDTixNQUFNLEVBRU4sU0FBUyxHQUdWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsd0JBQXdCLEdBRXpCLE1BQU0sK0JBQStCLENBQUM7QUFFdkMsZ0hBQWdIO0FBQ2hILE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixpQkFBaUIsRUFDakIsbUJBQW1CLEdBT3BCLE1BQU0sbUJBQW1CLENBQUM7OztBQUUzQjs7O0dBR0c7QUFzR0gsTUFBTSxPQUFPLFdBQVc7SUErUHRCLHdDQUF3QztJQUN4QyxLQUFLO1FBQ0gsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCwwQkFBMEIsQ0FDeEIsS0FBMkMsRUFDM0MsTUFLQztRQUVELHlEQUF5RDtRQUN6RCxJQUFJLFNBQWtDLENBQUM7UUFFdkMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM5QixTQUFTLEdBQUcsS0FBZ0MsQ0FBQztRQUMvQyxDQUFDO2FBQU0sSUFBSSxRQUFRLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNqRSxT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QUFFLG1CQUFtQixDQUFDO29CQUM1QyxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEZUO2lCQUNGO3dEQXFCQyxrQkFBa0I7c0JBRGpCLFlBQVk7dUJBQUMsb0JBQW9CLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQU96RCxhQUFhO3NCQURaLGVBQWU7dUJBQUMsd0JBQXdCOztBQXVaM0MsZ0ZBQWdGO0FBRWhGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxNQUFNLFVBQVUsVUFBVTtJQUN4QixPQUFPLFNBQVMsTUFBTSxDQUNwQixHQUFpQztRQUVqQyxPQUFPLEdBQXdDLENBQUM7SUFDbEQsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELE9BQU8sRUFBRSxtQkFBbUIsSUFBSSwwQkFBMEIsRUFBRSxNQUFNLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1qc2RvYyAqL1xuLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1yZXR1cm5zICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLXBhcmFtICovXG5cbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGlucHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIFF1ZXJ5TGlzdCxcbiAgZWZmZWN0LFxuICBzaWduYWwsXG4gIEVsZW1lbnRSZWYsXG4gIHZpZXdDaGlsZCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgT25EZXN0cm95LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBOdkRhdGF0YWJsZUNlbGxEaXJlY3RpdmUsXG4gIHR5cGUgTnZEYXRhdGFibGVDZWxsQ29udGV4dCxcbn0gZnJvbSAnLi9udi1kYXRhdGFibGUtY2VsbC5kaXJlY3RpdmUnO1xuXG4vLyBsb2NhbCBjb3B5IG9mIEB0YW5zdGFjay9hbmd1bGFyLXRhYmxlIChyZXF1aXJlZCBmb3IgbXVsdGkgYW5ndWxhciB2ZXJzaW9ucywgdGhlIGJ1aWx0IHZlcnNpb24gaXMgbm90IHdvcmtpbmcpXG5pbXBvcnQge1xuICBjcmVhdGVBbmd1bGFyVGFibGUsXG4gIGdldENvcmVSb3dNb2RlbCxcbiAgZ2V0UGFnaW5hdGlvblJvd01vZGVsLFxuICBnZXRTb3J0ZWRSb3dNb2RlbCxcbiAgRmxleFJlbmRlckRpcmVjdGl2ZSxcbiAgdHlwZSBGbGV4UmVuZGVyQ29tcG9uZW50LFxuICB0eXBlIENvbHVtbkRlZixcbiAgdHlwZSBDZWxsQ29udGV4dCxcbiAgdHlwZSBQYWdpbmF0aW9uU3RhdGUsXG4gIHR5cGUgU29ydGluZ1N0YXRlLFxuICB0eXBlIE5vSW5mZXIsXG59IGZyb20gJy4vZGF0YXRhYmxlLnV0aWxzJztcblxuLyoqXG4gKiBBIHBvd2VyZnVsLCBmbGV4aWJsZSBkYXRhdGFibGUgY29tcG9uZW50IGJ1aWx0IG9uIFRhblN0YWNrIFRhYmxlLlxuICogU3VwcG9ydHMgY3VzdG9tIGNlbGwgcmVuZGVyaW5nLCBjb2x1bW4gY29uZmlndXJhdGlvbiwgcGFnaW5hdGlvbiwgYW5kIGZ1bGwgVHlwZVNjcmlwdCB0eXBpbmcuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ252LWRhdGF0YWJsZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZsZXhSZW5kZXJEaXJlY3RpdmVdLFxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPG52LXRhYmxlPlxuICAgICAgPHRhYmxlPlxuICAgICAgICA8dGhlYWQgW2F0dHIuZGF0YS1zdGlja3ktdG9wXT1cInN0aWNreUhlYWRlcigpID8gJ3RydWUnIDogbnVsbFwiPlxuICAgICAgICAgIEBmb3IgKGhlYWRlckdyb3VwIG9mIHRhYmxlKCkuZ2V0SGVhZGVyR3JvdXBzKCk7IHRyYWNrIGhlYWRlckdyb3VwLmlkKVxuICAgICAgICAgIHtcbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICBAZm9yIChoZWFkZXIgb2YgaGVhZGVyR3JvdXAuaGVhZGVyczsgdHJhY2sgaGVhZGVyLmlkKSB7XG4gICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ2RhdGF0YWJsZS1oZWFkZXItJyArIGhlYWRlci5pZFwiXG4gICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJcbiAgICAgICAgICAgICAgICBoZWFkZXIuY29sdW1uLmNvbHVtbkRlZi5zaXplXG4gICAgICAgICAgICAgICAgICA/IGhlYWRlci5jb2x1bW4uY29sdW1uRGVmLnNpemUgKyAncHgnXG4gICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2F0dHIuZGF0YS1uby1yZXNpemVdPVwiXG4gICAgICAgICAgICAgICAgIWhlYWRlci5jb2x1bW4uY29sdW1uRGVmLmVuYWJsZVJlc2l6aW5nID8gJ3RydWUnIDogbnVsbFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBAaWYgKCFoZWFkZXIuaXNQbGFjZWhvbGRlcikgeyBAaWYgKGhlYWRlci5jb2x1bW4uZ2V0Q2FuU29ydCgpKSB7XG4gICAgICAgICAgICAgIDxudi10YWJsZWhlYWRlclxuICAgICAgICAgICAgICAgIFtzb3J0YWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbc29ydERpcmVjdGlvbl09XCJoZWFkZXIuY29sdW1uLmdldElzU29ydGVkKCkgfHwgJ25vbmUnXCJcbiAgICAgICAgICAgICAgICAoc29ydERpcmVjdGlvbkNoYW5nZWQpPVwiXG4gICAgICAgICAgICAgICAgICBoYW5kbGVTb3J0RGlyZWN0aW9uQ2hhbmdlZCgkZXZlbnQsIGhlYWRlcilcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgaGVhZGVyLmNvbHVtbi5jb2x1bW5EZWYuaGVhZGVyIH19XG4gICAgICAgICAgICAgIDwvbnYtdGFibGVoZWFkZXI+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICB7eyBoZWFkZXIuY29sdW1uLmNvbHVtbkRlZi5oZWFkZXIgfX1cbiAgICAgICAgICAgICAgfSB9XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgfVxuICAgICAgICA8L3RoZWFkPlxuXG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICBAZm9yIChyb3cgb2YgdGFibGUoKS5nZXRSb3dNb2RlbCgpLnJvd3M7IHRyYWNrIHJvdy5pZDsgbGV0IGkgPSAkaW5kZXgpXG4gICAgICAgICAge1xuICAgICAgICAgIDx0clxuICAgICAgICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ2RhdGF0YWJsZS1yb3ctJyArIGlcIlxuICAgICAgICAgICAgI3RhYmxlUm93XG4gICAgICAgICAgICBbYXR0ci5kYXRhLWlzLWxhc3RdPVwiXG4gICAgICAgICAgICAgIGlzSW5maW5pdGVTY3JvbGwoKSAmJiBpID09PSB0YWJsZSgpLmdldFJvd01vZGVsKCkucm93cy5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgPyAndHJ1ZSdcbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgQGZvciAoY2VsbCBvZiByb3cuZ2V0VmlzaWJsZUNlbGxzKCk7IHRyYWNrIGNlbGwuaWQpIHtcbiAgICAgICAgICAgIDx0ZCBbYXR0ci5kYXRhLXRlc3RpZF09XCInZGF0YXRhYmxlLWNlbGwtJyArIGNlbGwuY29sdW1uLmlkXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqZmxleFJlbmRlcj1cIlxuICAgICAgICAgICAgICAgICAgY2VsbC5jb2x1bW4uY29sdW1uRGVmLmNlbGw7XG4gICAgICAgICAgICAgICAgICBwcm9wczogY2VsbC5nZXRDb250ZXh0KCk7XG4gICAgICAgICAgICAgICAgICBsZXQgY2VsbENvbnRlbnRcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgY2VsbENvbnRlbnQgfX1cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgfVxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L252LXRhYmxlPlxuXG4gICAgPCEtLSBSZW5kZXIgcGFnaW5hdGlvbiBpZiBjb25maWd1cmVkIC0tPlxuICAgIEBpZiAocGFnaW5hdGlvbkFQSSgpKSB7IEBpZiAocGFnaW5hdGlvblRlbXBsYXRlKSB7XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgcGFnaW5hdGlvblRlbXBsYXRlO1xuICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogcGFnaW5hdGlvbkFQSSgpIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIH0gQGVsc2UgaWYgKG1vZGUoKSA9PT0gJ2NsaWVudCcgJiYgcGFnaW5hdGlvbigpICYmICFwYWdpbmF0aW9uKCk/LmluZmluaXRlKVxuICAgIHtcbiAgICA8IS0tIERlZmF1bHQgcGFnaW5hdGlvbiB3aXRoIG52LXBhZ2luYXRpb250YWJsZSAoY2xpZW50IG1vZGUgb25seSkgLS0+XG4gICAgPG52LXBhZ2luYXRpb250YWJsZVxuICAgICAgW3BhZ2VJbmRleF09XCJwYWdpbmF0aW9uQVBJKCkhLnBhZ2VJbmRleFwiXG4gICAgICBbcGFnZVNpemVdPVwicGFnaW5hdGlvbkFQSSgpIS5wYWdlU2l6ZVwiXG4gICAgICBbcGFnZUNvdW50XT1cInBhZ2luYXRpb25BUEkoKSEucGFnZUNvdW50XCJcbiAgICAgIFtyb3dDb3VudF09XCJwYWdpbmF0aW9uQVBJKCkhLnJvd0NvdW50XCJcbiAgICAgIFthdHRyLmxhYmVsLXBhZ2VdPVwicGFnaW5hdGlvbigpPy5sYWJlbHM/LnBhZ2UgfHwgbnVsbFwiXG4gICAgICBbYXR0ci5sYWJlbC10b3RhbF09XCJwYWdpbmF0aW9uKCk/LmxhYmVscz8udG90YWwgfHwgbnVsbFwiXG4gICAgICBbYXR0ci5sYWJlbC1wYWdlLXNpemUtb3B0aW9uXT1cIlxuICAgICAgICBwYWdpbmF0aW9uKCk/LmxhYmVscz8ucGFnZVNpemVPcHRpb24gfHwgbnVsbFxuICAgICAgXCJcbiAgICAgIChwYWdlSW5kZXhDaGFuZ2VkKT1cInBhZ2luYXRpb25BUEkoKSEuc2V0UGFnZUluZGV4KCRldmVudC5kZXRhaWwpXCJcbiAgICAgIChwYWdlU2l6ZUNoYW5nZWQpPVwicGFnaW5hdGlvbkFQSSgpIS5zZXRQYWdlU2l6ZSgkZXZlbnQuZGV0YWlsKVwiXG4gICAgPjwvbnYtcGFnaW5hdGlvbnRhYmxlPlxuICAgIH0gfVxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBOdkRhdGF0YWJsZTxUPiBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIC8qKiBDb2x1bW4gZGVmaW5pdGlvbnMgKi9cbiAgY29sdW1ucyA9IGlucHV0PE52RGF0YXRhYmxlQ29sdW1uPFQ+W10+KFtdKTtcbiAgLyoqIFJvdyBkYXRhICovXG4gIHJvd3MgPSBpbnB1dDxUW10+KFtdKTtcbiAgLyoqXG4gICAqIERhdGEgaGFuZGxpbmcgbW9kZSBmb3Igc29ydGluZyBhbmQgZmlsdGVyaW5nIG9wZXJhdGlvbnMuXG4gICAqIC0gJ2NsaWVudCc6IEFsbCBvcGVyYXRpb25zIGhhbmRsZWQgaW4gYnJvd3NlciAoZGVmYXVsdClcbiAgICogLSAnc2VydmVyJzogT3BlcmF0aW9ucyB0cmlnZ2VyIGNhbGxiYWNrcyBmb3Igc2VydmVyLXNpZGUgaGFuZGxpbmdcbiAgICovXG4gIG1vZGUgPSBpbnB1dDwnY2xpZW50JyB8ICdzZXJ2ZXInPignY2xpZW50Jyk7XG4gIC8qKiBPcHRpb25hbCBwYWdpbmF0aW9uIGNvbmZpZ3VyYXRpb24gKi9cbiAgcGFnaW5hdGlvbiA9IGlucHV0PE52RGF0YXRhYmxlUGFnaW5hdGlvbkNvbmZpZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgLyoqIE9wdGlvbmFsIHNvcnRpbmcgY29uZmlndXJhdGlvbiAqL1xuICBzb3J0aW5nID0gaW5wdXQ8TnZEYXRhdGFibGVTb3J0aW5nQ29uZmlnIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAvKiogU2hvdWxkIHRoZSBoZWFkZXIgc3RpY2sgdG8gdGhlIHRvcCBvZiB0aGUgdGFibGUgd2hlbiBzY3JvbGxpbmc/ICovXG4gIHN0aWNreUhlYWRlciA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAvKiogVGVtcGxhdGUgZm9yIGN1c3RvbSBwYWdpbmF0aW9uIFVJICovXG4gIEBDb250ZW50Q2hpbGQoJ3BhZ2luYXRpb25UZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgcGFnaW5hdGlvblRlbXBsYXRlPzogVGVtcGxhdGVSZWY8e1xuICAgICRpbXBsaWNpdDogTnZEYXRhdGFibGVSZW5kZXJQYWdpbmF0aW9uQVBJO1xuICB9PjtcblxuICAvKiogQ2VsbCB0ZW1wbGF0ZXMgcHJvdmlkZWQgdmlhIG52RGF0YXRhYmxlQ2VsbCBkaXJlY3RpdmUgKi9cbiAgQENvbnRlbnRDaGlsZHJlbihOdkRhdGF0YWJsZUNlbGxEaXJlY3RpdmUpXG4gIGNlbGxUZW1wbGF0ZXM/OiBRdWVyeUxpc3Q8TnZEYXRhdGFibGVDZWxsRGlyZWN0aXZlPFQsIFRba2V5b2YgVF0+PjtcblxuICAvKiogU2lnbmFsIHRvIHRyYWNrIGNlbGwgdGVtcGxhdGVzIGFycmF5ICovXG4gIHByaXZhdGUgY2VsbFRlbXBsYXRlc1NpZ25hbCA9IHNpZ25hbDxcbiAgICBOdkRhdGF0YWJsZUNlbGxEaXJlY3RpdmU8VCwgVFtrZXlvZiBUXT5bXVxuICA+KFtdKTtcblxuICAvKiogTWFwIG9mIGZpZWxkIG5hbWVzIHRvIGNlbGwgdGVtcGxhdGVzICovXG4gIHByaXZhdGUgY2VsbFRlbXBsYXRlTWFwID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG1hcCA9IG5ldyBNYXA8XG4gICAgICBzdHJpbmcsXG4gICAgICBUZW1wbGF0ZVJlZjxOdkRhdGF0YWJsZUNlbGxDb250ZXh0PFQsIFRba2V5b2YgVF0+PlxuICAgID4oKTtcbiAgICB0aGlzLmNlbGxUZW1wbGF0ZXNTaWduYWwoKS5mb3JFYWNoKChkaXJlY3RpdmUpID0+IHtcbiAgICAgIG1hcC5zZXQoZGlyZWN0aXZlLm52RGF0YXRhYmxlQ2VsbCwgZGlyZWN0aXZlLnRlbXBsYXRlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gbWFwO1xuICB9KTtcblxuICAvKiogUGFnaW5hdGlvbiBzdGF0ZSBmb3Igc2VydmVyIG1vZGUgKi9cbiAgcHJpdmF0ZSBwYWdpbmF0aW9uU3RhdGUgPSBzaWduYWw8UGFnaW5hdGlvblN0YXRlPih7XG4gICAgcGFnZUluZGV4OiAwLFxuICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2luYXRpb24oKT8uaW5pdGlhbFBhZ2VTaXplIHx8IDEwLFxuICB9KTtcblxuICAvKiogU29ydGluZyBzdGF0ZSBmb3IgY29udHJvbGxlZCBzb3J0aW5nIChzZXJ2ZXIgbW9kZSkgKi9cbiAgcHJpdmF0ZSBzb3J0aW5nU3RhdGUgPSBzaWduYWw8U29ydGluZ1N0YXRlPih0aGlzLnNvcnRpbmcoKT8uc29ydFN0YXRlIHx8IFtdKTtcblxuICAvKiogUmVmZXJlbmNlIHRvIHRhYmxlIHJvd3MgZm9yIGluZmluaXRlIHNjcm9sbCBvYnNlcnZlciAqL1xuICBwcml2YXRlIHRhYmxlUm93cyA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPigndGFibGVSb3cnKTtcblxuICAvKiogSW50ZXJzZWN0aW9uIG9ic2VydmVyIGZvciBpbmZpbml0ZSBzY3JvbGwgKi9cbiAgcHJpdmF0ZSBvYnNlcnZlcjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcblxuICAvKiogSGVscGVyIHRvIGNoZWNrIGlmIHVzaW5nIGluZmluaXRlIHNjcm9sbCAqL1xuICBpc0luZmluaXRlU2Nyb2xsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wYWdpbmF0aW9uKCk/LmluZmluaXRlID09PSB0cnVlKTtcblxuICAvKiogQ29tcHV0ZWQgdGFibGUgY29sdW1ucyB3aXRoIHByb3BlciB0eXBpbmcgYW5kIGZpbHRlcmluZy4gKi9cbiAgdGFibGVDb2x1bW5zID0gY29tcHV0ZWQ8Q29sdW1uRGVmPFQsIFRba2V5b2YgVF0+W10+KCgpID0+IHtcbiAgICBjb25zdCB0ZW1wbGF0ZU1hcCA9IHRoaXMuY2VsbFRlbXBsYXRlTWFwKCk7XG5cbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zKClcbiAgICAgIC5maWx0ZXIoKGNvbCkgPT4gIWNvbC5oaWRkZW4pXG4gICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgLy8gU2hhcmVkIGNlbGwgcmVuZGVyZXJcbiAgICAgICAgY29uc3QgY2VsbFJlbmRlcmVyID0gKGNvbnRleHQ6IENlbGxDb250ZXh0PFQsIFRba2V5b2YgVF0+KSA9PiB7XG4gICAgICAgICAgY29uc3QgZmllbGROYW1lID0gU3RyaW5nKGNvbC5maWVsZCk7XG4gICAgICAgICAgY29uc3QgY2VsbFRlbXBsYXRlID0gdGVtcGxhdGVNYXAuZ2V0KGZpZWxkTmFtZSk7XG5cbiAgICAgICAgICAvLyBQcmlvcml0eTogdGVtcGxhdGUgPiByZW5kZXJDZWxsID4gZGVmYXVsdFxuICAgICAgICAgIGlmIChjZWxsVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIC8vIFJldHVybiBUZW1wbGF0ZVJlZiBkaXJlY3RseSAtIGdldFZhbHVlKCkgcmV0dXJucyBmb3JtYXR0ZWQgdmFsdWVcbiAgICAgICAgICAgIHJldHVybiBjZWxsVGVtcGxhdGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHJlbmRlckNlbGwgaWYgcHJvdmlkZWRcbiAgICAgICAgICBpZiAoY29sLnJlbmRlckNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2wucmVuZGVyQ2VsbChjb250ZXh0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBEZWZhdWx0OiBqdXN0IHJldHVybiB0aGUgdmFsdWUgKGZvcm1hdHRlZCBpZiB2YWx1ZUZvcm1hdHRlciB3YXMgdXNlZClcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5nZXRWYWx1ZSgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGNvbHVtbkRlZjogQ29sdW1uRGVmPFQsIFRba2V5b2YgVF0+ID0ge1xuICAgICAgICAgIGFjY2Vzc29yS2V5OiBjb2wuZmllbGQsXG4gICAgICAgICAgYWNjZXNzb3JGbjogY29sLnZhbHVlRm9ybWF0dGVyXG4gICAgICAgICAgICA/IChyb3c6IFQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByYXdWYWx1ZSA9IHJvd1tjb2wuZmllbGRdO1xuICAgICAgICAgICAgICAgIHJldHVybiBjb2wudmFsdWVGb3JtYXR0ZXIhKHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiByYXdWYWx1ZSxcbiAgICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICAgIGZpZWxkOiBjb2wuZmllbGQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGhlYWRlcjogY29sLmhlYWRlck5hbWUgfHwgU3RyaW5nKGNvbC5maWVsZCksXG4gICAgICAgICAgc2l6ZTogY29sLndpZHRoLFxuICAgICAgICAgIGVuYWJsZVJlc2l6aW5nOiBjb2wucmVzaXphYmxlID8/IHRydWUsXG4gICAgICAgICAgLy8gU29ydGluZyBjb25maWd1cmF0aW9uXG4gICAgICAgICAgZW5hYmxlU29ydGluZzogdGhpcy5zb3J0aW5nKCkgPyBjb2wuc29ydGFibGUgPz8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgIGNlbGw6IGNlbGxSZW5kZXJlcixcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBBZGQgb3B0aW9uYWwgc29ydGluZyBwcm9wZXJ0aWVzIG9ubHkgaWYgZGVmaW5lZFxuICAgICAgICBpZiAoY29sLnNvcnRpbmdGbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRhblN0YWNrIHR5cGluZyBpcyBzdHJpY3QgYnV0IHRoaXMgd29ya3MgYXQgcnVudGltZVxuICAgICAgICAgIGNvbHVtbkRlZi5zb3J0aW5nRm4gPSBjb2wuc29ydGluZ0ZuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2wuc29ydERlc2NGaXJzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29sdW1uRGVmLnNvcnREZXNjRmlyc3QgPSBjb2wuc29ydERlc2NGaXJzdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sLmludmVydFNvcnRpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbHVtbkRlZi5pbnZlcnRTb3J0aW5nID0gY29sLmludmVydFNvcnRpbmc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbC5zb3J0VW5kZWZpbmVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb2x1bW5EZWYuc29ydFVuZGVmaW5lZCA9IGNvbC5zb3J0VW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbHVtbkRlZjtcbiAgICAgIH0pO1xuICB9KTtcblxuICAvKiogVGFuU3RhY2sgdGFibGUgaW5zdGFuY2Ugd2l0aCBTaWduYWxzICovXG4gIHByaXZhdGUgdGFibGVJbnN0YW5jZSA9IGNyZWF0ZUFuZ3VsYXJUYWJsZSgoKSA9PiB7XG4gICAgY29uc3QgcGFnaW5hdGlvbkNvbmZpZyA9IHRoaXMucGFnaW5hdGlvbigpO1xuICAgIGNvbnN0IHNvcnRpbmdDb25maWcgPSB0aGlzLnNvcnRpbmcoKTtcbiAgICBjb25zdCBjb21wb25lbnRNb2RlID0gdGhpcy5tb2RlKCk7XG4gICAgY29uc3QgaXNTZXJ2ZXJNb2RlID0gY29tcG9uZW50TW9kZSA9PT0gJ3NlcnZlcic7XG4gICAgY29uc3QgaXNJbmZpbml0ZSA9IHBhZ2luYXRpb25Db25maWc/LmluZmluaXRlID09PSB0cnVlO1xuXG4gICAgLy8gRGV0ZXJtaW5lIGJhc2UgdGFibGUgY29uZmlndXJhdGlvbiB3aXRoIHNvcnRpbmdcbiAgICBjb25zdCBnZXRCYXNlVGFibGVDb25maWcgPSAoKSA9PiB7XG4gICAgICBjb25zdCBiYXNlQ29uZmlnID0ge1xuICAgICAgICBkYXRhOiB0aGlzLnJvd3MoKSxcbiAgICAgICAgY29sdW1uczogdGhpcy50YWJsZUNvbHVtbnMoKSxcbiAgICAgICAgZ2V0Q29yZVJvd01vZGVsOiBnZXRDb3JlUm93TW9kZWwoKSxcbiAgICAgICAgLy8gU29ydGluZyBjb25maWd1cmF0aW9uIC0gdXNlcyB0b3AtbGV2ZWwgbW9kZVxuICAgICAgICAuLi4oc29ydGluZ0NvbmZpZyAmJiB7XG4gICAgICAgICAgc3RhdGU6IHtcbiAgICAgICAgICAgIHNvcnRpbmc6XG4gICAgICAgICAgICAgIGlzU2VydmVyTW9kZSAmJiBzb3J0aW5nQ29uZmlnLnNvcnRTdGF0ZVxuICAgICAgICAgICAgICAgID8gc29ydGluZ0NvbmZpZy5zb3J0U3RhdGVcbiAgICAgICAgICAgICAgICA6IHRoaXMuc29ydGluZ1N0YXRlKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvblNvcnRpbmdDaGFuZ2U6IChcbiAgICAgICAgICAgIHVwZGF0ZXJPclZhbHVlOlxuICAgICAgICAgICAgICB8IFNvcnRpbmdTdGF0ZVxuICAgICAgICAgICAgICB8ICgob2xkOiBTb3J0aW5nU3RhdGUpID0+IFNvcnRpbmdTdGF0ZSksXG4gICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U29ydCA9XG4gICAgICAgICAgICAgIGlzU2VydmVyTW9kZSAmJiBzb3J0aW5nQ29uZmlnLnNvcnRTdGF0ZVxuICAgICAgICAgICAgICAgID8gc29ydGluZ0NvbmZpZy5zb3J0U3RhdGVcbiAgICAgICAgICAgICAgICA6IHRoaXMuc29ydGluZ1N0YXRlKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld1NvcnQgPVxuICAgICAgICAgICAgICB0eXBlb2YgdXBkYXRlck9yVmFsdWUgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgICAgICA/IHVwZGF0ZXJPclZhbHVlKGN1cnJlbnRTb3J0KVxuICAgICAgICAgICAgICAgIDogdXBkYXRlck9yVmFsdWU7XG5cbiAgICAgICAgICAgIC8vIEFsd2F5cyB1cGRhdGUgaW50ZXJuYWwgc3RhdGUgZm9yIHJlYWN0aXZpdHlcbiAgICAgICAgICAgIHRoaXMuc29ydGluZ1N0YXRlLnNldChuZXdTb3J0KTtcblxuICAgICAgICAgICAgLy8gRm9yIHNlcnZlci1zaWRlIHNvcnRpbmcsIGFsc28gY2FsbCB0aGUgY2FsbGJhY2tcbiAgICAgICAgICAgIGlmIChpc1NlcnZlck1vZGUgJiYgc29ydGluZ0NvbmZpZy5vblNvcnRpbmdDaGFuZ2UpIHtcbiAgICAgICAgICAgICAgc29ydGluZ0NvbmZpZy5vblNvcnRpbmdDaGFuZ2UobmV3U29ydCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBtYW51YWxTb3J0aW5nOiBpc1NlcnZlck1vZGUsXG4gICAgICAgICAgZW5hYmxlU29ydGluZzogdHJ1ZSxcbiAgICAgICAgICBlbmFibGVNdWx0aVNvcnQ6IHNvcnRpbmdDb25maWcuZW5hYmxlTXVsdGlTb3J0ID8/IGZhbHNlLFxuICAgICAgICAgIGVuYWJsZVNvcnRpbmdSZW1vdmFsOiBzb3J0aW5nQ29uZmlnLmVuYWJsZVNvcnRpbmdSZW1vdmFsID8/IHRydWUsXG4gICAgICAgICAgbWF4TXVsdGlTb3J0Q29sQ291bnQ6IHNvcnRpbmdDb25maWcubWF4TXVsdGlTb3J0Q29sQ291bnQsXG4gICAgICAgICAgc29ydERlc2NGaXJzdDogc29ydGluZ0NvbmZpZy5zb3J0RGVzY0ZpcnN0ID8/IGZhbHNlLFxuICAgICAgICAgIC8vIFdoZW4gbXVsdGktc29ydCBpcyBlbmFibGVkLCB0cmVhdCBhbGwgY2xpY2tzIGFzIG11bHRpLXNvcnQgZXZlbnRzXG4gICAgICAgICAgaXNNdWx0aVNvcnRFdmVudDogc29ydGluZ0NvbmZpZy5lbmFibGVNdWx0aVNvcnRcbiAgICAgICAgICAgID8gKCkgPT4gdHJ1ZVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgZ2V0U29ydGVkUm93TW9kZWw6ICFpc1NlcnZlck1vZGUgPyBnZXRTb3J0ZWRSb3dNb2RlbCgpIDogdW5kZWZpbmVkLFxuICAgICAgICB9KSxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBiYXNlQ29uZmlnO1xuICAgIH07XG5cbiAgICAvLyBJbmZpbml0ZSBzY3JvbGwgbW9kZSAocmVxdWlyZXMgc2VydmVyIG1vZGUpXG4gICAgaWYgKGlzSW5maW5pdGUpIHtcbiAgICAgIC8vIE5vIHBhZ2luYXRpb24gcm93IG1vZGVsIGZvciBpbmZpbml0ZSBzY3JvbGwgLSBzaW1wbGUgY29uZmlnXG4gICAgICByZXR1cm4gZ2V0QmFzZVRhYmxlQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgLy8gTm8gcGFnaW5hdGlvbiBjb25maWd1cmVkXG4gICAgaWYgKCFwYWdpbmF0aW9uQ29uZmlnKSB7XG4gICAgICByZXR1cm4gZ2V0QmFzZVRhYmxlQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgLy8gQ2xpZW50LXNpZGUgcGFnaW5hdGlvblxuICAgIGlmICghaXNTZXJ2ZXJNb2RlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5nZXRCYXNlVGFibGVDb25maWcoKSxcbiAgICAgICAgZ2V0UGFnaW5hdGlvblJvd01vZGVsOiBnZXRQYWdpbmF0aW9uUm93TW9kZWwoKSxcbiAgICAgICAgaW5pdGlhbFN0YXRlOiB7XG4gICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgcGFnZUluZGV4OiAwLFxuICAgICAgICAgICAgcGFnZVNpemU6IHBhZ2luYXRpb25Db25maWcuaW5pdGlhbFBhZ2VTaXplIHx8IDEwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFNlcnZlci1zaWRlIHBhZ2luYXRpb24gLSBtYW51YWwgcGFnaW5hdGlvbiB3aXRoIHJlYWN0aXZlIHN0YXRlXG4gICAgY29uc3QgYmFzZUNvbmZpZyA9IGdldEJhc2VUYWJsZUNvbmZpZygpO1xuICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy5wYWdpbmF0aW9uU3RhdGUoKS5wYWdlU2l6ZTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uYmFzZUNvbmZpZyxcbiAgICAgIG1hbnVhbFBhZ2luYXRpb246IHRydWUsXG4gICAgICBwYWdlQ291bnQ6XG4gICAgICAgIHBhZ2luYXRpb25Db25maWcudG90YWxQYWdlQ291bnQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gcGFnaW5hdGlvbkNvbmZpZy50b3RhbFBhZ2VDb3VudFxuICAgICAgICAgIDogcGFnaW5hdGlvbkNvbmZpZy50b3RhbFJvd0NvdW50ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IE1hdGguY2VpbChwYWdpbmF0aW9uQ29uZmlnLnRvdGFsUm93Q291bnQgLyBwYWdlU2l6ZSlcbiAgICAgICAgICA6IC0xLFxuICAgICAgc3RhdGU6IHtcbiAgICAgICAgcGFnaW5hdGlvbjogdGhpcy5wYWdpbmF0aW9uU3RhdGUoKSxcbiAgICAgICAgLi4uKGJhc2VDb25maWcuc3RhdGUgJiYgeyBzb3J0aW5nOiBiYXNlQ29uZmlnLnN0YXRlLnNvcnRpbmcgfSksXG4gICAgICB9LFxuICAgICAgb25QYWdpbmF0aW9uQ2hhbmdlOiAoXG4gICAgICAgIHVwZGF0ZXJPclZhbHVlOlxuICAgICAgICAgIHwgUGFnaW5hdGlvblN0YXRlXG4gICAgICAgICAgfCAoKG9sZDogUGFnaW5hdGlvblN0YXRlKSA9PiBQYWdpbmF0aW9uU3RhdGUpLFxuICAgICAgKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1N0YXRlID1cbiAgICAgICAgICB0eXBlb2YgdXBkYXRlck9yVmFsdWUgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgID8gdXBkYXRlck9yVmFsdWUodGhpcy5wYWdpbmF0aW9uU3RhdGUoKSlcbiAgICAgICAgICAgIDogdXBkYXRlck9yVmFsdWU7XG5cbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uU3RhdGUuc2V0KG5ld1N0YXRlKTtcblxuICAgICAgICAvLyBDYWxsIHVzZXIncyBjYWxsYmFjayBmb3Igc2VydmVyLXNpZGUgcGFnaW5hdGlvblxuICAgICAgICBpZiAocGFnaW5hdGlvbkNvbmZpZy5vblBhZ2luYXRpb25DaGFuZ2UpIHtcbiAgICAgICAgICBwYWdpbmF0aW9uQ29uZmlnLm9uUGFnaW5hdGlvbkNoYW5nZSh7XG4gICAgICAgICAgICBwYWdlSW5kZXg6IG5ld1N0YXRlLnBhZ2VJbmRleCxcbiAgICAgICAgICAgIHBhZ2VTaXplOiBuZXdTdGF0ZS5wYWdlU2l6ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9O1xuICB9KTtcblxuICAvKiogUHVibGljIGdldHRlciBmb3IgdGFibGUgaW5zdGFuY2UuICovXG4gIHRhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLnRhYmxlSW5zdGFuY2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgc29ydCBkaXJlY3Rpb24gY2hhbmdlIGZyb20gdGFibGUgaGVhZGVyXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBzb3J0IGRpcmVjdGlvbiBjaGFuZ2UgZXZlbnQgb3IgZGlyZWN0aW9uIHN0cmluZ1xuICAgKiBAcGFyYW0ge29iamVjdH0gaGVhZGVyIFRoZSB0YWJsZSBoZWFkZXIgb2JqZWN0XG4gICAqL1xuICBoYW5kbGVTb3J0RGlyZWN0aW9uQ2hhbmdlZChcbiAgICBldmVudDogRXZlbnQgfCBDdXN0b21FdmVudDxzdHJpbmc+IHwgc3RyaW5nLFxuICAgIGhlYWRlcjoge1xuICAgICAgY29sdW1uOiB7XG4gICAgICAgIGNsZWFyU29ydGluZzogKCkgPT4gdm9pZDtcbiAgICAgICAgdG9nZ2xlU29ydGluZzogKGRlc2M/OiBib29sZWFuLCBtdWx0aT86IGJvb2xlYW4pID0+IHZvaWQ7XG4gICAgICB9O1xuICAgIH0sXG4gICkge1xuICAgIC8vIEV4dHJhY3QgZGlyZWN0aW9uIGZyb20gZXZlbnQgb3IgdXNlIGRpcmVjdGx5IGlmIHN0cmluZ1xuICAgIGxldCBkaXJlY3Rpb246ICdhc2MnIHwgJ2Rlc2MnIHwgJ25vbmUnO1xuXG4gICAgaWYgKHR5cGVvZiBldmVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRpcmVjdGlvbiA9IGV2ZW50IGFzICdhc2MnIHwgJ2Rlc2MnIHwgJ25vbmUnO1xuICAgIH0gZWxzZSBpZiAoJ2RldGFpbCcgaW4gZXZlbnQgJiYgdHlwZW9mIGV2ZW50LmRldGFpbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRpcmVjdGlvbiA9IGV2ZW50LmRldGFpbCBhcyAnYXNjJyB8ICdkZXNjJyB8ICdub25lJztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRmFsbGJhY2sgLSBzaG91bGRuJ3QgaGFwcGVuIGJ1dCBoYW5kbGUgZ3JhY2VmdWxseVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnVW5leHBlY3RlZCBldmVudCB0eXBlIGluIGhhbmRsZVNvcnREaXJlY3Rpb25DaGFuZ2VkOicsXG4gICAgICAgIGV2ZW50LFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzb3J0aW5nQ29uZmlnID0gdGhpcy5zb3J0aW5nKCk7XG5cbiAgICAvLyBDaGVjayBpZiBtdWx0aS1zb3J0IGlzIGVuYWJsZWRcbiAgICBjb25zdCBpc011bHRpU29ydCA9IHNvcnRpbmdDb25maWc/LmVuYWJsZU11bHRpU29ydCA/PyBmYWxzZTtcblxuICAgIGlmIChkaXJlY3Rpb24gPT09ICdub25lJykge1xuICAgICAgLy8gQ2xlYXIgdGhpcyBjb2x1bW4ncyBzb3J0XG4gICAgICBoZWFkZXIuY29sdW1uLmNsZWFyU29ydGluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUb2dnbGUgc29ydCAtIFRhblN0YWNrIHdpbGwgaGFuZGxlIHRoZSBsb2dpYyBpbnRlcm5hbGx5XG4gICAgICBoZWFkZXIuY29sdW1uLnRvZ2dsZVNvcnRpbmcoZGlyZWN0aW9uID09PSAnZGVzYycsIGlzTXVsdGlTb3J0KTtcbiAgICB9XG4gIH1cblxuICAvKiogQnVpbGQgcGFnaW5hdGlvbiBBUEkgZm9yIHRlbXBsYXRlICovXG4gIHBhZ2luYXRpb25BUEkgPSBjb21wdXRlZDxOdkRhdGF0YWJsZVJlbmRlclBhZ2luYXRpb25BUEkgfCBudWxsPigoKSA9PiB7XG4gICAgY29uc3QgcGFnaW5hdGlvbkNvbmZpZyA9IHRoaXMucGFnaW5hdGlvbigpO1xuICAgIGlmICghcGFnaW5hdGlvbkNvbmZpZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY29tcG9uZW50TW9kZSA9IHRoaXMubW9kZSgpO1xuICAgIGNvbnN0IGlzU2VydmVyTW9kZSA9IGNvbXBvbmVudE1vZGUgPT09ICdzZXJ2ZXInO1xuICAgIGNvbnN0IGlzSW5maW5pdGUgPSBwYWdpbmF0aW9uQ29uZmlnLmluZmluaXRlID09PSB0cnVlO1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy50YWJsZSgpO1xuICAgIGNvbnN0IHRhYmxlUGFnaW5hdGlvblN0YXRlID0gdGFibGUuZ2V0U3RhdGUoKS5wYWdpbmF0aW9uO1xuICAgIGNvbnN0IHBhZ2VDb3VudCA9IHRhYmxlLmdldFBhZ2VDb3VudCgpO1xuICAgIGNvbnN0IHJvd0NvdW50ID0gaXNTZXJ2ZXJNb2RlXG4gICAgICA/IHBhZ2luYXRpb25Db25maWcudG90YWxSb3dDb3VudCB8fCB0aGlzLnJvd3MoKS5sZW5ndGhcbiAgICAgIDogdGhpcy5yb3dzKCkubGVuZ3RoO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VJbmRleDogdGFibGVQYWdpbmF0aW9uU3RhdGUucGFnZUluZGV4LFxuICAgICAgcGFnZVNpemU6IHRhYmxlUGFnaW5hdGlvblN0YXRlLnBhZ2VTaXplLFxuICAgICAgcGFnZUNvdW50LFxuICAgICAgcm93Q291bnQsXG4gICAgICBmaXJzdFBhZ2U6ICgpID0+IHRhYmxlLnNldFBhZ2VJbmRleCgwKSxcbiAgICAgIHByZXZpb3VzUGFnZTogKCkgPT4gdGFibGUucHJldmlvdXNQYWdlKCksXG4gICAgICBuZXh0UGFnZTogKCkgPT4gdGFibGUubmV4dFBhZ2UoKSxcbiAgICAgIGxhc3RQYWdlOiAoKSA9PiB0YWJsZS5zZXRQYWdlSW5kZXgocGFnZUNvdW50IC0gMSksXG4gICAgICBzZXRQYWdlSW5kZXg6IChpbmRleDogbnVtYmVyKSA9PiB0YWJsZS5zZXRQYWdlSW5kZXgoaW5kZXgpLFxuICAgICAgc2V0UGFnZVNpemU6IChzaXplOiBudW1iZXIpID0+IHRhYmxlLnNldFBhZ2VTaXplKHNpemUpLFxuICAgICAgY2FuUHJldmlvdXNQYWdlOiB0YWJsZS5nZXRDYW5QcmV2aW91c1BhZ2UoKSxcbiAgICAgIGNhbk5leHRQYWdlOiB0YWJsZS5nZXRDYW5OZXh0UGFnZSgpLFxuICAgICAgaXNMb2FkaW5nOiBpc0luZmluaXRlID8gcGFnaW5hdGlvbkNvbmZpZy5pc0xvYWRpbmcgOiB1bmRlZmluZWQsXG4gICAgICBoYXNNb3JlOiBpc0luZmluaXRlID8gcGFnaW5hdGlvbkNvbmZpZy5oYXNNb3JlIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIFZhbGlkYXRlIGluZmluaXRlIHNjcm9sbCByZXF1aXJlcyBzZXJ2ZXIgbW9kZVxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBwYWdpbmF0aW9uQ29uZmlnID0gdGhpcy5wYWdpbmF0aW9uKCk7XG4gICAgICBjb25zdCBjb21wb25lbnRNb2RlID0gdGhpcy5tb2RlKCk7XG5cbiAgICAgIGlmIChwYWdpbmF0aW9uQ29uZmlnPy5pbmZpbml0ZSA9PT0gdHJ1ZSAmJiBjb21wb25lbnRNb2RlICE9PSAnc2VydmVyJykge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ1tOdkRhdGF0YWJsZV0gcGFnaW5hdGlvbi5pbmZpbml0ZT10cnVlIHJlcXVpcmVzIG1vZGU9XCJzZXJ2ZXJcIi4gJyArXG4gICAgICAgICAgICAnSW5maW5pdGUgc2Nyb2xsIHJlbGllcyBvbiBzZXJ2ZXItc2lkZSBkYXRhIGxvYWRpbmcuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFNldCB1cCBpbnRlcnNlY3Rpb24gb2JzZXJ2ZXIgZm9yIGluZmluaXRlIHNjcm9sbFxuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgcGFnaW5hdGlvbkNvbmZpZyA9IHRoaXMucGFnaW5hdGlvbigpO1xuICAgICAgICBjb25zdCByb3dzID0gdGhpcy5yb3dzKCk7IC8vIFRyYWNrIHJvd3MgY2hhbmdlc1xuICAgICAgICBjb25zdCBpc0luZmluaXRlID0gcGFnaW5hdGlvbkNvbmZpZz8uaW5maW5pdGUgPT09IHRydWU7XG5cbiAgICAgICAgLy8gQ2xlYW4gdXAgZXhpc3Rpbmcgb2JzZXJ2ZXJcbiAgICAgICAgaWYgKHRoaXMub2JzZXJ2ZXIpIHtcbiAgICAgICAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICB0aGlzLm9ic2VydmVyID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9ubHkgc2V0IHVwIG9ic2VydmVyIGZvciBpbmZpbml0ZSBzY3JvbGwgbW9kZVxuICAgICAgICBpZiAoIWlzSW5maW5pdGUgfHwgcm93cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVc2Ugc2V0VGltZW91dCB0byBlbnN1cmUgRE9NIGlzIHVwZGF0ZWRcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdGhyZXNob2xkID0gcGFnaW5hdGlvbkNvbmZpZy5sb2FkTW9yZVRocmVzaG9sZCB8fCA1MDA7XG5cbiAgICAgICAgICAvLyBGaW5kIHRoZSBsYXN0IHJvdyBlbGVtZW50XG4gICAgICAgICAgY29uc3QgdGFibGVSb3dFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgICAgICAnW2RhdGEtaXMtbGFzdD1cInRydWVcIl0nLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgbGFzdFJvd0VsZW1lbnQgPSB0YWJsZVJvd0VsZW1lbnRzW3RhYmxlUm93RWxlbWVudHMubGVuZ3RoIC0gMV07XG5cbiAgICAgICAgICBpZiAoIWxhc3RSb3dFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5vYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcbiAgICAgICAgICAgIChlbnRyaWVzKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gZW50cmllc1swXTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGVudHJ5LmlzSW50ZXJzZWN0aW5nICYmXG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbkNvbmZpZy5oYXNNb3JlICYmXG4gICAgICAgICAgICAgICAgIXBhZ2luYXRpb25Db25maWcuaXNMb2FkaW5nICYmXG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbkNvbmZpZy5vbkxvYWRNb3JlXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHBhZ2luYXRpb25Db25maWcub25Mb2FkTW9yZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICByb290TWFyZ2luOiBgJHt0aHJlc2hvbGR9cHhgLFxuICAgICAgICAgICAgICByb290OiBudWxsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKGxhc3RSb3dFbGVtZW50KTtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgLy8gU3luYyBjZWxsIHRlbXBsYXRlcyBRdWVyeUxpc3QgdG8gc2lnbmFsXG4gICAgaWYgKHRoaXMuY2VsbFRlbXBsYXRlcykge1xuICAgICAgdGhpcy5jZWxsVGVtcGxhdGVzU2lnbmFsLnNldCh0aGlzLmNlbGxUZW1wbGF0ZXMudG9BcnJheSgpKTtcblxuICAgICAgLy8gU3Vic2NyaWJlIHRvIGNoYW5nZXMgaW4gdGhlIFF1ZXJ5TGlzdFxuICAgICAgdGhpcy5jZWxsVGVtcGxhdGVzLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY2VsbFRlbXBsYXRlcykge1xuICAgICAgICAgIHRoaXMuY2VsbFRlbXBsYXRlc1NpZ25hbC5zZXQodGhpcy5jZWxsVGVtcGxhdGVzLnRvQXJyYXkoKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9ic2VydmVyKSB7XG4gICAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIHRoaXMub2JzZXJ2ZXIgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFVUSUxTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzdHJvbmdseS10eXBlZCBjb2x1bW4gZmFjdG9yeSBmb3IgYSBnaXZlbiByb3cgdHlwZS5cbiAqXG4gKiBAdGVtcGxhdGUgUm93IFRoZSByb3cgZGF0YSB0eXBlIChlLmcuLCBgUHJvZHVjdGApXG4gKlxuICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhIGNvbHVtbiBkZWZpbml0aW9uIGFuZCBpbmZlcnM6XG4gKiAtIGBLYCBhcyB0aGUgZmllbGQga2V5IChga2V5b2YgUm93YClcbiAqIC0gYEZgIGFzIHRoZSByZXR1cm4gdHlwZSBvZiBgdmFsdWVGb3JtYXR0ZXJgIChkZWZhdWx0cyB0byBgUm93W0tdYClcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIERlZmluZSB5b3VyIHJvdyB0eXBlXG4gKiBpbnRlcmZhY2UgUHJvZHVjdCB7XG4gKiAgIG5hbWU6IHN0cmluZztcbiAqICAgcHJpY2U6IG51bWJlcjtcbiAqIH1cbiAqXG4gKiBjb25zdCBjb2wgPSBtYWtlQ29sdW1uPFByb2R1Y3Q+KCk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlQ29sdW1uPFJvdz4oKSB7XG4gIHJldHVybiBmdW5jdGlvbiBkZWZpbmU8SyBleHRlbmRzIGtleW9mIFJvdywgRiA9IFJvd1tLXT4oXG4gICAgY29sOiBOdkRhdGF0YWJsZUNvbHVtbjxSb3csIEssIEY+LFxuICApIHtcbiAgICByZXR1cm4gY29sIGFzIHVua25vd24gYXMgTnZEYXRhdGFibGVDb2x1bW48Um93PjtcbiAgfTtcbn1cblxuZXhwb3J0IHsgZmxleFJlbmRlckNvbXBvbmVudCBhcyBudkRhdGF0YWJsZVJlbmRlckNvbXBvbmVudCB9IGZyb20gJy4vZGF0YXRhYmxlLnV0aWxzJztcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBUWVBFUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmV4cG9ydCB0eXBlIHsgQ2VsbENvbnRleHQgYXMgTnZEYXRhdGFibGVDZWxsQ29udGV4dCB9O1xuXG4vKiogQ29sdW1uIGRlZmluaXRpb24gZm9yIE52RGF0YXRhYmxlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBOdkRhdGF0YWJsZUNvbHVtbjxcbiAgUm93LFxuICBLIGV4dGVuZHMga2V5b2YgUm93ID0ga2V5b2YgUm93LFxuICBGID0gUm93W0tdLFxuPiB7XG4gIC8qKiBGaWVsZCBuYW1lIGZyb20gcm93IGRhdGEgKi9cbiAgZmllbGQ6IEs7XG4gIC8qKiBEaXNwbGF5IG5hbWUgZm9yIGNvbHVtbiBoZWFkZXIgKi9cbiAgaGVhZGVyTmFtZT86IHN0cmluZztcbiAgLyoqIENvbHVtbiB3aWR0aCBpbiBwaXhlbHMgKi9cbiAgd2lkdGg/OiBudW1iZXI7XG4gIC8qKiBXaGV0aGVyIGNvbHVtbiBpcyByZXNpemFibGUgKi9cbiAgcmVzaXphYmxlPzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgY29sdW1uIGlzIGhpZGRlbiAqL1xuICBoaWRkZW4/OiBib29sZWFuO1xuICAvKipcbiAgICogVHJhbnNmb3JtIHRoZSByYXcgdmFsdWUgYmVmb3JlIHJlbmRlcmluZy4gUmVjZWl2ZXMgdGhlIGNlbGwgdmFsdWUgYW5kIGZ1bGwgcm93IG9iamVjdC5cbiAgICogVGhpcyBpcyB1c2VmdWwgZm9yIGZvcm1hdHRpbmcgZGF0ZXMsIGNvbnZlcnRpbmcgYXJyYXlzIHRvIHN0cmluZ3MsIGFjY2Vzc2luZyBuZXN0ZWQgb2JqZWN0cywgZXRjLlxuICAgKiBUaGUgdHJhbnNmb3JtZWQgdmFsdWUgaXMgdGhlbiBwYXNzZWQgdG8gcmVuZGVyQ2VsbCBvciB0ZW1wbGF0ZXMuXG4gICAqL1xuICB2YWx1ZUZvcm1hdHRlcj86IChwYXJhbXM6IE52VGFibGVWYWx1ZUZvcm1hdHRlclBhcmFtczxSb3csIFJvd1tLXSwgSz4pID0+IEY7XG4gIC8qKlxuICAgKiBDdXN0b20gY2VsbCByZW5kZXJlciBmdW5jdGlvbiB0aGF0IGNhbiByZXR1cm4gZWl0aGVyIGEgc3RyaW5nIG9yIEFuZ3VsYXIgVGVtcGxhdGVSZWYuXG4gICAqIFVzZSBgJGltcGxpY2l0YCBpbiB5b3VyIHRlbXBsYXRlIHRvIHJlY2VpdmUgdGhlIENlbGxDb250ZXh0LlxuICAgKiBOb3RlOiBJZiB2YWx1ZUZvcm1hdHRlciBpcyBwcm92aWRlZCwgcmVuZGVyQ2VsbCByZWNlaXZlcyB0aGUgZm9ybWF0dGVkIHZhbHVlLlxuICAgKi9cbiAgcmVuZGVyQ2VsbD86IChjb250ZXh0OiBDZWxsQ29udGV4dDxSb3csIEY+KSA9PlxuICAgIHwgc3RyaW5nXG4gICAgfCBGbGV4UmVuZGVyQ29tcG9uZW50XG4gICAgfCBUZW1wbGF0ZVJlZjx7XG4gICAgICAgICRpbXBsaWNpdDogQ2VsbENvbnRleHQ8Um93LCBGPjtcbiAgICAgIH0+O1xuICAvKiogRW5hYmxlL2Rpc2FibGUgc29ydGluZyBmb3IgdGhpcyBjb2x1bW4gKi9cbiAgc29ydGFibGU/OiBib29sZWFuO1xuICAvKiogQ3VzdG9tIHNvcnRpbmcgZnVuY3Rpb24gb3IgYnVpbHQtaW4gZnVuY3Rpb24gbmFtZSAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBzb3J0aW5nRm4/OiAoKHJvd0E6IGFueSwgcm93QjogYW55LCBjb2x1bW5JZDogc3RyaW5nKSA9PiBudW1iZXIpIHwgc3RyaW5nO1xuICAvKiogU3RhcnQgd2l0aCBkZXNjZW5kaW5nIHNvcnQgZm9yIHRoaXMgY29sdW1uICovXG4gIHNvcnREZXNjRmlyc3Q/OiBib29sZWFuO1xuICAvKiogSW52ZXJ0IHRoZSBzb3J0IG9yZGVyICh1c2VmdWwgZm9yIHJhbmtpbmdzKSAqL1xuICBpbnZlcnRTb3J0aW5nPzogYm9vbGVhbjtcbiAgLyoqIFdoZXJlIHRvIHBsYWNlIHVuZGVmaW5lZCB2YWx1ZXMgaW4gc29ydCAqL1xuICBzb3J0VW5kZWZpbmVkPzogJ2ZpcnN0JyB8ICdsYXN0JyB8IGZhbHNlIHwgLTEgfCAxO1xufVxuXG4vKiogUGFyYW1ldGVycyBmb3IgY3VzdG9tIGNlbGwgcmVuZGVyaW5nIGZ1bmN0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBOdlRhYmxlUmVuZGVyQ2VsbFBhcmFtczxSb3csIFZhbHVlLCBGaWVsZD4ge1xuICAvKiogQ2VsbCB2YWx1ZSAqL1xuICB2YWx1ZTogVmFsdWUgfCBOb0luZmVyPFZhbHVlPjtcbiAgLyoqIFJvdyBkYXRhICovXG4gIHJvdzogUm93O1xuICAvKiogRmllbGQgbmFtZSAqL1xuICBmaWVsZDogRmllbGQ7XG4gIC8qKiBSb3cgaW5kZXggKi9cbiAgcm93SW5kZXg6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB2YWx1ZUZvcm1hdHRlciBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOdlRhYmxlVmFsdWVGb3JtYXR0ZXJQYXJhbXM8Um93LCBWYWx1ZSwgRmllbGQ+IHtcbiAgLyoqIENlbGwgb3JpZ2luYWwgdmFsdWUgKi9cbiAgdmFsdWU6IFZhbHVlO1xuICAvKiogUm93IGRhdGEgKi9cbiAgcm93OiBSb3c7XG4gIC8qKiBGaWVsZCBuYW1lICovXG4gIGZpZWxkOiBGaWVsZDtcbn1cblxuLyoqXG4gKiBQYWdpbmF0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIE52RGF0YXRhYmxlLlxuICogVGhlIHBhZ2luYXRpb24gYmVoYXZpb3IgKGNsaWVudCB2cyBzZXJ2ZXIpIGlzIGRlcml2ZWQgZnJvbSB0aGUgdG9wLWxldmVsIGBtb2RlYCBwcm9wLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE52RGF0YXRhYmxlUGFnaW5hdGlvbkNvbmZpZyB7XG4gIC8qKlxuICAgKiBFbmFibGUgaW5maW5pdGUgc2Nyb2xsIG1vZGUuXG4gICAqIFdoZW4gdHJ1ZSwgcmVxdWlyZXMgdGhlIGNvbXBvbmVudCdzIHRvcC1sZXZlbCBgbW9kZWAgdG8gYmUgc2V0IHRvICdzZXJ2ZXInLlxuICAgKiBEYXRhIGlzIGxvYWRlZCBpbmNyZW1lbnRhbGx5IGFzIHRoZSB1c2VyIHNjcm9sbHMuXG4gICAqL1xuICBpbmZpbml0ZT86IGJvb2xlYW47XG4gIC8qKiBJbml0aWFsIHBhZ2Ugc2l6ZSAoZGVmYXVsdDogMTApICovXG4gIGluaXRpYWxQYWdlU2l6ZT86IG51bWJlcjtcbiAgLyoqIEF2YWlsYWJsZSBwYWdlIHNpemUgb3B0aW9ucyAoZGVmYXVsdDogWzEwLCAyMCwgNTAsIDEwMF0pICovXG4gIHBhZ2VTaXplT3B0aW9ucz86IG51bWJlcltdO1xuICAvKiogQ3VzdG9tIGxhYmVscyBmb3IgcGFnaW5hdGlvbiBjb21wb25lbnQgKGkxOG4gc3VwcG9ydCkgKi9cbiAgbGFiZWxzPzoge1xuICAgIC8qKiBMYWJlbCB0ZW1wbGF0ZSBmb3IgdGhlIHBhZ2UgaW5kaWNhdG9yLiBTdXBwb3J0cyBwbGFjZWhvbGRlcnM6IHtwYWdlSW5kZXh9LCB7cGFnZUNvdW50fSAqL1xuICAgIHBhZ2U/OiBzdHJpbmc7XG4gICAgLyoqIExhYmVsIHRlbXBsYXRlIGZvciB0aGUgdG90YWwgcm93IGNvdW50IGRpc3BsYXkuIFN1cHBvcnRzIHBsYWNlaG9sZGVyOiB7cm93Q291bnR9ICovXG4gICAgdG90YWw/OiBzdHJpbmc7XG4gICAgLyoqIExhYmVsIHRlbXBsYXRlIGZvciB0aGUgcGFnZSBzaXplIGRyb3Bkb3duIG9wdGlvbnMuIFN1cHBvcnRzIHBsYWNlaG9sZGVyOiB7cGFnZVNpemV9ICovXG4gICAgcGFnZVNpemVPcHRpb24/OiBzdHJpbmc7XG4gIH07XG5cbiAgLy8gU2VydmVyLXNpZGUgKGJ1dHRvbnMpIHNwZWNpZmljIHByb3BlcnRpZXNcbiAgLyoqIFRvdGFsIG51bWJlciBvZiByb3dzIChmb3Igc2VydmVyLXNpZGUgcGFnaW5hdGlvbikgKi9cbiAgdG90YWxSb3dDb3VudD86IG51bWJlcjtcbiAgLyoqIFRvdGFsIG51bWJlciBvZiBwYWdlcyAoZm9yIHNlcnZlci1zaWRlIHBhZ2luYXRpb24pICovXG4gIHRvdGFsUGFnZUNvdW50PzogbnVtYmVyO1xuICAvKiogQ2FsbGJhY2sgd2hlbiBwYWdpbmF0aW9uIHN0YXRlIGNoYW5nZXMgKGZvciBzZXJ2ZXItc2lkZSBwYWdpbmF0aW9uKSAqL1xuICBvblBhZ2luYXRpb25DaGFuZ2U/OiAoc3RhdGU6IHtcbiAgICAvKiogQ3VycmVudCBwYWdlIGluZGV4ICovXG4gICAgcGFnZUluZGV4OiBudW1iZXI7XG4gICAgLyoqIEN1cnJlbnQgcGFnZSBzaXplICovXG4gICAgcGFnZVNpemU6IG51bWJlcjtcbiAgfSkgPT4gdm9pZDtcblxuICAvLyBJbmZpbml0ZSBzY3JvbGwgc3BlY2lmaWMgcHJvcGVydGllcyAodXNlZCB3aGVuIGluZmluaXRlOiB0cnVlKVxuICAvKiogV2hldGhlciB0aGVyZSBhcmUgbW9yZSBpdGVtcyB0byBsb2FkIChmb3IgaW5maW5pdGUgc2Nyb2xsKSAqL1xuICBoYXNNb3JlPzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgZGF0YSBpcyBjdXJyZW50bHkgbG9hZGluZyAoZm9yIGluZmluaXRlIHNjcm9sbCkgKi9cbiAgaXNMb2FkaW5nPzogYm9vbGVhbjtcbiAgLyoqIERpc3RhbmNlIGZyb20gYm90dG9tIGluIHBpeGVscyB0byB0cmlnZ2VyIGxvYWQgKGRlZmF1bHQ6IDUwMCkgKi9cbiAgbG9hZE1vcmVUaHJlc2hvbGQ/OiBudW1iZXI7XG4gIC8qKiBDYWxsYmFjayB0byBsb2FkIG1vcmUgZGF0YSAoZm9yIGluZmluaXRlIHNjcm9sbCkgKi9cbiAgb25Mb2FkTW9yZT86ICgpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogQVBJIGV4cG9zZWQgdG8gcGFnaW5hdGlvbiB0ZW1wbGF0ZSBmb3IgYnVpbGRpbmcgY3VzdG9tIHBhZ2luYXRpb24gVUkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTnZEYXRhdGFibGVSZW5kZXJQYWdpbmF0aW9uQVBJIHtcbiAgLyoqIEN1cnJlbnQgcGFnZSBpbmRleCAoemVyby1iYXNlZCkgKi9cbiAgcGFnZUluZGV4OiBudW1iZXI7XG4gIC8qKiBDdXJyZW50IHBhZ2Ugc2l6ZSAqL1xuICBwYWdlU2l6ZTogbnVtYmVyO1xuICAvKiogVG90YWwgbnVtYmVyIG9mIHBhZ2VzICovXG4gIHBhZ2VDb3VudDogbnVtYmVyO1xuICAvKiogVG90YWwgbnVtYmVyIG9mIHJvd3MgKi9cbiAgcm93Q291bnQ6IG51bWJlcjtcbiAgLyoqIE5hdmlnYXRlIHRvIGZpcnN0IHBhZ2UgKi9cbiAgZmlyc3RQYWdlOiAoKSA9PiB2b2lkO1xuICAvKiogTmF2aWdhdGUgdG8gcHJldmlvdXMgcGFnZSAqL1xuICBwcmV2aW91c1BhZ2U6ICgpID0+IHZvaWQ7XG4gIC8qKiBOYXZpZ2F0ZSB0byBuZXh0IHBhZ2UgKi9cbiAgbmV4dFBhZ2U6ICgpID0+IHZvaWQ7XG4gIC8qKiBOYXZpZ2F0ZSB0byBsYXN0IHBhZ2UgKi9cbiAgbGFzdFBhZ2U6ICgpID0+IHZvaWQ7XG4gIC8qKiBOYXZpZ2F0ZSB0byBzcGVjaWZpYyBwYWdlIGJ5IGluZGV4ICovXG4gIHNldFBhZ2VJbmRleDogKGluZGV4OiBudW1iZXIpID0+IHZvaWQ7XG4gIC8qKiBDaGFuZ2UgcGFnZSBzaXplICovXG4gIHNldFBhZ2VTaXplOiAoc2l6ZTogbnVtYmVyKSA9PiB2b2lkO1xuICAvKiogV2hldGhlciBwcmV2aW91cyBwYWdlIGlzIGF2YWlsYWJsZSAqL1xuICBjYW5QcmV2aW91c1BhZ2U6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIG5leHQgcGFnZSBpcyBhdmFpbGFibGUgKi9cbiAgY2FuTmV4dFBhZ2U6IGJvb2xlYW47XG4gIC8qKiBMb2FkaW5nIHN0YXRlIChvbmx5IGZvciBpbmZpbml0ZSBzY3JvbGwpICovXG4gIGlzTG9hZGluZz86IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIG1vcmUgaXRlbXMgYXJlIGF2YWlsYWJsZSAob25seSBmb3IgaW5maW5pdGUgc2Nyb2xsKSAqL1xuICBoYXNNb3JlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBTb3J0aW5nIGNvbmZpZ3VyYXRpb24gZm9yIE52RGF0YXRhYmxlLlxuICogVGhlIHNvcnRpbmcgbW9kZSAoY2xpZW50IHZzIHNlcnZlcikgaXMgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnQncyB0b3AtbGV2ZWwgYG1vZGVgIHByb3AuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTnZEYXRhdGFibGVTb3J0aW5nQ29uZmlnIHtcbiAgLyoqIEVuYWJsZSBtdWx0aS1jb2x1bW4gc29ydGluZyB3aXRoIFNoaWZ0K0NsaWNrICovXG4gIGVuYWJsZU11bHRpU29ydD86IGJvb2xlYW47XG4gIC8qKiBBbGxvdyBjeWNsaW5nIHRocm91Z2ggdG8gXCJubyBzb3J0XCIgc3RhdGUgKi9cbiAgZW5hYmxlU29ydGluZ1JlbW92YWw/OiBib29sZWFuO1xuICAvKiogTWF4aW11bSBudW1iZXIgb2YgY29sdW1ucyBmb3IgbXVsdGktc29ydCAqL1xuICBtYXhNdWx0aVNvcnRDb2xDb3VudD86IG51bWJlcjtcbiAgLyoqIFN0YXJ0IHdpdGggZGVzY2VuZGluZyBzb3J0IGFzIGZpcnN0IHRvZ2dsZSBzdGF0ZSAqL1xuICBzb3J0RGVzY0ZpcnN0PzogYm9vbGVhbjtcbiAgLyoqIENvbnRyb2xsZWQgc29ydCBzdGF0ZSAoZm9yIHNlcnZlci1zaWRlIHNvcnRpbmcpICovXG4gIHNvcnRTdGF0ZT86IFNvcnRpbmdTdGF0ZTtcbiAgLyoqIENhbGxiYWNrIHdoZW4gc29ydGluZyBjaGFuZ2VzIChmb3Igc2VydmVyLXNpZGUgc29ydGluZykgKi9cbiAgb25Tb3J0aW5nQ2hhbmdlPzogKHNvcnRpbmc6IFNvcnRpbmdTdGF0ZSkgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBTb3J0aW5nIHN0YXRlIHR5cGUgLSBhcnJheSBvZiBzb3J0IGRlc2NyaXB0b3JzXG4gKi9cbmV4cG9ydCB0eXBlIE52RGF0YVRhYmxlU29ydGluZ1N0YXRlID0gU29ydGluZ1N0YXRlO1xuIl19
601
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnYtZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25vdmEtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvbnYtZGF0YXRhYmxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3Q0FBd0M7QUFDeEMsMENBQTBDO0FBQzFDLHdDQUF3QztBQUV4QyxPQUFPLEVBQ0wsU0FBUyxFQUNULFFBQVEsRUFDUixLQUFLLEVBQ0wsV0FBVyxFQUNYLHNCQUFzQixFQUN0QixZQUFZLEVBQ1osZUFBZSxFQUVmLE1BQU0sRUFDTixNQUFNLEVBRU4sU0FBUyxHQUdWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsd0JBQXdCLEdBRXpCLE1BQU0sK0JBQStCLENBQUM7QUFFdkMsZ0hBQWdIO0FBQ2hILE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixpQkFBaUIsRUFDakIsbUJBQW1CLEdBT3BCLE1BQU0sbUJBQW1CLENBQUM7OztBQUUzQjs7O0dBR0c7QUFzR0gsTUFBTSxPQUFPLFdBQVc7SUFtUXRCLHdDQUF3QztJQUN4QyxLQUFLO1FBQ0gsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCwwQkFBMEIsQ0FDeEIsS0FBMkMsRUFDM0MsTUFLQztRQUVELHlEQUF5RDtRQUN6RCxJQUFJLFNBQWtDLENBQUM7UUFFdkMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM5QixTQUFTLEdBQUcsS0FBZ0MsQ0FBQztRQUMvQyxDQUFDO2FBQU0sSUFBSSxRQUFRLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNqRSxT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bUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtanNkb2MgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtcmV0dXJucyAqL1xuLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1wYXJhbSAqL1xuXG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBpbnB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBRdWVyeUxpc3QsXG4gIGVmZmVjdCxcbiAgc2lnbmFsLFxuICBFbGVtZW50UmVmLFxuICB2aWV3Q2hpbGQsXG4gIEFmdGVyVmlld0luaXQsXG4gIE9uRGVzdHJveSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgTnZEYXRhdGFibGVDZWxsRGlyZWN0aXZlLFxuICB0eXBlIE52RGF0YXRhYmxlQ2VsbENvbnRleHQsXG59IGZyb20gJy4vbnYtZGF0YXRhYmxlLWNlbGwuZGlyZWN0aXZlJztcblxuLy8gbG9jYWwgY29weSBvZiBAdGFuc3RhY2svYW5ndWxhci10YWJsZSAocmVxdWlyZWQgZm9yIG11bHRpIGFuZ3VsYXIgdmVyc2lvbnMsIHRoZSBidWlsdCB2ZXJzaW9uIGlzIG5vdCB3b3JraW5nKVxuaW1wb3J0IHtcbiAgY3JlYXRlQW5ndWxhclRhYmxlLFxuICBnZXRDb3JlUm93TW9kZWwsXG4gIGdldFBhZ2luYXRpb25Sb3dNb2RlbCxcbiAgZ2V0U29ydGVkUm93TW9kZWwsXG4gIEZsZXhSZW5kZXJEaXJlY3RpdmUsXG4gIHR5cGUgRmxleFJlbmRlckNvbXBvbmVudCxcbiAgdHlwZSBDb2x1bW5EZWYsXG4gIHR5cGUgQ2VsbENvbnRleHQsXG4gIHR5cGUgUGFnaW5hdGlvblN0YXRlLFxuICB0eXBlIFNvcnRpbmdTdGF0ZSxcbiAgdHlwZSBOb0luZmVyLFxufSBmcm9tICcuL2RhdGF0YWJsZS51dGlscyc7XG5cbi8qKlxuICogQSBwb3dlcmZ1bCwgZmxleGlibGUgZGF0YXRhYmxlIGNvbXBvbmVudCBidWlsdCBvbiBUYW5TdGFjayBUYWJsZS5cbiAqIFN1cHBvcnRzIGN1c3RvbSBjZWxsIHJlbmRlcmluZywgY29sdW1uIGNvbmZpZ3VyYXRpb24sIHBhZ2luYXRpb24sIGFuZCBmdWxsIFR5cGVTY3JpcHQgdHlwaW5nLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdudi1kYXRhdGFibGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGbGV4UmVuZGVyRGlyZWN0aXZlXSxcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxudi10YWJsZT5cbiAgICAgIDx0YWJsZT5cbiAgICAgICAgPHRoZWFkIFthdHRyLmRhdGEtc3RpY2t5LXRvcF09XCJzdGlja3lIZWFkZXIoKSA/ICd0cnVlJyA6IG51bGxcIj5cbiAgICAgICAgICBAZm9yIChoZWFkZXJHcm91cCBvZiB0YWJsZSgpLmdldEhlYWRlckdyb3VwcygpOyB0cmFjayBoZWFkZXJHcm91cC5pZClcbiAgICAgICAgICB7XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgQGZvciAoaGVhZGVyIG9mIGhlYWRlckdyb3VwLmhlYWRlcnM7IHRyYWNrIGhlYWRlci5pZCkge1xuICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cIidkYXRhdGFibGUtaGVhZGVyLScgKyBoZWFkZXIuaWRcIlxuICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiXG4gICAgICAgICAgICAgICAgaGVhZGVyLmNvbHVtbi5jb2x1bW5EZWYuc2l6ZVxuICAgICAgICAgICAgICAgICAgPyBoZWFkZXIuY29sdW1uLmNvbHVtbkRlZi5zaXplICsgJ3B4J1xuICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFthdHRyLmRhdGEtbm8tcmVzaXplXT1cIlxuICAgICAgICAgICAgICAgICFoZWFkZXIuY29sdW1uLmNvbHVtbkRlZi5lbmFibGVSZXNpemluZyA/ICd0cnVlJyA6IG51bGxcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQGlmICghaGVhZGVyLmlzUGxhY2Vob2xkZXIpIHsgQGlmIChoZWFkZXIuY29sdW1uLmdldENhblNvcnQoKSkge1xuICAgICAgICAgICAgICA8bnYtdGFibGVoZWFkZXJcbiAgICAgICAgICAgICAgICBbc29ydGFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3NvcnREaXJlY3Rpb25dPVwiaGVhZGVyLmNvbHVtbi5nZXRJc1NvcnRlZCgpIHx8ICdub25lJ1wiXG4gICAgICAgICAgICAgICAgKHNvcnREaXJlY3Rpb25DaGFuZ2VkKT1cIlxuICAgICAgICAgICAgICAgICAgaGFuZGxlU29ydERpcmVjdGlvbkNoYW5nZWQoJGV2ZW50LCBoZWFkZXIpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGhlYWRlci5jb2x1bW4uY29sdW1uRGVmLmhlYWRlciB9fVxuICAgICAgICAgICAgICA8L252LXRhYmxlaGVhZGVyPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAge3sgaGVhZGVyLmNvbHVtbi5jb2x1bW5EZWYuaGVhZGVyIH19XG4gICAgICAgICAgICAgIH0gfVxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIH1cbiAgICAgICAgPC90aGVhZD5cblxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgQGZvciAocm93IG9mIHRhYmxlKCkuZ2V0Um93TW9kZWwoKS5yb3dzOyB0cmFjayByb3cuaWQ7IGxldCBpID0gJGluZGV4KVxuICAgICAgICAgIHtcbiAgICAgICAgICA8dHJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cIidkYXRhdGFibGUtcm93LScgKyBpXCJcbiAgICAgICAgICAgICN0YWJsZVJvd1xuICAgICAgICAgICAgW2F0dHIuZGF0YS1pcy1sYXN0XT1cIlxuICAgICAgICAgICAgICBpc0luZmluaXRlU2Nyb2xsKCkgJiYgaSA9PT0gdGFibGUoKS5nZXRSb3dNb2RlbCgpLnJvd3MubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgID8gJ3RydWUnXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBmb3IgKGNlbGwgb2Ygcm93LmdldFZpc2libGVDZWxscygpOyB0cmFjayBjZWxsLmlkKSB7XG4gICAgICAgICAgICA8dGQgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ2RhdGF0YWJsZS1jZWxsLScgKyBjZWxsLmNvbHVtbi5pZFwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKmZsZXhSZW5kZXI9XCJcbiAgICAgICAgICAgICAgICAgIGNlbGwuY29sdW1uLmNvbHVtbkRlZi5jZWxsO1xuICAgICAgICAgICAgICAgICAgcHJvcHM6IGNlbGwuZ2V0Q29udGV4dCgpO1xuICAgICAgICAgICAgICAgICAgbGV0IGNlbGxDb250ZW50XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGNlbGxDb250ZW50IH19XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIH1cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9udi10YWJsZT5cblxuICAgIDwhLS0gUmVuZGVyIHBhZ2luYXRpb24gaWYgY29uZmlndXJlZCAtLT5cbiAgICBAaWYgKHBhZ2luYXRpb25BUEkoKSkgeyBAaWYgKHBhZ2luYXRpb25UZW1wbGF0ZSkge1xuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHBhZ2luYXRpb25UZW1wbGF0ZTtcbiAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IHBhZ2luYXRpb25BUEkoKSB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICB9IEBlbHNlIGlmIChtb2RlKCkgPT09ICdjbGllbnQnICYmIHBhZ2luYXRpb24oKSAmJiAhcGFnaW5hdGlvbigpPy5pbmZpbml0ZSlcbiAgICB7XG4gICAgPCEtLSBEZWZhdWx0IHBhZ2luYXRpb24gd2l0aCBudi1wYWdpbmF0aW9udGFibGUgKGNsaWVudCBtb2RlIG9ubHkpIC0tPlxuICAgIDxudi1wYWdpbmF0aW9udGFibGVcbiAgICAgIFtwYWdlSW5kZXhdPVwicGFnaW5hdGlvbkFQSSgpIS5wYWdlSW5kZXhcIlxuICAgICAgW3BhZ2VTaXplXT1cInBhZ2luYXRpb25BUEkoKSEucGFnZVNpemVcIlxuICAgICAgW3BhZ2VDb3VudF09XCJwYWdpbmF0aW9uQVBJKCkhLnBhZ2VDb3VudFwiXG4gICAgICBbcm93Q291bnRdPVwicGFnaW5hdGlvbkFQSSgpIS5yb3dDb3VudFwiXG4gICAgICBbYXR0ci5sYWJlbC1wYWdlXT1cInBhZ2luYXRpb24oKT8ubGFiZWxzPy5wYWdlIHx8IG51bGxcIlxuICAgICAgW2F0dHIubGFiZWwtdG90YWxdPVwicGFnaW5hdGlvbigpPy5sYWJlbHM/LnRvdGFsIHx8IG51bGxcIlxuICAgICAgW2F0dHIubGFiZWwtcGFnZS1zaXplLW9wdGlvbl09XCJcbiAgICAgICAgcGFnaW5hdGlvbigpPy5sYWJlbHM/LnBhZ2VTaXplT3B0aW9uIHx8IG51bGxcbiAgICAgIFwiXG4gICAgICAocGFnZUluZGV4Q2hhbmdlZCk9XCJwYWdpbmF0aW9uQVBJKCkhLnNldFBhZ2VJbmRleCgkZXZlbnQuZGV0YWlsKVwiXG4gICAgICAocGFnZVNpemVDaGFuZ2VkKT1cInBhZ2luYXRpb25BUEkoKSEuc2V0UGFnZVNpemUoJGV2ZW50LmRldGFpbClcIlxuICAgID48L252LXBhZ2luYXRpb250YWJsZT5cbiAgICB9IH1cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgTnZEYXRhdGFibGU8VD4gaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAvKiogQ29sdW1uIGRlZmluaXRpb25zICovXG4gIGNvbHVtbnMgPSBpbnB1dDxOdkRhdGF0YWJsZUNvbHVtbjxUPltdPihbXSk7XG4gIC8qKiBSb3cgZGF0YSAqL1xuICByb3dzID0gaW5wdXQ8VFtdPihbXSk7XG4gIC8qKlxuICAgKiBEYXRhIGhhbmRsaW5nIG1vZGUgZm9yIHNvcnRpbmcgYW5kIGZpbHRlcmluZyBvcGVyYXRpb25zLlxuICAgKiAtICdjbGllbnQnOiBBbGwgb3BlcmF0aW9ucyBoYW5kbGVkIGluIGJyb3dzZXIgKGRlZmF1bHQpXG4gICAqIC0gJ3NlcnZlcic6IE9wZXJhdGlvbnMgdHJpZ2dlciBjYWxsYmFja3MgZm9yIHNlcnZlci1zaWRlIGhhbmRsaW5nXG4gICAqL1xuICBtb2RlID0gaW5wdXQ8J2NsaWVudCcgfCAnc2VydmVyJz4oJ2NsaWVudCcpO1xuICAvKiogT3B0aW9uYWwgcGFnaW5hdGlvbiBjb25maWd1cmF0aW9uICovXG4gIHBhZ2luYXRpb24gPSBpbnB1dDxOdkRhdGF0YWJsZVBhZ2luYXRpb25Db25maWcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIC8qKiBPcHRpb25hbCBzb3J0aW5nIGNvbmZpZ3VyYXRpb24gKi9cbiAgc29ydGluZyA9IGlucHV0PE52RGF0YXRhYmxlU29ydGluZ0NvbmZpZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgLyoqIFNob3VsZCB0aGUgaGVhZGVyIHN0aWNrIHRvIHRoZSB0b3Agb2YgdGhlIHRhYmxlIHdoZW4gc2Nyb2xsaW5nPyAqL1xuICBzdGlja3lIZWFkZXIgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgLyoqIFRlbXBsYXRlIGZvciBjdXN0b20gcGFnaW5hdGlvbiBVSSAqL1xuICBAQ29udGVudENoaWxkKCdwYWdpbmF0aW9uVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHBhZ2luYXRpb25UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHtcbiAgICAkaW1wbGljaXQ6IE52RGF0YXRhYmxlUmVuZGVyUGFnaW5hdGlvbkFQSTtcbiAgfT47XG5cbiAgLyoqIENlbGwgdGVtcGxhdGVzIHByb3ZpZGVkIHZpYSBudkRhdGF0YWJsZUNlbGwgZGlyZWN0aXZlICovXG4gIEBDb250ZW50Q2hpbGRyZW4oTnZEYXRhdGFibGVDZWxsRGlyZWN0aXZlKVxuICBjZWxsVGVtcGxhdGVzPzogUXVlcnlMaXN0PE52RGF0YXRhYmxlQ2VsbERpcmVjdGl2ZTxULCBUW2tleW9mIFRdPj47XG5cbiAgLyoqIFNpZ25hbCB0byB0cmFjayBjZWxsIHRlbXBsYXRlcyBhcnJheSAqL1xuICBwcml2YXRlIGNlbGxUZW1wbGF0ZXNTaWduYWwgPSBzaWduYWw8XG4gICAgTnZEYXRhdGFibGVDZWxsRGlyZWN0aXZlPFQsIFRba2V5b2YgVF0+W11cbiAgPihbXSk7XG5cbiAgLyoqIE1hcCBvZiBmaWVsZCBuYW1lcyB0byBjZWxsIHRlbXBsYXRlcyAqL1xuICBwcml2YXRlIGNlbGxUZW1wbGF0ZU1hcCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwPFxuICAgICAgc3RyaW5nLFxuICAgICAgVGVtcGxhdGVSZWY8TnZEYXRhdGFibGVDZWxsQ29udGV4dDxULCBUW2tleW9mIFRdPj5cbiAgICA+KCk7XG4gICAgdGhpcy5jZWxsVGVtcGxhdGVzU2lnbmFsKCkuZm9yRWFjaCgoZGlyZWN0aXZlKSA9PiB7XG4gICAgICBtYXAuc2V0KGRpcmVjdGl2ZS5udkRhdGF0YWJsZUNlbGwsIGRpcmVjdGl2ZS50ZW1wbGF0ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG1hcDtcbiAgfSk7XG5cbiAgLyoqIFBhZ2luYXRpb24gc3RhdGUgZm9yIHNlcnZlciBtb2RlICovXG4gIHByaXZhdGUgcGFnaW5hdGlvblN0YXRlID0gc2lnbmFsPFBhZ2luYXRpb25TdGF0ZT4oe1xuICAgIHBhZ2VJbmRleDogMCxcbiAgICBwYWdlU2l6ZTogdGhpcy5wYWdpbmF0aW9uKCk/LmluaXRpYWxQYWdlU2l6ZSB8fCAxMCxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFNvcnRpbmcgc3RhdGUuIFdoZW4gc29ydGluZy5zb3J0U3RhdGUgaXMgcHJvdmlkZWQgdGhlIGNvbXBvbmVudCBpcyBjb250cm9sbGVkO1xuICAgKiBpbml0aWFsU29ydFN0YXRlIG9ubHkgc2VlZHMgdGhlIHVuY29udHJvbGxlZCBzdGF0ZSAoc2VlZGVkIGZyb20gdGhlIGNvbnN0cnVjdG9yXG4gICAqIGVmZmVjdCBiZWxvdyDigJQgZmllbGQgaW5pdGlhbGl6ZXJzIHJ1biBiZWZvcmUgaW5wdXRzIGFyZSBib3VuZCkuXG4gICAqL1xuICBwcml2YXRlIHNvcnRpbmdTdGF0ZSA9IHNpZ25hbDxTb3J0aW5nU3RhdGU+KFtdKTtcblxuICAvKiogUmVmZXJlbmNlIHRvIHRhYmxlIHJvd3MgZm9yIGluZmluaXRlIHNjcm9sbCBvYnNlcnZlciAqL1xuICBwcml2YXRlIHRhYmxlUm93cyA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPigndGFibGVSb3cnKTtcblxuICAvKiogSW50ZXJzZWN0aW9uIG9ic2VydmVyIGZvciBpbmZpbml0ZSBzY3JvbGwgKi9cbiAgcHJpdmF0ZSBvYnNlcnZlcjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcblxuICAvKiogSGVscGVyIHRvIGNoZWNrIGlmIHVzaW5nIGluZmluaXRlIHNjcm9sbCAqL1xuICBpc0luZmluaXRlU2Nyb2xsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wYWdpbmF0aW9uKCk/LmluZmluaXRlID09PSB0cnVlKTtcblxuICAvKiogQ29tcHV0ZWQgdGFibGUgY29sdW1ucyB3aXRoIHByb3BlciB0eXBpbmcgYW5kIGZpbHRlcmluZy4gKi9cbiAgdGFibGVDb2x1bW5zID0gY29tcHV0ZWQ8Q29sdW1uRGVmPFQsIFRba2V5b2YgVF0+W10+KCgpID0+IHtcbiAgICBjb25zdCB0ZW1wbGF0ZU1hcCA9IHRoaXMuY2VsbFRlbXBsYXRlTWFwKCk7XG5cbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zKClcbiAgICAgIC5maWx0ZXIoKGNvbCkgPT4gIWNvbC5oaWRkZW4pXG4gICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgLy8gU2hhcmVkIGNlbGwgcmVuZGVyZXJcbiAgICAgICAgY29uc3QgY2VsbFJlbmRlcmVyID0gKGNvbnRleHQ6IENlbGxDb250ZXh0PFQsIFRba2V5b2YgVF0+KSA9PiB7XG4gICAgICAgICAgY29uc3QgZmllbGROYW1lID0gU3RyaW5nKGNvbC5maWVsZCk7XG4gICAgICAgICAgY29uc3QgY2VsbFRlbXBsYXRlID0gdGVtcGxhdGVNYXAuZ2V0KGZpZWxkTmFtZSk7XG5cbiAgICAgICAgICAvLyBQcmlvcml0eTogdGVtcGxhdGUgPiByZW5kZXJDZWxsID4gZGVmYXVsdFxuICAgICAgICAgIGlmIChjZWxsVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIC8vIFJldHVybiBUZW1wbGF0ZVJlZiBkaXJlY3RseSAtIGdldFZhbHVlKCkgcmV0dXJucyBmb3JtYXR0ZWQgdmFsdWVcbiAgICAgICAgICAgIHJldHVybiBjZWxsVGVtcGxhdGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHJlbmRlckNlbGwgaWYgcHJvdmlkZWRcbiAgICAgICAgICBpZiAoY29sLnJlbmRlckNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2wucmVuZGVyQ2VsbChjb250ZXh0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBEZWZhdWx0OiBqdXN0IHJldHVybiB0aGUgdmFsdWUgKGZvcm1hdHRlZCBpZiB2YWx1ZUZvcm1hdHRlciB3YXMgdXNlZClcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5nZXRWYWx1ZSgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGNvbHVtbkRlZjogQ29sdW1uRGVmPFQsIFRba2V5b2YgVF0+ID0ge1xuICAgICAgICAgIGFjY2Vzc29yS2V5OiBjb2wuZmllbGQsXG4gICAgICAgICAgYWNjZXNzb3JGbjogY29sLnZhbHVlRm9ybWF0dGVyXG4gICAgICAgICAgICA/IChyb3c6IFQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByYXdWYWx1ZSA9IHJvd1tjb2wuZmllbGRdO1xuICAgICAgICAgICAgICAgIHJldHVybiBjb2wudmFsdWVGb3JtYXR0ZXIhKHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiByYXdWYWx1ZSxcbiAgICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICAgIGZpZWxkOiBjb2wuZmllbGQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGhlYWRlcjogY29sLmhlYWRlck5hbWUgfHwgU3RyaW5nKGNvbC5maWVsZCksXG4gICAgICAgICAgc2l6ZTogY29sLndpZHRoLFxuICAgICAgICAgIGVuYWJsZVJlc2l6aW5nOiBjb2wucmVzaXphYmxlID8/IHRydWUsXG4gICAgICAgICAgLy8gU29ydGluZyBjb25maWd1cmF0aW9uXG4gICAgICAgICAgZW5hYmxlU29ydGluZzogdGhpcy5zb3J0aW5nKCkgPyBjb2wuc29ydGFibGUgPz8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgIGNlbGw6IGNlbGxSZW5kZXJlcixcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBBZGQgb3B0aW9uYWwgc29ydGluZyBwcm9wZXJ0aWVzIG9ubHkgaWYgZGVmaW5lZFxuICAgICAgICBpZiAoY29sLnNvcnRpbmdGbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRhblN0YWNrIHR5cGluZyBpcyBzdHJpY3QgYnV0IHRoaXMgd29ya3MgYXQgcnVudGltZVxuICAgICAgICAgIGNvbHVtbkRlZi5zb3J0aW5nRm4gPSBjb2wuc29ydGluZ0ZuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2wuc29ydERlc2NGaXJzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29sdW1uRGVmLnNvcnREZXNjRmlyc3QgPSBjb2wuc29ydERlc2NGaXJzdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sLmludmVydFNvcnRpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbHVtbkRlZi5pbnZlcnRTb3J0aW5nID0gY29sLmludmVydFNvcnRpbmc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbC5zb3J0VW5kZWZpbmVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb2x1bW5EZWYuc29ydFVuZGVmaW5lZCA9IGNvbC5zb3J0VW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbHVtbkRlZjtcbiAgICAgIH0pO1xuICB9KTtcblxuICAvKiogVGFuU3RhY2sgdGFibGUgaW5zdGFuY2Ugd2l0aCBTaWduYWxzICovXG4gIHByaXZhdGUgdGFibGVJbnN0YW5jZSA9IGNyZWF0ZUFuZ3VsYXJUYWJsZSgoKSA9PiB7XG4gICAgY29uc3QgcGFnaW5hdGlvbkNvbmZpZyA9IHRoaXMucGFnaW5hdGlvbigpO1xuICAgIGNvbnN0IHNvcnRpbmdDb25maWcgPSB0aGlzLnNvcnRpbmcoKTtcbiAgICBjb25zdCBjb21wb25lbnRNb2RlID0gdGhpcy5tb2RlKCk7XG4gICAgY29uc3QgaXNTZXJ2ZXJNb2RlID0gY29tcG9uZW50TW9kZSA9PT0gJ3NlcnZlcic7XG4gICAgY29uc3QgaXNJbmZpbml0ZSA9IHBhZ2luYXRpb25Db25maWc/LmluZmluaXRlID09PSB0cnVlO1xuXG4gICAgLy8gRGV0ZXJtaW5lIGJhc2UgdGFibGUgY29uZmlndXJhdGlvbiB3aXRoIHNvcnRpbmdcbiAgICBjb25zdCBnZXRCYXNlVGFibGVDb25maWcgPSAoKSA9PiB7XG4gICAgICBjb25zdCBiYXNlQ29uZmlnID0ge1xuICAgICAgICBkYXRhOiB0aGlzLnJvd3MoKSxcbiAgICAgICAgY29sdW1uczogdGhpcy50YWJsZUNvbHVtbnMoKSxcbiAgICAgICAgZ2V0Q29yZVJvd01vZGVsOiBnZXRDb3JlUm93TW9kZWwoKSxcbiAgICAgICAgLy8gU29ydGluZyBjb25maWd1cmF0aW9uIC0gdXNlcyB0b3AtbGV2ZWwgbW9kZVxuICAgICAgICAuLi4oc29ydGluZ0NvbmZpZyAmJiB7XG4gICAgICAgICAgc3RhdGU6IHtcbiAgICAgICAgICAgIHNvcnRpbmc6XG4gICAgICAgICAgICAgIGlzU2VydmVyTW9kZSAmJiBzb3J0aW5nQ29uZmlnLnNvcnRTdGF0ZVxuICAgICAgICAgICAgICAgID8gc29ydGluZ0NvbmZpZy5zb3J0U3RhdGVcbiAgICAgICAgICAgICAgICA6IHRoaXMuc29ydGluZ1N0YXRlKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvblNvcnRpbmdDaGFuZ2U6IChcbiAgICAgICAgICAgIHVwZGF0ZXJPclZhbHVlOlxuICAgICAgICAgICAgICB8IFNvcnRpbmdTdGF0ZVxuICAgICAgICAgICAgICB8ICgob2xkOiBTb3J0aW5nU3RhdGUpID0+IFNvcnRpbmdTdGF0ZSksXG4gICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U29ydCA9XG4gICAgICAgICAgICAgIGlzU2VydmVyTW9kZSAmJiBzb3J0aW5nQ29uZmlnLnNvcnRTdGF0ZVxuICAgICAgICAgICAgICAgID8gc29ydGluZ0NvbmZpZy5zb3J0U3RhdGVcbiAgICAgICAgICAgICAgICA6IHRoaXMuc29ydGluZ1N0YXRlKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld1NvcnQgPVxuICAgICAgICAgICAgICB0eXBlb2YgdXBkYXRlck9yVmFsdWUgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgICAgICA/IHVwZGF0ZXJPclZhbHVlKGN1cnJlbnRTb3J0KVxuICAgICAgICAgICAgICAgIDogdXBkYXRlck9yVmFsdWU7XG5cbiAgICAgICAgICAgIC8vIEFsd2F5cyB1cGRhdGUgaW50ZXJuYWwgc3RhdGUgZm9yIHJlYWN0aXZpdHlcbiAgICAgICAgICAgIHRoaXMuc29ydGluZ1N0YXRlLnNldChuZXdTb3J0KTtcblxuICAgICAgICAgICAgLy8gRm9yIHNlcnZlci1zaWRlIHNvcnRpbmcsIGFsc28gY2FsbCB0aGUgY2FsbGJhY2tcbiAgICAgICAgICAgIGlmIChpc1NlcnZlck1vZGUgJiYgc29ydGluZ0NvbmZpZy5vblNvcnRpbmdDaGFuZ2UpIHtcbiAgICAgICAgICAgICAgc29ydGluZ0NvbmZpZy5vblNvcnRpbmdDaGFuZ2UobmV3U29ydCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBtYW51YWxTb3J0aW5nOiBpc1NlcnZlck1vZGUsXG4gICAgICAgICAgZW5hYmxlU29ydGluZzogdHJ1ZSxcbiAgICAgICAgICBlbmFibGVNdWx0aVNvcnQ6IHNvcnRpbmdDb25maWcuZW5hYmxlTXVsdGlTb3J0ID8/IGZhbHNlLFxuICAgICAgICAgIGVuYWJsZVNvcnRpbmdSZW1vdmFsOiBzb3J0aW5nQ29uZmlnLmVuYWJsZVNvcnRpbmdSZW1vdmFsID8/IHRydWUsXG4gICAgICAgICAgbWF4TXVsdGlTb3J0Q29sQ291bnQ6IHNvcnRpbmdDb25maWcubWF4TXVsdGlTb3J0Q29sQ291bnQsXG4gICAgICAgICAgc29ydERlc2NGaXJzdDogc29ydGluZ0NvbmZpZy5zb3J0RGVzY0ZpcnN0ID8/IGZhbHNlLFxuICAgICAgICAgIC8vIFdoZW4gbXVsdGktc29ydCBpcyBlbmFibGVkLCB0cmVhdCBhbGwgY2xpY2tzIGFzIG11bHRpLXNvcnQgZXZlbnRzXG4gICAgICAgICAgaXNNdWx0aVNvcnRFdmVudDogc29ydGluZ0NvbmZpZy5lbmFibGVNdWx0aVNvcnRcbiAgICAgICAgICAgID8gKCkgPT4gdHJ1ZVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgZ2V0U29ydGVkUm93TW9kZWw6ICFpc1NlcnZlck1vZGUgPyBnZXRTb3J0ZWRSb3dNb2RlbCgpIDogdW5kZWZpbmVkLFxuICAgICAgICB9KSxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBiYXNlQ29uZmlnO1xuICAgIH07XG5cbiAgICAvLyBJbmZpbml0ZSBzY3JvbGwgbW9kZSAocmVxdWlyZXMgc2VydmVyIG1vZGUpXG4gICAgaWYgKGlzSW5maW5pdGUpIHtcbiAgICAgIC8vIE5vIHBhZ2luYXRpb24gcm93IG1vZGVsIGZvciBpbmZpbml0ZSBzY3JvbGwgLSBzaW1wbGUgY29uZmlnXG4gICAgICByZXR1cm4gZ2V0QmFzZVRhYmxlQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgLy8gTm8gcGFnaW5hdGlvbiBjb25maWd1cmVkXG4gICAgaWYgKCFwYWdpbmF0aW9uQ29uZmlnKSB7XG4gICAgICByZXR1cm4gZ2V0QmFzZVRhYmxlQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgLy8gQ2xpZW50LXNpZGUgcGFnaW5hdGlvblxuICAgIGlmICghaXNTZXJ2ZXJNb2RlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5nZXRCYXNlVGFibGVDb25maWcoKSxcbiAgICAgICAgZ2V0UGFnaW5hdGlvblJvd01vZGVsOiBnZXRQYWdpbmF0aW9uUm93TW9kZWwoKSxcbiAgICAgICAgaW5pdGlhbFN0YXRlOiB7XG4gICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgcGFnZUluZGV4OiAwLFxuICAgICAgICAgICAgcGFnZVNpemU6IHBhZ2luYXRpb25Db25maWcuaW5pdGlhbFBhZ2VTaXplIHx8IDEwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFNlcnZlci1zaWRlIHBhZ2luYXRpb24gLSBtYW51YWwgcGFnaW5hdGlvbiB3aXRoIHJlYWN0aXZlIHN0YXRlXG4gICAgY29uc3QgYmFzZUNvbmZpZyA9IGdldEJhc2VUYWJsZUNvbmZpZygpO1xuICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy5wYWdpbmF0aW9uU3RhdGUoKS5wYWdlU2l6ZTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uYmFzZUNvbmZpZyxcbiAgICAgIG1hbnVhbFBhZ2luYXRpb246IHRydWUsXG4gICAgICBwYWdlQ291bnQ6XG4gICAgICAgIHBhZ2luYXRpb25Db25maWcudG90YWxQYWdlQ291bnQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gcGFnaW5hdGlvbkNvbmZpZy50b3RhbFBhZ2VDb3VudFxuICAgICAgICAgIDogcGFnaW5hdGlvbkNvbmZpZy50b3RhbFJvd0NvdW50ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IE1hdGguY2VpbChwYWdpbmF0aW9uQ29uZmlnLnRvdGFsUm93Q291bnQgLyBwYWdlU2l6ZSlcbiAgICAgICAgICA6IC0xLFxuICAgICAgc3RhdGU6IHtcbiAgICAgICAgcGFnaW5hdGlvbjogdGhpcy5wYWdpbmF0aW9uU3RhdGUoKSxcbiAgICAgICAgLi4uKGJhc2VDb25maWcuc3RhdGUgJiYgeyBzb3J0aW5nOiBiYXNlQ29uZmlnLnN0YXRlLnNvcnRpbmcgfSksXG4gICAgICB9LFxuICAgICAgb25QYWdpbmF0aW9uQ2hhbmdlOiAoXG4gICAgICAgIHVwZGF0ZXJPclZhbHVlOlxuICAgICAgICAgIHwgUGFnaW5hdGlvblN0YXRlXG4gICAgICAgICAgfCAoKG9sZDogUGFnaW5hdGlvblN0YXRlKSA9PiBQYWdpbmF0aW9uU3RhdGUpLFxuICAgICAgKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1N0YXRlID1cbiAgICAgICAgICB0eXBlb2YgdXBkYXRlck9yVmFsdWUgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgID8gdXBkYXRlck9yVmFsdWUodGhpcy5wYWdpbmF0aW9uU3RhdGUoKSlcbiAgICAgICAgICAgIDogdXBkYXRlck9yVmFsdWU7XG5cbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uU3RhdGUuc2V0KG5ld1N0YXRlKTtcblxuICAgICAgICAvLyBDYWxsIHVzZXIncyBjYWxsYmFjayBmb3Igc2VydmVyLXNpZGUgcGFnaW5hdGlvblxuICAgICAgICBpZiAocGFnaW5hdGlvbkNvbmZpZy5vblBhZ2luYXRpb25DaGFuZ2UpIHtcbiAgICAgICAgICBwYWdpbmF0aW9uQ29uZmlnLm9uUGFnaW5hdGlvbkNoYW5nZSh7XG4gICAgICAgICAgICBwYWdlSW5kZXg6IG5ld1N0YXRlLnBhZ2VJbmRleCxcbiAgICAgICAgICAgIHBhZ2VTaXplOiBuZXdTdGF0ZS5wYWdlU2l6ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9O1xuICB9KTtcblxuICAvKiogUHVibGljIGdldHRlciBmb3IgdGFibGUgaW5zdGFuY2UuICovXG4gIHRhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLnRhYmxlSW5zdGFuY2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgc29ydCBkaXJlY3Rpb24gY2hhbmdlIGZyb20gdGFibGUgaGVhZGVyXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBzb3J0IGRpcmVjdGlvbiBjaGFuZ2UgZXZlbnQgb3IgZGlyZWN0aW9uIHN0cmluZ1xuICAgKiBAcGFyYW0ge29iamVjdH0gaGVhZGVyIFRoZSB0YWJsZSBoZWFkZXIgb2JqZWN0XG4gICAqL1xuICBoYW5kbGVTb3J0RGlyZWN0aW9uQ2hhbmdlZChcbiAgICBldmVudDogRXZlbnQgfCBDdXN0b21FdmVudDxzdHJpbmc+IHwgc3RyaW5nLFxuICAgIGhlYWRlcjoge1xuICAgICAgY29sdW1uOiB7XG4gICAgICAgIGNsZWFyU29ydGluZzogKCkgPT4gdm9pZDtcbiAgICAgICAgdG9nZ2xlU29ydGluZzogKGRlc2M/OiBib29sZWFuLCBtdWx0aT86IGJvb2xlYW4pID0+IHZvaWQ7XG4gICAgICB9O1xuICAgIH0sXG4gICkge1xuICAgIC8vIEV4dHJhY3QgZGlyZWN0aW9uIGZyb20gZXZlbnQgb3IgdXNlIGRpcmVjdGx5IGlmIHN0cmluZ1xuICAgIGxldCBkaXJlY3Rpb246ICdhc2MnIHwgJ2Rlc2MnIHwgJ25vbmUnO1xuXG4gICAgaWYgKHR5cGVvZiBldmVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRpcmVjdGlvbiA9IGV2ZW50IGFzICdhc2MnIHwgJ2Rlc2MnIHwgJ25vbmUnO1xuICAgIH0gZWxzZSBpZiAoJ2RldGFpbCcgaW4gZXZlbnQgJiYgdHlwZW9mIGV2ZW50LmRldGFpbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRpcmVjdGlvbiA9IGV2ZW50LmRldGFpbCBhcyAnYXNjJyB8ICdkZXNjJyB8ICdub25lJztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRmFsbGJhY2sgLSBzaG91bGRuJ3QgaGFwcGVuIGJ1dCBoYW5kbGUgZ3JhY2VmdWxseVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnVW5leHBlY3RlZCBldmVudCB0eXBlIGluIGhhbmRsZVNvcnREaXJlY3Rpb25DaGFuZ2VkOicsXG4gICAgICAgIGV2ZW50LFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzb3J0aW5nQ29uZmlnID0gdGhpcy5zb3J0aW5nKCk7XG5cbiAgICAvLyBDaGVjayBpZiBtdWx0aS1zb3J0IGlzIGVuYWJsZWRcbiAgICBjb25zdCBpc011bHRpU29ydCA9IHNvcnRpbmdDb25maWc/LmVuYWJsZU11bHRpU29ydCA/PyBmYWxzZTtcblxuICAgIGlmIChkaXJlY3Rpb24gPT09ICdub25lJykge1xuICAgICAgLy8gQ2xlYXIgdGhpcyBjb2x1bW4ncyBzb3J0XG4gICAgICBoZWFkZXIuY29sdW1uLmNsZWFyU29ydGluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUb2dnbGUgc29ydCAtIFRhblN0YWNrIHdpbGwgaGFuZGxlIHRoZSBsb2dpYyBpbnRlcm5hbGx5XG4gICAgICBoZWFkZXIuY29sdW1uLnRvZ2dsZVNvcnRpbmcoZGlyZWN0aW9uID09PSAnZGVzYycsIGlzTXVsdGlTb3J0KTtcbiAgICB9XG4gIH1cblxuICAvKiogQnVpbGQgcGFnaW5hdGlvbiBBUEkgZm9yIHRlbXBsYXRlICovXG4gIHBhZ2luYXRpb25BUEkgPSBjb21wdXRlZDxOdkRhdGF0YWJsZVJlbmRlclBhZ2luYXRpb25BUEkgfCBudWxsPigoKSA9PiB7XG4gICAgY29uc3QgcGFnaW5hdGlvbkNvbmZpZyA9IHRoaXMucGFnaW5hdGlvbigpO1xuICAgIGlmICghcGFnaW5hdGlvbkNvbmZpZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY29tcG9uZW50TW9kZSA9IHRoaXMubW9kZSgpO1xuICAgIGNvbnN0IGlzU2VydmVyTW9kZSA9IGNvbXBvbmVudE1vZGUgPT09ICdzZXJ2ZXInO1xuICAgIGNvbnN0IGlzSW5maW5pdGUgPSBwYWdpbmF0aW9uQ29uZmlnLmluZmluaXRlID09PSB0cnVlO1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy50YWJsZSgpO1xuICAgIGNvbnN0IHRhYmxlUGFnaW5hdGlvblN0YXRlID0gdGFibGUuZ2V0U3RhdGUoKS5wYWdpbmF0aW9uO1xuICAgIGNvbnN0IHBhZ2VDb3VudCA9IHRhYmxlLmdldFBhZ2VDb3VudCgpO1xuICAgIGNvbnN0IHJvd0NvdW50ID0gaXNTZXJ2ZXJNb2RlXG4gICAgICA/IHBhZ2luYXRpb25Db25maWcudG90YWxSb3dDb3VudCB8fCB0aGlzLnJvd3MoKS5sZW5ndGhcbiAgICAgIDogdGhpcy5yb3dzKCkubGVuZ3RoO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VJbmRleDogdGFibGVQYWdpbmF0aW9uU3RhdGUucGFnZUluZGV4LFxuICAgICAgcGFnZVNpemU6IHRhYmxlUGFnaW5hdGlvblN0YXRlLnBhZ2VTaXplLFxuICAgICAgcGFnZUNvdW50LFxuICAgICAgcm93Q291bnQsXG4gICAgICBmaXJzdFBhZ2U6ICgpID0+IHRhYmxlLnNldFBhZ2VJbmRleCgwKSxcbiAgICAgIHByZXZpb3VzUGFnZTogKCkgPT4gdGFibGUucHJldmlvdXNQYWdlKCksXG4gICAgICBuZXh0UGFnZTogKCkgPT4gdGFibGUubmV4dFBhZ2UoKSxcbiAgICAgIGxhc3RQYWdlOiAoKSA9PiB0YWJsZS5zZXRQYWdlSW5kZXgocGFnZUNvdW50IC0gMSksXG4gICAgICBzZXRQYWdlSW5kZXg6IChpbmRleDogbnVtYmVyKSA9PiB0YWJsZS5zZXRQYWdlSW5kZXgoaW5kZXgpLFxuICAgICAgc2V0UGFnZVNpemU6IChzaXplOiBudW1iZXIpID0+IHRhYmxlLnNldFBhZ2VTaXplKHNpemUpLFxuICAgICAgY2FuUHJldmlvdXNQYWdlOiB0YWJsZS5nZXRDYW5QcmV2aW91c1BhZ2UoKSxcbiAgICAgIGNhbk5leHRQYWdlOiB0YWJsZS5nZXRDYW5OZXh0UGFnZSgpLFxuICAgICAgaXNMb2FkaW5nOiBpc0luZmluaXRlID8gcGFnaW5hdGlvbkNvbmZpZy5pc0xvYWRpbmcgOiB1bmRlZmluZWQsXG4gICAgICBoYXNNb3JlOiBpc0luZmluaXRlID8gcGFnaW5hdGlvbkNvbmZpZy5oYXNNb3JlIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIFNlZWQgc29ydGluZ1N0YXRlIGZyb20gc29ydFN0YXRlIC8gaW5pdGlhbFNvcnRTdGF0ZSBvbmNlIHRoZSBzb3J0aW5nIGlucHV0XG4gICAgLy8gaXMgYm91bmQuIEZpZWxkIGluaXRpYWxpemVycyBydW4gYmVmb3JlIGlucHV0cyBhcmUgc2V0LCBzbyB3ZSBjYW4ndCBkbyB0aGlzXG4gICAgLy8gaW5saW5lIGluIHRoZSBzaWduYWwgZGVmaW5pdGlvbi5cbiAgICBsZXQgc29ydGluZ1NlZWRlZCA9IGZhbHNlO1xuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKHNvcnRpbmdTZWVkZWQpIHJldHVybjtcbiAgICAgICAgY29uc3Qgc29ydGluZyA9IHRoaXMuc29ydGluZygpO1xuICAgICAgICBpZiAoc29ydGluZyA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgICAgIHNvcnRpbmdTZWVkZWQgPSB0cnVlO1xuICAgICAgICBjb25zdCBzZWVkID0gc29ydGluZy5zb3J0U3RhdGUgPz8gc29ydGluZy5pbml0aWFsU29ydFN0YXRlO1xuICAgICAgICBpZiAoc2VlZCAmJiBzZWVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLnNvcnRpbmdTdGF0ZS5zZXQoc2VlZCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICAgKTtcblxuICAgIC8vIFZhbGlkYXRlIGluZmluaXRlIHNjcm9sbCByZXF1aXJlcyBzZXJ2ZXIgbW9kZVxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBwYWdpbmF0aW9uQ29uZmlnID0gdGhpcy5wYWdpbmF0aW9uKCk7XG4gICAgICBjb25zdCBjb21wb25lbnRNb2RlID0gdGhpcy5tb2RlKCk7XG5cbiAgICAgIGlmIChwYWdpbmF0aW9uQ29uZmlnPy5pbmZpbml0ZSA9PT0gdHJ1ZSAmJiBjb21wb25lbnRNb2RlICE9PSAnc2VydmVyJykge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ1tOdkRhdGF0YWJsZV0gcGFnaW5hdGlvbi5pbmZpbml0ZT10cnVlIHJlcXVpcmVzIG1vZGU9XCJzZXJ2ZXJcIi4gJyArXG4gICAgICAgICAgICAnSW5maW5pdGUgc2Nyb2xsIHJlbGllcyBvbiBzZXJ2ZXItc2lkZSBkYXRhIGxvYWRpbmcuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFNldCB1cCBpbnRlcnNlY3Rpb24gb2JzZXJ2ZXIgZm9yIGluZmluaXRlIHNjcm9sbFxuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgcGFnaW5hdGlvbkNvbmZpZyA9IHRoaXMucGFnaW5hdGlvbigpO1xuICAgICAgICBjb25zdCByb3dzID0gdGhpcy5yb3dzKCk7IC8vIFRyYWNrIHJvd3MgY2hhbmdlc1xuICAgICAgICBjb25zdCBpc0luZmluaXRlID0gcGFnaW5hdGlvbkNvbmZpZz8uaW5maW5pdGUgPT09IHRydWU7XG5cbiAgICAgICAgLy8gQ2xlYW4gdXAgZXhpc3Rpbmcgb2JzZXJ2ZXJcbiAgICAgICAgaWYgKHRoaXMub2JzZXJ2ZXIpIHtcbiAgICAgICAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICB0aGlzLm9ic2VydmVyID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9ubHkgc2V0IHVwIG9ic2VydmVyIGZvciBpbmZpbml0ZSBzY3JvbGwgbW9kZVxuICAgICAgICBpZiAoIWlzSW5maW5pdGUgfHwgcm93cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVc2Ugc2V0VGltZW91dCB0byBlbnN1cmUgRE9NIGlzIHVwZGF0ZWRcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdGhyZXNob2xkID0gcGFnaW5hdGlvbkNvbmZpZy5sb2FkTW9yZVRocmVzaG9sZCB8fCA1MDA7XG5cbiAgICAgICAgICAvLyBGaW5kIHRoZSBsYXN0IHJvdyBlbGVtZW50XG4gICAgICAgICAgY29uc3QgdGFibGVSb3dFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgICAgICAnW2RhdGEtaXMtbGFzdD1cInRydWVcIl0nLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgbGFzdFJvd0VsZW1lbnQgPSB0YWJsZVJvd0VsZW1lbnRzW3RhYmxlUm93RWxlbWVudHMubGVuZ3RoIC0gMV07XG5cbiAgICAgICAgICBpZiAoIWxhc3RSb3dFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5vYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcbiAgICAgICAgICAgIChlbnRyaWVzKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gZW50cmllc1swXTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGVudHJ5LmlzSW50ZXJzZWN0aW5nICYmXG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbkNvbmZpZy5oYXNNb3JlICYmXG4gICAgICAgICAgICAgICAgIXBhZ2luYXRpb25Db25maWcuaXNMb2FkaW5nICYmXG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbkNvbmZpZy5vbkxvYWRNb3JlXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHBhZ2luYXRpb25Db25maWcub25Mb2FkTW9yZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICByb290TWFyZ2luOiBgJHt0aHJlc2hvbGR9cHhgLFxuICAgICAgICAgICAgICByb290OiBudWxsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKGxhc3RSb3dFbGVtZW50KTtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgLy8gU3luYyBjZWxsIHRlbXBsYXRlcyBRdWVyeUxpc3QgdG8gc2lnbmFsXG4gICAgaWYgKHRoaXMuY2VsbFRlbXBsYXRlcykge1xuICAgICAgdGhpcy5jZWxsVGVtcGxhdGVzU2lnbmFsLnNldCh0aGlzLmNlbGxUZW1wbGF0ZXMudG9BcnJheSgpKTtcblxuICAgICAgLy8gU3Vic2NyaWJlIHRvIGNoYW5nZXMgaW4gdGhlIFF1ZXJ5TGlzdFxuICAgICAgdGhpcy5jZWxsVGVtcGxhdGVzLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY2VsbFRlbXBsYXRlcykge1xuICAgICAgICAgIHRoaXMuY2VsbFRlbXBsYXRlc1NpZ25hbC5zZXQodGhpcy5jZWxsVGVtcGxhdGVzLnRvQXJyYXkoKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9ic2VydmVyKSB7XG4gICAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIHRoaXMub2JzZXJ2ZXIgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFVUSUxTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzdHJvbmdseS10eXBlZCBjb2x1bW4gZmFjdG9yeSBmb3IgYSBnaXZlbiByb3cgdHlwZS5cbiAqXG4gKiBAdGVtcGxhdGUgUm93IFRoZSByb3cgZGF0YSB0eXBlIChlLmcuLCBgUHJvZHVjdGApXG4gKlxuICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhIGNvbHVtbiBkZWZpbml0aW9uIGFuZCBpbmZlcnM6XG4gKiAtIGBLYCBhcyB0aGUgZmllbGQga2V5IChga2V5b2YgUm93YClcbiAqIC0gYEZgIGFzIHRoZSByZXR1cm4gdHlwZSBvZiBgdmFsdWVGb3JtYXR0ZXJgIChkZWZhdWx0cyB0byBgUm93W0tdYClcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIERlZmluZSB5b3VyIHJvdyB0eXBlXG4gKiBpbnRlcmZhY2UgUHJvZHVjdCB7XG4gKiAgIG5hbWU6IHN0cmluZztcbiAqICAgcHJpY2U6IG51bWJlcjtcbiAqIH1cbiAqXG4gKiBjb25zdCBjb2wgPSBtYWtlQ29sdW1uPFByb2R1Y3Q+KCk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlQ29sdW1uPFJvdz4oKSB7XG4gIHJldHVybiBmdW5jdGlvbiBkZWZpbmU8SyBleHRlbmRzIGtleW9mIFJvdywgRiA9IFJvd1tLXT4oXG4gICAgY29sOiBOdkRhdGF0YWJsZUNvbHVtbjxSb3csIEssIEY+LFxuICApIHtcbiAgICByZXR1cm4gY29sIGFzIHVua25vd24gYXMgTnZEYXRhdGFibGVDb2x1bW48Um93PjtcbiAgfTtcbn1cblxuZXhwb3J0IHsgZmxleFJlbmRlckNvbXBvbmVudCBhcyBudkRhdGF0YWJsZVJlbmRlckNvbXBvbmVudCB9IGZyb20gJy4vZGF0YXRhYmxlLnV0aWxzJztcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBUWVBFUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmV4cG9ydCB0eXBlIHsgQ2VsbENvbnRleHQgYXMgTnZEYXRhdGFibGVDZWxsQ29udGV4dCB9O1xuXG4vKiogQ29sdW1uIGRlZmluaXRpb24gZm9yIE52RGF0YXRhYmxlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBOdkRhdGF0YWJsZUNvbHVtbjxcbiAgUm93LFxuICBLIGV4dGVuZHMga2V5b2YgUm93ID0ga2V5b2YgUm93LFxuICBGID0gUm93W0tdLFxuPiB7XG4gIC8qKiBGaWVsZCBuYW1lIGZyb20gcm93IGRhdGEgKi9cbiAgZmllbGQ6IEs7XG4gIC8qKiBEaXNwbGF5IG5hbWUgZm9yIGNvbHVtbiBoZWFkZXIgKi9cbiAgaGVhZGVyTmFtZT86IHN0cmluZztcbiAgLyoqIENvbHVtbiB3aWR0aCBpbiBwaXhlbHMgKi9cbiAgd2lkdGg/OiBudW1iZXI7XG4gIC8qKiBXaGV0aGVyIGNvbHVtbiBpcyByZXNpemFibGUgKi9cbiAgcmVzaXphYmxlPzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgY29sdW1uIGlzIGhpZGRlbiAqL1xuICBoaWRkZW4/OiBib29sZWFuO1xuICAvKipcbiAgICogVHJhbnNmb3JtIHRoZSByYXcgdmFsdWUgYmVmb3JlIHJlbmRlcmluZy4gUmVjZWl2ZXMgdGhlIGNlbGwgdmFsdWUgYW5kIGZ1bGwgcm93IG9iamVjdC5cbiAgICogVGhpcyBpcyB1c2VmdWwgZm9yIGZvcm1hdHRpbmcgZGF0ZXMsIGNvbnZlcnRpbmcgYXJyYXlzIHRvIHN0cmluZ3MsIGFjY2Vzc2luZyBuZXN0ZWQgb2JqZWN0cywgZXRjLlxuICAgKiBUaGUgdHJhbnNmb3JtZWQgdmFsdWUgaXMgdGhlbiBwYXNzZWQgdG8gcmVuZGVyQ2VsbCBvciB0ZW1wbGF0ZXMuXG4gICAqL1xuICB2YWx1ZUZvcm1hdHRlcj86IChwYXJhbXM6IE52VGFibGVWYWx1ZUZvcm1hdHRlclBhcmFtczxSb3csIFJvd1tLXSwgSz4pID0+IEY7XG4gIC8qKlxuICAgKiBDdXN0b20gY2VsbCByZW5kZXJlciBmdW5jdGlvbiB0aGF0IGNhbiByZXR1cm4gZWl0aGVyIGEgc3RyaW5nIG9yIEFuZ3VsYXIgVGVtcGxhdGVSZWYuXG4gICAqIFVzZSBgJGltcGxpY2l0YCBpbiB5b3VyIHRlbXBsYXRlIHRvIHJlY2VpdmUgdGhlIENlbGxDb250ZXh0LlxuICAgKiBOb3RlOiBJZiB2YWx1ZUZvcm1hdHRlciBpcyBwcm92aWRlZCwgcmVuZGVyQ2VsbCByZWNlaXZlcyB0aGUgZm9ybWF0dGVkIHZhbHVlLlxuICAgKi9cbiAgcmVuZGVyQ2VsbD86IChjb250ZXh0OiBDZWxsQ29udGV4dDxSb3csIEY+KSA9PlxuICAgIHwgc3RyaW5nXG4gICAgfCBGbGV4UmVuZGVyQ29tcG9uZW50XG4gICAgfCBUZW1wbGF0ZVJlZjx7XG4gICAgICAgICRpbXBsaWNpdDogQ2VsbENvbnRleHQ8Um93LCBGPjtcbiAgICAgIH0+O1xuICAvKiogRW5hYmxlL2Rpc2FibGUgc29ydGluZyBmb3IgdGhpcyBjb2x1bW4gKi9cbiAgc29ydGFibGU/OiBib29sZWFuO1xuICAvKiogQ3VzdG9tIHNvcnRpbmcgZnVuY3Rpb24gb3IgYnVpbHQtaW4gZnVuY3Rpb24gbmFtZSAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBzb3J0aW5nRm4/OiAoKHJvd0E6IGFueSwgcm93QjogYW55LCBjb2x1bW5JZDogc3RyaW5nKSA9PiBudW1iZXIpIHwgc3RyaW5nO1xuICAvKiogU3RhcnQgd2l0aCBkZXNjZW5kaW5nIHNvcnQgZm9yIHRoaXMgY29sdW1uICovXG4gIHNvcnREZXNjRmlyc3Q/OiBib29sZWFuO1xuICAvKiogSW52ZXJ0IHRoZSBzb3J0IG9yZGVyICh1c2VmdWwgZm9yIHJhbmtpbmdzKSAqL1xuICBpbnZlcnRTb3J0aW5nPzogYm9vbGVhbjtcbiAgLyoqIFdoZXJlIHRvIHBsYWNlIHVuZGVmaW5lZCB2YWx1ZXMgaW4gc29ydCAqL1xuICBzb3J0VW5kZWZpbmVkPzogJ2ZpcnN0JyB8ICdsYXN0JyB8IGZhbHNlIHwgLTEgfCAxO1xufVxuXG4vKiogUGFyYW1ldGVycyBmb3IgY3VzdG9tIGNlbGwgcmVuZGVyaW5nIGZ1bmN0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBOdlRhYmxlUmVuZGVyQ2VsbFBhcmFtczxSb3csIFZhbHVlLCBGaWVsZD4ge1xuICAvKiogQ2VsbCB2YWx1ZSAqL1xuICB2YWx1ZTogVmFsdWUgfCBOb0luZmVyPFZhbHVlPjtcbiAgLyoqIFJvdyBkYXRhICovXG4gIHJvdzogUm93O1xuICAvKiogRmllbGQgbmFtZSAqL1xuICBmaWVsZDogRmllbGQ7XG4gIC8qKiBSb3cgaW5kZXggKi9cbiAgcm93SW5kZXg6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB2YWx1ZUZvcm1hdHRlciBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOdlRhYmxlVmFsdWVGb3JtYXR0ZXJQYXJhbXM8Um93LCBWYWx1ZSwgRmllbGQ+IHtcbiAgLyoqIENlbGwgb3JpZ2luYWwgdmFsdWUgKi9cbiAgdmFsdWU6IFZhbHVlO1xuICAvKiogUm93IGRhdGEgKi9cbiAgcm93OiBSb3c7XG4gIC8qKiBGaWVsZCBuYW1lICovXG4gIGZpZWxkOiBGaWVsZDtcbn1cblxuLyoqXG4gKiBQYWdpbmF0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIE52RGF0YXRhYmxlLlxuICogVGhlIHBhZ2luYXRpb24gYmVoYXZpb3IgKGNsaWVudCB2cyBzZXJ2ZXIpIGlzIGRlcml2ZWQgZnJvbSB0aGUgdG9wLWxldmVsIGBtb2RlYCBwcm9wLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE52RGF0YXRhYmxlUGFnaW5hdGlvbkNvbmZpZyB7XG4gIC8qKlxuICAgKiBFbmFibGUgaW5maW5pdGUgc2Nyb2xsIG1vZGUuXG4gICAqIFdoZW4gdHJ1ZSwgcmVxdWlyZXMgdGhlIGNvbXBvbmVudCdzIHRvcC1sZXZlbCBgbW9kZWAgdG8gYmUgc2V0IHRvICdzZXJ2ZXInLlxuICAgKiBEYXRhIGlzIGxvYWRlZCBpbmNyZW1lbnRhbGx5IGFzIHRoZSB1c2VyIHNjcm9sbHMuXG4gICAqL1xuICBpbmZpbml0ZT86IGJvb2xlYW47XG4gIC8qKiBJbml0aWFsIHBhZ2Ugc2l6ZSAoZGVmYXVsdDogMTApICovXG4gIGluaXRpYWxQYWdlU2l6ZT86IG51bWJlcjtcbiAgLyoqIEF2YWlsYWJsZSBwYWdlIHNpemUgb3B0aW9ucyAoZGVmYXVsdDogWzEwLCAyMCwgNTAsIDEwMF0pICovXG4gIHBhZ2VTaXplT3B0aW9ucz86IG51bWJlcltdO1xuICAvKiogQ3VzdG9tIGxhYmVscyBmb3IgcGFnaW5hdGlvbiBjb21wb25lbnQgKGkxOG4gc3VwcG9ydCkgKi9cbiAgbGFiZWxzPzoge1xuICAgIC8qKiBMYWJlbCB0ZW1wbGF0ZSBmb3IgdGhlIHBhZ2UgaW5kaWNhdG9yLiBTdXBwb3J0cyBwbGFjZWhvbGRlcnM6IHtwYWdlSW5kZXh9LCB7cGFnZUNvdW50fSAqL1xuICAgIHBhZ2U/OiBzdHJpbmc7XG4gICAgLyoqIExhYmVsIHRlbXBsYXRlIGZvciB0aGUgdG90YWwgcm93IGNvdW50IGRpc3BsYXkuIFN1cHBvcnRzIHBsYWNlaG9sZGVyOiB7cm93Q291bnR9ICovXG4gICAgdG90YWw/OiBzdHJpbmc7XG4gICAgLyoqIExhYmVsIHRlbXBsYXRlIGZvciB0aGUgcGFnZSBzaXplIGRyb3Bkb3duIG9wdGlvbnMuIFN1cHBvcnRzIHBsYWNlaG9sZGVyOiB7cGFnZVNpemV9ICovXG4gICAgcGFnZVNpemVPcHRpb24/OiBzdHJpbmc7XG4gIH07XG5cbiAgLy8gU2VydmVyLXNpZGUgKGJ1dHRvbnMpIHNwZWNpZmljIHByb3BlcnRpZXNcbiAgLyoqIFRvdGFsIG51bWJlciBvZiByb3dzIChmb3Igc2VydmVyLXNpZGUgcGFnaW5hdGlvbikgKi9cbiAgdG90YWxSb3dDb3VudD86IG51bWJlcjtcbiAgLyoqIFRvdGFsIG51bWJlciBvZiBwYWdlcyAoZm9yIHNlcnZlci1zaWRlIHBhZ2luYXRpb24pICovXG4gIHRvdGFsUGFnZUNvdW50PzogbnVtYmVyO1xuICAvKiogQ2FsbGJhY2sgd2hlbiBwYWdpbmF0aW9uIHN0YXRlIGNoYW5nZXMgKGZvciBzZXJ2ZXItc2lkZSBwYWdpbmF0aW9uKSAqL1xuICBvblBhZ2luYXRpb25DaGFuZ2U/OiAoc3RhdGU6IHtcbiAgICAvKiogQ3VycmVudCBwYWdlIGluZGV4ICovXG4gICAgcGFnZUluZGV4OiBudW1iZXI7XG4gICAgLyoqIEN1cnJlbnQgcGFnZSBzaXplICovXG4gICAgcGFnZVNpemU6IG51bWJlcjtcbiAgfSkgPT4gdm9pZDtcblxuICAvLyBJbmZpbml0ZSBzY3JvbGwgc3BlY2lmaWMgcHJvcGVydGllcyAodXNlZCB3aGVuIGluZmluaXRlOiB0cnVlKVxuICAvKiogV2hldGhlciB0aGVyZSBhcmUgbW9yZSBpdGVtcyB0byBsb2FkIChmb3IgaW5maW5pdGUgc2Nyb2xsKSAqL1xuICBoYXNNb3JlPzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgZGF0YSBpcyBjdXJyZW50bHkgbG9hZGluZyAoZm9yIGluZmluaXRlIHNjcm9sbCkgKi9cbiAgaXNMb2FkaW5nPzogYm9vbGVhbjtcbiAgLyoqIERpc3RhbmNlIGZyb20gYm90dG9tIGluIHBpeGVscyB0byB0cmlnZ2VyIGxvYWQgKGRlZmF1bHQ6IDUwMCkgKi9cbiAgbG9hZE1vcmVUaHJlc2hvbGQ/OiBudW1iZXI7XG4gIC8qKiBDYWxsYmFjayB0byBsb2FkIG1vcmUgZGF0YSAoZm9yIGluZmluaXRlIHNjcm9sbCkgKi9cbiAgb25Mb2FkTW9yZT86ICgpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogQVBJIGV4cG9zZWQgdG8gcGFnaW5hdGlvbiB0ZW1wbGF0ZSBmb3IgYnVpbGRpbmcgY3VzdG9tIHBhZ2luYXRpb24gVUkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTnZEYXRhdGFibGVSZW5kZXJQYWdpbmF0aW9uQVBJIHtcbiAgLyoqIEN1cnJlbnQgcGFnZSBpbmRleCAoemVyby1iYXNlZCkgKi9cbiAgcGFnZUluZGV4OiBudW1iZXI7XG4gIC8qKiBDdXJyZW50IHBhZ2Ugc2l6ZSAqL1xuICBwYWdlU2l6ZTogbnVtYmVyO1xuICAvKiogVG90YWwgbnVtYmVyIG9mIHBhZ2VzICovXG4gIHBhZ2VDb3VudDogbnVtYmVyO1xuICAvKiogVG90YWwgbnVtYmVyIG9mIHJvd3MgKi9cbiAgcm93Q291bnQ6IG51bWJlcjtcbiAgLyoqIE5hdmlnYXRlIHRvIGZpcnN0IHBhZ2UgKi9cbiAgZmlyc3RQYWdlOiAoKSA9PiB2b2lkO1xuICAvKiogTmF2aWdhdGUgdG8gcHJldmlvdXMgcGFnZSAqL1xuICBwcmV2aW91c1BhZ2U6ICgpID0+IHZvaWQ7XG4gIC8qKiBOYXZpZ2F0ZSB0byBuZXh0IHBhZ2UgKi9cbiAgbmV4dFBhZ2U6ICgpID0+IHZvaWQ7XG4gIC8qKiBOYXZpZ2F0ZSB0byBsYXN0IHBhZ2UgKi9cbiAgbGFzdFBhZ2U6ICgpID0+IHZvaWQ7XG4gIC8qKiBOYXZpZ2F0ZSB0byBzcGVjaWZpYyBwYWdlIGJ5IGluZGV4ICovXG4gIHNldFBhZ2VJbmRleDogKGluZGV4OiBudW1iZXIpID0+IHZvaWQ7XG4gIC8qKiBDaGFuZ2UgcGFnZSBzaXplICovXG4gIHNldFBhZ2VTaXplOiAoc2l6ZTogbnVtYmVyKSA9PiB2b2lkO1xuICAvKiogV2hldGhlciBwcmV2aW91cyBwYWdlIGlzIGF2YWlsYWJsZSAqL1xuICBjYW5QcmV2aW91c1BhZ2U6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIG5leHQgcGFnZSBpcyBhdmFpbGFibGUgKi9cbiAgY2FuTmV4dFBhZ2U6IGJvb2xlYW47XG4gIC8qKiBMb2FkaW5nIHN0YXRlIChvbmx5IGZvciBpbmZpbml0ZSBzY3JvbGwpICovXG4gIGlzTG9hZGluZz86IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIG1vcmUgaXRlbXMgYXJlIGF2YWlsYWJsZSAob25seSBmb3IgaW5maW5pdGUgc2Nyb2xsKSAqL1xuICBoYXNNb3JlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBTb3J0aW5nIGNvbmZpZ3VyYXRpb24gZm9yIE52RGF0YXRhYmxlLlxuICogVGhlIHNvcnRpbmcgbW9kZSAoY2xpZW50IHZzIHNlcnZlcikgaXMgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnQncyB0b3AtbGV2ZWwgYG1vZGVgIHByb3AuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTnZEYXRhdGFibGVTb3J0aW5nQ29uZmlnIHtcbiAgLyoqIEVuYWJsZSBtdWx0aS1jb2x1bW4gc29ydGluZyB3aXRoIFNoaWZ0K0NsaWNrICovXG4gIGVuYWJsZU11bHRpU29ydD86IGJvb2xlYW47XG4gIC8qKiBBbGxvdyBjeWNsaW5nIHRocm91Z2ggdG8gXCJubyBzb3J0XCIgc3RhdGUgKi9cbiAgZW5hYmxlU29ydGluZ1JlbW92YWw/OiBib29sZWFuO1xuICAvKiogTWF4aW11bSBudW1iZXIgb2YgY29sdW1ucyBmb3IgbXVsdGktc29ydCAqL1xuICBtYXhNdWx0aVNvcnRDb2xDb3VudD86IG51bWJlcjtcbiAgLyoqIFN0YXJ0IHdpdGggZGVzY2VuZGluZyBzb3J0IGFzIGZpcnN0IHRvZ2dsZSBzdGF0ZSAqL1xuICBzb3J0RGVzY0ZpcnN0PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluaXRpYWwgc29ydCBzdGF0ZSAodW5jb250cm9sbGVkKS4gQXBwbGllZCBvbiBmaXJzdCByZW5kZXIgb25seTsgdGhlIHVzZXIgY2FuIHRoZW5cbiAgICogZnJlZWx5IGNoYW5nZSBzb3J0aW5nIHZpYSBoZWFkZXIgY2xpY2tzLiBJZ25vcmVkIHdoZW4gYHNvcnRTdGF0ZWAgaXMgYWxzbyBwcm92aWRlZC5cbiAgICovXG4gIGluaXRpYWxTb3J0U3RhdGU/OiBTb3J0aW5nU3RhdGU7XG4gIC8qKiBDb250cm9sbGVkIHNvcnQgc3RhdGUgKGZvciBzZXJ2ZXItc2lkZSBzb3J0aW5nKSAqL1xuICBzb3J0U3RhdGU/OiBTb3J0aW5nU3RhdGU7XG4gIC8qKiBDYWxsYmFjayB3aGVuIHNvcnRpbmcgY2hhbmdlcyAoZm9yIHNlcnZlci1zaWRlIHNvcnRpbmcpICovXG4gIG9uU29ydGluZ0NoYW5nZT86IChzb3J0aW5nOiBTb3J0aW5nU3RhdGUpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogU29ydGluZyBzdGF0ZSB0eXBlIC0gYXJyYXkgb2Ygc29ydCBkZXNjcmlwdG9yc1xuICovXG5leHBvcnQgdHlwZSBOdkRhdGFUYWJsZVNvcnRpbmdTdGF0ZSA9IFNvcnRpbmdTdGF0ZTtcbiJdfQ==
@@ -20,7 +20,7 @@ export function provideNovaComponents() {
20
20
  }
21
21
  export class NovaComponentsModule {
22
22
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NovaComponentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
23
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: NovaComponentsModule, declarations: [i1.NvAccordion, i1.NvAccordionItem, i1.NvAlert, i1.NvAvatar, i1.NvBadge, i1.NvBreadcrumb, i1.NvBreadcrumbs, i1.NvButton, i1.NvButtongroup, i1.NvCalendar, i1.NvCol, i1.NvDatagrid, i1.NvDatagridcolumn, i1.NvDatetest, i1.NvDatetimetest, i1.NvDialog, i1.NvDialogfooter, i1.NvDialogheader, i1.NvDrawer, i1.NvDrawerfooter, i1.NvDrawerheader, i1.NvFieldcheckbox, i1.NvFielddate, i1.NvFielddaterange, i1.NvFielddropdown, i1.NvFielddropdownitem, i1.NvFielddropdownitemcheck, i1.NvFieldmultiselect, i1.NvFieldnumber, i1.NvFieldpassword, i1.NvFieldradio, i1.NvFieldselect, i1.NvFieldslider, i1.NvFieldtext, i1.NvFieldtextarea, i1.NvFieldtime, i1.NvIcon, i1.NvIconbutton, i1.NvLoader, i1.NvMenu, i1.NvMenuitem, i1.NvNotification, i1.NvNotificationBullet, i1.NvNotificationcontainer, i1.NvPaginationNav, i1.NvPaginationtable, i1.NvPopover, i1.NvRow, i1.NvSidebar, i1.NvSidebarcontent, i1.NvSidebardivider, i1.NvSidebarfooter, i1.NvSidebargroup, i1.NvSidebarheader, i1.NvSidebarlogo, i1.NvSidebarnavitem, i1.NvSidebarnavsubitem, i1.NvSplit, i1.NvStack, i1.NvTable, i1.NvTableheader, i1.NvTimetest, i1.NvToggle, i1.NvTogglebutton, i1.NvTogglebuttongroup, i1.NvTooltip], imports: [NvDatatable], exports: [i1.NvAccordion, i1.NvAccordionItem, i1.NvAlert, i1.NvAvatar, i1.NvBadge, i1.NvBreadcrumb, i1.NvBreadcrumbs, i1.NvButton, i1.NvButtongroup, i1.NvCalendar, i1.NvCol, i1.NvDatagrid, i1.NvDatagridcolumn, i1.NvDatetest, i1.NvDatetimetest, i1.NvDialog, i1.NvDialogfooter, i1.NvDialogheader, i1.NvDrawer, i1.NvDrawerfooter, i1.NvDrawerheader, i1.NvFieldcheckbox, i1.NvFielddate, i1.NvFielddaterange, i1.NvFielddropdown, i1.NvFielddropdownitem, i1.NvFielddropdownitemcheck, i1.NvFieldmultiselect, i1.NvFieldnumber, i1.NvFieldpassword, i1.NvFieldradio, i1.NvFieldselect, i1.NvFieldslider, i1.NvFieldtext, i1.NvFieldtextarea, i1.NvFieldtime, i1.NvIcon, i1.NvIconbutton, i1.NvLoader, i1.NvMenu, i1.NvMenuitem, i1.NvNotification, i1.NvNotificationBullet, i1.NvNotificationcontainer, i1.NvPaginationNav, i1.NvPaginationtable, i1.NvPopover, i1.NvRow, i1.NvSidebar, i1.NvSidebarcontent, i1.NvSidebardivider, i1.NvSidebarfooter, i1.NvSidebargroup, i1.NvSidebarheader, i1.NvSidebarlogo, i1.NvSidebarnavitem, i1.NvSidebarnavsubitem, i1.NvSplit, i1.NvStack, i1.NvTable, i1.NvTableheader, i1.NvTimetest, i1.NvToggle, i1.NvTogglebutton, i1.NvTogglebuttongroup, i1.NvTooltip, NvDatatable] }); }
23
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: NovaComponentsModule, declarations: [i1.NvAccordion, i1.NvAccordionItem, i1.NvAlert, i1.NvAvatar, i1.NvBadge, i1.NvBreadcrumb, i1.NvBreadcrumbs, i1.NvButton, i1.NvButtongroup, i1.NvCalendar, i1.NvCol, i1.NvDatagrid, i1.NvDatagridcolumn, i1.NvDatetest, i1.NvDatetimetest, i1.NvDialog, i1.NvDialogfooter, i1.NvDialogheader, i1.NvDrawer, i1.NvDrawerfooter, i1.NvDrawerheader, i1.NvFieldcheckbox, i1.NvFielddate, i1.NvFielddaterange, i1.NvFielddropdown, i1.NvFielddropdownitem, i1.NvFielddropdownitemcheck, i1.NvFieldmultiselect, i1.NvFieldnumber, i1.NvFieldpassword, i1.NvFieldradio, i1.NvFieldselect, i1.NvFieldslider, i1.NvFieldtext, i1.NvFieldtextarea, i1.NvFieldtime, i1.NvIcon, i1.NvIconbutton, i1.NvLoader, i1.NvMenu, i1.NvMenuitem, i1.NvNotification, i1.NvNotificationBullet, i1.NvNotificationcontainer, i1.NvPaginationNav, i1.NvPaginationtable, i1.NvPopover, i1.NvRow, i1.NvSidebar, i1.NvSidebarcontent, i1.NvSidebardivider, i1.NvSidebarfooter, i1.NvSidebargroup, i1.NvSidebarheader, i1.NvSidebarlogo, i1.NvSidebarnavitem, i1.NvSidebarnavsubitem, i1.NvSplit, i1.NvStack, i1.NvStatusindicator, i1.NvTable, i1.NvTableheader, i1.NvTag, i1.NvTimetest, i1.NvToggle, i1.NvTogglebutton, i1.NvTogglebuttongroup, i1.NvTooltip], imports: [NvDatatable], exports: [i1.NvAccordion, i1.NvAccordionItem, i1.NvAlert, i1.NvAvatar, i1.NvBadge, i1.NvBreadcrumb, i1.NvBreadcrumbs, i1.NvButton, i1.NvButtongroup, i1.NvCalendar, i1.NvCol, i1.NvDatagrid, i1.NvDatagridcolumn, i1.NvDatetest, i1.NvDatetimetest, i1.NvDialog, i1.NvDialogfooter, i1.NvDialogheader, i1.NvDrawer, i1.NvDrawerfooter, i1.NvDrawerheader, i1.NvFieldcheckbox, i1.NvFielddate, i1.NvFielddaterange, i1.NvFielddropdown, i1.NvFielddropdownitem, i1.NvFielddropdownitemcheck, i1.NvFieldmultiselect, i1.NvFieldnumber, i1.NvFieldpassword, i1.NvFieldradio, i1.NvFieldselect, i1.NvFieldslider, i1.NvFieldtext, i1.NvFieldtextarea, i1.NvFieldtime, i1.NvIcon, i1.NvIconbutton, i1.NvLoader, i1.NvMenu, i1.NvMenuitem, i1.NvNotification, i1.NvNotificationBullet, i1.NvNotificationcontainer, i1.NvPaginationNav, i1.NvPaginationtable, i1.NvPopover, i1.NvRow, i1.NvSidebar, i1.NvSidebarcontent, i1.NvSidebardivider, i1.NvSidebarfooter, i1.NvSidebargroup, i1.NvSidebarheader, i1.NvSidebarlogo, i1.NvSidebarnavitem, i1.NvSidebarnavsubitem, i1.NvSplit, i1.NvStack, i1.NvStatusindicator, i1.NvTable, i1.NvTableheader, i1.NvTag, i1.NvTimetest, i1.NvToggle, i1.NvTogglebutton, i1.NvTogglebuttongroup, i1.NvTooltip, NvDatatable] }); }
24
24
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NovaComponentsModule, providers: [provideNovaComponents()], imports: [NvDatatable] }); }
25
25
  }
26
26
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NovaComponentsModule, decorators: [{
@@ -44,4 +44,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
44
44
  exports: [...VALUE_ACCESSORS],
45
45
  }]
46
46
  }] });
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm92YS1jb21wb25lbnRzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25vdmEtY29tcG9uZW50cy9zcmMvbGliL25vdmEtY29tcG9uZW50cy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXJGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtDQUErQyxDQUFDOzs7O0FBRWhGOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCO0lBQ25DLE9BQU87UUFDTCxPQUFPLEVBQUUsZUFBZTtRQUN4QixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsb0JBQW9CO1FBQ3RDLEtBQUssRUFBRSxJQUFJO0tBQ1osQ0FBQztBQUNKLENBQUM7QUFRRCxNQUFNLE9BQU8sb0JBQW9COytHQUFwQixvQkFBb0I7Z0hBQXBCLG9CQUFvQiw4cENBTHJCLFdBQVcsK29DQUVJLFdBQVc7Z0hBR3pCLG9CQUFvQixhQUZwQixDQUFDLHFCQUFxQixFQUFFLENBQUMsWUFIMUIsV0FBVzs7NEZBS1Ysb0JBQW9CO2tCQU5oQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQztvQkFDdEIsWUFBWSxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUM7b0JBQzdCLE9BQU8sRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLFdBQVcsQ0FBQztvQkFDckMsU0FBUyxFQUFFLENBQUMscUJBQXFCLEVBQUUsQ0FBQztpQkFDckM7O0FBT0QsTUFBTSxPQUFPLGlDQUFpQzsrR0FBakMsaUNBQWlDO2dIQUFqQyxpQ0FBaUM7Z0hBQWpDLGlDQUFpQzs7NEZBQWpDLGlDQUFpQztrQkFKN0MsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQztvQkFDbEMsT0FBTyxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUM7aUJBQzlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVBQX0lOSVRJQUxJWkVSLCBOZ01vZHVsZSwgdHlwZSBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVmaW5lQ3VzdG9tRWxlbWVudHMgfSBmcm9tICdAbm92YS1kZXNpZ24tc3lzdGVtL25vdmEtd2ViY29tcG9uZW50cy9sb2FkZXInO1xuXG5pbXBvcnQgeyBESVJFQ1RJVkVTIH0gZnJvbSAnLi9zdGVuY2lsLWdlbmVyYXRlZCc7XG5pbXBvcnQgeyBOdkRhdGF0YWJsZSB9IGZyb20gJy4vY29tcG9uZW50cy9pbmRleCc7XG5pbXBvcnQgeyBWQUxVRV9BQ0NFU1NPUlMgfSBmcm9tICcuL3N0ZW5jaWwtZ2VuZXJhdGVkL2NvbXBvbmVudC12YWx1ZS1hY2Nlc3NvcnMnO1xuXG4vKipcbiAqIEluaXRpYWxpemUgdGhlIE5vdmEgQ29tcG9uZW50c1xuICpcbiAqIEByZXR1cm5zIHtQcm92aWRlcn0gLSBUaGUgcHJvdmlkZXIgdG8gYmUgdXNlZCBmb3Igbm92YSBjb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlTm92YUNvbXBvbmVudHMoKTogUHJvdmlkZXIge1xuICByZXR1cm4ge1xuICAgIHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcbiAgICB1c2VGYWN0b3J5OiAoKSA9PiBkZWZpbmVDdXN0b21FbGVtZW50cyxcbiAgICBtdWx0aTogdHJ1ZSxcbiAgfTtcbn1cblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW052RGF0YXRhYmxlXSxcbiAgZGVjbGFyYXRpb25zOiBbLi4uRElSRUNUSVZFU10sXG4gIGV4cG9ydHM6IFsuLi5ESVJFQ1RJVkVTLCBOdkRhdGF0YWJsZV0sXG4gIHByb3ZpZGVyczogW3Byb3ZpZGVOb3ZhQ29tcG9uZW50cygpXSxcbn0pXG5leHBvcnQgY2xhc3MgTm92YUNvbXBvbmVudHNNb2R1bGUge31cblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbLi4uVkFMVUVfQUNDRVNTT1JTXSxcbiAgZXhwb3J0czogWy4uLlZBTFVFX0FDQ0VTU09SU10sXG59KVxuZXhwb3J0IGNsYXNzIE5vdmFDb21wb25lbnRzVmFsdWVBY2Nlc3Nvck1vZHVsZSB7fVxuIl19
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm92YS1jb21wb25lbnRzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25vdmEtY29tcG9uZW50cy9zcmMvbGliL25vdmEtY29tcG9uZW50cy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXJGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtDQUErQyxDQUFDOzs7O0FBRWhGOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCO0lBQ25DLE9BQU87UUFDTCxPQUFPLEVBQUUsZUFBZTtRQUN4QixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsb0JBQW9CO1FBQ3RDLEtBQUssRUFBRSxJQUFJO0tBQ1osQ0FBQztBQUNKLENBQUM7QUFRRCxNQUFNLE9BQU8sb0JBQW9COytHQUFwQixvQkFBb0I7Z0hBQXBCLG9CQUFvQiw4ckNBTHJCLFdBQVcsK3FDQUVJLFdBQVc7Z0hBR3pCLG9CQUFvQixhQUZwQixDQUFDLHFCQUFxQixFQUFFLENBQUMsWUFIMUIsV0FBVzs7NEZBS1Ysb0JBQW9CO2tCQU5oQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQztvQkFDdEIsWUFBWSxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUM7b0JBQzdCLE9BQU8sRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLFdBQVcsQ0FBQztvQkFDckMsU0FBUyxFQUFFLENBQUMscUJBQXFCLEVBQUUsQ0FBQztpQkFDckM7O0FBT0QsTUFBTSxPQUFPLGlDQUFpQzsrR0FBakMsaUNBQWlDO2dIQUFqQyxpQ0FBaUM7Z0hBQWpDLGlDQUFpQzs7NEZBQWpDLGlDQUFpQztrQkFKN0MsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQztvQkFDbEMsT0FBTyxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUM7aUJBQzlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVBQX0lOSVRJQUxJWkVSLCBOZ01vZHVsZSwgdHlwZSBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVmaW5lQ3VzdG9tRWxlbWVudHMgfSBmcm9tICdAbm92YS1kZXNpZ24tc3lzdGVtL25vdmEtd2ViY29tcG9uZW50cy9sb2FkZXInO1xuXG5pbXBvcnQgeyBESVJFQ1RJVkVTIH0gZnJvbSAnLi9zdGVuY2lsLWdlbmVyYXRlZCc7XG5pbXBvcnQgeyBOdkRhdGF0YWJsZSB9IGZyb20gJy4vY29tcG9uZW50cy9pbmRleCc7XG5pbXBvcnQgeyBWQUxVRV9BQ0NFU1NPUlMgfSBmcm9tICcuL3N0ZW5jaWwtZ2VuZXJhdGVkL2NvbXBvbmVudC12YWx1ZS1hY2Nlc3NvcnMnO1xuXG4vKipcbiAqIEluaXRpYWxpemUgdGhlIE5vdmEgQ29tcG9uZW50c1xuICpcbiAqIEByZXR1cm5zIHtQcm92aWRlcn0gLSBUaGUgcHJvdmlkZXIgdG8gYmUgdXNlZCBmb3Igbm92YSBjb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlTm92YUNvbXBvbmVudHMoKTogUHJvdmlkZXIge1xuICByZXR1cm4ge1xuICAgIHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcbiAgICB1c2VGYWN0b3J5OiAoKSA9PiBkZWZpbmVDdXN0b21FbGVtZW50cyxcbiAgICBtdWx0aTogdHJ1ZSxcbiAgfTtcbn1cblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW052RGF0YXRhYmxlXSxcbiAgZGVjbGFyYXRpb25zOiBbLi4uRElSRUNUSVZFU10sXG4gIGV4cG9ydHM6IFsuLi5ESVJFQ1RJVkVTLCBOdkRhdGF0YWJsZV0sXG4gIHByb3ZpZGVyczogW3Byb3ZpZGVOb3ZhQ29tcG9uZW50cygpXSxcbn0pXG5leHBvcnQgY2xhc3MgTm92YUNvbXBvbmVudHNNb2R1bGUge31cblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbLi4uVkFMVUVfQUNDRVNTT1JTXSxcbiAgZXhwb3J0czogWy4uLlZBTFVFX0FDQ0VTU09SU10sXG59KVxuZXhwb3J0IGNsYXNzIE5vdmFDb21wb25lbnRzVmFsdWVBY2Nlc3Nvck1vZHVsZSB7fVxuIl19